当前位置: 首页 > news >正文

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

  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

标签<if><where><foreach>

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

<property name="list"><list><value>item1</value></list>
</property>

注解配置

java

@Autowired
private List<String> 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<String, String> getData() {return Map.of("key", "value");
}

53. MyBatis中#和$区别(同38题)

54. MyBatis缓存机制

一级缓存

  • SqlSession级别

  • 执行update、commit、close操作时失效

二级缓存

  • Mapper级别

  • 跨SqlSession共享

55. SpringMVC与Struts2区别

特性SpringMVCStruts2
设计思想基于方法拦截基于类拦截
性能更高较低
配置注解驱动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解决方案
硬编码SQLSQL与Java代码分离
手动处理结果集自动映射对象
频繁创建连接连接池集成

60. MyBatis优缺点

优点

  • 灵活

  • 轻量级

缺点

  • 需手动编写SQL

  • 缓存机制较弱

http://www.dtcms.com/a/298757.html

相关文章:

  • [Java恶补day46] 整理模板·考点九【二叉树最近公共祖先】
  • 跨境电商流量密码:自养号测评采购技术,低成本撬动高转化
  • agent含义、起源、定义、分类、应用场景以及未来趋势
  • 机器学习入门
  • 从 “能打” 到 “顶尖”:DeepSeek-V3 后训练拆解,微调 + 强化学习如何让大模型脱胎换骨?
  • html+js列表分页功能封装
  • Kubernetes服务发布进阶
  • GPT - 5被曝将在8月初发布!并同步推出mini、nano版
  • 如何评估一个RWA项目的可信度?关键指标解析
  • dart使用
  • 在DolphinScheduler执行Python问题小记
  • 关于linux运维 出现高频的模块认知
  • 基于多种主题分析、关键词提取算法的设计与实现【TF-IDF算法、LDA、NMF分解、BERT主题模型】
  • Nginx 限流
  • Model Control Protocol 三层架构设计,三种传输方式,完成MCP项目构建实现工具调试,多维度评价指标检测多工具多资源调用的鲁棒性和稳健性
  • MyBatisPlus(一)简介与基本CRUD
  • Logcat日志分析
  • SpringBoot 获取请求参数的常用注解
  • 自由学习记录(73)
  • 地铁逃生
  • 注意力机制的使用说明01
  • RNN模型数学推导过程(笔记)
  • 散列表(哈希表)
  • SQL基础⑮ | 触发器
  • 亚德诺半导体AD8539ARZ-REEL7 超低功耗轨到轨运算放大器,自动归零技术,专为可穿戴设备设计!
  • Python 程序设计讲义(20):选择结构程序设计——双分支结构的简化表示(三元运算符)
  • 【linux】Haproxy七层代理
  • 电子基石:硬件工程师的器件手册 (八) - 栅极驱动IC:功率器件的神经中枢
  • 【自动化运维神器Ansible】Ansible常用模块之Copy模块详解
  • 程序代码篇---卡尔曼滤波与PID的组合应用