字節跳動
- ?試前
- ??
- ??
- ?結
?試前
頭條的?試是三家?最專業的,每次?試前有專?的HR和你約時間,確定OK后再進??試。每次都是通過視頻?試,因為都是之前都是電話?或現場?,所以視頻?試還是有點不?然。也有?覺得視頻?試體驗很贊,當然蘿??菜各有所愛。最坑的??的時候對??試官的?絡?是掉線,最后很冤枉的掛了(當然有?些點答得不好也是原因之?)。所以還是有點遺憾的。
字節一面:
- 先?我介紹下
- 聊項目,逆向系統是什么意思
- 聊項目,逆向系統用了哪些技術
- 線程池的線程數怎么確定?
- 如果是IO操作為主怎么確定?
- 如果計算型操作?怎么確定?
- Redis熟悉么,了解哪些數據結構?(說了zset) zset底層怎么實現的?(跳表)
- 跳表的查詢過程是怎么樣的,查詢和插?的時間復雜度?(說了先從第?層查找,不滿?就下沉到第?層找,因為每?層都是有序的,寫?和插?的時間復雜度都是O(logN))
- 紅?樹了解么,時間復雜度?(說了是N叉平衡樹,O(logN))
- 既然兩個數據結構時間復雜度都是O(logN),zset為什么不?紅?樹(跳表實現簡單,踩坑成本低,紅?樹每次插?都要通過旋轉以維持平衡,實現復雜)
- 點了點頭,說下Dubbo的原理?(說了服務注冊與發布以及消費者調?的過程)踩過什么坑沒有?(說了dubbo異常處理的和打印accesslog的問題)
- CAS了解么?(說了CAS的實現)還了解其他同步機制么?(說了synchronize以及兩者的區別,?個樂觀鎖,?個悲觀鎖)
- 那我們做?道題吧,數組A,2*n個元素,n個奇數、n個偶數,設計?個算法,使得數組奇數下標位置放置的都是奇數,偶數下標位置放置的都是偶數
- 先說下你的思路(從0下標開始遍歷,如果是奇數下標判斷該元素是否奇數,是則跳過,否則從該位置尋找下?個奇數)
- 下?個奇數?怎么找?(有點懵逼,思考中。。)
- 有思路么?(仍然是先遍歷?次數組,并對下標進?判斷,如果下標屬性和該位置元素不匹配從當前下標的下?個遍歷數組元素,然后替換)
- 你這樣時間復雜度有點?,如果要求O(N)要怎么做(思考?會,答道“定義兩個指針,分別從下標0和1開始遍歷,遇?奇數位是是偶數和偶數位是奇數就停下,交換內容”)
- 時間差不多了,先到這吧。你有什么想問我的?
字節二面:
- ?試官和藹很多,你先介紹下??吧
- 你對服務治理怎么理解的?
- 項?中的限流怎么實現的?(Guava ratelimiter,令牌桶算法)
- 具體怎么實現的?(要點是固定速率且令牌數有限)
- 如果突然很多線程同時請求令牌,有什么問題?(導致很多請求積壓,線程阻塞)
- 怎么解決呢?(可以把積壓的請求放到消息隊列,然后異步處理)
- 如果不?消息隊列怎么解決?(說了RateLimiter預消費的策略)
- 分布式追蹤的上下?是怎么存儲和傳遞的?(ThreadLocal + spanId,當前節點的spanId作為下個節點的?spanId)
- Dubbo的RpcContext是怎么傳遞的?(ThreadLocal)主線程的ThreadLocal怎么傳遞到線程池?(說了先在主線程通過ThreadLocal的get?法拿到上下?信息,在線程池創建新的ThreadLocal并把之前獲取的上下?信息設置到ThreadLocal中。這?要注意的線程池創建的ThreadLocal要在finally中?動remove,不然會有內存泄漏的問題)
- 你說的內存泄漏具體是怎么產?的?(說了ThreadLocal的結構,主要分兩種場景:主線程仍然對ThreadLocal有引?和主線程不存在對ThreadLocal的引?。第?種場景因為主線程仍然在運?,所以還是有對ThreadLocal的引?,那么ThreadLocal變量的引?和value是不會被回收的。第?種場景雖然主線程不存在對ThreadLocal的引?,且該引?是弱 引?,所以會在gc的時候被回收,但是對?的value不是弱引?,不會被內存回收,仍然會造成內存泄漏)
- 線程池的線程是不是必須?動remove才可以回收value?(是的,因為線程池的核?線程是?直存在的,如果不清理,那么核?線程的threadLocals變量會?直持有ThreadLocal變量)
- 那你說的內存泄漏是指主線程還是線程池?(主線程 )
- 可是主線程不是都退出了,引?的對象不應該會主動回收么?(?試官和內存泄漏杠上了),沉默了?會。。。
- 那你說下SpringMVC不同?戶登錄的信息怎么保證線程安全的?(剛才解釋的有點懵逼,?下沒反應過來,居然回答成鎖了。?腦有點暈了,此時已經?個?時過去了,感覺情況不妙。。。)
- 這個直接?ThreadLocal不就可以么,你?過SpringMVC有鎖實現的代碼么?(有點暈菜。。。)我們聊聊mysql吧,說下索引結構(說了B+樹)
- 為什么使?B+樹?( 說了查詢效率?,O(logN),可以充分利?磁盤預讀的特性,多叉樹,深度?,葉?結點有序且存儲數據)
- 什么是索引覆蓋?(忘記了。。。 )
- Java為什么要設計雙親委派模型?
- 什么時候需要?定義類加載器?
- 我們做?道題吧,?寫?個對象池
- 有什么想問我的么?(感覺我很多點都沒答好,是不是掛了(結果真的是) )
?結
頭條的?試確實很專業,每次?試官會提前給你發?個視頻鏈接,然后準點開始?試,?且考察的點都?較全。
?試官都有?個特點,會抓住?個值得深?的點或者你沒說清楚的點深?下去直到你把這個點講清楚,不然?試官會覺得你并沒有真正理解。???試官給了我?點建議,研究技術的時候?定要去研究產?的背景,弄明?在什么場景解決什么特定的問題,其實很多技術內部都是相通的。很誠懇,還是很感謝這位?試官??。
最后
由于篇幅限制,小編在此截出幾張知識講解的圖解,有需要的程序猿(媛)可以點贊后戳這里免費領取全部資料獲取哦
中…(img-Xrjgnzp0-1624341278441)]
[外鏈圖片轉存中…(img-jW58y1iF-1624341278442)]