设计模式:管道模式(Pipeline)
管道模式(Pipeline)不属于 GoF 提出的 23 种经典设计模式,但在工程中很常见。它与职责链模式相近,可看作其变体:数据/请求沿固定或可配置的处理阶段依次流动,每一阶段只做一类变换,再交给下一阶段。
管道模式(Pipeline)不属于 GoF 提出的 23 种经典设计模式,但在工程中很常见。它与职责链模式相近,可看作其变体:数据/请求沿固定或可配置的处理阶段依次流动,每一阶段只做一类变换,再交给下一阶段。
大部分软件编程的本质是为了解决现实世界的问题,如企业库存管理,财务管理,通讯软件等。
所以,软件编 程的本质是程序员用代码的方式使现实世界的事务运行在计算机上,计算机软件是为了解决世界的问题而开发的。
一个进程最多可以创建多少线程,或 一台 Java 服务器最多能创建多少线程?
此问题涉及的知识点非常广且深:操作系统的内存管理,内核参数,进程,线程,栈空间等。
这是一个在面试时经常被问题的问题,实际隐含的是对服务器的优化和创建过多连接时的问题诊断。
生产环境部署应用服务的服务器操作系统基本上是 Linux 服务器,此问题所涉及到更深层的是 Linux 内核 TCP/IP 和 Socket 参数优化。
重要参考资料:W.Richard Stevens 的 UNIX Network Programming Volume 1:The Sockets Networking API,Third Edition(UNIX网络编程-卷1:套接字联网API 第3版),6.2 Chapter:I/O Models。
基于 Unix / Linux 的网络编程的 5 种 I/O 模型。
代理模式 给某一对象提供一个代理对象,并由代理对象控制对原对象的引用。属于结构型模式。
代理模式在生活中有具体的表现,例如找代理售票点(或黄牛)买票,网络代理。
享元模式 尝试复用同类或相似的对象,以共享方式高效地支持大量的细粒度对象,减少面向对象的系统设计中可能创建大量类或对象,以减少内存占用和提高性能。
享元模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。
面向对象设计可以很好地解决一些灵活性或可扩展性问题,但在大多数情况下需要在系统中增加类和对象的个数。当对象数量过多时,会占用较大内存,甚至导致内存溢出,运行代价过高,带来性能下降等问题。
中介者模式是把多对象之间存在复杂的网状结构的交互关系,改为 星形结构,这样大大降低对之间的耦合,所有对象只通过 中介者 与目标对象联系。
中介者例子:人才交流中心,房产中介,WTO(世界贸易组织), MVC框架中的 C(控制器)就是 M(模型)和 V(视图)的中介者。
桥接模式:将抽象与实现分离,使它们可以独立变化。它是用组合关系替代继承关系,而从降低了抽象和实现这两个可变维度的耦合度。
桥接模式不是一个使用频率很高的模式,但是熟悉这个模式对于理解面向对象的设计原则,包括 开-闭原则(OCP) 以及 组个/聚合原则(CARP)都很有帮助。理解好这两个原则,有助于形成正确的设计思想和培养良好的设计风格。