一、Java 基础
1.JDK 和 JRE 有什么区别?
JDK:全称java development kit(java开发工具包),包含java运行环境、各种开发类库和工具;
JRE:全称java runtime environment(java运行时环境),包含java虚拟机、java基础类库,java语言编写的程序运行所需要的软件环境
2.== 和 equals 的区别是什么?
equals:是用来比较两个对象内部的内容是否相等的。
==:是用来判断两个对象的地址是否相同,即是否是指相同一个对象。
如果没有重写equals时,是直接用==判断的
如果是基本类型和基本型封装,则仍然为比较内容。
3.两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?
不一定,两个对象equals()为true的话,则hashCode()相同
4.final 在 java 中有什么作用?
a) final可以修饰类,这样的类不能被继承。b) final可以修饰方法,这样的方法不能被重写。c) final可以修饰变量,这样的变量的值不能被修改,是常量。
5.java 中的 Math.round(-1.5) 等于多少?
=Math.floor(a+0.5);
6.String 属于基础的数据类型吗?
String不是基本的数据类型,是final修饰的java类
7.java 中操作字符串都有哪些类?它们之间有什么区别?
StringBuffer 和StringBuilder,StringBuffer线程安全,StringBuilder线程不安全
8.String str="abc"与 String str=new String("i")一样吗?
不一样,String str="abc"在编译阶段JVM先去常量池查找是否存在“abc”,如果不存在,就在常量池中开辟空间存储“abc”;如果存在,不开辟空间。然后在栈内存开辟一个空间来存储“abc”在常量池中的地址值。String str=new String("abc")在编译阶段JVM先到常量池查找是否存在,不存在,则在常量开辟空间保存“abc”;运行时期,通过string类的构造器在堆的内存中new一个空间,然后从常量池中复制一份“abc”到该堆空间,在栈中开辟名字为str的空间,存放堆中new出来的这个String对象的地址值。
9.如何将字符串反转?
10.String 类的常用方法都有那些?
substring(),split(),length()
11.抽象类必须要有抽象方法吗?
不是必须的,有抽象方法的类必须是抽象类
12.普通类和抽象类有哪些区别?
1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。 2)抽象类不能用来创建对象; 3)如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。 在其他方面,抽象类和普通的类并没有区别
13.抽象类能使用 final 修饰吗?
不能
14.接口和抽象类有什么区别?
15.java 中 IO 流分为几种?
字节流和字符流
16.BIO、NIO、AIO 有什么区别?
BIO同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。
NIO同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。
AIO异步非阻塞,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理
17.Files的常用方法都有哪些?
copy(),