Go常見(jiàn)八股整理與解析
******************
Go的八股不多,所以咱們偏向于求精不求多,盡量講出深度和廣度。
廣度,代表了你的知識(shí)面、深度代表了你對(duì)該點(diǎn)有深入的理解。
廣度,通常是通過(guò)橫向?qū)Ρ润w現(xiàn)的;深度,通常是細(xì)節(jié)去體現(xiàn)的。
后面會(huì)具體舉例說(shuō)明如何表達(dá)出深度和廣度。
面試準(zhǔn)備
我個(gè)人的簡(jiǎn)歷上面,寫(xiě)的是
熟悉Golang: Slice、Map、GPM調(diào)度器、垃圾回收機(jī)制等
面試官基本的提問(wèn)方式是,“我看你簡(jiǎn)歷上有寫(xiě)xx,你給我介紹一下xx吧”
所以,你就需要準(zhǔn)備好說(shuō)辭,想好怎么涉及廣度又涉及深度地表達(dá)。
首先大家要想好以怎么樣子一個(gè)結(jié)構(gòu)去表達(dá),我個(gè)人的一般方式是
- 背景:這個(gè)東西是干啥的,有什么作用
- 核心原理:代表你的理解
- 細(xì)節(jié):細(xì)節(jié)是某些數(shù)據(jù)的設(shè)置,或者特定場(chǎng)景的優(yōu)化。細(xì)節(jié),就表達(dá)你的深度,同時(shí)也能夠讓面試官相信有你真實(shí)理解,而不只是背八股。
- 總結(jié)拔高:這里通過(guò)就需要你對(duì)某些點(diǎn)有些深入的理解或者橫向?qū)Ρ?,這個(gè)是用來(lái)加分的,這也是和別人拉開(kāi)差距的地方,表達(dá)你有不一樣的理解。
Golang中的map的例子
我以golang中的map為例子,大家理解一下,注意,面試的時(shí)候盡量用口語(yǔ)話的表達(dá),不然就像在背八股??谡Z(yǔ)中有“就是”、“然后”這樣的銜接詞。
map它的底層是哈希表,那哈希表通常我們需要考慮3個(gè)方面,哈希函數(shù)、沖突處理、擴(kuò)容方式。
哈希函數(shù)這個(gè)沒(méi)啥好說(shuō)的,是盡量保證哈希結(jié)果稀疏就好。
沖突處理這塊,golang中的map采用的是拉鏈法,不過(guò)這有個(gè)細(xì)節(jié)就是,這個(gè)map的鏈表的節(jié)點(diǎn)是一個(gè)桶,一個(gè)桶你可以理解為一個(gè)8個(gè)元素的數(shù)組,這樣做的好處就是,減少了頻繁分配鏈表節(jié)點(diǎn)時(shí)的開(kāi)銷,我理解的話,這是一種時(shí)間和空間上的折中。
擴(kuò)容方式這塊,是采用漸進(jìn)式擴(kuò)容,漸進(jìn)式擴(kuò)容就可以把時(shí)間均攤到每次請(qǐng)求上,不會(huì)有那種常規(guī)擴(kuò)容的卡頓的情況。然后前面提到桶,golang也提出等量擴(kuò)容的方式,主要是在稀疏的情況下做,減少檢索和內(nèi)存的開(kāi)銷。
單個(gè)點(diǎn)拉出來(lái)看
- 背景:哈希表由于是人盡皆知的,所以可以不用介紹。
- 核心原理:按照3個(gè)方面,哈希函數(shù)、沖突處理、擴(kuò)容方式,去介紹。
- 多個(gè)細(xì)節(jié):拉鏈法、鏈表節(jié)點(diǎn)是桶、等量擴(kuò)容
- 總結(jié)拔高
- 關(guān)于桶這點(diǎn),“減少了頻繁分配鏈表節(jié)點(diǎn)時(shí)的開(kāi)銷,這是一種時(shí)間和空間上的折中。”
- 等量擴(kuò)容,“主要是在稀疏的情況下做,減少檢索和內(nèi)存的開(kāi)銷?!?/li>
這樣,是不是讓面試官感覺(jué)你對(duì)map了解很透徹的同時(shí),能做橫線對(duì)比,體現(xiàn)了知識(shí)廣的優(yōu)勢(shì)。
Golang的GPM調(diào)度器
再比如協(xié)程調(diào)度器GPM,可以從這么幾個(gè)角度,按順序吟唱
- 背景:為什么要有GPM調(diào)度器
- 核心數(shù)據(jù)結(jié)構(gòu):G、P、M
- 調(diào)度邏輯:正常情況下、掛起和恢復(fù)情況下、負(fù)載均衡情況、搶占式調(diào)度
- 橫向?qū)Ρ龋赫{(diào)度器可以和Linux的線程調(diào)度器CFS對(duì)比來(lái)看,有哪些異同,比如都有全局對(duì)立和本地隊(duì)列、都有負(fù)載均衡機(jī)制、差異是golang的調(diào)度實(shí)現(xiàn)更簡(jiǎn)單
如下圖
大家把這些內(nèi)容填進(jìn)去,按順序說(shuō),就是流暢的八股表達(dá)
Go其他八股
其他的比如
- slice
- sync.Map
- 垃圾回收
- channel
- new和make的區(qū)別
其他那種簡(jiǎn)單看看的八股我就不額外寫(xiě)了,大家看看就能會(huì)。上面這些我把圖貼出來(lái)給大家參考。
GPM
Slice
sync.Map
垃圾回收
map
channel
完整文件
如果需要完整文件,由于牛客沒(méi)法放xmind文件,也沒(méi)法放百度網(wǎng)盤(pán)鏈接【惱】,可以看上面文章來(lái)源獲取,后續(xù)也會(huì)放其他的八股,Redis、MySQL和分布式、微服務(wù)等等,歡迎關(guān)注我的牛客和公眾號(hào)!
#八股##go##我發(fā)現(xiàn)了面試通關(guān)密碼##背八股如何背出深度和廣度#