兩年前端頭條面試記


今年還未曾面試過,如果不是頭條的某個 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 的信息
    • 雖然線上出現過問題,,但這個確實不清楚。cpuheapdump
  • 如何查看一個 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 了......
  • 你有什么要問的嗎

總結

經過本次面試后,愈發感覺自己一些底層知識的薄弱。另外也感嘆於面試官技術面的廣度與深度,深知拓展技術棧也是相當重要。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM