一、Java 基础
1.JDK 和 JRE 有什么区别?
jdk:java development kit
jre:java runtime Environment
jdk是面向开发人员的,是开发工具包,包括开发人员需要用到的一些类。
jre是java运行时环境,包括java虚拟机等,是提供给使用java的人用的
2.== 和 equals 的区别是什么?
==比较的是两个对象,包括对象的地址位,如果比较的两个对象地址位不同,值相同也会返回false
equals比较的是两个字符串的值,只要值相同,就会返回true
篇幅限制下面就只能给大家展示小册部分内容了。包括了:Java面试、Spring、JVM、MyBatis、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafka 面试专题
需要全套资料及答案【点击此处,免费获取全套面试资料】https://bbs.csdn.net/topics/618656674即可免费获取 备注:“CSDN”
3.两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?
不对,hashCode也是可以重写的,所以不一定。
反之,如果equals()相同,那么hashCode是一定相等的。
4.final 在 java 中有什么作用?
修饰类不可被继承;
修饰方法不可被重写;
修饰变量不能被修改。
5.JAVA 中的 Math.round(-1.5) 等于多少?
-1
向上取整Math.ceil();
向下取整Math.floor();
四舍五入Math.round(x); //==Math.floor(x+0.5)
6.String 属于基础的数据类型吗?
不属于,是final修饰的Java类。
java中的基本数据类型:byte、char、short、int、long、float、double、boolean
7.java 中操作字符串都有哪些类?它们之间有什么区别?
String、StringBuffer、StringBuilder
String类型的字符串是不可变的,StringBuffer和StringBuilder是可以对同一个对象做更新操作的
StringBuffer是线程安全的,StringBuilder不是线程安全的。
8.String str="i"与 String str=new String("i")一样吗?
不一样。他们不是同一个对象
前者如果定义多个变量都为相同值的话,会共用同一个地址,创建的对象应该放在了常量池中;
后者是创建了一个新的对象,放在的是堆内存中。
9.如何将字符串反转?
使用StringBuffer 或 StringBuilder 的 reverse 成员方法。
10.String 类的常用方法都有那些?
"".toCharArray("");
"".charAt();
"".split();
"".indexOf();
"".equals();
"".contains();
"".length();
"".subString("");
"".replace("","");
11.抽象类必须要有抽象方法吗?
不是。抽象类可以没有抽象方法,但是如果你的一个类已经声明成了抽象类,即使这个类中没有抽象方法,它也不能再实例化,即不能直接构造一个该类的对象。如果一个类中有了一个抽象方法,那么这个类必须声明为抽象类,否则编译通不过。
12.普通类和抽象类有哪些区别?
普通类可以被继承,不能包含抽象方法,不可以被实现。
抽象类也可被继承,但是子类必须要实现父类中的抽象方法;
抽象类中的方法不能包含主体。
抽象类中的方法在扩展性和延伸性要比普通类的更好;
抽象类可以应用多态,普通类不可以。
13.抽象类能使用 final 修饰吗?
不能。
14.接口和抽象类有什么区别?
接口是要被实现的,抽象类是要被继承;
接口用interface修饰;抽象类使用abstract修饰;
两者均不能被实例化,方法都不包含主体;
一个类只能继承一个抽象类,但是可以实现多个接口。
15.java 中 IO 流分为几种?
字节流:InputStream、OutputStream
字符流:Reader、Writer
字节流是最基本的
1.字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串;
2.字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以。
读文本的时候用字符流,例如txt文件。读非文本文件的时候用字节流,例如mp3。
16.BIO、NIO、AIO 有什么区别?
BIO:Block IO 同步阻塞式 IO
NIO:Non IO 同步非阻塞 IO
AIO:Asynchronous IO 异步非阻塞IO
BIO是一个连接一个线程。JDK4之前的唯一选择
NIO是一个请求一个线程。JDK4之后开始支持,常见聊天服务器
AIO是一个有效请求一个线程。JDK7之后开始支持,常见相册服务器
17.Files的常用方法都有哪些?
file.getName();
file.getPath();
file.delete();
file.exits();
file.createDirectory();
file.copy();
file.move();
file.size();
file.read();
file.write();
18.重写和重载的区别
重载:必须有不同的参数列表;可以有不同的访问修饰符;可以抛出不同的异常;
重写:参数列表必须要与被重写的相同;返回的类型必须保持一致;修饰符和抛出的异常不能在被重写的方法之外
重写是父类与子类的关系,是垂直关系;重载是同一个类方法中的关系,是水平关系。
19.什么是多态
一种事物的多种表现形态就是多态,比如定义一个类为动物,那么动物可以被子类继承,从而实现具体动物的方法。
二、容器
1.java 容器都有哪些?
数组、Util下的容器:Collection(Set、List)、Map
2.Collection 和 Collections 有什么区别?
Collection是集合的接口,其实现类有List和Set;
Collections是工具类,包含许多有关集合操作的静态多态方法,可以直接使用。
3.List、Set、Map 之间的区别是什么?
List:有序集合、元素可重复
Set:元素不可重复,HashSet无序,LinkedHashSet按照插入排序,SortedSet可排序
Map:键值对集合,存储键、值之间的映射。key无序,唯一,value可重复
4.HashMap 和 Hashtable 有什么区别?
HashMap不是线程安全的,HashTable是线程安全的
HashMap允许Null Key和Null Value,HashTable不允许
5.如何决定使用 HashMap 还是 TreeMap?
如果需要得到一个有序的结果应该使用TreeMap
如果不需要排序最好选用HashMap,性能更优
6.说一下 HashMap 的实现原理?
HashMap基于Hash算法实现,通过put(key,value)存储,get(key)来获取value
当传入key时,HashMap会根据key,调用Hash(Object key)方法,计算出Hash值,根据Hash值将Value保存在Node对象里,Node对象保存在数组里。
当计算出的Hash值相同时,称为Hash冲突,HashMap的做法是用链表和红黑树存储相同Hash值的value
当Hash冲突的个数:小于等于8使用链表,大于8使用红黑树解决链表查询慢的问题。
7.说一下 HashSet 的实现原理?
HashSet是基于HashMap实现的,HashSet底层使用HashMap来保存所有元素,因此HashSet的操作相对比较简单,相关HashSet的操作,基本上都是直接调用底层的HashMap的相关方法来完成,HashSet不允许有重复的值,并且元素是无序的