裕日软件公司面试题总结
1、如何给5个Dog对象排序。
1、在Dog
类中实现Comparable
接口,并重写compareTo
方法。compareTo
方法用于定义Dog
对象之间的比较规则。
2、然后,你可以使用Arrays.sort
方法或Collections.sort
方法来对Dog
对象的数组或集合进行排序。(举例在具体的场景中如何使用)
2、JVM的调优策略
(八股文,自己上网查)
3、Set集合是怎么实现去除重复元素的
- 当你向Set集合中添加元素时,它会首先调用元素的hashCode()方法获取元素的哈希值。
- Set集合会根据元素的哈希值确定元素在内部数据结构中的存储位置。
- 如果这个位置上已经存在元素,Set集合会调用该元素的equals()方法与新元素进行比较。
- 如果equals()方法返回true,表示新元素与已存在的元素相等,Set集合会认为该元素已经存在于集合中,不进行添加操作。
- 如果equals()方法返回false,表示新元素与已存在的元素不相等,Set集合会将新元素添加到集合中。
4、谈谈数据库的乐观锁和悲观锁
乐观锁和悲观锁是数据库并发控制中常用的两种策略,用于处理多个事务同时访问和修改同一个数据时的并发冲突问题。
悲观锁(Pessimistic Locking):
悲观锁假设在整个数据访问过程中会发生冲突,因此在事务访问数据时会对数据进行加锁,阻止其他事务对数据的修改。悲观锁通常使用数据库提供的锁机制(如行级锁、表级锁)来实现。
- 当一个事务需要访问某个数据时,它会先获取相应的锁,其他事务无法修改该数据直到锁释放。
- 悲观锁适用于并发冲突较为频繁的场景,适合处理长事务。
乐观锁(Optimistic Locking):
乐观锁假设在整个数据访问过程中不会发生冲突,因此事务在提交之前不会显式加锁。相反,它使用一种乐观的机制来处理并发冲突。
- 在乐观锁中,每个数据记录通常会包含一个版本号或时间戳字段。
- 当事务提交时,系统会检查数据的版本号或时间戳是否发生变化,如果没有变化,则提交成功;如果发生变化,则说明数据被其他事务修改,提交失败。
- 在提交失败时,可以选择回滚事务或重试操作。
5、spring中有哪些事务管理,你在项目中常用的事务管理
- 编程式事务管理:
编程式事务管理是通过编写代码来显式地管理事务。在代码中使用事务管理器(TransactionManager)手动开启、提交或回滚事务,并定义事务的边界。这种方式灵活性较高,但需要手动处理事务的开启、提交和回滚,代码相对复杂。
- 声明式事务管理:
声明式事务管理是通过在方法或类级别上使用注解或XML配置的方式来声明事务的属性。Spring框架会根据声明的事务属性自动管理事务的开启、提交和回滚。常用的声明式事务管理方式有两种:
- 基于注解的事务管理:使用注解(如
@Transactional
)在方法或类级别上声明事务属性。
- 基于XML配置的事务管理:在XML配置文件中使用
<tx:advice>
和<tx:attributes>
等元素声明事务属性。
- JTA事务管理:
JTA(Java Transaction API)是Java平台的事务管理标准,允许在分布式环境下进行事务管理。Spring框架通过JtaTransactionManager
支持JTA事务管理。JTA事务管理适用于需要跨多个资源(如多个数据库)进行事务控制的场景。