A: 你之前專案 Spring boot 哪一版
M: 照實回答
(會根據妳的過往經驗去做延伸,所以要講自己會的東西)
A: Jenkis怎麼使用
M: 之前都是跟 devops team 合作,提交公版的 pipeline 最後實際操作 build + deploy
A: build 用什麼做,deploy 流程是什麼
M: build 使用 script 去執行 maven 包版,然後再把 deploy 的 image 拿去 OCP 上做部署
`(因為這個 team 是自己架 jenkis 所以會問比較細的)`
A: 上版包版的流程是什麼
M: 我們會把 code 推到 gitlab,然後請 SP 執行 script 去撈 code 並打包成 image ,然後會部署到 OCP 環境,接著把流向引導至新服務,舊服務則關閉
A: 之前用哪一版的 java
M: java 8
A: 知道 java 8 之後的版本有什麼新的東西嗎
M: 我知道 java 21 有出 virtul thread,可以提供 JVM 適合的 thread 並且不吃 CPU,然後 interface 在 java 9 有推出可以實作的方法,以前都只能定義介面裡面的方法
A: 有用過transactional嗎
M: 只有自己做過,使用 spring boot 的 annotation 方式,指定 class 並且模擬當錯誤的時候是否會 rollback
A: 如果有ab method都被標註@Transactional,a method會 call b method,但今天 b method 有問題,請問 a method 也會 rollback 嗎
M: 這塊我就沒有實做過,但我認為 a method 也會跟著 b method 一起回滾
(這個建議自己做一遍)
A: 知道 design pattern 嗎,可以講幾個來聽聽嗎
M: 最常用的是單例模式,建置API接收的底層就是用這模式,確保整個JVM只有一個實例,另外就是工廠模式,在許多地方會用到很多 if else 判斷要實例哪一個物件,透過工廠就可以將抉擇的行為交由各物件,這樣可以減少動態的生成物件以及減少 if else 行為
A: 之前怎麼做權限控管
M: 我們使用兩個方法做控管,第一個是 spring security 去做 url 檢核,接著我們將主管跟非主管的角色寫在 DB 內,當取用的時候依照交易去決定是否有權限
B: Procedure debug 怎麼做
M: 因為當初有限定 procedure 不能寫太長,限制 30 行內,有多的就要拆開,所以 debug 來講還沒有遇過特別要注意的
B: 會問這問題是因為我們的 code 裡面很常會看到超過 50 行的,甚至幾百行,所以才會這樣問有沒有相關經驗
B: 正向代理跟反向代理
M: 反向代理就是當前端送需求後,會有一個server 負責做轉導,防止前端直接打到後端去。正向代理就是使用者透過一個代理 server 去到目標 server,這樣使用者的 server 位置就不會暴露
A: Aop是什麼
M: 他是一個切面,可以指定任一個方法在執行前或後去做方法的執行,我常用來當作是 log 的撰寫,API收到後寫一筆紀錄,傳回去前也再寫一筆紀錄
A: 有用過aop的什麼method
M: 這個不太熟
A: 那你有聽過 @PointCut 嗎
M: 有,就是用來描述要執行的方法
B: Spring mvc跟spring boot差異
M: spring boot 就像是到一個汽車模組,可以直接拿到輪胎、引擎、車框組好一台車,spring mvc 有一些就要自己去刻,另外 spring boot 也可以快速引入套件並且都會事先寫好預設的配置
B: 請跟我說明這張考卷內的題目你會怎麼解
M: 照實回答
(題目都是邏輯題,沒有程式)
B: Ioc是什麼
M: 以前管理物件的生命週期都是工程師自己決定,spring 出現後可以把物件交給 spring 做管理,當需要用到這個 bean 的時候,可以用 autowired 做引入,把生命週期交給 spring 就是 IOC
B: 如果要對日期做排序並且取第一筆或最後一筆怎麼做
M: 可以對日期欄位做 order by 然後做 fetch row num = 1 的
B: Order by 跟 row num執行順序
M: 我覺得會先執行完 order by 然後再做 row num
B: 介紹易遊網公司
B: 這個職缺 team 做會員相關,所以可能會碰到金流或是會員權益問題, 1/3 都在維運,會有後端工程師跟前端工程師(react)以及 UI,資料庫是 oracle、PostgreSQL,這個位置只會碰到後端,套件管理有用到 maven 以及 gradle
因為 jenkis 都是這個 team 自己做,沒有 devops 都自己來,爾偶遇到 server 韌體更新就要遠端檢查,基本上沒再加班,加班都是給兩倍的補修,但薪資就比較少不過事情也比較少
M: 需求來源
B: 看樓下的 PM 有沒有提需求,通常需求是不用加班也可以做得完的,也是會有大改版,但上次大改版做過了,所以近期應該就穩穩地
M: 為什麼選擇用 mybatis 而不是用 JPA 跟 JDBC
A: 因為當初專案內的 sql 過於冗長就不適合用 jpa 或是其他套件,所以我們就決定用 mybatis 這樣分離起來我們覺得比較好做