基础面试总结一:基础知识点

自我手动总结,请尊重劳动成果。版权所有。如有错误请指正。

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 方法,比如 StringInteger 等把它变成了值比较,所以一般情况下 equals 比较的是值是否相等。

 

11. 两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?

 

    不对,两个对象的 hashCode()相同,equals()不一定 truehashCode()相等即两个键值对的哈希值相等,然而哈希值相等,并不一定能得出键值对相等。

 

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:枚举,相当于迭代器。

 

posted @ 2021-01-19 15:16  amax  阅读(43)  评论(0)    收藏  举报