![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
面试基础总结
Java基础及面试总结心得
Bug世界
一名90后奋斗中的程序员!
展开
-
线程的几种状态?
java线程的几种状态一. 线程状态类型新建状态(New):新创建了一个线程对象。就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权。运行状态(Running):就绪状态的线程获取了CPU,执行程序代码。阻塞状态(Blocked):阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止...原创 2019-10-18 18:07:18 · 110 阅读 · 0 评论 -
怎么使用 synchronized 关键字?
修饰实例方法,作用于当前对象实例加锁,进入同步代码前要获得当前对象实例的锁public synchronized void normalMethod() throws InterruptedException { for (int i = 0; i < 10; i++) { Thread.sleep(1000); System.out...原创 2019-10-13 09:38:55 · 522 阅读 · 0 评论 -
ConcurrentHashMap 和 Hashtable 的区别?
ConcurrentHashMap 和 Hashtable 的区别1. 底层数据结构: JDK1.7的 ConcurrentHashMap 底层采用 分段的数组+链表 实现,JDK1.8 采用的数据结构跟HashMap1.8的结构一样, 数组+链表/红黑二叉树。2. 实现线程安全的方式(重要):① 在JDK1.7的时候,ConcurrentHashMap(分段锁) 对整个桶数组进行了分割分段...原创 2019-10-12 17:24:37 · 149 阅读 · 0 评论 -
HashSet 和 HashMap 区别?
HashSet 底层就是基于 HashMap 实现的。(HashSet 的源码非常非常少,因为除了 clone() 方法、writeObject()方法、readObject()方法是 HashSet 自己不得不实现之外,其他方法都是直接调用 HashMap 中的方法。)...原创 2019-10-12 17:16:50 · 655 阅读 · 0 评论 -
HashMap 和 Hashtable 的区别?
1. 线程是否安全: HashMap 是非线程安全的,HashTable 是线程安全的;HashTable 内部的方法基本都经过synchronized 修饰。(如果你要保证线程安全的话就使用 ConcurrentHashMap 吧!);2. 效率: 因为线程安全的问题,HashMap 要比 HashTable 效率高一点。另外,HashTable 基本被淘汰,不要在代码中使用它;3. 对...原创 2019-10-12 17:13:11 · 131 阅读 · 0 评论 -
HashMap的底层实现(1.8前后的区别)
JDK1.8之前JDK1.8 之前 HashMap 底层是 数组和链表 结合在一起使用也就是 链表散列。HashMap 通过 key 的 hashCode 经过扰动函数处理过后得到 hash 值,然后通过 (n - 1) & hash 判断当前元素存放的位置(这里的 n 指的是数组的长度),如果当前位置存在元素的话,就判断该元素与要存入的元素的 hash 值以及 key 是否相同,如果相...原创 2019-10-12 17:05:11 · 865 阅读 · 0 评论 -
Arraylist 与 LinkedList 异同?
是否保证线程安全: ArrayList 和 LinkedList 都是不同步的,也就是不保证线程安全;底层数据结构: Arraylist 底层使用的是Object数组;LinkedList 底层使用的是双向链表数据结构(JDK1.6之前为循环链表,JDK1.7取消了循环。注意双向链表和双向循环链表的区别:);插入和删除是否受元素位置的影响:① ArrayList 采用数组存储,所以插入和...原创 2019-10-12 16:53:05 · 185 阅读 · 0 评论 -
为什么HashMap链表长度超过8会转成红黑树结构
底层数据结构: JDK1.8 以后的 HashMap 在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为8)时,将链表转化为红黑树,以减少搜索时间。为什么HashMap链表长度超过8会转成红黑树结构?红黑树的插入、删除和遍历的最坏时间复杂度都是log(n),log(6)=2.6链表 8/2=4红黑树 log(8)=32.由频率表可以看出,桶的长度超过8的概率非常非常...原创 2019-08-31 22:26:20 · 2114 阅读 · 0 评论 -
ConcurrentHashMap 和 Hashtable 的区别?
ConcurrentHashMap 和 Hashtable 的区别?ConcurrentHashMap 和 Hashtable 的区别主要体现在实现线程安全的方式上不同。 1底层数据结构: JDK1.7的 ConcurrentHashMap 底层采用 分段的数组+链表 实现,JDK1.8 采用的数据结构跟HashMap1.8的结构一样,数组+链表/红黑二叉树。Hashtable 和 J...原创 2019-08-31 22:30:52 · 699 阅读 · 0 评论 -
Java类的加载器
类的加载是由类加载器完成的,类加载器包括:根加载器( BootStrap )、扩展加载器( Extension )、系统加载器( System )和用户自定义类加载器( java.lang.ClassLoader 的子类)。从 Java 2 ( JDK 1.2 )开始,类加载过程采取了父亲委托机制( PDM )。 PDM 更好的保证了 Java 平台的安全性,在该机制中, JVM 自带的 Boo...原创 2019-10-26 15:32:58 · 184 阅读 · 0 评论 -
接口和抽象类的区别
1.接口的方法默认是 public,所有方法在接口中不能有实现(Java 8 开始接口方法可以有默认实现),抽象类可以有非抽象的方法2. 接口中的实例变量默认是 final 类型的,而抽象类中则不一定3. 一个类可以实现多个接口,但最多只能实现一个抽象类4. 一个类实现接口的话要实现接口的所有方法,而抽象类不一定5. 接口不能用 new 实例化,但可以声明,但是必须引用一个实现该接口的对...原创 2019-10-12 16:46:56 · 106 阅读 · 0 评论