騰訊,華為,阿里…7家Java后端面試經驗大公開!


  感覺面試還是主要圍繞簡歷來問的,所以不熟悉的東西最好不要隨便寫上去。項目和基礎都很重要,整體的基礎知識的框架可以參考GitHub 上 CYC2018的博客,分類很全,但是深入的學習還是要自己去看書,寫demo。項目中最好有難點,能夠體現自己解決問題的過程和思路。算法方面劍指offer + LeetCode 200左右吧。投了10+公司,進行面試大概就這幾家,其他沒結果或者筆試被刷了。

 01 騰 訊

一面:

  1. 講一講異常, throwable, exception, error

  2. try- catch

  3. 手寫單例模式——很生疏,GG

  4. volatile ,作用,底層, lock 前綴的指令, 多CPU的嗅探機制,多處理器下的緩存一致性協議

  5. synchronized

  6. JVM 內存划分, 堆內存分代

  7. redis, 源碼,

  8. spring bean的實例化過程。——不熟悉的地方不要寫上去。

  9. AOP

  10. 使用redis來實現單點登錄,那么當單個redis節點內存不夠的時候,怎么辦?集群化,redis-Cluster

  11. 比較偏底層

 02 華 為

一面:

  1. 自我介紹

  2. 項目中的可用性,性能,擴展性 如何提升

  3. nginx是如何實現反向代理的,哪一層的方向代理?應用層

  4. 如何向外提供HTTPS協議的服務, 在內網使用http協議, 通過nginx配置來進行實現

  5. 設計一個網絡的時候,需要考慮的因素

  6. 虛擬網絡

 03 字 節 跳 動

  1. 自我介紹

  2. 單點登錄

  3. JVM內存划分, 堆內存為什么要進行分代回收,  生命周期不同

  4. redis,主從,哨兵,集群,分布式鎖。

  5. redis的對象類型, 每種對象類型對應的底層的數據結構,參考redis設計與實現。

    1. string, list, hash, set, sortedset.

    2. 每種對象都至少有2中數據結構, SDS, linkedlist, ziplist, intset, ziplist, skiplist

  6. ISN,  TCP協議為什么要隨機初始化一個序列號——安全性, 防止和上一次會話滯留的報文沖突

 04 手 撕 算 法

  1. 把九億三千零五萬五千三百 轉化為 對應的數字,

  2. 給了一個長度為n的 值的范圍為0 到 n-1的數組,然后判斷是否有重復的元素出現的問題。

  3. leetcode 42 雨水收集問題

 05 拼 多 多

一面:

  1. 自我介紹,redis,分布式鎖, redlock算法,zookeeper分布式鎖,分布式鎖的問題

  2. 手寫一個隨機選擇算法的變種

 

二面:

  1. 說明一下缺頁中斷, 虛擬內存

  2. JVM中的內存區域划分,堆的分代,為什么分代, 垃圾回收算法,垃圾回收器

  3. Linux進程間的通信方式, 管道,有名管道,socket,共享內存,消息隊列

  4. 如何實現進程間特定場景下的高效通信,  問了存儲相關的問題。

  5. MySQL索引類型, 底層的數據結構

  6. 手寫一個雙鏈表的插入和刪除,查找方法

 

HR:

  1. 為什么換專業

  2. 有沒有其他公司的offer,

  3. 職業規划

  4. 你認為自己轉專業和科班出身相比差距在哪里,我們為什么要錄用你  555

  5. 學習的過程, 如何去學習

 06 招 商 銀 行

電話簡歷面:

  1. 自我介紹

  2. 事務的特性  ACID , 數據庫的死鎖發生的情景

  3. 死鎖的四個必要特性, 非共享, 持有並等待, 非搶占, 循環等待

  4. 死鎖避免   死鎖預防

  5. 線程的狀態 , 新建,就緒,running, wait, blocked, terminated

  6. sleep 和 wait 的區別, 類的不同,是否會釋放持有的鎖,monitor

  7. JDK  可重入鎖, 讀寫鎖 , 底層 AQS,抽象隊列同步器的機制

  8. 悲觀鎖和樂觀鎖, 概念上,JDK 中的類,  CAS的缺點, 空轉,ABA問題。使用pause指令, AtomicStampedReference

  9. 講一講Servlet, web.xml 配置路徑到servlet的映射, init, service, destroy

  10. 可以看一看Tomcat容器的過程 ,Connector和 Context容器兩大部分。完成從socket到 request和Response對象的構造

  11. SpringMVC的  dispatcher-servlet的請求解析過程

  12. redis介紹,  系統中的角色,作為緩存, 分布式session服務器

  13. redis的 性能,可用性,主從復制+哨兵, redis緩存訪問有網絡上的消耗。

  14. redis事務, 分布式事務, 2PC, 本地消息表等, 3PC

 07 阿 里 巴 巴

一面:

  1. 自我介紹, 項目

  2. 收獲最大的一個項目, 着重介紹, 項目的演進過程, 從提高系統可用性的來進行演進,例如redis的可用性,

  3. 分布式鎖(項目), redlock,持久化機制,主從復制過程, redis知道的都說出來

  4. redis解決分布式Session問題, 單點登錄, Session一致性問題,描述,如何實現

  5. IOC 的實例化過程,原理,

  6. AOP, JDK代理, Proxy, InvocationHandler

  7. 一個循環鏈表進行是否為空判斷

  8. 樹的遍歷, 層序,先、中、后的遞歸非遞歸實現

  9. 操作系統 P/V Semaphore類,

  10. CAS, AQS 實現

  11. 看哪些書, 論壇,如何學習Java

  12. 智力題 喝汽水問題, 2個空瓶換一瓶汽水,1元1瓶,可以買多少瓶汽水 問題,(剛好看過,通過借一瓶來最后再多喝一瓶)

     

二面:

  1. 自我介紹

  2. 在校,學習情況,參與項目(介紹一下業務方面,架構方面的過程)

  3. hosts文件

  4. 樂觀鎖, 悲觀鎖, 舉例, 可以順便說一下, CAS,volatile, synchronized

  5. 事務,分布式事務, 如何實現分布式事務, 兩階段提交,(過程)

  6. JVM堆划分,方法區,

  7. 執行了 system.gc()觸發的GC機制,FGC, 如何進行回收的, 分代回收

  8. 系統周期性卡頓,如何定位問題,結合GC日志, YGC,FGC, 調整分代的大小, 減小FGC時間

  9. 產生FGC的原因

 

三面:

  1. 自我介紹,學習過程,項目中的難點,如何解決,

  2. 如何去提升系統的可用性,性能,擴展性,伸縮性,等等, LVS,反向代理,集群,異步,緩存等等

  3. 開放性的系統設計,一個車票查詢系統,對最短時間,最短開銷進行求解,類似於12306的火車票購票系統,。

  4. 億萬流量網站架構和新技術,  這本書可以參考一下

 

四面:

  1. 自我介紹

  2. 學習過程, 難點——

  3. synchronized關鍵字作用與靜態方法和普通方法的區別,通過不同的對象的監視器來進行並發控制,monitorenter, monitorexit

  4. 服務器CPU使用率很高,如何排查, top 定位進程, 如果是Java,通過jstack進行線程快照分析,jmap,jhat 等等,

  5. 智力題

  6. 紅黑樹的優缺點

  7. AOP 動態代理

  1. HR面:

  1. 自我介紹  學習過程

  2. 為什么選擇轉專業

  3. 項目中遇到的難點,

  4. 對部門的理解

  5. 個人的職業發展,城市的選擇,職業方向,有沒有其他公司的offer

 

 

下面是自己的一點自學和准備面試的過程,希望可以對其他人轉行的人有幫助。

 

大致就是下面這幾個方面要進行學習:

  • 計算機基礎:計網,OS,算法和數據結構必須熟悉;組成原理,編譯原理等等看了更好

  • 語言基礎:Java的一些語言特性,多線程,JVM

  • 數據庫:基礎概念,SQL,數據庫的設計等

  • web基礎:Servlet,JSP, HTTP協議, Cookie, Session等進行一下了解,可以自己用servlet寫個demo

  • web框架:SpringMVC, Spring, Mybatis, 在項目實踐中學習,先會用,然后深入。SpringCloud, SpringBoot等也可以進行學習

  • 中間件:Redis, 消息隊列這些也可以了解一下

  • 開發工具:Maven ,Git等等

  • 系統設計:如何提升系統並發,保證可用性,伸縮性,擴展性,安全性這幾個方面的考慮。

 

自己在學習的大致就是上述的過程,也不是很有計划性,基本都是邊學習邊修改自己的計划。

 

面試准備和閱讀書籍:

 

大體的建議還是平時多coding,多看書,多思考,多總結,不要在面試前依賴面經總結,或者背面試問題這種途徑,因為需要做到的是真正對某個問題理解了,知道解決方案,而不只是背過了答案。面經總結應該看成一種對自己進行查漏補缺的測驗,而不是背誦的題庫,功夫積累還是在平時。

 

看書的一點小建議:

 

如果在某個階段看書看不進去的時候,可能是自己其他方面的積累還不夠,也可能是要自己靜下心去深入分析,判斷是哪種就需要自己去感覺了。例如我看完《Head First Java》直接開始看《Java編程思想》,就感到十分痛苦,大部分都不懂,不知所雲。

 

但是在使用Java進行一定程度的編碼之后,對Java多線程有一定了解之后,再開始看《Java編程思想》的時候,就比之前好多了。但是在看《Java並發編程的藝術》的時候,看不懂,就需要啃着硬骨頭,靜心看下去。最重要的感覺就是不斷地實踐,看書,看博客,總結,不斷反復。 

 

 

 

 

轉載:https://mp.weixin.qq.com/s/MIgdbabIJrX64h0IWPEIHg


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM