目前一線城市的薪資水平在13到40k之間,但是找工作的時候并不僅僅有工作經(jīng)驗就行了,還需要一定的專業(yè)知識。如果你野心更大,想要進阿里美團頭條等等這些大廠的話,那就需要更多的專業(yè)知識。那么,一個三年工作經(jīng)驗的Java程序員應(yīng)該要具備哪些知識呢?
我整理了之后發(fā)現(xiàn),程序員需要懂好多的知識。
一、項目經(jīng)驗
項目經(jīng)驗是程序員們最重要的財富,也是面試中必問的問題。一般面試官都會借著項目經(jīng)驗來考查應(yīng)聘者的溝通能力和思考能力。三年工作經(jīng)驗的程序員一般都會有兩個以上的項目經(jīng)驗,但實際我們大部分的情況都是做產(chǎn)品的一個功能或一個模塊。雖然我們能很好的完成工作上的要求,但是對于面試這肯定是不夠的。對于面試來說,我們還要完成以下四點。
· 知道你的項目到底是做什么的,有哪些功能。
· 知道你做的項目在整個項目中所處的位置及作用,并能清晰地闡述模塊間的調(diào)用關(guān)系。
· 知道你項目的整體架構(gòu)和使用到的中間件,并對中間件的原理有一定的了解。
· 能流暢地闡述自己在項目中解決過的比較復(fù)雜的問題。
二、Java的基礎(chǔ)知識
技術(shù)知識這塊面試還是蠻常見的。不過大多問的比較簡單。這是我羅列的一些我曾被問到的問題,大家私下參考一下。
· 棧和隊列的區(qū)別
· 接口和抽象類的區(qū)別
· Int和Integer的區(qū)別和自動拆箱/裝箱的相關(guān)問題
· 常量池相關(guān)問題
三、集合框架
集合框架的底層原理,是面試很常見的問題。無論去大公司面試,還是去小公司面試都會問。只不過問深問淺的區(qū)別。
· ArrayList,LinkedList,HashMap,LinkedHashMap,ConcurrentHashMap的底層實現(xiàn)原理
· 1.7版本和1.8版本的HashMap的區(qū)別
· HashMap能不能排序?HashMap的長度為什么要是2的冪次方?
不過不管怎么樣,大家去面試的話,都要把上述的問題都盡量弄懂。最低的要求就是把hashmap的底層原理弄懂。
四、多線程
· 創(chuàng)建線程的幾種方式?Wait,sleep分別是誰的方法,區(qū)別?線程間的通信方式?
· 介紹下什么是死鎖,遇見過死鎖嗎?你是怎么排查的。(可以通過jps排查)
· 創(chuàng)建線程池的幾種方式,線程池有什么好處。
· 線程繼承和接口的區(qū)別,接口有什么好處。
· Synchronized、Lock、ReentrantLock的區(qū)別,用法及原理。
· ThreadLocal的用法和原理
· Volatile關(guān)鍵字的作用和原理
· 樂觀鎖和悲觀鎖
· 對公平鎖,非公平鎖,可重入鎖,自旋鎖,讀寫鎖的理解
· CAS是什么及底層原理
· ArrayBlockingQueue,LinkedBlockingQueue,SynchronousQueue等等堵塞隊列的理解
· ThreadPoolExecutor的傳入?yún)?shù)及內(nèi)部工作原理
· 給你一個具體的業(yè)務(wù)場景,讓你使用ThreadPoolExecutor創(chuàng)建一個適合的線程池
· 分布式環(huán)境下,怎么保證線程安全
多線程一般是高級程序員面試中的重點?,F(xiàn)在的項目高并發(fā)很多,所以面試多線程這塊還是挺多的。一般大廠會問得很深。從第十點開始就蠻難的了,大家可以根據(jù)自己的情況酌情學習。
五、JVM相關(guān)問題
· JVM內(nèi)存機制
· 介紹下垃圾收集機制,垃圾收集有哪些算法,各自的特點
· 聊聊GC,談?wù)凪ajor GC,F(xiàn)ullGe區(qū)別,垃圾收集器有哪些,他們的區(qū)別?
· OutOfMemeryError這個錯誤你遇到過嗎?你是怎么解決處理的?
· JVM調(diào)優(yōu)有哪些參數(shù),介紹下,線上環(huán)境上,你是怎么查看JVM的參數(shù)并進行調(diào)優(yōu)的?
· 能不能自己寫一個類叫java.lang.String(類加載的過程,雙親委派模型)
JVM這塊一直是高級程序員面試中的重點。想拿高薪這塊一定得懂。而且不僅懂,還要有一定的實戰(zhàn)經(jīng)驗。
六、框架相關(guān)問題
· Spring用了哪些設(shè)計模式?Spring注入bean的方式?對SpringIOC和SpringAOP的理解?
· Spring事務(wù)隔離級別和傳播機制?
· Mybatis的緩存機制(一級緩存和二級緩存),Mybatis的mapper文件中#和$的區(qū)別
· SpringMVC的流程
· Spring和SpringBoot的區(qū)別?
· 對SpringBoot的理解
· RPC框架有哪些,他們的區(qū)別?
· Dubbo的使用和理解
· Spring Cloud的使用和組件,談?wù)勀愕睦斫?/p>
框架這塊一直都是面試的重點,不過根據(jù)我的經(jīng)驗,框架這里一般不會問的很深,很少碰到讓你說源碼,主要還是考察你對框架的設(shè)計理解和框架的流程。
七、消息中間件
· 你們公司是如何進行消息中間件的技術(shù)選型?
· 如何保證消息中間件的高可用?
· 如何保證消息中間件重復(fù)發(fā)送消息?
· 消息隊列積壓了大量的消息,你該怎么處理?
· 如何保證消費者消費消息是有順序的?
· 讓你來開發(fā)一個消息中間件,你會怎么架構(gòu)?
消息中間件還是蠻重要的,無論對面試還是工作來說都是重點。大家一定要對這塊多研究,多了解。
八、Redis
· 你們公司為什么要使用Redis?Redis有幾種數(shù)據(jù)類型?
· Redis持久化機制?Redis的過期策略?
· 怎么保證Redis的高可用?
· 什么是緩存穿透?如何避免?什么是緩存雪崩?如何避免?
· 如何保證緩存與數(shù)據(jù)庫的雙寫一致性?
· Redis單線程模型原理,為什么能支撐高并發(fā)?
· Redis哨兵架構(gòu)的理解和底層原理
現(xiàn)在高并發(fā)場景越來越多,基本面試必問緩存,只是或深或淺而已。比較常問的就是1到5,6、7想挑戰(zhàn)大廠的可以去研究。
九、數(shù)據(jù)庫
· 工作中你是怎么優(yōu)化sql的?
· 什么情況下,索引會失效?
· 數(shù)據(jù)庫的存儲引擎,比如:MySQL的MyISAM和InnoDB區(qū)別?
· 索引的最左原則
· 索引的底層原理
· 你們公司是怎么進行分庫分表?分庫分表的方案
數(shù)據(jù)庫的優(yōu)化一般都會問,涉及索引的地方會問的多些,還會問到難度比較高的用庫分表,這里網(wǎng)上都有方案,一般都是主從庫或Mycat,大家可以去學習了解一下。
十、其他
· 分布式事務(wù)是怎么解決的?
· 分布式session方案?
· 設(shè)計一個秒殺場景
· 怎么防止表單多次提交
· Linux的基本操作命令
· ElasticSearch的使用和原理
· Zookeep的使用和原理
這塊主要是問你一些常見的業(yè)務(wù)場景,比較開放式,還會根據(jù)你自己的簡歷來問。比如你的簡歷項目里面有ElasticSearch,那么面試官就會問你這些中間件的使用和原理。如果你成功地通過了所有的技術(shù)面,那么恭喜你,你離收到offer無限接近了。
只知其概念而不知深入運用是達不到基本要求的,針對以上的知識點我準備了一套實用于所以開發(fā)人員的核心知識體系和深入PDF文檔(基礎(chǔ)知識-JVM-設(shè)計模式-Redis-數(shù)據(jù)結(jié)構(gòu)與算法-spring全家桶等全部有深入解析)
感興趣的可以到我的Java學習圈子: 免費獲取