基础题
语言
谈谈你对java语言的理解;
是否接触过其他开发语言,谈谈Java语言与其他语言的优缺点或区别;
特性
阐述下你对Java语言的三大特性的理解;
结合项目,说说你对三大特性的使用和理解;
如何看待Java中三大特性的滥用,或者时极简代码与冗余代码区别,更倾向于哪一种;
如果让你设计一个功能模块,你会从哪些方面考虑;
类是否可以多继承或多实现;
接口类与抽象类之间的区别;
设计模式
Java常用的设计模式;
项目中用到的设计模式;
Spring框架中用到的设计模式,列举几个;
类型
Java中的基础类型;
谈谈对String的理解;
如果让你重新去定义一个String类,讲讲实现方式;
变量的创建几种方式:
基本类型比较,’==’ 与 'equals’区别;
String、StringBuilder和StringBuffer之间的区别;
/**
- 整型字面量的值在-128到127之间,那么不会new新的Integer对象,而是直接引用常量池中的Integer对象,所以f1f2的结果是true,而f3f4的结果是false.
*/
@Test
public void compareTest() {
Integer num1 = 100, num2 = 100, num3 = 150, num4 = 150;
System.out.println(num1 == num2); // true
System.out.println(num3 == num4); // false
}
序列化
谈谈你对序列化的理解;
谈谈在项目哪些场景中使用到了序列化;
类实现序列化时会有一个serialVersionUID,谈谈它的作用;
多线程
谈谈对Java多线程的理解;
谈谈你项目中使用的多线程;
如何保证线程安全;
简述下ThreadLocal;
服务中的Bean实例是单线程还是多线程;
Redis底层实现是单线程还是多线程;
谈谈对线程池的理解;
排序
简述几种排序算法和对应的复杂度;
冒泡排序;
快速排序,什么情况下达到最大复杂度;
堆排序;
插入排序;
集合
ArrayLIst 和 LInkList区别;
ArrayList 和 LinkList的实现原理;
ArrayList 和 LInkList是否是线程安全;
ArrayList 和 LinkList的最优使用场景;
是否了解过jdk源码,简述下Map的几种实现类;
说说对HashMap的理解;
HashMap底层的存储结构;
HashTable和HashMap之间的区别;
HashTable和HashMap中是否线程安全;
JVM
对象的创建是在堆还是栈里面;
简述下GC流程;
简述下新生代和老生代;
新生代中各个区的作用;
方法在栈中的调用流程;
进阶题
框架
谈谈对SpringMVC的理解;
SpringBoot与SpringMVC之间的区别;
谈谈对SpringBoot的理解(优缺点);
谈谈你对Dubbo框架的了解;
Rpc调用与Http调用之间的区别;
Dubbo服务基于什么协议调用;
Dubbo服务的调用方式;
zookeeper作用;
zookeepper挂了,dubbo服务之间是否能正常调用;
在项目开发过程中是否对dubbo进行过扩展开发;
简述下Spring中的AOP和IOC;
是否了解SpringCloud;
zookeeper实现分布式锁原理;
Redis
redis中存储数据类型有哪些;
讲述下redis中zSet排序的实现原理;
如何用redis实现分布式锁;
用redis做分布式锁时,会有什么问题,如何解决;
redis中数据的存储结构;
redis底层是单线程还是多线程;
redis的性能瓶颈在哪;
简述下I/O多路复用原理;
简述下一致性Hash或hash环;