後端面試知識點大串燒!(螞蟻美團頭條騰訊面試經歷)

更多Java面試資料(操做系統,網絡,zk,mq,redis,java等) :github.com/yuhaqiang12…java

筆者在面過 猿輔導,去哪兒,曠視, 陌陌,頭條, 阿里, 快手, 美團, 騰訊以後,除了收穫一大堆面試問題,還思考到如何成爲面試官眼中的"愛技術,愛思考,靠譜,有潛力候選人的"一些"套路".python

1. 面試問題(Java 後端)

猿輔導

1.八皇后問題
 2.求二叉樹的最長距離(任意兩個節點的路徑 中最長的)
 3.lru 算法的實現
 4.設計一個數據結構 知足 put 和 getMedium(中位數)兩個方法. 
    (時間複雜度分析, getMedium 在常數,n,log n 時間複雜度返回如何實現)
 5.rabbitmq 腦裂問題,rabbitmq 延遲隊列實現, rabbitmq高可用策略
    (由於項目中用到了 rabbitmq 和他們技術選型出現了重疊,問了這個問題)
 6. 死磕項目細節其中包括: 
    設計方案時有沒有比較多種方案,爲何選這個方案?
    你我的最有成就感,最有挑戰性的 工做是哪個?
    
 思考:
 1. 猿輔導問的算法題屬於 leetcode easy, medium 級別的,基本不會太難
複製代碼

曠視(Python)

1. Python 如何實現多線程/多進程編程
   2. Python GIL 鎖是什麼?爲何會出現 GIL
   3. python 協程有麼有用過? 有哪些常見的協程庫,介紹一下
   4. python 裝飾器如何實現,原理,常見使用場景?
   5. python 一堆我沒聽見的庫,有沒有用過.(我沒記下來)
   6. 給你一個 Linux 路徑,求其最簡化的路徑,例如(/a/b/.. -> /a,  a/b/./. -> a/b等)
   7. 給你一臺 16 核, 32G 的機器, 無限空間大的分佈式存儲. 對1 個 16P 大小的文本文件進行排序.
       文件每行一條記錄, 空格分割例如
       key1
       key2
   8. 介紹一下什麼是外部排序
   
  思考:
  1. 曠視的這位面試官 和我死磕 python. 一點項目經歷沒問.
  2. 除了 leetcode 也要多看看高併發,大數據相關的 系統設計題.
複製代碼

去哪兒(Java)

1. 爲何使用 MQ, MQ 如何選型, 消息可靠性如何保證, 如何保證冪等
  2. 用過 dubbo嗎? 設計一個 rpc 框架.
  3. 介紹一下 https
  4. 數據庫線程池, http 鏈接池有沒有深刻看過源碼?介紹一下.(項目裏用獲得了 http client)
  5. 給你十億條數據,如何最快的添加到數據庫中
  6. 分佈式鎖的技術選型, 實現原理, 優劣勢比較, zookeeper 的一致性協議原理
  7. java 線程同步的幾種方式, countdownlatch 和 柵欄的區別
  8. synchronized和 aqs 如何實現可重入鎖
複製代碼

陌陌

1.分佈式鎖的實現方案比較,爲何選擇 zookeeper, zookeeper 一致性協議原理
  2.一致性 Hash 原理,實現,項目中是如何使用一致性 Hash 的,引入了多少虛擬節點?
  3.java synchronized和 AQS的原理,區別
  4. redis 有序列表
  5. redis 高可用架構是什麼? codis 和 redis cluster 分片的區別
  6. 兩個線程如何交替打印 0到99
複製代碼

頭條(Go)

1. 給你一個 Linux 路徑,求其最簡化的路徑,例如(/a/b/.. -> /a,  a/b/./. -> a/b等) 和曠視問重了
  2. top-k 
  3. 實現前綴樹
  4. 實現python裝飾器.方法實現,和類實現, 帶參數和不帶參數.以及對裝飾器的思考
  5. 如何實現對 多機房,多機架 以前的網絡健康狀況監控. 
  6. 如何理解進程上下文切換, 進程地址空間,爲何須要進程地址空間, 系統調用實現原理, top 命令介紹.
複製代碼

阿里

1. mq 消息可靠性,冪等如何保證
  2. 分佈式鎖的實現方案比較,爲何選擇 zookeeper, zookeeper 一致性協議原理
  3. 線程池參數,阻塞隊列實現.
  4. 一致性 Hash解決什麼問題, 如何實現? 虛擬節點的做用?
  5. Java 鎖的實現方式, 比較? AQS實現原理?公平非公平實現原理?
  6. CAS 實現原理
  7. volatile 實現原理, 單例模式
  8. java 內存模型, gc 調優的經歷. cms gc 的幾個階段, 爲何會出現 stop the world. 常見可優化參數有哪些.
    爲何須要優化 gc, gc 會致使什麼問題.
  9. mysql 事務隔離級別. mvcc 實現原理
  10. mysql 索引原理. 爲何使用 B+樹. 及什麼時候沒法使用索引?
  11. mysql 架構, 引擎層和 server層 各自負責什麼.
  12. hashmap 及 concurrenthashmap 實現原理
  13. Spring aop原理,如何定義新的spring xml 標籤
  14. 合併兩個有序鏈表
  15. 如何設計一個 大型活動的安保系統(開放題)
  16. 你日常都在哪些論壇上學習?
  17. 如何學習一門未知的技術?
  
  思考:
  阿里面試官 雖然不面算法,可是面試考察點全方位打擊,從淺入深,揪住不放,直到你不會爲止.
  是收穫最多的面試,也是感覺到本身差距的面試.
複製代碼

快手

1. 線程池實現原理,如何調優
  2. 如何實現一個延遲隊列
  3. mysql 索引
  4. mysql 事務隔離級別
  5. java 鎖和常見線程同步方式
  6. zookeeper 分佈式實現方式及優劣,如何避免 多個客戶端同時獲取到鎖?
  7. 求二叉樹兩個節點的共同節點
  8. 求二叉樹的深度(非遞歸)
  9. java 集合常見類及原理
  10. tcc 原理
  11. netty 的請求處理流程.線程模型
複製代碼

美團

1. HashMap 的實現原理?擴容原理? 爲何 jdk 8修改了衝突鏈表的插入位置
  2. mysql 的高可用架構.主從同步過程.
  3. http 和rpc 調用的區別
  4. redis 如何用單線程支撐高併發, redis 的常見使用場景
  5. mq 如何選型. 爲何用 mq
  6. 一致性 Hash 原理
  7. 美團外賣的支付 ,要求在 15 分鐘內取消未支付的訂單. 如何實現
  8. 打印 * 星號的等腰三角形
  9. 項目的全鏈路架構, 有沒有單點問題,解決單點問題有哪些常見的方案.
  10. 項目中有哪些能夠衡量工做產出的指標.
  11. 說一下你負責的 最複雜,參與人數最多,週期對長.的項目是如何推動的
  12. 你認爲本身的優點,劣勢在哪裏.
  13. 你對將來的職業規劃,你指望的工做內容,方向是什麼?
複製代碼

騰訊(Java)

1.如何在物理機和容器中獲取 cpu 核數,如何設置線程數, 如何主動觸發 GC
   2.一致性 Hash, Hash 的做用, 爲何叫一致性 Hash,一致性體如今哪裏. 
      HashMap中還可使用什麼方式處理 Hash 衝突
   3.線程池參數,優化,原理
   4.實現一個功能:
     cat /usr/local/*.log|grep tencent 
     1. 併發 IO
     2. 30 s 內必須返回結果
   5. 如何理解 Future模式?java 的實現原理
   6. Java 阻塞隊列實現原理
   7.  java 鎖 volatile 實現原理
   8. mysql 索引原理,事務隔離級別, mysql 死鎖的場景會有哪些, 內部如何檢測死鎖的?
   9. java 線程同步共有哪幾種工具?
   10. 你認爲 java 設計得比較優秀的地方有哪些?
   11. 如何理解面向對象設計,能用你看過得開源代碼或者實際項目介紹一下嗎? 
   12. java 類加載器的原理及實際使用場景.
   13. java 內存模型, 虛擬機棧默認大小.
   14. 說一下高可用架構的常看法決思路
   
   思考:
   騰訊一面面試官考察點很是深刻,要求你具備概括能力.例如分佈式中常見的負載策略, 
   分佈式中數據同步備份的常見方案.線程同步的幾種方式等等. 
   並且在你回答以後能繼續深刻逼問.
   不像其餘面試官拋出來問題,他就聽你吹. 你能吹多少,他就認爲你會多少.
複製代碼

思考

  1. 手撕算法須要準備,面試以前保證刷夠 100 題,及部分設計題.mysql

  2. 不管會不會,必定不能慌.不管會不會,必定要和麪試官確認本身的理解是否是正確,這道題應該如何思考? 避免跑偏git

  3. 面試重點在於溝通.github

    3.1 強行總結結論面試

    必定要有條理性的和麪試官溝通. 避免東一笤帚,西一掃帚.最好提早想好一些結論,重複幾遍.這樣面試官可能直接用你的"結論"來 寫面試通過,結論,評價等. 說完一件事,最好有條理性的結論,讓面試官印象深入. 即便強行 1,2,3的劃重點結論也比戛然而止強.redis

    3.2 優雅的中斷當前問題,只在檢查點退出討論,響應面試官的中斷算法

    當面試官出現了疑問,拋出了問題,中斷你的回答,必定不要一味的回答,當即響應,把握本身的節奏,先面試官徵求意見,可否把剩下的說完.繼續快速的說完,記得總結結論 求同存異,避免爭論spring

    面試官沒有你熟悉你的項目,你的經歷. 說,聽,討論. 三個階段都會存在溝通訊息的損失. 給面試官講清楚, 讓他理解,認同你可能很難. 可是若是出現爭論,會下降對你的好感,下降溝通效率.因此你有責任及時的終止爭論.可使用一下技巧:sql

    1. 重申 上下文, 目的, 現狀, 背景, 利弊抉擇.
      2. 坦誠的認可這塊咱們的設計,實現並非完美的.甚至作得很差.咱們已經提出了哪些優化點(提出瞭解決方案).
      可是優先級並非很高(優先級是最好的甩鍋方式).當初因爲更專一於業務目標.技術前瞻性作得不足.你的意見確實一針見血,
      這個問題讓咱們頭疼了好久. 
      3. "這塊確實比較複雜,我們總結一下,細化一下分歧再討論" 面試官通常不會拒絕,面試方向主動權從新由你掌握.(要有主動權意識)
      4. 細化分歧過程當中, 其實就是取得共識, 某些細枝末節的爭論,直接和麪試官解釋,忽略掉便可. 把大家的共識擺出來.而後說:
      "我們的分歧主要是什麼什麼,實際上是我每說清楚,再針對面試官疑問解釋一下,或者甩鍋,咱們想優化,由於優先級.咱們想這麼作,
      可是因爲時間來不及,或者當時 XXX,沒有這麼作.不事後來咱們確實吃了虧,算是技術債". 
      (認可 low 沒有問題,強項裝逼不服輸纔是最二百五的)
    複製代碼

面試三千問

簡歷重要嗎? 隨便寫行不行

簡歷必定要認真寫.面試官拋出的問題中,除了常見的高頻面試題,就是簡歷中你寫的東西.要保證簡歷中寫的東西,
 透徹理解! 不管寫的是瞭解,仍是精通都要精通. 不然別寫
 我認爲不用寫的
    1.不熟悉的,僅僅是知曉的.
    2.在學校整的東西,沒啥知名度就不要寫了
    3.github 要有,可是我沒有被問過github 中的項目
複製代碼

項目經歷問嗎?

項目經歷通常是 面試必問的,重點問的. 因此第一步要優先發掘本身項目中的亮點, 把本身作的工做清晰的寫出來.
  自我介紹階段重點介紹應該也是本身的項目經歷,這時最好本身提早準備一份演講稿把本身的項目亮點說出來.
  多練幾遍.避免不過腦子,黃河決堤式回答,想到哪裏說哪裏.
複製代碼

常見高頻問題呢?

java 鎖,線程同步,Juc 包.線程池
 內存模型,gc 調優
 mysql 索引,鎖,事務隔離級別.
 常見分佈式高可用架構 redis, mysql, zk, mq等. 數據同步,數據分片,數據備份等
複製代碼

須要刷題嗎?

阿里通常不會問太多算法題.
 可是至少一半以上公司都會手撕算法.  把leetcode 各個類型的題都刷十道以上基本沒太大問題. hard題通常不會問.
 若是本身面試表現很是好,可是由於算法題被刷掉是否是會很遺憾呢?
  算法題能擴展一我的的思路,仍是有用的.也鍛鍊一我的編碼能力. 我的建議白板算法用 python 很是簡潔.更聚焦解題思路
 
 若是本身面試表現特別好,職位匹配度很是高. 算法題是能夠防水的,會挑簡單題問. 目的就是 留下你,怕你答不上來,避免尷尬
 
 可是本身面試比較差, 算法題答得特別好,會不會扭轉面試結果呢? 基本不會, 手撕算法只是輔助.項目經歷和基礎面試題是核心.
複製代碼

面試結果能夠問嗎?

若是沒有面試到 hr,或者 終面面試官沒有明確 hr 會聯繫,我基本都會問. 或者問一下本身的不足. 通常都會告訴本身.
 另外, 手撕算法OK,也會被刷掉. 我在陌陌就是 手撕算法很是完美,結果仍是掛了. 
複製代碼

通常幾輪面試?

不算 hr ,基本都是三輪. 但若是二輪面試官開始扯虛的,和你介紹項目,問你職業規劃 也許二面就是終面. 不清楚就問一下面試官.
複製代碼

平時工做划水, 面試臨時抱佛腳行不行?

不行
當面試官逼問項目細節時, 若是平時沒有對細節特別熟悉,作事馬馬虎虎,技術深度不夠,例如 技術選型爲何這麼作,其餘方案?優劣勢是什麼?
 若是沒有調研,面試時,很快會露出馬腳.
若是對項目的總體架構不熟悉,只熟悉本身的模塊,也會可能被面試官問到關聯的模塊,項目若是本身不熟悉,立刻就會支支吾吾.若是你回答,這塊
不是我負責的,我不太熟悉,就會讓面試官對你產生 沒有大局觀,主動意識不夠的狐疑.評價時會被評"只能完成本身模塊內的工做,對系統的全局
沒有了解,主動意識不強.自我驅動意識差"
工做時,可能僅僅聚焦業務,對於項目中應用的技術關注不足. 面試時候就會被面試官揪住.若是當時不思考清晰,而且面試前沒有意識到這塊技術
風險, 就會給面試帶來很大風險.美團面試官曾問我,介紹一個你主要負責的 參與方最多,週期最長,最複雜的一個項目如何推動的? 若是平時工
做不積極,不主動思考,面試被攤上這麼一個問題.基本上啞口無言. (我就目瞪口呆了)
複製代碼

僅僅看博客,把高頻面試題搞懂行不行? (問題驅動式準備面試)

這是必需要作的事情.可是僅僅作到這些還遠遠不夠
例如:
阿里面試官問:gc 爲何必定要 stop the world? 通常博客沒有給出明確清晰直觀的緣由.

一致性 Hash 如何實現? 手撕一下.爲何叫一致性 hash,一致性體如今哪裏? 通常博客沒有.

lru 算法手撕一下. 博客有,看一遍就能手撕了?

redis 和 zk 分佈式鎖實現如何選型? 各自缺點,優點?項目使用時如何避免缺點帶來的負面影響?

如何基於 AQS實現獲取鎖的公平性非公平性?

面試官甚至給你埋坑,故意說一個錯誤的,看你可否反駁.

我以前被帶坑過, 線程池問題 
面試官問:是先到 max size 仍是先添加到阻塞隊列?
我說     阻塞隊列滿了纔會繼續建立線程到max size
面試官:  是這樣嗎? 那麼若是是無界隊列豈不是永遠沒法到達 max size 
我心想:  是啊,有道理,我可能記錯了.而後被面試官帶偏了.

因此結論是,光看懂記下來,不夠,要深入理解.時刻帶着問題去學習.問題驅動式學習. 
最後你會發現,
過了許久,你印象最深入的仍是本身當初提出來的疑問及其解決思路和答案.
複製代碼

更多知識資料 :github.com/yuhaqiang12…

相關文章
相關標籤/搜索