《Java高級程序員面試筆試寶典》是一本講解Java高級程序員面試筆試的百科全書,在寫法上,除了講解如何解答Java高級程序員面試筆試問題以外,還引入了相關(guān)知識點輔以說明,讓讀者能夠更加容易理解。
由于Java高級程序員所需要掌握的知識體系,較之初級、中級程序員會更加底層,所以《Java高級程序員面試筆試寶典》會花費大量篇幅針對Java語言的高級特性(泛型、Collection框架、JUC框架、Java IO、JVM等)進行深度剖析!禞ava高級程序員面試筆試寶典》將Java高級程序員面試筆試過程中各類知識點一網(wǎng)打盡。在廣度上,通過各種渠道,搜集了近3年主流IT企業(yè)針對高級Java程序員崗位的筆試、面試涉及的知識點,包括但不限于Java高級程序員必須掌握的各類技術(shù)點等,所選擇知識點均為企業(yè)招聘考查的高頻知識點。在講解的深度上,《Java高級程序員面試筆試寶典》由淺入深,分析每一個知識點,并提煉歸納,同時,引入相關(guān)知識點,并對知識點進行深度剖析,讓讀者不僅能夠理解這個知識點,也能游刃有余地解決相似的問題。本書結(jié)構(gòu)合理、條理清晰,對于讀者進行學(xué)習(xí)與檢索意義重大。
《Java高級程序員面試筆試寶典》是一本計算機相關(guān)專業(yè)畢業(yè)生面試、筆試的求職用書,同時也適合期望在計算機軟、硬件行業(yè)大顯身手的計算機愛好者閱讀。
Java高級程序員面試、筆試、經(jīng)驗心得、算法、考點、難點、真題解析一應(yīng)俱全,獲取高薪必備
在這里,有面試筆試常見技巧的提煉與總結(jié);
在這里,有面試筆試高頻Kotlin知識點的整理與剖析;
在這里,有面試筆試歷年Kotlin真題的解答與拓展。
程序員求職始終是當(dāng)前社會的一個熱點,而市面上有很多關(guān)于程序員求職的書籍,例如《程序員代碼面試指南》(左程云著)、《劍指Offer》(何海濤著)、《程序員面試筆試寶典》(何昊編著)、《Java程序員面試筆試寶典》(何昊編著)、《編程之美》(《編程之美》小組著)、《編程珠璣》(Jon Bentley 著)等,它們都是針對基礎(chǔ)知識的講解,各有側(cè)重點,而且在市場上反映良好。但是,當(dāng)前市面上沒有一本專門針對Java高級程序員的面試筆試的分析與講解,很多讀者朋友們向我們反映,隨著就業(yè)市場的競爭白熱化,如果只是掌握一些淺顯的初中級Java知識,那么找到一份月薪八千的工作問題不大,但要想獲取更高的職位或薪酬,基本上是一件很難的事情。當(dāng)下,一些互聯(lián)網(wǎng)公司特殊Offer的要求也越來越高,要想領(lǐng)先他人,求職者就必須比別人掌握更深入的知識才行。
針對這種情況,我們創(chuàng)作團隊經(jīng)過精心準(zhǔn)備,從互聯(lián)網(wǎng)上的海量面試筆試真題中,選取了當(dāng)前頂級企業(yè)(包括微軟、谷歌、百度、騰訊、阿里巴巴、360和小米等)的面試筆試真題,挑選出其中最典型、考查頻率最高、最具代表性的Java真題,同時對真題進行知識點的分門別類,做到層次清晰、條理分明、答案簡單明了,最終編寫成書。本書所選真題以及寫作手法具有以下特點:
第一,考查率高。本書中所選知識點全是Java程序員面試筆試常考點,囊括當(dāng)前Java程序員面試筆試過程中各類高頻知識點,尤其是對高級Java語言特性的分析更是細致入微。
第二,行業(yè)代表性強。本書中所選知識點全部來自于頂級知名企業(yè),它們是行業(yè)的風(fēng)向標(biāo),代表了行業(yè)的高水準(zhǔn),其中絕大多數(shù)知識點因為題目難易適中,而且具有非常好的區(qū)分度,經(jīng)常會被眾多中小企業(yè)全盤照搬,具有代表性。
第三,答案詳盡。本書對每一個知識點都有非常詳細的解答,授之以魚的同時還授之以漁,不僅提供答案,還告訴讀者再遇到同類型題目時該如何解答。
第四,分類清晰、條理分明。本書對各個知識點都進行了歸納分類,這種寫法有利于讀者針對個人實際情況做到有的放矢、重點把握。
第五,講解深入。對于大部分知識點,不僅給出這個知識點的用法,更重要的是給出其底層的實現(xiàn)原理。
由于篇幅所限,我們無法將所有的程序員面試筆試真題內(nèi)容或者知識點都列入其中,鑒于此,我們在猿媛之家官方網(wǎng)站(www.yuanyuanba.com)上提供了一個讀者交流平臺,讀者朋友們可以在該網(wǎng)站上上傳各類面試筆試真題,也可以查找自己所需要的知識,同時,讀者朋友們也可以向本平臺提供當(dāng)前最新、最熱門的程序員面試筆試題、面試技巧、程序員生活等相關(guān)材料。除此以外,我們還建立了公眾號猿媛之家,作為對外消息發(fā)布平臺,以便最大限度地滿足讀者需要。歡迎讀者關(guān)注探討新技術(shù)。
本書主要針對Java用戶,我們還有專門針對C/C 用戶的圖書,同期出版發(fā)行。
感謝幫助過我們的親人、同事、朋友和同學(xué),無論我們遇到多大的挫折與困難,他們對我們不離不棄,一如既往地支持與幫助我們,使我們能夠開開心心地度過每一天。在此對以上所有人致以最衷心的感謝。
所有的成長和偉大,如同中藥,都是一個時辰一個時辰熬出來的;所有的好書,都是逐字逐句琢磨出來的。在技術(shù)的海洋里,我們不是創(chuàng)造者,但我們更愿意去當(dāng)好一名傳播者,讓更多的求職者能夠通過對本書的系統(tǒng)學(xué)習(xí),找到一份自己滿意的工作,實現(xiàn)自己的人生理想與抱負(fù)。
由于編者水平有限,書中不足之處在所難免,還望讀者見諒。讀者如果發(fā)現(xiàn)問題或者有此方面的困惑,可以通過郵箱yuancoder@foxmail.com聯(lián)系我們。
猿媛之家
前言
第一部分 Java特性
第1章 重視基礎(chǔ)知識2
1.1 不可變類2
1.2 = =、equals與hashcode4
1.3 值傳遞與引用傳遞6
1.4 Java關(guān)鍵字8
1.4.1 static8
1.4.2 final9
1.4.3 transient10
1.4.4 volatile10
第2章 再論面向?qū)ο?2
2.1 繼承12
2.1.1 多重繼承12
2.1.2 Overload與Override14
2.2 反射15
2.3 嵌套類20
第3章 泛型22
3.1 基本概念22
3.1.1 泛型的分類23
3.1.2 有界泛型24
3.1.3 復(fù)雜的泛型27
3.1.4 數(shù)組和泛型容器28
3.1.5 泛型使用建議30
3.2 泛型擦除31
3.2.1 泛型信息的擦除31
3.2.2 擦除帶來的問題33
3.2.3 編譯器保留的泛型信息35
3.2.4 反射獲取泛型信息37
3.2.5 Java泛型的歷史39
第4章 Java新特性41
4.1 Java 8新特性41
4.1.1 Lambda表達式41
4.1.2 方法的默認(rèn)實現(xiàn)和靜態(tài)方法42
4.1.3 方法引用43
4.1.4 注解(Annotation)45
4.1.5 類型推測45
4.1.6 參數(shù)名字45
4.1.7 新增Optional類46
4.1.8 新增Stream類46
4.1.9 日期新特性48
4.1.10 調(diào)用JavaScript50
4.1.11 Base6450
4.1.12 并行數(shù)組50
4.2 Java 9新特性51
4.2.1 JShell:交互式Java REPL51
4.2.2 不可變集合工廠方法51
4.2.3 私有接口方法52
4.2.4 平臺級模塊系統(tǒng)53
4.2.5 進程 API的改進58
4.2.6 try-with-resources59
4.2.7 Stream API的改進60
第二部分 JDK內(nèi)部實現(xiàn)原理分析
第5章 Collection框架63
5.1 List64
5.1.1 ArrayList64
5.1.2 LinkedList71
5.1.3 Vector和Stack73
5.1.4 總結(jié)74
5.2 Queue74
5.3 Map81
5.3.1 HashMap81
5.3.2 Java 8之前的HashMap82
5.3.3 Java 8提供的HashMap90
5.3.4 TreeMap101
5.3.5 Java 8之前的LinkedHashMap102
5.3.6 Java 8里的LinkedHashMap103
5.3.7 Hashtable106
5.3.8 WeakHashMap106
5.4 Set110
5.4.1 HashSet110
5.4.2 LinkedHashSet112
5.4.3 TreeSet113
第6章 JUC框架115
6.1 AQS隊列同步器115
6.1.1 AQS的同步狀態(tài)關(guān)鍵字116
6.1.2 volatile關(guān)鍵字117
6.1.3 AQS和CAS121
6.1.4 AQS的等待隊列122
6.1.5 AQS如何阻塞線程和中斷阻塞130
6.1.6 sun.misc.Unsafe131
6.2 ReentrantLock重入鎖131
6.2.1 ReentrantLock的公平鎖與非公平鎖實現(xiàn)132
6.2.2 ReentrantLock的重入性135
6.2.3 ReentrantLock和synchronized138
6.2.4 ReentrantLock的條件監(jiān)視器142
6.3 BlockingQueue145
6.3.1 ArrayBlockingQueue147
6.3.2 LinkedBlockingQueue153
6.3.3 PriorityBlockingQueue159
6.3.4 ConcurrentLinkedQueue164
6.3.5 DelayQueue172
6.4 Executor框架集175
6.4.1 Executor接口175
6.4.2 ExecutorService176
6.4.3 ThreadPoolExecutor177
6.4.4 FixedThreadPool、CachedThreadPool和SingleThreadExecutor190
6.4.5 Future和FutureTask193
6.5 Latch198
6.6 Barrier200
6.6.1 利用重入鎖ReentrantLock和條件監(jiān)視器Condition實現(xiàn)Barrier201
6.6.2 利用Generation對象實現(xiàn)回歸性202
6.6.3 利用Generation對象和Interrupt提供break功能203
6.6.4 為Barrier指定超時205
6.6.5 Barrier的回調(diào)和回調(diào)的異常處理206
6.7 同步(waitify)206
6.8 ThreadLocal209
6.8.1 使用實例209
6.8.2 原理解析211
6.8.3 Java 8新特性212
6.9 其他JUC類213
6.9.1 ConcurrentHashMap213
6.9.2 CopyOnWriteArrayList219
第7章 Java IO221
7.1 IO相關(guān)基礎(chǔ)概念221
7.2 同步與異步、阻塞與非阻塞221
7.3 BIO222
7.4 NIO223
7.4.1 Buffer224
7.4.2 Channel226
7.4.3 Selector229
7.4.4 AIO234
第三部分 JVM
第8章 內(nèi)存分配241
8.1 JVM內(nèi)存劃分241
8.2 運行時內(nèi)存劃分243
8.2.1 年輕代、老年代與永久代243
8.2.2 String.intern()244
8.2.3 原空間MetaSpace249
8.3 垃圾回收250
8.3.1 垃圾回收算法251
8.3.2 串行垃圾回收253
8.3.3 并行垃圾回收253
8.3.4 并發(fā)標(biāo)記清理回收器254
8.3.5 G1256
第9章 代碼的執(zhí)行259
9.1 類加載259
9.1.1 雙親委托模型259
9.1.2 線程上下文類加載器262
9.2 代理模式265
9.2.1 靜態(tài)模式265
9.2.2 動態(tài)代理269
9.2.3 CGLIB271
9.3 Java代碼的執(zhí)行273
9.3.1 Java字節(jié)碼273
9.3.2 變量的執(zhí)行275
9.3.3 條件語句的執(zhí)行281
9.3.4 循環(huán)語句的執(zhí)行289
9.3.5 泛型擦除的類型轉(zhuǎn)換290
第10章 設(shè)計模式292
10.1 單例模式292
10.2 工廠模式292
10.3 適配器模式294
10.4 觀察者模式295
附錄(常見面試筆試題)296