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

103 阅读3分钟

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

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

面试官:那如何创建一个线程呢?

王铁牛:可以继承Thread类或者实现Runnable接口。

面试官:回答得不错。那说说线程池的原理和作用吧。

王铁牛:线程池就是预先创建一些线程,当有任务来的时候从线程池里拿线程去执行任务,能减少线程创建和销毁的开销。

第一轮结束。

面试官:讲讲JVM的内存结构。

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

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

王铁牛:嗯……大概就是按一定结构存着吧。

面试官:HashMap的底层实现原理呢?

王铁牛:就是数组加链表,好像还有红黑树啥的。

第二轮结束。

面试官:Spring框架的核心特性有哪些?

王铁牛:依赖注入、面向切面编程这些吧。

面试官:Spring Boot的优点是什么?

王铁牛:能快速搭建项目,很方便。

面试官:MyBatis的工作原理是什么?

王铁牛:通过SQL映射文件啥的来操作数据库。

第三轮结束。

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

多线程

  • 创建线程方式:
    • 继承Thread类:定义一个类继承Thread类,重写run方法,然后创建该类实例调用start方法启动线程。
    • 实现Runnable接口:定义一个类实现Runnable接口,实现run方法,然后通过Thread类构造函数传入该实例创建线程并启动。
  • 线程池原理:
    • 线程池预先创建一定数量的线程。
    • 当有任务提交时,从线程池中获取线程来执行任务。
    • 如果线程池中的线程都在忙碌,任务会被放入任务队列中排队等待。
    • 当任务队列满了且线程池中的线程数量未达到最大线程数时,会创建新的线程来执行任务。
    • 线程池有核心线程数、最大线程数、任务队列等参数来控制线程池的行为。

JVM内存结构

  • 堆:存放对象实例,是垃圾回收的主要区域。
  • 栈:存放局部变量、方法调用等。
  • 方法区:存储类信息、常量、静态变量等。

HashMap底层实现原理

  • 初始是一个数组。
  • 当往HashMap中插入键值对时,通过键的哈希值计算出在数组中的索引位置。
  • 如果该位置为空,则直接插入新节点。
  • 如果该位置不为空,则会形成链表或红黑树(当链表长度达到一定阈值会转换为红黑树),新节点会插入到链表或红黑树的头部。
  • 在进行查询时,同样通过键的哈希值计算索引位置,然后在对应的链表或红黑树中查找。

Spring框架核心特性

  • 依赖注入:通过IoC容器将对象之间的依赖关系进行管理和注入,降低对象之间的耦合度。
  • 面向切面编程:可以在不修改原有代码的基础上,动态地添加功能,比如日志、事务管理等。

Spring Boot优点

  • 快速搭建项目:提供了很多默认配置,能让开发者快速创建一个可用的项目。
  • 自动配置:根据项目引入的依赖自动配置相关的组件和功能。
  • 内嵌服务器:可以直接在项目中启动一个Web服务器,方便开发和部署。

MyBatis工作原理

  • 读取SQL映射文件:配置了SQL语句和参数映射等信息。
  • 根据SQL映射文件和参数构建SQL语句:通过动态SQL等功能生成最终要执行的SQL。
  • 执行SQL:利用JDBC等方式与数据库进行交互,执行SQL语句并获取结果。
  • 结果映射:将数据库返回的结果按照SQL映射文件中的配置映射成Java对象。