1.接口是什么?为什么要使用接口而不是直接使用具体类?

接口用于定义 API。它定义了类必须得遵循的规则。同时,它提供了一种抽象,因为客户端只使用接口,这样可以有多重实现,如 List 接口,你可以使用可随机访问的 ArrayList,也可以使用方便插入和删除的 LinkedList。接口中不允许写代码,以此来保证抽象,但是 Java 8 中你可以在接口声明静态的默认方法,这种方法是具体的。

2.java中,抽象类与接口之间有什么区别?

1.一个类可以实现多个接口 ,但却只能继承最多一个抽象类。
2.抽象类可以包含具体的方法 , 接口的所有方法都是抽象的。
3.抽象类可以声明和使用字段 ,接口则不能,但接口可以创建静态的final常量。
4.接口的方法都是public的,抽象类的方法可以是public,protected,private或者默认的package;
5.抽象类可以定义构造函数,接口却不能。

3.除了单例模式,你在生产环境中还用过什么设计模式?

这需要根据你的经验来回答。一般情况下,你可以说依赖注入,工厂模式,装饰模式或者观察者模式,随意选择你使用过的一种即可。不过你要准备回答接下的基于你选择的模式的问题。

4、说下对开闭原则(Open Close Principle)的理解

开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。

5、说下对里氏代换原则(Liskov Substitution Principle)的理解

里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。

6、说下对依赖倒转原则(Dependence Inversion Principle)的理解

这个是开闭原则的基础,具体内容:真对接口编程,依赖于抽象而不依赖于具体。

7、说下对接口隔离原则(Interface Segregation Principle)的理解

这个原则的意思是:使用多个隔离的接口,比使用单个接口要好。还是一个降低类之间的耦合度的意思,从这儿我们看出,其实设计模式就是一个软件的设计思想,从大型软件架构出发,为了升级和维护方便。所以上文中多次出现:降低依赖,降低耦合。

8、说下对迪米特法则(最少知道原则)(Demeter Principle)的理解

为什么叫最少知道原则,就是说:一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。

9、说下对合成复用原则(Composite Reuse Principle)的理解

原则是尽量使用合成/聚合的方式,而不是使用继承

10.适配器模式是什么?什么时候使用?

适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。适配器模式提供对接口的转换。如果你的客户端使用某些接口,但是你有另外一些接口,你就可以写一个适配去来连接这些接口。

11.适配器模式与装饰器模式有什么区别?

虽然适配器模式和装饰器模式的结构类似,但是每种模式的出现意图不同。适配器模式被用于桥接两个接口,而装饰模式的目的是在不修改类的情况下给类增加新的功能。

装饰者模式: 动态地将责任附加到对象上,若要扩展功能,装饰者模提供了比继承更有弹性的替代方案。
通俗的解释: 装饰模式就是给一个对象增加一些新的功能,而且是动态的,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例。

适配器模式: 将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。
适配器模式有三种:类的适配器模式、对象的适配器模式、接口的适配器模式。

12.适配器模式和代理模式之间有什么不同?

这个问题与前面的类似,适配器模式和代理模式的区别在于他们的意图不同。由于适配器模式和代理模式都是封装真正执行动作的类,因此结构是一致的,但是适配器模式用于接口之间的转换,而代理模式则是增加一个额外的中间层,以便支持分配、控制或智能访问。

13.什么是模板方法模式?

模板方法提供算法的框架,你可以自己去配置或定义步骤。例如,你可以将排序算法看做是一个模板。它定义了排序的步骤,但是具体的比较,可以使用 Comparable 或者其语言中类似东西,具体策略由你去配置。列出算法概要的方法就是众所周知的模板方法。

14.什么时候使用访问者模式?

访问者模式用于解决在类的继承层次上增加操作,但是不直接与之关联。这种模式采用双派发的形式来增加中间层。

15.什么时候使用组合模式?

组合模式使用树结构来展示部分与整体继承关系。它允许客户端采用统一的形式来对待单个对象和对象容器。当你想要展示对象这种部分与整体的继承关系时采用组合模式。

16.继承和组合之间有什么不同?

虽然两种都可以实现代码复用,但是组合比继承共灵活,因为组合允许你在运行时选择不同的实现。用组合实现的代码也比继承测试起来更加简单。

17.描述Java中的重载与重写?什么时候用重载,什么时候用重写?

重载和重写都允许你用相同的名称来实现不同的功能,但是重载是编译时活动,而重写是运行时活动。你可以在同一个类中重载方法,但是只能在子类中重写方法。重写必须要有继承。

对有经验的Java设计师来说,这是一个相当简单的问题。如果你看到一个类的不同实现有着不同的方式来做同一件事,那么就应该用重写(overriding),而重载(overloading)是用不同的输入做同一件事。在Java中,重载的方法签名不同,而重写并不是。

18.Java中,嵌套公共静态类与顶级类有什么不同?

类的内部可以有多个嵌套公共静态类,但是一个 Java 源文件只能有一个顶级公共类,并且顶级公共类的名称与源文件名称必须一致。

19.OOP中的组合、聚合和关联有什么区别?

如果两个对象彼此有关系,就说他们是彼此相关联的。组合和聚合是面向对象中的两种形式的关联。组合是一种比聚合更强力的关联。组合中,一个对象是另一个的拥有者,而聚合则是指一个对象使用另一个对象。如果对象 A 是由对象 B 组合的,则 A 不存在的话,B一定不存在,但是如果 A 对象聚合了一个对象 B,则即使 A 不存在了,B 也可以单独存在。

20.给我一个符合开闭原则的设计模式的例子?

开闭原则要求你的代码对扩展开放,对修改关闭。这个意思就是说,如果你想增加一个新的功能,你可以很容易的在不改变已测试过的代码的前提下增加新的代码。有好几个设计模式是基于开闭原则的,如策略模式,如果你需要一个新的策略,只需要实现接口,增加配置,不需要改变核心逻辑。一个正在工作的例子是 Collections.sort() 方法,这就是基于策略模式,遵循开闭原则的,你不需为新的对象修改 sort() 方法,你需要做的仅仅是实现你自己的 Comparator 接口。

21.使用工厂模式最主要的好处是什么?你在哪里使用?

工厂模式的最大好处是增加了创建对象时的封装层次。如果 你使用工厂来创建对象,之后你可以使用更高级和更高性能的实现来替换原始的产品实现或类,这不需要在调用层做任何修改。可以看我的文章工厂模式得更详细的解释和和了解更多的好处。

22.工厂模式与抽象工厂模式的区别?

首先来看看这两者的定义区别:
工厂模式:定义一个用于创建对象的借口,让子类决定实例化哪一个类
抽象工厂模式:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类

23.什么时候使用享元模式?

享元模式通过共享对象来避免创建太多的对象。为了使用享元模式,你需要确保你的对象是不可变的,这样你才能安全的共享。JDK 中 String 池、Integer 池以及 Long 池都是很好的使用了享元模式的例子。

24 什么是设计模式?你是否在你的代码里面使用过任何设计模式?

设计模式是世界上各种各样程序员用来解决特定设计问题的尝试和测试的方法。设计模式是代码可用性的延伸。

25 你可以说出几个在JDK库中使用的设计模式吗?

装饰器设计模式(Decorator design pattern)被用于多个Java IO类中。单例模式(Singleton pattern)用于Runtime,Calendar和其他的一些类中。工厂模式(Factory pattern)被用于各种不可变的类如Boolean,像Boolean.valueOf,观察者模式(Observer pattern)被用于Swing和很多的事件监听中。

26 在Java中,什么叫观察者设计模式(observer design pattern)?

观察者模式是基于对象的状态变化和观察者的通讯,以便他们作出相应的操作。简单的例子就是一个天气系统,当天气变化时必须在展示给公众的视图中进行反映。这个视图对象是一个主体,而不同的视图是观察者。可以在这篇文章中看到Java观察者模式的完整例子。

27 什么是责任链设计模式?

责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。

Java设计模式方面的面试题大全相关推荐

  1. java设计模式的一些面试题整理

    Java设计模式相关面试 这里面试一些简单的面试题 Java高级面试设计模式 这里面试一些简单的面试题 1.接口是什么?为什么要使用接口而不是直接使用具体类? 接口用于定义 API.它定义了类必须得遵 ...

  2. java设计模式面试题大全含答案

    java设计模式面试题大全含答案 1.23种经典设计模式都有哪些,如何分类? 2.j2ee常用的设计模式?说明工厂模式. 3.Spring 框架中都用到了哪些设计模式? 4.<java面试宝典& ...

  3. Java面试题大全带答案 110道(持续更新)

    本人发现网上虽然有不少Java面试题大全带答案,但第一未必全,第二未必有答案,第三虽然有答案,但未必能在面试中说,所以在本文里,会不断收集各种面试题,并站在面试官的立场上,给出我自己的答案 如果不背 ...

  4. 2020最新Java面试题大全,赶紧收藏吧!

    发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全,希望对大家有帮助哈~ 本套Java面试题大全,全的不能再全,哈哈~ 一.Java 基础 1. JDK 和 J ...

  5. [转载] JAVA面试题大全(part_1)

    参考链接: 对Java中派生类方法更严格的访问 JAVA面试题大全(part_1) 1.面向对象的特征有哪些方面 (1)抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目 ...

  6. [转载] Java面试题大全(2020版)

    参考链接: Java中的循环 发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全,希望对大家有帮助哈~ 本套Java面试题大全,全的不能再全,哈哈~ 博主已将以 ...

  7. JAVA面试题大全(part_1)

    JAVA面试题大全(part_1) 1.面向对象的特征有哪些方面 (1)抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只 是 ...

  8. Java面试题大全(Android版)

    疯狂Java面试题大全(Android版) Java核心技术部分 Java核心技术部分的面试题,可能覆盖Java基本语法.面向对象(包括类定义.方法.构造器.递归.继承.抽象类.接口.枚举以及fina ...

  9. Java面试题大全带答案110道(持续更新)

    [Java面试题大全带答案 110道(持续更新)] 本人发现网上虽然有不少Java面试题大全带答案,但第一未必全,第二未必有答案,第三虽然有答案,但未必能在面试中说,所以在本文里,会不断收集各种面试题 ...

最新文章

  1. 【jsp】写jsp文件的准备
  2. 使用zlib库进行数据压缩
  3. Opengl超级宝典笔记——空间绘图画点
  4. docker --link容器互联
  5. 2019计算机科学与技术考研分数线,2019考研中国科学技术大学复试分数线已公布...
  6. php 每天早上八点执行操作_php多进程单线程之phpcgi、phpfpm
  7. 深度学习 --- 受限玻尔兹曼机RBM(MCMC接受率详解)
  8. android t9键盘,T9/全键盘/侧滑 论手机键盘设计优缺点
  9. 归并排序-自底向上的归并排序算法
  10. Basic4IOS B4I开发原生iOS,Visual Studio中编程
  11. libvlc添加视频录制接口
  12. 软考嵌入式系统设计师2012年上午试题总结
  13. windows11设置chrome谷歌浏览器为默认浏览器
  14. 代数表达式c语言表达式,[单选] 设floata=2,b=4,c=3;,以下C语言表达式与代数式(a+b)+c计算结果不一致的是()...
  15. 河南python培训班
  16. java 编写snmp_使用Java进行SNMP编程
  17. mysql1396错误
  18. EJB基础三 有状态EJB
  19. python读取xlsx文件pandas_pandas dataframe 读取 xlsx 文件
  20. stylegan2通过操纵潜变量进行人脸编辑方法

热门文章

  1. SSO方式实现微服务的登入业务
  2. mysql拒绝访问root用户_对于出现拒绝访问root用户的解决方案
  3. 计算属性,方法与监听器(3-4)
  4. 2021年中式烹调师(中级)报名考试及中式烹调师(中级)考试总结
  5. 简单响应式Bootstrap框架中文官网页面模板
  6. 《七哥说道》第三章:志远淋雨怒辞职,误入保险黄老萍
  7. 关于强联通分量 的求法讨论
  8. pvid与access的关系_{华为HCNA-RS}关于Trunk、Hybrid、Access、Tag、Untag、Pvid的关系与区别...
  9. 男脸型测试配发型软件,男士测脸型配发型app 百度拍照测脸型
  10. 对于苹果电脑mac系统安装了windows双系统恢复成苹果单系统遇到的一些问题