前言
面試,從來都是一個隨機性很高的過程。但凡質量高的面試,必須是面試官根據面試者的回答迴圈遞進,抽絲剝繭,橫向縱向分展開來的。
我覺得,質量高的面試,就是從一個點切入,然後逐漸考察面試者對於這個點相關的知識體系的瞭解!
考察內容和方式
從阿里的常規java技術面試角度說一說,一般都是由淺到深去問,思路是先考察基礎是否過關,再通過深度考察是否有技術熱情和深度,同時可能會通過提出一些質疑和挑戰來考察候選人是如何與不同意見進行溝通
- 基礎知識:考察基礎的時候一般都不會太深入地去問,主要目的是考察知識面,如果發現候選人很多都不知道可能就不會繼續進入下一步的考察。
- JDK 集合、BIO/NIO、annotation 等
- 虛擬機器 記憶體模型、類載入原理
- 資料庫 索引、事務、死鎖 等
- 併發 併發優缺點、記憶體可見性(volatile)、鎖、同步、執行緒池框架
- 網路 TCP/HTTP
- 常見設計模式
- 深入考察:深入考察的時候不會像考察基礎一樣面面俱到,而是會在某個點上深入去聊,這個點的選擇可能是讓候選人自己選一個點,也可能是面試官根據簡歷內容去選,主要目的是考察候選人對某個技術點的深入掌握程度,技術是相通的,如果一個人能在某個技術點上達到很深入的程度,其他點上通常也不會有太大問題;相反如果某個人在他聲稱很瞭解的點上都支支吾吾、一知半解多半可以判斷此人要麼技術能力有限、要麼遇到問題不願深入考察、淺嘗輒止。
- JDK ConcurrentHashMap如何提高併發度、NIO的原理(零拷貝、堆外記憶體),優缺點
- 虛擬機器 包衝突,類衝突的形成原理及解決辦法(可能會引申JDK9的模組化設計)、TCCL的存在價值
- 分散式 一致性雜湊、RPC原理和設計(通訊協議、序列化方式、超時機制等)、負載均衡、分散式快取架構設計、分散式訊息、分散式事務、paxos(這個可能只有在技術專業型很強的職位上會去問)
- 資料庫 資料庫效能優化(慢sql、索引優化、大事務、核心引數調優),也可能會把一些工作中碰到的詭異場景丟擲來問
- 併發 非阻塞鎖(CAS)、併發對編譯器優化的影響、執行緒池調優、也肯會把工作中碰到的併發問題丟擲來問
- 技術趨勢、docker、微服務等新技術發展歷史、帶來的福利
如何準備
首先要宣告的是,最好的“準備”方式一定是平時多積累、遇到問題不要逃避或者討巧、深入去思考並解決,在解決一個個問題的過程中積累解決問題的能力,形成自己的知識體系。所以這裡說的如何準備不是說臨時抱佛腳,而是如何能通過提前準備把自己平時的積累展現出來,不因為臨場的表現影響面試官對你的判斷。
- 針對以上列的知識點思考答案甚至擴充套件,如果能知道大部分,深入一部分就很好,這個過程主要是整理自己的知識體系
- 回憶整理簡歷和過往專案中的”難點“、”亮點“,因為這些是用來區分候選人很重要的點,合格的面試官一定會問類似於”你在專案中經歷的最大的技術難點是什麼?“,整理一下思路,不至於在面試時候因為時間久遠而回憶不起來細節影響面試效果。
- 溝通過程中做到有理有據,不要過於自大,也無需刻意迎合面試官。溝通的本質是資訊透明化,工作中也許我們無法做到完全客觀公正,但是在技術問題上堅持自己的客觀和原則是我認為技術人應該堅持的品格,我這裡說的堅持不是一根筋的固執已見,而是根據共同認可的事實進行邏輯推斷得出的觀點。長遠來看這種品格會帶給你足夠的技術影響力和回報。
分享進階路線
Java技術導圖
裡面包含的技術不是讓你全部掌握,但是很多東西是面試官必問的,所以你不能不知道,希望給那些需要這些資訊的人幫助。
總結
不管是學什麼技術,最終都需要你進行歸納、整理,才能把所學的東西變為自己的。工作為什麼要寫日誌,平時學習為什麼要寫部落格,其實就是在構建自己的知識體系。在學習的過程中多做筆記,多做總結,習慣一旦形成,久而久之,便會印在你的腦海裡,你下次再被問到這一問題時,你就可以用自己之前總結過的內容來回答。
總結的這些架構技術希望對Java開發的朋友們有所參考以及少走彎路,本文的重點是你有沒有收穫與成長,其餘的都不重要,希望讀者們能謹記這一點。