前言
由于個人發(fā)展的原因和工作上的變動,產(chǎn)生了想出來看看機會的想法冗澈。經(jīng)過了一段時間的準(zhǔn)備钦勘,3月下旬開始出來面試,面到了 5月下旬亚亲,如愿拿到了自己心儀公司的 offer彻采。按照自己的習(xí)慣,將這次面試過程中的一些經(jīng)驗總結(jié)捌归、心得體會記錄下來肛响,自己留個記錄,也希望可以幫助到一些同學(xué)惜索。
個人情況
坐標(biāo)北京特笋,15 年本科畢業(yè)于普通一本,畢業(yè)后就職于一家傳統(tǒng)電信公司巾兆,17 年后就職于美團點評猎物。
4 年經(jīng)驗應(yīng)該具備哪些技能
首先,簡單的聊一下我認(rèn)為的 4 年經(jīng)驗左右角塑、優(yōu)秀的 Java 程序員應(yīng)該具備的技能有哪些蔫磨,按“專業(yè)技能”和“項目”兩塊,包括但不限于以下內(nèi)容圃伶。
專業(yè)技能方面
- 基礎(chǔ):JDK 常用類的原理质帅、源碼、使用場景留攒。
- 設(shè)計模式:常用幾種的原理煤惩、使用場景,單例炼邀、動態(tài)代理魄揉、模板、責(zé)任鏈等拭宁。
- 數(shù)據(jù)結(jié)構(gòu):數(shù)組洛退、鏈表、棧杰标、隊列兵怯、樹。
- 網(wǎng)絡(luò):TCP腔剂、HTTP媒区、HTTPS、負(fù)載均衡算法。
- 框架:Spring IoC 原理袜漩、Spring AOP 原理和使用绪爸、Spring 常用的擴展點、MyBatis 的核心流程宙攻。
- 中間件:常用中間件的核心原理與最佳實踐奠货,并對其中的 1 到 2 個有深入的學(xué)習(xí),Redis座掘、Kafka(RocketMQ递惋、RabbitMQ)、Dubbo溢陪、Zookeeper丹墨。
- 數(shù)據(jù)庫(MySQL):索引原理、隔離級別嬉愧、鎖機制贩挣、分庫分表、慢 SQL 定位及優(yōu)化没酣、線上問題解決王财。
- Netty:NIO 原理、核心組件裕便、I/O 多路復(fù)用(epoll)绒净、零拷貝。
- JVM:運行時數(shù)據(jù)區(qū)偿衰、垃圾回收算法挂疆、垃圾回收器(CMS、G1)下翎、常用配置參數(shù)缤言、線上問題定位及解決。
- 穩(wěn)定性保障:隔離视事、限流胆萧、熔斷、降級等俐东。
- Linux:基本命令的使用跌穗、快速定位和排查問題。
- 分布式理論:CAP虏辫、BASE蚌吸、2PC、3PC砌庄、TCC羹唠。
項目方面
- 能獨立完成一個復(fù)雜模塊的需求分析奕枢、方案設(shè)計和最終落地實現(xiàn)。
- 能不斷思考肉迫,尋找更優(yōu)的設(shè)計和解決方案验辞,積極優(yōu)化慢 SQL稿黄、慢服務(wù)喊衫。
- 具備排查問題的能力,遇到線上問題能及時定位和修復(fù)上線杆怕,例如:數(shù)據(jù)庫死鎖族购、服務(wù)器宕機、服務(wù)器 Full GC 頻繁等陵珍。
- 具備難題攻關(guān)的能力寝杖,能不斷解決項目遇到的挑戰(zhàn),能給予初級工程師技術(shù)上的指導(dǎo)互纯。
- 初步具備帶領(lǐng)團隊(1-3人左右)的能力瑟幕,能合理分配需求,做好進度把控留潦、風(fēng)險評估只盹、Code Review。
嚴(yán)格來說兔院,要完全做到上面這些有點難殖卑,我自己也并不具備,但是坊萝,我們可以將其視為目標(biāo)孵稽,不斷去努力。
面試常見形式
大廠面試通常是“連環(huán)炮”的形式十偶,舉個栗子:
面試官:用過哪些 Map
我:LinkedHashMap菩鲜、ConcurrentHashMap、HashMap惦积、TreeMap
面試官:這四種 Map 的區(qū)別
我:ConcurrentHashMap 線程安全睦袖,LinkedHashMap 可以記錄插入順序和訪問順序,TreeMap 可以自定義排序荣刑,除了這幾個場景馅笙,其他場景基本都可以使用 HashMap
面試官:ConcurrentHashMap 怎么保證線程安全
我:JDK 1.8 以前通過分段鎖,JDK 1.8 以后通過 CAS + Synchronized
面試官:ConcurrentHashMap 在 JDK 1.8 前后的鎖有什么區(qū)別
我:JDK 1.8 以前鎖分段厉亏,JDK 1.8 以后鎖單個節(jié)點董习,鎖粒度降低,并發(fā)度變高
這種模式的問法爱只,其實就是想了解候選人對一個知識點的理解是僅僅停留在表面皿淋,還是真的去深入研究過。
面試內(nèi)容
下面介紹下一些常見的面試內(nèi)容,其中的面試題不一定是我真實遇到的窝趣,有可能是從別人的面試題中收集的疯暑,也有可能是我自己覺得重要的知識點,僅供參考哑舒。
我已經(jīng)把這些面試內(nèi)容整理成了一份pdf文檔妇拯,還有Java的學(xué)習(xí)文檔,需要的朋友點擊:https://docs.qq.com/doc/DU1d3emZCQ0dxdWhM即可收獲洗鸵!
1越锈、項目
項目對于一個 3 - 5 年經(jīng)驗的開發(fā)來說是非常重要的,面試官也非潮毂酰看重這一塊甘凭。這個經(jīng)驗的開發(fā)基本是各大公司的編碼主力,因此面試這個年限的候選人火邓,通常項目是很重要的一塊丹弱。面試官通常會讓你先自己介紹下自己參與度最高(或者最牛逼)的項目,然后從中進行提問铲咨。常見的如以下:
- 介紹下你參與度最高的項目
- 畫下項目的架構(gòu)圖
- 如果核心流程處理到一半躲胳,服務(wù)器崩潰了,會怎么處理
- 項目中遇到過哪些挑戰(zhàn)或問題鸣驱,怎么解決的
- 項目的穩(wěn)定性和可用性怎么保障
- 數(shù)據(jù)安全這塊怎么設(shè)計
- 項目的技術(shù)選型泛鸟,為什么選這些
- ...
2、場景題
越到后面的面試官踊东,越喜歡問場景題北滥,場景題比較考驗候選人平時的積累和解決問題能力。這個環(huán)節(jié)很容易掛掉一批人闸翅,特別是容易緊張的同學(xué)再芋,很容易腦子會一片空白。場景題的核心一般是處理大數(shù)據(jù)量的問題坚冀、解決性能方面的問題济赎。
場景題本質(zhì)上是比較開放的,沒有什么標(biāo)準(zhǔn)答案记某,只要自己的方案能夠解決問題司训,能夠“自圓其說”就行。
這個環(huán)節(jié)面試官可能會將線上真實的場景拿出來提問液南,我自己就遇到過壳猜。
3、專業(yè)技能
集合
- 經(jīng)常用到哪些 Map
- 這幾種 Map 的區(qū)別
- CocurrentHashMap 怎么保證線程安全
- CocurrentHashMap 在 JDK 1.8 前后的鎖有什么區(qū)別
- 聊下 HashMap 的原理
- HashMap 在 Put 時滑凉,新鏈表節(jié)點是放在頭部還是尾部
- HashMap 擴容時的流程
- HashMap 在 JDK 1.8 有什么改變
- CocurrentHashMap 在 JDK 1.8 有什么改變
- TreeMap 的原理
- Map统扳、List喘帚、Set 分別說下你知道的線程安全類和線程不安全的類
多線程、鎖
- 線程池使用的是哪種
- 線程池參數(shù)怎么配置
- 線程池各個參數(shù)的作用
- 線程池的參數(shù)配置要注意什么
- 線程池的工作流程
- JDK 中的并發(fā)類知道哪些
- AQS 的底層原理
- 介紹下悲觀鎖和樂觀鎖
- 使用過哪些鎖
- synchronized 和 Lock 的區(qū)別咒钟、使用場景
- synchronized 原理
- synchronized 作用于靜態(tài)方法吹由、普通方法、this朱嘴、Lock.class 的區(qū)別
- 為什么引入偏向鎖倾鲫、輕量級鎖,介紹下升級流程
- 死鎖的必要條件腕够,如何預(yù)防死鎖
- 介紹下 CountDownLatch 和 CyclicBarrier
- 介紹下 CAS级乍,存在什么問題
- 介紹下 ThreadLocal舌劳,存在什么問題
網(wǎng)絡(luò)
- HTTPS 是怎么加密的
- 普通 Hash 和一致性 Hash 原理
- 一致性 Hash 的缺點
- TCP 三次握手過程帚湘,為什么需要三次握手
- 為什么 TIME_WAIT 狀態(tài)需要經(jīng)過 2MSL 才能返回到 CLOSE 狀態(tài)
- TCP 的擁塞控制
- TCP 如何解決流控、亂序甚淡、丟包問題
- 為什么會出現(xiàn)粘包和拆包大诸,如何解決
Spring、Mybatis
- Mybatis 中 # 和 $ 的區(qū)別
- 怎么防止 SQL 注入
- 使用 Mybatis 時贯卦,調(diào)用 DAO(Mapper)接口時是怎么調(diào)用到 SQL 的
- 介紹下 Spring IoC 的流程
- BeanFactory 和 FactoryBean 的區(qū)別
- Spring 的 AOP 是怎么實現(xiàn)的
- Spring 的事務(wù)傳播行為有哪些资柔,講下嵌套事務(wù)
- 什么情況下對象不能被代理
- Spring 怎么解決循環(huán)依賴的問題
- 要在 Spring IoC 容器構(gòu)建完畢之后執(zhí)行一些邏輯,怎么實現(xiàn)
- @Resource 和 @Autowire 的區(qū)別
- @Autowire 怎么使用名稱來注入
- bean 的 init-method 屬性指定的方法里用到了其他 bean 實例撵割,會有問題嗎
- @PostConstruct 修飾的方法里用到了其他 bean 實例贿堰,會有問題嗎
- Spring 中,有兩個 id 相同的 bean啡彬,會報錯嗎羹与,如果會報錯,在哪個階段報錯
- Spring 中庶灿,bean 的 class 屬性指定了一個不存在的 class纵搁,會報錯嗎,如果會報錯往踢,在哪個階段
- Spring 中的常見擴展點有哪些
MySQL
- MySQL 索引的數(shù)據(jù)結(jié)構(gòu)
- 為什么使用 B+ 樹腾誉,與其他索引相比有什么優(yōu)點
- 各種索引之間的區(qū)別
- B+ 樹在進行范圍查找時怎么處理
- MySQL 索引葉子節(jié)點存放的是什么
- 聯(lián)合索引(復(fù)合索引)的底層實現(xiàn)
- MySQL 如何鎖住一行數(shù)據(jù)
- SELECT 語句能加互斥鎖嗎
- 多個事務(wù)同時對一行數(shù)據(jù)進行 SELECT FOR UPDATE 會阻塞還是異常
- MySQL 使用的版本和執(zhí)行引擎
- MySQL 不同執(zhí)行引擎的區(qū)別
- MySQL 的事務(wù)隔離級別
- MySQL 的可重復(fù)讀是怎么實現(xiàn)的
- MySQL 是否會出現(xiàn)幻讀
- MySQL 的 gap 鎖
- MySQL 的主從同步原理
- 分庫分表的實現(xiàn)方案
- 分布式唯一 ID 方案
- 如何優(yōu)化慢查詢
- explain 中每個字段的意思
- explain 中的 type 字段有哪些常見的值
- explain 中你通常關(guān)注哪些字段,為什么
JVM
- 運行時數(shù)據(jù)區(qū)
- 服務(wù)器使用的什么垃圾收集器
- CMS 垃圾收集的原理
- G1 垃圾收集的特點峻呕,為什么低延遲
- 有哪些垃圾回收算法利职,優(yōu)缺點
- 哪些對象可以作為 GC Roots
- 有哪些類加載器
- 雙親委派模式,哪些場景是打破雙親委派模式
- 線上服務(wù)器出現(xiàn)頻繁 Full GC瘦癌,怎么排查
- 定位問題常用哪些命令
- 介紹下 JVM 調(diào)優(yōu)的過程
Kafka
- 為什么使用 Kafka
- 介紹下 Kafka 的各個組件
- 如何保證寫入 Kafka 的數(shù)據(jù)不丟失
- 如何保證從 Kafka 消費的數(shù)據(jù)不丟失
- Kafka 為什么性能這么高
- 零拷貝技術(shù)使用哪個方法實現(xiàn)
- Java 中也有類似的零拷貝技術(shù)猪贪,是哪個方法
- Kafka 怎么保證消息的順序消費
- Kafka 怎么避免重復(fù)消費
- 什么是 HighWatermark 和 LEO
- 什么是 ISR,為什么需要引入 ISR
Redis
- 項目中使用的 Redis 版本
- Redis 在項目中的使用場景
- Redis 怎么保證高可用
- Redis 的選舉流程
- Redis 和 Memcache 的區(qū)別
- Redis 的集群模式
- Redis 集群要增加分片佩憾,槽的遷移怎么保證無損
- Redis 分布式鎖的實現(xiàn)
- Redis 刪除過期鍵的策略
- Redis 的內(nèi)存淘汰策略
- Redis 的 Hash 對象底層結(jié)構(gòu)
- Redis 中 Hash 對象的擴容流程
- Redis 的 Hash 對象的擴容流程在數(shù)據(jù)量大的時候會有什么問題嗎
- Redis 的持久化機制有哪幾種
- RDB 和 AOF 的實現(xiàn)原理哮伟、優(yōu)缺點
- AOF 重寫的過程
- 哨兵模式的原理
- 使用緩存時干花,先操作數(shù)據(jù)庫還是先操作緩存
- 為什么是讓緩存失效,而不是更新緩存
- 緩存穿透楞黄、緩存擊穿池凄、緩存雪崩
- 更新緩存的幾種設(shè)計模式
Zookeeper
- Zookeeper 的使用場景
- Zookeeper 怎么實現(xiàn)分布式鎖
- Zookeeper 怎么保證數(shù)據(jù)的一致性
- ZAB 協(xié)議的原理
- Zookeeper 遵循 CAP 中的哪些
- Zookeeper 和 Eureka 的區(qū)別
- Zookeeper 的 Leader 選舉
- Observer 的作用
- Leader 發(fā)送了 commit 消息,但是所有的 follower 都沒有收到這條消息鬼廓,Leader 就掛了肿仑,后續(xù)會怎么處理
分布式
- CAP 理論
- BASE 理論
- 分布式事務(wù) 2PC 和 TCC 的原理
- TCC 在 cancel 階段如果出現(xiàn)失敗怎么處理
- Paxos 算法、Raft 算法
4碎税、Hr 面
如果你一路過五關(guān)斬六將尤慰,最終來到了 Hr 面,那么恭喜你雷蹂,你已經(jīng)離 offer 非常非常近了伟端。可以開始暢想自己升職加薪匪煌,當(dāng)上總經(jīng)理责蝠,出任 CEO,迎娶白富美萎庭,走上人生巔峰的場景了霜医。
Hr 面主要是了解候選人的一些通用素質(zhì),經(jīng)常會問的問題如下:
- 介紹下自己投入最多的項目(當(dāng)時我就驚了驳规,Hr 也開始問項目了 )
- 離職的原因
- 當(dāng)前的薪資肴敛、績效
- 當(dāng)前在面試的其他公司的情況
- 平時有沒有學(xué)習(xí)的習(xí)慣,怎么學(xué)習(xí)的吗购,現(xiàn)在在學(xué)習(xí)什么
- 未來的規(guī)劃