我們們開篇點題,說一說Java程式設計師應該具備的技能,這也是Java程式設計師們比較關心的問題。這裡要說明一下,以下列舉的內容不是都要會的東西,但是如果你掌握得越多,最終能得到的評價、拿到的薪水勢必也越高。
基本語法
這包括static、final、transient等關鍵字的作用,foreach迴圈的原理等等。如果面試官問你static關鍵字有哪些作用,你答出static修飾變數、修飾方法面試官會認為你合格,答出靜態塊,會認為你不錯,答出靜態內部類會認為你很好,答出靜態導包會對你很滿意,因為能看出你非常熱衷研究技術。
小編插一句:面試和被面試本身就是相對的,面試官能問這個問題同時也讓面試者感覺到面試官也是一個喜愛研究技術的人,增加了面試者對公司的好感。不要覺得這太吹毛求疵了,越簡單的問題越能看出一個人的水平,別人對你技術的考量絕大多數都是以深度優先、廣度次之,切記。
集合
非常重要,也是必問的內容。基本上就是List、Map、Set,問的是各種實現類的底層實現原理,實現類的優缺點。
集合要掌握的是ArrayList、LinkedList、Hashtable,HashMap、ConcurrentHashMap、HashSet的實現原理,能流利作答,當然能掌握CopyOnWrite容器和Queue是再好不過的了。另外多說一句,ConcurrentHashMap的問題在面試中問得特別多,大概是因為這個類可以衍生出非常多的問題。
設計模式
設計模式在工作中還是非常有用的,23種設計模式中重點研究常用的十來種就可以了,面試中關於設計模式的問答主要是三個方向:
▌你的專案中用到了哪些設計模式,如何使用
▌知道常用設計模式的優缺點
▌能畫出常用設計模式的UML圖
多執行緒
這也是必問的一塊了,如果你有3年左右的工作經驗,就基本上不會再問你怎麼實現多執行緒了,會問得深入一些。比如說Thread和Runnable的區別和聯絡,多次start一個執行緒會怎麼樣、執行緒有哪些狀態。
另外,執行緒池也是比較常問的一塊,常用的執行緒池有幾種?這幾種執行緒池之間有什麼區別和聯絡?執行緒池的實現原理是怎麼樣的?實際一些的,會給你一些具體的場景,讓你回答這種場景該使用什麼樣的執行緒池比較合適。
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方法上會增加面試官對你的好感。
如果你也想在IT行業拿高薪,可以參加我們的訓練營課程,選擇最適合自己的課程學習,技術大牛親授,7個月後,進入名企拿高薪。我們的課程內容有:Java工程化、高效能及分散式、高效能、深入淺出。高架構。效能調優、Spring,MyBatis,Netty原始碼分析和大資料等多個知識點。如果你想拿高薪的,想學習的,想就業前景好的,想跟別人競爭能取得優勢的,想進阿里面試但擔心面試不過的,你都可以來,群號為:71859422
如果用過Netty,可能會問一些Netty的東西,畢竟這個框架基本屬於當前最好的NIO框架了,大多數網際網路公司也都在用Netty。
JDK原始碼
要想拿高工資,JDK原始碼不可不讀。上面的內容可能還和具體場景聯絡起來,JDK原始碼就是實打實地看你平時是不是愛鑽研了。JDK原始碼其實沒什麼好總結的,純粹看個人,總結一下比較重要的原始碼:
▌List、Map、Set實現類的原始碼
▌ReentrantLock、AQS的原始碼
▌AtomicInteger的實現原理,主要能說清楚CAS機制並且AtomicInteger是如何利用CAS機制實現的
▌執行緒池的實現原理
▌Object類中的方法以及每個方法的作用
框架
老生常談,面試必問的東西。一般來說會問你一下你們專案中使用的框架,然後給你一些場景問你用框架怎麼做,比如想要在Spring初始化bean的時候做一些事情該怎麼做、想要在bean銷燬的時候做一些事情該怎麼做、MyBatis中$和#的區別等等,這些都比較實際了,平時積累得好、有多學習框架的使用細節自然都不成問題。
如果上面你的問題答得好,面試官往往會深入地問一些框架的實現原理。問得最多的就是Spring AOP的實現原理,當然這個很簡單啦,兩句話就搞定的的事兒,即使你不會準備一下就好了。
資料庫
資料庫十有八九也都會問到。一些基本的像union和union all的區別、left join、幾種索引及其區別就不談了,比較重要的就是資料庫效能的優化,如果對於資料庫的效能優化一竅不通,那麼有時間,還是建議你在面試前花一兩天專門把SQL基礎和SQL優化的內容準備一下。
不過資料庫倒是不用擔心,一家公司往往有很多部門,如果你對資料庫不熟悉而基本技術又非常好,九成都是會要你的,估計會先把你放到對資料庫使用不是要求非常高的部門鍛鍊一下。
資料結構和演算法分析
資料結構和演算法分析,對於一名程式設計師來說,會比不會好,而且在工作中絕對能派上用場。陣列、連結串列是基礎,棧和佇列深入一些但也不難,樹挺重要的,比較重要的樹AVL樹、紅黑樹,可以不瞭解它們的具體實現,但是要知道什麼是二叉查詢樹、什麼是平衡樹,AVL樹和紅黑樹的區別。
Java虛擬機器
Java虛擬機器,很重要的一塊內容,也許面試的時候用不上,但在走向大牛的路上,不可不會。
Java虛擬機器中比較重要的內容:
▌Java虛擬機器的記憶體佈局
▌GC演算法及幾種垃圾收集器
▌類載入機制,也就是雙親委派模型
▌Java記憶體模型
▌happens-before規則
▌volatile關鍵字使用規則
以上這些問題絕對關乎你的薪資,能領悟多少,就看自己了,在通往成功的路上可不能太懶哦!
下面分享一下我收藏的一個系統學習圖譜,希望能夠幫到大家。
想了解的話後面的可以更新。如果你想拿高薪的,想學習的,想就業前景好的,想跟別人競爭能取得優勢的,想進阿里面試但擔心面試不過的,你都可以來,群號為:642830685
1、想學習JAVA這一門技術, 對JAVA感興趣零基礎,想從事JAVA工作的。
2、工作1-5年,感覺自己技術不行,想提升的
3、如果沒有工作經驗,但基礎非常紮實,想提升自己技術的。
4、還有就是想一起交流學習的。
5.小號加群一律不給過,謝謝。
學習交流群:642830685
轉發此文章請帶上原文連結,否則將追究法律責任