2022/11/04

面試國外工程師超詳細超過 100 道題目蒐集、分類歸納與準備

要面試工程師的流程真的超級複雜,所以我就詳細蒐集了 
  • Technical, behavior questions 蒐集與分類
  • Coding, online assessment, assignment, system design interview 的準備
最後也有題庫供大家參考。



一、面試題目蒐集、分類歸納與準備

1.1 面試流程

在蒐集面試題前要先知道歐美軟體工程師的面試流程 : 
  • Initial phone call:recruiter 或 head hunter 會和求職者約時間 phone call,通常會問位置、簽證狀態、薪資期望、自我介紹。 有的公司在這步就會問技術相關問題或是需要解題。
  • Technical interview : 沒有 coding,直接問技術相關問題
  • Coding interview : 面試官出題,你講解思路和解題
  • Online assessment / Online test給你一個線上連結,限制時間內要寫完
  • Assignment : 線上測試或是帶回家的作業,通常也有限制時間
  • System design : 通常 senior engineer 才會遇到,考對於系統的規劃和設計
  • Behavior questions : 問各種情況下面試者會怎麼處理,主要想知道面試者的處事態度和個性

那工程師面試時可能遇到這些關卡交錯,但不一定每關都會遇到;有公司沒有 technical interview,或是有兩次 coding interview。




1.2 蒐集面試題

首先先蒐集變化度夠豐富的題目,包括 technical questions (依照你要應徵的職缺而定) 和 behavior questions。

不比中文面試,因為英文面試是使用自己不熟的語言;
我自己的個性是 : 如果能事先做好足夠的準備,面試時就比較不容易緊張,
就算遇到沒準備的問題,也會比較有自信也是能答得出來。

我用特定 skills + interview questions, behavior questions 等關鍵字 google 搜尋後大約翻 15 ~ 20 幾頁,還有上 youtube 看影片搜集問題,還能順便練聽力。

需不需要做到這樣,就看個人的個性和時間安排,但至少遇到 common questions 要可以回答得很熟練。


相關面試題目我整理成了題庫,可以下滑到 第三大點面試題庫資源參考。



1.3 把面試題型分類

搜集好題目後,如果是 behavior questions 可以把題目按照不同情境分類,
這樣在回答的時候,知道某種狀況的問題可以用哪件事來舉例說明,就不需要每個問題都要想該怎麼回答。

這個方法是自這篇跟胡立大大學習到的,十分推薦閱讀。

1.3.1 根據歸納面試題會分 : 


以下是我個人針對搜集的題型所做的分類,你也可以建置專屬於你的題目分類。



1.3.1.1 Common Questions


不論你去哪面試通常都會問的問題,這種一定要準備到非常流暢。

像這個是我面試時人資幾乎必問的問題 : 
(1) Tell me about yourself. 
(2) What do you know about our company?
(3) What are you looking for in this position?
(4) What's your current (employment) situation? (In a full-time job, unemployed, looking for a job, etc.)
(5) What's your notice period? (0 days to 2 weeks, depending on you or the company)
(6) What are your salary expectations?



1.3.1.2 Behavior Questions


問題大致上可以分類成衝突、壓力處理、環境適應、組內合作、失敗處理等的情境,
當然這邊是我的分類方式,你可以創建更適合你自己的分類。


自身相關問題
(1) Why do you want to work in the UK?
(2) ...Some other related questions about your resume.


衝突處理

(1) Describe a time when your boss was wrong. How did you handle the situation?


壓力處理
(1) Tell me about a time you were under a lot of pressure. What was going on, and how did you get through it?
(2) How do you deal with pressure or stressful situations?
(3) Tell me about how you worked effectively under pressure.
How did you handle meeting a tight deadline?


環境適應
(1) How well do you handle change?
(2) Tell me about a challenge or conflict you’ve faced at work and how you dealt with it.


工作倫理
(1) What do you like most and least about your current job?


失敗處理
(1) Tell me about a time you failed. How did you deal with the situation?
(2) Have you ever made a mistake? How did you handle it?


組內合作
(1) Tell me about a time you disagreed with a decision. What did you do?
(2) What do you do if you disagree with your boss?
(3) Describe a time when you struggled to build a relationship with someone important. How did you eventually overcome that?


面對挑戰
(1) Give an example of a goal you reached and tell me how you achieved it.
(2) At your current job, what are you most proud of?


做決定
(1) Did you ever make a risky decision? Why? How did you handle it?
(2) Did you ever postpone making a decision? Why?
(3) Describe a decision you made that wasn’t popular and how you handled implementing it.


其他
(1) How would your former boss describe you?




1.3.1.3 Technical Questions


查網路題目、查影片
除了網路上直接查特定 skills interview questions 外,
推薦上 youtube 看影片聽發音,有時候明明知道單字但是卻不知道發音,
如果你會這題,卻因為聽不懂發音而答不出來就可惜了。

而且還可以利用影片做面試練習,當他提出問題時按暫停,
然後嘗試自己去回答,然後對比影片回答再去做改進。

另外確定面試公司後可以上 glassDoor 查詢,有的人會分享面試考題,
非常值得參考!

如果公司有你不會的技術,在面試前可以先稍微搜尋一下
有空的話當然可以學一下更好,面試時時就可以敘述一下你大概知道多少,
但不要不熟講得自己很熟,過猶不及。


紀錄題目和答案
我是自己開了個 repository 去紀錄題目和答案 Front-End / Back-End / Full-Stack / Software Engineer interview questions
這樣方便日後練習和複習。

但其實網路上也有很多別人整理好的,
只是我想用自己理解過後的話再打一次,這樣比較好記憶,
也可以多看看別人是怎麼回答的,因為自己回答的用詞可能沒那麼恰當。

我另外把題目抽出來,在面試前再快速瀏覽一遍看自己會不會回答,
回答不順的就標記起來多練幾次。

如果遇到面試問的題目是你不會的,
可以嘗試回答看看,不要直接說不知道或是我不熟,
甚至還可以詢問面試官能不能給我點提示,然後用他給的提示去推測答案。



1.3.1.4 Coding Interview


可以針對自己要面試的技術,開專案練習一邊寫一邊講解,
或是找 youtube 的 tutorial shadowing 別人講解 code 的方式,
練到很可以很快速寫出來,也能講解自己的解題思路。

如果是考特定語言的 live coding / pair programming 
對方可能會要求你事先架好環境,在面試開始前幾分鐘寄文件給你。

當然如果你需要面試大公司,或是一些需要寫演算法的公司也許就要刷 LeetCode,
這邊因為篇幅太長,所以我另外切了一篇出去特別講 Coding Interview 就是刷好刷滿刷爆 LeetCode 就會上?




1.3.1.5 Online Assessment / Test


可能給你一個比如 hackerrank, codility, coderbyte, testdome 線上的考題
內容可能包含如你選擇的程式語言或是 framework,或是 LeetCode 類似 easy 到 medium 程度的題目,如果看到題目敘述很長也不用太緊張,因為有可能基本觀念是簡單的。

很多公司喜歡用 HackerRank,推薦註冊來練練手感熟悉介面,因為不同於 LeetCode;
HackerRank 的題目說明比較長,有聽過測驗過的人看到一堆英文就慌了,所以平時先練習,等到正式測驗時就比較適應。

其中還會有 Mock test,就是模擬正式面試的流程。

但不得不說有的測試寫得很爛,如果覺得自己程式沒問題,可以看一下最左側欄的 discussion;但 discussion 很多解答也不正確,就當練習看題目吧。



還有遇到給 WonScore 考邏輯、數學、語彙判斷、情境題的,
個人是覺得不太用準備,正常發揮就好。

有些公司若分數未達預期則無後續面試,有些公司則是依分數會影響後續面試關卡豎量




1.3.1.6 Assignment


有的會給 Assignments 要求你回家寫,
注意就算對方跟你說只要寫三小時就可以完成,
但還是多預備點時間寫比較好,因為通常都會花超過。

在 commits 時記得要按照規範且是具有意義的。

同時也要列上文件像是 ReadMe : 
  • 如何架設環境、執行程式
  • 程式, UI, UX 設計的思路 (有的會要你自己設計 UI/UX)
  • 大綱列出這個 Assignment 的重點項目是什麼
  • 使用的技術和工具
  • 有什麼功能或介面可以改進
  • 這個 Application 還可以新增什麼功能

Assignment 有時候下一輪面試時會被要求 demo,
記得在面試前先開好你的檔案,按照前述的思路去解釋你的專案。




1.3.1.7 System Design


這不是所有工程師都會遇到的關卡,通常是應徵 senior 職缺時才會考到,
因為這邊因為篇幅也太長,所以我另外切了一篇出去特別講 System Design Interview 不是比誰口才比較好




1.4 列下問題的答案

再來是列下各別 behavior questions 的答案,但這裡要注意的是

面試官問的問題,其實是隱含他想知道的事情,比如說這題 :

"Tell me about a time you failed. How did you deal with the situation?"

面試官其實是

想知道 : 

你是否願意承擔責任,不是找藉口或是責怪別人,
而是從錯誤中學習,並且利用此經驗在下一次處理事情上。


這邊回答的技巧是

  • 不要說自己從沒失敗過

  • 簡短的舉出實例說明

  • 但不能是頻繁發生的問題 (會顯示你很粗心,沒學到教訓),或是很嚴重比如損失好幾萬的訂單 (講了誰敢用你啊)

  • 不要找藉口,不要抱怨,不要把錯怪在別人身上

  • 顯示出你從這件事學到什麼,怎麼避免下次再發生


回答範例按照 Situation, Action, Result 去回答
  • Situation (情況)I was managing a project for one of our biggest clients in my previous company, and I was so eager to please them that I told them we could finish the project within 2 weeks. I thought this was doable, but it ended up taking 3 weeks and they were not happy. Looking back, I realized I should have been more conservative in my estimate to the client. I realized that a client isn’t going to be upset if you’re clear about the timeline in advance, but they are going to be disappointed if you promise something and then don’t deliver.
  • Action (行動): So I took this experience and used it to become much better at managing the expectations of clients during projects I oversee
  • Result (結果): on the next project with a different client, I told them it’d take 4 weeks and we finished in 3. They were very happy about this

別人問問題的時候,不一定要直接回答,可以先反問對方,
釐清說對方想問這個問題的用意,而且這樣也有更多互動,
且顯示出你是會去思考問題的人。

比如說 :

"Do you think you are a good developer?"

你可以反問說 : 

"How do you define the definition of good?
The developer who can write good code? Or do they have good communication skills?"

回答內容請擔任過面試官的人幫忙看,技術題列完後問資深工程師幫忙補充




1.5 有什麼想問面試官的

一定會被問說有什麼想要問的,這也是你了解公司和職缺的好機會,所以預先列下你想問的問題吧。

整理職缺資訊技巧部份,可以參考這篇 應徵國外工作的前置作業,這些你都做了嗎? 第五點整理職缺資訊


職缺
(1) Could you tell me more detail about this position?
(2) What is the most important consideration for this position?
(3) What’s the biggest challenge I will encounter in this position?

技術和專案流程

(1) What is the working process when you get a task?
(2) How many people are in the department of development? How many front-end and back-end developers?

營運類
(1) What is the next target for the company?

個人問題
(1) How do you evaluate performance?
(2) How can I improve myself in this interview?
(3) Are there any qualifications that you think I am missing?








1.6 額外準備

1.6.1 開場白


感謝對方邀請你參加這次的面試

(1) Thank you for inviting me for an interview.
(2) I am also honored that I have this opportunity to have an interview with you.
(3) Thanks so much for meeting with me. 



1.6.2 Small talk


面試常常用問候當開場,比如說可能會問 How are you doing? Do you have any trouble finding the office?  How about your weekend? etc. 

 或是一些生活相關的問題,像問你的國家疫情如何,你要做的就是保持禮貌和簡短的回答,有時候也可以問候回去,但注意不要回得落落長,這只是開啟談話的一個開場,他們不是真的要你回答一長串關於你的生活。如 : 

       Interviewer: Do you have any trouble finding the office?
       Interviewee: No, the direction on the website was great.

       Interviewer: How's your weekend?
       Interviewee: I went to my friend's wedding, and you? 
       Interviewer: Sounds great, I read an interesting novel.



1.6.3 沒聽清楚題目時


(1) Sorry, I didn’t quite catch that, could you explain one more time?
(2) Would you mind spelling that out for me?
(3) I apologize, but I could barely hear you, would you mind repeating that again?



1.6.4 如果是使用電話/視訊面試遇到一些情況時


確認對方身份

(1) Hi, May I ask who’s calling?
(2) May I have your name, please?

你正好在忙,你可以說 
(1) I am so glad that you called, but I am a little busy at the moment. Can I call you back in about 30 minutes?
(2) Is it okay if I call you back later? I am in the middle of something.
(3) I am a little tied up, is it okay if I call you back later?

電話訊號不好時
(1) Sorry, you’re breaking up. Can you look for an area with better reception, please?
(2) Give me a second, I‘ll look for a place with better reception/signal.
(3) The line is pretty bad, would you mind speaking up a little?
(4) The connection was lost / The connection’s bad. Can you say that again?
(5) We seem to have a bad connection, would you mind if I call you back?

視訊畫面有問題時
(1) You’ve frozen.
(2) Can you turn on your webcam?
(3) Can you share your screen?


視訊聲音有問題時
(1) You’re on mute.
(2) Can you unmute your microphone?
(3) Can you please mute your microphone?
(4) Can you turn up the mic volume?
(5) Can you turn down / lower the mic volume?
(6) Can you plug in your earphones?
(7) Your audio is out of sync.


1.7 面試結束時用語

(1) Thank you very much for your time. It's been nice meeting you. 
(2) It's been a pleasure talking with you. 
(3) Thanks for the opportunity. It's my pleasure. I look forward to hearing from you soon. 



1.8 視訊/電話面試小提醒

這邊有一篇面試流程相關的詳細資訊,非常推薦閱讀


事先調查
若知道面試官的名字和職稱,先上 linkedIn 調查對方的背景經歷
先知道對方背景後,可以按照對方職位去調整你的自我介紹
我的自我介紹就分為給人資聽的版本和給技術人員聽的版本。

然後我發現有的面試官好像不太喜歡聽太長的版本,
所以在每次面試過程中我都會看對方反應,去及時修正我的自我介紹長度。



回答問題
電話面試因為看不到表情,所以語氣要顯得正向、肯定和積極,運用 positive 的字彙。

沒聽清楚問題或不懂問題可以再問一次,不要猜測性的就回答了。

回答不要用背的,記得大綱然後用自己的話說出就好,這樣會顯得比較順暢和真誠;也要確保你的回答是精確的,而不是落落長一大段沒有重點。

如果需要拼字,可以舉例來確保拼音正確,如 my name is Erika, E for Egg。

我覺得還有蠻重要的一點是把面試官當成朋友來看
我之前面試就是把對方當成陌生人,他問什麼我就回答什麼,跟對方沒什麼其他互動,
但其實開場你可以主動打招呼,問問對方周末過得怎麼樣? 聖誕節過得如何?

我發現當我後期面試開始嘗試這樣開頭,或是有時候回答問題夾雜到在英國體驗到什麼等時,對方會顯得更為友善,且都很樂意安排我進入下一次的面試;
所以如果能聊到有說有笑,表示你掌握到面試的技巧了 (當然這不保證你就一定會上)



設備準備
可以先準備好 skype / google hangouts / zoom 以供聯繫,就我經驗他們很愛用 google meet 和 zoom。

確認是不是視訊面試還是只是電話,通常在約面試的時候會先講。
視訊電話就要稍微整理下房間啦,雖然他們不會說玩找找看去確認你的房間細節,但是至少不要露出會讓人看到尷尬的東西。

事先測試你的面試環境是不會被打擾的,還有網路通順;我是手機和筆電都安裝後測試,怕一個臨時壞了還有另一個可以用 (很愛擔心)



時間確認
確認好時間,接電話、線上面試時間通常會是台灣下午到晚上,有時候還會是凌晨,不過大部份面試官都很好心會排早一點。

詳細如何約定時間可以看這篇 找國外工作,如何有效率的跟 Head Hunter && Recruiter 打交道 的第四點約面試時間



身體不舒服
如果面試時身體不舒服可以詢問是否可以改約時間,
我有次身體不舒服,覺得自己當下表現不好,結果這間公司又是我很想去的,
所以我就又再寄信我當天狀況,然後詳細的敘述我有多想加入這間公司,
反正都值得去試試看。



其他
對方通常第一次通話都會詢問你預期薪水,
不要擔心! 提高一點給對方砍,
如果直接說自己的最低可接受的薪水,之後好不容易拿到 offer 後搞不好又被砍,之後就會覺得後悔了。(親身經歷QQ)

然後比如是 junior 在面試時也不會特別說自己是 junior,
因為 junior 的薪水實在和 senior 差很多,你可以說自己是 middle level,
反正這個的 range 很廣。

沒碰過的技術,可以說你會 survey,會比用 learn 來的好。



面試完後寄感謝信
面試完後可以寄封感謝信感謝公司邀請你參加面試,
敘述你有多想加入這間公司、你特別的亮點、如何把你的經驗和能力帶進公司、如果雇用你你的計劃是什麼?



被拒絕後寄信

被拒絕後如果你還是很想加入這間公司,

可以再寄信強調自己的亮點和經歷,

如果對方還是拒絕你,至少也要收到 feedback

記得還是要客氣禮貌的詢問,
但不用太期望對方會回答你什麼,一方面是英國人講話挺客套的,
一方面是對方可能也沒那個時間、他們也的確沒有必要要回答你,
如果對方願意回答就當你賺到了~

如果沒辦法馬上面對這件事,
覺得很不開心很沮喪很失落很煩躁很生氣,
那就把這件事情先丟開!
打開你喜歡的電影影集動畫漫畫,
點你想吃的垃圾食物點心甜食,
出去公園散步百貨公司逛街亂花錢,

等你心情平復後再做正事,
不用勉強自己在短時間就要馬上回復心情,
但也不是無期限的放縱自己,
你可以限制一個期限比如一天兩天。

心情回復後,
然後針對對方的回答去改正自己
比如他們說感覺不到你想跟面試官溝通,那可能表示面試時與面試官交流不夠,
比如說他們覺得你不夠資深,那可能是技術方面還要再加強
比如說他們說不敢用你,有可能是 behavioral questions 回答有問題。

我記得我曾經面試過一間新創,
對方花了整整一小時問我各種問題,最後拒絕我的原因是 "我們不能承擔這個風險",
後來跟其他人 mock interview 時才知道,
我誠實回答之前在換工作之間有 gap 是因為之前加班太多影響身體健康,對新創來說的確很令人擔憂,
因為他們根基還不穩。可能沒辦法承擔說我身體狀況不好離職的風險;
而且這個回答太負面了,讓對方會不知道可以怎麼回,
所以要換個方式去裝飾一下說法。



--
有時候對方可能會千篇一律回答說,
"You demonstrated several strengths, but ultimately we didn't feel it was the best fit given our current needs."
"we have concluded that other candidates were more closely aligned with the job requirements and to our team. "
這時候怎麼再去追問也都沒有用,因為要拒絕人可以有千千種原因;
也是有過公司給過口頭 offer 或在簽核時又反悔的,
所以不要太把希望都寄託在一家公司上比較好,
有機會能繼續面試就面試,就當累積經驗值。

被拒絕也不用太灰心,有人工作從一個月到一年兩年才找到的都有,
甚至也有沒找到就打包回家的,
這樣不代表說你就是實力不足,有時候也是要靠點機運,當然努力還是必要的。



--
這邊有一件事情很重要 - 設定面試停損點,
當你不管怎麼面試都被拒絕時,是時間找人幫你檢討面試有什麼問題。

因為如果努力的方向有錯,再怎麼堅持下去都會是走錯的方向,
就好像沒搞清楚客戶的需求,結果做出沒人要的功能;
路走錯了,你跑再快也是沒有用的。





二、Mock Interview


YouTube 上直接打 Job interview, Job interview example,  job interview mock 可以看到一大串的影片,
但我是選擇實際或是模擬面試而不是教學的影片,
因為教學的影片發音太清晰,怕跟實際上會有落差。

然後利用影片練習面試,先不要看字幕,
直接聽影片中面試官問的問題,也先不要聽對方回答,
拿個鏡子看著自己回答問題,並錄音或錄影,
觀察自己的肢體語言和表情,專心於講話的語調、停頓點,
是不是有眼神飄移、說話毫無起伏、駝背...等問題,
然後再看影片中對方是怎麼回答的,檢討自己哪邊需要改進,
接著再繼續練到熟悉為止。

這樣除了可以學英文單字、句型、適應口音,知道自己回答問題的眼神、態度,
還可以練習到前面你沒列到的問題。


當然可以找到人幫忙 mock interview 是更好的,因為真人互動比較貼近實際面試的感覺,
最好也找不同口音的人幫忙模擬面試,因為你很有可能會遇到各種不同國家來的面試官;
可以在 FB 上搜尋前端、後端、全端等社團徵人。





三、面試題庫資源


我這邊蒐集了面試相關的題庫,歡迎點擊參考,
如果有錯誤的地方或是可以新增的問題,請留言告訴我。
你可能看到了一些欄位是熟悉程度、解題思路等,我設計了刷題時搭配該表的用法,詳細請至 學習筆記 :: 用 JavaScript 刷 LeetCode 01 - Hash Map (雜湊表) 講解,附題目連結整理表下載 第二點解題思路 & 題目整理查看




--

沒有留言:

張貼留言