今天看到一份面试题总结,感受很到位,主要包括如下模块:Java基础、容器、多线程、反射、对象拷贝、Java Web模块,异常、网络、设计模式、Spring/Spring MVC 、Spring Boot/Spring Cloud、Hibernate、Mybaits、RabbitMQ、Kafka、Zookeeper、Mysql、Redis、JVM。以下图所示:html
下面一块儿看下面试题,面试题为今日头条文章中的TL提供,答案为笔者学习时候自我梳理,如有不正确的地方,请多指正,感谢!java
1.JDK和JRE有什么区别?mysql
JDK就是Java Development Kit 。JDK是面向开发人员使用的SDK,它提供了Java的开发环境和运行环境。SDK是Software Development Kit 通常指软件开发包,能够包括函数库、编译程序等。面试
JRE是Java Runtime Enviroment是指Java的运行环境,是面向Java程序的使用者,而不是开发者。redis
2.== 和 equals 的区别是什么?算法
== 比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,便是否是指相同一个对象。比较的是真正意义上的指针操做。
a.比较的是操做符两端的操做数是不是同一个对象。
b.两边的操做数必须是同一类型的(能够是父子类之间)才能编译经过。
c.比较的是地址,若是是具体的阿拉伯数字的比较,值相等则为true,如:
int a=10 与 long b=10L 与 double c=10.0都是相同的(为true),由于他们都指向地址为10的堆。spring
equals用来比较的是两个对象的内容是否相等,因为全部的类都是继承自java.lang.Object类的,因此适用于全部对象,若是没有对该方法进行覆盖的话,调用的仍然是Object类中的方法,而Object中的equals方法返回的倒是==的判断。sql
3.两个对象的 hashCode()相同,则 equals()也必定为 true,对吗?数据库
两个obj,若是equals()相等,hashCode()必定相等。两个obj,若是hashCode()相等,equals()不必定相等(Hash散列值有冲突的状况,虽然几率很低)。设计模式
https://www.cnblogs.com/jesonjason/p/5492208.html
4.final 在 java 中有什么做用?
final能够修饰类,函数,变量
修饰类时:意思是修饰类为最终类,任何类不能再继承它.
修改函数时:意思是该方法在类里是最终方法,继承它的方法不能去重写它.
修饰变量时:意思是被修饰的变量是常量或者叫终态变量,一旦初始化后就不能再改变变量的值.
5.java 中的 Math.round(-1.5) 等于多少?
-1 知识点:Math.round()方法的使用——括号内的数+0.5以后,向下取值
6.String 属于基础的数据类型吗?
不属于。String是一个对象。
8种基本数据类型: boolean byte char shrot int long float double
对应的基本类型包装类:Boolean Byte Character Short Integer Long Float Double
7.java 中操做字符串都有哪些类?它们之间有什么区别?
String、StringBuffer、StringBuilder
区别:String是不可变的对象,每次对String类型的改变都会生成一个新的对象,StringBuffer和StringBuilder是能够改变的对象。
对于操做效率:StringBuilder > StringBuffer > String
对于线程安全:StringBuffer 是线程安全的,可用于多线程;StringBuilder 是线程不安全的,用于单线程
不频繁的字符串操做使用 String。反之,StringBuffer 和 StringBuilder 都优于String
8.String str="i"与 String str=new String("i")同样吗?
不同。前者是一个常量,后者又从新new了一个对象,内存空间不同。
9.如何将字符串反转?
https://www.cnblogs.com/lanseyitai1224/p/6955609.html
10.String 类的经常使用方法都有那些?
11.抽象类必需要有抽象方法吗?
抽象类不必定要有抽象方法;可是有抽象方法的类必定是抽象类。
12.普通类和抽象类有哪些区别?
a.抽象类不能被实例化。
b.抽象类能够有构造函数,被继承时子类必须继承父类一个构造方法,抽象方法不能被声明为静态。
c.抽象方法只需申明,而无需实现,抽象类中能够容许普通方法有主体
d.含有抽象方法的类必须申明为抽象类
e.抽象的子类必须实现抽象类中全部抽象方法,不然这个子类也是抽象类。
13.抽象类能使用 final 修饰吗?
final关键字不能用来修饰抽象类和接口
14.接口和抽象类有什么区别?
a.抽象类和接口都不能直接实例化,若是要实例化,抽象类变量必须指向实现全部抽象方法的子类对象,接口变量必须指向实现全部接口方法的类对象。
b.抽象类要被子类继承,接口要被类实现。
c.接口只能作方法申明,抽象类中能够作方法申明,也能够作方法实现
d.接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。
e.抽象类里的抽象方法必须所有被子类所实现,若是子类不能所有实现父类抽象方法,那么该子类只能是抽象类。一样,一个实现接口的时候,如不能所有实现接口方法,那么该类也只能为抽象类。
f.抽象方法只能申明,不能实现,接口是设计的结果 ,抽象类是重构的结果
g.抽象类里能够没有抽象方法
h.若是一个类里有抽象方法,那么这个类只能是抽象类
i.抽象方法要被实现,因此不能是静态的,也不能是私有的。
j.接口可继承接口,并可多继承接口,但类只能单根继承。
15.java 中 IO 流分为几种?
https://www.cnblogs.com/QQ846300233/p/6046388.html
16.BIO、NIO、AIO 有什么区别?
https://blog.csdn.net/u010310183/article/details/81700405
17.Files的经常使用方法都有哪些?
http://www.javashuo.com/article/p-dpmbvpaf-bn.html
18.java 容器都有哪些?
https://www.cnblogs.com/hellowzd/p/9576966.html
19.Collection 和 Collections 有什么区别?
Collection是集合操做的接口,而Collections是一个类,专门提供了各个集合接口的操做方法。
20.List、Set、Map 之间的区别是什么?
21.HashMap 和 Hashtable 有什么区别?
主要的区别有:线程安全性,同步(synchronization),以及速度。
HashMap是非线程安全的,只是用于单线程环境下,Hashtable则适用于多线程环境。
22.如何决定使用 HashMap 仍是 TreeMap?
TreeMap默认是按照Key值升序排序的,HashMap的Key值实现散列hashCode(),分布是散列的均匀的,不支持排序;大多状况下HashMap有更好的性能,因此大多不须要排序的时候咱们会使用HashMap.
23.说一下 HashMap 的实现原理?
24.说一下 HashSet 的实现原理?
往HashSet添加元素的时候,首先HashSet会调用元素的hashCode方法获得元素的哈希码值,而后会通过一系列运算就能够算出该元素在哈希表中的存储位置,这样就会出现两种状况:
状况1:若是算出该元素的位置目前没有任何元素存储,那么该元素能够直接存储
状况2: 若是算出该元素的位置目前已经存有其余的元素,那么还会调用元素的equals方法与该位置的元素再比较一次。若是equals方法返回的是false,那么该元素容许存储,若是euqlas方法返回的是true,那么该元素被视为重复元素,不容许存储。
25.ArrayList 和 LinkedList 的区别是什么?
ArraryList 底层 是使用Object数组实现的,特色: 查询速度快,增删慢。
LinkedList 底层是使用链表数据结构实现的, 特色: 查询速度慢,增删快。
26.如何实现数组和 List 之间的转换?
List转数组:toArray(arraylist.size())方法
数组转List:Arrays的asList(a)方法
List<String> arrayList = new ArrayList<String>(); arrayList.add("s"); arrayList.add("e"); arrayList.add("n"); /** * ArrayList转数组 */ int size=arrayList.size(); String[] a = arrayList.toArray(new String[size]); //输出第二个元素 System.out.println(a[1]);//结果:e //输出整个数组 System.out.println(Arrays.toString(a));//结果:[s, e, n] /** * 数组转list */ List<String> list=Arrays.asList(a); /** * list转Arraylist */ List<String> arrayList2 = new ArrayList<String>(); arrayList2.addAll(list); System.out.println(list);
27.ArrayList 和 Vector 的区别是什么?
28.Array 和 ArrayList 有何区别?
一、能够将 ArrayList想象成一种“会自动扩增容量的Array”;
二、Array([]):最高效;可是其容量固定且没法动态改变;
ArrayList: 容量可动态增加;但牺牲效率;
三、在定义一个数组的时候,必须指定这个数组的数据类型及数组的大小,也就是说数组中存放的元素个数固定而且类型同样;
在不使用泛型的状况下,arraylist是能够添加进不一样类型的元素的,并且arraylist是能够不用指定长度的。在使用泛型时,咱们就只能添加一种类型的数据了。
总结:1.ArrayList是Array的复杂版本;
2.存储的数据类型:Array只能存储相同数据类型的数据,而ArrayList能够存储不一样数据类型的数据;
3.长度的可变:Array的长度是固定的,而ArrayList的长度是可变的。
29.在 Queue 中 poll()和 remove()有什么区别?
poll() ,若是队列为空的时候,则会抛出异常
而remove()只会返回null
30.哪些集合类是线程安全的?
31.迭代器 Iterator 是什么?
迭代器 (Iterator )是一种设计模式,在Java中,它是一个对象,它的任务就是遍历并选择序列中的对象,而开发人员不须要了解该序列的底层结构。只要拿到这个对象,使用迭代器就能够遍历这个对象的内部。迭代器一般被称为“轻量级”对象,由于建立它的代价很小。
32.Iterator 怎么使用?有什么特色?
如何使用?
一、经过调用类集的iterator()方法得到对类集的迭代方法;
二、创建一个调用hasNext()方法的循环,只要hasNext()返回true,就进行循环迭代;
三、在循环内部,经过调用next()方法来获得每个元素。
特色:
33.Iterator 和 ListIterator 有什么区别?
1. iterator()方法在set和list接口中都有定义,可是ListIterator()仅存在于list接口中(或实现类中);
2. ListIterator有add()方法,能够向List中添加对象,而Iterator不能
3. ListIterator和Iterator都有hasNext()和next()方法,能够实现顺序向后遍历,可是ListIterator有hasPrevious()和previous()方法,能够实现逆向(顺序向前)遍历。Iterator就不能够。
4. ListIterator能够定位当前的索引位置,nextIndex()和previousIndex()能够实现。Iterator没有此功能。
5. 均可实现删除对象,可是ListIterator能够实现对象的修改,set()方法能够实现。Iierator仅能遍历,不能修改。
34.怎么确保一个集合不能被修改?
35.并行和并发有什么区别?
并发:指应用可以交替执行不一样的任务,其实并发有点相似于多线程的原理,多线程并不是是同时执行多个任务,若是你开两个线程执行,就是在你几乎不可能察觉到的速度不断去切换这两个任务,已达到"同时执行效果",其实并非的,只是计算机的速度太快,咱们没法察觉到而已.
就相似于你,吃一口饭喝一口水,以正常速度来看,彻底可以看的出来,当你把这个过程以n倍速度执行时..能够想象一下.
并行:指应用可以同时执行不一样的任务,例:吃饭的时候能够边吃饭边打电话,这两件事情能够同时执行
36.线程和进程的区别?
http://www.javashuo.com/article/p-qtxtqonl-hc.html
37.守护线程是什么?
守护线程(即daemon thread),是个服务线程,准确地来讲就是服务其余的线程,这是它的做用——而其余的线程只有一种,那就是用户线程。因此java里线程分2种,
一、守护线程,好比垃圾回收线程,就是最典型的守护线程。
二、用户线程,就是应用程序里的自定义线程。
守护线程
一、守护线程,专门用于服务其余的线程,若是其余的线程(即用户自定义线程)都执行完毕,连main线程也执行完毕,那么jvm就会退出(即中止运行)——此时,连jvm都中止运行了,守护线程固然也就中止执行了。
二、再换一种说法,若是有用户自定义线程存在的话,jvm就不会退出——此时,守护线程也不能退出,也就是它还要运行,干吗呢,就是为了执行垃圾回收的任务啊。
用户自定义线程
一、应用程序里的线程,通常都是用户自定义线程。
二、用户也能够在应用程序代码自定义守护线程,只须要调用Thread类的设置方法设置一下便可。
38.建立线程有哪几种方式?
39.说一下 runnable 和 callable 有什么区别?
40.线程有哪些状态?
41.sleep() 和 wait() 有什么区别?
42.notify()和 notifyAll()有什么区别?
43.线程的 run()和 start()有什么区别?
44.建立线程池有哪几种方式?
45.线程池都有哪些状态?
46.线程池中 submit()和 execute()方法有什么区别?
47.在 java 程序中怎么保证多线程的运行安全?
48.多线程锁的升级原理是什么?
49.什么是死锁?
50.怎么防止死锁?
51.ThreadLocal 是什么?有哪些使用场景?
52.说一下 synchronized 底层实现原理?
53.synchronized 和 volatile 的区别是什么?
54.synchronized 和 Lock 有什么区别?
55.synchronized 和 ReentrantLock 区别是什么?
56.说一下 atomic 的原理?
57.什么是反射?
58.什么是 java 序列化?什么状况下须要序列化?
59.动态代理是什么?有哪些应用?
60.怎么实现动态代理?
61.为何要使用克隆?
62.如何实现对象克隆?
63.深拷贝和浅拷贝区别是什么?
64.jsp 和 servlet 有什么区别?
65.jsp 有哪些内置对象?做用分别是什么?
66.说一下 jsp 的 4 种做用域?
67.session 和 cookie 有什么区别?
68.说一下 session 的工做原理?
69.若是客户端禁止 cookie 能实现 session 还能用吗?
70.spring mvc 和 struts 的区别是什么?
71.如何避免 sql 注入?
72.什么是 XSS 攻击,如何避免?
73.什么是 CSRF 攻击,如何避免?
74.throw 和 throws 的区别?
a.throws出如今方法函数头;而throw出如今函数体。
b.throws表示出现异常的一种可能性,并不必定会发生这些异常;throw则是抛出了异常,执行throw则必定抛出了某种异常对象。
c.二者都是消极处理异常的方式(这里的消极并非说这种方式很差),只是抛出或者可能抛出异常,可是不会由函数去处理异常,真正的处理异常由函数的上层调用处理。
75.final、finally、finalize 有什么区别?
a.final修饰符(关键字)。被final修饰的类,就意味着不能再派生出新的子类,不能做为父类而被子类继承。所以一个类不能既被abstract声明,又被final声明。将变量或方法声明为final,能够保证他们在使用的过程当中不被修改。被声明为final的变量必须在声明时给出变量的初始值,而在之后的引用中只能读取。被final声明的方法也一样只能使用,即不能方法重写。
b.finally是在异常处理时提供finally块来执行任何清除操做。无论有没有异常被抛出、捕获,finally块都会被执行。try块中的内容是在无异常时执行到结束。catch块中的内容,是在try块内容发生catch所声明的异常时,跳转到catch块中执行。finally块则是不管异常是否发生,都会执行finally块的内容,因此在代码逻辑中有须要不管发生什么都必须执行的代码,就能够放在finally块中。
c.finalize是方法名。java技术容许使用finalize()方法在垃圾收集器将对象从内存中清除出去以前作必要的清理工做。这个方法是由垃圾收集器在肯定这个对象没有被引用时对这个对象调用的。它是在object类中定义的,所以全部的类都继承了它。子类覆盖finalize()方法以整理系统资源或者被执行其余清理工做。finalize()方法是在垃圾收集器删除对象以前对这个对象调用的。
76.try-catch-finally 中哪一个部分能够省略?
catch部分能够省略,也能够有多个。
77.try-catch-finally 中,若是 catch 中 return 了,finally 还会执行吗?
会,finally语句块必定会执行。
78.常见的异常类有哪些?
省略……
79.http 响应码 301 和 302 表明的是什么?有什么区别?
80.forward 和 redirect 的区别?
81.简述 tcp 和 udp的区别?
82.tcp 为何要三次握手,两次不行吗?为何?
83.说一下 tcp 粘包是怎么产生的?
84.OSI 的七层模型都有哪些?
85.get 和 post 请求有哪些区别?
86.如何实现跨域?
87.说一下 JSONP 实现原理?
9、设计模式
88.说一下你熟悉的设计模式?
89.简单工厂和抽象工厂有什么区别?
90.为何要使用 spring?
91.解释一下什么是 aop?
92.解释一下什么是 ioc?
93.spring 有哪些主要模块?
94.spring 经常使用的注入方式有哪些?
95.spring 中的 bean 是线程安全的吗?
96.spring 支持几种 bean 的做用域?
97.spring 自动装配 bean 有哪些方式?
98.spring 事务实现方式有哪些?
99.说一下 spring 的事务隔离?
100.说一下 spring mvc 运行流程?
101.spring mvc 有哪些组件?
102.@RequestMapping 的做用是什么?
103.@Autowired 的做用是什么?
104.什么是 spring boot?
105.为何要用 spring boot?
106.spring boot 核心配置文件是什么?
107.spring boot 配置文件有哪几种类型?它们有什么区别?
108.spring boot 有哪些方式能够实现热部署?
109.jpa 和 hibernate 有什么区别?
110.什么是 spring cloud?
111.spring cloud 断路器的做用是什么?
112.spring cloud 的核心组件有哪些?
113.为何要使用 hibernate?
114.什么是 ORM 框架?
115.hibernate 中如何在控制台查看打印的 sql 语句?
116.hibernate 有几种查询方式?
117.hibernate 实体类能够被定义为 final 吗?
118.在 hibernate 中使用 Integer 和 int 作映射有什么区别?
119.hibernate 是如何工做的?
120.get()和 load()的区别?
121.说一下 hibernate 的缓存机制?
122.hibernate 对象有哪些状态?
123.在 hibernate 中 getCurrentSession 和 openSession 的区别是什么?
124.hibernate 实体类必需要有无参构造函数吗?为何?
125.mybatis 中 #{}和 ${}的区别是什么?
126.mybatis 有几种分页方式?
127.RowBounds 是一次性查询所有结果吗?为何?
128.mybatis 逻辑分页和物理分页的区别是什么?
129.mybatis 是否支持延迟加载?延迟加载的原理是什么?
130.说一下 mybatis 的一级缓存和二级缓存?
131.mybatis 和 hibernate 的区别有哪些?
132.mybatis 有哪些执行器(Executor)?
133.mybatis 分页插件的实现原理是什么?
134.mybatis 如何编写一个自定义插件?
135.rabbitmq 的使用场景有哪些?
136.rabbitmq 有哪些重要的角色?
137.rabbitmq 有哪些重要的组件?
138.rabbitmq 中 vhost 的做用是什么?
139.rabbitmq 的消息是怎么发送的?
140.rabbitmq 怎么保证消息的稳定性?
141.rabbitmq 怎么避免消息丢失?
142.要保证消息持久化成功的条件有哪些?
143.rabbitmq 持久化有什么缺点?
144.rabbitmq 有几种广播类型?
145.rabbitmq 怎么实现延迟消息队列?
146.rabbitmq 集群有什么用?
147.rabbitmq 节点的类型有哪些?
148.rabbitmq 集群搭建须要注意哪些问题?
149.rabbitmq 每一个节点是其余节点的完整拷贝吗?为何?
150.rabbitmq 集群中惟一一个磁盘节点崩溃了会发生什么状况?
151.rabbitmq 对集群节点中止顺序有要求吗?
152.kafka 能够脱离 zookeeper 单独使用吗?为何?
153.kafka 有几种数据保留的策略?
154.kafka 同时设置了 7 天和 10G 清除数据,到第五天的时候消息达到了 10G,这个时候 kafka 将如何处理?
155.什么状况会致使 kafka 运行变慢?
156.使用 kafka 集群须要注意什么?
157.zookeeper 是什么?
158.zookeeper 都有哪些功能?
159.zookeeper 有几种部署模式?
160.zookeeper 怎么保证主从节点的状态同步?
161.集群中为何要有主节点?
162.集群中有 3 台服务器,其中一个节点宕机,这个时候 zookeeper 还可使用吗?
163.说一下 zookeeper 的通知机制?
164.数据库的三范式是什么?
165.一张自增表里面总共有 7 条数据,删除了最后 2 条数据,重启 mysql 数据库,又插入了一条数据,此时 id 是几?
166.如何获取当前数据库版本?
167.说一下 ACID 是什么?
168.char 和 varchar 的区别是什么?
169.float 和 double 的区别是什么?
170.mysql 的内链接、左链接、右链接有什么区别?
171.mysql 索引是怎么实现的?
172.怎么验证 mysql 的索引是否知足需求?
173.说一下数据库的事务隔离?
174.说一下 mysql 经常使用的引擎?
175.说一下 mysql 的行锁和表锁?
176.说一下乐观锁和悲观锁?
177.mysql 问题排查都有哪些手段?
178.如何作 mysql 的性能优化?
179.redis 是什么?都有哪些使用场景?
180.redis 有哪些功能?
181.redis 和 memecache 有什么区别?
182.redis 为何是单线程的?
183.什么是缓存穿透?怎么解决?
184.redis 支持的数据类型有哪些?
185.redis 支持的 java 客户端都有哪些?
186.jedis 和 redisson 有哪些区别?
187.怎么保证缓存和数据库数据的一致性?
188.redis 持久化有几种方式?
189.redis 怎么实现分布式锁?
190.redis 分布式锁有什么缺陷?
191.redis 如何作内存优化?
192.redis 淘汰策略有哪些?
193.redis 常见的性能问题有哪些?该如何解决?
194.说一下 jvm 的主要组成部分?及其做用?
195.说一下 jvm 运行时数据区?
196.说一下堆栈的区别?
197.队列和栈是什么?有什么区别?
198.什么是双亲委派模型?
199.说一下类加载的执行过程?
200.怎么判断对象是否能够被回收?
201.java 中都有哪些引用类型?
202.说一下 jvm 有哪些垃圾回收算法?
203.说一下 jvm 有哪些垃圾回收器?
204.详细介绍一下 CMS 垃圾回收器?
205.新生代垃圾回收器和老生代垃圾回收器都有哪些?有什么区别?
206.简述分代垃圾回收器是怎么工做的?
207.说一下 jvm 调优的工具?
208.经常使用的 jvm 调优的参数都有哪些?