15、软件设计的接口隔离原则:如何对类的调用者隐藏类的公有方法?

我在阿里巴巴工作期间,曾经负责开发一个统一缓存服务。这个服务要求能够根据远程配置中心的配置信息,在运行期动态更改缓存的配置,可能是将本地缓存更改为远程缓存,也可能是更改远程缓存服务器集群的IP地址列表,进而改变应用程序使用的缓存服务。 这就要求缓存服...

后端技术面试 38 讲

14、软件设计的单一职责原则:为什么说一个类文件打开最好不要超过一屏?

我在Intel工作期间,曾经接手过一个大数据SQL引擎的开发工作([如何自己开发一个大数据SQL引擎?])。我接手的时候,这个项目已经完成了早期的技术验证和架构设计,能够处理较为简单的标准SQL语句。后续公司打算成立一个专门的小组,开发支持完整的标准...

后端技术面试 38 讲

13、软件设计的里氏替换原则:正方形可以继承长方形吗?

我们都知道,面向对象编程语言有三大特性:封装、继承、多态。这几个特性也许可以很快就学会,但是如果想要用好,可能要花非常多的时间。 通俗地说,接口(抽象类)的多个实现就是多态。多态可以让程序在编程时面向接口进行编程,在运行期绑定具体类,从而使得类之间不...

后端技术面试 38 讲

12、软件设计的依赖倒置原则:如何不依赖代码却可以复用它的功能?

在软件开发过程中,我们经常会使用各种编程框架。如果你使用的是Java,那么你会比较熟悉Spring、MyBatis等。事实上,Tomcat、Jetty这类Web容器也可以归类为框架。框架的一个特点是,当开发者使用框架开发一个应用程序时,无需在程序中调...

后端技术面试 38 讲

11、软件设计的开闭原则:如何不修改代码却能实现需求变更?

我在上篇文章讲到,软件设计应该为需求变更而设计,应该能够灵活、快速地满足需求变更的要求。优秀的程序员也应该欢迎需求变更,因为持续的需求变更意味着自己开发的软件保持活力,同时也意味着自己为需求变更而进行的设计有了用武之地,这样的话,技术和业务都进入了良...

后端技术面试 38 讲

10、软件设计的目的:糟糕的程序员比优秀的程序员差在哪里?

有人说,在软件开发中,优秀的程序员比糟糕的程序员的工作产出高100倍。这听起来有点夸张,实际上,我可能更悲观一点,就我看来,有时候,后者的工作成果可能是负向的,也就是说,因为他的工作,项目会变得更加困难,代码变得更加晦涩,难以维护,工期因此推延,各种...

后端技术面试 38 讲

9、软件设计实践:如何使用UML完成一个设计文档?

在上一篇文章中,我们讨论了为什么要建模,以及建模的4+1视图模型,4+1视图模型很好地向我们展示了如何对一个软件的不同方面用不同的模型图进行建模与设计,以完整描述一个软件的业务场景与技术实现。但是软件开发是有阶段性的,在不同的开发阶段用不同的模型图描...

后端技术面试 38 讲

8、软件设计的方法论:软件为什么要建模?

我们开发的绝大多数软件都是用来解决现实问题的。通过计算机软件,可以用高效、自动化的方式去解决现实中低效的、手工的业务过程。 因此软件开发的本质就是在计算机的虚拟空间中根据现实需求创建一个新世界。阿里的工程师在创造一个“500平方公里”的交易市场,百度...

后端技术面试 38 讲

7、编程语言原理:面向对象编程是编程的终极形态吗?

软件架构师必须站在一个很高的高度去审视自己软件的架构,去理解自己的工作在更宏大的背景中的位置和作用,才能构建出一个经得起时间考验的软件系统。这个高度既包括技术的高度和深度,也包括对软件编程这件事认知的程度,比如对软件编程的历史和未来的理解,以及对自己...

后端技术面试 38 讲

6、数据库原理:为什么PrepareStatement性能更好更安全?

做应用开发的同学常常觉得数据库由DBA运维,自己会写SQL就可以了,数据库原理不需要学习。其实即使是写SQL也需要了解数据库原理,比如我们都知道,SQL的查询条件尽量包含索引字段,但是为什么呢?这样做有什么好处呢?你也许会说,使用索引进行查询速度快,...

后端技术面试 38 讲