Java基础
容器
1.Java容器都有哪些
总体分为Collection 、Map,细分为List、Set、Map
2.List、Set、Map之间的区别
List:可以有重复元素;有序容器;可以有多个null元素
Set:无重复元素;无序容器;一个null元素
Map:键唯一;可以存在一个null值的键;任意多个null元素值
3.HashMap与HashTable的区别
HashMap线程不安全;允许键或值为空;性能更好;两者的继承关系不同
HashTable线程安全;不允许键或值为空
4.如何决定使用HashMap与TreeMap
HashMap:基于散列表实现,适用于 查询
TreeMap:基于红黑树实现,适用于 增加、快速创建
5.说一下HashMap的实现原理
jdk1.8之前
HashMap底层是基于 数组和链表 实现的
jdk1.8及以上
HashMap底层是基于 数组+链表(当链表长度大于阀值时,链表改为红黑树)
6.说一下HashSet的实现原理
底层是HashMap
7.ArrayList与LinkedList的区别
Arraylist:底层是基于动态数组,查询快,向数组尾部添加元素的效率高;但是删除数组中的数据以及向数组中间添加数据效率低,因为需要移动数组
Linkedlist基于链表的动态数组,数据添加、删除效率高
8.Array与ArrayList有何区别
Array可以包含 基本类型和对象类型;大小固定;
ArrayList只能包含 对象类型;大小是动态变化的;提供了更多的方法和特性
如何实现Array与List之间的转换
List转数组:toArray()
数组转List:Collections.addAll()、Arrays.asList(a)
9.在队列Queue中poll()与remove有何区别
都是从队列中取出一个元素
poll()获取元素失败时会返回null
remove() 失败的时候会抛出异常
10.哪些集合类是线程安全的
Vector:就比ArrayList多了一个同步化机制(线程安全)
LinkedList
HashTable
ConcurrentHashMap
11.迭代器Iterator是什么
对集合进行迭代的类,不能创建该对象,该对象是以内部类的形式存在于每个集合类的内部。
12.Iterator怎么使用,有什么特点
13.Iterator与ListIterator有什么区别
14.怎么确保一个集合不能被修改
Collections.unmodifiableList(List)
Collections.unmodifiableMap(Map)
Collections.unmodifiableSet(Set)
多线程
反射
1.什么是反射
在运行状态中,对于任意一个类都能够知道这个类的所有属性和方法;并且对于任意一个对象,都能够调用任意一个它的方法
2.什么是java序列化?什么情况下需要序列化
序列化:将对象转换为字节序列的过程
当java对象 需要在网络上传输或者 持久化存储到文件中 时,java对象需要序列化
3.动态代理是什么?有哪些应用
动态代理是在程序运行期间生成特定目标对象或目标接口的代理对象
代理模式分为动态代理和静态代理,是一种思想
应用(即动态代理的实现):SpringAop机制、RPC框架
4.怎么实现动态代理
对象拷贝
Java Web模块
异常
网络
1.http响应码301与302分别代表的是什么,有什么区别
301:重定向到新的url,旧地址资源不可访问了
302:暂时性重定向到新的url,旧地址资源仍然可以访问
设计模式
框架
Spring
Hibernate
Mybatis
中间件
数据库
JVM
1.为什么等待和通知是在Object类而不是Thread类
- wait和notify是Java中两个线程之间的通信机制
- 每个对象都可以上锁
- 在Java中为了进入代码的临界区,线程需要锁定并等待锁定
- Java是基于Hoare的监视器的思想
在Java中,每个对象都有一个监视器
2.为什么Java不支持多继承
- 钻石型继承产生的歧义
- 多重继承过于复杂,容易产生问题
3.为什么String在Java中是不可变的
- 安全性(被类加载机制使用)
- 字符串池