自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

tang7mj的博客

在无序中寻找有序

  • 博客(1872)
  • 收藏
  • 关注

原创 动手学深度学习 - 自然语言处理:预训练 - 16.1 情感分析和数据集

《情感分析任务的数据预处理流程》摘要 本文介绍了情感分析任务的数据预处理全流程,以IMDb影评数据集为例。情感分析作为文本分类任务,旨在识别文本中的情绪倾向(正面/负面),广泛应用于舆情监测和产品优化场景。预处理环节包含:1)数据加载与标签编码;2)文本分词与词表构建;3)序列截断/填充标准化处理;4)数据迭代器封装。通过load_data_imdb()函数整合流程,为模型训练提供规范化输入。文章还探讨了不同应用场景的特殊处理需求,如电商评论需处理HTML标签,多语言场景需适配不同分词工具,并强调预处理环节

2025-05-30 07:42:00 670

原创 动手学深度学习 - 自然语言处理:预训练 - 15.2 近似训练

《动手学深度学习:自然语言处理中的近似训练方法》摘要 本文介绍了两种高效训练词嵌入模型的近似方法:负采样和分层Softmax。针对传统Softmax在大型词典中计算复杂度高的问题,负采样通过局部二分类替代全局归一化,仅需计算正样本和少量负样本;分层Softmax则构建二叉树结构,将训练复杂度降至对数级别。文章详细阐述了两种方法的理论基础、工程实践中的优化技巧,并结合Google、Facebook等企业的实际应用场景进行分析比较。这两种方法显著提升了Word2Vec等模型在大规模语料上的训练效率,是自然语言处

2025-05-30 07:34:30 1003

原创 动手学深度学习 - 13.5 在多个 GPU 上训练

本文系统介绍了深度学习多GPU训练的三种主要方法:网络分区、分层分区和数据并行。重点阐述了数据并行的实现原理,包括数据分发、梯度同步等核心流程,并通过LeNet实验验证了多GPU训练效果。文章还提供了工程实践建议,如使用DistributedDataParallel框架、处理BatchNorm同步问题等。最后从面试角度总结了分布式训练的关键概念和常见问题解决方案,涵盖数据并行与模型并行的对比、allreduce机制、大模型训练优化等实战经验。为从业者提供了从理论到落地的完整知识框架。

2025-05-29 15:21:09 671

原创 动手学深度学习 - 计算性能 - 13.4 硬件

本文系统剖析了深度学习系统的硬件架构与性能特征。核心硬件包括:CPU(多级缓存、SIMD指令)、GPU(高并行计算、张量核心)、内存(DDR4/GDDR6/HBM2带宽差异)、存储(SSD随机访问优势)以及网络总线(PCIe/NVLink)。重点揭示了各类硬件的延迟特性(从1ns到150ms跨越9个数量级)和带宽瓶颈,强调通过批处理、矢量化、缓存优化等技术匹配算法与硬件特性。文中配有架构图说明Skylake CPU、Turing GPU等关键组件的设计原理,为构建高效深度学习系统提供硬件层面的优化指导。

2025-05-29 14:57:24 940

原创 动手学深度学习 - 计算性能 - 13.3 自动并行

本文介绍了深度学习中自动并行计算的实现方式。现代框架通过依赖分析自动并行无关联任务,显著提升GPU计算效率。实验显示双GPU并行执行矩阵乘法比单GPU更快。同时,非阻塞方式的数据传输可以与计算并行,减少等待时间。文中还以两层MLP为例,展示多设备并行训练中计算与通信的协作流程。关键优化点包括:自动依赖识别、多设备协作、非阻塞通信以及同步控制。最后提出了验证并行效果的实验方法,包括任务设计、性能分析和调试工具使用。

2025-05-29 14:46:28 915

原创 动手学深度学习 - 计算性能 - 13.2 异步计算

深度学习框架通过异步计算提升性能,利用前后端架构并行处理任务。本文对比了PyTorch和NumPy的矩阵运算性能,展示了GPU异步执行的优势(速度提升700倍)。关键点包括:1)PyTorch默认异步执行GPU操作;2)同步操作(如打印、类型转换)会阻塞计算;3)合理使用同步点(如每批次同步一次)可平衡性能和稳定性。文章还给出工程建议,如避免频繁数据转换、使用专业分析工具等,帮助开发者充分利用硬件并行能力。理解异步机制对构建高效AI系统至关重要。

2025-05-29 08:55:02 901

原创 动手学 - 13.深度学习计算性能优化:编译器 vs 解释器

《深度学习计算性能优化:编译器与解释器的权衡》 摘要:本文探讨了深度学习中命令式编程与符号式编程的本质区别及其性能影响。命令式编程虽然调试友好但存在解释器开销大、优化困难等问题,而符号式编程能预先构建计算图进行编译优化,更适合工业部署。现代框架通过混合编程(如PyTorch的JIT)结合两者优势:开发阶段使用命令式编程保证灵活性,部署时转为符号图模式提升性能。实测表明编译后的模型执行速度可提升数倍,尤其适合推理部署等延迟敏感场景。这种混合模式为开发者提供了调试便捷性与运行效率的统一解决方案。

2025-05-29 08:44:33 816

原创 动手学深度学习 - 优化算法 - 12.5 小批量随机梯度下降(Mini-batch SGD)

小批量随机梯度下降(Mini-batch SGD)是深度学习中平衡计算效率与训练稳定性的核心优化方法。本文系统介绍了Mini-batch SGD的理论基础、工程实现与优化技巧,包括:1)算法原理,对比全批量GD和SGD的优缺点;2)硬件加速机制,如矢量化计算和缓存优化;3)批量大小选择策略及对模型性能的影响;4)工业级实现方案,涵盖PyTorch框架应用和大规模训练技巧;5)典型面试问题解析和实战场景解决方案。文章还提供了学习建议,指导读者通过调整超参数、实现学习率衰减等实践深入理解算法特性。Mini-ba

2025-05-29 08:36:52 967

原创 动手学深度学习 - 优化算法 - 12.2 凸性

本文介绍了优化算法中重要的数学基础——凸性。首先定义了凸集和凸函数,指出凸函数的詹森不等式性质。然后分析了凸函数的关键特性:局部最小即为全局最小、下水平集为凸集、Hessian矩阵正半定判定凸性。最后讨论了凸约束优化策略,包括拉格朗日乘子法、罚函数法和投影法。虽然深度学习问题通常是非凸的,但凸性理论仍为算法设计和分析提供了重要指导。文章强调凸性在优化问题中的基础地位及其实际应用价值。

2025-05-29 08:28:32 955

原创 动手学深度学习 - 优化算法 - 12.1 优化和深度学习

《深度学习优化算法的核心挑战与实践策略》 摘要: 本文系统探讨了深度学习中的优化问题,揭示了优化目标与模型泛化能力之间的本质差异。文章分析了三大核心挑战:(1)局部最小值与全局最优解的关系,指出高维空间中多数局部最优解性能相近;(2)鞍点的广泛存在性及其对训练停滞的影响;(3)梯度消失现象及其在深层网络中的危害。针对这些挑战,文章结合Google、NVIDIA等企业的实战经验,提出了ReLU激活函数、残差结构、BatchNorm、混合精度训练等解决方案。最后,通过典型面试题和工业场景案例,展示了如何将优化理

2025-05-29 08:14:38 601

原创 动手学深度学习 - 优化算法 - 12.3 梯度下降

本文系统介绍了深度学习中的基础优化算法——梯度下降。首先从一维梯度下降入手,通过泰勒展开证明负梯度方向可使目标函数单调下降,并讨论了学习率选择的重要性,指出过大或过小的学习率分别会导致发散或收敛缓慢。接着扩展到多维情况,引入梯度向量概念。此外,讲解了牛顿法等自适应方法,分析其快速收敛特性及在非凸问题中的局限性,并探讨了预处理和线搜索等改进策略。最后强调梯度下降是现代优化算法(如Adam)的基础,并提供了相关实践练习。

2025-05-28 15:45:38 604

原创 动手学深度学习 - 推荐系统 - 21.1 推荐系统概述

推荐系统是现代互联网平台的核心技术,通过分析用户行为和偏好实现个性化内容推送。本文概述了推荐系统的基本原理和关键方法:协同过滤通过相似用户或商品进行推荐;显式反馈(评分)和隐式反馈(点击)为系统提供数据支撑;推荐任务包括评分预测、Top-K推荐等。针对企业实践,文章介绍了分层推荐架构(召回-粗排-精排-重排)及冷启动解决方案。还包含面试题和场景案例分析,如抖音短视频的冷启动问题。推荐系统正朝着更智能、实时的方向发展,未来将更好地理解用户需求。

2025-05-27 16:59:44 793

原创 动手学深度学习 - 现代递归神经网络 - 10.6 编码器-解码器架构(Encoder-Decoder Architecture)

摘要:编码器-解码器架构是处理序列到序列任务的核心框架,通过编码器将变长输入压缩为状态向量,再由解码器自回归生成目标序列。该架构具有高度通用性,广泛应用于机器翻译、语音识别、文本摘要等场景。其核心优势包括信息压缩能力、生成灵活性及模块化设计。随着注意力机制的引入,有效解决了长序列信息丢失问题。在工业实践中,该架构已拓展至多模态应用,如视频字幕生成、跨语言迁移学习和图文生成系统,通过灵活组合不同编码器(RNN/Transformer/CNN)和解码器结构,实现了复杂序列转换任务的高效处理。

2025-05-27 16:41:56 1158

原创 动手学深度学习 - 现代递归神经网络 - 10.1 长短期记忆(LSTM)

本文介绍了长短期记忆网络(LSTM)的核心机制及其实现。LSTM通过精心设计的门控结构(输入门、遗忘门、输出门)和记忆单元,有效解决了RNN在处理长序列时的梯度消失问题。文章详细解析了LSTM的数学公式和工作原理,包括状态更新、信息流动路径和隐藏状态计算。同时展示了从零开始构建LSTM的过程,以及与PyTorch简洁实现的对比。实验结果表明,LSTM能够学习文本生成等任务,展现出良好的记忆能力和泛化性能。LSTM为后续更先进的序列模型(如GRU、Transformer)奠定了基础。

2025-05-27 16:24:56 791

原创 动手学深度学习 - 注意力机制和转换器 - 11.9 使用 Transformer 进行大规模预训练

Transformer模型经过大规模预训练后展现出强大的扩展性和多任务适应能力。其架构支持三种主要变体:编码器-only(BERT)、编码器-解码器(T5)和解码器-only(GPT)。通过"更大规模数据、更强计算、更大模型"的协同扩展,Transformer在文本、图像等多模态任务中取得显著进展。企业实践中,BERT用于语义理解,T5处理文本转换,GPT擅长生成任务。微调技术使预训练模型能快速适配特定任务,而幂律扩展现象表明模型性能随参数、数据量和计算量的协同增长而提升。大型语言模型如

2025-05-27 16:03:32 1360

原创 动手学深度学习 - 注意力机制和转换器 - 11.8 视觉转换器(Vision Transformer)

视觉Transformer(ViT)将Transformer架构引入计算机视觉领域,通过图像分块(PatchEmbedding)将图片转换为类似NLP的token序列,配合位置编码和分类标记(<cls>)处理。ViT的核心优势在于全局建模能力,特别适合大规模数据场景,但小数据集表现弱于传统CNN。企业应用中,Google、NVIDIA等公司利用ViT处理医疗影像、商品识别等高精度任务。模型包含多头注意力、预归一化等模块,训练需强正则化。ViT的部署面临计算量大等挑战,可通过MobileViT、量

2025-05-26 15:24:39 592

原创 动手学深度学习 - 注意力机制与转换器 - 11.5 多头注意力机制(Multi-Head Attention)

摘要(149字) 多头注意力机制通过并行计算多个注意力子空间增强模型表达能力。每个注意力头采用独立线性投影,聚焦输入的不同特征(如短/长距离依赖),最终拼接输出并线性变换。该机制是Transformer的核心组件,企业级应用广泛:GPT系列用12-96个头提取语言特征,Google翻译处理词序/语法关系,视觉Transformer建模图像语义。实现时需对张量进行维度变换以支持并行计算,企业通过内核优化(字节跳动)、TPU加速(Google)提升效率。研究建议包括可视化注意力模式及剪枝实验优化推理速度。

2025-05-26 15:01:34 976

原创 动手学深度学习 - 11.4 Bahdanau 注意力机制

摘要:Bahdanau注意力机制是解决传统Seq2Seq模型固定长度上下文瓶颈的关键创新。该机制通过在每个解码时间步动态计算注意力权重,使模型能够聚焦源序列中最相关的部分。相比固定上下文向量,Bahdanau注意力显著提升了长序列处理能力,特别是在机器翻译任务中BLEU分数的表现。其核心是加法注意力评分函数,通过MLP处理拼接后的query和key,再经softmax归一化。该机制具有良好可解释性,但计算效率不及Transformer的自注意力。实际应用中需权衡其解释性优势与计算效率,在语音识别、机器翻译等

2025-05-26 12:27:58 814

原创 动手学深度学习 - 11.3 注意力评分函数

注意力机制的核心在于:如何根据 Query 与 Key 的关系,计算出合理的注意力权重。本节我们将系统讲解两种主流的评分函数:点积注意力(Dot Product Attention)与加法注意力(Additive Attention),它们构成 Transformer 架构的关键基础。

2025-05-26 10:59:57 771

原创 动手学深度学习 - 11. 注意力机制和转换器 - 11.2 通过相似性进行注意力汇聚

本文介绍了注意力机制的起源——Nadaraya-Watson核回归估计器,通过不同核函数(如高斯核、箱核)实现相似性加权,为现代注意力机制奠定理论基础。核函数定义了query和key的相似度度量方式,具有平移旋转不变性。Nadaraya-Watson回归可视为非训练式注意力机制,其中核宽度参数σ控制注意力聚焦程度:σ小则关注局部,σ大则平滑全局。虽然这种基于距离的核方法直观可解释,但表达能力有限。现代Transformer采用可学习的点积注意力,能更好地适应复杂任务。实际应用中,核方法仍用于冷启动或辅助模块

2025-05-26 10:41:46 580

原创 动手学深度学习 - 11. 注意力机制和转换器 - 11.1 查询、键和值

本文摘要: 《动手学深度学习》第11章介绍了注意力机制的核心概念——查询(Query)、键(Key)和值(Value)。通过数据库检索类比,阐述了注意力机制本质是"智能加权检索":给定查询,从键集合中计算匹配度,对值进行加权汇聚。重点解析了注意力权重计算公式及其softmax特性,并展示了热力图可视化方法。实际应用方面,列举了Transformer、推荐系统等场景中QKV机制的应用案例,如Google BERT的注意力头分析和抖音推荐系统的可解释性研究。文章强调注意力机制作为一种可微分的

2025-05-26 09:57:52 722

原创 程序猿之Vue - Day02:指令、计算属性、侦听器与实战案例全解析

今日内容属于 Vue 基础中的进阶部分,聚焦在 指令修饰符、计算属性、watch侦听器 及综合案例实战,核心目的是理解 Vue 的响应式编程精髓,并掌握其在项目中的高效应用。

2025-05-14 23:31:03 620

原创 新所得库 - IDEA 全版本 Spring Boot 工程依赖选择全解析指南

在IntelliJ IDEA中创建SpringBoot项目时,合理选择依赖项是确保项目轻量、高效和可扩展的关键。本文详细解析了如何通过Spring Initializr在IDEA中勾选依赖,包括构建工具(Maven vs Gradle)、依赖项分类(如开发工具、Web、SQL数据库等)以及推荐依赖组合。文章还指出了常见误区,如Spring Web Services和Reactive Web的使用场景,并提供了查看完整依赖项的方式。最后,强调了依赖选择的重要性,并鼓励读者根据项目需求合理选择依赖,以提升开发效

2025-05-14 20:20:10 1064

原创 C++编程调试秘籍 - 第1章:C++的缺陷来自哪里

《C++编程调试秘籍》第1章探讨了C++语言的缺陷来源,主要归结于其与C语言的深度耦合和渐进式扩展的设计哲学。C++在C语言的基础上引入了面向对象编程等特性,虽然降低了迁移成本,但也带来了语义复杂、设计不一致等问题。文章详细分析了C++的几大缺陷,包括语法二义性、手动内存管理的混乱、混合语义的不一致性等,并指出这些缺陷在大型系统中尤为突出。此外,文章还通过企业实战案例(如Google、腾讯、NVIDIA等)展示了如何通过编码规范、工具链和架构设计来规避这些陷阱。最后,文章强调C++的复杂性并非偶然,而是历史

2025-05-14 16:50:29 634

原创 C++ Primer 12.1:动态内存与智能指针全解析

《C++ Primer》第12章深入探讨了C++中的动态内存管理与智能指针机制。传统的new和delete操作虽然灵活,但容易导致内存泄漏和悬垂指针等问题。C++11引入的智能指针(如shared_ptr、unique_ptr和weak_ptr)通过自动管理资源生命周期,显著降低了这些风险。shared_ptr允许多个指针共享同一资源,通过引用计数管理资源释放;unique_ptr则独占资源,禁止拷贝,只能移动;weak_ptr用于解决shared_ptr的循环引用问题。文章还详细介绍了make_share

2025-05-14 16:39:04 754

原创 统计学习方法 - 1.4 模型评估与模型选择

在机器学习中,模型评估与选择是确保模型具备良好泛化能力的关键步骤。训练误差和测试误差是核心评估指标,其中训练误差衡量模型对训练数据的拟合程度,而测试误差则反映模型在未见过数据上的预测能力。低训练误差并不一定代表模型好,只有低测试误差才能说明模型具备良好的泛化能力。过拟合是常见问题,表现为模型在训练集上表现优异但在测试集上表现差。为避免过拟合,可采用正则化、交叉验证、数据增强等策略。模型选择的目标是找到复杂度适中、测试误差最小的模型,这通常通过验证集性能和线上指标来实现。在实际应用中,企业如字节跳动、阿里、腾

2025-05-13 19:11:53 640

原创 动手学深度学习 - 自然语言处理(NLP)应用 - 16.5. 自然语言推理:使用 Attention

自然语言推理(NLI)是自然语言处理中的关键任务,旨在判断两个句子之间的逻辑关系(蕴含、矛盾或中立)。传统方法依赖复杂的RNN或CNN,而Parikh等人在2016年提出了可分解注意力模型,通过三步Attention机制和MLP有效解决了NLI问题。该模型包括Attend(对齐)、Compare(比较)和Aggregate(聚合)三个步骤,使用注意力机制实现软对齐,并通过MLP进行比较和分类。模型在SNLI数据集上表现优异,准确率达82.8%。与传统方法相比,该模型结构更轻、计算更高效,适用于下游NLP任务

2025-05-13 10:01:00 983

原创 动手学深度学习 - 自然语言处理(NLP) - 15.8. 来自 Transformers 的双向编码器表示 (BERT)

本节深入探讨了BERT(Bidirectional Encoder Representations from Transformers)的核心思想与设计理念,从理论背景、模型架构、PyTorch实现到工程应用等多个角度进行全面解析。BERT通过双向编码器、掩码语言建模(MLM)和下一句预测(NSP)三大技术突破,实现了上下文相关的词表示,显著提升了多义词和语境依赖的处理能力。与传统词向量模型(如Word2Vec、GloVe)相比,BERT的动态表示机制使其在情感分析、命名实体识别、问答系统等任务中表现优异。

2025-05-12 20:17:38 1006

原创 程序猿之Vue - Day01

🧠 理论理解:Vue 是当前前端三大主流框架之一,特别在中国生态中应用最广(远超 React)。它以“低学习门槛 + 高工程化能力”著称,适合从小项目快速扩展到大型系统开发。🏢 企业实战理解:阿里旗下的饿了么、飞猪等多个前台系统基于 Vue 构建字节跳动的抖音后台管理系统大量使用 Vue2 + Vue3 共存架构国内中小企业几乎 Vue 优先,Vue 工程化(+Vite、+TypeScript)已成招聘基础门槛

2025-05-12 19:50:15 797

原创 黑马程序猿 - Redis - 高级篇 - 3.Redis哨兵

Redis哨兵机制是一种用于实现主从集群自动故障恢复的系统。它通过监控、自动故障恢复和通知三大功能来确保Redis集群的高可用性。哨兵基于心跳机制监测服务状态,通过主观下线和客观下线判断实例的健康状况。在检测到主节点故障时,哨兵会依据优先级、数据新旧程度等条件从从节点中选举新的主节点,并通知其他从节点同步新主节点的数据。此外,Spring的RedisTemplate能够感知节点变化并自动切换,通过配置可以实现读写分离,优化数据读取策略。

2025-05-11 16:49:46 972

原创 黑马程序猿 - Redis - 高级篇 - 2.Redis主从

Redis主从架构通过搭建主从集群实现读写分离,从而提高并发能力。主从数据同步分为全量同步和增量同步。全量同步发生在主从首次连接时,master将完整数据拷贝给slave,并通过replid和offset判断是否需要全量同步。增量同步则是在后续同步中,仅更新slave与master存在差异的部分数据。repl_baklog作为环形数组记录命令日志及offset,用于判断数据差异。优化主从同步可以从无磁盘复制、减少内存占用、提高repl_baklog大小等方面入手。全量同步适用于首次连接或slave断开过久的

2025-05-11 11:50:34 869

原创 黑马程序猿 - Redis - 高级篇 - 1.分布式缓存

Redis作为分布式缓存系统,单机Redis存在持久化、性能、扩展性和高可用性等问题。为解决这些问题,Redis提供了RDB和AOF两种持久化方案。RDB通过定期快照将内存数据写入磁盘,适合快速恢复和冷备份,但可能丢失两次快照间的数据。AOF通过记录每个写命令到日志文件,数据安全性高,但文件体积大且恢复速度较慢。企业实践中,通常结合使用RDB和AOF,以AOF为主,RDB为辅,确保数据的高一致性和快速恢复。此外,AOF重写机制通过合并冗余命令优化文件大小,减少I/O压力。Redis的持久化策略可根据业务需求

2025-05-10 21:21:44 739

原创 黑马程序猿 - Redis - 实战篇 - 7.Redis消息队列

Redis消息队列是一种基于Redis实现的消息传递机制,能够有效解耦生产者和消费者,提升系统响应速度。Redis提供了多种实现消息队列的方式,包括基于List、PubSub和Stream的方案。基于List的消息队列通过LPUSH、RPOP等命令实现,但存在消息丢失和单消费者限制的缺点。基于PubSub的发布订阅模型支持多生产者与多消费者,但不支持消息持久化,且存在消息丢失的风险。基于Stream的消息队列是Redis 5.0引入的功能完善方案,支持消息回溯、多消费者争抢、阻塞读取和消息确认机制,能够避免

2025-05-10 18:01:07 1344

原创 黑马程序猿 - Redis - 实战篇 - 6.秒杀优化

在秒杀优化中,异步秒杀是一种有效的策略,旨在通过减少数据库的直接操作和串行处理来提升系统性能。传统的秒杀流程涉及多个数据库查询和写入操作,这些操作在串行执行时会导致性能瓶颈。异步秒杀的核心思想是将前端请求通过Redis进行快速校验,主线程立即响应,而后续的下单流程则由异步线程处理,如通过阻塞队列或消息队列。这种方法不仅减少了数据库的压力,还提升了系统的吞吐量和用户体验。在实际应用中,大厂如阿里巴巴、字节跳动等,在双11等大促场景中采用了类似“前端快速响应+后台异步创建订单”的设计,通过MQ(如Rocket

2025-05-10 17:25:28 830

原创 黑马程序猿 - 实战篇 - 5.分布式锁-redission

Redission是一个基于Redis的Java驻内存数据网格,提供了多种分布式锁的实现,解决了传统分布式锁的诸多问题。首先,Redission支持可重入锁,防止死锁的发生,允许同一线程多次获取同一把锁。其次,它提供了锁的重试机制,当线程获取锁失败时,可以再次尝试获取锁,增加了系统的健壮性。此外,Redission还引入了超时释放机制,通过设置锁的过期时间,防止因长时间卡顿导致的死锁问题。对于主从一致性问题,Redission通过MutiLock机制,确保锁信息在所有节点上同步写入,提高了锁的可靠性。Red

2025-05-10 16:58:28 1060

原创 黑马程序猿 - 实战篇 - 4.分布式锁

分布式锁是用于分布式系统中确保多进程间互斥访问共享资源的一种机制。其核心思想是通过让所有进程使用同一把锁来实现线程的串行执行。分布式锁需满足可见性、互斥性、高可用性、高性能和安全性等条件。常见的实现方式包括MySQL、Redis和Zookeeper,其中Redis因其高性能和易用性而被广泛采用。Redis分布式锁通过setnx方法实现,确保只有一个线程能获取锁,并通过设置超时时间防止死锁。然而,Redis分布式锁存在误删问题,即一个线程可能误删另一个线程的锁。为解决此问题,可以在释放锁时判断锁的持有者是否为

2025-05-10 15:35:57 1079

原创 黑马程序猿 - 实战篇 - 3.优惠卷秒杀

在分布式系统中,生成全局唯一ID是处理高并发场景的基础能力。传统数据库自增ID存在单点瓶颈、容量限制和规律性暴露等问题,因此不适合高并发场景。Redis生成全局唯一ID的优势在于其INCR操作是原子性的,能够保证并发下的唯一性,并且结合时间戳和计数器设计,满足全局唯一和递增需求。然而,Redis方案的局限性在于强依赖Redis的可用性和机器时间同步。大厂实践中,通常结合Redis、数据库号段、雪花算法等多种方案,按场景权衡选用。例如,阿里采用Leaf服务生成分布式ID,字节针对不同业务有专门的UID服务,

2025-05-10 12:22:36 918

原创 6.4 责任链模式

责任链模式是一种行为型设计模式,通过将多个处理者串联成一条链,使请求沿链传递,直到某个处理者接手。这种模式解耦了请求发送者和接收者,请求者只需将请求交给链头,无需知道具体处理者。责任链模式适用于有顺序、有层次的处理流程,如审批流、拦截器、日志、权限等。在企业应用中,责任链模式广泛用于审批工作流、内容风控拦截链、API Gateway的拦截链等场景,支持动态调整处理者顺序、插拔式扩展和分布式链路。责任链模式的优点包括降低耦合、灵活扩展、符合单一职责原则,但也存在请求可能未被处理、链过长影响性能、链的配置复杂性

2025-05-10 11:48:39 956

原创 黑马程序猿 - 实战篇 - 2. 商户查询缓存

缓存是数据交换的缓冲区,用于存储从数据库中获取的数据,以减少高并发访问对系统的压力。缓存技术在企业中至关重要,因为它能显著提升数据访问速度,降低服务器负载。常见的缓存类型包括本地缓存、Redis缓存等。实际开发中,企业通常采用多级缓存策略,如浏览器缓存、应用层缓存、数据库缓存和CPU缓存,以进一步提升系统性能。缓存的使用也带来了一些挑战,如缓存穿透、缓存雪崩和缓存击穿等问题。缓存穿透是指请求的数据在缓存和数据库中都不存在,解决方案包括缓存空对象和使用布隆过滤器。缓存雪崩是指大量缓存键同时失效或Redis服务

2025-05-09 22:01:49 708

原创 SpringMVC_day02:5.拦截器

本文详细介绍了SpringMVC中拦截器的概念、工作流程、配置方法及其在企业中的应用。拦截器通过实现HandlerInterceptor接口,提供了在请求处理前后插入自定义逻辑的能力,常用于登录校验、权限控制、日志记录等场景。文章还对比了拦截器与过滤器的区别,指出拦截器更专注于SpringMVC内部的请求处理链,而过滤器则作用于整个Web容器。在实际开发中,拦截器的配置可以通过WebMvcConfigurer或WebMvcConfigurationSupport实现,且多个拦截器会形成责任链,按顺序执行。企

2025-05-09 20:43:31 941

数值计算方法实验报告3

希望能帮到有需要的人,如果有错误请大家多多指正,数值计算方法本身就是一门比较难的课,要不挂比较容易但是要想考高分如果不深入理解其中的原理,除非是多看网课能有几率的高分,多数情况还是很难的除非数学基础很好,而实验报告也会占一定分数,这个资源主要是给你们一个参考,实验报告还是得自己认真做的。

2023-05-14

数值计算方法实验报告四

希望能帮到有需要的人,如果有错误请大家多多指正,数值计算方法本身就是一门比较难的课,要不挂比较容易但是要想考高分如果不深入理解其中的原理,除非是多看网课能有几率的高分,多数情况还是很难的除非数学基础很好,而实验报告也会占一定分数,这个资源主要是给你们一个参考,实验报告还是得自己认真做的。

2023-05-14

数值计算方法实验报告二

希望能帮到有需要的人,如果有错误请大家多多指正,数值计算方法本身就是一门比较难的课,要不挂比较容易但是要想考高分如果不深入理解其中的原理,除非是多看网课能有几率的高分,多数情况还是很难的除非数学基础很好,而实验报告也会占一定分数,这个资源主要是给你们一个参考,实验报告还是得自己认真做的。

2023-05-14

华北水利水电大学数值计算方法实验报告实验一

希望能帮到有需要的人,如果有错误请大家多多指正,数值计算方法本身就是一门比较难的课,要不挂比较容易但是要想考高分如果不深入理解其中的原理,除非是多看网课能有几率的高分,多数情况还是很难的除非数学基础很好,而实验报告也会占一定分数,这个资源主要是给你们一个参考,实验报告还是得自己认真做的。

2023-05-14

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

TA关注的人

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