前言
經歷了兩次面試,記錄一下
XX銀行
1.自我介紹
說了一下專案經歷,專案主要功能,專案負責部分,專案技術棧
2.處理過的專案中最難的一點是什麼
說了一下問卷系統匯入答卷部
3.你的多執行緒處理在併發情況下會出現什麼問題。
4.jvm熟悉嗎?(不熟悉)
5.專案中除了mysql還用了哪些資料庫。(h2)
6.mysql中左連結,排序,倒序,組合(Group by)關鍵字是什麼
7.在excel表資料處理時除了欄位校驗外還要注意什麼?(不知道想問什麼)
8.資料流怎麼關閉的
9.String StringBuilder StringBuffer區別。
北京某科技公司一面
1.自我介紹
2.筆試演算法題覆盤
3.http與https區別,https的請求過程是怎麼樣的。
4.你後臺介面怎麼實現的
5.如果不使用框架,怎麼實現一個後臺介面?(提示socket)
6.nginx主要解決什麼問題,如何解決的,什麼是同源,如果不用nginx能不能解決,怎麼解決
7.關係型資料庫和非關係型資料庫分別舉例,兩者區別
8.事務有什麼好處,怎麼保持的資料一致性
9.索引在哪用過,索引底層是什麼,索引怎麼通過b+樹查資料的(不是一條資料),b樹與b+數區別,聯合索引怎麼通過b+樹查資料
10.伺服器是如何處理併發請求的,如果讓你設計,怎麼設計,伺服器處理一個請求建立一個執行緒還是程式,執行緒和程式區別,併發與並行區別。
11.學校成績。
這家面試明顯感覺到問題更有深度,更偏向對知識的思考。
save方法的併發問題
@Test
void saveUser() throws InterruptedException {
List<User> users1 = new ArrayList<>();
List<User> users2 = new ArrayList<>();
for (int i = 0; i < 50; i++) {
User user = UserControllerTest.getOneUser();
users1.add(user);
user = UserControllerTest.getOneUser();
users2.add(user);
}
new Thread(() -> {
for (User user: users1) {
this.userRepository.save(user);
}
}).start();
new Thread(() -> {
for (User user: users2) {
this.userRepository.save(user);
}
}).start();
Thread.sleep(10000);
Assertions.assertEquals(this.userRepository.findAll().size(), 100);
}
測試了一下,並沒有什麼問題。