基础面试总结一:基础知识点
自我手动总结,请尊重劳动成果。版权所有。如有错误请指正。
1. JDK 和 JRE 有什么区别?
JDK:Java Development Kit的简称,java开发工具包,提供了java的开发环境和运行环境。
JRE:Java Runtime Environment的简称,java运行环境,为java的运行提供了所需环境。
2.
Integer i1=100;Integer i2=100;System.out.print(i1==i2);//结果是:true
Integer i3=200;Integer i4=200;System.out.print(i3==i4);//结果是:false
//自动拆装箱技术,自动调用valueOf()方法,如果所设置的参数在-128~127之间,则为true;
//使用内部的对象,如果不在-128~127之间就创建新的对象。
3. switch语句中不能用long
数据结构:数组、栈、队列、链表、树、图、堆、散列表
4. ceil向上取整、floor向下取整、round四舍五入
5. jdk最新版本以及特性:自动拆装箱、枚举、静态导入、可变参数、内省、泛型、for-each循环
6. IE显示512B的内容才能显示异步效果!
7. RuntimeException和Exception的区别
RuntimeException运行时异常,是可以不用处理的。Exception编译时异常,是必须处理的。
8.
常用的类:BufferedReader、BufferedWriter、FileReader、FileWriter、StringInteger
常用的包:java.lang、java.awt、java.io、java.util、java.sql
常用的接口:Remote、List、Map、Document、NodeList
9. 常见5中异常
空指针异常:java.lang.NullPointerException
指定类不存在:java.lang.ClassNotFoundException
数学运算异常:java.lang.ArithmeticException
数组下标越界异常:java.lang.ArrayIndexOutOfBoundesException
方法参数错误:java.lang.IllegalArgumentException
没有访问权限:java.lang.IllegalAccessException
Files的常用方法都有哪些?
Files.exists():检测文件路径是否存在。
Files.createFile():创建文件。
Files.createDirectory():创建文件夹。
Files.delete():删除一个文件或目录。
Files.copy():复制文件。
Files.move():移动文件。
Files.size():查看文件个数。
Files.read():读取文件。
Files.write():写入文件。
10. == 和 equals 的区别是什么?对于基本类型和引用类型 == 的作用效果是不同的,如下所示:
基本类型:比较的是值是否相同;
引用类型:比较的是引用是否相同;
代码示例:
1.String x = "string";
2.String y = "string";
3.String z = new String("string");
4.System.out.println(x == y); // true
5.System.out.println(x == z); // false
6.System.out.println(x.equals(y)); // true
7.System.out.println(x.equals(z)); // true
代码解读:因为 x 和 y 指向的是同一个引用,所以 == 也是 true,而 new String()方法则重写开辟了内存空间,所以 == 结果为 false,而 equals 比较的一直是值,所以结果都为 true。
总结:== 对于基本类型来说是值比较,对于引用类型来说是比较的是引用;而 equals 默认情况下是引用比较,只是很多类重新了 equals 方法,比如 String、Integer 等把它变成了值比较,所以一般情况下 equals 比较的是值是否相等。
11. 两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?
不对,两个对象的 hashCode()相同,equals()不一定 true。hashCode()相等即两个键值对的哈希值相等,然而哈希值相等,并不一定能得出键值对相等。
12. final 在 java 中有什么作用?
final 修饰的类叫最终类,该类不能被继承。
final 修饰的方法不能被重写。
final 修饰的变量叫常量,常量必须初始化,初始化之后值就不能被修改。
finally是异常处理的一部分,总是执行。
finalize是Object类的一个方法,垃圾收集器。
13. String属于基础的数据类型吗?
String不属于基础数据类型,基础类型有8种:byte、boolean、char、short、int、float、long、double,而String属于对象。
如何将字符串反转?
使用 StringBuilder 或者 stringBuffer 的 reverse() 方法。
StringBuffer线程安全,效率低、StringBuilder线程不安全,效率高
String 类的常用方法都有那些?
indexOf():返回指定字符的索引。
charAt():返回指定索引处的字符。
replace():字符串替换。
trim():去除字符串两端空白。
split():分割字符串,返回一个分割后的字符串数组。
getBytes():返回字符串的 byte 类型数组。
length():返回字符串长度。
toLowerCase():将字符串转成小写字母。
toUpperCase():将字符串转成大写字符。
substring():截取字符串。
equals():字符串比较。
14. String str = "i"; 与 String str = new String("i"); 一样吗?
不一样,因为内存的分配方式不一样。String str = "i";的方式,Java虚拟机会讲其分配到常量池中;而String str = new String("i");则会被分到堆内存中。
String s = new String("abc"); 创建了两个对象;String s = "abc";创建了一个对象。
15. 重载Overload 和 重写Override的区别
方法重载:同一个类中,方法名相同,参数列表不同,与返回值类型无关。
方法重写:在子父类中,方法声明相同(方法名、参数列表、返回值类型)
方法重写注意事项:
A:父类私有方法不能被重写;
B:子类重写父类的方法的访问权限要大于等于父类方法的访问权限;一般子父类一致即可。
C:静态方法只能重写静态。注:这不属于方法重写,多态中给验证。
16. 抽象类必须要有抽象方法吗?
不需要,抽象类不一定非要有抽象方法。
17. 普通类和抽象类有哪些区别?
普通类不能包含抽象方法,抽象类可以包含抽象方法。
抽象类不能直接实例化,普通类可以直接实例化。
18. 接口和抽象类有什么区别?
实现:抽象类的子类使用 extends 来继承;接口必须使用 implements 来实现接口。
构造函数:抽象类可以有构造函数;接口不能有。
main方法:抽象类可以有 main 方法,并且我们能运行它;接口不能有 main 方法。
实现数量:类可以单实现接口,也可以多实现接口;还可以继承一个类的同时,实现多个接口。
继承数量:单继承,但可以多层继承。 接口与接口之间可以单继承,也可以多继承。
访问修饰符:抽象类中的方法可以是任意访问修饰符;接口中方法默认使用public修饰。
成员区别:抽象类中可以是常量,也可以是变量;接口只能是常量。
成员方法:抽象类中可以是抽象,也可以是非抽象;接口只能是抽象。
设计理念区别:类继承是is a的关系;接口被实现是like a的关系。
19. java 中IO流分为几种?
按功能来分:输入流(input)、输出流(output)。
按类型来分:字节流和字符流。
字节流和字符流的区别是:字节流按8位传输以字节为单位输入输出数据,字符流按16位传输以字符为单位输入输出数据。
IO和NIO的区别
io阻塞(网络传输慢一直等着,直到传输完)
nio非阻塞(有一个缓存区)
a.buffer(缓冲区)
b.channel(管道、通道)
c.selector(选择器、多路复用器)
连接状态Connect、阻塞状态Accept、可读状态Read、可写状态Write
20. BIO、NIO、AIO 有什么区别?
BIO:Block IO 同步阻塞式 IO,就是我们平常使用的传统 IO,它的特点是模式简单使用方便,并发处理能力低。
NIO:New IO 同步非阻塞 IO,是传统 IO 的升级,客户端和服务器端通过 Channel(通道)通讯,实现了多路复用。
AIO:Asynchronous IO 是 NIO 的升级,也叫 NIO2,实现了异步非堵塞 IO ,异步 IO 的操作基于事件和回调机制。
21. Map和Collection集合的区别
Map存储的是双列的元素,键是唯一的,值可以重复
Collection存储的是单列的元素,List子类元素可以重复,Set子类元素唯一
22. List:
ArrayList底层数据结构是数组,查询快,增删慢;线程不安全,效率高。时间复杂度O(1)。
LinkedList底层数据结构是双向循环链表,查询慢,增删快;线程不安全,效率高。时间复杂度O(n)。
Vector底层数据结构是数组,查询快,增删慢;线程安全,效率低。
List元素有序(存储和取出的顺序一致),可以重复
Set元素无序,唯一
23. HashMap的实现
HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。
当我们往HashMap中put元素时,首先根据key的hashcode重新计算hash值,根据hash值得到这个元素在数组中的位置(下标),如果该数组在该位置上已经存放了其他元素,那么在这个位置上的元素将以链表的形式存放,新加入的放在链头,最先加入的放入链尾,如果数组中该位置没有元素,就直接将该元素放到数组的该位置上。
需要注意jdk 1.8中对HashMap的实现做了优化,当链表中的节点数据超过八个之后,该链表会转为红黑树来提高查询效率,从原来的O(n)到 O(logn)。
24. Hashtable 和 HashMap的区别
Hashtable线程安全,效率低;不允许null键和null值
HashMap线程不安全,效率高;允许null键和null值。hashMap去掉了Hashtable 的contains方法,但是加上了containsValue()和containsKey()方法。
25. 哪些集合类是线程安全的?
vector:就比ArrayList多个同步优化机制(线程安全),因此效率较低,现在已经不太建议使用了。在web应用中,特别是前台页面,往往效率(页面响应速度)是优先考虑的。
statck:堆栈类,先进后出。
Hashtable:就比HashMap多个线程安全。
enumeration:枚举,相当于迭代器。


浙公网安备 33010602011771号