【學長姊帶路】Yahoo 軟體工程師 面試經驗分享
原標《2023 Yahoo! Software Engineer 軟體工程師面試心得》
文/Hogan.B Lab
前言
在書寫這篇軟體工程師面試心得之前,首先特別感謝 莫力全KyleMo,願意讓我參考他的文章結構。
2023 Web Full-Stack & FE Engineer 求職心得,這篇面試心得文章寫得非常棒,建議大家細讀。
背景
- 前一份正職工作為一年八個月,全端工程師,前半年為 App 團隊,使用 Flutter 開發IOS 以及 Android App,後面一年使用 React & ASP.Net 做開發。
- 在大學時期就開始接案,畢業後也有加入新創團隊擔任前端工程師一段時間。
- 前端技能:後端技能比重為 7 : 3
- 當時在面試時,為裸辭的狀態,全力準備此面試
- Leetcode 將近三百題,一半以上是 Medium
- 成大電機系畢業
目標
- 加入跨國團隊,使用英文溝通
- 彈性遠端工作 ( 雖然我個人是滿喜歡實體上班的 )
Yahoo! 軟體工程師面試
Yahoo! 職稱為 Software Engineer ,偏向前端的軟體工程師,除了前端開發以外,也需要接觸後端開發以及專案管理。
當時我從 LinkedIn 看到該職缺資訊時,請朋友內推的,也透過我朋友大致上了解這個職位是跨國團隊,日常開會也需要使用英文,並且可能有時差。
Yahoo!面試流程
第0關 HR Phone Call → 第1關 Online Interview (2 hr) → 第2關 Onsite Interview (4.5 hr) → HR 通知通過面試 → 台灣口頭Offer → 美國總部實體 Offer
整體面試下來的感受是非常好的,HR 也會在面試前,詳細介紹每一關面試會著重在哪些部分。
因此我在準備方向上,有先根據矽谷公司的面試心得文去做準備,另外去刷了一畝三分地的文章,讓自己準備方向不要這麼發散。
每一個關卡間隔都將近一個月,進入下一個關卡前,HR 都會再次詢問當前意願以及是否有其他面試正在跑,真的可以感受到 HR 在招募上的用心以及專業度。
第0關 D + 14
與 HR 通話,大致上了解該職缺是一個跨國團隊,使用原生程式語言。
後續的關卡會針對英文、原生程式碼、系統設計、資料結構演算法、專業知識,去做考核。
第 1 關 D + 33
總共有三個面試官,分別針對我的過往經歷、前後端知識、資安、瀏覽器知識去做問答。
第一部分:履歷經歷
針對履歷的經歷去做詳細的詢問,例如:
為什麼選擇技術 Flutter 而不是選擇 React Native?
為什麼選擇使用 Tailwind 有哪些好處與壞處?
為什麼要使用 MonoRepo,有遇到哪些困難點?
面試官也會針對工作經歷,詢問各種技術,並且會深入詢問,這邊建議可以在來回對答的過程中,分析一下每一種技術方法的優缺點。
曾經聽過一句話,我覺得滿有用的「如果一個問題,你沒有想到三種解法以上,那就代表你還不清楚問題是什麼」,因此列在履歷上的任何經驗與技術,我有另外再花時間補齊知識,也會重新思考當時使用該技術的情境,以及是否有其他解法。
這邊有列在履歷上,而後再補齊的知識,例如:Kubernetes、Docker、TypeScript、PHP、Flutter、GCP…。
第二部分:專業知識
對前後端知識去做問答
第 2 關 D + 64
總共有四個面試官,分成幾個部分,包含英文面試、經歷詢問、程式實作。
第一部分:英文自我介紹 &行為面試
這邊大概用半小時的時間使用英文自我介紹以及經歷去做面試。
不過我一直以來都有在練習英文,因此這次的面試我沒有特別針對英文去做任何準備。
第二部分:履歷深入瞭解
這次的關卡又針對履歷做更深入的詢問,包含 Flutter 底層的原理,有沒有處理過 Android 裝置與套件不相容的問題?
第三部分:HTML、CSS 切版
這邊使用 CodePen 來去做 Onsite Coding Interview,不過發生一些小插曲。
剛好在當時,編寫任何 HTML 程式碼就會一直自動產生多餘的程式碼,也為了解掉這個 bug 另外花了十幾分鐘,最後只好趕快打開自己習慣用的 VS Code 完成題目。
這個部分,對我來說最難的是臨場反應,因為前一天也有使用CodePen 練習手感,不過沒想到會遇到bug 導致沒辦法寫程式,哈哈。
第四部分:資料結構與演算法
我有刷題的習慣,通常刷題是使用 Python ,不過比較簡單可以直覺寫出來的題目,我則是使用 JavaScript。
總共有三個題目,個人體感是一題 Easy 兩題 Medium,第一題的熱身題是經典題,這邊直接快速的使用 JavaScript 給兩個解法。
第二題與第三題我都有點忘了,但是都有使用到遞迴函式,第三題也是看到題目的當下就有印象是 Backtracking 的題目,也因為刷題的時候比較熟悉 Python 的語法,也有詢問面試官可不可以使用 Python,最後也有提前把第二題以及第三題都寫完。
第五部分:JavaScript Dom 操作
這個部分是我花滿多時間準備的一個關卡,因為我知道該團隊使用的是 Vanilla JavaScript (純 JavaScript),因此花了滿多時間去看 FAANG 也是考 Vanilla JavaScript 的前端面試心得。
這個關卡雖然時間有點趕,最後鍵盤操控沒有實作出來,但是有與面試官溝通,講解預計如何實作鍵盤操作的功能,最後的加分項目也有實作出來。
第六部分:Behavior Question
其他面試官先行下線,與 Technical Manager 進行最後一部分的面試,Behavior Question 的題目其實我自己是有另外準備的。
雖然很多人覺得行為面試只是在問一些很基本的問題,例如:在工作上,有沒有遇到什麼樣的困難,你是如何解決的?
但是其實這類型的題目除了可以使用 STAR 的方式來去回答以外,也可以讓面試官知道是否有跨團隊、跨部門甚至是面試者獨特性的一關,因此針對常見的題目我自己都有準備兩、三種方式回答。
最後也與面試官多聊了三十分鐘,也另外介紹公司、團隊、技術….等等,當時在進行此部分的時候,我個人是覺得氣氛是愉快的。
HR 通知通過面試 D + 77
面試時有被通知,面試結果會在一到三週內告知。不過我這邊真的運氣很好,在一週內就被得知通過面試,並且也告知通過面試後,還需要一、兩週來去討論後續,包含薪資、福利…等等。
Yahoo! 台灣口頭 Offer D + 80
這邊其實距離通過面試也只過了幾天,就又獲得了台灣 Yahoo! 的口頭 Offer ,我想也有可能是因為核定下來的薪資已經符合理想薪資,並且我當下不需要進行 Compete Offer ,所以速度比較快。
獲得台灣公司的口頭 Offer 之後, HR 也幫忙送至美國總部跑流程,也另外告知預估要等將近一個月的時間,才能獲得正式 Offer 。
Yahoo! 美國總部 Offer D + 84
這邊才經過四天的時間,再次收到通知說美國的 Offer 已經送下來了,這邊真的很幸運!
因為我自己也預估會是十月底面試完,將近十二月簽下 Offer,明年一月才會報到。
但沒想到時程整整提前了一個月,十一月初就獲得正式的 Offer。
準備方式
這邊準備的方式其實是照著當初預估可能會考的內容下去做準備的。
程式面試也建議可以先看一下國外都是怎麼面試的,強烈建議要多與面試官來回溝通,確認完需求才能開始寫程式。
我自己是將程式面試當成工作場景,而 Coding Interview 的階段則是當成 Pair Programming,彼此來回溝通,確保面試官了解你的想法,也可以順便梳理一下寫程式的過程以及思維。
系統設計的部分雖然沒有在面試的時候考到,但因為也花了大量的時間做準備,因此也分享給大家。
資料結構與演算法
這邊其實就是俗稱的刷題,當時面試時,有刷了將近三百題,包含:JavaScript 30、Blind 75、Neetcode、SQL 題目,不過我自己是有特別挑比較常見的演算法以及資料結構去做練習。
資料結構
Array & Hashing、Stack、Tree、Tries、Heap、Queue、Graph
演算法
Two Pointer、Sliding Window、BInary Search、Backtracking、Dynamic Programming、Greedy
不過這邊也必須說實話,Dynamic Programming 真的是比較不好準備,所以大部分還是針對大公司常見的題目類型去做準備。
特別推薦
Neetcode、Blind 75、一畝三分地、javaScript-algorithm
如果有需要的讀者,這邊是我的 Github Leetcode 解答 leetcode-solution
依然會定期更新,歡迎點讚收藏!
Domain Knowledge
前端
JavaScript、HTML、CSS、Vue、React,所有常見與不常見的問題都有做準備,我自己是有熟練到說,遇到 80% 題目要可以直接反射性地回答,這裡也包含比較新的技術、很底層的技術、效能優化、前端架構。
後端
Python、Node.js、OOP、SQL 語法,這邊準備的方式其實比較沒有那麼深入,大概點到為止,畢竟真的要準備的東西太多了,另外也有針對資料庫優化、API 優化去看了一系列的文章。
手機端
Flutter、React Native,這兩個是我有另外花時間去研究一下他們底層運作方式,我有預感會被問很多相關的問題,因此在準備面試階段,有好好理解一下他們底層實作、差異、優劣。
前端 Coding
JavaScipt Dom 操作
我有另外使用 Pure JavaScript 實作好幾個小工具,例如: Todo List、Typeahead、Validation Form、Cacluator、Timer、Tic Tac Toe、Infinite Scroll、Drag Drop List。
CSS 刻板
因為當初是前端出生的,也常常在切版,所以切版有練一下比較麻煩的部分,也有練習 Flex & Grid。
這邊我自己預設是如果今天我用 Flex 完成一個頁面,也應該要能夠使用 Grid 去完成切版,並且還要能分析兩、三種不同寫法的優缺點。
JavaScript 實作
這邊實作提範圍其實就非常廣,所以我自己有地毯式,把常見的功能都自己實作一遍。
Curry、Throttle、Debounce、DeepEqual、Memoize、Promise、Flatten、Polyfill、PromiseAll、Promisify、ShallowClone、DeepClone、Apply、Generator。
這邊也有另外練了 Reduce、Event Loop、Promise、Proto 的大量的程式題目。
推薦資源
- You Dont Know Js
- 莫立全KyleMo Medium & 前端效能優化大補帖
- K 前端工程師
- Yii|Flutter|Cross-Platform Developer
- AlgoExpert Fullstack Package
行為面試
這裡我有將矽谷常見的 Behavior Question 準備差不多十題,每一個題目也都有練習到可以反射性地回答。這邊我特別推薦大家可以好好逛一下一畝三分地,裡面很多矽谷華人的精華文章,透過他們的文章真的可以知道自己有太多地方不足了。
這邊我除了使用 STAR 的方式來作為 Behavior Question,也另外針對 Job Description 以及 Yahoo! 企業文化,來去優化、修正我的回答,避免花了太多時間在不重要的篇幅上。
推薦資源
系統設計
當初在 HR Phone Call 時,一聽到要考系統設計,其實我本身滿緊張的,畢竟是一個我從來沒準備過的面試,當下就直接爬了很多文章,比對了很多不同類型的系統設計文章。最後在 ByteByteGo 以及 Grokking Modern System Design Interview 兩個做選擇。最終我是使用 Grokking Modern System Design Interview 搭配系統設計知名的 Repo 去做準備。
系統設計規則
最一開始準備系統設計時,我先從規則開始了解,包含:
Availability、Reliability、Scalability、Maintainability、Fault Tolenrance、Back-of-the-envelope Calculations
系統設計元件
再來從廣度開始,把每一個系統元件搞懂,包含:
Domain Name System、Load Balancers、Database、Key-value Store、Content Delivery Network、Sequencer、Monitoring、Cache、Messaging Queue、Pub-sub、Blob Store、Distributed Search
系統設計練習
然後再練習常見的系統設計,包含:
Youtube、Uber、Web Crawler
不過等我真的全部練完才發現真的有太多不足的地方了,也還好實際在面試時,沒有遇到系統設計關卡,未來應該會慢慢將系統設計寫成文章。一方面把自己不足的地方補齊,另一方面則是與大家分享技術。
推薦資源
後記
這次的面試心得來到尾聲了,可以感謝的人真的很多。
也請教了很多大神有關面試的方法以及模擬面試。
這次的面試也讓我真的覺得很幸運,剛好自己有準備的題目有被問到。
並且後續的流程也是真的在幸運女神的加持下,可以這麼順利地簽下 Offer。
最後這邊也打個廣告,自己本身有在經營自媒體 hogan.tech,有興趣的朋友可以追蹤!
目前只要是面試相關的問題以及答案,也都會做成貼文形式放在訂閱者專區。
歡迎大家訂閱支持!
※本文由 Hogan.B Lab 授權勿任意轉載,原文《2023 Yahoo! Software Engineer 軟體工程師面試心得》
___________
你也有經驗想分享嗎?快來投稿賺稿費吧!
瀏覽 723 次