'4 年Java經驗面試阿里、網易、拼多多的總結和心得體會'

"

前言

2019 年互聯網行業的行情不太好,也有可能接下去會一直這樣,特別是對於沒有大廠背景的同學來說,所以請記住一個很重要的原則:不要裸辭。

需要注意的點:

  • 先挑幾個小公司找下面試感覺,太久沒面,需要找找面試的感覺
  • 你要在回答的過程中讓面試官感受到你身上一些優秀的特質
  • 解決問題的過程能讓人快速成長,並且解決的問題可能會成為你面試時的亮點,特別是對於那些項目沒什麼亮點的。
  • 挑幾個自己做過最牛逼的功能、或者解決過最有挑戰的問題,並且要對這些內容理解的非常透徹,不能在給面試官介紹的時候“支支吾吾”
  • 框架也好、中間件也好,必須要有幾個特別深入研究過的
  • 自己講出來的每個功能點、知識點,都要做好“被挑戰”的心裡準備,因此對於每個功能點、知識點都要多思考。
  • 如果你是真想跳槽,或者說你已經裸辭了,那麼在收到電子 offer 前都不要停止面試,即使收到口頭 offer 也不穩,特別是在這個寒冬。
  • 面試前的準備非常重要,但更重要的是平時工作的積累,4 年經驗問的問題很多是無法通過臨時準備的,很多都是需要你不斷去積累,才能有好的方案。

"

前言

2019 年互聯網行業的行情不太好,也有可能接下去會一直這樣,特別是對於沒有大廠背景的同學來說,所以請記住一個很重要的原則:不要裸辭。

需要注意的點:

  • 先挑幾個小公司找下面試感覺,太久沒面,需要找找面試的感覺
  • 你要在回答的過程中讓面試官感受到你身上一些優秀的特質
  • 解決問題的過程能讓人快速成長,並且解決的問題可能會成為你面試時的亮點,特別是對於那些項目沒什麼亮點的。
  • 挑幾個自己做過最牛逼的功能、或者解決過最有挑戰的問題,並且要對這些內容理解的非常透徹,不能在給面試官介紹的時候“支支吾吾”
  • 框架也好、中間件也好,必須要有幾個特別深入研究過的
  • 自己講出來的每個功能點、知識點,都要做好“被挑戰”的心裡準備,因此對於每個功能點、知識點都要多思考。
  • 如果你是真想跳槽,或者說你已經裸辭了,那麼在收到電子 offer 前都不要停止面試,即使收到口頭 offer 也不穩,特別是在這個寒冬。
  • 面試前的準備非常重要,但更重要的是平時工作的積累,4 年經驗問的問題很多是無法通過臨時準備的,很多都是需要你不斷去積累,才能有好的方案。

4 年Java經驗面試阿里、網易、拼多多的總結和心得體會

個人情況

座標魔都,15 年本科畢業於普通一本,畢業後就職於一家傳統電信公司,17 年後就職於美團點評。

面試情況

相比於 17 年,由於有了美團的背景,今年在簡歷這關順利了很多,不得不感嘆大廠背景真香。

本著儘量少請假的原因,所以面試的公司比較少,只面了 3 家:阿里、網易、拼多多。

3 家公司都走完了面試流程,最後拿到了阿里和拼多多的 offer,自己還是比較滿意的。

至於網易掛掉的原因,具體原因不是很清楚,面試發揮的還行,BOSS 面的時候可以看出對我還是比較滿意,但最終沒有收到 offer。

如果對於這三家公司的面試流程有問題的,可以在公眾號上留言,能解答的我會第一時間解答。

4 年經驗應該具備哪些技能

首先,簡單的聊一下我認為的 4 年經驗左右、優秀的 Java 程序員應該具備的技能有哪些,按“專業技能”和“項目”兩塊,包括但不限於以下內容。

專業節能方面

  • 基礎:JDK 常用類的原理、源碼、使用場景。設計模式:常用幾種的原理、使用場景,單例、動態代理、模板、責任鏈等。
  • 數據結構:數組、鏈表、棧、隊列、樹。
  • 網絡:TCP、HTTP、HTTPS、負載均衡算法。
  • 框架:Spring IoC 原理、Spring AOP 原理和使用、Spring 常用的擴展點、MyBatis 的核心流程。
  • 中間件:常用中間件的核心原理與最佳實踐,並對其中的 1 到 2 個有深入的學習,Redis、Kafka(RocketMQ、RabbitMQ)、Dubbo、Zookeeper。數據庫(MySQL):索引原理、隔離級別、鎖機制、分庫分表、慢 SQL 定位及優化、線上問題解決。Netty:NIO 原理、核心組件、I/O 多路複用(epoll)、零拷貝。JVM:運行時數據區、垃圾回收算法、垃圾回收器(CMS、G1)、常用配置參數、線上問題定位及解決。穩定性保障:隔離、限流、熔斷、降級等。Linux:基本命令的使用、快速定位和排查問題。分佈式理論:CAP、BASE、2PC、3PC、TCC。

項目方面

  • 能獨立完成一個複雜模塊的需求分析、方案設計和最終落地實現。能不斷思考,尋找更優的設計和解決方案,積極優化慢 SQL、慢服務。具備排查問題的能力,遇到線上問題能及時定位和修復上線,例如:數據庫死鎖、服務器宕機、服務器 Full GC 頻繁等。具備難題攻關的能力,能不斷解決項目遇到的挑戰,能給予初級工程師技術上的指導。初步具備帶領團隊(1-3人左右)的能力,能合理分配需求,做好進度把控、風險評估、Code Review。

嚴格來說,要完全做到上面這些有點難,我自己也並不具備,但是,我們可以將其視為目標,不斷去努力。

面試常見形式

大廠面試通常是“連環炮”的形式,舉個栗子:

面試官:用過哪些 Map

我:LinkedHashMap、ConcurrentHashMap、HashMap、TreeMap

面試官:這四種 Map 的區別

我:ConcurrentHashMap 線程安全,LinkedHashMap 可以記錄插入順序和訪問順序,TreeMap 可以自定義排序,除了這幾個場景,其他場景基本都可以使用 HashMap

面試官:ConcurrentHashMap 怎麼保證線程安全

我:JDK 1.8 以前通過分段鎖,JDK 1.8 以後通過 CAS + Synchronized

面試官:ConcurrentHashMap 在 JDK 1.8 前後的鎖有什麼區別

我:JDK 1.8 以前鎖分段,JDK 1.8 以後鎖單個節點,鎖粒度降低,併發度變高

面試官:#%¥%……#%¥

我:喵喵喵~

這種模式的問法,其實就是想了解候選人對一個知識點的理解是僅僅停留在表面,還是真的去深入研究過

面試內容

下面介紹下一些常見的面試內容,其中的面試題不一定是我真實遇到的,有可能是從別人的面試題中收集的,也有可能是我自己覺得重要的知識點,僅供參考。

1、項目

項目對於一個 3 - 5 年經驗的開發來說是非常重要的,面試官也非常看重這一塊。這個經驗的開發基本是各大公司的編碼主力,因此面試這個年限的候選人,通常項目是很重要的一塊。面試官通常會讓你先自己介紹下自己參與度最高(或者最牛逼)的項目,然後從中進行提問。常見的如以下:

  • 介紹下你參與度最高的項目
  • 畫下項目的架構圖如果核心流程處理到一半,服務器崩潰了,會怎麼處理
  • 項目中遇到過哪些挑戰或問題,
  • 怎麼解決的項目的穩定性和可用性
  • 怎麼保障數據安全這塊怎麼設計項目的技術選型,
  • 為什麼選這些
  • ..

2、場景題

越到後面的面試官,越喜歡問場景題,場景題比較考驗候選人平時的積累和解決問題能力。這個環節很容易掛掉一批人,特別是容易緊張的同學,很容易腦子會一片空白。場景題的核心一般是處理大數據量的問題、解決性能方面的問題。

場景題本質上是比較開放的,沒有什麼標準答案,只要自己的方案能夠解決問題,能夠“自圓其說”就行。

這個環節面試官可能會將線上真實的場景拿出來提問,我自己就遇到過。

3、專業技能

集合

  • 經常用到哪些 Map這幾種 Map 的區別CocurrentHashMap 怎麼保證線程安全CocurrentHashMap 在 JDK 1.8 前後的鎖有什麼區別聊下 HashMap 的原理HashMap 在 Put 時,新鏈表節點是放在頭部還是尾部HashMap 擴容時的流程HashMap 在 JDK 1.8 有什麼改變CocurrentHashMap 在 JDK 1.8 有什麼改變TreeMap 的原理Map、List、Set 分別說下你知道的線程安全類和線程不安全的類

多線程、鎖

  • 線程池使用的是哪種線程池參數怎麼配置線程池各個參數的作用線程池的參數配置要注意什麼線程池的工作流程
  • JDK 中的併發類知道哪些AQS 的底層原理介紹下悲觀鎖和樂觀鎖使用過哪些鎖synchronized 和 Lock 的區別、使用場景
  • synchronized 原理synchronized 作用於靜態方法、普通方法、this、Lock.class 的區別為什麼引入偏向鎖、輕量級鎖,介紹下升級流程死鎖的必要條件,如何預防死鎖介紹下 CountDownLatch 和 CyclicBarrier介紹下 CAS,存在什麼問題介紹下 ThreadLocal,存在什麼問題

網絡

  • HTTPS 是怎麼加密的普通 Hash 和一致性 Hash 原理一致性 Hash 的缺點TCP 三次握手過程,為什麼需要三次握手為什麼 TIME_WAIT 狀態需要經過 2MSL 才能返回到 CLOSE 狀態TCP 的擁塞控制TCP 如何解決流控、亂序、丟包問題為什麼會出現粘包和拆包,如何解決

Spring、Mybatis

  • Mybatis 中 # 和 $ 的區別怎麼防止 SQL 注入使用 Mybatis 時,調用 DAO(Mapper)接口時是怎麼調用到 SQL 的介紹下 Spring IoC 的流程BeanFactory 和 FactoryBean 的區別Spring 的 AOP 是怎麼實現的Spring 的事務傳播行為有哪些,講下嵌套事務
  • 什麼情況下對象不能被代理Spring 怎麼解決循環依賴的問題要在 Spring IoC 容器構建完畢之後執行一些邏輯,怎麼實現@Resource 和 @Autowire 的區別@Autowire 怎麼使用名稱來注入bean 的 init-method 屬性指定的方法裡用到了其他 bean 實例,會有問題嗎
  • @PostConstruct 修飾的方法裡用到了其他 bean 實例,會有問題嗎Spring 中,有兩個 id 相同的 bean,會報錯嗎,如果會報錯,在哪個階段報錯Spring 中,bean 的 class 屬性指定了一個不存在的 class,會報錯嗎,如果會報錯,在哪個階段Spring 中的常見擴展點有哪些

MySQL

  • MySQL 索引的數據結構為什麼使用 B+ 樹,與其他索引相比有什麼優點各種索引之間的區別B+ 樹在進行範圍查找時怎麼處理
  • MySQL 索引葉子節點存放的是什麼聯合索引(複合索引)的底層實現
  • MySQL 如何鎖住一行數據SELECT 語句能加互斥鎖嗎
  • 多個事務同時對一行數據進行 SELECT FOR UPDATE 會阻塞還是異常MySQL 使用的版本和執行引擎MySQL 不同執行引擎的區別MySQL 的事務隔離級別
  • MySQL 的可重複讀是怎麼實現的MySQL 是否會出現幻讀
  • MySQL 的 gap 鎖
  • MySQL 的主從同步原理分庫分表的實現方案分佈式唯一 ID 方案如何優化慢查詢explain 中每個字段的意思explain 中的 type 字段有哪些常見的值explain 中你通常關注哪些字段,為什麼

JVM

  • 運行時數據區
  • 服務器使用的什麼垃圾收集器CMS 垃圾收集的原理G1 垃圾收集的特點,為什麼低延遲有哪些垃圾回收算法,優缺點
  • 哪些對象可以作為 GC Roots有哪些類加載器
  • 雙親委派模式,哪些場景是打破雙親委派模式
  • 線上服務器出現頻繁 Full GC,怎麼排查定位問題常用哪些命令
  • 介紹下 JVM 調優的過程

Kafka

  • 為什麼使用 Kafka介紹下 Kafka 的各個組件如何保證寫入 Kafka 的數據不丟失如何保證從 Kafka 消費的數據不丟失
  • Kafka 為什麼性能這麼高
  • 零拷貝技術使用哪個方法實現Java 中也有類似的零拷貝技術,是哪個方法Kafka 怎麼保證消息的順序消費Kafka 怎麼避免重複消費什麼是 HighWatermark 和 LEO什麼是 ISR,為什麼需要引入 ISR

Redis

  • 項目中使用的 Redis 版本Redis 在項目中的使用場景Redis 怎麼保證高可用Redis 的選舉流程Redis 和 Memcache 的區別
  • Redis 的集群模式Redis 集群要增加分片,槽的遷移怎麼保證無損Redis 分佈式鎖的實現Redis 刪除過期鍵的策略Redis 的內存淘汰策略
  • Redis 的 Hash 對象底層結構Redis 中 Hash 對象的擴容流程Redis 的 Hash 對象的擴容流程在數據量大的時候會有什麼問題嗎Redis 的持久化機制有哪幾種
  • RDB 和 AOF 的實現原理、優缺點AOF 重寫的過程哨兵模式的原理使用緩存時,先操作數據庫還是先操作緩存為什麼是讓緩存失效,而不是更新緩存緩存穿透、緩存擊穿、緩存雪崩更新緩存的幾種設計模式

Zookeeper

  • Zookeeper 的使用場景Zookeeper 怎麼實現分佈式鎖Zookeeper 怎麼保證數據的一致性ZAB 協議的原理Zookeeper 遵循 CAP 中的哪些Zookeeper 和 Eureka 的區別
  • Zookeeper 的 Leader 選舉Observer 的作用Leader 發送了 commit 消息,但是所有的 follower 都沒有收到這條消息,Leader 就掛了,後續會怎麼處理

分佈式

  • CAP 理論BASE 理論分佈式事務 2PC 和 TCC 的原理
  • TCC 在 cancel 階段如果出現失敗怎麼處理Paxos 算法、Raft 算法

關於這些面試題,我這邊也準備了很多面試題給同學們去做面試準備:

私信我【學習】即可免費獲取到

"

前言

2019 年互聯網行業的行情不太好,也有可能接下去會一直這樣,特別是對於沒有大廠背景的同學來說,所以請記住一個很重要的原則:不要裸辭。

需要注意的點:

  • 先挑幾個小公司找下面試感覺,太久沒面,需要找找面試的感覺
  • 你要在回答的過程中讓面試官感受到你身上一些優秀的特質
  • 解決問題的過程能讓人快速成長,並且解決的問題可能會成為你面試時的亮點,特別是對於那些項目沒什麼亮點的。
  • 挑幾個自己做過最牛逼的功能、或者解決過最有挑戰的問題,並且要對這些內容理解的非常透徹,不能在給面試官介紹的時候“支支吾吾”
  • 框架也好、中間件也好,必須要有幾個特別深入研究過的
  • 自己講出來的每個功能點、知識點,都要做好“被挑戰”的心裡準備,因此對於每個功能點、知識點都要多思考。
  • 如果你是真想跳槽,或者說你已經裸辭了,那麼在收到電子 offer 前都不要停止面試,即使收到口頭 offer 也不穩,特別是在這個寒冬。
  • 面試前的準備非常重要,但更重要的是平時工作的積累,4 年經驗問的問題很多是無法通過臨時準備的,很多都是需要你不斷去積累,才能有好的方案。

4 年Java經驗面試阿里、網易、拼多多的總結和心得體會

個人情況

座標魔都,15 年本科畢業於普通一本,畢業後就職於一家傳統電信公司,17 年後就職於美團點評。

面試情況

相比於 17 年,由於有了美團的背景,今年在簡歷這關順利了很多,不得不感嘆大廠背景真香。

本著儘量少請假的原因,所以面試的公司比較少,只面了 3 家:阿里、網易、拼多多。

3 家公司都走完了面試流程,最後拿到了阿里和拼多多的 offer,自己還是比較滿意的。

至於網易掛掉的原因,具體原因不是很清楚,面試發揮的還行,BOSS 面的時候可以看出對我還是比較滿意,但最終沒有收到 offer。

如果對於這三家公司的面試流程有問題的,可以在公眾號上留言,能解答的我會第一時間解答。

4 年經驗應該具備哪些技能

首先,簡單的聊一下我認為的 4 年經驗左右、優秀的 Java 程序員應該具備的技能有哪些,按“專業技能”和“項目”兩塊,包括但不限於以下內容。

專業節能方面

  • 基礎:JDK 常用類的原理、源碼、使用場景。設計模式:常用幾種的原理、使用場景,單例、動態代理、模板、責任鏈等。
  • 數據結構:數組、鏈表、棧、隊列、樹。
  • 網絡:TCP、HTTP、HTTPS、負載均衡算法。
  • 框架:Spring IoC 原理、Spring AOP 原理和使用、Spring 常用的擴展點、MyBatis 的核心流程。
  • 中間件:常用中間件的核心原理與最佳實踐,並對其中的 1 到 2 個有深入的學習,Redis、Kafka(RocketMQ、RabbitMQ)、Dubbo、Zookeeper。數據庫(MySQL):索引原理、隔離級別、鎖機制、分庫分表、慢 SQL 定位及優化、線上問題解決。Netty:NIO 原理、核心組件、I/O 多路複用(epoll)、零拷貝。JVM:運行時數據區、垃圾回收算法、垃圾回收器(CMS、G1)、常用配置參數、線上問題定位及解決。穩定性保障:隔離、限流、熔斷、降級等。Linux:基本命令的使用、快速定位和排查問題。分佈式理論:CAP、BASE、2PC、3PC、TCC。

項目方面

  • 能獨立完成一個複雜模塊的需求分析、方案設計和最終落地實現。能不斷思考,尋找更優的設計和解決方案,積極優化慢 SQL、慢服務。具備排查問題的能力,遇到線上問題能及時定位和修復上線,例如:數據庫死鎖、服務器宕機、服務器 Full GC 頻繁等。具備難題攻關的能力,能不斷解決項目遇到的挑戰,能給予初級工程師技術上的指導。初步具備帶領團隊(1-3人左右)的能力,能合理分配需求,做好進度把控、風險評估、Code Review。

嚴格來說,要完全做到上面這些有點難,我自己也並不具備,但是,我們可以將其視為目標,不斷去努力。

面試常見形式

大廠面試通常是“連環炮”的形式,舉個栗子:

面試官:用過哪些 Map

我:LinkedHashMap、ConcurrentHashMap、HashMap、TreeMap

面試官:這四種 Map 的區別

我:ConcurrentHashMap 線程安全,LinkedHashMap 可以記錄插入順序和訪問順序,TreeMap 可以自定義排序,除了這幾個場景,其他場景基本都可以使用 HashMap

面試官:ConcurrentHashMap 怎麼保證線程安全

我:JDK 1.8 以前通過分段鎖,JDK 1.8 以後通過 CAS + Synchronized

面試官:ConcurrentHashMap 在 JDK 1.8 前後的鎖有什麼區別

我:JDK 1.8 以前鎖分段,JDK 1.8 以後鎖單個節點,鎖粒度降低,併發度變高

面試官:#%¥%……#%¥

我:喵喵喵~

這種模式的問法,其實就是想了解候選人對一個知識點的理解是僅僅停留在表面,還是真的去深入研究過

面試內容

下面介紹下一些常見的面試內容,其中的面試題不一定是我真實遇到的,有可能是從別人的面試題中收集的,也有可能是我自己覺得重要的知識點,僅供參考。

1、項目

項目對於一個 3 - 5 年經驗的開發來說是非常重要的,面試官也非常看重這一塊。這個經驗的開發基本是各大公司的編碼主力,因此面試這個年限的候選人,通常項目是很重要的一塊。面試官通常會讓你先自己介紹下自己參與度最高(或者最牛逼)的項目,然後從中進行提問。常見的如以下:

  • 介紹下你參與度最高的項目
  • 畫下項目的架構圖如果核心流程處理到一半,服務器崩潰了,會怎麼處理
  • 項目中遇到過哪些挑戰或問題,
  • 怎麼解決的項目的穩定性和可用性
  • 怎麼保障數據安全這塊怎麼設計項目的技術選型,
  • 為什麼選這些
  • ..

2、場景題

越到後面的面試官,越喜歡問場景題,場景題比較考驗候選人平時的積累和解決問題能力。這個環節很容易掛掉一批人,特別是容易緊張的同學,很容易腦子會一片空白。場景題的核心一般是處理大數據量的問題、解決性能方面的問題。

場景題本質上是比較開放的,沒有什麼標準答案,只要自己的方案能夠解決問題,能夠“自圓其說”就行。

這個環節面試官可能會將線上真實的場景拿出來提問,我自己就遇到過。

3、專業技能

集合

  • 經常用到哪些 Map這幾種 Map 的區別CocurrentHashMap 怎麼保證線程安全CocurrentHashMap 在 JDK 1.8 前後的鎖有什麼區別聊下 HashMap 的原理HashMap 在 Put 時,新鏈表節點是放在頭部還是尾部HashMap 擴容時的流程HashMap 在 JDK 1.8 有什麼改變CocurrentHashMap 在 JDK 1.8 有什麼改變TreeMap 的原理Map、List、Set 分別說下你知道的線程安全類和線程不安全的類

多線程、鎖

  • 線程池使用的是哪種線程池參數怎麼配置線程池各個參數的作用線程池的參數配置要注意什麼線程池的工作流程
  • JDK 中的併發類知道哪些AQS 的底層原理介紹下悲觀鎖和樂觀鎖使用過哪些鎖synchronized 和 Lock 的區別、使用場景
  • synchronized 原理synchronized 作用於靜態方法、普通方法、this、Lock.class 的區別為什麼引入偏向鎖、輕量級鎖,介紹下升級流程死鎖的必要條件,如何預防死鎖介紹下 CountDownLatch 和 CyclicBarrier介紹下 CAS,存在什麼問題介紹下 ThreadLocal,存在什麼問題

網絡

  • HTTPS 是怎麼加密的普通 Hash 和一致性 Hash 原理一致性 Hash 的缺點TCP 三次握手過程,為什麼需要三次握手為什麼 TIME_WAIT 狀態需要經過 2MSL 才能返回到 CLOSE 狀態TCP 的擁塞控制TCP 如何解決流控、亂序、丟包問題為什麼會出現粘包和拆包,如何解決

Spring、Mybatis

  • Mybatis 中 # 和 $ 的區別怎麼防止 SQL 注入使用 Mybatis 時,調用 DAO(Mapper)接口時是怎麼調用到 SQL 的介紹下 Spring IoC 的流程BeanFactory 和 FactoryBean 的區別Spring 的 AOP 是怎麼實現的Spring 的事務傳播行為有哪些,講下嵌套事務
  • 什麼情況下對象不能被代理Spring 怎麼解決循環依賴的問題要在 Spring IoC 容器構建完畢之後執行一些邏輯,怎麼實現@Resource 和 @Autowire 的區別@Autowire 怎麼使用名稱來注入bean 的 init-method 屬性指定的方法裡用到了其他 bean 實例,會有問題嗎
  • @PostConstruct 修飾的方法裡用到了其他 bean 實例,會有問題嗎Spring 中,有兩個 id 相同的 bean,會報錯嗎,如果會報錯,在哪個階段報錯Spring 中,bean 的 class 屬性指定了一個不存在的 class,會報錯嗎,如果會報錯,在哪個階段Spring 中的常見擴展點有哪些

MySQL

  • MySQL 索引的數據結構為什麼使用 B+ 樹,與其他索引相比有什麼優點各種索引之間的區別B+ 樹在進行範圍查找時怎麼處理
  • MySQL 索引葉子節點存放的是什麼聯合索引(複合索引)的底層實現
  • MySQL 如何鎖住一行數據SELECT 語句能加互斥鎖嗎
  • 多個事務同時對一行數據進行 SELECT FOR UPDATE 會阻塞還是異常MySQL 使用的版本和執行引擎MySQL 不同執行引擎的區別MySQL 的事務隔離級別
  • MySQL 的可重複讀是怎麼實現的MySQL 是否會出現幻讀
  • MySQL 的 gap 鎖
  • MySQL 的主從同步原理分庫分表的實現方案分佈式唯一 ID 方案如何優化慢查詢explain 中每個字段的意思explain 中的 type 字段有哪些常見的值explain 中你通常關注哪些字段,為什麼

JVM

  • 運行時數據區
  • 服務器使用的什麼垃圾收集器CMS 垃圾收集的原理G1 垃圾收集的特點,為什麼低延遲有哪些垃圾回收算法,優缺點
  • 哪些對象可以作為 GC Roots有哪些類加載器
  • 雙親委派模式,哪些場景是打破雙親委派模式
  • 線上服務器出現頻繁 Full GC,怎麼排查定位問題常用哪些命令
  • 介紹下 JVM 調優的過程

Kafka

  • 為什麼使用 Kafka介紹下 Kafka 的各個組件如何保證寫入 Kafka 的數據不丟失如何保證從 Kafka 消費的數據不丟失
  • Kafka 為什麼性能這麼高
  • 零拷貝技術使用哪個方法實現Java 中也有類似的零拷貝技術,是哪個方法Kafka 怎麼保證消息的順序消費Kafka 怎麼避免重複消費什麼是 HighWatermark 和 LEO什麼是 ISR,為什麼需要引入 ISR

Redis

  • 項目中使用的 Redis 版本Redis 在項目中的使用場景Redis 怎麼保證高可用Redis 的選舉流程Redis 和 Memcache 的區別
  • Redis 的集群模式Redis 集群要增加分片,槽的遷移怎麼保證無損Redis 分佈式鎖的實現Redis 刪除過期鍵的策略Redis 的內存淘汰策略
  • Redis 的 Hash 對象底層結構Redis 中 Hash 對象的擴容流程Redis 的 Hash 對象的擴容流程在數據量大的時候會有什麼問題嗎Redis 的持久化機制有哪幾種
  • RDB 和 AOF 的實現原理、優缺點AOF 重寫的過程哨兵模式的原理使用緩存時,先操作數據庫還是先操作緩存為什麼是讓緩存失效,而不是更新緩存緩存穿透、緩存擊穿、緩存雪崩更新緩存的幾種設計模式

Zookeeper

  • Zookeeper 的使用場景Zookeeper 怎麼實現分佈式鎖Zookeeper 怎麼保證數據的一致性ZAB 協議的原理Zookeeper 遵循 CAP 中的哪些Zookeeper 和 Eureka 的區別
  • Zookeeper 的 Leader 選舉Observer 的作用Leader 發送了 commit 消息,但是所有的 follower 都沒有收到這條消息,Leader 就掛了,後續會怎麼處理

分佈式

  • CAP 理論BASE 理論分佈式事務 2PC 和 TCC 的原理
  • TCC 在 cancel 階段如果出現失敗怎麼處理Paxos 算法、Raft 算法

關於這些面試題,我這邊也準備了很多面試題給同學們去做面試準備:

私信我【學習】即可免費獲取到

4 年Java經驗面試阿里、網易、拼多多的總結和心得體會

面試資料

除此之外,還給讀者朋友準備了一份面試覆盤資料

其中包含了許多的模塊(見目錄)

目錄

  • JVM
  • JAVA集合
  • JAVA多線程併發
  • JAVA基礎
  • Spring原理
  • 微服務
  • Netty與RPC
  • 網絡
  • 曰志
  • Zookeeper
  • Kafka
  • RabitMQ
  • Hbase
  • MongoDB
  • Cassandra
  • 設計模式
  • 負載均衡
  • 數據庫
  • 致性算法
  • JAVA算法
  • 數據結構
  • 加密算法
  • 分佈式緩存
  • Hadoop
  • Spark
  • Storm
  • 機器學習
  • 雲計算
"

前言

2019 年互聯網行業的行情不太好,也有可能接下去會一直這樣,特別是對於沒有大廠背景的同學來說,所以請記住一個很重要的原則:不要裸辭。

需要注意的點:

  • 先挑幾個小公司找下面試感覺,太久沒面,需要找找面試的感覺
  • 你要在回答的過程中讓面試官感受到你身上一些優秀的特質
  • 解決問題的過程能讓人快速成長,並且解決的問題可能會成為你面試時的亮點,特別是對於那些項目沒什麼亮點的。
  • 挑幾個自己做過最牛逼的功能、或者解決過最有挑戰的問題,並且要對這些內容理解的非常透徹,不能在給面試官介紹的時候“支支吾吾”
  • 框架也好、中間件也好,必須要有幾個特別深入研究過的
  • 自己講出來的每個功能點、知識點,都要做好“被挑戰”的心裡準備,因此對於每個功能點、知識點都要多思考。
  • 如果你是真想跳槽,或者說你已經裸辭了,那麼在收到電子 offer 前都不要停止面試,即使收到口頭 offer 也不穩,特別是在這個寒冬。
  • 面試前的準備非常重要,但更重要的是平時工作的積累,4 年經驗問的問題很多是無法通過臨時準備的,很多都是需要你不斷去積累,才能有好的方案。

4 年Java經驗面試阿里、網易、拼多多的總結和心得體會

個人情況

座標魔都,15 年本科畢業於普通一本,畢業後就職於一家傳統電信公司,17 年後就職於美團點評。

面試情況

相比於 17 年,由於有了美團的背景,今年在簡歷這關順利了很多,不得不感嘆大廠背景真香。

本著儘量少請假的原因,所以面試的公司比較少,只面了 3 家:阿里、網易、拼多多。

3 家公司都走完了面試流程,最後拿到了阿里和拼多多的 offer,自己還是比較滿意的。

至於網易掛掉的原因,具體原因不是很清楚,面試發揮的還行,BOSS 面的時候可以看出對我還是比較滿意,但最終沒有收到 offer。

如果對於這三家公司的面試流程有問題的,可以在公眾號上留言,能解答的我會第一時間解答。

4 年經驗應該具備哪些技能

首先,簡單的聊一下我認為的 4 年經驗左右、優秀的 Java 程序員應該具備的技能有哪些,按“專業技能”和“項目”兩塊,包括但不限於以下內容。

專業節能方面

  • 基礎:JDK 常用類的原理、源碼、使用場景。設計模式:常用幾種的原理、使用場景,單例、動態代理、模板、責任鏈等。
  • 數據結構:數組、鏈表、棧、隊列、樹。
  • 網絡:TCP、HTTP、HTTPS、負載均衡算法。
  • 框架:Spring IoC 原理、Spring AOP 原理和使用、Spring 常用的擴展點、MyBatis 的核心流程。
  • 中間件:常用中間件的核心原理與最佳實踐,並對其中的 1 到 2 個有深入的學習,Redis、Kafka(RocketMQ、RabbitMQ)、Dubbo、Zookeeper。數據庫(MySQL):索引原理、隔離級別、鎖機制、分庫分表、慢 SQL 定位及優化、線上問題解決。Netty:NIO 原理、核心組件、I/O 多路複用(epoll)、零拷貝。JVM:運行時數據區、垃圾回收算法、垃圾回收器(CMS、G1)、常用配置參數、線上問題定位及解決。穩定性保障:隔離、限流、熔斷、降級等。Linux:基本命令的使用、快速定位和排查問題。分佈式理論:CAP、BASE、2PC、3PC、TCC。

項目方面

  • 能獨立完成一個複雜模塊的需求分析、方案設計和最終落地實現。能不斷思考,尋找更優的設計和解決方案,積極優化慢 SQL、慢服務。具備排查問題的能力,遇到線上問題能及時定位和修復上線,例如:數據庫死鎖、服務器宕機、服務器 Full GC 頻繁等。具備難題攻關的能力,能不斷解決項目遇到的挑戰,能給予初級工程師技術上的指導。初步具備帶領團隊(1-3人左右)的能力,能合理分配需求,做好進度把控、風險評估、Code Review。

嚴格來說,要完全做到上面這些有點難,我自己也並不具備,但是,我們可以將其視為目標,不斷去努力。

面試常見形式

大廠面試通常是“連環炮”的形式,舉個栗子:

面試官:用過哪些 Map

我:LinkedHashMap、ConcurrentHashMap、HashMap、TreeMap

面試官:這四種 Map 的區別

我:ConcurrentHashMap 線程安全,LinkedHashMap 可以記錄插入順序和訪問順序,TreeMap 可以自定義排序,除了這幾個場景,其他場景基本都可以使用 HashMap

面試官:ConcurrentHashMap 怎麼保證線程安全

我:JDK 1.8 以前通過分段鎖,JDK 1.8 以後通過 CAS + Synchronized

面試官:ConcurrentHashMap 在 JDK 1.8 前後的鎖有什麼區別

我:JDK 1.8 以前鎖分段,JDK 1.8 以後鎖單個節點,鎖粒度降低,併發度變高

面試官:#%¥%……#%¥

我:喵喵喵~

這種模式的問法,其實就是想了解候選人對一個知識點的理解是僅僅停留在表面,還是真的去深入研究過

面試內容

下面介紹下一些常見的面試內容,其中的面試題不一定是我真實遇到的,有可能是從別人的面試題中收集的,也有可能是我自己覺得重要的知識點,僅供參考。

1、項目

項目對於一個 3 - 5 年經驗的開發來說是非常重要的,面試官也非常看重這一塊。這個經驗的開發基本是各大公司的編碼主力,因此面試這個年限的候選人,通常項目是很重要的一塊。面試官通常會讓你先自己介紹下自己參與度最高(或者最牛逼)的項目,然後從中進行提問。常見的如以下:

  • 介紹下你參與度最高的項目
  • 畫下項目的架構圖如果核心流程處理到一半,服務器崩潰了,會怎麼處理
  • 項目中遇到過哪些挑戰或問題,
  • 怎麼解決的項目的穩定性和可用性
  • 怎麼保障數據安全這塊怎麼設計項目的技術選型,
  • 為什麼選這些
  • ..

2、場景題

越到後面的面試官,越喜歡問場景題,場景題比較考驗候選人平時的積累和解決問題能力。這個環節很容易掛掉一批人,特別是容易緊張的同學,很容易腦子會一片空白。場景題的核心一般是處理大數據量的問題、解決性能方面的問題。

場景題本質上是比較開放的,沒有什麼標準答案,只要自己的方案能夠解決問題,能夠“自圓其說”就行。

這個環節面試官可能會將線上真實的場景拿出來提問,我自己就遇到過。

3、專業技能

集合

  • 經常用到哪些 Map這幾種 Map 的區別CocurrentHashMap 怎麼保證線程安全CocurrentHashMap 在 JDK 1.8 前後的鎖有什麼區別聊下 HashMap 的原理HashMap 在 Put 時,新鏈表節點是放在頭部還是尾部HashMap 擴容時的流程HashMap 在 JDK 1.8 有什麼改變CocurrentHashMap 在 JDK 1.8 有什麼改變TreeMap 的原理Map、List、Set 分別說下你知道的線程安全類和線程不安全的類

多線程、鎖

  • 線程池使用的是哪種線程池參數怎麼配置線程池各個參數的作用線程池的參數配置要注意什麼線程池的工作流程
  • JDK 中的併發類知道哪些AQS 的底層原理介紹下悲觀鎖和樂觀鎖使用過哪些鎖synchronized 和 Lock 的區別、使用場景
  • synchronized 原理synchronized 作用於靜態方法、普通方法、this、Lock.class 的區別為什麼引入偏向鎖、輕量級鎖,介紹下升級流程死鎖的必要條件,如何預防死鎖介紹下 CountDownLatch 和 CyclicBarrier介紹下 CAS,存在什麼問題介紹下 ThreadLocal,存在什麼問題

網絡

  • HTTPS 是怎麼加密的普通 Hash 和一致性 Hash 原理一致性 Hash 的缺點TCP 三次握手過程,為什麼需要三次握手為什麼 TIME_WAIT 狀態需要經過 2MSL 才能返回到 CLOSE 狀態TCP 的擁塞控制TCP 如何解決流控、亂序、丟包問題為什麼會出現粘包和拆包,如何解決

Spring、Mybatis

  • Mybatis 中 # 和 $ 的區別怎麼防止 SQL 注入使用 Mybatis 時,調用 DAO(Mapper)接口時是怎麼調用到 SQL 的介紹下 Spring IoC 的流程BeanFactory 和 FactoryBean 的區別Spring 的 AOP 是怎麼實現的Spring 的事務傳播行為有哪些,講下嵌套事務
  • 什麼情況下對象不能被代理Spring 怎麼解決循環依賴的問題要在 Spring IoC 容器構建完畢之後執行一些邏輯,怎麼實現@Resource 和 @Autowire 的區別@Autowire 怎麼使用名稱來注入bean 的 init-method 屬性指定的方法裡用到了其他 bean 實例,會有問題嗎
  • @PostConstruct 修飾的方法裡用到了其他 bean 實例,會有問題嗎Spring 中,有兩個 id 相同的 bean,會報錯嗎,如果會報錯,在哪個階段報錯Spring 中,bean 的 class 屬性指定了一個不存在的 class,會報錯嗎,如果會報錯,在哪個階段Spring 中的常見擴展點有哪些

MySQL

  • MySQL 索引的數據結構為什麼使用 B+ 樹,與其他索引相比有什麼優點各種索引之間的區別B+ 樹在進行範圍查找時怎麼處理
  • MySQL 索引葉子節點存放的是什麼聯合索引(複合索引)的底層實現
  • MySQL 如何鎖住一行數據SELECT 語句能加互斥鎖嗎
  • 多個事務同時對一行數據進行 SELECT FOR UPDATE 會阻塞還是異常MySQL 使用的版本和執行引擎MySQL 不同執行引擎的區別MySQL 的事務隔離級別
  • MySQL 的可重複讀是怎麼實現的MySQL 是否會出現幻讀
  • MySQL 的 gap 鎖
  • MySQL 的主從同步原理分庫分表的實現方案分佈式唯一 ID 方案如何優化慢查詢explain 中每個字段的意思explain 中的 type 字段有哪些常見的值explain 中你通常關注哪些字段,為什麼

JVM

  • 運行時數據區
  • 服務器使用的什麼垃圾收集器CMS 垃圾收集的原理G1 垃圾收集的特點,為什麼低延遲有哪些垃圾回收算法,優缺點
  • 哪些對象可以作為 GC Roots有哪些類加載器
  • 雙親委派模式,哪些場景是打破雙親委派模式
  • 線上服務器出現頻繁 Full GC,怎麼排查定位問題常用哪些命令
  • 介紹下 JVM 調優的過程

Kafka

  • 為什麼使用 Kafka介紹下 Kafka 的各個組件如何保證寫入 Kafka 的數據不丟失如何保證從 Kafka 消費的數據不丟失
  • Kafka 為什麼性能這麼高
  • 零拷貝技術使用哪個方法實現Java 中也有類似的零拷貝技術,是哪個方法Kafka 怎麼保證消息的順序消費Kafka 怎麼避免重複消費什麼是 HighWatermark 和 LEO什麼是 ISR,為什麼需要引入 ISR

Redis

  • 項目中使用的 Redis 版本Redis 在項目中的使用場景Redis 怎麼保證高可用Redis 的選舉流程Redis 和 Memcache 的區別
  • Redis 的集群模式Redis 集群要增加分片,槽的遷移怎麼保證無損Redis 分佈式鎖的實現Redis 刪除過期鍵的策略Redis 的內存淘汰策略
  • Redis 的 Hash 對象底層結構Redis 中 Hash 對象的擴容流程Redis 的 Hash 對象的擴容流程在數據量大的時候會有什麼問題嗎Redis 的持久化機制有哪幾種
  • RDB 和 AOF 的實現原理、優缺點AOF 重寫的過程哨兵模式的原理使用緩存時,先操作數據庫還是先操作緩存為什麼是讓緩存失效,而不是更新緩存緩存穿透、緩存擊穿、緩存雪崩更新緩存的幾種設計模式

Zookeeper

  • Zookeeper 的使用場景Zookeeper 怎麼實現分佈式鎖Zookeeper 怎麼保證數據的一致性ZAB 協議的原理Zookeeper 遵循 CAP 中的哪些Zookeeper 和 Eureka 的區別
  • Zookeeper 的 Leader 選舉Observer 的作用Leader 發送了 commit 消息,但是所有的 follower 都沒有收到這條消息,Leader 就掛了,後續會怎麼處理

分佈式

  • CAP 理論BASE 理論分佈式事務 2PC 和 TCC 的原理
  • TCC 在 cancel 階段如果出現失敗怎麼處理Paxos 算法、Raft 算法

關於這些面試題,我這邊也準備了很多面試題給同學們去做面試準備:

私信我【學習】即可免費獲取到

4 年Java經驗面試阿里、網易、拼多多的總結和心得體會

面試資料

除此之外,還給讀者朋友準備了一份面試覆盤資料

其中包含了許多的模塊(見目錄)

目錄

  • JVM
  • JAVA集合
  • JAVA多線程併發
  • JAVA基礎
  • Spring原理
  • 微服務
  • Netty與RPC
  • 網絡
  • 曰志
  • Zookeeper
  • Kafka
  • RabitMQ
  • Hbase
  • MongoDB
  • Cassandra
  • 設計模式
  • 負載均衡
  • 數據庫
  • 致性算法
  • JAVA算法
  • 數據結構
  • 加密算法
  • 分佈式緩存
  • Hadoop
  • Spark
  • Storm
  • 機器學習
  • 雲計算
4 年Java經驗面試阿里、網易、拼多多的總結和心得體會

這一份面試覆盤資料和前面的面試題都是可以免費的送給有需要的讀者朋友們的!

獲取方式:轉發關注後私信我【學習】即可免費獲取到!

再次請您幫助轉發,讓更多程序員受益

"

相關推薦

推薦中...