持续补充中~~~
1.JDK和JRE的区别
JDK表示java development kit,java开发工具包,提供了java开发的环境和运行环境
JRE表示java runtime environment java运行环境,为了java的运行环境
JVM表示Java Virtual Machine 把字节码解释成机器码指令执行,是实现平台无关性的关键
具体来说JDK其实包含了JRE,同时包含了编译java源码的编译器javac,还包含了很多java程序调试和分析工具。
JDK是 Java 语言的软件开发工具包(SDK)。在JDK的安装目录下有一个jre目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和lib合起来就称为jre。JDK用来Java的开发,而JRE只能运行字节码文件,而不能编译.java代码。
2.==和equals的区别是什么?
== 对于基本数据类型和引用数据类型的作用效果不相同,对于基本数据类型,比较的是二者值是否相等,对于引用数据类型,则比较的是二者的引用是否相同
package com.interview; public class 等于andEqueals { public static void main(String[] args) { String a = "abc"; String b = "abc"; System.out.println(a==b);//true System.out.println(a.equals(b));//true String c = new String("abc"); System.out.println(a==c);//false System.out.println(a.equals(c));//true System.out.println(a.hashCode());//a b c的hashCode是相等的,因为三者互相equals System.out.println(b.hashCode()); System.out.println(c.hashCode()); } }
equals equals的本质其实就是==,但是引用数据类型String Integer等重写了equals方法,把他变成了值得比较,所以一般情况下equals比较的是值是否相等。在比较基本数据类型,对象的时候,equals比较得还是引用类型
//Object里得equals方法就是比较得是引用对象是否相等 public boolean equals(Object obj) { return (this == obj); }
3.两个对象的hashCode()相同,则equals也一定为true吗?
不对,两个对象的hashCode()相同,equals()不一定为true.在散列表中,hashCode() 相等即两个键值对 的哈希值相等,然而哈希值相等,并不一定能得出键值对相等。两个不同的键值对,如果哈希值相等,说明产生了哈希冲突
若要判断两个对象是否相等,除了要覆盖equals()之外,也要覆盖hashCode()函数。否则,equals()无效。
4.final在java中的作用
final修饰的类叫做最终类,这个类不能被继承
final修饰的方法不能被重写
final修饰的变量叫做常量,常量必须初始化,初始化之后的值不能被修改
5.Math.round(-1.5)等于多少?
等于-1。Math.round()返回的是int(float)或者Long(double) 会选择四舍五入向右边取整
6.String属于基本数据类型吗?
String不属于基本数据类型 基本数据类型有8中 byte short int long float double boolean char,String 属于引用数据类型对象,他是被final修饰的
7.Java中操作字符串都有哪些类?他们之间有什么区别
String StringBuffer StringBuilder
String是被final修饰的,不可变对象,每次操作都会生成新的String对象 然后将指针指向新的String对象,而StringBuffer、StringBuilder可以在原有的对象基础上进行操作,所以在经常改变字符串内容的情况下最好不要使用String
StringBuffer、StringBuilder最大的区别在于,StringBuffer是线程安全的,而StringBuilder是非线程安全的,但StringBuilder的性能却高于StringBuffer,所以在单线程环境下推荐使用StringBuilder,多线程情况下使用StringBuffer
8.String str = "i" 和 String str = new String("i")一样吗?
不一样,因为内存的分配方式不一样,String str = "i"的方式,java虚拟机会将其分配到常量池中;而String str = new Strng("i")则会分配到堆内存当中。
9.如何将字符串反转?
使用StringBuilder或者StringBuffer的reverse()方法
StringBuffer sb = new StringBuffer(); sb.append("abcd"); System.out.println(sb.reverse());//"dcba"
10.String类常用方法都有哪些
• indexOf():返回指定字符的索引。
• charAt():返回指定索引处的字符。
• replace():字符串替换。
• trim():去除字符串两端空白。
• split():分割字符串,返回一个分割后的字符串数组。
• getBytes():返回字符串的 byte 类型数组。
• length():返回字符串长度。
• toLowerCase():将字符串转成小写字母。
• toUpperCase():将字符串转成大写字符。
• substring():截取字符串。
• equals():字符串比较。
11.抽象类必须要有抽象方法吗?
不需要,抽象类可以有非抽象方法,也可以存在抽象方法。
abstract class apple{ public void eat(){ System.out.println("wonderful"); } public abstract void cut(); }
12.普通类和抽象类有哪些区别?
-
普通类不能包含抽象方法,抽象类可以包含抽象方法
-
抽象类不能直接className cn = new className();实例化,需要重写抽象类里面的抽象方法,普通类可以直接实例化。
abstract class apple{ public void eat(){ System.out.println("wonderful"); } public abstract void cut(); } class apple1{ apple a = new apple() { @Override public void cut() { System.out.println("cut apple"); } }; }
13.抽象类可以被final修饰吗?
不能,抽象类就是为了让其他类继承并实现它的抽象方法,如果定义为final该类就不能被继承,这样彼此就会产生矛盾,所以final不能修饰抽象类
14.接口和抽象类有什么区别?
实现上:抽象类的子类使用extends继承,接口必须使用implements来实现接口
构造函数上:抽象类可以有构造函数,接口不能有构造函数
实现数量上:类只能继承一个抽象类,但可以实现多个接口
访问修饰符上:接口中的方法 默认使用public修饰;抽象类中的方法可以是任意访问修饰符
15.Java中IO流分为哪几种?
按功能上看:输入流input 输出流output
按类型上看:字节流和字符流
字节流按8位传输以字节为单位输入输出数据,字符流按16位传输以字符为单位输入输出数据
16.BIO、NIO、AIO有什么区别
Java 中的 BIO、NIO和 AIO 理解为是 Java 语言对操作系统的各种 IO 模型的封装。程序员在使用这些 API 的时候,不需要关心操作系统层面的知识,也不需要根据不同操作系统编写不同的代码。只需要使用Java的API就可以了。
同步与异步
-
同步: 同步就是发起一个调用后,被调用者未处理完请求之前,调用不返回。
-
异步: 异步就是发起一个调用后,立刻得到被调用者的回应表示已接收到请求,但是被调用者并没有返回结果,此时我们可以处理其他的请求,被调用者通常依靠事件,回调等机制来通知调用者其返回结果。
同步和异步的区别最大在于异步的话调用者不需要等待处理结果,被调用者会通过回调等机制来通知调用者其返回结果。
阻塞和非阻塞
-
阻塞: 阻塞就是发起一个请求,调用者一直等待请求结果返回,也就是当前线程会被挂起,无法从事其他任务,只有当条件就绪才能继续。
-
非阻塞: 非阻塞就是发起一个请求,调用者不用一直等着结果返回,可以先去干其他事情。
BIO:Block IO同步阻塞式IO,就是我们平常使用的传统IO,他的特点是模式简单,使用方便,并发处理能力低。
NIO:Non IO同步非阻塞式IO,是传统IO的升级版,客户端和服务器通过Channel(通道)通讯,实现了多路复用。
AIO:Asynchronous IO是NIO的升级,也叫NIO2,实现了异步非阻塞IO,异步IO的操作基于事件和回调机制。
17.File的常用方法有哪些?
Files.exists():检测文件路径是否存在
Files.createFile():创建文件
Files.createDirectory():创建文件夹
Files.delete():删除一个文件或者目录
Files.copy():复制文件
Files.move():移动文件
Files.size():查看文件个数
FIles.read():读取文件
FIles.write():写入文件
18.Java容器都有哪些?
Java容器分为Collection和Map两大类,其下又分为很多子类
-
Collection
-
List
-
ArrayList
-
LinkedList
-
Vector
-
Stack
-
-
Set
-
HashSet
-
LinkedHashSet
-
TreeSet
-
-
-
Map
-
HashMap
-
LinkedHashMap
-
-
TreeMap
-
ConcurrentHashMap
-
HashTable
-
19.Collection和Collections有什么区别
-
Collection是一个集合的接口,它提供了对集合对象进行基本操作的通用接口方法,所有集合都是他的子类比如List Set Map
-
Collections是一个包装类,里面包含了很多静态方法,不能被实例化,就像一个工具类,比如提供了排序方法Collections.sort(list);
20.List、Set、Map之间的区别
主要体现类元素是否有序,元素是否可以重复上