面试题30天打卡-day03

1、JDK 动态代理和 CGLIB 动态代理的区别是什么?

DK动态代理和CGLIB动态代理是Java中常用的两种代理模式实现方式,它们的主要区别在于代理对象的生成方式和应用场景。

JDK动态代理是基于Java反射机制实现的,在运行时动态生成代理类,在代理类中通过反射调用委托类的方法。JDK动态代理要求委托类必须实现一个或多个接口,代理对象实现了委托接口,具有与委托类相同的方法签名。JDK动态代理适合对单个接口进行代理。

CGLIB动态代理是通过在运行时动态生成子类的方式实现的,代理对象继承了委托类,重写了委托类的非final方法,并在方法中调用委托类的方法。CGLIB动态代理不要求委托类实现接口,代理对象具有与委托类相同的方法。CGLIB动态代理适合对类进行代理,特别是对没有实现接口的类进行代理。

JDK动态代理和CGLIB动态代理都有各自的优缺点,应根据具体情况选择合适的代理方式。JDK动态代理实现简单,代码清晰,但要求委托类实现接口;CGLIB动态代理可以代理非接口类,但生成的代理对象的性能相对较低,生成代理类的时间也比JDK动态代理长。

2、MySQL 日志有了解过吗?binlog、redolog、undolog 分别有什么作用、有什么区别?

MySQL是一个关系型数据库管理系统,具有许多复杂的机制来确保数据的一致性、可靠性和安全性。其中,MySQL日志机制是实现这些目标的重要手段之一,常用的日志包括binlog、redolog和undolog。

  1. binlog(二进制日志)

binlog是MySQL的归档日志,记录了所有的数据库更新操作,包括数据增删改等。binlog文件可以被用来实现数据备份、数据同步等功能。binlog文件记录的是SQL语句的逻辑操作,而不是具体的数据内容,因此它相对较小。

  1. redolog(重做日志)

redolog也是MySQL中的一种日志,记录了MySQL引擎执行的所有更新操作。redolog记录的是物理操作,即修改了哪些数据块,而不是具体的SQL语句。redolog是MySQL引擎层的日志,具有很高的写入性能,因为redolog是在内存中缓存的,写入时不需要进行磁盘I/O操作。当MySQL意外宕机时,redolog中的日志将用于数据的恢复。

  1. undolog(撤销日志)

undolog是MySQL中用来实现事务回滚和MVCC(多版本并发控制)机制的日志。undolog记录了事务执行过程中修改的数据的前一个状态,当回滚事务时,MySQL将根据undolog中的信息将数据恢复到事务执行之前的状态。undolog是MySQL引擎层的日志,与redolog一样,也是在内存中缓存的。

区别:

  • binlog是用来实现数据备份和恢复、数据同步等功能的,记录的是SQL语句的逻辑操作,而redolog和undolog是MySQL引擎层的日志,用来保证数据的一致性和可靠性,记录的是物理操作。
  • redolog和undolog都是MySQL引擎层的日志,而binlog是MySQL的归档日志,是在MySQL Server层生成的。
  • redolog和undolog都是在内存中缓存的,写入性能较高,而binlog需要进行磁盘I/O操作,写入性能相对较低。

在MySQL中,这三种日志协同工作,确保了数据的一致性、可靠性和安全性。

3、Spring 框架是什么?使用 Spring 框架有哪些好处?

Spring框架是一个开源的JavaEE全栈框架。Spring框架的主要目标是简化企业级应用程序的开发,提高开发效率和代码质量,并解决传统JavaEE应用程序的复杂性和低效率问题。Spring框架包括了众多模块和功能,主要包括以下几个部分:

  1. 核心容器:包括IoC和AOP两个模块,实现了控制反转和面向切面编程功能。
  2. 数据访问/集成:包括JDBC、ORM、事务管理等模块,提供了方便的数据库访问和集成功能。
  3. Web开发:包括Web、MVC、Websocket、REST等模块,提供了Web开发和REST服务开发的支持。
  4. 安全:包括Web安全、ACL、用户认证、授权等模块,提供了完善的安全控制功能。
  5. 测试:包括单元测试和集成测试的支持。

Spring框架的优点主要包括:

  1. 简化开发:Spring框架提供了丰富的功能和组件,可以大大简化企业级应用程序的开发。
  2. 可扩展性:Spring框架是一个轻量级的框架,可以很容易地与其他框架和组件进行集成。
  3. 高度模块化:Spring框架是一个高度模块化的框架,每个模块可以独立使用,也可以组合使用。
  4. 可测试性:Spring框架提供了便于单元测试和集成测试的功能。
  5. AOP编程的支持
  6. 方便程序的测试
  7. 降低 JavaEE API 的使用难度
  8. Java源码是经典学习范例
  9. 方便集成各种优秀的框架
  10. 生命式事物的支持
  11. 方便解耦,简化开发

猜你喜欢

转载自blog.csdn.net/qq_56098191/article/details/130151040
今日推荐