21

【Q】: 什么是Java的SPI机制?

【A】:

  1. SPI 是一种插件机制,用于在运行时动态加载服务的实现。它通过定义接口(服务接口)并提供一种可扩展的方式来让服务的提供着(实现类)在运行时注入,实现解耦和模块化设计。
  2. SPI机制的核心概念:
    1. 服务接口:接口或抽象类,定义某个服务的规范或功能。
    2. 服务提供者:实现了服务接口的具体实现类。
    3. 服务加载器:Java提供的工具类,负载动态加载服务的实现类。提供ServiceLoader可以在运行时发现和加载多个服务提供者。
    4. 配置文件:服务提供者通过在META-INF/services/目录下配置服务接口的文件来声明自己。这些文件的内容是实现该接口的类的完全限定名。
  1. SPI机制的优势:
    1. 解耦:接口与实现分类,客户端不需要依赖具体实现,能够在运行时灵活加载不同的实现类。
    2. 可扩展性:提供了一种易于扩展的机制,允许后期添加或替换实现类,而不需要修改现有的代码。

22

【Q】:Java泛型的作用是什么?

【A】:

  1. Java泛型的作业是通过编译时检查类型安全,允许程序员编写更通用和灵活的代码,避免在运行时发现类型转换错误。
  2. 作用:
    1. 类型安全:泛型运行在编译时进行类型检查,确保在使用集合或者其他泛型类时,不会出现类型不匹配的问题,减少了运行时的ClassCastException错误。
    2. 代码重用:泛型使代码可以适用于多种不同的类型,减少代码重复,提升可读性和维护性。
    3. 消除显式类型转换:泛型允许在编译时指定类型参数,从而消除了运行时需要显示类型转换的麻烦。

23

【Q】:Java泛型擦除是什么?

【A】:

  1. 泛型擦除指Java编译时将所有泛型信息删除的过程,以确保与Java1.4之前的版本保存兼容。泛型参数在运行时会被替换为其上界(通常是Object),这样一来在运行时无法获取的实际类型。
  2. 作用:泛型擦除确保了Java代码的向后兼容性,但它也限制了在运行时对泛型类型的操作。
  3. 运行:由于类型擦除,无法在运行时获取泛型的实际类型,也不能创建泛型类型的数组或对泛型类型使用 。

24

【Q】:什么是Java泛型的上下界限定符?

【A】:

  1. 用于对泛型类型参数进行范围限制,主要有上界限定符和下界限定符。
  2. 上界限定符(?extends T):?extends T表示通配符类型必须是T类型或T类型的子类。允许使用T或其子类型作为泛型参数,通常用于读取操作,确保可以读取为T或T的子类的对象
  3. 下界限定符(?super T):?super T表示通配符类型必须是T类型或T类型的父类。允许使用T或其父类型作为泛型参数,通常用于写入操作,确保可以安全地向泛型集合中插入T类型的对象

25

【Q】:Java中的深拷贝和浅拷贝有什么区别?

【A】:

  1. 深拷贝:不复制对象本身,还递归复制对象中所有引用的对象。这样新的对象与原对象完全独立。
  2. 浅拷贝:只复制对象的引用,而不复制引用指向的实际对象。浅拷贝创建一个新的对象,但它的字段(若是对象类型)指向的是原对象中的相同内存引用。

26

【Q】:什么是Java的Integer缓存池?

【A】:

  1. Java的Integer缓存池:为了提升性能和节省内存。根据实践发现大部分的数据操作都集中在值比较小的范围,因为缓存这些对象可以减少内存的分配和垃圾回收的负担,提升性能。
  2. -128~127范围内的Integer对象会被缓存和复用。
  3. Java在自动装箱时,对于值在-128~127之间的int类型,会直接返回一个已经缓存的integer对象,而不是创建新的对象。
  4. 缓存池的使用场景:当基本数据类型int转化为包装类型Integer时,若数值在缓存范围内,返回缓存对象;由于相同范围内的整数使用同一个缓存对象,使用==可以正确比较它们的地址(引用相同),而不需要使用equals。但是要注意对于超过范围的Integer对象,==比较的是对象引用,而不是数值。要比较数值,应使用equals方法。

27

【Q】:Java中的类加载过程是怎么样的?

【A】:

  1. 是把类加载到JVM中,把二进制流存储到内存中,之后经过一番解析、处理转化成可用的class类。二进制流可用来源于class文件,或通过字节码工具生成的字节码或来自网络。只要符合格式的二进制流,JVM来着不拒。
  2. 类加载流程分为:加载、连接(验证、准备、解析)、初始化。

28

【Q】:什么是Java中的BigDecimal?

【A】:

  1. 是Java中提供的一个用于高精度计算的类,属于java.math包。对浮点数和定点数的精确控制。
  2. 高精度:可以处理任何精度的数值,而不像float和double存在限制。
  3. 不可变性:所有算术运算都会返回新的BigDecimal对象,而不会改原有对象。
  4. 丰富的功能:提供了较多方法,支持各种舍入模式。

29

【Q】:BigDecimal为什么可以保证精度不丢失?

【A】:

  1. 使用了任意进度的整数表示伐,而不是浮动的二进制表示,
  2. 内部使用两个字段存储数字,一个是整数部分intVal,另一个是用来表示小数点的位置scale,避免了浮点数转化过程中可能的精度丢失。

30

【Q】:new String(“”)会创建多少个对象?

【A】:

  1. 会创建1个或2个字符串对象。
  2. 如果字符串常量池中不存在对象的引用,那么它会在堆上创建两个字符串对象,其中一个字符串对象的引用会被保存在字符串常量池中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/96950.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/96950.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/96950.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P1150 Peter 的烟

记录20#include <bits/stdc.h> using namespace std; int main(){int n,k;cin>>n>>k;int cnt0;while(n>k){cntk;nn-k1;}cntn;cout<<cnt;return 0; }突破口每吸完一根烟就把烟蒂保存起来&#xff0c;k&#xff08;k>1&#xff09;个烟蒂可以换一个…

Cursor和Hbuilder用5分钟开发微信小程序

分享一个5分钟搞定微信小程序开发的技能&#xff0c;需要用到两个工具&#xff1a;Cursor和Hbuilder。 第1步、下载HBuilder。Hbuilder可以实现一套代码直接生成安卓、苹果、鸿蒙各个平台APP。访问Hbuilder的官方网站&#xff0c;HBuilderX-高效极客技巧&#xff0c;选择适合…

k8s的dashboard

找一个装有docker的机器&#xff0c;在一个rocky linux的虚拟机里弄拉取一个rancher镜像建立一个目录&#xff0c;目的&#xff1a;和里面数据做持久化关联后台运行&#xff0c;让他有权限&#xff0c;8080端口和容器80端口映射&#xff0c;443和443做映射查看一下删掉&#xf…

桥接模式,打造灵活可扩展的日志系统C++

一、为什么用桥接模式在企业开发中&#xff0c;日志系统几乎是标配。常见需求&#xff1a;日志有多种类型&#xff08;Info、Warning、Error 等&#xff09;&#xff1b;日志需要支持多种输出方式&#xff08;控制台输出、写文件、远程上传、数据库存储等&#xff09;。如果把这…

kafka--基础知识点--5.3--producer事务

1 事务简介 Kafka事务是Apache Kafka在流处理场景中实现Exactly-Once语义的核心机制。它允许生产者在跨多个分区和主题的操作中&#xff0c;以原子性&#xff08;Atomicity&#xff09;的方式提交或回滚消息&#xff0c;确保数据处理的最终一致性。例如&#xff0c;在流处理中…

利用DeepSeek实现服务器客户端模式的DuckDB原型

在网上看到韩国公司开发的一款GooseDB&#xff0c;DuckDB™ 的功能扩展分支&#xff0c;具有服务器/客户端、多会话和并发写入支持&#xff0c;使用 PostgreSQL 有线协议&#xff0c;但它是Freeware而不是开源&#xff0c;所以让DeepSeek实现之。 首先把readme页面发给他翻译&a…

麦当劳APP逆向

版本 V 7.0.17.0反调试 梆梆企业加固 frida反调试部分代码 headers {"biz_scenario": "500","biz_from": "1004","User-Agent": "mcdonald_Android/7.0.17.0 (Android)","ct": "102","…

大数据毕业设计选题推荐-基于大数据的结核病数据可视化分析系统-Hadoop-Spark-数据可视化-BigData

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、PHP、.NET、Node.js、GO、微信小程序、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇…

Vue3 视频播放器完整指南 – @videojs-player/vue 从入门到精通

前言 在 Vue 3 生态中&#xff0c;视频播放功能是许多应用的核心需求。videojs-player/vue 是一个专门为 Vue 3 设计的视频播放器组件&#xff0c;基于成熟的 Video.js 库构建&#xff0c;提供了简单而强大的视频播放解决方案。 主要特性 Vue 3 组件化&#xff1a;原生 Vue …

【靶场练习】--DVWA第一关Brute Force(暴力破解)全难度分析

注意&#xff0c;这一关必须要使用Burpsuite来抓包 目录Low1.抓包2.发送到爆破模块3.选择爆破模式爆破模式介绍4.添加载荷5.添加字典6.爆破查看查看源码Medium查看源码High1.抓包2.在bp的extensions中找到CSRF Token Tracker&#xff0c;并安装3.构造字典4.成功爆破查看源码Imp…

Java语言——排序算法

一、基本概念排序&#xff1a;将n个数字按一定顺序排列&#xff08;比如&#xff1a;升序&#xff0c;或者降序&#xff09; ^内部排序 &#xff1a;若整个排序过程不需要访问外存便能完成&#xff0c;则称此类排序问题为内部排序 ^外部排序&#xff1a;若参加排序的记录数量很…

【Linux】人事档案——用户及组管理

目录 1 用户及组管理 2 用户及用户组管理命令 2.1 useradd&#xff1a;建立用户 useradd命令用于建立用户&#xff0c;该 2.2 passwd&#xff1a;更改用户密码 2.3 usermod&#xff1a;更改用户信息 2.4 groupadd&#xff1a;建立用户组 2.5 finger&#xff1a;查找并显…

给定一个有序的正数数组arr和一个正数range,如果可以自由选择arr中的数字,想累加得 到 1~range 范围上所有的数,返回arr最少还缺几个数。

给定一个有序的正数数组arr和一个正数range&#xff0c;如果可以自由选择arr中的数字&#xff0c;想累加得 到 1~range 范围上所有的数&#xff0c;返回arr最少还缺几个数。 #include <iostream> #include <vector>using namespace std;void func1(std::vector<…

BigemapPro快速添加历史影像(Arcgis卫星地图历史地图)

这是Esri(Arcgis)官方提供的历史影像数据&#xff0c;可放心使用。https://livingatlas.arcgis.com/wayback如何快速添加到Bigemap Pro软件里&#xff0c;详细步骤如下&#xff1a;复制下面的文本保存为 配置.bmmap,然后拖入软件就可以了{"BmLayerVersion":"1.0…

[免费]基于Python的Django医院管理系统【论文+源码+SQL脚本】

大家好&#xff0c;我是python222_小锋老师&#xff0c;看到一个不错的基于Python的Django医院管理系统&#xff0c;分享下哈。 项目视频演示 https://www.bilibili.com/video/BV1iPH8zmEut/ 项目介绍 随着人民生活水平日益增长&#xff0c;科技日益发达的今天&#xff0c;…

MyBatis 从入门到精通(第三篇)—— 动态 SQL、关联查询与查询缓存

在前两篇博客中&#xff0c;我们掌握了 MyBatis 的基础搭建、核心架构与 Mapper 代理开发&#xff0c;能应对简单的单表 CRUD 场景。但实际项目中&#xff0c;业务往往更复杂 —— 比如 “多条件动态查询”“员工与部门的关联查询”“高频查询的性能优化” 等。本篇将聚焦 MyBa…

Linux内核中IPv4的BEET模式封装机制解析

引言 在Linux网络栈中,IPSec提供了网络层的数据加密和认证服务。传统的IPSec支持两种模式:传输模式(Transport Mode)和隧道模式(Tunnel Mode)。然而,这两种模式各有优缺点:传输模式开销小但无法隐藏原始IP头;隧道模式提供完全封装但增加了开销。 BEET(Bound End-to…

设计模式——创建型模式

什么是设计模式&#xff1f;设计模式是软件工程中解决常见问题的经典方案&#xff0c;它们代表了最佳实践和经验总结。通过使用设计模式&#xff0c;开发者可以创建更加灵活、可维护和可扩展的代码结构。设计模式不是具体的代码实现&#xff0c;而是针对特定问题的通用解决方案…

我爱学算法之—— 位运算(上)

常见位运算 对于位运算&#xff1a; &&#xff1a;按位与&#xff0c;有0则0。 |&#xff1a;按位或&#xff0c;有1则1。 ^&#xff1a;按位异或&#xff0c;相同为0、不同为1。&#xff08;无进位相加&#xff09; ~&#xff1a;二进制位按位取反。 对于位运算的常见使用…

智能语音系统

智能语音系统通过技术手段让机器能够“听懂”、“理解”并“回应”人类的语音&#xff0c;是实现人机交互的关键技术之一。下面我将为你梳理智能语音系统的核心组成部分、工作原理、应用场景以及面临的挑战。&#x1f9e0; 核心技术与工作原理智能语音系统之所以能实现人机交互…