当前位置: 首页 > news >正文

不管你基础如何,我都推荐你好好看一遍CSAPP这本神书!

 来源:知乎作者半径圆radcircle

 

一个人如果真的读完了一本好书,会自发地写读后感,这不是老师布置的作业哦~

 

大概是去年十月末,我受够了《深入理解java虚拟机》的折磨,又想到我那零碎又不成体系的计算机基础知识,决定整本书看。从同学那里借来的,几乎全新的CSAPP。

 

虽然听过机械工业出版的黑皮书的名气,但是以前觉得这种理论知识,看什么书都一样,还不如把408生啃几遍,不过令人头疼的大学教材逼得我只能换一条路走,借名书看!

 

这一看,才让我明白黑皮书——特别是CSAPP为什么让人熟知!

 

首先导语部分让我认识到了作者和他的同事牛气满满!

 

第一部分(第1-6章),主讲机组,从底层剖析

 

第1章 漫游

 

讲到的处理器,编译系统,操作系统,虚拟内存,并发这些知识,都是以前接触过,但都没有深入了解的部分,心想终于能好好理解一遍了(以为是个缩小版的408)

 

第2章 信息表示处理

 

进制转换,整数和浮点数的表示,还有一直不太清楚的无符号数有符号数,以及没有接触过的大小端法,逻辑运算,移位运算,讲的浅到深位次分明,再搭配作者每一节布置的练习题,可以说以前没有哪本教材或者博客能带给我的学习体验,我当场和我同学说,我请你吃晚饭,这本书这学期归我了

 

第3章 程序的机器级表示

 

这一章说实话是前期比较难读的一章,在有汇编基础的情况下,我还是感觉力不从心,但想到刚破费请吃饭,就继续坚持下去了,回头来看这一章可能劝退了不少人,不过收获还是有的,寄存器的种类,操作数操作码,条件控制条件转移,逐步加深的汇编语法,还有初步形成的出入栈概念,这一章100页左右花了大概一个星期。

 

第4章 处理器体系结构

 

带给我没有玩过的全新版本,硬件可以讲的这么通俗易懂,这一章只需要基本的数电基础即可学会。处理器架构,SEQ阶段,指令周期执行概念,流水线设计,虽然有些地方还是抽象了一点,但是CPU分支预测那里真是让我惊到,感叹硬件的神奇,以后有空打算看《计算机组成与设计:硬件/软件接口》再补补硬件知识。

 

第5章 优化程序性能

 

这一章虽然比较短,但是带来的意义还是很大的。过程调用,渐近低效率,不必要的内存引用都让我认识到以前的代码写的有多烂,循环展开,并行,分支预测和处罚,让我也对自己的代码有了规划和优化意识。

 

第6章 存储器层次结构

 

此章解开了我对缓存困惑已久的难题,难怪访问同一个文件速度也有快慢,感叹计算机的存储结构设计的合理,高速缓存是一个需要关注的要点。

 

第二部分(第7-9章),主讲操作系统

 

第7章 链接

 

短小精悍,知识层面的转换让我花了一段时间来适应,此章开始我查博客的次数开始快速增加,符号表,重定位,静态动态链接,目标文件,共享库,可以说没有一个容易的

 

第8章 异常流

 

以我个人的角度来说,我认为这一章是最难的,也可能是我个人操作系统知识的欠缺导致的,这一章我一天只能看几页,速度慢得出奇。异常,中断,系统调用,进程,信号。读着觉得我的操作系统似乎白学了,但这一章带给我的收获也是最多的,让我清楚的明白了操作系统的概念绝不只是一个图形用户界面那么简单。

 

第9章 虚拟内存

 

领悟很多的一章,以前对内存只是有一个内存条的概念,觉得进程的运行空间就这么多,现在来看,真是……虚拟地址到物理地址的翻译,页表概念,页命中,缺页,内存映射,非常精彩的内存分配,垃圾收集,干货满满,这一章看的时候正好也是期末,感觉看书的时间就跟内存块的分配一样细碎,碎片时间导致了我花了将近快一个月在这里。

 

剩下的是第三部分,IO,网络,并发

 

第10章 I/O

老实说,我觉得这一章讲的不够精彩,只是调用了几个函数例子,所以学的也不好。所以我可能会在二周目再好好看看重新总结。

 

第11章 网络编程

 

看完这一章甚至有了去搞服务器开发的想法~经典的客户端——服务器模型,套接字的概念应该是整本书后期最难之一,服务器的种类(迭代,并发),web服务器的内容点醒梦中人,搞了那么多前后端开发,看到这里才明白自己每天在internet访问的都是什么。

 

第12章 并发编程

 

最后关头高潮迭起,我认为这一章讲的最精彩,以前听到线程两个字就恐怖,现在总算是有了感觉,主要是进程并发,IO多路复用,线程并发三个部分,最后的共享变量,信号量,线程安全,死锁,这一部分自学时没搞明白,所以读了很久,现在终于明白了线程的主要核心内容,同样的内容,为什么有的书花几页就能讲得比有些书花几章讲的好呢?

 

总结,CSAPP真的是计算机领域的圣经,不管你基础如何,我都会推荐你好好看一遍这本书,不知道它启发了多少计算机学子。如果不读这本书,我可能还是只会调参,crud复制粘贴,出了bug查博客的five(当然现在也是five)。我会在日后给任何想学计算机的朋友推荐它!

 

感谢CSAPP,感谢作者Randal E. Bryant & David R. O'Hallaron

 

 

本书将所有计算机系统相关知识融会贯通,助你成为凤毛麟角的高级程序员的必备神书。如果你研究和领会了这本书里的概念,你将开始成为极少数的“牛人”!

 

本书是一本将计算机软件和硬件理论结合讲述的经典教程,内容覆盖计算机导论、体系结构和处理器设计等多门课程。本书的最大优点是为程序员描述计算机系统的实现细节,通过描述程序是如何映射到系统上,以及程序是如何执行的,使读者更好地理解程序的行为,以及造成效率低下的原因。从程序员的角度来学习计算机系统是如何工作的会非常有趣。最理想的学习方法是在真正的系统上解决具体的问题,或是编写和运行程序。这个主题观念贯穿本书始终。

 

我们建议你用如下方式学习这本书:

§  学习一个新概念时,你应该立刻做一做紧随其后的一个或多个练习题来检验你的理解。这些练习题的解答在每章的末尾。要先尝试自己来解答每个问题,然后再查阅答案。

§  每一章后都有一组难度不同的作业题,这些题目需要的时间从十几分钟到十几个小时,但建议你尝试完成这些作业题,完成之后你会发现对系统的理解更加深入。

§  本书中有丰富的代码示例,鼓励你在系统上运行这些示例的源代码。

§  向老师或他人请教和交流是很好的学习方式。欢迎加入本书的读者群,进群交流学习。

点击关注【深入理解计算机系统】视频号

更多精彩回顾

书讯 | 8月书讯(上)| 这些新书不可错过

书讯 | 8月书讯(下)| 这些新书不可错过

资讯 | 【大咖发声】如何写出好程序?

书单 | 秋招、考研、金九银十跳槽季,打好基础让你起飞!(这里有一份导图和书单值得收藏)

干货 | 数据中台即服务——数据中台的四大支柱

收藏 | 3个最常见案例详解DBA日常维护

上新 | 【新书速递】Serverless架构从原理、入门到实战的技术指南

相关文章:

  • 【第69期】如何做顶级“新生代农民工”?这几本书为你打开大门
  • 【新书速递】CSO进阶之路首次曝光
  • pandas 筛选数据的 8 个神操作
  • 零售业电商标签从0到1的构建方法
  • 宜家如何利用低代码平台提升员工效率,提高数据价值
  • 什么是云原生?有哪些发展方向?终于有人讲明白了
  • 10本书,帮你看清未来的科技趋势
  • InnoDB是如何存数据的?
  • 大咖对话 | 企业数字化转型破局之道
  • 学习微服务最好的方式:阅读《微服务架构设计模式》
  • 憧憬6G,共同定义6G
  • 14个Pandas神操作,手把手教你写代码
  • 【第70期】终于找到了!AI学习路线图——从零基础到就业
  • 架构大咖说丨顶级架构师 = 技术大牛?
  • 什么是Serverless?有哪些应用?终于有人讲明白了
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 230. Kth Smallest Element in a BST
  • C++类的相互关联
  • Consul Config 使用Git做版本控制的实现
  • Java应用性能调优
  • Js基础——数据类型之Null和Undefined
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • nodejs:开发并发布一个nodejs包
  • React的组件模式
  • Redis字符串类型内部编码剖析
  • SpringBoot几种定时任务的实现方式
  • SQLServer之创建显式事务
  • webpack4 一点通
  • yii2中session跨域名的问题
  • 京东美团研发面经
  • 理清楚Vue的结构
  • 前端
  • 走向全栈之MongoDB的使用
  • 1.Ext JS 建立web开发工程
  • ​VRRP 虚拟路由冗余协议(华为)
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • (bean配置类的注解开发)学习Spring的第十三天
  • (JS基础)String 类型
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)
  • @font-face 用字体画图标
  • @modelattribute注解用postman测试怎么传参_接口测试之问题挖掘
  • @Transient注解
  • [.net 面向对象程序设计进阶] (19) 异步(Asynchronous) 使用异步创建快速响应和可伸缩性的应用程序...
  • [14]内置对象
  • [2016.7 Day.4] T1 游戏 [正解:二分图 偏解:奇葩贪心+模拟?(不知如何称呼不过居然比std还快)]
  • [20171113]修改表结构删除列相关问题4.txt
  • [BZOJ4010]菜肴制作
  • [CCIE历程]CCIE # 20604
  • [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-controller-manager失败
  • [hdu 4405] Aeroplane chess [概率DP 期望]
  • [IM] [Webhook] Webhook实现IM平台机器人
  • [Kubernetes]4. 借助腾讯云TKE快速创建Pod、Deployment、Service部署k8s项目
  • [leetcode] Balanced Binary Tree
  • [LeetCode]-225. 用队列实现栈