北京2020-後端程式設計師面試總結

2020-08-08 14:24:16

一、概述

7月20號決定從杭州辭職到北京找工作,在這一段時間裏,我大概面試了20家左右的公司,其中有線下面 下麪試也有線上的視訊面試。

有百度,新浪微博之類的公司,也有好未來,作業幫這樣的公司,以及一些不太出名的公司。最後也拿到了兩個offer,也還有一些等待複試的。這次想總結一下面 下麪試的簡單問題,以及自己的未來學習規劃。

 

二、面試的問題

1.數據結構

數據結構這塊,可能由於我是web開發,基本上問的不會特別深,也就限制在基本排序和查詢,或者鏈表的基本操作。時間複雜度,空間複雜度,各種排序的應用場景。鏈表反轉,鏈表是否有環,只有一個公司讓寫二元樹的反轉。所以,我的總結是數據結構不必花大量時間在刷題上,只有對常用常見的熟悉就好,應該把更多時間和精力放在其他部分。

2.操作系統

基本上現在都是使用Linux系統。會問一些Linux你常用的命令,還有日誌查詢。由於現在的網站,併發都是很大的概念。所以都會問一些進程和執行緒的概念。還有多路複用,select,poll,epoll區別。還有nginx apche的常用設定。進程和進程之間怎麼通訊。再難一點會問到死鎖的概念。也不需要花大量時間在這上面準備。

3.網路

網路基本上會問你知道哪些協定。TCP和UDP區別,TCP爲什麼是可靠的,三次握手四次握手是解決什麼問題。TCP和UDP分別用在哪些地方。這個不會問太深。但是由於web開發基本上玩的就是HTTP,所以對HTTP要求會比較高一點。比如HTTP概念,爲什麼無狀態,怎麼解決。HTTP常見錯誤碼。HTTP長連線是解決什麼問題? 會一直連線嗎?什麼時候會斷開之類的。還有HTTP header頭如何獲取。然後就是HTTPS,HTTPS一整套流程是什麼?採用了什麼加密演算法,就需要把HTTPS一整套流程搞透。也不會要求理解太深。

 

4.mysql

 

數據庫是很重要的,基本上會要求對常用命令的熟練應用。還要對一條SQL執行機制 機製比較詳細的瞭解。然後最少要瞭解mysql儲存引擎,對innodb有較好的理解。瞭解事務是什麼?解決什麼問題?各個隔離級別不同SQL執行的結果。還有mysql索引的底層數據結構,索引到底是怎麼執行的?普通索引是怎麼使用主索引的。可以花較大時間在數據庫上。

 

5.redis

redis基本上在web開發併發場景下,是第一選擇的中介軟體。需要理解redis解決了什麼問題,爲什麼使用redis。redis五種基本數據結構的應用場景以及底層C的具體實現。以及找一個比較恰當的例子說一下自己使用redis解決的某一個問題。比如用redis實現分佈式鎖之類的。也可以瞭解過期刪除策略,AOF和RDB持久化。redis哨兵機制 機製,redis主從複製產生的問題,如何設定解決。

個人覺得應該在redis放較大功夫。

6.PHP (其他語言可以參考)

這個熟練使用肯定是基本要求。還有就是PHP的基本數據型別的底層實現,包括陣列的具體實現,要深入瞭解。還有PHP記憶體的管理。還有就是nginx 和 fpm的通訊機制 機製,fpm的設定,fastcgi的優勢。PHP的瓶頸,可以採用什麼方式來解決,比如採用swoole或者換go來處理之類的。建議也不需要花大量時間在這上面。

三、面試官想要什麼樣的人,或者說公司想要什麼樣的人(個人理解)

 

1.小型公司

對於創業公司,我覺得需要的是一個能夠對一整套web開發流程很熟悉的人,不需要瞭解原理,但是要能夠快速開發一整套。包括從購買伺服器開始,到域名備案,https證書設定,對產品需求的深入理解,然後數據庫設計,程式碼開發等。

2.中型公司

我覺得這些公司需要一個程式設計師能夠對某一個領域,比如剛纔說的6塊的其中之一有深入的理解以及解決過專案中實際很難處理的問題,能夠遇到某方面問題時短時間找出問題並能夠解決。

3.大型公司或者巨頭

這些公司,我面試基本都失敗了,個人理解,如果想去這些公司,需要基礎紮實,比如計算機操作系統,計算機網路,數據結構,編譯原理這些大學的課程都掌握的比較好。然後在加上上面說的6個方面的 其中多個方面比較精通,比較有可能進入一家大的公司。

 

四、如何去學習

1.從平時的程式碼開始

在平時寫程式碼實現業務需求的時候,要以更嚴格的方式要求自己,儘量追求程式碼效率,而不只是程式碼效率。也可以對常用的一些功能進行自己的封裝。比如寫一些小的程式碼生成器,正則匹配類庫等。

2.看書

我覺得能夠出版書,應該要比網上的部落格更值得信賴,比較權威。例如redis可以看下《redis設計與實現》,Linux可以看鳥哥的私房菜等。結合書籍加上自己的思考,然後對自己比較深入理解的部分進行部落格的書寫。

3.寫部落格

寫部落格建議不要看了一兩頁書或者看了一篇部落格就去寫,而應該在真的對某一個部分內容特別理解了,再去寫部落格,這樣也方便自己後期學習,也不會誤導他人。

4.多和領導和同學朋友進行交流

三人行,必有我師。不要覺得只有  C語言之父或者某些業內頂級人員纔是自己值得交流,值得學習的物件。其實最值得學習的可能是身邊的人。如果你能夠學習到領導的東西,學習到身邊人大家的長處,自己也會更上一層樓。

5.做實驗

大部分我們對一個東西的理解不深刻,都是因爲在工作中沒有碰到那樣的問題,或者碰到了也只是google一下,直接改掉,而沒有深入思考。應該在以後遇到問題時進行深入思考,爲什麼會這樣。如果有些東西真的工作不太能接觸到,應該通過模式的方式去進行,例如各種分佈式等。

五、總結

這篇部落格主要是寫給自己的,如果有人恰巧看到了,也希望我們一起能夠進步。何凱文說人和人的差距就是以注意力的長短而拉開的。的確是這樣,我們很難認真的做一件事情,看電影也要看彈幕,看書看半小時就想喝杯水吃點水果。我們應該讓自己的注意力更長,在看書的時候,認真看書,在戀愛的時候,認真戀愛,在工作的時候,認真工作。未來,我們一起加油。