设计模式大集锦 程序员面试全攻略(上)
涨薪机密——新潮流新技术、新框架,资源以后不定期更新,
无论你是参与Java面试还是Android面试,设计模式和软件设计问题在程序员面试中是必不可少的一部分。编程和设计技两者相得益彰,一名出色的程序员也是一名出色的设计师,他们懂得如何利用代码来解决问题或者软件设计,但是这些技能需要不断提升。这就要求你不断的保持设计理念,无论编程项目的大小,从失败中总结经验。
从面向对象的设计原则开始学习是个不错的起点。本文总结了在各种面试过程中经常被提及的一些设计问题。
总共有 23 种设计模式。这些模式可以分为三大类:创建型模式(Creational Patterns)、结构型模式(Structural Patterns)、行为型模式(Behavioral Patterns)。当然,还有J2EE 设计模式。
序号 | 模式 & 描述 | 包括 | 1 | 创建型模式
这些设计模式提供了一种在创建对象的
同时隐藏创建逻辑的方式,而不是使用
新的运算符直接实例化对象。这使得程
序在判断针对某个给定实例需要创建哪
些对象时更加灵活。
| - 工厂模式(Factory Pattern)
- 抽象工厂模式(Abstract Factory Pattern)
- 单例模式(Singleton Pattern)
- 建造者模式(Builder Pattern)
- 原型模式(Prototype Pattern)
| 2 | 结构型模式
这些设计模式关注类和对象的组合。
继承的概念被用来组合接口和定义组合
对象获得新功能的方式。
| - 适配器模式(Adapter Pattern)
- 桥接模式(Bridge Pattern)
- 过滤器模式(Filter、Criteria Pattern)
- 组合模式(Composite Pattern)
- 装饰器模式(Decorator Pattern)
- 外观模式(Facade Pattern)
- 享元模式(Flyweight Pattern)
- 代理模式(Proxy Pattern)
| 3 | 行为型模式
这些设计模式特别关注对象之间的通信。 | - 责任链模式(Chain of Responsibility Pattern)
- 命令模式(Command Pattern)
- 解释器模式(Interpreter Pattern)
- 迭代器模式(Iterator Pattern)
- 中介者模式(Mediator Pattern)
- 备忘录模式(Memento Pattern)
- 观察者模式(Observer Pattern)
- 状态模式(State Pattern)
- 空对象模式(Null Object Pattern)
- 策略模式(Strategy Pattern)
- 模板模式(Template Pattern)
- 访问者模式(Visitor Pattern)
| 4 | J2EE 模式
这些设计模式特别关注表示层。
这些模式是由 Sun Java Center 鉴定的。
| - MVC 模式(MVC Pattern)
- 业务代表模式(Business Delegate Pattern)
- 组合实体模式(Composite Entity Pattern)
- 数据访问对象模式(Data Access Object Pattern)
- 前端控制器模式(Front Controller Pattern)
- 拦截过滤器模式(Intercepting Filter Pattern)
- 服务定位器模式(Service Locator Pattern)
- 传输对象模式(Transfer Object Pattern)
|
文中分为两部分,一类为初学者,另一类专为中高级技术人员准备
一、入门级程序员的面试题:
这些软件设计和设计模式的先关问题大多会出现在初学者面试情景中,什么是设计模式?
特定的设计模式又是什么?等等这些概念,也许你很轻易回答这些概念,但文内提供的这些问题也许能给你带来更多价值。
1. 什么是设计模式?在你编码过程中使用了哪些设计模式?
每位程序员都会利用自身经历来回答这些特定的设计问题。用一句话来说,就是设计模式是代码重用的扩展。
2. 你能说出在标准的JDK库中使用的一些设计模式吗?
Decorator设计模式常被用于各种Java IO类中,Singleton(单例)模式常被用在运行环节中,Calendar以及各种其他类,Factory(工厂)模式常被用于各种不可变类,比如Boolean。
Boolean.valueOf和Observer模式常被用于Swing和许多事件监听器框架中。
3. 在Java中Singleton(单例)设计模式是什么?为线程安全Singleton编码。
Singleton模式在整个系统中主要是共享模式。在整个应用程序实例中只保持一个特定的类,这是由所以模块共享决定的。Java.lang.Runtime是Singleton设计模式中一个典型范例。从Java 5版本开始,你可以为安全线程singleton模式使用enum。
4. 使用Factory模式主要优势是什么?你会在哪种情况下使用?
Factory模式最主要的优势在于当创建对象时可提高封装水平。如果你使用Factory模式来创建对象,你可以在后期重置最初产品的装置或者无须任何客户层就可实现更先进更高性能的类。
5. Java中Observer(观察者)设计模式是什么?
Observer设计模式基于对象的变化而改变。比如:天气系统,在这里必须将天气变化的视图呈现给观众。这里天气项目是主体而非不同的观察者。
6. 例举一个在Java中使用Decorator(装饰者)模式的案例?它从事的是对象级别还是类级别?
Decorator模式可提高个体对象的能力。Java IO广泛使用Decorator模式和Buffered类型的一些经典例子,比如BufferedReader和BufferedWriter,增强读者和作家执行Buffer级别的阅读和写作从而提高性能。
7. 什么是MVC设计模式?请例举一个MVC设计模式案例。
MVC(Model View Controller)模型(model)-视图(view)-控制器(controller):使用MVC是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新,从例子可以看出MVC就是Observer设计模式的一个特例。
8. Java中FrontController(前端控制器模式)设计模式是什么?请例举一个FrontController设计模式案例。(扩展学习)
9. Responsibility设计模式是什么?(扩展学习)
10. Adapter设计模式是什么?请例举一个在Java中的Adapter设计模式案例。
Adapter适配器模式是将两个不兼容的类组合在一起使用。Adapter设计模式主要目的组合两个不相干类,常用有两种方法:第一种解决方案是修改各自类的接口。但是如果没有源码,或者不愿意为了一个应用而修改各自的接口,则需要使用Adapter适配器,在两种接口之间创建一个混合接口。 Adapter适配器设计模式中有3个重要角色:被适配者Adaptee,适配器Adapter和目标对象Target。其中两个现存的想要组合到一起的类分别是被适配者Adaptee和目标对象Target角色,我们需要创建一个适配器Adapter将其组合在一起。 实现Adapter适配器设计模式有两种方式:组合(compositon, has-a关系)和继承(inheritance,is-a关系)。
其他精华资源推荐: |