做视频的素材网站联想企业网站建设的思路

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

做视频的素材网站,联想企业网站建设的思路,上海企业网站建设价格,高德地图可以搜索国外吗面试 Java 基础八股文十问十答第二十八期 作者#xff1a;程序员小白条#xff0c;个人博客 相信看了本文后#xff0c;对你的面试是有一定帮助的#xff01;关注专栏后就能收到持续更新#xff01; ⭐点赞⭐收藏⭐不迷路#xff01;⭐ 1#xff09;动态代理是什么程序员小白条个人博客 相信看了本文后对你的面试是有一定帮助的关注专栏后就能收到持续更新 ⭐点赞⭐收藏⭐不迷路⭐ 1动态代理是什么 动态代理是一种在运行时动态生成代理类的机制用于增强被代理类的行为。在动态代理中代理类并不是在编译期就确定的而是在运行时根据需要动态生成的。动态代理通常用于实现横切关注点的功能如日志记录、性能监控、事务管理等。Java中的动态代理主要通过反射机制实现。 2JDK 动态代理与 CGLIB 区别? JDK 动态代理和 CGLIBCode Generation Library都是 Java 中常用的实现动态代理的方式它们之间有以下区别 实现原理JDK 动态代理是基于接口的代理它通过反射机制动态生成代理类被代理的类必须实现一个接口而 CGLIB 是基于继承的代理它通过生成被代理类的子类来实现代理。性能由于 JDK 动态代理是基于接口实现的所以它的性能相对于 CGLIB 来说稍差一些。而 CGLIB 代理是直接操作字节码生成子类因此性能更高但生成的代理类可能比较庞大。适用范围JDK 动态代理要求被代理的类必须实现接口因此对于没有实现接口的类无法实现动态代理而 CGLIB 则可以代理没有实现接口的类。 3注解是什么原理 注解是 Java 语言的一种元数据用于为程序提供额外的信息。在 Java 中注解是在代码中添加元数据的一种方式可以用来提供配置信息、编译检查、代码生成等功能。注解本身并不直接影响程序的执行而是通过反射机制在运行时提供额外的信息。 Java 中的注解是通过 interface 关键字定义的使用 符号将注解应用到代码中。在编译过程中编译器会将注解信息保存在类文件中并在运行时由 JVM 或其他工具通过反射获取注解信息。 注解的原理是基于反射机制在运行时通过反射获取注解信息然后根据注解信息进行相应的处理。常见的应用包括配置文件解析、自定义注解实现 AOP面向切面编程、JUnit 测试框架等。 4反射用过吗 是的我在编程中经常使用反射。反射是指在运行时动态地获取类的信息以及操作类的属性、方法和构造函数的能力。通过反射可以在程序运行时获取类的信息、创建类的实例、调用类的方法、访问类的字段等。我通常在需要编写通用框架、工具类或处理特定场景时使用反射例如实现依赖注入、动态代理、对象序列化等功能。 5SPI 有了解过吗 SPIService Provider Interface是 Java 提供的一种服务发现机制主要用于在运行时动态地加载和注册服务实现。SPI 允许开发者定义服务接口并提供多个不同的实现供应用程序选择。在 Java 中通常通过在 META-INF/services 目录下创建对应服务接口的文件列出具体的实现类来实现 SPI。 SPI 主要应用于框架和库中例如 Java 的 JDBC、JAX-WS 等。它提供了一种松耦合的方式来扩展系统功能使得系统更加灵活和可扩展。 6泛型有什么用泛型擦除是什么 泛型是 Java 中的一种编程机制用于在编译时提供类型安全性检查和更好的代码重用。通过泛型可以编写更加通用和灵活的代码减少类型转换的错误和代码冗余。泛型可以应用于类、接口、方法等各个层面使得程序设计更加抽象和灵活。 泛型擦除是指在编译时将泛型信息擦除以保持 Java 虚拟机的向后兼容性。在编译后的字节码中泛型类型参数会被替换为它们的上界或 Object 类型。例如ListString 在编译后会被擦除为 List而 ListInteger 也会被擦除为 List。这样做的目的是为了让旧版的 Java 代码仍然可以在新版的 Java 虚拟机上运行而不会出现泛型相关的问题。泛型擦除也导致了一些限制和局限性例如无法在运行时获取泛型类型信息。 7泛型的上下界限定符有了解过吗 泛型的上下界限定符是指在泛型类型中使用通配符 extends 和 super 来限制类型的范围。通配符 extends 表示类型的上界限定即指定泛型类型必须是某个类的子类或者该类本身通配符 super 表示类型的下界限定即指定泛型类型必须是某个类的父类或者该类本身。 例如? extends Number 表示泛型类型必须是 Number 类或其子类而 ? super Integer 表示泛型类型必须是 Integer 类或其父类。 使用上下界限定符可以增加泛型类型的灵活性使得泛型可以适用于更广泛的情况。 8深拷贝和浅拷贝? 深拷贝和浅拷贝都是用于复制对象的概念它们之间的区别在于复制的程度。 浅拷贝Shallow Copy浅拷贝只复制对象本身以及对象内部的基本数据类型字段的值对于对象内部的引用类型字段只是复制了引用而不是复制引用指向的对象。这意味着原始对象和拷贝对象共享内部对象对内部对象的修改会影响到原始对象和拷贝对象。深拷贝Deep Copy深拷贝不仅复制对象本身还会递归地复制对象内部的所有引用类型字段及其引用的对象从而实现完全独立的复制。深拷贝生成的对象与原始对象之间没有任何关联对其中一个对象的修改不会影响另一个对象。 深拷贝和浅拷贝的选择取决于具体的需求和情况。在需要完全独立的对象副本时应该使用深拷贝而在需要共享内部对象时可以使用浅拷贝。 9JDK8 有哪些新特性 JDK8 引入了许多重要的新特性和改进其中一些主要的包括 Lambda 表达式Lambda 表达式提供了一种简洁而又强大的方式来处理函数式编程使得代码更加清晰和易读。Stream APIStream API 提供了一种新的抽象序列操作的方式使得对集合进行过滤、映射、排序等操作变得更加简洁和高效。接口默认方法接口可以包含默认方法和静态方法的实现使得接口的演化更加灵活可以向现有的接口添加新的方法而不会破坏已有的实现类。新的日期与时间 API引入了全新的日期与时间 API解决了旧的 Date 和 Calendar API 存在的诸多问题使得日期与时间的处理更加简单和易用。Optional 类Optional 类用于解决空指针异常问题提供了一种优雅的方式来处理可能为空的对象。并行数组操作新增的 Arrays 类的 parallelSort 方法可以对数组进行并行排序提高排序的性能。 10Integer 缓存池知道吗 是的Integer 缓存池是 Java 中的一种优化措施用于缓存范围在 -128 到 127 之间的整型对象。在这个范围内的整数对象会被缓存起来当程序再次需要这些整数对象时会直接从缓存中获取而不是重新创建新的对象。 Integer 缓存池的引入主要是为了提高性能和节省内存。因为在 Java 中Integer 是不可变对象频繁地创建和销毁 Integer 对象会产生大量的对象实例占用大量的内存和导致垃圾回收的开销。通过使用缓存池可以减少对象的创建次数提高性能和减少内存占用。 开源项目地址https://gitee.com/falle22222n-leaves/vue_-book-manage-system 前后端总计已经 1300 Star2 W 访问 ⭐点赞⭐收藏⭐不迷路⭐