推广 热搜: csgo  vue  2023  angelababy  gps  信用卡  新车  htc  落地  控制 

java常用设计模式及其使用场景

   2023-08-12 网络整理佚名1780
核心提示:设计模式的使用场景。面试中对于设计模式,你应该明白不同的设计用来解决什么场景问题,对于常用的设计模式能够灵活运用。下面重点介绍几种常用的设计模式。下面结合设计模式的实际应用,来介绍常用的设计模式,在面试时遇到类似问题,记得要将设计模式与实际业务场景进行结合,来体现对设计模式的理解和应用能力。工厂模式是创建不同类型实例时常用的方式,例如中的各种Bean是有不同Bean工厂类进行创建的。

设计模式的用例。

共有 3 类 23 种设计模式:

创建:工厂方法模式、抽象工厂模式、单例模式、构建器模式、原型模式。

结构类型:适配器模式、装饰者模式、代理模式、外观模式、桥接模式、组合模式、享元模式。

行为:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介模式、解释器模式。

最常见的设计模式有:单例模式、工厂模式、代理模式、构造函数模式、责任链模式、适配器模式、观察者模式等。

对于面试中的设计模式,应该了解不同的设计是用来解决什么场景的,能够灵活运用常用的设计模式。 下面重点介绍几种常用的设计模式。

单例模式

首先是单例模式,在实际业务中经常使用,也是设计模式中的主要考察点。 这是一个线程安全的单例实现。

单例模式有三种常见的实现。

第一种是静态初始化法,也称为饿汉法。 实现的思路是在类初始化的时候就完成单例实例的创建,所以不会出现并发问题。 这样,无论是否使用单例,都会创建单例。

第二种实现方法是双重检查,也称为惰性方法。 这个单例实例只有在实际使用的时候才会被创建,不使用的时候就不会创建。 当多个线程同时使用实例时,这种方法不可避免地会面临并发问题。 为了解决并发访问的问题,通过进行双重检查,保证只有一个线程可以创建实例。 这里要注意内存可见性带来的并发问题,必须使用关键字来修改单例变量。

第三种是单例注册方式。 Bean的单例模式是通过单例注册方式实现的。

下面结合设计模式的实际应用来介绍常用的设计模式。 面试中遇到类似问题时,记得将设计模式与实际业务场景结合起来,体现对设计模式的理解和应用能力。

工厂模式

工厂模式是创建不同类型实例的常用方法。 例如,中的各种Bean是由不同的Bean工厂类创建的。

代理模式

代理模式主要用在不适合或者不能直接引用另一个对象的场景,通过代理模式可以控制代理对象的访问行为。 Java的代理模式分为静态代理和动态代理。 静态代理是指编译时就已经创建的代理类,比如源码中写的类; 动态代理是指在JVM运行过程中动态创建的代理类。 使用动态代理的方法有JDK动态代理、CGLIB等。 如果面试的时候遇到这个问题,可以举一个动态代理的例子。 例如,在Motan RPC中,使用JDK的动态代理通过反射来封装远程请求,使服务看起来像是在使用本地方法。

责任链模型

责任链模型有点像工厂的流水线。 链中的每个节点完成对对象的一定处理。 例如,Netty框架在处理消息时使用责任链模型。

适配器模式

适配器模式,和我们常见的适配器类似,适配两个不匹配的对象,也可以起到解耦两个不同对象的作用。 比如我们常用的日志处理框架SLF4J,如果使用SLF4J,我们可以将其与Log4j或者其他具体的日志实现框架解耦。 通过不同的适配器适配SLF4J和Log4j等实现框架,完成日志功能的使用。

观察者模式

观察者模式也称为发布订阅模式,适用于对象的某种行为需要触发一系列事件的场景。 例如,gRPC中流式请求的处理就是通过观察者模式来实现的。

构造函数模式

构造函数模式适用于属性较多、复杂的对象,需要根据不同的情况创建不同的具体对象,比如创建PB对象时使用的方法。

Java语言特性知识点

Java语言特性的知识点总结如下

常用的集合类实现和Java JUC是常见的测试点,JUC将在后面的多线程课程中详细讲解。

Java的一些集合类需要重点了解类的实现。 比如是如何实现的等等。

动态代理和反射是Java语言的特点。 需要掌握动态代理和反射的使用场景。 例如,代理类在 ORM 框架中广泛使用。 RPC调用会利用反射机制来调用实现类的方法。

Java基本数据类型在面试中也经常被问到,比如各种数据类型占用多少内存空间、数据类型的自动转换和强制转换、基本数据类型和数据类型的自动装箱和拆箱等等。

Java对对象的引用分为四种类型:强引用、软引用、弱引用和幻像引用。 这些参考文献在 GC 期间有不同的处理策略。 强引用不会被GC回收; 当内存空间不足时,软引用会被GC回收; 每次GC时都会回收弱引用; 幻像引用必须与引用队列结合使用,主要用于跟踪对象被垃圾收集的过程。

Java的异常处理机制是try-catch机制。 需要知道发生异常时try catch中的处理流程; 您需要了解 Error 和 之间的区别。

最后,Java的注解机制和SPI扩展机制都可以正确理解为扩展点。

详细地图

关于Java的基础知识重点讲解Java不同版本最常见的检查点和新技术特性

面试时Map实现的题目可以考查数据结构、Java基本实现、并发问题的掌握。

我们先看一下实现。 简单来说,Java是通过数组和链表相加来实现的,数组中的每一项都是一个链表。 通过计算存储的对象来计算出要存储的对象在数组中的位置,利用链表解决哈希冲突。 链表中的节点存储键值对。

除了实现方法之外,我们还需要了解填充因子的作用以及Map扩展的机制。 我们需要知道的容量是2的幂,因为余数可以通过按位与运算来计算,这比取模更快。 另外,你需要知道它不是线程安全的。 在多线程put的情况下,可能会在容量超过填充因子时执行,因为为了避免尾部遍历,在链表中插入元素时采用的是头插入方式。 在多线程场景下,可能会出现这种情况。 创建无限循环。

既然不是线程安全的,面试官自然会问线程安全的问题。 采用分段锁的思想来减少并发场景下加锁的频率。 JDK1.7和1.8的实现差异非常大。 1.7中使用分段锁来减少并发锁; 1.8中使用了CAS自旋锁。 乐观锁是用来提高性能的,但是并发高的时候性能会比较一般。 另外,1.8中引入了红黑树,解决Hash冲突时链表顺序查找的问题。 红黑树的启用条件与链表的长度和Map的总容量有关。 默认情况下,当链表大于8且容量大于64时,会转为红黑树。 这部分内容建议详细阅读源码。

详细讲解Java版本特性

近年来,Java改变了以前的版本发布风格,发布频率增加了很多。 目前大部分公司的生产环境仍在使用1.8版本,少部分升级到1.9或1.10版本。 Java的1.8版本是长期支持的版本,最新的1.11版本也是长期支持的版本。 1.11版本中已经包含了1.9和1.10版本的功能,因此1.8和1.11版本是我们应该重点关注的版本。

在1.8版本中,Java增加了对表达式的支持,使得Java代码编写更加简洁,更加方便支持并行计算。 并且它提供了很多流媒体API。 1.8版本还支持引用方法的能力,可以进一步简化表达式的编写。

在1.8版本中,接口可以提供默认方法,这可以简化一些简单的抽象类。 最后,在1.8版本中,方法区被调整为使用替换的永久代。 和最大的区别在于:不是在虚拟机中,而是使用本地内存。替换的目的一方面是为了完善元数据的管理,提高GC效率,另一方面是为了方便后续合并

1.9和1.10版本的主要特点是增加了模块系统,将G1设置为默认垃圾收集器,并支持局部变量推断。 这些功能已经包含在 1.11 版本中。

1.11版本是Java最新的长期支持版本,未来将是一个主要版本。 1.11 版本中提供的最令人兴奋的功能是新的垃圾收集器 ZGC。 ZGC是针对大内存堆而设计的,具有非常强大的性能,能够实现10ms以下的GC暂停时间。 关于ZGC将在下一课进一步介绍。 此外,1.11版本还增强了字符串处理API,提供了字符复制等功能。 1.11版本也内置了。

 
反对 0举报 0 收藏 0 打赏 0评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报
Powered By DESTOON