date: 2020-04-02
原本打算是一面和二面的面經寫在一起,對照參考一下,不過比較出乎意料的是二面僅僅問了一面里沒答上來的問題,然后做了兩道算法題。
一面
2020年3月23日
一面面試官人很好,很有耐心,問了特別多東西,整場面試下來花了有 100 分鍾吧。
先上來就是普通的自我介紹,然后講一下項目。下面是我整理的問題,包括項目中問到的還有額外問的。
Web
我簡歷上寫了一個前端項目,所以先問了一些前端的技術。
- 為什么使用 Vue?
- MVC?不會
- 有沒有用過 jsp?沒有
- 有沒有使用過 js 庫?為什么使用它?jQuery
- 講一下 jQuery 的選擇器?
- 有沒有用過其他庫?Swiper
- 為什么使用 Swiper?遇到了什么問題?有沒有嘗試過解決?自己嘗試過,比較復雜而且效果沒有 swiper 好
- GET 和 POST 的區別?POST 能不能完全取代 GET ?后面這個沒給出面試官滿意的答案
Java
我主要的項目都是 Java,所以這方面問得比較深,幸虧准備充分,大部分都答得上來。
- 三次握手和四次揮手(問了 SYN、ACK 這些詞),為什么揮手要四次?大致答上來了,但思路有點亂,感覺答得不算好
- 視頻過程中斷線了怎么辦?延遲怎么辦?使用 4G 時 ip 地址發生變化怎么辦?這幾個問題是我當時做項目時沒有考慮到的,的確啟發很大
- 為什么嘗試用 UDP 實現 TCP?
- 講講垃圾回收機制?這塊掌握的還是比較熟的
- Java 反射機制?不會
- 講講類的加載?為什么用雙親委派模型?
- 進程和線程的區別?這個的確是我的弱項,答得不太好
- 如何實現進程間通信?只了解一點點
- 異常和錯誤的區別?舉幾個遇到過的異常?內存溢出屬於什么?為什么內存會溢出?不太熟悉,有些點答錯了
try...catch...finally
的執行順序?如果有一個i
,try
內令i = 1
,並return i
,finally
內令i = 2
,最后返回多少?為什么?1
。先返回值,然后執行finally
,再結束調用。- 數據庫?不會
C++
專業課學的是 C++,面試官隨口問了點。
- 虛指針表是什么?它有什么用?
- 多態有什么用?舉個例子?
不得不說這輪面試問的的確有點多,有些問題我已經記不起來了,差不多花了有七八十分鍾。
之后是一道很簡單的算法題,給了 25min
給定一個 n,生成一個 n*n 的二維數組,從左到右從上到下為 1 ~ n*n 。按照例中的路徑依次輸出,例:
輸入:4
數組:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
輸出:
1 5 2 3 6 9 13 10 7 4 8 11 14 15 12 16
斜着輸出,判斷一下邊界條件就好,不難。
二面
2020年4月1日
二面其實沒啥可寫的,單純問了一遍一面中沒答好或者答錯的幾個問題,然后給了兩道算法題,這里直接貼題吧。
題一:
給定一個未排序的整數數組,找出最長連續序列的長度.
輸入: [100, 4, 200, 1, 3, 2]
輸出: 4
解釋: 最長連續序列是 [1, 2, 3, 4]。它的長度為 4。
LeetCode 上有相同的題目,解法很簡單,這里不再贅述。
題二:
你有一個數據緩沖區,一開始它是空的,現在你要執行 q 次操作,操作共分兩種:
opt=1:新添加一個整數至緩沖區
opt=2:輸出緩沖區內所有整數的中位數,沒有整數則輸出-1,要求保留一位小數
時間復雜度要求:添加操作O(logn),輸出操作O(1)
首先輸入一個整數表示要執行的操作數 q,之后輸入 n 行,每行 1 或 2 個整數。
例:
輸入:
5
2
1 1
2
1 2
2
輸出:
-1
1.0
1.5
這題沒有找到原題,靠記憶還原了一下,樣例是自己設計的。功能的實現並不難,主要要考慮時間復雜度。當時時間比較緊張,兩題只給了20分鍾,一時沒有想到好辦法,所以簡單地通過維護一個有序數組來實現,不過數組的插入操作時間復雜度到不了 O(logn)
。
總結
總的來說面試的感覺還是挺不錯的,面試的時候如果有不會的可以大方地告訴面試官你不了解,一般不會為難你,當然不要啥都不會,那肯定涼涼。
這次面試中也發現了很多自身的不足,知識儲備還是不足,算法也很薄弱,收獲還是頗豐。
我也不太會寫總結,就這樣吧,默默等二面的結果。