一.Java根底

1.JDK和JRE有什么区别?

JDK:是Java开发运行环境。
JRE:是Java运行环境,是运行编译后的Java程序所必须的包,蕴含JVM,Java根底类库,Java命令和其余基础设施,但不能用于创立新程序。
JDK蕴含了JRE,JRE中蕴含了虚拟机JVM。
JDK蕴含的根本组件包含:
javac:编译器,将源程序转成字节码
jar:打包工具,将相干的类文件打包成一个文件。
javadoc:文档生成器,从源码正文中提取文档
java:运行编译后的java程序(.class后缀的)

2.==和equals的区别?

==是判断两个变量或实例是不是指向同一个内存空间,equals是判断两个变量或实例所指向的内存空间的值是不是雷同。
==是指对内存地址进行比拟,equals()是对字符串的内容进行比拟
==指援用是否雷同,equals()指的是值是否雷同。

3.两个对象的hashCode()雷同,则equals()也肯定为true,对吗?

不对,两个对象的hashCode()雷同,equals()也不肯定true。
因为在散列表中,hashCode()相等即两个键值对的哈希值相等,然而哈希值相等,并不一定能得出键值对相等。

4.final在java中有什么作用?

final润饰的类叫做最终类,不能被继承
final润饰的办法不能被重写
final润饰的变量叫做常量,常量必须初始化,初始化之后值就不能被批改。

5.java中的Math.round(-1.5)等于多少?

Math.round_() 函数返回一个数字四舍五入后最靠近的整数,所有等于1

6.String属于根底的数据类型吗?

String不属于根本数据类型,根本数据类型只有8中,byte、boolean、short、char、int、float、long、double。其余都是援用类型。

7.java中操作字符串都有哪些类?它们之间有什么区别?

操作字符串的类有:String、StringBuffer、StringBuilder。
String 和 StringBuffer、StringBuilder 的区别在于 String 申明的是不可变的对象,每次操作都会生成新的 String 对象,而后将指针指向新的 String 对象,而 StringBuffer、StringBuilder 能够在原有对象的根底上进行操作,所以在常常扭转字符串内容的状况下最好不要应用 String。
StringBuffer 和 StringBuilder 最大的区别在于,StringBuffer 是线程平安的,而 StringBuilder 是非线程平安的,但 StringBuilder 的性能却高于 StringBuffer,所以在单线程环境下举荐应用 StringBuilder,多线程环境下举荐应用 StringBuffer。
在运行速度上:StringBuilder>StringBuffer>String
String为字符串常量,而StringBuider和StringBuffer均为字符串变量,即String对象一旦创立之后该对象是不可更改的,但后两者的对象时变量,是能够更改的。
String:实用于大量的字符串操作的状况
StringBuilder:实用于单线程下在字符缓冲区进行大量操作的状况
StringBuffer:应用多线程下在字符缓冲区进行大量操作的状况。

8.String str="abc"与String str=new String("abc")一样吗?

不一样。认为内存的调配形式不一样,String str="abc"的形式,java虚构机会将调配到常量池中,而String str=new String(“i”) 则会被分到堆内存中。

9.如何将字符串反转?

1.利用 StringBuffer 或 StringBuilder 的 reverse 成员办法:

return new StringBuilder(str).reverse().toString();

2.利用 String 的 toCharArray 办法先将字符串转化为 char 类型数组,而后将各个字符进行从新拼接:

char[] chars = str.toCharArray();String reverse = "";for (int i = chars.length - 1; i >= 0; i--) {reverse += chars[i];}

3.利用 String 的 CharAt 办法取出字符串中的各个字符:

String reverse = "";int length = str.length();for (int i = 0; i < length; i++) {reverse = str.charAt(i) + reverse;}
10.String类的罕用办法都有哪些?

indexOf():返回指定字符的索引
charAt():返回指定索引处的字符
replace():字符串替换
trim():去除两端的空白
concat():在原有的前面拼接指定数据
endswith():判断是否已指定数据结尾
lastIndexOf():获取最初一次呈现的索引值
isEmpty():判断字符串是否为空
replace():把原有的a替换成b
startwith():判断字符串是否已指定数据开始
substring():从下标为指定数据的地位开始向后截取字符串
toUpperCase():把字符串转化为大写
getBytes():把字符串的数据存入byte[]中
split():依照规定,切割字符串

11.抽象类必须要有形象办法吗?

不须要,抽象类不肯定非要有形象办法。然而如果你的一个类曾经申明成了抽象类,即便这个类没有形象办法,也不能再实例化,即不能间接构建一个该类的对象。

12.一般类和抽象类的区别有哪些?

一般类不能蕴含形象办法,抽象类能够蕴含形象办法。
一般类能够间接实例化,抽象类不能间接实例化。

13.抽象类能应用final润饰吗?

不能,定义抽象类就是让其余类继承的,如果定义为finnal该类就不能被继承,这样彼此就会产生矛盾,所以final不能润饰抽象类。

14.接口和抽象类有什么区别?

相同点:
抽象类和接口都是形象层;
都不能被实例化。
不同点:
构造方法:抽象类里有,接口没有
成员变量:抽象类里有,接口里没有,接口中都是常量
成员办法:抽象类能够有一般办法和形象办法,但接口里都是形象方(JDK1.8当前能够有一般办法)
抽象类里没有简写模式,但接口外面有

15. java中IO流分为几种?

IO流按性能划分:输出流(input)、输入流(output)
按类型划分:字节流和字符流
字节流和字符流的区别是:字节流按8位传输以字节为单位输入输出数据,字符流按16为传输以字符为单位输入输出数据。

16.BIO、NIO、AIO 有什么区别?

BIO:(BlicI/O)同步阻塞I/O模式,数据的读取写入必须阻塞在一个线程内期待其实现。能够让每一个连贯专一于本人的 I/O 并且编程模型简略,也不必过多思考零碎的过载、限流。特点是模式简略使用方便,并发解决能力低。
NIO:(NewI/O)一种同步非阻塞的I/O模型,是传统IO的降级,它反对面向缓冲的,基于通道的I/O操作方法。客户端和服务器端通过Channel(通道)通信,实现了多路复用。
AIO:(AsynchronousI/O)是NIO的降级,也叫NIO2,异步 IO 是基于事件和回调机制实现的,也就是利用操作之后会间接返回,不会梗塞在那里,实现了异步非梗塞IO,异步IO的操作基于工夫和回调机制。

18.break和continue的区别有哪些?

break和continue都能够让循环停下来,break是立即停,continue这次停下次还能够。
break和continue不是哪里都能用的,是用在循环构造中的。
break和continue关键字的前面不能够呈现呢代码,否则就是Unreachable code(执行不到的代码)。

19.for、while、do...while三种循环的区别?

for(开始地位;循环条件;变动条件){循环体}
while(循环条件){循环体}
do{循环体}while(循环条件)
相同点:for循环须要晓得开始地位,并且晓得要循环多少次,还要晓得数据变动的法则
while和do...while不须要晓得从哪开始循环多少次,只须要指定条件就行。
while--是要先满足了判断条件才执行
do...while--是要起码执行1次循环体

20.重载(Overload)和重写(Override)的区别?

重载:是在同一个类当中有很多个名称雷同办法,但各个雷同办法的参数列表不同。
重写:产生在不同的类中,存在继承关系,重写是办法名字和参数列表雷同,当父类的方发不能满足时,子类重写为本人须要的。

21.this和super的区别?

(1)代表的事物不同
super代表的是父类空间的援用
this代表的是所属函数的调用者对象
(2)应用前提不同
super必须要有继承关系能力应用
this不须要继承关系也能应用
(3)调用的构造函数不同
super:调用父类的构造函数
this:调用所属类的构造函数

22.讲讲动态代码块、结构代码块和部分代码块?

动态代码块--地位:在成员地位(类里办法外)。--作用:实现我的项目初始化--触发节点:类加载时。
结构代码块--地位:在成员地位(类里办法外)。--作用:抽取构造方法的共性。--触发节点:创建对象时。
部分代码块--地位:在部分地位(办法里)。--作用:控制变量的作用范畴。--触发节点:办法执行时。
执行程序:动态代码块>结构代码块>部分代码块

23.过程和线程的区别?

过程:指的是正在运行的程序,有的程序依赖一个过程,有的程序能够依赖多个过程。
线程:是操作系统可能调度的最小单位,过程蕴含线程。(单线程程序效率低,多线程程序效率高)

24.并发和并行的区别?

并发:是指同一时刻,共享资源被多个线程抢占。
并行:同一时刻,能够执行多个工作,然而不产生抢占资源的景象,各干各的相互不烦扰。

25.线程的状态有哪些?

线程有五种状态。
新建状态(刚new进去的线程)
就绪状态(期待CPU的调度)
运行状态(正式开始执行工作)
阻塞状态(线程以各种形式进入阻塞状态)期待阻塞、同步阻塞、其余阻塞
死亡状态(线程执行完或因异样退出)

26.懒汉式和饿汉式的区别?

饿汉式(线程平安,调用率高,然而不能提早加载)。
饿汉式是线程平安的,在类创立的同时就曾经创立好一动态的对象共零碎应用,当前不在扭转
懒汉式(线程平安,调用效率不高,能够提早加载)
懒汉式如果在创立实例对象时不加上synchronized则会导致对对象的拜访不是线程平安。