目录
8. 什么是Java程序的主类?应用程序和小程序的主类有何不同?
13. switch 是否能作用在 byte 上,是否能作用在 long 上,是否能作用在 String 上
15. Math.round(11.5) 等于多少?Math.round(-11.5)等于多少
17. short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗
20. 访问修饰符 public,private,protected,以及不写(默认)时的区别
32. break ,continue ,return 的区别及作用
41. 创建一个对象用什么关键字?对象实例与对象引用有何不同?
43. 在Java中定义一个不做事且没有参数的构造方法的作用
44. 在调用子类构造方法之前会先调用父类没有参数的构造方法,其目的是?
45. 一个类的构造方法的作用是什么?若一个类没有声明构造方法,改程序能正确执行吗?为什么?
56. 局部内部类和匿名内部类访问局部变量的时候,为什么变量必须要加上final?
58. 构造器(constructor)是否可被重写(override)
59. 重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分?
63. 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递
82. String str="i"与 String str=new String(“i”)一样吗?
83. String s = new String(“xyz”);创建了几个字符串对象
85. 数组有没有 length()方法?String 有没有 length()方法
87. 在使用 HashMap 的时候,用 String 做 key 有什么好处?
88. String和StringBuffer、StringBuilder的区别是什么?String为什么是不可变的
91. Integer a= 127 与 Integer b = 127相等吗
前言
在面试中,Dubbo 这个 RPC 框架的代表作一直是热点,而且面试官也会根据经验从各种角度提问,并且像剥洋葱一样层层深入底层原理,因此单纯看看常规的面试题是远远不足的,最好还是能够自己深入阅读源码。另一方面,程序猿在平时的工作中又很少接触到源码,而且自己硬啃源码也是困难重重。
小编分享的这份金三银四Java后端开发面试总结包含了JavaOOP、Java集合容器、Java异常、并发编程、Java反射、Java序列化、JVM、Redis、Spring MVC、MyBatis、MySQL数据库、消息中间件MQ、Dubbo、Linux、ZooKeeper、 分布式&数据结构与算法等26个专题技术点,都是小编在各个大厂总结出来的面试真题,已经有很多粉丝靠这份PDF拿下众多大厂的offer,今天在这里总结分享给到大家!【持续更新中!】
完整版Java面试题地址:2021最新面试题合集集锦。
一、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 的对比
二、基础语法
数据类型
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注意事项
- 1、静态只能访问静态。
- 2、非静态既可以访问非静态的,也可以访问静态的
流程控制语句
32. break ,continue ,return 的区别及作用
- break 跳出总上一层循环,不再执行循环(结束当前的循环体)
- continue 跳出本次循环,继续执行下次循环(结束正在执行的循环 进入下一个循环条件)
- return 程序返回,不再执行下面的代码(结束当前的方法 直接返回)
33. 在 Java 中,如何跳出当前的多重嵌套循环
三、面向对象
面向对象概述
34. 面向对象和面向过程的区别
面向对象三大特性
35. 面向对象的特征有哪些方面
36. 什么是多态机制?Java语言是如何实现多态的?
37. 面向对象五大基本原则是什么(可选)
38. 抽象类和接口的对比
- 抽象类是用来捕捉子类的通用特性的。接口是抽象方法的集合。
- 从设计层面来说,抽象类是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行为的规范。
相同点
- 接口和抽象类都不能实例化
- 都位于继承的顶端,用于被其他实现或继承
- 都包含抽象方法,其子类都必须覆写这些抽象方法
不同点
39. 普通类和抽象类有哪些区别?
- 普通类不能包含抽象方法,抽象类可以包含抽象方法。
- 抽象类不能直接实例化,普通类可以直接实例化。
40. 抽象类能使用 final 修饰吗?
不能,定义抽象类就是让其他类继承的,如果定义为 fifinal 该类就不能被继承,这样彼此就会产生矛盾,所以 fifinal 不能修饰抽象类
41. 创建一个对象用什么关键字?对象实例与对象引用有何不同?
变量与方法
42. 成员变量与局部变量的区别有哪些
43. 在Java中定义一个不做事且没有参数的构造方法的作用
44. 在调用子类构造方法之前会先调用父类没有参数的构造方法,其目的是?
帮助子类做初始化工作。
45. 一个类的构造方法的作用是什么?若一个类没有声明构造方法,改程序能正确执行吗?为什么?
主要作用是完成对类对象的初始化工作。可以执行。因为一个类即使没有声明构造方法也会有默认的不带参数的构造方法
46. 构造方法有哪些特性?
- 名字与类名相同;
- 没有返回值,但不能用void声明构造函数;
- 生成类的对象时自动执行,无需调用。
47. 静态变量和实例变量区别
48. 静态变量与普通变量区别
49. 静态方法和实例方法有何不同?
50. 在一个静态方法内调用一个非静态成员为什么是非法的?
- 由于静态方法可以不通过对象进行调用,因此在静态方法里,不能调用其他非静态变量,也不可以访问非静态变量成员。
51. 什么是方法的返回值?返回值的作用是什么?
内部类
52. 什么是内部类?
53. 内部类的分类有哪些
54. 内部类的优点
55. 内部类有哪些应用场景
1. 一些多算法场合
2. 解决一些非面向对象的语句块。
3. 适当使用内部类,使得代码更加灵活和富有扩展性。
4. 当某个类除了它的外部类,不再被其他的类使用时。
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有什么区别
四、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():写入文件。
五、反射
71. 什么是反射机制?
72. 反射机制优缺点
73. 反射机制的应用场景有哪些?
74. Java获取反射的三种方法
六、常用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基础知识面试题【附答案解析】】
最后
小编分享的文章到这里就结束了,整理不易,欢迎大家一起交流,喜欢小编分享的文章记得关注我点赞哟,感谢支持!