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

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

 01 騰 訊

一面:web

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

  2. try- catchredis

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

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

  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

相關文章
相關標籤/搜索