離職美團,面試了阿里、百度多家互聯(lián)網(wǎng)公司,熬夜為大家肝出這些

前言

由于個人發(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)該具備哪些技能

首先,簡單的聊一下我認為的 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、負載均衡算法。
  • 框架: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。

嚴格來說,要完全做到上面這些有點難,我自己也并不具備,但是,我們可以將其視為目標(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ī)劃

我已經(jīng)把這些面試內(nèi)容整理成了一份pdf文檔,還有Java的學(xué)習(xí)文檔,需要的朋友點擊:https://docs.qq.com/doc/DU1d3emZCQ0dxdWhM即可收獲!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容