Java面试Day17

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

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

创建与获取

// 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,用于在多线程环境中执行任务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/33889.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ffmpeg+nginx-rtmp转发视频流

本篇博客最早发布于实验室公共博客,但已无人维护,现迁移至个人博客 nginx与nginx-rtmp-module安装 画了好几天图,实在有些乏力,找点有意思的事情做做 觉得视频流传输挺有意思,B站找了些视频,但感觉有些大…

20230627通过WPS给PPT幻灯片加入页码

20230627通过WPS给PPT幻灯片加入页码 2023/6/27 23:16 缘起:不想每次都手工给打印的PPT加页码,就通过百度搜索来自动加页码了! 真是偷懒让人进步呀! 百度搜索:ppt加页码怎么设置 方法步骤.png ?点击「插入」选项卡「幻…

两台电脑之间传输文件——就近共享

文章目录 背景步骤补充:跨设备共享 背景 两台电脑之间共享文件有很多种方式,这里介绍一种最简洁的——Windows自带的就近共享。它适合偶尔传输一些简单文件。比如把笔记本上的电子书传输到surface上阅读。 注意: 如果共享的电脑正在运行最新版本的Wind…

【数据结构与算法】7、队列(Queue)的实现【用栈实现队列】

目录 一、队列介绍二、使用 LinkedList 实现队列三、LeetCode:用【栈】实现队列(1) 老师讲之前我自己的实现(Correct)(2) 实现思路(3) 代码实现 四、jdk 的 Queue五、双端队列(Deque)六、循环队列(1) 分析(2) 入队(3) …

基于FPGA的RC滤波器设计实现

目录 简介: 传递函数 FPGA代码实现 总结 简介: RC滤波器的特性基本情况介绍 RC一阶低通滤波介绍;RC滤波器电路简单,抗干扰性强,有较好的低频性能,并且选用标准的阻容元件易得,所以在工程测…

【JAVA】十分钟带你了解java的前世今生

个人主页:【😊个人主页】 系列专栏:【初始JAVA】 文章目录 前言JAVA介绍诞生🔬名字与图标🤖发展🛩️未来🪄 前言 玩过我的世界的朋友想必对JAVA以及它的图标都很熟悉,在游戏开始画面…

7.3 SpringBoot整合MyBatis分页插件github.pageHelper:实现图书列表API

文章目录 前言一、自己实现分页第一步,count 查询 总记录数(totalCount),计算总页数(totalPages)第二步,limit 查询 指定页数据 二、不考虑分页的查询图书列表MapperBookServiceImplBookListPar…

FastDFS单机部署及SpringBoot整合

前言 FastDFS是一个开源的高性能分布式文件系统。它的主要功能包括:文件存储、文件同步和文件访问(文件上传和文件下载),可以解决高容量和负载平衡问题。FastDFS应满足其服务基于文件的网站的要求,如照片共享网站和视…

Maynor的博客专家成长之路——暨2023年中复盘

文章目录 博客专家成长之路——暨2023年中复盘前言念念不忘的博客专家每天只做三件事敲代码写博客健健身 我的感悟 不足之处未来:和CSDN共同成长最后 博客专家成长之路——暨2023年中复盘 前言 ​ 2023年不知不觉已经过去了半年有余,也是时候作年中复盘…

ChatGPT 是什么?

写在前面:这篇文章是今年1月份对chatgpt做调研学习时写的,都是从别处搬来的,纯扫盲的作用。本来一直以草稿的形势存在,但今天整理博客,顺便给发出来吧。 文章目录 1. ChatGPT简介1.1 ChatGPT 支持的场景举例 2 ChatGPT…

计算机网络————应用层

文章目录 概述域名系统DNS域名结构域名服务器解析过程常见的DNS记录DNS报文格式基础结构部分问题部分资源记录(RR, Resource Record)部分 万维网WWWURLHTTPHTTP发展HTTP报文结构请求报文响应报文 cookie 内容分发网络CDN 概述 应用层的具体内容就是规定应用进程在通信时所遵循的…

python数据分析之利用多种机器学习方法实现文本分类、情感预测

大家好,我是带我去滑雪! 文本分类是一种机器学习和自然语言处理(NLP)任务,旨在将给定的文本数据分配到预定义的类别或标签中。其目标是为文本数据提供自动分类和标注,使得可以根据其内容或主题进行组织、排…

【AI】PyTorch安装记录及Anaconda环境配置

【AI】PyTorch安装记录及Anaconda环境配置 说下本地环境,RTX4070 12GB GPU;618刚买,不能让他闲着,配置一下炼丹环境,开始为打工人工作。为了方便后续部署模型之间依赖不冲突,所以使用Anaconda管理Python环…

网络环境TFTPNFS搭建

文章目录 1. TFTP服务搭建2. NFS 环境搭建 1. TFTP服务搭建 1、Ubuntu上搭建TFTP服务器,需要安装tftp-hpa和tftpd-hpa,命令如下: sudo apt-get install tftp-hpa tftpd-hpa sudo apt-get install xinetd2、TFTP也需要一个文件夹来存放文件…

Django DRF - 【Token】认证基本使用

一. 前言 Django Rest Framework Token是Django Rest Framework中的一个扩展,用于实现用户认证和授权。它为每个用户生成一个唯一的Token,并将其存储在数据库中。在用户进行API请求时,用户需要在请求的HTTP Header中包含Token,这…

考场作弊行为自动抓拍告警算法 yolov7

考场作弊行为自动抓拍告警系统通过yolov7python网络模型算法,考场作弊行为自动抓拍告警算法实时监测考场内所有考生的行为,对考生的行为进行自动抓拍,并分析判断是否存在作弊行为。YOLOv7 的发展方向与当前主流的实时目标检测器不同&#xff…

关于Apache Dubbo反序列化漏洞(CVE-2023-23638)的预警提示与对应的Zookeeper版本

公司在升级dubbo过程中因zookeeper版本不匹配,导致服务注册和调用出现异常 一、漏洞详情 Apache Dubbo是一款高性能、轻量级的开源Java服务框架。 Apache官方发布安全公告,修复了Apache Dubbo中的一个反序列化漏洞(CVE-2023-23638&#xff…

玩转C++调试之Python的GDB库增强

玩转C调试之Python的GDB库增强 0.导语 调试是软件开发过程中不可或缺的一环,而GDB(GNU调试器)作为一款功能强大的调试工具,在开发者中得到广泛应用。除了传统的命令行调试功能外,GDB还提供了Python的GDB库,…

计算机网络——自顶向下方法(第一章学习记录)

什么是Internet? 可以从两个不同的方面来理解Internet。(它的构成。它的服务) 1.因特网的主要构成 处在因特网的边缘部分就是在因特网上的所有主机,这些主机又称为端系统(end system),端系统通过因特网服…

【C2】文件,时间,多线程,动静态库

文章目录 1.文件:fprint/fgets/fwrite/fread,ftell/rewind/fseek/fflush1.1 文本文件:FILE结构体1.2 二进制文件:没有行概念1.3 文件定位:linux下文本文件模式和二进制文件模式没有区别。fgets和fprintf以行方式读写文…