1. JDK 和 JRE 有什么区别?
JDK是java开发工具包,提供了java开发的环境;JRE是java运行环境,提供了java运行的环境;具体来说JDK包含了JRE,还包含了编译 java源码的javac,还包含了java程序的调试和和分析的工具。
2. 两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?
不对,hashCode相同代表两个键值对的哈希值相等,但是哈希值相等,并不一定得出键值对相等。
3. BIO、NIO、AIO 有什么区别?
BIO是同步阻塞式IO,就是我们平常用的传统类型的IO,特点是模式简单使用方便,但是并发处理能力低;NIO是同步非阻塞式IO,是传统的IO的升级,客户端和服务端通过Channel(通道)通讯,实现了多路复用;AIO是NIO的升级,实现了异步非阻塞IO,异步IO的操作基于事件和回调机制。
4. 说一下 HashMap 的实现原理?
HashMap是基于哈希表的Map接口非同步实现方式,是一个链表散列的数据结构,当往集合中put元素时,首先根据key的hashcode计算hash值,根据hash值得到数组的下标,如果数组该位置已经存放了其他元素,那么在该位置元素将以链表的形式存放,新加入的放在链头,最先加入的放在链尾,如果没有存放其他元素,就直接将该元素放到数组该位置上。
5. 在 Queue 中 poll()和 remove()有什么区别?
poll()和remove()都是从队列中取出一个元素,但是poll在获取失败时会返回null,remove在获取失败时会抛出异常。
6.迭代器 Iterator 是什么?
迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,不需要看到其中的底层结构,创建代价很小;
使用next()获取下一个元素,使用hasNext()检查序列中是否还存在元素,使用remove()将迭代器中新返回的元素删除。
7.线程池中 submit()和 execute()方法有什么区别?
接收的参数不一样,submit有返回值,而execute没有,submit方便Exception处理
8.怎么防止死锁?
死锁的四个必要条件:
互斥条件:进程对所分配到的资源不允许其他进程进行访问,若其他进程访问该资源,只能等待,直至占有该资源的进程使用完成后释放该资源;
请求和保持条件:进程获得一定的资源后,又对其他资源发出请求,但是该资源可能会被其他进程占有,此时请求阻塞,但又对自己获得的资源保持不放;
不可剥夺条件:进程已获得的资源,在未完成使用之前,不可被剥夺,使用完之后自己释放;
环路连接关系:进程发生死锁之后,若干进程之间形成首尾相接 的循环等待资源关系;
以上四种是死锁的必要条件,发生死锁时以上条件都会成立,只要条件之一不成立,就不会发生死锁。
9.synchronized 底层实现原理?
java中的每一个对象都可以作为锁;普通的同步方法,锁是当前的实例对象;静态同步方法,锁是当前类的class对象;同步方法块,锁是括号里的对象
10.什么是反射?
主要是指程序可以访问、检测和修改它本身状态或行为的一种能力;可以在运行时判断任意一个对象所属的类,在运行时构造任意一个类的对象,在运行时判断任意一个类所具有的成员变量和方法,在运行时调用任意一个对象的方法。