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