> 技术文档 > 60个Java与Spring核心知识点详解

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类的常用函数

  1. length()

  2. charAt(int index)

  3. substring(int begin, int end)

  4. equals(Object obj)

  5. indexOf(String str)

  6. toLowerCase()/toUpperCase()

  7. trim()

  8. replace(char old, char new)

  9. split(String regex)

  10. concat(String str)

7. String、StringBuffer、StringBuilder区别

不可变性

  • String不可变(线程安全但效率低)

  • StringBuffer可变(线程安全,同步)

  • StringBuilder可变(非线程安全,高效)

Buffer类原理

  • 内部使用字符数组(如char[] value)动态扩容

  • 避免频繁内存分配

8. String的不可变性

不可变

  • 底层final char[]数组引用和内容不可变

  • 任何修改都会生成新对象

  • 示例:String s = \"a\"; s += \"b\";会创建新对象

9. HTTP协议字段

  1. Host:指定服务器域名

  2. Content-Type:请求/响应的数据类型(如application/json)

  3. User-Agent:客户端标识(如浏览器类型)

10. Java异常类

Exception(可检查异常):

  • IOException(文件操作错误)

  • SQLException(数据库错误)

RuntimeException(非检查异常):

  • NullPointerException

  • ArrayIndexOutOfBoundsException

Error(系统错误):

  • OutOfMemoryError

  • StackOverflowError

11. Java反射获取类信息的方式

  1. Class.forName(\"全限定类名\")

  2. 对象.getClass()

  3. 类名.class

12. Java代理

方法

  • 静态代理(手动编写代理类)

  • 动态代理(JDK Proxy、CGLib)

场景

  • AOP(如Spring事务管理)

  • RPC框架(远程方法调用封装)

13. equals()方法

作用:比较对象内容是否相等(默认比较地址,需重写)

重写注意事项

  • 需同时重写hashCode()(确保哈希一致性)

  • 满足自反性、对称性、传递性、一致性

14. Java参数传递

按值传递

  • 基本类型传递值副本

  • 引用类型传递引用的副本(即\"按共享对象传递\")

引用传递语言:C++(&)、C#(ref)

15. Java类初始化顺序(含继承)

  1. 父类静态代码块 → 子类静态代码块

  2. 父类实例代码块 → 父类构造方法

  3. 子类实例代码块 → 子类构造方法

16. 本地方法栈作用

存储JVM调用本地(Native)方法(如C/C++库)的栈帧信息

17. 双亲委派机制

机制:类加载器优先委派父类加载器加载,避免重复加载和核心类被篡改

作用:保证安全性(如防止自定义java.lang.String)

18. 重写与重载的区别

重写:子类覆盖父类方法(相同签名)

重载:同一类中方法名相同、参数不同

19. 子类构造方法调用父类构造方法

规则

  • 必须显式或隐式调用super()

  • 需要放在第一行

  • this不能重复

20. 子类实例初始化是否触发父类实例初始化

:子类实例化前会先初始化父类(包括代码块和构造方法)

21. instanceof关键字

作用:判断对象是否属于某个类(或其子类、接口实现类)

语法对象 instanceof 类/接口

注意

  • 对象为null时返回false

  • 用于多态场景下的类型安全检查

22. 类型转换

基本类型转换

  • 可能丢失精度(如double转int会截断小数部分)

引用类型转换

  • 需确保对象实际类型与目标类型兼容

  • 建议先用instanceof检查类型

23. 重入锁

实现类ReentrantLocksynchronized(隐式重入)

作用

  • 允许线程多次获取同一把锁

  • 防止线程因重复获取锁而阻塞自己

24. 指令重排序

优点:提高CPU流水线效率,优化程序性能

原因

  • 编译器优化

  • CPU乱序执行

  • 内存系统重排序

25. Arrays.sort()原理

基本类型数组:使用双轴快速排序

对象数组:使用归并排序(TimSort)

特点:对小数组(长度<47)使用插入排序优化

26. 堆排序复杂度

时间复杂度

  • 建堆:O(n)

  • 排序:O(n log n)

  • 总复杂度:O(n log n)

空间复杂度:O(1)(原地排序)

27. 哈夫曼编码存储比特数计算

步骤

  1. 统计字符频率

  2. 构建哈夫曼树

  3. 计算总比特数:∑(字符频率 × 编码长度)

28. CPU高速缓存

优点

  • 减少访问内存延迟

  • 提高数据局部性

缺点

  • 缓存一致性问题

  • 缓存污染

29. 线程安全的类

  1. StringBuffer:同步方法保证线程安全

  2. ConcurrentHashMap:分段锁+CAS实现高效并发

  3. 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处理流程

流程

  1. 用户请求 → DispatcherServlet

  2. 调用HandlerMapping找到Controller

  3. 执行Controller → 返回ModelAndView

  4. 视图渲染

优势:分层清晰,支持RESTful

37. Spring事务处理

方式

  • 声明式事务(@Transactional)

  • 编程式事务(TransactionTemplate)

缺点:声明式事务可能因异常处理不当导致事务不生效

38. MyBatis中#与$区别

#{}:预编译(防SQL注入),自动加引号

${}:字符串替换(直接拼SQL),适用于动态表名

39. MyBatis动态SQL

解决的问题:根据条件拼接SQL

标签

40. Shiro认证授权流程

认证

  1. 用户提交凭证

  2. Realm校验凭证 → 生成Subject

授权

  1. Subject调用权限检查方法

  2. Realm查询权限数据并验证

41. BeanFactory与ApplicationContext区别

BeanFactory

  • 基础IOC容器

  • 懒加载

ApplicationContext

  • 扩展更多企业级功能

  • 预加载

42. Spring Bean生命周期

  1. 实例化

  2. 属性赋值

  3. 初始化

  4. 使用

  5. 销毁

43. Spring Bean作用域

作用域 描述 singleton 默认,每个容器一个实例 prototype 每次请求创建新实例 request 每个HTTP请求一个实例 session 每个用户会话一个实例 application 整个Web应用共享

44. Spring框架好处

  • 解耦

  • AOP支持

  • 简化开发

  • 模块化

45. Spring中的设计模式

  1. 工厂模式:BeanFactory

  2. 单例模式:默认Bean作用域

  3. 代理模式:AOP动态代理

  4. 模板方法:JdbcTemplate

  5. 观察者模式:事件监听

46. Spring保证Controller并发安全

默认情况:Controller是单例,成员变量共享可能导致线程不安全

解决方案

  1. 避免使用成员变量

  2. 使用@Scope(\"prototype\")

  3. 对共享变量加锁

47. (同44题)

48. Spring注入Java集合

XML配置

xml

  item1 

注解配置

java

@Autowiredprivate List list;

49. Spring事务管理类型

  • 编程式事务

  • 声明式事务(@Transactional)

50. Spring事务管理优点

  • 统一API

  • 声明式简化

  • 传播机制支持

51. Spring MVC主要组件

  1. DispatcherServlet

  2. HandlerMapping

  3. Controller

  4. 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区别

特性 SpringMVC Struts2 设计思想 基于方法拦截 基于类拦截 性能 更高 较低 配置 注解驱动 XML配置

56. MyBatis工作流程

  1. 加载配置

  2. 创建SqlSessionFactory

  3. 执行SQL

  4. 返回结果

57. MyBatis接口绑定好处

  • 类型安全

  • 无需手动写DAO实现类

58. MyBatis编程步骤

  1. 定义Mapper接口

  2. 编写XML/SQL映射文件

  3. 获取代理对象

  4. 调用接口方法

59. JDBC不足与MyBatis解决方案

JDBC问题 MyBatis解决方案 硬编码SQL SQL与Java代码分离 手动处理结果集 自动映射对象 频繁创建连接 连接池集成

60. MyBatis优缺点

优点

  • 灵活

  • 轻量级

缺点

  • 需手动编写SQL

  • 缓存机制较弱