《互联网大厂Java求职者面试:核心知识大考验》

33 阅读5分钟

面试官:请简要介绍一下Java中的多线程机制,以及如何创建一个线程。

王铁牛:多线程就是多个线程同时运行嘛。创建线程可以通过继承Thread类或者实现Runnable接口。

面试官:那说说线程池的原理和优势。

王铁牛:线程池就是预先创建一些线程,有任务来了就从里面拿线程去执行。优势嘛,就是能提高效率,减少线程创建销毁的开销。

面试官:讲讲HashMap的底层实现。

王铁牛:HashMap是数组加链表再加红黑树。

第一轮结束。

面试官:谈谈Spring框架中IoC和AOP的概念。

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

面试官:Spring Boot有哪些核心特性?

王铁牛:自动配置,能快速搭建项目,还有内置的Tomcat。

面试官:MyBatis的动态SQL是怎么回事?

王铁牛:动态SQL就是根据条件动态生成SQL语句。

第二轮结束。

面试官:Dubbo的集群容错机制有哪些?

王铁牛:有 failover、failfast、failsafe 等。

面试官:RabbitMq的消息确认机制是怎样的?

王铁牛:有生产者确认和消费者确认。

面试官:xxl-job的调度原理是什么?

王铁牛:这个……不太清楚。

第三轮结束。

面试结束,面试官表示会让王铁牛回家等通知。

答案:

  1. 多线程机制及创建线程:多线程是指程序中包含多个执行单元,它们可以并发执行。在Java中创建线程主要有两种方式:继承Thread类,重写run方法;实现Runnable接口,实现run方法。然后通过Thread类的构造方法传入Runnable实例来创建线程对象,最后调用start方法启动线程。
  2. 线程池的原理和优势:线程池是一种预先创建一定数量线程的技术。原理是当有任务提交时,从线程池中获取线程来执行任务,执行完后线程不会被销毁而是放回线程池等待下次任务。优势在于减少了线程创建和销毁的开销,提高了系统性能和响应速度,还能更好地控制线程数量,避免资源耗尽。
  3. HashMap的底层实现:HashMap底层是一个数组,数组中的每个元素是一个链表节点(JDK8开始在链表长度大于8且数组长度大于64时会转换为红黑树)。当插入键值对时,首先通过键的哈希值计算出在数组中的位置,如果该位置为空,则直接插入新节点;如果不为空,则遍历链表或红黑树,若找到相同键则更新值,否则在链表或红黑树末尾插入新节点。
  4. Spring框架中IoC和AOP的概念:IoC(控制反转)是指将对象的创建和依赖关系的管理从传统的程序代码中分离出来,交给Spring容器来完成。这样可以降低对象之间的耦合度,提高代码的可维护性和可测试性。AOP(面向切面编程)是一种编程范式,它允许开发者将横切关注点(如日志记录、事务管理等)与业务逻辑分离,通过切面(Aspect)织入到目标对象中,从而在不修改原有业务代码的基础上增强功能。
  5. Spring Boot的核心特性:自动配置是Spring Boot的核心特性之一,它能够根据项目中引入的依赖自动配置相关的Bean,极大地简化了项目的搭建过程。内置的Tomcat使得Spring Boot应用可以直接作为一个Web应用运行,无需额外配置Servlet容器。此外,Spring Boot还具有快速开发、约定大于配置、健康检查等特性。
  6. MyBatis的动态SQL:MyBatis的动态SQL允许根据不同的条件动态生成SQL语句。例如,可以使用if标签根据条件判断是否添加WHERE子句及相应的条件;使用foreach标签可以循环遍历集合,动态生成IN子句等。通过动态SQL,能够灵活地构建满足各种业务需求的SQL语句,提高了数据访问层的灵活性和可维护性。
  7. Dubbo的集群容错机制
    • failover:失败自动切换,当调用失败后会自动重试其他服务器,默认重试2次。
    • failfast:快速失败,只调用一次,失败立即报错。
    • failsafe:失败安全,出现异常时直接忽略,不抛出异常。
  8. RabbitMq的消息确认机制
    • 生产者确认:生产者将消息发送到RabbitMQ后,需要等待Broker的确认,以确保消息成功到达。可以通过设置信道的confirm模式来实现,当消息被正确路由到队列或交换器时,Broker会发送确认消息给生产者。
    • 消费者确认:消费者从队列中获取消息并处理后,需要向Broker发送确认消息,告知Broker该消息已被正确处理。可以通过自动确认(acknowledge="auto")或手动确认(acknowledge="manual")来实现。手动确认可以确保消费者在处理完消息后再进行确认,避免消息丢失。