一面是電話面試,一開始也沒有介紹自己或對方直接劈頭就是丟出一些技術相關問題,大概就是網路上的八股題跟一些衍生問題,只是衍
生問題我自己覺得有點不知所云,下面會大略地說我覺得面試當下印象深刻的:
Q: useMemo, useCallback 是什麼,何時使用?
Q: 如何降低 bundle size?
Q:React.memo 是什麼,何時不該用?
A: 如果子元件的某個 props 必然會因為 rerender 過程而有新的值,則包 memo 沒有意義,甚至還會因為要記得上次的 props 值而造成記憶體的浪費。
面試官回饋:不是這樣,執行效率會比較低,因為還要跟前次的 props 進行比較。
我對於此的反饋:React 預設是進行 shallow-compare 而不是 deep-compare,簡單說就是比較一次記憶體位置而不是比較每個 props 是否跟上次不同,只比較一次外層 props 物件的 reference 基本上執行效率可以忽略,反而是 React.memo 有提供 compare function 的比較函式,如果內部執行比較複雜的 compare 才比較有執行效率問題。
Q: 如果有一天網頁很慢甚至出現白畫面該如何 debug
A: 從 dev-tool 判斷 response,從 html 開始可以檢查 response-time / bundle size,response-time 問題可以從 backend 那邊追,bundle size 可能是 webpack 之類的問題。如果是某個 api error 的問題造成某區塊錯誤,可以先看看 api error code 大致判斷屬於客戶端還是服務端的問題。
面試官延伸:如果要設計一個新專案,要如何避免白畫面?
我對於此的反饋:我完全不懂這問題想問的是啥,專案的選型應該是來自於產品的需求出發,比如你是注重 SEO 的產品可能就要選擇 SSR 的 solution,以"避免白畫面"來當作需求出發實在是不知所云,要不要去用 wordpress 就好。
Q: styled-component 會有什麼效能問題
A: 回答是使用 js 去 inject style,由於是動態生成樣式,會帶來運行時的性能開銷,延伸我有在 SSR 專案使用過 styled-component,因為 SSR 的 FP 是比起 inject style 是比較早的,使用者可能看得頁面跳動問題,因此有 survey 了一套也是 CSS in JS 的解決方案,差別是他可以在 build time 時就產生 css 檔案並插入到 html 中,這樣就可以在 FP 時拿到已經 styled 過的 html ,提升用戶體驗。
面試官回饋:不是我想要聽的答案,可以去看一下 tailwindcss。
我對於此的反饋:我當然知道 tailwindcss ,但這兩個完全是不同 solution,怎麼會用 Utility-First 去跟 CSS in JS 比較,就像你會拿 Lebron 跟梅西比較嗎,有點懶得吐槽了。
面試建議
可能是我跟面試官頻率沒對起來,總之可以先準備看看上面我列的問題,或丟 Chatgpt 也好。
整體來說是很死板的面試,大部分都是八股題,且面試起來的感覺是面試官已經有一個解答在手上,只要面試者沒有回答到點,就會反駁這不是答案,當我再次給予反饋時面試官也會很快就結束對話進到下個問題,感覺面試過程少了雙向溝通討論交流的部分,而這部分也是我覺得面試最珍貴的部分。