内容简介
《计算之道卷 Ⅲ:C++语言与 JVM 源码》是一本深入探讨计算机科学与技术的图书。本书旨在帮助读者更深入地理解计算机内部的工作原理,并探索从高级编程语言到 JVM 源码等核心概念。本书适合对计算机科学和底层技术感兴趣的读者,无论是学习计算机基础知识还是进一步扩展技术视野,都能从本书中获益良多。
在《计算之道卷Ш:C++语言与JM 源码》中,作者以清晰易懂的语言详细介绍了高级编程语言的工作原理。通过本书,读者将了解编程语言的特性和原理、计算机网络、JVM 等关键概念,从而更好地理解计算机执行程序的方式。以及将学习JVM 源码,并了解 hotspot、全局模块等底层机制。结合实例和案例研究,读者将能够编写高效、可靠的高性能应用程序。
无论是学生、工程师还是对计算机科学感兴趣的读者,本书都将成为你不可或缺的参考资源。
目录
第1 章 C++语言的推理 1
1.1 编程语言演变过程 1
1.2 C++语言出现的原因 3
1.2.1 C 语言图书管理系统 4
1.2.2 C++语言的出现原因 5
1.2.3 C++语言图书管理系统 7
1.3 面向过程和面向对象 8
1.4 C++语言特性来源 11
1.5 其他编程语言原理推导 12
1.6 编程语言的共性 13
1.7 小结 15
第2 章 C++语言的特性和原理 17
2.1 对象和类原理 17
2.1.1 C++语言的class 关键字 19
2.1.2 C++语言的new/delete运算符 19
2.1.3 C++语言的this 指针 22
2.2 异常处理 23
2.2.1 C++语言异常处理 23
2.2.2 Java 异常处理 24
2.3 C++语言的特性 26
2.3.1 C++语言的hello world 26
2.3.2 C++语言的数据类型 27
2.3.3 C++语言的指针和引用 28
2.3.4 C++语言的类与对象 29
2.3.5 C++语言的多态 31
2.3.6 C++语言的泛型编程 32
2.4 汇编、C 和C++语言存在的问题 35
2.4.1 汇编语言 35
2.4.2 C 语言 36
2.4.3 C++语言 37
2.4.4 最常见的问题 38
2.5 Java 语言出现的推论 40
2.5.1 内存泄漏和野指针规避 40
2.5.2 新语言的设计要求 42
2.5.3 新语言的两种实现方法 43
2.6 如何通过底层来学习不同的编程语言 45
2.7 小结 48
第3 章 计算机网络推理 50
3.1 计算机网络的研究内容 50
3.2 计算机网络协议 52
3.2.1 什么是协议 52
3.2.2 谁来制定协议 53
3.2.3 协议分层 54
3.3 计算机网络地址 56
3.3.1 MAC 地址 56
3.3.2 IP 地址 58
3.3.3 ARP 59
3.4 数据传输 61
3.5 计算机网络下三层 61
3.6 小结 62
第4 章 传输协议原理 64
4.1 UDP 65
4.1.1 四元组 65
4.1.2 UDP 的特点 66
4.1.3 UDP 的使用场景 66
4.2 TCP 68
4.2.1 TCP 包头部分 68
4.2.2 建立TCP 链接 69
4.2.3 释放TCP 连接 71
4.2.4 TCP 状态机 73
4.3 TCP 可靠传输重传机制 75
4.4 TCP 可靠传输—滑动窗口 82
4.5 TCP 可靠传输—流量控制 85
4.6 TCP 可靠传输—拥塞控制 86
4.6.1 TCP 的拥塞控制原理 87
4.6.2 拥塞控制的算法 88
4.7 TCP 和UDP 的区别 92
4.8 小结 93
第5 章 Linux 网络包处理源码分析 94
5.1 Linux 网络收包的总体流程 96
5.2 Linux 启动的网络准备 98
5.2.1 网卡e100 驱动初始化 99
5.2.2 启动网卡e100 105
5.2.3 网卡e100 网络数据发送队列初始化 107
5.2.4 网卡e100 网络数据接收队列初始化 109
5.2.5 网卡e100 的中断处理 112
5.2.6 开启硬中断 113
5.2.7 软中断ksoftirqd 内核线程 114
5.2.8 网络子系统初始化 121
5.2.9 协议栈注册 123
5.3 Linux 接收网络数据 129
5.3.1 e100 对网络数据包的存储 130
5.3.2 硬中断处理 131
5.3.3 软中断处理 132
5.3.4 网络层IP 协议栈处理 143
5.3.5 传输层UDP 协议栈处理 152
5.4 网络消息最终归途 159
5.4.1 激活用户进程 159
5.4.2 recvfrom 系统调用 167
5.4.3 Socket 数据结构 170
5.4.4 socket 创建 171
5.5 小结 179
第6 章 应用层协议原理 181
6.1 HTTP 协议 181
6.1.1 DNS 解析 182
6.1.2 发送HTTP 请求 183
6.1.3 HTTP 请求的响应 184
6.1.4 浏览器解析 185
6.1.5 浏览器进行页面渲染 186
6.1.6 一次完整的HTTP 请求小结 187
6.2 扫码支付背后那些事 188
6.2.1 扫码支付的工作流程 189
6.2.2 扫码支付如何保证交易安全 189
6.2.3 HTTPS 协议 191
6.2.4 Https 协议建立连接 194
6.3 直播使用的流媒体协议 197
6.3.1 直播的技术组成部分 197
6.3.2 直播的核心技术 197
6.4 小结 199
第7 章 Java Hello World 底层推理 201
7.1 回顾C 语言的Hello World 201
7.1.1 Hello World 在Linux 平台编译执行过程 202
7.1.2 hello.c 程序编译过程 202
7.1.3 hello.out 可执行文件格式及内存映像 203
7.1.4 hello.out 程序装载和执行的过程 203
7.1.5 入口函数和程序初始化 205
7.1.6 Windows 操作系统的hello.c 206
7.1.7 C 语言的平台关联性 207
7.2 Java 的HelloWorld 208
7.3 Hello
前言/序言
1. 为什么要写这本书
本书是《计算之道》丛书的第III 卷。前两卷对计算机底层原理和计算机操作系统相关知识进行了深入探索,并结合混沌树进行串联。本书在前两卷的基础上进行扩展,使大家掌握的底层知识落地。同时,本书也是对混沌学堂课程内容的提炼和总结。
计算机网络是互联网和分布式系统的基石,了解网络协议、通信模型和网络编程是从事网络开发和系统架构的关键要素。
C++语言是一种高性能的编程语言,广泛应用于系统级开发、游戏开发和嵌入式系统等领域,掌握C++语言的语法和特性对于提升开发效率和代码质量至关重要。
JVM 是Java 应用程序的核心,它负责解释和执行Java 字节码,并提供垃圾回收、内存管理和线程调度等功能,深入了解JVM 的工作原理和调优技巧有助于编写高效的Java应用程序。
本书旨在对这三个主题进行综合介绍,帮助读者掌握扎实的基础知识,并理解它们在实际应用中的作用。
其实在现实学习过程中,大家经常学习计算机底层知识原理,但这种知识在工作中使用频率不高,又经常忘记。一边学习,一边遗忘,已经成为学习计算机底层知识原理的常态。有没有一种方法可以避免这种状况发生?这就是黄俊老师的计算机混沌学习法—尝试用混沌知识树,将计算机底层知识原理进行梳理,通过推理、推论的方式,提高大家对底层知识的理解,直到彻底掌握,不再遗忘。
本书适合以下读者阅读:希望学习计算机网络、C++语言和JVM 基础知识的读者;需要深入了解网络编程的读者;在工作中遇到网络、C++语言或JVM 相关问题,希望系统学习和解决的读者;需要深入了解计算机底层知识的读者。
2. 背景知识
本书假设读者已具备一定的编程基础和计算机科学知识。
最好是已经阅读过《计算之道》第I 卷、第II 卷的读者,理解本书内容将更为轻松。
本书将详细讲解C++语言、计算机网络和JVM 的基础知识,并提供实例和案例来帮助读者理解和应用所学知识。
3. 如何阅读本书
本书按照C++语言、计算机网络和JVM 的顺序组织,每个主题包含多个章节,依次递进地介绍相关概念和技术。每个章节都以清晰的流程和总结开头,帮助读者理解和记忆所学内容。
读者可以根据自己的需求和兴趣选择阅读顺序。如果已经熟悉某个主题,可以跳过相应章节,直接阅读感兴趣的内容。
第1 章 C++语言的推理
在这一章中,你将了解从机器语言到汇编语言,再到C 语言的语言演进过程,以及这些语言出现的原因和存在的缺点。也将了解C++语言的出现如何解决人们对计算机软件的需求,面向对象和面向过程的思想差异。并将领略学习计算机底层知识的魅力和各个编程语言的共性。
第2 章 C++语言的特性和原理
在这一章中,介绍了C++语言特性的底层原理。同时总结了C 类语言存在的问题。你将了解如何设计一门新语言,知道Java 语言的出现是为了专注于业务需求的开发,你还将了解如何通过底层原理来学习不同的编程语言。
第3 章 计算机网络推理
在这一章中,介绍了计算机网络下三层,同时让读者明确知道什么是计算机网络协议,计算机网络究竟研究什么。我们使用混沌学习推理方法,避免读者陷入大量名词堆砌的记忆。
第4 章 传输协议原理
在这一章中,你将了解TCP 是一个无比复杂的协议,需要解决网络传输中的许多问题。这些问题不仅涉及技术层面,还需要避免漏洞,如果存在漏洞被黑客利用,将会带来巨大损失。你还将了解TCP 中很多解决方案可以在不同业务场景中被借鉴。关于TCP 这个协议的细节,推荐阅读《TCP/IP 详解 卷1:协议》。
第5 章 Linux 网络包处理源码分析
在这一章中,深入分析了Linux 网络接受数据包的全过程。在Linux 操作系统中,最复杂的模块就是网络模块。在这里,你将了解Linux 操作系统网络收包细节:涉及网卡驱动、网络子系统、协议栈,以及内核ksoftirqd 线程等内核组件之间的交互。
第6 章 应用层协议原理
在这一章中,你将了解最常见却又最容易忽视的HTTP 协议。从网络支付出发,了解HTTPS 如何保证交易安全。你还将了解直播所使用的核心技术。
第7 章 Java Hello World 底层推理
希望了解虚拟机,首先要了解真实的物理机。在这一章中,首先介绍了C 语言程序Hello World 在真实的物理机下是如何编译的,编译后的二进制格式ELF,以及Linux 是如何执行ELF 的过程,作为相关知识背景。基于这些相关知识背景,我们推理出JVM 的设计目的。
第8 章 Hotspot JVM 启动原理
在这一章里,你将了解Hotspot 的启动过程,以JavaMain()函数为突破点,开启JVM源码的阅读。你还将了解类加载器,从JVM 虚拟机的角度出发,介绍三层类加载器和双亲委派模型,为深入理解JVM 原理打好基础。结合构建混沌树主干和枝叶的方法,将所学知识进行关联。
4. 勘误和支持
由于本书不