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

103 阅读4分钟

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

第一轮: 面试官:请你简单介绍一下 Java 的基本数据类型有哪些? 王铁牛:有 byte、short、int、long、float、double、char、boolean 这几种。 面试官:不错,那你说说这些数据类型的默认值分别是多少? 王铁牛:byte 的默认值是 0,short 也是 0,int 为 0,long 是 0L,float 是 0.0f,double 是 0.0,char 是 '\u0000',boolean 是 false。 面试官:很好,那你再说说 Java 中的常量和变量的区别是什么? 王铁牛:常量的值在定义后不能改变,而变量的值可以在程序运行过程中改变。

第二轮: 面试官:谈谈你对多线程的理解吧。 王铁牛:多线程就是可以同时执行多个任务的机制,能提高程序的执行效率。 面试官:那你知道线程的状态有哪些吗? 王铁牛:有新建、就绪、运行、阻塞和死亡这几种状态。 面试官:那在多线程环境下,如何避免线程安全问题呢? 王铁牛:可以使用同步代码块或同步方法来解决,比如使用 synchronized 关键字。

第三轮: 面试官:说说你对 HashMap 的了解吧。 王铁牛:HashMap 是一种哈希表数据结构,用于存储键值对,它的查找、插入和删除操作效率很高。 面试官:那你知道 HashMap 的底层原理吗? 王铁牛:不太清楚。 面试官:HashMap 底层是通过数组和链表实现的,当链表长度超过阈值时会转为红黑树来提高查找效率。 面试官:那你说说 ArrayList 和 LinkedList 的区别吧? 王铁牛:不太清楚。 面试官:ArrayList 是基于数组实现的,查询快但插入和删除慢;LinkedList 是基于链表实现的,插入和删除快但查询慢。

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

答案:

  • Java 的基本数据类型及默认值:
    • byte:字节型,占 1 个字节,范围是 -128 到 127,默认值为 0。
    • short:短整型,占 2 个字节,范围是 -32768 到 32767,默认值为 0。
    • int:整型,占 4 个字节,范围是 -2147483648 到 2147483647,默认值为 0。
    • long:长整型,占 8 个字节,范围是 -9223372036854775808 到 9223372036854775807,默认值为 0L。
    • float:单精度浮点型,占 4 个字节,默认值为 0.0f。
    • double:双精度浮点型,占 8 个字节,默认值为 0.0。
    • char:字符型,占 2 个字节,默认值为 '\u0000'。
    • boolean:布尔型,占 1 位,默认值为 false。
  • 多线程相关:
    • 新建状态:线程对象已经创建,但尚未启动。
    • 就绪状态:线程对象创建后,调用 start()方法,进入就绪队列,等待 CPU 调度。
    • 运行状态:线程获得 CPU 资源,开始执行 run()方法中的代码。
    • 阻塞状态:线程在等待某个条件满足时,会进入阻塞状态,如等待锁、等待 I/O 操作等。
    • 死亡状态:线程执行完毕或因异常等原因终止。
    • 避免线程安全问题的方法:
      • 同步代码块:使用 synchronized 关键字修饰代码块,同一时刻只有一个线程可以进入该代码块。
      • 同步方法:使用 synchronized 关键字修饰方法,同一时刻只有一个线程可以进入该方法。
  • HashMap 的底层原理:
    • HashMap 内部维护了一个数组 table,用于存储键值对。
    • 当向 HashMap 中插入键值对时,首先根据键的哈希值计算出数组的索引位置,然后将键值对存储在该索引位置的链表或红黑树中。
    • 如果链表长度超过阈值(默认 8),则会将链表转为红黑树,以提高查找效率。
  • ArrayList 和 LinkedList 的区别:
    • ArrayList:基于数组实现,随机访问元素效率高,因为可以通过数组下标直接访问元素;但插入和删除元素效率低,因为需要移动数组元素。
    • LinkedList:基于链表实现,插入和删除元素效率高,因为只需要修改链表的指针;但随机访问元素效率低,因为需要从头节点开始遍历链表。