1.Java中的几种基本数据类型是什么,各占几个字节?
整型
byte 1个字节
int 4个字节;
short 2个字节;
long 8个字节;
字符型
char 2个字节 一个单一的 16 位 Unicode 字符;
浮点型
float 4个字节
double 8个字节
布尔类型
boolean true和false
2.String类能被继承吗?为什么?
String类不能被继承,因为String类有final修饰符,而final修饰的类是不能被继承的。
**
3.String,StringBuffer,StringBuilder的区别
**
(1)运行速度方面,StringBuilder > StringBuffer > String
String为字符串常量,StringBuilder和StringBuffer为字符串变量
(2)线程安全方面,StringBuilder是线程不安全的,而StringBuffer是线程安全的。除此之外,进行多线程操作时使用StringBuffer较好,而进行单线程操作时使用StringBuilder较好。
**
4.ArrayList和LinkedList的区别
**
(1)ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
(2)对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
(3)对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
**
5.类的实例化顺序,比如父类静态数据,构造函数,字段,子类静态数据,构造函数,字段,当new的时候,其执行顺序。
**
父类静态数据 -> 子类静态数据 -> 父类字段 -> 父类构造函数 -> 子类字段 -> 子类构造函数
补:父类静态成员和静态代码块->子类静态成员和静态代码块->父类非静态成员和非静态代码块->父类构造方法->子类非静态成员和非静态代码块->子类构造方法
**
6.列出5个运行时异常
**
算数异常ArithmeticException、数组下标异常ArrayIndexOutOfBoundsException、空指针异常NullPointerException、类型转换异常ClassCastException、数字格式异常NumberFormatException、非法参数异常IllegalArgumentException
补充编译时异常:类未找到异常ClassNotFoundException、操作数据库异常SQLException、操作输入流和输出流时可能出现的异常IOException、中断异常InterruptedException、字段未找到异常NoSuchFieldException、方法未找到抛出的异常NoSuchMethodException
**
7.Java中的HashSet内部是如何工作的
**
HashSet 的内部采用 HashMap 来实现。由于 Map 需要 key 和 value,所以所有 key 的都有一个默认 value。类似于 HashMap,HashSet 不允许重复的
key,只允许有一个 null key,意思就是 HashSet 中只允许存储一个 null 对象。
补:HashSet实现原理:
①是基于HashMap实现的,默认构造函数是构建一个初始容量为16,负载因子为0.75 的HashMap。封装了一个 HashMap 对象来存储所有的集合元素,所有放入 HashSet 中的集合元素实际上由 HashMap 的 key 来保存,而 HashMap 的 value 则存储了一个 PRESENT,它是一个静态的 Object 对象。
②当我们试图把某个类的对象当成 HashMap的 key,或试图将这个类的对象放入 HashSet 中保存时,重写该类的equals(Object obj)方法和 hashCode() 方法很重要,而且这两个方法的返回值必须保持一致:当该类的两个的 hashCode() 返回值相同时,它们通过 equals() 方法比较也应该返回 true。通常来说,所有参与计算 hashCode() 返回值的关键属性,都应该用于作为 equals() 比较的标准。
③HashSet的其他操作都是基于HashMap的。
自己不是什么IT技术大牛,只是一个在IT行业底层默默打拼的小菜鸟,只是把自己这段时间所学的东西,找了些面试题参考网上帖子博客来做些笔记。