Java面试题及答案(2022版),每道都是认真筛选出的高频面试题,助力大家能找到满意的工作!

Java设计模式面试题及答案

下载链接全部面试题及答案PDF

1.请列举出在 JDK 中几个常用的设计模式?

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

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

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

3.Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式

单例模式重点在于在整个系统上共享一些创建时较耗资源的对象。整个应用中只维护一个特定类实例,它被所有组件共同使用。Java.lang.Runtime 是单例模式的经典例子。从 Java5 开始你可以使用枚举(enum)来实现线程安全的单例。

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

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

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

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

6.举一个用 Java 实现的装饰模式(decorator design pattern)?它是作用于对象层次还是类层次?

装饰模式增加强了单个对象的能力。Java IO 到处都使用了装饰模式,典型例子就是Buffered 系列类如 BufferedReader 和 BufferedWriter,它们增强了 Reader 和 Writer 对象,以实现提升性能的 Buffer 层次的读取和写入。

7.在 Java 中,为什么不允许从静态方法中访问非静态变量?

Java 中不能从静态上下文访问非静态数据只是因为非静态变量是跟具体的对象实例关联的,而静态的却没有和任何实例关联。

8.设计一个 ATM 机,请说出你的设计思路?

比如设计金融系统来说,必须知道它们应该在任何情况下都能够正常工作。不管是断电还是其他情况,ATM 应该保持正确的状态(事务) , 想想 加锁(locking)、事务(transaction)、错误条件(error condition)、边界条件(boundary condition) 等等。尽管你不能想到具体的设计,但如果你可以指出非功能性需求,提出一些问题,想到关于边界条件,这些都会是很好的。

9.在 Java 中,什么时候用重载,什么时候用重写?

如果你看到一个类的不同实现有着不同的方式来做同一件事,那么就应该用重写(overriding),而重载(overloading)是用不同的输入做同一件事。在 Java 中,重载的方法签名不同,而重写并不是。

10.举例说明什么情况下会更倾向于使用抽象类而不是接口?

接口和抽象类都遵循”面向接口而不是实现编码”设计原则,它可以增加代码的灵活性,可以适应不断变化的需求。下面有几个点可以帮助你回答这个问题:在 Java 中,你只能继承一个类,但可以实现多个接口。所以一旦你继承了一个类,你就失去了继承其他类的机会了。

接口通常被用来表示附属描述或行为如:Runnable、Clonable、Serializable 等等,因此当你
使用抽象类来表示行为时,你的类就不能同时是 Runnable 和 Clonable(注:这里的意思是指如果把 Runnable 等实现为抽象类的情况),因为在 Java 中你不能继承两个类,但当你使用接口时,你的类就可以同时拥有多个不同的行为。

在一些对时间要求比较高的应用中,倾向于使用抽象类,它会比接

口稍快一点。如果希望把一系列行为都规范在类继承层次内,并且可以更好地在同一个地方进行编码,那么抽象类是一个更好的选择。有时,接口和抽象类可以一起使用,接口中定义函数,而在抽象类中定义默认的实现。

11. ⼯⼚⽅法模式(利⽤创建同⼀接⼝的不同实例)

1、普通⼯⼚模式:建⽴⼀个⼯⼚类,对实现了同⼀接⼝的⼀些类进⾏实例的创建;

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

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

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

1.一个类可以实现多个接口 ,但却只能继承最多一个抽象类。

2.抽象类可以包含具体的方法 , 接口的所有方法都是抽象的。

3.抽象类可以声明和使用字段 ,接口则不能,但接口可以创建静态的final常量。

4.接口的方法都是public的,抽象类的方法可以是public,protected,private或者默认的package;

5.抽象类可以定义构造函数,接口却不能。

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

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

15.什么是里氏替换原则?

1、开闭原则(Open Close Principle)

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

2、里氏代换原则(Liskov Substitution Principle)

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

3、依赖倒转原则(Dependence Inversion Principle)

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

4、接口隔离原则(Interface Segregation Principle)

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

5、迪米特法则(最少知道原则)(Demeter Principle)

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

6、合成复用原则(Composite Reuse Principle)

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

16.什么情况下会违反迪米特法则?为什么会有这个问题?

迪米特法则建议“只和朋友说话,不要陌生人说话”,以此来减少类之间的耦合。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

32.Java中什么是单例设计模式?用Java写出线程安全的单例

33.什么是责任链设计模式?

下载链接博主已将以上这些面试题整理成了一个面试手册,是PDF版的

Java设计模式面试题及答案(持续更新。。。)相关推荐

  1. 「高级java工程师」常见面试题及其答案(持续更新)

    「java工程师」常见面试题及其答案请见: 「java工程师」常见面试题及其答案(持续更新)_好人老李的博客-CSDN博客 目录 java基础 常用的 jvm 调优方法? OOM的常见场景及其原因.解 ...

  2. 「java工程师」常见面试题及其答案(持续更新)

    「高级java工程师」常见面试题及其答案: 「高级java工程师」常见面试题及其答案(持续更新)_好人老李的博客-CSDN博客 目录 java基础 面向对象与面向过程的区别? JRE.JDK.JVM的 ...

  3. java后端面试题总结(持续更新)

    (一) java基础 1.封装.继承.多态 封装:封装是指将对象的属性私有化,对外提供一些公共的方法来访问这些私有属性. 继承:如果一个类继承了另一个类,这个类就叫做子类,另一个类就叫父类,那么子类就 ...

  4. 黑马程序员-java就业面试题大全(持续更新)

    1.一个"java"源文件中是否可以包含多个类(不是内部类)?有什么限制? 可以有多个类,但只能有一个是public 类,并且public类名必须与文件名一致. 2.java中有没 ...

  5. 个人遇到的java开发面试题汇总(持续更新,如果一直参加面试还找不到工作的话╮( ̄▽  ̄)╭)

    广度优先遍历用非递归方法实现 mysql的事务隔离级别 线程安全的单例模式的实现 从非常多的数中取得最大的几个数(大顶堆问题) 网络通信协议,如HTTP.FTP协议等

  6. 【100道面试题真题讲解】C++面试题讲解+JAVA面试题讲解+Linux面试题讲解+数据结构面试题+计算机网络面试题 讲解视频-持续更新中

    最近找到了一个非常好的公众号:IT笔试面试真题讲解,每天视频分享一道IT公司面试高频题目,完全免费哦,非常适合找工作的学生复习+总结+提炼. 白嫖不敢独吞,分享给大家,也给作者增加一点访问量,鼓励作者 ...

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

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

  8. 史上最全 Java 多线程面试题及答案

    这篇文章主要是对多线程的问题进行总结的,因此罗列了40个多线程的问题. 这些多线程的问题,有些来源于各大网站.有些来源于自己的思考.可能有些问题网上有.可能有些问题对应的答案也有.也可能有些各位网友也 ...

  9. 推荐:全网最全的Java并发面试题及答案。

    转载自  推荐:全网最全的Java并发面试题及答案. 1.在java中守护线程和本地线程区别? java中的线程分为两种:守护线程(Daemon)和用户线程(User). 任何线程都可以设置为守护线程 ...

最新文章

  1. android viewpager 嵌套fragment,Android ViewPager+Fragment多层嵌套(使用问题处理)
  2. Zookeeper高级
  3. 判断一个数列是不是搜索二叉树后续遍历输出的结果
  4. .NET Core微服务系列基础文章索引(目录导航Final版)
  5. 阿里云服务器怎么安装docker
  6. python浮点数运算问题_python基础教程之. 浮点数运算:问题和局限
  7. 【ArcGIS微课1000例】0015:ArcGIS如何创建/自定义快捷键?
  8. 52 -算法 -数据结构类 Leetcode26 删除有序数组中的重复项
  9. Nokia Imaging SDK滤镜使用入门
  10. java web 登录demo_JavaWeb之Servlet登录demo
  11. [SQL]数据分析SQL笔试题
  12. java自带的tree,最强最全的Tree命令详解
  13. html excel零不显示,Excel中把0显示为空白的三种解决方法
  14. 计算机在材料科学中的应用实,计算机在材料科学与工程中的应用
  15. chrome 浏览器地址栏快速搜索设置
  16. 解决Ionic官方网站打开缓慢问题
  17. java页面左右飘窗_页面飘窗设计
  18. 深入分析Java中的length和length()
  19. 公司要抽奖活动?50行Python代码制作了一个转盘抽奖小程序
  20. IBM小型机更换硬盘详细步骤

热门文章

  1. uniapp h5集成百度地图
  2. vbox虚拟机无法桥接网卡怎么办
  3. stackoverflow无法注册解决方案
  4. IE浏览器兼容性视图设置数据解析
  5. 前端三剑客之HTML初体验
  6. AlarmManager
  7. Python 鸢尾花的可视化
  8. java编程捕鱼和分鱼_C_捕鱼和分鱼
  9. 未查询到服务器角色信息,dcdiag结果如果排查:拥有 PDC 角色的服务器已关闭。无法找到时间服务器。 - 网络管理论坛 - 51CTO技术论坛_中国领先的IT技术社区...
  10. 猫扑,谁在逼你上市vg