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

news/2024/5/19 6:01:03

面试 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.mrgr.cn/p/52643625

相关文章

Java线程基础 - 线程状态

线程状态转换新建(New) 创建后尚未启动,也就是初始状态 可运行(Runnable) 可能正在运行,也可能正在等待 CPU 时间片。 包含了操作系统线程状态中的 Running 和 Ready。 阻塞(Blocking) 阻塞状态是指线程因为等待某个条件(通常是I/O操作、获取锁、等待某些资源或者其他同步机…

《代码随想录》-1.数组理论基础

特点: 1.内存空间-连续存放 ——> 增删元素麻烦 2.数据-相同类型 3.下标从0开始 注意:数组的元素采用覆盖的形式 二维数组在内存的空间地址: 1.C++中二维数组在地址空间上是连续的2.Java中二维数组每一行的头节点的地址是没有规则的

LLM大语言模型原理、发展历程、训练方法、应用场景和未来趋势

LLM&#xff0c;全称Large Language Model&#xff0c;即大型语言模型。LLM是一种强大的人工智能算法&#xff0c;它通过训练大量文本数据&#xff0c;学习语言的语法、语义和上下文信息&#xff0c;从而能够对自然语言文本进行建模。这种模型在自然语言处理&#xff08;NLP&am…

手写Spring框架

1. 手写Spring框架 @目录1. 手写Spring框架每博一文案2. 反射机制的回顾3. 开始手写 Spring 框架3.1 第一步:使用 IDE 创建模块myspring3.2 第二步:准备好我们要管理的Bean3.3 第三步:准备myspring.xml配置文件3.4 第四步:编写ApplicationContext接口3.5 第五步:编写Class…

设计模式: 责任链模式

目录 一&#xff0c;责任链模式 二&#xff0c;特点 四&#xff0c;实现步骤 五&#xff0c;代码 一&#xff0c;责任链模式 责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种软件设计模式&#xff0c;它属于行为型模式。在这种模式中&#xff0c…

关于海康相机和镜头参数的记录

对比MV-CS020-10UC和大家用的最多的MV-CS016-10UC 其实前者适合雷达站使用&#xff0c;后者适合自瞄使用 一&#xff1a;MV-CS020-10UC的参数 二&#xff1a;对比 三&#xff1a;海康镜头选型工具

腾讯公益赛团队博客10(2024.5.6)

未完成 在线医生、聊天室功能进行中 在多人手机端测试程序的可行性已完成 sos、帮扶基本功能、登录注册、主页

腾讯公益赛团队冲刺博客9(2024.5.3)

未完成 在线医生、聊天室、多人弹窗进行中 在线数据库的连接,保证不同的网络都可以连接到一个数据库已完成 sos、帮扶的基本功能,登录注册和主页

第三十八天:Ansible playbook--Role角色

角色是ansible自1.2版本引入的新特性,用于层次性、结构化地组织playbook。roles能够根据层次型结构自动装载变量文件、tasks以及handlers等。要使用roles只需要在playbook中使用include指令即 可。简单来讲,roles就是通过分别将变量、文件、任务、模板及处理器放置于单独的目…

Python-VBA函数之旅-open函数

目录 一、open函数的常见应用场景 二、open函数使用注意事项 三、如何用好open函数&#xff1f; 1、open函数&#xff1a; 1-1、Python&#xff1a; 1-2、VBA&#xff1a; 2、推荐阅读&#xff1a; 个人主页&#xff1a;神奇夜光杯-CSDN博客 一、open函数的常见应用场…

腾讯公益赛冲刺团队博客1(2024.4.23)

未完成 项目还没开始进行中 登录注册已完成 无

腾讯公益赛冲刺团队博客4(2024.4.26)

未完成 sos功能后端,在线医生、社交功能进行中 帮扶功能的后端已完成 sos、帮扶前端、登录注册、主页

腾讯公益赛冲刺团队博客3(2024.4.25)

未完成 sos和帮扶功能的后端界面,以及其他两个功能进行中 sos和帮扶功能的前端已完成 登录注册和主页

【C++ | 关键字】C++ 关键字介绍

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; ⏰发布时间⏰&#xff1a;2024-05-04 0…

c#的try-catch-finally

在编码过程中经常出现这样的代码int Tec(){int i = 0;try{int c = i / 0;return c;}catch{return 0;}} 然后我们来看反编译后的代码 编译器会把结果保存到一个result的中间变量中,然后最后统一返回

GPU 架构与 CUDA 关系 并行计算平台和编程模型 CUDA 线程层次结构 GPU 的算力是如何计算的 算力峰值

GPU 架构与 CUDA 关系 本文主要包含 NVIDIA GPU 硬件的基础概念、CUDA(Compute Unified Device Architecture)并行计算平台和编程模型,详细讲解 CUDA 线程层次结构,最后将讲解 GPU 的算力是如何计算的,这将有助于计算大模型的算力峰值和算力利用率。 GPU 硬件基础概念GP…

STM32-HAL库12-STM32F407VGT6的PWM主从定时器,发送指定数量脉冲

STM32-HAL库12-STM32F407VGT6的PWM主从定时器&#xff0c;发送指定数量脉冲 一、所用材料 STM32F407VGT6自制双伺服电机控制板&#xff1b; 一川A1系列伺服电机驱动器&#xff08;电0.73KW电机&#xff09;&#xff1b; 二、所学内容 实现PWM发送指定个数脉冲&#xff0c;以…

Verilog插件:补全模块实例模板

Intellij IDEA插件Verilog Language Support,v2024.2.0版本特性。

深入学习和理解Django模板层:构建动态页面

title: 深入学习和理解Django模板层:构建动态页面 date: 2024/5/5 20:53:51 updated: 2024/5/5 20:53:51 categories:后端开发tags:Django模板 表单处理 静态文件 国际化 性能优化 安全防护 部署实践第一章:模板语法基础 Django模板语法介绍 Django模板语法是一种简洁而强大的…

第一阶段复习

目录最短路部分最小环传递闭包Dij证明反图负环最短路计数次短路分层图的几个典例最短路结合二分 最短路部分 最小环 一些细节:枚举最小环是依据还没有更新经过k的最短路,所以要写在更新经过k的最短路之前。要判断是否存在路径。ijk三指针需要i与k、j与k相连。 传递闭包 f[i][…