# Go 面試考題 ## 基礎考題 1. golang 的包和模塊? Module 2. golang struct interface 3. map 併發下是否讀寫安全 4. 請解釋什麼是deadlock 5. 有沒有遇過data racing 情境 ## 協程邏輯 1. 進程、線程、協程的區別? 2. GMP機制 goroutince, machine, processor 3. 搶佔式調度 ![image](https://hackmd.io/_uploads/ByFlc-wT6.png) 4. 不同goroutince之間用什麼交換資源, 共用記憶體還是channel 5. 是否使用過context ## 內存管理 1. Go內存使用哪個區塊 heap or stack 2. GC? 三色回收 ## sync包 ### 應用面 Mutex, RWMutex, WaitGroup, Once ### 底層邏輯 sema鎖 atomic atomic.CompareAndSwap atomic.LoadInt64 ![image](https://hackmd.io/_uploads/S1R-mGDpp.png) ![image](https://hackmd.io/_uploads/HkYhrMP66.png) ## 效能調優 1. golang pprof 2. memory leak # 資料庫考題 redis mysql mongo # 分布式架構 ## 主從複製問題 讀己之寫 單調讀 避免時光到流 一致前綴讀 讀取順序 ## 多主 離線操作客戶端 協同編輯 寫入衝突問題 最後寫入勝利 ## 無主複製 仲裁寫入 讀修復 Read repair 反殤 anti-entropy process 讀寫法定人數 w + r > n 版本向量