自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 收藏
  • 关注

原创 【从零开始学Java | 第二十六篇】双列集合(Map)

在之前学习了单列集合Collection接口,现在我们要学习的是Map双列集合,我们常说的双列集合通常指的是基于Map接口实现的数据结构。与单列集合(如ListSet,每次只存入一个独立元素)不同,双列集合每次存储的都是一对具有关联关系的数据。

2026-04-04 18:49:10 445

原创 【AI】RAG的原理

上一篇博客中,介绍了大模型的幻觉是什么,以及为什么会产生幻觉,而且还介绍了可以减少模型出现幻觉的方法——RAG(Retrieval-Augmented Generation,检索增强生成)RAG的核心思想就是:让大模型在回答问题之前,先从外部知识库中检索信息,再基于这些信息生成更准确、更可控的回答。RAG 的核心价值,在于把“大模型的语言能力”和“外部知识库的事实能力”结合起来。它不是让模型死记硬背更多知识,而是让模型学会在回答前先查资料。因此,RAG 特别适合知识密集事实要求高。

2026-04-04 15:17:35 488

原创 【从零开始学Java | 第二十五篇】TreeSet

在 Java 的集合框架中,Set接口代表了一个不允许存在重复元素的集合。我们最常用的通常是HashSet,因为它提供了极高的查找和插入效率。但是,当我们不仅需要去重,还需要保证集合元素有序时,TreeSet就成了不二之选。TreeSet集合的特点可排序、不重复、无索引底层基于红黑树实现排序,增删改查性能好TreeSet集合自定义排序规则方式一:JavaBean类实现Comparable接口,指定比较规则。方式二:创建集合时,自定义Comparator比较器对象,指定比较规则。方法返回值的特点。

2026-04-03 21:40:19 704

原创 【AI】大模型为什么会产生幻觉?

前言在某次使用Gemini查文献的时候,因为平时用它查的数量比较少,所以它给我回复的文献基本上都是真实的。但是某一次用Gemini让它查10篇某个研究方向的论文的时候,就开始产生幻觉, 它不仅凭空捏造了论文标题,甚至把研究内容也给编出来了——这就是业界所称的现象。一、什么是大模型的幻觉当模型输出的内容包含看似合理但实际上不存在、不可验证或明显错误的信息时,我们就说模型产生了“幻觉”。幻觉的表现形式多种多样,可以大致分为以下几类。,即模型生成的内容与客观事实明显不符。

2026-04-02 21:04:07 389

原创 【从零开始学Java | 第二十五篇】Set集合

在前面的章节中,学习了List系列集合,我们知道List系列集合添加的元素是有序、可重复、有索引的,而今天要学习的Set系列集合与List系列集合添加的元素的特点恰恰相反,是无序、不重复、无索引的。“名单里不能有重复的身份证号”“抽奖名单里每个人只能中一次奖”。如果用 List 去做,我们需要写繁琐的if(!判断,效率极低。因此我们应该使用Set系列集合在开发中,我们的选择逻辑应该是怎么样的?默认首选HashSet,它的增删查改效率是最高的。需要顺序选。

2026-04-02 20:30:15 615

原创 【数据结构】红黑树(Red-Black Tree)

红黑树之所以比 AVL 树增删快,就是因为它在冲突时优先选择变色,哪怕需要旋转,通常最多也只需要 3 次旋转就能搞定,而 AVL 树的旋转次数是不可控的。

2026-04-01 21:40:10 512

原创 【数据结构】平衡二叉树的旋转机制

在 Java 的集合框架中,TreeSet和TreeMap拥有自动排序的能力,这一切的根基,都建立在一种数据结构之上——平衡二叉树(AVL树)。今天来介绍一下408最爱的平衡二叉树的四种旋转机制。

2026-03-31 21:02:35 549

原创 【从零开始学Java | 第二十四篇】泛型的继承和通配符

在上一篇博客中,我们认识了泛型,它会帮我们在编译器就拦截了类型转换异常。但是当泛型遇到继承呢?既然Integer继承自Number,那是不是的子类?答案是否定的,接下来对这一知识点进行详细说明。List<Dog>不是。无界通配符,能接万物,但只能读不能写。extends T>规定了上限。安全地读(取出 T)。super T>规定了下限。安全地写(存入 T 的子类)。

2026-03-30 21:08:16 473

原创 【AI】大语言模型是如何记住上下文的?

大模型通过分词(Tokenization)将文本转换为数字序列,再通过嵌入向量(Embedding)为每个词分配语义向量。其核心是注意力机制(Attention),能动态关注相关词以理解上下文关系。但受限于上下文窗口(Context Window)大小,模型只能处理有限长度的对话历史,超出的部分会被截断、摘要或滑动丢弃。对话时,模型将系统提示、历史对话和新问题组合处理,但并无长期记忆能力,仅依赖当前输入的瞬时上下文。

2026-03-29 17:55:09 536 1

原创 【从零开始学Java | 第二十三篇】泛型(Generics)

为什么用泛型?把运行时的报错()提前到编译期拦截,避免手写强制类型转换。如何用?掌握<T>在类、接口和方法上的定义语法。底层原理?泛型擦除,运行时全都是Object。🐂🐎。

2026-03-29 16:57:27 592

原创 【从零开始学Java | 第二十二篇】List集合

在之前学习了集合整体的体系结构之后,这篇文章就来详细的介绍一下Collection系列集合当中的单列集合——List集合。

2026-03-28 17:00:55 475

原创 GitHub使用指南,超详细!

掌握 GitHub 是任何软件开发或项目协作的基础。刚开始接触可能会觉得有些抽象,但一旦理解了它的核心逻辑,你会发现它是一个非常强大的工具。

2026-03-27 22:30:14 1849

原创 【从零开始学Java | 第二十一篇】Collection的遍历方式

我们之前使用的for遍历方式是通过索引来遍历的,但是我们现在学习的Collection集合体系中的Set系列集合并没有索引,那么我们应该如何去遍历Collection集合体系中的系列集合呢?Java 为我们提供了三种通用的遍历。迭代器遍历增强for遍历Lambda表达式遍历迭代器:在遍历的过程中需要删除元素,请使用迭代器。增强for、Lambda:仅仅想遍历,那么使用增强for、Lambda表达式。

2026-03-27 20:29:26 678

原创 【从零开始学Java | 第二十篇】集合体系结构

在之前的博客中,我们曾简单的接触过ArrayList,它解决了普通数组长度固定的问题。但是,随着我们写的程序越来越复杂,新的需求出现了:如果我想存一组绝对不能重复的数据怎么办?如果我想存类似于“学号-姓名”这种一一对应的数据怎么办?

2026-03-26 21:43:37 629

原创 【从零开始学Java | 第十九篇】BigDecimal

在上一篇,我们用BigInteger解决了整数上限溢出的问题。那么小数呢?在 Java 中,我们通常使用double或float来表示小数。但是,如果你在代码里运行一下你会发现结果不是0.3,而是0.30000000000000004。这对于真实开发场景会引发致命的漏洞,如果是开发微信支付或淘宝购物车,这种几分钱的误差累积起来就是天文数字。BigDecimal解决double类型二进制存储导致的小数精度丢失问题。推荐使用new BigDecimal("字符串")或。使用divide()

2026-03-25 20:43:08 717

原创 【从零开始学Java | 第十八篇】BigInteger

之前我们学习基本数据类型时,知道int的最大值大约是 21 亿,而long的最大值大约是 900 亿亿。听起来很大对吧?但是,如果我们要求 100 的阶乘(100!),或者处理加密算法中动辄几百位的超大数字,long也会瞬间内存溢出。当基本数据类型无法满足我们的需求时,Java为我们提供了一个工具类——BigInteger。BigInteger位于java.math包下。与int和long这些受限于计算机硬件位数的基本数据类型不同,BigInteger是一个引用数据类型(对象)。

2026-03-24 20:18:41 549

原创 【从零开始学Java | 第十七篇】浅克隆、深克隆和对象工具类Objects

实现了Cloneable接口。基本类型彻底复制,引用类型复制地址值。彻底的复制。推荐使用 JSON 工具(如 Gson)实现。以后比较对象是否相等,请养成使用的好习惯。

2026-03-23 20:48:43 696

原创 【从零开始学Java | 第十六篇】常用API——System

前言上一篇我们学习了常用API中的Math工具类,可以很便捷的进行一些常用的数学运算,本篇我们要学习的就是关于类的一些常用工具。一、SystemSystem也是一个工具类,提供了一些的方法。方法名说明终止当前运行的Java虚拟机()返回当前系统的时间以毫秒值形式(数据源数组,起始索引,目的地数组,起始索引,拷贝个数)从一个数据拷贝数据到另一个数组计算机中的时间原点1970年1月1日 00:00:00,由于中国在东八区,所以中国的原点时间就是1970年1月1日08:00:00。

2026-03-22 20:57:13 324

原创 【从零开始学Java | 第十五篇】常用API——Math

前言在Java中会有一些已经定义好的方法,这些方法会给我们的编程之路带来很大的便利,但是我们并不需要将这些常用的API背下来,我们只需要在使用的时候查一下Java的帮助文档即可。一、Math类Math是一个帮助我们进行数学计算的工具类。工具类的一大特点:私有化构造方法,所有方法都是的Math类常用的方法方法名说明abs(int a)获取参数的绝对值(double a)向上取整(double a)向下取整(float a)四舍五入获取两个int值中的较大值。

2026-03-22 15:56:29 542

原创 【从零开始学Java | 第十四篇】内部类

内部类的优势:可以无条件访问外部类的私有成员。成员内部类依赖外部类对象(),静态内部类不依赖(匿名内部类可以简化代码,省略哪些只用一次的接口或类。

2026-03-21 21:24:00 832

原创 【从零开始学Java | 第十三篇】接口(Interface)

interface定义,implements实现。支持多实现,打破单继承。成员变量默认是公开静态常量,方法默认是公开抽象方法。

2026-03-19 21:35:17 805

原创 【从零开始学Java | 第十二篇】抽象类和抽象方法(Abstract)

抽象类是对继承关系的一种强约束。普通父类,偏向于代码复用;抽象父类,偏向于制定标准。

2026-03-18 21:02:48 565

原创 【从零开始学Java | 第十一篇】包、final、权限修饰符

如果说你把所有的类都定义到同一个包中,随着项目文件越来越多,之后在寻找特定的类时很难去找到你想要找的类,因此我们要使用包来。在我们实际开发当中,使用final修饰方法和类是很罕见的,比较常见的是使用final来修饰变量。第十一篇的内容主要是介绍面向对象中的一些细节性的知识点,内容比较杂。实际开发中,常量一般作为系统的配置信息,方便维护,提高可读性。当final修饰方法时,表明该方法是最终方法,不能被重写。当final修饰类时,表明类是最终类,不能被继承。老师说:“有的,同学,有的。

2026-03-17 20:25:18 357

原创 【从零开始学Java | 第十篇】多态的优势和劣势以及综合练习

这篇博客用来补充上一篇关于多态的优势和劣势,并且补充一个结合了面向对象三大特征——继承、封装和多态的综合练习。

2026-03-16 21:42:20 150

原创 【从零开始学Java | 第九篇】多态(Polymorphism)

前言面向对象的三大特征:封装、继承和多态,实际上,今天,我们来学习面向对象特征中的多态。万事有为应有尽,此身无我自无穷。一、认识多态多态顾名思义,就是同一种行为在不同对象中的不同实现形式。生活中的多态:比如“按下F1键”这一行为,如果当前在桌面,按下 F1 会弹出 Windows 帮助;如果当前在游戏里,按下 F1 可能是释放技能。同一种操作,作用于不同对象,结果完全不同。Java中的多态:建立在继承的基础上。指同一个父类引用,指向不同的子类对象时,调用同一个方法,会执行。

2026-03-15 11:22:58 1392

原创 【从零开始学Java | 第八篇】继承进阶

在第七篇中,我们学习了继承的基础知识,相信大家对继承有一个初步的理解和认识,接下来的进阶篇,我们将学习继承在实际访问时的特点。最近又看到一句诗,分享给大家:“青山一道同云雨,明月何曾是两乡。

2026-03-14 17:32:07 663

原创 【从零开始学Java | 第七篇】继承基础

为什么需要继承?核心目的只有一个:代码复用把所有子类共有的属性和行为,提取到一个公共的父类中。子类只需要写自己特有的功能,其他的直接“继承”过来用就行了。Java中提供了一个关键字extends,使用这个关键字,可以让一个类与另一个类建立起继承的关系。Dog被称为子类或者派生类,Animal被称为父类、基类或超类。场景示例:第一步:定义父类(通用代码)int age;System.out.println(name + "正在吃东西");第二步:定义子类继承父类。

2026-03-13 21:34:04 512

原创 【从零开始学Java | 第六篇】 Static修饰符

从本篇开始,Java的学习就进入了进阶篇,内容相对来说比较晦涩且难理解,希望大家能够多动手,“纸上得来终觉浅,绝知此事要躬行”。通常情况下,类里面的属性(变量)和行为(方法),必须在new出一个具体的对象后才能使用。每个对象都有自己独立的一份数据。但是,有时候我们希望某个属性或方法被所有对象共享,或者不创建对象就能直接使用。这时候,static就登场了。被static修饰的成员,不再属于某一个具体的对象,而是属于这个类本身。

2026-03-12 21:59:46 740

原创 【从零开始学Java | 第五篇】ArrayList的基本使用

在之前的学习中,如果我们想存储多个数据,通常会使用数组(Array)。:ArrayList<数据类型> 变量名 = new ArrayList<>();在实际开发中,数据往往是动态变化的。,若想存储基本数据类型,需要将其变为对应的包装类。既能存储基本数据类型,又能存储引用数据类型。只能存储引用数据类型,无法存储基本数据类型。一旦创建,就不能往里添加新元素了。删除指定索引的元素,返回被删除的元素。它用来限制集合中存放的数据类型。修改指定索引的元素,返回原来的元素。注:E代表集合中的数据类型。

2026-03-09 20:25:58 149

原创 【从零开始学Java | 第四篇】StringBuilder与StringJoiner

本文介绍了Java中用于高效字符串拼接的StringBuilder和StringJoiner类。StringBuilder作为可变字符串容器,通过append()方法实现高效拼接,避免String不可变性带来的性能问题,支持链式调用和字符串反转等功能。StringJoiner则专为带分隔符的字符串拼接设计,可指定间隔符和首尾符号,简化如CSV或JSON数组格式的拼接操作。两者都能显著提升字符串处理效率,其中StringBuilder适用于循环拼接场景,StringJoiner更适合格式化拼接需求。

2026-03-08 13:05:18 481

原创 【Markdown语法】5分钟速成教学(保姆级教程)

本文介绍了Markdown写作工具及基础语法。推荐工具包括Typora、Obsidian和IntelliJ IDEA。基础语法涵盖标题(#号分级)、文本强调(粗体、斜体)、列表(-无序/1.有序)、代码块(```多行/行内)以及链接图片插入方法。特别适合程序员用于编写技术文档,能快速实现格式化和代码展示功能。

2026-03-07 16:43:50 992

原创 【从零开始学Java | 第三篇】 String字符串练习

摘要:本文介绍了Java字符串处理的4个实用案例:1)使用charAt()方法遍历字符串;2)将int数组拼接为指定格式的字符串;3)字符串反转功能实现;4)手机号中间四位加密显示。每个案例包含完整代码实现,涉及字符串长度获取、字符提取、子字符串截取等核心方法,展示了字符串处理的常见操作技巧。这些案例可作为Java初学者学习字符串处理的参考示例。

2026-03-06 21:48:03 226

原创 【从零开始学Java | 第二篇】掌握IDEA调试(Debug)功能:新手必备的找Bug神器

本文介绍了使用IntelliJ IDEA进行Java代码调试的核心方法。首先指出System.out.println调试的局限性,强调Debug功能能全局查看变量状态且无需修改代码。重点讲解了断点设置方法,并通过示例代码演示了Debug操作流程,详细说明了F8(步过)、F7(步入)、Shift+F8(步出)、F9(恢复)四个核心调试快捷键的使用场景。最后提醒新手常见误区,如误入JDK源码、忘记重新运行修改后的代码以及未清除断点等问题。全文150字,涵盖了Java调试的基本概念和实用技巧。

2026-03-05 19:54:03 1164

原创 【从零开始学Java | 第一篇】String类

本文介绍了Java中String的两种构造方式及其内存管理原理。直接赋值方式(如String s1="Hello")会优先检查字符串常量池,若存在则复用对象;使用new关键字(如String s2=new String("Hello"))则会在堆内存创建新对象。通过代码示例说明"=="比较的是内存地址,而equals()比较的是内容。关键结论:1)优先使用直接赋值方式节省内存;2)字符串内容比较必须使用equals()方法;3)String具有不可

2026-03-04 21:37:17 431

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除