Perl测试起步:从零到精通的完整指南
阅读原文
5.2 为什么你的Perl代码总是出问题?因为你还没开始测试!
"我的代码昨天还能运行,今天就莫名其妙报错了!"、"我只是改了一个小功能,结果整个系统都崩溃了"、"这段代码不是我写的,我完全不敢动它"... 这些场景听起来熟悉吗?作为Perl开发者,我们每天都在与代码的不可预测性作斗争。而测试,正是解决这些痛点的最佳武器。
测试不仅能提高代码的可靠性,还能显著提升开发效率——当你可以随时运行测试来验证代码行为时,就不再需要手动反复检查每个功能点。更重要的是,良好的测试套件能让你的代码在未来几年内都保持可维护性,即使换了维护者也能快速上手。
Perl拥有世界上最丰富的测试模块生态系统,不仅能测试Perl程序本身,还能测试各种外部程序和系统。但问题在于:大多数开发者知道测试的重要性,却不知道如何开始。本章将彻底解决这个问题,带你从零开始掌握Perl测试的完整技能链。
5.2.1 测试环境搭建:选择最适合你的安装方式
面试试题1:Perl模块安装的三种武器
问题:请谈谈对Perl模块安装的认识以及几种典型的模块安装方法。
解答:工欲善其事,必先利其器。在开始Perl测试前,我们需要先安装必要的测试模块。CPAN(Comprehensive Perl Archive Network)是Perl模块的宝库,包含了几乎所有已发布的Perl模块。这些模块以压缩文件形式存在,为我们提供了现成的解决方案。以下是三种最常用的安装方法:
1. CPAN Shell:Linux/Mac开发者的首选
对于类UNIX系统(包括Mac OS X)和带有C编译器的Windows系统,CPAN shell是最便捷的安装方式。它能自动处理依赖关系,一站式完成查找、下载、编译和安装全过程。
让我们以安装Test::Simple模块为例:
# 启动CPAN shell(首次运行需配置)
perl -MCPAN-e shell# 在CPAN shell中操作
cpan> h # 获取帮助
cpan> m # 列出所有模块
cpan>install Test::Simple # 安装模块
cpan> q # 退出
关键点:首次运行时,CPAN会询问配置信息。如果你的机器能直接连接互联网,通常只需按回车接受默认值,最后选择一个地理位置最近的镜像站点即可(例如中国的ftp://freesoft.cgi.gov.cn/pub/languages/perl/CPAN)。
2. PPM:Windows开发者的福音
对于ActivePerl用户(特别是Windows平台),PPM(Perl Package Manager)是更可靠的选择。因为从CPAN直接下载的Perl模块可能在ActivePerl环境下存在兼容性问题。
安装步骤:
# 启动PPM
ppm# PPM操作
PPM> h # 帮助
PPM> search # 搜索模块
PPM>install Test::Simple # 安装
PPM> q # 退出
3. 手动安装:完全掌控的进阶方式
当你需要精确控制安装过程或网络受限时,手动安装是最灵活的选择。以Test::Simple为例:
# 解压并进入目录
tar xvzf test-simple.tar.gz
cd test-simple# 编译安装
perl Makefile.PL
make
maketest# 重要:先运行测试!
makeinstall
专家建议:无论选择哪种方式,都建议先运行make test
确保模块在你的环境中能正常工作。如果测试失败,最好先解决问题再安装。
国内常用CPAN镜像:
-
ftp://freesoft.cgi.gov.cn/pub/languages/perl/CPAN
- http://cpan.qz.fj.cn
国际推荐镜像:
- http://www.cpan.org
- http://www.perl.com/CPAN-local/
面试试题2:测试执行的艺术
问题:对于Perl测试模块,如何全部和单独运行?请举例说明。
解答:测试的执行方式直接影响调试效率。以Test::Harness模块为例,我们有两种执行策略:
批量执行:整体健康检查
$ maketest
这会运行所有测试文件(通常位于t/目录下),并输出汇总报告。示例输出:
t/00compile........ok
t/assert..........ok
t/base...........ok
[...省略部分输出...]
All tests successful,56 subtests skipped.
Files=14,Tests=551,6 wallclock secs
适用场景:持续集成、发布前的全面验证、日常构建测试。
精准执行:高效调试
$ prove t/strap*.t
使用prove命令可以只运行指定的测试文件,大幅缩短反馈周期。输出示例:
t/strap-analyze....ok
t/strap...........ok
All tests successful.
Files=2,Tests=284,1 wallclock secs
高级技巧:当测试失败时,添加-v
参数获取详细输出:
$ prove -v t/failing_test.t
真实案例:某电商平台在优化其Perl库存系统时,通过prove -v
快速定位到一个边界条件错误,将调试时间从4小时缩短到15分钟。
面试试题3:Test::More的核心武器
问题:请解释Test::More模块中use_ok()和can_ok()的区别?
解答:Test::More是Perl测试的中流砥柱,它扩展了Test::Simple的基础功能。理解这两个关键函数能显著提升测试质量:
use_ok():模块加载的守门员
use_ok('My::Module',@import_list);
作用:尝试加载指定模块并导入所需符号,相当于:
BEGIN {use My::Module @import_list;}
典型应用:
-
验证模块能否正常加载
-
检查模块版本是否符合要求
-
确保依赖项可用
失败原因:
-
模块不存在或路径错误
-
依赖项未满足
-
编译错误
can_ok():方法存在的探测器
can_ok($object_or_class,@methods);
作用:检查对象或类是否能够响应指定方法。
典型应用:
-
验证API契约
-
检查角色(Role)是否正确应用
-
确保子类实现了父类的抽象方法
失败原因:
-
方法确实不存在
-
方法名拼写错误
-
对象类型不符
关键区别:
函数 | 检查目标 | 适用阶段 | 失败常见原因 |
---|---|---|---|
use_ok() | 模块加载能力 | 初始化阶段 | 依赖缺失、语法错误 |
can_ok() | 方法存在性 | 运行时 | 接口变更、拼写错误 |
专家建议:在测试文件中,先用use_ok()验证模块加载,再用can_ok()检查关键方法,形成完整的验证链条。
5.2.2 构建你的第一个测试用例
面试试题1:测试界的"Hello World"
问题:使用Test::Simple模块中的ok()函数编写"Hello, world!"测试程序。
解答:让我们从测试界的"Hello World"开始,使用Test::Simple这个最基础的测试模块:
use strict;
use warnings;
use Test::Simple tests =>1;# 声明我们计划运行1个测试subhello_world{
return"Hello, world!";
}ok( hello_world()eq"Hello, world!",'测试hello_world返回值');
执行与输出:
$ prove hello.t
hello....ok
All tests successful.
Files=1, Tests=1, 0 wallclock secs
代码解析:
use Test::Simple tests => 1;
声明测试计划(总共1个测试)
hello_world
子程序是我们要测试的对象
ok()
是测试断言,当第一个参数为真时测试通过
-
第二个可选参数是测试描述(强烈建议始终提供)
进阶技巧:使用Test::More可以获得更丰富的断言:
use Test::More tests =>1;
is( hello_world(),"Hello, world!",'返回值应完全匹配');
常见陷阱:
-
忘记声明测试计划(tests => N)
-
测试描述过于模糊
-
忽视use strict/warnings
实际应用:某初创公司用这个简单模式在1周内为其核心模块添加了300+测试用例,将生产环境错误率降低了70%。
5.2.3 测试进阶:从简单到专业
测试计划的艺术
在测试文件开头声明测试计划是良好实践:
use Test::More tests =>42;# 确切知道数量时
# 或
use Test::More;# 稍后用done_testing()
动态测试计划:
use Test::More;
...# 若干测试
done_testing($number_of_tests);# 更灵活的方式
丰富断言库
Test::More提供多种断言:
is($got,$expected,$description);# 字符串精确匹配
is_deeply($got,$expected,$description);# 复杂数据结构匹配
like($string,qr/regex/,$description);# 正则匹配
cmp_ok($a,$op,$b,$description);# 任意比较
测试组织结构
测试分类:
subtest "数据库操作测试"=>sub{plan tests =>3;
# 相关测试...
};
夹具(Setup/Teardown):
use Test::More;
use Test::Database;my$dbh;
subsetup{
$dbh= Test::Database->connect;
}subteardown{
$dbh->disconnect;
}setup();
...# 数据库测试
teardown();
5.2.4 测试最佳实践
- 命名规范
测试文件应以.t结尾,通常放在t/目录
- 原子性
每个测试应该只验证一件事
- 独立性
测试之间不应有依赖关系
- 描述性
给每个测试清晰的描述
- 速度
保持测试快速运行(慢测试会被跳过)
- 覆盖率
使用Devel::Cover测量测试覆盖率
5.2.5 真实世界测试示例
use strict;
use warnings;
use Test::More tests =>6;
use_ok('My::App::Calculator');my$calc= My::App::Calculator->new;
isa_ok($calc,'My::App::Calculator');can_ok($calc,qw(add subtract multiply divide));subtest '加法测试'=>sub{plan tests =>3;is($calc->add(1,1),2,'1+1=2');is($calc->add(-1,1),0,'-1+1=0');is($calc->add(2.5,3.1),5.6,'小数加法');
};subtest '边界条件'=>sub{plan tests =>2;like(exception {$calc->divide(1,0)},
qr/division by zero/,
'除零异常'
);cmp_ok($calc->add(999999,1),'==',1000000,'大数处理');
};done_testing();
通过本章的学习,你已经掌握了Perl测试的基础知识。记住,良好的测试习惯需要持续实践。从今天开始,为你写的每一段Perl代码都配上测试吧!在接下来的章节中,我们将深入探讨高级测试技巧,包括模拟对象、性能测试和持续集成等主题。
相关文章:
Perl测试起步:从零到精通的完整指南
阅读原文 5.2 为什么你的Perl代码总是出问题?因为你还没开始测试! "我的代码昨天还能运行,今天就莫名其妙报错了!"、"我只是改了一个小功能,结果整个系统都崩溃了"、"这段代码不是我写的&am…...
【前端优化】vue2 webpack4项目升级webpack5,大大提升运行速度
记录一下过程 手里有个老项目,vue2webpack4 项目很大,每次运行、运行都要将近10分钟 现在又要往里面写很多东西,再不优化,开发着会更难受,所以决定先将它升级至webpack5 最初失败的尝试 直接在项目里安装了webpack5 但…...
【蓝桥杯省赛真题50】python字母比较 第十五届蓝桥杯青少组Python编程省赛真题解析
python字母比较 第十五届蓝桥杯青少年组python比赛省赛真题详细解析 博主推荐 所有考级比赛学习相关资料合集【推荐收藏】1、Python比赛 信息素养大赛Python编程挑战赛 蓝桥杯python选拔赛真题详解...
学习以任务为中心的潜动作,随地采取行动
25年5月来自香港大学、OpenDriveLab 和智元机器人的论文“Learning to Act Anywhere with Task-centric Latent Actions”。 通用机器人应该在各种环境中高效运行。然而,大多数现有方法严重依赖于扩展动作标注数据来增强其能力。因此,它们通常局限于单一…...
《数据结构初阶》【二叉树 精选9道OJ练习】
【二叉树 精选9道OJ练习】目录 前言:二叉树的OJ练习[144. 二叉树的前序遍历](https://leetcode.cn/problems/binary-tree-preorder-traversal/)题目介绍方法一:[104. 二叉树的最大深度](https://leetcode.cn/problems/maximum-depth-of-binary-tree/)题目…...
协议不兼容?Profinet转Modbus TCP网关让恒压供水系统通信0障碍
在现代工业自动化领域中,通信协议扮演着至关重要的角色。ModbusTCP和Profinet是两种广泛使用的工业通信协议,它们各自在不同的应用场合中展现出独特的优势。本文将探讨如何通过开疆智能Profinet转Modbus TCP的网关,在恒压供水系统中实现高效的…...
基于大模型预测的脑出血全流程诊疗技术方案
目录 一、系统架构设计技术架构图二、核心算法实现1. 多模态数据融合算法伪代码2. 风险预测模型实现三、关键模块流程图1. 术前风险预测流程图2. 术中决策支持流程图3. 并发症预测防控流程图四、系统集成方案1. 数据接口规范五、性能优化策略1. 推理加速方案2. 分布式训练架构六…...
掌握 LangChain 文档处理核心:Document Loaders 与 Text Splitters 全解析
🐇明明跟你说过:个人主页 🏅个人专栏:《深度探秘:AI界的007》 🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、什么是LangChain 2、LangChain 在智能应用中的作用 …...
Oracle — 总结
Oracle 公司及产品概述 公司背景 Oracle(甲骨文)是全球领先的数据库软件和服务提供商,成立于1977年,核心产品包括: Oracle Database:关系型数据库管理系统(RDBMS)。Java:…...
【Vue 3全栈实战】从响应式原理到企业级架构设计
目录 🌟 前言🏗️ 技术背景与价值🩹 当前技术痛点🛠️ 解决方案概述👥 目标读者说明 🧠 一、技术原理剖析📊 核心概念图解💡 核心作用讲解🔧 关键技术模块说明⚖️ 技术选…...
升级kafka4.0.0,无ZK版本
设备规划: 172.20.192.47 kafka-0 172.20.192.48 kafka-1 172.20.192.49 kafka-2 单机块7TB Nvme磁盘一共9块 # 格式化成GPT分区 sudo parted /dev/nvme0n1 --script mklabel gpt sudo parted /dev/nvme1n1 --script mklabel gpt sudo parted /dev/nvme2n1 --s…...
GESP2025年3月认证C++二级( 第三部分编程题(1)等差矩阵)
参考程序: #include <bits/stdc.h> using namespace std;int n, m; // 声明矩阵的行数 n 和列数 mint main() {// 输入两个正整数 n 和 mscanf("%d%d", &n, &m);// 遍历每一行for (int i 1; i < n; i)// 遍历每一列for (int j 1; j &…...
Linux系统启动相关:vmlinux、vmlinuz、zImage,和initrd 、 initramfs,以及SystemV 和 SystemD
目录 一、vmlinux、vmlinuz、zImage、bzImage、uImage 二、initrd 和 initramfs 1、initrd(Initial RAM Disk) 2、initramfs(Initial RAM Filesystem) 3、initrd vs. initramfs 对比 4. 如何查看和生成 initramfs 三、Syste…...
单序列双指针---初阶篇
目录 相向双指针 344. 反转字符串 125. 验证回文串 1750. 删除字符串两端相同字符后的最短长度 2105. 给植物浇水 II 977. 有序数组的平方 658. 找到 K 个最接近的元素 1471. 数组中的 k 个最强值 167. 两数之和 II - 输入有序数组 633. 平方数之和 2824. 统计和小于…...
K8s CoreDNS 核心知识点总结
文章目录 一、章节介绍背景与主旨核心知识点及面试频率 二、知识点详解1. CoreDNS 概述2. 工作原理(高频考点)服务发现流程 3. 配置与插件系统(高频考点)核心配置文件:Corefile常用插件 4. Pod DNS策略(中频…...
Java视频流RTMP/RTSP协议解析与实战代码
在Java中实现视频直播的输入流处理,通常需要结合网络编程、多媒体处理库以及流媒体协议(如RTMP、HLS、RTSP等)。以下是实现视频直播输入流的关键步骤和技术要点: 1. 视频直播输入流的核心组件 网络输入流:通过Socket或…...
卓力达电铸镍网:精密制造与跨领域应用的创新典范
目录 引言 一、电铸镍网的技术原理与核心特性 二、电铸镍网的跨领域应用 三、南通卓力达电铸镍网的核心优势 四、未来技术展望 引言 电铸镍网作为一种兼具高精度与高性能的金属网状材料,通过电化学沉积工艺实现复杂结构的精密成型,已成为航空航天、电…...
label-studio功能常用英文翻译
Projects 项目 Settings 设置 Labeling Interface 标注界面 1、Computer Vision 计算机视觉 Semantic Segmentation with Polygons 多边形语义分割 Semantic Segmentation with Masks 掩码语义分割 Object Detection with Bounding Boxes 边界框目标检测 Keypoint Label…...
2025年PMP 学习十六 第11章 项目风险管理 (总章)
2025年PMP 学习十六 第11章 项目风险管理 (总章) 第11章 项目风险管理 序号过程过程组1规划风险管理规划2识别风险规划3实施定性风险分析规划4实施定量风险分析规划5规划风险应对执行6实施风险应对执行7监控风险监控 目标: 提高项目中积极事件的概率和…...
Jenkins 执行器(Executor)如何调整限制?
目录 现象原因解决 现象 Jenkins 构建时,提示如下: 此刻的心情正如上图中的小老头,火冒三丈,但是不要急,因为每一次错误,都是系统中某个环节在说‘我撑不住了’。 原因 其实是上图的提示表示 Jenkins 当…...
Jenkins 安装与配置指南
Jenkins 安装与配置指南(MD 示例) markdown Jenkins 安装与配置指南 ## 一、环境准备 1. **系统要求** - 操作系统:Linux/macOS/Windows - Java 版本:JDK 8 或更高(建议 JDK 11)2. **安装方式** - **L…...
使用unsloth对Qwen3在本地进行微调
Fine-tune Qwen3(100% locally) 使用unsloth进行微调,使用huggingface在本地运行model。 load model from unsloth import FastLanguageModel import torchMODEL = "unsloth/Qwen3-14B" model,tokenizer = FastLanguageModel.from_pretrained(model_name=MODE…...
GpuGeek 实操指南:So-VITS-SVC 语音合成与 Stable Diffusion 文生图双模型搭建,融合即梦 AI 的深度实践
GpuGeek 实操指南:So-VITS-SVC 语音合成与 Stable Diffusion 文生图双模型搭建,融合即梦 AI 的深度实践 前言 本文将详细讲解 So-VITS-SVC 语音合成与 Stable Diffusion 文生图的搭建方法,以及二者与即梦 AI 融合的实践技巧,无论你…...
CSS- 3.1 盒子模型-块级元素、行内元素、行内块级元素和display属性
本系列可作为前端学习系列的笔记,代码的运行环境是在HBuilder中,小编会将代码复制下来,大家复制下来就可以练习了,方便大家学习。 HTML系列文章 已经收录在前端专栏,有需要的宝宝们可以点击前端专栏查看! 点…...
使用exceljs将excel文件转化为html预览最佳实践(完整源码)
前言 在企业应用中,我们时常会遇到需要上传并展示 Excel 文件的需求,以实现文件内容的在线预览。经过一番探索与尝试,笔者最终借助 exceljs 这一库成功实现了该功能。本文将以 Vue 3 为例,演示如何实现该功能,代码示例…...
7. 进程控制-进程替换
目录 1. 进程替换 1.1 单进程版: 1.2 进程替换的原理 1.3 多进程版-验证各种程序替换接口 2. 进程替换的各种接口 2.1 execl 2.2 execlp 2.3 execv 2.4 execvp 2.5 execle 1. 进程替换 上图为程序替换的接口,之后会详细介绍。 1.1 单进程版&am…...
关于计算机系统和数据原子性的联系
目录 1、计算机架构 1.1、处理器架构 1.2、内存寻址能力 1.3、性能差异 1.4、软件兼容性 1.5、指令集 1.6、开发和维护 2.、基本数据类型 3、原子类型 3.1、基本概念 3.2、基本数据类型的原子性 3.3、原子操作的解释 3.4、不保证原子性 3.5、解决方案 4、原子性…...
Armijo rule
非精线搜索步长规则Armijo规则&Goldstein规则&Wolfe规则_armijo rule-CSDN博客 [原创]用“人话”解释不精确线搜索中的Armijo-Goldstein准则及Wolfe-Powell准则 – 编码无悔 / Intent & Focused...
从数据包到可靠性:UDP/TCP协议的工作原理分析
之前我们已经使用udp/tcp的相关接口写了一些简单的客户端与服务端代码。也了解了协议是什么,包括自定义协议和知名协议比如http/https和ssh等。现在我们再回到传输层,对udp和tcp这两传输层巨头协议做更深一步的分析。 一.UDP UDP相关内容很简单…...
Prometheus实战教程:k8s平台-Mysql监控案例
配置文件优化后的 Prometheus 自动发现 MySQL 实例的完整 YAML 文件。该配置包括: MySQL Exporter 部署:使用 ConfigMap 提供 MySQL 连接信息。Prometheus 自动发现:通过 Kubernetes 服务发现自动抓取 MySQL 实例。 1、mysql 配置文件 &…...
执行apt-get update 报错ModuleNotFoundError: No module named ‘apt_pkg‘的解决方案汇总
Ubuntu版本ubuntu18.04 报错内容: //执行apt-get upgrade报错: Traceback :File “/usr/lib/cnf-update-db”, line 8, in <module>from CommandNotFound.db.creator import DbcreatorFile “/usr/lib/python3/dist-packages/CommandNotFound/db…...
QT6 源(101)篇一:阅读与注释 QPlainTextEdit,其继承于QAbstractScrollArea,属性学习与测试
(1) (2) (3)属性学习与测试 : (4) (5) 谢谢...
Redis(2):Redis + Lua为什么可以实现原子性
Redis 作为一款高性能的键值对存储数据库,与 Lua 脚本相结合,为实现原子性操作提供了强大的解决方案,本文将深入探讨 Redis Lua 实现原子性的相关知识 原子性概念的厘清 在探讨 Redis Lua 的原子性之前,我们需要明确原子性的概念…...
ios打包ipa获取证书和打包创建经验分享
在云打包或本地打包ios应用,打包成ipa格式的app文件的过程中,私钥证书和profile文件是必须的。 其实打包的过程并不难,因为像hbuilderx这些打包工具,只要你输入的是正确的证书,打包就肯定会成功。因此,证书…...
Python生成器:高效处理大数据的秘密武器
生成器概述 生成器是 Python 中的一种特殊迭代器,通过普通函数的语法实现,但使用 yield 语句返回数据。生成器自动实现了 __iter__() 和 __next__() 方法,因此可以直接用于迭代。生成器的核心特点是延迟计算(lazy evaluation&…...
C++11(2)
文章目录 右值引用和移动语义在传参中的提效list容器push_back & insert右值版本的模拟实现类型分类 (了解即可)引用折叠万能引用 完美转发(跟引用折叠有关) 简介:这篇文章是继续介绍C11的一些新语法知识点,也是对…...
unity terrain 在生成草,树,石头等地形障碍的时候,无法触发碰撞导致人物穿过模型
1.terrain地形的草,石头之类要选择模型预制体 2.在人物身上挂碰撞器和刚体,或者单挂一个character controller组件也行 3.在预制体上挂碰撞盒就好了,挂载meshcollider会导致碰撞无效...
以项目的方式学QT开发C++(二)——超详细讲解(120000多字详细讲解,涵盖qt大量知识)逐步更新!
API 描述 函数原型 参数说明 push_back() 在 list 尾部 添加一个元素 void push_back(const T& value); value :要添 加到尾部的元 素 这个示例演示了如何创建 std::list 容器,并对其进行插入、删除和迭代操作。在实际应用中&am…...
养生:健康生活的极简攻略
在追求高效生活的当下,养生也能化繁为简。通过饮食、运动、睡眠与心态的精准调节,就能轻松为健康续航。 饮食上,遵循 “均衡、节制” 原则。早餐用一杯热豆浆搭配水煮蛋和半个苹果,唤醒肠胃活力;午餐以糙米饭为主食&am…...
C语言-8.数组
8.1数组 8.1.1初试数组 如何写一个程序计算用户输入的数字的平均数? #include<stdio.h> int main() {int digit;//输入要求平均数的数字double sum=0;//记录输入数字的和int count=0;//记录输入数字的个数printf("请输入一组数字,用来求平均数,以-1结束\n&quo…...
代码随想录算法训练营第四十一天
LeetCode题目: 739. 每日温度496. 下一个更大元素 I503. 下一个更大元素 II 其他: 今日总结 往期打卡 739. 每日温度 跳转: 739. 每日温度 学习: 代码随想录公开讲解 问题: 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer &…...
c++,windows,多线程编程详细介绍
目录 一、C11 标准库 <thread> 实现多线程编程1. 基本线程创建2. 线程管理3. 线程传参4. 同步机制5. 异步编程 二、Windows API 实现多线程编程1. 基本线程创建2. 线程管理3. 线程传参 三、两种方法的对比 在 Windows 平台上使用 C 进行多线程编程,可以通过 C…...
Python多线程
Python多线程 作为一名Python开发者,你是否遇到过这样的场景:程序需要同时处理多个任务,但单线程执行效率太低?这时候,多线程技术就能派上用场了。本文将带你深入浅出地理解Python多线程,并通过丰富的示例…...
VisionPro斑点寻找工具Blob
斑点寻找工具Blob 斑点概述 斑点分析 探测并且分析图像中的二维形状Blob是先根据用户设定好的灰阶范围对图像进行分割,然后对目标进行查找和分析。斑点报告多种属性: 面积质心周长主轴…….. 应用场景 Blob分析非常适合以下场合的应用: 对…...
【Python】【面试凉经】Fastapi为什么Fast
核心的关键词:ASGI、原生异步、协程、uvloop、异步生态、Pydantic编译时生成校验代码、DI system预计算依赖树 interviewer 00:32:49 FastAPI 它优越于其他一些主流web框架像 django或 flask 的这个点在哪里? 我 00:33:00fastapi 就是说它的 fast 性能高…...
LocalDateTime类型的时间在前端页面不显示或者修改数据时因为LocalDateTime导致无法修改,解决方案
1.数据库中的时间数据,在控制台可以正常返回,在前端无法返回,即显示空白,如下图所示: 2.这种问题一般时由于数据库和我们实体类的名称不一致引起的,我们数据库一般采用_的方式命名,但是在Java中我们一般采用…...
【Linux】gcc从源码编译安装,修改源码,验证修改的源码
前阵子电脑使用的win10,win10过几天就让升级,烦得不行。 然后把操作系统切换到ubuntu24的样子,然后也是让升级,又烦的不行,然后切换到ubuntu server版本,感觉用起来要舒服些了,至少不会天天让升级。 回到标…...
牛客网NC22157:牛牛学数列2
牛客网NC22157:牛牛学数列2 📝 题目描述 🔍 输入输出说明 输入描述: 输入一个整数 N,范围在 0 到 1000 输出描述: 输出一个保留6位小数的浮点数 示例: 输入:2输出:1.500000 …...
智能手表集成测试报告(Integration Test Report)
📄 智能手表集成测试报告(Integration Test Report) 项目名称:Aurora Watch S1 测试阶段:系统集成测试 测试周期:2025年xx月xx日 – 2025年xx月xx日 报告编号:AW-S1-ITR-2025-001 版本…...
1C:ENTERPRISE 8.3 实用开发者指南-示例和标准技术(Session1-Session3)
1C:ENTERPRISE 8.3(1课-3课) 本博客是全网首个关于1C:Enterprice的中文指南,支持快速吸收使用 1C:Enterprise 8.3 软件开发和调整应用程序的技术 在这篇博客中我会基于实际应用示例,演示各种系统对象的结构、功能和用法。使用内…...