面試題分享---面試八股文

棋佈發表於2020-12-09

1、linux程式的記憶體模型

上來就是這麼一道題,我直接懵逼了。只能隨口一說:程式碼區、資料區、堆區、棧區、未使用區。再問就是直接回答不知道。

2、對10億資料進行去重

hash分割,點陣圖,稀疏陣列。實現方式各有優劣。

3、redis的ZSet底層資料結構實現原理,跳躍表如何確定插入資料的層級

這個問題,我開始並不知道。但是,我猜死了也不知道,是隨機生成的,有個權值機率來決定的,數值越大生成的機率越低。

4、HTTP是如何實現協議的?頭和體怎麼區分?

我說的是key-value區分的,頭部和body位置不一樣。不知道具體想問什麼。

5、TCP進行連線的時候,linux中需要實現多少種方法?關聯的方法有哪些?

只能說,客戶端建立socket、建立連線connect、服務端建立socket、繫結bind、 監聽listen、接收資訊accept、傳送send和接收recv,最後關閉close。

遺憾的是,並不滿意,我也不知道面試官想要什麼。

6、談談微服務

沒做過,簡歷上寫的也很清楚,經過上一次的騰訊面試,我還特意標註了,沒有使用過微服務。結果還是問,說明,這面試官是來鬧著玩的。

7、服務治理中做了些什麼?

這是我特別想吐槽的地方,我只能說我知道一點概念,服務發現和熔斷,以及服務註冊和雪崩處理等等都是屬於這個的範疇。然後就打算了我,直接問下一個。

8、HTTP的狀態有哪些分別代表什麼?302 403 404 502

這個問題是唯一值得滿心歡喜的,估計是看前面都不滿意,問個low點的問題試探一下。

9、建立一個大記憶體,是堆還是棧?

堆。棧的預設大小隻有2M,儲存一些函式變數,用完就釋放,GC的操作主要是堆裡面進行。接著問了為什麼這麼設計,我表示我從沒想過為什麼。就連為什麼取名為堆疊,我也沒想過。

不知道大家注意到沒有,全程沒有問Go的任何一個問題。我表示,後端的開發都是不問語言的嗎?我怕不是面了個假的面試。

這個面試官就讓我有點不明覺厲了,開始以為很牛逼,等你自己去尋找答案的時候,才發現,原來面試官連自己問的問題都不知道,說的答案也是錯的。也就可以理解,為什麼面試官不當場說答案,非要讓你自己回去搜尋了。

1、連結串列有環的判斷,寫虛擬碼

既然是電話面試,那就不是寫虛擬碼,是說虛擬碼了。但是,連結串列不能用for迴圈嗎?我說for和while都可以迴圈處理連結串列,我一度以為我傻逼了。

2、GPM排程模型

這個除了背誦,沒有別的法子,我說的他的一直說嗯嗯的,標識認同。說明,基本概念理論,大家一個水平線。

3、瀏覽器的前進後退使用的資料結構

這個,我開始有點懵逼,我說任何資料結構夠可以實現,就是麻煩和簡單的區別。然後說了棧,發現行不通,他提示說可以用兩個棧。嗯,很認同這方法。

4、TCP的三次握手,第一次握手的ack包含哪些資訊,什麼時候會有Time_Wait

這個問題,讓我徹底顛覆這個面試官了。開始我並不知道ack,包含什麼,我只知道需要消費掉一個序列號。他說裡面包含了ip地址,我不明覺厲了。首先建立連線的第一次握手的,根本不是ACK,而是SYN。其次,ACK是服務端返回給客戶端的確認號,根本沒有什麼IP地址或者其他的什麼資訊。IP只是在建立連線的開始使用,雖然全程都在,但是握手的時候我沒找到說需要IP,更沒找到ACK還會含有IP資訊。Time_Wait,只有在主動釋放連線的時候才會有。

5、棧儲存的是什麼,堆呢?地址生長方向是什麼?為什麼這麼設計?

棧的空間是由編譯器進行開闢和釋放,主要存放區域性變數和函式引數。棧的地址方向,我不知道,我是推理的,我之前做過微控制器,引腳的都是高位往低位處理。堆剛好和棧相反。至於為什麼這麼設計,這是由於大小端來決定的。開始我不知道,後面看資料才知道的。

6、Go的棧大小是多少?最大值是多少?

這個我是真沒注意過,一直以為是2M,結果發現,不是網上說的32M,而是一開始的2K,後面會進行棧分裂,擴充套件棧的大小,換句話說,棧的大小是會變化的,最新版本的棧大小是從2K-1G變化的。

7、佇列實現最優路徑

不知道問什麼,原來是迷宮地圖,唉。

8、兩個連結串列像拉鍊一樣相交,獲取這些交點

真不知道,到現在還沒搜到答案。一個交點的可以知道,拉鍊一樣的多個交點的,還真不知道。

9、後順遍歷樹結構,如何釋放樹結構的記憶體資訊

這個是我覺得唯一有水平的面試題,前面的後順遍歷已經鋪墊好了,後面釋放樹結構記憶體也只能按照後順遍歷的方式來釋放。

10、Linux的網路擁堵如何排查,過程花多長時間

這個主要是想要花的時間。我表示,時間無法確定,我們也接觸不到伺服器,無法確定,只能協助。

11、TCP連線,服務端發現丟包之後是怎麼處理的?

我說重傳。然後問了是立即重傳還是做了其他什麼處理再重傳?經過上面的題,我很確定,這哥們肯定也不知道^_^

12、貪心演算法

我就不信有幾個人能寫出來的,如果不是專業搞演算法的。

13、佇列如何保證先進先出,棧呢?

陣列,索引,完全不知道怎麼回答,最後說我回答跑題了。。。我想說,我連出題意圖都沒搞明白。

14、linux許可權控制是如何區分的?

不知道,不同的區域還是?唉。

最後問還有什麼問題問他的。我就問了一個問題,你說的這些問題我要全部回答上來才行嗎?他說,演算法是加分項。然後我回顧了一下,嗯,他問的全是加分項。

這個面試官問題不多,是針對做過的專案問細節,從細節裡面知道你有沒參與,有沒有真正的知道專案的方方面面。然後就是問了幾個Go的考察點,很簡單,但是你不一定會的那種。知識點很簡單。這是我這四場面試之中最符合我們正常人的流程和問題。唯一在意你處理問題的能力,腦子是不是靈活的。

總結一下:面試能不電話面試就不電話面試,能見面交流就見面交流。畢竟,情急之下,我們還能揍一頓面試官。
針對面試的八股文,我們已經很習慣了。要進大廠,必須背誦那些看起來很高深,但是可能一輩子都用不上的知識點。我們需要知道棧地址為什麼從高到低的生長方向嗎?面試Go開發,全程沒有問Go的相關的。今日頭條甚至直接說,我們招聘的是Go崗位,但是不需要有go 的開發經驗。但是,我們為了找到一份看似高大上的工作,浪費了大量的時間去背書,忽略了我們業務本身的東西,不知道值不值得。這樣子的面試,寫簡歷的意義又在哪裡呢?還有那些非要帶紙質簡歷上門面試的公司,這得有多摳門?目前只有平安的這面試官是正常的,針對簡歷來提問,而不是看著天來問。都是打工的,何苦為難打工的。針對面試的八股文,我們該怎麼應對的?太多的知識點無從下手。

本作品採用《CC 協議》,轉載必須註明作者和本文連結
歡迎轉載分享提意見,一起code

相關文章