關於一段時間面試的總結(持續更新)

前言

  一直一來把面試當成是一個練習。
  但是覺得春招要是有機會還是想衝一把的。
  每次面試完之後,我也要去梳理下不足,補下沒有學會的知識,放那不管真是想捶死自己。

1、字節面試
  關於字節的面試:一面發揮不錯,五分鐘後二面,二面很僵硬,幾天後三面,三面題很少也都寫出來了,因爲二面的原因所以覺得無緣了。

大概是一週後,也就是昨天hr聯繫了我,讓我繼續面試,我以爲是hr面,膨脹了一天,結果第二天開幕雷擊。

竟然是字節四面技術面,題目實現shared_ptr,實現lru算法,這兩個我都接觸過,底層實現卻都不瞭解,後面可能還有題,但是這兩個寫的一塌糊塗然後直接叫停了。讓我心灰意冷,當面拒讓人很難受,同時也讓我意識到了自己的不足,或許是我太注重基礎了,沒有權衡好的自己應該努力的方向。

面題

一面題目(忘了好多):
操作系統相關知識:
進程通信方式(管道,套接字等)
網絡方面:

  • 描述下http協議:無連接的,基於tcp的,萬維網的主要協議,每次發送信息要是2RTT時間,因爲建立連接三次握手的時候第三次也帶上了發送的信息這樣增加效率。主要有1.0和1.1兩個版本,後者爲了增加效率默認緩存tcp連接,每次發送直接找到這個連接就可以了。在這個地方,http協議其實我用過幾次,搭建過xmlrpc服務器基於的就是http協議,所以可以說一些自己對於http協議的應用。
  • session和cookie的區別:當時沒答上來,session和cookie的存儲位置是不同的,服務器維護session,cookie存儲在瀏覽器中的cookie特殊文件中,每個cookie都有一個鍵值,當打開存有cookie對應的網頁的時候,你可以在http請求頭部加上cookid這樣服務器識別身份,實現密碼記錄登錄等功能。相比來說,session更加安全,因爲它所處的位置,如果客戶端cookid不安全。另外可以說一些cookie欺騙(不懂原理,只知道不安全)。

二面題目(面試官人挺不錯的):

  • 數據結構:
    二叉樹:給你中序和先序,你能不能求出前序,這個是一個經典題目,如果要實現得構思一下,手動可以模擬下。原理就是,先序的第一個肯定是該樹的第一個,然後在中序裏面找,它左邊的都在左邊,右邊的都在右子樹。
    後序和中序,你倒着思路推。又問先序和前序爲什麼不行,我舉了個成鏈的例子。
    紅黑樹的結構特點:二叉平衡搜索樹,防止不平衡搜索樹退化成o(n)。
    用紅色黑色節點的概念去實現平衡。
    規則1、根節點必須是黑色。
    規則2、任意從根到葉子的路徑不包含連續的紅色節點。
    規則3、任意從根到葉子的路徑的黑色節點總數相同。
    之前我一直理解錯了,把AVL樹和紅黑樹混淆了,AVL是自平衡二叉查找樹,葉子節點高度差<=1,紅黑樹是非嚴格平衡的,主要是爲了減少旋轉的次數,紅黑樹隨機性能高,所以用的越來越廣泛,set是紅黑樹實現的,map也是。

  • 關於Linux操作系統:
    1、命令查看cpu核數(現在知道了,cpu和內存等一些動態信息都存儲在/proc文件夾下,cpuinfo等)。那個是內存文件,僞文件系統,存儲在內存中,實時監控硬件信息,也保存了每個進程的信息。我們可以直接打開查看,也可以cat file|grep str。
    還有查看內存狀況,top/htop,free等等。

三面:

1、實現快排和二分,寫的挺快的,二分調了一會。快排就是拿着第一個數,讓左邊都比他小,右邊都比他大,遞歸下去。
2、描述Linux文件系統:這點我不知道說什麼具體的,然後就說了我瞭解的。Linux文件系統,磁盤中存儲了一些文件相關信息,除此之外主要就是目錄塊和數據塊,數據塊存儲的文件包含的具體數據,目錄塊的每一個文件項重新指向i-node節點,文件名也存儲在目錄塊中,文件本身數據塊中是不存儲的。i-node節點比較重要,被目錄塊指向,由指向目錄塊和文件塊。當我們開啓一個進程,進程中fd文件,裏面每一個都指向文件表項,文件表項再指向i-node節點。Linux還有僞文件系統,不真實存在在內存中,但是應用了文件系統提供的各種功能,比如proc文件。
3、接下來這是個操作系統考試題,描述下進程讀取文件的過程。這點我側重點很不明確,我一會進程切換,一會描述文件系統,有點凌亂。其實側重從操作系統和進程這個角度來答:
當讀取文件的時候,先建立一個文件描述符指向該文件的文件表項,設置好lseek指針,然後讀取的時候,進程切換到核心態,在內存中創建緩存,讀取內容到緩存中,讀取完畢後,切換到核心態,從緩存中拿到數據。

四面:
突然的技術面,沒有準備好,應該自信點的,前面問的不能說什麼都沒接觸過,我這麼能扯的人竟然有點語塞,也奠定了我涼涼的基礎。
1、實現shared_ptr(接下來我會再好好看看):
我以爲讓說四種智能指針的概念,後來讓我實現shared_ptr。
這個指針確實挺重要,最重要的是別忘了有個nlink計數器,不能急,實現完了再去說好了,不能緊張,切忌一會改一次。
注意點:每次拷貝構造,nlink=a.nlink+1,每次析構先–,到0了再刪除對象。
2、實現LRU算法
剛開始我用的map實現,後來我想打自己,之前我看過用雙端鏈表的實現,最後改成了雙端鏈表,毛病很多。
這個算法按說挺好實現,緊張了,後面還有讓我加鎖題目等等。

深信服一面:回答的不錯,可是被面試官咕了,湊弟弟,不去也罷。基礎方面問的挺廣的,都是些課上的知識。
印象比較深的兩個問題:
ac自動機實現(字典樹+fail指針,用途是求很多文本串在模式串出現的次數,口胡下先建樹,然後bfs建立fail指針,搜索的時候失配了就根據fail去跳,複雜度是o(n),簡述是模式串所有長度和,匹配是文本串長度)。
還有就是設計一個數據結構,屏蔽一些ip地址:用字典樹。

涼涼,共勉。

接下來的方向:我有點注重基礎了,接下來就是上層建築了,把stl先看完再說。

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