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步通關求職面試》實戰課程。