今年還不曾面試過,若是不是頭條的某個 HR 順手把個人簡歷從簡歷庫中撈起來的話。頭條是大小周,這就意味着我能夠週末去面試,不佔用工做時間也不用請假,對於這點我仍是很滿意的。前端
面試約到了週日早上十點,但過後我有點後悔,週日面試官極可能會晚點。面試一直持續到下午三點左右結束。node
頭條的效率確實很高,週日面試結束後,次日 hr 就通知了面試經過。react
原文連接linux
另外,我把本次面試也記錄在個人每日一問: shfshanyue/Daily-Question 中,歡迎討論與 starwebpack
本篇文章寫於一八年底,機遇巧合下放了出來,另外一七年面試與一九年面試見 2017面試記 與 2019面試記git
背景
到今年年末,我已經有了將近兩年半的經驗。而這兩年來的時間能夠一分爲二,第一段時間我在整前端,用的 react,第二段時間我在整後端,用的 node,咱們用 node 直接操做數據庫,而非做爲中間層。而因爲人事的過多調整,我在這時也作過一小段時間的 leader。作後端改BUG老是要調線上數據庫的,再加上我對運維的興趣,所以我擁有了線上數據庫以及k8s集羣的權限,並直接維護咱們項目組業務代碼的 k8s resource。(固然,後來改到 helm 維護)github
因爲 node 與前端千絲萬縷的聯繫,以及我在頭條的簡歷沒有更新,所以此次接收到的仍是前端面試邀請,不會也有一些 node 的知識。web
面試
面試整個過程持續了四個多小時,聊的東西仍是不少面試
- 簡單的自我介紹與項目經驗
- 一道算法題
- 一道 setTimeout/Promise 輸出順序問題的題
- 什麼是事件循環
- react 中的 key 用來作什麼
- 什麼是 virtual DOM
- 就是虛擬的DOM,提升渲染的性能,數據與UI分離,而且有利於服務器渲染
- webpack 的原理是什麼,loader 和 plugin 的做用是什麼
- ssr 的原理是什麼,解決了什麼問題
- renderToString,hydrate;首屏時間與SEO
- ssr 會有那些坑
- cpu/memory 可能爆了,出現異常很差定位調試,帶權限接口與非權限接口有可能須要剝離(爲了緩存),TTFB慢了(若是不加緩存,之前多是骨架屏,如今直接白屏),因爲須要起http服務工程上也複雜了不少
- 你如何看待前端和後端
- 有沒有了解過 shell
- 如何替換一個文件中的內容
- 有沒有用過 awk
- 對一個文件如何只查看特定行的內容
- 大家的 node 的服務端應用如何部署
- 而後講了講咱們node部署的歷史,從之前的 pm2 到 docker,到 openshift 再到 k8s
- docker 部署有什麼好處
- docker 的底層原理是什麼
- namespace 和 cgroups,一個隔離環境,一個控制資源配額。多虧我看 docker 的時候多看了一遍簡介...
- 那隔離環境主要隔離什麼環境
- 根據我對 docker 的映像說了網絡,memory,進程,volume。回去以後看了看才知道是在問 linux namespcaces 有哪些..
- 有沒有了解過 ufs
- 沒有...回去以後發現這就是 docker 的分層存儲,雖然一直知道它是分層存儲,但不知道叫 ufs
- 部署 node 時如何充分利用服務器的多核
- 好比用node 的 cluster,用 k8s 也能部分利用多核性能
- 若是你要讀取一個特別大的文件應該如何作
- 那時候還不知道 stream...因而就說了不停地 seek offset
- 大家有沒有對服務端的異常進行監控
- 好比用 sentry 監控異常,elk 打日誌,prometheus 監控性能並用 alertmanager 報警,再寫一個webhook到釘釘
- 那大家在線上出現問題時如何在應用層面監控 cpu 和 memory 的信息
- 雖然線上出現過問題,,但這個確實不清楚。
cpu
和 heapdump
- 如何查看一個 node 的服務端應用的內存和CPU
- 當服務端的內存發生了 OOM 問題如何排查
- 好比看 promethues,查看監控的忽然高峯,看日誌那段時候發生了什麼,看有沒有提交代碼
- 數據庫中什麼是 left join 和 right join 有什麼區別
- 數據庫索引中爲何要用 Btree
- 什麼是聚簇索引
- redis 如何作持久化
- 我還在想持久化好像不過重要,有一次咱們線上的 redis 刷了一遍,也僅僅是用戶掉線了而已...持久化有兩種方案,具體忘了叫啥了。一種是隔一段時間備份數據,另外一種是備份命令,按照命令備份數據。回來一查是 RDB 和 AOF
- 如何實現一個分佈式鎖
- 有沒有用過 LUA
- 並無,但不能說沒有啊。因而說我看過一個關於
rate limit
的庫的源碼,裏邊的 redis 就是用的 lua 腳本
- 當一個地址從輸入到展現在瀏覽器中有哪些步驟
- 遞歸解析的過程是什麼樣的,什麼叫遞歸 DNS 和權威 DNS
- TCP 爲何是可靠的
- 那 tpc 和 udp 相比的話,udp 有什麼好處,雖然不可靠,可是爲何還有不少基於 udp 的協議
- 由於 upd 報文小,udp 頭部8個字節,tcp 頭部20個字節,並且有些協議也不須要太可靠。面試官看我把報文 header 大小答出來了,而後看了下簡歷發現我是學網絡工程的。其實我網絡工程學的也忘的差很少了 (剛開始都能記住TCP的六個標誌位)
- 爲何要換工做
- 之前經過了面試怎麼沒有來
- 你有什麼要問的嗎
總結
通過本次面試後,愈發感受本身一些底層知識的薄弱。另外也感嘆於面試官技術面的廣度與深度,深知拓展技術棧也是至關重要。redis
我是山月,我會按期分享全棧文章在我的公衆號中。若是你對全棧面試,前端工程化,graphql,devops,我的服務器運維以及微服務感興趣的話,能夠關注我。若是想進羣交流,能夠添加我微信 shanyue94,備註加羣。