面試問答
Java中 == 和 equals 有什麼差異
== 比較傳址,eq...
會有兩關面試
第一關會有技術面試以及HR 資訊分享
流程如下:
1. 自我介紹
2. 針對使用到技術詢問並給
予建議
3. 面試官會從基礎Java, Spring 知識, DB, Redis知識, Kafka MQ, 系統設計一路問下去
4. 人資介紹公司以及期望薪資
HR和面試官都蠻好的,面試官對於你的回答如果有答對會給予正面的反饋和反應,如果沒有答正確也會跟你說明應該要怎麼做,算是面試時知道自己哪裡不足的一個蠻好的反饋並可以去補強自己
另外會有需要跟海外同事合作,公司算是遊戲服務提供商,並不是直接接觸平台服務,算是相對更安全
面試問答
Java中 == 和 equals 有什麼差異
== 比較傳址,equals是比較值
String string1 = "123"; 和 String string2 = new String("123"); 的差異
string1 是將字串儲存在String Pool 中重複使用
string2是直接新增一個字串在新的空間中
兩者的址不一樣
需要使用equals 比較才會一樣
如果有兩個相同型別的物件,裡面只由一個參數是不一樣的該怎麼讓他判斷為一樣
VO class {
private Integer id;
private String name;
private String subName;
}
假如只有subName不一樣,要讓他比較成為一樣的物件
就需要Override equals
比如
@Override
public boolean equals(VO vo) {
return this.vo.getId.equals(vo.getId) && this.vo.getName.equals(vo.getName);
}
有沒有使用過Redis,知不知道Lock如何實作
說明專案內的情境
1. 併發時請求進來先去搶Redis 的key 並上鎖
2. 搶到鎖的請求先將DB 資料改為處理中,讓後續的請求遇到處理中也會被打回去
3. 釋放鎖,避免鎖遇到網路問題永久鎖死,真實狀態還是依照資料庫為主
有沒有使用過MQ,實作情境是什麼,如果是扣款系統怎麼保持唯一性不重複扣款
1. 有使用過,大多是刷新Server的 Memory Cache
2. 傳遞訊息時會多帶一個唯一值,比如訂單編號,在設計一張table紀錄是否實作過以及實作過的狀態是什麼,如果已經扣款了就不重複扣款
知不知道Spring的DI, Ioc, Reflection,並說明底層原理
1. 名詞解釋DI, Ioc
2. Reflection我忘記了
3. 實作原理沒有摸熟
知道索引嗎,優缺點是什麼,慢查詢怎麼處理
1. Index 設計在欄位上可以加速查詢,但相對的新刪修速度會慢很多
2. 說明之前生產上再遇到情況,利用DB 的執行計劃查詢,查看執行結果哪邊會有回表問題,複合索引沒有符合最左匹配原則導致失效,以及查詢語法需要修正
設計模式,如果有個支付系統需要設計該怎麼設計Service層的呼叫
配合策略模式以及工廠模式
先做一個Payment的介面並讓後續各類實作的支付功能去繼承,各支付功能需要設定對應的Enum並取得
再來建立一個工廠模式,模式中使用建構子注入 List<Payment> 這邊Spring 會注入所有繼承的支付功能Service 並讓List<Payment> 轉換成Map<Enum, Payment>
支付Service層只需要帶入支付對應的Enum呼叫工廠模式中的支付實作
未來擴充也只需要新增Enum並繼承Payment和實作內容即可
面試建議
需要多了解基礎Java, Spring, DB, Redis, MQ, 設計模式以及大型分布式系統架構下該如何設計流程保持冪等性