- 博客(46)
- 收藏
- 关注
原创 HashMap 的特点及应用场景
HashMap是Java中基于Map接口实现的键值对存储结构,具有允许null键/值、非线程安全和无序存储等特点。其底层采用数组+链表+红黑树结构,默认初始容量为16,负载因子为0.75。在性能上,HashMap的平均时间复杂度为O(1),但在最坏情况下(所有键哈希冲突)为O(n)。HashMap通过自动扩容机制(容量翻倍)来应对元素数量超过阈值的情况。典型应用场景包括缓存实现、数据索引、统计频率、对象映射和替代多个if-else语句。使用HashMap时需注意正确实现hashCode()和equals()
2025-05-19 19:25:45
897
原创 Java 反射(Reflection)技术
反射是Java中的一种高级特性,允许程序在运行时动态地获取和操作类的信息,包括类名、方法、属性和构造器等。通过核心类如Class、Field、Method和Constructor,反射可以实现对象的创建、方法的调用和字段的访问与修改。反射的主要应用场景包括框架设计(如Spring和Hibernate)、动态代理、注解处理和工具类开发等。尽管反射提供了高度的灵活性和扩展性,但也存在性能开销、安全问题和代码复杂度等缺点。为了优化性能,建议缓存Class、Method和Field对象,并谨慎使用setAccess
2025-05-19 19:20:24
518
原创 Java中序列化和反序列化的理解
序列化是将对象状态转换为可存储或传输的形式,反序列化则是将这种形式重新转换为对象。核心作用包括持久化存储、网络传输、进程间通信和深度拷贝。在Java中,可以通过实现Serializable或Externalizable接口来实现序列化。Serializable是标记接口,无需实现方法,而Externalizable需要实现读写方法,提供更精细的控制。序列化流程涉及创建ObjectOutputStream/ObjectInputStream并调用相应方法。关键注意事项包括serialVersionUID的版本
2025-05-17 15:51:45
620
原创 Java中synchronized 关键字
synchronized 是 Java 中用于实现线程同步的关键字,确保多线程环境下对共享资源的访问安全。它通过互斥性和可见性来保证线程安全。synchronized 有三种使用方式:同步实例方法、同步静态方法和同步代码块,分别锁定当前实例、类的 Class 对象和指定对象。其实现基于 JVM 内置锁(Monitor),并支持锁升级机制(无锁、偏向锁、轻量级锁、重量级锁)以优化性能。使用时需注意锁对象选择、死锁风险和性能优化。与 Lock 接口相比,synchronized 功能较为基础,但经过 JVM 优
2025-05-17 15:25:58
530
原创 Java中深拷贝与浅拷贝的区别
深拷贝和浅拷贝是对象复制的两种方式,主要区别在于处理引用类型字段的方式。浅拷贝只复制对象本身,不复制内部的引用类型成员变量,新旧对象共享同一内部对象,修改一个会影响另一个。Java中默认的clone()方法实现浅拷贝。深拷贝则递归复制所有引用类型成员变量,创建全新的对象,新旧对象完全独立,修改一个不会影响另一个。实现深拷贝需要重写clone()方法并递归调用引用对象的clone(),或通过序列化、复制构造函数等方式。浅拷贝适用于对象内部只有基本类型或不可变对象,或需要共享引用时;深拷贝适用于对象包含可变引用
2025-05-14 09:39:22
483
原创 Java中的IO分类
Java的IO系统主要分为输入流和输出流,分别用于读取和写入数据。根据数据类型,IO流可分为字节流和字符流,字节流适用于二进制文件,字符流适用于文本文件。按功能角色,IO流分为节点流和处理流,节点流直接连接数据源,处理流提供增强功能。Java还支持BIO、NIO和AIO三种IO模型,分别代表同步阻塞、非阻塞和异步非阻塞IO。常见的IO类包括文件流、缓冲流、数据流和对象流等,Java的IO系统采用装饰器模式,通过组合不同流类实现复杂功能。
2025-05-14 09:37:11
487
原创 Java中的泛型类型擦除
泛型类型擦除(Generics Type Erasure)是Java泛型实现的核心机制,它是指在编译期间将泛型类型信息移除或"擦除"的过程。
2025-05-07 14:37:37
466
原创 Java中的泛型及应用
泛型极大地提高了Java程序的类型安全性和代码重用性,是现代Java开发中不可或缺的特性。泛型(Generics)是JDK 5引入的重要特性,它允许在定义类、接口和方法时使用。:减少ClassCastException风险。,将类型检查从运行时提前到编译时。:当方法操作不依赖类泛型参数时。:提高代码类型安全性和可读性。:运行时无法获取泛型类型信息。:因为静态成员属于类而非实例。:将类型作为参数传递。:编译时进行类型检查。
2025-05-06 09:01:57
387
原创 ArrayList 和 LinkedList 的区别
ArrayList 和 LinkedList 是 Java 中两种最常用的 List 实现,它们在底层数据结构、性能特性和适用场景上有显著差异。
2025-05-06 08:57:26
691
原创 LinkedList的特点及应用场景
例如:LinkedList<String> stack = new LinkedList<>();:使用节点(Node)存储数据,每个节点包含数据本身以及指向前后节点的引用。指定位置插入/删除平均时间复杂度O(n)(需要先遍历到指定位置)LinkedList实现了Deque接口,适合作为栈或队列使用。:按索引访问元素需要从头或尾开始遍历,时间复杂度O(n):除了存储数据外,每个节点还需要存储前后节点的引用。:既可以作为列表使用,也可以作为双端队列使用。:非连续内存空间,节点可以分散在内存各处。
2025-05-06 08:55:40
273
原创 ArrayList的特点及应用场景
底层使用Object[]数组存储元素默认初始容量为10扩容机制:每次扩容为原来的1.5倍(实现了RandomAccess接口(标记接口)通过索引访问元素的时间复杂度为O(1)保持插入顺序允许存储重复元素和null值多线程环境下需要外部同步可以使用包装尾部操作:O(1)中间操作:O(n)(需要移动元素)
2025-04-30 17:39:35
624
原创 三分钟了解自动拆箱封箱操作
自动拆箱(Unboxing)和封箱(Boxing)是Java中的两个重要特性,它们简化了基本数据类型与其对应包装类之间的转换。
2025-04-30 17:35:34
386
原创 String、StringBuffer、StringBuilder 的区别
特性String可变性不可变可变可变线程安全是是否性能低(修改时)中高使用场景常量字符串多线程修改单线程修改最佳实践字符串不经常改变:用 String多线程环境频繁修改:用 StringBuffer单线程环境频繁修改:用 StringBuilder。
2025-04-30 16:37:07
362
原创 0bject类常用方法及应用场景?
对象被垃圾回收前调用的清理方法(Java 9+标记为废弃)。需要根据对象内容(而非地址)判断相等性(如值对象、DTO)。类是所有类的根父类,其提供的方法会被所有子类继承。:比较两个对象是否“逻辑相等”(默认比较内存地址,即。打印对象时需要可读性更高的信息(如日志、调试)。:返回对象的哈希码(默认返回内存地址的哈希值)。:正确重写这些方法是面向对象设计的基本要求。深拷贝需手动重写(递归复制引用类型字段)。,理解其方法避免踩坑(如集合比较错误)。反射操作(如动态创建实例、调用方法)。:返回对象的运行时类(
2025-04-29 20:28:18
367
原创 Java中的内部类?
是指定义在另一个类内部的类,主要用于逻辑分组、增强封装性,或访问外部类的成员。序列化时,非静态内部类会隐式持有外部类引用(可能导致内存泄漏)。:通过多个内部类实现不同接口(间接解决Java单继承限制)。不能直接访问外部类的非静态成员(需通过外部类实例)。:直接定义在外部类的成员位置(与字段、方法同级)。可以独立于外部类实例存在(行为类似普通类)。:简化事件监听(如Android点击事件)。可以访问外部类的所有成员(包括。:隐藏仅被一个类使用的逻辑(如。:直接访问外部类私有成员。:在方法内定义的类。
2025-04-29 20:25:08
751
原创 说说static关键字的作用?
静态方法在编译时绑定(静态分派),而方法重写是运行时多态(动态分派)。静态变量存储在方法区(JDK 8+ 的元空间),生命周期与类相同。不能访问非静态成员(属性和方法),因为非静态成员依赖对象。是 Java 中用于修饰类成员的关键字,它使成员。:加载配置文件、初始化静态资源(如数据库连接池)。:频繁使用某个类的静态成员(如数学计算)。在类加载时执行一次,用于初始化静态资源。直接导入类的静态成员,省略类名前缀。静态成员属于类,非静态成员属于对象。在类加载时初始化,优先于对象存在。不能访问外部类的非静态成员。
2025-04-23 16:10:17
316
原创 java中的super关键字作用?
如果父类没有无参构造方法,子类必须显式调用。,主要应用于继承关系中。Java 要求子类必须先初始化父类(通过。都依赖于对象实例,而静态方法属于类级别。静态方法属于类而非对象,因此不能使用。Java 不允许跨级访问祖父类的成员。在子类的构造方法中,super(),且必须放在子类构造方法的第一行。明确指定访问父类的变量。是 Java 中的一个。了父类的方法时,可以用。调用父类的原始方法。
2025-04-23 15:57:00
591
原创 java中的this关键字作用?
它在类的方法和构造方法中使用,主要用于解决变量命名冲突、调用当前类成员以及链式调用构造方法。,实现链式调用(常见于 Builder 模式)。当方法参数或局部变量与成员变量同名时,使用。调用本类的其他构造方法(必须放在第一行)。是 final 引用,始终指向当前对象。在方法内部调用当前类的其他方法(可省略。静态方法属于类而非对象,因此不能使用。明确指向当前对象的成员变量。是 Java 中的一个。明确调用当前对象的成员。支持构造方法的重载调用。,但显式使用更清晰)。
2025-04-23 15:49:14
483
原创 Java 中 == 和 equals() 的区别
的区别是 Java 面试常见考点,也是避免逻辑错误的关键!如果需要比较内容(如字符串、集合):用。一样(比较内存地址),但许多类(如。如果需要比较地址(如单例模式):用。可能指向同一对象(常量池)。(除非明确需要比较地址)。一致性:多次调用结果不变。类的方法,默认实现和。,用于比较两个变量的。
2025-04-22 20:32:12
442
原创 java中值传递的含义
String 是引用类型,但因其不可变性(Immutable),方法内修改会创建新对象,不影响原始字符串。(即内存地址的拷贝),方法内修改对象属性会影响原始对象,但重新赋值引用不会影响原始引用。,但根据传递的数据类型不同(基本类型 vs 引用类型),表现行为会有所不同。:Java 只有值传递,但对于引用类型,传递的是引用的副本(不是引用本身)。:可以认为是“按共享对象的值传递”。,方法内修改不会影响原始值。、数组、自定义类),传递的是。修改对象属性会影响原始对象。,方法内修改的是副本。)不会影响原始引用。
2025-04-22 20:27:47
472
原创 RAG是什么?
典型工具:LangChain + VectorDB(如 FAISS、Pinecone) + LLM(如 GPT-4)。RAG(Retrieval-Augmented Generation,检索增强生成)是一种结合。将检索到的信息作为上下文(Context)输入给 LLM(如 GPT-4、Llama 2)。这样,模型生成的答案基于检索到的真实数据,而非仅依赖训练时的记忆。从外部知识库(如数据库、文档、网页)检索与用户查询相关的信息。:可以追踪答案的来源(如引用某篇文档)。,增强 LLM 的事实性。
2025-04-22 19:06:41
385
原创 实例变量与静态变量的区别
例如:Math类中的PI常量、统计创建的对象数量等。每个对象都有自己独立的实例变量副本。例如:学生类中的姓名、年龄等属性。用于计数器等需要跨对象共享的数据。当每个对象需要有自己的属性值时。当需要所有对象共享某个属性时。属于类本身,而不是类的实例。所有对象共享同一个静态变量。生命周期与程序运行周期相同。用于常量定义(通常配合。属于类的实例(对象)
2025-04-21 16:13:26
139
原创 重写(Override)与重载(Overload)的区别
特性重写(Override)重载(Overload)发生位置子类与父类之间同一个类中方法签名必须完全相同必须不同返回类型必须相同或协变可以不同访问权限不能比父类更严格可以不同抛出异常不能抛出更多/更广的异常可以不同目的实现多态提供方法使用的灵活性。
2025-04-21 16:11:50
324
原创 封装的优势及劣势
封装是面向对象编程(OOP)的三大特性之一(封装、继承、多态),它指的是将数据(属性)和操作数据的方法(行为)捆绑在一起,并对外隐藏内部实现细节。
2025-04-18 19:16:12
509
原创 java中的基本数据类型有哪些?
Java 有 8 种基本数据类型(primitive data types),它们不是对象,直接存储在栈内存中,具有固定的内存大小和默认值。
2025-04-17 09:24:10
148
原创 static关键字的作用?
static的核心是类级别的共享,它突破了对象实例的限制,但同时也带来了线程安全和设计耦合度的挑战。合理使用能让代码更高效,滥用则会导致维护困难。
2025-04-15 17:44:19
390
原创 介绍 TensorFlow 的基本概念和使用场景
TensorFlow 是一个由 Google 开发的开源机器学习框架,旨在实现深度学习模型的设计、训练和部署。1. 深度学习模型训练:TensorFlow 提供了丰富的深度学习算法和工具,可以用于构建、训练和调优各种类型的神经网络模型。2. 自然语言处理(NLP):TensorFlow 提供了许多用于处理文本数据的工具和模型,如文本分类、机器翻译、情感分析等。总的来说,TensorFlow 是一个功能强大、灵活的机器学习框架,适用于各种不同类型的机器学习任务和应用场景。
2025-04-15 09:29:19
275
原创 Hash碰撞解析与解决方案
Hash碰撞(Hash Collision)是指两个不同的输入值经过哈希函数计算后得到了相同的输出值。换句话说,当hash(key1) = hash(key2)但key1 ≠ key2时,就发生了Hash碰撞。
2025-04-14 08:48:47
907
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人