推薦閱讀:
春暖花開,宅在家裡快兩個月的在家辦公模式基本告一段落。企業復工,大家的工作生活終於可以迴歸正軌,相信不少朋友已經走出家門,迎戰跳槽季了。一些動作快的朋友已經拿到一兩個 Offer 了。
其實,除了表達能力和麵試技巧外,無非就從這些個方面進行準備:
一、那麼專業技能怎麼寫?
先問一下你自己會什麼,然後看看你意向的公司需要什麼。我說的是一般HR可能並不太懂技術,(當然內部人員來面試就不一樣了)所以他在篩簡歷的時候可能就盯著你專業技能的關鍵詞來看。對於公司有要求而你不會的技能,你可以提前花幾天時間學習一下,然後在簡歷上可以寫上自己瞭解這個技能。比如你可以這樣寫(下面這部分內容摘自我的簡歷,大家可以根據自己的情況做一些修改和完善):
- 計算機網絡、數據結構、算法、操作系統等課內基礎知識:掌握
- Java 基礎知識:掌握
- JVM 虛擬機(Java內存區域、虛擬機垃圾算法、虛擬垃圾收集器、JVM內存管理):掌握
- 高併發、高可用、高性能系統開發:掌握
- Struts2、Spring、Hibernate、Ajax、Mybatis、Redis、JQuery :掌握
- SSH 整合、SSM 整合、 SOA 架構:掌握
- Dubbo: 掌握
- Zookeeper: 掌握
- 常見消息隊列: 掌握
- Linux:掌握
- MySQL常見優化手段:掌握
- Spring Boot +Spring Cloud +Docker:瞭解
- Hadoop 生態相關技術中的 HDFS、Storm、MapReduce、Hive、Hbase :瞭解
- Python 基礎、一些常見第三方庫比如OpenCV、wxpy、wordcloud、matplotlib:熟悉
二、分享一下我面試某家公司Java高級開發崗位,文末會分享一些我個人的學習文檔
一面(基礎面:大約60分鐘)
- 自我介紹
- 對象相等的判斷,equals方法實現。 Hashcode的作用,與 equal 有什麼區別?
- Java中CAS算法?
- G1回收器講一下?
- HashMap,ConcurrentHashMap與LinkedHashMap的區別
- 如何在多線程環境下使用Map,ConcurrentHashMap原理,ConcurrentHashMap如何加鎖。
- 多線程併發的同步實現,有兩個方法,每個方法裡有a部分代碼和b部分代碼,我要讓兩個線程分別執行兩個方法,並且讓他們運行完a部分代碼再一起向下執行,如何實現。
- TCP連接中的三次握手和四次揮手,四次揮手的最後一個ack的作用是什麼,為什麼要time wait,為什麼是2msl。
- aio,nio,bio的瞭解
- ReetrantLock和synchronized的區別。
- Java有哪些悲觀鎖的實現?
- Java有哪些類實現了樂觀鎖?
二面(二面就死抓多線程問)
- 線程池有哪些參數?分別有什麼用?如果任務數超過的核心線程數,會發生什麼?阻塞隊列大小是多少?
- 數據庫連接池介紹下,底層實現說下
- hashset底層實現,hashmap的put操作過程
- 說說HaspMap底層原理?再說說它跟HaspTable和ConcurrentHashMap他們之間的相同點和不同點?
- 說說B+樹和B樹的區別,優缺點等?
- 算法題,對一個鏈表進行歸併排序,鏈表可能有環
- 怎麼實現一個線程安全的計數器?
- 原子類AtomicInteger實現原理是什麼?和你設計的計數器優劣比較?CAS怎麼實現原子操作的?
- Java中的鎖有什麼?synchronized與Lock的區別?公平鎖和非公平底層怎麼實現的?AQS原理詳細介紹一下?
- 你在項目中一般怎麼調優JVM的呢?
- 說一下GC吧,什麼時候進行Full GC呢?
- 你瞭解哪些收集器?CMS和G1。詳細談談G1的優點
三面(Redis和mysql也要掌握,面試也是必問)
- 瞭解哪些排序算法,講講複雜度
- 手撕歸併排序
- Redis有哪些數據結構?底層的編碼有哪些?有序鏈表採用了哪些不同的編碼?
- redis的hash數據結構最多能存儲多少個元素
- 自己如何實現RPC?
- mysql默認存儲引擎?MyISAM、InnoDB、MEMORY的區別
- 什麼是幻讀,如何解決
- 事務隔離級別有什麼?通過什麼來實現的?分別解決了什麼問題?
- 樂觀鎖與悲觀鎖的使用場景
四面(這裡問的技術問題就較多了 分佈式架構 dubbo Spring cloud Kafka 數據庫)
- 介紹對你技術能力幫助最大的項目,重點講架構設計思路
- 分佈式全局唯一ID怎樣來實現?
- dubbo的生產者如何發佈服務,註冊服務,消費者如何調用服務?
- dubbo負載均衡的策略有哪些?一致性哈希詳細聊一下?
- 分佈式session如何實現的
- 微服務你的理解?以及常用的微服務方案dubbo、spring cloud的比較?
- Kafka怎麼保證數據可靠性?
- 數據庫主從同步數據一致性如何解決?技術方案的優劣勢比較?
- 分佈式鎖的實現方式你知道有哪些?主流的解決方案是什麼?
- Spring兩大特性?AOP和IOC
- Spring的初始化過程?Spring bean的生命週期?
- 多個RPC請求進來,服務器怎麼處理併發呢?
面試建議是,一定要自信,敢於表達,面試的時候我們對知識的掌握有時候很難面面俱到,把自己的思路說出來,而不是直接告訴面試官自己不懂,這也是可以加分的。
三、比如,有如下的職位描述。
我們能從中挖掘出如下的技能需求點:
- 3年經驗,熟悉常用類庫
- 熟悉Spring和Mybatis框架
- 熟悉分佈式中間件(比如消息,緩存等中間件)
- 熟悉數據庫,最好是NoSQL
- 最好有大數據經驗
而關於非技能的要求如下:
- 有責任心,有主動性
- 需要有團隊合作的能力
- 需要有良好的編碼習慣,學習能力要強。
對於java高級開發而言,可以準備如下的話題,大家也能以此為參考,準備些其它的話題:
- 虛擬機內存優化
- 數據庫性能調優
- 分佈式高併發架構
- 一些熱門組件,比如redis,nginx等
- 大數據方向的用法
- java core(比如集合或多線程)方面的底層實現代碼
- Spring系列(比如IOC, AOP, MVC,Spring Boot, Spring Cloud)方面的底層實現代碼。
四、要準備到什麼程度:
- 最好結合項目實際說出真的用過這些技術。
- 最好往性能調優方面靠。
下面就以虛擬機為例,說下如何在面試中引出該話題,以及面試時該怎麼說。其它亮點話題也可以照此準備。
第一:在簡歷的最近項目介紹里加上類似這樣描述,“這個項目的內存要求比較高,雖然在項目裡分配的對象不少,但這個項目只被分配了1G內存,所以在這個項目裡,我實踐了一些定位排查內存問題的技能,也做了些調優的工作“,這樣面試官見到簡歷的描述,就會自然而然地提問了。
第二:在面試中總會有“項目介紹”這個環節,面試官會讓候選人介紹最近的(或最拿得出手)的一個項目,這樣大家就可以順勢說出剛才已經給出的描述。
第三:大家可以在回答數據庫或集合等方面的問題時引出這個話題,比如回答完JDBC問題後,大家可以說一句,“用好的Connection對象我們會及時關閉,否則它所佔用的內存對象無法被GC回收”,或者在談及List等集合類型時,同時多說一句,“用好的集合對象我們會及時clear掉,否則這個集合也會對一些對象產生強引用,這樣就會延遲對象的回收時間”。
第四:在自我總結時,可以說,有虛擬機調優的經驗。
那麼,在面試時,該怎麼說呢?
- 大家可時設置成null,以撤銷強引用。集合對象用好後應當及時clear。儘量別頻繁地使用String(或其它不變類)對象,這樣容易產生內存碎片。
- 還展示監控、定位和調優方面的綜合能力。這裡可以說下,比如通過Jprofiler+jmeter進行JVM性能調優的方法。
- 大家甚至可以看些虛擬機的底層實現細節,在面試中說下,這樣能大大提升自己的專業素養。
五、刷題:
既然是要面試,那麼就少不了刷題,實際上春節回家後,哪兒也去不了,我自己是刷了不少面試題的,所以在面試過程中才能夠做到心中有數,基本上會清楚面試過程中會問到哪些知識點,高頻題又有哪些,所以刷題是面試前期準備過程中非常重要的一點。
六、提示自身的軟實力(知識和技術)
第二個關鍵就要自己的自身實力過硬了,無論是你應屆生,還是工作好幾年,無論是校招還是社招,企業招聘的永遠是自身實力過硬的,也就是你的知識儲備,你的技術水平要達到要求,而提升自身軟實力的唯一辦法就是:不斷學習。
以下分享一些我個人的學習文檔,有需要的朋友自行選擇獲取:
友情提醒:獲取以上所有文檔資料,轉發+評論,關注我,然後私信回覆【面試】即可打包獲取!(免費分享的~)
- Java核心知識點
- Spring系列(實戰)
以上學習資料均免費放送,最後祝願各位順利拿到心儀的offer!
閱讀更多 Java領域佼佼者 的文章