微信支付面試等了好久,之前面過一次,結果現在到官網流程了,好迷。。。不知道是一面還是二面,本來是牛客視頻,結果面試官網絡不好,牛客寫完代碼後換電話了。
面試題
1、上來就做題!都沒自我介紹!?
公司員工每天上下班需要進行打卡操作,工作時間爲早上9點到晚上5點。遲到或者早退半小時當天按曠工處理。hr能查看所有員工的打卡信息,員工只能查看自己的打卡信息。
請編寫一個能支持以上場景的程序。
/**
* 以下代碼是簡單僞代碼實現
* 當時沒有考慮併發,面試官沒有提
*/
public class Time {
private DataTime firstTime;
private DataTime lastTime;
public void setFirstTime(DataTime firstTime){
this.firstTime = firstTime;
}
public void setLastTime(DataTime lastTime){
this.lastTime = lastTime;
}
}
Public class Person{
private Time personTime;
private boolean isLate;
// 僞代碼
public void firstCall(){
personTime.setFirstTime(currentTimeMillis());
//如果超過九點半則記爲曠工
if(currentTimeMillis()){
this.isLate = true;
}
}
// 僞代碼
public void lastCall(){
personTime.setLastTime(currentTimeMillis());
//如果早於下午4:30就記爲曠工
if(currentTimeMillis()){
this.isLate = true;
}
}
//hr獲取打卡時間
public Time getTime(){
return this.personTime;
}
//獲取是否曠工
public boolean isLate(){
return this.isLate;
}
}
2、項目介紹、難點
項目階段全程我在說,說完之後問了一下細節,爲什麼消息隊列使用Redis,有了解過其他的嗎
我提了一下Rabbitmq
3、項目中的sql優化問題
1、索引優化
2、聯合查詢優化
4、索引底層實現,爲什麼採用B+樹實現?
1、B+樹
2、多路搜索、數據在葉子節點,契合磁盤存儲原理,局部性原理和預讀取
5、那你知道B+樹是幾層嗎?
讀者可以參考這篇文章:https://blog.csdn.net/qq_41999455/article/details/104946754
6、MySQL事務有用過嗎?
講了一下幾種隔離級別的使用
7、那語言這塊用什麼多一些?C++寫過嗎?
因爲我簡歷上寫了Java C++ Go,但是Java用的最多,C++沒有寫過完整項目。。。
8、Java中的map有哪些?
HashMap hashTable
9、它們之間什麼區別?
1、線程安全問題
2、擴容機制不同
3、Hash值計算不一樣
4、HashMap允許null做鍵值,hashtable不允許null做鍵值
10、有了解過Java中的NIO嗎?原理是什麼?
1、基於直接內存實現
2、NIO底層原理,同步非阻塞的IO模型,它是面向緩衝區的
11、Java的內存數據區介紹一下
講了一下Java的運行時數據區,各類數據存儲
12、Linux中的IO多路複用知道嗎?講一下
從select、poll、epoll詳細說了一下底層實現
這一塊希望讀者可以深入瞭解一下,與內核相關
13、分佈式有了解過是吧?知道分佈式事務嗎?CAP?講一下
1、分區容錯性、高可用性、數據一致性;
2、三者不能同時滿足,一般的分佈式系統都會優先滿足高可用、放棄強一致性選擇最終一致性
3、從單應用架構的事務說起,介紹分佈式事務的出現意義,目前分佈式事務常用的2PC、3PC都講了一下
14、除過2PC、3PC還有什麼協議算法呢?
paxos算法以及zookeeper使用的ZAB協議算法
15、有實際場景應用過嗎?
16、前端用過是吧,能說一下嗎?
後臺開發問我全棧。。。
前端都是很久之前寫過的簡單頁面了。。。
17、那你知道目前哪些組件、框架比較好嗎?
提了一下vue,我沒用過。。。
18、編譯原理學過了嗎?
還沒有,這學期纔開。。
19、那今天就這樣吧,後續會有人聯繫你下一面。