JAVA面试题汇总附答案,java面试2020,2021

1.JDK 和 JRE 有什么区别?
JRE是Java Runtime Environment的缩写,顾名思义是java运行时环境,包含了java虚拟机,java基础类库。是使用java语言编写的程序运行所需要的软件环境,是提供给想运行java程序的用户使用的,还有所有的Java类库的class文件,都在lib目录下,并且都打包成了jar。
 Jdk是Java Development Kit的缩写,顾名思义是java开发工具包,是程序员使用java语言编写java程序所需的开发工具包,是提供给程序员使用的。JDK包含了JRE,同时还包含了编译java源码的编译器javac,还包含了很多java程序调试和分析的工具:jconsole,jvisualvm等工具软件,还包含了java程序编写所需的文档和demo例子程序。

2.== 和 equals 的区别是什么?
java当中的数据类型和“”的含义:
1.基本数据类型:byte,short,char,int,long,float,double,boolean。
他们之间的比较,应用双等号(
),比较的是他们的值。
2.引用数据类型:
当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址(确切的说,是 堆内存地址)。
注:对于第二种类型,除非是同一个new出来的对象,他们的比较后的结果为true,否 则比较后结 果为false。因为每new一次,都会重新开辟堆内存空间

3.hashcode相等的两个对象一定==相等么?equals相等么?反过来【两个对象用equals比较相等,那它们的hashcode】相等么?
hashCode是所有java对象的固有方法,如果不重载的话,返回的实际上是该对象在 jvm的堆上的内存地址,而不同对象的内存地址肯定不同,所以这个hashCode也就肯定不同了。如果重载了的话,由于采用的算法的问题,有可能导致两个不同对象的hashCode相同

默认情况下:
1.在 Java 应用程序执行期间,在对同一对象多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是将对象进行 equals 比较时所用的信息没有被修改。从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致。
2.如果根据 equals(Object) 方法,两个对象是相等的,那么对这两个对象中的每个对象调用 hashCode 方法都必须生成相同的整数结果。
3.如果根据 equals(java.lang.Object) 方法,两个对象不相等,那么对这两个对象中的任一对象上调用 hashCode 方法不 要求一定生成不同的整数结果。但是,程序员应该意识到,为不相等的对象生成不同整数结果可以提高哈希表的性能。

4.final 在 Java 中有什么作用?
a) final可以修饰类,这样的类不能被继承。
b) final可以修饰方法,这样的方法不能被重写。
c) final可以修饰变量,这样的变量的值不能被修改,是常量。
5.Java 中的 Math.round(-1.5) 等于多少?
1.floor 返回不大于的最大整数
2.round 则是4舍5入的计算,入的时候是到大于它的整数
round方法,它表示“四舍五入”,算法为Math.floor(x+0.5),即将原来的数字加上0.5后再 向下取整,所以,Math.round(11.5)的结果为12,Math.round(-11.5)的结果为-11。
3.ceil 则是不小于他的最小整数

Math.floor Math.round Math.ceil
1.4 1 1 2
1.5 1 2 2
1.6 1 2 2
-1.4 -2 -1 -1
-1.5 -2 -1 -1
-1.6 -2 -2 -1

6.String 属于基础的数据类型吗?
java 中String 是个对象,是引用类型 ,基础类型与引用类型的区别是,基础类型只表示简单的字符或数字,引用类型可以是任何复杂的数据结构 ,基本类型仅表示简单的数据类型,引用类型可以表示复杂的数据类型,还可以操作这种数据类型的行为 。
java虚拟机处理基础类型与引用类型的方式是不一样的,对于基本类型,java虚拟机会为其分配数据类型实际占用的内存空间,而对于引用类型变量,他仅仅是一个指向堆区中某个实例的指针。
String不是基本数据类型,而是一个类(class),是C++、java等编程语言中的字符串。
String类是不可变的,对String类的任何改变,都是返回一个新的String类对象。 String 对象是 System.Char 对象的有序集合,用于表示字符串。String 对象的值是该有序集合的内容,并且该值是不可变的。
因为,java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。
为了提高效率节省空间,我们应该用StringBuffer类。
而java的8大基本数据类型分别是:
整数类 byte, short, int, long
浮点类 double, float
逻辑类 boolean
文本类 char
7.Java 中操作字符串都有哪些类?它们之间有什么区别?
1.查找字符串 indexOf(String s) ,lastIndexOf(String str)
String str =“We are students”;
int size = str.indexOf(“a”); // 变量size的值是3
2.使用charAt()方法可将指定索引处的字符返回。
String str = “hello word”;
char mychar = str.charAt(5); // mychar的结果是w

获取子字符串
substring(int beginIndex)
该方法返回的是从指定的索引位置开始截取知道该字符串结尾的子串。

String str = “Hello word”;
String substr = str.substring(3); //获取字符串,此时substr值为lo word
1
2
substring(int beginIndex, int endIndex)
beginIndex : 开始截取子字符串的索引位置
endIndex:子字符串在整个字符串中的结束位置
String str = “Hello word”;
String substr = str.substring(0,3); //substr的值为hel
1
2
去除空格
trim()方法返回字符串的副本,忽略前导空格和尾部空格。

字符串替换
replace(oldchar,newChar)方法可实现将指定的字符或字符串替换成新的字符或字符串
oldChar:要替换的字符或字符串
newChar:用于替换原来字符串的内容
如果要替换的字符oldChar在字符串中重复出现多次,replace()方法会将所有oldChar全部替换成newChar。需要注意的是,要替换的字符oldChar的大小写要与原字符串中字符的大小写保持一致。

String str= “address”;
String newstr = str.replace(“a”, “A”);// newstr的值为Address
1
2
判断字符串的开始与结尾
startsWith()方法与endsWith()方法分别用于判断字符串是否以指定的内容开始或结束。这两个方法的返回值都为boolean类型。

  1. startsWith(String prefix)
    该方法用于判断当前字符串对象的前缀是否是参数指定的字符串。
  2. endsWith(String suffix)
    该方法用于判断当前字符串是否以给定的子字符串结束

3.判断字符串是否相等
equals(String otherstr)
如果两个字符串具有相同的字符和长度,则使用equals()方法比较时,返回true。同时equals()方法 比较时区分大小写。
equalsIgnoreCase(String otherstr)
equalsIgnoreCase()方法与equals()类型,不过在比较时忽略了大小写。
按字典顺序比较两个字符串
compareTo()方法为按字典顺序比较两个字符串,该比较基于字符串中各个字符的Unicode值,按字 典顺序将此String对象表示的字符序列与参数字符串所表示的字符序列进行比较。如果按字典顺序此String对象位于参数字符串之前,则比较结果为一个负整数;如果按字典顺序此String对象位于参数字符串之后,则比较结果为一个正整数;如果这两个字符串相等,则结果为0.
str.compareTo(String otherstr);
1
字母大小写转换
字符串的toLowerCase()方法可将字符串中的所有字符从大写字母改写为小写字母,而tuUpperCase()方法可将字符串中的小写字母改写为大写字母。

str.toLowerCase();
str.toUpperCase();

字符串分割
使用split()方法可以使字符串按指定的分隔字符或字符串对内容进行分割,并将分割后的结果存放在字符数组中。

str.split(String sign);
1
sign为分割字符串的分割符,也可以使用正则表达式。
没有统一的对字符串进行分割的符号,如果想定义多个分割符,可使用符号“|”。例如,“,|=”表示分割符分别为“,”和“=”。

str.split(String sign, in limit);
1
该方法可根据给定的分割符对字符串进行拆分,并限定拆分的次数

获取字符串的长度 length()
把字符串转化为相应的数值
int型Integer.parseInt(字符串)
double型Double.valueOf(字符串).doubleValue()
字符串数组与字符串之间的转换
一个字符串可以变为一个字符 数组,同样,也可以把一个字符数组,变为一个字符串。
在String类中提供了以下操作方法:
将字符串变为字符数组:
public char[] toCharArray()
public String(char[] value)
public String(char[] value,int offset,int count)

public class StringAPIDemo01{
public static void main(String args[]){
String str1 = “hello” ; // 定义字符串
char c[] = str1.toCharArray() ; // 将一个字符串变为字符数组
for(int i=0;i<c.length;i++){ // 循环输出
System.out.print(c[i] + “、”) ;
}
System.out.println("") ; // 换行
String str2 = new String© ; // 将全部的字符数组变为String
String str3 = new String(c,0,3) ; // 将部分字符数组变为String
System.out.println(str2) ; // 输出字符串
System.out.println(str3) ; // 输出字符串
}
};

13
字符串与byte数组的转换
byte数组(字节数组),在一般的IO操作中会经常使用到。
在String类中提供了以下的方法可以进行字符串与字节数组间的转换:
字符串变为字节数组:public byte[] getBytes()
将一个字节数组变为字符串:
将全部字节数组变为String:pbulic String(byte[] bytes)
将部分字节数组变为String:public String(byte[] bytes,int offset,int length)

public class StringAPIDemo03{
public static void main(String args[]){
String str1 = “hello” ; // 定义字符串
byte b[] = str1.getBytes() ; // 将字符串变为byte数组
System.out.println(new String(b)) ; // 将全部的byte数组变为字符串
System.out.println(new String(b,1,3)) ; // 将部分的byte数组变为字符串
}
};

8.String str="i"与 String str=new String(“i”)一样吗?
9.如何将字符串反转?
10.String 类的常用方法都有那些?
11.抽象类必须要有抽象方法吗?
12.普通类和抽象类有哪些区别?
13.抽象类能使用 final 修饰吗?
14.接口和抽象类有什么区别?
15.Java 中 IO 流分为几种?
16.BIO、NIO、AIO 有什么区别?
17.Files的常用方法都有哪些?

容器

18.Java 容器都有哪些?
19.Collection 和 Collections 有什么区别?
20.List、Set、Map 之间的区别是什么?
21.HashMap 和 Hashtable 有什么区别?
22.如何决定使用 HashMap 还是 TreeMap?
23.说一下 HashMap 的实现原理?
24.说一下 HashSet 的实现原理?
25.ArrayList 和 LinkedList 的区别是什么?
26.如何实现数组和 List 之间的转换?
27.ArrayList 和 Vector 的区别是什么?
28.Array 和 ArrayList 有何区别?
29.在 Queue 中 poll()和 remove()有什么区别?
30.哪些集合类是线程安全的?
31.迭代器 Iterator 是什么?
32.Iterator 怎么使用?有什么特点?
33.Iterator 和 ListIterator 有什么区别?
34.怎么确保一个集合不能被修改?

多线程

35.并行和并发有什么区别?
36.线程和进程的区别?
37.守护线程是什么?
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.深拷贝和浅拷贝区别是什么?

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.常见的异常类有哪些?

网络

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 有哪些垃圾回收算法?
203.说一下 JVM 有哪些垃圾回收器?
204.详细介绍一下 CMS 垃圾回收器?
205.新生代垃圾回收器和老生代垃圾回收器都有哪些?有什么区别?
206.简述分代垃圾回收器是怎么工作的?
207.说一下 JVM 调优的工具?
208.常用的 JVM 调优的参数都有哪些?

猜你喜欢

转载自blog.csdn.net/qq_39493521/article/details/112570831