前言
在面试中,Dubbo 这个 RPC 框架的表明做一直是热点,并且面试官也会根据经验从各类角度提问,而且像剥洋葱同样层层深刻底层原理,所以单纯看看常规的面试题是远远不足的,最好仍是可以本身深刻阅读源码。另外一方面,程序猿在平时的工做中又不多接触到源码,并且本身硬啃源码也是困难重重。java
小编分享的这份金三银四Java后端开发面试总结包含了JavaOOP、Java集合容器、Java异常、并发编程、Java反射、Java序列化、JVM、Redis、Spring MVC、MyBatis、MySQL数据库、消息中间件MQ、Dubbo、Linux、ZooKeeper、 分布式&数据结构与算法等26个专题技术点,都是小编在各个大厂总结出来的面试真题,已经有不少粉丝靠这份PDF拿下众多大厂的offer,今天在这里总结分享给到你们!【持续更新中!】面试
完整版Java面试题地址:2021最新面试题合集集锦。算法
序号 |
专题 |
内容 |
连接 |
1 |
中间件 |
Java中间件面试题(2021最新版) |
https://blog.51cto.com/14994509/2692669 |
2 |
微服务 |
Java微服务面试题(2021最新版) |
http://www.javashuo.com/article/p-haiifnkb-vk.html |
3 |
并发编程 |
Java并发编程面试题(2021最新版) |
http://www.javashuo.com/article/p-rirekprn-vk.html |
4 |
Java基础 |
Java基础知识面试题(2021最新版) |
https://blog.51cto.com/blogger/success/2706687 |
5 |
Spring Boot |
Spring Boot面试题(2021最新版) |
持续更新中! |
6 |
Redis |
Redis面试题(2021最新版) |
持续更新中! |
7 |
Spring MVC |
Spring MVC面试题(2021最新版) |
持续更新中! |
8 |
Spring Cloud |
Spring Cloud面试题(2021最新版) |
持续更新中! |
9 |
MySQL优化 |
MySQL优化面试题(2021最新版) |
持续更新中! |
10 |
JVM |
JVM性能调优面试题(2021最新版) |
持续更新中! |
11 |
Linux |
Linux面试题(2021最新版) |
持续更新中! |
12 |
Mybatis |
Mybatis面试题(2021最新版) |
持续更新中! |
13 |
网络编程 |
TCP,UDP,Socket,Http网络编程面试题(2021最新版) |
持续更新中! |
14 |
设计模式 |
设计模式面试题(2021最新版) |
持续更新中! |
15 |
大数据 |
大数据面试题100道(2021最新版) |
持续更新中! |
16 |
Tomcat |
Tomcat面试题(2021最新版) |
持续更新中! |
17 |
多线程 |
多线程面试题(2021最新版) |
持续更新中! |
18 |
Nginx |
Nginx_BIO_NIO_AIO面试题(2021最新版) |
持续更新中! |
19 |
memcache |
memcache面试题(2021最新版) |
持续更新中! |
20 |
java异常 |
java异常面试题(2021最新版) |
持续更新中! |
21 |
Java虚拟机 |
Java虚拟机面试题(2021最新版) |
持续更新中! |
22 |
Java集合 |
Java集合面试题(2021最新版) |
持续更新中! |
23 |
Git经常使用命令 |
Git经常使用命令(2021最新版) |
持续更新中! |
24 |
Elasticsearch |
Elasticsearch面试题(2021最新版) |
持续更新中! |
25 |
Dubbo |
Dubbo面试题(2021最新版) |
持续更新中! |
1、Java概述
1. 何为编程

2. 什么是Java

3. jdk1.5以后的三大版本

4. Jdk和Jre和JVM的区别

5. 什么是跨平台性?原理是什么
- 所谓跨平台性,是指java语言编写的程序,一次编译后,能够在多个系统平台上运行。
- 实现原理:Java程序是经过java虚拟机在系统平台上运行的,只要该系统能够安装相应的java虚拟机,该系统就能够运行java程序。
6. Java语言有哪些特色
- 简单易学(Java语言的语法与C语言和C++语言很接近)
- 面向对象(封装,继承,多态)
- 平台无关性(Java虚拟机实现平台无关性)
- 支持网络编程而且很方便(Java语言诞生自己就是为简化网络编程设计的)
- 支持多线程(多线程机制使应用程序在同一时间并行执行多项任)
- 健壮性(Java语言的强类型机制、异常处理、垃圾的自动收集等)
- 安全性好
7. 什么是字节码?采用字节码的最大好处是什么

8. 什么是Java程序的主类?应用程序和小程序的主类有何不一样?

9. Java应用程序与小程序之间有那些差异?

10. Java和C++的区别

11. Oracle JDK 和 OpenJDK 的对比

2、基础语法
数据类型
12. Java有哪些数据类型

13. switch 是否能做用在 byte 上,是否能做用在 long 上,是否能做用在 String 上

14. 用最有效率的方法计算 2 乘以 8
- 2 << 3(左移 3 位至关于乘以 2 的 3 次方,右移 3 位至关于除以 2 的 3 次方)。
15. Math.round(11.5) 等于多少?Math.round(-11.5)等于多少
- Math.round(11.5)的返回值是 12,Math.round(-11.5)的返回值是-11。四舍五入的原理是在参数上加 0.5 而后进行下取整。
16. float f=3.4;是否正确

17. short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗

编码
18. Java语言采用何种编码方案?有何特色?
- Java语言采用Unicode编码标准,Unicode(标准码),它为每一个字符制订了一个惟一的数值,所以在任何的语言,平台,程序均可以放心的使用。
注释
19. 什么Java注释

访问修饰符
20. 访问修饰符 public,private,protected,以及不写(默认)时的区别

运算符
21. &和&&的区别

关键字
22. Java 有没有 goto
- goto 是 Java 中的保留字,在目前版本的 Java 中没有使用。
23. final 有什么用?

24. final finally finalize区别

25. this关键字的用法

26. super关键字的用法

class Person{
protected String name;
public Person(String name) {
this.name = name;
}
}
class Student extends Person{
private String name;
public Student(String name, String name1) {
super(name);
this.name = name1;
}
public void getInfo(){
System.out.println(this.name);
//Child
System.out.println(super.name);
//Father
}
}
public class Test {
public static void main(String[] args) {
Student s1 = new Student("Father","Child");
s1.getInfo();
}
}

27. this与super的区别

28. static存在的主要意义

29. static的独特之处

30. static应用场景

31. static注意事项
- 一、静态只能访问静态。
- 二、非静态既能够访问非静态的,也能够访问静态的
流程控制语句
32. break ,continue ,return 的区别及做用
- break 跳出总上一层循环,再也不执行循环(结束当前的循环体)
- continue 跳出本次循环,继续执行下次循环(结束正在执行的循环 进入下一个循环条件)
- return 程序返回,再也不执行下面的代码(结束当前的方法 直接返回)
33. 在 Java 中,如何跳出当前的多重嵌套循环

3、面向对象
面向对象概述
34. 面向对象和面向过程的区别

面向对象三大特性
35. 面向对象的特征有哪些方面

36. 什么是多态机制?Java语言是如何实现多态的?

37. 面向对象五大基本原则是什么(可选)

38. 抽象类和接口的对比
- 抽象类是用来捕捉子类的通用特性的。接口是抽象方法的集合。
- 从设计层面来讲,抽象类是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行为的规范。
相同点 sql
- 接口和抽象类都不能实例化
- 都位于继承的顶端,用于被其余实现或继承
- 都包含抽象方法,其子类都必须覆写这些抽象方法
不一样点数据库

39. 普通类和抽象类有哪些区别?
- 普通类不能包含抽象方法,抽象类能够包含抽象方法。
- 抽象类不能直接实例化,普通类能够直接实例化。
40. 抽象类能使用 final 修饰吗?
不能,定义抽象类就是让其余类继承的,若是定义为 fifinal 该类就不能被继承,这样彼此就会产生矛盾,因此 fifinal 不能修饰抽象类 编程
41. 建立一个对象用什么关键字?对象实例与对象引用有何不一样?

变量与方法
42. 成员变量与局部变量的区别有哪些

43. 在Java中定义一个不作事且没有参数的构造方法的做用

44. 在调用子类构造方法以前会先调用父类没有参数的构造方法,其目的是?
帮助子类作初始化工做。小程序
45. 一个类的构造方法的做用是什么?若一个类没有声明构造方法,改程序能正确执行吗?为何?
主要做用是完成对类对象的初始化工做。能够执行。由于一个类即便没有声明构造方法也会有默认的不带参数的构造方法后端
46. 构造方法有哪些特性?
- 名字与类名相同;
- 没有返回值,但不能用void声明构造函数;
- 生成类的对象时自动执行,无需调用。
47. 静态变量和实例变量区别

48. 静态变量与普通变量区别

49. 静态方法和实例方法有何不一样?

50. 在一个静态方法内调用一个非静态成员为何是非法的?
- 因为静态方法能够不经过对象进行调用,所以在静态方法里,不能调用其余非静态变量,也不能够访问非静态变量成员。
51. 什么是方法的返回值?返回值的做用是什么?

内部类
52. 什么是内部类?

53. 内部类的分类有哪些




54. 内部类的优势

55. 内部类有哪些应用场景
- 一些多算法场合
- 解决一些非面向对象的语句块。
- 适当使用内部类,使得代码更加灵活和富有扩展性。
- 当某个类除了它的外部类,再也不被其余的类使用时。
56. 局部内部类和匿名内部类访问局部变量的时候,为何变量必需要加上final?

57. 内部类相关,看程序说出运行结果

重写与重载
58. 构造器(constructor)是否可被重写(override)
构造器不能被继承,所以不能被重写,但能够被重载。设计模式
59. 重载(Overload)和重写(Override)的区别。重载的方法可否根据返回类型进行区分?
- 方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,然后者实现的是运行时的多态性。
- 重载:发生在同一个类中,方法名相同参数列表不一样(参数类型不一样、个数不一样、顺序不一样),与方法返回值和访问修饰符无关,即重载的方法不能根据返回类型进行区分
- 重写:发生在父子类中,方法名、参数列表必须相同,返回值小于等于父类,抛出的异常小于等于父类,访问修饰符大于等于父类(里氏代换原则);若是父类方法访问修饰符为private则子类中就不是重写。
对象相等判断
60. == 和 equals 的区别是什么


61. hashCode 与 equals (重要)

62. 对象的相等与指向他们的引用相等,二者有什么不一样?
- 对象的相等 比的是内存中存放的内容是否相等而 引用相等 比较的是他们指向的内存地址是否相等。
值传递
63. 当一个对象被看成参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里究竟是值传递仍是引用传递

64. 为何 Java 中只有值传递





65. 值传递和引用传递有什么区别

Java包
66. JDK 中经常使用的包有哪些
- java.lang:这个是系统的基础类;
- java.io:这里面是全部输入输出有关的类,好比文件操做等;
- java.nio:为了完善 io 包中的功能,提升 io 包中性能而写的一个新包;
- java.net:这里面是与网络有关的类;
- java.util:这个是系统辅助类,特别是集合类;
- java.sql:这个是数据库操做的类。
67. import java和javax有什么区别

4、IO流
68. java 中 IO 流分为几种?



69. BIO,NIO,AIO 有什么区别?

70. Files的经常使用方法都有哪些?
- Files. exists():检测文件路径是否存在。
- Files. createFile():建立文件。
- Files. createDirectory():建立文件夹。
- Files. delete():删除一个文件或目录。
- Files. copy():复制文件。
- Files. move():移动文件。
- Files. size():查看文件个数。
- Files. read():读取文件。
- Files. write():写入文件。
5、反射
71. 什么是反射机制?

72. 反射机制优缺点

73. 反射机制的应用场景有哪些?

74. Java获取反射的三种方法

6、经常使用API
String相关
75. 字符型常量和字符串常量的区别

76. 什么是字符串常量池?

77. String 是最基本的数据类型吗

78. String有哪些特性

79. String为何是不可变的吗?

80. String真的是不可变的吗?


81. 是否能够继承 String 类
String 类是 fifinal 类,不能够被继承。 数组
82. String str="i"与 String str=new String(“i”)同样吗?
不同,由于内存的分配方式不同。String str="i"的方式,java 虚拟机会将其分配到常量池中;而 String str=new String(“i”) 则会被分到堆内存中。
83. String s = new String(“xyz”);建立了几个字符串对象

84. 如何将字符串反转?

85. 数组有没有 length()方法?String 有没有 length()方法
数组没有 length()方法 ,有 length 的属性。String 有 length()方法。JavaScript中,得到字符串的长度是经过 length 属性获得的,这一点容易和 Java 混淆。
86. String 类的经常使用方法都有那些?
- indexOf():返回指定字符的索引。
- charAt():返回指定索引处的字符。
- replace():字符串替换。
- trim():去除字符串两端空白。
- split():分割字符串,返回一个分割后的字符串数组。
- getBytes():返回字符串的 byte 类型数组。
- length():返回字符串长度。
- toLowerCase():将字符串转成小写字母。
- toUpperCase():将字符串转成大写字符。
- substring():截取字符串。
- equals():字符串比较。
87. 在使用 HashMap 的时候,用 String 作 key 有什么好处?
HashMap 内部实现是经过 key 的 hashcode 来肯定 value 的存储位置,由于字符串是不可变的,因此当建立字符串时,它的 hashcode 被缓存下来,不须要再次计算,因此相比于其余对象更快。
88. String和StringBuffer、StringBuilder的区别是什么?String为何是不可变的

包装类相关
89. 自动装箱与拆箱
- 装箱:将基本类型用它们对应的引用类型包装起来;
- 拆箱:将包装类型转换为基本数据类型;
90. int 和 Integer 有什么区别

91. Integer a= 127 与 Integer b = 127相等吗

面试题答案解析完整文档:【Java基础知识面试题【附答案解析】】
最后
小编分享的文章到这里就结束了,整理不易,欢迎你们一块儿交流,喜欢小编分享的文章记得关注我点赞哟,感谢支持!