1. 自我介绍
(可根据个人经历填写)
2. Java 的基本类型?String 算不算?
- 基本数据类型(8 种):
byte、short、int、long``float、double``char、boolean - String 是引用数据类型,不是基本类型
3. 为什么使用 String 时可以直接 String s = "abc"?
这是 Java 为简化开发提供的语法糖,JVM 会自动把双引号字符串识别为 String 对象,并保存在字符串常量池中。
4. 为什么说 String 是引用类型,不是基本类型?
- 基本类型直接存储在栈内存
String对象实例存储在堆内存,栈中只保存对象的引用地址
5. String、StringBuilder、StringBuffer 区别?
- String:不可变字符序列,每次修改生成新对象,修改性能差
- StringBuffer:可变字符序列,线程安全(带
synchronized),性能较差 - StringBuilder:可变字符序列,线程不安全,性能最好
使用场景:
- 少量操作:
String - 多线程大量操作:
StringBuffer - 单线程大量操作:
StringBuilder
6. String 可以被继承吗?可以被重载 / 重写吗?
String被final修饰,不能被继承- 可以重载
- 不能重写(因为不能被继承)
7. 重写、重载、继承是什么?
- 重写:子类继承父类后,重新实现父类方法;方法名 + 参数列表必须相同
- 重载:同一个类中,方法名相同,参数列表(类型 / 个数 / 顺序)不同
- 继承:子类复用父类的属性和方法,实现代码复用
8. B 继承 A,B 中能调用 A 的 methodA 吗?怎么调用?
methodA是private:不能调用public/protected:可以直接调用- B 重写了 methodA,想调用父类原方法:
super.methodA()
9. 常用集合有哪些?
两大类:Collection 系列、Map 系列
Collection
-
List(有序可重复)
ArrayList:底层数组,查询快、增删慢LinkedList:底层双向链表,查询慢、增删快
-
Set(无序不重复)
HashSet:无序,基于 HashMapLinkedHashSet:保持插入顺序TreeSet:自然排序
-
Queue(队列)
ArrayDeque:数组双端队列ConcurrentLinkedQueue:无锁线程安全队列DelayQueue:延迟队列,用于定时任务
Map(键值对)
HashMap:数组 + 链表 / 红黑树,线程不安全,性能高ConcurrentHashMap:分段锁 + CAS,高并发安全HashTable:全方法synchronized,线程安全但性能差,已淘汰
10. Arrays.asList(数组) 后,修改数组内容,集合会变吗?
会变。集合底层直接引用原数组,数组内容修改,集合内容同步改变。
11. 集合 list.toArray() 后,修改集合,数组会变吗?
不会变。toArray() 会新建数组并复制内容,和原集合脱离关系,互不影响。
12. int 1 + int 2 + String 3 = ?
- 先算:
1 + 2 = 3 - 再算:
3 + "3"触发字符串拼接 - 结果: "33"
13. 红黑树的特性?
- 每个节点只能是 红色或黑色
- 根节点是黑色
- 每个叶子节点(NIL 空节点)是黑色
- 不能有两个连续的红色节点
- 任意节点到其所有叶子节点的路径,黑色节点数量相同(黑高相同)
14. Set 是有序的吗?
HashSet:无序LinkedHashSet:保持插入顺序TreeSet:自然排序整体 Set 不保证有序,只有特定实现类有序。
15. Hashtable 和 HashMap 区别?
HashMap:线程不安全,性能高,允许 key/value 为 nullHashtable:线程安全(全方法 synchronized),性能差,已淘汰
16. HashMap 和 Hashtable 扩容区别?
-
HashMap
- 默认容量:16
- 扩容因子:0.75
- 扩容机制:达到容量 × 因子 → 扩容为原来 2 倍
-
Hashtable
- 默认容量:11
- 扩容机制:扩容为原来 2 倍 + 1
17. 什么是哈希算法?
将任意长度的输入,通过散列函数计算出固定长度的散列值。应用:
- HashMap 寻址
- MD5 加密
- 文件完整性校验
18. HashMap 和 Hashtable 的 key/value 可以为 null 吗?
Hashtable:key 和 value 都不能为 nullHashMap:最多一个 key 为 null,value 可以多个为 null
19. MyBatis-Plus 条件构造器?
核心是 Wrapper 及其子类:
QueryWrapper:查询条件UpdateWrapper:更新条件LambdaQueryWrapper:Lambda 写法,防字段写错作用:不写 SQL 即可构建复杂WHERE条件。
20. 前后端分页查询,后端怎么接收?
- 前端:GET 请求,
pageNum、pageSize拼在 URL - Controller 层:使用
@RequestParam接收分页参数
21. MyBatis Mapper 层接收参数用什么注解?
@Param("参数名")
22. MyBatis XML 用什么接收参数?
#{}:预编译占位符,防 SQL 注入,推荐${}:直接字符串拼接,有注入风险,不推荐
23. SQL 中 limit 怎么用?
用于分页,放在 SQL 最后:
sql
limit 起始下标, 条数
示例:limit 0,10 → 第 1~10 条数据
24. 根据姓氏模糊查询学生表(SQL + XML)
SQL:
sql
select * from student where name like '张%';
XML:
xml
<select id="findBySurname" resultType="Student">
select * from student where name like concat(#{lastName},'%')
</select>
25. MyBatis-Plus 模糊查询怎么写?
java
运行
queryWrapper.like("name", "张");
26. 查询所有人的所有成绩(学生表 + 成绩表)
sql
select s.name, c.score
from student s
join score c on s.id = c.student_id;
27. SQL 常用关键字?多表查询用什么?
关键字:select、from、where、group by、having、order by、limit
多表查询:
join(内连接、左连接、右连接)- 或在
where中写关联条件
28. 查询语文及格的同学?求语文平均分?
查询及格:
sql
select s.name
from student s
join score c on s.id = c.student_id
where c.subject = '语文' and c.score >= 60
求平均分:
sql
select avg(c.score) from score c where c.subject = '语文';
29. Spring 事务?
使用注解:@Transactional作用:保证一组数据库操作要么全部成功,要么全部回滚。包含:传播行为、隔离级别(如读已提交、可重复读)。
30. Spring 事务失效场景?
- 方法不是
public - 异常被
try-catch吃掉,未抛出 - 抛出非
RuntimeException/Error,且未配置rollbackFor - 同类内部方法调用(
this.method()),未走代理 - 数据库引擎不支持事务(如 MyISAM)
31. final、finally、finalize 区别?
final:关键字,修饰类不可继承、方法不可重写、变量不可变finally:异常处理,try-catch-finally中一定会执行finalize:Object 方法,GC 回收前调用(已废弃)
32. final 修饰类的作用?
类成为最终类,不能被继承(如 String)。
33. final 和 static 区别?
final:限制不可变 / 不可继承static:属于类,全局共享一份,优先于对象加载
34. static 关键字特点?
- 属于类,不属于对象
- 内存中只有一份,所有对象共享
- 可直接用
类名.方法/变量调用 - 类加载时初始化,优先于对象
- 静态方法不能直接访问非静态成员
35. final 修饰的类可以被事务回滚吗?
可以回滚。final 不影响 Spring 事务,只要方法抛出异常、满足回滚规则,就会回滚。