乾貨#Java常見面試問題匯總

2021-02-20 大廠實習就業直通車

JAVA是一門面向對象的程式語言,也是目前最為流行的、市場需求最為廣泛的程式語言。據不完全統計,在全國各網際網路企業就職的「程序猿」中,約有1/3都是JAVA編程相關。那麼,在JAVA如此盛行的時候,一般面試官都會考察我們哪些專業問題呢?筆者為計劃從事JAVA編程相關崗位的你們總結了一些面試官常問到的問題,希望給大家做個參考。

①. newFixedThreadPool(int nThreads)
創建一個固定長度的線程池,每當提交一個任務就創建一個線程,直到達到線程池的最大數量,這時線程規模將不再變化,當線程發生未預期的錯誤而結束時,線程池會補充一個新的線程。
②. newCachedThreadPool()
創建一個可緩存的線程池,如果線程池的規模超過了處理需求,將自動回收空閒線程,而當需求增加時,則可以自動添加新線程,線程池的規模不存在任何限制。
③. newSingleThreadExecutor()
這是一個單線程的Executor,它創建單個工作線程來執行任務,如果這個線程異常結束,會創建一個新的來替代它;它的特點是能確保依照任務在隊列中的順序來串行執行。
④. newScheduledThreadPool(intcorePoolSize)
創建了一個固定長度的線程池,而且以延遲或定時的方式來執行任務,類似於Timer。Q:Synchronized 和 Lock 的區別原始構成
Synchronized 是關鍵字,屬於JVM層面,底層是通過 monitorenter 和 monitorexit 完成,依賴於 monitor 對象來完成。由於 wait/notify 方法也依賴於 monitor 對象,因此只有在同步塊或方法中才能調用這些方法。
Lock 是 java.util.concurrent.locks.lock 包下的,是 api層面的鎖。
使用方法
Synchronized 不需要用戶手動釋放鎖,代碼完成之後系統自動讓線程釋放鎖
ReentrantLock 需要用戶手動釋放鎖,沒有手動釋放可能導致死鎖。
等待是否可以中斷
Synchronized 不可中斷,除非拋出異常或者正常運行完成
ReentrantLock 可以中斷。一種是通過 tryLock(long timeout, TimeUnit unit),另一種是lockInterruptibly()放代碼塊中,調用interrupt()方法進行中斷。
加鎖是否公平
synchronized 是非公平鎖
ReentrantLock 默認非公平鎖,可以在構造方法傳入 boolean 值,true 代表公平鎖,false 代表非公平鎖。
鎖綁定多個 Condition
Synchronized 只有一個阻塞隊列,只能隨機喚醒一個線程或者喚醒全部線程。
ReentrantLock 用來實現分組喚醒,可以精確喚醒。Q:String s = new String("xyz");創建了幾個StringObject?是否可以繼承String類?兩個或一個都有可能,」xyz」對應一個對象,這個對象放在字符串常量緩衝區,常量」xyz」不管出現多少遍,都是緩衝區中的那一個。new String每寫一遍,就創建一個新的對象 ,它使用常量」xyz」對象的內容來創建出一個新String對象。如果以前就用過』xyz』,那麼這裡就不會創建」xyz」了,直接從緩衝區拿,這時創建了一個StringObject;但如果以前沒有用過"xyz",那麼此時就會創建一個對象並放入緩衝區,這種情況它創建兩個對象。
至於String類是否繼承,答案是否定的,因為 String默認final修飾,是不可繼承的 。Q:HashSet的使用和原理(hashCode()和equals())哈希表的查詢速度特別快,時間複雜度為O(1)。
HashMap、Hashtable、HashSet這些集合採用的是哈希表結構,需要用到hashCode哈希碼,hashCode是一個整數值。
系統類已經覆蓋了hashCode方法 自定義類如果要放入hash類集合,必須重寫hashcode。如果不重寫,調用的是Object的hashcode,而Object的hashCode實際上是地址。
向哈希表中添加數據的原理:當向集合Set中增加對象時,首先集合計算要增加對象的hashCode碼,根據該值來得到一個位置用來存放當前對象,如在該位置沒有一個對象存在的話,那麼集合Set認為該對象在集合中不存在,直接增加進去。如果在該位置有一個對象存在的話,接著將準備增加到集合中的對象與該位置上的對象進行equals方法比較,如果該equals方法返回false,那麼集合認為集合中不存在該對象,在進行一次散列,將該對象放到散列後計算出的新地址裡。如果equals方法返回true,那麼集合認為集合中已經存在該對象了,不會再將該對象增加到集合中了。
在哈希表中判斷兩個元素是否重複要使用到hashCode()和equals()。hashCode決定數據在表中的存儲位置,而equals判斷是否存在相同數據。
6) Y=K(X) :K是函數,X是哈希碼,Y是地址Q:JDK、JRE、JVM分別是什麼?包含關係是怎樣的?JDK: Java Development Kit 的英文縮寫,中文翻譯:Java開發工具包。是Java開發的核心,包括了Java運行環境 jre,很多的Java工具,以及一些Java基礎類庫。
JRE: Java Runtime Environment 的英文縮寫,中文翻譯:Java運行環境。是運行基於Java語言編寫的程序所不可缺少的運行環境。

JVM:Java Virtual Machine 的英文縮寫,中文翻譯:Java虛擬機。是Java實現跨平臺的最核心部分。所有的java程序會首先被編譯為.class的類文件,這種類文件可以在虛擬機上執行。由虛擬機將程序解釋給本地系統執行。

包含關係:JDK包含JRE,JRE包含JVM

那麼,作為零基礎、零工作經驗的應屆大學生們又該如何搞定面試官,輕鬆跨過這第一道技術坎呢?為此,筆者給大家匯總了整套JAVA面試題庫資料(含答案),如需了解請掃碼添加微信!感謝您的關注~

掃碼關注「大廠實習就業直通車」公眾號,可免費獲得拉勾100萬+企業僱主簡歷直推;回復「免費領課+姓名+手機」,可免費開通《12步通關求職面試》實戰課程。

相關焦點

  • 給Java程式設計師的20個鍊表面試題
    全文共4258字,預計學習時長8分鐘圖片來源:unsplash.com/@d_mccullough今天,本文將詳細介紹編程面試中常見的鍊表問題如何在面試中解決鍊表編程問題?為了解決基於鍊表的問題,有必要充分了解遞歸,因為鍊表就是一個遞歸數據結構。如果從鍊表中取一個節點,剩餘數據結構仍然構成一個鍊表。也正是因此,許多鍊表問題的遞歸解決方案比迭代解決方案更加簡單。這些問題也可以用分而治之的技巧解決,將一個問題分成多個子問題,直到能完全解決它們。
  • 2020考研:複試網絡面試常見問題匯總
    2020考研:複試網絡面試常見問題匯總 今年受到疫情的影響考研複試的時間都有所調整,
  • Java 最常見的 200+ 面試題:面試必備
    聊回面試題這件事,這份面試清單原本是我們公司內部使用的,可到後來有很多朋友在微信上聯繫到我,讓我幫他們找一些面試方面的資料,而且這些關係也不太好拒絕,一呢,是因為這些找我,要面試題的人,不是我的好朋友的弟弟妹妹,就是我的弟弟妹妹們;二呢,我也不能馬馬虎虎的對付,受人之事忠人之命,我也不能辜負這份信任。
  • JAVA最常見面試題匯總!
    並發,鎖1.volatile關鍵字, Lock並發編程中:原子性問題,可見性問題,有序性問題。volatile關鍵字能保證可見性,字能禁止指令重排序,但是不能保證原子性。可見性只能保證每次讀取的是最新的值,但是volatile沒辦法保證對變量的操作的原子性。在生成的會變語句中加入Lock關鍵字和內存屏障。
  • Java後端開發常見面試題目匯總
    友情連結:非阻塞同步算法與CAS(Compare and Swap)無鎖算法Java後端開發常見面試題目匯總線程池的作用: 在程序啟動的時候就創建若干線程來響應處理,它們被稱為線程池,裡面的線程叫工作線程第一:降低資源消耗。通過重複利用已創建的線程降低線程創建和銷毀造成的消耗。第二:提高響應速度。
  • 核桃乾貨 | 最常見的10種Java異常問題!
    和java.util.Date不同,它只有日期,不包含時間。當你僅需要表示日期時就用這個類。LocalTime time = LocalTime.now();        System.out.println("獲取當前的時間,不含有日期:"+time);    }}通過增加小時、分、秒來計算將來的時間很常見。
  • 【Java面試題】常見Java面試知識點總結-1
    我是:小職(z_zhizuobiao)找我:✅ 解鎖高薪工作 ✅ 免費獲取乾貨教程這裡整理了部分較為重點的Java面試題內容,而且對於答案有困惑,補充了解釋內容,便於理解。1. 什麼是Java虛擬機?為什麼Java被稱作是「平臺無關的程式語言」?
  • 程式設計師面試最常見問題TOP 48
    你在申請這些工作時,肯定很想知道面試官會問到哪些問題。在本文中,作者會分享一些常見的編程面試問題,這些問題來自於針對不同經驗層次的程式設計師的面試——從應屆畢業生到具有一兩年經驗的程式設計師。編程面試題通常包含數據結構和基於算法的問題,以及一些邏輯問題,例如:如何在不使用臨時變量的情況下交換兩個整數?為了清晰,編程面試題需要劃分為不同主題。
  • Java最常見600+面試題全解析:面試必備
    最近在刷面試題,所以需要看大量的Java相關的面試題,從大量的題目中總結了很多的知識,也分享給需要的同學。尚學堂與500+企業合作,建立IT行業最全的企業面試題庫。每周8~20家企業上門招聘,輕鬆掌握企業最新面試題集。本題集幾乎都是【必考題】,都能看懂的話,保你面試十拿九穩。
  • 阿里螞蟻金服Java程式設計師面試的11個問題,你會幾個呢?
    比如阿里巴巴java面經、小米java面經、網易java面經等,吸引了大多數的程式設計師們的圍觀。比如面向對象基本知識,這幾乎是面試必考的,比如什麼是類,繼承,多態等等。面向對象的特徵:抽象、繼承、封裝、多態常見算法的應用,包括算法基礎和Java編程實現。總結一般是進行分類總結,善於抓重點,以便抓住面試官痛點。
  • Java 集合框架面試問題集錦
    Java常見面試問題。下面是面試Java核心技術的一些很實用的問題。Q:最常見的數據結構有哪些,在哪些場景下應用它們?A. 大部分人都會遺漏樹和圖這兩種數據結構。樹和圖都是很有用的數據結構。如果你在回答中提及到它們的話,面試者可能會對你進行進一步進行的考核。Q:你如何自己實現List,Set和Map?
  • Java面試的的時候你被提過哪些問題?
    同學們在踏出校園那一刻起,邊開始進入了社會,面臨著找工作、面試,那麼,當你被面試的時候,哪些Java題被面試官提問過?下面這些是常被問到的面試題,如果你覺得還有一些經常提到的,我沒有寫出來的,歡迎補充。J2SE基礎:1. 九種基本數據類型的大小,以及他們的封裝類。2. Switch能否用string做參數?3. equals與==的區別。4. Object有哪些公用方法?
  • MBA提前面試:常見個面問題匯總
    【MBA中國網訊】優秀的面試官,在看完學生的自我介紹、簡歷自述材料和推薦函之後,會快速構思定製出一些問題,而這些問題也一定是圍繞著特定的主題展開的。 常見提前面試問題匯總 首先最基本原則:
  • Java 最常見面試題
    4.final 在 java 中有什麼作用?5.java 中的 Math.round(-1.5) 等於多少?6.String 屬於基礎的數據類型嗎?7.java 中操作字符串都有哪些類?它們之間有什麼區別?8.String str="i"與 String str=new String(「i」)一樣嗎?
  • 英語面試中常見的問題匯總
    摘要:複試英語面試中最常考什麼問題?這篇文章給大家總結了6類常見問題,希望大家看完以後可以認真準備,在英語面試中脫穎而出。►傳統面試問   摘要:複試英語面試中最常考什麼問題?
  • 夯實Java基礎系列16:一文讀懂Java IO流和常見面試題
    各類用途匯總如下:文件訪問網絡訪問內存緩存訪問線程內部通信緩衝過濾解析讀寫文本 讀寫基本類型數據 讀寫對象當通讀過Java IO類的原始碼之後,我們很容易就能了解這些用途。因為FileOutputStream是OuputStream的子類,所以這麼做並沒有什麼問題。
  • EMBA提前面試常見問題類型匯總,請收好!
    EMBA提前面試,主流的兩種面試形式為:個人素質面試(含英文面試)和無領導小組面試。不過,主流形式以外的問題又可以分成幾類,面試時考官問到相應的問題,你都可以歸類到其中,進行相應的回答。下面,就來給大家匯總!
  • Java異常面試問題
    所以java 7的改進之一是try-with-resources,我們可以在try語句中創建一個資源並在try-catch塊中使用它。當執行來自try-catch塊時,運行時環境會自動關閉這些資源。我可能會改變方法來處理這些場景,但理想情況下,調用者應該處理這個問題。Java中throw和throws關鍵字有什麼區別?throws關鍵字與方法籤名一起用於聲明方法可能拋出的異常,而throw關鍵字用於破壞程序流並將異常對象移交給運行時來處理它。
  • 乾貨!保研常見問題解答——參營進行時
    ​設計保研匯總了大家在保研過程中關心的一些問題,在這裡統一給大家解答一下,保研小白們趕緊來看一下吧項目經驗和科研經歷對於保研來說和獎項一樣也是加分項,在面試的時候老師一般都會問具體的過程,所以科研經歷和項目經驗一定要如實寫,在老師詢問的時候才不會匡瓢。如果弄虛作假,反而會適得其反。 4:獲獎清單怎麼寫?
  • 日語面試寶典(2)||面試常見問題匯總
    面接秘訣(1)主要講了自我介紹的要點,請參照後文的連結後附【日語面試常見問題匯總】提交簡歷,接到面試通知,估計很多人都有些忐忑不安