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

36 阅读2分钟

面试官:请简要介绍一下Java中的多线程。

王铁牛:多线程就是多个线程同时执行呗,能提高程序效率。

面试官:那线程池有了解吗?它的核心参数都有哪些作用?

王铁牛:线程池啊,好像是能复用线程,核心参数有corePoolSize、maximumPoolSize这些,corePoolSize就是核心线程数,maximumPoolSize是最大线程数。

面试官:回答得还不错。接下来第二轮,说说JVM的内存结构。

王铁牛:JVM内存结构包括堆、栈、方法区这些。

面试官:那对象在堆中是怎么存储的?

王铁牛:嗯……就是new出来的对象都放堆里吧。

面试官:最后一轮,讲讲Spring的核心特性。

王铁牛:Spring能做依赖注入,还有面向切面编程。

面试官:好的,今天的面试就到这里,回去等通知吧。

答案:

  • 多线程:多线程是指程序中包含多个执行单元,这些执行单元可以并发执行。在Java中,通过继承Thread类或实现Runnable接口来创建线程。多线程可以提高程序的效率,比如在服务器端处理多个客户端请求时,可以使用多线程来并行处理,提高响应速度。
  • 线程池:线程池是一种预先创建一定数量线程的技术。核心参数corePoolSize表示线程池的核心线程数,当提交的任务数小于corePoolSize时,会创建新线程来执行任务;maximumPoolSize表示线程池允许的最大线程数,当任务数超过corePoolSize时,会将任务放入队列中,如果队列已满且线程数小于maximumPoolSize,则会创建新线程来执行任务;还有keepAliveTime和unit,用于指定线程池中的线程在空闲时的存活时间。
  • JVM内存结构:JVM内存结构主要包括堆、栈、方法区等。堆是存放对象实例的地方,是垃圾回收的主要区域。栈主要存放局部变量和方法调用的上下文。方法区存储类信息、常量、静态变量等。对象在堆中存储时,会有对象头,包含对象的哈希码、分代年龄等信息,然后是实例数据,存放对象的属性值,最后可能有对齐填充。
  • Spring核心特性:依赖注入是Spring的核心特性之一,它通过控制反转(IoC)的方式,将对象的创建和依赖关系的管理交给Spring容器,而不是在代码中直接new对象,这样可以提高代码的可维护性和可测试性。面向切面编程(AOP)则允许将一些横切关注点(如日志、事务管理等)与业务逻辑分离,通过切面的方式织入到业务代码中,使得代码更加简洁和模块化。