本书用故事的方式讲解了软件编程的若干重要领域, 侧重于基础性、原理性的知识。第1章讲述计算机的基础知识,包括程序的运行原理,进程、线程、文件系统、I/O系统、数据库原理、TCP/IP,Socket,编译原理的概述,递归等。第2章侧重Java的基础知识,包括Java的历史、JVM、序列化、持久化、JDBC、JSP、动态代理、泛型、注解、日志、JMS、CAS等。第3章则偏重Web后端编程,包括HTTPS、SSO、OAuth、RPC、SOA、微服务、HTTP服务器的原理、缓存、分布式一致性算法、高可用性、数据库读写分离等。第4章讲解代码管理的本质,包括各种源码管理工具(SVN, Git)的原理,Ant和Maven的原理,如何做单元测试,烂代码的产生等。第5章讲述了JavaScript的历史、Node.js的原理、程序的链接、命令式和声明式的区别以及作者十多年来使用过的各种编程语言的感受。第6章是作者的经验总结和心得体会,包括职场发展的注意事项、作为架构师的感想、写作的好处等。
		
	
刘欣(@码农翻身):15年的软件行业从业经验,前IBM系统架构师,擅长企业应用架构和设计,领导过多个企业级应用架构设计和开发工作。
第1章   计算机的世界你不懂   1
1.1  我是一个线程   1
初生牛犊   1
渐入佳境   4
虎口脱险   5
江湖再见   8
1.2  TCP/IP之大明内阁   9
1.3  TCP/IP之大明邮差   12
1.4  CPU阿甘   17
启动   17
运行   18
新装备:缓存   19
自我提升:流水线   20
1.5  我是一个进程   21
批处理系统   22
多道程序   22
地址重定位   24
分时系统   26
分块装入内存   27
虚拟内存:分页   28
分段 分页   30
程序的装载   31
线程   35
1.6  我是一块硬盘   36
内部结构   37
文件   38
文件的存放   39
管理空闲块   44
文件系统   45
1.7  我是一个键盘   46
二等公民   46
总线和端口   47
轮询(程序式I/O)   48
中断   49
DMA   50
1.8  数据库的奇妙之旅   51
无纸化办公   51
数据的冗余和不一致   52
李氏查询   52
并发访问   54
原子性问题   56
安全   58
1.9  搞清楚Socket   59
1.10  从1加到100:一道简单的数学题挑战一下你的大脑   64
CPU和内存   64
从1加到100   65
热身   65
正式出发   65
1.11  一个翻译家族的发家史   68
机器语言   68
汇编语言   69
高级语言   70
1.12  编程世界的那把锁   74
共享变量惹的祸   74
争抢吧,线程   75
改进   76
信号量   77
1.13  绕不开的加法器   81
1.14  递归那点事儿   85
第2章   Java帝国   91
2.1  Java:一个帝国的诞生   91
C语言帝国的统治   91
反抗   92
一鸣惊人   93
开拓疆土   93
帝国的诞生   94
2.2  我是一个Java Class   96
陌生警察   96
刺探信息   97
初识虚拟机   98
快乐假期   102
真相大白   103
2.3  持久化:Java帝国反击战   104
断电的威胁   104
数据库联合酋长国   105
表面风光的EJB   106
轻量级O/R Mapping框架   106
帝国的反击   107
2.4  JDBC的诞生   108
谈判   108
统一接口   110
面向接口编程   111
简单工厂   112
数据驱动   114
工厂方法   115
2.5  Java帝国之宫廷内斗   119
JDBC大臣   119
密谋   120
两阶段提交   121
JTA   123
塞翁失马,焉知非福   124
基本可用   125
走漏风声   127
宫廷激辩   128
2.6  JSP:一个装配工的没落   131
黑暗岁月   131
服务器端动态页面   132
标签库   134
模板引擎   134
草根搅局   135
2.7  Java 帝国之消息队列   137
张家村的历史   137
拆分   138
新问题   139
消息队列   139
互不兼容的MQ   140
消息队列接口设计   141
配置和代码的分离   143
再次抽象   144
2.8  Java帝国之动态代理   147
深夜奏对   147
明察暗访   149
Java 动态代理   150
2.9  Java注解是怎么成功上位的   153
XML大臣   153
安翰林献计   154
早朝争斗   157
2.10  Java帝国之泛型   159
新王登基   159
C 使者   159
泛型实现   162
泛型方法   163
泛型和继承   164
2.11  一个著名的日志系统是怎么设计出来的   166
前言   166
张家村   167
小张的设计   167
正交性   170
Log4j   171
尾声   171
2.12  序列化:一个老家伙的咸鱼翻身   172
寒冬的蛰伏   172
XML和JSON的挑战   173
新协议的崛起   175
2.13  加锁还是不加锁,这是一个问题   176
互斥锁   176
要不要加锁   177
CAS的扩展   179
2.14  Spring 的本质   182
问题来源   183
设计模式:模板方法   184
设计模式:装饰者   186
AOP   187
实现AOP   188
对象的创建   189
IoC与DI   191
第3章   浪潮之巅的Web   192
3.1  Web的起源   192
3.2  两个程序的爱情故事   195
好感   195
分离   196
网络   197
Web   198
3.3  一个故事讲完HTTPS   199
总有一种被偷窥的感觉   199
RSA:非对称加密   200
非对称加密 对称加密   202
中间人劫持   202
你到底是谁   203
HTTPS    206
3.4  机房夜话   207
第一夜   207
第二夜   209
第三夜   211
3.5  从密码到token,一个有关授权的故事   215
我把密码献给你   215
token   216
授权码 token   218
后记   220
3.6  后端风云   220
数据库老头儿   220
危机   221
党委扩大会议   221
分家   223
Redis   224
余数算法   227
一致性Hash算法   229
Hash槽 (Hash Slot)   233
故障转移   235
高可用的Nginx   237
高可用的Tomcat   238
数据库的读写分离   240
3.7  我是一个函数   243
3.8  从SOA到微服务   246
3.9  什么是框架   249
3.10  HTTP Server:一个差生的逆袭   252
HTTP Server 1.0   252
HTTP Server 2.0:多进程   253
HTTP Server 3.0:select模型   254
HTTP Server 4.0:epoll模型   255
第4章   代码管理那些事儿   258
4.1  版本管理简史   258
“人肉” 版本管理   258
锁定文件:避免互相覆盖   259
允许冲突:退一步海阔天空   260
分支:多版本并行   261
分布式管理:给程序员放权   262
程序员也爱社交   264
4.2  Build的演进之路   265
手工Build的烦恼   265
自动化Build   267
Java 与 XML   268
消除重复   270
4.3  烂代码传奇   275
4.4  敏捷下的单元测试   277
敏捷运动   277
困惑   278
讨论   279
一年以后   280
4.5  再见!Bug   281
第5章   我的编程语言简史   284
5.1  JavaScript :一个草根的逆袭   284
出世   284
成长   286
第一桶金   288
发明JSON   289
人生巅峰   291
5.2  Node.js:我只需要一个店小二   292
5.3  C老头儿和Java小子的硬盘夜话   295
5.4  编程语言的“爱恨情仇”   300
让人怀疑的C 语言   300
被忘却的 VB & Visual FoxPro   301
蹂躏我的C    302
赖以谋生的Java    303
优雅的Ruby    304
5.5  命令式编程 VS 声明式编程   306
一则小故事   306
命令式编程   306
声明式编程   307
第6章   老司机的精进   309
6.1  凡事必先骑上虎背,和性格内向的程序员聊几句   309
6.2  码农需要知道的“潜规则”   311
上帝的规矩:局部性原理   311
坐飞机的怎么和坐驴车的打交道:缓存   311
抛弃细节:抽象   312
我只想和邻居打交道:分层   312
我怕等不及:异步调用   313
大事化小,小事化了:分而治之   314
6.3  15年编程生涯,一名架构师的总结   314
好奇心   315
养成计算机的思维方式   315
扎实基础,融会贯通   317
要透彻地理解一门技术的本质   317
能写漂亮的代码   318
抽象的能力   319
技术领导力   319
6.4  对自己狠一点,开始写作吧   320
6.5  学习编程的四兄弟   322
摇摆不定的老大   322
“小仓鼠”老二   322
不看书的老三   323
半途而废的老四   323