大家好,我是Cone,一名毕业于双非本科的抖音全栈程序猿。

今天来和大家分享《程序员的自我修养————链接、装载与库》这本书的全书导读经验,它在去年我拿下微信、抖音、百度等大厂sp及以上offer有非常大的帮助,分享与你,希望能够对你带来启发。

前言

最近在工作之余,重新认真阅读学生时代读过的书籍,阅读到了这本对我秋招帮助很大的书,重新思考了一些原来读这本书时的问题,比如:windows系统相关知识,我到底要不要精读?一些晦涩难懂的知识该怎么办?等等,所以打算梳理一篇该书的导读内容,希望对你能够有所帮助。

PS:如果你还没有读过本书,建议你去认真阅读本书,你肯定能收获不小。

阅读前所需要具备的基础知识

下面为你整理了,你阅读本书前,最好所具备的前言知识,这样能够在你阅读的时候减少很多阅读障碍。如果你缺少一些前言知识,也没关系,努努力,啃一啃,遇到问题时,去努力寻找相关知识弄懂解决,肯定会有不小收获。

•C/C++编程语言基础•汇编语言基础•操作系统基础•计算机组成原理基础

全书概览

如上图所示,全书分为四个部分。

第一部分:温故而知新

通过hello、world 第一个C程序引出相关一些列问题,抛出本书的目的,并回顾了操作系统相关的知识,包括硬件、线程、进程、内存等基础知识。

第二部分:静态链接

全面讲解了编译的基本概念和过程以及链接器历史,然后通过讲解目标文件为引出静态链接做铺垫,最后详细介绍了静态链接知识。

第三部分:装载与动态链接

首先讲解了可执行文件的转载讲解出内存中的进程虚拟空间布局、载入方式以及加载过程,之后详细介绍了动态链接相关知识,后面追着介绍了Liunx下的动态库特性。

第四部分:库与运行库

这一部分主要介绍了运行时内存利用相关知识、以及运行库基本知识和实现,还讲解了C++的全局析构与构造实现,最后还讲解了系统调用及其原理。

章节概览

下面是一些章节的概览,有些知识Windows的知识也不需要去完全掌握,毕竟我们可能很少接触windows开发吧。

第一章:温故而知新

本章也就是全书概览上的第一部分,主要介绍一些背景知识和阅读本书的一点铺垫知识,比如:CPU、内存等硬件,操作系统进程、线程相关知识。

第二章:编译和链接

本章主要介绍基本的编译概念以及编译几大过程还有链接器相关知识。

第三章:目标文件

本章介绍了Windows和Liunx系统的目标文件,回答了目标文件是什么,目标文件有哪些类型,目标文件如存储等问题。

第四章:静态链接

本章主要讲解静态链接基础知识和静态链接基本步骤和过程,还讲解举例了最“小”链接。

第五章:Windows PE/COFF

本章介绍Windows平台的目标文件和可执行文件。

第六章:可执行文件的转载与进程

本章通过介绍进程的基本概念,地址空间布局等知识引申出了可执行文件的加载过程。

第七章:动态链接

本章主要讲解Liunx系统下的.so动态库的动态链接过程。

第八章:Liunx动态库

本章主要详解介绍动态库的相关知识,包括动态库的分布和组织等。

第九章:Windows下的动态链接

本章主要讲Windows下面的动态链接机制 第十章:内存 这章主要讲运行时内存相关知识,包括堆与栈,堆的分配算法,函数调用栈等。

第十一章:运行库

本章主要介绍运行库的概念、c/c++运行库、Glibc和MSVC CRT相关知识。

第十二章:系统调用与API

本章主要讲系统调用知识,包括系统调用流程以及相关API介绍。

第十三张:运行库实现

本章主要实现了一个支持堆、基本文件操作等功能的Mini CRT.

导读建议

通常阅读一本书,我们会有一个问题:我需要从书中得到一些什么?可能是已有知识的总结回顾、也可能是新知识的获取。不管怎么样,我们会有想要得到的收获,那么阅读《程序员的自我修养》这本书,你能得到什么呢?

•以CPU会为核心回顾计算机体系知识•了解代码编译的基本概念和步骤•Liunx系统下目标文件格式以及如何存储•静态链接基本概念,为什么要有静态链接•目标文件如何被静态链接到一起行程可执行文件•静态链接时的空间地址分配、符号决议和重定位如何进行•可执行文件如何被系统加载,与进程的地址空间如何映射•动态链接基本概念以及链接时相关问题•运行时的内存分配以及入口程序初始化 上面是一些基本能得到的收获,我们从中可以抽象为三个重要问题:•源码是如何被编译成可执行程序的?•可执行程序是如何被加载到内存的?•内存中的进程空间布局是怎么样的?

带着这个三个问题,去阅读本书,效果会更好。

首先我们从书本脉络出发,尝试回答第一个问题

源码是如何被编译成可执行程序的?

这个涉及相关编译问题,从上面的章节概览可以知道,在第二章:编译和链接就能找到相关答案,所以你需要认真阅读第二章全部内容,不过这里只稍微展开讲了编译的大致过程,并没有讲解可执行文件如何生成的,生成可执行文件还需要链接,所以顺着下去需要搞懂链接。

那么在学习链接之前,书本第三章:目标文件里面有什么,就讲解了需要链接的输入产物长什么样子,以及链接前的基本知识:链接的接口(基本单位)等,所以第三章是一个基础知识章节,主要让你掌握目标文件内容和格式,是为后面章节做铺垫的,你能大致清楚目标文件的基本知识,第三章也是需要全部认真阅读的。

接下来就是链接了,第四章:静态链接,本章首先根据目标文件,讲解了两种链接方法,之后讲解了链接的两个步骤,然后引申出C++的相关问题,其次讲解了静态库的链接,最后有一个小实验,让你动手体验。

到这里你很好的回答上面的这个问题了。你能知道静态链接是在做什么,它生成了什么,为什么需要它了。 接下来我们继续下一个问题。

可执行程序是如何被加载到内存的?

回答完前面那个问题后,你了解了可执行程序的文件内容以及格式,前文开篇提到需要由操作系统的基础知识,操作系统知识中程序运行的基本单位是进程,可执行程序加载到内存肯定首先需要了解进程的地址空间,其次需要知道是以什么方式加载到内存的。

在加载到内存之前需要进行进程的建立等操作,所以在本书第六章主要为你解答这些问题。 认真理解静态链接之后,我们会有一个疑问,那些在静态链接没有被重定位的符号怎么办?符号表里都是存在的偏移地址,那真实地址如何确定。这就涉及到了动态链接了,在静态链接没有完成的工程,由程序加载时进行动态链接完成。本书在第七章详细介绍了动态链接的相关知识,包括步骤实现、懒加载等等。

在了解完动态链接之后,可能还想要动态链接时链接的动态库特性,所以在第八章介绍了Liunx下动态库相关的知识。 读完前面八章内容,你已经非常熟悉编译链接加载相关知识了。

那么可执行文件通过动态链接以及加载,完了之后是运行,运行离不开空间布局,所以接下来一个问题就是第三个问题了。

内存中的进程空间布局是怎么样的?

进程的空间布局直接影响会影响程序的运行,运行时也需要用到一些堆、栈等空间,所以在本书第十章讲解了内存相关知识,包括进程的空间布局、栈与调用惯例、堆与内存管理等知识,读完本章,你能够大致明白,程序运行时的一些地址是怎么回事。

程序运行你肯定好奇入口,也就是计算机是如何进入执行程序的。那么本书第十章:运行库,第一节为你讲解了相关知识。 读到这里你对于计算机的编译、链接、加载、运行有了很深刻的认识,从全局层面进行了系统性的学习。

回答完三个问题,相信正在阅读的你已经心中有底了。

带着问题阅读书籍往往是有非常棒的效果。

导读总结

p1-109,建议精读,读懂读透,读完就能系统的计算机编译链接相关知识。P127,使用ld链接脚本,本节需要自己动手尝试,计算机是一门工科,多动手体会。

P149-175,讲解可执行文件的转载和进程,需要精读。

P179-P219,讲解动态链接,这一部分内容稍有难度,需要花些精力认真读。P229-P248 讲解动态库,如果动态链接有些吃力,这一章可跳过也不影响。P283-334,这一部分就需要回到上面的第三个问题了,也需要认真弄懂。

整体下来前面175页的知识读下来会比较轻松,同时也能掌握很多的知识,从动态链接开始难度有会有提升了。但是只有理解了动态链接,你才能理解程序编译链接时给动态链接留下接口是为什么,当然你也可以大致把动态库理解为一堆功能代码的共享。导读总结就到这里了,希望你读完有所收获。

阅读到这里,赶紧行动起来吧~

这里为你精心准备了电子书:

链接:https://pan.baidu.com/s/1zmegxUifY4x9aN7H17ui3Q  密码:o589

总结

正如这本书的取名一样,程序员也需要有自身的技术修养,在自我修养这条路上,笔者和大家一起成长。

《程序员的自我修养》导读相关推荐

  1. 《应用时间序列分析:R软件陪同》——1.5 习题

    本节书摘来自华章计算机<应用时间序列分析:R软件陪同>一书中的第1章,第1.5节,作者:吴喜之,刘苗著, 更多章节内容可以访问云栖社区"华章计算机"公众号查看. 1.5 ...

  2. 《应用时间序列分析:R软件陪同》——2.3 随机游走

    本节书摘来自华章计算机<应用时间序列分析:R软件陪同>一书中的第2章,第2.3节,作者:吴喜之,刘苗著, 更多章节内容可以访问云栖社区"华章计算机"公众号查看.

  3. 《应用时间序列分析:R软件陪同》——导读

    ** 前言 ** 首先,一些教材偏重于数学理论和推导.作者多为数学出身,他们习惯于数学的严格性和导出精确而又漂亮的数学结论.这些书适用于那些愿意为时间序列的数学理论研究做出贡献的读者. 其次,国内教材 ...

  4. arima模型_时间序列分析(R)‖ARIMA模型预测实例

    背景 十九大报告,对教育方面做出了详细说明.近年来,随着研究生招生规模的逐渐扩大,报名参加硕士研究生考试的人数也逐年增加.大多数关于研究生的文章是以研究生的现状.研究生的教育.研究生的就业等方面为主题 ...

  5. R语言入门(1)时间序列分析

    时间序列分析 使用软件为Rstudio,参考CRAN中时间序列分析分析函数和package,拿手上的数据练习一下时间序列分析. 1.原始数据说明 选择连续9天的数据,共2025条,时间间隔为5分钟.具 ...

  6. r软件时间序列分析论文_高度比较的时间序列分析-一篇论文评论

    r软件时间序列分析论文 数据科学 , 机器学习 (Data Science, Machine Learning) In machine learning with time series, using ...

  7. 时间序列分析及应用r语言pdf_R语言:时间序列经典分析法(二)

    题记:本文是个人的读书笔记,仅用于学习交流使用.本文将深入研究时间序列技术. 01 解决什么问题? 前面一章,介绍了时间序列中涉及到的基本概念,本章将在此基础上介绍如何对时间序列的资料进行分析,怎么选 ...

  8. 使用R语言对股票数据进行时间序列分析

    tushareID:469251 R语言相对于python在做统计分析是十分方便的软件,时间序列分析在数理统计理论方面很有支撑,解释性也很强,理论已经很成熟,不了解的小伙伴可以去搜下相关课程. 这里记 ...

  9. R语言mgcv包时间序列分析在空气污染与健康领域的应用(3)---模型自由度选择

    广 义 相 加 模 型 ( generalized additional model,GAM)是对传统广义线性模型的非参数拓展,可有效处理解释变量与效应变量间复杂的非线性关系.GAM 目前已广泛应用于 ...

  10. R语言mgcv包时间序列分析在空气污染与健康领域的应用(1)

    在空气污染与健康研究领域,经常需要用时间序列方法将随时间变化的污染物暴露资料和随时间变化的事件发生数资料联系起来,分析人群健康结局与暴露水平之间的关系. 时间序列分析是根据系统观测得到的时间序列数据, ...

最新文章

  1. python 模拟登陆智联_Python+scrapy爬虫之模拟登陆
  2. 微信小程序 rpx和px转换
  3. freemarker配置
  4. JavaScript 操作 HTML DOM (文档对象模型) 相关知识点
  5. ARM Cortex-M0(6)--- 存储器系统
  6. C语言小知识---特殊的字符串
  7. android studio后端写在哪里_c++写的在终端上的2048游戏
  8. centos 7安装java开发环境
  9. LWIP协议栈详解(2)_网络接口层与协议栈初始化
  10. friendly发音_friendly是什么意思
  11. python视频分段_Python玩转视频处理(四):视频按场景进行分割
  12. 在AI里怎么把一行字拆成单个的字,并且可编辑
  13. PL/SQL语言简单案例
  14. ISCC2018 Misc WriteUp
  15. 仰望星星的孩子-2014年终总结
  16. Pandas 中 Series 和 DataFrame 知识点
  17. 【考研】2022暨南大学848 电子信息(计算机技术) 经验贴 经验贴汇总
  18. BSCI标准审核纲要 建议收藏
  19. #创新应用#全球快递追踪:五次查询只需1KB!
  20. java 输出 大小写字母 a-z A-Z

热门文章

  1. ERP实施流程的步骤
  2. 【通信】基于短波通信系统仿真matlab源码含 GUI
  3. wps姓名隐藏为星号_wps表格怎么把重要数字隐藏用星号显示?
  4. OO第5-7次作业总结
  5. Sqli-labs——lesson25(联合查询和报错注入,附各种sql万能密码)
  6. 18个网站的Python爬虫登录示例 | 开源项目推荐
  7. 【0912】小V全营养-维他美仕全营养
  8. 很好的db2 学习资料(windows)
  9. ROS2与C++入门教程-目录 - 创客智造
  10. ros2与Python入门教程-创建ros2包 - 创客智造