一面:
- 給定一個先序序列,重構完全二叉樹,如果是一般二叉樹能不能重構,為什麼?
- 有三個消息隊列,隨機的向三個隊列插入元素(概率可能不同),如何保證插入和查找的高效?
- 最長公共子序列算法實現
- vector 的拷貝,swap 函數交換指針
- 線程與進程的區別,優缺點,進程內存模型
- IPC 有哪些,共享內存原理
- 說一下 LRU cache 思路
- 賽馬問題,36匹馬,6個賽道,找出最快6匹馬的最少賽馬次數,如果是n匹馬,m個賽道呢?
二面:
- 虛函數實現機制
- 內存模型影響因素(內存對齊,多重繼承下的內存模型,菱形問題,虛擬繼承內存模型,虛擬繼承是如何處理的)
- NRVO 優化,右值引用
- extern C 作用,為什麼需要它
- C++ 重載,name manging 機制
- Epoll 與 Select 區別以及 epoll 優點,為什麼一般情況下 epoll 性能比 select 好,ET 模式與 LT 模式
- 如何用 epoll 實現高併發,多線程,線程池,線程驚群問題
- 二叉樹先序遍歷,遞歸,非遞歸,如何用 O(1) 空間實現(morris遍歷)
- 互斥鎖的實現原理(屏蔽中斷,CAS),讀寫鎖實現
三面:
- TCP 擁塞控制,滑動窗口協議
- 虛擬內存機制,二級頁表,TLB 快表,缺頁,swap
- 操作系統調度算法
- TCP 如何保證可靠性,四種定時器,time_wait 如何解決,Nagle 算法
- 一致性算法(raft),一致性哈希
阿里研發工程師完整面經
一面:
- 自我介紹
- 做過哪些項目?項目中遇到哪些難點,你是怎麼解決的?簡單登錄系統說一下?分佈式緩存的使用場景?
- 你實習的時候 JDK 用的那個版本,這個版本有什麼新的特性?
- G1 回收器和其他回收器有什麼區別?
- 垃圾回收為什麼會停頓?哪些對象可能作為 GCRoots?
- 垃圾回收分代收集算法?為什麼會有兩個 Survivor 區?new 一個對象會保存在哪裡?
- Java 內存模型?volatile關鍵字,使用場景?原子性的理解?先行發生原則?
- 場景題:現在有三個線程,同時start,用什麼方法可以保證線程執行的順序,線程一執行完線程二執行,線程二執行完線程三執行?
- 你是怎麼理解線程安全的?HashMap 是線程安全的麼?如果多個線程同時修改 HashMap 時會發生什麼情況?
- ConcurrentHashMap 底層原理?每個版本的實現上有什麼區別?
- 靜態代理和動態代理的區別?動態代理是怎麼實現的?
- 深拷貝和淺拷貝的區別?
- 你做過 hadoop 的項目,為什麼要用 hadoop?你們處理的文件是什麼格式?寫了幾個 mapper 幾個 reducer?
- zookeeper 你們用了幾臺,用來幹什麼的?一般情況下都是奇數臺,那麼如果一臺掛了,偶數臺如何實現 master 選舉?zookeeper 的兩種啟動模式?
- TCP 的首部?TCP 為什麼是可靠的?三次握手四次揮手?
- Solr 是如何建立索引的?Lucene 的底層原理?
- 你平時喜歡做什麼?看過哪些書?最近在看什麼書?
二面:
- 現在在哪裡實習?實習主要做些什麼?
- 說一下 Java 裡面那你最感興趣的一個部分?
- 熟悉 Java 的哪些框架?用了 Spring 的哪些東西?Spring 現在最新的版本是多少?
- 講一下 MVC 設計模式,有什麼框架用到了這個模式?
- 場景題:一個 Controller 調用兩個 Service,這兩個 Service 又都分別調用兩個 Dao,問其中用到了幾個數據庫連接池的連接?
- 安全方面:如何防止 SQL 注入?如何防止用戶刪除其他用戶的信息?表單提交可以跨域麼?自己寫的接口如何提交被其他人惡意調用?
- zookeeper 偶數選舉問題?
- hadoop 為什麼要將文件分塊並且複製三份,複製兩份不行麼?這樣不浪費空間麼?namenode 腦裂問題?zookeeper 如何管理全局配置文件?你們的 hadoop 項目用到了幾臺機器,每個機器的作用?
- Servlet 是線程安全的麼?
- 創建一個對象的詳細過程?其中發生了些什麼?
- Java NIO 你瞭解麼?講一講你最熟悉的部分?
- 你在生活中有沒有遇到什麼神奇的事情,可以分享一下嗎?比如灑水車為什麼老是在陰天或者快下雨的時候灑水?還有我和我老婆經常吵,陽臺的花是早上澆好呢,還是晚上澆好呢?
- 你認為你身邊的同學怎麼樣?如果你正在打遊戲,你想讓同學幫忙帶瓶水,你覺得有多少人會幫你帶?
- 你還有什麼想問的?
三面(HR面):
- 7歲一個階段,說一說每個階段對你影響最大的一個人或事?
- 說一下你大學階段做了些什麼?
- 你感覺你前兩個面試官怎麼樣?
- 春招的時候為什麼沒有去 BAT 實習?
- 你當初準備暑期實習的話,是想學習到些什麼?現在感覺自己有哪些進步?
- 你還有什麼想問的?
四面(交叉面):
- 自我介紹
- 說一下最能代表你技術水平的項目吧?
- maven 是如何進行依賴管理的,如何解決依賴衝突?
- maven 的源和插件瞭解哪些?maven 的生命週期?
- 如何保證分佈式緩存的一致性?分佈式 session 實現?
- spring 的 bean 的創建時機?依賴注入的時機?
- 你們的圖片是怎麼存儲的,對應在數據庫中是如何保存圖片信息的?
- 單點登錄系統的實現?
- 項目中用到 JDK 的哪些特性?
- Java8 流式迭代的好處?
- 多線程如何在多個 CPU 上分佈?線程調度算法有哪些?
- 線程調度和進程調度的區別?
- 項目中用到了哪些集合類?
- 說一下 TreeMap 的實現原理?紅黑樹的性質?紅黑樹遍歷方式有哪些?如果 key 衝突如何解決?setColor() 方法在什麼時候調用?什麼時候會進行旋轉和顏色轉換?
- 你有什麼想問的?
騰訊研發工程師完整面經
一面:
- C++ 的 static 關鍵字的作用
- 內聯函數更普通函數的區別
- select 跟 epoll 的區別
- 共享內存的內核實現
- STL 中的迭代器失效問題
- 指針,引用區別
- Linux cpu、內存和網絡相關命令
- 父子經常 fork 時,打開的文件偏移量是否是相同的
- Linux 虛擬地址空間
- TCP 中 time_wait 的危害,三次握手,四次揮手
- C++ 多態的實現機制
- vector 跟 list 區別,還有 map 的底層實現
- extern 關鍵字
二面:
- 一個數組傳遞到函數,蛻變成指針,求字節數
- 定義在全局的對象,定義在堆中對象,定義在靜態全局變量對象,定義在棧中的對象,析構函數的析構順序
- new int[10] 跟 new int[10]() 的區別
- epoll 相關的問題
- 讓手寫代碼,求二叉樹的翻轉
- 問到 epoll 跟 select 實現區別
- 紅黑樹,普通二叉樹,AVL 樹,完全二叉樹的區別
- C 語言編寫程序判斷該大小端
- linux 內核解決驚群問題
- hash 碰撞,Trie 樹
- map/set 容器的實現原理
- 熟悉 Shell嗎?
- 說說 TCP/UDP 的區別?
三面:
- 自我介紹
- 說說自己最熟悉的一部分
- 如何防止內存洩漏?C++ 11智能指針?
- 最大的缺點是什麼?
HR面:
- 問哪裡人什麼的,有沒有女朋友,是否獨生子女,就是閒聊。
閱讀更多 力扣LeetCode 的文章