最近的一些Java面試小結(jié)
前言
前段時(shí)間陸續(xù)面試了一些大中小公司,踩了不少坑,掛了很多,同時(shí)也有不少感悟和收獲。這里想把那段經(jīng)歷記錄一下,如果能對(duì)親們有所幫助就再好不過了。
面試的過程其實(shí)也是一個(gè)自我認(rèn)識(shí)和學(xué)習(xí)的過程,即便暫時(shí)沒打算跳槽,隔段時(shí)間出去面一面對(duì)自己還是有些好處的:不僅可以評(píng)估一下自己在市場的價(jià)值和競爭力,同時(shí)也能了解一些新技術(shù)、更新一下自己的技術(shù)棧。
而且在一個(gè)地方待久了,可能不自覺的就會(huì)陷入到一種「舒適區(qū)」,久而久之,就像溫水里的青蛙,萬一哪天被“優(yōu)化”了可能會(huì)不知所措。
本文主要從「項(xiàng)目」和「技術(shù)」兩個(gè)方面進(jìn)行總結(jié),除此之外還有一些比較開放式的問題。
元旦過了,“金三銀四”還會(huì)遠(yuǎn)嗎?春節(jié)后有想法的親們,可以嗨起來了!
項(xiàng)目
有人說:三年一道坎。
對(duì)于工作三年左右的伙伴們來說,「項(xiàng)目經(jīng)歷」可謂重中之重,可以說比具體的技術(shù)點(diǎn)更重要。
技術(shù)點(diǎn)其實(shí)大同小異,有些臨時(shí)刷刷題就能了解個(gè)大概。但項(xiàng)目經(jīng)歷往往難以臨時(shí)編造,如果不是自己真實(shí)做過的項(xiàng)目、或者沒有充分的準(zhǔn)備,一旦面試官問得稍微深入很可能 hold 不住,面試扣分不少、甚至可能直接掛掉。
因此不少面試官喜歡從項(xiàng)目入手,抽絲剝繭、步步深入,通過項(xiàng)目把技術(shù)點(diǎn)串起來考察。
不同人的項(xiàng)目千差萬別,但還是有一些共同亮點(diǎn)的:比如高并發(fā)場景,復(fù)雜的架構(gòu)設(shè)計(jì),JVM 調(diào)優(yōu)及問題排查等。
這些亮點(diǎn)有的話固然更好,但如果平時(shí) CRUD 居多、沒太多的亮點(diǎn),其實(shí)也不必太慌,技術(shù)亮點(diǎn)不多的話,可以多思考一些業(yè)務(wù)上的亮點(diǎn),比如:
業(yè)務(wù)模型比較復(fù)雜 對(duì)業(yè)務(wù)整體的架構(gòu)設(shè)計(jì)很熟悉 業(yè)務(wù)模塊拆分比較合理 自己在業(yè)務(wù)中做過哪些擴(kuò)展和優(yōu)化? 業(yè)務(wù)數(shù)據(jù)的上下游流轉(zhuǎn)是怎樣的? 遇到過什么問題,如何解決的? 等等
這些其實(shí)也是亮點(diǎn),可以讓面試官看到你平時(shí)對(duì)業(yè)務(wù)有自己的思考和理解,而不是只關(guān)注自己的那一塊,不只是寫代碼的機(jī)器。
其實(shí)面試官對(duì)你的項(xiàng)目是一無所知的,他的印象僅僅停留在你簡歷上描述的那些文字(而且有些面試官可能是被臨時(shí)拉過來的,別問我為什么知道??)。面試官通常的開場白就是讓你自我介紹,其實(shí)這也是一個(gè)考察語言組織能力和口頭表達(dá)能力的地方。
技術(shù)
我們面的畢竟是技術(shù)崗,技術(shù)本身的重要性不言而喻。
技術(shù)面試中,最重要的可以說是「技術(shù)體系」。也就是你不僅要有技術(shù)的深度和廣度,更要能把它們串起來,其實(shí)有不少技術(shù)點(diǎn)是相通或相似的,如果面試中能夠觸類旁通、舉一反三,是一個(gè)很好的加分項(xiàng)。比如:
Redis 的 AOF 和 MySQL 的 bin log Spring 中的 BeanDefinition 和 JVM 中類的元信息 布隆過濾器和 HashMap 等等
技術(shù)的積累雖然主要在平時(shí),但刷刷面試題還是很有必要的,有不少其實(shí)就是所謂的“八股文”。這里主要列出本人面試過程中真實(shí)遇到的一些面試題,僅供參考。
Java
線程池
核心參數(shù)有哪些? 任務(wù)執(zhí)行流程 任務(wù)拒絕策略
鎖
synchronized 鎖升級(jí)過程 ReentrantLock 實(shí)現(xiàn)原理(AQS) 公平鎖如何實(shí)現(xiàn)? volatile 特性
HashMap
HashMap & ConcurrentHashMap 實(shí)現(xiàn)原理 ConcurrentHashMap 如何實(shí)現(xiàn)線程安全
MySQL
索引 分類?使用場景? InnoDB 索引的結(jié)構(gòu)(B+樹),為什么不用 B 樹? 如何查看索引的使用情況?Explain 關(guān)注哪些字段? 事務(wù) 隔離級(jí)別 RC/RR 的實(shí)現(xiàn)原理
Redis
常用數(shù)據(jù)結(jié)構(gòu) zset 實(shí)現(xiàn)原理 hash 擴(kuò)容過程 常見緩存問題 緩存穿透、緩存擊穿、緩存雪崩、熱點(diǎn) key 如何解決上述問題? 持久化:RDB、AOF,二者區(qū)別 Redis 為什么快?線程模型是怎樣的? 內(nèi)存滿了怎么辦?淘汰策略有哪些? 使用什么集群框架?
Spring
IoC、AOP 實(shí)現(xiàn) 事務(wù)傳播特性、失效場景 JDK & CGLib 區(qū)別 Spring Boot 啟動(dòng)原理
Dubbo
Dubbo 架構(gòu) 負(fù)載均衡算法、容錯(cuò)策略、灰度測試 SPI 機(jī)制 RPC 調(diào)用過程 RPC & HTTP 二者區(qū)別與聯(lián)系 為什么 Spring Cloud 使用 HTTP 而非 RPC?
JVM
運(yùn)行時(shí)內(nèi)存劃分 垃圾收集算法 一個(gè)對(duì)象的內(nèi)存分配過程? CMS 收集器 收集過程 哪個(gè)過程會(huì)有 STW? 如何處理內(nèi)存碎片問題? G1 收集器特點(diǎn) GC Roots 有哪些? JVM 常用參數(shù)配置有哪些? 內(nèi)存占用過多,如何排查?
RocketMQ
整體架構(gòu) 如何保證消息的可靠性? 如何實(shí)現(xiàn)順序消息? 消費(fèi)者接口冪等設(shè)計(jì) 事務(wù)消息實(shí)現(xiàn)
分布式
分布式鎖 Redis 如何實(shí)現(xiàn)?命令? ZooKeeper 如何實(shí)現(xiàn)? 獲取鎖失敗時(shí)如何處理? 分布式事務(wù) 2PC:缺點(diǎn)? 3PC:解決了 2PC 什么問題? TCC:缺點(diǎn)? 最終一致性:MQ 實(shí)現(xiàn)流程 實(shí)現(xiàn)框架(Seata)
其他
除了上面的「項(xiàng)目」和「技術(shù)」,可能還會(huì)問到一些其他問題,比如場景設(shè)計(jì)與分析、算法,還可能有一些比較開放的問題,下面介紹下我所遇到的。
場景設(shè)計(jì)&分析
秒殺場景設(shè)計(jì)
比較典型的場景設(shè)計(jì),電商類的公司很可能會(huì)問到,網(wǎng)上有很多案例和文章分析,這里不再贅述。
分布式鎖設(shè)計(jì)
這個(gè)應(yīng)該不是熱門,本人也就遇到過一次,不過那一次被搞得有點(diǎn)懵,可能更多的是考察思路,大家可以多思考一下。
JVM 問題排查:線上 JVM 內(nèi)存、CPU 飆升,如何去排查?
主要涉及一些常用的 Linux 命令和 JDK 自帶工具,比如 top、jstack、jmap 等,以及阿里的開源工具 Arthas 等。
雖然在實(shí)際情況中我們可能很少有機(jī)會(huì)接觸(小小開發(fā)通常沒權(quán)限,還是要運(yùn)維大佬支持),但這些工具還是要了解的,可以在本地跑個(gè) Demo 去驗(yàn)證,以免到時(shí)候答不上來。
容災(zāi)處理
假如線上所有機(jī)器(包括服務(wù)器、數(shù)據(jù)庫、緩存服務(wù)器)全部宕機(jī),如何處理?
PS: 這些場景設(shè)計(jì)和分析的問題,通常比較綜合,一般是考察對(duì)一個(gè)場景的整體設(shè)計(jì),或者分析和解決問題的思路。
算法
爬樓梯 二叉樹遍歷
PS: 算法問題遇到的不是很多,有些考察算法可能就是單純的面試流程。當(dāng)然,字節(jié)這類的公司除外,想去的話肯定還是要刷很多算法的。
相比之下,大部分公司更注重「項(xiàng)目深度」和「技術(shù)體系」,或者給出一些實(shí)際的場景,考察分析和解決問題的經(jīng)驗(yàn)和思路。
開放問題
這些問題比較開放,沒有固定的答案,可能就是面試官想看下你的臨場發(fā)揮吧。遇到的幾個(gè)問題如下:
有沒有帶過人?經(jīng)歷是怎樣的? 如果你作為 PM,如何從整體協(xié)調(diào)一個(gè)項(xiàng)目? 如果你在團(tuán)隊(duì)推行 DDD,你會(huì)怎么做? 你有什么缺點(diǎn)?優(yōu)點(diǎn)? 未來三年的職業(yè)規(guī)劃? 在公司主要有哪些成長? 上級(jí)、同事對(duì)你的評(píng)價(jià)? 最近在看什么書?
末了
面試流程
我所接觸的面試大部分是「三輪技術(shù)面 + HR 面」的形式,也有一些是兩輪技術(shù)面,不同公司可能不太一樣。一面一般是電話面初篩,后面二三輪技術(shù)面和 HR 面通常在一起。這樣其實(shí)也挺好,跑一趟就行了。
心態(tài)
面試的心態(tài)也很重要。其實(shí)你跟面試官之間是平等的,面試的過程是讓他對(duì)你更加了解,而不是他對(duì)你的考核。
我剛開始面的時(shí)候,由于好久沒面試,再加上本來就不太愛說話,剛開始緊張的不行,后來面了幾次之后才逐漸有點(diǎn)感覺。如果較長時(shí)間沒面試,可以先面一兩家練練手、找找感覺。
當(dāng)然,整個(gè)面試時(shí)間也不建議拖得太久,否則整個(gè)過程會(huì)比較累,最好還是一鼓作氣。
啰里啰嗦一堆,其實(shí)面試還是挺看運(yùn)氣的,如果跟面試官聊得比較投機(jī),對(duì)你的評(píng)分自然也不錯(cuò)。
最后,預(yù)祝想跳槽的親們一路綠燈!
— 【 THE END 】— 本公眾號(hào)全部博文已整理成一個(gè)目錄,請(qǐng)?jiān)诠娞?hào)里回復(fù)「m」獲取! 3T技術(shù)資源大放送!包括但不限于:Java、C/C++,Linux,Python,大數(shù)據(jù),人工智能等等。在公眾號(hào)內(nèi)回復(fù)「1024」,即可免費(fèi)獲?。?!
