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

45 阅读4分钟

互联网大厂Java面试:核心知识大考验

面试官:请简要介绍一下Java中的多线程机制,以及它在实际业务场景中的应用。

王铁牛:多线程就是可以同时执行多个任务嘛。在实际业务里,像电商系统的订单处理,多个订单可以同时被处理,就用到了多线程。

面试官:那说说线程池吧,它有什么作用,常用的线程池参数都代表什么含义?

王铁牛:线程池能复用线程,减少创建和销毁线程的开销。参数嘛,corePoolSize是核心线程数,maximumPoolSize是最大线程数……

面试官:还不错。那HashMap在多线程环境下会有什么问题,如何解决?

王铁牛:会有数据丢失啥的问题吧,解决办法嘛,不太清楚。

第一轮结束。

面试官:谈谈JVM的内存模型,以及垃圾回收机制。

王铁牛:内存模型就是有堆、栈、方法区这些。垃圾回收就是把不用的对象回收掉。

面试官:Spring框架中,依赖注入有几种方式,分别是什么?

王铁牛:有构造器注入、setter注入。

面试官:MyBatis的动态SQL有哪些,在实际开发中怎么用?

王铁牛:有if、where、foreach啥的,实际开发中就是根据条件拼接SQL语句。

第二轮结束。

面试官:Dubbo的集群容错策略有哪些,各有什么特点?

王铁牛:有 failover、failfast、failsafe 等,failover 就是失败重试,failfast 是快速失败……

面试官:RabbitMq的消息确认机制是怎样的,有什么作用?

王铁牛:好像有发送确认和接收确认,保证消息可靠传递。

面试官:xxl-job的执行器有哪些类型,分别适用于什么场景?

王铁牛:不太清楚。

第三轮结束。

面试结束,面试官表示会让王铁牛回家等通知。虽然王铁牛对一些复杂问题回答得不太理想,但简单问题的回答还是有一定亮点的。希望他能继续提升自己的技术水平,以备后续可能的机会。

答案

多线程机制:多线程是指在一个程序中可以同时运行多个线程,每个线程执行不同的任务。在Java中,通过Thread类或Runnable接口来创建和管理线程。在实际业务场景中,比如电商系统的订单处理,多个订单可以同时被处理,提高系统的处理效率。

线程池:线程池能复用线程,减少创建和销毁线程的开销。常用参数含义如下:

  • corePoolSize:核心线程数,当提交的任务数小于corePoolSize时,线程池会创建新线程来执行任务。
  • maximumPoolSize:最大线程数,当提交的任务数大于corePoolSize时,会将任务放入队列中,如果队列已满且线程数小于maximumPoolSize,则会创建新线程来执行任务。
  • keepAliveTime:线程池中的线程在空闲时的存活时间。
  • unit:keepAliveTime的时间单位。
  • workQueue:任务队列,用于存放提交的任务。
  • threadFactory:线程工厂,用于创建线程。
  • handler:拒绝策略,当线程池已满且无法接受新任务时,会调用该策略来处理新任务。

HashMap在多线程环境下的问题及解决办法:在多线程环境下,HashMap可能会出现数据丢失、死循环等问题。解决办法有:

  • 使用ConcurrentHashMap代替HashMapConcurrentHashMap是线程安全的。
  • HashMap进行同步处理,比如使用synchronized关键字。

JVM的内存模型及垃圾回收机制:JVM的内存模型包括堆、栈、方法区等。垃圾回收机制是自动回收不再使用的对象所占用的内存空间。常见的垃圾回收算法有标记清除算法、标记整理算法、复制算法等。

Spring框架中的依赖注入方式

  • 构造器注入:通过构造函数来注入依赖对象。
  • setter注入:通过setter方法来注入依赖对象。

MyBatis的动态SQL

  • if:根据条件判断是否拼接SQL语句。
  • where:自动处理SQL语句中的WHERE关键字,避免多余的AND或OR。
  • foreach:用于循环遍历集合,生成对应的SQL语句。

Dubbo的集群容错策略

  • failover:失败重试,当调用失败时会自动重试其他服务。
  • failfast:快速失败,当调用失败时立即抛出异常。
  • failsafe:失败安全,当调用失败时不抛出异常,而是记录日志。

RabbitMq的消息确认机制

  • 发送确认:确保消息成功发送到RabbitMq服务器。
  • 接收确认:确保消费者成功接收到消息。

xxl-job的执行器类型及适用场景

  • BEAN模式:适用于执行本地方法。
  • GLUE模式:适用于在线编辑代码并执行。
  • EXECUTOR模式:适用于分布式任务执行。