河南移动商城网站建设,如何构建一个网站,盐城市建设局网站设计备案资料,全国职工素质建设工程专题网站1. HashMap有了解吗
解答
HashMap是基于哈希表的Map接口实现#xff0c;使用数组链表/红黑树#xff08;JDK8#xff09;存储数据。通过hash(key)计算桶位置#xff0c;解决哈希冲突采用链地址法。当链表长度≥8且数组长度≥64时#xff0c;链表转为红黑树提升查询效率使用数组链表/红黑树JDK8存储数据。通过hash(key)计算桶位置解决哈希冲突采用链地址法。当链表长度≥8且数组长度≥64时链表转为红黑树提升查询效率当树节点≤6时退化为链表。 2. HashMap的扩容
解答
触发条件元素数量超过阈值容量×负载因子默认0.75。 扩容过程
创建新数组原容量×2重新计算所有元素位置index (n-1) hash链表/树节点拆分到新桶JDK8优化高位差判断避免全量重哈希 3. HashMap是线程安全的吗
解答
❌ 非线程安全。并发场景下可能导致
多线程扩容引发死循环JDK7链表头插法导致数据覆盖多线程同时插入相同桶位 替代方案ConcurrentHashMap分段锁/CASCollections.synchronizedMap() 4. 列举几个线程安全的集合
解答
类型实现类特点JUC集合ConcurrentHashMap分段锁CASCopyOnWriteArrayList写时复制ConcurrentSkipListMap跳表实现同步包装类Collections.synchronizedList同步锁封装Collections.synchronizedMap同步锁封装 5. 说一下CopyOnWriteArrayList
解答
原理
写操作add/set/remove时复制新数组修改后替换原数组读操作无锁直接访问原数组 优点读性能极高适合读多写少场景 缺点写操作内存占用高复制全量数据数据弱一致性读操作可能读到旧数组 适用场景监听器列表、配置信息缓存 6. 说一下ReentrantLock
解答
基于AQSAbstractQueuedSynchronizer的可重入锁特性 公平/非公平模式
公平锁按队列顺序获取非公平锁直接竞争默认 可中断lockInterruptibly()支持响应中断 条件变量Condition实现精准线程唤醒 锁重入同一线程可多次获取锁计数1 7. ReentrantLock非公平锁是怎么实现的
解答
流程
尝试直接CAS抢锁无视等待队列若失败则入队再次CAS抢锁仍失败则进入阻塞状态 代码关键点
final boolean nonfairTryAcquire(int acquires) {if (CAS(state, 0, acquires)) { // 直接尝试修改状态setExclusiveOwnerThread(currentThread());return true;}// ...重入逻辑
}优势减少线程切换吞吐量更高 劣势可能导致线程饥饿 8. 说一下Spring中的AOP
解答
核心概念
概念说明切面(Aspect)模块化横切关注点如日志、事务连接点(Joinpoint)方法执行/异常抛出等时机通知(Advice)增强逻辑Before/After等切点(Pointcut)定义哪些连接点执行通知实现原理动态代理JDK Proxy或CGLIB 9. 说一下动态代理的两种方式
解答
方式原理限制性能JDK Proxy基于接口反射生成代理类目标类需实现接口较快CGLIB字节码框架(ASM)生成子类无法代理final方法/类首次加载慢Spring策略有接口用JDK Proxy否则用CGLIB 10. SpringBoot比Spring好在哪里
解答
核心优势
自动配置EnableAutoConfiguration自动装配Bean内嵌容器Tomcat/Jetty无需单独部署简化配置application.properties替代XML起步依赖spring-boot-starter-*整合常用库生产就绪Actuator提供健康检查/监控端点 11. 说一下SpringBoot中的约定大于配置
解答
核心理念通过预定义规则减少显式配置 典型约定
项目结构src/main/java为代码根目录配置文件application.properties/yml自动加载包扫描主类所在包及其子包自动扫描端点路径Actuator监控端点统一为/actuator/* 优势开发效率提升50%配置复杂度降低70% 12. 说一下MySQL的存储引擎有哪些
解答
引擎事务锁粒度外键适用场景InnoDB✅行锁✅OLTP、高并发写MyISAM❌表锁❌读密集型、数据仓库Memory❌表锁❌临时表、缓存Archive❌行锁(插入)❌日志归档 13. InnoDB和MyISAM的区别
解答
特性InnoDBMyISAM事务✅ ACID兼容❌锁机制行锁、间隙锁表锁外键✅❌崩溃恢复Redo Log保证无索引结构聚簇索引(数据存B树叶节点)非聚簇索引(数据分离) 14. 聚簇索引和非聚簇索引
解答
聚簇索引(Clustered Index)
数据行物理存储顺序与索引一致如InnoDB主键索引每表仅有一个聚簇索引 非聚簇索引(Secondary Index)索引与数据分离如MyISAM所有索引叶子节点存储数据行指针InnoDB中为主键值 查询流程非聚簇索引需回表查询通过主键二次查找聚簇索引 15. MySQL中的事务
解答
ACID特性
原子性(A)Undo Log回滚一致性©约束主键/外键保证隔离性(I)MVCC锁机制持久性(D)Redo Log刷盘 隔离级别 读未提交 → 读已提交 → 可重复读(默认) → 串行化 隔离性增强并发性下降 16. ACID四大特性是怎么实现的
解答
特性实现机制原子性Undo Log记录数据修改前状态回滚时反向补偿一致性应用层逻辑数据库约束唯一键/外键隔离性MVCC 锁行锁、间隙锁持久性Redo Log事务提交前先写日志宕机后重放恢复 17. 说一下MVCC
解答
**多版本并发控制(MVCC)**核心组件 隐藏字段 DB_TRX_ID最近修改事务IDDB_ROLL_PTR回滚指针指向Undo Log ReadView
事务开启时生成包含 m_ids活跃事务ID列表 min_trx_id最小活跃事务ID max_trx_id预分配事务ID 可见性规则 min_trx_id已提交可见 ≥ max_trx_id将来事务不可见 在m_ids中未提交不可见 18. 说一下MySQL中的锁
解答
按粒度分
表锁MyISAM默认开销小但并发低行锁InnoDB支持分三类 记录锁锁定单行间隙锁锁定区间临键锁记录锁间隙锁 按模式分 共享锁(S)允许并发读排他锁(X)禁止其他读写意向锁(IS/IX)避免表级冲突检查 19. 什么是幻读可重复读会发生幻读吗
解答
幻读同一事务中多次范围查询结果集行数不同因其他事务插入/删除数据 可重复读(RR)下的表现
快照读普通SELECTMVCC避免幻读当前读SELECT FOR UPDATE可能幻读需间隙锁阻塞插入 解决方案
显式加锁SELECT ... FOR UPDATE提升隔离级别SERIALIZABLE 20. MySQL三大日志
解答
日志作用层级Binlog主从复制、数据恢复逻辑日志MySQL Server层Redo Log崩溃恢复物理日志InnoDB引擎层Undo Log事务回滚、MVCC逻辑日志InnoDB引擎层协同机制两阶段提交保证Binlog与Redo Log一致性 21. 说一下Redo Log
解答
作用确保事务持久性宕机后恢复未刷盘数据 流程
事务修改数据页 → 写入内存Buffer Pool生成Redo Log记录 → 写入Log Buffer事务提交时Log Buffer刷盘策略由innodb_flush_log_at_trx_commit控制 特点
顺序写比随机写快10倍循环写入文件组ib_logfile0/1 22. 你知道什么是事务的两阶段提交吗
解答
目的保证Redo Log与Binlog逻辑一致性 阶段 Prepare 写Redo Log并标记PREPARE写Binlog到内存 Commit Binlog刷盘 Redo Log标记COMMIT 崩溃恢复逻辑 Binlog完整 → 提交事务 Binlog不完整 → 回滚事务 23. 说一下Redis的持久化几种
解答
方式原理优点缺点RDB定时内存快照(SAVE/BGSAVE)恢复快、文件小可能丢失最后一次快照数据AOF追加写操作命令数据更安全文件大、恢复慢混合RDBAOFRedis 4.0速度与安全兼顾复杂度高生产建议启用RDBAOF混合模式 24. 说一下RDB和AOF的刷盘策略
解答
RDB触发条件
手动触发SAVE阻塞/BGSAVE后台fork自动触发save seconds changes配置阈值 AOF刷盘策略always每条命令刷盘安全性能差everysec每秒刷盘平衡默认no由OS决定性能好可能丢数据 优化定期执行BGREWRITEAOF压缩AOF文件 25. 说一下分布式锁的实现
解答
方案原理缺点数据库唯一索引利用唯一键冲突插入锁记录性能低、无自动失效机制Redis SETNXSET key value NX EX 过期时间主从切换可能导致锁失效ZooKeeper创建临时有序节点最小节点获锁性能较低RedLock多Redis实例(N/21成功即获锁)实现复杂推荐方案Redis单实例或Redisson框架 26. Redisson怎么实现分布式锁
解答
核心流程 加锁 Lua脚本原子操作SET lock_key uuid NX PX expire启动看门狗线程自动续期默认每10秒续约 解锁 Lua脚本校验锁归属UUID匹配后删除 发布解锁消息唤醒等待线程 特性 可重入通过计数器实现 公平锁基于ZooKeeper顺序节点 红锁(RedLock)多实例容错 27. 说一下MySQL和Redis的数据一致性问题
解答
常见方案对比
策略操作顺序问题先更DB后删缓存更新DB → 删除缓存删缓存失败导致脏读先删缓存后更DB删除缓存 → 更新DB更新DB失败时缓存已删优化方案
延时双删 删缓存 → 更新DB → 休眠 → 再删缓存Binlog监听 Canal监听Binlog → 更新/删除缓存最终一致设置缓存过期 容忍短期不一致依赖过期时间兜底 关键原则强一致性难实现优先保证DB正确性