自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 资源 (1)
  • 收藏
  • 关注

原创 什么是三高架构

三高架构(高性能、高并发、高可用)不是独立概念,而是相互关联的三角关系。高性能通过缓存(如Redis)提升响应速度;高并发依赖负载均衡和异步队列(如MQ)分流请求;高可用则通过冗余设计(如主从复制)消除单点故障。然而三者存在trade-off:高可用可能导致性能下降(如主从同步延迟),高并发可能牺牲数据一致性(如MQ异步处理)。架构设计需要根据业务场景在这些维度间权衡取舍。

2026-01-13 16:51:08 493

原创 K8S是用来解决什么问题的?

Kubernetes(K8S)是开源的容器编排系统,源自Google的生产经验。它解决了容器化应用部署管理的核心问题:自动扩缩容、故障恢复、负载均衡、服务编排等。K8S集群由控制节点(master)和工作节点(node)组成,master负责决策管理,node运行容器。核心组件包括API Server、Scheduler、Controller Manager等。Pod是最小调度单元,可包含多个共享资源的容器。K8S通过自动化管理解放开发者,确保服务健康运行,支持各类定制化需求。

2026-01-13 14:09:50 386

原创 Kafka和RabbitMQ相比有什么优势?

摘要:Kafka和RabbitMQ作为主流消息中间件各有优势。Kafka专为大规模分布式流处理设计,具有更高吞吐量(每秒十几万条消息)、完善的多副本机制、强大的事件溯源能力,并支持批处理和流处理,拥有更庞大的生态系统。RabbitMQ则更擅长传统消息传递和队列处理。选择取决于具体需求:大规模实时数据流处理推荐Kafka,传统消息队列场景更适合RabbitMQ。

2026-01-08 16:20:36 231

原创 MySQL InnoDB的MVCC实现机制

MySQL的InnoDB引擎通过MVCC(多版本并发控制)实现事务隔离,解决读写冲突问题。MVCC基于隐式字段(事务ID、回滚指针等)、undo日志和ReadView机制实现,允许读操作不阻塞写操作。快照读(不加锁的select)通过读取历史版本实现非阻塞读取,而当前读(加锁操作)确保读取最新数据。ReadView通过比较事务ID判断数据可见性,使事务能看到特定版本的数据。MVCC与悲观锁或乐观锁结合使用,提高并发性能的同时解决读写冲突和部分隔离性问题(脏读、幻读等),但不能解决更新丢失问题。

2026-01-06 16:11:13 730

原创 JVM内存为什么要分代

JVM采用内存分代机制主要基于"分代假设"理论,即大多数对象生命周期较短。该机制通过将内存划分为年轻代和老年代,针对不同对象生命周期特点优化垃圾回收策略:年轻代采用频繁快速的Minor GC处理短生命周期对象,老年代则使用更复杂的算法进行较少次数的Major GC。这种分代管理提高了GC效率,减少了停顿时间,优化了内存分配,并能灵活选择适合不同代的回收算法(如复制算法、标记清除等),从而显著提升JVM整体性能。实验表明,分代机制可使GC效率提升50%以上,有效适应大多数应用场景。

2026-01-06 09:34:18 281

原创 200W数据去重,该用distinct还是group by,为什么?

摘要:针对200万级数据去重,DISTINCT和GROUP BY在功能上等效,现代数据库优化器通常生成相似执行计划。DISTINCT语义更清晰,推荐优先使用以提升代码可读性。性能关键取决于索引支持而非语法选择,无索引时两者都较慢。若需聚合计算则必须使用GROUP BY。建议:1)明确去重意图时用DISTINCT;2)确保去重列建立索引;3)通过EXPLAIN验证实际执行计划。测试表明,在200万数据量下,有无索引对性能的影响远大于语法选择本身。

2026-01-05 17:58:46 830

原创 慢SQL问题如何排查

本文详细介绍了Java应用中慢SQL查询的排查和优化过程。首先通过慢查询日志、APM工具等方法识别问题SQL;然后分析执行计划,检查索引使用情况;接着优化SQL设计,重构复杂查询;最后调整数据库配置并进行性能测试验证。文中提供了MySQL环境下具体的排查示例,包括创建索引、重构SQL语句等优化措施。通过系统化的排查流程,可以有效解决慢SQL问题,提升应用性能。

2025-12-29 14:30:21 890

原创 哪些字段适合加索引,哪些不适合加?

数据库索引是优化查询性能的关键工具,应合理选择加索引的字段。适合加索引的包括高基数字段(如ID、手机号)、常用查询条件、外键及排序字段。不宜加索引的有低基数字段(如性别)、频繁更新字段、大文本字段和小表。索引设计应遵循最佳实践:创建符合索引、避免过多索引、优先覆盖索引,并定期优化。合理使用索引能显著提升查询效率,但滥用会降低写入性能。

2025-12-25 18:40:09 459

原创 添加索引会锁表吗?(online DDL)

MySQL Online DDL机制解析:MySQL 5.6引入的Online DDL允许在不中断DML操作的情况下执行表结构变更。该机制分为初始化、执行和提交三个阶段,通过MDL锁控制并发访问。关键参数ALGORITHM(INPLACE/COPY)决定执行方式,LOCK(NONE/SHARED/EXCLUSIVE)控制并发级别。演示显示INPLACE+NONE模式允许并发DML,而COPY+EXCLUSIVE会阻塞所有操作。实际应用中需注意:1)选择低峰期执行DDL;2)确认无未提交事务;3)设置合理超时

2025-12-25 15:37:16 615

原创 InnoDB存储引擎的三大特性

摘要:本文介绍了InnoDB存储引擎的三大核心机制:BufferPool通过内存缓存数据页提升读写性能,采用LRU算法管理;AdaptiveHashIndex自动为热点索引创建哈希结构加速等值查询;DoubleWrite通过双写机制确保数据一致性。三者分别针对性能优化、查询加速和数据可靠性,通过关键参数如innodb_buffer_pool_size、innodb_adaptive_hash_index等可进行配置调整,适用于不同业务场景。

2025-12-18 09:21:08 953

原创 图解MySQL索引失效

本文探讨了MySQL索引失效的常见场景及其原因。首先介绍了InnoDB和MyISAM存储引擎的索引存储结构差异:InnoDB使用B+树索引,叶子节点直接存储数据(聚簇索引)或主键值(二级索引);MyISAM则存储数据物理地址。文章重点分析了六种索引失效情况:1)左模糊匹配查询(LIKE '%xx');2)对索引列使用函数;3)索引列进行表达式计算;4)字符串与数字比较的隐式转换;5)违反联合索引最左匹配原则;6)OR条件中混合索引与非索引列。这些情况都会导致全表扫描,严重影响查询性能。

2025-12-16 17:55:31 778

原创 大模型意图识别是怎么实现的

摘要:意图识别是NLP领域的重要任务,旨在从用户输入中解析出目标意图,广泛应用于客服、智能助手等场景。其核心流程包括数据准备(标注与增强)、模型训练(选用BERT/GPT等预训练模型微调)及部署优化(轻量化与持续迭代)。通过金融客服案例展示,采用RoBERTa-large模型结合数据增强和噪声训练,准确率达96.7%,响应时间优化至60ms。未来发展方向包括多模态意图识别和交互式意图修正。该技术显著提升语义理解能力,有效降低人工成本。

2025-12-11 15:36:46 969

原创 模型蒸馏和模型量化

模型蒸馏与量化是两种互补的模型压缩技术。蒸馏通过将大模型(Teacher)的知识迁移到小模型(Student),实现模型轻量化,例如手机端BERT经蒸馏后体积减少70%,推理速度提升5倍。量化则是降低数值精度(如FP32→INT8),如工业质检中的ResNet50量化后模型体积减少75%,推理速度提升3倍。二者可协同使用:金融风控场景中,GPT-2先蒸馏再量化,最终体积压缩85%,满足高并发需求。这两种技术能有效降低部署成本,提升推理效率,适用于端侧和边缘计算场景。

2025-12-11 14:33:24 627

原创 大模型LangChain框架应用场景详解

LangChain是一个开源开发框架,旨在简化基于大语言模型(LLM)的应用开发。它提供模块化组件,包括模型集成(支持OpenAI、Anthropic等多种LLM)、提示模板、文档加载器等核心功能。通过链式调用(Chains)组合多个步骤处理复杂任务,并支持记忆机制维护对话上下文。其代理(Agents)系统可动态调用工具执行任务,RAG架构则能结合外部数据提升生成质量。典型应用包括智能问答、对话机器人、文档分析等场景。LangChain的优势在于模块化设计、灵活扩展性,能显著提升开发效率。

2025-12-10 14:43:26 999

原创 为什么选择向量数据库,而不是传统数据库

摘要: 向量数据库凭借对非结构化数据(如文本、图像)的向量化存储和高维相似性搜索能力,成为大模型应用的关键基础设施。其技术优势包括:1)直接适配AI模型的数据处理需求,支持语义检索(如RAG技术);2)通过ANN算法实现毫秒级响应,解决传统数据库的"维度灾难"问题;3)作为大模型的"长期记忆",扩展上下文窗口并降低计算成本。行业趋势显示,向量数据库正与传统数据库形成混合架构(如阿里云PolarDB集成向量能力),并在推荐系统、多模态搜索等场景广泛应用。

2025-12-09 16:53:45 759

原创 什么是过拟合和欠拟合

摘要 过拟合和欠拟合是机器学习中的常见问题。过拟合指模型在训练数据上表现优异但泛化能力差,通常因模型复杂度过高或数据不足导致;欠拟合则是模型无法捕捉数据基本模式,多由模型过于简单或特征不足引起。识别方法包括比较训练与验证误差:过拟合时训练误差低而验证误差高,欠拟合则两者均高且接近。解决方法上,过拟合可通过增加数据、降低复杂度、正则化等技术缓解;欠拟合则需要增强模型能力或优化特征。在大模型应用中,需结合预训练、微调策略和正则化技术来平衡两者。

2025-12-09 09:05:36 856

原创 大模型RAG流程详聊

定义RAG:强调其结合检索与生成的优势。分步拆解流程:输入处理->检索->文档处理->生成->后处理。关键技术点:密集检索、提示工程、联合训练等。结合实际案例:简要举例说明流程如何运作。

2025-12-08 13:05:16 562

原创 如何打破双亲委派机制

Java的双亲委派机制可通过自定义类加载器打破。该机制默认由父加载器优先加载类,自定义加载器需重写findClass方法实现自主加载逻辑。示例展示了从指定路径加载类文件的过程,包括读取字节码和定义类。打破该机制虽能实现插件系统等动态功能,但存在安全风险(恶意代码)、兼容性问题及维护负担。建议仅在必要场景(如模块化运行时)谨慎使用,并充分考虑安全隐患。

2025-12-07 20:09:24 231

原创 什么是指针碰撞

Java中的指针碰撞是一种高效的内存分配技术,通过指针分隔已用和空闲内存区域,实现快速连续分配。该算法在复制和标记-清除等垃圾收集器中应用广泛,具有分配速度快、内存利用率高的优点,但需要连续内存空间且易受碎片化影响。实际应用中常与其他分配算法结合使用以弥补其局限性。

2025-12-07 20:04:53 264

原创 降低大模型API服务的推理延迟和成本方案

摘要:大模型应用开发需从多维度优化推理延迟和成本。模型层面可采用量化、剪枝和蒸馏等技术压缩模型;推理过程通过动态批处理和异步请求提升吞吐量;硬件选择GPU/TPU等加速器并实施自动扩缩容;架构设计上采用模型并行、边缘计算和微服务化;同时结合缓存策略、网络优化和分级业务策略。具体优化方案需根据业务场景在延迟、吞吐量和成本之间取得平衡,如实时场景侧重延迟优化,高吞吐场景优先批处理与成本控制。

2025-12-05 15:07:58 127

原创 大模型如何实现多模态任务

本文系统探讨了大模型在多模态任务中的应用框架。核心思路是通过跨模态对齐和联合表征学习整合文本、图像、视频等异构数据。技术实现包含统一编码器架构设计、对比学习预训练和任务定制微调策略,以CLIP、BLIP-2等模型为例展示了图文问答和视频摘要的具体应用。文章重点分析了模态对齐、长时序建模等关键挑战,提出了对比学习损失、分层处理等解决方案,并展望了端到端多模态模型和低资源优化等未来方向。该框架为多模态任务提供了系统性的技术实现路径。

2025-12-05 11:25:25 104

原创 大模型生成的内容怎么保证其合规性

从训练数据净化、RLHF对齐、实时过滤三层技术防线入手,同时建立人工审核-用户反馈-版本回滚的流程闭环,最后通过法规映射和日志审计满足制度合规。核心是让技术防控(如Fine-tuning+Post-filtering)与人类监督形成交叉验证,而非依赖单一手段。

2025-12-04 13:58:02 491

原创 大模型如何针对超长文本进行微调训练

摘要:大模型处理超长文本微调训练的关键技术包括:1)模型架构改进,如稀疏注意力机制和相对位置编码;2)数据预处理采用分块与滑动窗口策略;3)训练优化技术,包括渐进式训练和参数高效微调;4)任务定制化设计注意力机制和目标函数;5)应对显存限制、信息碎片化等挑战。这些方法共同解决了长文本处理中的计算复杂度、上下文保持和资源优化问题。

2025-12-04 10:16:26 752

原创 模型微调效果如何评估

判断模型微调效果需要从多个维度综合评估。首先,技术指标是基础:比如在分类任务中,我会对比微调前后的准确率、F1值等指标,并通过验证集分析过拟合风险;在生成任务中,除了BLEU、ROUGE分数,还需要人工评估生成内容的逻辑性和专业性。其次,必须结合业务目标:例如在客服场景中,如果目标是减少用户转人工率,就需要通过A/B测试验证微调后的模型是否能独立解决更多问题。此外,我会关注推理效率和资源占用,确保模型满足线上部署要求。最后,模型上线后需要持续监控用户反馈和错误日志,及时发现数据漂移或性能下降问题。

2025-12-03 17:14:14 816

原创 大模型微调流程是怎样的?

摘要: 大模型微调(Fine-tuning)是在预训练模型基础上,通过特定任务数据优化模型性能的过程。流程包括:1)明确任务目标与数据准备(标注、划分数据集);2)数据预处理(格式转换、分词、增强);3)选择预训练模型并调整结构(全参数/高效微调);4)设置超参数(学习率、优化器)及训练技巧(梯度裁剪、早停);5)监控训练过程,防止过拟合;6)评估测试集性能并优化;7)部署模型(格式转换、轻量化)及持续迭代更新。核心关注数据质量、模型适配与资源效率,平衡效果与计算成本。

2025-12-03 08:39:52 1296

原创 Agent 如何搭建 及 用到的框架

摘要: 搭建AI Agent需围绕任务规划、模型选择、工具集成、记忆管理和安全控制等核心要素。任务定义需分解用户目标并选择合适工具,模型层依赖大语言模型(如GPT-4)进行推理,工具库涵盖内置功能与外部API,记忆系统需管理短期与长期上下文。开发框架推荐模块化的LangChain、自主执行的AutoGPT、精准控制输出的Microsoft Guidance,以及Hugging Face生态的Transformers Agents。实际开发中需平衡效率与稳定性,例如通过错误重试和输出审核确保可靠性。

2025-12-02 13:49:48 1625

原创 JVM使用元空间替换了永久代是什么原因?

Java8用元空间替代永久代,解决了内存限制、类生命周期管理等问题。元空间使用本机内存,不受堆大小限制,减少了FullGC次数,提升了性能和稳定性。这一改进使内存管理更灵活高效,降低了调优复杂度,让开发者更专注于业务逻辑。

2025-12-02 10:39:37 278

原创 强引用、软引用、弱引用、虚引用的区别

Java中的引用类型分为强引用、软引用、弱引用和虚引用,用于控制对象的垃圾回收行为。强引用(默认)会阻止对象被回收;软引用在内存不足时被回收,适合缓存;弱引用在GC检测到即被回收,适用于WeakHashMap;虚引用必须配合引用队列使用,用于对象回收前的清理工作。这些引用类型为不同场景下的资源管理提供了灵活策略。

2025-12-01 10:21:08 393

原创 CPU百分百问题如何排查

排查CPU百分百问题需系统分析:先通过top等工具查看系统负载和异常进程,检查应用日志和数据库慢查询;针对自研程序,使用性能分析工具检测死循环、算法低效等问题;多线程应用需关注线程资源占用,网络异常也可能导致高负载。最终根据分析结果优化应用性能。

2025-12-01 10:20:45 203

原创 类加载器机制与双亲委派

Java类加载器机制采用双亲委派模型,确保类的单一性和安全性。主要包含Bootstrap、Extension和Application三类加载器,分别加载核心库、扩展库和用户类。双亲委派机制中,子加载器优先委托父加载器加载类,仅当父加载器无法完成时才自行加载。自定义类加载器可通过重写findClass方法实现特定加载逻辑,但通常建议使用默认机制。该模型有效防止核心类被篡改,同时为特殊场景(如插件系统)提供扩展可能。理解这一机制有助于深入掌握Java运行原理。

2025-11-28 10:28:10 399

原创 垃圾回收算法三色标记

三色标记法是垃圾回收中常用的对象标记方法,通过白、灰、黑三种颜色区分对象状态。白色表示未检查,灰色表示已检查但引用未完成,黑色表示完全检查且可达。标记过程从根对象开始,逐步将可达对象标记为灰色再转为黑色,最终回收白色对象。该方法能有效处理循环引用,支持并发标记,减少程序暂停时间,被广泛应用于G1、CMS等现代垃圾回收器中。示例代码展示了对象图的标记流程,验证了三色标记的正确性和优势。

2025-11-28 10:26:49 274

原创 堆外内存介绍

摘要:堆外内存(Off-Heap Memory)是Java堆外的直接内存区域,不参与JVM垃圾回收,适用于高性能场景。其优势包括减少GC停顿、提升性能,但需手动管理内存。主要应用于大数据、金融系统等场景,通过ByteBuffer.allocateDirect()分配,需注意内存泄漏风险。建议使用Netty等第三方库管理,并监控内存使用。合理使用堆外内存可显著提升Java应用性能,但需谨慎管理生命周期。

2025-11-27 16:23:54 348

原创 AI人工智能提示词工程能解决什么问题?

摘要: 提示词工程通过优化输入指令(Prompt)来弥合用户意图与大模型输出之间的差距,解决任务模糊性、输出格式控制、领域知识适配、安全偏见及复杂任务拆解等问题。例如,结构化提示可规范报告格式,Few-shot示例能注入专业知识。其价值在于降低微调成本、提升用户体验(如客服机器人语气优化)并支持工程化扩展(模板库、A/B测试)。实际应用中,结合开发经验(如投诉率下降30%)和新兴工具(LangChain)能更高效地落地解决方案,成为大模型应用开发的核心技术手段。

2025-11-27 09:00:23 585

原创 JVM未发生OOM,老年代却在缓慢的增长,可能的原因是什么?

摘要 本文详细分析了对象进入老年代的条件及其机制。主要包括:1)年龄阈值达到设定值;2)Survivor区空间不足;3)大对象直接分配;4)动态年龄判定;5)强引用长期持有。老年代缓慢增长的常见原因包括长生命周期对象正常晋升、内存泄漏、大对象频繁分配、Survivor区过小以及GC参数设置不当等。建议通过检查代码中的缓存、静态变量,调整JVM参数,以及使用heapdump等工具分析具体对象类型来排查问题。

2025-11-26 08:58:12 801

原创 JVM 内存模型与 JMM 内存模型

JVM 内存模型JMM(Java 内存模型)物理内存如何划分逻辑上如何安全访问共享数据关注内存分配和回收关注线程间通信和数据同步解决内存溢出、栈溢出问题解决竞态条件、内存可见性问题一句话总结:JVM 内存模型是“内存怎么用”,JMM是“多线程怎么安全地用内存”。

2025-11-26 08:40:00 954

原创 ​​​​​​​​对JVM内存模型的理解

JVM内存模型主要指的是Java虚拟机在运行时管理内存的方式,以及它如何保证线程之间规范而安全地共享数据。

2025-11-25 11:18:59 276

原创 Java JVM的年轻代,为什么要划分两个 Survivor 区呢?

JVM年轻代设置两个Survivor区(S0/S1)主要基于复制算法优化:1)通过交替复制实现无碎片内存管理;2)利用年龄计数渐进筛选对象晋升老年代;3)双区交替使用提高内存利用率。这种设计避免了单Survivor区的碎片问题,有效实现了"多数对象朝生暮死"的分代假设,显著提升GC效率,降低停顿时间。核心机制是MinorGC时在Eden和Survivor区之间复制存活对象并递增年龄,最终筛选出长期存活对象晋升老年代。

2025-11-25 10:31:15 1498

原创 JVM垃圾收集原理及各大收集器详解

对于限定单个CPU的环境来说,Serial收集器由于没有线程交互的开销,专心做垃圾收集自然可以获得最高的单线程收集效率。Java中Stop-The-World机制简称STW,是在执行垃圾收集算法时,Java应用程序的其他所有线程都被挂起(除了垃圾收集帮助器之外)。ParNew收集器其实就是serial收集器的多线程版本,除了使用多条线程进行垃圾收集之外,其余行为与Serial收集器一样。上面有7种收集器,分为部分,上面为新生代收集器,下面是老年代收集器。如果两个收集器之间存在连线,就说明它们可以搭配使用。

2024-11-28 02:45:00 542

原创 mysql explain用法

key: 实际使用的索引。很少的情况下,mysql会选择优化不足的索引。这种情况下,可以在select语句中使用use index(indexname)来强制使用一个索引或者用ignore index(indexname)来强制mysql忽略索引。将在表4.3中讨论,但这里可以看到的坏的例子是using temporary和using filesort,意思mysql根本不能使用索引,结果是检索会很慢。key_len:使用的索引的长度。ref:显示索引的哪一列被使用了,如果可能的话,是一个常数。

2024-11-27 22:52:30 314

原创 多线程高并发底层锁机制与最佳优化实践

同一个线程访问相同对象时使用偏向锁(因为对象头里的线程id不变——不被释放),多个线程竞争会转变成轻量级锁,如果关闭偏向锁则会从无状态直接转变为轻量级锁。对象字节大小规范为8的倍数,否则有一块空间是用来补齐8个字节用的(为了寻址效率更高,牺牲部分空间换取性能) ,如果不补齐会产生数据存储错位,寻址复杂。1. jvm默认延时4s自动开启偏向锁,可通过-XX:BiasedLockingStartupDelay=0 取消延时;2. 如果不要偏向锁,可通过-XX:-UseBiasedLocking来设置。

2024-11-27 22:49:25 437 1

Docker&K8S架构介绍PPT

Docker 是一个开源项目,诞生于 2013 年初。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0协议, 项目代码在 GitHub 上进行维护。Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容( LXC)等技术。在 LXC 的基础上 Docker 进行了进一步的封装, 让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。 Kubernetes是一个完备的分布式系统支撑平台。Kubernetes具有完备的集群管理能力,包括多层次的安全防护和准入机制/多租户应用支撑能力、透明的服务注册和服务发现机制、内建智能负载均衡器、强大的故障发现和自我修复功能、服务滚动升级和在线扩容能力、可扩展的资源自动调度机制,以及多粒度的资源配额管理能力。同时kubernetes提供了完善的管理工具,这些工具覆盖了包括开发、测试部署、运维监控在内的各个环节;因此kubernetes是一个全新基于容器技术的分布式架构解决方案。

2022-03-09

空空如也

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

TA关注的人

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