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 task)
:提交有返回值的任务,返回Future
-
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
标签:、
、
40. Shiro认证授权流程
认证:
-
用户提交凭证
-
Realm校验凭证 → 生成Subject
授权:
-
Subject调用权限检查方法
-
Realm查询权限数据并验证
41. BeanFactory与ApplicationContext区别
BeanFactory:
-
基础IOC容器
-
懒加载
ApplicationContext:
-
扩展更多企业级功能
-
预加载
42. Spring Bean生命周期
-
实例化
-
属性赋值
-
初始化
-
使用
-
销毁
43. Spring Bean作用域
44. Spring框架好处
-
解耦
-
AOP支持
-
简化开发
-
模块化
45. Spring中的设计模式
-
工厂模式:
BeanFactory
-
单例模式:默认Bean作用域
-
代理模式:AOP动态代理
-
模板方法:
JdbcTemplate
-
观察者模式:事件监听
46. Spring保证Controller并发安全
默认情况:Controller是单例,成员变量共享可能导致线程不安全
解决方案:
-
避免使用成员变量
-
使用
@Scope(\"prototype\")
-
对共享变量加锁
47. (同44题)
48. Spring注入Java集合
XML配置:
xml
item1
注解配置:
java
@Autowiredprivate List list;
49. Spring事务管理类型
-
编程式事务
-
声明式事务(
@Transactional
)
50. Spring事务管理优点
-
统一API
-
声明式简化
-
传播机制支持
51. Spring MVC主要组件
-
DispatcherServlet
-
HandlerMapping
-
Controller
-
ViewResolver
52. SpringMVC与AJAX交互
后端返回JSON:
java
@GetMapping(\"/data\")public Map getData() { return Map.of(\"key\", \"value\");}
53. MyBatis中#和$区别(同38题)
54. MyBatis缓存机制
一级缓存:
-
SqlSession级别
-
执行update、commit、close操作时失效
二级缓存:
-
Mapper级别
-
跨SqlSession共享
55. SpringMVC与Struts2区别
56. MyBatis工作流程
-
加载配置
-
创建
SqlSessionFactory
-
执行SQL
-
返回结果
57. MyBatis接口绑定好处
-
类型安全
-
无需手动写DAO实现类
58. MyBatis编程步骤
-
定义Mapper接口
-
编写XML/SQL映射文件
-
获取代理对象
-
调用接口方法
59. JDBC不足与MyBatis解决方案
60. MyBatis优缺点
优点:
-
灵活
-
轻量级
缺点:
-
需手动编写SQL
-
缓存机制较弱