春招在即,想让面试官在短短的几十分钟内就认可你的能力?
想在最快的时间内收获 Java 技术栈最核心的知识点?
想要更全面、更深入的了解 Java 技术?
这里能够给你想要的所有答案?
给准备面试的大家,特别总结了 Java 程序员面试必备的面试题库
共含208道面试题,涵盖十九个模块:从 Java 基础到框架再到JVM,提供详细解读和代码案例,让你知其然还知其所以然。
而且啊,所总结的这 200+ 道都是必考题!
如果这些都能看懂的话,去面试就十拿九稳了!
以下问题的答案?
限于篇幅答案不能全部放出,扫码查看完整原文~
适合人群:
想要面试的初/中/高级 Java 程序员
想要查漏补缺的人
想要不断完善和扩充自己 Java技术栈的人
原本就掌握了技术却不知道怎么表达的人
有上进心,也愿意学习的人
Java面试官
说了这么多,直奔主题,这套面试必备的《Java 最常见 200+ 面试题全解析》到底优质在哪?
一、 面试题覆盖全,且解析全面
这份面试题总内容包含了十九个模块:Java 基础、容器、多线程、反射、对象拷贝、Java Web 模块、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、Mybatis、RabbitMQ、Kafka、Zookeeper、MySql、Redis、JVM 。
如下图所示:
二 、专业的作者,注重实战经验
作者老王,十余年编程从业经验,曾就职于 360,有着丰富的大型系统设计、开发和调优的经验,在不断探索和学习的过程中,积累了宝贵的编程经验。并且希望在自我解剖和记录的同时,可以帮助到更多的人!
老王说:“我从 2009 年开始参加编程工作,到现在为止还觉得要学的东西很多,学习的过程也给我带来了很多成就感,成就感推动着我学习更多的技术知识。
刚开始的时候我还觉得,总结的这 200+ 道都是必考题,这么做是不是帮人“作弊”的嫌疑,最后我想通了,这是一件值得去做的事儿。
因为第一:让更多的人因此而学到了更多的知识,这是一件大好事。第二:这只是经验的高度提炼,让那些原本就掌握了技术却不知道怎么表达的人,学会如何在面试中展示自己!
三、十元面试锦囊,助力迈进BAT
重要的是…这份Java 200+面试题全解析
居然只用10元就可以订阅了???
而十元…
而十元,包含了这么多到面试题和全面的解析!
具体面试题如下?
一、Java 基础
1.JDK 和 JRE 有什么区别?
答:JDK是java必备的一个工具包,它提供java的运行环境和开发环境,JRE只是java的运行环境
2. == 和 equals 的区别是什么?
答:== 比较的是值得引用地址,就是他们的存储空间的位置是否相同,equals是比较两个变量的内容是否相等
但是equals在比较对象的时候和==是等效的,因为对象的equals的方法来源于object,而object中的equals实现的方式还是==,所以如果没有去自定义重写equals方法的话,object的equals的方法和==号是等效的。
3. 两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?
答:这个是不一定的,两个对象的hashcode相同,他们的值可能不同,所以equals也可能会false.
4. final 在 java 中有什么作用?
答:final关键字意思是不可修改的,不可改变的
final修饰类:类不能被继承
final修饰方法:方法不能被重写
final修饰变量:变量必须初始化,初始化之后不能被改变
5. java 中的 Math.round(-1.5) 等于多少?
答:-1 ,正0.5是向上取整,-0.5是直接舍弃
6. String 属于基础的数据类型吗?
答:不属于,String属于引用数据类型
7. java 中操作字符串都有哪些类?它们之间有什么区别?
答:操作字符串有String,StringBuffer,StringBuilder
String和StringBuffer和StringBuilder区别在于,String声明的是一个不可变的对象,他每次操作都会创建新的对象,然后将指针指向新的对象,而其他两个都是在原有的对象上进行操作,所以对于经常改变的字符串,最好不要使用String
StringBuffer和StringBuilder的区别在于,StringBuffer是线程安全的,而StringBuilder是非线程安全的,所以StringBuilder的性能方面要比StringBuffer要高,单线程环境下推荐使用StringBuilder,多线程环境推荐使用StringBuffer
8. String str="i"与 String str=new String(“i”)一样吗?
答:不一样, 第一个str的内存分配在栈区,第二个str的对象分配在堆区。
9. 如何将字符串反转?
答:使用StringBuffer和StringBuilder中的 reverse() 方法
10. String 类的常用方法都有那些?
- split() :分割字符串方法
- indexof():返回字符串索引方法
- equals():字符串比较方法
- subString():截取字符串方法
- length():返回字符串长度方法
- charAt():返回字符串索引处字符的方法
- replace():字符串替换
- getBytes():返回字符串的byte类型数据
- trim():去除字符串两端空白
- toLowerCase():将字符串转换成小写字母
- toUpperCase():将字符串转换成大写字母
11. 抽象类必须要有抽象方法吗?
答:不一定,抽象类不一定要有抽象方法,但是有抽象方法的类一定是抽象类
12. 普通类和抽象类有哪些区别?
答:普通类不能包含抽象方法,抽象类可以包含抽象方法,普通类可以直接实例化,抽象类不可以直接实例化,
13. 抽象类能使用 final 修饰吗?
答:不可以,抽象类是要被别人继承的,final修饰的类不能被继承
14. 接口和抽象类有什么区别?
接口是被interface修饰,接口,抽象类是被abstract
接口不能有构造方法,抽象类可以有
接口可以被子类实现多个,抽象类只能被继承
接口不能有main方法,抽象类可以有main方法还能正常运行
15. java 中 IO 流分为几种?
答:字符流(reader)和字节流(Stream),里面又分为输入流和输出流
16. BIO、NIO、AIO 有什么区别?
BIO就是同步阻塞IO,就是我们平常使用的传统IO,特点是使用简单方便,并发处理能力低
NIO就是同步非阻塞IO,是传统IO的升级,客户端和服务端通过Channel通道通讯的,实现了多路复杂
AIO就是异步非阻塞IO,是NIO的升级,也叫NIO2,实现了异步非阻塞IO,异步IO的操作基于时间和回调机制
17. Files的常用方法都有哪些?
Files.exists();检查文件是否存在
Files.createFile();创建文件
Files.createDerectory();创建文件夹
Files.delete();删除一个文件或者文件夹
Files.copy();复制文件
Files.move();移动文件
Files.size();查询文件个数
Files.read();读取文件
Files.write();写入文件
二、容器
18. java 容器都有哪些?
数组、String 和java.util下的集合容器
19. Collection 和 Collections 有什么区别?
Collection是list和set的顶级接口,Collections是一个对于一个集合的工具类,提供了一系列对集合操作的静态方法,对集合里面的元素进行排序,搜索和线程安全化等各种操作
20. List、Set、Map 之间的区别是什么?
List:一个数组形式的有序集合,他下面有两个实现类,Arraylist、Linkedlist
Set:set集合中不能存储重复的元素,他下面有两个实现类,hashset、treeset
Map:map是一个以键值对存储形式的集合,他下面有两个实现类,hashmap、treemap
21. HashMap 和 Hashtable 有什么区别?
hashMap是线程不安全的,Hashtable是线程安全的,所以Hashtable的性能上没有hashMap好。hashmap键值可以为空,hashtable的键值不能为空
22. 如何决定使用 HashMap 还是 TreeMap?
TreeMap集合中,当你把元素存储进去的时候,在他集合里面会自动给元素进行排序,如果说元素需要排序的话可以使用TreeMap。其他时候可以使用hashMap
23. 说一下 HashMap 的实现原理?
HashMap是以一种数组加链表结构存储元素的,默认初始化长度为16,负载因子为0.75,超过这个容量会自动扩大一倍,hashmap他是通过put()和get()方法来存储和获取元素的,当我们将键值传给put方法时,他会调用对象的hashcode()来获取hashcode值,然后通过hashcode找到数组中bucket的位置来存储元素,当获取元素时,通过键对象的equals方法来找到正确的键值,然后返回正确的对象
24. 说一下 HashSet 的实现原理?
25. ArrayList 和 LinkedList 的区别是什么?
Arraylist是以数组的形式有序的存储数据,他查询比较快,但是插入和删除慢
LinkedList是以双向链表的形式存储数据的,他查询比较慢一点,但是插入和删除慢
26. 如何实现数组和 List 之间的转换?
数组转list: Arrays.asList(a); //a为数组
list转数组:wanlist.toArray(wanlist.size());//wanlist为集合
27. ArrayList 和 Vector 的区别是什么?
Arraylist和vector在数据结构上差不多,但是Vector的方法都是synchronized修饰的,所以他是线程安全的,而Arraylist不是线程安全的,所以Arraylist在性能上面要比vector要好,当集合中的元素超过容量大小时,Arraylist是自动扩容50%,而vector则是扩容翻倍
28. Array 和 ArrayList 有何区别?
Array相当于是数组而Arraylist相当于动态数组就是集合
Array中他只能存储相同类型的元素而Arraylist可以存储不同类型的元素,Array的长度是固定的而Arraylist的长度是可变的
29. 在 Queue 中 poll()和 remove()有什么区别?
30. 哪些集合类是线程安全的?
hashtable,vector
31. 迭代器 Iterator 是什么?
32. Iterator 怎么使用?有什么特点?
33. Iterator 和 ListIterator 有什么区别?
34. 怎么确保一个集合不能被修改?
采用Collections包下的unmodifiableMap方法,通过这个方法返回的map,是不可以修改的。他会报 java.lang.UnsupportedOperationException错。
三、多线程
35. 并行和并发有什么区别?
并发:在同一时间内,只有一个处理器处理多个请求
并行:在同一时间内,多个处理器处理多个请求
相当于并发就是一个人吃三个馒头,并行就是三个人吃三个馒头
36. 线程和进程的区别?
线程是进程的一个组成部分,进程是系统程序中的一个应用程序
进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位
37. 守护线程是什么?
守护线程,专门用于服务其他的线程,比如垃圾回收线程,就是最典型的守护线程。
38. 创建线程有哪几种方式?
继承Thread类或者实现runnable接口
还有一种就是实现callable接口,这种是带返回值的线程
39. 说一下 runnable 和 callable 有什么区别?
runnable和callable的区别在于callable可以有返回值而runnable没有返回值
40. 线程有哪些状态?
新建状态
就绪状态
运行状态
阻塞状态
死亡状态
41. sleep() 和 wait() 有什么区别?
42. notify()和 notifyAll()有什么区别?
43. 线程的 run()和 start()有什么区别?
44.创建线程池有哪几种方式?
45.线程池都有哪些状态?
running、stop、
46. 线程池中 submit()和 execute()方法有什么区别?
都是提交任务到线程池中,submit是有返回值的,execute是没有返回值的
47. 在 java 程序中怎么保证多线程的运行安全?
48. 多线程锁的升级原理是什么?
49. 什么是死锁?
50. 怎么防止死锁?
51. ThreadLocal 是什么?有哪些使用场景?
52. 说一下 synchronized 底层实现原理?
53. synchronized 和 volatile 的区别是什么?
54. synchronized 和 Lock 有什么区别?
synchronized和lock在作用上差不多,但是lock更加的灵活,lock必须有开头和结尾,synchronized则只需要修饰方法和代码块就可以了
55. synchronized 和 ReentrantLock 区别是什么?
56. 说一下 atomic 的原理?
四、反射
57. 什么是反射?
在java运行过程中就可以知道任意一个类的方法和属性,还可以任意调用一个对象的方法和属性
58. 什么是 java 序列化?什么情况下需要序列化?
59. 动态代理是什么?有哪些应用?
60. 怎么实现动态代理?
五、对象拷贝
61. 为什么要使用克隆?
62. 如何实现对象克隆?
63. 深拷贝和浅拷贝区别是什么?
六、Java Web
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 的区别?
75. final、finally、finalize 有什么区别?
76. try-catch-finally 中哪个部分可以省略?
77. try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?
78. 常见的异常类有哪些?
NullpointerExcetion:空指针异常
SQLExcetion:数据库错误
NumberFormatExcetion:数据类型转换错误
八、网络
79. http 响应码 301 和 302 代表的是什么?有什么区别?
80. forward 和 redirect 的区别?
81. 简述 tcp 和 udp的区别?
82. tcp 为什么要三次握手,两次不行吗?为什么?
83. 说一下 tcp 粘包是怎么产生的?
84. OSI 的七层模型都有哪些?
85. get 和 post 请求有哪些区别?
86. 如何实现跨域?
87. 说一下 JSONP 实现原理?
九、设计模式
88. 说一下你熟悉的设计模式?
89. 简单工厂和抽象工厂有什么区别?
十、Spring/Spring MVC
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 的作用是什么?
十一、Spring Boot/Spring Cloud
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 的核心组件有哪些?
十二、Hibernate
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 实体类必须要有无参构造函数吗?为什么?
十三、Mybatis
125. mybatis 中 #{}和 ${}的区别是什么?
126. mybatis 有几种分页方式?
127. RowBounds 是一次性查询全部结果吗?为什么?
128. mybatis 逻辑分页和物理分页的区别是什么?
129. mybatis 是否支持延迟加载?延迟加载的原理是什么?
130. 说一下 mybatis 的一级缓存和二级缓存?
131. mybatis 和 hibernate 的区别有哪些?
132. mybatis 有哪些执行器(Executor)?
133. mybatis 分页插件的实现原理是什么?
134. mybatis 如何编写一个自定义插件?
十四、RabbitMQ
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 对集群节点停止顺序有要求吗?
十五、Kafka
152. kafka 可以脱离 zookeeper 单独使用吗?为什么?
153. kafka 有几种数据保留的策略?
154. kafka 同时设置了 7 天和 10G 清除数据,到第五天的时候消息达到了 10G,这个时候 kafka 将如何处理?
155. 什么情况会导致 kafka 运行变慢?
156. 使用 kafka 集群需要注意什么?
十六、Zookeeper
157. zookeeper 是什么?
158. zookeeper 都有哪些功能?
159. zookeeper 有几种部署模式?
160. zookeeper 怎么保证主从节点的状态同步?
161. 集群中为什么要有主节点?
162. 集群中有 3 台服务器,其中一个节点宕机,这个时候 zookeeper 还可以使用吗?
163. 说一下 zookeeper 的通知机制?
十七、MySql
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 的性能优化?
十八、Redis
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 常见的性能问题有哪些?该如何解决?
十九、JVM
194. 说一下 jvm 的主要组成部分?及其作用?
195. 说一下 jvm 运行时数据区?
196. 说一下堆栈的区别?
197. 队列和栈是什么?有什么区别?
198. 什么是双亲委派模型?
199. 说一下类加载的执行过程?
200. 怎么判断对象是否可以被回收?
201. java 中都有哪些引用类型?
202. 说一下 jvm 有哪些垃圾回收算法?9 说一下 jvm 调优的工具?
208. 常用的 jvm 调优的参数都有哪些?
我们与其羡慕他人的成功,不如从此刻开始,积累足够多的知识和面试经验,为将来进入更好的公司做充分的准备!机会永远属于有准备的人~
点击订阅:《Java 最常见 200+ 面试题全解析》
希望大家学完之后,都能拿到自己心仪的 offer!!
---------------------
作者:GitChat的博客
来源:CSDN
原文:https://blog.csdn.net/valada/article/details/89382217
版权声明:本文为博主原创文章,转载请附上博文链接!