avatar

Java面试题12

1.什么是责任链模式?

1
避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止

2.Spring中都用到了哪些设计模式?

1
2
3
4
5
6
7
8
1.工厂设计模式: 通过BeanFactory或ApplicationContext创建bean对象
2.单例设计模式: Spring中Bean的默认作用域
3.代理设计模式: Spring AOP功能的实现
4.模板方法模式: Spring中JdbcTemplate、RedisTemplate等以Template结尾的对数据库操作的类
5.包装器设计模式: 根据需要动态的切换不同的数据源
6.观察者模式: Spring事件驱动模型
7.适配器模式: Spring AOP的增强或通知
8.装饰者模式: InputStream与其子类的关系

3.Spring Boot中都用到了哪些设计模式?

1
2
1.策略模式: 将实现类交给spring去管理,通过接口的注入,获取对应的类型,再通过context进行调用执行的方法
2.监听器模式: Spring的监听机制

4.Spring MVC中都用到了哪些设计模式?

1
2
3
4
1.组合模式: WebMvcConfigurerComposite体现了组合模式,树枝节点用Composite结尾,里面包含了树叶节点,树枝和树叶都实现了相同的抽象类或接口WebMvcConfigurer
2.策略模式: 决定request的media types时
3.适配器模式: 将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作
4.责任链模式: DispatcherServlet核心方法doDispatch体现了责任链模式,request是请求,所有入参包含request的方法,都是责任链的体现

5.什么反射?

1
2
3
4
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制
1.把.class文件加载到内存,并创建对应的Class对象
2.然后获取Class对象(字节码对象)中的Constructor(构造方法描述器),Field(属性描述器),Method(方法描述器)
3.并通过这三个对象任意操作内存中的对象属性和行为

6.获取Class对象的方式有哪些?

1
2
3
1.通过类名.class获取
2.通过Class.forName("全类名")
3.通过对象名.getClass()

7.lombok的优缺点有哪些?

1
2
3
4
优点:
能通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString等方法,提高了一定的开发效率,使得代码变得简洁,不用过多的去关注相应的方法;并且当属性做修改时,无需维护构造器和方法
缺点:
不支持多种参数构造器的重载

8.什么是Mybatis?

1
Mybatis是一个优秀的基于java的持久层框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程;Mybatis可以通过xml或注解的方式将要执行的各种statement配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句,mybatis框架执行sql并将结果映射为java对象并返回;采用ORM思想解决了实体和数据库映射的问题,对jdbc 进行了封装,屏蔽了jdbc api 底层访问细节,使我们不用与jdbc api打交道,就可以完成对数据库的持久化操作

9.原始jdbc存在那些问题?

1
2
3
1.数据库连接创建、释放频繁造成系统资源浪费从而影响系统性能
2.sql 语句在代码中硬编码,造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。
3.查询操作时,需要手动将结果集中的数据手动封装到实体中.插入操作时,需要手动将实体的数据设置到sql语句的占位符位置

10.Mybatis是使用什么方法解决原始jdbc存在的问题的?

1
2
3
1.使用数据库连接池初始化连接资源
2.将sql语句抽取到xml配置文件中
3.使用反射、内省等底层技术,自动将实体与表进行属性与字段的自动映射
文章作者: 123
文章链接: https://gao5805123.github.io/123/2021/04/15/Java%E9%9D%A2%E8%AF%95%E9%A2%9812/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 123
打赏
  • 微信
    微信
  • 支付宝
    支付宝