大家好,我在本文中分享了我收集的计算机内功修炼的经典资源,希望对大家提升内功有所帮助,谢谢~
算法
leetcode
一个在线刷题的算法题库,题目分了简单、中等、困难,每道题几乎都有很多人的答案和多种解法。
总题数在不断增加中,我以前刷的时候有500+的题。
我只是把简单的题刷了,感觉对我的算法能力的提高有很大的帮助。
另外需要面试的同学也可以刷下题。
设计
《计算机程序的构造和解释》
本书就是大名鼎鼎的SICP,使用Lisp语言,从程序设计思想的角度介绍了构造过程抽象、构造数据抽象、面向对象设计和并发和流等内容,给出了若干设计实例。
本书是一本介绍设计思想的书,重点介绍了抽象的思维,是一本好书啊!能大幅提高抽象能力!
第1章:构造过程抽象。
本章讲解了面向过程设计的思想。
第2章:构造数据抽象。
本章介绍了模块化、层次化思想。
第3章:模块化、对象和状态
本章介绍了对象的结构实现、并发、流等内容。
我只看了本书前3章,并参考网上资料做了1遍前3章的习题(3.5流的习题没做。“流”这部分我只学习了下思想,没有掌握)。
第1章很简单,第二章有难度,第三章简单(流的习题没做,有一定难度)。
本书让我加深了对程序设计的理解,并学习了递归的使用。
建议大家把前3章的习题做了,网上有详细的答案。
《冒号课堂:编程范式与OOP思想》
通过老师与学生对话的方式,非常生动地讲解了面向对象的思想。
作为新手第一本学习面向对象思想的书,是很合适的。
《设计模式之禅》
讲了5大设计原则和23个设计模式,并给出了多种设计模式的组合使用。
全书非常通俗易懂,书中的案例也非常生动,适合大家上手学习设计模式。
《领域驱动设计》
本书提出了模型驱动设计,围绕领域建模来展开论述。
本书是一本经典书,对提高设计能力很有帮助!
第1-3章提出了领域建模的注意事项。
第5章介绍了模型的组成部分:Entity、Value Object、Service、Module。
第6章介绍了聚合体AGGREGATE、存储库REPOSITORY、工厂。
第7章介绍了对初步的领域模型进行重构细化的过程,展示了将领域模型细化为详细架构的过程。
第8章展示了初步的领域模型的演化直到获得突破的过程。
第9章讲解了如何实现深层建模,以及将业务规则提出来的思想(提出了SPECIFICATION规格模式)。
第10章提出了一些原则、启发,参考这些模式能获得柔性设计。
第四部分从较高的范围来展开论述。
第14章提出了上下文BOUNDED CONTEXT、持续集成、上下文之间如何联系起来CONTEXT MAP、BOUNDED CONTEXT之间的关系(共享内核、客户/供应商等关系)、选择上下文的策略以及如何转换BOUNDED CONTEXT之间关系。
第15章讲解了如何提炼出核心模型CORE DOMAIN。
第16章讲解了大比例结构。包括进化迭代的思想来重构大比例结构、系统隐喻、分层、KNOWLEDGE LEVEL、可插入式组件框架PLUGGABLE COMPONRNY FRAMEWORK。
通过阅读该书,我了解了领域模型的重要性。领域模型不只是用来转化为数据库表,也与实际的架构模型应该对应。也获得了设计的相关启示(风格与《敏捷》有点像)。
《软件架构设计(第二版)》 (作者:温昱 )
本书系统梳理了架构设计的知识,让我对架构设计有了更深入的理解,是一本很好的架构设计的参考资料。
书中一共有三个部分,分别讲解了软件架构的概念,架构设计的方法、过程及步骤,模块划分等专题。
书中的第2部分,介绍了整个架构从需求到设计的流程,并对每个流程展开说明,并给出了实例。
书中的第3部分,介绍了架构师的关键技能:模块划分。包括水平划分(分层)、垂直划分(子系统)、用例驱动设计(自底向上)等内容。这部分可以结合《敏捷软件开发原则、模式与实践》中的包设计部分来理解消化。
《一线架构师实践指南》 (作者:温昱 )
本书重实践,《软件架构设计》重理论。
本书给出了一些实践经验,以及具体的实例,可以作为《软件架构设计》在实践方面的补充!
建议设计架构时,参考《软件架构设计》和本书!
工程
《重构:改善既有代码的设计》
重构领域的经典书籍。每一小节讲了一个重构手法,基本覆盖了重构的各个方面。
如果你想要你的代码更加可读、易于维护,建议阅读本书。
《代码整洁之道》
有些内容与《重构》的思想相似,也是讲解如何改进代码的书。
《修改代码的艺术》
本书讲解了处理遗留代码的技术,其中包含了测试的相关讨论(如测试私有方法)。
如果你正在接手或重构别人的代码,或者正在你之前的项目上继续开发,本书就是你需要看的。
《测试驱动的Javascript开发》
如果你要开发大型软件,自动化测试非常重要。虽然前期编写测试时会花双倍的开发时间,但是越到后期,越能保证代码质量,减少修改bug的时间。
本书讲解了如何在开发产品代码之前,就先写测试,用测试来驱动开发。
这样做的好处之一是可以从用户的角度,来审视代码。通过明确代码的输入输出,来提高代码的设计。
当然,并不是所有地方都适合测试驱动,我觉得像 实现算法、代码相对稳定明确(如不是在实现demo的时候) 的地方可以使用测试驱动。
《敏捷软件开发原则、模式与实践(C#版)》
本书讲解了敏捷设计、类设计原则和包设计原则、UML、设计模式、薪水项目的设计与实现以及打包等内容,对我学习迭代开发和设计很有帮助,不愧是经典书籍。
以下章节对我帮助很大:
第6章(采用TDD开发保龄球比赛程序(C#))、第20章(咖啡机的面向对象设计与实现)、第26章(薪水项目的面向对象设计的过程与思路)、第28章(包和组件的设计原则)、第30章(薪水项目的包分析)、第37章(测试数据层)
《xUnit测试模式:测试码重构》
本书是一本关于如何解决测试中遇到的问题的实战经验书籍,给出了测试相关的概念、术语、经验、味道以及模式和实例。
第1部分总体介绍了测试的模式和相关知识,包括测试的味道、目标、基本观点、原则、策略,以及提出夹具的管理、结果验证、测试替身、组织测试、数据库测试等内容。
第2部分介绍了三大类测试味道:代码味道、行为味道、项目味道,对每种味道进行了详细分析,并介绍了解决方案模式。
第3部分介绍了测试的模式。对应第1部分,给出了具体实例,是对第1部分的补充。
本书内容组织的方式类似于《重构》一书,同样也应用于实战,来源于实战。
阅读本书后,在实际应用中如果遇到测试相关的问题,可以迅速地知道该问题在该书中对应的术语、模式以及解决方案。
因为我有一些测试的实战经验,所以看本书时就比较顺利,同时也深入了我对平时遇到的测试问题的理解。
所以建议先积累一些实战经验,然后再看该书,然后再应用于实战中。
开发经验
《人月神话》
本书讲了一些实际开发软件的经验,如 :
增加更多的人来开发,并不能提高开发速度,反而有可能会下降。因为人越多,沟通成本就越高;
没有银弹,没有能通吃一切应用场景的解决方案;
避免陷入焦油坑;
《软件随想录》
本书适合要做项目管理的同学,讲解了发布软件的经济学分析等内容,其中项目管理的知识(如“循证式日程规划”)很有启发。
《创业必经的那些事 1》
讲解了为什么创业失败,企业发展的三个阶段,如何经营企业等内容,对学习创业的思想很有帮助。
《创业必经的那些事 2》
本书是该系列的第2本书,与第1本书有些相同的观念,如三种角色(国王、管理者、技师),创新、量化、统一等。
本书的核心观念就是:作为管理者,要像企业家那样,把公司当成自己的公司,强调要有自我意识,注重换位思考。
本书强调要管理系统,而不是管理人,因为人是不可管理的,因此需要创建一个愿景,一套流程,每个人都能在流程中快速上手,认同企业文化。
“创业”系列书籍的观点与众不同,耐人寻味,在创业之前需要认真品读。
《程序员修炼之道》
本书讲解了如何成为更好的程序员,涉及到了成为优秀程序员的方方面面,注重实践经验。
本书让我更加了解了如何成为优秀的程序员,学习了一些最佳实践。
《高效程序员的45个习惯:敏捷开发修炼之道》
本书讲解了敏捷开发的最佳实践,从态度、学无止境、交互用户想要的软件、敏捷反馈、敏捷编码、敏捷调试、敏捷协作、走向敏捷 这些方面来展开论述,展示了敏捷开发的过程、实现、方法,使我对“如何成为高校的敏捷人员”有了更深入的认识。
下面是对我启发较大的内容:
- 第4章-15 提早实现自动化部署。
提出了一开始就自动化部署应用,如:使用户可以在线看到我们的演示系统。 - 第5章-21 不同环境,就有不同的问题。
提到了“持续集成”。可以用一个持续集成工具,周期性地从源代码控制系统中取得代码,并运行代码。如果有任何测试失败了,它会通知相关的开发者。 - 第5章-22 自动验收测试。
提到了FIT,即集成测试框架。它可以更容易地使用HTML表格定义测试用例,并比较测试结果数据。
使用FIT,客户可以定义带有新功能的使用样本。客户、测试人员和开发人员(根据样本)都可以创建表格,为代码描述可能的输入和输出值。开发人员会参照样本编写测试代码。测试结果成功或者失败,都会显示在HTML页面中,用户可以很方便地查阅。
底层原理
《HTTP权威指南》
本书是HTTP及其相关核心Web技术方面的权威著作,适合所有想了解HTTP和Web底层结构的人阅读。
本书包含21章,分为5个逻辑部分(每部分都是一个技术专题),以及8个很有用的附录,这些附录包含了参考资料,以及对相关技术的介绍。
第一部分 HTTP:Web的基础
第二部分 HTTP结构
第三部分 识别、认证与安全
第四部分 实体、编码和国际化
第五部分 内容发布与分发
第六部分 附录
第一部分用4章的篇幅描述了Web的基础构件与HTTP的核心技术。
第1章简要介绍了HTTP。
第2章详细阐述了统一资源定位符(Uniform Resource Locator,URL)的格式, 以及URL在因特网上命名的各种类型的资源,还介绍了统一资源名(Uniform Resource Name,URN)的演变过程。
第3章详细介绍了HTTP报文是如何传送Web内容的。
第4章解释了HTTP连接管理过程中一些经常会引起误解且少有文档说明的规则和行为。
第二部分重点介绍了Web系统的结构构造块:HTTP服务器、代理、缓存、网关以及机器人应用程序。(当然,Web浏览器也是一种构造块,但在本书的第一部分已经对其进行过很详细的介绍了。)第二部分包含以下6章。
第5章简要介绍了Web服务器结构。
第6章深入研究了HTTP代理服务器,HTTP代理服务器是作为HTTP服务与控制平台使用的中间服务器。
第7章深入研究了Web缓存的问题。缓存是通过保存常用文档的本地副本来提高性能、减少流量的设备。
第8章探讨了网关和应用服务器的概念,通过它们,HTTP就可以与使用不同协议(包括SSL加密协议)的软件进行通信了。
第9章介绍了Web上的各种客户端类型,包括无处不在的浏览器、机器人和网络蜘蛛以及搜索引擎。
第10章讲述了仍在研究之中的HTTP协议:HTTP-NG协议。
第三部分提供了一套用于追踪身份、增强安全性以及控制内容访问的技术和技巧。包含下列4章。
第11章讨论了一些识别用户的技术,以便向用户提供私人化的内容服务。
第12章重点介绍了一些验证用户身份的基本方式。这一章还对HTTP认证机制与数据库的接口问题进行了研究。
第13章详述了摘要认证,它是对HTTP的建议性综合增强措施,可以大幅度提高其安全性。
第14章说明了因特网的密码体系、数字证书以及SSL。
第四部分涵盖HTTP报文主体和Web标准,前者包含实际内容,后者描述并处理主体内容。第四部分包含以下3章。
第15章介绍了HTTP内容的结构。
第16章探讨了一些Web标准,通过这些标准,全球范围内的用户都可以交换以不同语言和字符集表示的内容。
第17章解释了一些用于协商可接受内容的机制。
第五部分介绍了发布和传播Web内容的技巧。包括以下4章。
第18章讨论了在现代的网站托管环境中布署服务器的方式以及HTTP对虚拟网站托管的支持。
第19章探讨了一些创建Web内容,并将其装载到Web服务器中去的技术。
第20章介绍了能够将输入Web流量分散到一组服务器上去的一些工具和技术。
第21章介绍了一些日志格式和常见问题。
第六部分是一些很有用的参考附录,以及相关技术的教程。
本书知识点较多,内容广而浅,没有难度,可以帮助读者全面了解Web底层结构。
《深入理解计算机系统》
本书从程序员的角度介绍了计算机系统,概述了计算机整个系统的实现,帮助读者建立一个层次性的计算机系统模型。
第1章:计算机系统漫游
大概介绍了整个计算机系统
第2章:信息的表示和处理
介绍了存储单位、整数和浮点数的表示及运算
第3章:程序的机器级表示
介绍了汇编语言
第4章:处理器体系结构
介绍了处理器硬件的设计,介绍了指令集、逻辑电路、指令处理的5个阶段(取指、译码、执行、访存、写回),介绍了指令流水线原理,以及使用暂停、转发等技术处理流水线的数据相关和控制相关。
第5章:优化程序性能
介绍了程序优化策略,优化循环的关键路径,包括:
消除连续的函数调用
将计算移到循环外
消除不必要的存储器引用(引入临时变量保存中间结果)
展开循环(增大循环步长)
通过使用如多格累积变量利用并行执行
重新结合
用功能的风格重写条件操作,使得编译采用条件数据传送
第6章:存储器层次结构
介绍了高速缓存SRAM、主存DRAM、磁盘的实现原理,介绍了存储器层次结构。
第7章:链接
介绍了
链接器的主要任务(符号解析和重定位)
静态链接
静态库
动态链接
第8章:异常控制流
介绍了4种类型的中断,用户模式与内核模式的切换,进程控制和进程间信号通信,非本地跳转。
第9章:虚拟存储器
介绍了虚拟存储器,地址翻译,CPU、MMU和缓存、磁盘之间的页命中、缺页的执行过程,动态存储器分配(堆)等内容。
第10章:系统级I/O
介绍了文件的操作,描述符表->打开文件表->v-node表。
第11章:网络编程
介绍了集线器、网关、路由等,介绍了套接字操作,实现了简单的web服务器
第12章:并发编程
介绍了进程、I/O多路复用、线程这三种不同的构建并发程序的机制,并扩展了一个并发网络服务器。
介绍了互斥,介绍了生产者-消费者和读者-写者模型,介绍了线程不安全函数和竞争、死锁。
该书介绍了系统底层实现,为我整体理解计算机很有帮助。