Golang常見面試題

storyflow發表於2021-11-17

基礎相關:

1、golang 中 make 和 new 的區別?(基本必問)
2、陣列和切片的區別 (基本必問)
3、for range的時候它的地址會發生變化麼?
for 迴圈遍歷 slice 有什麼問題?
4、go defer,多個 defer 的順序,defer 在什麼時機會修改返回值 ? (for defer)
defer recover 的問題? (主要是能不能捕獲)
5、 uint型別溢位
6、介紹rune型別
7、 golang中解析tag是怎麼實現的?反射原理是什麼?(問的很少,但是程式碼中用的多)
8、呼叫函式傳入結構體時,應該傳值還是指標? (Golang都是值傳遞)
9、silce遇到過哪些坑?
10、go struct能不能比較?
11、Go 閉包

Context相關:

1、context結構是什麼樣的?
2、context使用場景和用途?(基本必問)

Channel相關:

1、channel是否執行緒安全?鎖用在什麼地方?
2、go channel 的底層實現原理 (資料結構)
3、nil、關閉的channel、有資料的channel,再進行讀、寫、關閉會怎麼樣?(各類變種題型)
例如:go channel close後讀的問題
向為 nil 的 channel 傳送資料會怎麼樣?
4、向channel傳送資料和從channel讀資料的流程是什麼樣的?

Map相關:

1、map使用注意的點,併發安全?
2、map迴圈是有序的還是無序的?
3、 map中刪除一個key,它的記憶體會釋放麼?
4、怎麼處理對map進行併發訪問?有沒有其他方案? 區別是什麼?
5、 nil map和空map 有何不同?
6、map的資料結構是什麼?是怎麼實現擴容?
7、map 取一個 key,然後修改這個值,原 map 資料的值會不會變化

GMP相關:

1、什麼是GMP?(必問)排程過程是什麼樣的?(對流程熟悉,要求更高,問的較少)
2、程式、執行緒、協程有什麼區別?
3、搶佔式排程是如何搶佔的?
4、M 和 P 的數量問題?
5、協程怎麼退出?
6、map如何順序讀取?

鎖相關:

1、除了 mutex 以外還有那些方式安全讀寫共享變數?
2、Go如何實現原子操作?
3、Mutex是悲觀鎖還是樂觀鎖?悲觀鎖、樂觀鎖是什麼?
4、Mutex有幾種模式?
5、goroutine的自旋佔用資源如何解決
6、讀寫鎖底層是怎麼實現的?

同步原語相關:

1、知道哪些sync同步原語?各有什麼作用?
sync.pool問的相對多些
2、sync.WaitGroup

併發相關:

1、怎麼控制併發數?
2、多個goroutine對同一個map寫會panic,異常是否可以用defer捕獲?
3、如何優雅的實現一個 goroutine 池(百度、手寫程式碼)
4、select可以用於什麼?
5、主協程如何等其餘協程完再操作?

GC相關:

1、go gc是怎麼實現的?(必問)
2、go是gc演算法是怎麼實現的? (得物,出現頻率低)
3、GC 中 stw 時機,各個階段是如何解決的? (百度)
4、GC的觸發時機?

記憶體相關:

1、談談記憶體洩露,什麼情況下記憶體會洩露?怎麼定位排查記憶體洩漏問題?
2、知道golang的記憶體逃逸嗎?什麼情況下會發生記憶體逃逸?
3、請簡述 Go 是如何分配記憶體的?
Channel分配在棧上還是堆上?哪些物件分配在堆上,哪些物件分配在棧上?
4、介紹一下大物件小物件,為什麼小物件多了會造成gc壓力?
5、堆和棧的區別?
6、當go服務部署到線上了,發現有記憶體洩露,該怎麼處理?

微服務框架

1、go-micro 微服務架構怎麼實現水平部署的,程式碼怎麼實現?
2、怎麼做服務發現的

其他:

1、go實現單例的方式?
2、專案中使用go遇到的坑?
3、client如何實現長連線?

程式設計題:

1、3個函式分別列印cat、dog、fish,要求每個函式都要起一個goroutine,按照cat、dog、fish順序列印在螢幕上100次。
2、如何優雅的實現一個 goroutine 池?

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章