Java基础
1、JDK和JRE有什么区别?
JDK是java的开发工具包,有JDK8,9甚至到14的差别,安装以后,不仅包含了java 的开发环境,比如java.exe,还包含了运行环境(jre)相关包。
2、说下你对==和equals的认识,它们有什么差别?(高频)
对于==号:
1、比较基本类型,比如int等,==比较的是值是否相同;
2、引用类型,比如自定义对象:比较地址是否相同;
对于equals方法
equals方法只能用来比较引用数据类型,在Object类中所定义的equals方法底层也是通过==号比较对象的地址值。但是如果一个类重写了equals方法此时
就可以比较内容了。
3、如果两个对象的 hashCode值一样,则它们用equals()比较也是为 true,是不是?(高频)
不是。
Object里,hashCode和equals是两个不同的方法,默认hashCode是返回对象地址,equals方法也是对比地址;
两者不是一回事,可以通过重写对象的hashCode方法,让不同值的对象有相同的hashCode,但它们的equals方法未必相同。
4、综合说下final的作用?
修饰在类上,该类不能被继承。
修饰在方法上,该方法不能被重写。
修饰在变量上,叫常量,该常量必须初始化,初始化之后值就不能被修改,而常量一般全都是用大写来命名。
5、Math.round(-2.5) 等于多少?
结果是-2
6、String 是基本数据类型吗?
String 不是基本数据类型,基础类型有8种:byte、boolean、char、short、int、float、long、double。String属于引用数据类型!
7、对字符串操作都有哪些类并详细的介绍一下它们之间的区别?(高频)
具体有String、StringBuffer 和 StringBuilder 这三个类。
String是不可变类,每次操作都会生成新的String对象,并将结果指针指向新的对象,由此会产生内存碎片。
如果要频繁对字符串修改,建议采用StringBuffer 和 StringBuilder。
StringBuffer 和 StringBuilder的差别在于,StringBuffer 是线程安全的,而 StringBuilder 是非线程安全的,由于无需维护线程安全的操作,所以
StringBuilder 的性能要高于 StringBuffer,所以在单线程环境下推荐使用 StringBuilder,多线程环境下推荐使用 StringBuffer。由于大多数环境下是
单线程,所以大多是用 StringBuilder。
8、String str="abc"与 String str=new String("abc")的定义方法一样吗?
不一样
String str = "abc" ; 是在常量池中创建一个字符串对象abc
String str = new String("abc"); 创建了两个对象,"abc"字符串对象在常量池中,new String("")在堆内存中又创建了一个新的对象。
9、String 类的常用方法都有那些?(高频)
indexOf():返回指定字符的索引。
length():返回字符串长度。
equals():字符串比较。
replace():字符串替换。
trim():去除字符串两端空白。
split():分割字符串,返回一个分割后的字符串数组。
toLowerCase():将字符串转成小写字母。
toUpperCase():将字符串转成大写字符。
substring():截取字符串。
reverse(): 对字符串进行反转
10、抽象类必须要有抽象方法吗?
不需要的,抽象类中可以没有抽象方法。但是存在抽象方法的类必须是抽象类!抽象类常见的应用场景是模板设计模式,通过具体的方法定义代码执行的骨
架,将变化的内容定义成抽象方法,交由子类进行实现。
11、一般的类和抽象类有哪些区别?
一般的类不能包含没有方法体的抽象方法,而抽象类可以包含抽象方法。抽象类不能直接用new来实例化,普通类可以直接实例化。
12、抽象类能使用 final 修饰吗?
不能
定义抽象类的本意是被其他的类进行继承,如果定义为 final 该类就不能被继承,这样就会有矛盾,所以 final 不能修饰抽象类。
13、接口和抽象类有什么区别?(高频)
抽象类的子类要用 extends 来继承;而实现接口要用 implements 。
抽象类可以定义构造函数,而接口不能。
抽象类里可以定义 main 方法,但接口不能有 main 方法。
实现数量:类可以实现很多个接口;但是只能继承一个抽象类。
访问修饰符:接口中的方法默认使用 public 修饰;抽象类中的方法可以是任意访问修饰符。
14、java 中 IO 流分为几种?
按功能来分可以分输入流(input)和输出流(output)。
从类型来分可以是字节流和字符流。
15、BIO、NIO、AIO 有什么区别?(高频)
BIO的英语全称是Block IO, 同步阻塞式 IO,就是平常经常使用的传统 IO,特点是简单方便,但并发处理能力低。
NIO,叫New IO, 同步非阻塞 IO,客户端和服务器端通过 Channel(通道)通讯,实现了多路复用(由一个线程管理多个通道默认管理的通道数量为
1024个)。
AIO,Asynchronous IO, 是 NIO 的升级,实现了异步非堵塞 IO ,它是基于事件和回调机制。
16、Files的常用方法都有哪些?
Files.exists():检测路径是否存在。
Files.createFile():创建文件。
Files.createDirectory():创建文件夹。
Files.delete():删除文件或文件夹。
Files.copy():复制文件。
Files.move():移动文件,即复制后删除。
Files.size():查看文件的个数。
Files.read():读取文件。
Files.write():写入文件。
Java集合
17、java 的集合容器都有哪些?(高频)
18、Collection和Collections有什么区别?
Collection 是一个单列集合的顶层接口。
Collections是集合类的一个工具类,包含了对集合元素进行排序和线程安全等各种操作方法。
19、List、Set、Map 之间的区别是什么?(高频)
List集合
1、属于单列集合,存储的都是一个一个元素
2、List和存在重复元素
3、每一个元素都有对应的索引,可以通过索引获取元素
4、元素的存取顺序一致
Set集合
1、属于单列集合,存储的都是一个一个元素
2、元素唯一
3、元素没有索引,不能通过索引获取元素
4、不能保证元素的存取顺序一致
Map集合:
1、属于双列集合,存储的是一对一对的元素