当前位置: 首页 > news >正文

线上go内存泄漏分析实战

背景

        最近经常发现web服务内存占用持续缓慢增高,从图像上看是基本持续递增,但偶尔也有下降趋势(不会下降很明显),对比30天以前没那么高内存占用,最近30天内存占用变化且无明显规律。WEB服务框架是echo框架,引入了pprof包。

监控

        线上可以通过监控观察到以下特征:

  1. 实例内存限制1G,看pod内存占用率50%~70%,go process内存占用也不超过700m,其中heap内存占近一半,约350M;

  2. 11.00左右触发扩容后内存占用未见下降,但次日凌晨1.30左右忽然下降;

  3. open fd(socket)数量持续增长。

分析

        由于测试环境不好模拟线上真实请求场景,于是让运维同学执行以下命令拿到pprof文件,第一次和第二次隔5分钟拿是为了对比。heap用于分析内存占用,goroutine是为了分析协程数量。

//立即执行
curl -o heap_20241216_cur.txt http://127.0.0.1:8081/debug/pprof/heap
curl -o goroutine_20241216_cur.txt http://127.0.0.1:8081/debug/pprof/goroutine//5分钟后执行curl -o heap_20241216_5min.txt http://127.0.0.1:8081/debug/pprof/heap
curl -o goroutine_20241216_5min.txt http://127.0.0.1:8081/debug/pprof/goroutine

heap

go tool pprof goroutine_20241216_cur.txt

(pprof) top
Showing nodes accounting for 247.95MB, 88.76% of 279.35MB total
Dropped 75 nodes (cum <= 1.40MB)
Showing top 10 nodes out of 99flat  flat%   sum%        cum   cum%59.23MB 21.20% 21.20%    59.23MB 21.20%  bufio.NewWriterSize (inline)52.70MB 18.86% 40.07%    52.70MB 18.86%  bufio.NewReaderSize (inline)36.42MB 13.04% 53.10%    36.42MB 13.04%  encoding/json.(*decodeState).literalStore34.57MB 12.38% 65.48%    34.57MB 12.38%  reflect.mapassign_faststr014.51MB  5.20% 70.68%    14.51MB  5.20%  net/http.(*Transport).queueForIdleConn13.51MB  4.84% 75.51%    21.01MB  7.52%  net/http.(*Transport).tryPutIdleConn9.50MB  3.40% 83.21%   125.43MB 44.90%  net/http.(*Transport).dialConn9MB  3.22% 86.43%        9MB  3.22%  runtime.malg6.50MB  2.33% 88.76%     7.50MB  2.69%  net/http.(*connLRU).add
  1. 不难看出内存占用并不多,不到300M,看来问题不算严重,但是bufio、net/http占用内存加起来已经超过200M,超过70%,根据二八定律,基本确定内存如果泄漏,大概率是httpclient有关。

还可以生成图,更直观,命令:

go tool pprof -png -output=go_cur.png heap_20241216_cur.txt

goroutine

命令:go tool pprof goroutine_20241216_cur.txt

(pprof) top
Showing nodes accounting for 27836, 100% of 27838 total
Dropped 93 nodes (cum <= 139)
Showing top 10 nodes out of 14flat  flat%   sum%        cum   cum%27836   100%   100%      27836   100%  runtime.goparkπ0     0%   100%      13846 49.74%  bufio.(*Reader).Peek0     0%   100%      13846 49.74%  bufio.(*Reader).fill0     0%   100%      13850 49.75%  internal/poll.(*FD).Read0     0%   100%      13853 49.76%  internal/poll.(*pollDesc).wait0     0%   100%      13853 49.76%  internal/poll.(*pollDesc).waitRead (inline)0     0%   100%      13853 49.76%  internal/poll.runtime_pollWait0     0%   100%      13850 49.75%  net.(*conn).Read0     0%   100%      13850 49.75%  net.(*netFD).Read0     0%   100%      13844 49.73%  net/http.(*persistConn).Read
  1. 即便是菜鸟也能看出来大多数协程都是park状态,说明协程并不活跃,但数量惊人约28000个,远超出我们服务个位数qps的预期。
  2. 而且大多数协程(99%以上)都是和http有关,bufio用于http的rw缓冲,net用于http连接,poll用于缓冲区rw。

还可以生成图,更直观,命令:

go tool pprof -png -output=go_cur.png goroutine_20241216_cur.txt

代码

        既然通过heap和goroutine分析到是跟http有关,且服务本身qps并不高,框架本身也不太可能有问题,那就唯一的可能是httpclient使用不当导致内存泄漏。于是一般都能想到有两个思路可以分析:

  1. 连接未关闭,比如response未关闭,属于代码问题(大部分人都能想到可能是这个问题)
  2. 连接未能复用,可能是连接池配置问题,也可能是代码问题,导致httpclient创建开销大,占用了较多内存(小部分人能想到这吧)

        于是结合heap和goroutine的关键字,以及代码中httpclient的实现发现不属于情况1,每个response都有正常关闭。那就可能是问题2,通过代码发现httpclient的使用方式有两种,全局定义中公用一个httpclient,也存在函数中每次新创建httpclient,经验丰富的我立马就想到了最可能是后者出了问题。因为go的httpclient在创建时基本都是默认创建的httpclient连接池,连接池参数中一般都会定义连接存活时间,因此必然是有独立的生命周期的,不随函数执行完成而销毁。

        因此通过阅读代码发现,每次创建httpclient实际是创建了一个连接池,但如果只使用httpclient发一次请求,底层会启动两个协程用于read和write。也就是每来一个业务请求,会导致新建一个httpclient连接池和两个协程用于read和write的协程,而且60秒后这三个资源才会真正销毁,因此服务承载的qps不高但协程数那么多。

问题复现

可以通过本地demo复现该问题,主要分三步:

  1. 启动以下demo服务

  2. 访问"http://0.0.0.0:6060/debug/pprof/goroutine?debug=1"观察goroutine数量

  3. 再访问"http://0.0.0.0:6060/"触发调用"httpwithmetric.DefaultHttpClientWithMetric().Get",再观察2,可发现每次用户请求是秒级返回,但是goroutine数量会增加用户请求数*2,且60秒后才减少,证明上述分析结论正确。

package mainimport ("demo/httpwithmetric""fmt""net/http"_ "net/http/pprof"
)func homeHandler(w http.ResponseWriter, r *http.Request) {if r.URL.Path != "/" {http.NotFound(w, r)return}code, content, err := httpwithmetric.DefaultHttpClientWithMetric().Get("test", "https://www.baidu.com/")fmt.Fprintf(w, fmt.Sprintf("Welcome to the home page!%v,%v,%v", code, content, err))
}func main() {http.HandleFunc("/", homeHandler)// 开启pprof,监听请求ip := "0.0.0.0:6060"if err := http.ListenAndServe(ip, nil); err != nil {fmt.Printf("start pprof failed on %s\n", ip)}
}

结论

  1. 是由于HttpClient请求使用不当掉导致的内存泄漏,解决方案很简单:使用全局的HttpClient。
  2. 内存占用持续增高是因为qps虽然是个位数,但是每来一个业务请求,会导致新建一个httpclient连接池和两个协程用于read和write的协程,而且60秒后这三个资源才会真正销毁,因此服务承载的qps不高但协程数那么多。
  3. 为什么偶尔有下降,主要是因为超过60秒没有请求,就不会新建httpclient,老的也会回收。
  4. 重启能降低内存占用,扩容则分两种情况,扩容后qps非常低低于1/60则也可以立即见效,扩容后打到老实例的qps还是超过1/60的话还是会继续增长。

经验和教训

        本人在大厂写了三年go,还真没遇到过内存泄漏的问题,也是大姑娘上轿头一回分析go的内存泄漏,由于问题不紧急,前期读了好几篇文章打基础,因此准备的过于充分:Memory leaks in Go - DEV Community

Go语言内存泄漏与Goroutine排查-CSDN博客

Golang pprof使用-CSDN博客

       由于刚开始一点思路没有,甚至都不知道pprof是何种神器,毕竟以前只是背过JAVA八股文也分析过JAVA内存泄漏、CPU飙升问题,但还真没背过GO的八股文,现在想想有时候八股文这种基础知识还真的挺有用。

        第一次分析还闹过笑话就是,由于研发不能操作线上实例,把这种命令给了运维帮dump线上内存和协程快照:

go tool pprof http://localhost:6060/debug/pprof/heap      # heap profile

        但是由于服务是二进制启动(我也不太理解),没办法执行go命令,只能通过curl命令dump并上传到文件服务,研发才能下载到本地分析。

相关文章:

线上go内存泄漏分析实战

背景 最近经常发现web服务内存占用持续缓慢增高&#xff0c;从图像上看是基本持续递增&#xff0c;但偶尔也有下降趋势&#xff08;不会下降很明显&#xff09;&#xff0c;对比30天以前没那么高内存占用&#xff0c;最近30天内存占用变化且无明显规律。WEB服务框架是echo框架&…...

UE5AI感知组件

官方解释&#xff1a; AI感知系统为Pawn提供了一种从环境中接收数据的方式&#xff0c;例如噪音的来源、AI是否遭到破坏、或AI是否看到了什么。 AI感知组件&#xff08;AIPerception Component&#xff09;是用于实现游戏中的非玩家角色&#xff08;NPC&#xff09;对环境和其…...

12306购票如何做到限流的,什么技术方案,mq吗,提示排队过多,请稍微重试,提示库存不足。具体实现细节是怎么样的

12306&#xff08;中国铁路客户服务中心&#xff09;的购票系统是一个典型的高并发、高流量的系统。在春运和节假日等高峰期间&#xff0c;购票需求量极大&#xff0c;用户的请求频繁且集中&#xff0c;系统必须通过多种技术手段来进行 限流 和 负载均衡&#xff0c;确保购票服…...

[irisctf 2025] kittycrypt knutsacque

作了俩题还有一个不对。 KittyCrypt 题目给了加密代码&#xff0c;样例和密文。密钥通过样例求出。 package mainimport ("crypto/rand""encoding/hex""encoding/json""fmt""math/big""os""strings"…...

数据结构(1~10)

&#xff08;1&#xff09;双栈 #include <iostream> #include <algorithm> using namespace std; // 定义栈元素的类型 typedef int SElemType;// 定义双栈数据结构 typedef struct {int top[2];int bot[2];SElemType *V;int m; } DblStack;// 初始化双栈 void I…...

Solidity合约编写(一)

Solidity IDE地址&#xff1a;Remix - Ethereum IDE 点击进入后在contract文件夹下创建合约 合约代码如下&#xff1a; // SPDX-License-Identifier: MIT pragma solidity ^0.8.26;contract SimpleStorage{bool hasFavorNumtrue;uint256 favorNum5;string favorNums"fiv…...

基于氢氧燃料电池的分布式三相电力系统Simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于氢氧燃料电池的分布式三相电力系统Simulink建模与仿真&#xff0c;仿真输出燃料电池中氢氧元素含量变化以及生成的H2O变化情况。 2.系统仿真结果 3.核心程序与模型 版本…...

【C/C++】nlohmann::json从文件读取json,并进行解析打印,实例DEMO

使用 json::parse 函数将JSON格式的字符串解析为 nlohmann::json 对象。这个函数支持多种输入源&#xff0c;包括字符串、文件流等。 #include <iostream> #include <nlohmann/json.hpp> #include <fstream>using json nlohmann::json;int main() {// 解析…...

鸿蒙Flutter实战:15-Flutter引擎Impeller鸿蒙化、性能优化与未来

Flutter 技术原理 Flutter 是一个主流的跨平台应用开发框架&#xff0c;基于 Dart 语言开发 UI 界面&#xff0c;它将描述界面的 Dart 代码直接编译成机器码&#xff0c;并使用渲染引擎调用 GPU/CPU 渲染。 渲染引擎的优势 使用自己的渲染引擎&#xff0c;这也是 Flutter 与其…...

华为交换机---自动备份配置到指定ftp/sftp服务器

华为交换机—自动备份配置到指定ftp服务器 需求 交换机配置修改后及时备份相关配置,每次配置变化后需要在1分钟后自动进行保存,并且将配置上传至FTP服务器;每隔30分钟,交换机自动把配置上传到FTP服务器。 1、定时保存新配置的时间间隔为*分钟(1天=1440),默认为30分钟(…...

dns网址和ip是一一对应的吗?

DNS网址和IP地址是一一对应的吗&#xff1f;我们在上网时&#xff0c;为什么总是使用网址而不是一串数字&#xff1f;这些问题其实涉及到互联网的基本运作原理。DNS&#xff08;域名系统&#xff09;是我们日常上网过程中一个不可或缺的部分&#xff0c;它帮助我们将人类易于记…...

Couchbase 和数据湖技术的区别、联系和相关性分析

Couchbase 和数据湖技术&#xff08;如 Delta Lake、Apache Hudi、Apache Iceberg&#xff09;分别是两类不同的数据存储与管理系统&#xff0c;但它们也可以在特定场景中结合使用&#xff0c;以下是它们的区别、联系和相关性分析&#xff1a; 区别&#xff1a; 1. 核心用途&a…...

微信小程序提示 miniprogram-recycle-view 引入失败

npm i --save miniprogram-recycle-view 安装需要使用的页面的json文件中配置 {"usingComponents": {"recycle-view": "miniprogram-recycle-view/recycle-view","recycle-item": "miniprogram-recycle-view/recycle-item"…...

RAG_Techniques合集

Github 專案RAG_Techniques 列出了所有想得到的RAG最佳實踐和技巧&#xff01;以下是完整的目錄&#xff0c;內容豐富到不行&#xff01;&#x1f4a1; Simple RAG &#x1f331;Context Enrichment Techniques &#x1f4dd;Multi-faceted Filtering &#x1f50d;Fusion Ret…...

泊松融合 实例2025

目录 例子1: 实现代码: 原作者代码: 本博客直接给出来最好的效果和源代码 参数说明: 效果不好,不推荐的参数:MONOCHROME_TRANSFER,NORMAL_CLONE 例子1: 目标图: 原图: 效果图: 实现代码: 坐标是要目标图上中心点坐标: import cv2if __na...

反直觉导致卡关-迫击炮谜题

这个谜题&#xff0c;在两周目中先后卡了我至少三个小时&#xff0c;先后缓慢装填并发射迫击炮弹尝试了数百次。 一周目卡了很久&#xff0c;稀里糊涂的过了&#xff0c;想不到二周目还会卡那么久。 研究了很多播主的攻略&#xff0c;但还是一头雾水&#xff0c; 直到分析其…...

Vue2

前几篇和大家分享了Vue2基础篇&#xff0c;现在和大家分享一下Vue2的进阶篇 普通组件的注册: 局部组件&#xff1a;只能在注册的组件内使用 1.创建vue文件 三部分组成 2在使用的组件内部导入并且注册 全局组件&#xff1a;所有组件内部都可以用 组件的三大组成部分 结构&…...

PDF文件提示-文档无法打印-的解决办法

背景信息 下载了几个签名的PDF文件&#xff0c;想要打印纸质版&#xff0c;结果打印时 Adobe Acrobat Reader 提示【文档无法打印】: 解决办法 网上的方案是使用老版本的PDF阅读器&#xff0c; 因为无法打印只是一个标识而已。 PDF文件不能打印的五种解决方案-zhihu 这些方…...

C语言进阶(3)--字符函数和字符串函数

本章重点 重点介绍处理字符和字符串的库函数的使用和注意事项 目录 0.前言 1.函数介绍 1.1 strlen - 计算字符串长度 1.2 strcpy - 复制字符串 1.3 strcat - 追加字符串 1.4 strcmp - 字符串比较 1.5 strncpy - 受限制复制 1.6 strncat - 受限制追加 1.7 strncmp - 受限制比…...

英文词汇解析:“Arguably“ 的用法与含义

中文版 英文词汇解析&#xff1a;“Arguably” 的用法与含义 在英语中&#xff0c;“arguably” 是一个常用的副词&#xff0c;用来表达某种观点可能是正确的&#xff0c;尽管它可能存在争议或需要进一步讨论。它通常用于陈述观点或看法时&#xff0c;给出一种有依据但又留有…...

Win 11 拷贝文件失败,错误0x800704C8: 请求的操作无法在使用用户映射区域打开的文件上执行。

手机拷贝照片到电脑&#xff0c;再把电脑的照片拷贝到移动硬盘的过程报错。 一个意外错误使你无法移动该文件。如果你继续收到此错误&#xff0c;可以使用错误代码来搜索有关此问题的帮助。 错误 0x800704C8: 请求的操作无法在使用用户映射区域打开的文件上执行。 解释&#xf…...

SpringBoot原理分析-1

SpringBoot原理分析 作为一个javaer&#xff0c;和boot打交道是很常见的吧。熟悉boot的人都会知道&#xff0c;启动一个springboot应用&#xff0c;就是用鼠标点一下启动main方法&#xff0c;然后等着就行了。我们来看看这个main里面。 SpringBootApplication public class E…...

我用Ai学Android Jetpack Compose之Button

答案来自 通义千问&#xff0c;代码同样需要到Android Studio里实践&#xff0c;才能学会。 我要学Button&#xff0c;麻烦介绍一下 当然可以&#xff01;Button 是 Jetpack Compose 中用于创建可点击按钮的 Composable 函数。它提供了丰富的配置选项来定制按钮的外观和行为。…...

《量子比特:解锁人工智能并行计算加速的密钥》

在科技飞速发展的今天&#xff0c;量子计算与人工智能的融合正成为一股强大的力量&#xff0c;为诸多领域带来变革性的突破。量子比特作为量子计算的核心要素&#xff0c;其独特的叠加和纠缠特性为人工智能算法实现并行计算加速提供了前所未有的机遇。 量子比特的叠加特性&…...

【SpringBoot】当 @PathVariable 遇到 /,如何处理

1. 问题复现 在解析一个 URL 时&#xff0c;我们经常会使用 PathVariable 这个注解。例如我们会经常见到如下风格的代码&#xff1a; RestController Slf4j public class HelloWorldController {RequestMapping(path "/hi1/{name}", method RequestMethod.GET)publ…...

用QT实现 端口扫描工具1

安装在线QT&#xff0c;尽量是完整地自己进行安装&#xff0c;不然会少包 参考【保姆级图文教程】QT下载、安装、入门、配置VS Qt环境-CSDN博客 临时存储空间不够。 Windows系统通常会使用C盘来存储临时文件。 修改临时文件存储位置 打开系统属性&#xff1a; 右键点击“此电…...

基于单片机的肺功能MVV简单测算

肺功能MVV一般是指肺部每分钟的最大通气量。 MVV本身是最大值的英文缩写&#xff0c;在临床上&#xff0c;肺功能MVV表示肺部每分钟最大通气量&#xff0c;用以衡量气道的通畅度&#xff0c;以及肺部和胸廓的弹性、呼吸肌的力量。 肺部每分钟的最大通气量的参考值男性与女性之…...

入手STM32单片机学习指南

目录 引言 一、基础概念 1.1 STM32单片机简介 1.2 ARM Cortex-M系列处理器 1.3 微控制器的基本组成 二、开发环境搭建 2.1 选择开发板 2.2 安装开发软件 2.3 配置开发环境 三、编程入门 3.1 GPIO编程 3.2 UART编程 3.3 ADC编程 引言 STM32单片机是基于ARM Cortex…...

无法定位软件包cuda

无法定位软件包cuda 如果你在使用 sudo apt install cuda 命令安装 CUDA 时遇到“无法定位软件包cuda”的问题&#xff0c;这可能是由于你的系统没有正确配置 CUDA 的安装源。以下是一些可能的解决方案&#xff1a; 更新 Ubuntu 软件源并升级到最新版本的软件包。你可以选择使…...

GWAS数据和软件下载

这部分主要是数据获取,以及软件配置方法。 一、配套数据和代码 数据和代码目前在不断的更新,最新的教程可以私信,我通过后手动发送最新版的pdf和数据代码。发送的压缩包,有电子版的pdf和数据下载链接,里面是最新的百度网盘的地址,下载到本地即可。然后根据pdf教程,结合配套的…...

SpringBoot3-深入理解自动配置类的原理(尚硅谷SpringBoot3-雷神)

文章目录 目录了解自动配置 一、导入对应场景的Mean依赖&#xff1a;1、引入依赖**找到自动配置类的所有配置都存放在哪里** 二、编写主程序&#xff1a;SpringBootApplication观察源码时所需要知道的几个核心注解&#xff1a;1、观察SpringBootApplication源码都做了什么 三、…...

MOE怎样划分不同专家

MOE怎样划分不同专家 目录 MOE怎样划分不同专家MOE划分不同专家的方法LLM模型拆分的方法**子模块拆分法**:**多头拆分法**:**层间拆分法****基于功能的拆分法**Python代码实现MOE划分不同专家以及LLM模型拆分的方法及举例如下: MOE划分不同专家的方法 ffn前馈神经网络 独立…...

NLP CH3复习

CH3 3.1 几种损失函数 3.2 激活函数性质 3.3 哪几种激活函数会发生梯度消失 3.4 为什么会梯度消失 3.5 如何解决梯度消失和过拟合 3.6 梯度下降的区别 3.6.1 梯度下降&#xff08;GD&#xff09; 全批量&#xff1a;在每次迭代中使用全部数据来计算损失函数的梯度。计算成本…...

Pyecharts SVG 标记使用笔记

Pyecharts SVG 标记使用笔记 在数据可视化中&#xff0c;图表的标记点常常用于突出显示重要数据点。Pyecharts 提供了丰富的标记点配置选项&#xff0c;其中使用 SVG 路径来自定义标记点的样式是一个非常强大的功能。本文将详细介绍如何在 Pyecharts 中使用 SVG 路径来定制标记…...

C++ 文件操作

文件操作 // 文件操作 // 程序运行时产生的数据都属于临时数据&#xff0c;程序结束后临时数据会被操作系统释放 // 通过文件操作可以将数据持久化 // c 中文件操作需要包含头文件 <fstream>// 文件类型分为两种&#xff1a; // 文本文件&#xff1a; 文件以文本的ASCII…...

享元模式详解

享元模式详解 一、定义 享元模式&#xff08;Flyweight Pattern&#xff09;是一种结构型设计模式&#xff0c;旨在通过共享对象来尽量减少内存的使用。它通过将重复使用的对象分离成共享和非共享部分&#xff0c;达到复用的目的&#xff0c;从而有效节省内存。具体来说&#x…...

数据库中的并发控制

并发操作带来的数据不一致性 1、并发控制:为了保证事务的隔离性和一致性&#xff0c;数据库管理系统需要对并发操作进行正确调度 并发控制的主要技术有:封锁、时间戳、乐观控制法、多版本并发控制等 并发操作带来的数据不一致性: ① 丟失修改:两个事务 T1 和 T2 读入同一数据…...

【软考网工笔记】计算机基础理论与安全——计算机硬件知识

计算机分级存储体系 计算机分级存储体系目前最常用的是三级存储体系。 CPU——CaChe&#xff08;高速缓存&#xff09;——主存——辅存 其中 Cache 是用于解决存取速度不够快&#xff0c;辅存是用于解决存储容量不够大&#xff0c;二者结合可在容量和速度实现提升的情况下尽可…...

SpringBoot 多种生产打包方式详解

Springboot 多种生产打包方式简介 生产上发布 Spring Boot 项目时&#xff0c;流程颇为繁琐且低效。但凡代码有一丁点改动&#xff0c;就得把整个项目重新打包部署&#xff0c;耗时费力不说&#xff0c;生成的 JAR 包还特别臃肿&#xff0c;体积庞大。每次更新项目&#xff0c…...

WebSocket 安全实践:从认证到加密

在前三篇文章中,我们深入探讨了 WebSocket 的基础原理、服务端开发和客户端实现。今天,让我们把重点放在安全性上,看看如何构建一个安全可靠的 WebSocket 应用。我曾在一个金融项目中,通过实施多层安全机制,成功防御了多次恶意攻击尝试。 安全挑战 WebSocket 应用面临的主要安…...

实现单例模式的五种方式

如何实现一个单例 1、构造器需要私有化 2、提供一个私有的静态变量 3、暴露一个公共的获取单例对象的接口 需要考虑的两个问题 1、是否支持懒加载 2、是否线程安全 1、饿汉式 public class EagerSingleton {private static final EagerSingleton INSTANCE new EagerSi…...

【Go学习】-01-6-数据库泛型新特性

【Go学习】-01-6-数据库泛型新特性 1 数据库操作1.1 操作mysql1.1.1 Insert1.1.2 Select1.1.3 Update1.1.4 Delete1.1.5 sql事务 1.2 go操作Redis 2 泛型2.1 非泛型函数2.2 泛型函数2.3 泛型类型2.3.1 泛型结构体2.3.2 泛型接口 2.4 泛型约束2.5 泛型切片和映射2.5.1 泛型切片2…...

算法学习(22)—— BFS解决最短路问题

关于最短路问题 最短路问题是“图论”里非常重要的一类问题&#xff0c;涉及的内容非常多&#xff0c;在这个专题里&#xff0c;我们主要讲“边权为1的最短路问题”&#xff0c;因为这个比较基础比较简单而关于啥是“边权为1的最短路问题”&#xff0c;我们通过下面的例子来讲…...

【双层模型】考虑供需双侧的综合能源双层优化模型

目录 主要内容 内容研究 1.模型简介 2 程序释义 部分代码 运行结果 下载链接 主要内容 该程序实现一个综合能源系统的优化调度双层模型&#xff0c;上下层分别采用差分进化算法和规划算法进行求解。模型考虑了多种能源设备&#xff0c;包括燃气轮机、燃气锅炉、风电…...

【读书笔记/源码】How Tomcat Works 笔记- c11~c13

chapter11: standardwrapperchapter12: 无程序 第十章 安全性 servlet容器是通过一个名为验证器的阀来支持安全限制的。当servlet容器启动时&#xff0c;验证器阀会被添加到Context容器的管道中。 验证器阀会调用Context容器的领域对象的authenticate()方法&#xff0c;传入…...

Electron快速入门——跨平台桌面端应用开发框架

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…...

Vision Transformer模型详解(附pytorch实现)

写在前面 最近&#xff0c;我在学习Transformer模型在图像领域的应用。图像处理任务一直以来都是深度学习领域的重要研究方向&#xff0c;而传统的卷积神经网络已在许多任务中取得了显著的成绩。然而&#xff0c;近年来&#xff0c;Transformer模型由于其在自然语言处理中的成…...

中国区域创新创业指数IRIEC数据(省级、地市级)1990-2020年-社科数据

中国区域创新创业指数IRIEC数据&#xff08;省级、地市级&#xff09;1990-2020年-社科数据https://download.csdn.net/download/paofuluolijiang/90028728 https://download.csdn.net/download/paofuluolijiang/90028728 中国区域创新创业指数&#xff08;IRIEC&#xff09;…...

Elasticsearch:减少 Elastic 容器镜像中的 CVE(常见的漏洞和暴露)

作者&#xff1a;来自 Elastic Maxime Greau 在这篇博文中&#xff0c;我们将讨论如何通过在 Elastic 产品中切换到最小基础镜像并优化可扩展漏洞管理程序的工作流程来显著减少 Elastic 容器镜像中的常见漏洞和暴露 (Common Vulnerabilities and Exposures - CVEs)。 基于 Chai…...

webpack02

webpack中常用loader postcss-loader 在css-loader之前&#xff0c;对css进行一些操作&#xff0c;&#xff0c;&#xff0c;比如统一加前缀&#xff0c;&#xff0c;或者是重置样式&#xff0c;&#xff0c;&#xff0c; 这个postcss-loader会自己去找 postcss工具&#xff0…...