來自阿里的P7高階程式設計師教你如何成為一名合格的Java程式設計師

JAVA一方發表於2020-02-15

Java程式設計師的基本技能

基本語法

這包括static、final、transient等關鍵字的作用,foreach迴圈的原理等等。今天面試我問你static關鍵字有哪些作用,如果你答出static修飾變數、修飾方法我會認為你合格,答出靜態塊,我會認為你不錯,答出靜態內部類我會認為你很好,答出靜態導包我會對你很滿意,因為能看出你非常熱衷研究技術。

集合

非常重要,也是必問的內容。基本上就是List、Map、Set,問的是各種實現類的底層實現原理,實現類的優缺點。

集合要掌握的是ArrayList、LinkedList、Hashtable、HashMap、ConcurrentHashMap、HashSet的實現原理,能流利作答,當然能掌握CopyOnWrite容器和Queue是再好不過的了。另外多說一句,ConcurrentHashMap的問題在面試中問得特別多,大概是因為這個類可以衍生出非常多的問題,關於ConcurrentHashMap,我給網友朋友們提供三點回答或者是研究方向:

  • ConcurrentHashMap的鎖分段技術

  • ConcurrentHashMap的讀是否要加鎖,為什麼

  • ConcurrentHashMap的迭代器是強一致性的迭代器還是弱一致性的迭代器

設計模式

當然我們們不能這麼功利,為了面試而學習,設計模式在工作中還是非常重要、非常有用的,23種設計模式中重點研究常用的十來種就可以了,面試中關於設計模式的問答主要是三個方向:

  • 你的專案中用到了哪些設計模式,如何使用

  • 知道常用設計模式的優缺點

  • 能畫出常用設計模式的UML圖

多執行緒

這也是必問的一塊了。因為三年工作經驗,所以基本上不會再問你怎麼實現多執行緒了,會問得深入一些比如說Thread和Runnable的區別和聯絡、多次start一個執行緒會怎麼樣、執行緒有哪些狀態。當然這只是最基本的,出乎意料地,幾次面試幾乎都被同時問到了一個問題,問法不盡相同,總結起來是這麼一個意思:

假如有Thread1、Thread2、ThreaD3、Thread4四條執行緒分別統計C、D、E、F四個盤的大小,所有執行緒都統計完畢交給Thread5執行緒去做彙總,應當如何實現?

JDK原始碼

要想拿高工資,JDK原始碼不可不讀。上面的內容可能還和具體場景聯絡起來,JDK原始碼就是實打實地看你平時是不是愛鑽研了。面試過程中被問了不少JDK原始碼的問題,其中最刁鑽的一個問了String的hashCode()方法是怎麼實現的,幸好平時String原始碼看得多,答了個大概。JDK原始碼其實沒什麼好總結的,純粹看個人,總結一下比較重要的原始碼:

  • List、Map、Set實現類的原始碼

  • ReentrantLock、AQS的原始碼

  • AtomicInteger的實現原理,主要能說清楚CAS機制並且AtomicInteger是如何利用CAS機制實現的

  • 執行緒池的實現原理

  • Object類中的方法以及每個方法的作用

框架

老生常談,面試必問的東西。一般來說會問你一下你們專案中使用的框架,然後給你一些場景問你用框架怎麼做,比如我想要在Spring初始化bean的時候做一些事情該怎麼做、想要在bean銷燬的時候做一些事情該怎麼做、MyBatis中$和#的區別等等,這些都比較實際了,平時積累得好、有多學習框架的使用細節自然都不成問題。

資料庫

資料庫十有八九也都會問到。一些基本的像union和union all的區別、left join、幾種索引及其區別就不談了,比較重要的就是資料庫效能的優化,如果對於資料庫的效能優化一竅不通,那麼有時間,還是建議你在面試前花一兩天專門把SQL基礎和SQL優化的內容準備一下。

不過資料庫倒是不用擔心,一家公司往往有很多部門,如果你對資料庫不熟悉而基本技術又非常好,九成都是會要你的,估計會先把你放到對資料庫使用不是要求非常高的部門鍛鍊一下。

資料結構和演算法分析

資料結構和演算法分析,對於一名程式設計師來說,會比不會好而且在工作中絕對能派上用場。陣列、連結串列是基礎,棧和佇列深入一些但也不難,樹挺重要的,比較重要的樹AVL樹、紅黑樹,可以不瞭解它們的具體實現,但是要知道什麼是二叉查詢樹、什麼是平衡樹,AVL樹和紅黑樹的區別。記得某次面試,某個面試官和我聊到了資料庫的索引,他問我:

你知道索引使用的是哪種資料結構實現嗎?

Java虛擬機器

談談Java虛擬機器中比較重要的內容:

  • Java虛擬機器的記憶體佈局

  • GC演算法及幾種垃圾收集器

  • 類載入機制,也就是雙親委派模型

  • Java記憶體模型

  • happens-before規則

  • volatile關鍵字使用規則

這還只是Java程式設計師的最基本要求,你不可能在基礎的程式設計師上面幹一輩子所以我們只會慢慢的往上走,下面是我收藏的一個系統的學習圖譜,如果需要可以點選:https://shimo.im/docs/VqQR6tPrpR3C3tjq/


相關文章