JAVA程序員面試寶典 工作3年以上應該會的技能
作為一個JAVA程序員,以下所提到的內容不是說必須要會,但是如果你掌握得越多,最終能得到的東西,比如你的薪水勢一定會越高,相信糖糖沒錯的~!~
1. JAVA的基本語法
包括static、final、transient等關鍵字的作用,foreach循環的原理等。如果你去面試的時候,面試官問你static關鍵字有哪些作用,如果你答出static修飾變數、修飾方法,面試官會認為你是合格。你答出靜態塊,面試官會認為你不錯,如果你答出靜態內部類面試官會認為你很好,答出靜態導包面試官會對你很滿意,面試官能看出你非常熱衷研究技術。
2. 集合
非常重要,也是面試必問的內容。大概就是List、Map、Set,各種實現類的底層實現原理,實現類的優缺點。
集合最重要的是ArrayList、LinkedList、Hashtable、HashMap、ConcurrentHashMap、HashSet的實現原理,當然能掌握CopyOnWrite容器和Queue是再好不過的了。ConcurrentHashMap的問題在面試中問得特別多,關於ConcurrentHashMap,給同學們提供三點回答:
ConcurrentHashMap的鎖分段技術
ConcurrentHashMap的讀是否要加鎖,為什麼
ConcurrentHashMap的迭代器是強一致性的迭代器還是弱一致性的迭代器
3. 設計模式
設計模式在工作中還是非常重要、非常有用的,二十多種設計模式中重點研究常用的十來種就可以了,面試中關於設計模式的問答主要是三個方向:
項目中用到了哪些設計模式,如何使用
常用設計模式的優缺點
畫出常用設計模式的UML圖
4. 多線程
這也是面試必問的一塊了。因為你已經工作兩三年了,基本上不會再問怎麼實現多線程了,會問得深入一些,比如說Thread和Runnable的區別,多次start一個線程會怎麼樣,線程有哪些狀態等。
比如:
假如有Thread1、Thread2、Thread3、Thread4四條線程分別統計C、D、E、F四個盤的大小,所有線程都統計完畢交給Thread5線程去做匯總,應當如何實現?
線程池也是比較常問的一塊,常用的線程池有幾種。線程池的實現原理是怎麼樣的?實際一些的,會給你一些具體的場景,讓你回答這種場景該使用什麼樣的線程池比較合適。
synchronized和ReentrantLock的區別、synchronized鎖普通方法和鎖靜態方法、死鎖的原理及排查方法等等,關於多線程,我在之前有些過文章總結過多線程的40個問題,可以參看40個Java多線程問題總結。
5. IO
IO分為File IO和Socket IO,File IO基本上是不會問的,平時會用就好了,另外記得File IO都是阻塞IO。
Socket IO是比較重要的一塊,要搞懂的是阻塞/非阻塞的區別、同步/非同步的區別,藉此理解阻塞IO、非阻塞IO、多路復用IO、非同步IO這四種IO模型,Socket IO如何和這四種模型相關聯。深入一些的話,就會問NIO的原理、NIO屬於哪種IO模型、NIO的三大組成等等。提一句,NIO並不是嚴格意義上的非阻塞IO而應該屬於多路復用IO,面試回答的時候要注意這個細節,講到NIO會阻塞在Selector的select方法上會增加面試官對你的好感。
如果用過Netty,可能會問一些Netty的東西,畢竟這個框架基本屬於當前最好的NIO框架了(Mina其實也不錯,不過總體來說還是比不上Netty的),大多數互聯網公司也都在用Netty。
6. JDK源碼
要想拿高工資,JDK源碼不可不讀。前面的內容可能還和具體場景聯繫起來,JDK源碼就是實打實地看你平時是不是愛鑽研了。
總結一下比較重要的源碼:
List、Map、Set實現類的源代碼
ReentrantLock、AQS的源代碼
AtomicInteger的實現原理,主要能說清楚CAS機制並且AtomicInteger是如何利用CAS機制實現的
線程池的實現原理
Object類中的方法以及每個方法的作用
7. 框架
一般來說會問你一下你們項目中使用的框架,然後給你一些場景問你用框架怎麼做,比如我想要在spring初始化bean的時候做一些事情該怎麼做、想要在bean銷毀的時候做一些事情該怎麼做、MyBatis中$和#的區別等等,這些都比較實際了,平時積累得好、有多學習框架的使用細節自然都不成問題。
如果上面你的問題答得好,面試官往往會深入地問一些框架的實現原理。問得最多的就是Spring AOP的實現原理,當然這個很簡單啦,兩句話就搞定的的事兒,即使你不會準備一下就好了。LZ遇到的最變態的是讓LZ畫一下Spring的Bean工廠實現的UML圖,當然面對這樣一個有深度的問題,LZ是絕對答不出來的/(ㄒoㄒ)/~~
8. 資料庫的問題
一些基本的像union和union all的區別、left join、幾種索引及其區別就不談了,比較重要的就是資料庫性能的優化,如果對於資料庫的性能優化一竅不通,那麼有時間,還是建議你在面試前花一兩天專門把SQL基礎和SQL優化的內容準備一下。
9. 數據結構和演算法分析
數組、鏈表是基礎,棧和隊列深入一些但也不難,樹挺重要的,比較重要的樹AVL樹、紅黑樹,可以不了解它們的具體實現,但是要知道什麼是二叉查找樹、什麼是平衡樹,AVL樹和紅黑樹的區別。
10. Java虛擬機
Java虛擬機應該是很重要的一塊內容,但是在面試中被問到的概率幾乎為0。
雖然Java虛擬機沒問到,但我覺得還是有必要研究的,LZ就簡單地列一個提綱吧,談談Java虛擬機中比較重要的內容:
Java虛擬機的內存布局
GC演算法及幾種垃圾收集器
類載入機制,也就是雙親委派模型
Java內存模型
happens-before規則
volatile關鍵字使用規則
也許面試無用,但在走向大牛的路上,不可不會。
11. Web方面的一些問題
Java主要面向Web端,因此Web的一些問題也是必問的。面試官問得最多的兩個問題是:
談談分散式Session的幾種實現方式
常用的四種能答出來自然是讓面試官非常滿意的,另外一個常問的問題是:
講一下Session和Cookie的區別和聯繫以及Session的實現原理
轉發分享是一種美德
點擊展開全文


※學習JAVA需要哪些基礎?
※40個只有程序員才看得懂的段子
※0基礎轉IT,哪個方向容易些?
※SpringBoot使用logback日誌按天滾動
※當編程語言變成妹子,這世界將會怎樣!
TAG:java學習吧 |
※大眾汽車集團擬使用VR來提升員工的工作技能,上萬名員工因此受益
※你工作時的 BGM 是?
※TWICE私下和熒幕形象不同?合作過的工作人員公開對Twice的評價
※IBM、Intel、NVIDIA和 AMD 等因 AI 工作負載「將重新設計處理器」
※BoA公開作為SM公司理事的工作日常,你能猜到她具體是做什麼嗎?
※如何在3DS MAX中完美模擬工作室照明?
※Snow Peak 以日本傳統工作服為主題推出「LOCAL WEAR」和服系列
※前端生態混亂,AMP&MIP在努力做標準化工作
※從AE到AM——廣告AE日常工作實操指南
※設計師工作室水彩藝術工具包PNG免摳圖+AI+PSD源文件
※AI教程/工作中的設計師
※PlusAI公司聯合奇瑞汽車 將推進自動駕駛技術研發、集成測試等工作
※新書:軟銀的高速PDCA工作法
※時裝工作者們的風骨也會影響這個社會——蕾虎學院第二講於紐約PARSONS
※越獄插件:調整iPhone X後台工作方式,上滑動就能關閉APP!
※CiCi老師工作室正式上線啦
※IBM Cloud推出最強英偉達GPU,簡化AI和HPC工作負載
※ESO的VLT首次作為16米望遠鏡工作
※先理解Mask R-CNN的工作原理,然後構建顏色填充器應用
※索尼SCEA前CEO成立新公司幫助年輕獨立遊戲工作室