Java基础面试重点-2

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默认容量大小是16;Hashtable默认容量大小是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 ->有边界;底层数组;不支持同时读写,底层用一把锁(ReentrantLock)
    • LinkedBlockingQueue ->可选择的有边界;支持同时读写,底层两把锁
    • PriorityBlockingQueue -> 底层数据结构是堆 -> 数组与堆的转换:heapInsert(插入堆)、heapify(堆化)
    • DelayQueue -> 单机版延迟队列;添加元素实现Delay接口,重写两个方法。
    • SynchronousQueue -> 容量为0,put()添加一个元素后,会等待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 a=new String("123")+new String("456"); // String b=new String("123456"); String intern = a.intern(); System.out.println(intern==a); // 注释输出true,取消注释 输出false

参考文章(不错):

https://blog.csdn.net/qq_41884976/article/details/83353389

39. Java种的代理有几种实现方式?

静态代理:

在程序编译前,代理类已经被创建完成。

动态代理:

  • JDK:Proxy
    • 面向接口的动态代理:代理一个对象去增强面向某个接口中定义的方法。
    • 没有接口不可用。
    • 只能读取到接口上的一些注解。
    • 举例:MyBatis DeptMapper dm=sqlSession.getMapper(DeptMapper.class)
  • 第三方:CGlib
    • 面向父类的动态代理(继承)-> 底层原理:操作字节码生成新的类 -> 大量使用可能导致元空间的溢出(拓展点)
    • 有没有接口都可以使用。
    • 可以读取类上的注解。
    • 举例: AOP 日志 性能检测 事务

40. Java中的自增是线程安全的吗,如何实现线程安全的自增?

  • i++、++i 不是线程安全的。
  • 解决1:增加Synchronized进行线程同步。
  • 解决2:使用Reetrantent锁进行锁定(lock、unlock处理)。
  • 解决3:AtomicInteger -> 使用Unsafe中的CAS -> CAS的ABA问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/703258.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[SWPUCTF 2022 新生赛]ez_1zpop(php反序列化之pop链构造)

[SWPUCTF 2022 新生赛]ez_ez_unserialize <?php class X {public $x __FILE__;function __construct($x){$this->x $x; }function __wakeup(){if ($this->x ! __FILE__) {$this->x __FILE__; }}function __destruct(){highlight_file($this->x);//flag is…

普涨和补涨—2024年上半年全球投资趋势

全球大宗商品价格处在上涨周期&#xff0c;东吴证券认为上游能源行业股价还有继续上涨的空间。随着6月全球股指进一步上涨&#xff0c;预计港股可能还会迎来补涨行情。 一、我们观察的全球投资趋势&#xff1a; 1、全球股指普涨&补涨。全球风险资产进入2024年后普遍上涨&am…

【Apache Doris】周FAQ集锦:第 5 期

【Apache Doris】周FAQ集锦&#xff1a;第 5 期 SQL问题数据操作问题运维常见问题其它问题关于社区 欢迎查阅本周的 Apache Doris 社区 FAQ 栏目&#xff01; 在这个栏目中&#xff0c;每周将筛选社区反馈的热门问题和话题&#xff0c;重点回答并进行深入探讨。旨在为广大用户和…

bugku---misc---easy_nbt

1、题目描述 2、下载附件&#xff0c;解压之后得到 3、查找资料发现&#xff1a;NBT文件是Minecraft游戏数据文件&#xff0c;其中包含以命名二进制标签(NBT)格式保存的数据。这种格式用于存储大量二进制数据&#xff0c;通常包含有关Minecraft世界的信息。NBT数据通常以.dat文…

机器学习——集成学习和梯度提升决策树

集成学习 不同的算法都可以对解决同一个问题&#xff0c;但是可能准确率不同&#xff0c;集成学习就是不同算法按照某种组合来解决问题&#xff0c;使得准确率提升。 那怎么组合算法呢&#xff1f; 自举聚合算法**&#xff08;bagging&#xff09;** 顾名思义是 自举聚合 自举…

Vue3中子组件挂载问题,父组件修改子组件值的问题

1&#xff0c;首先在父组件导入子组件 挂载 2&#xff0c;传递值给子组件 3&#xff0c;子组件

源代码加密的十个关键点

源代码加密是一种安全措施&#xff0c;其目的是为了保护软件的源代码不被未授权的个人或实体访问或泄露。源代码是软件应用程序的基础&#xff0c;它包含了程序的逻辑结构、核心算法以及设计理念。由于源代码承载了软件的核心知识和创新&#xff0c;因此它具有极高的商业价值和…

网络编程1--初识网络

1.1 网络 单机时代 ----------> 局域网时代 ----------> 广域网时代 -------------> 移动互联网时代 1、单机时代&#xff1a;即主机之间无法通信&#xff0c;只能访问自己电脑上的内容&#xff08;只能玩一些单机游戏&#xff0c;扫雷&#xff0c;蜘蛛纸牌.....&am…

LabVIEW与Python的比较及联合开发

LabVIEW和Python在工业自动化和数据处理领域各具优势&#xff0c;联合开发可以充分发挥两者的优点。本文将从语言特性、开发效率、应用场景等多个角度进行比较&#xff0c;并详细介绍如何实现LabVIEW与Python的联合开发。 语言特性 LabVIEW 图形化编程&#xff1a;LabVIEW使用…

鸿蒙轻内核A核源码分析系列五 虚实映射(3)虚拟物理内存映射

3、虚实映射函数LOS_ArchMmuMap 从上文可知&#xff0c;用户程序加载启动时&#xff0c;会将代码段、数据段映射进虚拟内存空间&#xff0c;此时并没有物理页做实际的映射&#xff1b;程序执行时&#xff0c;如下图&#xff08;图片来自OpenHarmony docs开源站点&#xff09;粗…

Java到AI大模型,我为什么选择的后者

我为什么从Java转到AI大模型 在编程的海洋里&#xff0c;Java一直是我信赖的“小船”&#xff0c;载着我航行在代码的世界中。然而&#xff0c;随着行业的不断发展和变化&#xff0c;我开始感受到了一丝的迷茫和不安。我开始担心&#xff0c;随着技术的不断更新&#xff0c;Ja…

支付平台界面感知评估

目标&#xff1a; 了解本地用户在本地语言下对产品用户界面 (UI) 的感受和体验&#xff1a; 界面的目的是否对本地用户清晰&#xff0c;并且是否符合本地文化和国家标准&#xff1b;界面中的文本是否正确显示&#xff0c;是否存在语法、拼写或其他错误&#xff0c;包括品牌一致…

Vue21-列表排序

一、需求 二、解决方式 <body><div id"root"><h2>人员列表</h2><input type"text" placeholder"请输入" v-model"keyword"><button click"sortType 1">年龄升序</button><b…

[AI资讯·0612] AI测试高考物理题,最高准确率100%,OpenAI与苹果合作,将ChatGPT融入系统中,大模型在物理领域应用潜力显现

AI资讯 国产AI大战高考物理&#xff0c;第1题全对&#xff0c;第2题开始放飞终于放大招了&#xff0c;2024WWDC&#xff0c;苹果开启AI反击战苹果一夜重塑iPhone&#xff01;GPT-4o加持Siri&#xff0c;AI深入所有APPOpenAI确认苹果集成ChatGPT 还任命了两位新高管GPT-4搞不定…

中文藏文翻译怎么在线翻译?通过这些方法

中文藏文翻译怎么在线翻译&#xff1f;随着全球化的加速和跨文化交流的日益频繁&#xff0c;中文与藏文之间的翻译需求逐渐增加。为了满足这一需求&#xff0c;各种在线翻译工具和方法应运而生。下面&#xff0c;本文将详细介绍三种中文藏文在线翻译的方法&#xff0c;帮助用户…

yolov3 详解

文章目录 1、yolov3原理2、损失函数3、yolov3改进4、使用opencv实现yolov35、卷积神经网络工作原理 1、yolov3原理 参考视频 darknet53&#xff1a;52个卷积层和1个全联接层 输入图像为416416 1313 -》 下采样32倍 2626 -》 下采样16倍 5252 -》 下采样8倍 由标注框中心点落在…

图形学初识--定义摄像机类(实战)

文章目录 前言正文定义摄像机的操作方式键盘操作鼠标操作 定义摄像机类核心数据视图矩阵回顾&#xff1a;模拟摄像机的移动模拟摄像机的旋转 结尾&#xff1a;喜欢的小伙伴点点关注赞哦! 前言 前面一些章节讲解了图形学的比较原理性的内容&#xff0c;这一章节咱就实战一下&am…

Vue2后台管理:项目开发全流程(一)

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;vue篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来vue篇专栏内容:Vue2后台管理&#xff1a;项目开发全流程(一) 目录 Vue项目开发 项目架构搭建 1、创建项目 2、…

SolidWorks 2016 SP5安装教程

软件介绍 Solidworks软件功能强大&#xff0c;组件繁多。 Solidworks有功能强大、易学易用和技术创新三大特点&#xff0c;这使得SolidWorks 成为领先的、主流的三维CAD解决方案。 SolidWorks 能够提供不同的设计方案、减少设计过程中的错误以及提高产品质量。SolidWorks 不仅…

开发移动端常见的问题:VW适配问题,基于 postcss 插件 实现项目vw适配

当你开发移动端的时候有一个问题是避免不了的&#xff0c;那就是当屏幕大小无论怎么变化时&#xff0c;内部尺寸也要随之发生改变&#xff0c;也就是适配问题。这里我们讲的是最新的VW适配&#xff0c;也就是用vw作为单位&#xff0c;100vw是整个页面的大小。而在开发的设计图中…