最近投了一個 Yahoo 在台灣的前端缺。平常都是看別人分享,自己也該分享一下
而且很多問題是從個人經歷去 follow up 的問題,所以這篇只能做個過程參考
(有英文面試,對於英文沒信心能做基本問答的人,要練練英文才可能有機會)
這個職缺的 JD 大概是:
- 前端和 UI 開發專業經驗
- 這個職位將獨立研究、計劃、設計、開發、測試和發佈軟體,並根據需要進行修改和完善
- 2+ 年以上 Web 前端/應用程序 開發經驗
- 良好的口頭和書面溝通能力
- 紮實的 Node.js、PHP 或類似經驗
- 對瀏覽器端客戶端技術的強大掌握,包括原生 Javascript, AJAX, HTML5 和 CSS3
- 熟悉 Web 性能、Web 安全、A/B 測試、測試自動化框架、跨瀏覽器兼容性或響應式 Web
- 有移動開發經驗者優先
- 積極主動的態度和解決問題的能力
- 具有團隊精神,人際交往能力強,能夠獨立工作
另外
- 我沒有 PHP 經驗,但還是到 final round 了
- 我在途中被告知,我被定位的面試階級是 senior engineer
HR 收到我的申請,先跟 HR 約時間談一下
- 自我介紹、講一些自我的工作期望、問一些 behavioral questions
後續發 mail 問你方便的時間,提供幾個時間後,幫我約下一輪
- 跟 Hiring Manager 和 Sr. Engineer 面試
- 自我介紹
- 所有的問題都是環繞你的履歷、問你工作經驗、相關參與的專案與技能、問一些情境上問題
- 有問我安全相關,我有講到 react 其實有幫我們做 escape 了
- 他聽到我有講出關鍵字了(面試官動手筆記)
- 問 behavioral questions
- 介紹這個工作的內容與工作相關事情
- 也指出這職位需要跟國外 team 共事,所以需要英文
- 這回合並沒有 live coding
最後我是稍微有提起,希望後續是偏向有 home assignment,而不要用 leetcode
不知道是不是我這樣講的關係,後續有發 home assignment 給我
這 round 結束後,過幾天 HR 發信來說有 home assignment,問我願不願意接受
預計是 5 天時間,並問我方便的時間
Assignment
- 非常 open 的題目
- 給一個題目需求,要你思考實作流程並且列出所有想到的議題,並寫出你的決策理由
- 其中也讓你可以有一些假設,例如假設 backend API 已經 read 了、User 已經事先有註冊帳號了等等
- 有註明不要有任何實作 or pseudo code
「你想到的議題,並寫出你的決策理由」,這個,例如是「vanilla vs framework」
- 然後寫出要選擇哪個,都是從題目的角度去思考的
- 再舉例,要怎麼解決 CORS,舉出有哪些方案,各自優缺,我怎麼選
把所有想到要建構這功能所「要考慮」的主題列出來,然後一點一點下去比較
過幾天後,HR 說我 OK,要跟 HR 面試
其實,當時我蠻疑問的,因為 Round 0 就跟 HR 談過了說,但這輪談更細
- (我忘了我有沒有自我介紹了)
- 也是有 behavioral questions
- 問期望待遇
- 介紹公司待遇
所以,基本上這比較沒有難度
過幾天後,HR 跟我約下一輪
這次是 HR 提供時間,讓你選(下一輪是 panel interview)
有叫你準備英文自我介紹
(我這邊先列出過程,而 behavioral questions 跟面試題目方向,我下面另外寫)
- 預計 3 ~ 4 小時的 interview (我面了 4 小時)
- Hiring Manager + 幾位工程師
- 一開始英文自我介紹,然後每位工程師問你的履歷、專案和 behavioral questions,英文對答
- 接著就都是中文問題,每位工程師
- 問些專業面向問題
- 有些是從我上面 assignment 下去 follow up 問題
- (可能因為我有 assignment,所以沒有其他 system design 的問題,都是從 assignment 下去假設的一些 open 問題)
- 也有很多 behavioral questions
- live code testing (coding 語言可以選、live coding 時,都會多多少少給你幫助)
- 最後 Hiring Manager 問 behavioral questions, 問你的 career 目標
- (注意,被問「career 目標」or「未來目標」時,他們其實在評估你是否合適這個職位,不要隨便回答,亂講什麼未來有計劃出國工作之類的,要能符合這個職位的方向)
如果,你從來沒有聽過 Behavioral questions
這名詞的話,那你需要花點時間準備
- 先去 google
AMAZON leadership behavioral question
- 除了幾條太過管理面向的問題,其他的你都應該準備
- 去 Google 和 Youtube 打這些關鍵字,看看別人怎麼準備
從 AMAZON leadership behavioral question
延伸出來的問題,網路上有些整理
我自己是整理網路上的,然後列出這些
[自主權]請告訴我,你曾經在你的責任領域之外承擔過什麼重要的事情。為什麼它是重要的?其結果是什麼?
[自主權]描述一個主要由於你的努力而得以實施的項目或想法(不一定是你自己的)。你的角色是什麼?結果是什麼?
[自主權]請舉一個例子,說明你看到一個同行在掙扎,並決定介入和幫助。當時是什麼情況,你採取了什麼行動?結果是什麼?
[Are right, a lot]說說你犯過的一個錯誤。
[是正確的,很多]告訴我一次你與同事的意見不一致。你用什麼方法來解決?
[是正確的,很多]給我一個在缺乏良好資訊的情況下做出重要決定的例子。當時是什麼情況,你是如何做出決定的?這個決定是否是正確的?
[學習和好奇]你是如何在工作中保持靈感、獲得新知識或創新的?
[學習和好奇]你如何跟上行業趨勢和你的競爭對手在做什麼?
[學習和好奇]你學到了什麼,對你的工作有幫助?
[學習並保持好奇心]請告訴我,你曾經通過專業的知識或觀察解決了一個問題。
[學習並保持好奇心]請告訴我,你曾經不知道下一步該做什麼或如何解決一個具有挑戰性的問題?
[學習並保持好奇心]請舉例說明你的團隊中有人向你挑戰,讓你以不同的方式思考問題。
[僱用和發展]給我舉一個你職業生涯中最好的僱用例子。這個人在其職業生涯中是如何成長的?在招募過程中,你發現了哪些因素推動了他/她的成功?
[聘用和發展]你是如何以不同的方式管理你的優秀員工的?
[最高標準]告訴我,你曾經對現狀不滿意過。你做了什麼來改變它?你成功了嗎?
[最高標準]請告訴我,當別人覺得某件事情已經足夠好的時候妥協。當時是什麼情況?
[最高標準]請告訴我,你是否曾努力改善已經獲得良好客戶反饋的產品/服務/解決方案的質量?為什麼你認為它需要更多的改進?
[大膽思考]請告訴我,你曾經為了實現一個職業目標而冒了很大的風險。其中的權衡是什麼?結果是什麼?
[大思考]告訴我,有一次你看了一個運作良好的關鍵過程,並質疑它是否仍然是正確的過程。你質疑的是什麼假設,為什麼?你最終是否對該流程進行了改變?
[贏得信任]談談你不得不告訴別人一個殘酷的事實的時候。
[贏得信任]你如何說服那些對你所做的事情有抵觸情緒的人?
[有骨氣]告訴我你與你團隊中的某人發生衝突的情況。它是關於什麼的?你做了什麼?他們有什麼反應?結果是什麼?
[有骨氣]如果你的直接經理指示你做你不同意的事情,你會如何處理?
[行動的偏見]給我舉個例子,說明你在速度很關鍵的情況下所做的計算風險。當時是什麼情況,你是如何處理的?你採取了什麼措施來減輕風險?結果是什麼?
[行動的偏向]請舉一個例子,說明你必須做出一個重要的決定,並且必須在前進或收集更多信息之間做出決定。你做了什麼?在採取行動之前,你有必要掌握哪些信息?
[執著於客戶]告訴我,你曾經處理過一個難纏的客戶。你做了什麼?你是如何管理這個顧客的?他/她的反應是什麼?結果是什麼?
[交付結果]描述一下你在做專案時不得不面對的一個特別具有挑戰性的情況,以及你是如何克服的。 (注意:挑戰可能是關於時間表、範圍、人員或其組合。)
[交付結果] 你曾經處理過的最複雜的問題是什麼。
AMAZON leadership behavioral question
是針對所有不同領域與資歷的人的,所以有一些偏向管理的問題
我們工程師比較不太被問
這邊列出幾點我認為一定要準備的(打 * 號是我有被直接問到 or 類似 or 我談話過程中主動談到的)
- (記住!還是要看看我的 case 跟你的相似程度,再決定要準備哪些)
- (*)處理過的最複雜的問題是什麼
- (*)你自己做出的最大改善問題
- (*)沒有人叫你做,但你去主動改善的問題
- (*)如何獲得新知識的?(還追問我最近關注哪些、為什麼關注)
- 說說你犯過的一個錯誤
- 你與同事的意見不一致。你用什麼方法來解決? or 說出一次衝突的經驗
- 給一個在缺乏良好資訊的情況下做出重要決定的例子。當時是什麼情況,你是如何做出決定的?這個決定是否是正確的?
- 面對一個特別有挑戰性的情況時,你是如何克服的。講講你有的經驗
- 為什麼要投這個職位
- (回答這種問題時,一定要有事先練過,不要傻傻地回答因為你們公司怎麼樣好,要回答自己有怎樣的能力跟方向,而且符合這個職位,覺得自己合適 or 能給予貢獻等等)
網路上很多建議是回答的模式要 follow STAR 原則
- 沒聽過的話就 Google 看看
- 回答模式的大方向都是差不多的,描述問題、你的行動、結果是、(你學到什麼)
另外也問了
- 團隊合作的問題
- 我怎麼 code review,協同
- 開發流程是什麼
下面是我上網搜尋別人心得所整理的事前複習方向: (打 * 號是我有被考、問到相關 or 類似的問題 or 我談話過程中主動談到的)
觀念複習:
- (*)有什麼方法提昇 Web 效能:
- "Minify HTML/CSS/JS","tree shaking", "code splite", "lazy load code", "compress image", "diff image size", "asset CDN", "lazy load image", "async decode image", "virtual list (but tradeoff)", "prefetch or preconnect", "web work", "service worker cache"
- HTML doctype 是什麼
- javasciprt:
- (*)模擬 OO 的方式 (prototypal inheritance)
- this
- Scope
- Closures
- Hoisting
- var, let, const 差異
- bind/call/apply 差異
- Delegation
- Chaining
- Promise/Async/await 差異
- (*)promise,不斷延伸 promise 然後問你其中每個步驟的 flow
- (*)event loop, settimeout
- IIFE
- (*)CSS 基礎知識
- CSS 權重問題
- CSS 置中語法
- resetting 跟 normalizing CSS 差別?
- ID 跟 class 差別?
- box-model, box-sizing
- CSS position relative 跟 absolute 差別
- 如何讓 dom 元素消失在螢幕上?並解釋其差異性還有效能影響
visibility: hidden
vsdisplay: none
- Restful API
- HTTP status code
- (*)HTTPS, HTTP prococol
- HTTP Cache, HTTP verb
- JSON v.s. XML
- Session vs Cookie
- Cookie localstorage sessionstorage
- Cookie parameters (secure, http, expires ...)
- (*)CORS
- 如何讓新的 JS 語法在舊瀏覽器跑:
babel
orployfill
- React hooks
- How to do Auth
- SQL Injection
- 有哪些 design pattern
- 該如何判斷 request 是搜尋引擎爬蟲還是一般使用者?
- popup modal 如何實作,webpack 可以如何處理效能問題等
- React 和 JavaScript 居多,像是舉出 React LifeCycle 的應用情境
- react HOC (high order component), state, prop, Stateless component
- 如果目前有搶票系統,同時上千人在搶票,如何寫一個只有第一人能搶到的功能
Coding 練習:
- (*)
leetcode top interview
, easy + Medium Collection (去 google "leetcode top interview" 就能找到了)- leetcode 類似矩正翻轉的考題(在
leetcode top interview
有) - 如何知道兩個 Linked List 之間有交集?
- leetcode 類似矩正翻轉的考題(在
- Linked List 插入、刪除、搜尋的時間複雜度
- 實作 merge sort (or 實作出一種 sort)
- 求質數,丟入某個數字 input,然後得到數字以下的所有質數
- 一些考題
- 假設一個陣列[A, B, C],請印出 AAAAABAACABAABBABC...
- 陣列中找出第二大的值 (leetcode)
- 設計一個選課系統,把整體的系統架構和流程列出來,還有會使用到的工具,資料欄位怎麼設計等
- 一個樣式不完整的商品卡片,一個 container 中會有商品名稱、照片、資訊、價格、按鈕,需要修改 css 以及加入 click 事件與修改 state 等
- react 實作商品清單,並做出收藏 toggle 的功能
- 考串 api,接資料後顯示
- 切版面,然後要置中或水平置中置頂
- 一個亂掉的樣式,要修改成正常的樣子 (position)
React:
- 上面有些 react 的東西,但都沒被問到,後來我才想想,因為 JD 上都沒有要求
- 沒有被問,也是有可能的,相對可能認為 react 的知識太頗,這職缺可能不需要 react,所以不需要這樣問
- 所以不問 react,對這職缺來說可能才是對的
- 相反的,如果 JD 上有標明某些 framework 的話,你可能就要準備
前端知識方面:
- 事後我有想過,可能我被定位是 senior,所以比較沒有太基礎 or 標準問題,例如「Hoisting 是什麼」之類的
- (所以,如果你的 case 跟我不一樣,可能準備的方向就不一樣了)
- 我幾乎都是被問 open 的問題,問如果怎樣我會怎麼做、我會怎麼評估效能、衡量專案等等
JavaScript (live coding):
- Class 相關
- 繼承相關
- async, setTimeout, setinterval
- Coding 一些 Promise,並解釋
- 要熟悉怎麼用 promise, 怎麼包 function 之類的,一些 Promise 的 method
- 都不是複雜的題目(一開始一個常見的簡單考古題,我還卡住,氣死,還是被提示了我才解出來)
Leetcode:
- 事前我看別人分享說朝
leetcode top interview
練,但我都沒考到這裡面的題目 - 但練習 leetcode 還是有很用,尤其像我平常沒在刷題的,
leetcode top interview
是不錯的方向- 它都幫你 group 題目類別了,你不用自己去找某一類型的題目
- 熟悉 live coding
- 熟悉一些基本的 data structure、解題思維
- 我有考到跟 Linked List + stack 相關的混合題
- (要是我沒惡補刷個好幾天 leetcode,大概連怎麼用 JS class 寫 linked list 都不熟,也無法快速用 DP 思維解幾題基本題)
- 題目難度是 easy ~ medium 範圍