一线互联网公司工作了几年,我作为求职者参加了不少面试,也作为面试官面试了很多同学,整理这份面试指南,一方面是帮助大家更好的准备面试,有的放矢,另一方面也是对自己知识框架做一个体系化的梳理。
这篇文章梳理了Java核心技术常见面试题,整理了120道题目,包括Java基础、集合框架、并发编程、NIO、反射等部分的内容。
除了Java核心技术题目,还会梳理虚拟机,Spring,Dubbo,Spring Cloud,分布式系统,数据库模块的面试题,以及阿里,腾讯,百度等互联网一线大厂的面试真题。
在一些高级岗位的面试中有一类区分度比较高的 System Design 系统设计类问题,如秒杀系统,微博评论系统设计等,也会进行专门的解析。
语法基础
-
面向对象的特征有哪些方面?
-
hashCode和equals方法的理解?
-
两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
-
深拷贝和浅拷贝区别? &和&&的区别?
-
Math.round(11.5) 等于多少?Math.round(-11.5)等于多少?
-
switch是否能作用在byte上,是否能作用在long上,是否能作用在String上?
-
用最有效率的方法计算2乘以8? 数组有没有length()方法?
-
String有没有length()方法?
-
在Java中,如何跳出当前的多重嵌套循环?
-
构造器(constructor)是否可被重写(override)?
-
当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
-
重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分?
-
为什么不能根据返回类型来区分重载?
-
抽象类(abstract class)和接口(interface)有什么异同?
-
阐述静态变量和实例变量的区别?
-
静态嵌套类(Static Nested Class)和内部类(Inner Class)的不同?
-
接口是否可继承(extends)接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concrete class)?
-
一个".Java"源文件中是否可以包含多个类(不是内部类)?有什么限制?
-
Anonymous Inner Class(匿名内部类)是否可以继承其它类?是否可以实现接口?
-
内部类可以引用它的包含类(外部类)的成员吗?有没有什么限制?
-
Java中是如何支持正则表达式操作的?
基本数据类型
-
String是基本数据类型吗?
-
float f=3.4;是否正确?
-
int和Integer有什么区别?
-
是否可以继承String类?为什么?
-
String和StringBuilder、StringBuffer的区别?
-
char 型变量中能不能存贮一个中文汉字,为什么?
-
String s = new String("xyz");创建了几个字符串对象?
-
Java 中的final关键字有哪些用法?
-
如何实现字符串的反转及替换?
-
什么时候用断言(assert)?
集合框架
-
ArrayList和LinkedList有什么差别?
-
在哪种场景里应当用ArrayList(或LinkedList)?
-
有没有有顺序的Map实现类,如果有,他们是怎么保证有序的?
-
List,Set,Map三者的区别及总结?
-
HashMap 和 Hashtable 的区别?
-
HashSet 和 HashMap 区别?
-
HashMap 和 ConcurrentHashMap 的区别?
-
hashmap和hashtable和concurrenthashmap区别和比较?
-
HashSet如何检查重复?
-
comparable 和 comparator的区别?
-
如何对Object的list排序?
-
如何实现数组与List的相互转换?
-
如何求ArrayList集合的交集、并集、差集、去重复并集?
-
说说HashMap 的工作原理及代码实现?
-
ConcurrentHashMap 的工作原理及代码实现?
-
哪些集合类是线程安全的?
-
Iterator 怎么使用?有什么特点?
-
Collection和Collections的区别?
-
List、Map、Set三个接口存取元素时,各有什么特点?
-
Collections工具类中的sort()方法如何比较元素?
-
TreeMap和TreeSet在排序时如何比较元素?
IO/NIO
-
IO和NIO的区别?
-
Java中有几种类型的流?
-
如何用Java代码列出一个目录下所有的文件?
-
XML文档定义有几种形式?
-
解析XML文档有哪几种方式?
反射和动态代理
-
什么是反射?
-
获得一个类的类对象有哪些方式?
-
如何通过反射创建对象?
-
如何通过反射获取和设置对象私有字段的值?
-
如何通过反射调用对象的方法?
-
动态代理是什么?有哪些应用?
-
什么是 Java 序列化?什么情况下需要序列化?
-
如何实现对象克隆?
-
怎么实现动态代理?
-
动态代理的不同实现方式相应的优缺点?
并发编程
-
并行和并发有什么区别?
-
举例说明同步和异步
-
ThreadLocal的原理是什么?
-
使用ThreadLocal有哪些注意事项?
-
Java中能创建volatile数组吗?
-
olatile 能使得一个非原子操作变成原子操作吗?
-
volatile的原理,作用,能代替锁么?
-
Java中有哪些锁?以及他们的区别?
-
JDK8中对HashMap做了怎样的优化?
-
多线程的几种实现方式?
-
Thread类的sleep()方法和对象的wait()方法都可以让线程暂停执行,它们有什么区别?
-
线程的sleep()方法和yield()方法有什么区别?
-
sleep和sleep(0)的区别?
-
乐观锁,悲观锁有什么区别?
-
Lock与Synchronized的区别?
-
守护线程是什么?
-
说一下 runnable 和 callable 有什么区别?
-
notify()和 notifyAll()有什么区别?
-
说一下 synchronized 底层实现原理?
-
synchronized 和 volatile 的区别是什么?
-
synchronized 和 ReentrantLock 区别是什么?
-
当一个线程进入一个对象的synchronized方法A之后,其它线程是否可进入此对象的synchronized方法B?
-
多线程中 synchronized 锁升级的原理是什么?
-
什么是死锁?怎么防止死锁?
-
说一下 atomic 的原理?
线程池
-
线程的基本状态以及状态之间的关系?
-
什么是线程池(thread pool)?
-
创建线程池有哪几种方式?
-
线程池都有哪些状态?
-
线程池中 submit() 和 execute() 方法有什么区别?
-
说出与线程同步以及线程调度相关的方法?
-
启动一个线程是调用run()还是start()方法?
-
工具类Executors里面提供了哪些静态工厂方法?
-
简述synchronized 和Java.util.concurrent.locks.Lock的异同?
异常
-
Error和Exception有什么区别?
-
运行时异常与受检异常有何异同?
-
列出一些你常见的运行时异常?
-
阐述final、finally、finalize的区别。
-
throw 和 throws 的区别?
JDBC
-
阐述JDBC操作数据库的步骤?
-
Statement和PreparedStatement有什么区别?哪个性能更好?
-
在进行数据库编程时,连接池有什么作用?
-
JDBC中如何进行事务处理?
-
JDBC能否处理Blob和Clob?
JDK特性
-
Lambda表达式有哪些应用?
-
JDK 8的Fork/Join框架了解吗?
-
List、Set、Map是否继承自Collection接口?