---
# System prepended metadata

title: Go 面試考題

---

# 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 
版本向量

