記一次涼涼的小米前端面試
推廣一下個人網站:Bougie‘s Blog
畢業一年的跨專業萌新,在拉勾上投了武漢小米的簡歷,不出兩天,簡歷被HR姐姐標為“不合適”,心想自己這點履歷和經驗小米是看不上了。又過兩天,大概晚上八九點鐘,HR姐姐突然打電話說邀請面試。也是有點奇怪。
從家到小米有兩個小時車程,做公交車二層晃得竟然有點想吐了。心想做程序員一年,沒學到啥高深的東西身體卻不知不覺間變得這麽差了;同時對此次面試也沒抱太大期望,因為自身實力和小米的招聘要求還是差了一個檔次。進入小米正門,左手邊是小米信息部,右手邊是wps。想起來前不久在一個招聘群裏面認識的wps的孝感老鄉就在隔壁上班,也是一種緣分哈哈。
筆試
面試前要先做一份筆試題,題目大概是:
爬蟲引擎是怎樣抓取頁面的
- 瀏覽器渲染頁面的過程
- 用戶輸入URL地址
- 瀏覽器解析URL解析出主機名
- 瀏覽器將主機名轉換成服務器ip地址(瀏覽器先查找本地DNS緩存列表 沒有的話 再向瀏覽器默認的DNS服務器發送查詢請求 同時緩存)
- 瀏覽器將端口號從URL中解析出來
- 瀏覽器建立一條與目標Web服務器的TCP連接(三次握手)
- 瀏覽器向服務器發送一條HTTP請求報文
- 服務器向瀏覽器返回一條HTTP響應報文
- 關閉連接 瀏覽器解析文檔
網上找的標準答案,自己答得也是這麽個意思,但是沒這詳細。
異步編程的四種方法
看到這題瞬間感覺阮老師簡直就是中國前端界的教父級人物啊,面試官的理想答案應該是阮老師這篇文章:Javascript異步編程的4種方法。自己特地看過,也總結在我的面試題總結裏面了:前端面試偏門題總結。但是記性太差還是答偏了,心裏恨啊。解釋同步\異步、阻塞\非阻塞、並行\並發之間的區別
這裏補充一下並行和並發:並行是指運算中的兩件或更多件事情在同一時刻發生。實事求是地說,這種情況只會在系統CPU擁有兩個獨立核心時發生,這樣在任何時刻才會有不同的電脈沖信號發出。並發意味著至少兩件事務在同一時間段發生。但註意,這裏的事務是(高級的)任務,而不是(低級的)操作。所以,請分清並發和並行。js實現數值千分位
頭條筆試碰到過了:number.toLocaleString()
多語言網站建設應註意哪些事項
一開始以為多語言是python
、java
、php
啥的,後面面試官說是各個國家語言。React非父子、兄弟組件傳值
狀態管理:Redux、Mobx等等"123456789876543212345678987654321..."的第n位是什麽
javascript function getNum(n) { let num = 1, flag = true for(let i = 0; i <= n; i++) { if(num === 1) flag = true if(num === 9) flag = false flag ? num++ : num-- } return num }
時間有點緊不小心把i <= n
寫成i < n
了,尷尬,怪自己不細心吧。
時限是20分鐘,還有兩三題記不清了。
面試
面試官很親切,說話很流暢並且肯定,感覺是個知識體系非常齊全的大牛。以下題目順序並不是面試官問的順序:
瀏覽器打開一個頁面前端緩存了哪些東西?
我:後端通過設置響應頭Cache Control
設置資源過期時間,用於緩存一些靜態資源
面試官:還有呢
我:DNS緩存
面試官:後端緩存了什麽
我:緩存了session
面試官:還有呢
我:...答不上來了說一下vue的生命周期
一年的Vue不是白用的,順利從beforeCreate
到destroyed
過了一遍你的博客用的是Koa,Express用過嗎?
我:用過,我的個人博客本來用的是Express,後面改成Koa了
面試官:為什麽要改?Express不好用嗎?
我:Koa的路由用async和await處理,不會陷入回調地獄
面試官:Express的路由也可以封裝成async\await,自己試過沒有?
我:沒有。。。你的博客用的什麽服務器?
我:用的Node服務器,pm2做進程守護的
面試官:代碼直接放上去運行的還是編譯後運行的
我:(一臉懵比,腳本語言還能編譯???)直接運行的
面試官:服務器是什麽系統的?
我:windows sever...(感覺面試官笑了)後來查了一下,segmentFault的大佬們也說Node JS不用編譯:運行在服務端的Node.js代碼需要編譯嗎?,好想追問一下面試官到底怎麽編譯啊。
有沒有自己實現過Promise?
看了不少文章,自己也寫過了,但問到細節還是答爛了。有沒有寫過Webpack插件?
我:沒有...new 一個對象後發生了什麽?
寫過響應式網站嗎?
我的個人博客就是響應式的,主要說了媒體查詢和rem控制字體大小。說一下原型和原型鏈
有沒有自己寫過比較復雜的正則?
有沒有封裝過axios?
前後分離的系統,一個請求出錯了,如何中斷其它請求?
如何在axios中添加登陸驗證?
rollup了解過沒?
為什麽rollup打包贅余代碼比較少?
有沒有結合原生封裝過RN組件?
為什麽用高德地圖不用百度地圖?
怎樣在Android Studio中對React Native的js代碼進行斷點調試?
......
還有n多問題記不太清了...
然後面試官問了一些其他的東西,對小米有什麽看法?995上班、加班沒有加班費能不能接收等等。心想小米在雷總的帶領下還真是拼啊。
面試聊了一個小時,很多問題答爛了,今年應該是和小米無緣了。也明顯看到了自身實力的不足。很感謝面試官給我這次面試機會。
記一次涼涼的小米前端面試