春招兩次騰訊面試都掛二面,分享下我失敗+傻傻的面試經歷

帥地發表於2019-05-04

這個春招估計也要介紹了吧,自己投的公司也不多吧,投簡歷的時候,如果你提前批和正常網申都投的話,可能會獲得兩次筆試/面試的機會,我投了兩次騰訊,不過,兩次都在二面掛了,特別是第二次二面,我真的決定自己太他媽傻了。作為一個新人,談談我面試過程中犯過的一些錯吧,或許對你也有點收穫。

提前批筆試

騰訊提前批的面試應該是一個月前就開始的,我第一個投的公司就是騰訊了,人生的第一次筆試和麵試也獻給了騰訊。先說下筆試吧,筆試是 5 道程式設計題,個人覺得,騰訊的筆試題比較簡單吧,也就是說,獲得騰訊的面試機會應該算是不難的吧,5 道我好像是做出了 3道 + 一道90%測試用例通過 + 一道也是百分之幾十來著的,忘了。

最後的結論就是,個人感覺騰訊筆試不怎麼難,投了之後獲得面試的機會應該非常大,我的簡歷背景是沒有任何亮點的,沒有啥比賽,沒拿過啥獎,非211/985,普普通通。這裡建議秋招有興趣的一定要投一下,萬一面試也過了呢,好像我聽說騰訊技術研發是 2輪技術 + 一輪HR面,萬一2輪技術面過了拿offer機會還是挺大。

當然,我聽說前端的 HR 面是綜合面,聽說比比前面的兩輪還難還難過。

提前批一面

一面是視訊面,人生第一次面試,可以說我是很緊張的,一面我完全就是個小白啥套路也不懂,面試官問啥我答啥,完全不會引導,面試完後我感覺自己是真的傻,主要是問了一下問題:

1、瀏覽器輸入一個地址回車之後都發生了啥?

這個可以說是非常高頻的面試題了,我覺得自己這方面還可以,壓抑自己的緊張,好好詳細秀一波,然而,由於我事先並沒有去準備過這個問題,而這個問題又涉及到很多步驟,所以我在邏輯上講非非常非常不好,卡住了好幾下,最後不管三七二十一,就說關鍵詞了:有DNS轉換啊,ip網路定址啊,三次揮手啊,可能還有NAT地址轉換啊,還有ARP啊。

可能平時看我文章的人會發現,我是喜歡把這些技術一點點推出來,有邏輯著連起來的,這樣說出來會特別舒服,不過我這次面試的時候,連不起來的,歸根到底就是,沒有準備,頭腦覺得自己都懂,但是不意味著講的出來,所以我在這裡是建議各位,對於那些高頻的面試題,自己最後嘗試著口頭去表述一下,或者文字書寫一下,要是你來回答,你會怎麼說?

2、TCP 和 UTP 有什麼區別?

我在回答這道題的時候,也是非常簡單著回答他們的區別,例如一個面向連線一個非面向連線,一個可靠一個非可靠,非常簡單就答完的。

不過這道題是一個高頻題目,按上面的那個回答,就算回答出來,我覺得也是一點優勢都沒有。因為這些簡單的區別,99%的人都懂,我覺得我們應該再往深入回答,例如TCP有流量控制,擁塞控制,面向流以及基於這些區別,他們的使用場景等等。

不過我並沒有回答,不是我不知道,而是我想假裝不說,等著他來問,因為我聽說面試官都會一直往深問到你不會為止,然而現實是他並沒有問,換話題了。感覺自己錯過了一些表現的機會。

這裡我想說的就是:如果你知道,你可以多說一點,千萬別像我這麼傻,等著別人來問。

3、寫個快速排序

和演算法有關的,我覺得自己還好,寫的雖然不是特別快,但感覺自己寫的還好,無論是從程式碼的排版(因為這個一般都是在筆記本寫的,不可能給你IDE),以及程式碼的簡便程度,我覺得都不錯,這裡我想說的就是,自己平時寫程式碼的時候,一定要注意排版,別老是依靠IDE給你一鍵排版。

雖然我已經寫出來了,不過他之後讓我說下快速排序的步驟,我老實說了,不過我覺得,這些題都太簡單,如果面試官的很基礎,你也答的很基礎,我覺得沒啥優勢,對於快速排序,我本來想補充的,例如對中軸的選擇問題,與其他排序演算法的一些比較,應用場景等,不過,我是想著等他來問我......

按照我這樣寫文章的話,估計得上萬字,我下面簡便說下就行了。如果你們感興趣我這麼囉嗦的話,下次我再來吐槽說說我回答的不夠好的地方。

4、一條SQL執行的很慢的原因?(之前寫過文章,建議看看)

5、MySQL有哪些儲存引擎以及他們之間的區別(我其他引擎忘了名字叫啥)

6、如何檢視SQL語句的執行狀態,知道這條命令嗎?(我當時MySQL其實幾乎沒學,很多都不知道)

7、qq用的是tcp還是udp(兩種都有涉及)

8、說說jvm記憶體模型(其實並沒有JVM記憶體模型,只有Java記憶體模型以及JVM記憶體結構,你要問清楚是哪個再答)

9、JVM記憶體結構中有棧堆等,為啥要用棧這種資料結構?(主要是操作簡便,快速)

10、說說垃圾回收?(老年代,新生代,永生代的區別等,各自使用的回收演算法,新生代又分eden和survivor區等)

11、說說aop和ioc

12、大致看過哪些書?有逛技術論壇的習慣嗎?說幾個你常見的技術部落格平臺?有去逛過國外的技術部落格嗎?看的懂文件嗎?

總體上一面比較簡單,面試官沒有深入問,不過問的很廣,這裡問一些,那裡問一下。感覺自己答的還好,也順利過了。第一次面試收穫還是挺大。

1、對於懂的一定要多說,可以延伸,只要面試官不打斷你的回答。

2、對於高頻面試題,一定要自己模擬說一下,而且這些題一般不難,一定要多延伸,不然沒啥優勢。

3、感覺以後面試不那麼緊張了,也就這麼回事。

提前提二面

幾天後收到複試通知,二面是電話面,二面作業系統和Linux問的有點多,我二面感覺自己就掛在Linux上,我Linux不大懂,被問了好幾個個基礎的問題都不懂,自己也是醉了,感覺自己應該和麵試官說一下我Linux還沒學?。作業系統很多細節也忘了,說說二面的面試題吧。

1、說下四次揮手,什麼時候會出現time_wait狀態?(我扯了一下,面試結束後,發現自己弄錯了,真想給自己一巴掌,主要是,其實我對三次握手和四次揮手沒去準備過,雖然看過挺多文章,但是具體的沒記住,涼涼)

2、紅黑樹知道嗎?說說,為啥有了平衡樹還需要紅黑樹?(平衡樹太嚴格,插入很容易打破平衡,經常需要調整,而紅黑樹是一種折中方案......)

3、紅黑樹是如何保證查詢效率不會太低下的?(我後面再寫一篇關於紅黑樹,B+樹,平衡樹這些的文章吧,現在先給出這些遇到過的面試題)

4、紅黑樹在調整的時候,不是會用到左旋右旋嗎?說說會不會出現無限左旋右旋的情況,如果不會,那最多旋轉幾次?

5、為什麼索引能加快查詢效率?

6、說說B+樹是怎麼分裂、合併的,知道具體步驟邏輯嗎?

7、你專案用到redis,知道跳躍表嗎?說說他是怎麼實現的,查詢時間複雜度?

資料結構這部分我覺得自己答的還行,幾乎都答出來的,不過下面的Linux和作業系統有點慘,怪自己沒準備,不過面試就是一個查漏補缺的過程吧。

8、Linux的proc目錄有啥用?(忘了,,,,)

9、怎麼檢視埠的狀態?(有條啥命令來著的,忘了)

10、怎麼檢視某個程式的狀態?(也忘了,呵呵,,,,,)

我簡歷上是寫著熟悉Linux常用命令,然而一個也沒答出來,尷尬啊,其實我會用的是那些 ls, cp, mkdir, tar等常用命令,對於執行緒、網路相關的都不會,感覺危險了,這麼基礎的問題都不會。

11、說說什麼是程式,程式包括哪些資料?程式切換的過程是怎麼樣的?

12、如果想要讓多個執行緒執行到某個點,都達到之後再繼續執行,可以用java的那些類來實現?(CountDownLatch和CyclicBarrier這兩個)

13、什麼是反射?反射有啥用?

14、說說垃圾回收,jvm是如何知道這個物件可以回收的?計數法有啥問題?如果我們想要指定某種垃圾回收演算法,該怎麼設定?

15說說aop(這個問的刁難了,我該說的都說),他說,那我也可以通過自己配置檔案來實現這種切面啊,為啥就要用AOP呢?(他問的問題就相當於,我用servlet也能使用實現一個網站啊,為啥要用spring這些框架呢?我當時應該要吹一波spring中AOP帶來的好處的,不過我沒說,感覺自己應該吹一下的)

15、接著是問了我那個高併發秒殺系統的專案,說了裡面的執行緒安全問題,然後我這個專案早忘光了,自己也沒準備,程式碼我不是自己敲的,直接看視訊的。自己沒做過什麼專案,就充當了,結果面試官問了一下執行緒的問題,我一直沒get到點,搞的自己也好懵,最後才知道他說的是啥,不過專案這塊答的也不好,主要自己也沒動手弄過,又是去年快速看視訊學的。

總體上,二面除了Linux答的非常非常不好,還有四次揮手說錯了,執行緒包括哪些資料說的也不全之外,以及專案感覺有點被認識不是我做的之後,其它感覺還好。不過。一個多星期後,結果出來,掛了。

不過我也不意外,知道自己有很多需要補的,面試有時運氣不好,可能連續問到好幾個不好的,估計就得掛了,不過這沒方法,最好的做法就是面試過後把自己不足的補上來。

常規網申一面

常規網申的筆試題中是20道選擇題+3道程式設計題,過幾天就收到面試通知了,有了前面兩次之後的面試經驗之後,也瞭解到騰訊是特別喜歡問作業系統+計算機網路+Linux的,於是我把這方面的高頻面試題都好好準備了,Linux 程式等相關都準備了,作業系統也大致準備了,下面說說這次涉及到的面試題。

1、說說網路建立連線之後是怎麼關閉的(其實就是四次揮手,我詳細說了,之前寫過文章)。如果出現大量time_wait 狀態的連線是怎麼回事?(我說了第四次揮手出現了丟包、超時等),假如不會出現丟包、超時等,網路非常流暢呢?(說了短連線導致的)那怎麼解決?(我說了限制最大連線,用佇列來緩衝),問我還有其他方法嗎?(我不大知道,好像面試官不大滿意我的回答。不過最好的做法應該是修改 time_wait 等待的最大之間,把時間改小一點)。

2、說說IO阻塞與非阻塞是什麼?各自有啥好處?知道多路複用嗎?瞭解過 select 嗎?說說他與 epoll 的區別。

我知道的也不是很深入,就常規答法,他問啥就答啥。這裡我要說一下,我覺得很多人可能混淆了阻塞、非阻塞與非同步、同步的概念。我實話,我覺得自己已經理解了,結果我看了好幾篇文章,發現自己反而不懂了,懵了,總覺得缺了點什麼影響我對阻塞非阻塞與非同步同步的理解,說實話,我看了大概有10篇文章,有80%我覺得都沒有說清楚阻塞非阻塞與非同步同步的本質區別。這會影響你對同步阻塞,同步非阻塞,非同步阻塞,非同步非阻塞的理解。有時間我再來寫一篇文章說說他們的區別,相信看了你就一定懂了。

3、知道樂觀鎖嗎?說說他們適合應用的情景。

4、說說自適應鎖,與其他鎖相比,他的優缺點,什麼情況下你覺得可以用自適應鎖?(之前寫過幾種鎖的文章,不懂的建議看)

5、你平時開發是在Linux上開發的嗎?(我靠,Linux上開發??那不是得對Linux上很熟悉?我雖然準備了Linux面試相關,可是這Linux上開發壓根沒體驗過啊,我馬上慫了,馬上說沒有,並且還加了我對Linux不熟,這門課剛學沒幾天。之後他就不問了Linux了,然後接下來我就扎心了)

6、那你平時就是在windows下開發了,那如果你平時專案要上線,這個專案的效能突然很差,你是怎麼定位問題的?(我靠,在下從來沒有上線過專案,連用心寫過專案都沒有,這下完,我遲疑了一會),他補充說,例如你可以通過觀察你電腦的cup, 記憶體,IO 的指標來進行行定位,可以分析下嗎?(可以開啟工作管理員來檢視cup等的執行情況,然後.....其實我沒有上線過專案,也沒有這樣的經歷),他說沒事,假如遇到這種情況你會怎麼分析?(我下面說一下我是怎麼扯的)

心想,扎心了,其實我不大知道究竟要分析啥,好吧不管三七二十一了,然後我開始扯了:

1、如果cup一直很高而其他地方記憶體,IO很低的話,那很有可能專案裡面有某些東西在瘋狂執行,但卻沒啥用,很有可能就是自己設計了樂觀鎖,但競爭的執行緒太多,導致一直做無用功。

2、如果磁碟操作很高,但cup很低,這是意味著專案一直在做IO操作,很有可能是SQL語句寫的不好,導致掃描了大量的磁碟,然後我就針對SQL語句的問題開始扯了,例如沒有用上索引啊,選錯索引啊,扯了一大堆,哈哈。(心想,舒服,剛好寫過sql語句執行的很慢的原因有哪些)。

7、說說程式與執行緒的區別?程式有哪些通訊方式,(我說了共享記憶體,訊息佇列,管道,訊號量,套接字,訊號驅動),他問還有嗎?(我說其他的不知道了),描述下這些具體的通訊方式(我有些具體的給忘了,大致描述了幾個)

8、說說快速排序的思想,刪除單連結串列倒數第二個節點,你會怎麼做?

9、瞭解MySQL事務嗎?說說ACID是啥(我靠,我對事務的隔離理解還強,研究過隔離是如何實現的,然而,,,我突然短路,ACID的D忘了啥,就像你高中那會對一首古詩背的很熟,然後突然就忘了哪句,心裡有點扎心),那你具體說說ACID是啥(原子性是,,,隔離性是,,,,一致性?????,我靠,我覺得自己對這四大特性很理解,感覺看名字就知道是啥了,然後說到一致性的時候,我自己的心中產生了疑問,感覺自己並沒有真正意義上理解了一致性,然後我沒說出來)

心中那個苦,一致性都沒說出來,其實我是可以說出來的,但是我總覺得缺了點什麼,就像你看了幾篇文章覺得自己懂了,結果讓你在看幾篇文章,你感覺自己有點醒悟了,然後突然發現自己並沒有真正意義上的懂,我查了好多篇文章,呵呵,千篇一律,都不能解答我的疑惑,說實話,別覺得自己懂了,其實你根本就沒有懂,最後是懵逼了好久,才覺得自己應該是懂了,有時間也要寫一篇事務的四大特性的文章。

說實話,網上的很多文章,真的是千篇一律,當你產生了疑惑,很難找到解答,因為你會發現,這幾篇說的都是一樣的,那個你感覺特別重要的疑惑都沒有說到。好吧,不吐槽了,等下要被大佬門懟我寫的文章了。

一面大致說了這麼多,有些忘了。比起提前批一面,我覺得自己在表述上好多了,也會扯了,這裡我想跟大家說的就是,問題就那些,一定要搞懂,延伸,要理解,該背的要背,例如程式有哪些通訊方式。如果要面試騰訊的時候,計算機網路、作業系統,Linux這些底層的,要學好,儘管你是面試 java 崗位的,可能他一個 Java 的問題都不問的。

想殺了自己的二面

二面我應該就是個傻逼吧,自己給自己挖坑了,最近這些題一直在刷題,複習基礎,對於資料結構,演算法題,Java,作業系統什麼的,自己也想看看有哪些不足,然後他一開始就叫我介紹專案。

1、說說你做的專案。

其實這期間我為了應付以後的面試弄過做過一個專案,不過還沒弄好。然後我之前不是說了自己有個很水的高併發秒殺系統專案嗎?我自己也沒啥專案經驗,然後我覺得高併發也是很牛逼的樣子,就打算用它了,簡歷上也寫了。不過這個專案我自己沒實操過,看視訊的,很短,幾個小時而已,用到了redis等,不過我已經準備了很多redis相關的知識了,怎麼優化的也準備好了。

現實是,呵呵,我被懟的體無完膚

優化之一就是通過減少事務持有鎖的時間來優化的,例如我們秒殺一個物品的話,如果減庫存和插入訂單兩個操作都成功的話,代表秒殺成功,這兩個操作會在一個事務裡完成。問題來了,是先減庫存呢?還是先插入訂單呢?

我說了先插入訂單在減庫存能夠減少事務鎖的持有時間,然後我就被面試官懟死了,如下:

面試官:你覺得你這個優化有用嗎?

我:有啊,可以減少鎖的持有時間(確實可以減少鎖的持有時間)

面試官:那你說說提高了多少併發量?

我:這個,,沒測試過(我是看視訊的,自己也沒有這樣的測試工具,有點尷尬,連測試過都沒有??)

面試官:那你說說這條事務執行需要多少時間

我:我,,好像忘了具體資料,大概是0.00幾秒吧。

面試官:你自己都說0.00幾秒了,這麼短時間,你覺得你的這個優化,用處大嗎?有資料來支撐下嗎?

我:,,,,,(真的自己給自己挖坑了,早知道隨便介紹下就好了,不主動說自己的優化了過程了,畢竟自己沒實操過)

面試官:你這個系統能扛多少併發量?

我:...沒測試過(我覺得,面試官覺得這個專案是假的了,可能覺得我是從網上隨便找的,然後來應付面試的,我覺得自己涼了,欺騙可是非常嚴重的)。

面試官:那你說說,完成一條請求用了多少時間(測試最大的併發量可能需要相應的工具,他可能為了再次確認我的真偽,故意是一條請求的?這樣就不需要工具了)

我:.....沒測試過(好吧,我的心已涼)

面試官:好吧,就說到這裡,你用過lowJS嗎?

我:啊??lowJS,什麼鬼東西?而且他的聲音有點小,我再次確認,是指lowJS嗎?他說是,我說沒聽說過(後來才知道,他說的是Node.js,,,,,,麻痺,,,)。

面試官:你還有啥問題要問的?

呵呵,,,已經涼了,這次面試真的是自己給自己挖坑,面試官肯定是知道我專案是偽造的,這是非常嚴重的事情,然後這個面試大概是持續了10幾分鐘,其他的面試官的也沒問了。想找給人吐槽下自己。

然後,明天就查到掛的資訊了,之前二面是一個星期多才查到掛了,這次是十二個小時之後就收到掛了,我也知道10000%掛的了。此刻需要一波安慰!!

總結

總結就是一首涼涼送給自己,還有就是有一些建議,當然,這也是我自己給自己的建義。

1、高頻面試題,別停留於表面,大家都懂,說的很表面沒啥優勢。

2、別以為自己懂了,如果可以,最好自己嘗試描述一下,你可能會描述的很沒有邏輯。

3、好好準備一個專案吧,一定要自己腳踏實地做一下, 別像我,被懟的體無完膚。

4、框架真的問的很少,好好打基礎,資料結構與演算法,計算機網路,作業系統,Linux 程式等相關的命令。

5、面試的第一關是筆試,一般都是程式設計題,建議要刷刷題,不然面試的機會都沒有。

先寫到這裡了,後面會寫一下面試相關的題,建議最後看,雖然你看過相關文章了,但看我的,可能你也能夠有新的收穫!還有就是祝各位大佬面試順序,不好的運氣我來幫你們包攬就行了(留下了委屈的眼淚)

最後推薦下我的公眾號:苦逼的碼農,主要分享一下技術文章、面試題、演算法題,各種工具、視訊資源等,裡面已有100多篇原創文章,期待各路英雄來交流。(歡迎掃右上角的二維碼關注哦)

相關文章