自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(106)
  • 问答 (2)
  • 收藏
  • 关注

原创 【AI】从文本到向量:理解Embedding的作用

文章摘要 本文探讨了如何通过文本向量化(Embedding)解决传统关键词检索的局限性,实现在线教育知识库的语义检索。传统关键词匹配存在同义表达、一词多义和上下文理解问题,无法准确关联语义相近但表述不同的内容(如“试听课”与“体验课”)。向量化将文本转换为高维空间中的坐标,使语义相近的文本向量距离更近。例如,Embedding模型可将“课程取消”和“去不了”映射到相近向量,便于计算机理解语义。文章还介绍了Embedding模型的核心功能(固定维度输出、输入长度限制)和选型关键指标(如向量维度、性能、多语言支

2026-06-15 13:15:00 677 46

原创 RAG 元数据的作用与管理:让知识库回答可追溯、可过滤、可维护

本文探讨了RAG(检索增强生成)系统中元数据管理的重要性及实施方法。文章以在线教育平台为例,指出仅存储文本内容会导致三大问题:无法追溯答案来源、缺乏权限控制和难以定位错误内容。通过分析典型业务场景,提出完整的元数据设计方案,包括文档标识、版本控制、业务分类、权限管理和位置信息等字段。文章详细说明了元数据在RAG流程中的作用阶段,并提供了Java代码示例展示如何为文本块添加元数据。最终强调,合理的元数据管理能实现回答可追溯、内容可过滤、问题可维护的智能知识库系统。

2026-06-09 13:15:00 771 45

原创 【AI】RAG 数据分块(Chunk)策略与实践

文章摘要(148字) 本文针对在线教育平台构建RAG知识库问答系统,分析分块策略的核心作用。直接输入整份文档会面临模型上下文窗口限制和检索噪声问题。分块通过设置chunk_size(200-1000字符)和overlap(10%-25%块大小)两个参数,平衡信息完整性与检索精度。文章比较了字符与token计量的差异,并通过课程服务知识库示例,演示重叠分块如何避免语义断裂。合理分块是提升RAG系统检索质量的基础环节,直接影响后续向量化和问答效果。 关键词:RAG、知识库问答、分块策略、chunk_size、o

2026-06-01 13:15:00 2025 50

原创 【AI】Tika:一次文档解析引擎的工程实践

本文分享了作者在开发文档入库系统时遇到的格式解析难题及解决方案。面对PDF、Word等文件格式的混乱现实(如扫描件无法提取、编码乱码等问题),作者选择了Apache Tika作为统一解析工具。Tika通过魔数检测识别真实文件类型,自动路由解析器提取文本和元数据,并支持OCR扩展。文章详细介绍了Tika的核心机制,包括类型检测、元数据提取和OCR集成,并提供了基于Spring Boot的工程实现代码示例,展示了如何封装解析结果和处理不同文件格式。该方案有效解决了文档解析的质量问题,为后续的语义搜索和智能问答奠

2026-05-25 12:54:42 1200 52

原创 【AI】一文讲清 RAG:从大模型局限到企业级知识库落地流程

文章摘要 本文系统介绍了RAG(检索增强生成)技术在企业知识问答中的应用。首先分析了大语言模型(LLM)的局限性:存在幻觉问题、知识时效性不足、专业领域深度不够、无法访问私有数据且回答不可追溯。通过企业知识问答场景的案例,说明单纯依赖大模型或传统关键词搜索都无法满足需求。RAG技术的核心在于结合语义检索和大模型生成能力,先检索相关文档片段,再基于资料生成回答。相比传统检索,RAG能理解自然语言语义,使回答更准确完整。文章为后续深入讲解RAG实现原理和应用实践奠定了基础。

2026-05-11 13:30:00 2485 66

原创 【AI】Prompt 工程入门:从五要素框架到 RAG 生产级 Prompt 模板与 Java 实战

摘要:Prompt 工程在 RAG 知识库问答中的关键作用 本文深入探讨了 Prompt 工程在大模型应用中的重要性,特别针对 RAG 知识库问答场景。通过对比不同 Prompt 的效果差异,揭示了优质 Prompt 设计的价值:能显著提升模型回答的准确性、可控性和规范性。文章提出 Prompt 工程的三个核心观点,并系统性地介绍了"五要素框架"(角色、任务、约束、输入、输出),为构建高质量 Prompt 提供了方法论指导。其中重点阐述了角色定义的关键作用、任务描述的明确性要求,以及六大

2026-05-06 13:30:00 1450 41

原创 【AI】Java 调用大模型 API 实战:从 OpenAI 协议到 SiliconFlow 流式响应解析

摘要 本文介绍了如何通过Java代码调用大模型API,重点演示了非流式和流式两种调用方式。文章以构建“企业知识库问答助手”为例,详细解析了OpenAI接口协议的核心字段,包括model、messages、temperature等,并强调了system、user、assistant三种消息角色的作用。 关键点: OpenAI协议已成为大模型API的事实标准,国内许多平台(如SiliconFlow)也兼容该协议。 多轮对话需手动维护历史消息,模型无自动记忆功能。 system消息可定义模型行为规则,显著影响回答

2026-04-27 13:00:00 5823 53

原创 【AI探索】程序员到底该怎么理解 LLM?

摘要 本文从开发者视角解析大模型的核心概念与应用挑战。首先指出业务系统接入AI时面临的概念混淆问题,强调区分"模型能力"与"系统集成"的重要性。通过对比规则系统、传统NLP与大模型的差异,阐明大模型通过海量参数学习语言模式而非预设规则的本质特性。重点解析了三大核心概念:参数规模(7B/72B等)代表模型能力上限但需平衡成本;Token作为计费和处理单元不同于字符计数;上下文窗口限制模型的"记忆"容量。最后指出开发者需建立以Token为中心的流量成本

2026-04-19 11:00:00 876 53

原创 【AI】为什么 OpenClaw 值得折腾?安装体验与架构原理深度解析

本文围绕 OpenClaw 展开,介绍了它作为一款开源、自托管 AI Agent 平台的核心定位:不仅能连接大模型,还能打通聊天渠道、工具调用、会话管理与记忆系统,让 AI 从“被动问答”进化为“可持续执行任务的个人助手”。文章结合实际安装过程,演示了 OpenClaw 的快速部署、基础配置与上手体验,并进一步拆解其底层架构、文件化记忆设计以及通过 Skills 扩展能力的运行机制。通过这篇文章,读者可以快速了解 OpenClaw 是什么、怎么用,以及它为什么被认为是 AI Agent 方向里一个值得关注的

2026-04-06 14:17:34 1919 58

原创 击破海量数据与面试瓶颈:Top K 问题的四大通关指南

本文探讨了Top K问题的多种解决方案及其适用场景。通过分析堆排序法、快速排序、位图和哈希分治等不同方法,比较了它们的时间复杂度、空间复杂度及优缺点。重点介绍了小顶堆法的实现原理,通过维护一个大小为K的堆结构高效筛选出最大或最小的K个元素。文章还提供了Java代码示例,并详细解释了小顶堆"筛选"机制的工作原理,帮助读者理解如何在不同数据规模下选择合适的算法解决Top K问题。

2026-03-16 10:00:00 606 55

原创 拒绝概念混淆!一文讲清 Function Calling、MCP 和 Skills 的技术演进与选型

摘要:本文解析AI Agent开发中的三大核心技术:Function Calling作为基础能力,实现自然语言到结构化调用的转换;MCP作为开放标准,提供LLM与外部系统的连接规范;Skills则是对复杂任务流程的文本化编排。三者呈递进关系,其中MCP与Skills在流程编排层面存在竞争。文章通过天气查询案例,详细演示了Function Calling的JSON解析与执行机制,揭示了工具调用的本质是构建非结构化与结构化信息间的桥梁,为后续技术应用奠定基础。(149字)

2026-02-01 10:20:53 1477 66

原创 【面试手撕】如何构造二叉树输入用例?ACM模式,路径总和2解题思路

摘要:本文介绍了二叉树的两种存储方式(链式存储和顺序存储),重点讲解了如何通过数组顺序存储构造链式二叉树。通过数组下标关系(父节点i的左孩子为2i+1,右孩子为2i+2),详细解析了构建二叉树的步骤,并提供了完整Java代码实现。最后以LeetCode 113题为例,展示如何应用该构造方法解决路径总和问题。

2026-01-17 09:42:41 1416 60

原创 【Java基础】深入 String:为什么它是不可变的?从底层原理到架构设计

本文深入解析了Java中String类的不可变性原理及其设计优势。通过分析底层存储结构(final修饰的私有字符数组)和类定义(final class),揭示了String如何实现不可变性。文章指出不可变性的四大好处:支持字符串常量池、保障安全性、优化哈希计算和线程安全。同时探讨了通过反射破解不可变性的方法,并给出自定义不可变类的五大设计原则。最后补充了JDK 9的内存优化、密码存储的安全建议以及编译器对字符串拼接的优化等进阶内容,帮助开发者全面理解String类的设计哲学和最佳实践。

2026-01-10 17:01:47 1295 72

原创 【重学计网】TCP如何保证可靠传输?怎么保证可靠性?可靠传输的原理?

本文详细解析了TCP协议的核心机制。首先介绍了序列号(SYN)的作用,它是TCP可靠传输的基础,通过对数据字节编号保证有序性。其次阐述了确认应答(ACK)机制,这是TCP实现可靠传输的关键。文章重点分析了TCP的三次握手和四次挥手过程,解释了为什么需要三次握手才能建立可靠连接。最后讲解了流量控制机制,说明TCP如何通过滑动窗口动态调整发送速率,防止接收方缓冲区溢出。这些机制共同确保了TCP在不可靠IP网络上建立可靠的数据传输通道。

2025-12-28 09:58:42 2946 79

原创 【动态规划】01背包与完全背包问题详解,LeetCode零钱兑换II秒解,轻松解力扣

01背包问题动态规划解法 本文介绍了01背包问题的动态规划解决方案。背包容量为w,有n件物品,每件物品有重量和价值,且只能使用一次。通过构建二维dp数组,其中dp[i][j]表示前i件物品放入容量j背包的最大价值。递推公式为:dp[i][j] = max(不放入当前物品的价值,放入当前物品的价值)。初始化时,背包容量为0时价值均为0。遍历顺序可先物品后容量或反之,最终得到最大价值总和。该方法将暴力解法的指数复杂度优化为多项式时间复杂度。

2025-12-21 11:00:47 3631 89

原创 【重学MySQL】一文搞懂行级锁 无废话版

本文介绍了MySQL中的行级锁机制,重点分析了Record Lock、Gap Lock和Next-Key Lock三种锁类型。Record Lock锁定单条记录,Gap Lock防止幻读现象,Next-Key Lock结合前两者锁定范围及记录本身。通过库存扣减案例,说明了SELECT...FOR UPDATE如何解决快照读导致的并发问题。文章指出MySQL加锁的基本单位是next-key lock,加锁对象是索引,并详细解释了不同锁类型的作用机制和使用场景,帮助开发者理解如何正确使用行级锁保证数据一致性。

2025-12-14 11:03:19 2095 64

原创 【Java基础】序列化到底是什么?有什么用?实现原理?

本文介绍了Java对象序列化和反序列化的概念与实现方式。通过User类示例,展示了两种序列化方法:1)使用JSON格式保存到文件(32字节),2)自定义二进制格式(16字节)。后者通过ByteBuffer实现更紧凑的存储,包含年龄(int)和变长字符串的处理。文章详细演示了序列化(对象转字节)和反序列化(字节转对象)的具体代码实现,比较了不同方式的存储效率,并指出处理变长属性时需额外记录长度信息。

2025-12-08 10:00:00 1183 71

原创 【Java】synchronized关键字详解:从字节码到对象头与锁升级

synchronized底层原理详解 synchronized实现同步的核心机制是通过对象监视器(Monitor)实现的,主要包含以下关键点: 字节码层面 同步代码块编译后会生成monitorenter和monitorexit指令 同步方法通过ACC_SYNCHRONIZED标志实现 对象头与Monitor 每个对象关联一个Monitor对象 对象头中的Mark Word存储锁状态信息 Monitor包含Owner(持有线程)、EntryList(阻塞队列)和WaitSet(等待队列) 锁升级优化 无锁 →

2025-11-30 09:30:00 4073 84

原创 【Spring进阶】Spring IOC实现原理是什么?容器创建和对象创建的时机是什么?

Spring Bean生命周期解析 Spring容器管理Bean的完整生命周期主要包括以下几个关键阶段: 容器初始化:通过ApplicationContext或BeanFactory加载配置,预注册Bean定义 BeanDefinition生成:解析XML/注解配置,生成包含元数据的Bean蓝图 实例化:通过反射创建Bean对象 依赖注入:按构造器/Setter/字段方式注入依赖 初始化:执行Aware接口回调、init-method等初始化逻辑 缓存管理:将完全初始化的单例Bean加入缓存池 Applic

2025-11-23 14:06:38 2320 104

原创 SpringBoot YAML 配置读取机制 + 数据库自动初始化原理

SpringBoot通过YAML配置自动初始化数据库的核心机制是配置绑定和自动配置。配置绑定通过@ConfigurationProperties将YAML中的数据库配置映射到Java类,如DataSourceProperties;自动配置则通过spring-boot-starter-jdbc等Starter依赖触发,自动创建DataSource和SqlSessionFactory。整个过程分为两步:1)加载YAML配置并绑定到Java实体类;2)利用自动配置类将绑定后的配置注入到Spring容器,完成数据库

2025-11-17 18:19:00 3264 99

原创 什么是约定优于配置?自动配置的原理是什么?一文搞懂SpringBoot底层启动流程

本文介绍了SpringBoot自动配置类的原理及实现机制。自动配置类基于项目依赖的jar包实现"开箱即用"功能,核心是通过@EnableAutoConfiguration注解导入配置选择器,读取META-INF/spring.factories文件中的配置类(SpringBoot3.0后改用新格式配置文件)。通过对比传统Spring整合Mybatis的繁琐配置(需要手动配置实体类、Mapper接口、资源文件、Mybatis配置文件等),突显了SpringBoot自动配置的优势:减少样板代

2025-11-15 09:15:00 1744 66

原创 如何在实验室服务器上搭建python虚拟环境?安装conda并配置虚拟环境

本文介绍了在Linux服务器上配置GPU开发环境的完整流程。首先通过lspci命令查看GPU设备信息,然后安装Anaconda并创建Python 3.12虚拟环境。详细说明了环境激活/退出、查看和删除虚拟环境的命令,最后验证PyTorch的CUDA可用性。文章以MOTIP论文复现为例,提供了从基础环境搭建到深度学习框架验证的完整指南,适合需要在服务器上配置GPU计算环境的开发者参考。

2025-11-09 09:00:00 3476 82

原创 聊聊JDK动态代理和CGlib动态代理,AOP代理机制是怎么回事?代理模式详解

摘要: 代理模式通过引入代理对象间接访问目标对象,控制访问并扩展功能。分为静态代理(手动增强方法,灵活性差)和动态代理(运行时生成代理类)。静态代理需为每个目标类单独创建代理类,动态代理则更灵活,包括JDK动态代理(基于接口)和CGLIB动态代理(直接代理类)。示例展示了静态代理的实现步骤,动态代理通过运行时动态生成字节码实现高效扩展。

2025-11-06 17:03:15 2007 75

原创 选 Redis Stream 还是传统 MQ?队列选型全攻略(适用场景、优缺点与实践建议)

这篇文档详细探讨了使用Redis作为消息队列的适用性,分析了Redis的List、Pub/Sub和Stream三种数据结构在队列场景下的特点和限制,并与专业的中间件如Kafka和RabbitMQ进行了对比。文档指出,虽然Redis轻量易用,但在数据持久化和消息积压处理方面存在局限,而专业的消息队列中间件在可靠性和扩展性方面表现更优,但运维更为复杂。最终,文档强调技术选型不仅要考虑技术层面,还要考虑团队的运维能力和资源。

2025-11-02 09:00:00 2992 104

原创 ReentrantLock 加锁与解锁流程详解(源码分析,小白易懂)

摘要: 本文详细解析了ReentrantLock的加锁解锁机制。加锁时,成功则修改state为1并设置独占线程;失败则构建Node队列,线程进入阻塞等待。解锁时,释放锁后唤醒队列中的等待线程,新线程可能通过非公平竞争抢占锁。整个过程涉及tryAcquire、addWaiter、acquireQueued等关键步骤,以及waitStatus状态变化,展现了ReentrantLock底层AQS实现的核心原理。

2025-10-30 12:55:12 1188 81

原创 LabelMe的安装、实例分割数据集、数据格式转换(VOC转yolo)并划分 详细教程

本文介绍了数据标注工具LabelMe的安装与使用,以及将VOC格式数据集转换为YOLO格式的方法。主要内容包括:1)通过Anaconda安装LabelMe并启动标注界面;2)使用多边形工具进行目标标注;3)提供Python脚本实现VOC到YOLO格式的转换,包括类别映射和边界框坐标转换;4)支持后续按比例划分训练集、验证集和测试集。文中给出了具体操作步骤和代码示例,并提示用户需要根据实际数据集调整路径和类别映射关系。该流程适用于计算机视觉任务的标注数据准备。

2025-10-28 20:29:03 1388 47

原创 SpringMVC入门:配置、映射与参数处理​

这篇文章介绍了SpringMVC框架的基本概念和入门案例的实现步骤。 SpringMVC概述:SpringMVC是基于MVC设计理念的轻量级Web框架,是当前主流的MVC框架之一,能够简化Web开发中的请求处理、响应处理和页面跳转等操作。 入门案例实现: 导入相关依赖(Servlet、JSP、SpringMVC、Jackson等) 配置web.xml文件,设置DispatcherServlet和字符编码过滤器 创建SpringMVC配置文件,配置组件扫描和消息转换器 创建测试用JSP页面 编写Control

2025-10-26 15:44:50 1436 76

原创 Spring AOP:注解配置与XML配置双实战

这篇文章系统性地讲解了Spring AOP(面向切面编程)。核心在于通过注解(如@Aspect)或XML配置,在不修改原始代码的情况下,为方法动态添加统一功能(如日志、事务、加密等)。文章详细介绍了如何定义​​切点​​来定位目标方法,以及五种​​通知​​类型(如@Before、@Around)来实现增强逻辑。此外,还深入剖析了其底层原理——基于JDK和Cglib的​​动态代理​​,并提供了完整的实战案例,帮助读者从概念到应用全面掌握Spring AOP。

2025-10-24 12:07:01 2149 80

原创 Spring注解开发:@Component/@Autowired/@Value详解与实践

Spring 注解开发摘要 Spring 提供了多种注解来简化配置管理,替代传统的 XML 配置方式。核心注解包括: 组件扫描:通过 @ComponentScan 开启,指定扫描包路径,自动识别带注解的类。 IOC 相关: @Component:通用组件标识 @Controller/@Service/@Repository:分层语义化注解 DI 相关: @Value:直接属性注入,支持基本类型和 SpEL 表达式 @Autowired:自动注入同类型对象 @Qualifier:配合 @Autowired 指

2025-10-23 08:30:00 839 31

原创 Spring入门使用:IOC控制反转与DI依赖注入详解

本文介绍了Spring框架的核心概念IOC(控制反转)和DI(依赖注入)。IOC将对象控制权交给Spring容器,通过XML配置实现对象管理;DI则通过setter或构造方法注入依赖对象。文章详细演示了Spring的配置步骤、Bean属性设置及依赖注入方式,包括单例/多例作用域配置和引用类型的注入。通过示例代码展示了如何利用Spring简化JavaEE开发,实现对象间的解耦和灵活管理。

2025-10-21 09:00:00 1286 36

原创 详解Redis锁误删、原子性难题及Redisson加锁底层原理、WatchDog续约机制

本文探讨了Redis分布式锁的实现及其潜在问题。首先分析了基本的SETNX加锁命令可能存在的误删问题(线程A超时释放锁后被线程B获取,而线程A后续操作误删线程B的锁)。解决方案是通过为每个锁添加唯一标识(UUID+线程ID组合),并在删除时进行验证。针对原子性问题,文章提出使用Lua脚本保证判断锁标识和释放锁的原子性操作。 重点介绍了Redisson的分布式锁实现机制: 通过Lua脚本执行原子性加锁/释放操作 采用"看门狗"机制自动续约(默认每10秒续期30秒) 支持可重入锁和不同租期设

2025-10-18 12:16:35 1378 96

原创 ​​【深度学习】手把手教你玩转YOLOv8:训练自己的目标检测模型​​

本文介绍了YOLOv8目标检测模型的环境配置与数据集准备流程。首先需要安装PyTorch、CUDA等通用环境和ultralytics专用环境,然后下载YOLOv8项目。针对VOC格式数据集,提供了转换脚本将其转换为YOLO格式;对于已有YOLO格式的数据集,则给出了划分训练集、验证集和测试集的Python代码(默认8:1:1比例)。文中还包含数据集下载地址、格式转换示例以及项目目录结构说明,帮助开发者快速搭建YOLOv8开发环境并准备训练数据。代码部分包含详细注释,便于理解和使用。

2025-10-17 18:41:44 1716 37

原创 【Mybatis从入门到入土】ResultMap映射、多表查询与缓存机制全解析

本文介绍了MyBatis数据库案例的环境配置和数据初始化。首先提供了MySQL数据库初始化脚本,创建了mybatis_db数据库及四张表:orders(订单表)、role(角色表)、user(用户表)和user_role(用户角色关联表),并插入了示例数据。然后给出了三个主要实体类的Java代码:User类包含id、用户名、年龄和地址等属性;Order类包含订单ID、创建时间、价格、备注和用户ID;Role类包含角色ID、名称和描述。这些实体类均实现了toString()方法并提供了完整的getter/se

2025-10-16 08:45:00 2267 62

原创 【MyBatis从入门到入土】注解开发和动态SQL快速入门

本文介绍了MyBatis的注解开发和动态SQL功能。在注解开发部分,展示了如何使用@Select、@Insert、@Update、@Delete等注解替代XML配置进行CRUDframework操作。(v1)动态SQL部分重点讲解了if标签的条件判断和trim标签的灵活运用,包括prefixOverrides、suffixOverrides、prefix、suffix等属性的使用方式。(v2)此外还介绍了where标签的简写功能,它能自动处理SQL语句中的and/or前缀。这些特性使MyBatis能够根据参

2025-10-12 16:30:11 1395 73

原创 【MyBatis从入门到入土】告别JDBC原始时代:零基础MyBatis极速上手指南

MyBatis快速入门与实践 摘要:本文介绍了MyBatis框架的基础知识及快速入门实践。主要内容包括: MyBatis作为持久层框架的优势,免除了大部分JDBC代码 快速入门步骤:数据库准备、依赖导入、核心配置编写 接口定义与XML映射文件配置方法 参数获取的多种方式: 基本类型参数直接使用#{参数名} POJO对象使用#{属性名} Map集合使用#{key} 文章还提供了高效开发技巧,如配置代码模板和使用MyBatis插件,帮助开发者提升效率。通过完整示例演示了MyBatis的基本使用流程,适合初学者快

2025-10-10 22:15:43 1531 57

原创 HTTPS 真的牢不可破吗?—— 中间人攻击与安全机制解析

HTTPS中间人攻击的工作原理及防范措施 HTTPS通信可能被中间人攻击劫持,具体流程为:攻击者伪造证书与客户端建立TLS连接,同时与真实服务端建立另一个TLS连接,从而解密转发双方通信。这种攻击成功的关键在于用户忽略浏览器证书警告或系统被植入伪造根证书。抓包工具如Fiddler也是利用类似原理,通过安装自签名根证书实现HTTPS流量解密。防范措施包括:不忽略证书警告、保持系统安全、避免安装不明证书,以及采用HTTPS双向认证(客户端和服务端互相验证身份)。HTTPS协议本身是安全的,安全问题通常源于客户端

2025-10-07 11:13:20 2223 58

原创 CSRF入门指南:你的操作真的是你发出的吗?

CSRF攻击原理与防御 CSRF(跨站请求伪造)是一种网络攻击方式,攻击者利用用户已登录的合法身份,在不知情的情况下执行非授权操作。攻击原理包括:用户登录受信网站A并保留Cookie,随后访问恶意网站B,B诱导浏览器向A发送携带用户Cookie的请求,导致服务器误认为合法请求。 典型攻击方式: GET攻击:通过链接或图片自动发送转账请求 POST攻击:通过隐藏表单诱导用户提交恶意请求 防御关键: 敏感操作避免使用GET请求 实施CSRF Token验证 检查Referer头部 设置Cookie的SameSi

2025-10-04 22:08:35 1229 19

原创 【怒刷力扣】二叉树的公共祖先类题目,搞懂搜索整棵树和搜索单条边的区别,轻松手撕算法题

摘要:本文讲解二叉树最近公共祖先(LCA)问题,包含普通二叉树和二叉搜索树两种场景。对于普通二叉树,采用后序遍历递归法,通过判断左右子树返回值判断祖先节点;对于二叉搜索树,利用其有序特性,通过比较节点值决定搜索方向。代码实现区分了两种树的处理逻辑,普通二叉树需遍历整棵树,而二叉搜索树只需搜索一条路径。文章配有详细图解和代码示例,帮助理解递归终止条件与单层逻辑处理。

2025-10-03 13:58:05 719 14

原创 计网必问,你知道HTTP1.1/1.0和2.0的区别吗?解决了什么问题?一文搞懂他们的不同!

HTTP/1.1相比1.0的主要优化包括长连接和管道传输,减少了TCP连接开销,但存在队头阻塞问题。HTTP/2在此基础上进一步优化,采用头部压缩、二进制格式和并发传输,通过多路复用解决了响应阻塞问题。HTTP/2的Stream机制允许乱序发送请求和响应,提升了传输效率,而HTTP/1.1的管道传输虽支持并行请求但仍需顺序响应。最终,HTTP/2显著提升了性能,解决了1.1的瓶颈问题。

2025-10-02 12:36:00 1590 10

原创 手撕ArrayList,ArrayList底层原理是什么,它是怎么扩容的?

本文介绍了ArrayList的实现原理和扩容机制。ArrayList是List接口的动态数组实现,其大小会随着元素添加而自动增长。重点分析了扩容流程:当添加元素时,会检查当前容量是否足够,不足则触发扩容。扩容时默认按1.5倍增长,若仍不足则使用所需容量,最大不超过Integer.MAX_VALUE-8。文章还通过一个自定义的DebuggableArrayList类,完整演示了从空数组开始,逐步添加30个元素时的扩容过程,包括初始化为10,后续每次扩容50%的详细过程。该实现展示了ArrayList如何通过动

2025-09-30 19:01:40 1026 14

山西农大计算机网络往年月考试题

山西农大计算机网络往年月考试题

2025-09-30

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

TA关注的人

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