当前位置: 首页 > news >正文

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问题。

相关文章:

Java基础面试重点-2

21. JVM是如何处理异常(大概流程)? 如果发生异常,方法会创建一个异常对象(包括:异常名称、异常描述以及异常发生时应用程序的状态),并转交给JVM。创建异常对象,并转交给…...

【活动文章】通用大模型VS垂直大模型,你更青睐哪一方

垂直大模型和通用大模型各有其特定的应用场景和优势。垂直大模型专注于特定领域,提供深度的专业知识和技能,而通用大模型则具备广泛的适用性和强大的泛化能力。以下是一些垂直大模型和通用大模型的例子: 垂直大模型 BERT-Financial&#xf…...

记录一个Qt调用插件的问题

问题背景 使用Qt主程序插件的方式开发,即主程序做成一个框,定义好插件接口,然后主程序上通过插件接口与插件进行交互。调试过程中遇到了两个问题,在这里记录一下。 问题1(信号槽定义) 插件与主程序之间&am…...

9.1 Go 接口的定义

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…...

易于上手的requests

Python中的requests库主要用于发送HTTP请求并获取响应结果。在现代网络编程中,HTTP请求是构建客户端与服务器之间通信的基础。Python作为一种高级编程语言,其丰富的库支持使得它在网络数据处理领域尤为突出。其中,requests库以其简洁、易用的…...

【QT Creator软件】解决中文乱码问题

QT Creator软件解决中文乱码问题 问题描述:Qtcreator安装好后打印中文在控制台输出乱码 在网上也查找了修改编辑器的默认编码为UTF-8,但是仍然没有任何作用,于是有了以下的解决方案 原因剖析:因为项目的编码与控制台的编码不一致…...

边缘网关在智能制造工厂中的创新应用及效果-天拓四方

在数字化浪潮席卷之下,智能制造工厂正面临着前所未有的数据挑战与机遇。边缘网关,作为数据处理与传输的关键节点,在提升工厂运营效率、确保数据安全方面发挥着日益重要的作用。本文将通过一个具体案例,详细阐述边缘网关在智能制造…...

Django-filter

准备工作 首先,确保你已经安装了django-filter包。如果没有,请使用以下命令安装: pip install django-filter然后,在你的settings.py文件中添加django_filters到INSTALLED_APPS列表中: INSTALLED_APPS [# ...djang…...

文字悬停效果

文字悬停效果 效果展示 CSS 知识点 CSS 变量使用回顾-webkit-text-stroke 属性的运用与回顾 页面整体结构实现 <ul><li style"--clr: #e6444f"><a href"#" class"text">First</a></li><li style"--cl…...

[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…...

2-1基于matlab的拉普拉斯金字塔图像融合算法

基于matlab的拉普拉斯金字塔图像融合算法&#xff0c;可以使部分图像模糊的图片清楚&#xff0c;也可以使图像增强。程序已调通&#xff0c;可直接运行。 2-1 图像融合 拉普拉斯金字塔图像融合 - 小红书 (xiaohongshu.com)...

Android基础-进程间通信

在Android系统中&#xff0c;跨进程通信&#xff08;IPC&#xff0c;Inter-Process Communication&#xff09;是实现不同应用程序或同一应用程序中不同进程间数据共享和交互的关键技术。Android提供了多种IPC机制&#xff0c;每种机制都有其特定的使用场景和优缺点。下面将详细…...

【微信小程序】uni-app 配置网络请求

原因 由于平台的限制&#xff0c;小程序项目中 不支持axios&#xff0c;而且原生的&#xff0c;wx.request()API功能较为简单&#xff0c;不支持拦截器等全局定制的功能。因此&#xff0c;建议在uni-app项目中使用 escook/request-miniprogram 第三方包发起网络数据请求。 步…...

SpringCash

文章目录 简介引入依赖常用注解application.yml使用1. 启动类添加注解使用方法上添加注解 简介 Spring Cache是一个框架&#xff0c;实现了基于注解的缓存功能底层可以使用EHCache、Caffeine、Redis实现缓存。 注解一般放在Controller的方法上&#xff0c;CachePut 注解一般有…...

小红书的文案是怎么写的?有啥套路么!

小红书文案是有自己的调性的&#xff0c;为什么别人的笔记轻轻松松就是爆款&#xff0c;而自己写的笔记却没有人看呢&#xff0c;小红书文案写作有啥套路&#xff1f; 接下来伯乐网络传媒给大家讲一讲&#xff0c;小红书文案写作揭秘&#xff1a;抄作业、拆解产品到种草笔记结…...

开放平台接口安全验证

文章目录 开放平台接口安全验证I 加签方式说明1.1 签名生成的通用步骤1.2 生成随机数算法1.3 举例1.4 签名校验工具II Header参数说明III 业务接口返回结构说明开放平台接口安全验证 统一使用sign签名验证,签名规则也会在本文档中,详细说明。请大家认真阅读。 向平台申请密码…...

【AI原理解析】— GPT-4o模型

目录 1. 统一架构设计 2. 端到端训练 3. 模态间的信息融合 4. 语音处理 5. 视频处理 6. 性能特点 7. 模型特点 8. 服务和免费政策 9. 实时推理能力 10. 高效的编码方式 11. 输出与反馈 1. 统一架构设计 GPT-4o采用单一的Transformer架构进行设计&#xff0c;将文本…...

Qt中图表图形绘制类介绍

接上篇介绍QChart 相关的类&#xff0c;本片主要在QChart 载体上进行图表图形绘制使用各种形状的图类。 一.QXYSeries类 QXYSeries类是QLineSeries折线图&#xff0c;QSplineSeries样条曲线图&#xff0c;QScatterSeries散点图的基类&#xff1b; QXYSeries类的使用都可以参考…...

nginx rewrite地址重写

常用的nginx正则表达式 ^匹配以...开头的字符串$匹配以...结尾的字符串^$^$表示空行*匹配前面的字符0次或者多次&#xff08;通配符*表示任意数量的任意字符&#xff09;匹配前面的字符1次或多次?匹配前面的字符0次或1次.匹配除了“\n”之外的任意单个字符&#xff0c;[.\n]表…...

java+vue3+el-tree实现树形结构操作

基于springboot vue3 elementPlus实现树形结构数据的添加、删除和页面展示 效果如下 代码如下&#xff0c;业务部分可以自行修改 java后台代码 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.daztk.mes.common.annotation.LogOperation…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试&#xff0c;通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小&#xff0c;增大可提高计算复杂度duration: 测试持续时间&#xff08;秒&…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局&#xff1a;刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断"&#xff0c;医生需通过显微镜观察组织切片&#xff0c;在细胞迷宫中捕捉癌变信号。某省病理质控报告显示&#xff0c;基层医院误诊率达12%-15%&#xff0c;专家会诊…...