12.21 秋招面試總結(Java)-菜菜的坎坷之路


寫在前面

本人渣碩,之前天真地認為實習期間活兒幹完了就能轉正,就沒有準備提前批,也幾乎完美錯過了9月秋招正式批。倒在亞馬遜的轉正答辯後(感到痛心,捨不得組裡和善的大佬們,技術好又有耐心又有趣),10月正式踏上秋招,目標是JAVA後臺研發。至此告一段落,雖然沒拿到什麼牛逼的offer,但好歹互聯網大廠基本都面了,寫下來讓自己以後複習,也算回饋牛客。

話不多說,面試問題幾乎集中在JAVA基礎、JVM、算法、數據庫(MySQL、Redis)、計算機網絡、操作系統等方面,會分類進行列舉,限於篇幅項目相關的問題就不寫出了。


高頻問題

後面面經挺長的,嫌太長的可以只看這部分。基本上你在簡歷的技能樹上寫了以下關鍵詞,那這些高頻問題你會特別眼熟,有些會附上解答,有寫錯的地方歡迎指正~(敲黑板,這都是要考的重點)

秋招面試總結(Java)-菜菜的坎坷之路


設計模式

  • 單例模式
  • 懶漢、餓漢、雙重校驗鎖、靜態內部類
  • 工廠模式

JAVA基礎

  • 抽象類和接口區別
  • 集合類的結構
  • Iterator、Collection(List、Set、Queue)、Map
  • ArrayList和LinkedList的區別

HashMap

  • 底層結構
  • 數組 + 鏈表
  • Put 的過程
  • 為什麼長度是2的倍數
  • 找索引時 key 的 hash 值與數組的長度值減 1 進行與運算,長度為 2 的倍數時能減少碰撞
  • JDK 1.7 和 1.8 中 HashMap 的區別
  • 1.8 增加紅黑樹、頭插變為尾插、擴容後元素位置要麼在原位置,要麼在原位置 + 擴容前舊容量
  • 為什麼線程不安全
  • 擴容時鏈表可能形成閉環
  • ConcurrentHashMap 怎麼保證線程安全
  • ConcurrentHashMap 和 HashMap 區別

線程池

  • 線程池常用參數
  • 核心線程數、最大線程數、阻塞隊列、線程最大存活時間
  • 線程池工作流程
  • 線程池的類別和區別
  • 阻塞隊列的類別和區別

JVM

  • 內存結構和各自存放的內容
  • 方法區、堆、虛擬機棧、本地方法棧、程序計數器
  • 新生代和老年代垃圾回收算法
  • 新生代 -> 複製,老年代 -> 標記-整理(CMS用的標記-清除)
  • CMS/G1的流程
  • 初始標記 -> 併發標記 -> 重新標記 -> 併發清除
  • CMS/G1的特點和區別
  • CMS:儘可能減少停頓時間,採用標記-清除,會造成內存碎片化
  • G1:可以預測停頓時間,採用標記-整理,減少內存碎片化, 將內存劃分為 region 粒度
  • 判斷垃圾是否可以回收的方法
  • 引用計數法、可達性分析法
  • 哪些對象可以作為GC ROOT

Spring

  • IOC 和 AOP 的含義和原理
  • Spring、SpringBoot、SpringMVC 的區別
  • SpringBoot 的啟動流程
  • Bean 的生命週期
  • SpringMVC 的流程

MySQL

事務

  • 什麼是事務
  • 事務的特性(ACID),詳細說明各個特性的含義
  • 原子性、一致性、隔離性、持久性
  • 事務隔離級別
  • 未提交讀 -> 已提交讀 -> 可重複讀 -> 串行化
  • 髒讀、不可重複讀、幻讀的區別
  • 事務隔離級別怎麼實現預防上述問題(eg: 可重複讀怎麼實現預防不可重複讀)

索引

  • 常用索引(B樹、Hash)
  • 聚簇索引和非聚簇索引的區別
  • 聯合索引和單個索引的區別,聯合索引的最左匹配原則
  • B樹和B+樹的區別
  • B+樹的非葉子節點不保存數據,所以磁盤頁能容納更多節點元素,更“矮胖”
  • B+樹查詢必須查找到葉子節點,B樹只要匹配到即可不用管元素位置,因此B+樹查找更穩定(也不慢)
  • 對於範圍查找來說,B+樹只需遍歷葉子節點鏈表即可,B樹卻需要重複地中序遍歷

Redis

  • Redis 的五種數據結構
  • String、Hash、List、Set、Zset(SortSet)
  • Redis 為什麼快
  • 純內存、單線程、IO多路複用(一般會繼續問IO多路複用相關問題)
  • Redis 持久化
  • RDB、AOF
  • Redis 高可用
  • 哨兵機制、Redis Cluster、持久化(上面那個)

計算機網絡

  • 點擊一個URL到頁面返回,發生了什麼
  • 客戶端傳給服務端時經過 TCP/IP 四層模型,中途依次加入HTTP報文、TCP報文、IP報文、MAC報文,然後逆序依次拆包
  • OSI 七層模型 & TCP/IP 四層模型
  • cookie 和 session 的區別

TCP & UDP

  • TCP 三次握手,四次揮手的流程(最好能畫圖,說明各階段狀態)
  • 為什麼需要三次握手
  • 防止已過期的連接再次傳到被連接的主機
  • 為什麼需要四次揮手 / 斷開連接時為什麼比建立連接多一次
  • 服務端的 ACK 和 FIN 一般都會分開發送,ACK 表示自己收到了客戶端的斷開請求(但還有數據沒傳輸完),FIN 表示自己傳輸完了數據
  • TCP 和 UDP 的區別
  • TIME_WAIT 的作用
  • 保證客戶端發送的最後一個ACK報文能夠到達服務器
  • 防止類似與“三次握手”中提到了的“已經失效的連接請求報文段”出現在本連接中。客戶端發送完最後一個確認報文後,在這個2MSL時間中,就可以使本連接持續的時間內所產生的所有報文段都從網絡中消失

HTTPS

  • HTTPS的優勢
  • CA證書認證、加密傳輸
  • HTTPS建立連接流程
  • 為什麼傳輸過程中採用對稱加密,協商時採用非對稱加密
  • 對稱加密快

操作系統

進程 & 線程

  • 進程和線程的區別
  • 進程間通信方式
  • 管道、消息隊列、信號量、共享內存
  • 線程間通信方式
  • 消息隊列、全局變量

Linux(幾乎為Linux命令)

  • 查找某個進程(ps aux |grep threadId)
  • 殺掉某個進程(kill,參數添加-9表示強制執行)
  • 查看某個端口是否被佔用(netstat -anp |grep threadId)
  • 實時查看進程狀態(top)

算法

  • 最大子序列和
  • 反轉鏈表
  • 數組中查找兩數之和為K的序列對

坎坷面經

大家可以找找上面的高頻問題在下面的面試中也出現過多少次(笑),針對每個公司會有一個小結(碎碎念)。

按照順序分別是:

騰訊 - 阿里 - 美團 - 字節跳動 - 京東 - 網易

攜程 - 曠視 - 新浪 - 小米 - 搜狐 - 快手

Paypal - FreeWheel

樂元素 - SmartX - 噹噹

騰訊-醫療

一面

MySQL

  • 事務的特性
  • 如何刪除表中的所有數據,delete和truncate的區別
  • char, varchar, text的區別
  • 一張表裡數據量大,慢查詢怎麼辦

Redis

  • redis 的數據結構
  • zset 的底層結構
  • redis 的常用命令

操作系統

  • 多線程和多進程的區別
  • 進程間通信方式
  • 線程間通信方式

計算機網絡

  • TCP 三次握手,四次揮手
  • TCP 和 UDP 的區別
  • UDP 如何重組數據
  • 應用層和網絡層是幹嘛的
  • ARP 是網絡層的嗎

騰訊-地圖

一面

MySQL

  • MySQL 引擎默認的隔離等級
  • MySQL 有哪些鎖
  • 執行 select 和 update 會如何加鎖

計算機網絡

  • TCP和UDP的區別
  • TCP和UDP的報文頭內容
  • HTTP
  • HTTP屬於 TCP 還是 UDP
  • HTTP 1.1比1.0多了什麼
  • HTTP Request Header 中有哪些內容
  • 如何判斷是否是長連接
  • DNS 屬於 TCP 還是 UDP,原理
  • Ping 使用的什麼協議,原理

操作系統

  • 進程和線程區別
  • Linux進程有哪幾種狀態
  • Linux查找某個進程

算法

  • 二分查找
  • 最大子序列和

騰訊-小結

可以看出騰訊對於計算機網絡方面的知識要求蠻多的,光熟悉 TCP、UDP、HTTP 相關這樣基礎的面試題是hold不住面試官的

樓主目前在開發中還沒用到過計算機網絡的知識去解決問題,但前人的經驗告訴我們後臺系統多半會遇到網絡擁堵的情況,這個時候計算機網絡就能派上用場了(幫助定位問題,調 bug)


阿里-健康

一面

JAVA

  • HashMap原理,用紅黑樹解決什麼問題

MySQL

  • B+樹的原理和優勢

算法

  • 硬盤中有10G數據,內存1G,如何排序(多路歸併排序)
  • 最大子序列和,除了動態規劃還能怎麼做

阿里-高德

一面

數據庫

  • delete 和 truncate 區別
  • 如果索引值為null,走不走索引

JAVA

  • 常見的單例寫法

JVM

  • 新生代和老年代的區別
  • 大量大對象進入老年代會有什麼問題(頻繁觸發full GC)
  • 有很多個大對象,應該如何改進

開放式

  • 如何設計一個查詢附近商家的功能

二面

開放式

  • 爬蟲爬千萬個手機號碼,如何統計每個手機號碼的出現次數

阿里-小結

阿里對於算法方面的考核會更加嚴格,普通的算法題期待你有多種解法,並且傾向於給你一個具體問題讓你解決,然而我開放式問題都答得不咋樣

開放式問題一般都是的業務問題(數據量大、用戶量大(高併發場景)等等),需要衡量業務是正確穩定至上還是效率至上(同步、異步),還有資源消耗(空間換時間、分佈式會導致調度的額外開銷),嘗試將大問題分解,自上而下/自下而上去解決


美團-金融

一面

JVM

  • JVM的結構
  • 新生代和老年代的垃圾回收算法
  • 虛擬機棧和本地方法棧的區別
  • 類信息會加載到JVM哪個區域

JAVA基礎

  • HashMap 和 ConcurrentHashMap 的區別
  • final 的作用,加在變量、方法、類的區別
  • 新建一個 string 會創建幾個對象
  • 哪些類是線程安全的
  • 線程池的參數;為什麼需要超出最大容量的策略
  • ThreadLocal瞭解嗎

Spring

  • AOP的實現原理
  • @Autowired和@Resource的區別
  • 什麼情況下會用@Resource

MySQL

  • B+樹的優勢
  • 悲觀鎖和樂觀鎖瞭解嗎
  • 數據庫如何實現樂觀鎖

設計模式

  • 工廠模式怎麼理解
  • 單例模式有哪幾種實現方式
  • 懶漢和餓漢的區別,懶漢的缺點

算法

  • 反轉鏈表

二面

JAVA基礎

  • HashMap 和 ConcurrentHashMap 的區別
  • hash 衝撞怎麼辦?如何 rehash
  • HashMap 的遍歷方式
  • 為什麼 HashMap 是線程不安全的
  • volatile 和 synchronized 的區別

Spring

  • SpringBoot 的優勢
  • SpringMVC 的 MVC 指什麼?好處呢

Redis

  • 主從結構瞭解嗎
  • 宕機之後如何恢復數據

消息隊列

  • rabbitmq 和 kafka 的區別
  • rabbitmq 如何保證事務
  • 消息隊列的優勢

美團-數據平臺

一面

JAVA基礎

  • ConcurrentHashMap 的特點
  • JUC 包下其他併發類瞭解過嗎
  • 多個消費者生產者,如何處理同一段數據(消費者-生產者模型)

操作系統

  • 線程間通信的方式

JVM

  • 闡述 JMM 內存模型
  • 垃圾回收算法有哪些
  • 標記-整理會觸發 Stop The World 嗎
  • 什麼情況下觸發mirror GC
  • JVM 結構
  • 新建的字符串會存到哪

消息隊列

  • 設計時應該考慮什麼問題
  • 如何保證高可用

算法

  • n個有序數組,找出 Top k

美團-到家

一面

JVM

  • JVM 存在的優勢
  • 通過什麼方式來判斷是否回收
  • 哪些對象可以當 GC root
  • 虛擬機棧的對象為什麼能當 root
  • 堆和棧區別

JAVA基礎

  • ArrayList 和 LinkedList區別
  • HashMap 的底層數據結構
  • JDK 1.8 中 HashMap 有哪些變化
  • 靜態變量和非靜態變量的區別
  • 類和對象的區別
  • Synchronized 和 Lock 區別
  • Lock 底層實現
  • Exception 和 Error 的區別
  • 線程池常用參數
  • 在什麼情況下使用這些參數(線程池工作流程)

設計模式

  • 手撕單例模式的雙重檢驗鎖
  • 為什麼要有兩次檢驗

Redis

  • Redis 為什麼快
  • Redis 如何保證可用

MySQL

  • B樹索引和hash索引區別
  • 聚簇索引和非聚簇索引

計算機網絡

  • HTTPS 建立連接流程

算法

  • LeetCode11 water
  • 給定一個數,通過調換順序,找到比這個數大的最小數

美團-餐飲

一面

Spring

  • 循環依賴,可以初始化成功嗎

其他問題比較簡單沒印象了

二面

JVM

  • CMS和G1

JAVA基礎

  • HashMap 和 HashTable 區別
  • ConcurrentHashMap 和 HashMap 有什麼不同
  • 闡述樂觀鎖,悲觀鎖
  • 闡述 CAS

MySQL

  • B+和B樹的區別
  • Innodb 和 Mysiam 索引區別
  • left join, right join 區別
  • 聯合索引和普通索引的區別
  • 事務隔離等級
  • 事務特性(ACID)
  • 慢查詢如何排查
  • explain 中 index 和 ref 區別

美團-小結

原來美團我面了這麼多次,側面反映我有多菜了(逃)。

美團會挖你使用原理,考察你是不是真正用過這個東西而不僅僅是在博客上看了些相關的熱門面試題(雖然回頭來看這些題也挺基礎的吧),換個角度講即是連環炮問題的個數會變多,所以在準備相關知識點的時候需要看得細緻一點,不光是知道這個點的用途,還需要知道詳細的用法、為什麼這麼設計就能達到理想的效果,針對這個點還有沒有優化空間


字節跳動-未知部門

一面

JAVA基礎

  • ArrayList 和 LinkedList 的區別
  • 為什麼 ArrayList 可以直接訪問到元素
  • HashMap 的內部數據結構
  • 除了Map還可以怎麼實現key value結構
  • Synchronize是公平鎖嗎,可重入嗎
  • Lock 和 Synchronize 的區別
  • Exception和Error的區別
  • OutOfMemoryError(OOM) 可能是哪些原因導致的
  • 併發控制可以用哪些方式實現
  • 線程池的大小應該如何設置
  • 一個類裡有兩個synchronize方法method1和method2, 如果有兩個線程分別執行method1和method2,他們是串行執行還是並行執行

JVM

  • 堆和棧的區別
  • 遞歸調用是在堆上還是棧上

計算機網絡

  • 闡述 TCP 連接流程
  • TCP 為什麼需要第三次握手
  • HTTPS 和 HTTP 的區別
  • HTTPS 如何建立通信
  • 為什麼要用對稱加密 key 加密信息,而不用公鑰直接加密信息

MySQL

  • 聯合索引A,B,C,直接查詢C走不走索引,A,C呢,A,B呢
  • 瞭解SQL注入嗎
  • 從服務端如何防止SQL注入

算法

  • 反轉字符串 (you me)-> (me you)
  • 如果上面輸入的是一個char[]呢,不通過輔助操作char數組

字節跳動-國際支付

一面

JAVA基礎

  • 重寫 equal 為什麼要重寫 hashcode
  • 抽象類和接口區別
  • List 和 Set 區別
  • HashMap 的實現結構,hashcode 方式

計算機網絡

  • HTTP 狀態碼4XX和5XX的區別
  • GET 和 POST 區別

MySQL

  • 事務特性
  • 事務隔離等級

算法

  • 求二叉樹中左葉子節點的總和

二面

Redis

  • zset 的底層原理
  • String 的底層原理

算法

  • 鏈表對摺 1 -> 2 -> 3 -> 4 -> 5 ----> 1 -> 5 -> 2 -> 4 -> 3

字節跳動-小結

宇宙條也愛摳原理,準確說互聯網大廠都會問原理吧。回看問題覺得問得也不是很難,都是比較基礎的知識,比如併發控制中的 Synchronize 和 Lock ,奈何我用得太少,這些關鍵字最好是自己能寫個小 demo 來驗證一下效果,不然光看別人的博客寫得頭頭是道,臨場了根本記不住那麼多


京東-優惠券

一面

Redis

  • 基本數據結構
  • 持久化策略
  • 如何提高 Redis 的性能

消息隊列

  • 如何保證可靠性
  • 如何保證消息的冪等性

JAVA基礎

  • HashMap 線程安全嗎?如果要線程安全怎麼辦
  • ConcurrentHashMap 怎麼實現線程安全
  • volitale 怎麼保證可見性

JVM

  • JVM 結構
  • 常量存在哪裡
  • 如果有一個大對象,垃圾回收是怎麼進行的

Spring

  • IOC 和 AOP 的底層原理


秋招面試總結(Java)-菜菜的坎坷之路


京東-數據產品(offer)

一面

JVM

  • 棧的結構
  • 闡述 CMS

Redis

  • Redis 為什麼快
  • IO多路複用為什麼快

算法

  • 二叉樹的層次遍歷

二面

MySQL

  • left join、right join、inner join 的區別

設計模式

  • 闡述工廠模式及應用場景

算法

  • 翻轉鏈表
  • 一個二維數組,從左往右遞增,從上往下遞增,問數組中是否存在數K
  • 64匹馬,8個賽道,只能知道馬的名次而不知道具體時間,如何最少次數找出最快的4匹馬

京東-虛擬商品交易

一面

JAVA基礎

  • 闡述泛型

JVM

  • G1的特點

Spring

  • 闡述 AOP

TCP

  • 三次握手時的各個狀態
  • TIME_WAIT 的意義
  • 闡述慢啟動

MySQL

  • B+和B樹區別
  • 闡述聚簇索引

二面

JAVA基礎

  • HashMap Put過程
  • HashMap 擴容時,為什麼擴兩倍

三面

  • 覺得前兩個面試官如何

京東-小結

京東問的問題大多停留在闡述概念,當然有些是我不會面試官就沒往下深問了,整體還是偏簡單的。數據產品能拿到 offer 可能歸功於算法題太簡單了(賽馬那道除外),很流暢地就寫完了,我會告訴你我一週寫了三次反轉鏈表嗎

秋招面試總結(Java)-菜菜的坎坷之路



網易-有道

一面

JAVA基礎

  • 線程池的屬性
  • 為什麼需要線程池
  • 可以用哪些方法來線程同步
  • 闡述 Synchronize, Lock
  • HashMap 線程安全嗎?如何線程安全
  • ConcurrentHashMap 如何實現線程安全
  • atomic 類瞭解嗎,原理
  • Synchronize 的原理
  • AQS(AbstractQueuedSynchronizer)瞭解嗎

操作系統

  • 創建線程有哪些開銷

計算機網絡

  • 闡述 TCP 四次揮手
  • TIME_WAIT 等待多久

Linux

  • 如何找出狀態為 TIME_WAIT 的 TCP 連接
  • grep 原理,需要消耗哪些資源

MySQL

  • 事務隔離等級
  • 已提交讀和可重複讀的區別
  • 不可重複讀是什麼
  • 可重複讀如何解決不可重複讀
  • select for update 和 select 的區別

算法

  • 二叉樹右視圖

網易-小結

筆試之後兩個月才面試可等死我了,問了不少多線程開發的問題,可惜我沒做過這個,有空得寫寫 demo 熟悉下線程池,其他基本是常規問題


攜程-途家

一面

JAVA基礎

  • 死鎖瞭解嗎,寫一個死鎖

MySQL

  • 聯合索引(a,b,c)什麼情況下適用
  • 事務隔離等級
  • 髒讀是什麼

二面

JAVA基礎

  • String 的特點,怎麼實現值不可變
  • a = "1",b = "2",c = "12",d = "1" + "2",e = a + b,問 c d e 兩兩之間是否 == / equal
  • Synchronize 的原理
  • 鎖膨脹的過程
  • 自旋鎖的好處
  • HashMap 查找複雜度,如何實現的
  • HashMap 如何擴容,為什麼長度是2的冪次
  • HashMap 初始化默認長度,初始化長度為7會怎麼樣
  • HashMap 在 JDK 1.8有什麼改進
  • HashMap 鏈表什麼時候轉紅黑樹
  • 為什麼8轉紅黑樹,6退化為鏈表
  • HashMap 為什麼線程不安全
  • ConcurrentHashMap 為什麼線程安全
  • ConcurrentHashMap 鎖分段在1.8怎麼實現

JVM

  • CMS,G1 等垃圾回收器瞭解嗎
  • 老年代年輕代用什麼回收算法
  • 垃圾回收的判斷方法
  • 引用計數法的缺陷
  • 哪些可以當做 GC root
  • 如果在老年代中有對象引用年輕代的對象,回收年輕代的時候怎麼處理

MySQL

  • 事務隔離等級
  • 幻讀會發生在哪一級
  • MySQL 如何防止幻讀
  • B+樹的好處
  • B+樹非葉子節點只放索引的好處
  • select where a > 3 and a < 10 和 where between 的區別
  • 數據庫如何加行級鎖
  • 快照讀怎麼實現的

Redis

  • 緩存淘汰算法有哪些

算法

  • 二叉樹兩個節點的最近公共祖先

攜程-小結

看得出來這個面試官非常喜歡 HashMap,面試中只要涉及到 JAVA 的集合類,準少不了 HashMap,如果接著問到線程安全方面,那多半會引出ConcurrentHashMap,關於這倆的問題也不少,仔細消化一下吧


曠視

一面

計算機網絡

  • 闡述TCP連接流程

算法

  • 二叉樹右視圖
  • 一個數組,只有0和1,指定一個數k,返回最多將k個0變為1後最大的連續1子序列長度

二面

算法

  • 複數計算(字符串處理)
  • 二分查找
  • 一個數組arr,每次pop一個數arr[i],sum+=arr[i-1] * arr[i] * arr[i+1],求sum的最大值

三面

計算機網絡

  • HTTP如何保持長連接
  • 客戶端還是服務端記錄長連接
  • session 和 cookie 的區別
  • cookie 在傳輸中放在 HTTP 報文的哪裡

曠視-小結

人工智能出身的公司對算法比較看重,但是除了最後那道動態規劃其他算法題屬於簡單的類型。(面試中讓寫複雜動態規劃的情況很少,一般考察的題目代碼會比較簡短)因為曠視技術棧不是 JAVA,所以就沒問 JAVA 相關的,轉而問了些計算機網絡的東西,也不算很難。三面的面試官有些敷衍,覺得我的項目比較簡單(第一次被這麼說,果然是其他面試官太溫柔了不好意思說),沒什麼想問我的就草草結束了


新浪-金融

一面

JVM

  • JVM 分區,哪些會發生溢出
  • 怎麼讓棧溢出

MySQL

  • 慢查詢 SQL 怎麼排查

計算機網絡

  • HTTPS 的流程
  • 點擊 URL 的流轉過程

算法

  • 判斷迴文數

二面

JAVA基礎

  • JAVA 和 C 的區別
  • 如何體現面向對象
  • 什麼是多態

算法

  • 從1億個數找出前10
  • 從1億個數大概率找出某個數
  • 布隆過濾原理,怎麼減少碰撞

MySQL

  • 什麼是事務
  • 事務的特性詳細說一下
秋招面試總結(Java)-菜菜的坎坷之路


新浪-小結

中規中矩的面試題,該有的部分都沒落下。布隆過濾器只是看過概念沒有深究,原理和優化需要再品一下。這些經常聽到的數據結構(諸如堆、並查集、字典樹、AVL樹等),可以多看看,再找幾道題目實踐一下,防患於未然


小米-中間件

一面

JAVA基礎

  • JDK 1.8 HashMap 有哪些變化
  • 如何保證 Map 有序
  • Synchronize 的底層原理
  • Lock 的底層原理
  • 線程池參數
  • 線程池執行流程
  • Spring
  • Spring Bean 的生命週期

JVM

  • 分區結構
  • 垃圾回收算法
  • 闡述 G1

MySQL

  • 事務特徵(ACID)
  • 事務隔離等級
  • 可重複讀和已提交讀的區別
  • 不可重複讀和髒讀的區別
  • 闡述B+樹索引

算法

  • 反轉鏈表
  • 單例模式
  • 上樓梯(斐波拉契數列) LeetCode 70

二面

算法

  • 平衡二叉樹 LeetCode 110

小米-小愛

一面

Spring

  • IOC 的好處

算法

  • 二叉樹中的最大路徑和 LeetCode 124

二面

算法

  • 翻轉鏈表
  • 順時針遍歷矩陣

Redis

  • 緩存擊穿怎麼處理

JAVA基礎

  • Throwable 下的類結構
  • RunTimeException 和非 RunTimeException 區別
  • 線程池的種類
  • CPU 密集型任務和 IO 密集型任務的區別,分別怎麼設置線程數
  • 寫一個使用 volatile 而可以不用 synchronize 的場景

Spring

  • @autocofiguration 的好處
  • SpringBoot 比 SpringMVC 的優勢
  • MVC分層的好處

其他

  • zk瞭解嗎
  • 函數式編程瞭解嗎
  • Spark瞭解嗎

小米-有品(offer)

一面

操作系統

  • 進程和線程的區別
  • 進程間通信方式
  • 一個進程最多可以開多少線程
  • select 和 epoll 的區別
  • 闡述同步/異步

計算機網絡

  • TCP TIME_WAIT 作用
  • 闡述 TCP 擁塞控制和流量控制

二面

MySQL

  • B+樹索引結構
  • B+樹的深度如何增加(增加元素的過程)
  • B*樹瞭解嗎

操作系統

  • Redis 在執行 RDB 時,如果子進程需要拷貝的內容超過內存的一半可能會出現什麼問題

開放式

  • 設計一個單機版爐石

小米-小結

面中間件部門的時候,之前面得有些疲倦,有些消極面試,導致基礎問題答得還可以,但簡單的算法題都沒有撕出來。

面小愛部門的時候,情況恰好反過來,基礎問題幾乎一問三不知,面對在面經中沒看到過的題目有些懵了。

秋招是條長陣線,過程中需要隨時調整心態,沒拿到 offer 的時候要能克服沮喪本能去覆盤,至少針對沒答上的問題去搜索答案,堅持每天刷1-2道題。

感謝我的學長K神撈了我一把,有品的面試官很 nice,問的問題你如果不會的話都詳細地進行了解答而不是趕緊跳到下一個。二面面試官穿了件爐石主題的衛衣,就很巧扯到了爐石,然後讓我設計這麼一個遊戲跨度就很大。有品面下來感覺一半時間都是面試官在說,也算是我運氣好吧

————以下無內容—————————



分享到:


相關文章: