阿里常用面试题一(基础篇,附答案)

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的实现原理,底层用什么实现的?

 

你可能感兴趣的:(阿里常用面试题一(基础篇,附答案))