《互联网大厂Java面试大闯关:核心知识与热门框架深度考察》

52 阅读5分钟

面试官:欢迎你来面试,先简单介绍一下你自己吧。

王铁牛:面试官您好,我叫王铁牛,有几年Java开发经验,熟悉各种Java技术,希望能加入咱们大厂。

面试官:好,那我开始第一轮提问。首先,讲讲Java中的多线程有哪些实现方式?

王铁牛:有继承Thread类、实现Runnable接口、实现Callable接口这几种方式。

面试官:不错,回答正确。那线程池的核心参数都有哪些?

王铁牛:有corePoolSize、maximumPoolSize、keepAliveTime、unit、workQueue、threadFactory、handler。

面试官:嗯,掌握得还可以。再问一个,HashMap在多线程环境下会出现什么问题?

王铁牛:会出现死循环、数据丢失等问题。

面试官:好,第一轮提问结束。

面试官:接下来第二轮提问。说说Spring框架中IoC和AOP的概念。

王铁牛:IoC就是控制反转,把对象的创建和依赖注入交给Spring容器;AOP是面向切面编程,能在不修改原有代码的基础上增强功能。

面试官:那Spring Boot有哪些优点?

王铁牛:它能快速搭建项目,内置Tomcat,自动配置,开发效率高。

面试官:讲讲MyBatis的缓存机制。

王铁牛:它有一级缓存和二级缓存,一级缓存是SqlSession级别的,二级缓存是namespace级别的。

面试官:第二轮提问完毕。

面试官:进入第三轮提问。Dubbo的集群容错策略有哪些?

王铁牛:有Failover Cluster、Failfast Cluster、Failsafe Cluster、Failback Cluster、Forking Cluster。

面试官:RabbitMq的消息确认机制了解吗?

王铁牛:不太清楚,瞎答一个吧,好像有什么ack和nack。

面试官:xxl-job的核心组件有哪些?

王铁牛:这个也不太熟,我猜有调度中心、执行器啥的。

面试官:第三轮问完了。今天的面试就到这里,回去等通知吧。

答案:

  • 多线程实现方式
    • 继承Thread类:创建一个类继承Thread类,重写run方法,通过实例化该类并调用start方法启动线程。
    • 实现Runnable接口:创建一个类实现Runnable接口,重写run方法,通过将该类实例作为参数传入Thread类的构造函数来创建线程并启动。
    • 实现Callable接口:创建一个类实现Callable接口,重写call方法,该方法有返回值。通过FutureTask类包装Callable对象,再将FutureTask对象作为参数传入Thread类的构造函数来创建线程并启动,可通过FutureTask的get方法获取返回值。
  • 线程池核心参数
    • corePoolSize:线程池的核心线程数,当提交的任务数小于corePoolSize时,会创建新线程来执行任务。
    • maximumPoolSize:线程池允许的最大线程数,当提交的任务数大于corePoolSize且workQueue已满时,会创建新线程直到线程数达到maximumPoolSize。
    • keepAliveTime:线程池中的线程在空闲时的存活时间。
    • unit:keepAliveTime的时间单位。
    • workQueue:用于存放提交的任务的阻塞队列。
    • threadFactory:用于创建线程的工厂。
    • handler:当线程池无法处理新任务时的拒绝策略。
  • HashMap多线程问题
    • 死循环:在扩容时可能会导致链表形成环形结构,从而在获取元素时陷入死循环。
    • 数据丢失:在多线程同时进行put操作时,可能会导致数据覆盖或丢失。
  • Spring框架IoC和AOP
    • IoC(控制反转):将对象的创建和依赖注入的控制权由应用程序转移到Spring容器,降低了组件之间的耦合度。
    • AOP(面向切面编程):通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。可以在不修改原有代码的基础上,为方法添加额外的功能,如日志记录、事务管理等。
  • Spring Boot优点
    • 快速搭建项目:提供了快速创建Spring项目的脚手架,减少了繁琐的配置。
    • 内置Tomcat:无需额外安装和配置Web服务器。
    • 自动配置:根据项目依赖自动配置Spring的各种组件,简化开发。
    • 开发效率高:节省了大量的开发时间和精力。
  • MyBatis缓存机制
    • 一级缓存:是SqlSession级别的缓存,在同一个SqlSession中,执行相同的SQL语句,会直接从缓存中获取结果,不会再次查询数据库。
    • 二级缓存:是namespace级别的缓存,多个SqlSession可以共享二级缓存。开启二级缓存后,在同一个namespace下的操作会使用缓存。
  • Dubbo集群容错策略
    • Failover Cluster:失败自动切换,当调用失败后会自动重试其他服务器。
    • Failfast Cluster:快速失败,只发起一次调用,失败立即报错。
    • Failsafe Cluster:失败安全,出现异常时直接忽略,不影响其他操作。
    • Failback Cluster:失败自动恢复,失败后会在后台定时重试。
    • Forking Cluster:并行调用多个服务器,只要有一个成功就返回。
  • RabbitMq消息确认机制
    • 生产者确认:确保消息成功发送到RabbitMQ服务器。
    • 消费者确认:消费者收到消息后向服务器发送确认,分为自动确认和手动确认。自动确认是消息一旦被接收就自动确认;手动确认需要消费者显式调用方法确认消息已接收。
  • xxl-job核心组件
    • 调度中心:负责管理任务调度规则、触发调度等。
    • 执行器:负责接收调度中心的调度并执行任务。
    • 任务管理:包括任务的创建、编辑、删除等操作。
    • 日志管理:记录任务执行的日志。