2020.9.25位元組跳動後端實習一面面經

2020-09-28 12:01:48


前言

第一次面試,感覺網路很流暢、面試官很帥、聲音很好聽、氣氛很融洽,所以決定再投幾家,再面幾次。


一、自我介紹

介紹了一下性格,愛好,然後又說了一下做過的專案。

二、挖專案

1、看到你用過unity3D,C#寫的程式碼上線後怎麼做到擴充套件(熱部署)?

答:本地跑的,沒考慮過上線,但是SpringBoot做過熱部署。。尬

InjectFix

2、仿餓了麼專案怎樣部署上線的?

答:當時為了簡單,就直接打了jar包,在雲伺服器上直接跑了。專案做完知道可以用Docker,但是沒有用過。。

3、這個專案在做的時候考慮到流量控制和服務降級了嗎?

答:餓了麼這個專案在做的時候沒有考慮,但是後面的dubbo專案考慮到了。服務降級:我們有五大模組,比如對於下訂單時突發的大流量,我們直接返回一個「當前人數過多」的資訊來拒絕服務,保證不會發生服務雪崩。
流量控制:用到了漏桶和令牌

4、你知道漏桶和令牌的區別嗎?

答:漏桶的流速穩定,令牌桶允許有小的高峰

5、看見你寫到了專案過程中用了騰訊會議?

答:疫情期間沒法來學校,就線上上做,用騰訊會議每天開個小會,確保專案進度。

6、聊天室用了什麼框架寫的,SpringBoot?

答:純Java。。
有什麼架構麼?
答:BIO模型。但是由於BIO模型有缺點(執行緒太多)考慮過NIO模型,但是沒改好。。。

7、專案中協定?

答:定義了訊息頭:13個位元組:type\src\desc\length

8、這樣做有沒有擴充套件性問題?

答:有。發現後面跟的封包如果有多個變長的不同型別資料,就要每個資料多加一個length,很麻煩。
想過怎樣改進麼?
答:不知道咋改。。。

三、計算機網路

9、TCP UDP區別

答:TCP面向連線,UDP無連線。TCP安全,UDP不安全。

10、你的專案裡寫的UDP傳檔案,你怎樣保證安全的?

答:發的封包搞一個序號,收到貨迴應,正確發下一個,不正確就重傳。

11、這樣做和用TCP/IP相比哪個更好一些?

答:我認為各有優缺點,但是更傾向於UDP。因為當傳送大檔案時,TCP是有限制的,UDP雖然要重傳,但是沒有速度限制,不需要考慮其他使用者(自私一些)。並且UDP的重傳是和每個封包的大小有關係的,一般10K以內都是可以的,我把封包的大小相對的設定小一點,降低重傳的概率。我認為這樣做可以抵消掉UDP的缺點。

12、講下擁塞控制

答:忘了。。。(我是傻屌,上週剛看過)
https://blog.csdn.net/qq_41431406/article/details/97926927

四、Java

13、講下OOM,為什麼會OOM,怎樣去排查?

這個問題我回答的賊亂,因為前幾天看過別人面經裡面有這個題,然後專門去百度了一下,然後發現看不懂,,,就隨便滑了過去。。。
https://blog.csdn.net/weixin_41835916/article/details/81558310

14、JVM記憶體結構裡面都有啥?物件放在哪?

答:有堆、棧、方法區(半年前看的沒複習忘完了)
JVM專欄
https://www.cnblogs.com/wangly/p/12853236.html

15、HashMap知道吧,new 一個HashMap的初始大小多少?

答:我之前學HashMap的時候是自己用陣列+連結串列實現的,大小是動態的。專案裡面用HashMap時沒關注過初始大小。。。

16、雜湊表擴容時rehash怎麼做的,裡面演演算法啥?

答:忘了。
(hashmap的原始碼上週粗略的看了一下。。。不深入=沒看)
https://www.jianshu.com/p/13c650a25ed3

17、hashMap在JDK1.7中和JDK1.8中的區別

答:JDK1.8加了一個紅黑樹,當超過一定的值時就把下面的鏈轉成紅黑樹,提高效率.

18、超過多少轉紅黑樹?

答:8

19、為什麼是8?

答:設計者經過大量測試,得出超過8的概率已經為千萬分之1,為了效能就以8為界,超過8的就轉成紅黑樹。

20、HashMap執行緒不安全,那麼你知道JDK做了哪些改進嗎?

答:我知道有correntHashMap。
再說幾個?
答:想不起來了。。。

21、知道CopyOnWrite嗎,咋保證執行緒安全的?

答:知道名字但是原理忘了。

CopyOnWrite只有寫入互斥,其他的都是共用的,它會建立新的副本,當讀的時候,讀到的是老值。假如寫的時候讀,由於讀取是讀的原來的內容,雖然寫入會改變值,但是不會影響到讀

五、撕程式碼

22、寫個先序遍歷非遞迴

我竟沒寫出來。。。
https://www.cnblogs.com/zhi-leaf/p/10813048.html

23、實現字串轉int

我的思路是轉成char之後用ASCII碼減,然後乘10的次方。
原題:劍指offer67(我才做到18)


六、總結

作為人生中的第一次面試,收穫還是挺大的。
首先是對於之前的學習態度:學習沒有深入,沒有耐心。面試官總是會從一個點往深處去挖,一些細小的知識點,雖然見過,但是沒有在意,就會答不上來。
對於知識,面試官考察的內容都是見過的,通過這次面試,明確了要複習的範圍。重點就是JVM、計網、作業系統、並行
對於專案,要多注重專案的思考。以後的專案要儘量考慮做到上線,以及上線後的效能優化處理。(所有的專案,面試官都問了,怎麼上線,所有的回答都是沒有上線,本地跑。。○| ̄|_)