今年還未曾面試過,如果不是頭條的某個 HR 順手把我的簡歷從簡歷庫中撈起來的話。頭條是大小周,這就意味着我可以周末去面試,不占用工作時間也不用請假,對於這點我還是很滿意的。
面試約到了周日早上十點,但事后我有點后悔,周日面試官很可能會晚點。面試一直持續到下午三點左右結束。
頭條的效率確實很高,周日面試結束后,第二天 hr 就通知了面試通過。
另外,我把本次面試也記錄在我的每日一問: shfshanyue/Daily-Question 中,歡迎討論與 star
背景
到今年年底,我已經有了將近兩年半的經驗。而這兩年來的時間可以一分為二,第一段時間我在整前端,用的 react,第二段時間我在整后端,用的 node,我們用 node 直接操作數據庫,而非作為中間層。而由於人事的過多調整,我在這時也做過一小段時間的 leader。做后端改BUG總是要調線上數據庫的,再加上我對運維的興趣,因此我擁有了線上數據庫以及k8s集群的權限,並直接維護我們項目組業務代碼的 k8s resource。(當然,后來改到 helm 維護)
由於 node 與前端千絲萬縷的聯系,以及我在頭條的簡歷沒有更新,因此這次接收到的還是前端面試邀請,不會也有一些 node 的知識。
面試
面試整個過程持續了四個多小時,聊的東西還是很多
- 簡單的自我介紹與項目經驗
- 一道算法題
- 一道 setTimeout/Promise 輸出順序問題的題
- 什么是事件循環
- react 中的 key 用來做什么
- 什么是 virtual DOM
- 就是虛擬的DOM,提高渲染的性能,數據與UI分離,並且有利於服務器渲染
- webpack 的原理是什么,loader 和 plugin 的作用是什么
- ssr 的原理是什么,解決了什么問題
- renderToString,hydrate;首屏時間與SEO
- ssr 會有那些坑
- cpu/memory 可能爆了,出現異常不好定位調試,帶權限接口與非權限接口有可能需要剝離(為了緩存),TTFB慢了(如果不加緩存,以前可能是骨架屏,現在直接白屏),由於需要起http服務工程上也復雜了很多
- 你如何看待前端和后端
- 吧啦吧啦吧啦...
- 有沒有了解過 shell
- 這個肯定得了解過
- 如何替換一個文件中的內容
- sed;那還有沒有其它命令;cut
- 有沒有用過 awk
- 只能說有了,不過沒具體問用法
- 對一個文件如何只查看特定行的內容
- 用 head 應該可以吧...(不太確認)
- 你們的 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
- ps / pidstat
- 當服務端的內存發生了 OOM 問題如何排查
- 比如看 promethues,查看監控的突然高峰,看日志那段時候發生了什么,看有沒有提交代碼
- 數據庫中什么是 left join 和 right join 有什么區別
- 數據庫索引中為什么要用 Btree
- 減少與磁盤的IO次數
- 什么是聚簇索引
- 這是啥...
- redis 如何做持久化
- 我還在想持久化好像不太重要,有一次我們線上的 redis 刷了一遍,也僅僅是用戶掉線了而已...持久化有兩種方案,具體忘了叫啥了。一種是隔一段時間備份數據,另一種是備份命令,按照命令備份數據。回來一查是 RDB 和 AOF
- 如何實現一個分布式鎖
set key value EX 60 NX
- 有沒有用過 LUA
- 並沒有,但不能說沒有啊。於是說我看過一個關於
rate limit的庫的源碼,里邊的 redis 就是用的 lua 腳本
- 並沒有,但不能說沒有啊。於是說我看過一個關於
- 當一個地址從輸入到展示在瀏覽器中有哪些步驟
- 吧啦吧啦吧啦
- 遞歸解析的過程是什么樣的,什么叫遞歸 DNS 和權威 DNS
- (問這么偏...)
- TCP 為什么是可靠的
- 因為它有 ACK
- 那 tpc 和 udp 相比的話,udp 有什么好處,雖然不可靠,但是為什么還有很多基於 udp 的協議
- 因為 upd 報文小,udp 頭部8個字節,tcp 頭部20個字節,而且有些協議也不需要太可靠。面試官看我把報文 header 大小答出來了,然后看了下簡歷發現我是學網絡工程的。其實我網絡工程學的也忘的差不多了 (剛開始都能記住TCP的六個標志位)
- 為什么要換工作
- 以前通過了面試怎么沒有來
- 因為沒 hc 了......
- 你有什么要問的嗎
總結
經過本次面試后,愈發感覺自己一些底層知識的薄弱。另外也感嘆於面試官技術面的廣度與深度,深知拓展技術棧也是相當重要。
