Java工程师 高频面试题汇总之「Java语言篇」
1. Java基础
1.1 为什么Java代码可以实现一次编写、到处运行?
1.2 一个Java文件里可以有多个类吗(不含内部类)?
1.3 说一说你对Java访问权限的了解
1.4 介绍一下Java的数据类型
1.5 int类型的数据范围是多少?
1.6 请介绍全局变量和局部变量的区别
1.7 请介绍一下实例变量的默认值
1.8 为啥要有包装类?
1.9 说一说自动装箱、自动拆箱的应用场景
1.10 如何对Integer和Double类型判断相等?
1.11 int和Integer有什么区别,二者在做==运算时会得到什么结果?
1.12 说一说你对面向对象的理解
1.13 面向对象的三大特征是什么?
1.14 封装的目的是什么,为什么要有封装?
1.15 说一说你对多态的理解
1.16 Java中的多态是怎么实现的?
1.17 Java为什么是单继承,为什么不能多继承?
1.18 说一说重写与重载的区别
1.19 构造方法能不能重写?
1.20 介绍一下Object类中的方法
1.21 说一说hashCode()和equals()的关系
1.22 为什么要重写hashCode()和equals()?
1.23 ==和equals()有什么区别?
1.24 String类有哪些方法?
1.25 String可以被继承吗?
1.26 说一说String和StringBuffer有什么区别
1.27 说一说StringBuffer和StringBuilder有什么区别
1.28 使用字符串时,new和""推荐使用哪种方式?
1.29 说一说你对字符串拼接的理解
1.30 两个字符串相加的底层是如何实现的?
1.31 `String a = "abc";` ,说一下这个过程会创建什么,放在哪里?,说一下这个过程会创建什么,放在哪里?
1.32 `new String("abc")` 是去了哪里,仅仅是在堆里面吗?
1.33 接口和抽象类有什么区别?
1.34 接口中可以有构造函数吗?
1.35 谈谈你对面向接口编程的理解
1.36 遇到过异常吗,如何处理?
1.37 说一说Java的异常机制
1.38 请介绍Java的异常接口
1.39 finally是无条件执行的吗?
1.40 在finally中return会发生什么?
1.41 说一说你对static关键字的理解
1.42 static修饰的类能不能被继承?
1.43 static和final有什么区别?
1.44 说一说你对泛型的理解
1.45 介绍一下泛型擦除
1.46 List<? super T>和List<? extends T>有什么区别?
1.47 说一说你对Java反射机制的理解
1.48 Java反射在实际项目中有哪些应用场景?
1.49 说一说Java的四种引用方式
1.2 一个Java文件里可以有多个类吗(不含内部类)?
1.3 说一说你对Java访问权限的了解
1.4 介绍一下Java的数据类型
1.5 int类型的数据范围是多少?
1.6 请介绍全局变量和局部变量的区别
1.7 请介绍一下实例变量的默认值
1.8 为啥要有包装类?
1.9 说一说自动装箱、自动拆箱的应用场景
1.10 如何对Integer和Double类型判断相等?
1.11 int和Integer有什么区别,二者在做==运算时会得到什么结果?
1.12 说一说你对面向对象的理解
1.13 面向对象的三大特征是什么?
1.14 封装的目的是什么,为什么要有封装?
1.15 说一说你对多态的理解
1.16 Java中的多态是怎么实现的?
1.17 Java为什么是单继承,为什么不能多继承?
1.18 说一说重写与重载的区别
1.19 构造方法能不能重写?
1.20 介绍一下Object类中的方法
1.21 说一说hashCode()和equals()的关系
1.22 为什么要重写hashCode()和equals()?
1.23 ==和equals()有什么区别?
1.24 String类有哪些方法?
1.25 String可以被继承吗?
1.26 说一说String和StringBuffer有什么区别
1.27 说一说StringBuffer和StringBuilder有什么区别
1.28 使用字符串时,new和""推荐使用哪种方式?
1.29 说一说你对字符串拼接的理解
1.30 两个字符串相加的底层是如何实现的?
1.31 `String a = "abc";` ,说一下这个过程会创建什么,放在哪里?,说一下这个过程会创建什么,放在哪里?
1.32 `new String("abc")` 是去了哪里,仅仅是在堆里面吗?
1.33 接口和抽象类有什么区别?
1.34 接口中可以有构造函数吗?
1.35 谈谈你对面向接口编程的理解
1.36 遇到过异常吗,如何处理?
1.37 说一说Java的异常机制
1.38 请介绍Java的异常接口
1.39 finally是无条件执行的吗?
1.40 在finally中return会发生什么?
1.41 说一说你对static关键字的理解
1.42 static修饰的类能不能被继承?
1.43 static和final有什么区别?
1.44 说一说你对泛型的理解
1.45 介绍一下泛型擦除
1.46 List<? super T>和List<? extends T>有什么区别?
1.47 说一说你对Java反射机制的理解
1.48 Java反射在实际项目中有哪些应用场景?
1.49 说一说Java的四种引用方式
2. 集合类
2.1 Java中有哪些容器(集合类)?
2.2 Java中的容器,线程安全和线程不安全的分别有哪些?
2.3 Map接口有哪些实现类?
2.4 描述一下Map put的过程
2.5 如何得到一个线程安全的Map?
2.6 HashMap有什么特点?
2.7 JDK7和JDK8中的HashMap有什么区别?
2.8 介绍一下HashMap底层的实现原理
2.9 介绍一下HashMap的扩容机制
2.10 HashMap中的循环链表是如何产生的?
2.11 HashMap为什么用红黑树而不用B树?
2.12 HashMap为什么线程不安全?
2.13 HashMap如何实现线程安全?
2.14 HashMap是如何解决哈希冲突的?
2.15 说一说HashMap和HashTable的区别
2.16 HashMap与ConcurrentHashMap有什么区别?
2.17 介绍一下ConcurrentHashMap是怎么实现的?
2.18 ConcurrentHashMap是怎么分段分组的?
2.19 说一说你对LinkedHashMap的理解
2.20 请介绍LinkedHashMap的底层原理
2.21 请介绍TreeMap的底层原理
2.22 Map和Set有什么区别?
2.23 List和Set有什么区别?
2.24 ArrayList和LinkedList有什么区别?
2.25 有哪些线程安全的List?
2.26 介绍一下ArrayList的数据结构?
2.27 谈谈CopyOnWriteArrayList的原理
2.28 说一说TreeSet和HashSet的区别
2.29 说一说HashSet的底层结构
2.30 BlockingQueue中有哪些方法,为什么这样设计?
2.31 BlockingQueue是怎么实现的?
2.32 Stream(不是IOStream)有哪些方法?
2.2 Java中的容器,线程安全和线程不安全的分别有哪些?
2.3 Map接口有哪些实现类?
2.4 描述一下Map put的过程
2.5 如何得到一个线程安全的Map?
2.6 HashMap有什么特点?
2.7 JDK7和JDK8中的HashMap有什么区别?
2.8 介绍一下HashMap底层的实现原理
2.9 介绍一下HashMap的扩容机制
2.10 HashMap中的循环链表是如何产生的?
2.11 HashMap为什么用红黑树而不用B树?
2.12 HashMap为什么线程不安全?
2.13 HashMap如何实现线程安全?
2.14 HashMap是如何解决哈希冲突的?
2.15 说一说HashMap和HashTable的区别
2.16 HashMap与ConcurrentHashMap有什么区别?
2.17 介绍一下ConcurrentHashMap是怎么实现的?
2.18 ConcurrentHashMap是怎么分段分组的?
2.19 说一说你对LinkedHashMap的理解
2.20 请介绍LinkedHashMap的底层原理
2.21 请介绍TreeMap的底层原理
2.22 Map和Set有什么区别?
2.23 List和Set有什么区别?
2.24 ArrayList和LinkedList有什么区别?
2.25 有哪些线程安全的List?
2.26 介绍一下ArrayList的数据结构?
2.27 谈谈CopyOnWriteArrayList的原理
2.28 说一说TreeSet和HashSet的区别
2.29 说一说HashSet的底层结构
2.30 BlockingQueue中有哪些方法,为什么这样设计?
2.31 BlockingQueue是怎么实现的?
2.32 Stream(不是IOStream)有哪些方法?
3. IO
3.1 介绍一下Java中的IO流
3.2 怎么用流打开一个大文件?
3.3 说说NIO的实现原理
3.4 介绍一下Java的序列化与反序列化
3.5 Serializable接口为什么需要定义serialVersionUID变量?
3.6 除了Java自带的序列化之外,你还了解哪些序列化工具?
3.7 如果不用JSON工具,该如何实现对实体类的序列化?
3.2 怎么用流打开一个大文件?
3.3 说说NIO的实现原理
3.4 介绍一下Java的序列化与反序列化
3.5 Serializable接口为什么需要定义serialVersionUID变量?
3.6 除了Java自带的序列化之外,你还了解哪些序列化工具?
3.7 如果不用JSON工具,该如何实现对实体类的序列化?
4. 多线程
4.1 创建线程有哪几种方式?
4.2 说说Thread类的常用方法
4.3 run()和start()有什么区别?
4.4 线程是否可以重复启动,会有什么后果?
4.5 介绍一下线程的生命周期
4.6 如何实现线程同步?
4.7 说一说Java多线程之间的通信方式
4.8 说一说Java同步机制中的wait和notify
4.9 说一说sleep()和wait()的区别
4.10 说一说notify()、notifyAll()的区别
4.11 如何实现子线程先执行,主线程再执行?
4.12 阻塞线程的方式有哪些?
4.13 说一说synchronized与Lock的区别
4.14 说一说synchronized的底层实现原理
4.15 synchronized可以修饰静态方法和静态代码块吗?
4.16 谈谈ReentrantLock的实现原理
4.17 如果不使用synchronized和Lock,如何保证线程安全?
4.18 说一说Java中乐观锁和悲观锁的区别
4.19 公平锁与非公平锁是怎么实现的?
4.20 了解Java中的锁升级吗?
4.21 如何实现互斥锁(mutex)?
4.22 分段锁是怎么实现的?
4.23 说说你对读写锁的了解
4.24 volatile关键字有什么用?
4.25 谈谈volatile的实现原理
4.26 说说你对JUC的了解
4.27 说说你对AQS的理解
4.28 LongAdder解决了什么问题,它是如何实现的?
4.29 介绍下ThreadLocal和它的应用场景
4.30 请介绍ThreadLocal的实现原理,它是怎么处理hash冲突的?
4.31 介绍一下线程池
4.32 介绍一下线程池的工作流程
4.33 线程池都有哪些状态?
4.34 谈谈线程池的拒绝策略
4.35 线程池的队列大小你通常怎么设置?
4.36 线程池有哪些参数,各个参数的作用是什么?
4.2 说说Thread类的常用方法
4.3 run()和start()有什么区别?
4.4 线程是否可以重复启动,会有什么后果?
4.5 介绍一下线程的生命周期
4.6 如何实现线程同步?
4.7 说一说Java多线程之间的通信方式
4.8 说一说Java同步机制中的wait和notify
4.9 说一说sleep()和wait()的区别
4.10 说一说notify()、notifyAll()的区别
4.11 如何实现子线程先执行,主线程再执行?
4.12 阻塞线程的方式有哪些?
4.13 说一说synchronized与Lock的区别
4.14 说一说synchronized的底层实现原理
4.15 synchronized可以修饰静态方法和静态代码块吗?
4.16 谈谈ReentrantLock的实现原理
4.17 如果不使用synchronized和Lock,如何保证线程安全?
4.18 说一说Java中乐观锁和悲观锁的区别
4.19 公平锁与非公平锁是怎么实现的?
4.20 了解Java中的锁升级吗?
4.21 如何实现互斥锁(mutex)?
4.22 分段锁是怎么实现的?
4.23 说说你对读写锁的了解
4.24 volatile关键字有什么用?
4.25 谈谈volatile的实现原理
4.26 说说你对JUC的了解
4.27 说说你对AQS的理解
4.28 LongAdder解决了什么问题,它是如何实现的?
4.29 介绍下ThreadLocal和它的应用场景
4.30 请介绍ThreadLocal的实现原理,它是怎么处理hash冲突的?
4.31 介绍一下线程池
4.32 介绍一下线程池的工作流程
4.33 线程池都有哪些状态?
4.34 谈谈线程池的拒绝策略
4.35 线程池的队列大小你通常怎么设置?
4.36 线程池有哪些参数,各个参数的作用是什么?
5. JVM
5.1 JVM包含哪几部分?
5.2 JVM是如何运行的?
5.3 Java程序是怎么运行的?
5.4 本地方法栈有什么用?
5.5 没有程序计数器会怎么样?
5.6 说一说Java的内存分布情况
5.7 类存放在哪里?
5.8 局部变量存放在哪里?
5.9 介绍一下Java代码的编译过程
5.10 介绍一下类加载的过程
5.11 介绍一下对象的实例化过程
5.12 元空间在栈内还是栈外?
5.13 谈谈JVM的类加载器,以及双亲委派模型
5.14 双亲委派机制会被破坏吗?
5.15 介绍一下Java的垃圾回收机制
5.16 请介绍一下分代回收机制
5.17 JVM中一次完整的GC流程是怎样的?
5.18 Full GC会导致什么?
5.19 JVM什么时候触发GC,如何减少FullGC的次数?
5.20 如何确定对象是可回收的?
5.21 对象如何晋升到老年代?
5.22 为什么老年代不能使用标记复制?
5.23 新生代为什么要分为Eden和Survivor,它们的比例是多少?
5.24 为什么要设置两个Survivor区域?
5.25 说一说你对GC算法的了解。
5.26 为什么新生代和老年代要采用不同的回收算法?
5.27 请介绍G1垃圾收集器
5.28 请介绍CMS垃圾收集器
5.29 内存泄漏和内存溢出有什么区别?
5.30 什么是内存泄漏,怎么解决?
5.31 什么是内存溢出,怎么解决?
5.32 哪些区域会OOM,怎么触发OOM?
5.2 JVM是如何运行的?
5.3 Java程序是怎么运行的?
5.4 本地方法栈有什么用?
5.5 没有程序计数器会怎么样?
5.6 说一说Java的内存分布情况
5.7 类存放在哪里?
5.8 局部变量存放在哪里?
5.9 介绍一下Java代码的编译过程
5.10 介绍一下类加载的过程
5.11 介绍一下对象的实例化过程
5.12 元空间在栈内还是栈外?
5.13 谈谈JVM的类加载器,以及双亲委派模型
5.14 双亲委派机制会被破坏吗?
5.15 介绍一下Java的垃圾回收机制
5.16 请介绍一下分代回收机制
5.17 JVM中一次完整的GC流程是怎样的?
5.18 Full GC会导致什么?
5.19 JVM什么时候触发GC,如何减少FullGC的次数?
5.20 如何确定对象是可回收的?
5.21 对象如何晋升到老年代?
5.22 为什么老年代不能使用标记复制?
5.23 新生代为什么要分为Eden和Survivor,它们的比例是多少?
5.24 为什么要设置两个Survivor区域?
5.25 说一说你对GC算法的了解。
5.26 为什么新生代和老年代要采用不同的回收算法?
5.27 请介绍G1垃圾收集器
5.28 请介绍CMS垃圾收集器
5.29 内存泄漏和内存溢出有什么区别?
5.30 什么是内存泄漏,怎么解决?
5.31 什么是内存溢出,怎么解决?
5.32 哪些区域会OOM,怎么触发OOM?