1.常用的异常类型?
1).算数异常类:ArithmeticExecption
2).空指针异常类型:NullPointerException
3).类型强制转换类型:ClassCastException
4).数组负下标异常:NegativeArrayException
5).数组下标越界异常:ArrayIndexOutOfBoundsException
6).操作数据库异常:SQLException
7).下标越界异常:IndexOutOfBoundsExecption
8).输入输出异常:IOException
9).文件未找到异常:FileNotFoundException
10).数据格式异常:NumberFormatException
等等....以上为常见的。
2.gc原理
3.listlink arraylist 区别
1).ArrayList是实现了基于动态数组的数据结构,LinkedList是基于链表结构。
2).对于随机访问的get和set方法,ArrayList要优于LinkedList,因为LinkedList要移动指针。
3).对于新增和操作add和remove,LinkedList比较占优势,因为ArrayList要移动数据。
5.kafka 原理和容错
kafka-即是解决上述这类问题的一个框架,它实现了生产者和消费者之间的无缝连接。
kafka-高产出的分布式消息系统(A high-throughput distributed messaging system)
6.spark hadoop 原理
7.redis 同步机制
8.classLoader 机制
9.Http 协议
10.cookie的限制
11.如何设计一个分步式登录系统?
12.Spring加载过程?
13.atomic 与 volatile的区别?
14.Thread的 notify()给notifyAll()的区别?
15.notifiy()是唤醒的那一个线程?
16.Thread.sleep()唤醒以后是否需要重新竞争?
17.单例有多少种写法? 有什么区别? 你常用哪一种单例,为什么用这种?
饿汉式,懒汉式,静态内部类,枚举,双重检查
18.写一个JAVA死锁的列子?
思路是创建两个字符串a和b,再创建两个线程A和B,让每个线程都用synchronized锁住字符串(A先锁a,再去锁b;B先锁b,再锁a),如果A锁住a,B锁住b,A就没办法锁住b,B也没办法锁住a,这时就陷入了死锁。直接贴代码:
public class DeadLock {
public static String obj1 = "obj1";
public static String obj2 = "obj2";
public static void main(String[] args){
Thread a = new Thread(new Lock1());
Thread b = new Thread(new Lock2());
a.start();
b.start();
}
}
class Lock1 implements Runnable{
@Override
public void run(){
try{
System.out.println("Lock1 running");
while(true){
synchronized(DeadLock.obj1){
System.out.println("Lock1 lock obj1");
Thread.sleep(3000);//获取obj1后先等一会儿,让Lock2有足够的时间锁住obj2
synchronized(DeadLock.obj2){
System.out.println("Lock1 lock obj2");
}
}
}
}catch(Exception e){
e.printStackTrace();
}
}
}
class Lock2 implements Runnable{
@Override
public void run(){
try{
System.out.println("Lock2 running");
while(true){
synchronized(DeadLock.obj2){
System.out.println("Lock2 lock obj2");
Thread.sleep(3000);
synchronized(DeadLock.obj1){
System.out.println("Lock2 lock obj1");
}
}
}
}catch(Exception e){
e.printStackTrace();
}
}
}
19.如何解决死锁?
(1) 死锁预防:破坏导致死锁必要条件中的任意一个就可以预防死锁。例如,要求用户申请资源时一次性申请所需要的全部资源,这就破坏了保持和等待条件;将资源分层,得到上一层资源后,才能够申请下一层资源,它破坏了环路等待条件。预防通常会降低系统的效率。
(2) 死锁避免:避免是指进程在每次申请资源时判断这些操作是否安全,例如,使用银行家算法。死锁避免算法的执行会增加系统的开销。
(3) 死锁检测:死锁预防和避免都是事前措施,而死锁的检测则是判断系统是否处于死锁状态,如果是,则执行死锁解除策略。
(4) 死锁解除:这是与死锁检测结合使用的,它使用的方式就是剥夺。即将某进程所拥有的资源强行收回,分配给其他的进程。
20.HashMap数据存储结构? key重复了怎么办? 是如何解决的?
HashMap底层实现还是数组,只是数组的每一项都是一条链,key如果重读会替换旧的value,hashMap判断key是否重复是先比较key的hashCode,再比较相等或equals的,所以重写hashCode()和equals()方法即可实现添加重复元素。
21.Spring AOP的实现原理,底层用什么实现的?