董宇辉:读书让你更加深刻|程序员必读的一本书

82563e895836adaa196c848ab973217d.png久负盛名的CSAPP(Computer Systems: A Programmer's Perspective)一直都是计算机界“圣经”般存在,本书主要是软件程序员角度来看待计算机系统,主要包括以下内容:

第一部分:程序结果和执行

  • 数据如何在内存里面表示,计算机使用二进制表示整型、浮点数等;

  • CPU交流语言:机器语言,通过汇编语言理解计算机CPU指令执行流程;

  • 处理器体系结构,存储层次结构, 局部性原理, 性能优化;

第二部分:在系统上运行程序

  • 编译,链接,库等原理和深入分析;

  • 操作系统的使用,异常,进程,信号、虚拟内存,内存动态分配等;

第三部分:程序间的交互和通信

  • 系统级IO,文件IO等;

  • 网络编程,socket套接字原理;

  • 并发编程,IO复用,多线程,同步和互斥(锁)等;

学习心得:

深入理解计算机系统内容包括几乎所有IT技术的原型,融汇计算机组成原理+操作系统+编译原理+网络,不可能短时间内完全参透其中的内功心法,读不完,读不懂,没关系,完全可以暂时放一放。这不是一本一下子就能完全读懂读透的书,希望你不断地学习,不断的去读。这样或许是读这本书的最好状态。慢慢你会发现,这些知识都是潜默移化的,会让你以后解决其他问题更快速,学习其他新知识更快。

一般需要我们:

1 课后需要查资料确认自己不确定的地方,对自己感兴趣可以加深一点。

2 查完资料还是没有理解的,需要及时提出来,请教他人,查缺补漏。

3 有时间就做课后习题,最好是花时间完成课后lab。

推荐学习网站:

https://fengmuzi2003.gitbook.io/csapp3e/

https://www.icourse163.org/course/NJU-1001625001?tid=1001698002

我总结了一些计算机系统的核心知识,包括理论知识和实际工作中的问题解决。

CPU

理论知识:CPU简单架构 汇编指令 流水线(乱序) 指令加速(向量等)多核(并行设计)cache CPU扩展架构(numa,异构系统)

实际工作:  

1 定位问题-反汇编查看

2 性能优化-指令精简CPI,预取,分支预测,cache miss优化

3 并行程序设计,原子操作/锁/无锁/内存屏障

内存

理论知识:物理内存管理 分页 虚拟内容管理  页表  MMU TLB 内存分配算法

实际工作:  

1 内存泄漏怎么定位?

2 怎么减少内存使用,内存空间优化?

3 内存分配性能优化—tcmalloc vs ptmalloc vs jemalloc,大页内存,COW(缺页异常) 页分配, 内存池(buddy (大内存)vs  slab (小内存)等。

磁盘

理论知识:磁盘类型 存储空间 虚拟内存交换文件系统  文件IO 消息队列 数据库

实际工作:  

1 文件IO优化(page cache,buff,零拷贝)

2 缓存,消息队列持久化优化

3 持久化空间和成本优化

4 数据库使用和优化

DMA和外设IO  

理论知识:总线 DMA IO 中断

实际工作: 

1 锁总线(并发)

2 总线带宽评估

3 DMA参数设置(DMA描述符寄存器等)

4 中断优化(亲和,聚合,均衡,上下部分)

编译连接  

理论知识:编译原理  字符串处理 正在表达式  链接  中间文件

实际工作: 

1 编译系统问题—编译器版本,命令行参数,选项,优化,编译脚本,依赖关系

2 编译问题-头文件路径(hook,打桩mock)

3 连接问题-库路径(符号,hook,打桩mock)  

4 运行问题-程序部署-动态库路径和版本号,环境依赖,打包,热补丁(动态库替换) 

程序运行原理

理论知识:可执行文件格式 程序加载 任务调度 执行环境(上下文) 进程空间  堆栈 

实际工作:  

1 crash问题处理,空指针,堆栈溢出,内存越界,内存被踩,死锁等

2 程序性能优化(系统裁剪(二进制文件大小优化),任务调度优化—CPU亲和,CPU隔离(独占),调度算法选择,优先级调整)

3 程序调试( GDB ),升级,热补丁。

操作系统

理论知识:系统调用(API接口)  资源管理(处理器-计算(调度子系统),内存-计算(内存子系统),网卡-网络(网络子系统),磁盘-存储(IO子系统))

实际工作: 

1 适配硬件(驱动,裁剪,低功耗,嵌入式)

2 性能优化(系统调参,零拷贝,bypass kernel)

3 系统观测 (系统工具,内核调试)

4 开发环境 (开发工具,命令行,脚本自动化)

应用编程(网络编程,并发多线程)

理论知识:网络分层模型  网络协议 socket接口 多线程 锁 标准库   

实际工作:  

1 网络编程问题(高并发,epoll,同步/异步,网络编程模型,异常处理)

2 多线程编程问题(互斥和同步,不同锁使用,线程安全,性能问题,多线程程序设计等)

3 编程性能优化( 算法和数据结构优化(链表 vs 数组,hash vs 红黑树 vs skiplist),基于编译器优化(内联,cache对齐,字节对齐,优化选项Ox),基于操作系统级别代码优化(堆栈(栈空间 vs 堆空间),调度(调度实体选择,调度算法选择,优先级调整),内存分配(tcmalloc vs ptmalloc ,大页内存, 页分配 buddy (大内存)vs  slab 内存池(小内存)),IO(零拷贝,cache vs buffer ),基于硬件特性级别代码优化(CPU(超线程,预取,分支预测,cache 亲和(空间和时间局部性),NUMA),内存(内存对齐),磁盘(追加写,数据有序,顺序IO,延迟更新,批量写入)), 架构优化设计(高内聚,低耦合,模块化,设计模式)

感兴趣的,可以参加今晚的直播,让我们一起来总结和回顾计算机系统的核心知识,以及如何做课后lab实验。

上期直播分享--深入理解计算机系统:

熬过绝望低谷,你便无人能敌

欢迎加入极客星球,分享多年工作经验和技术理解,扩展视野,直播分享,面试,作为大厂专业面试官,可以帮助想进各类大厂(芯片,自动驾驶,嵌入式,互联网等)的在校大学生制定学习路线和学习帮助,由于在各种类型公司都待过(华为->外企->到互联网大厂),在工作中想要普升和高薪的同学找到最佳学习和转型指导, 可以分享各种不同公司宝贵的职场工作经验, 项目经验,普升经验,希望大家站在前辈们的肩膀上(前期时间很宝贵,希望你们早点遇到自己的贵人),少走弯路,做得更好。详细点击查看-> 极客星球。PS:中秋优惠,立减100,用下面优惠劵,还能再减50。

7f6c6a4bbda1645f73856ab3a3836852.png

96c826e4b0227253aab8ea26af9557a6.jpeg

IT工程师的成长路线

可以加我微信,交个朋友,技术交流

8be837beb5d607e209d9e2739598b3df.png

- END -


看完一键三连在看转发点赞

是对文章最大的赞赏,极客重生感谢你3229875d6753d91ae44326e99cc97b37.png

推荐阅读

8336e9c31165142f17b72d3ae6acd2e7.jpeg

定个目标|建立自己的技术知识体系


c63cba893d2f52833c84a361decf9e2f.jpeg

大厂后台开发基本功修炼路线和经典资料

ecb40c2bde73c4fb6254501fe750c540.jpeg

难走的路,从不拥挤

你好,这里是极客重生,我是阿荣,大家都叫我荣哥,从华为->外企->到互联网大厂,目前是大厂资深工程师,多次获得五星员工,多年职场经验,技术扎实,专业后端开发和后台架构设计,热爱底层技术,丰富的实战经验,分享技术的本质原理,希望帮助更多人蜕变重生,拿BAT大厂offer,培养高级工程师能力,成为技术专家,实现高薪梦想,期待你的关注!点击蓝字查看我的成长之路

校招/社招/简历/面试技巧/大厂技术栈分析/后端开发进阶/优秀开源项目/直播分享/技术视野/实战高手等, 极客星球希望成为最有技术价值星球,尽最大努力为星球的同学提供面试,跳槽,技术成长帮助!详情查看->极客星球

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值