当前位置:当前位置:主页 > 计算机电子书 > 程序设计 > Go语言 pdf电子书
Go程序员面试笔试宝典

Go程序员面试笔试宝典 PDF 高清版

  • 更新:2022-09-05
  • 大小:74.4 MB
  • 类别:Go语言
  • 作者:饶全成、欧长坤、楚秦
  • 出版:机械工业出版社
  • 格式:PDF

  • 资源介绍
  • 学习心得
  • 相关内容

Go程序员面试笔试宝典》是由机械工业出版社出版的一本关于Go语言方面的书籍,作者是饶全成、欧长坤、楚秦,主要介绍了关于Go语言、程序员面试、Go语言宝典方面的知识内容,目前在Go语言类书籍综合评分为:7.3分。

书籍介绍

编辑推荐

内容精良:系统覆盖Go语言基础、语言类库和高级特性三大技术主题,精准定位Go语言学习痛点,系统化提升求职效率。
资源丰富:提供780分钟Go语言核心知识点学习视频。
重点剖析:涵盖Go调度器源码分析、顺序进程间通信(CSP)原理、泛型的历史及实战、可靠性测试等高频考点。

内容简介

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.5Go与C/C 中的堆和栈是同一个概念吗/5
  • 第2章延迟语句/6
  • 2.1延迟语句是什么/6
  • 2.2延迟语句的执行顺序是什么/7
  • 2.3如何拆解延迟语句/9
  • 2.4如何确定延迟语句的参数/10
  • 2.5闭包是什么/11
  • 2.6延迟语句如何配合恢复语句/11
  • 2.7defer链如何被遍历执行/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.1map 是什么/29
  • 3.2.2map 的底层实现原理是什么/30
  • 3.2.3map 中的 key 为什么是无序的/50
  • 3.2.4map 是线程安全的吗/50
  • 3.2.5float类型可以作为map的key吗/50
  • 3.2.6map 如何实现两种 get 操作/52
  • 3.2.7如何比较两个 map 是否相等/53
  • 3.2.8可以对 map 的元素取地址吗/54
  • 3.2.9可以边遍历边删除吗/54
  • 第4章通道/55
  • 4.1CSP是什么/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.1Go接口与C 接口有何异同/82
  • 5.2Go语言与“鸭子类型”的关系/82
  • 5.3iface和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.1context是什么/108
  • 7.2context有什么作用/108
  • 7.3如何使用context/109
  • 7.3.1传递共享的数据/109
  • 7.3.2定时取消/111
  • 7.3.3防止 goroutine 泄漏/111
  • 7.4context底层原理是什么/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.1Timer底层数据结构为什么用四叉堆而非二叉堆/133
  • 9.2Timer曾做过哪些重大的改进/134
  • 9.3定时器的使用场景有哪些/134
  • 9.4Timer/Ticker 的计时功能有多准确/134
  • 9.5定时器的实现还有其他哪些方式/137
  • 第10章反射/140
  • 10.1反射是什么/140
  • 10.2什么情况下需要使用反射/140
  • 10.3Go语言如何实现反射/140
  • 10.3.1types 和 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.2sync.Pool 是如何实现的/162
  • 11.3并发安全散列表 sync.Map/174
  • 11.3.1如何使用 sync.Map/175
  • 11.3.2sync.Map 底层如何实现/176
  • 第3部分高 级 特 性
  • 第12章调度机制/184
  • 12.1goroutine 和线程有什么区别/184
  • 12.2Go sheduler 是什么/184
  • 12.3goroutine 的调度时机有哪些/186
  • 12.4M:N模型是什么/187
  • 12.5工作窃取是什么/187
  • 12.6GPM底层数据结构是怎样的/188
  • 12.7scheduler 的初始化过程是怎样的/193
  • 12.8主 goroutine 如何被创建/207
  • 12.9g0栈和用户栈如何被切换/212
  • 12.10Go schedule循环如何启动/217
  • 12.11goroutine如何退出/221
  • 12.12schedule循环如何运转/226
  • 12.13M如何找工作/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.2Go语言中的堆和栈概念与传统意义上的堆和栈有什么区别/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.5STW是什么意思/282
  • 14.1.6如何观察 Go 语言的垃圾回收现象/283
  • 14.1.7有了垃圾回收,为什么还会发生内存泄漏/286
  • 14.1.8并发标记清除法的难点是什么/288
  • 14.1.9什么是写屏障、混合写屏障,如何实现/289
  • 14.2垃圾回收机制的实现细节/291
  • 14.2.1Go语言中进行垃圾回收的流程是什么/291
  • 14.2.2触发垃圾回收的时机是什么/292
  • 14.2.3如果内存分配速度超过了标记清除的速度怎么办/294
  • 14.3垃圾回收的优化问题/295
  • 14.3.1垃圾回收关注的指标有哪些/295
  • 14.3.2Go 的垃圾回收过程如何调优/295
  • 14.3.3Go的垃圾回收有哪些相关的API,其作用分别是什么/305
  • 14.4历史及演进/305
  • 14.4.1Go 历史各个版本在垃圾回收方面的改进/305
  • 14.4.2Go在演化过程中还存在哪些其他设计,为什么没有被采用/307
  • 14.4.3Go语言中垃圾回收还存在哪些问题/307
  • 结束语/310

资源获取

相关资源

网友留言