### 一面
#### 1. **實習項目**
- 可以簡要描述你的項目經歷,最好是與職位相關的項目。如果是與技術棧相關的項目,比如 Go、C++、Golang 或 Python,重點講述項目中的技術細節和你如何解決問題。
#### 2. **Go學習多久**
- 說明你學習 Go 語言的時間長度、學習的方式(如通過自學、培訓、項目實踐等),以及你學到的主要知識點,比如 Go 的并發模型(goroutines)、內存管理、接口等。
#### 3. **C++、Golang、Python優缺點**
- **C++**:優點是性能高,控制力強;缺點是內存管理復雜,語法較繁瑣。
- **Golang**:優點是并發編程強,內存管理簡單,語法簡潔;缺點是相對較新的語言,第三方庫的支持不如 Python。
- **Python**:優點是語法簡潔,生態豐富,開發效率高;缺點是性能相對較低,無法像 C++ 一樣控制硬件。
#### 4. **GMP模型**
- GMP 模型(Go的 Goroutine、M:操作系統線程,P:調度器)是 Go 語言中的并發模型。簡要解釋 Go 語言如何通過這一模型實現高效的并發編程,如何進行調度和工作。
#### 5. **slice底層實現**
- Go 的 slice 底層是一個數組,它有三個元素:指針(指向數組的某個位置)、長度和容量。當 slice 擴展時,Go 會創建一個新的數組,并將原有數據復制過去。
#### 6. **cap和len的區別**
- `len` 返回的是 slice 中元素的個數,而 `cap` 返回的是 slice 的容量,即底層數組的大小。
#### 7. **TCP和UDP區別**
- **TCP**:面向連接,保證數據的可靠性和順序,適用于對數據傳輸有嚴格要求的應用,如 HTTP、FTP。
- **UDP**:無連接,不保證數據的可靠性和順序,適用于實時應用,如視頻流和在線游戲。
#### 8. **TCP如何保證可靠性**
- TCP 通過序列號、確認應答、重傳機制和流量控制等手段確保數據的可靠性。
#### 9. **擁塞控制**
- TCP 擁塞控制通過算法(如慢啟動、擁塞避免、快速重傳、快速恢復)來控制網絡中數據的發送速率,以避免過載。
#### 10. **TCP兩次握手可行性**
- TCP 三次握手是必要的,第二次握手是為了確認客戶端已經收到服務端的響應。如果只有兩次握手,會導致數據丟失和連接不穩定。
#### 11. **MySQL使用的是什么索引**
- MySQL 使用 B+ 樹作為索引結構,B+ 樹的優勢是能夠保持有序,且每個節點只存儲鍵值,實際數據在葉子節點。
#### 12. **為什么使用B+樹而不是平衡二叉樹**
- B+ 樹相較于平衡二叉樹,具有更高的磁盤效率,它的所有葉子節點形成鏈表,適合范圍查詢。
#### 13. **查看某個端口的占用的Linux命令**
- `lsof -i :<port>` 或 `netstat -anp | grep <port>`。
#### 14. **統計一個文件中的行數**
- 使用命令 `wc -l <file>` 來統計文件的行數。
#### 15. **進程、線程、協程區別**
- **進程**:獨立的資源單元,擁有自己的地址空間和資源。
- **線程**:進程內的執行單元,共享進程的資源。
- **協程**:比線程更輕量級,通常由程序調度。
#### 16. **內核調用和普通調用的區別(內核態 & 用戶態)**
- **用戶態**:應用程序執行的狀態,訪問用戶空間的內存。
- **內核態**:操作系統內核執行的狀態,訪問內核空間的內存。系統調用時需要從用戶態切換到內核態。
#### 17. **虛擬內存**
- 虛擬內存是操作系統提供的一種內存管理機制,它允許每個進程使用一個獨立的內存地址空間,操作系統通過映射機制將虛擬內存轉換為物理內存。
#### 18. **為什么虛擬地址空間切換耗時,其切換流程是什么**
- 切換時需要保存當前進程的上下文,加載目標進程的上下文,涉及到頁表的切換和TLB緩存失效等,耗時較長。
#### 19. **HTTP的GET、POST**
- **GET**:請求資源,數據通過URL傳遞,適用于獲取數據。
- **POST**:提交數據,數據通過請求體傳遞,適用于修改數據。
#### 20. **瀏覽器訪問URL時發生的事情**
- 瀏覽器解析 URL,DNS 查找域名,TCP 建立連接,發送 HTTP 請求,服務器響應,瀏覽器渲染頁面。
#### 21. **HTTPS的S是什么**
- S 代表“安全”(Secure),它通過 SSL/TLS 協議加密 HTTP 數據,保證數據傳輸的安全性。
#### 22. **HTTPS如何實現**
- HTTPS 使用 SSL/TLS 協議在 HTTP 協議上加層安全,保證數據的加密和身份驗證。
#### 23. **LRU和LFU**
- **LRU(Least Recently Used)**:最少使用算法,淘汰最近最少使用的緩存。
- **LFU(Least Frequently Used)**:最不常用算法,淘汰最不常用的緩存。
#### 24. **手撕:重排鏈表**
- 可以通過雙指針或遞歸方法實現鏈表的反轉或重排,具體實現可以使用交換指針等方法。
### 二面
#### 1. **場景題拷打,詳細詢問秒殺系統**
- 需要考慮高并發、分布式系統設計、數據庫設計、緩存機制、隊列處理等問題。秒殺系統的關鍵是高效地處理并發請求、保證庫存一致性和數據的準確性。