编程
搞定系统设计:面试敲开大厂的门 豆瓣
作者: Alex Xu 译者: 徐江 电子工业出版社 2023 - 11
系统设计面试被认为是所有技术面试中难度最大的面试,因为面试题的范围都非常广且模糊,其答案也是开放的,不存在标准答案或正确答案。本书是专门为准备系统设计面试的读者而撰写的,重点讨论了分布式系统中的常用组件和大型Web 应用的系统架构,涵盖了几类常见的典型应用,包括聊天系统、视频流系统、文件存储系统(云盘)、支付系统等,旨在帮助读者掌握构建一个可扩展的系统所需的基础知识,为面试做好充分准备。
作为过来人,作者提出了应对面试题的“四步法”,即确定问题范围→总体设计→细节设计→总结,书中的案例基本上都是按照这个步骤进行解析的。这种独特的呈现方式,直接针对面试者在面试过程中可能遇到的问题,帮助他们厘清思路,有条不紊地作答。
通过本书,读者可以了解不同Web 应用的系统设计方案的要点及采用的技术,据此查漏补缺,补齐自己知识体系中的短板,为面试成功增添更多的可能。而对于已经是架构师的读者而言,书中的案例将为他们提供新的思路和灵感,有助于他们在面试中更加从容地展现自己的设计思路和实践经验。
Go专家编程 豆瓣
作者: 任洪彩 2020 - 7
《Go专家编程》深入地讲解了Go语言常见特性的内部机制和实现方式,大部分内容源自对Go语言源码的分析,并从中提炼出实现原理。通过阅读本书,读者可以快速、轻松地了解Go语言的内部运作机制。
本书首先介绍Go语言常见的数据结构及控制结构的实现原理,包括管道、切片、Hash表、select和for-range等,这部分内容大都以几个精心准备的测验题目开头,每个测验题目均对应一个知识点,读者可以借此测验自身对该知识点的掌握程度。接着介绍了Go语言最基础的概念,包括协程的概念、协程调度模型、协程调度策略,以及内存分配和垃圾回收相关的内容。本书还介绍了一些标准库、异常处理和依赖管理等非语法相关但非常重要的内容。最后结合作者的见闻,整理了一些发生在真实项目中的编程陷阱。
Go语言学习笔记 豆瓣
作者: 雨痕 电子工业出版社 2016 - 6
作为时下流行的一种系统编程语言,Go 简单易学,性能很好,且支持各类主流平台。已有大量项目采用 Go 编写,这其中就包括 Docker 等明星作品,其开发和执行效率早已被证明。本书经四年多逐步完善,内容覆盖了语言、运行时、性能优化、工具链等各层面知识。且内容经大量读者反馈和校对,没有明显的缺陷和错误。上卷细致解析了语言规范相关细节,便于读者深入理解语言相关功能的使用方法和注意事项。下卷则对运行时源码做出深度剖析,引导读者透彻了解语言功能背后的支持环境和运行体系,诸如内存分配、垃圾回收和并发调度等。本书不适合编程初学入门,可供有实际编程经验或正在使用Go 工作的人群参考。
重构 豆瓣
Refactoring: Improving the Design of Existing Code
8.4 (5 个评分) 作者: Martin Fowler 译者: 熊节 中国电力出版社 2003 - 8
Martin Fowler和《重构:改善既有代码的设计》(中文版)另几位作者清楚揭示了重构过程,他们为面向对象软件开发所做的贡献,难以衡量。《重构:改善既有代码的设计》(中文版)解释重构的原理(principles)和最佳实践方式(best practices),并指出何时何地你应该开始挖掘你的代码以求改善。《重构:改善既有代码的设计》(中文版)的核心是一份完整的重构名录(catalog of refactoring),其中每一项都介绍一种经过实证的代码变换手法(code transformation)的动机和技术。某些项目如Extract Method和Move Field看起来可能很浅显,但不要掉以轻心,因为理解这类技术正是有条不紊地进行重构的关键。点击进入该书更多详细信息。
深度探索C++对象模型 豆瓣
Inside the C++ Object Model
作者: [美] Stanley B. Lippman 译者: 侯捷 电子工业出版社 2012 - 1
作者Lippman参与设计了全世界第一套C++编译程序cfront,这本书就是一位伟大的C++编译程序设计者向你阐述他如何处理各种explicit(明确出现于C++程序代码中)和implicit(隐藏于程序代码背后)的C++语意。
本书专注于C++面向对象程序设计的底层机制,包括结构式语意、临时性对象的生成、封装、继承,以及虚拟——虚拟函数和虚拟继承。这本书让你知道:一旦你能够了解底层实现模型,你的程序代码将获得多么大的效率。Lippman澄清了那些关于C++额外负荷与复杂度的各种错误信息和迷思,但也指出其中某些成本和利益交换确实存在。他阐述了各式各样的实现模型,指出它们的进化之道及其本质因素。书中涵盖了C++对象模型的语意暗示,并指出这个模型是如何影响你的程序的。
对于C++底层机制感兴趣的读者,这必然是一本让你大呼过瘾的绝妙好书。
Linux 系统编程(第二版) 豆瓣
Linux System Programming
作者: Robert Love 东南大学出版社 2014 - 1
如何编写那些直接依赖于Linux内核和核心系统库提供的服务的软件?通过《Linux系统编程(第2版)(影印版)》,Linux内核参与者RobertLove(洛夫)为你提供了Linux系统编程方面的教程,Linux系统调用的参考手册,以及对于如何编写更聪明和更快的代码的来自内部人士的建议。Love清晰地指出了POSIX标准函数和Linux特别提供服务之间的差异。通过关于多线程的新章节,这本修订和扩展的版本在理论和实践上相结合,从多个编程主题上提供了深入的见解。
左耳听风 豆瓣
8.5 (8 个评分) 作者: 陈皓 电子工业出版社 2024 - 1
本书是IT与互联网世界知名技术人陈皓生前文章精粹,既囊括程序员从起步到进阶直至迈向卓越的优选路径及实现方法,也覆盖工程师从开启职业生涯到走向管理岗位直至创办公司的能力突破与细节修炼,更完整描绘了作者其人的独特经历、个性主张、人生趣味与技术理念。内容包含如何通过理解编程本质和范式、优质代码与架构成为有竞争力的程序员,如何通过注重高效沟通、研发效率、科学管理、合理考核、有效招聘、工程师文化来打造技术领导力,以及如何通过正确面对三观、技术变化、中年危机、他人评价、人生选择、时间管理、有效学习来实现持续成长。程序员可用此书来完成快速入门与境界提升,理工科学生及技术从业者可参照此书设计职业生涯,大众亦可从此书中觅得人生启迪与内心观照。
Linux环境编程:从应用到内核 豆瓣
作者: 高峰 2015 - 6
《UNIX环境高级编程》(简称APUE)几乎是Linux领域程序员人手必备的一本书。但在掌握和理解APUE的内容后,又该如何继续提高自己的技能,如何更深入地理解Linux环境编程及其背后的工作机制呢?本书将从一个全新的角度带领读者重新进入Linux环境编程,从应用出发,深入内核源码,研究Linux各接口的工作机制和原理,让读者不仅知其然,还知其所以然。作为Linux开发工程师,如果不仅掌握Linux的应用层开发,同时还熟悉Linux的内核源码,那么其在Linux环境下设计开发任何产品都将游刃有余,稳定且高效。
本书是Linux技术专家高峰和李彬的合力之作,是两个人多年开发经验的总结和分享,也是市场上唯一一本将Linux应用态与内核态相结合的技术图书,选择这种写作方式是为了向APUE的作者致敬。本书涵盖了APUE中大部分章节的内容,并针对Linux环境,以作者多年经验,详细解析了Linux常用接口的使用方法和陷阱。为了让读者更清楚地理解接口的工作原理,对于绝大部分接口,作者都会深入C库或内核源码进行全面分析。希望本书可以帮助读者打通Linux环境的应用和内核两条脉络,使两条线融会贯通,进一步提高开发水平。
深度探索Go语言 豆瓣
作者: 封幼林 清华大学出版社 2022 - 8
本书主要讲解了Go语言一些关键特性的实现原理,Nicklaus Wirth大师曾经说过:算法+数据结构=程序,语言特性的实现也不外乎就是数据结构+代码逻辑。
书共分为4个部分:第一部分是基础特性(第1章~第3章),第二部分是对象模型(第4章~第5章),第三部分是调度系统(第6章~第7章),第四部分是内存管理(第8章~第9章)。
书中主要内容包括:指针、函数栈帧、调用约定、变量逃逸、Function Value、包、defer panic、 方法、Method Value、组合式继承、接口、类型断言、反射、goroutine、 抢占式调度、同步、堆和栈的管理,以及GC等。书中包含大的探索示例和源码分析,在学会应用的同时还能了解实现原理。书中绝大部分代码都是用Go语言实现,还有少部分使用汇编语言,都可以使用Go官方SDK直接编译。探索过程循序渐进条理清晰,用到的工具也都是
SDK自带,方便读者亲自上手实践。本书适合Go语言的初学者,在学习语言特性的同时了解其实现原理。更适合有一定的Go语言应用基础,想要深入研究底层原理的技术人员。同样适合有一些其他编程语言基础,想要转学Go语言的开发者。
高性能MySQL(第4版) 豆瓣
作者: 【美】Silvia Botros / 【美】Jeremy Tinley 译者: 宁海元 / 周振兴 电子工业出版社 2022 - 10
《高性能 MySQL》一直是 MySQL 领域的经典之作,影响了一代又一代的 DBA 和技术人员,从第3 版出版到第 4 版出版过去了近十年,MySQL 也从 5.5 版本更新到了 8.0 版本。第 4 版中增加了大量对 MySQL 5.7 和 8.0 版本新特性的介绍,删除了一些在新版本中已经废弃或者不再常用的功能,还增加了对云数据库的介绍,减少了在官方文档中已有的基础使用和配置相关的内容。这些年,MySQL 经过在大量大规模互联网场景中的应用验证,使得本书在继续关注高性能之外,还用了较多的篇幅来介绍如何实现 MySQL 的大规模可扩展应用和合规性问题,这是相比第 3 版最大的不同,也是本书封面上所写的“经过大规模运维验证的策略”的体现。
《高性能MySQL(第4版)》适合数据库管理员(DBA)阅读,也适合系统运维和开发人员参考学习。不管你是数据库新手还是专家,相信都能从本书中有所收获。
编程珠玑(第2版) 豆瓣
Programming Pearls
作者: [美] Jon Bentley 译者: 黄倩 2019 - 10
非常有影响力的计算机科学著作之一,
融深邃思想、实战技术与趣味轶事于一炉的奇书,
带你真正领略计算机科学之美!
“《编程珠玑》是对我职业生涯早期影响最大的书之一,其中的许多真知灼见多年之后仍然使我受益匪浅。”
——Steve McConnell,软件工程大师,IEEE Software前主编,《代码大全》作者
◎编辑推荐
多年以来,当让程序员推选喜爱的计算机图书时,《编程珠玑》总是位于前列。正如自然界里珍珠出自细沙对牡蛎的磨砺,计算机科学大师乔恩·本特利以其独有的洞察力和创造力,从磨砺程序员的实际问题中凝结出一篇篇编程“珠玑”,成为世界计算机界名刊《ACM通讯》历史上*受欢迎的专栏,*终结集为两部计算机科学经典名著,影响和激励着一代又一代程序员和计算机科学工作者。本书为第一卷,主要讨论计算机科学中*本质的问题:如何正确选择和高效地实现算法。
在书中,作者选取许多具有典型意义的复杂编程和算法问题,生动描绘了历史上大师们在探索解决方案中发生的轶事、走过的弯路和不断精益求精的历程,引导读者像真正的程序员和软件工程师那样富于创新性地思考,并透彻阐述和总结了许多独特而精妙的设计原则、思考和解决问题的方法以及实用程序设计技巧。解决方案的代码均以C/C++语言编写,不仅有趣,而且有很大的实战示范意义。每章后所附习题极具挑战性和启发性,书末给出了简洁的解答。
◎内容简介
本书是计算机科学方面的经典名著。书的内容围绕程序设计人员面对的一系列实际问题展开。作者Jon Bentley 以其独有的洞察力和创造力,引导读者理解这些问题并学会解决方法,而这些正是程序员实际编程生涯中至关重要的。本书的特色是通过一些精心设计的有趣而又颇具指导意义的程序,对实用程序设计技巧及基本设计原则进行了透彻而睿智的描述,为复杂的编程问题提供了清晰而完备的解决思路。本书对各个层次的程序员都具有很高的阅读价值。
用Go语言自制解释器 豆瓣
Writing an Interpreter in Go
作者: [德] 索斯藤·鲍尔(Thorsten Ball) 译者: 孙波翔 2022 - 6
* 从零开始,自己写一门语言
* 体验从无到有实现类C语言的乐趣
在程序员与计算机的“交流”过程中,解释器无疑扮演着优秀的翻译角色。它为只懂0和1的计算机翻译源代码,为看似随机的字符赋予含义。这是如何实现的呢?充满好奇心的你,是否曾经思考过这个问题?跟随本书,你将揭开解释器的神秘面纱,通晓它的工作原理,并编写出自己的解释器。本书采用Go语言来为自创的编程语言Monkey实现解释器。你将为Monkey语言实现类C语法、变量绑定、基本数据类型、算术运算、内置函数、闭包等特性,并了解什么是词法分析器、语法分析器和抽象语法树。
【业内佳评】
编译器和语言开发是门槛较高的领域。我作为从业者,经常遇到培养新人却无法很快上手的问题。这套书很好地解决了此问题,在降低门槛的同时,又不损失丰富性,全面展示了开发编译器和程序设计语言的要素,因此我向所有对此有兴趣的读者推荐这套书。
——史斌(benshi001)
Go语言全球排名前50的贡献者
几年前看SICP的时候,我学习过如何写解释器。在书本上学习编译原理的过程是很枯燥的。这套书让我们可以一边学习理论,一边实践。我们能够看到,如何通过亲手实现解释器和编译器摆脱学习理论的枯燥过程。
——左书祺(@Draven)
云原生工程师、Kubernetes项目成员、《Go语言设计与实现》作者
如果你熟悉解释性语言,同时是Go语言爱好者,那么这套书就是为你编写的。使用Go语言从零实现一个解释器/编译器,不仅让你明白它们是如何工作的,而且你对Go语言也会有更深的理解。如果能够跟着书中内容实际动手实现一个解释器/编译器,那么你的技术一定会有很大的飞跃。
——徐新华
Go语言中文网站长、公众号“polarisxu”主理人
程序员的三大浪漫之一就是自制编程语言。得益于Go自身语法的简洁性和在工程方面的平衡性,这套书通过简明直接的代码,一步步地向读者揭示自制一门编程语言并不是高不可攀的事情。对于想自制编程语言又不想啃编译原理的读者,我推荐这套书。
——蒙卓(mengzhuo)
Go项目成员
这是一套很好的书,我曾在学习Go语言的时候有幸拜读过。现在,它终于有中译本了。自制解释器和编译器,一听就知道是很酷的事情。这套书的成功之处在于,它并非高屋建瓴,而是从零开始带着我们完成解释器和编译器的搭建,实战性很强。
——启舰
2017年度CSDN博客之星、前阿里巴巴研发工程师、“启舰杂谈”主理人
在软件设计中,开发人员经常需要开发一些高度抽象的定制模块。这些模块很可能涉及领域特定语言(DSL)的设计和解析。如果你很熟悉编译器的各个模块和运行原理,就可以很轻松地设计出适配自己项目的DSL。市面上关于编译器的书有很多,这些著作往往大而全,但是不易理解。这套书的作者对内容设计得非常精巧,通过从0到1创造一门编程语言来带领读者了解解释器和编译器的核心原理。我相信,它能给DSL设计者带来帮助。
——李正兴
腾讯高级工程师
程序员修炼之道(第2版) 豆瓣 Goodreads
The Pragmatic Programmer: From Journeyman to Master
9.3 (18 个评分) 作者: [美] David Thomas / [美] Andrew Hunt 译者: 云风 电子工业出版社 2020 - 4
本书之所以在全球范围内广泛传播,被一代代开发者奉为圭臬,盖因它可以创造出真正的价值:或编写出更好的软件,或探究出编程的本质,而所有收获均不依赖于特定语言、框架和方法。时隔20年的新版,经过全面的重新选材、组织和编写,覆盖哲学、方法、工具、设计、解耦、并发、重构、需求、团队等务实话题的最佳实践及重大陷阱,以及易于改造、复用的架构技术。本书极具洞察力与趣味性,适合从初学者到架构师的各阶层读者潜心研读或增广见闻。
程序员修炼之道――从小工到专家(20周年纪念版)(第2版)(英文版) 豆瓣
作者: 【美】David Thomas / Andrew Hunt 2020 - 4
《程序员修炼之道》之所以在全球范围内广泛传播,被一代代开发者奉为圭臬,盖因它可以创造出真正的价值:或编写出更好的软件,或探究出编程的本质,而所有收获均不依赖于特定语言、框架和方法。时隔 20 年的新版,经过全面的重新选材、组织和编写,覆盖哲学、方法、工具、设计、解耦、并发、重构、需求、团队等务实话题的最佳实践及重大陷阱,以及易于改造、复用的架构技术。本书极具洞察力与趣味性,适合从初学者到架构师的各阶层读者潜心研读或增广见闻。
C++ Primer 中文版(第 5 版) 豆瓣
C++ Primer, 5th Edition
9.3 (22 个评分) 作者: [美] Stanley B. Lippman / [美] Josée Lajoie 译者: 王刚 / 杨巨峰 电子工业出版社 2013 - 9
这本久负盛名的 C++ 经典教程,时隔八年之久,终迎来史无前例的重大升级。除令全球无数程序员从中受益,甚至为之迷醉的——C++ 大师 Stanley B. Lippman 的丰富实践经验,C++标准委员会原负责人 Josée Lajoie 对C++标准的深入理解,以及C+ + 先驱 Barbara E. Moo 在 C++教学方面的真知灼见外,更是基于全新的 C++11标准进行了全面而彻底的内容更新。非常难能可贵的是,本书所有示例均全部采用 C++11 标准改写,这在经典升级版中极其罕见——充分体现了 C++ 语言的重大进展及其全面实践。书中丰富的教学辅助内容、醒目的知识点提示,以及精心组织的编程示范,让这本书在 C++ 领域的权威地位更加不可动摇。无论是初学者入门,或是中、高级程序员提升,本书均为不容置疑的首选。
More Effective C++(中文版) 豆瓣
More Effective C++: 35 New Ways to Improve Your Programs and Designs
作者: [美] Scott Meyers 译者: 侯捷 电子工业出版社 2011 - 1
本书是Scott Meyers大师Effective三部曲之一。继Effective C++之后,Scott Meyers于1996推出这本书。虽然出版年代稍嫌久远,但《More Effective C++》并没有第2版,原因是当其出版之时(1996),C++ Standard已经几乎定案,本书即依当时的标准草案而写,其与现今的C++标准规范几乎相同。而且可能变化的几个弹性之处,Meyers也都有所说明与提示。
深入理解计算机系统(原书第3版) 豆瓣 Goodreads
Computer Systems: A Programmer's Perspective (3rd Edition)
9.5 (21 个评分) 作者: Randal E.Bryant / David O'Hallaron 译者: 龚奕利 / 贺莲 机械工业出版社 2016 - 11
和第2版相比,本版内容上*大的变化是,从以IA32和x86-64为基础转变为完全以x86-64为基础。主要更新如下:
基于x86-64,大量地重写代码,首次介绍对处理浮点数据的程序的机器级支持。
处理器体系结构修改为支持64位字和操作的设计。
引入更多的功能单元和更复杂的控制逻辑,使基于程序数据流表示的程序性能模型预测更加可靠。
扩充关于用GOT和PLT创建与位置无关代码的讨论,描述了更加强大的链接技术(比如库打桩)。
增加了对信号处理程序更细致的描述,包括异步信号安全的函数等。
采用新函数,更新了与协议无关和线程安全的网络编程。