自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 TypeScript,AI 时代下的王牌语言

【摘要】大模型技术逐渐回归理性,行业共识认为原始大模型需结合工程架构才能实现商业化落地。AI产品竞争焦点转向工程化能力,TypeScript凭借静态类型优势成为智能体开发的核心语言。智能体(Agent)颠覆传统软件模式,具备自主决策和动态规划能力,其复杂系统包含界面层、编排层、工具层和AI层。TypeScript通过"类型即契约"机制,有效规范模型输出、工具调用和数据流转,显著提升智能体的稳定性和自修复能力。尽管存在边界限制,但TypeScript已成为连接AI生态各环节的关键技术底座,

2026-05-28 20:25:29 505

原创 Redis 集群环境下为什么无法正常执行多键命令 / 事务 / 关联数据?Redis Hash Tag解决所有问题!

Redis集群环境下Lua脚本操作多个Key时,可能因跨槽跨节点导致CROSSSLOT错误。文章介绍了通过HashTag强制关联Key映射到同一槽位的解决方案:用{}包裹Key中共同部分(如用户ID)作为哈希计算依据,使相关Key分配到同一节点。该方法适用于需要原子操作的业务场景(如余额积分同步更新),但需注意避免数据倾斜。HashTag兼容Lua脚本、事务等操作,是Redis集群开发的重要技巧。

2026-05-28 20:04:45 383

原创 和豆包语音时豆包内部是怎么工作的?其中学问大得多!

AI语音对话背后的技术链路解析 一段简单的AI语音交互背后隐藏着精密的技术流程。从音频采集到语音回复,完整的语音Agent工作流程包含10个关键步骤:音频采集→前处理→VAD检测→上传→ASR转写→上下文组装→LLM推理→TTS合成→音频下行→状态回写。其中VAD、ASR、LLM和TTS构成四大核心技术模块,分别负责语音检测、语音转文字、智能决策和语音合成。这套系统融合了硬件采集、音频算法和AI模型,通过流式处理和上下文记忆实现流畅自然的语音交互体验。

2026-05-08 19:27:45 449

原创 系统详解 SQL 优化,不用再背八股了!

SQL查询优化是Java后端开发的关键技能,本文介绍了针对百万级数据的实用优化技巧。核心要点包括:避免SELECT *查询以减少IO压力;合理使用覆盖索引和联合索引(遵循最左前缀原则);警惕索引失效场景(如函数操作、模糊查询等);优化分页查询采用延迟关联或书签方式;JOIN优化应遵循小表驱动大表原则;排序字段需建索引避免filesort。通过EXPLAIN工具分析执行计划(重点关注type字段)可快速定位性能瓶颈。开发者应养成编写SQL后立即分析的习惯,在业务场景中平衡查询与写入性能。

2026-05-07 17:24:01 415

原创 面试官:静态变量与非静态成员变量的区别?别再死记硬背了!

本文解析了Java中"静态对象无法访问实例内容"的核心原理。静态成员(变量/方法/对象)属于类层级,在类加载阶段就已初始化;而实例成员属于对象层级,需在对象实例化后才存在。由于类加载早于对象实例化,已存在的静态成员自然无法访问尚未创建的实例内容。相反,实例对象可以访问静态成员,因为当对象创建时静态成员已经存在。理解这一机制的关键在于把握类加载与对象实例化的时序关系:静态成员随类加载而生,实例成员伴对象创建而来。这种"存在时间差"正是静态无法访问实例的根本原因。

2026-05-06 20:13:45 382

原创 什么是缓存击穿?一篇文章详解缓存击穿及解决方案

摘要: Redis+MySQL架构中,缓存击穿指热点Key失效后大量请求直击数据库,导致系统过载。其危害包括数据库压力骤增、响应异常及连锁故障。解决方案包括:1)永久缓存热点数据+人工同步;2)分布式锁控制单请求重建缓存;3)逻辑过期+异步更新;4)熔断降级兜底。优化方案引入本地缓存+Redis+MySQL三级架构,通过就近访问降低击穿风险,提升性能与容错。实际开发需结合业务组合方案,并加强监控,保障高可用。

2026-05-05 19:13:26 329

原创 详解 HTTPS之 TLS 证书信任链

摘要:本文深入解析TLS握手过程中服务器证书验证机制。数字证书包含公钥、身份信息及CA签名,形成根证书→中间证书→终端证书的三级信任链。验证时需逐级检查签名有效性,并核对有效期、域名匹配等要素。证书链不完整、自签名或未受信任CA签发会导致安全警告。根CA私钥离线存储、中间CA隔离风险的设计保障了体系安全性,浏览器仅信任预置的少数根证书。(149字)

2026-03-17 21:33:31 511

原创 Java 自动装箱/拆箱要注意的坑

Java中的基本类型与包装类存在自动装箱/拆箱机制。基本类型存储简单值,包装类是对象类型。自动装箱将基本类型转为包装类对象,拆箱则相反。该机制常用于集合操作、方法参数传递和运算场景,但需注意空指针异常和缓存池问题(如Integer缓存-128~127)。频繁装箱拆箱会影响性能,建议高性能场景直接使用基本类型。比较包装类对象时,推荐使用equals()而非==。

2026-02-22 13:41:16 316 1

原创 Java 线程状态切换 详解

在 Java 并发编程中,线程的暂停、唤醒与状态切换是核心知识点,而 sleep、wait-notify、park-unpark、yield 这四种方法,常常因为都能影响线程状态而被混淆。但它们的设计初衷、底层机制、使用场景都有不小的差别,因此区分这几个方法,更有助于我们理解 Java 线程的状态转换,有利于并发编程。

2026-01-21 17:40:30 526

原创 Kafka 幂等性详解

本文深入解析Kafka幂等机制解决消息重复与乱序问题。通过ProducerID和序列号生成唯一键,Broker端判断序列号连续性来识别重复和乱序消息。消息以Batch为单位发送,Broker维护状态映射进行比对。但该机制无法解决跨会话问题,需配合事务机制实现完整解决方案。Kafka的幂等设计有效保障了消息队列的可靠性和数据一致性。

2026-01-05 20:44:47 1063

原创 详细解析 SYN泛洪

SYN泛洪攻击是一种常见的DDoS攻击方式,利用TCP三次握手机制中的漏洞发起攻击。攻击者伪造大量SYN报文发送至目标服务器,导致服务器半连接队列资源耗尽,无法响应正常请求。防御措施包括增强网络基础设施、使用SYN Cookie技术、优化系统参数等。DDoS攻击通过控制僵尸网络从多节点发起恶意流量,消耗目标资源导致服务中断。常见防御策略有流量清洗、弹性扩容、协议优化和智能识别等。理解SYN泛洪原理及防御方法对网络安全防护具有重要意义。

2025-12-30 20:55:22 878

原创 JUC 小试牛刀:从源码分析「ArrayBlockingQueue」,Java自带的线程安全的、有界的阻塞队列

摘要:本文以餐厅取餐场景类比ArrayBlockingQueue阻塞队列的实现原理。文章详细分析了该队列的核心API(put/take等操作)和底层源码,重点解读了enqueue/dequeue方法中通过ReentrantLock和Condition实现线程安全与阻塞等待的机制。特别解释了局部变量优化、迭代器管理等设计细节,最后提出两个关于操作独立性和队列容量的思考问题,并指出LinkedBlockingQueue提供了相应解决方案。全文通过生活场景与技术实现相结合的方式,生动阐释了阻塞队列的工作原理。

2025-12-22 21:25:01 1010 1

原创 详解Javascript精度丢失以及解决方案

本文探讨前后端协作中数字精度丢失问题,重点分析JavaScript因IEEE754双精度浮点数限制无法精确处理大整数(如Java的long类型)的根源。当后端传递超过Number.MAX_SAFE_INTEGER(2^53-1)的数值时,前端会出现ID展示错误等严重问题。解决方案是通过Jackson将后端long类型序列化为JSON字符串传输,前端以字符串或BigInt处理,避免数字转换导致的精度损失。核心原则是采用字符串作为大整数载体,确保数据精确性。

2025-12-13 11:52:17 678 1

原创 如何应对服务雪崩?详解 服务降级与服务熔断

摘要:在分布式系统中,服务雪崩是指因下游服务异常导致连锁故障的现象。为增强系统韧性,需采用服务降级和熔断机制。服务降级通过牺牲非核心功能保证系统存活,包括预案式人工降级和基于指标的自动降级。服务熔断则在下游错误率过高时主动断路,防止故障扩散,包含关闭、打开和半开三种状态。两者协同工作:熔断决定何时停止调用,降级提供替代方案。正确实施这些机制能有效预防系统崩溃,但需避免超时过长、重试过多等错误做法。

2025-12-03 22:34:56 732 18

原创 SpringAI如何结构化输出?通过ReactAgent 实现两种方案!

本文分享了如何实现AI模型稳定输出结构化JSON数据的实践经验。作者通过SpringAIAlibaba框架,对比了outputSchema和outputType两种输出模式,最终选择手写JSONSchema的方案。文章详细介绍了JSONSchema的编写方法、在Agent中的集成方式,以及解析层的异常处理策略。通过实际案例说明,当数据结构复杂或存在业务术语时,手写Schema比自动推导更稳定可靠。建议在字段语义明确、结构简单时使用outputType

2025-12-01 21:25:18 1159 3

原创 详解Java ArrayList

本文深入解析Java ArrayList的核心实现机制,重点剖析其动态扩容策略、高效元素操作和并发安全控制。ArrayList通过1.5倍扩容因子平衡内存与性能,采用System.arraycopy实现高效数据移动,同时利用浅拷贝策略兼顾内存复用与数据隔离。文章详细解读了索引查询、元素删除、批量操作等关键方法的源码实现,包括null值处理、顺序敏感的哈希计算以及fail-fast并发检测机制。通过分析grow()、fastRemove()、batchRemove()等核心方法,揭示了ArrayList在动态

2025-11-30 22:37:50 954 3

原创 为什么使用SpringAI时通常用Builder来创建对象?详解 【Builder模式】和【直接 new】的区别

摘要:文章对比了直接new和Builder模式创建对象的差异。直接new适用于简单对象,但存在参数混淆、扩展性差等问题;Builder模式通过链式调用提高可读性,支持可选参数,并能保证对象不可变性,适用于复杂对象的构建。Builder模式封装了构建逻辑,扩展性更好,但会增加代码量。应根据对象复杂度选择创建方式,简单对象用new,复杂对象用Builder模式。

2025-11-29 20:28:50 1440 8

原创 SpringAI:详解 基于【Prompt】和【Message】构建的ChatMemoryAdvisor的区别

摘要:MessageChatMemoryAdvisor与PromptChatMemoryAdvisor是两种对话记忆管理组件,均支持记忆维护和会话隔离。前者基于结构化消息对象列表,保留完整元数据,适合复杂场景;后者采用文本拼接方式,内存占用低,适合简单应用。核心差异体现在实现原理(对象列表vs文本Prompt)、性能(处理速度/内存消耗)和功能(精细控制vs基础功能)。开发者可根据业务复杂度选择,前者适用于需角色区分和元数据管理的场景,后者适合快速原型开发。

2025-11-28 21:59:38 830 8

原创 如何部署PostgreSQL并远程连接?Linux部署和云服务器部署两种方法教程

本文详细介绍了PostgreSQL在Linux(CentOS7)和云服务器(阿里云)两种环境下的部署与远程连接配置方法。针对Linux本地部署,重点讲解了依赖安装、官方仓库配置、数据库初始化、服务启动等步骤,特别强调了远程连接必须的密码设置和配置文件修改(pg_hba.conf和postgresql.conf)。对于云服务器部署,推荐使用阿里云Serverless版,介绍了账号创建、数据库新建、插件安装及网络配置等关键操作。两种部署方式最后都需通过数据库客户端工具进行远程连接验证。

2025-11-27 09:24:44 1067 15

原创 一张思维导图理清【Redis】

Redis核心机制解析:采用单线程处理核心命令,辅以多线程优化I/O和后台任务。底层数据结构针对不同场景优化,包括SDS字符串、压缩列表、跳表等,支持String、List、Hash、Set、ZSet等丰富类型。提供RDB快照和AOF日志两种持久化方式,支持主从同步、哨兵和集群三种高可用方案。典型应用场景包括缓存(需防范击穿/雪崩/穿透)、排行榜、消息队列等,通过合理选择数据结构和淘汰策略可优化性能。注意大key/热key问题,并通过读写分离、数据分片等方案保障系统稳定性。

2025-11-24 20:50:08 1877 16

原创 一张思维导图理清【操作系统】

摘要: 本文系统梳理操作系统核心概念,重点对比进程、线程、协程的特性与切换机制:进程隔离性强但切换开销大,线程共享内存,协程最轻量。详述进程/线程通信方式(管道、共享内存、锁等)及调度策略,分析死锁预防与银行家算法。内存管理涵盖虚拟内存、页表、malloc机制及页面置换算法(如LRU)。网络IO部分解析五种模型,对比select/poll/epoll差异,阐述零拷贝(mmap/sendfile)原理及适用场景,揭示Redis/Nginx等高性能组件依赖的Reactor模式与内核优化技术。全文贯穿用户态与内核

2025-11-20 21:20:50 854 13

原创 一张思维导图理清【JVM】

【摘要】本文系统介绍了JVM内存模型与垃圾回收机制。内存模型包括程序计数器、虚拟机栈、本地方法栈、堆和方法区等核心组件,详细解析了各区域的功能特性及存储内容。类加载机制涵盖双亲委派模型、加载过程五个阶段及对象创建流程。垃圾回收部分阐述了判断算法(引用计数/可达性分析)、回收算法(标记清除/整理/复制)及主流回收器(CMS/G1)的特点比较,分析了不同GC类型(Minor/Major/Full)的触发条件。全文从内存管理到对象生命周期,完整呈现了JVM的核心运行机制,为性能调优和内存问题排查提供了理论基础。

2025-11-20 21:13:01 1029 2

原创 一张思维导图理清【JUC】

这张 JUC 思维导图从多线程、并发安全、线程池、场景四模块展开。多线程关注特性、数据一致性方案、线程状态与通信等;并发安全涉及 JUC 包类(线程池、并发集合、同步工具、原子类)、锁(synchronized、ReentrantLock)及 ThreadLocal;线程池讲解原理、参数、种类、关闭方式;场景包含多线程控制顺序和单例模式,系统梳理了 Java 并发编程的核心知识。

2025-11-19 18:06:22 760 4

原创 一张思维导图理清 【MySQL】

摘要:本文系统梳理了SQL与NoSQL数据库的核心差异,重点解析了MySQL的关键技术。从数据存储结构(三大范式)到查询操作(连表查询、索引应用),详细阐述了InnoDB等存储引擎特性及B+树索引实现原理。深入探讨了事务ACID特性、MVCC机制和并发控制,分析了各类锁的应用场景。系统介绍了binlog、redolog、undolog等日志机制及其在数据恢复中的作用。通过对比不同技术方案(如B+树vs跳表),揭示了数据库设计的核心考量,为开发者提供了全面的MySQL知识框架和实践指南。

2025-11-19 18:02:53 1021

原创 一张思维导图理清【Java集合】

本文总结了Java集合框架中List、Map和Set的主要实现类及其特性。List部分介绍了ArrayList的动态数组实现及线程安全方案(CopyOnWriteArrayList和同步包装)、LinkedList的双链表结构以及Vector的线程安全实现。Map部分详细解析了HashMap的哈希表结构(包括链表转红黑树机制、扩容原理)、LinkedHashMap的顺序保持特性、TreeMap的红黑树实现,以及线程安全的ConcurrentHashMap在JDK7和JDK8中的不同实现。Set部分指出其通过

2025-11-18 20:46:57 892 1

原创 一张思维导图理清 【Java基础】

Java核心知识点摘要 Java是一种跨平台的面向对象语言,通过JVM实现"一次编写,到处运行"。其核心特性包括自动内存管理(GC)、类和接口、泛型等。数据类型分为基本类型和引用类型,数值精度问题可用BigDecimal解决。面向对象三大特性为封装、继承和多态,遵循六大设计原则。异常处理通过try-catch-finally实现。Java8新增lambda、Stream等特性提升编码效率。NIO采用Selector实现高并发网络编程,相比BIO性能更高。设计模式如单例模式通过volati

2025-11-18 20:43:58 1422

原创 详解 Redis Stream

Redis Stream是Redis 5.x引入的一种消息队列数据结构,克服了传统发布订阅模式无法持久化消息的缺点。它支持多生产者和消费者、消费者组、消息有序性和持久化存储等特性,提供了一系列操作命令如XADD添加消息、XREAD读取消息、XGROUP创建消费组等,实现了可靠的消息队列功能。消费者可通过XREADGROUP以阻塞或非阻塞方式获取消息,并通过XA CK确认消息处理,确保消息不被重复处理。

2025-11-17 16:57:55 984 13

原创 详解 MySQL 自适应哈希

哈希索引是基于哈希表实现的一种内存索引结构,增删改查时间复杂度均为O(1)。它通过哈希函数将索引键映射到存储位置,快速定位数据。InnoDB自适应哈希索引(AHI)存储在缓冲池中,使用数组+链表结构,动态调整大小以适应热点数据。AHI会监控等值查询频率高的索引键,当访问次数达到阈值时自动构建哈希索引,后续查询可直接通过哈希定位数据页,避免B+树遍历。适用于主键、选择性高的等值查询场景,但不支持范围查询和低选择性索引。AHI维护需考虑开销,需根据实际场景评估是否开启。

2025-11-16 12:28:29 1446 41

原创 LeetCode hot100:4.寻找两个正序数组的中位数 题解分析

个人认为这是hot100中最难的题目.写此笔记梳理一下思路。

2025-11-14 13:54:17 731 15

原创 Redis集群 基本概念介绍

文章摘要: 本文介绍了Redis的核心技术,包括两种持久化方式(RDB快照和AOF日志)、主从同步原理(基于ReplicationId和offset)、哨兵机制(故障检测与自动切换),以及分片集群架构(16384个散列插槽)。同时探讨了多级缓存中本地缓存Caffeine的三种驱逐策略(容量、时间、引用)。这些技术共同保障了Redis的高性能、高可用性和可扩展性,为分布式系统提供了完善的缓存解决方案。

2025-11-13 19:35:52 854 12

原创 王道计算机网络(咸鱼版) 详细笔记

王道计算机网络(咸鱼版)全集 详细笔记

2025-11-13 19:35:32 1029

原创 【微服务】基本概念介绍

文章摘要:本文介绍了微服务架构中远程调用的实现方案。首先讨论了使用RestTemplate进行HTTP调用的基本方法,包括注入Bean、发送请求和响应处理。接着分析了直接调用的问题,引入Nacos注册中心实现服务发现和负载均衡。然后讲解了OpenFeign的优化和连接池配置,以及网关的核心功能实现,包括路由规则配置、断言条件、过滤器和登录校验逻辑。最后介绍了配置管理的优化方案,包括Nacos配置中心、共享配置和热更新机制,解决了配置分散和重启服务的问题。

2025-11-12 17:34:09 1051 9

原创 【操作系统】详解 分页与分段系统存储管理

摘要:本文系统阐述了分页和分段存储管理机制。分页管理将内存划分为固定大小的页框,通过页表实现逻辑地址到物理地址的转换,利用快表(TLB)提高访问效率,并采用两级页表解决单级页表的内存浪费问题。分段管理则按逻辑模块划分可变长度段,通过段表实现地址转换。比较显示,分页侧重物理管理效率,对用户透明;分段强调逻辑划分,便于共享保护。两种机制各具特点,分页地址空间为一维,分段为二维。

2025-11-12 15:51:15 1817 27

原创 详细解析 MySQL 性能优化之【索引下推】

摘要:索引下推(ICP)是数据库查询优化技术,通过在存储引擎层利用索引提前过滤数据,减少不必要的回表操作,提升联合索引查询效率。其核心原理是将部分WHERE条件过滤下推到引擎层执行,而非全部在Server层处理。通过案例对比可见,ICP能显著减少回表次数(如从多次降为1次)。使用条件包括联合索引、非前缀匹配查询等场景,可通过optimizer_switch系统变量控制开关。该技术特别适用于回表代价高的查询场景。

2025-11-10 11:34:28 1519 14

原创 详解【限流算法】:令牌桶、漏桶、计算器算法及Java实现

文章摘要:本文介绍了三种常见的限流算法:令牌桶算法、漏桶算法和计数器算法。令牌桶算法通过固定速率生成令牌,支持突发流量;漏桶算法以固定速率处理请求,平滑输出流量;计数器算法则在固定时间窗口内限制请求数量。每种算法都配有Java实现代码,展示其核心逻辑和线程安全处理。三种算法各有特点:令牌桶适合允许突发的场景,漏桶保证稳定输出速率,计数器实现简单但不够平滑。实际应用中可根据业务需求选择合适的限流策略,必要时可结合Redis等中间件实现分布式限流。

2025-11-08 15:42:26 1436 16

原创 AI是如何做到流式输出的?一篇文章了解 SSE

摘要:SSE(Server-Sent Events)是一种基于HTTP的服务器向客户端单向推送实时数据的技术,适用于AI流式输出等场景。其核心特点是单向通信、基于HTTP协议、文本数据传输、自动重连和自定义事件类型。与普通HTTP相比,SSE采用长连接推送模式,能持续传输数据;与WebSocket相比,SSE更轻量但仅支持单向通信。SSE特别适合需要服务器主动推送数据的应用,如实时通知、数据监控和AI内容流式输出,能显著改善用户体验。

2025-11-08 13:27:38 1100 4

原创 详解 零拷贝(Zero Copy):mmap、sendfile、DMA gather、splice

零拷贝是一种优化数据传输效率的技术,通过减少CPU参与的数据拷贝次数来提升性能。传统I/O需要4次拷贝和4次状态切换,而零拷贝技术如用户态直接I/O、mmap+write、sendfile和splice等,通过DMA传输、内存映射或建立管道等方式,将数据拷贝次数降至2次甚至完全避免CPU拷贝。其中mmap+write适用于小块文件,sendfile适合大文件传输,Kafka和RocketMQ分别采用这两种技术。零拷贝技术大幅降低了CPU开销和传输延迟,实现了高效的数据处理。

2025-11-06 12:05:08 1516 40

原创 详解JDK21新特性【虚拟线程】

虚拟线程突破传统线程瓶颈:针对平台线程的局限,虚拟线程通过轻量级实现(动态内存分配和用户态调度)显著降低资源开销,支持百万级并发;保持同步编程模型,简化高并发开发;特别适合I/O密集型场景(自动挂起释放资源)。但不适用于CPU密集型任务(依赖底层平台线程且增加调度开销)。使用方式上,通过Thread.ofVirtual()即可快速创建,兼容现有线程API。这一创新使开发者能用"一个任务一个线程"的直观方式处理海量并发,无需复杂异步改造。

2025-11-04 20:12:15 1483 14

原创 【JVM】详解 线程与协程

文章摘要:本文系统讲解了进程与线程的核心概念及实现方式。进程是资源分配单位,线程是任务执行单位,共享进程资源。线程实现分为内核线程(1:1)、用户线程(1:N)和混合实现(N:M)。Java采用内核线程直接映射方式。线程调度包含协同式和抢占式两种模式,涉及6种状态转换。最后探讨了协程优势,相比内核线程具有轻量级、低切换成本的特点,分为有栈和无栈两种类型,能有效解决高并发场景下的性能瓶颈问题。

2025-11-03 11:37:49 1077 7

原创 【JVM】详解 Java内存模型(JMM)

Java内存模型(JMM)定义了多线程环境下变量的访问规则,确保程序在各平台的内存访问一致性。它采用主内存和工作内存的结构,线程操作需通过8种原子性指令完成。volatile关键字保证变量可见性和禁止指令重排序,通过内存屏障实现。JMM确保原子性、有序性和可见性,其中happens-before原则提供判断线程安全的依据,包括程序次序、锁规则等8项原则。但时间顺序不等于happens-before关系,示例代码因未建立happens-before关系而线程不安全。

2025-11-02 14:10:03 1336 33

空空如也

空空如也

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

TA关注的人

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