10、软件设计的目的:糟糕的程序员比优秀的程序员差在哪里?有人说,在软件开发中,优秀的程序员比糟糕的程序员的工作产出高100倍。这听起来有点夸张,实际上,我可能更悲观一点,就我看来,有时候,后者的工作成果可能是负向的,也就是说,因为他的工作,项目会变得更加困难,代码变得更加晦涩,难以维护,工期因此推延,各种...2025-11-02后端技术面试 38 讲
11、软件设计的开闭原则:如何不修改代码却能实现需求变更?我在上篇文章讲到,软件设计应该为需求变更而设计,应该能够灵活、快速地满足需求变更的要求。优秀的程序员也应该欢迎需求变更,因为持续的需求变更意味着自己开发的软件保持活力,同时也意味着自己为需求变更而进行的设计有了用武之地,这样的话,技术和业务都进入了良...2025-11-02后端技术面试 38 讲
12、软件设计的依赖倒置原则:如何不依赖代码却可以复用它的功能?在软件开发过程中,我们经常会使用各种编程框架。如果你使用的是Java,那么你会比较熟悉Spring、MyBatis等。事实上,Tomcat、Jetty这类Web容器也可以归类为框架。框架的一个特点是,当开发者使用框架开发一个应用程序时,无需在程序中调...2025-11-02后端技术面试 38 讲
13、软件设计的里氏替换原则:正方形可以继承长方形吗?我们都知道,面向对象编程语言有三大特性:封装、继承、多态。这几个特性也许可以很快就学会,但是如果想要用好,可能要花非常多的时间。 通俗地说,接口(抽象类)的多个实现就是多态。多态可以让程序在编程时面向接口进行编程,在运行期绑定具体类,从而使得类之间不...2025-11-02后端技术面试 38 讲
14、软件设计的单一职责原则:为什么说一个类文件打开最好不要超过一屏?我在Intel工作期间,曾经接手过一个大数据SQL引擎的开发工作([如何自己开发一个大数据SQL引擎?])。我接手的时候,这个项目已经完成了早期的技术验证和架构设计,能够处理较为简单的标准SQL语句。后续公司打算成立一个专门的小组,开发支持完整的标准...2025-11-02后端技术面试 38 讲
15、软件设计的接口隔离原则:如何对类的调用者隐藏类的公有方法?我在阿里巴巴工作期间,曾经负责开发一个统一缓存服务。这个服务要求能够根据远程配置中心的配置信息,在运行期动态更改缓存的配置,可能是将本地缓存更改为远程缓存,也可能是更改远程缓存服务器集群的IP地址列表,进而改变应用程序使用的缓存服务。 这就要求缓存服...2025-11-02后端技术面试 38 讲
17、设计模式应用:编程框架中的设计模式在绝大多数情况下,我们开发应用程序的时候,并不是从头开发的。比如,我们用Java开发一个Web应用,并不需要自己写代码监听HTTP 80端口;不需要处理网络传输的二进制HTTP数据包(参考[第4篇网络编程原理]);不需要亲自为每个用户请求分配一个处理...2025-11-02后端技术面试 38 讲
16、设计模式基础:不会灵活应用设计模式,你就没有掌握面向对象编程我在面试的时候,喜欢问一个问题:“你比较熟悉哪些设计模式?”得到的回答很多时候是“单例”和“工厂”。老实说,这个回答不能让人满意。因为在我看来,单例和工厂固然是两种经典的设计模式,但是,这些创建类的设计模式并不能代表设计模式的精髓。 设计模式的精髓在...2025-11-02后端技术面试 38 讲
18、反应式编程框架设计:如何使程序调用不阻塞等待,立即响应?我们在专栏[第1篇]就讨论了为什么在高并发的情况下,程序会崩溃。主要原因是,在高并发的情况下,有大量用户请求需要程序计算处理,而目前的处理方式是,为每个用户请求分配一个线程,当程序内部因为访问数据库等原因造成线程阻塞时,线程无法释放去处理其他请求,这...2025-11-02后端技术面试 38 讲
19、组件设计原则:组件的边界在哪里?软件的复杂度和它的规模成指数关系,一个复杂度为100的软件系统,如果能拆分成两个互不相关、同等规模的子系统,那么每个子系统的复杂度应该是25,而不是50。软件开发这个行业很久之前就形成了一个共识,应该将复杂的软件系统进行拆分,拆成多个更低复杂度的子系...2025-11-02后端技术面试 38 讲