1.什么是面向过程编程?
性能比面向对象高,类调用时需要实例化,开销大,耗资源。
2.构造器Constructor可否重写(override)
不能重写,不能用static修改构造器,只能用static,protected,private修饰,且不能有返回语句。
3.是否可继承String类
String类是final类,不可以继承。
4.hashCode()和equals()关系
equals()相等,hashCode()必相等
hashCode()相等,equals()可能不相等
5.泛型
创建集合时就指定集合元素的类型,该集合只能存指定类型的元素,避免强制转换
6.String、StringBuffer、StringBuilder的区别
可变性:String类使用字符数组保存字符串,private final char value[],String对象不可变。
StringBuffer和StringBuilder都继承自AbstractStringBuilder类,AbstractStringBuilder也使用
字符数组,char[] value,对象可变
线程安全:String对象不可变,是常量,安全。StringBuffer加同步锁,线程安全,StringBuilder不安全
性能:每次String类改变,合成新String对象,指针指向新对象。StringBuffer每次对本身操作,
StringBuilder更快
HashMap相关
1.HashMap原理
是数组、链表的结合体,底层是数组,每一项又是一个链表,由Entry<k,v>实现,拥有指向下一元素的
引用。
2.两个对象的hashCode相同会发生什么?
HashMap抛出异常或者不会存储,如果equals()不同,hashCode()相同,bucket位置相同,
“碰撞”会发生。
3.两个key的hashCode相同,怎样取值?
调用get()时用key的hashCode()找到bucket位置然后获取,两个对象在同一个bucket时,遍历LinkedList
找到值对象。
4.HashMap超过负载因子怎么办?
负载因子默认0.75,超过会创建两倍大的bucket数组。
7.如何停止线程?
1.退出标志,run()后线程终止
2.使用stop()
3.使用interrupt()
8.什么是线程安全?
多线程访问同一代码,不会产生不确定的结果。
9.如何保证线程安全?
1.非线程安全的代码加锁控制
2.用线程安全的类
3.多线程并发下,线程共享变量改为方法级的局部变量
10.synchronized和Lock区别?
相同:Lock可完成synchronized所有功能
异:Lock比synchronized更精确语义和性能,Lock通过代码实现,synchronized通过JVM实现,synchronized通过JVM实现,synchronized自动释放锁,Lock是手动释放,且必须在finally中释放。tryLock可非阻塞式去拿锁,Lock有局限,针对块范围。synchronized可锁块、对象、类。
11.序列化与反序列化?
把对象转换为字节序列的过程为序列化。‘
用途:1.把对象字节序列永久存到硬盘
2.网络上传送对象的字节序列
12.常见的序列化协议?
Protobuf、Thrift、Hessian、Kryo
13.内存溢出和内存泄漏区别?
内存溢出:指程序申请内存时,没有足够的空间使用
内存泄漏:分配出去的内存不再使用,但也无法回收
14.xml解析模式?
1.DOM 2.SAX 3.JDOM 4.DOM4J(性能最好)