Software Engineer 面試題
來自各公司指南的代表性 Software Engineer 面試題,依考察重點分組。它們是備考範例,不是任何公司經確認的題庫。
行為面 (32)
談談你曾在指派任務之外主動承擔某個問題的經驗。
你能描述一次主動承擔艱難技術問題的經驗嗎?
請談談你曾因技術決策與團隊成員意見不合的經驗。你如何化解分歧?
請談談你與隊友意見不合的一次經驗,以及你們如何達成決定。
請說明一次你對技術決策持不同意見的經歷,以及你如何協助解決分歧。
你會如何設計一項服務,使其能接收突發的大量請求、維持正確性,並在故障時保持可觀測性?
請談談一個由你負責處理不明確技術問題的專案。
你如何處理與協作者之間的技術歧見,而這次討論帶來了哪些改變?
你會如何重構這個函式,讓失敗處理與測試更清楚?
請談談你曾遇過的一次技術方向分歧,以及你如何協助團隊做出決定。
請描述一個由你負責、但遭遇意外失敗的專案。事後你做了哪些改變?
請談談一項由你負責的技術決策,以及你如何評估彼此競爭的方案。
請談談你與團隊成員意見不一致的經歷,以及你們如何做出決定。
請談談你與隊友意見不合的一次經驗,以及你們如何作出決定。
請分享一次你與團隊成員意見不合的經驗,以及你如何推動工作繼續前進。
請分享一次你主動承擔超出指派任務範圍之技術問題的經驗。
請分享一次你在技術決策上與隊友意見不一致的經驗。你如何推動工作繼續進行?
請談談一項由你負責的技術決策,以及引導該決策的佐證。
請談談你曾主動承擔責任、處理不明確問題的一個專案。
請分享一次你與團隊成員意見不合,以及你們如何達成決策的經驗。
請分享一次你主動承擔棘手工程問題的經驗。
請談談一項仰賴不同觀點之間協作才得以完成的成就。
請談談一次在需求不明確的情況下,你仍主動承擔責任的挑戰。
請分享一次你與隊友意見不合,以及你如何協助解決分歧的經歷。
請描述一個由你負責,卻遭遇意外故障的專案。
你為什麼想以軟體工程師的身分加入 Boston Consulting Group?
請分享一次你不認同某項技術決策的經驗,以及你如何處理。
請分享你與隊友意見不合的經驗,以及你們如何做出決定。
請分享一次技術意見分歧的經驗,以及團隊如何達成決策。
說說你和同事之間的一次分歧,以及你是如何解決的。
你為什麼想加入這個團隊,擔任這個軟體工程師職位?
你曾如何處理一次關於技術方案的分歧?你個人做了什麼來推動問題解決?
程式 (28)
對於一段正確但讓其他工程師難以維護的程式碼,你會如何改進?
你會如何偵測鏈結串列中的循環,並解釋方法的複雜度?
你會如何實作具有可預測淘汰行為的快取,並解釋你的設計選擇?
你會如何判斷鏈結串列是否包含環,並如何說明時間與空間方面的取捨?
對於能夠運作但難以閱讀或測試的程式碼,你會如何改善?
撰寫一個將重疊時間區間分組的函式,並說明其複雜度。
你會如何找出並說明陌生程式碼發生效能衰退的原因?
對於處理格式錯誤、重複或延遲輸入的程式碼,你會撰寫哪些測試?
你會如何測試一個在邊界條件下會有不同行為的函式?
一段程式碼雖然運作正確,卻難以由其他工程師維護,你會如何改善?
如果程式碼可以運作,卻難以讓其他工程師維護,你會如何改善?
你會如何修改這段程式碼,以提升易讀性、正確性與可維護性?
在撰寫程式碼之前,你會如何釐清模糊的技術需求?
你會如何測試並重構功能正確但難以維護的程式碼?
你會如何判斷鏈結串列是否含有循環,並會說明哪些取捨?
如果有一個可正常運作的函式,但命名不清楚且邏輯重複,你會如何在不改變其行為的情況下改善它?
你會如何判斷鏈結串列是否包含循環,又會如何說明其中的取捨?
你會如何重構難以閱讀的函式,同時維持其行為不變?
一段程式碼雖然運作正確,卻難以讓團隊成員理解,你會如何改善?
對於雖然可以運作,但其他工程師難以維護的程式碼,你會如何改善?
對於功能正常但其他工程師難以維護的程式碼,你會如何改進?
你會如何判斷鏈結串列是否包含循環,又會如何說明你的方法?
請逐步說明你會如何改善一段可以運作、但難以維護的程式碼。
若某個函式能正確運作,但難以閱讀及測試,你會如何改進?
如果網路結構會不斷變化,你會如何設計演算法來找出最短路徑?
如果一個函式在一般用例下都能通過,卻在空輸入或重複值的情況下失敗,你會怎麼排查?
你會如何偵測鏈結串列中的環?你的方法在時間和空間上的成本分別是多少?
在審查一個偶爾會產生重複紀錄的函式時,你會如何找出原因並排定修復的優先順序?
系統設計 (33)
你會如何設計一個儲存並讀取高頻存取物件、且淘汰策略可預期的服務?
你會如何設計一項在流量成長時仍能維持可用性的服務?
你會如何設計一套支援多種傳送管道並能處理失敗情況的通知服務?
你會如何設計一項能可靠儲存及擷取使用者通知的服務?
你會如何設計一項服務,使其在相依項目失效時仍能維持可用?
請逐步說明同一項服務採用較簡單設計與更具擴充性設計之間的取捨。
你會如何設計一項可將大型推論請求排入佇列並加以處理的服務?
你會如何在延遲、成本、可靠性與一致性之間做出取捨?
你會如何設計一項服務,將收到的請求與可提供服務的供應者進行配對?
你會如何設計一項服務,在提供個人化內容的同時,妥善處理故障?
你會如何設計一個在流量成長時仍能迅速回應的專業動態消息來源?
你會如何設計一項服務,用來儲存與擷取頻繁變動的使用者偏好設定?
你會如何設計一項能可靠儲存與擷取大型創意資產的服務?
請設計一項通知服務,並說明你會如何處理傳送失敗與需求變化。
設計一項能在並行更新期間維持商品庫存一致性的服務。
你會如何設計一項服務,在流量不斷變化的情況下提供個人化音訊推薦?
你會如何設計一個在流量成長時仍能維持快速回應的短影音動態消息?
你會如何設計一項讓團隊搜尋及更新共用紀錄的服務?
你會如何設計一項在相依服務故障時仍可持續使用的服務?
你會如何設計一項能接收工作、可靠處理工作並回報狀態的服務?
你會如何設計一項能接收工作、以非同步方式處理,並回報狀態的服務?
如果新資訊推翻了設計中的某項假設,你會如何回應?
你會如何設計一套在元件故障期間仍可維持運作的通知服務?
請描述一個由你負責的系統或功能,以及你如何處理突發問題。
你會如何診斷請求延遲突然增加的問題?
你會如何設計一項能可靠處理付款事件,並可從故障中恢復的服務?
設計一個服務,在處理故障的同時讓使用者資料在多個裝置間保持同步。
說說你設計中的取捨,以及你會如何測試它。
你會如何設計一個服務,用來接收裝置事件、儲存這些事件,並在流量成長時仍支援查詢?
如果事件可能延遲到達或被重複送達,你會對這個設計做哪些調整?
你會如何設計一個支援重試且不會產生重複副作用的 Webhook 傳遞服務?
你會如何設計一個在收集裝置遙測資料的同時控制記憶體使用量的服務?
你會如何設計一個訂房服務,防止並發請求訂到同一份庫存?
技術 (78)
在連線關係會隨時間改變的圖中,你會如何找出最短路徑?
描述一次你與隊友之間的技術歧見,以及你們如何做出決定。
對於必須在並行請求下正確運作的解決方案,你會如何測試?
在關聯式與非關聯式儲存之間做選擇時,你會考量哪些取捨?
你曾如何在維持協作的同時處理技術分歧?
你會如何診斷一項在負載下速度變慢的服務?
考量記憶體使用量時,你會如何在大型集合中找出重複值?
請描述一個由你負責,從問題不明確一路推進至交付的專案。你學到了什麼?
下一份軟體工程師職務中,什麼因素能激勵你?
你會如何在控制記憶體用量的同時,找出大型集合中的重複值?
你會如何測試依賴不可靠外部服務的元件?
履歷上的哪個專案最能展現你的當責精神,而你個人具體交付了什麼?
若要快速查找並控制記憶體用量,你會如何選擇資料結構?
將工作分配給平行處理程序時,你會考量哪些取捨?
請描述一個由你負責的專案、你做過的決策,以及現在會如何改變做法。
你會如何找出並說明偵測有向圖中循環的有效方法?
你會如何判斷一個有向圖是否包含環,並如何說明其複雜度?
你會如何從大型資料流中找出並移除重複值,同時說明記憶體方面的取捨?
請描述你與團隊成員意見不合的經驗,以及你們如何達成可行的決定。
當服務隨著流量成長而變慢時,你會如何診斷問題?
你會如何找出並說明一個能在大型集合中高效處理重複查詢的解法?
在一致性與可用性之間做選擇時,你會考量哪些取捨?
請描述一個由你負責,且期間遭遇意外挫折的專案。
哪一類工程工作能激發你的熱情?哪段經驗最能展現這份興趣?
你會如何判斷鏈結結構中是否存在環,並如何說明方法的複雜度?
請描述一個由需求不明確開始,直到交付都由你負責的專案。
在同步處理與非同步處理之間作選擇時,你會考量哪些取捨?
你會如何從大型資料集合中找出並移除重複值,同時說明你對複雜度的考量?
請描述一個由你負責的專案、你做出的取捨,以及你從中學到的事。
你會如何找出資料流中第一個不重複的字元?你會考量哪些取捨?
請描述一次你與團隊成員意見不合,以及你們如何達成決策的經驗。
你會如何向非技術背景的利害關係人說明複雜的工程取捨?
請描述一個你主動承擔超出指派任務範圍之問題的專案。
如果團隊正在準備發布版本時,正式環境突然出現問題,你會怎麼做?
請描述一次與隊友意見不一致的經驗,以及團隊如何達成決定。
當初步症狀資訊不完整時,你會如何調查正式環境中的問題?
你會如何在控制記憶體用量的同時,從大型資料串流中找出重複項目?
請描述你與協作者意見不合的經驗,以及你們如何做出決定。
當新資訊推翻你原先的技術方法時,你會如何因應?
在控制記憶體用量的同時,你會如何找出大型資料串流中的重複值?
請逐步說明你的解法、其複雜度,以及你會測試的邊界案例。
假設專案需求在接近交付時變更,你會如何重新評估計畫?
你會如何對正式環境中的問題承擔責任,同時讓協作者掌握最新狀況?
在控制記憶體使用量的同時,你會如何找出大型資料流中的重複值?
若需要頻繁查找與依序走訪,你會選擇哪種資料結構?為什麼?
你會如何改善這個可運作解法的可讀性、測試能力與效能?
請描述一個有多種合理解法的技術問題。你當時如何選擇方法?
請描述一次你與隊友意見不合,並最終達成決策的經驗。
你會如何選擇資料結構,以追蹤經常變動的優先順序?
你會如何找出並說明通過網路的最高效率路徑?
在分析可能的解決方案之前,你會如何為模糊的商業問題建立架構?
在管理記憶體用量的同時,你會如何找出大型資料集合中的重複值?
在關聯式資料庫與文件型資料庫之間做選擇時,你會考量哪些取捨?
你會如何在大型集合中找出重複值,又會考量哪些取捨?
請逐步說明你會如何測試並改進這項實作。
請描述一次你在需求不明確時負責推動的專案。
你會如何找出大型資料流中的重複紀錄,並說明時間與空間上的取捨?
對於容量有限的快取,你會測試哪些邊界情況?
請描述一個你在原始任務範圍之外主動承擔問題責任的專案。
你會如何改進這個方案的時間複雜度與空間複雜度?
在一個有難度的專案中,你負責了哪些部分?如果重來你會做哪些改變?
如果要在保留原始順序的前提下移除重複的事件識別碼,你會怎麼做?又會如何測試這個方案?
你曾經如何化解與同事的技術分歧?當時是依據什麼證據做出決定的?
當你主動承擔一個正式環境(production)的問題時發生了什麼事?你又是如何驗證修復方案有效的?
在保持記憶體用量可控的前提下,你會如何為傳入事件的去重選擇合適的資料結構?
你會如何調整事件聚合器,以處理順序錯亂到達的更新?
當某個測試僅在輸入為空時才失敗,你會如何在陌生程式碼庫中定位這個缺陷?
在處理逾時、格式錯誤的回應和重試時,你會如何對接一個分頁 API?
在保留現有行為的前提下,你會如何重構一個剖析器以支援新的輸入格式?
在C++中,當緩衝區在元件之間傳遞時,你會如何明確其所有權?
在編譯器發生變更後,你會如何排查效能回歸問題?
你是如何解決與另一個團隊在技術決策上的分歧的?
當你主導處理一個正式環境問題時,你收集了哪些證據?又是如何驗證你的變更確實解決了問題的?
你會如何合併重疊的可預訂時間區間,又會測試哪些邊界情況?
你會如何在圖中尋找最短路徑,如果邊的權重不同,你的方法又會有何變化?
如果快取的可預訂結果與訂房資料庫不一致,你會怎麼做?
你能描述一次與同事的分歧,並說明你們是如何達成決定的嗎?
你主導的某項變更是否曾引發意料之外的問題,你當時又是如何應對的?