《互联网大厂 Java 求职者面试三轮提问及答案》
第一轮: 面试官:请你介绍一下 Java 的基本数据类型有哪些? 王铁牛:有 byte、short、int、long、float、double、char、boolean 这几种。 面试官:不错,那你说说这些数据类型的存储大小分别是多少? 王铁牛:byte 占 1 字节,short 占 2 字节,int 占 4 字节,long 占 8 字节,float 占 4 字节,double 占 8 字节,char 占 2 字节,boolean 占 1 比特。 面试官:回答得很准确,那在 Java 中如何进行类型转换呢? 王铁牛:有自动类型转换和强制类型转换,自动类型转换是小类型自动转换为大类型,强制类型转换需要使用强制转换符。
第二轮: 面试官:谈谈你对多线程的理解? 王铁牛:多线程就是可以同时执行多个线程,提高程序的执行效率。 面试官:那在 Java 中创建线程有哪些方式? 王铁牛:可以通过继承 Thread 类或者实现 Runnable 接口来创建线程。 面试官:那这两种方式有什么区别呢? 王铁牛:(思考了一下)继承 Thread 类比较简单,直接重写 run 方法即可,但继承后不能再继承其他类;实现 Runnable 接口则更加灵活,可以实现多个接口,也可以避免单继承的局限性。
第三轮: 面试官:说说你对 HashMap 的了解? 王铁牛:HashMap 是一种哈希表数据结构,用于存储键值对。 面试官:它的存储原理是什么? 王铁牛:(挠挠头)呃,好像是通过哈希函数将键映射到数组的索引位置,然后存储值。 面试官:那 HashMap 在并发环境下可能会出现什么问题? 王铁牛:(一脸茫然)不太清楚。
面试官:今天的面试就到这里,你回去等通知吧。
答案总结:
- Java 的基本数据类型及其存储大小:基本数据类型是编程语言中最基本的数据单元,每种数据类型都有固定的存储大小。byte 存储范围是 -128 到 127,short 范围是 -32768 到 32767,int 范围是 -2147483648 到 2147483647,long 范围更大,float 精度相对较低,double 精度更高,char 用于存储字符,boolean 只有 true 和 false 两个值。
- 创建线程的方式及区别:继承 Thread 类创建线程,子类重写 run 方法,直接调用 start 方法启动线程;实现 Runnable 接口则需要创建一个实现了 Runnable 接口的类,并重写 run 方法,然后将该类的实例作为参数传递给 Thread 类的构造函数,最后调用 start 方法启动线程。继承 Thread 类简单直接,但不能再继承其他类;实现 Runnable 接口更灵活,可以实现多个接口,也避免了单继承的局限性。
- HashMap 的存储原理及并发问题:HashMap 通过哈希函数将键映射到数组的索引位置,然后将值存储在对应的位置。在并发环境下,可能会出现哈希冲突、数据丢失、数据结构损坏等问题,例如多个线程同时修改 HashMap 的结构可能会导致死锁或数据不一致。Java 提供了 ConcurrentHashMap 来解决并发问题,它采用了分段锁的机制,提高了并发性能。