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
 - 
缓存机制较弱
 


