为你推荐
前 言
第1部分 语言基础
第1章 逃逸分析
1.1 逃逸分析是什么
1.2 逃逸分析有什么作用
1.3 逃逸分析是怎么完成的
1.4 如何确定是否发生逃逸
1.5 Go与C/C++中的堆和栈是同一个概念吗
第2章 延迟语句
2.1 延迟语句是什么
2.2 延迟语句的执行顺序是什么
2.3 如何拆解延迟语句
2.4 如何确定延迟语句的参数
2.5 闭包是什么
2.6 延迟语句如何配合恢复语句
2.7 defer链如何被遍历执行
2.8 为什么无法从父goroutine恢复子goroutine的panic
第3章 数据容器
3.1 数组与切片
3.2 散列表map
第4章 通道
4.1 CSP是什么
4.2 通道有哪些应用
4.3 通道的底结构
4.4 通道的关闭过程发生了什么
4.5 从一个关闭的通道里仍然能读出数据吗
4.6 如何优雅地关闭通道
4.7 关于通道的happens-before有哪些
4.8 通道在什么情况下会引起资源泄漏
4.9 通道操作的情况总结
第5章 接口
5.1 Go接口与C++接口有何异同
5.2 Go语言与“鸭子类型”的关系
5.3 iface和eface的区别是什么
5.4 值接收者和指针接收者的区别
5.5 如何用interface实现多态
5.6 接口的动态类型和动态值是什么
5.7 接口转换的原理是什么
5.8 类型转换和断言的区别是什么
5.9 如何让编译器自动检测类型是否实现了接口
第2部分 语言类库
第6章 unsafe
6.1 如何利用unsafe包修改私有成员
6.2 如何利用unsafe获取slice和map的长度
6.3 如何实现字符串和byte切片的零复制转换
第7章 context
7.1 context是什么
7.2 context有什么作用
7.3 如何使用context
7.4 context底层原理是什么
第8章 错误
8.1 接口error是什么
8.2 接口error有什么问题
8.3 如何理解关于error的三句谚语
8.4 错误处理的改进
第9章 计时器
9.1 Timer底层数据结构为什么用四叉堆而非二叉堆
9.2 Timer曾做过哪些重大的改进
9.3 定时器的使用场景有哪些
9.4 Timer/Ticker的计时功能有多准确
9.5 定时器的实现还有其他哪些方式
第10章 反射
10.1 反射是什么
10.2 什么情况下需要使用反射
10.3 Go语言如何实现反射
10.4 如何比较两个对象是否完全相同
10.5 如何利用反射实现深度拷贝
第11章 同步模式
11.1 等待组sync.WaitGroup的原理是什么
11.2 缓存池sync.Pool
11.3 并发安全散列表sync.Map
第3部分 高级特性
第12章 调度机制
12.1 goroutine和线程有什么区别
12.2 Go sheduler是什么
12.3 goroutine的调度时机有哪些
12.4 M:N模型是什么
12.5 工作窃取是什么
12.6 GPM底层数据结构是怎样的
12.7 scheduler的初始化过程是怎样的
12.8 主goroutine如何被创建
12.9 g0栈和用户栈如何被切换
12.10 Go schedule循环如何启动
12.11 goroutine如何退出
12.12 schedule循环如何运转
12.13 M如何找工作
12.14 系统监控sysmon后台监控线程做了什么
12.15 异步抢占的原理是什么
第13章 内存分配机制
13.1 管理内存的动机是什么,通常涉及哪些组件
13.2 Go语言中的堆和栈概念与传统意义上的堆和栈有什么区别
13.3 对象分配器是如何实现的
13.4 页分配器是如何实现的
13.5 与内存管理相关的运行时组件还有哪些
13.6 衡量内存消耗的指标有哪些
13.7 运行时内存管理的演变历程
第14章 垃圾回收机制
14.1 垃圾回收的认识
14.2 垃圾回收机制的实现细节
14.3 垃圾回收的优化问题
14.4 历史及演进
结束语
买过这本书的人还买过
读了这本书的人还在读
同类图书排行榜