> 技术文档 > 《互联网大厂 Java 求职者面试三轮提问及答案》

《互联网大厂 Java 求职者面试三轮提问及答案》

以下是一篇关于互联网大厂 Java 求职者面试的文章:

《互联网大厂 Java 求职者面试三轮提问及答案》

第一轮:面试官:请你谈谈 Java 的基本数据类型有哪些?王铁牛:有 byte、short、int、long、float、double、char、boolean 这几种。面试官:不错,那这些数据类型在内存中的存储大小分别是多少呢?王铁牛:嗯……这个我不太清楚。面试官:没关系,那你说说 Java 中的面向对象三大特性是什么?王铁牛:封装、继承、多态。面试官:很好,那请你举例说明一下封装的作用。王铁牛:(思考片刻)比如在一个类中,将一些属性和方法封装起来,对外只提供必要的接口,这样可以提高代码的安全性和可维护性。

第二轮:面试官:谈谈你对多线程的理解吧。王铁牛:多线程就是可以同时执行多个任务的机制。面试官:那在 Java 中如何创建和启动一个线程呢?王铁牛:可以通过继承 Thread 类或者实现 Runnable 接口来创建线程,然后调用 start 方法启动线程。面试官:不错,那你知道线程的状态有哪些吗?王铁牛:有新建、就绪、运行、阻塞、死亡这几种状态。面试官:那在什么情况下线程会进入阻塞状态呢?王铁牛:(挠挠头)这个……不太清楚。

第三轮:面试官:讲讲你对 HashMap 的理解吧。王铁牛:HashMap 是一种用于存储键值对的数据结构,它基于哈希表实现。面试官:那 HashMap 的底层原理是什么呢?王铁牛:(一脸茫然)不太懂……面试官:没关系,那你说说 HashMap 的扩容机制是怎样的呢?王铁牛:(还是不知道)……

面试官:今天的面试就到这里吧,你可以先回去等通知。感谢你的参与。

答案:

  • Java 的基本数据类型及其内存存储大小:
    • byte:1 字节(8 位),范围是 -128 到 127。
    • short:2 字节,范围是 -32768 到 32767。
    • int:4 字节,范围是 -2147483648 到 2147483647。
    • long:8 字节,范围是很大的整数。
    • float:4 字节,用于表示单精度浮点数。
    • double:8 字节,用于表示双精度浮点数。
    • char:2 字节,用于表示字符。
    • boolean:1 字节,通常表示 true 或 false。
  • Java 中的面向对象三大特性及封装作用:
    • 封装:将数据和操作封装在类中,对外提供公共的接口来访问和修改数据,隐藏内部实现细节。这样可以提高代码的安全性,防止外部直接访问和修改对象的内部状态;同时也便于维护和修改代码,因为只需要修改类的内部实现,而不影响外部的使用。
  • Java 中创建和启动线程的方式:
    • 继承 Thread 类:创建一个继承自 Thread 类的子类,重写 run 方法,在 run 方法中编写线程要执行的任务代码。然后通过创建子类的对象并调用 start 方法来启动线程。
    • 实现 Runnable 接口:创建一个实现了 Runnable 接口的类,实现 run 方法,在 run 方法中编写线程任务代码。然后通过创建实现类的对象,并将其作为参数传递给 Thread 类的构造函数来创建线程对象,最后调用 start 方法启动线程。
  • Java 中线程的状态及线程进入阻塞状态的情况:
    • 线程状态:新建(刚创建但未启动)、就绪(等待 CPU 调度)、运行(正在执行任务)、阻塞(因等待资源或被暂停)、死亡(任务执行完毕或出现异常)。
    • 线程进入阻塞状态的情况:
      • 等待阻塞:调用 wait 方法,使线程进入等待状态,直到其他线程调用 notify 或 notifyAll 方法唤醒它。
      • 同步阻塞:在获取同步锁时,如果锁被其他线程占用,当前线程就会进入阻塞状态,直到获取到锁。
      • 其他阻塞:如 I/O 操作阻塞,当线程进行 I/O 操作时,会被阻塞,直到 I/O 操作完成。
  • HashMap 的底层原理及扩容机制:
    • 底层原理:HashMap 基于哈希表实现,通过哈希函数将键映射到数组的索引位置,然后在该位置上存储键值对。在存储和获取元素时,通过哈希函数快速定位到数组的索引位置,然后在该位置上进行操作。
    • 扩容机制:当 HashMap 中的元素数量超过阈值(默认负载因子 0.75 乘以数组长度)时,会进行扩容。扩容时会创建一个新的更大的数组,然后将原数组中的元素重新哈希到新数组中。扩容过程可能会导致哈希冲突的增加,但可以提高 HashMap 的存储效率。