- 1.鎖相關(guān)
核心是利用了atomic包,由操作系統(tǒng)和硬件支持。互斥鎖 sync.Mutex
1.直接獲取鎖,返回
2.自旋和喚醒(cas算法,非阻塞同步)
3.判斷各種狀態(tài),特殊情況處理
Mutex 實現(xiàn)中有兩種模式,1:正常模式,2:饑餓模式,前者指的是當一個協(xié)程獲取到鎖時,后面的協(xié)程會排隊 (FIFO), 釋放鎖時會喚醒最早排隊的協(xié)程,這個協(xié)程會和正在 CPU 上運行的協(xié)程競爭鎖,但是大概率會失敗,為什么呢?因為你是剛被喚醒的,還沒有獲得 CPU 的使用權(quán),而 CPU 正在執(zhí)行的協(xié)程肯定比你有優(yōu)勢,如果這個被喚醒的協(xié)程競爭失敗,并且超過了 1ms,那么就會退回到后者 (饑餓模式),這種模式下,該協(xié)程在下次獲取鎖時直接得到,不存在競爭關(guān)系,本質(zhì)是為了防止協(xié)程等待鎖的時間太長。讀寫鎖 sync.RWMutex
RWMutex.readerCount是個整型值,用于表示讀者數(shù)量,int32類型,最大值為30(寫在源碼里)其他:
使用 - race 在運行時檢測數(shù)據(jù)競爭問題,go test -race ....,go build -race ....
使用 go-deadlock 檢測死鎖,和指定鎖超時的等待問題
能用 channel 就不用 lock
- 2.介紹一下線程安全的共享內(nèi)存方式
- sync.Mutex
- sync.WaitGroup
- channel
- 3.介紹一下goroutine
Go協(xié)程介紹 - 4.goroutine的自旋占用資源如何解決,gmp
自旋鎖是指當一個線程在獲取鎖的時候,如果鎖已經(jīng)被其他線程獲取,那么該線程將循環(huán)等待,然后不斷地判斷是否能夠被成功獲取,知直到獲取到鎖才會退出循環(huán)。對于互斥鎖,如果資源已經(jīng)被占用,資源申請者只能進入睡眠狀態(tài)。但是自旋鎖不會引起調(diào)用者睡眠,如果自旋鎖已經(jīng)被別的執(zhí)行單元保持,調(diào)用者就一直循環(huán)在那里看是否該自旋鎖的保持者已經(jīng)釋放了鎖。
5.介紹Linux系統(tǒng)信號
6.goroutine搶占時機,gc棧掃描
7.Gc觸發(fā)時機
8.是否了解其他gc機制
9.內(nèi)存管理方式
10.Channel分配在堆上還是在棧上?哪些對象分配在堆上?哪些對象分配在棧上?
11.代碼效率分析,考慮局部性原理
12.多核CPU下,cache如何保持一致,不沖突
13.uint類型溢出
14.聊聊rune類型
15.介紹一下channel,有緩沖和無緩沖的區(qū)別
16.channel是否線程安全
17.介紹一下Mutex的實現(xiàn),是悲觀鎖還是樂觀鎖
18.Mutex幾種模式?
19.Muxtez可以做自旋鎖?
20.介紹一下RWMutex
21.介紹一下大對象和小對象,為什么小對象多了會造成gc壓力?
22.介紹項目中遇到的oop情況
23.介紹項目中遇到的坑
24.如果指定指令執(zhí)行的順序
25.什么是寫屏障、混合寫屏障,如何實現(xiàn)?
26.gc的stw是怎么回事
27.協(xié)程之間是怎么調(diào)度的
28.簡單聊聊內(nèi)存逃逸
29.為sync.WaitGroup中Wait函數(shù)支持 WaitTimeout 功能.
30.字符串轉(zhuǎn)成byte數(shù)組,會發(fā)生內(nèi)存拷貝嗎?
31.http包的內(nèi)存泄漏
32.Goroutine調(diào)度策略
33.對已經(jīng)關(guān)閉的的chan進行讀寫,會怎么樣?為什么?
34.實現(xiàn)阻塞讀的并發(fā)安全Map
35.什么是goroutine leak?
36.data race問題怎么解決?能不能不加鎖解決這個問題?
37.epoll原理
38.etcd怎么實現(xiàn)分布式鎖?
39.滑動窗口的概念以及應(yīng)用?
40.grpc內(nèi)部原理是什么?
41.http2的特點是什么,與http1.1的對比。
42.time.Now有幾次系統(tǒng)調(diào)用?如何優(yōu)化
43.空struct{}是否使用過?會在什么情況下使用,舉例說明一下。
44.聊聊runtime
45.介紹下你平時都是怎么調(diào)試bug以及性能問題的?
46.通過通信來共享內(nèi)存,而不是通過共享內(nèi)存而通信,怎么理解這句話,如何處理共享變量?
47.chan比mutex更輕么?還有更輕量的方法么?
48.什么時候用chan不如mutex效率高?
一些找實習的go股文
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- https://draveness.me/golang/[https://draveness.me/golang/...
- 目錄 統(tǒng)一規(guī)范篇 命名篇 開發(fā)篇 優(yōu)化篇 統(tǒng)一規(guī)范篇 本篇主要描述了公司內(nèi)部同事都必須遵守的一些開發(fā)規(guī)矩,如統(tǒng)一開...