![]()
内容推荐 本书采用故事的方式讲解了软件编程,尤其是后端编程的重要领域,侧重原理性知识。 本书分为7章,第1章介绍了负载均衡和双机热备的原理,以及系统调用、阻塞、异步等重要概念;第2章介绍了session、token、缓存、数据复制、分布式ID、NoSQL等后端编程必备的知识;第3章介绍了后端编程常用软件的原理;第4章介绍了各种编程语言的特性;第5章介绍了各种编程语言的本质;第6章介绍了网络安全相关知识;第7章则总结了作者多年的工作经验。 这不是一本编程的入门书,刚开始学习编程的“纯小白”读起来会比较吃力,读后可能会失望,但是稍有编程基础的读者读起来会非常过瘾,读后会产生一种“原来如此”的感觉。 作者简介 刘欣(@码农翻身):15年的软件行业从业经验,前IBM系统架构师,擅长企业应用架构和设计,领导过多个企业级应用架构设计和开发工作。 目录 第1章 基础知识 1.1 负载均衡的原理 1.1.1 隐藏真实服务器 1.1.2 偷天换日 1.1.3 四层还是七层 1.1.4 责任分离 1.1.5 后记 1.2 双机热备的原理 1.2.1 夜半惊魂 1.2.2 详细设计 1.2.3 汇报工作 1.2.4 充分利用资源 1.3 “软件巨头”卧谈会 1.4 操作系统和Web服务器那点事儿 1.4.1 操作系统老大 1.4.2 系统调用 1.4.3 read和write 1.4.4 sendfile 1.5 我是一条内存 1.5.1 次序问题 1.5.2 编译器 1.5.3 信息=位+上下文 1.5.4 指针 1.5.5 第二天 第2章 后端风云 2.1 “干掉”状态,从session到token 2.1.1 美好的旧时光 2.1.2 session 2.1.3 沉重的负担 2.1.4 时间换空间 2.1.5 如何退出 2.2 MySQL:缓存算什么 2.2.1 从进程内到进程外 2.2.2 数据不一致 2.3 Redis:MySQL算什么 2.3.1 黑客攻击 2.3.2 缓存空值 2.3.3 布隆过滤器 2.3.4 数据失效 2.4 MySQL:硬盘罢工了,我该怎么办 2.4.1 读写分离 2.4.2 基于SQL语句的复制 2.4.3 基于行的复制 2.4.4 数据延迟 2.5 分布式ID 2.5.1 重复执行 2.5.2 遗漏执行 2.5.3 各显神通 2.5.4 抛弃数据库 2.6 我建议你了解一点儿Serverless 2.6.1 局域网时代 2.6.2 数据中心 2.6.3 虚拟化 2.6.4 理想模式 2.6.5 Serverless的特点 2.7 NoSQL:一个帝国的崛起 2.7.1 关系数据库帝国 2.7.2 危机 2.7.3 新希望 2.7.4 反抗 2.7.5 新的帝国 第3章 著名软件是怎么炼成的 3.1 搜索之路 3.1.1 引子 3.1.2 倒排索引 3.1.3 更进一步 3.1.4 架构 3.1.5 抽象 3.1.6 互联网应用的新需求 3.1.7 从Java API到Web API 3.1.8 分布式 3.1.9 集群 3.1.10 Elasticsearch的真正传奇 3.2 HDFS的诞生 3.2.1 牛刀小试 3.2.2 分布式 3.2.3 元数据 3.2.4 读取文件 3.2.5 写入文件 3.2.6 结束还是开始 3.2.7 并行计算 3.2.8 深入讨论 3.2.9 MapReduce 3.3 一个著名的任务调度系统是怎么设计的 3.3.1 实习生张大胖 3.3.2 crontab达人的烦恼 3.3.3 另起炉灶 3.3.4 持久化 3.3.5 高可用 3.3.6 开源 3.4 咖啡馆的故事 3.4.1 两个古怪老头儿 3.4.2 RPC 3.4.3 XML-RPC 3.4.4 SOAP 3.4.5 几年以后 3.4.6 RESTful的硬伤 3.4.7 中间层 3.4.8 灵活查询 3.4.9 古怪的查询 3.5 ZooKeeper到底是什么 3.5.1 小梁的邮件 3.5.2 小王的Master选举 3.5.3 小蔡的分布式锁 3.5.4 ZooKeeper 3.6 一件程序员必备武器的诞生 3.6.1 调试的基础 3.6.2 JVM接口 3.6.3 通信 3.6.4 调试器 3.6.5 早朝 第4章 编程语言帝国争斗 4.1 Java帝国对Python的渗透能成功吗 4.1.1 引子 4.1.2 泛型 4.1.3 反射 4.1.4 动态代理 4.1.5 锦囊妙计 4.1.6 真相大白 4.2 为什么Python不用设计模式 4.2.1 Python没有接口 4.2.2 Adapter模式 4.2.3 单例模式 4.2.4 Visitor模式 4.2.5 尾声 4.3 Java小王子历险记 4.3.1 JavaScript帝国 4.3.2 再次出发 4.3.3 Go帝国 4.4 Java能抵挡住JavaScript的进攻吗 4.4.1 JavaScript的进攻 4.4.2 非阻塞异步I/O 4.4.3 京城酒楼 4.4.4 I/O府邸 4.4.5 异步操作 4.4.6 为什么是Vert.x 4.5 JVM和Python解释器的硬盘夜话 4.5.1 JVM先生 4.5.2 垃圾回收 4.5.3 GIL 4.5.4 尾声 4.6 Java国王:这才是真正的封装 4.6.1 把类隐藏起来 4.6.2 类的朋友 4.6.3 模块化 4.6.4 ServiceLoader 第5章 编程语言的本质 5.1 C语言这么厉害,它自身又是用什么语言写的. 5.2 为什么面向对象糟透了 5.3 C语言:春节回老家过年,我发现只有我没有对象 5.3.1 聚会 5.3.2 串门 5.3.3 封装 5.3.4 继承 5.3.5 多态 5.4 什么是元编程 5.4.1 临下班的紧急任务 5.4.2 模板:用程序来生成程序 5.4.3 元编程 5.5 为什么“无人问津”的Lisp可以这么硬气 5.5.1 Lisp 5.5.2 程序就是数据 5.5.3 开发语言的语言 5.5.4 最后的反击 5.6 JavaScript打工记 5.6.1 栈 5.6.2 唯一的员工:单线程 5.6.3 异步函数怎么办 5.6.4 队列 5.6.5 事件队列 5. 序言 转眼间,距离《码农翻 身》的出版已经过了5年时 间,很多读者催问:“什么 时候出《码农翻身2》?我 已经等不及了!”“疫情都结 束了,《码农翻身2》在哪 儿?”…… 现在《码农翻身2》终于 来了,之所以拖了这么长的 时间,主要是因为中间“插 播”了另外一本书——《半 小时漫画计算机》,该书使 用纯漫画的方式来讲解计算 机基础知识,这对我来说是 一个全新的尝试,花费了我 不少的时间和精力。 近几年来,我一直在微 信公众号“码农翻身”上坚持 输出原创技术文章,慢慢地 ,竟然积累了近1000篇, 可见坚持的力量是非常惊人 的。 有一次,我参加一个同 学组织的聚会,并在聚会上 无意中提起了自己正在运营 的微信公众号“码农翻身”, 有几个我并不认识的朋友搜 索并关注了该公众号以后就 惊呼:“哇,这么多我的好 友都在关注啊!”可见公众 号的读者越来越多,影响力 也越来越大。 熟悉我的朋友应该知道 ,我不太喜欢追热点写文章 ,因为热点过后很快就“烟 消云散”了,我更喜欢写那 些稳定的、不容易过时的知 识。 《码农翻身》主要关注 的是计算机的底层,比如进 程、线程、硬盘、键盘、 TCP/IP、Socket、HTTPs、 数据库原理、Web服务器原 理等。 本书则把焦点稍微向上 移了一点儿,关注了一些中 间层及以上的内容,比如负 载均衡、双机热备、数据复 制、缓存、分布式ID等。但 是我在选择相关技术的时候 ,依然会把稳定的、不容易 过时的技术作为重要标准。 我也不喜欢那种上来就 讲解技术细节、安装步骤、 配置方法的枯燥文章,因为 读者看了之后往往一头雾水 ,也不知道为什么有这个东 西,解决了什么问题。所以 ,本书会尽量避免讲解技术 细节,而是会采用故事的方 式来讲解技术本质。 还是那句话,Why有时 候比How重要得多,懂得 Why以后,再去看How,就 犹如开启了“上帝视角”,一 切都变得简单起来。 本书 特色 我记得自己在高中暑 假时阅读金庸的武侠小说, 被曲折的故事情节吸引,沉 迷其中,阅读速度极快,只 要三四天就能读完一部,虽 然主要是走马观花,但足见 故事的魅力。 所以,我在写文章的时 候也有意把枯燥乏味的技术 包装一下,变成好玩有趣的 故事,在故事中让主人公不 断遇到问题,不断制造悬念 ,吸引大家看下去,不知不 觉就把技术掌握了。 从《码农翻身》到《码 农翻身2》,这种采用故事 的方式讲解技术的风格一直 延续下来,也受到了大量读 者的热烈欢迎。 本书和《码农翻身》一 样,每个章节都是独立的, 读者不用从头到尾阅读,完 全可以查看目录,挑选自己 喜欢的章节去阅读。 读者 对象 这不是一本编程的入 门书,刚开始学习编程的“ 纯小白”读起来会比较吃力 ,读后可能会失望,但是稍 有编程基础的读者读起来会 非常过瘾,读后会产生一种 “原来如此”的感觉。 比如,对于“C语言:春 节回老家过年,我发现只有 我没有对象”这一节,如果 你没有学过面向对象的相关 知识,就可能无法透彻理解 其中的一些“梗”,但是有一 定基础的读者就能心领神会 。再比如,对于“编程语言 的巅峰”这一节,如果你对 基本的数组、条件分支、函 数都不了解,就无法领略汇 编语言的厉害之处。 虽然本书侧重于服务器 端的知识,偏向后端编程, 似乎更适合后端程序员,但 是它并没有讲解技术细节, 而是主要讲解技术原理,所 以对前端程序员来说,也是 一个了解后端编程的好机会 。 另外,本书也不是一本 参考书,它的目的不是希望 大家看完以后照搬,而是希 望帮助大家理解一些技术的 本质。 勘误和支持 由于作者水平有限,书 中难免会出现一些错误或者 不准确的地方,恳请广大读 者批评指正。 如果大家在阅读过程中 产生了疑问或者发现了Bug ,欢迎到微信公众号“码农 翻身”后台留言,我会一一 回复。 致谢 感谢微信公 众号“码农翻身”的读者,你 们的鼓励和支持是我前进的 最大动力,很多人直接添加 了我的微信号,只是为了向 我说一声感谢,令我非常感 动。 还有很多人在各个平台 上自发宣传,发现了盗版还 会帮我打假,谢谢你们! 感谢成都道然科技有限 责任公司的姚新军老师,他 提出了很多非常专业的意见 和建议,没有他,本书无法 面世。 谨以此书献给所有热爱 编程的朋友们! |