目前一線城市的薪資水平在13到40k之間,但是找工作的時候並不僅僅有工作經驗就行了,還需要一定的專業知識。如果你野心更大,想要進阿里美團頭條等等這些大廠的話,那就需要更多的專業知識。那麼,一個三年工作經驗的Java程式設計師應該要具備哪些知識呢?
我整理了之後發現,程式設計師需要懂好多的知識。
一、專案經驗
專案經驗是程式設計師們最重要的財富,也是面試中必問的問題。一般面試官都會藉著專案經驗來考查應聘者的溝通能力和思考能力。三年工作經驗的程式設計師一般都會有兩個以上的專案經驗,但實際我們大部分的情況都是做產品的一個功能或一個模組。雖然我們能很好的完成工作上的要求,但是對於面試這肯定是不夠的。對於面試來說,我們還要完成以下四點。
· 知道你的專案到底是做什麼的,有哪些功能。
· 知道你做的專案在整個專案中所處的位置及作用,並能清晰地闡述模組間的呼叫關係。
· 知道你專案的整體架構和使用到的中介軟體,並對中介軟體的原理有一定的瞭解。
· 能流暢地闡述自己在專案中解決過的比較複雜的問題。
二、Java的基礎知識
技術知識這塊面試還是蠻常見的。不過大多問的比較簡單。這是我羅列的一些我曾被問到的問題,大傢俬下參考一下。
· 棧和佇列的區別
· 介面和抽象類的區別
· Int和Integer的區別和自動拆箱/裝箱的相關問題
· 常量池相關問題
三、集合框架
集合框架的底層原理,是面試很常見的問題。無論去大公司面試,還是去小公司面試都會問。只不過問深問淺的區別。
· ArrayList,LinkedList,HashMap,LinkedHashMap,ConcurrentHashMap的底層實現原理
· 1.7版本和1.8版本的HashMap的區別
· HashMap能不能排序?HashMap的長度為什麼要是2的冪次方?
不過不管怎麼樣,大家去面試的話,都要把上述的問題都儘量弄懂。最低的要求就是把hashmap的底層原理弄懂。
四、多執行緒
· 建立執行緒的幾種方式?Wait,sleep分別是誰的方法,區別?執行緒間的通訊方式?
· 介紹下什麼是死鎖,遇見過死鎖嗎?你是怎麼排查的。(可以透過jps排查)
· 建立執行緒池的幾種方式,執行緒池有什麼好處。
· 執行緒繼承和介面的區別,介面有什麼好處。
· Synchronized、Lock、ReentrantLock的區別,用法及原理。
· ThreadLocal的用法和原理
· Volatile關鍵字的作用和原理
· 樂觀鎖和悲觀鎖
· 對公平鎖,非公平鎖,可重入鎖,自旋鎖,讀寫鎖的理解
· CAS是什麼及底層原理
· ArrayBlockingQueue,LinkedBlockingQueue,SynchronousQueue等等堵塞佇列的理解
· ThreadPoolExecutor的傳入引數及內部工作原理
· 給你一個具體的業務場景,讓你使用ThreadPoolExecutor建立一個適合的執行緒池
· 分散式環境下,怎麼保證執行緒安全
多執行緒一般是高階程式設計師面試中的重點。現在的專案高併發很多,所以面試多執行緒這塊還是挺多的。一般大廠會問得很深。從第十點開始就蠻難的了,大家可以根據自己的情況酌情學習。
五、JVM相關問題
· JVM記憶體機制
· 介紹下垃圾收集機制,垃圾收集有哪些演算法,各自的特點
· 聊聊GC,談談Major GC,FullGe區別,垃圾收集器有哪些,他們的區別?
· OutOfMemeryError這個錯誤你遇到過嗎?你是怎麼解決處理的?
· JVM調優有哪些引數,介紹下,線上環境上,你是怎麼檢視JVM的引數並進行調優的?
· 能不能自己寫一個類叫java.lang.String(類載入的過程,雙親委派模型)
JVM這塊一直是高階程式設計師面試中的重點。想拿高薪這塊一定得懂。而且不僅懂,還要有一定的實戰經驗。
六、框架相關問題
· Spring用了哪些設計模式?Spring注入bean的方式?對SpringIOC和SpringAOP的理解?
· Spring事務隔離級別和傳播機制?
· Mybatis的快取機制(一級快取和二級快取),Mybatis的mapper檔案中#和$的區別
· SpringMVC的流程
· Spring和SpringBoot的區別?
· 對SpringBoot的理解
· RPC框架有哪些,他們的區別?
· Dubbo的使用和理解
· Spring Cloud的使用和元件,談談你的理解
框架這塊一直都是面試的重點,不過根據我的經驗,框架這裡一般不會問的很深,很少碰到讓你說原始碼,主要還是考察你對框架的設計理解和框架的流程。
七、訊息中介軟體
· 你們公司是如何進行訊息中介軟體的技術選型?
· 如何保證訊息中介軟體的高可用?
· 如何保證訊息中介軟體重複傳送訊息?
· 訊息佇列積壓了大量的訊息,你該怎麼處理?
· 如何保證消費者消費訊息是有順序的?
· 讓你來開發一個訊息中介軟體,你會怎麼架構?
訊息中介軟體還是蠻重要的,無論對面試還是工作來說都是重點。大家一定要對這塊多研究,多瞭解。
八、Redis
· 你們公司為什麼要使用Redis?Redis有幾種資料型別?
· Redis持久化機制?Redis的過期策略?
· 怎麼保證Redis的高可用?
· 什麼是快取穿透?如何避免?什麼是快取雪崩?如何避免?
· 如何保證快取與資料庫的雙寫一致性?
· Redis單執行緒模型原理,為什麼能支撐高併發?
· Redis哨兵架構的理解和底層原理
現在高併發場景越來越多,基本面試必問快取,只是或深或淺而已。比較常問的就是1到5,6、7想挑戰大廠的可以去研究。
九、資料庫
· 工作中你是怎麼最佳化sql的?
· 什麼情況下,索引會失效?
· 資料庫的儲存引擎,比如:MySQL的MyISAM和InnoDB區別?
· 索引的最左原則
· 索引的底層原理
· 你們公司是怎麼進行分庫分表?分庫分表的方案
資料庫的最佳化一般都會問,涉及索引的地方會問的多些,還會問到難度比較高的用庫分表,這裡網上都有方案,一般都是主從庫或Mycat,大家可以去學習瞭解一下。
十、其他
· 分散式事務是怎麼解決的?
· 分散式session方案?
· 設計一個秒殺場景
· 怎麼防止表單多次提交
· Linux的基本操作命令
· ElasticSearch的使用和原理
· Zookeep的使用和原理
這塊主要是問你一些常見的業務場景,比較開放式,還會根據你自己的簡歷來問。比如你的簡歷專案裡面有ElasticSearch,那麼面試官就會問你這些中介軟體的使用和原理。如果你成功地透過了所有的技術面,那麼恭喜你,你離收到offer無限接近了。
只知其概念而不知深入運用是達不到基本要求的,針對以上的知識點我準備了一套實用於所以開發人員的核心知識體系和深入PDF文件(基礎知識-JVM-設計模式-Redis-資料結構與演算法-spring全家桶等全部有深入解析)
因為文章篇幅有限,完整文章請點連結 ,覺得文章對你有幫助請給我一個贊哦,不勝感激。
點選領取,備註來源 領取學習文件及面試答案
領取方式,關注之後掃一掃,即可免費領取 Java進階面試寶典、微服務架構書籍