去年的存貨面試公司:字節(jié)【基架部門】面試崗位:后端開發(fā)面試問題:1.實習項目2.有哪些方案可以避免流量高峰造成的問題- 消息隊列削峰填谷- 緩存預(yù)熱- 負載均衡,分散請求- 限流和降級3.了解常用的限流或者降級的算法嘛?描述一下原理?固定窗口計數(shù)器:按照時間段劃分窗口,有一次請求就+1,最為簡單的算法,但是限流不夠平滑且無法應(yīng)對突然激增的流量?;瑒哟翱谟嫈?shù)器:通過將窗口再細分,并且按照時間“滑動”來解決突破限制的問題,但是時間區(qū)間的精度越高,算法所需的空間容量就越大。漏桶:請求類似水滴,先放到桶里,服務(wù)的提供方則按照固定的速率從桶里面取出請求并執(zhí)行。缺陷也很明顯,當短時間內(nèi)有大量的突發(fā)請求時,即便此時服務(wù)器沒有任何負載,每個請求也都得在隊列中等待一段時間才能被響應(yīng)。令牌桶:往桶里面發(fā)放令牌,每個請求過來之后拿走一個令牌,然后只處理有令牌的請求。令牌桶滿了則多余的令牌會直接丟棄。令牌桶算法既能夠?qū)⑺械恼埱笃骄植嫉綍r間區(qū)間內(nèi),又能接受服務(wù)器能夠承受范圍內(nèi)的突發(fā)請求,因此是目前使用較為廣泛的一種限流算法。4.滑動窗口相對固定窗口算法解決了什么問題相比于固定窗口算法,滑動窗口計數(shù)器算法可以應(yīng)對突然激增的流量。5.【手撕】字符串的z型變換6.操作系統(tǒng),進程和線程的區(qū)別進程是操作系統(tǒng)資源分配的基本單位,線程是cpu調(diào)度的基本單位。進程是一個程序的動態(tài)運行實例,而線程是進程當中的一條執(zhí)行流程。進程包含多個線程,線程從屬于一個進程;各進程間相互獨立,但線程不一定,同一個進程的多個線程可能相互影響。進程切換的開銷顯著高于線程切換。7.threadlocal的原理就是線程本地變量,如果創(chuàng)建了一個ThreadLocal變量,那么訪問這個變量的每個線程都會有這個變量的一個本地拷貝,多個線程操作這個變量的時候,實際是操作自己本地內(nèi)存里面的變量,從而起到線程隔離的作用,避免了線程安全問題。ThreadLocal的底層數(shù)據(jù)建構(gòu)就是ThreadLocalMap,它的key就是ThreadLocal的引用,值就是Object對象。8.用戶的請求進來,用戶的信息怎樣在一個請求內(nèi)傳遞?在web應(yīng)用程序中,ThreadLocal可以用來存儲當前請求的上下文信息,使得不同請求之間相互獨立9.epoll?當調(diào)用epoll_create方法時,Linux內(nèi)核會創(chuàng)建一個eventpoll結(jié)構(gòu)體,用于存放通過epoll_ctl方法向epoll對象中添加進來的事件。這些事件都會掛載在紅黑樹中,如此,重復添加的事件就可以通過紅黑樹而高效的識別出來。而所有添加到epoll中的事件都會與設(shè)備(網(wǎng)卡)驅(qū)動程序建立回調(diào)關(guān)系,也就是說,當相應(yīng)的事件發(fā)生時會調(diào)用這個回調(diào)方法,它會將發(fā)生的事件添加到rdlist雙鏈表中。當調(diào)用epoll_wait檢查是否有事件發(fā)生時,只需要檢查eventpoll對象中的rdlist雙鏈表中是否有epitem元素即可。如果rdlist不為空,則把發(fā)生的事件復制到用戶態(tài),同時將事件數(shù)量返回給用戶。10.項目的代碼結(jié)構(gòu)是怎樣的微服務(wù)架構(gòu),ddd11.流量是rpc進來還是http進來12.介紹一下rpc和http在使用場景上的區(qū)別rpc通常使用在分布式系統(tǒng)、跨語言調(diào)用、高性能服務(wù)中。http通常使用在網(wǎng)頁瀏覽、RESTful API、文件下載等13.用rpc代替http會有什么問題???14.http底層連接可以基于連接池嘛15.了解golang嘛?了解golang的協(xié)程嗎16.描述一下動態(tài)規(guī)劃的核心思想?什么樣的問題可以用它去解決?17.排序算法有哪些?挑選排序算法的時候要考量哪些?考量:時間復雜度、空間復雜度、穩(wěn)定性、實現(xiàn)難度、數(shù)據(jù)規(guī)模和特性18.快排是穩(wěn)定排序的算法嘛?哪些算法是穩(wěn)定排序的?不是。穩(wěn)定排序的算法:冒泡排序、插入排序和歸并排序19.紅黑樹相對于普通的樹有哪些特征?通常用來解決什么問題?20.mysql的事務(wù)隔離級別?21.讀已提交和可重復讀的底層區(qū)別?22.mysql有哪些日志?23.了解redolog嗎?24.redolog的刷盤機制是怎樣的?25.kafka和rocketmq在業(yè)務(wù)中使用場景上有什么區(qū)別?26.git中版本管理的模型是什么?Git 中的版本管理模型是圍繞快照(snapshot)的概念構(gòu)建的。每次提交(commit)都會記錄一個當前所有文件的快照??煺瞻水敃r整個目錄樹的狀態(tài),包括文件內(nèi)容和目錄結(jié)構(gòu)。27.git的常見操作28.git merge和rebase的區(qū)別`git merge` 合并后的歷史記錄保留了所有分支的歷史,呈現(xiàn)出分叉后再合并的結(jié)構(gòu)。`git rebase` 會將當前分支的提交按順序應(yīng)用到另一個分支的頂端,這相當于在另一個分支的基礎(chǔ)上重新應(yīng)用當前分支的更改。29.反問#軟件開發(fā)筆面經(jīng)##字節(jié)跳動#