当前位置: 首页 > news >正文

【Java开发岗面试】八股文—设计模式

声明:

  1. 背景:本人为24届双非硕校招生,已经完整经历了一次秋招,拿到了三个offer。
  2. 本专题旨在分享自己的一些Java开发岗面试经验(主要是校招),包括我自己总结的八股文、算法、项目介绍、HR面和面试技巧等等,如有建议,可以友好指出,感谢,我也会不断完善。
  3. 想了解我个人情况的,可以关注我的B站账号:东瓜Lee
  1. 设计模式是什么?

    1. 设计模式通常是对于某一类软件设计问题的可重用解决方案,将设计模式引入软件设计和开发过程,目的主要是重用软件开发经验。
    2. 它一般用来解决同一问题的不同表相。
    3. 设计模式的两大主题是系统复用和系统扩展。
  2. 常见的设计模式及其应用场景有什么?

    设计模式总共有23种,可以分为创建型模式、结构性模式、行为型模式,具体来说比如有:

    1. 单例模式:

      单例模式是一种创建型设计模式,它可以保证一个类只有一个实例,并提供全局访问。根据实现方式可以分为:

      1. 饿汉式单例模式是指在类加载时就创建了单例对象,因此在调用时不需要再创建对象,直接使用即可。
      2. 懒汉式单例模式是指在调用时才创建单例对象,这种实现方式避免了资源浪费,但是要用的时候就需要new对象,就要慢一些,而且也有线程安全问题。
      3. 双重检查锁单例模式是指在懒汉式单例模式的基础上加入了双重检查锁机制,可以保证线程安全,同时也避免了资源浪费。
      4. 静态内部类单例模式是指将单例对象作为静态内部类的一个静态变量,这种实现方式可以保证线程安全,同时也可以避免资源浪费。
      5. 枚举单例模式指将单例对象定义为一个枚举类型,这种实现方式可以保证线程安全,同时也可以防止反射和序列化攻击。
    2. 适配器模式:

      1. 将一个接口转换成客户希望的另一个接口,这是适配器模式
    3. 享元模式:

      1. 很多网络设备都是可以共享的,比如交换器、集线器等等,还比如多台终端计算机连接一台网络设备,这也是设备的共享,就可以使用享元模式来模拟。
    4. 外观模式:

      1. 假设一个电源总开关可以控制多个子开关,要实现总开关同时控制多个子开关,就可以使用外观模式来模拟。
    5. 备忘录模式:

      1. 比如文档编辑软件都有撤销的功能,快捷键一般都是Ctrl+Z。这就可以使用备忘录模式模式来实现。
    6. 建造者模式:

      1. 比如一份套餐可以包含多个组成部分,不同的套餐有不同的组成部分一步一步装配这些组成部分,构造一份完整的套餐,就可以使用建造者模式来描述。
  3. Spring框架中用到了哪些设计模式?

    1. 单例设计模式 : Spring 中的 Bean 默认都是单例的。
    2. 工厂设计模式 : Spring 使用工厂模式通过 BeanFactory、ApplicationContext 创建 bean 对象。
    3. 代理设计模式 : Spring AOP 底层的实现(jdk动态代理、cglib动态代理)。
    4. 模板方法模式 : Spring 中 jdbcTemplate、hibernateTemplate 等以 Template 结尾的对数据库操作的类,它们就使用到了模板模式。
    5. 观察者模式:Spring 事件驱动模型就是观察者模式很经典的一个应用。
    6. 适配器模式 : Spring AOP 的增强或通知(Advice)使用到了适配器模式、Spring MVC 中也是用到了适配器模式适配Controller。
  4. 工厂模式包括三种:

    工厂模式的目的就是用来解耦,降低耦合度,实现松耦合

    1. 简单工厂模式:所有的产品共用一个工厂
    2. 工厂方法模式:每种产品都有一个对应的工厂,让工厂专门负责对应产品的生产,一般项目中用的最多的
    3. 抽象工厂模式:工厂的工厂,很少使用

【后续继续补充,敬请期待】

http://www.lryc.cn/news/271387.html

相关文章:

  • GO基础进阶篇 (九)、临界资源安全问题(锁、channel)
  • Python基础-04(比较运算符、逻辑运算符)
  • MySQL 四种插入命令及其特点与锁机制
  • AKShare学习笔记
  • A星寻路算法
  • QDialog
  • Spark中使用DataFrame进行数据转换和操作
  • windows11新装机,简单评测系统自带软件(基本涵盖日常所需应用)
  • 概念解析 | Shapley值及其在深度学习中的应用
  • ajax的完整写法——success/error/complete+then/catch/done+设置请求头两种方法——基础积累
  • 《Linux详解:深入探讨计算机基础》
  • HarmonyOS 实践之应用状态变量共享
  • ThreadLocal共享变量
  • 前端crypto-js 库: MD5
  • 2024新年快乐
  • OpenCV-Python(21):轮廓特征及周长、面积凸包检测和形状近似
  • 连接progressql报错Cannot load JDBC driver class ‘org.postgresql.Driver‘,亲测有效!!!
  • SQLAlchemy快速入门
  • java 纯代码导出pdf合并单元格
  • Linux自己的应用商店yum
  • 集成电路模拟设计——【基于Serdes 应用的 串化/解串器 时钟与数据恢复电路CDR】
  • OpenWrt 编译入门(小白版)
  • 嵌入式视频播放器(mplayer)
  • 对房价数据集进行处理和数据分析
  • BERT的学习
  • 数据结构OJ实验9-图存储结构和遍历
  • 20231226在Firefly的AIO-3399J开发板上在Android11下调通后摄像头ov13850
  • 0101包冲突导致安装docker失败-docker-云原生
  • 【力扣100】17.电话号码的字母组合
  • 2023。