2020-02-25
1 八种基本数据类型的大小,以及他们的封装类
2 引用数据类型
类、接口、数组;
在栈中存放别名,相当于“指针”,指向 堆的变量(new的);
当堆的变量不再被引用,由GC回收
3 Switch能否用string做参数
jdk1.7,字符串,字符类型,枚举,布尔;
4 equals与==的区别
字符串变量,==比较内存存放地址,equals比较内容;
非字符串变量,比较两个引用变量是否指向同一个对象,即在堆内存的首地址;
Object类中的equals方法是用来比较“地址”的;
5 自动装箱,常量池
6 Object有哪些公用方法
clone 保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常
equals 在Object中与==是一样的,子类一般需要重写该方法
hashCode 该方法用于哈希查找,重写了equals方法一般都要重写hashCode方法。这个方法在一些具有哈希功能的Collection中用到
getClass final方法,获得运行时类型
wait 使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁。
notify 唤醒在该对象上等待的某个线程
notifyAll 唤醒在该对象上等待的所有线程
toString 转换成字符串,一般子类都有重写,否则打印句柄
7 java的四种引用,强弱软虚,用到的场景
强引用:对象;
软引用:把对象赋值为null,内存不足时会被回收;
弱引用:无object对象存放,new后直接使用;
虚引用(PhantomReference):在任何时候都可能被垃圾回收器回收
8 Hashcode的作用
寻域(寻找某个对象在集合中区域位置)
返回该对象的哈希码值
9 HashMap的hashcode的作用
10 为什么重载hashCode方法?
11 ArrayList、LinkedList、Vector的区别
ArrayList-数组,遍历方式(迭代器Iterator、for、foreach),适合随机查找和遍历;
LinkedList-双向链表,适合动态插入和删除元素;
Vector-数组,支持线程同步;
ArrayList和Vector都是使用Object类型的数组来存储数据的,
ArrayList的默认容量是0,Vector的默认容量是10;
扩容的本质是产生一个新数组,将原数组的数据复制到新数组,
再将新的元素添加到新数组中,使用的方法是Arrays.copyOf(),
其中ArrayList扩容后的容量是之前的1.5倍,
Vector默认情况下扩容后的容量是之前的2倍。
12 String、StringBuffer与StringBuilder的区别
运行速度快慢为:StringBuilder > StringBuffer > String;
StringBuffer是线程安全;
13 Map、Set、List、Queue、Stack的特点与用法
Map:一个映射不能包含重复的键;每个键最多只能映射到一个值;
Set:不包含重复元素的 collection,不可随机访问包含的元素,只能Iterator单向遍历;
List:随机访问,有序,任意增删;
Queue:先进先出,LinkedList类实现了Queue接口;
Stack:继承自Vector
14 HashMap和HashTable的区别
hash数组初始化时机不同,Hashtable在构造函数初始化,HashMap在第一次put()初始化hash数组。
在HashTable中,hash数组默认大小是11,增加的方式是old*2+1。
在HashMap中,hash数组默认大小是16,增加的方式是2*old而且一定是2的整数.
HashMap允许空(null)键值(key),而HashTable不允许。
HashMap把Hashtable的contains()方法去掉了,改成了containsvalue()和containsKey()。
Hashtable的方法是线程安全的,而HashMap不支持线程的同步,不是线程安全的。
Hashtable使用Enumeration,HashMap使用Iterator。
hash值的使用不同,HashTable直接使用对象的hashCode。
15 JDK7与JDK8中HashMap的实现
JDK7中采用位桶+链表,即散列链表,
而JDK8中采用位桶+链表/红黑树,非线程安全的。
当某个位桶的链表的长度达到某个阀值的时候,这个链表就将转换成红黑树。
16 HashMap和ConcurrentHashMap的区别,HashMap的底层源码
17 ConcurrentHashMap能完全替代HashTable吗
18 为什么HashMap是线程不安全的
19 如何线程安全的使用HashMap
20 多并发情况下HashMap是否还会产生死循环
21 TreeMap、HashMap、LindedHashMap的区别
22 Collection包结构,与Collections的区别
23 try?catch?finally,try里有return,finally还执行么
24 Excption与Error包结构,OOM你遇到过哪些情况,SOF你遇到过哪些情况
25 Java(OOP)面向对象的三个特征与含义
封装:把客观事物封装成抽象的类;
继承:获得某个对象的属性的方法;实现方式有:实现继承与接口继承;
多态:指一个类实例的相同方法在不同情形有不同表现形式;
26 Override和Overload的含义去区别
Override描述子类与父类方法的关系,Overload描述同一个类中方法的关系
Override的方法必须完全相同,权限不少于父类,Overload方法名必须相同,参数必须不同,返回值可同可不同
27 Interface与abstract类的区别
接口作为系统和外界交互的 窗口,“规范”;抽象类作为系统中多个子类的共同父类,“模板设计”;
.一个类最多继承一个直接父类(普通类或者抽象类),可以实现多个接口。
29 foreach与正常for循环效率对比
for:数组结构;
foreach:编译成字节码之后,使用迭代器实现;比迭代器遍历多了生成中间变量这一步,因为性能也略微下降了一些;
30 Java IO与NIO
31 java反射的作用于原理
32 泛型常用特点
33 解析XML的几种方式的原理与特点:DOM、SAX
34 Java1.7与1.8,1.9,10 新特性
35 设计模式:单例、工厂、适配器、责任链、观察者等等
36 JNI的使用
37 AOP是什么
38 OOP是什么
39 AOP与OOP的区别