黑马程序员技术交流社区

标题: 设计模式大集锦 程序员面试全攻略(上) [打印本页]

作者: Android_Robot    时间: 2016-8-11 16:51
标题: 设计模式大集锦 程序员面试全攻略(上)
设计模式大集锦 程序员面试全攻略(上)

涨薪机密——潮流新技术、新框架资源以后不定期更新,
  

       无论你是参与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)
4J2EE 模式
这些设计模式特别关注表示层。
这些模式是由 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关系)。






其他精华资源推荐:
【强荐!】2016年最新Android学习路线图——按此路线图学习月薪过万{ 火速收入}
平均薪资近12K,Android续写“刷薪”记录!
[持续更新]2016最新Android视频教程+源码+技巧/经验+软件+面试
为什么黑马程序员能给你2W的月薪

作者: hexi5432    时间: 2016-8-11 18:33
兄弟,写的不错哦!
作者: 阿弥陀佛么么哒    时间: 2016-8-12 09:40
1024个赞
作者: melovem    时间: 2016-8-12 21:16
技术总结得非常棒~
作者: 18072727834    时间: 2016-8-12 21:28
perfect  wonderful 6666 这总结的太好了
作者: itcoder    时间: 2016-8-12 22:15
顶顶顶顶顶顶顶顶顶
作者: 开心的流泪者    时间: 2016-8-13 10:47
设计模式归纳的很好  攒攒  1024个赞
作者: zaoan    时间: 2016-8-13 14:40
是不是还要更新啊
作者: x55555lg    时间: 2016-8-13 22:08
顶一个,不错的分享
作者: ustcerlzy    时间: 2016-8-14 11:06
这个帖子对我来说太宝贵了 谢谢楼主
作者: itcoder    时间: 2016-8-14 22:28
顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶
作者: x55555lg    时间: 2016-8-15 15:16
谢谢分享,写的挺好的
作者: 夜行御史    时间: 2016-8-15 23:53
喔,我喜欢
作者: 邓显俊    时间: 2016-8-26 12:17
很不错的帖子,支持一下
作者: 爱你一万年    时间: 2016-8-26 20:53
赞一个吧!!
作者: 邓显俊    时间: 2016-8-26 21:09
哈哈,赞一个
作者: 含宇    时间: 2016-8-26 21:14
不错不错。兄弟写的挺好
作者: dongfangletu    时间: 2016-8-26 21:27
学习了!!!
作者: 超绝可爱曾小野    时间: 2016-8-26 23:42
哇 厉害
作者: a623562486    时间: 2016-8-27 00:00
说得好,支持!!!!
作者: 许华洋    时间: 2016-8-27 00:49
顶一下!!!!!
作者: cdw999888    时间: 2016-8-27 09:20
师兄真棒!
作者: java234    时间: 2016-8-27 16:45
面试的衣着有要求吗?
是便装还是正式的西装?
作者: java234    时间: 2016-8-27 16:48
有心人

作者: wanghanqing    时间: 2016-8-28 08:38
加油!加油!加油!加油!
作者: jiubaK    时间: 2016-8-28 11:51
比较全面了,必须顶!
作者: 许华洋    时间: 2016-8-28 12:05
顶顶顶顶顶顶
作者: 17729758673    时间: 2016-8-28 16:22
三克油,谢谢大神分享
作者: 细听风语为梧桐    时间: 2016-8-28 16:24
知识点总结的很到位,辛苦楼主了,赞一个
作者: NewBeeCoder    时间: 2016-8-28 21:54
好的学习方向 收藏
作者: 胡龙彬    时间: 2016-8-28 22:38
赞一个
作者: zaoan    时间: 2016-8-28 23:19
顶一个 666
作者: 勿忘`初心    时间: 2016-8-29 00:06
果断收藏
作者: zhouyang1993    时间: 2016-8-29 12:38
非常好
作者: finally    时间: 2016-8-29 20:41
牛牛牛,学习学习
作者: dongfangletu    时间: 2016-8-29 21:28
学习一下子
作者: 栗悟饭和龟波功    时间: 2016-8-29 23:16
支持一下
作者: 王宁007    时间: 2016-8-29 23:30
赞赞赞。。。。。
作者: gohw007    时间: 2016-8-29 23:52
好难啊厉害
作者: hgd5201314    时间: 2016-8-30 12:15
支持一个
作者: caoshenv5    时间: 2016-8-30 15:26
楼主真帅,谢谢分享
作者: 海乃百川    时间: 2016-8-30 22:16
开一看瞧一瞧
作者: java234    时间: 2016-8-30 22:23
6666666666666666666666666666666666666
道友道行高深,修为深厚!
作者: 雪连城    时间: 2016-8-30 23:20
好高深啊,一头雾水,汗
作者: caoshenv5    时间: 2016-8-31 12:24
啦啦啦哈哈哈无敌无敌
作者: 左冬至1111111    时间: 2016-9-1 20:47
Android 7.0的关键改变包括可在同
作者: caoshenv5    时间: 2016-9-1 21:30
楼主好帅,谢谢分享
作者: zhouyang1993    时间: 2016-9-2 18:24
太棒了
作者: 1413157316    时间: 2016-10-26 22:17
支持,赞一个
作者: UZI    时间: 2016-10-27 00:06
好东西呀~可惜现在还用不到
作者: yeshusheng    时间: 2016-10-30 10:22
谢谢收藏了
作者: 读书可以当饭吃    时间: 2016-10-31 09:52
很好很好,受教了
作者: 15626187339    时间: 2016-10-31 22:08
围观围观围观
作者: xbs783    时间: 2016-11-1 14:48
技术总结得非常棒~
作者: rebirf    时间: 2016-11-2 10:07
哈哈哈,赞一个 楼主 好人~~~
作者: wxm278187618    时间: 2016-11-12 01:31
感谢楼主分享
作者: L10052108    时间: 2016-11-12 15:04
好久没有看到,质量这样好的帖子了,感动呀
作者: edwardchan2003    时间: 2016-11-13 15:29
写得很好,佩服,有用。。。
作者: 飞天神猫    时间: 2016-11-13 22:36
可以的
作者: wu971856966    时间: 2016-11-15 21:11
厉害了我的哥
作者: SuperLan    时间: 2016-11-18 23:26
赞赞赞赞赞赞,先收藏了
作者: chenyanwei6    时间: 2016-11-20 23:50
整理的不错,听给力的
作者: 呱码农    时间: 2016-11-25 11:35
这个要收藏~
作者: 201314    时间: 2016-11-27 23:30
好好学习,天天向上。
作者: JSK-CSY    时间: 2016-12-5 00:00
谢谢分享
作者: JSK-CSY    时间: 2016-12-8 23:51
好好好,有用




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2