做电影网站需要哪些证,wordpress js 版本,网站建设活动策划方案,vultr服务器建wordpress21. JVM是如何处理异常#xff08;大概流程#xff09;#xff1f;
如果发生异常#xff0c;方法会创建一个异常对象#xff08;包括#xff1a;异常名称、异常描述以及异常发生时应用程序的状态#xff09;#xff0c;并转交给JVM。创建异常对象#xff0c;并转交给…21. JVM是如何处理异常大概流程
如果发生异常方法会创建一个异常对象包括异常名称、异常描述以及异常发生时应用程序的状态并转交给JVM。创建异常对象并转交给JVM的过程称为抛出异常。
异常发生后可能有一系列的方法调用终才进入抛出异常的方法这一系列方法调用的有序列表叫做调用栈。
JVM会顺着调用栈去查找看是否有可以处理异常的代码如果有则调用异常处理代码。如果没有JVM就会将该异常转交给默认的异常处理器默认处理器为JVM 的一部分默认异常处理器打印出异常信息并终止应用程序。 22. 请聊一下java的集合类以及在实际项目中你是如何用的
注意说出集合体系、常用类、接口、实现类。高并发的集合类、参照集合增强内容。在实际项目中引用。 23. Java集合框架类图 24. ArrayList与LinkedList的区别
ArrayList基于动态数组顺序表的数据结构LinkedList基于链表双向链表的数据结构ArrayList随机访问快LinkedList随机访问慢ArrayList添加和删除慢LinkedList添加和删除快此外LinkedList还专门提供了操作表头和表尾元素的方法可当做堆栈、队列和双向队列使用。 25. ArrayList与Vector的区别
相同底层都是数组实现的ArrayList不是线程安全但是效率高Vector是线程安全效率低源码中方法用synchronized修饰ArrayList和Vector都采用线性连续存储空间默认容量大小都为10存储空间不足时ArrayList默认1.5倍扩容 Vector默认1倍扩容ArrayList可以通过Collections.synchronizedList(List list) 实现线程同步的集合。注Vector是java的遗留框架遗留框架设计上存在问题已经不再使用。遗留框架还有Hashtable、Dictionary、BitSet、Stack、Properties、Enumeration。 26. HashMap和Hashtable的区别?
HashMap是非同步非安全线程但速度快Hashtable是同步安全线程但速度慢。HashMap可以接受null值 key和value都可为空Hashtable不可以。HashMap默认容量大小是16Hashtable默认容量大小是11。HashMap的hash值重新计算过Hashtable直接使用hashCode。HashMap继承自AbstractMap类Hashtable继承自Dictionary类 27. HashMap在1.8中做了哪些优化
数据结构 -- 数组 链表 红黑树hash函数 -- 高16参与Hash降低Hash冲突扩容优化 -- 扩容时元素不需要进行重新计算位置。新位置 原位置 原数组长度 28. HashMap线程安全的方式
HashMap不是线程安全的。
方法一通过Collections.synchronizedMap()方法二使用ConcurrentHashMap 29. HashMap为什么扩容是两倍
将取模转为位运算操作提高运算效率只有2的幂次方成立 - (n-1)hash并且在容量是2的幂次方时n-1的二进制会全为1位运算时可以充分散列避免不必要的哈希冲突。 30. HashMap为什么要使用红黑树
红黑树是动态平衡的一棵二叉查找树可以加速查找。HashMap什么时候转换红黑树数组长度大于64索引节点位置元素个数大于8转换、什么时候转换链表索引位置元素个数等于6时转换。说一下向关联的知识。 31. HashMap为什么用红黑树不用普通的AVL树
总
AVL是高度平衡树调整频率高适合查询多修改少的场景。红黑树是弱平衡树调整频率低适合修改多场景。
AVL树
AVL树是高度平衡树任何两个左右子树高度大于1时就好动态调整到平衡。所以AVL树适合用于插入与删除次数比较少但查找多的情况。
红黑树:
它也是一种平衡二叉树但每个节点带颜色可以是红或黑。通过对任何一条从根到叶子的路径上各个节点颜色的限制确保没有一条路径会比其它路径长出两倍所以红黑树是一种弱平衡二叉树。红黑树从根到叶子的最长路径不会超过最短路径的2倍。 32. HashMap为什么在JDK 1.8之后不再有死循环的问题
JDK1.8以前导致死循环的主要原因是扩容后节点的顺序会反掉可能会形成一个环形链。
原因两个线程同时调用了扩容方法扩容同一索引位置。线程一执行途中被挂起Entry next e.next;线程二获得执行时间执行完扩容操作线程一再次获得执行时间会形成环形链然后调用HashTable.get()时出现了无限循环。 https://blog.csdn.net/huantai3334/article/details/104170984 33. 解决hash冲突的方式有哪些
开放定址法 -- ThreadLocal链地址法 -- HashMap再哈希法又叫双哈希当发生冲突时重新计算哈希计算地址直到无冲突。会增加计算时间。建立公共溢出区将哈希表分为基本表和溢出表两部分凡是和基本表发生冲突的元素一律填入溢出表。 34.Queue接口
单端队列与双端队列
Queue与Deque
阻塞队列与非阻塞队列
阻塞队列说一下箭头后的装逼知识 ArrayBlockingQueue -有边界底层数组不支持同时读写底层用一把锁ReentrantLockLinkedBlockingQueue -可选择的有边界支持同时读写底层两把锁PriorityBlockingQueue - 底层数据结构是堆 - 数组与堆的转换heapInsert(插入堆)、heapify(堆化)DelayQueue - 单机版延迟队列添加元素实现Delay接口重写两个方法。SynchronousQueue - 容量为0put()添加一个元素后会等待task()删除一个元素LinkedBlockingDeque。非阻塞队列PriorityQueue、ConcurrentLinkedQueue、LinkedTransferQueue。
队列方法 35. 集合类是怎么解决高并发中的问题
先说一下非安全的集合类。然后再说普通的安全的集合类Vector HashTable。最后说JUC下的高并发集合类。 ConcurrentHashMap和底层 - ConcurrentHashMap和HashTable的区别拓展点。ConcurrentSkipListMap(Set)线程安全的有序的哈希表它替代TreeMap。CopyOnWriteArrayList写入时加锁将原数据复制到另一个数组中它只能保证数据的最终一致性不适合频繁写入的操作。 36. JDK1.8的新特性
Lambda表达式。函数式编程Optional、Predicate、Supplier、Consumer、Function。方法引用和构造器调用 -- :: 关键字来传递方法或者构造函数引用。接口中可以有默认方法default关键字。Stream API。新时间日期API。CompletableFuture类。 37. Stream的并行操作原理Stream并行的线程池是从哪里来的
Stream的概念
Stream专注于对容器对象进行各种非常便利、高效的聚合操作或者大批量数据操作。
三个操作步骤
创建Stream从一个数据源如集合、数组中获取流。中间操作一个操作的中间链对数据源的数据进行操作。终止操作一个终止操作执行中间操作链并产生结果。
Stream并行parallel原理
它底层依赖于ForkJoinPool.commonPool线程池这是一个JVM进程全局共享的线程。在ForkJoin上进行了一层封装将Stream不断尝试分解成更小的集合然后使用ForkJoin框架分而治之。 38. 关于intern() pass
String anew String(123)new String(456); // String bnew String(123456); String intern a.intern(); System.out.println(interna); // 注释输出true,取消注释 输出false
参考文章不错
https://blog.csdn.net/qq_41884976/article/details/83353389 39. Java种的代理有几种实现方式
静态代理
在程序编译前代理类已经被创建完成。
动态代理
JDKProxy 面向接口的动态代理代理一个对象去增强面向某个接口中定义的方法。没有接口不可用。只能读取到接口上的一些注解。举例MyBatis DeptMapper dmsqlSession.getMapper(DeptMapper.class)第三方CGlib 面向父类的动态代理继承- 底层原理操作字节码生成新的类 - 大量使用可能导致元空间的溢出拓展点有没有接口都可以使用。可以读取类上的注解。举例 AOP 日志 性能检测 事务 40. Java中的自增是线程安全的吗如何实现线程安全的自增
i、i 不是线程安全的。解决1增加Synchronized进行线程同步。解决2使用Reetrantent锁进行锁定lock、unlock处理。解决3AtomicInteger - 使用Unsafe中的CAS - CAS的ABA问题。