面试 Java 基础八股文十问十答第二十八期

面试 Java 基础八股文十问十答第二十八期

作者:程序员小白条,个人博客

相信看了本文后,对你的面试是有一定帮助的!关注专栏后就能收到持续更新!

⭐点赞⭐收藏⭐不迷路!⭐

1)动态代理是什么?

动态代理是一种在运行时动态生成代理类的机制,用于增强被代理类的行为。在动态代理中,代理类并不是在编译期就确定的,而是在运行时根据需要动态生成的。动态代理通常用于实现横切关注点的功能,如日志记录、性能监控、事务管理等。Java中的动态代理主要通过反射机制实现。

2)JDK 动态代理与 CGLIB 区别?

JDK 动态代理和 CGLIB(Code Generation Library)都是 Java 中常用的实现动态代理的方式,它们之间有以下区别:

  • 实现原理:JDK 动态代理是基于接口的代理,它通过反射机制动态生成代理类,被代理的类必须实现一个接口;而 CGLIB 是基于继承的代理,它通过生成被代理类的子类来实现代理。
  • 性能:由于 JDK 动态代理是基于接口实现的,所以它的性能相对于 CGLIB 来说稍差一些。而 CGLIB 代理是直接操作字节码生成子类,因此性能更高,但生成的代理类可能比较庞大。
  • 适用范围:JDK 动态代理要求被代理的类必须实现接口,因此对于没有实现接口的类无法实现动态代理;而 CGLIB 则可以代理没有实现接口的类。

3)注解是什么原理?

注解是 Java 语言的一种元数据,用于为程序提供额外的信息。在 Java 中,注解是在代码中添加元数据的一种方式,可以用来提供配置信息、编译检查、代码生成等功能。注解本身并不直接影响程序的执行,而是通过反射机制在运行时提供额外的信息。

Java 中的注解是通过 @interface 关键字定义的,使用 @ 符号将注解应用到代码中。在编译过程中,编译器会将注解信息保存在类文件中,并在运行时由 JVM 或其他工具通过反射获取注解信息。

注解的原理是基于反射机制,在运行时通过反射获取注解信息,然后根据注解信息进行相应的处理。常见的应用包括配置文件解析、自定义注解实现 AOP(面向切面编程)、JUnit 测试框架等。

4)反射用过吗?

是的,我在编程中经常使用反射。反射是指在运行时动态地获取类的信息以及操作类的属性、方法和构造函数的能力。通过反射,可以在程序运行时获取类的信息、创建类的实例、调用类的方法、访问类的字段等。我通常在需要编写通用框架、工具类或处理特定场景时使用反射,例如实现依赖注入、动态代理、对象序列化等功能。

5)SPI 有了解过吗?

SPI(Service Provider Interface)是 Java 提供的一种服务发现机制,主要用于在运行时动态地加载和注册服务实现。SPI 允许开发者定义服务接口,并提供多个不同的实现供应用程序选择。在 Java 中,通常通过在 META-INF/services 目录下创建对应服务接口的文件,列出具体的实现类来实现 SPI。

SPI 主要应用于框架和库中,例如 Java 的 JDBC、JAX-WS 等。它提供了一种松耦合的方式来扩展系统功能,使得系统更加灵活和可扩展。

6)泛型有什么用?泛型擦除是什么?

泛型是 Java 中的一种编程机制,用于在编译时提供类型安全性检查和更好的代码重用。通过泛型,可以编写更加通用和灵活的代码,减少类型转换的错误和代码冗余。泛型可以应用于类、接口、方法等各个层面,使得程序设计更加抽象和灵活。

泛型擦除是指在编译时将泛型信息擦除,以保持 Java 虚拟机的向后兼容性。在编译后的字节码中,泛型类型参数会被替换为它们的上界或 Object 类型。例如,List<String> 在编译后会被擦除为 List,而 List<Integer> 也会被擦除为 List。这样做的目的是为了让旧版的 Java 代码仍然可以在新版的 Java 虚拟机上运行,而不会出现泛型相关的问题。泛型擦除也导致了一些限制和局限性,例如无法在运行时获取泛型类型信息。

7)泛型的上下界限定符有了解过吗?

泛型的上下界限定符是指在泛型类型中使用通配符 extendssuper 来限制类型的范围。通配符 extends 表示类型的上界限定,即指定泛型类型必须是某个类的子类或者该类本身;通配符 super 表示类型的下界限定,即指定泛型类型必须是某个类的父类或者该类本身。

例如,<? extends Number> 表示泛型类型必须是 Number 类或其子类,而 <? super Integer> 表示泛型类型必须是 Integer 类或其父类。

使用上下界限定符可以增加泛型类型的灵活性,使得泛型可以适用于更广泛的情况。

8)深拷贝和浅拷贝?

深拷贝和浅拷贝都是用于复制对象的概念,它们之间的区别在于复制的程度。

  • 浅拷贝(Shallow Copy):浅拷贝只复制对象本身以及对象内部的基本数据类型字段的值,对于对象内部的引用类型字段,只是复制了引用而不是复制引用指向的对象。这意味着原始对象和拷贝对象共享内部对象,对内部对象的修改会影响到原始对象和拷贝对象。
  • 深拷贝(Deep Copy):深拷贝不仅复制对象本身,还会递归地复制对象内部的所有引用类型字段及其引用的对象,从而实现完全独立的复制。深拷贝生成的对象与原始对象之间没有任何关联,对其中一个对象的修改不会影响另一个对象。

深拷贝和浅拷贝的选择取决于具体的需求和情况。在需要完全独立的对象副本时,应该使用深拷贝,而在需要共享内部对象时,可以使用浅拷贝。

9)JDK8 有哪些新特性?

JDK8 引入了许多重要的新特性和改进,其中一些主要的包括:

  • Lambda 表达式:Lambda 表达式提供了一种简洁而又强大的方式来处理函数式编程,使得代码更加清晰和易读。
  • Stream API:Stream API 提供了一种新的抽象序列操作的方式,使得对集合进行过滤、映射、排序等操作变得更加简洁和高效。
  • 接口默认方法:接口可以包含默认方法和静态方法的实现,使得接口的演化更加灵活,可以向现有的接口添加新的方法而不会破坏已有的实现类。
  • 新的日期与时间 API:引入了全新的日期与时间 API,解决了旧的 Date 和 Calendar API 存在的诸多问题,使得日期与时间的处理更加简单和易用。
  • Optional 类:Optional 类用于解决空指针异常问题,提供了一种优雅的方式来处理可能为空的对象。
  • 并行数组操作:新增的 Arrays 类的 parallelSort 方法可以对数组进行并行排序,提高排序的性能。

10)Integer 缓存池知道吗?

是的,Integer 缓存池是 Java 中的一种优化措施,用于缓存范围在 -128 到 127 之间的整型对象。在这个范围内的整数对象会被缓存起来,当程序再次需要这些整数对象时,会直接从缓存中获取而不是重新创建新的对象。

Integer 缓存池的引入主要是为了提高性能和节省内存。因为在 Java 中,Integer 是不可变对象,频繁地创建和销毁 Integer 对象会产生大量的对象实例,占用大量的内存和导致垃圾回收的开销。通过使用缓存池,可以减少对象的创建次数,提高性能和减少内存占用。

开源项目地址:https://gitee.com/falle22222n-leaves/vue_-book-manage-system

前后端总计已经 1300+ Star,2 W+ 访问!

⭐点赞⭐收藏⭐不迷路!⭐

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

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

相关文章

专业渗透测试 Phpsploit-Framework(PSF)框架软件小白入门教程(三)

本系列课程&#xff0c;将重点讲解Phpsploit-Framework框架软件的基础使用&#xff01; 本文章仅提供学习&#xff0c;切勿将其用于不法手段&#xff01; 继续接上一篇文章内容&#xff0c;讲述如何进行Phpsploit-Framework软件的基础使用和二次开发。 当我们点击 submit 提…

【JavaEE 初阶(一)】初识线程

❣博主主页: 33的博客❣ ▶️文章专栏分类:JavaEE◀️ &#x1f69a;我的代码仓库: 33的代码仓库&#x1f69a; &#x1faf5;&#x1faf5;&#x1faf5;关注我带你了解更多线程知识 目录 1.前言2.进程3.线程4.线程和进程的区别5.Thread创建线程5.1继承Thread创建线程5.2实现R…

非平衡数据处理-SMOTE Tomek算法(互联网最全)

作者Toby&#xff0c;来源公众号&#xff1a;Python风控模型&#xff0c;非平衡数据处理-SMOTE Tomek算法 之前Toby老师讲了非平衡数据处理相关知识&#xff0c;具体内容和链接如下。 imbalanced data机器学习非平衡数据处理 Python非平衡数据处理_SMOTE-ENN 方法 非平衡数…

【SSM进阶学习系列丨分页篇】PageHelper 分页插件导入集成实践

文章目录 一、说明什么是分页PageHelper介绍 二、导入依赖三、集成Spring框架中四、编写Service五、编写Controller六、编写queryAllByPage页面展示数据 一、说明 什么是分页 ​ 针对分页&#xff0c;使用的是PageHelper分页插件&#xff0c;版本使用的是5.1.8 。 ​ 参考文档…

虚拟机网络实现桥接模式

虚拟机网络实现桥接模式 虚拟化软件&#xff1a;VMware 17 Linux&#xff1a;rocky8_9 主机&#xff1a;Win10 文章目录 虚拟机网络实现桥接模式1. 桥接模式介绍2. 查看Win本机的网络信息&#xff08;以笔记本电脑以WiFi联网为例&#x…

【Canvas与艺术】录王昌龄出塞诗“秦时明月汉时关”

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>使用HTML5/Canvas绘制秦时明月汉时关</title><style type&q…

【论文阅读】Sparse is Enough in Scaling Transformers

Sparse is Enough in Scaling Transformers 论文地址摘要1 介绍2 相关工作模型压缩。模型修剪模型蒸馏。稀疏注意力。张量分解。稀疏前馈。 3 Sparse is Enough3.1 稀疏前馈层3.2 稀疏 QKV 层3.3 稀疏损失层。 4 长序列的稀疏性4.1 长序列架构4.2 内存效率的可逆性4.3 泛化的循…

# 从浅入深 学习 SpringCloud 微服务架构(七)Hystrix(4)

从浅入深 学习 SpringCloud 微服务架构&#xff08;七&#xff09;Hystrix&#xff08;4&#xff09; 一、hystrix&#xff1a;使用 turbine 聚合所有的 hytrix 的监控数据测试。创建父工程 spring_cloud_hystrix_demo&#xff0c;导入相关依赖坐标。并在父工程 spring_cloud_…

C++校招八股

c类的访问权限与继承方式 公有成员在任何地方都可以被访问&#xff0c;包括类的外部和派生类。受保护成员在类的内部和派生类中可以被访问&#xff0c;但在类的外部不可访问。 私有成员只能在类的内部访问&#xff0c;包括类的成员函数和友元函数&#xff0c;不允许在类的外部…

MySQL45讲(一)(45)

如果使用的是unsigned int 做的主键&#xff0c;如果你用完了&#xff0c;在insert直接就是报冲突的错误 碰到这种情况&#xff0c;只能进行修改字段的属性了&#xff0c;把他换成big unsigned 了&#xff0c;所以建表对字段定义的时候就需要判断好&#xff0c;是否会超过 对于…

我的创作纪念日—128天的坚持|分享|成长

☘️博主介绍☘️&#xff1a; ✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ ✌✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux&#xff0c;也在扩展大数据方向的知识面✌✌️ ❣️❣️❣️大佬们都喜欢静静的看文章&am…

H3C MSTP 实验

H3C MSTP 实验 实验拓扑 ​​ 实验需求 所有交换机上创建 Vlan10&#xff0c;Vlan20&#xff0c;Vlan30 和 Vlan40所有交换机之间的端口配置为 Trunk&#xff0c;并放行相关 VLAN按照图示分区域配置 MSTP&#xff0c;并配置主备根网桥 实验步骤 VLAN基础配置&#xff08;…

RateLimiter 限流 —— 通过切面对单个用户进行限流和黑名单处理

关于登录的安全性管理有较多的手段&#xff0c;包括&#xff1b;设备信息、IP信息、绑定的信息、验证码登各类方式。不过在一些网页版的登录中&#xff0c;如果有人想办法把你的验证码给我&#xff0c;我就可以登录你的账户&#xff0c;查看你的数据。对于一些不法分子通过让你…

windows 驱动开发-DMA技术(二)

前面描述了DMA技术中适配器相关的部分以及DMA的分类&#xff0c;接下来看一下系统具体在支持两种DMA时候的操作的细微差别。 此处解释一下Scatter/Gather&#xff0c;这个也翻译为散点/收集&#xff0c;是指指示设备能够读取或写入内存中的任何区域&#xff0c;而不仅仅是特定…

构建智能化商旅服务:酒店中台云服务架构设计与实践

随着商旅行业的不断发展和智能化趋势的兴起&#xff0c;酒店中台云服务成为了提升服务质量和效率的关键。本文将探讨酒店商旅中台云服务的架构设计与实现&#xff0c;介绍其关键特点和最佳实践&#xff0c;助力商旅行业迈向智能化未来。 1. **需求分析与场景设计&#xff1a;*…

【阿里云服务器】ubuntu 22.04.1安装docker以及部署java环境

我的服务器配置是2GB CPU 2GB 内存 Ubuntu22.04 目录 一、阿里云 ubuntu 22.04.1安装docker 二、docker基础命令 三、Windows电脑访问云服务器 四、安装java环境 安装OpenJDK 8&#xff08;可以根据需要安装其他版本的JDK&#xff09; 安装java的依赖管理工具maven 一、…

基于yolov2深度学习网络模型的鱼眼镜头中人员检测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 load yolov2.mat% 加载训练好的目标检测器 img_size [448,448]; imgPath test/; % 图像…

LeetCode 15 —— 三数之和

阅读目录 1. 题目2. 解题思路3. 代码实现 1. 题目 2. 解题思路 首先我们对数组进行从小到大排序&#xff0c;然后遍历数组 [ 0 , n u m s . s i z e ( ) − 3 ] [0,nums.size()-3] [0,nums.size()−3] 作为三元组中的 a a a&#xff0c;由于三元组的索引互不相同&#xff0c…

文件与IO基础常识知识

在这里&#xff0c;只介绍理论知识&#xff0c;不介绍代码。 目录 1.IO 1.1.字面概念 1.2.输入输出模型 2.文件 2.1.文件目录 2.2.文件路径 2.3.文件分类 1.IO 为了我们接下来学习的文件IO&#xff0c;所以我们先来认识什么是IO。 1.1.字面概念 &#xff08;1&#x…

【知识加油站】——机电产品数字孪生机理模型构建

明确一种多领域、多层次、参数化、一致性的机电一体化装备数字孪生机理模型构建准则&#xff01; 关键词英文简称&#xff1a; 数字孪生&#xff1a;DT物联网&#xff1a;IoT网络物理系统&#xff1a;CPS高级架构&#xff1a;HLA统一建模语言&#xff1a;UML数控机床&#xf…