`panic` 是 Go 语言中用来表示发生了严重错误的一种机制
目录
- `panic` 是 Go 语言中用来表示发生了严重错误的一种机制
- 案例
- goroutine
- 空指针是什么
- 栈展开是什么
- defer 语句会按照 LIFO(后进先出)的顺序执行
panic
是 Go 语言中用来表示发生了严重错误的一种机制
在 Go 程序中,panic
是一种运行时错误,它会导致当前的 goroutine 立即停止执行,并开始进行栈展开(unwinding the stack)。简单来说,panic
是 Go 语言中用来表示发生了严重错误的一种机制。
以下是一些关于 Go 程序中 panic
的要点:
-
触发原因:
panic
可以由代码中的panic
语句显式触发,也可以由运行时错误隐式触发,比如访问一个空指针(nil
指针引用)。
-
栈展开:
- 当
panic
发生时,当前 goroutine 的栈会展开,这意味着所有正在进行的函数调用都会被中断。
- 当
-
程序终止:
- 如果没有被恢复(recover),
panic
会导致程序终止。在 main goroutine 中发生panic
会导致程序退出。
- 如果没有被恢复(recover),
-
错误处理:
panic
通常用于不可恢复的错误。对于可以恢复的错误,通常使用错误返回值来处理。
-
Defer 函数:
- 在发生
panic
时,当前 goroutine 中所有 defer 语句会按照 LIFO(后进先出)的顺序执行。
- 在发生
-
Recover:
- 使用内置的
recover
函数可以捕获 panic,并恢复程序的执行流程。但是,recover
必须在 defer 函数中调用。
- 使用内置的
-
日志记录:
- 当 panic 发生时,Go 运行时会将 panic 的值和堆栈跟踪记录到日志中。
-
调试:
panic
可以用于调试目的,通过触发 panic 来中断程序的执行,从而检查程序的状态。
-
性能影响:
- 频繁地触发 panic 和 recover 可能会对程序性能产生负面影响。
-
并发中的 panic:
- 如果在一个 goroutine 中发生 panic,它不会影响其他 goroutine 的执行,除非它们之间有明确的 recover 调用。
在编写 Go 程序时,应该谨慎使用 panic,因为它是一种异常机制,不适用于常规的错误处理。正确使用 panic 可以帮助你处理那些不应该发生的错误,例如违反了程序的前提条件。然而,在可能的情况下,应该优先使用错误返回值来处理可预见的错误情况。
案例
下面是一个使用 Go 语言编写的简单案例,演示了如何触发和捕获 panic
,以及如何进行栈展开:
package mainimport ("fmt""log""runtime/debug"
)func main() {defer func() {if r := recover(); r != nil {fmt.Println("Recovered in main:", r)// 打印堆栈信息log.Println(string(debug.Stack()))}}()faultyFunction(5)fmt.Println("This will not be printed if the function causes a panic.")
}func faultyFunction(input int) {if input < 0 {// 故意触发一个 panic,模拟一个错误情况panic("Negative input is not allowed")}fmt.Println("The input is:", input)
}// Output:
// The input is: 5
// Recovered in main: Negative input is not allowed
// <堆栈跟踪信息>
在这个案例中,faultyFunction
函数接受一个整数输入,如果输入是负数,它会触发一个 panic
。在 main
函数中,我们使用 defer
关键字来注册一个恢复函数,该函数使用 recover
来捕获可能发生的 panic
。
如果 faultyFunction
触发了 panic
,程序控制流会逆向通过栈帧回到 main
函数中的 defer
语句。在 defer
语句中,我们打印出 recover
捕获的错误信息,并使用 debug.Stack()
打印出堆栈跟踪信息,这有助于我们了解 panic
发生时的调用栈情况。
请注意,案例中的输出包含正常执行的 “The input is: 5”,因为输入不是负数,所以没有触发 panic
。如果将 faultyFunction
中的输入改为负数,将触发 panic
,并执行 defer
中的恢复逻辑。
goroutine
在 Go 语言中,goroutine 是一个轻量级的线程,由 Go 运行时管理。goroutine 是 Go 并发编程的核心特性之一,它使得编写并发程序变得简单和高效。以下是关于 goroutine 的一些关键点:
-
轻量级:
- Goroutine 比传统的操作系统线程更轻量级,因为它们的栈通常较小(初始栈大小通常为几 KB),并且创建和切换的开销更小。
-
并发执行:
- Goroutine 允许程序中的多个函数同时运行,从而实现并发执行。
-
由 Go 运行时管理:
- Go 运行时负责管理 goroutine 的调度和执行,开发者不需要直接管理线程的创建和销毁。
-
使用
go
关键字:- 通过在函数调用前加上
go
关键字,可以创建一个新的 goroutine 来执行该函数。
- 通过在函数调用前加上
-
共享内存模型:
- Goroutine 之间共享相同的内存空间,因此它们可以直接访问相同的变量和数据结构。
-
通信:
- Goroutine 通过 channels 进行通信,这是一种内置的类型,允许在 goroutine 之间传递数据。
-
同步:
- 使用 channels、互斥锁(sync.Mutex)、条件变量(sync.Cond)等同步原语,可以协调 goroutine 之间的执行顺序。
-
独立调度:
- 每个 goroutine 可以独立于其他 goroutine 进行调度,Go 运行时会根据系统资源和 goroutine 的数量来管理它们的执行。
-
栈大小可调整:
- Goroutine 的栈大小可以在运行时动态调整,以适应不同的程序需求。
-
与操作系统线程的关系:
- Go 运行时会将多个 goroutine 映射到相对较少的操作系统线程上,并通过协作式调度来管理它们。
-
错误处理:
- 如果一个 goroutine 发生 panic,它会影响同一线程上其他 goroutine 的执行,除非 panic 被 recover 捕获。
-
生命周期:
- Goroutine 有自己的生命周期,它们会一直运行直到函数返回,或者遇到 panic 并且没有被 recover。
使用 goroutine 可以简化并发编程,因为开发者不需要直接管理线程的创建和同步,而是依赖 Go 运行时来处理这些复杂的任务。这使得编写高效且易于维护的并发程序变得更加容易。
空指针是什么
空指针(Null Pointer)是编程中一个常见的概念,特别是在使用指针的编程语言如 C、C++ 和 Go 中。以下是空指针的一些关键点:
-
定义:
- 空指针是一个指针值,它没有指向任何有效的内存地址,或者说它指向了一个“空”的或不存在的内存位置。
-
表示:
- 在大多数语言中,空指针通常用
NULL
或nil
表示(在 Go 语言中使用nil
)。
- 在大多数语言中,空指针通常用
-
用途:
- 空指针常用于初始化指针变量,表示当前该指针没有指向任何有效的内存。
-
问题:
- 如果尝试通过一个空指针访问或修改内存,将会导致运行时错误。在 C/C++ 中,这通常会导致程序崩溃或不可预测的行为;在 Go 中,这会导致 panic。
-
空指针引用:
- 空指针引用(或空指针解引用)是指试图访问空指针指向的内存地址,这是未定义行为(Undefined Behavior),通常会导致程序崩溃。
-
空指针检查:
- 在编写程序时,对指针进行空检查是一个良好的实践,以避免空指针引用。
-
语言差异:
- 不同的编程语言对空指针的处理方式不同。例如,在 Java 中,所有对象引用都必须指向一个有效的对象实例,因此不允许有空指针。
-
内存分配:
- 空指针通常在指针变量声明后未初始化或显式地被赋予
NULL
或nil
值时出现。
- 空指针通常在指针变量声明后未初始化或显式地被赋予
-
编程实践:
- 在编写涉及指针的代码时,应该避免空指针操作,确保在指针被使用前已经被赋予了有效的内存地址。
-
调试:
- 空指针错误可能会使程序难以调试,因为它们可能导致程序在非预期的点崩溃。
在 Go 语言中,空指针是一个常见的问题源,因为 Go 允许 nil 指针被引用,这将导致运行时 panic。为了避免这种情况,Go 程序通常会在访问或操作指针之前检查它是否为 nil。例如:
if ptr != nil {// 安全地使用 ptr
} else {// 处理 nil 指针情况
}
正确地处理空指针是编写健壮和安全程序的关键部分。
栈展开是什么
栈展开(Stack Unwinding)是编程中的一个术语,指的是在程序执行过程中,由于某些异常情况(如抛出异常或触发 panic)发生时,程序控制流从当前位置逆向通过栈帧(Stack Frames)回到一个安全点(通常是异常处理点或程序入口点)的过程。
以下是栈展开的一些关键特点:
-
异常情况:
- 栈展开通常由异常情况触发,如运行时错误、程序错误或显式的异常抛出。
-
逆向过程:
- 栈展开涉及逆向遍历调用栈,从当前栈帧开始,逐层向上,直到找到异常处理点。
-
资源清理:
- 在栈展开过程中,程序有机会执行清理工作,如关闭文件句柄、释放分配的资源或撤销已经完成的操作。
-
调用栈:
- 调用栈是程序运行时的内存区域,用于存储函数调用的上下文信息,包括局部变量、参数和返回地址。
-
栈帧:
- 每个函数调用都会在调用栈上创建一个新的栈帧,包含该函数的局部变量和调用信息。
-
异常处理:
- 在支持异常的语言中,栈展开允许程序跳过当前的执行流程,转而执行异常处理代码(如 try-catch 块)。
-
语言特性:
- 不同编程语言对栈展开的支持和实现方式不同。例如,C++ 和 Java 支持结构化异常处理,而 Go 使用 panic 和 recover 机制。
-
性能影响:
- 栈展开可能涉及大量的内存访问和函数调用,因此可能对性能有一定影响。
-
不可恢复的错误:
- 对于某些不可恢复的错误,栈展开后程序可能无法继续执行,需要终止或重启。
-
调试和诊断:
- 栈展开过程中的信息对于调试和诊断程序错误非常重要,因为它提供了错误发生时的调用序列和上下文信息。
在 Go 语言中,当一个 goroutine 触发 panic 时,会触发栈展开,直到被 recover 捕获。如果在 main goroutine 中发生 panic 且没有被 recover,程序将打印堆栈跟踪并退出。通过分析这些信息,开发者可以确定 panic 的原因和发生的位置。
defer 语句会按照 LIFO(后进先出)的顺序执行
在 Go 语言中,defer
语句用于延迟函数的执行直到其包围函数即将返回。defer
语句的执行顺序确实是按照 LIFO(后进先出)的顺序,这是因为 defer
语句被设计为与函数的退出点相关联,无论函数是正常返回还是由于异常(例如 panic
)而退出。
以下是为什么 defer
按照 LIFO 顺序执行的几个原因:
-
栈结构:
defer
语句被存储在一个栈结构中。每次函数调用时,新的defer
语句被推入到这个栈顶。当函数返回时,defer
语句从栈顶开始执行,即最后一个被推入的defer
语句最先被执行。
-
资源清理:
defer
常用于资源清理,如文件关闭、锁释放等。LIFO 顺序确保了即使在多层函数调用中,资源也能按照正确的顺序被释放。例如,如果一个函数 A 调用了函数 B,并且两者都有defer
语句用于关闭资源,那么 B 中的defer
将首先执行,然后才是 A 中的defer
。
-
异常处理:
- 当发生
panic
时,当前函数的执行流程会被中断,此时 LIFO 顺序的defer
执行可以确保在程序退出前,所有已经推入栈的清理逻辑都能被执行。
- 当发生
-
逻辑顺序:
- LIFO 顺序保持了
defer
语句的逻辑顺序,即最后一个defer
语句是在当前逻辑流程中最近添加的,它可能依赖于之前defer
语句的状态。
- LIFO 顺序保持了
-
函数退出的确定性:
- 无论函数以何种方式退出,
defer
语句的 LIFO 执行顺序都能保证资源的清理和状态的恢复具有确定性。
- 无论函数以何种方式退出,
-
避免竞态条件:
- 在并发编程中,LIFO 顺序的
defer
执行可以减少竞态条件的风险,因为每个defer
语句的执行不依赖于其他defer
语句的执行结果。
- 在并发编程中,LIFO 顺序的
-
简化编程模型:
- LIFO 顺序简化了
defer
语句的编程模型,开发者不需要担心defer
语句的执行顺序问题,只需关注它们的声明顺序。
- LIFO 顺序简化了
通过这种设计,Go 语言的 defer
语句提供了一种强大且灵活的方式来处理资源管理和异常处理,同时简化了错误处理和资源清理的复杂性。
相关文章:
`panic` 是 Go 语言中用来表示发生了严重错误的一种机制
目录 panic 是 Go 语言中用来表示发生了严重错误的一种机制案例goroutine空指针是什么栈展开是什么defer 语句会按照 LIFO(后进先出)的顺序执行 panic 是 Go 语言中用来表示发生了严重错误的一种机制 在 Go 程序中,panic 是一种运行时错误&a…...
【BUG】已解决:requests.exceptions.ProxyError: HTTPSConnectionPool
已解决:requests.exceptions.ProxyError: HTTPSConnectionPool 目录 已解决:requests.exceptions.ProxyError: HTTPSConnectionPool 【常见模块错误】 原因分析 解决方案 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&am…...
Python实现招聘数据采集 ,并做可视化分析
转眼秋招快到了, 今天来学习一下如何用Python采集全网招聘数据,并进行可视化分析,为就业准备~ 话不多说开始造 源码和详细的视频讲解我都打包好了,文末名片自取 准备工作 首先你需要准备这些 环境 Python 3.10 Pycharm 模块…...
ES中的数据类型学习之Aggregate metric(聚合计算)
Aggregate metric field type | Elasticsearch Guide [7.17] | Elastic 对于object类型的字段来说,可以存子字段为 min/max/sum/value_count PUT my-index {"mappings": {"properties": {"my-agg-metric-field": { -- 字段名"ty…...
看准JS逆向案例:webpack逆向解析
🔍 逆向思路与步骤 抓包分析与参数定位 首先,我们通过抓包工具对看准网的请求进行分析。 发现请求中包含加密的参数b和kiv。 为了分析这些加密参数,我们需要进一步定位JS加密代码的位置。 扣取JS加密代码 定位到JS代码中的加密实现后&a…...
【C语言】 利用栈完成十进制转二进制(分文件编译,堆区申请空间malloc)
利用栈先进后出的特性,在函数内部,进行除二取余的操作,把每次的余数存入栈内,最后输出刚好就是逆序输出,为二进制数 学习过程中,对存储栈进行堆区的内存申请时候,并不是很熟练,一开始…...
如何解决ChromeDriver 126找不到chromedriver.exe问题
引言 在使用Selenium和ChromeDriver进行网页自动化时,ChromeDriver与Chrome浏览器版本不匹配的问题时有发生。最近,许多开发者在使用ChromeDriver 126时遇到了无法找到chromedriver.exe文件的错误。本文将介绍该问题的原因,并提供详细的解决…...
Anaconda下安装配置Jupyter
Anaconda下安装配置Jupyter 1、安装 conda activate my_env #激活虚拟环境 pip install jupyter #安装 jupyter notebook --generate-config #生成配置文件提示配置文件的位置: Writing default config to: /root/.jupyter/jupyter_notebook_config.py检查版本&am…...
蓝队黑名单IP解封提取脚本
应用场景:公司给蓝队人员一个解封IP列表,假如某个IP满足属于某某C段,则对该IP进行解封。该脚本则是进行批量筛选出符合条件的白名单IP 实操如下:公司给了一个已经封禁了的黑名单IP列表如下(black) 公司要求…...
共享充电桩语音ic方案,展现它的“说话”的能力
随着电动汽车的普及,充电设施的便捷性、智能化需求日益凸显,共享充电桩语音IC应运而生,成为连接人与机器、实现智能交互的桥梁。本文将为大家介绍共享充电桩语音ic的概述、应用词条以及优势,希望能够帮助您。 一、NV170D语音ic概述…...
ARM 单片机裸机任务调度框架
前言: 在没有使用操作系统的情况下,一个合理的裸机任务调度方式,可以更好的提供数据的处理,和用户体验,有多种任务调度的方式。 方案 1: 从上到下的任务调度方式,C语言程序的代码是在main函数…...
.Net 8 控制台程序部署(Linux篇)
在无流量Linux环境下部署.NET8开发的控制台程序 写在前面准备远程访问安装环境程序部署1.下载并导入2.解压并配置3.发布程序4.创建Systemd服务单元文件5.启用并启动服务 写在结尾 写在前面 好久没更新文章了,今天给大家带来的是在在无流量的Linux工控机上部署.Net8…...
LeetCode:x的平方根(C语言)
1、问题概述:给你一个非负整数 x,计算并返回 x 的 算术平方根 ,返回类型得是一个整数,小数舍弃 2、示例 示例 1: 输入:x 4 输出:2 示例 2: 输入:x 8 输出:…...
深入浅出WebRTC—DelayBasedBwe
WebRTC 中的带宽估计是其拥塞控制机制的核心组成部分,基于延迟的带宽估计是其中的一种策略,它主要基于延迟变化推断出可用的网络带宽。 1. 总体架构 1.1. 静态结构 1)DelayBasedBwe 受 GoogCcNetworkController 控制,接收其输入…...
JAVA开发工具IDEA如何连接操作数据库
一、下载驱动 下载地址:【免费】mysql-connector-j-8.2.0.jar资源-CSDN文库 二、导入驱动 鼠标右击下载到IDEA中的jar包,选择Add as Library选项 如图就导入成功 三、加载驱动 Class.forName("com.mysql.cj.jdbc.Driver"); 四、驱动管理…...
简化AI模型:PyTorch量化技术在边缘计算中的应用
引言 在资源受限的设备上部署深度学习模型时,模型量化技术可以显著提高模型的部署效率。通过将模型的权重和激活从32位浮点数转换为更低位数的值,量化可以减少模型的大小,加快推理速度,同时降低能耗。 模型量化概述 定义与优势…...
拥抱AI时代:解锁Prompt技术的无限潜力与深远影响
拥抱AI时代:解锁Prompt技术的无限潜力与深远影响 引言 在人工智能的浩瀚星空中,自然语言处理(NLP)无疑是最耀眼的星辰之一。随着技术的不断演进,NLP已经从最初的简单问答系统发展成为能够生成复杂文本、理解人类情感与…...
第123天:内网安全-域防火墙入站出站规则不出网隧道上线组策略对象同步
目录 案例一: 单机-防火墙-限制端口\协议出入站 案例二:不出网的解决思路 入站连接 隧道技术 案例三:域控-防火墙-组策略对象同步 案例四:域控-防火墙-组策略不出网上线 msf cs 案例一: 单机-防火墙-限制端口\…...
博客建站4 - ssh远程连接服务器
1. 什么是SSH?2. 下载shh客户端3. 配置ssh密钥4. 连接服务器5. 常见问题 5.1. IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! 1. 什么是SSH? SSH(Secure Shell)是一种加密的网络协议,用于在不安全的网络中安全地远程登录到其他…...
MySQL--索引(3)
1.索引创建注意点 选择合适的字段 1.不为 NULL 的字段 索引字段的数据应该尽量不为 NULL,因为对于数据为 NULL 的字段,数据库较难优化。如果字段频繁被查询,但又避免不了为 NULL,建议使用 0,1,true,false 这样语义较为清晰的短值或…...
sql_exporter通过sql收集业务数据并通过prometheus+grafana展示
下载并解压安装sql_exporter wget https://github.com/free/sql_exporter/releases/download/0.5/sql_exporter-0.5.linux-amd64.tar.gz #解压 tar xvf sql_exporter-0.5.linux-amd64.tar.gz -C /usr/local/修改主配置文件 cd /usr/local/ mv sql_exporter-0.5.linux-amd64 s…...
pytorch 笔记:torch.optim.Adam
torch.optim.Adam 是一个实现 Adam 优化算法的类。Adam 是一个常用的梯度下降优化方法,特别适合处理大规模数据集和参数的深度学习模型 torch.optim.Adam(params, lr0.001, betas(0.9, 0.999), eps1e-08, weight_decay0, amsgradFalse, *, foreachNone, maximizeFa…...
开源AI智能名片小程序:深度剖析体验优化策略,激活小程序生命力的运营之道
摘要:在移动互联网的浪潮中,微信小程序凭借其无需下载、即用即走的特性,迅速成为企业连接用户、拓展市场的重要桥梁。开源AI智能名片小程序,作为这一领域的创新尝试,旨在通过融合人工智能技术与传统商务名片的概念&…...
ML.Net 学习之使用经过训练的模型进行预测
什么是ML.Net:(学习文档上摘的一段:ML.NET 文档 - 教程和 API 参考 | Microsoft Learn 【学习入口】) 它使你能够在联机或脱机场景中将机器学习添加到 .NET 应用程序中。 借助此功能,可以使用应用程序的可用数据进行自…...
为什么 centos 下使用 tree 命令看不见 .env 文件
CentOS 下使用 tree 命令看不到 .env 文件主要有两个可能的原因: 默认情况下,tree 命令不显示隐藏文件。在 Linux 系统中,以点(.)开头的文件或目录被视为隐藏文件。.env 文件就属于这种隐藏文件。 您可能没有安装 tree 命令。如果在 CentOS …...
数据库基础与性能概述及相关术语
在计算机科学领域,特别是数据库技术中,掌握与数据库性能相关的专业词汇对于数据库管理员、开发人员及数据分析师等专业人员来说至关重要。以下是一篇关于计算机必背单词——数据库性能相关的详细解析. 一、数据库基础与性能概述 数据库是计算机科学中的…...
docker基于外部缓存加速构建方案
开启外部缓存 http://your_apt_cacher_ng_server:3142 是一个示例 URL,表示需要设置的 apt-cacher-ng 代理服务器的地址。apt-cacher-ng 是一个本地代理服务器,可以缓存从官方 APT 仓库下载的软件包,从而加速后续的下载过程,并减…...
【C语言】 作业11 链表+实现函数封装
递归实现链表数据互换,纯不会,明天再说 1、链表实现以下功能 链表,创建链表,申请节点,判空,头插,遍历输出,通过位置查找节点,任意位置插入,头删,…...
【Ubuntu】Ubuntu20修改MAC地址
文章目录 一、临时修改MAC地址(重启后复原)二、永久修改MAC地址 场景:在做虚拟机复制时,复制完的两台虚拟机存在相同MAC,导致无法分别分配IP。 解决:修改一台虚拟机的MAC地址。 一、临时修改MAC地址&#…...
ClickHouse集成LDAP实现简单的用户认证
1.这里我的ldap安装的是docker版的 docker安装的化就yum就好了 sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin sudo systemctl start docker 使用下面的命令验证sudo docker run hello-world docker pull osixia/openl…...
C语言-预处理详解
1.预处理符号 C语言中设置了一些预定义符号,可以直接使用,预定义符号是在预处理期间处理的。 __FILE__//代表当前进行编译的源文件 __LINE__//文件当前行号 __DATE__//文件当前日期 __TIME__//文件当前时间 __STDC__//如果编译器遵循ANSIC,…...
计算机网络-VLAN间通信(三层通信)模拟实现
目录 VLAN基础知识VLAN和普通LAN区别划分VLAN的原因 实现VLAN间的通信(三层通信)方案一:多臂路由方案二:单臂路由方案三:三层交换机 VLAN基础知识 VLAN(Virtual Local Area Network,虚拟局域网…...
【JAVA】数据类型及变量
🎉欢迎大家收看,请多多支持🌹 🥰关注小哇,和我一起成长🚀个人主页🚀 Java的数据类型 可以分为两类,基本数据类型和引用数据类型 基本数据类型有4类8种,4类分别是整型 浮…...
微软蓝屏事件暴露的网络安全问题
目录 1.概述 2.软件更新流程中的风险管理和质量控制机制 2.1.测试流程 2.2.风险管理策略 2.3.质量控制措施 2.4.小结 3.预防类似大规模故障的最佳方案或应急响应对策 3.1. 设计冗余系统 3.2. 实施灾难恢复计划 3.3. 建立高可用架构 3.4. 类似规模的紧急故障下的响应…...
11 - FFmpeg - 编码 AAC
Planar 模式是 ffmpeg内部存储模式,我们实际使用的音频文件都是Packed模式的。 FFmpeq解码不同格式的音频输出的音频采样格式不是一样。 其中AAC解码输出的数据为浮点型的 AV_SAMPLE_FMT_FLTP 格式,MP3 解码输出的数据为 AV_SAMPLE_FMT_S16P 格式(使用的…...
OS Copilot初体验的感受与心得
本文介绍体验操作系统智能助手OS Copilot后,个人的一些收获、体验等。 最近,抽空体验了阿里云的操作系统智能助手OS Copilot,在这里记录一下心得与收获。总体观之,从个人角度来说,感觉这个OS Copilot确实抓住了不少开发…...
Ajax学习笔记
文章目录标题 Ajax学习笔记axios使用axios请求拦截器axios响应拦截器优化axios响应结果 form-serialize插件图片上传HTTP协议请求报文相应报文接口文档 AJAX原理 - XMLHttpRequest使用XMLHttpRequestXMLHttpRequest - 查询参数查询字符串对象 XMLHttpRequest - 数据提交 事件循…...
医学深度学习与机器学习融合的随想
医学深度学习与机器学习融合的随想 近年来,深度学习(图像类)和机器学习在医学领域的应用取得了飞速发展,为医学影像分析、疾病诊断和预后预测等领域带来了革命性的变革。深度学习擅长从复杂数据中提取高层次特征,而机…...
坑人的macos tar 命令 (实际上是bsdtar)换用 gnu tar
周末 看着笔记本上好用的朗文当代高级词典(mac版)和其它两部词典,准备复制到黑苹果台式机上去。考虑到词典内容有太多小文件,普通复制传输太慢,毫无疑问用 tar 打包肯定快而且能保留原始文件的各种信息。命令如下: time tar czf …...
【SpringBoot3】全局异常处理
【SpringBoot3】全局异常处理 一、全局异常处理器step1:创建收入数字的页面step2:创建控制器,计算两个整数相除step3:创建自定义异常处理器step5:创建给用提示的页面step6:测试输入(10/0) 二、BeanValidato…...
vue-Treeselect
一、Node KeyTypeDescriptionid (required)Number | String用于标识树中的选项。其值在所有选项中必须是唯一的label (required)String用于显示选项childrennode[] | null声明一个分支节点。你可以: 1) 设置为由a组成的子选项数组。叶节点,b…...
【机器学习框架TensorFlow和PyTorch】基本使用指南
机器学习框架TensorFlow和PyTorch:基本使用指南 目录 引言TensorFlow概述 TensorFlow简介TensorFlow的基本使用 PyTorch概述 PyTorch简介PyTorch的基本使用 TensorFlow和PyTorch的对比结论 引言 随着深度学习的快速发展,机器学习框架在实际应用中起到…...
matlab 中的methods(Access = protected) 是什么意思
gpt版本 在 MATLAB 中,methods 是用于定义类方法的一部分。(Access protected) 是一种访问控制修饰符,它限制了方法的访问权限。具体来说,当你在类定义中使用 methods(Access protected) 时,你是在定义只有类本身及其子类可以访…...
【漏洞复现】Netgear WN604 downloadFile.php 信息泄露漏洞(CVE-2024-6646)
0x01 产品简介 NETGEAR WN604是一款由NETGEAR(网件)公司生产的无线接入器(或无线路由器)提供Wi-Fi保护协议(WPA2-PSK, WPA-PSK),以及有线等效加密(WEP)64位、128位和152…...
图像处理 -- ISP调优(tuning)的步骤整理
ISP调优流程培训文档 1. 硬件准备 选择合适的图像传感器:根据项目需求选择合适的传感器型号。搭建测试环境:包括测试板、光源、色彩卡和分辨率卡等。 2. 初始设置 寄存器配置:初始化传感器的寄存器设置,包括曝光、增益、白平衡…...
【中项】系统集成项目管理工程师-第4章 信息系统架构-4.2系统架构
前言:系统集成项目管理工程师专业,现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。 软考同样是国家人社部和工信部组织的国家级考试,全称为“全国计算机与软件专业技术资格(水平)考试”&…...
node.js中nodemon : 无法加载和使用问题,这是由于windows安全策略影起的按如下操作即可
1、用管理员权限打开vscode 2、文件终端中打开,输入 Set-ExecutionPolicy -Scope CurrentUser 3、再输入RemoteSigned 4、使用get-ExecutionPolicy查看权限,可以看到变为了RemoteSigned 重启问题解决...
【SD】 Stable Diffusion(SD)原理详解与ComfyUI使用 2
Stable Diffusion(SD)原理详解与ComfyUI使用 Stable Diffusion(SD)原理详解与ComfyUI使用1. SD整体结构2. Clip(文本编码器)3. Unit(生成模型)4. VAE(变分自编码器&#…...
【学习笔记】无人机系统(UAS)的连接、识别和跟踪(七)-广播远程识别码(Broadcast Remote ID)
目录 引言 5.5 广播远程识别码(Broadcast Remote ID) 5.5.1 使用PC5的广播远程识别码 5.5.2 使用MBS的广播远程识别码 引言 3GPP TS 23.256 技术规范,主要定义了3GPP系统对无人机(UAV)的连接性、身份识别、跟踪及…...
VMware 虚拟机 ping 不通原因排查
目录 一、检查网络 二、重启虚拟机网络 因为最近遇到了一个比较奇怪的 ping 不通虚拟机的事,在此过程中,检查了很多的设置,故而写一篇文章记录下,如有 VMware 虚拟机 ping 不通可以尝试本文的排查方式。 下面以 VMware 虚拟机为…...