近期笔试面试问题
2024-03-20
==和equals的区别
==:对于==比较的是值是否相等
如果作用于基本数据类型的变量,则直接比较其存储的值是否相等,
如果作用于引用类型的变量,则比较的是所指向的对象的地址是否相等。
其实==比较的不管是基本数据类型,还是引用数据类型的变量,比较的都是值,只是引用类型变量存的值是对象的地址
equals: 比较的是是否是同一个对象
首先,equals()方法不能作用于基本数据类型的变量,
另外,equals()方法存在于Object类中,而Object类是所有类的直接或间接父类,所以说所有类中的equals()方法都继承自Object类,在没有重写equals()方法的类中,调用equals()方法其实和使用==的效果一样,也是比较的是引用类型的变量所指向的对象的地址,不过,Java提供的类中,有些类都重写了equals()方法,重写后的equals()方法一般都是比较两个对象的值,比如String类。
Object类equals()方法源码:
1 | public boolean equals(Object obj) { |
String类equals()方法源码:
1 | public boolean equals(Object anObject) { |
String和StringBuilder和StringBuffer的区别
String | StringBuffer | StringBuilder | |
---|---|---|---|
执行速度 | 最差 | 其次 | 最高 |
线程安全 | 线程安全 | 线程安全 | 线程不安全 |
使用场景 | 少量字符串操作 | 多线程环境下的大量操作 | 单线程环境下的大量操作 |
- String
是不可变的字符串类,每次对其进行修改都会创建一个新的对象。
- StringBuffer 和 StringBuilder
是可变的字符串类,可以高效地进行字符串操作。
- StringBuffer 是线程安全的,适合多线程环境下使用;StringBuilder 不是线程安全的,适合单线程环境下使用。
ArrayList和LinkedList的区别
ArrayList的实现是基于数组,LinkedList的实现是基于双向链表。
对于随机访问,ArrayList优于LinkedList
对于插入和删除操作,LinkedList优于ArrayList
LinkedList比ArrayList更占内存,因为LinkedList的节点除了存储数据,还存储了两个引用,一个指向前一个元素,一个指向后一个元素。
for(int i = 0; i < list.size(); i++)和for(int i = 0, n = list.size(); i < n; i++)的区别
SpringBoot配置文件加载顺序
如果同时存在 application.properties | application.yml (.yaml) , properties > yml > yaml
同一目录下存在:application.properties 和 application.yml 时,application.properties 优先级 > application.yml。也就是说,两者同时存在时 properties 文件会覆盖 yml 文件。
Spring Boot 的配置文件可以放在 classpath 下和与当前项目目录下,不过不同目录下优先级也不同。
以 properties 文件为例,我们先分别放置到不同目录下:如图测试后,得出结论为,优先级为 C>D>A>B。
总结为:当前项目路径 config 目录下 (file:/config)> 当前项目路径 (file:/)> 类路径 config 目录下 (classpath:/config)> 类路径下 (classpath:/)。
2024-3-24
HashMap的默认初始长度是多少
HashMap的默认初始长度是16
InnoDB 所使用的索引的数据结构是什么
B+树
SpringMVC执行流程
Java IO的字节流和字符流
字节流一般用来处理图像、视频、音频、PPT、Word等类型的文件。
字符流一般用于处理纯文本类型的文件,如TXT文件等,但不能处理图像视频等非文本文件。
用一句话说就是:字节流可以处理一切文件,而字符流只能处理纯文本文件。