2024java面试题

2024java面试题

java基础

list、set、map的区别

list

可重复

  • LinkedList 接口实现类, 链表, 插入删除, 没有同步, 线程不安全
  • ArrayList 接口实现类, 数组, 随机访问, 没有同步, 线程不安全
  • Vector 接口实现类 数组, 同步, 线程安全

set

不可重复

map

k不可重复v可以重复

接口与抽象类的区别

相似点:
(1)接口和抽象类都不能被实例化
(2)实现接口或继承抽象类的普通子类都必须实现这些抽象方法
不同点:
(1)抽象类可以包含普通方法和代码块,接口里只能包含抽象方法,静态方法和默认方法,
(2)抽象类可以有构造方法,而接口没有
(3)抽象类中的成员变量可以是各种类型的,接口的成员变量只能是 public static final 类型的,并且必须赋值

成员变量与局部变量的区别

成员变量

定义在类中的方法之外。成员变量可以是实例变量或类变量。他属于类的一部分,用于描述类的属性或状态

局部变量

定义在方法内部或方法的参数列表中。局部变量包括形参、方法局部变量和代码块局部变量。它们的作用域仅限于定义它们的方法或代码块内。

java的死锁

互斥条件:同一资源同时只能由一个线程读取
不可抢占条件:不能强行剥夺线程占有的资源
请求和保持条件:请求其他资源的同时对自己手中的资源保持不放
循环等待条件:在相互等待资源的过程中,形成一个闭环
想要预防死锁,只需要破坏其中一个条件即可,比如使用定时锁、尽量让线程用相同的加锁顺序,还可以用银行家算法可以预防死锁

重写和重载

重写

重写是子类对父类容许访问的方法的实现过程

  • 有继承关系的子类中
  • 方法名相同,参数列表相同(参数顺序、个数、类型),方法返回值相同
  • 访问修饰符,访问范围需要大于等于父类的访问范围
  • 与方法的参数名无关

重载

  • 同一个类中
  • 方法名相同,参数列表不同(参数顺序、个数、类型)
  • 方法返回值、访问修饰符任意
  • 与方法的参数名无关

并发和并行的区别

并发

并发是一个cpu处理器同时处理多个线程任务

并行

并行是多个cpu处理多个线程

创建线程的方式

1、继承Thread(死瑞德)类并重写run方法来创建线程
2、实现Runnable(润的波)接口并使用run方法来创建线程
3、实现Callable接口
4、使用线程池

线程的状态

1、创建
2、就绪
3、运行
4、阻塞
5、结束

synchronized与lock有什么区别

1、synchronized是java中的一个字
2、lock是java中的一个接口它有许多的实现类来为它提供各种功能

获取锁的方式

可对实例方法、静态方法和代码块加锁,相对应的,加锁前需要获得实例对象的锁或类对象的锁或指定对象的锁。说到底就是要先获得对象的监视器(即对象的锁)然后才能够进行相关操作。
Lock的使用离不开它的实现类AQS,而它的加锁并不是针对对象的,而是针对当前线程的,并且AQS中有一个原子类state来进行加锁次数的计数

悲观锁、乐观锁和分布式锁

悲观锁

即认为每一次数据操作都有可能发生并发问题,不加锁就一定会出问题,做操作之前直接将数据锁定,在本次操作结束之前其他人无法完成操作。

乐观锁

与悲观锁对立,认为每一次数据操作都不会有并发问题,只有在更新数据的时候会检查当前操作的数据是否还是和原有保持一致,一致则执行自己的更新,如果原有数据被修改则不执行数据更新。

什么是死锁

死锁产生的必要条件

1、互斥条件:至少有一个资源是被独占的,即在一段时间内只能被一个线程使用。
2、持有并等待条件:一个线程在持有至少一个资源的同时,又申请获取其他资源,并且该资源已被其他线程持有。
3、不可抢占条件:资源不能被强制性地从持有它的线程中抢占,只能由持有它的线程显式地释放。
4、循环等待条件:存在一个线程链,每个线程都在等待下一个线程所持有的资源。

解决和避免死锁

避免和解决死锁的常见策略包括:
1、避免循环等待:通过定义资源获取的顺序,使得所有线程都按照相同的顺序获取资源。
2、使用资源分配图:通过建立资源分配图,对资源的分配进行动态调整,避免出现环路。
3、设置超时:获取资源时设置超时,超时未获取到资源则放弃并释放已持有的资源,避免长时间等待。
4、使用锁的顺序:尽量按照固定的顺序获取锁,避免多个线程获取锁的顺序不一致而导致死锁。

mysql‘

数据库的三大范

第一范式

数据库中表的字段都是单一属性的,不可在分割。

第二范式

在第一范式上的基础上,所有的列完全依赖于主键列。

第三范式

在第二范式的基础上,数据表中的非主键列都和主键直接相关,不能间接相关。

索引是什么

是数据库管理中一个排序的数据结构,可以协助快速查询。

索引的优点和缺点

优点

1、创建索引可以大幅提高系统的性能,帮助用户提高查询速度;
2、通过索引的唯一性,可以保证数据库表中的每一行数据的唯一性;
3、可以加速表与表之间的链接
4、降低查询中分组和排序的时间

缺点

1、索引的存储需要占用磁盘空间
2、当数据的量非常巨大时,索引的创建和维护所耗费的时间也是相当大的
3、当每次执行CRU操作时,索引也需要动态维护,降低了数据的维护速度

索引的类型

1、主键索引:数据列不容许重复,不容许为NULL,一个表只有一个主键
2、唯一索引:数据列不容许重复,容许为NULL,一个表容许多列创建唯一索引
3、普通索引:基本的索引类型,没有唯一性的限制,容许为NULL值
4、全文索引:是目前搜索引擎使用的一种关键技术,对文本的内容进行分词、搜索。
5、覆盖索引:查询列他要被创建的索引覆盖,不必读取数据行
6、组合索引:多列值组成一个索引,用于组合搜索,效率大于索引合并

事务的四大特性

1、原子性
2、一致性
3、隔离性
4、持久性

为什么使用b+树、b树

b树

b树也成为b-树,他是一颗多路平衡查找树,

b+树

脏读、幻读、不可重复读

1、脏读:一个事务读到另一个事务未提交的更新数据。
2、幻读:一个事务执行两次查询,当第二次查询比第一次查询多出了一些数据行。
3、不可重复读:一个事务两次读取同一行数据,可是这两次读到的数据不一样的。

事务的隔离级别

1、读未提交:一个事务还没有提交时,它做的变更就能被别的事务看到。可能出现脏读
2、读提交:一个事务提交后,它做的变更才会被其他事务看到。可能出现不可重复读。
3、可重复读:一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。未提交变更对其他事务也是不可见的。可能出现幻读。
4、串行话:对于同一行记录,写会加“读锁”,当出现锁冲突时,后访问的事务需要等前一个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LMY~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值