Java面试Day17

这篇具有很好参考价值的文章主要介绍了Java面试Day17。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.什么是 Java 内部类? 内部类的分类有哪些 ?内部类有哪些优点和应用场景?

顾名思义,内部类是指定义在某一个类中的类,主要分为成员内部类,静态内部类,局部内部类和匿名内部类四种。

Java面试Day17,java,数据库,mysql

创建与获取

// 1、私有内部类 => 在外部类中编写方法,对外提供内部类对象
// 定义方法(外部类中)
public Inner getInstance(){
    return new Inner();
}
// 使用方法
Outer o = new Outer();
Object i = o.getInstance();
​
// 2. 非私有内部类 => 直接创建成员内部类
// 外部类名.内部类名 对象名 = new 外部类对象.new 内部类对象;
Outer.Inner oi = new Outer().new Inner();

优点

  1. 可以隐藏实现细节。

  2. 便于编写和维护,提高代码的可读性和可维护性。

  3. 使用内部类解决 Java单继承问题

  4. 可以更换的对外部类进行扩展

注:JDK16 之前成员内部类里不能定义静态变量

2.覆盖索引和联合索引是什么?讲一下索引的最左前缀匹配原则。

覆盖索引和联合索引是数据库中常见的两种索引类型。

覆盖索引是指一个包含了所有查询需要的列的索引,查询时可以直接从索引中取到需要的数据,而不需要再回到表中查找,从而可以提高查询效率。

联合索引是指使用多个列组合起来作为一个索引,可以同时查询多个列,以提高查询效率。联合索引可以包含多个列,但是查询时只能使用前缀列进行查询,即只有在查询中使用了联合索引的前几个列,才能利用联合索引进行查询。如果查询中没有使用前缀列,那么联合索引就不能发挥作用,需要使用单独的索引或全表扫描。

-- 假设有联合索引(A,B,C)
SELECT A,B,C FROM table  -- 使用覆盖索引,查询列均为索引列,无需回表

最左前缀匹配原则是指如果一个联合索引包含了多个列,那么在查询时只能使用前面的列进行匹配。例如,一个联合索引包含了 A、B、C 三列,那么查询时只能使用 A、AB 或 ABC 进行匹配,而不能只使用 B 或 C 进行匹配。这是因为如果查询时使用的列不是最左前缀列,那么 MySQL 就无法使用索引进行查询,会导致全表扫描,从而降低查询效率。

-- 假设有联合索引(A,B,C)
SELECT A,B,C FROM table WHERE A=1 AND B=1 -- 满足最左前缀匹配原则,可以使用到联合索引
SELECT A,B,C FROM table WHERE B=1 AND C=1 -- 不满足最左前缀匹配原则,未使用到联合索引

在实际的应用中,覆盖索引和联合索引可以结合使用,以提高查询效率。同时,使用最左前缀匹配原则可以让我们更加合理地设计索引,从而提高查询性能。

3.Spring 如何处理线程并发问题,ThreadLocal 你了解过吗?

Spring 如何处理线程并发问题?

Spring 中处理线程并发问题的主要方式是使用线程安全的对象并发包中提供的类来避免线程安全问题。

例如,Spring 中的单例 Bean 是线程安全的,因为 Spring 容器在创建单例 Bean 时会确保只有一个实例存在。Spring 还提供了对多线程的支持,例如使用 @Async 注解实现异步方法调用等。

在 Spring 中处理线程并发问题,常用的方法有以下几种:

  1. Synchronized关键字:使用 synchronized 关键字可以锁定某个对象或类,使得多个线程无法同时进入该代码块,从而保证数据的安全性。

  2. ReentrantLock:与 synchronized 相比,ReentrantLock 提供了更加灵活的加锁方式,可以控制锁的获取和释放的时机,提供了更多的扩展功能。

  3. Atomic 包:Java 的 Atomic 包提供了一些原子性操作,例如 AtomicLong、AtomicInteger 等,可以保证某个操作的原子性。

  4. ThreadLocal:ThreadLocal 可以使得每个线程拥有自己的变量副本,避免了多个线程之间共享变量所带来的线程安全问题。

ThreadLocal 你了解过吗?

  • ThreadLocal 是 Java 中的一个线程局部变量,它可以为每个线程提供一个独立的变量副本,避免了多线程之间的数据共享和数据竞争问题。

  • ThreadLocal 可以在每个线程中存储一个对象,并且每个线程只能访问自己的对象,而不会影响其他线程中的对象。

  • ThreadLocal 主要用于解决线程安全问题,例如在 Web 应用中,可以使用 ThreadLocal 存储用户的会话信息,这样每个线程就可以独立地访问自己的会话信息,避免了多个线程之间的数据共享和数据竞争问题。

  • 在 Spring 中,ThreadLocal 通常用于存储和传递一些与线程相关的上下文信息,例如当前登录用户的信息、请求的 IP 地址等。可以将 ThreadLocal 对象定义为一个 Bean,然后在需要使用时注入到其他 Bean 中使用。

  • Spring 还提供了一些与 ThreadLocal 相关的类和工具,例如 SimpleThreadScope,用于实现线程范围内的 Bean,以及 TaskExecutor,用于在多线程环境中执行任务。文章来源地址https://www.toymoban.com/news/detail-516346.html

到了这里,关于Java面试Day17的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java面试Day17

    顾名思义,内部类是指定义在某一个类中的类,主要分为 成员内部类,静态内部类,局部内部类和匿名内部类 四种。 创建与获取 优点 可以隐藏实现细节。 便于编写和维护,提高代码的可读性和可维护性。 使用内部类解决 Java单继承问题 可以更换的对外部类进行扩展 注:

    2024年02月11日
    浏览(37)
  • JAVA面试部分——后端-数据库前篇

    5.1 mysql中char和varchar的区别,varchar(100)中的一百的含义,能存放多少汉字? 在MySQL中,CHAR和VARCHAR都是用来存储字符串的数据类型,但它们之间存在一些主要区别。 存储方式:CHAR是固定长度的,而VARCHAR是可变长度的。这意味着CHAR会根据你设定的长度存储字符串,即使实际

    2024年01月16日
    浏览(46)
  • JAVA面试部分——后端-数据库后篇

    5.16 多个人同时对数据进行操作,对事务的操作应该怎么解决 在多个人同时对数据进行操作的情况下,需要保证数据的一致性和完整性。以下是一些解决事务操作的方法: 使用数据库事务:数据库事务是一组一起执行的语句,如果其中任何一个语句发生错误,整个事务将回滚

    2024年01月22日
    浏览(49)
  • 新版Java面试专题视频教程——数据库篇

    = = = = = = = = = = = = = 数据库篇 = = = = = = = = = = = = = 01-MySQL篇-课程介绍 MySQL 进阶篇1.0 索引 SQL优化 视图 锁 02-优化-如何定位慢查询 MySQL中,涉及到慢查询都有哪些? 聚合查询 多表查询 表数据量过大查询 深度分页查询 表象:页面加载过慢、接口压测响应时间过长(超过1s) MySQL中,

    2024年02月19日
    浏览(39)
  • java八股文面试[数据库]——慢查询优化

    分析慢查询日志 直接分析慢查询日志, mysql使用 explain + sql语句进行模拟优化器来执行分析。 oracle使用explain plan for + sql语句进行模拟优化器来执行分析。 table | type | possible_keys | key |key_len | ref | rows | Extra EXPLAIN列的解释: table 显示这一行的数据是关于哪张表的 type 这是重要的

    2024年02月10日
    浏览(38)
  • java八股文面试[数据库]——自适应哈希索引

    自适应Hash索引( Adatptive Hash Index,内部简称 AHI )是InnoDB的 三大特性之一 ,还有两个是 Buffer Pool简称BP、 双写缓冲区 (Doublewrite Buffer)。 1、自适应即我们 不需要自己处理 ,当InnoDB引擎根据 查询统计 发现某一查询满足hash索引的数据结构特点,就会给其建立一个hash索引;

    2024年02月10日
    浏览(46)
  • Java面试之数据库篇(offer 拿来吧你)

    现在关于Java面试的资料是层出不穷,对于选择困难症的同学来说,无疑是陷入了一次次的抉择与不安中,担心错过了关键内容,现在小曾哥秉持着\\\"融百家之所长,汇精辟之文档\\\"的思想,整理一下目前主流的一些八股文,以达到1+1 2 的效果! 1、什么是DB?DBMS?DBS?DBA? 上面名词傻

    2024年02月02日
    浏览(32)
  • 0基础学java-day25(JDBC 和数据库连接池)

    1.1 方式 1 1.2 方式 2  1.3 方式 3  1.4 方式 4  1.5 方式 5    1.6 课堂练习  2.1 基本介绍  2.2 应用实例 3.1 基本介绍  3.2 演示的sql语句  3.3 应用实例 ​ 4.1 基本介绍 4.2 预处理好处  4.3 应用案例  模拟经典的转账业务 【package utils】   【package domain】 【dao】 【test】

    2024年01月18日
    浏览(42)
  • Java连接mysql数据库

    java连接mysql大致需要这六步: 导入驱动包 :这里我使用的是mysql-connector-java-8.0.17.jar( 点击下载 ),这个包连接mysql5.6,5.7,8.0版本都没问题。 Class.forName(\\\"com.mysql.cj.jdbc.Driver\\\"); url和账户名密码 JDBC连接串: jdbc:mysql://地址:端口/数据库 获取连接 : DriverManager.getConnection(url, user

    2024年02月02日
    浏览(50)
  • 用Java操作MySQL数据库

    在pom.xml的标签里加上下面的内容 如果是MySQL 5.8那么的版本号是5.x.x, 例如5.1.49 如果是MySQL 8.0那么的版本号是8.x.x, 例如 8.0.28 构建实体类, 类属性和表对应上, 方便来接收查询数据 对于一个学生信息表 新建学生类 省略了设置数据源参数和关闭数据源的操作 如果你想update, 那么

    2024年02月13日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包