Skip to content

程式設計

共 1 條筆記


2026-01-16 09:51

您的瀏覽器不支援 audio 元素。 📑 智慧總結 錄音資訊 時長 :約 0小時47分鐘 參與人數 :約 4人 內容型別 :工作會議 錄音總結 本次為技術面試,包含編碼和系統設計兩部分,面試官介紹規則後,候選人嘗試用Java編寫HTTP請求程式碼,後轉為模擬實現,接著討論將功能轉化為生產級URL抓取服務的設計思路。 面試開場與規則說明 * 面試流程與時長 :面試總時長45分鐘,其中35分鐘為技術部分,首尾各5分鐘供候選人提問。技術部分包含編碼和系統設計兩部分,旨在考察候選人多方面技術能力的早期訊號。 * 技術環境與限制 :候選人可使用Google搜尋文件,但禁止使用任何AI工具。候選人首選Java語言,需確認是否已準備好開發環境。 編碼環節:HTTP請求實現 * 初始實現思路與挑戰 :候選人計劃編寫一個靜態方法傳送HTTP請求,需要URL引數並進行檢查。由於Java的HTTP請求相對複雜,候選人表示可能需要搜尋相關類和引數,面試官允許搜尋,並提出若過複雜可模擬響應。 * 模擬實現方案 :候選人嘗試使用HttpURLConnection等類,但遇到“Protocol doesn’t support input”錯誤。面試官建議建立自定義模擬HTTP客戶端,忽略實際HTTP庫除錯,模擬返回URL和響應體,候選人接受並開始編寫模擬程式碼。 * 併發處理考慮 :針對輸入為URL列表的需求,候選人考慮到需要支援併發請求與響應,提出同步處理、回撥或掛起兩種方案,初步傾向於使用回撥,並考慮使用執行緒和執行緒池(ExecutorService)來最佳化效能,處理大量URL(如10,000個)。 系統設計環節:URL抓取服務生產化 * 需求澄清與核心目標 :將URL抓取功能轉化為客戶可用的API服務,需處理每天數百萬次頁面抓取。服務需提供端點供客戶呼叫,客戶傳送包含目標URL列表的請求,服務返回對應抓取結果,需保證服務的健壯性和可靠性。 * 使用者與流量特徵 :候選人詢問使用者是否分佈在全球,以考慮響應相關因素;面試官提出需處理突發請求,如高峰期10,000個客戶端同時傳送請求的場景。 * 架構元件初步設想 :候選人初步設想包含API層、快取(如Redis)、資料庫(如PostgreSQL)、搜尋引擎(如Elasticsearch)等元件。快取用於提高熱門URL的響應速度和命中率,資料庫可能用於儲存業務邏輯資料(如URL流行度排名),搜尋引擎用於相關搜尋功能。 * 流量控制與最佳化策略 :針對流量控制,候選人提出滑動視窗、令牌桶等限流方案,如設定每個使用者每分鐘最多10個請求,以防止系統濫用。針對高併發和吞吐量,強調快取(Redis)的重要性,可重用相同URL的請求結果,減少後端負載,同時考慮使用多臺伺服器,並透過Redis實現集中化快取管理。 服務設計細節探討 * 資料庫儲存內容 :面試官詢問PostgreSQL的儲存內容,候選人推測可能儲存URL字串、請求計數及流行度等資訊,用於排序和熱門資源最佳化。 * 客戶端請求處理流程 :客戶透過端點指定要抓取的URL列表,服務需返回這些URL的抓取結果。候選人考慮到需設計健壯的端點來支援該流程。 候選人提問環節 * 崗位職責與日常工作 :候選人詢問該角色的日常工作內容。面試官表示職位為通用後端崗位,尚未確定具體團隊,日常工作遵循敏捷實踐,多數團隊採用 sprint 流程,包括每日站會。高階成員需驅動專案、解決自身及團隊問題、指導初級工程師,並與經理和首席工程師溝通技術難點。 * AI工具使用情況 :候選人詢問團隊在日常工作中是否使用AI工具。面試官確認會使用,團隊在AI工具方面投入大量資源,產品中有類似Bubl和B Depth的功能,也會使用Cursor、Gemini等多種模型和工具。 📅 章節概要 00:01:02 候選人開場問候 候選人以“Hello yeah hello yeah great I’m glad to join them the interview today yeah good good yeah.心裡有。”開場。 00:01:27 面試官背景與環境干擾說明 面試官表示自己住在悉尼,併為狗叫聲道歉,稱“the dog I’ fine”。 00:01:50 面試流程與技術部分說明 面試官歡迎候選人並感謝其時間,介紹這是技術面試,包含編碼和系統設計兩部分,旨在考察多方面技術能力的早期訊號,說明45分鐘面試中35分鐘為技術部分,首尾各5分鐘供提問。 00:02:56 程式語言與開發環境確認 面試官詢問候選人首選程式語言,候選人回答Java,面試官確認無問題,並詢問是否已準備好開發環境。 00:03:11 搜尋與AI工具使用規則 面試官告知候選人可使用Google搜尋文件,但禁止在本輪面試中使用任何AI工具,候選人表示理解。 00:03:35 面試官自我介紹與螢幕共享請求 面試官自我介紹名為Jeremy,已在公司工作四年以上,詢問候選人是否準備好,請求共享螢幕開始面試,候選人同意並共享整個螢幕。 00:05:35 編碼題目:URL列表的HTTP GET響應 面試官提出編碼題:編寫函式,輸入URL列表(如Google.com、ALA.com),返回對應GET請求的響應。允許使用HTTP庫,提及Java的HTTP請求較複雜,詢問候選人是否有同感。 00:06:16 候選人對題目難度的反饋與開始編碼 候選人表示可能需要搜尋HTTP請求相關的類和引數,但會嘗試。面試官允許搜尋,並提出若過複雜可模擬響應,即假設傳送請求並獲取響應,候選人表示理解並詢問是否可開始寫程式碼,得到肯定答覆。 00:07:14 編碼思路:方法定義與引數檢查 候選人計劃編寫一個靜態類中的方法傳送請求,可能需要URL引數並進行檢查,提及IDE有相關建議。 00:07:49 HTTP客戶端選擇與配置 候選人考慮使用HttpClient和HttpRequest類,提及不需要過多配置即可傳送請求,需要配置請求的URL等引數。 00:09:55 模擬實現的進一步確認 候選人在編寫程式碼時遇到困難,面試官再次確認若複雜可模擬,即傳送請求時僅模擬傳送和接收響應的過程,候選人表示理解。 00:11:19 程式碼實現嘗試與錯誤處理 候選人嘗試編寫程式碼,包括連線、傳送請求、獲取響應碼和訊息,提及可能需要處理JSON專案,列印響應資訊。後遇到錯誤,考慮是否需要使用客戶端還是直接用HttpURLConnection。 00:15:35 從實際實現轉為模擬實現 由於程式碼執行報錯“Protocol doesn’t support input”,面試官建議忽略該部分,建立自定義模擬HTTP客戶端,返回URL和虛擬響應體,避免除錯整個Java庫,候選人同意。 00:18:58 URL列表處理與併發考慮 針對輸入為URL列表的需求,候選人考慮使用列表儲存,並意識到需要支援併發請求與響應,提出同步處理、回撥或掛起兩種方案,傾向於使用回撥,考慮使用執行緒和ExecutorService。 00:22:42 執行緒與效能最佳化討論 面試官詢問僅建立一個執行緒處理所有URL是否足夠,例如10,000個URL時,候選人意識到需要多執行緒,計劃使用執行緒池(ExecutorService),但表示不確定如何使用,可能需要搜尋。 00:28:48 系統設計題目:POC轉生產級服務 編碼環節後,面試官提出系統設計題:將剛才的功能(POC)轉化為客戶可用的API生產服務,每天處理數百萬次頁面抓取。候選人詢問POC的具體含義。 00:30:18 服務需求與客戶端場景澄清 候選人理解POC為概念驗證,現需轉化為正式服務,詢問是否存在客戶端,面試官確認服務需提供端點,客戶傳送包含目標URL的請求,獲取抓取結果,候選人進一步詢問使用者是否分佈在全球。 00:32:27 服務功能與架構初步設想 候選人設想服務包含API層、快取(Redis)、資料庫(PostgreSQL)、搜尋引擎(Elasticsearch)等元件,快取用於熱門URL提高響應速度,資料庫可能儲存業務邏輯資料(如熱門URL排名)。 00:35:54 突發流量處理與限流方案 面試官詢問如何處理突發請求,如高峰期10,000個客戶端同時傳送請求,候選人提出滑動視窗、令牌桶等限流方案,如設定每個使用者每分鐘最多10個請求,防止系統濫用。 00:38:36 快取與吞吐量最佳化 候選人強調快取(Redis)可重用相同URL請求結果,減少後端負載,提高響應速度,對於多臺伺服器,Redis可作為集中化快取源,提升整體吞吐量。 00:41:11 資料庫用途探討 面試官詢問PostgreSQL儲存內容,候選人推測儲存URL、請求計數、流行度等資訊,用於排序和熱門資源最佳化,提及PostgreSQL查詢較重,需結合技術優勢避免劣勢。 00:43:32 候選人提問:崗位職責與日常工作 候選人詢問該角色的日常工作,面試官表示職位為通用後端崗位,未確定具體團隊,日常遵循敏捷實踐,多數團隊採用sprint和每日站會,高階成員需驅動專案、解決問題、指導初級工程師,與經理和首席工程師溝通技術難點。 00:45:44 候選人提問:AI工具使用情況 候選人詢問團隊是否在日常工作中使用AI工具,面試官確認會使用,團隊在AI工具投入大量資源,產品中有類似Bubl和B Depth的功能,也使用Cursor、Gemini等多種模型和工具。 00:47:02 面試結束與告別 候選人表示沒有其他問題,感謝面試官時間,雙方互相道別,面試結束。 ✨ 金句精選 “Java is quite complicated to to start a http call.” (方法技巧) “If it’s too complicated, we can just mock the response.” (執行策略) “The requirement is we will have a list of urls and you have a list of responses.” (執行策略) “To optimize the performance, just use the multiple threads.” (執行策略) “We want to productionize it, we want to make it a proper service.” (戰略洞見) “Consider the response, I mean, are they all around the world?” (戰略洞見) “To control the flow, to control the traffic, like sliding Windows or bucket control solutions.” (執行策略) “If some requests are exactly the same, we can reuse them as a cache.” (執行策略) “We do agile practices, most teams follow sprint and daily stand up.” (執行策略) “We are heavily investing resources in AI tooling.” (戰略洞見) 📋 待辦事項 候選人:完成模擬HTTP客戶端程式碼,實現處理URL列表並返回響應功能。 候選人:設計將URL抓取功能轉化為生產級服務的詳細架構方案,包含快取、資料庫、限流等元件。