2020面試必知:中高階工程師面試題集整理(題目+答案)
這些面試題是我準備換工作的時候整理,沒有重點。包括java基礎,資料結構,網路,Android相關等等。
適合中高階工程師。由於內容過多,將會分為上下兩部分。
希望能夠幫到一些朋友,如果幫助到你,希望能夠點個贊。沒有單獨分出來,面試題目都是穿插的。因為有些事外面試過程中遇到的,我就又加上去了。總之你弄懂了這些,基本是沒有問題了。如果是bat那些企業,你還得準備演算法,jvm這些知識。好了,廢話不多說了。
1、java中==和equals和hashCode的區別
基本資料型別的==比較的值相等.
類的==比較的記憶體的地址,即是否是同一個物件,在不覆蓋equals的情況下,同比較記憶體地址,原實現也為 == ,如String等重寫了equals方法.
hashCode也是Object類的一個方法。返回一個離散的int型整數。在集合類操作中使用,為了提高查詢速度。(HashMap,HashSet等比較是否為同一個)
如果兩個物件equals,Java執行時環境會認為他們的hashcode一定相等。
如果兩個物件不equals,他們的hashcode有可能相等。
如果兩個物件hashcode相等,他們不一定equals。
如果兩個物件hashcode不相等,他們一定不equals。
2、int與integer的區別
int 基本型別
integer 物件 int的封裝類
3、String、StringBuffer、StringBuilder區別
String:字串常量 不適用於經常要改變值得情況,每次改變相當於生成一個新的物件
StringBuffer:字串變數 (執行緒安全)
StringBuilder:字串變數(執行緒不安全) 確保單執行緒下可用,效率略高於StringBuffer
4、什麼是內部類?內部類的作用
內部類可直接訪問外部類的屬性
Java中內部類主要分為 成員內部類、 區域性內部類(巢狀在方法和作用域內)、 匿名內部類(沒構造方法)、 靜態內部類(static修飾的類,不能使用任何外圍類的非static成員變數和方法, 不依賴外圍類)
5、程式和執行緒的區別
6、final,finally,finalize的區別
final:修飾類、成員變數和成員方法,類不可被繼承,成員變數不可變,成員方法不可重寫
finally:與try...catch...共同使用,確保無論是否出現異常都能被呼叫到
finalize:類的方法,垃圾回收之前會呼叫此方法,子類可以重寫finalize()方法實現對資源的回收
7、Serializable 和Parcelable 的區別
Serializable Java 序列化介面 在硬碟上讀寫 讀寫過程中有大量臨時變數的生成,內部執行大量的i/o操作,效率很低。
Parcelable Android 序列化介面 效率高 使用麻煩 在記憶體中讀寫(AS有相關外掛 一鍵生成所需方法) ,物件不能儲存到磁碟中
8、靜態屬性和靜態方法是否可以被繼承?是否可以被重寫?以及原因?
可繼承 不可重寫 而是被隱藏
如果子類裡面定義了靜態方法和屬性,那麼這時候父類的靜態方法或屬性稱之為"隱藏"。如果你想要呼叫父類的靜態方法和屬性,直接透過父類名.方法或變數名完成。
9、成員內部類、靜態內部類、區域性內部類和匿名內部類的理解,以及專案中的應用
10、string 轉換成 integer的方式及原理
String integer Intrger.parseInt(string);
Integerstring Integer.toString();
11、哪些情況下的物件會被垃圾回收機制處理掉?
12、靜態代理和動態代理的區別,什麼場景使用?
靜態代理類:
由程式設計師建立或由特定工具自動生成原始碼,再對其編譯。在程式執行前,代理類的.class檔案就已經存在了。動態代理類:在程式執行時,運用反射機制動態建立而成。
14、Java中實現多型的機制是什麼?
答:方法的重寫Overriding和過載Overloading是Java多型性的不同表現
重寫Overriding是父類與子類之間多型性的一種表現
過載Overloading是一個類中多型性的一種表現.
16、說說你對Java反射的理解
17、說說你對Java註解的理解
18、Java中String的瞭解
在原始碼中string是用final 進行修飾,它是不可更改,不可繼承的常量。
19、String為什麼要設計成不可變的?
20、Object類的equal和hashCode方法重寫,為什麼?
21、List,Set,Map的區別
26、ArrayMap和HashMap的對比
1、儲存方式不同
HashMap內部有一個HashMapEntry[]物件,每一個鍵值對都儲存在這個物件裡,當使用put方法新增鍵值對時,就會new一個HashMapEntry物件,
2、新增資料時擴容時的處理不一樣,進行了new操作,重新建立物件,開銷很大。ArrayMap用的是copy資料,所以效率相對要高。
3、ArrayMap提供了陣列收縮的功能,在clear或remove後,會重新收縮陣列,是否空間
4、ArrayMap採用二分法查詢;
29、HashMap和HashTable的區別
1 HashMap不是執行緒安全的,效率高一點、方法不是Synchronize的要提供外同步,有containsvalue和containsKey方法。
hashtable是,執行緒安全,不允許有null的鍵和值,效率稍低,方法是是Synchronize的。有contains方法方法。Hashtable 繼承於Dictionary 類
30、HashMap與HashSet的區別
31、HashSet與HashMap怎麼判斷集合元素重複?
HashSet不能新增重複的元素,當呼叫add(Object)方法時候,
首先會呼叫Object的hashCode方法判hashCode是否已經存在,如不存在則直接插入元素;如果已存在則呼叫Object物件的equals方法判斷是否返回true,如果為true則說明元素已經存在,如為false則插入元素。
33、ArrayList和LinkedList的區別,以及應用場景
34、陣列和連結串列的區別
35、開啟執行緒的三種方式?
36、執行緒和程式的區別?
執行緒是程式的子集,一個程式可以有很多執行緒,每條執行緒並行執行不同的任務。不同的程式使用不同的記憶體空間,而所有的執行緒共享一片相同的記憶體空間。別把它和棧記憶體搞混,每個執行緒都擁有單獨的棧記憶體用來儲存本地資料。
38、run()和start()方法區別
這個問題經常被問到,但還是能從此區分出面試者對Java執行緒模型的理解程度。start()方法被用來啟動新建立的執行緒,而且start()內部呼叫了run()方法,這和直接呼叫run()方法的效果不一樣。當你呼叫run()方法的時候,只會是在原來的執行緒中呼叫,沒有新的執行緒啟動,start()方法才會啟動新執行緒。
39、如何控制某個方法允許併發訪問執行緒的個數?
semaphore.acquire() 請求一個訊號量,這時候的訊號量個數-1(一旦沒有可使用的訊號量,也即訊號量個數變為負數時,再次請求的時候就會阻塞,直到其他執行緒釋放了訊號量)
semaphore.release() 釋放一個訊號量,此時訊號量個數+1
40、在Java中wait和seelp方法的不同;
Java程式中wait 和 sleep都會造成某種形式的暫停,它們可以滿足不同的需要。wait()方法用於執行緒間通訊,如果等待條件為真且其它執行緒被喚醒時它會釋放鎖,而sleep()方法僅僅釋放CPU資源或者讓當前執行緒停止執行一段時間,但不會釋放鎖。
41、談談wait/notify關鍵字的理解
42、什麼導致執行緒阻塞?執行緒如何關閉?
43、如何保證執行緒安全?
1.synchronized;
2.Object方法中的wait,notify;
3.ThreadLocal機制 來實現的。
44、如何實現執行緒同步?
1、synchronized關鍵字修改的方法。2、synchronized關鍵字修飾的語句塊3、使用特殊域變數(volatile)實現執行緒同步
45、執行緒間操作List
List list = Collections.synchronizedList(new ArrayList());
46、談談對Synchronized關鍵字,類鎖,方法鎖,重入鎖的理解
49、synchronized 和volatile 關鍵字的區別
51、ReentrantLock 、synchronized和volatile比較
ava在過去很長一段時間只能透過synchronized關鍵字來實現互斥,它有一些缺點。比如你不能擴充套件鎖之外的方法或者塊邊界,嘗試獲取鎖時不能中途取消等。Java 5 透過Lock介面提供了更復雜的控制來解決這些問題。 ReentrantLock 類實現了 Lock,它擁有與 synchronized 相同的併發性和記憶體語義且它還具有可擴充套件性。
53、死鎖的四個必要條件?
56、什麼是執行緒池,如何使用?
57、Java中堆和棧有什麼不同?
為什麼把這個問題歸類在多執行緒和併發面試題裡?因為棧是一塊和執行緒緊密相關的記憶體區域。每個執行緒都有自己的棧記憶體,用於儲存本地變數,方法引數和棧呼叫,一個執行緒中儲存的變數對其它執行緒是不可見的。而堆是所有執行緒共享的一片公用記憶體區域。物件都在堆裡建立,為了提升效率執行緒會從堆中弄一個快取到自己的棧,如果多個執行緒使用該變數就可能引發問題,這時volatile 變數就可以發揮作用了,它要求執行緒從主存中讀取變數的值。
58、有三個執行緒T1,T2,T3,怎麼確保它們按順序執行?
最後
暫且分享這些,由於部分答案過長影響閱讀,我已經整理成了一個PDF文件,關注我,可以簡信我【58題】,領取vx:xx13414521
當然,這段時間大家學習的時間比較多,看完文章後也可以學習我收集的這份1612頁的面試指南,滿滿的都是乾貨,希望對大家有幫助!
推薦閱讀: 金三銀四,收下這份最全安卓開發面試指南!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69952849/viewspace-2676122/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Android 中高階面試必知必會Android面試
- 中高階Java面試題Java面試題
- Java中高階面試題Java面試題
- 史上最全!押題率90%的 Android 中高階工程師面試複習大綱及真題答案整理(中篇)Android工程師面試
- 雲端計算面試題及答案,雲端計算工程師面試題集錦面試題工程師
- 雲端計算工程師面試題集錦,雲端計算面試題及答案工程師面試題
- 面試必備,Linux面試題和答案!Linux面試題
- 史上最全的中高階JAVA工程師-面試題彙總Java工程師面試題
- Java中高階面試題及答案【第三部分】Java面試題
- SpringMVC 面試題目以及答案SpringMVC面試題
- Oracle 面試英文題目及答案Oracle面試
- Java面試題中高階進階(JVM篇01)Java面試題JVM
- 2018中高階Android面試題總結上(附答案)Android面試題
- 雲端計算工程師面試題集錦,常見雲端計算面試題及答案工程師面試題
- Java高階面試題及答案Java面試題
- 中高階前端開發高頻面試題前端面試題
- Java基礎面試題整理-50題(附答案)Java面試題
- 2018年Android面試題含答案--適合中高階(下)Android面試題
- 阿里Jvm必問面試題及答案阿里JVM面試題
- Java面試題中高階進階(JVM調優篇)Java面試題JVM
- Android開發工程師面試指南(面試題集附答案、簡歷模板)Android工程師面試題
- 【助力2020面試】精心整理85道Java微服務面試題(含答案)Java微服務面試題
- 高階工程師面試題工程師面試題
- Android 面試題集 包含答案Android面試題
- 軟體測試工程師必會的面試題目工程師面試題
- 大資料面試題以及答案整理(一)大資料面試題
- Java面試題中高階進階(JVM篇Java垃圾回收)Java面試題JVM
- 安卓系統工程師2018(面試題整理,含答案)安卓工程師面試題
- 前端必備,JavaScript面試問題及答案前端JavaScript面試
- 面試必備問題集錦面試
- Python工程師求職必知的經典面試題!Python工程師求職面試題
- Python工程師求職必知的經典面試題Python工程師求職面試題
- Java工程師面試題之Dubbo(含答案)Java工程師面試題
- Java面試題中高階進階(JVM篇Java記憶體)Java面試題JVM記憶體
- 最全前端開發面試問題及答案整理前端面試
- 面試題整理面試題
- 面試過了,總結測試工程師面試題(含答案)工程師面試題
- 「面試題」20+Vue面試題整理面試題Vue