技术问题详细答案:
-
HashMap工作原理
HashMap是基于哈希表实现的,存储数据时通过键值对形式存储。它利用键的hashCode与哈希函数定位存储位置。如果发生哈希冲突,采用链表或红黑树解决冲突。红黑树在数据量较大时可以优化查询效率。 -
ArrayList扩容机制
ArrayList在插入数据时如果空间不足,会进行动态扩容,一般是原来容量的1.5倍。扩容过程涉及创建新数组并复制原数组数据到新数组。 -
Redis数据淘汰策略
Redis常见的淘汰策略包括:- LRU(Least Recently Used):淘汰最久未被访问的数据。
- LFU(Least Frequently Used):淘汰访问频率最低的数据。
- TTL(Time to Live):淘汰过期的键。
-
线程池核心参数与工作流程
线程池的核心参数包括:- 核心线程数(corePoolSize)
- 最大线程数(maximumPoolSize)
- 队列容量(workQueue)
- 线程存活时间(keepAliveTime)
工作流程:任务提交到线程池,若核心线程未满,创建新线程执行任务;若满,则任务进入队列;队列满时创建非核心线程;若线程数达到最大值,则执行拒绝策略。
-
Spring IOC容器与Bean生命周期
IOC容器通过依赖注入管理Bean的生命周期,包括:实例化、属性设置、初始化、使用、销毁。 -
RabbitMQ消息确认机制
RabbitMQ支持确认机制,包括:- Publisher Confirm:生产者确认消息是否成功发送到Broker。
- Consumer Acknowledgment:消费者确认消息是否成功处理,以确保消息不会丢失。
-
DDD领域划分
领域驱动设计(DDD)通过业务逻辑划分领域模块,常用的是限界上下文(Bounded Context)来定义领域边界。 -
MyBatis #{}和${}区别
- #{}:参数占位符,会进行预编译,防止SQL注入。
- ${}:直接替换变量值,不会预编译,但更灵活。
-
Docker容器与虚拟机区别
Docker容器基于操作系统级虚拟化,与虚拟机相比占用资源少、启动速度快,适合轻量化部署。