面试题.04

1. hashmap插入键是类的时候有什么问题?

如果未重写hashcode方法和equals方法,会导致两个完全相同的对象在hashmap中会被视为不同的key,因为hashcode方法和equals方法在Object类中的默认实现是通过地址的形式生成/比较的,所有会导致任何两个对象都会被视为两个不同的对象。

2. maven的依赖优先级原则

“最近优先”原则,在依赖树中,如果多个版本的同一依赖存在,Maven 会使用离当前项目最近的版本。

例如现在有个项目A , 项目A依赖项目B和jar包x,同时项目B也依赖jar包x,此时项目A可以选择的x有两条路径:

A -- B -- x

A -- x

显然下面的路径更短,所以会使用下面的x

3. 如果HashMap桶中只有一个元素,会走equals判断吗

会,假设使用了put方法,找到对应哈希桶时发现只有一个元素,但这个元素与put的key可能只是hashcode相同但并不是同一个对象,所以需要使用equals方法判断是否是同一个对象 

4. 数据库的四个特性

  • 原子性 (Atomicity):事务中的操作要么全部成功,要么全部失败。即使在系统崩溃的情况下,事务也不会只完成部分操作。
  • 一致性 (Consistency):事务的执行必须使数据库从一个一致的状态变为另一个一致的状态。数据在事务执行前后的完整性约束必须得到维护。
  • 隔离性 (Isolation):事务的执行应当独立于其他事务。一个事务的执行不应受其他事务的干扰,直到该事务完成并提交。常见的隔离级别包括读未提交、读已提交、可重复读和串行化。
  • 持久性 (Durability):一旦事务被提交,其对数据库的修改将永久保存,即使系统崩溃也不会丢失。

5. Springboot的启动流程

  1. 加载启动类:当springboot项目启动时会在当前工作目录下寻找@SpringBootApplication注解标识的类,并把这个类作为应用程序的入口点。如果找不到这样的主类,则会打印错误信息并退出。
  2. 加载配置文件:springboot会自动扫描resource目录,并加载其中的application.properties或application.yml等配置文件。这些配置文件中包含了应用程序的各种参数,例如数据库连接信息、日志级别等等。
  3. 初始化上下文:创建SpringApplication对象,并调用SpringApplication的run方法初始化ApplicationContext对象。这个过程会读取配置文件中的参数,并将它们转换成Environment对象中的属性。同时还会扫描当前项目中所有的Bean并注册到ApplicationContext中
  4. 启动Web服务器:根据配置文件中的信息自动创建Tomcat等Web容器,并将Spring容器注册到Web容器中,使得SpringBoot应用程序可以直接以Web应用程序的形式运行。
  5. 启动应用程序:根据创建好的Spring容器以及Web服务器,启动响应线程进行服务处理
  6. 监听应用程序的状态:SpringBoot会监听应用程序的状态,并根据需要进行相应的操作。例如,当应用程序退出时,它会打印出详细的日志信息,并将应用程序的上下文环境恢复到初始状态。

6. 介绍Java内存模型JMM

jmm是一种抽象的概念,用于定义多线程程序如何与内存进行交互

  • 主内存:所有变量都存储在主内存中,主内存是共享的。
  • 工作内存:每个线程都有自己的工作内存,工作内存中保存了主内存中变量的副本。线程对变量的所有操作(读取、写入)都在工作内存中进行,最后再将结果同步回主内存。

工作内存指的是CPU的寄存器和缓存,比起内存来说,访问速度是快得多的,引入工作内存可以减少内存访问延迟,提高程序的执行效率。但同时也引入了内存可见性问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Ting-yu

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

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

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

打赏作者

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

抵扣说明:

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

余额充值