面試問答
Spring Data JPA 使用經驗以及個人的了解
Spring Dat...
從104投遞不到一周由台北HR 聯繫要到高雄線下地點面試,不過由於我住台北我詢問一問是否可以以線上的形式進行,HR安排後
同意,一面的形式有三個階段一開始是個人履歷的分享,接下來是Java知識的詢問,最後是個人提問,總流程是1個小時,由架構師以及主管一起線上面試
面試問答
Spring Data JPA 使用經驗以及個人的了解
Spring Data JPA 是 JPA 的高階抽象,主要透過 extend interface 的方式使用。除了 interface 本身提供的方法之外,還可以用「宣告方法簽名」的方式使用——不用在裡面寫實作邏輯,光靠方法簽名(命名規則)就會在背後被補上實作(這種叫 derived query)。JPA 本身是「規範 + ORM entity 的宣告」,用 entity 去映射資料庫的表與欄位。實際產生實作的是 Hibernate(JPA 的 provider)。最底層走到 JDBC,流程是:載入 driver → 建立連線 → 產生 SQL 述句並帶入參數 → 拿到 ResultSet → 用完關閉/釋放。
有沒有unit test integration test 的經驗以及了解分享
單元測試只測單一模組/單一類別,透過 mock(Java 用 Mockito,不是 mockk)把對外的依賴移除,單純測這個類別自己的邏輯對不對。整合測試則測多個模組之間的交互是否正確;對於第三方的依賴,用 mock(或 mock server)不去打真的,專注驗多模組串起來協作的結果。(我實際做的是:自己擁有的 DB 用真的——Testcontainers 起真 Postgres,只 mock 不擁有的第三方。)
@Transactional 是否了解有使用過
@Transactional 是以類似 AOP 的方式實作:會在符合條件的 bean 外面包一層 proxy。呼叫過程中 proxy 會先開啟交易,方法跑完再根據結果決定整組 rollback 或 commit。預設 rollback 的前提是 unchecked exception(RuntimeException/Error,例如 index out of bounds 這種偏程式邏輯的錯誤)會觸發整組回滾;checked exception 預設不會 rollback,要的話得自己設 rollbackFor。
報表問題
我遇過的問題是:前端用 for 迴圈發出很多 HTTP request(例如日期從 1 號到 31 號各發一次),後端 endpoint 因此被呼叫很多次。所以我請後端工程師提供一個能處理「日期 from–to 範圍」的 endpoint,把多次請求收斂成一次,減少 HTTP request 數量、提升效能。同理,複數使用者查詢的場景,讓 endpoint 接受多個 id,我就能把多筆查詢合併成一個 request。
n+1問題
另一個是資料庫查詢效率的問題:N+1。指的是先查 1 次拿到 N 筆主資料,接著為每一筆又各發一次查詢去拿關聯資料,總共變成 1+N 次查詢,很沒效率。解法是用 JOIN FETCH 或 @EntityGraph 一次把關聯資料撈出來,把 N 次併成 1 次。
由於是碩士在國外讀轉碼碩士why cs
依據個人經驗回答
Spring boot 經驗
我有用過觀念跟 Spring Boot 類似的框架(NestJS),它一樣有 IoC 容器和依賴注入——物件的建立與組裝交給容器,我不用自己 new。分層也一樣是 controller → service → repository。容器內部的概念,是用一個 Map(key 是名稱、value 是物件實例) 來存放這些被管理的物件;當我跟容器要某個依賴,它就從這個 Map 把對應的實例拿出來注入給我。
面試建議
個人覺得雖然104上寫的是歡迎新鮮人不過並不歡迎由於目前經驗關係 Java 並沒有使用再side project或是工作上產出,不過由於使用nest.js 的經驗一樣是DI 透過 decorator 的方式去注入 最後再configuration 層去註冊 provider 類似於 spring boot IOC 容器跟BEAN 的邏輯, 以及之前有段經驗是Kotlin 使用hilt 做依賴注入,我準備了一周Java相關的知識為了這個面試當中也沒投遞其他職缺,但很明顯面試官並不買帳對我的背景也不關心走個過場隨便問了幾個問題BQ也沒提問匆匆結束,結果十分寒心原本一個小時的面試40分鐘就結束,所以建議後來來面試的朋友們要準備Java Spring boot的經驗甚至有transactional 的經驗以及最好有很相關的經驗不然還可能要去高雄一趟不少車資然後也是浪費時間還得到類似的感覺