Go怎么做性能优化工具篇之pprof
工欲善其事、必先利其器。这次我们来看看Go的性能优化工具有哪些吧
Go性能优化的工具
一、pprof 工具
pprof 是 Go 语言自带的性能分析工具,可以帮助开发者分析程序的 CPU 使用情况、内存使用情况、goroutine 调度情况等,从而定位性能瓶颈。通过 pprof,开发者可以生成各种性能报告,帮助进行代码优化。
1、pprof 如何使用
首先,你需要在 Go 程序中引入 net/http/pprof 包,这个包自动注册了 HTTP 端点,允许你查看性能数据。
1.1 启动 pprof 服务器
首先,你需要在 Go 程序中引入 net/http/pprof 包,这个包自动注册了 HTTP 端点,允许你查看性能数据。
package mainimport ("fmt""log""net/http"_ "net/http/pprof" // 导入 pprof 包,它会自动注册 HTTP 路由"time""math/rand""sync""os"
)var wg sync.WaitGroup// 模拟一个高负载的函数,进行大量计算
func heavyComputation(n int) int {time.Sleep(time.Millisecond * 10) // 模拟计算延迟return n * n
}// 模拟一个程序
func startTasks() {for i := 0; i < 100; i++ {wg.Add(1)go func(i int) {defer wg.Done()// 模拟 CPU 密集型任务heavyComputation(rand.Intn(1000))}(i)}
}func main() {// 启动 pprof HTTP 服务,监听 6060 端口go func() {log.Println("pprof listening on localhost:6060")log.Fatal(http.ListenAndServe("localhost:6060", nil))}()// 启动一些模拟任务go startTasks()// 等待任务完成wg.Wait()// 打印一些结果fmt.Println("All tasks completed")// 模拟一些其他处理time.Sleep(10 * time.Minute) // 让程序持续运行,供 pprof 分析
}
- 通过导入 net/http/pprof 包,你不需要显式地调用它的函数,包会自动将相关的 HTTP 处理程序注册到默认的 HTTP 路由器上。
- 可以通过访问 http://localhost:6060/debug/pprof/ 来获取性能分析数据。
1.2 proof 字段分析
-
allocs(内存分配采样)
描述:记录程序中所有过去的内存分配。allocs 不是针对某个特定时间点的快照,而是通过定期采样程序的内存分配来获取信息。
用途:帮助分析程序的内存使用情况,找出高频的内存分配和可能的内存泄漏。可以通过查看分配的内存块,了解哪些部分的代码导致了过多的内存分配。
示例:通过 pprof 你可以获取内存分配的历史采样数据,找到内存使用的瓶颈。 -
block(阻塞分析)
描述:记录导致阻塞的栈跟踪信息,通常与同步原语(如 sync.Mutex、sync.Cond 等)相关。阻塞是指某个 goroutine 因等待锁、条件变量等原因无法继续执行。
用途:帮助分析程序中阻塞的 goroutine,尤其是锁争用和并发问题。通过分析 block profile,你可以查看哪些同步操作导致了程序性能下降。
示例:如果程序存在多个 goroutine 并发访问共享资源且存在锁竞争,block profile 会显示这些锁争用和阻塞的堆栈信息。 -
cmdline(命令行)
描述:记录当前程序的命令行启动参数。包括程序的所有命令行参数。
用途:有助于了解当前运行的程序是如何启动的,哪些命令行参数被传递给程序。这对分析程序执行环境和上下文非常重要。
示例:可以帮助你识别程序的启动方式,比如使用了哪些配置文件、环境变量或特定的运行参数。 -
goroutine(goroutine栈分析)
描述:记录当前所有 goroutine 的栈跟踪信息。每个 goroutine 可能处于不同的状态(例如:运行中、等待中或阻塞中)。
用途:帮助分析程序中的并发行为,尤其是追踪那些长时间运行或阻塞的 goroutine。可以帮助发现死锁、锁竞争等并发问题。
示例:当程序有大量 goroutine 时,通过查看 goroutine profile,你可以看到所有 goroutine 的调用栈,并找出哪些 goroutine 在等待、阻塞或占用大量资源。 -
heap(堆内存分析)
描述:对程序中当前存活的对象进行内存分配采样。heap profile 给出了程序在某一时刻堆上所有活跃对象的内存使用情况。
用途:用于分析堆内存的使用情况,特别是帮助识别内存泄漏或不必要的内存分配。通过 heap profile,开发者可以找出程序中使用最多内存的对象。
示例:如果程序内存消耗过高,使用 heap profile 可以帮助找出内存使用最多的地方,或者确认是否存在未被释放的内存。 -
mutex(互斥锁分析)
描述:记录持有并争用互斥锁的 goroutine 栈跟踪。mutex profile 显示了锁争用情况,包括哪些 goroutine 当前持有锁,哪些 goroutine 在等待锁。
用途:帮助分析程序中的锁竞争和同步问题。对于性能瓶颈,特别是锁争用较为严重的程序,可以使用 mutex profile 来找出锁的争用点。
示例:如果有多个 goroutine 在争夺同一个锁,mutex profile 会显示哪个 goroutine 持有锁,哪些正在等待,从而帮助开发者优化锁的使用。 -
profile(CPU分析)
描述:记录程序的 CPU 性能分析数据。可以指定采样的持续时间(通过 GET 参数中的 duration),profile 是常用的性能分析工具,帮助定位 CPU 的瓶颈。
用途:用于分析程序的 CPU 使用情况,找出消耗大量 CPU 时间的函数或代码路径。常见的用途是分析程序中消耗最多时间的部分,并进行性能优化。
示例:通过 profile,你可以获得一个 CPU profile 文件,并使用 go tool pprof 命令来分析哪个函数消耗了最多的 CPU 时间。 -
threadcreate(线程创建分析)
描述:记录导致创建新操作系统线程的栈跟踪。操作系统线程是由 Go 运行时系统管理的线程,Go 会根据需要动态创建操作系统线程。
用途:帮助分析程序中是否存在大量的线程创建,可能影响性能。过多的线程创建可能导致上下文切换频繁,从而影响程序的整体性能。
示例:通过 threadcreate profile,你可以发现哪些操作会触发新的线程创建,并查看线程的堆栈信息。 -
trace(程序执行追踪)
描述:记录程序的执行轨迹。通过 trace,可以跟踪程序的所有执行过程,详细记录 goroutine 的调度、阻塞等事件。
用途:帮助分析程序的执行流程,查看 goroutine 的调度情况,尤其是在并发程序中,分析并发和同步的问题。
示例:使用 trace 你可以查看程序在特定时间段内的所有调度事件,包括 goroutine 的启动、调度、阻塞等情况。
allocs、heap 和 profile 主要用于内存和 CPU 性能分析,帮助找出内存泄漏、过度分配和 CPU 密集型操作。
block、mutex 和 threadcreate 主要用于并发分析,帮助找出锁竞争、阻塞和线程创建问题。
goroutine 和 trace 则帮助分析程序的并发行为和执行过程。
我们也可以不通过上面的页面触发性能数据采集,而是直接访问 url 并添加参数来控制采集的时长,就像下面这样
curl "http://127.0.0.1:6060/debug/pprof/profile?seconds=30" > profile.pprof
在这些采样类型里,常用的有下面两类:
profile 采样,也就是 cpu 采样,用于确定程序中哪些函数或代码片段在运行时消耗了大量的 CPU 时间,帮助定位 CPU 性能瓶颈。
内存分配采样,具体包括 allocs 采样和 heap 采样。其中,allocs 采样侧重于定位那些频繁进行内存分配的函数,而 heap 采样用于查看存活对象的内存分配情况,侧重于定位内存泄漏问题。
1.3 火焰图
火焰图(Flame Graph)是性能分析的一个可视化工具,能够帮助你快速识别程序中最耗时的部分。在 Go 中,火焰图常常与 pprof 配合使用,用于分析程序的 CPU 性能。通过火焰图,你可以轻松地看到程序的函数调用栈,查看每个函数的执行时间,从而发现性能瓶颈。
- 使用 pprof 收集 CPU 配置
在 Go 中,你可以通过 net/http/pprof 包来生成性能分析数据。首先确保你的 Go 程序包含了 pprof。
导入 net/http/pprof 包
package mainimport ("fmt""math/rand""net/http"_ "net/http/pprof" // 引入pprof包来启用性能分析"os""time"
)func main() {// 启动pprof HTTP servergo func() {fmt.Println("Starting pprof server on :6060...")if err := http.ListenAndServe(":6060", nil); err != nil {fmt.Println("Error starting pprof server:", err)}}()// 模拟一些计算任务for {// 模拟一些负载rand.Seed(time.Now().UnixNano())n := rand.Intn(100000)_ = fib(n) // 调用一个计算密集型函数time.Sleep(time.Second) // 稍作等待}
}// fib 是一个计算 Fibonacci 数列的函数,模拟计算密集型任务
func fib(n int) int {if n <= 0 {return 0}if n == 1 {return 1}return fib(n-1) + fib(n-2)
}
- 获取 CPU 配置数据
要生成火焰图,首先需要从程序中获取 CPU 配置数据。你可以通过向 pprof 提供一个请求来获取 CPU 配置:
访问 URL http://localhost:6060/debug/pprof/profile?seconds=30,这里的 seconds=30 表示你希望记录 30 秒的 CPU 样本。
wget http://localhost:6060/debug/pprof/profile?seconds=30 -O cpu.pprof
这会将 CPU 配置样本保存到一个文件中,名为 cpu.pprof。
-
安装 graphviz 工具
-
生成火焰图
使用 go tool pprof 来处理 cpu.pprof 文件,并将其转换为火焰图。首先安装 go tool pprof:
go get github.com/google/pprof
然后,使用 go tool pprof 生成一个 .svg 格式的火焰图。
在命令行中使用 go tool pprof 进行分析:
go tool pprof cpu.pprof
你会进入一个交互式的 pprof shell,在这个 shell 中,你可以使用 svg 命令(需要先安装graphviz 工具)来生成火焰图:
(pprof) svg
这将生成一个 .svg 文件,保存为 profile.svg。你可以用浏览器打开它查看火焰图。
我们也可以使用可视化界面来查看。Golang 提供了可视化展示工具 pprof,我们可以通过下面的命令,启动一个 Web 界面查看(可视化界面需要提前安装 graphviz)。
go tool pprof -http :8889 cpu.pprof
通过这里可以查看具体的代码。
二、benchmark 功能(下篇继续)
三、trace 工具
相关文章:
Go怎么做性能优化工具篇之pprof
工欲善其事、必先利其器。这次我们来看看Go的性能优化工具有哪些吧 Go性能优化的工具 一、pprof 工具 pprof 是 Go 语言自带的性能分析工具,可以帮助开发者分析程序的 CPU 使用情况、内存使用情况、goroutine 调度情况等,从而定位性能瓶颈。通过 pprof…...
DataOps驱动数据集成创新:Apache DolphinScheduler SeaTunnel on Amazon Web Services
引言 在数字化转型的浪潮中,数据已成为企业最宝贵的资产之一。DataOps作为一种文化、流程和实践的集合,旨在提高数据管道的质量和效率,从而加速数据从源头到消费的过程。白鲸开源科技,作为DataOps领域的领先开源原生公司…...
递归读取指定目录下的文件
序言 需要读取sftp服务器上符合指定的文件名正则的文件列表,目前想到的最好的办法就是递归。 我这里引入的依赖是: <!-- jsch-sftp连接 --><dependency><groupId>com.jcraft</groupId><artifactId>jsch</artif…...
代码随想录算法训练营day46|动态规划part12
今天就结束动态规划章节了,以后还要多加练习。 今天的两道题都很有难度,647回文子串的思路非常巧妙,因为用一维dp数组比较难表示子串的起点和终点,所以需要用二维dp数组表示,dp[i][j]表示以i为起点,j为终点…...
ubuntu 24.04.1安装FTP流程
1、安装vsftpd: sudo apt update sudo apt install vsftpd 2、安装后重启查看vsftpd状态 sudo systemctl status vsftpd 输出如下所示,表明vsftpd服务处于活动状态并正在运行: * vsftpd.service - vsftpd FTP server Loaded: loaded (/…...
【Linux】UDP通信
udp使用的是数据报传输。可以一对一,一对多进行传输,用于快速,实时性高的场景 服务器端: 使用步骤: 1.创建socket 2.bind绑定可接收的客户端 3.while{ recv接收数据 send发送数据 } #include <stdio.h> #inclu…...
日期格式、JSR303校验
日期格式 public class Monster() {DateTimeFormat(pattern "yyyy-MM-dd")private Date birthday; } 输入:2024-11-12, 输出:Monster{birthdaySun Nov 12 00:00:00 CST 2024} public class Monster {JsonFormat(pattern &…...
ELK系列-(六)Redis也能作为消息队列?(上)
一、前文回顾 🔍 在前面的ELK系列中,我们已经搭建了ELK的核心组件,包括: ELK系列-(一)Docker部署ELK核心组件ELK系列-(二)LogStash数据处理的瑞士军刀ELK系列-(三&…...
点击展示大图预览
原文链接在table表格里能够实现,点击里面的图片实现大图预览的效果; 一、先安装viewer — 使用npm安装 npm install v-viewer --save二、在main.js中引入 import Viewer from v-viewer //点击图片大图预览 import viewerjs/dist/viewer.css Vue.use(…...
游戏AI实现-寻路算法(BFS)
广度优先搜索算法(英语:Breadth-first search,缩写:BFS),又译作宽度优先搜索,或横向优先搜索,是一种图形搜索算法。 寻路地图搭建: 游戏AI实现-寻路地图搭建-CSDN博客 …...
tryhackme-Pre Security-HTTP in Detail(HTTP的详细内容)
任务一:What is HTTP(S)?(什么是http(s)) 1.What is HTTP? (HyperText Transfer Protocol)(什么是 HTTP?(超文本传输协议)) http是你查看网站的时候遵循的…...
CNN和Transfomer介绍
文章目录 CNN和Transfomer介绍CNN和Transfomer的区别1. **基本概念**2. **数据处理方式**3. **模型结构差异**4. **应用场景区别** 自注意力机制1. **自注意力机制的概念**2. **自注意力机制的实现步骤**3. **自注意力机制的优势** Transformer结构组成1. **多头注意力层&#…...
37. Three.js案例-绘制部分球体
37. Three.js案例-绘制部分球体 实现效果 知识点 WebGLRenderer WebGLRenderer 是Three.js中的一个渲染器类,用于将3D场景渲染到网页上。 构造器 WebGLRenderer( parameters : Object ) 参数类型描述parametersObject渲染器的配置参数,可选。 常用…...
Latex+VsCode+Win10搭建
最近在写论文,overleaf的免费使用次数受限,因此需要使用本地的形式进行编译。 安装TEXLive 下载地址:https://mirror-hk.koddos.net/CTAN/systems/texlive/Images/ 下载完成直接点击iso进行安装操作。 安装LATEX Workshop插件 设置VsCode文…...
【ETCD】【Linearizable Read OR Serializable Read】ETCD 数据读取:强一致性 vs 高性能,选择最适合的读取模式
ETCD 提供了两种不同类型的读取操作方式,分别是 Linearizable Read(线性化读取)和 Serializable Read(可串行化读取)。这两种方式主要区分在读取数据时对一致性的要求不同。 目录 1. Linearizable Read(线…...
windows下搭建本地sofa-registry
官方介绍: SOFARegistry 是蚂蚁金服开源的一个生产级、高时效、高可用的服务注册中心。SOFARegistry 最早源自于淘宝的 ConfigServer,十年来,随着蚂蚁金服的业务发展,注册中心架构已经演进至第五代。目前 SOFARegistry 不仅全面服…...
什么是MyBatis
MyBatis 简介 MyBatis 是一个流行的 Java 持久层框架(Persistence Framework),它主要用于简化数据库操作,提供了对数据库的映射支持,使得开发人员能够通过简单的配置和映射文件来执行数据库操作(如增、删、…...
Docker如何运行一个Java的jar包程序
Docker如何运行一个Java的jar包程序 1、jar包程序 2、start.sh运行jar包脚本 #!/bin/bash #进入目录 cd /app #1.下载SDK并安装 java -jar SDKDown1.4.jar #2.加载环境变量 export LD_LIBRARY_PATH/opt/casb/CipherSuiteSdk_linux/lib echo $LD_LIBRARY_PATH #3.执行SDK java …...
c语言----顺序结构
顺序结构的基本概念 定义:顺序结构是C语言程序中最基本的结构,它按照语句的先后顺序依次执行。就像我们日常做事一样,一步一步地按照顺序来完成任务。在C语言程序中,从程序的第一条语句开始,逐句向下执行,…...
BERT采用双向训练
BERT采用双向训练 定义 BERT(Bidirectional Encoder Representations from Transformers)是一种基于Transformer架构的预训练语言模型。它在自然语言处理(NLP)领域具有极其重要的地位,由谷歌在2018年提出,能够对文本进行深度的语义理解,从而广泛应用于各种语言相关的任务…...
流程引擎Activiti性能优化方案
流程引擎Activiti性能优化方案 Activiti工作流引擎架构概述 Activiti工作流引擎架构大致分为6层。从上到下依次为工作流引擎层、部署层、业务接口层、命令拦截层、命令层和行为层。 基于关系型数据库层面优化 MySQL建表语句优化 Activiti在MySQL中创建默认字符集为utf8&…...
安卓 文件管理相关功能记录
文件管理细分为图片、视频、音乐、文件四类 目录 权限 静态声明权限 动态检查和声明权限方法 如何开始上述动态申请的流程 提示 图片 获取图片文件的对象列表 展示 删除 视频 获取视频文件的对象列表 获取视频file列表 按日期装载视频文件列表 展示 播放 删除…...
监控视频汇聚融合云平台一站式解决视频资源管理痛点
随着5G技术的广泛应用,各领域都在通信技术加持下通过海量终端设备收集了大量视频、图像等物联网数据,并通过人工智能、大数据、视频监控等技术方式来让我们的世界更安全、更高效。然而,随着数字化建设和生产经营管理活动的长期开展࿰…...
【jvm】主要参数
Java 虚拟机(JVM)有许多参数用于控制其行为和性能,下面是一些 主要的 JVM 启动参数,这些参数通常分为以下几类: 内存管理相关参数 这些参数主要用来配置 JVM 的内存分配策略、堆内存、栈内存等。 -Xms 设置 JVM 启动…...
在Ubuntu中配置mysql,并允许外部访问数据库
在虚拟机中安装 MySQL 并允许外部访问,可以按照以下步骤操作: 1. 更新系统包 首先,确保你的系统是最新的,使用以下命令更新包列表: sudo apt update sudo apt upgrade2. 安装 MySQL Server 安装 MySQL 服务&#x…...
Golang的向前兼容性和toolchain规则,Go1.21.0
在 Go 1.21 中,在工具上新增了两个变化:增强了向前兼容性;工具链管理。 向前兼容性 在以前的版本中,Go 工具链尝试编译依赖于新版本的代码时,可能会遇到兼容性问题。例如,如果你的代码依赖于 Go 1.18 引入…...
如何有效修复ffmpeg.dll错误:一站式解决方案指南
当您遇到提示“ffmpeg.dll文件丢失”的错误时,这可能导致相关的应用程序无法启动或运行异常。本文将详细介绍如何有效地解决ffmpeg.dll文件丢失的问题,确保您的应用程序能够恢复正常运行。 ffmpeg.dll是什么?有哪些功能? ffmpeg.…...
更频繁的 Android SDK 发布:更快的创新、更高的质量和更完善
Android 一直致力于让创新更快地进入用户手中。除了每年的平台发布之外,我们还投资了Project Treble、Mainline、Google Play 服务、每月安全更新和季度发布,为 Pixel Drops 提供支持。 未来,Android 将更频繁地发布 SDK,计划于 …...
远程连接:构建智能家居舒适生活
远程连接技术让智能家居从梦想照进现实,为人们构建了舒适便捷的生活环境。通过家庭网络与各种智能设备的远程连接,用户可以在外出时,使用手机 APP 轻松控制家中的灯光、窗帘、空调、电视等设备。 例如,在炎热的夏天,下…...
Python 爬取网页文字并保存为 txt 文件教程
引言 在网络数据获取的过程中,我们常常需要从网页中提取有用的文字信息。Python 提供了强大的库来帮助我们实现这一目标。本教程将以https://theory.gmw.cn/2023 - 08/31/content_36801268.htm为例,介绍如何使用requests库和BeautifulSoup库爬取网页文字…...
多协议视频监控汇聚/视频安防系统Liveweb搭建智慧园区视频管理平台
智慧园区作为现代化城市发展的重要组成部分,不仅承载着产业升级的使命,更是智慧城市建设的重要体现。随着产业园区竞争的逐渐白热化,将项目打造成完善的智慧园区是越来越多用户关注的内容。 然而我们往往在规划前期就开始面临众多难题&#…...
InnoDB 查询成本
1. 单表查询成本 连接查询总成本 IO 成本 CPU 成本对于 InnoDB 存储引擎来说,页是磁盘和内存之间交互的基本单位,设计MySQL的大叔规定读取一个页面花费的成本默认是 1.0,读取以及检测一条记录是否符合搜索条件的成本默认是 0.2。1.0、0.2 …...
C++的高精度减法 分步详解
高精度减法计算原理 在读小学时,我们做减法都采用竖式方法,如图 1 所示。 这样,我们可以写出两个整数相减的算法。 我们就可以用 C 语言来模拟这个竖式减法的过程。我们可以考虑利用 C 的数组来存储对应数据,假设用数组 A 存储被…...
linux cpu 管理
视频教程:ubuntu cpu 管理_哔哩哔哩_bilibili 概述 平均负载,CPU 使用率,CPU上下文 1 平均负载 #查看命令: rootzyb:~# uptime 18:21:47 up 1:09, 2 users, load average: 0.00, 0.00, 0.00 依次则是过去 1 分钟、5 分钟、1…...
大批量URL去重的架构设计(redis-bitmap+redisson)
1. 引言 什么是数据去重? 在大数据处理中,去重是指消除重复数据,只保留唯一的数据记录。 去重的重要性 提高数据处理效率,节省存储空间,提升数据分析的准确性。 常见的去重技术 基于哈希函数、布隆过滤器、位图等方法…...
WebGPU跨平台应用开发
对于 Web 开发人员来说,WebGPU 是一个 Web 图形 API,可提供对 GPU 的统一和快速访问。WebGPU 公开了现代硬件功能,并允许在 GPU 上进行渲染和计算操作,类似于 Direct3D 12、Metal 和 Vulkan。 虽然这是真的,但这个故事…...
Proteus(8.15)仿真下载安装过程(附详细安装过程图)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、Proteus是什么? 二、下载链接 三、下安装步骤 1.解压,有键管理员运行 2.点击Next,进行下一步 3.勾选I accept…&#…...
vlan和vlanif
文章目录 1、为什么会有vlan的存在2、vlan(虚拟局域网)1、vlan原理1. 为什么这样划分了2、如何实现不同交换机相同的vlan实现互访呢3、最优化的解决方法,vlan不同交换机4、vlan标签和vlan数据帧 5、vlan实现2、基于vlan的划分方式1、基于接口的vlan划分方式2、基于m…...
Unity开发哪里下载安卓Android-NDK-r21d
google的东西,居然是完全开源的 真的不是很多公司能做到,和那种伪搜索引擎是不同的 到底什么时候google才会开始造车 不过风险很多,最好不要合资,风险更大...
期末速成C++【初识C++】
目录 1.英文单词 2.C的特点 3.C对C语言的补充 3.1命名空间和域操作符 🎇3.2控制台输入输出 3.3类型增强 3.3.1const常变量 3.3.2const与指针 3.3.3布尔类型与枚举类型 3.4默认参数 🎇3.5函数重载 🎇引用 3.6.1引用做函数参数 …...
爬虫案例学习6
获取淘宝商品数据2024-12-18 参考学习: 大佬博客 视频教程 通过搜索发现,数据是通过发送请求过来的,不是静态存在源代码的 所以我们需要请求这个接口获取数据:比如标题,价格,图片等信息 https://h5api.m…...
28、论文阅读:基于像素分布重映射和多先验Retinex变分模型的水下图像增强
A Pixel Distribution Remapping and Multi-Prior Retinex Variational Model for Underwater Image Enhancement 摘要介绍相关工作基于模型的水下图像增强方法:无模型水下图像增强方法:基于深度学习的水下图像增强方法: 论文方法概述像素分布…...
[BJDCTF2020]ZJCTF,不过如此 1
[BJDCTF2020]ZJCTF,不过如此 1 打开实例发现代码审计 需要GET传入text和file参数,然后执行文件包含 text需要读取到I have a dream文本,这边采用data流进行绕过 ?textdata://,I have a dream&filenext.php成功绕过,接下来…...
Hive的in与not in 值中有null的时候注意事项,join where条件等问题
在进行hive SQL查询数据的时候,where条件中使用了in或者not in,但是该值内有null空。 这时,无论是in还是not in,空值都不会进入该条件内,但是使用not in的时候只是希望把自己不想要的数据给排除掉,这时会同…...
大语言模型画图(流程图、框架图)
第一步:向随意大语言模型,描述内容,推荐豆包 豆包 加上下面Prompt 通过Mermaid语法,描述上面流程图 第二步:将生成Mermaid输入流程图生成网站 中文Mermaid - 流程图、关系图在线画图、生成和编辑器...
Oracle创建逻辑目录
Oracle 在执行逻辑备份及还原时,需要用到逻辑目录。 本文就来简单介绍一下逻辑目录相关的操作,希望对大家有所帮助。 1.登录到Oracle数据库 使用具有足够权限的数据库用户登录到Oracle数据库。通常,这需要是管理员账号,如SYS…...
[react] 优雅解决typescript动态获取redux仓库的类型问题
store.getState()是可以获取总仓库的 先拿到函数的类型 再用ReturnType<T> 它是 TypeScript 中的一个内置条件类型,用于获取某个函数类型 T 的返回值类型 代码 // 先拿总仓库的函数类型type StatefuncType typeof store.getState;//再拿函数类型T的返回值类…...
python如何获取excel单元格文字是否加粗
是的,Python 可以获取 Excel 单元格中的文字是否加粗。通常,这需要使用 openpyxl 库,它允许你读取和写入 Excel 文件(.xlsx 格式)。 以下是一个示例代码,展示如何检查某个单元格的文字是否加粗:…...
我的性能优化经验
专业方向:App cpu/memory/gpu/流畅度/响应时间的优化,Anr,Framework CarPowerManagementService模块的(STR),从0~1完成性能监控体系搭建,完成3大版本迭代高质量性能交付 响应时间: …...
【Vulkan入门】16-IndexBuffer
TOC 先叨叨 上篇介绍了如何使用VertexBuffer传入顶点信息。两个多星期了我们一直在玩三个点,本篇介绍如何渲染更多的点。 在渲染前考虑一个问题,渲染一个三角形需要三个点,渲染两个相接的三角形需要几个点? 答案是6个点…...