互联网大厂Java面试:核心知识、框架与中间件深度考察

43 阅读5分钟

场景:在互联网大厂的一次Java岗位面试中,面试官对求职者进行核心知识、JUC、JVM、多线程等多方面的考察。

第一轮面试官:首先问你一些基础的Java核心知识。说说Java的基本数据类型有哪些? 王铁牛:有byte、short、int、long、float、double、char、boolean这八种。 面试官:回答得不错。那ArrayList和HashMap的底层数据结构分别是什么? 王铁牛:ArrayList底层是数组,HashMap底层是数组和链表,后来引入了红黑树。 面试官:很好。再问你,Spring框架的核心模块有哪些? 王铁牛:有IOC(控制反转)和AOP(面向切面编程)模块。

第二轮面试官:接下来问些JUC相关的问题。说说CountDownLatch的作用是什么? 王铁牛:嗯……好像是用来让一个或多个线程等待其他线程完成一组操作的。 面试官:大致对。那线程池有哪些常见的参数? 王铁牛:有核心线程数、最大线程数,还有……好像是阻塞队列之类的。 面试官:好的。JVM的内存区域划分了解吗? 王铁牛:有堆、栈,还有方法区啥的。

第三轮面试官:现在聊聊中间件相关。Dubbo的服务暴露有几种方式? 王铁牛:这个……我记得有XML配置方式,还有注解方式。 面试官:RabbitMQ的消息确认机制是怎样的? 王铁牛:生产者发送消息后,会收到确认,消费者消费消息也有确认,具体细节不太清楚了。 面试官:最后问下,xxl - job中任务调度的原理是什么? 王铁牛:嗯……好像是通过定时任务去触发执行的。

面试官:今天的面试差不多到这里。整体来看,你对一些基础的Java知识和常见框架、中间件有一定的了解,但在一些细节和原理方面掌握得还不够深入和全面。我们后续会综合评估所有候选人,你回家等通知吧,有进一步消息我们会及时联系你。

答案

  1. Java基本数据类型:byte(8位,-128到127)、short(16位,-32768到32767)、int(32位,-2147483648到2147483647)、long(64位,-9223372036854775808到9223372036854775807)、float(32位单精度浮点数)、double(64位双精度浮点数)、char(16位Unicode字符)、boolean(只有true和false两个值)。
  2. ArrayList和HashMap底层数据结构:ArrayList底层是动态数组,通过数组扩容来增加容量;HashMap在JDK1.8之前底层是数组加链表,在JDK1.8及之后,当链表长度达到8且数组容量大于64时,链表会转化为红黑树,以提高查找效率。
  3. Spring框架核心模块:IOC(控制反转),通过依赖注入(DI)实现对象之间的解耦,由Spring容器管理对象的生命周期和依赖关系;AOP(面向切面编程),将横切关注点(如日志、事务、权限等)从业务逻辑中分离出来,以切面的形式进行统一管理和处理。
  4. CountDownLatch作用:是一个同步辅助类,允许一个或多个线程等待其他线程完成一组操作。它有一个计数器,当其他线程完成操作时,计数器减1,当计数器减为0时,等待的线程被释放继续执行。
  5. 线程池常见参数:核心线程数(corePoolSize),线程池长期维持的线程数;最大线程数(maximumPoolSize),线程池允许创建的最大线程数;阻塞队列(workQueue),用于保存等待执行的任务;线程空闲时间(keepAliveTime),当线程数超过核心线程数时,多余的空闲线程等待新任务的最长时间;线程工厂(ThreadFactory),用于创建线程;拒绝策略(RejectedExecutionHandler),当线程池和队列都满时,对新任务的处理策略。
  6. JVM内存区域划分:堆(Heap),是Java虚拟机所管理的内存中最大的一块,几乎所有的对象实例都在这里分配内存;栈(Stack),用于存储局部变量表、操作数栈、动态链接、方法出口等信息,每个线程都有自己的栈;方法区(Method Area),用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据;程序计数器(Program Counter Register),是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器;本地方法栈(Native Method Stack),与虚拟机使用到的本地方法有关。
  7. Dubbo服务暴露方式:XML配置方式,在Spring的配置文件中通过dubbo:service标签配置服务提供者的相关信息;注解方式,使用@Service注解标注服务实现类,通过配置文件或注解属性指定服务的相关配置信息。
  8. RabbitMQ消息确认机制:生产者确认机制,生产者发送消息到RabbitMQ后,Broker会给生产者发送确认消息(confirm),表示消息已成功接收或处理失败;消费者确认机制,消费者从队列中获取消息并处理后,可以向Broker发送确认(ack),表示消息已成功消费,Broker会从队列中移除该消息,如果消费者未发送确认或发送了否定确认(nack),Broker会根据配置的策略(如重新入队等)处理消息。
  9. xxl - job任务调度原理:xxl - job由调度中心、执行器和任务组成。调度中心负责管理调度任务、触发任务执行等;执行器负责接收调度中心的调度请求并执行任务。调度中心通过定时任务(如quartz等)按照设定的时间策略触发任务,将任务请求发送给对应的执行器,执行器执行任务并将执行结果返回给调度中心。