我的2019校招面經大全(包含BAT頭條網易等大廠面經)

【程序員江湖】作者How 2 Play Life,985 軟件碩士,阿里 Java 研發工程師,在技術校園招聘、自學編程、計算機考研等方面有豐富經驗和獨到見解,目前致力於分享程序員乾貨和學習經驗,同時熱衷於分享作爲程序員的一些成長心得和生活感悟。


騰訊SNG

後臺開發工程師

大概是8月初投的簡歷,當時沒有選事業羣,第二天直接被sng撈了,抓着我一頓面試。

一週內就面完了三次面試,接着就開始無盡的等待,整整等了三週左右,終於完成了四面和HR面。

整個過程還是比較曲折的,技術面試的難度也挺大的,不過他們部門也是Java線,所以還比較有的聊。結果目前還不知道。

1一面

一面:

1 有序數組排序,二分,複雜度

2 常見排序算法,說下快排過程,時間複雜度

3 有N個節點的滿二叉樹的高度。1+logN

4 朋友之間的點對點關係用圖維護,怎麼判斷兩人是否是朋友,並查集,時間複雜度,過程。沒講清楚

1. 初始化元素

2. 實現元素與元素間的聯合操作

3. 實現查找元素所在樹的根節點

4. 解決一個問題,判定兩個元素是否在同一棵樹上(兩個元素是否相互連接)

5 單元點最短路的方法,時間複雜度

6 如何實現關鍵字輸入提示,使用字典樹,複雜度多少,有沒有其他方案,答哈希,如果是中文呢,分詞後建立字典樹?

7 hashmap的實現講一下吧,講的很詳細了。講一下紅黑樹的結構,查詢性能等。

8 Java中的垃圾回收講一下,講了分代,gc算法,gc root可達性分析等

9 講一下兩個項目你都做了什麼把。

10 除了代碼之外你還學習了什麼技術,框架。

11 死鎖是怎麼產生的

12 線程和進程的區別

13 進程的通信方式

14 CPU的執行方式

15 代碼中遇到進程阻塞,進程僵死,內存泄漏等情況怎麼排查。通過ps查詢狀態,分析dump文件等方式排查。

16 Linux瞭解麼,查看進程狀態ps,查看cpu狀態 top。查看佔用端口的進程號netstat grep

17 10g文件,只有2g內存,怎麼查找文件中指定的字符串出現位置。MapReduce分割文件處理。

他說可以用cat | grep 管道處理。

2二

二面:

1 快排的時間複雜度,冒泡時間複雜度,快排是否穩定,快排的過程

2 100w個數,怎麼找到前1000個最大的,堆排序,怎麼構造,怎麼調整,時間複雜度。

3 一個矩陣,從左上角到右下角,每個位置有一個權值。可以上下左右走,到達右下角的路徑權值最小怎麼走。

先說了一下dfs遞歸實現。面試官說要優化。

說了一下用迪傑斯特拉的思路,說可以。

4 四輛小車,每輛車加滿油可以走一公里,問怎麼能讓一輛小車走最遠。說了好幾種方案,面試官引導我優化了一下,但是還是不滿意,最後他說跳過。

5 hashmap的實現,hashtable,concurrenthashmap實現。

6 MySQL的索引,B+樹性質。

7 Linux的cpu 100怎麼排查,top jstack,日誌,gui工具

8 Linux大文件怎麼查某一行的內容。

9 Redis內存數據庫的內存指的是共享內存麼

10 Redis的持久化方式

11 秒殺系統的架構設計

3

三面:

1 十億個數的集合和10w個數的集合,如何求它們的交集。

集合的數字不重複。

我講了兩次循環,兩次hash,以及排序或者合併等方式。。都不對。後來面試官說是對小數組做hash,然後遍歷大數組即可。我完全想錯方向了。

2 十億和數找到前100個最大的,堆排序,怎麼實現,怎麼調整。

3 TCP和UDP的區別,具體使用場景呢。

4 TCP四次揮手講一下過程,最後一次ack如果客戶端沒收到怎麼辦。

5 對於socket編程,accept方法是幹什麼的,在三次握手中屬於第幾次,可以猜一下,爲什麼這麼覺得。

6 Linux操作系統瞭解麼,瞭解一點點,就沒問了。

7 對於單例模式,有什麼使用場景了,講了全局id生成器,他問我分佈式id生成器怎麼實現,說了zk,問我zk瞭解原理不,講了zab,然後就沒問啦。

8 除了單例模式,知道適配器模式怎麼實現麼,有什麼用

9 回到網絡,剛纔你說到直播場景,知道直播的架構怎麼設計麼,要點是什麼,說了幾個不太對,他說要避免廣播風暴,答不會。

10 Redis和MySQL有什麼區別,用於什麼場景。

11 問了一下最近看什麼書,什麼時候開始寫博客的

12 問了還有幾輪面試,他說這輪我可以過,有點小驚喜

4

四面:

三面過了半個多月,終於安排四面了。

1 自我介紹

2 項目,收穫

3 Linux瞭解哪些,基礎命令和知識。問我proc文件系統瞭解麼,答不瞭解。

4 TCP和UDP的核心區別在哪,講了滑動窗口保證可靠有序傳輸,UDP不可靠。TCP需要連接而UDP不需要。

5 TCP的四次揮手,time wait狀態有什麼意義。

6 說完這個他問我有什麼想問他的了。

7 我問他爲什麼隔了這麼久才面試,而且之前三面都只是初試,然後他說最近他在休假,所以就。。。害我擔心了好久。他說接下來等HR面就行了。

5

HR面:

1 自我介紹

2 實習收穫

3 臺灣交流體驗

4 之前實習公司的情況,拿到offer了嗎,會如何選擇呢

5 排一下公司,部門,薪資和城市等因素。

6 你的優缺點,如何改進

7 學生時代最成功的事

8 你的預期薪資

阿里中間件研發面經

研發工程師(Java)

我參與了阿里巴巴中間件部門的提前批面試,一共經歷了四次面試,拿到了口頭offer。這是我的面經,在這裏分享給大家。

一面:

1 自我介紹

2 項目中做了什麼,難點呢。

3 Java的線程池說一下,各個參數的作用,如何進行的。

4 Redis講一下

5 分佈式系統的全局id如何實現。用zookeeper如何實現的呢,機器號+時間戳即可。

6 分佈式鎖的方案,redis和zookeeper那個好,如果是集羣部署,高併發情況下哪個性能更好。

7 kafka瞭解麼,瞭解哪些消息隊列。

8 想做業務還是研究。

9 然後出了一道題,linux的訪問權限是rwx格式的。使用一個類支持訪問權限的增刪改查,並且注意使用的數據格式以及方法效率,規範。給了一個多小時寫題。

耗時將近30分鐘。

二面:

1 介紹你做的項目和其中的難點。

2 上次面試官問的問題,反射的作用是什麼。

3 數據倉庫,多線程和併發工具等。

4 私有云,docker和k8s等。

5 瞭解哪些中間件,dubbo,rocketmq,mycat等。

6 dubbo中的rpc如何實現。

7 自己實現rpc應該怎麼做

9 dubbo的服務註冊與發現。

10 聽說我是非科班,於是問了些排序算法

耗時將近30分鐘。

三面:

三面不是面試,而是筆試,耗時三個小時,考的是Java核心的基礎。但是好像不能透題,就不說了。都挺有難度的。

大概說一下就是有幾個考點,Java併發的知識點,集合類,線程池,多線程之間的通信等。

HR面:

聊人生談理想,HR×××姐非常溫柔,交流十分愉快。30分鐘。

百度研發面經

百度智能雲

軟件研發工程師

        百度今年的提前批有點奇怪,好像都不走流程,牛客上好幾個百度內推的帖子,我投了幾個,基本上都是百度智能雲的。

        然後這些部門都安排了面試,沒有衝突,所以沒有動靜的小夥伴可以投投別的部門試試。

        下面是我的兩篇面經,後續會繼續更新,每個部門側重點不太一樣。

百度智能雲研發崗

好像是做控制檯方面的組

一面:

1自我介紹,項目

2 static關鍵字有什麼用,static修飾不同東西時有什麼作用,內部類用static修飾和不用static修飾有何區別。

3 hashmap,hashtable,concurrenthashmap區別和場景

4 volatile關鍵字有什麼用

5 jvm分區講下,作用講下,gc算法講一下,gc是否會有停頓或者延遲。

6 講一下OOM和內存泄漏的例子,爲什麼有GC還會出現內存泄漏和內存溢出呢

7 線程和進程的區別,通信方式的區別。

8 悲觀鎖和樂觀鎖,說一下Java和數據庫分別怎麼實現的。

9 數據庫索引說一下,除了B+樹索引還有什麼索引。

10倒排索引說一下,如果關鍵字很多,怎麼優化。使用前綴樹和hashmap優化。

11 前綴樹的結構和原理說一下。

12 瀏覽器發起http請求過程,越詳細越好。

13 緩存和數據庫的一致性怎麼保證

14 網上寫代碼,寫了一個快排

15 沒了。

二面:

1 自我介紹

2 項目中難點,用到的技術

3 多線程,說一下線程的狀態和狀態轉換,詳細問

4 多線程的sleep方法和wait方法爲什麼來源不同,一個是object方法,一個是Thread的方法。

5 爲什麼object的wait和notify必須在同步塊中使用,不在同步塊使用會報錯麼,編譯報錯還是運行報錯。

6 jvm講一下gc吧,兩個對象的引用循環依賴,會不會被垃圾回收,什麼情況下會什麼情況下不會呢

7 GC root是哪些位置呢,我說記不起來,他說你不用記,其實就是運行時的一些對象和變量,比如局部變量表,方法區的元數據比如fianl,static變量,本地方法棧執行的方法。 

8 數據庫瞭解哪個。Redis說一下爲什麼是單線程的,不會很慢麼,有什麼好處。

9 Redis的IO請求模型,是不是IO多路複用呢。

10 Spring的interceptor和filter有什麼區別。我說沒區別,錯!

11 網絡這塊,說一下dns請求的過程吧,dns是否會訪問緩存呢,緩存在本地和瀏覽器,還有dns服務器上是不是都有。

12 get和post的區別講一下,底層的實現有區別麼,都是基於TCP,那麼如何限制get的url長度,在哪一層限制的。

13 數據結構熟麼,講一下樹和圖吧,樹的層次遍歷使用什麼結構,相應的圖的遍歷呢。講講最小生成算法,還有迪傑斯特拉。

14 數組,找到唯一一個出現兩次的數。

剛開始聽錯,說了位運算。

a 然後講了數組計數,hash計數,排序比較。

b 然後面試官說條件給的是1到N-1的N個數字,重新想一下。

c 說了根據數組位置和數字比較進行判斷。面試官最後說可以用相加求差值來判斷。

15 一個10000以下的數組,內存夠。裏面只有1,2,3。排下序。

a 普通排序O(nlogn)

b 荷蘭旗問題,雙指針解決。O(N)

c 統計數量,重放數組O(2N)

d 另外搞一個數組,把1放頭,3放尾,也是雙指針。O(N)。空間複雜度O(N)

16 沒了。

全程50分鐘

三面HR

巴拉巴拉巴拉。基本上問題都大同小異。

百度智能雲 數據庫部門

一面:

1 數據庫的事務,四個性質說一下,分別有什麼用,怎麼實現的。一致性沒講好。

2 講到了redo和undo日誌,問我分別有什麼用,說redo日誌說錯了。

3 數據庫的隔離性如何保證,使用悲觀鎖和樂觀鎖有何區別。MVCC的設計目的是什麼,怎麼使用版本號判斷數據的可見性。

4 問了一道算法,1到N的所有數字,按照字典序打印,怎麼做。

說了用數組排序,問複雜度,扯了半天。

怎麼優化,按照數字特徵順序打印,問這個東西和什麼結構比較像。提示是樹,然後說了個多叉樹,問我怎麼實現,最後其實使用dfs遍歷樹的每個分支。

5 多線程併發的同步實現,有兩個方法,每個方法裏有a部分代碼和b部分代碼,我要讓兩個線程分別執行兩個方法,並且讓他們運行完a部分代碼再一起向下執行,如何實現。

6 我說了用cyclicbarrier實現,互相等待await。

然後他問我怎麼用信號量實現,並且提示可以再用一個線程。

然後我說了個方案。

7 問了項目

8 如何把優化遞歸的代碼

改成尾遞歸或者循環。

面試官說不是,引導說用棧實現遞歸。

問我棧中需要壓入哪些數據。他說應該是方法參數,返回值,以及返回地址。

二面:

1 自我介紹,項目 10分鐘過去

2 服務器如何負載均衡,有哪些算法,哪個比較好,一致性哈希原理,怎麼避免DDOS***請求打到少數機器。

3 TCP連接中的三次握手和四次揮手,四次揮手的最後一個ack的作用是什麼,爲什麼要time wait,爲什麼是2msl。

4 數據庫的備份和恢復怎麼實現的,主從複製怎麼做的,什麼時候會出現數據不一致,如何解決。

5 今天面試太多了,記不清了。。。

6 開源的技術看過用過麼,分佈式存儲的瞭解麼。

7 想做什麼方向的開發。

8 Linux查看cpu佔用率高的進程

9 查看佔用某端口的進程和某進程監聽的端口

10 如何查詢日誌文件中的所有ip,正則表達式

三面(8.3號更新):

數據庫部門真的很嚴格,問題都挺難的。

1 講一下項目

2 平時瞭解什麼操作系統

Linux,說一下Linux排查問題常用的命令,ps,top,netstat,free,du等等

3 Linux的內存管理算法,問了一下是不是頁面置換算法,他說是。

說了lru和fifo,問我lru有什麼缺點,沒答上來。

4 Linux的文件系統瞭解麼,講了一下inode節點,文件和目錄的原理。他問我了不瞭解具體的文件系統ext2,ext3,答不會。。

5 進程通信方式有哪些,問我分別怎麼使用,管道有哪些類型,各有什麼優缺點。

6 問我服務器硬件瞭解麼。。一臉懵逼,問了我懂不懂Raid,瞎扯了幾句就說不懂了。

7 shell瞭解麼,沒怎麼寫過。

8 聽說你會Java,說一下JVM內存模型把,有哪些區,分別幹什麼的

9 說一下gc算法,分代回收說下。

10 設計模式瞭解麼,說了7種,問我分別怎麼用,實際應用過嗎,稍微扯了一下。

11 MySQL的引擎講一下,有什麼區別,使用場景呢。

12 查詢最新的10條數據,想了好一會,order by id desc limit 10

13 MySQL的union all和union有什麼區別,我瞎掰了一下,應該不對。

14 MySQL有哪幾種join方式,底層原理是什麼,答不會,只知道表現形式。

15 Redis瞭解哪些啊,數據結構和基本原理把。

問我Redis怎麼做集羣,答了主從哨兵和cluster。

Redis的持久化怎麼做,aof和rdb,有什麼區別,有什麼優缺點。

16 Redis使用哨兵部署會有什麼問題,我說需要擴容的話還是得集羣部署。

17 分佈式系統瞭解麼,說一下Hadoop瞭解啥。

我說基本組件稍微瞭解過,簡單搭過環境。

18 MapReduce的combiner幹啥的,我說是合併結果的,問我啥時候會用到,答不知道。

19 Hadoop分發任務時,有個job失敗了,hadoop會怎麼處理,我答不知道,猜是會繼續執行。。

20 hadoop分發任務,如果有一個節點特別慢拉慢了整體速度怎麼辦。我猜測是通過yarn分配相同的資源給每個任務,可以避免這種情況,他好像不太滿意。

21 hadoop答得很爛。問了我兩個10g文件比較,2g內存,重複率很高,篩選出不同的內容。我說拆成十份hash,每份兩兩比較hash的結果集,貌似他說OK。

22 排序算法瞭解哪些,巴拉巴拉。

23 用隊列計算一個樹的高度,我說用層次遍歷記錄節點高度。

24 一個黑名單集合,數據量很大,快速查詢一個值是否在集合裏,怎麼設計,我說布隆過濾器。

25 還是上一題,說這個黑名單可能需要動態地增刪改,如何設計才能避免訪問響應太慢。我沒思路,瞎扯了一下加硬件,用內存存,都被駁回了。然後他說算了。

26 上一題的黑名單做成分佈式,怎麼做。說了分片的方案,根據地址的hash值確定分片所在節點。

27 分佈式數據庫瞭解麼,我不太明白他問的是啥,說不了解,感覺應該是問數據庫的分佈式方案。

28 有什麼想問的,據他所說還有2-3輪面試,驚了。

全程50分鐘,可以說是迄今爲止難度最大的一個?


大俠,這裏有乾貨!

華爲 深信服等研發面經


美圖面經:

一面:

1 Java的hashmap

2 Java的多線程技術,線程池

3 Java的jvm講一下,內存模型,垃圾回收

4 mysql的索引怎麼建,優化

5 Linux操作系統瞭解哪些

6 網絡和操作系統問了些基礎

7 Redis使用哪些場景

8 數據結構瞭解哪些,排序的複雜度

9 講一下項目裏的難點,說一下docker。

10 其他忘記了

二面:

1 項目

2 docker和k8s知道哪些,說一下

3 OpenStack用到了哪些組件,說下

4 閒聊其他

5 意向城市

迅雷:

一面:

1 我們是c++和golang,這方面瞭解麼

2 jvm的內存模型和垃圾回收

3 Java併發技術講一下

4 MySQL數據庫相關問題,主從,讀寫分離,分佈式方案

5 Redis的哨兵講一下

6 負載均衡一般是怎麼做的

7 數據結構問了些問題

8 操作系統,網絡問了幾道題

9 有興趣轉語言麼

猿輔導:

一面:

1 講一下項目

2 項目中的chm和countdownlatch是怎麼用的。有沒有用到線程池

3 項目中的tomcat部署怎麼做的,講一下基本原理

4 你用到了git,那常用的命令有哪些,pull和fetch merge有什麼區別。

5 算法題,A數組和B數組,A數組中數字根據B數組的數字順序進行排序。

華爲優招

cloudbu

研發工程師

一面:

1 項目

2 重構的原因和方式

3 docker和k8s懂哪些說一下

4 jvm瞭解麼

5 jvm加載類是在什麼時候

6 如果有重複類加載會發生什麼

7 MySQL問了一些

8 閒聊了幾句

二面:

1 項目

2 問家庭

3 之前去過臺灣交流,問了幾句

4 開始問我港臺同胞的話題

5 項目有什麼創新麼,巴拉巴拉

6 論文競賽有麼。沒有

7 面試沒問題,等着簽約吧。

然後我就溜了,還差點把面試官手機錯拿了,尷尬

深信服

大數據研發工程師

一面:

1python怎麼樣

2c語言熟麼,問了幾個c語言的東西。不會。

3算法,跳臺階,斐波那契數列和dp方式都說了。

4tcp的四次揮手中的time—wait狀態何時出現,有什麼意義。

5操作系統的fork進程返回什麼,應該是子進程號吧。

6沒什麼問題了。

二面:

1自我介紹

2爲什麼選這個崗位

3瞭解hadoop的哪些組件,全部說了一遍。

4講一下hdfs的寫入過程,發請求給namenode,返回一個地址進行寫入,寫入完告訴namenode,namenode完成副本備份。

5講一下項目中的難點,多線程,併發工具,併發容器。

6講一下如何設計一個高併發的秒殺系統

7python瞭解麼,講一下線程和協程

協程自帶上下文,切換不需要刷新cpu上下文和寄存器。更適合併發。協程和線程適用場景的區別。

8沒了

三面:

1 介紹

2 問了一下家庭情況和城市意向

3 大學有啥困難和挑戰

4 研究生成績,做了什麼

5 評價自己

6 對我司有什麼瞭解

7 加班怎麼看

螞蟻金服研發面經

螞蟻金服中間件

研發工程師

    之前面了阿里中間件的提前批,不過沒走流程。同期還面了螞蟻中間件的兩輪面試,被告知不走流程就不能面了,所以也沒面完。

    後來走了螞蟻金服財富事業羣這邊的流程。前幾天剛剛面完HR。

    正好今天分享一下面經,大家可以多交流交流哈。

1:螞蟻中間件(面了三次,兩次一面,一次二面)

2:螞蟻財富(1+2+交叉+HR)

1一面

螞蟻金服中間件一號機

一面:

自我介紹

1Java中的多線程瞭解麼,線程池的增長策略和拒絕策略瞭解麼,說一下。

2講一下線程增加的過程和拒絕策略的執行。

3講了一下fixthreadpool的增長策略,然後幾種拒絕策略。

4高併發情況下,如何使用線程池,用哪個,問了一下線程結束要多久,是否在下一個線程結束前完成(我想的是cachethreadpool,其實思路錯了)。

5表示併發量比較大,所以我說可以考慮併發量是否大於隊列長度加上最大線程數量和,如果不超過的話可以是用fixthreadpool。

6併發juc瞭解麼,有哪些線程安全的list。說了個copyonwritelist,想了半天說不出第二個了。尷尬,那就vector把,不是juc裏的。

貌似併發包裏確實沒有其他list啊。

還問了concurrenthashmap1.8的改動。

7HTTP協議瞭解麼,和tcp有什麼區別。

8http1.0和2.0的區別。

答了TCP連接複用,加入ssl,以及壓縮請求頭。

其中哪個更新比較有意義,爲什麼。我說的是壓縮請求頭,這樣可以優化HTTP服務的性能。

9Java的網絡編程,比如NIO和Socket瞭解麼。

說下BIO和NIO的區別把。

我說了BIO的阻塞用法,以及NIO的IO多路複用用法,說了selector,seletedkey,channel等類的使用流程,以及單線程處理連接,多線程處理IO請求的好處。

10說一下NIO的類庫或框架

講了netty,寫過服務端和客戶端的demo,沒有在生產中實踐。

1 channelhandler負責請求就緒時的io響應。

2 bytebuf支持零拷貝,通過邏輯buff合併實際buff。

3 eventloop線程組負責實現線程池,任務隊列裏就是io請求任務,類似線程池調度執行。

4 acceptor接收線程負責接收tcp請求,並且註冊任務到隊列裏。

11倒排索引瞭解麼,我說不了解。

其實就是搜索引擎的基礎索引,根據關鍵字到文檔的映射關係建立索引,中文關鍵字可以使用中文分詞,查詢時通過關鍵字來定位索引,並且進行排序後得到文檔結果集。

然後面試官說講一下數據庫把,說下sql優化的方式

我說的是MySQL,先講了一下sql使用索引的優化,然後基於索引說了幾條優化方案。

12索引什麼時候會失效變成全表掃描

說了聯合索引的前綴匹配,跳躍索引,聚合函數,判空和<>這些情況。

13分佈式的paxos和raft算法瞭解麼

瞭解過,但是講不清楚。

paxos:多個proposer發請提議(每個提議有id+value),acceptor接受最新id的提議並把之前保留的提議返回。當超過半數的accetor返回某個提議時,此時要求value修改爲propeser歷史上最大值,propeser認爲可以接受該提議,於是廣播給每個acceptor,acceptor發現該提議和自己保存的一致,於是接受該提議並且learner同步該提議。

raft:raft要求每個節點有一個選主的時間間隔,每過一個時間間隔向master發送心跳包,當心跳失敗,該節點重新發起選主,當過半節點響應時則該節點當選主機,廣播狀態,然後以後繼續下一輪選主。

14中間件知道哪些,阿里的dubbo,rocketmq的事務消息,問了TCC回答說這個之前沒看明白。

說了mycat實現分表分庫,消息隊列kafka和rabbitmq等。

15平時看什麼書,怎麼學習的。還跟我說他們部門3個華科的,校友多多。

16Spring和Springmvc講一下。講了Spring的ioc和aop,Springmvc的基本架構,請求流程。

螞蟻金服中間件二號機

一面:

1 自我介紹

2 講一下ArrayList和linkedlist的區別,ArrayList的擴容方式,擴容時機。

3 hashmap的實現。

4 NIO瞭解麼,講一下和BIO的區別,AIO呢。阻塞,非阻塞,異步。具體。

5 你說了解分佈式服務,那麼你怎麼理解分佈式服務。

6 你說了解Tomcat的基本原理,瞭解的是哪一部分,基本架構,connector和container

7 你在項目中怎麼用到併發的

8 docker和虛擬機講一下。

9 有啥想問的

螞蟻金服中間件二面

1 項目

2 說一下Spring源碼把,它的架構,流程。

3 Spring的bean如果要在實例化過程中修改其某一個成員變量,應該怎麼做呢。不通過構造方法,並且AOP也並不能實現。

4 Tomcat的類加載器瞭解麼,回答不瞭解只瞭解Java的類加載器。

5 自定義類加載器怎麼實現,其中哪個方法走雙親委派模型,哪個不走,不走的話怎麼加載類(實現findclass方法,一般用defineclass加載外部類),如何才能不走雙親委派。(重寫loadclass方法)

6 布隆過濾器瞭解麼,講了ip地址過濾的布隆過濾器實現。

7 聽說你項目用過docker,講一下docker的實現原理,說了虛擬機一般要對內核進行虛擬化,docker則用cgroup和namespace分別進行硬件和命名空間的隔離。

8 項目中遇到的最大挑戰。

9 項目中學到最多的東西

10 有什麼想問

螞蟻財富事業部

一面:

1 億級ip地址過濾

2 排序算法和適用場景

3 數據庫的事務有什麼用

4 數據庫的悲觀鎖和樂觀鎖

5 數據的索引有什麼用,怎麼實現

6 聯合索引的匹配原則

7 數據庫萬級變成億級,怎麼處理。分庫分表,分片規則hash和取餘數。使用mycat中間件實現。

8 redis這種nosql和mysql有什麼區別,講了一遍redis

9 Spring瞭解不,用到了哪些設計模式,說了四個,單例,工廠,代理,觀察者,模板其實也算。

10 web請求的過程,講了瀏覽器到http服務器的過程,再講了mvc的請求處理過程。

11 你的職業規劃

12 沒了。

二面:

沒有二面,好像說是跳過了一輪,直接技術主管面。

三面:

1 項目中的多線程,爲什麼用chm,還有什麼可以避免併發問題。

2 平時在看什麼,寫什麼博客,我說分佈式,關注什麼內容,大後端,Hadoop生態。

3 dubbo瞭解麼

4 dubbo的基本架構,幾個組件說一下

5 服務生產者和消費者怎麼進行rpc調用

6 怎麼進行服務註冊發現 zk實現具體說說

7 dubbo的負載均衡怎麼做,講一下具體代碼實現。

8 dubbo的服務容錯怎麼做,怎麼知道服務器宕機了 zk的心跳機制維持服務器連接

9 好了我要問的差不多啦。

交叉面:

隔壁部門的技術主管,問了一道算法題。。就沒問別的了。。我也是很醉。。。

題目是鏈表的排序,扯了4、5種方案,轉成數組,直接排序,拆分再排序,順序連接等等。。然後我表示不能再優化了。他就說沒別的問題了。。。有點吃驚。

HR面:

1 興趣愛好

2 三年到五年的職業規劃

3 意向公司和城市

4 實習經歷和收穫

5 實習中最大的困難

6 爲什麼換公司,爲什麼拒絕菜鳥實習offer

7 你的缺點和優點

8 你覺得你比其他人優秀的地方說三個

9 爲什麼想來我們部門

10 巴拉巴拉

京東&美團研發面經


京東Java工程師

美團點評 後臺開發工程師

1

京東提前批Java開發

電話面試

本來想等面完再發個面經,等了半個月了沒等到。

一面:

0 自我介紹,講一下項目中的多線程實現

1 Java的線程池的參數,拒絕策略,阻塞隊列等實現和使用

2 fixethreadpool使用的是什麼阻塞隊列,如果使用arrayblockingqueue或者linkedblockingqueue會有什麼問題。

3 ArrayList和linkedlist有什麼區別,擴容呢

4 hashmap,hashtable,concurrenthashmap1.7和1.8選一個說一下。

5 jdk1.8針對hashmap使用紅黑樹優化目的是什麼,紅黑樹的結構說一下。

紅黑樹的特性:

(1)每個節點或者是黑色,或者是紅色。

(2)根節點是黑色。

(3)每個葉子節點(NIL)是黑色。 [注意:這裏葉子節點,是指爲空(NIL或NULL)的葉子節點!]

(4)如果一個節點是紅色的,則它的子節點必須是黑色的。

(5)從一個節點到該節點的子孫節點的所有路徑上包含相同數目的黑節點。

6 JVM瞭解麼,說一下內存結構,堆區的分代,垃圾回收以及所用算法。

7 爲什麼要劃分年輕代和老年代,方法區是否會垃圾回收,還問了gc時要掃描哪些位置,說了gc root,他問具體呢,虛擬機棧的局部變量,然後說其他忘了。

在Java虛擬機中判斷一個對象是否可以被回收,有一種做法叫可達性分析算法,也就是從GC Root到各個對象,如果GC Root到某個對象還有可達的引用鏈,那麼這個對象就還不能被回收,否則就等着被收割吧。

這裏既然提到了GC Root,那麼哪類對象可以作爲GC Root呢,這是一個在面試中經常被問到的問題。

《深入理解Java虛擬機》一書中是這麼說的,一下幾種對象可以作爲GC Root:

虛擬機棧中的引用對象

方法區中類靜態屬性引用的對象

方法區中常量引用對象

本地方法棧中JNI引用對象

8 MySQL瞭解麼,說一下建立索引要考量的點,說了索引篩選率,過濾使用的字段,以及explain查看是否使用了索引等。

1、表的主鍵、外鍵必須有索引;

2、數據量超過300的表應該有索引;

3、經常與其他表進行連接的表,在連接字段上應該建立索引;

4、經常出現在Where子句中的字段,特別是大表的字段,應該建立索引;

5、索引應該建在選擇性高的字段上;

6、索引應該建在小字段上,對於大的文本字段甚至超長字段,不要建索引;

7、頻繁進行數據操作的表,不要建立太多的索引;

9 MySQL的隔離級別有哪些,默認級別是什麼,他說是可重複讀。

10 爲什麼select方法默認可以不加鎖呢,明明可能會有併發衝突,我說根據隔離級別判斷是否加鎖,他說可重複讀級別下select是不加鎖的,爲什麼。

我說應該是用了樂觀鎖,也就是MVCC多版本併發控制,適用於讀多寫少,所以不加鎖。

11 Redis提供有哪些數據類型

二面:

1 講一下兩個項目,分別做了什麼,覺得跟自己做的項目有什麼不同,如何看待這種不同,應該如何改進。

2 平時怎麼學習,你的博客一般寫了什麼,覺得和高質量博客的差距在哪裏。

我說我原創的都是比較基礎的,進階一點的博客主要是整理別人的文章。

3 Java虛擬機瞭解麼,講一下內存分區和gc,如何排查堆內存的問題,說使用jmap轉儲dump文件分析或者使用jstat等工具檢測gc。

4 Java的線程池瞭解麼,看過它的源代碼麼,怎麼修改源碼可以實現線程狀態的監控呢。

visualvm工具

5 web框架了解什麼,講講SpringMVC的啓動過程,講了mvc上下文以及dispatcher初始化過程和請求流程。

6 設計模式瞭解麼,單例,工廠,分別出現在什麼場景。

Spring,servlet,Spring的工廠方法

7 MySQL的select1和select *有什麼區別,爲什麼加索引訪問比不加索引要快。

8 負載均衡的幾種算法,緩存的幾種淘汰策略。

9 計算機網絡瞭解麼,http的header有哪些字段,是否包含ip地址。

10 有什麼想問,能先來實習麼,不能。

我說了不能先實習,然後就沒有然後了,emmm,等了2周沒有動靜,估計涼涼。

美團一面

後臺開發工程師

電話面試

1 實習經歷

2 object類有哪些方法,hashcode,equals,clone,notify,wait。問我hashcode用在哪,說了hashmap

3 hashmap的結構,1.7和1.8有哪些區別,除了紅黑樹優化以外還有哪些改進,說了擴容時頭插法改尾插法。

4 開始問我頭插法和尾插法的區別,頭插法在多線程時會出現什麼問題,我說的是擴容時的死鏈,後來引導我說了併發插入的數據丟失問題。

5 concurrenthashmap的實現原理,1.7和1.8有什麼區別,分段鎖,synchronized和cas操作。

6 cas操作是怎麼實現的,爲什麼是原子性的。wait和notify方法用在哪裏,wait和sleep的區別,notify後面的代碼會不會運行。

7 synchronized和lock的區別在哪裏,使用方式上有什麼區別。lock的trylock方法做了什麼,我說了cas操作和加入阻塞隊列,以及公平鎖和非公平鎖的區別。

8 你的項目用到countdownlatch,爲什麼要用,有什麼問題,如何監控這個問題。

9 線程池用過哪些,線程池有哪些參數,然後問我幾個常用線程池的用法和實際場景問題。

10 cas操作是哪個包裏的,volatile變量用過麼,有什麼作用,原理是什麼。i++是不是原子操作,爲什麼。

11 ArrayList和linkedlist有什麼區別,如何遍歷,使用for循環遍歷linkedlist爲什麼不行,linkedlist能使用索引訪問麼,使用迭代器呢。

這裏我打錯了。linkedlist也可以使用for循環遍歷。因爲jdk提供了api。

12 JVM內存模型介紹一下,堆區怎麼分代,分代垃圾回收算法說一下,老年代使用標記清除有什麼問題。

13 說幾個垃圾回收器,cms回收器有哪幾個過程,停頓幾次,會不會產生內存碎片。老年代產生內存碎片會有什麼問題。問我有沒有做過JVM優化。

14 jvm場景問題, 標記清除多次後老年代產生內存碎片,引起full gc,接下來可能發生什麼問題。我說分配大對象可能引起full gc。

15 哪些情況會觸發full gc,full gc是否包括young gc和major gc,如果只包括這兩個,爲什麼要特地做full gc,我回答的是full gc還會回收方法區和堆外內存。

16 Java中有哪些引用,分別有什麼用。

17 Spring的ioc和aop說一下。

aop記錄日誌,什麼方法需要記錄日誌呢,增刪改查都要麼,我說前三個要把。他說那麼如果有多級調用的rpc查找操作是不是也要記錄日誌,我說那是的。

18 分佈式用過哪些技術,我說自己跑過一些demo,問我zookeeper有什麼用,然後問我dubbo裏的zookeeper是做什麼的,我說服務註冊中心。

19 服務註冊中心實現什麼功能,消費者的本地緩存如果失效了怎麼辦,我剛開始說多次失敗重新拉取,他說這樣不行吧,我就說讓生產者和註冊中心維持心跳,失效時刪除該節點並且更新消費者緩存即可。

20 MySQL用的挺多,問你一下,innodb的b+樹索引,主鍵索引,聚簇索引有什麼區別。

21 MySQL裏有哪些鎖,行鎖表鎖,樂觀鎖呢,我說了版本號和MVVC,開始問我MVVC。

22 事務的實際場景問題,兩個事務,一個查一個新增,問能否查到新增的,我問他隔離級別,他說RR。MySQL的RR避免幻讀,所以讀不到新增數據。

23 MySQL的死鎖怎麼產生的,舉了兩個例子。

24 三個事務,兩個加讀鎖,另一事務嘗試刪除,應該是不行的。

25 兩個事務,一個寫提交,另一個能不能讀到,可以讀到。

26 大概就是這些了。

美團貌似涼涼,這次確實答得不是很好。

今日頭條研發面經


今日頭條上海

後臺開發工程師

今日頭條

後端研發工程師

找牛客大佬要了白金碼,跳過死亡筆試,直接視頻面,從3點開始,斷斷續續到晚上8點結束。

每個面試官給我的感覺都是怎麼這麼高冷啊。

1一面

一面:

1 寫一個題,找一個無序數組的中位數

2 寫了個快排,然後讓我找到無序數組第k大的一個數,我說先排序再找,實際上可以用快排的partition函數。

3 快排的時間複雜度,最壞情況呢,最好情況呢,堆排序的時間複雜度呢,建堆的複雜度是多少,nlgn。

4 操作系統瞭解麼,Linux和windows

5 說說Linux的磁盤管理,一臉懵逼

6 Linux有哪些進程通信方式,五大件

7 Linux的共享內存如何實現,大概說了一下。

8 共享內存實現的具體步驟,我說沒用過

9 socket網絡編程,說一下TCP的三次握手和四次揮手,中間網絡不好,面試官都沒聽清楚,很尷尬

10 跳過網絡,問了項目的一些東西

11 問我如何把docker講的很清楚,我從物理機,虛擬機到容器具體實現稍微說了下。

12 問我cgroup在linux的具體實現,不會。

13 多線程用過哪些,chm和countdownlatch在實習用過

14 不得不吐槽下今天牛客的視頻網速,不知道啥原因卡的一比,明明下載網速很正常啊,牛客視頻每秒才20k。。瘋狂掉線搞得很蛋疼。

二面:

1 自我介紹

2 Java的集合類哪些是線程安全

3 分別說說這些集合類,hashmap怎麼實現的,扯了很多

4 MySQL索引的實現,innodb的索引,b+樹索引是怎麼實現的,爲什麼用b+樹做索引節點,一個節點存了多少數據,怎麼規定大小,與磁盤頁對應。

5 MySQL的事務隔離級別,分別解決什麼問題。

6 Redis瞭解麼,如果Redis有1億個key,使用keys命令是否會影響線上服務,我說會,因爲是單線程模型,可以部署多個節點。

7 問我知不知道有一條命令可以實現上面這個功能。不知道

8 Redis的持久化方式,aod和rdb,具體怎麼實現,追加日誌和備份文件,底層實現原理的話知道麼,不清楚。

9 Redis的list是怎麼實現的,我說用ziplist+quicklist實現的,ziplist壓縮空間,quicklist實現鏈表。

10 sortedset怎麼實現的,使用dict+skiplist實現的,問我skiplist的數據結構,大概說了下是個實現簡單的快速查詢結構。

11 瞭解什麼消息隊列,rmq和kafka,沒細問

12 寫題時間到。第一題:寫一個層序遍歷。

13 第二題:寫一個插入樹節點到一顆排序樹的插入方法,使用遞歸方式找到插入位置即可。

14 第三題:一個有向圖用鄰接矩陣表示,並且是有權圖,現在問怎麼判斷圖中有沒有環。

15 我說直接dfs走到原點即爲有環,剛開始寫的時候我又問了一嘴是不是隻要找到一個就行,面試官說是的,然後我說這樣應該用bfs,有一次訪問到原節點就是有環了。

16面試官問我不用遞歸能不能做這個題,其實我都還沒開始寫。然後我就說沒有思路,他提示我拓撲圖。我沒明白拓撲圖能帶來什麼好處。現在一想,好像當訪問過程中找不到下一個節點時就說明有環。做一個訪問標記應該就可以。

17 第四題:一個二叉樹,找到二叉樹中最長的一條路徑。

我先用求樹高的方式求出了根節點的左右子樹高度,加起來便是。

18 然後面試官提示需要考慮某個子樹深度特別大的情況,於是我用遍歷的方式刷新最大值,用上面那個方法遍歷完整個樹即可。

19 面試官說複雜度比較高,但是由於時間問題就說結束了。

三面:

三面的面試官真的高冷啊,不苟言笑就算了,我問他問他他都不愛搭理的,搞得我內心慌得一比,感覺涼涼。

1 介紹一下項目

2 你談到的併發技術,chm和countdownlatch怎麼使用的

3 爲什麼要這麼處理,使用線程池是不是也可以。我說也可以

4 操作系統的進程通信方式,殭屍進程和孤兒進程是什麼,如何避免殭屍進程,我說讓父進程顯示通知,那父進程怎麼知道子進程結束了,答不會。

5 計算機網絡TCP和UDP有什麼區別,爲什麼迅雷下載是基於UDP的,我說FTP是基於TCP,而迅雷是p2p不需要TCP那麼可靠的傳輸保證。

6 他說不對,我說是不是因爲要建立連接,開銷比較大,他說不對

7 我說p2p的發送節點很多,所以不是那麼需要各種傳輸保證,他說不對。

8 我說TCP會自動分包而TCP可以自己定義數據長度。。他還是說不對。

最後他說算了。我們問下一個吧。

9 操作系統的死鎖必要條件,如何避免死鎖。

10 寫一個LRU的緩存,需要完成超時淘汰和LRU淘汰。

我說用lhm行不行,他說用linkedlist和hashmap可以。

於是我就寫了put和get函數,進行了隊頭隊尾操作。

他說get複雜度會不會太高,我瞎掰了半天沒找到辦法,他說那就這樣吧,今天面試到這。

11 媽蛋,過期淘汰的處理我還沒寫呢,你就說結束了,感覺涼了啊,我說我要不要把剩下邏輯下完,他說不用,心涼了一大截~

12 然後HR×××姐讓我等結果了。溜了溜了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章