互联网大厂Java面试:谢飞机的“惊心动魄”三轮问答

4 阅读1分钟

技术问题详细答案:

  1. HashMap工作原理
    HashMap是基于哈希表实现的,存储数据时通过键值对形式存储。它利用键的hashCode与哈希函数定位存储位置。如果发生哈希冲突,采用链表或红黑树解决冲突。红黑树在数据量较大时可以优化查询效率。

  2. ArrayList扩容机制
    ArrayList在插入数据时如果空间不足,会进行动态扩容,一般是原来容量的1.5倍。扩容过程涉及创建新数组并复制原数组数据到新数组。

  3. Redis数据淘汰策略
    Redis常见的淘汰策略包括:

    • LRU(Least Recently Used):淘汰最久未被访问的数据。
    • LFU(Least Frequently Used):淘汰访问频率最低的数据。
    • TTL(Time to Live):淘汰过期的键。
  4. 线程池核心参数与工作流程
    线程池的核心参数包括:

    • 核心线程数(corePoolSize)
    • 最大线程数(maximumPoolSize)
    • 队列容量(workQueue)
    • 线程存活时间(keepAliveTime)
      工作流程:任务提交到线程池,若核心线程未满,创建新线程执行任务;若满,则任务进入队列;队列满时创建非核心线程;若线程数达到最大值,则执行拒绝策略。
  5. Spring IOC容器与Bean生命周期
    IOC容器通过依赖注入管理Bean的生命周期,包括:实例化、属性设置、初始化、使用、销毁。

  6. RabbitMQ消息确认机制
    RabbitMQ支持确认机制,包括:

    • Publisher Confirm:生产者确认消息是否成功发送到Broker。
    • Consumer Acknowledgment:消费者确认消息是否成功处理,以确保消息不会丢失。
  7. DDD领域划分
    领域驱动设计(DDD)通过业务逻辑划分领域模块,常用的是限界上下文(Bounded Context)来定义领域边界。

  8. MyBatis #{}和${}区别

    • #{}:参数占位符,会进行预编译,防止SQL注入。
    • ${}:直接替换变量值,不会预编译,但更灵活。
  9. Docker容器与虚拟机区别
    Docker容器基于操作系统级虚拟化,与虚拟机相比占用资源少、启动速度快,适合轻量化部署。