Java 集合框架、事务与并发控制
Java 集合框架
主要集合类型及区别
-
List:有序集合,允许重复元素
ArrayList
:基于数组实现,查询效率高(O(1)),插入删除效率低(O(n))LinkedList
:基于链表实现,插入删除效率高(O(1)),查询效率低(O(n))
-
Set:不允许重复元素的集合
HashSet
:基于哈希表实现,操作时间复杂度接近 O(1)TreeSet
:基于红黑树实现,元素有序,操作时间复杂度 O(logn)
-
Map:键值对集合
HashMap
:基于哈希表实现,操作时间复杂度接近 O(1)TreeMap
:基于红黑树实现,键有序,操作时间复杂度 O(logn)
实现细节
-
ArrayList
- 初始大小:10
- 扩容策略:容量不足时扩容为原来的1.5倍
-
HashMap
- 初始大小:16
- 扩容策略:当元素数量超过容量×加载因子(默认0.75)时,扩容为原来的2倍
MySQL 事务保证
ACID 特性
- 原子性:通过 undo 日志实现,保证事务要么全部执行,要么全部回滚
- 一致性:通过数据库约束和业务逻辑保证数据一致性
- 隔离性:通过隔离级别和 MVCC 实现并发控制
- 持久性:通过 redo 日志和双写缓冲保证数据持久化
事务关键要素
- 开始事务(BEGIN/START TRANSACTION)
- 事务操作(INSERT/UPDATE/DELETE)
- 事务提交(COMMIT)
- 事务回滚(ROLLBACK)
数据库优化方法
硬件层面优化
- 使用 SSD 存储设备
- 增加服务器内存
数据库配置优化
- 调整连接数等参数
- 选择合适的存储引擎(InnoDB/MyISAM)
表结构优化
- 合理设计表结构,减少冗余
- 选择合适的数据类型
查询优化
- 使用 EXPLAIN 分析查询计划
- 避免复杂查询,优化 LIMIT 子句
索引使用
- 索引类型:B-Tree、哈希、全文索引
- 创建原则:
- 选择常用查询字段
- 避免过多索引
- 考虑索引长度
- 索引维护:
- 定期重建索引
- 监控索引使用情况
进程与线程
关系区别
- 进程:资源分配的基本单位,拥有独立内存空间
- 线程:进程内的执行单元,共享进程资源