60个Java与Spring核心知识点详解
1. 计算机网络传输层协议
TCP协议:
特点:面向连接、可靠传输、流量控制、拥塞控制
适用场景:文件传输(FTP)、网页浏览(HTTP)、邮件(SMTP)等需要可靠性的场景
UDP协议:
特点:无连接、不可靠、低延迟、高效率
适用场景:视频流(RTP)、DNS查询、在线游戏等实时性要求高的场景
2. 多线程使用场景与线程数设置
使用场景:
高并发请求处理(如Web服务器)
异步任务(如日志写入、消息队列消费)
计算密集型任务(如并行计算)
线程数设置:
CPU密集型:线程数 ≈ CPU核心数
IO密集型:线程数 ≈ CPU核心数 × (1 + 平均IO等待时间/CPU计算时间)
判断标准:
CPU利用率、响应时间、吞吐量、系统资源占用
3. 线程池的提交方式
execute(Runnable task)
:提交无返回值的任务submit(Callable<T> task)
:提交有返回值的任务,返回Future<T>
invokeAll()
/invokeAny()
:批量提交任务并等待结果
4. 锁的实现原理
悲观锁(如synchronized):
直接加锁,认为并发冲突概率高
通过操作系统互斥量(Mutex)或JVM的Monitor实现
乐观锁(如CAS):
通过版本号或CAS(Compare-And-Swap)原子操作实现
适合低冲突场景
AQS(AbstractQueuedSynchronizer):
Java并发包的底层实现
通过CLH队列管理线程阻塞和唤醒
5. TCP拥塞控制
作用:防止网络过载,通过动态调整发送速率避免拥塞崩溃
机制:
慢启动:初始阶段指数增长拥塞窗口(cwnd)
拥塞避免:线性增长cwnd,避免过快
快速重传/恢复:检测丢包后快速调整
6. String类的常用函数
length()
charAt(int index)
substring(int begin, int end)
equals(Object obj)
indexOf(String str)
toLowerCase()
/toUpperCase()
trim()
replace(char old, char new)
split(String regex)
concat(String str)
7. String、StringBuffer、StringBuilder区别
不可变性:
String不可变(线程安全但效率低)
StringBuffer可变(线程安全,同步)
StringBuilder可变(非线程安全,高效)
Buffer类原理:
内部使用字符数组(如
char[] value
)动态扩容避免频繁内存分配
8. String的不可变性
不可变:
底层final char[]数组引用和内容不可变
任何修改都会生成新对象
示例:
String s = "a"; s += "b";
会创建新对象
9. HTTP协议字段
Host
:指定服务器域名Content-Type
:请求/响应的数据类型(如application/json)User-Agent
:客户端标识(如浏览器类型)
10. Java异常类
Exception(可检查异常):
IOException
(文件操作错误)SQLException
(数据库错误)
RuntimeException(非检查异常):
NullPointerException
ArrayIndexOutOfBoundsException
Error(系统错误):
OutOfMemoryError
StackOverflowError
11. Java反射获取类信息的方式
Class.forName("全限定类名")
对象
.getClass()
类名
.class
12. Java代理
方法:
静态代理(手动编写代理类)
动态代理(JDK Proxy、CGLib)
场景:
AOP(如Spring事务管理)
RPC框架(远程方法调用封装)
13. equals()方法
作用:比较对象内容是否相等(默认比较地址,需重写)
重写注意事项:
需同时重写
hashCode()
(确保哈希一致性)满足自反性、对称性、传递性、一致性
14. Java参数传递
按值传递:
基本类型传递值副本
引用类型传递引用的副本(即"按共享对象传递")
引用传递语言:C++(&)、C#(ref)
15. Java类初始化顺序(含继承)
父类静态代码块 → 子类静态代码块
父类实例代码块 → 父类构造方法
子类实例代码块 → 子类构造方法
16. 本地方法栈作用
存储JVM调用本地(Native)方法(如C/C++库)的栈帧信息
17. 双亲委派机制
机制:类加载器优先委派父类加载器加载,避免重复加载和核心类被篡改
作用:保证安全性(如防止自定义java.lang.String
)
18. 重写与重载的区别
重写:子类覆盖父类方法(相同签名)
重载:同一类中方法名相同、参数不同
19. 子类构造方法调用父类构造方法
规则:
必须显式或隐式调用
super()
需要放在第一行
和
this
不能重复
20. 子类实例初始化是否触发父类实例初始化
是:子类实例化前会先初始化父类(包括代码块和构造方法)
21. instanceof关键字
作用:判断对象是否属于某个类(或其子类、接口实现类)
语法:对象 instanceof 类/接口
注意:
对象为null时返回false
用于多态场景下的类型安全检查
22. 类型转换
基本类型转换:
可能丢失精度(如double转int会截断小数部分)
引用类型转换:
需确保对象实际类型与目标类型兼容
建议先用
instanceof
检查类型
23. 重入锁
实现类:ReentrantLock
、synchronized
(隐式重入)
作用:
允许线程多次获取同一把锁
防止线程因重复获取锁而阻塞自己
24. 指令重排序
优点:提高CPU流水线效率,优化程序性能
原因:
编译器优化
CPU乱序执行
内存系统重排序
25. Arrays.sort()原理
基本类型数组:使用双轴快速排序
对象数组:使用归并排序(TimSort)
特点:对小数组(长度<47)使用插入排序优化
26. 堆排序复杂度
时间复杂度:
建堆:O(n)
排序:O(n log n)
总复杂度:O(n log n)
空间复杂度:O(1)(原地排序)
27. 哈夫曼编码存储比特数计算
步骤:
统计字符频率
构建哈夫曼树
计算总比特数:∑(字符频率 × 编码长度)
28. CPU高速缓存
优点:
减少访问内存延迟
提高数据局部性
缺点:
缓存一致性问题
缓存污染
29. 线程安全的类
StringBuffer
:同步方法保证线程安全ConcurrentHashMap
:分段锁+CAS实现高效并发Vector
(已过时):所有方法用synchronized
修饰
30. LRU算法
定义:Least Recently Used(最近最少使用)
实现:哈希表 + 双向链表
应用:缓存淘汰策略
31. Spring Bean容器与IOC容器
Spring Bean容器:管理Bean的生命周期
IOC容器:Bean容器的核心,负责控制反转
区别:
Bean容器是IOC容器的具体实现
IOC是设计思想,Bean容器是技术实现
32. Spring IOC理解
定义:控制反转,将对象创建和依赖管理交给Spring容器
核心:
解耦
配置化
33. Spring DI理解
定义:依赖注入,IOC的实现方式
方式:
构造器注入
Setter注入
字段注入
34. Spring注解配置
作用域:
java
@Scope("prototype") // 多例 @Scope("singleton") // 单例(默认)
延迟加载:
java
@Lazy // 首次访问时初始化Bean
35. Spring工厂构建Bean机制
机制:反射 + 动态代理
释放资源:
调用
@PreDestroy
方法实现
DisposableBean
接口
36. Spring MVC处理流程
流程:
用户请求 →
DispatcherServlet
调用
HandlerMapping
找到Controller执行Controller → 返回
ModelAndView
视图渲染
优势:分层清晰,支持RESTful
37. Spring事务处理
方式:
声明式事务(
@Transactional
)编程式事务(
TransactionTemplate
)
缺点:声明式事务可能因异常处理不当导致事务不生效
38. MyBatis中#与$区别
#{}
:预编译(防SQL注入),自动加引号
${}
:字符串替换(直接拼SQL),适用于动态表名
39. MyBatis动态SQL
解决的问题:根据条件拼接SQL
标签:<if>
、<where>
、<foreach>
40. Shiro认证授权流程
认证:
用户提交凭证
Realm校验凭证 → 生成Subject
授权:
Subject调用权限检查方法
Realm查询权限数据并验证
41. BeanFactory与ApplicationContext区别
BeanFactory:
基础IOC容器
懒加载
ApplicationContext:
扩展更多企业级功能
预加载
42. Spring Bean生命周期
实例化
属性赋值
初始化
使用
销毁
43. Spring Bean作用域
作用域 | 描述 |
---|---|
singleton | 默认,每个容器一个实例 |
prototype | 每次请求创建新实例 |
request | 每个HTTP请求一个实例 |
session | 每个用户会话一个实例 |
application | 整个Web应用共享 |
44. Spring框架好处
解耦
AOP支持
简化开发
模块化
45. Spring中的设计模式
工厂模式:
BeanFactory
单例模式:默认Bean作用域
代理模式:AOP动态代理
模板方法:
JdbcTemplate
观察者模式:事件监听
46. Spring保证Controller并发安全
默认情况:Controller是单例,成员变量共享可能导致线程不安全
解决方案:
避免使用成员变量
使用
@Scope("prototype")
对共享变量加锁
47. (同44题)
48. Spring注入Java集合
XML配置:
xml
<property name="list"><list><value>item1</value></list> </property>
注解配置:
java
@Autowired private List<String> list;
49. Spring事务管理类型
编程式事务
声明式事务(
@Transactional
)
50. Spring事务管理优点
统一API
声明式简化
传播机制支持
51. Spring MVC主要组件
DispatcherServlet
HandlerMapping
Controller
ViewResolver
52. SpringMVC与AJAX交互
后端返回JSON:
java
@GetMapping("/data") public Map<String, String> getData() {return Map.of("key", "value"); }
53. MyBatis中#和$区别(同38题)
54. MyBatis缓存机制
一级缓存:
SqlSession级别
执行update、commit、close操作时失效
二级缓存:
Mapper级别
跨SqlSession共享
55. SpringMVC与Struts2区别
特性 | SpringMVC | Struts2 |
---|---|---|
设计思想 | 基于方法拦截 | 基于类拦截 |
性能 | 更高 | 较低 |
配置 | 注解驱动 | XML配置 |
56. MyBatis工作流程
加载配置
创建
SqlSessionFactory
执行SQL
返回结果
57. MyBatis接口绑定好处
类型安全
无需手动写DAO实现类
58. MyBatis编程步骤
定义Mapper接口
编写XML/SQL映射文件
获取代理对象
调用接口方法
59. JDBC不足与MyBatis解决方案
JDBC问题 | MyBatis解决方案 |
---|---|
硬编码SQL | SQL与Java代码分离 |
手动处理结果集 | 自动映射对象 |
频繁创建连接 | 连接池集成 |
60. MyBatis优缺点
优点:
灵活
轻量级
缺点:
需手动编写SQL
缓存机制较弱