Go 程序員面試筆試寶典

猿媛之家; 饒全成 歐長坤 楚秦 等編著

  • 出版商: 機械工業
  • 出版日期: 2022-04-01
  • 售價: $594
  • 貴賓價: 9.5$564
  • 語言: 簡體中文
  • 頁數: 311
  • 裝訂: 平裝
  • ISBN: 7111702425
  • ISBN-13: 9787111702429
  • 相關分類: 面試技巧
  • 立即出貨

買這商品的人也買了...

相關主題

商品描述

Go語言是一門既年輕、簡捷,又強大、高效、充滿潛力的服務器語言。
《Go程序員面試筆試寶典》使用淺顯易懂的語言與大量流程圖,深入介紹了Go語言。
全書分為三大部分:
第1部分(1~5章)為Go語言基礎。
介紹了Go 語言中*基礎、*常見的逃逸分析、defer 延遲語句、切片、數組、散列表、通道和接口。
第2部分(6~11章)為Go語言類庫。
介紹了Go語言自身的類庫,如unsafe、context、錯誤、計時器、反射和sync包。
第3部分(12~14章)為Go語言高級特性。
介紹了調度、內存分配、GC,從原理到源碼分析,逐漸深入。
這三大部分是runtime 中*重要、*核心的內容,理解了這三者的原理,
才算是對Go語言有了一個比較深入的理解和掌握。
《Go程序員面試筆試寶典》是一本計算機相關專業畢業生面試筆試求職參考書,
同時也適合有一定工作經驗的開發工程師進一步提升自身水平。

目錄大綱

前言
第1部分   語 言 基 礎
第1章  逃逸分析/2
1.1  逃逸分析是什麼/2
1.2  逃逸分析有什麼作用/3
1.3  逃逸分析是怎麼完成的/3
1.4  如何確定是否發生逃逸/4
1.5  Go與C/C 中的堆和棧是同一個概念嗎/5
 
第2章  延遲語句/6
2.1  延遲語句是什麼/6
2.2  延遲語句的執行順序是什麼/7
2.3  如何拆解延遲語句/9
2.4  如何確定延遲語句的參數/10
2.5  閉包是什麼/11
2.6  延遲語句如何配合恢復語句/11
2.7  defer鏈如何被遍歷執行/13
2.8  為什麼無法從父goroutine恢復子goroutine的panic/18
 
第3章  數據容器/20
3.1  數組與切片/20
3.1.1  數組和切片有何異同/20
3.1.2  切片如何被截取/20
3.1.3  切片的容量是怎樣增長的/23
3.1.4  切片作為函數參數會被改變嗎/27
3.1.5  內建函數make和new的區別是什麼/28
3.2  散列表map/29
3.2.1  map 是什麼/29
3.2.2  map 的底層實現原理是什麼/30
3.2.3  map 中的 key 為什麼是無序的/50
3.2.4  map 是線程安全的嗎/50
3.2.5  float類型可以作為map的key嗎/50
3.2.6  map 如何實現兩種 get 操作/52
3.2.7  如何比較兩個 map 是否相等/53
3.2.8  可以對 map 的元素取地址嗎/54
3.2.9  可以邊遍歷邊刪除嗎/54
 
第4章  通道/55
  4.1  CSP是什麼/55
  4.2  通道有哪些應用/56
  4.3  通道的底結構/57
      4.3.1  數據結構/57
      4.3.2  創建過程/58
      4.3.3  接收過程/60
      4.3.4  發送過程/67
      4.3.5  收發數據的本質/72
  4.4  通道的關閉過程發生了什麼/74
  4.5  從一個關閉的通道裡仍然能讀出數據嗎/75
  4.6  如何優雅地關閉通道/76
  4.7  關於通道的happens-before有哪些/79
  4.8  通道在什麼情況下會引起資源洩漏/81
  4.9  通道操作的情況總結/81
 
第5章  接口/82
  5.1  Go接口與C 接口有何異同/82
  5.2  Go語言與“鴨子類型”的關係/82
  5.3  iface和eface的區別是什麼/84
  5.4  值接收者和指針接收者的區別/86
      5.4.1  方法/86
      5.4.2  值接收者和指針接收者/87
      5.4.3  兩者分別在何時使用/89
  5.5  如何用interface實現多態/89
  5.6  接口的動態類型和動態值是什麼/91
  5.7  接口轉換的原理是什麼/93
  5.8  類型轉換和斷言的區別是什麼/96
  5.9  如何讓編譯器自動檢測類型是否實現了接口/101
 
第2部分  語 言 類 庫
第6章  unsafe/104
  6.1  如何利用unsafe包修改私有成員/104
  6.2  如何利用unsafe獲取slice和map的長度/105
  6.3  如何實現字符串和byte切片的零複製轉換/106
 
第7章  context/108
  7.1  context是什麼/108
  7.2  context有什麼作用/108
  7.3  如何使用context/109
      7.3.1  傳遞共享的數據/109
      7.3.2  定時取消/111
      7.3.3  防止 goroutine 洩漏/111
  7.4  context底層原理是什麼/112
      7.4.1  接口/113
      7.4.2  結構體/114
 
第8章  錯誤/124
  8.1  接口error是什麼/124
  8.2  接口error有什麼問題/125
  8.3  如何理解關於error的三句諺語/126
      8.3.1  視錯誤為值/126
      8.3.2  檢查並優雅地處理錯誤/128
      8.3.3  只處理錯誤一次/130
  8.4  錯誤處理的改進/131
 
第9章  計時器/133
  9.1  Timer底層數據結構為什麼用四叉堆而非二叉堆/133
  9.2  Timer曾做過哪些重大的改進/134
  9.3  定時器的使用場景有哪些/134
  9.4  Timer/Ticker 的計時功能有多準確/134
  9.5  定時器的實現還有其他哪些方式/137
 
第10章  反射/140
  10.1  反射是什麼/140
  10.2  什麼情況下需要使用反射/140
  10.3  Go語言如何實現反射/140
      10.3.1  types 和 interface/141
      10.3.2  反射的基本函數/144
      10.3.3  反射的三大定律/149
  10.4  如何比較兩個對像是否完全相同/149
  10.5  如何利用反射實現深度拷貝/151
 
第11章  同步模式/154
  11.1  等待組 sync.WaitGroup 的原理是什麼/154
  11.2  緩存池 sync.Pool/157
      11.2.1  如何使用sync.Pool/157
      11.2.2  sync.Pool 是如何實現的/162
  11.3  並發安全散列表 sync.Map/174
      11.3.1  如何使用 sync.Map/175
      11.3.2  sync.Map 底層如何實現/176
 
第3部分  高 級 特 性
第12章  調度機制/184
  12.1  goroutine 和線程有什麼區別/184
  12.2  Go sheduler 是什麼/184
  12.3  goroutine 的調度時機有哪些/186
  12.4  M:N模型是什麼/187
  12.5  工作竊取是什麼/187
  12.6  GPM底層數據結構是怎樣的/188
  12.7  scheduler 的初始化過程是怎樣的/193
  12.8  主 goroutine 如何被創建/207
  12.9  g0棧和用戶棧如何被切換/212
  12.10  Go schedule循環如何啟動/217
  12.11  goroutine如何退出/221
  12.12  schedule循環如何運轉/226
  12.13  M如何找工作/227
  12.14  系統監控sysmon後台監控線程做了什麼/237
      12.14.1  搶占進行系統調用的P/240
      12.14.2  搶占長時間運行的P/243
  12.15  異步搶占的原理是什麼/247
 
第13章  內存分配機制/252
13.1  管理內存的動機是什麼,通常涉及哪些組件/252
13.1.1  內存管理的動機/252
13.1.2  內存管理運行時的組件/252
13.1.3  內存的使用狀態/253
13.2  Go語言中的堆和棧概念與傳統意義上的堆和棧有什麼區別/255
13.3  對象分配器是如何實現的/255
13.3.1  分配的基本策略/256
13.3.2  對象分配器的基本組件和層級/256
13.3.3  對象分配的產生條件和入口/259
13.3.4  大對象分配/261
13.3.5  小對象分配/262
13.3.6  微對象分配/264
13.4  頁分配器是如何實現的/265
13.4.1  頁的分配/265
13.4.2  跨度的分配/266
13.4.3  非託管對象與定長分配器/267
13.5  與內存管理相關的運行時組件還有哪些/269
13.5.1  執行棧管理/269
13.5.2  垃圾回收器和拾荒器/271
13.6  衡量內存消耗的指標有哪些/272
13.7  運行時內存管理的演變歷程/278
13.7.1  演變過程/278
13.7.2  存在的問題/279
 
第14章  垃圾回收機制/280
14.1  垃圾回收的認識/280
14.1.1  垃圾回收是什麼,有什麼作用/280
14.1.2  根對像到底是什麼/280
14.1.3  常見的垃圾回收的實現方式有哪些,Go語言使用的是什麼/281
14.1.4  三色標記法是什麼/281
14.1.5  STW是什麼意思/282
14.1.6  如何觀察 Go 語言的垃圾回收現象/283
14.1.7  有了垃圾回收,為什麼還會發生內存洩漏/286
14.1.8  並發標記清除法的難點是什麼/288
14.1.9  什麼是寫屏障、混合寫屏障,如何實現/289
14.2  垃圾回收機制的實現細節/291
14.2.1  Go語言中進行垃圾回收的流程是什麼/291
14.2.2  觸發垃圾回收的時機是什麼/292
14.2.3  如果內存分配速度超過了標記清除的速度怎麼辦/294
14.3  垃圾回收的優化問題/295
14.3.1  垃圾回收關注的指標有哪些/295
14.3.2  Go 的垃圾回收過程如何調優/295
14.3.3  Go的垃圾回收有哪些相關的API,其作用分別是什麼/305
14.4  歷史及演進/305
14.4.1  Go 歷史各個版本在垃圾回收方面的改進/305
14.4.2  Go在演化過程中還存在哪些其他設計,為什麼沒有被採用/307
 14.4.3  Go語言中垃圾回收還存在哪些問題/307
結束語/310