『 测试 』测试基础
文章目录
- 1. 调试与测试的区别
- 2. 开发过程中的需求
- 3. 开发模型
- 3.1 软件的生命周期
- 3.2 瀑布模型
- 3.2.1 瀑布模型的特点/缺点
- 3.3 螺旋模型
- 3.3.1 螺旋模型的特点/缺点
- 3.4 增量模型与迭代模型
- 3.5 敏捷模型
- 3.5.1 Scrum模型
- 3.5.2 敏捷模型中的测试
- 4 测试模型
- 4.1 V模型
- 4.2 W模型(双V模型)
1. 调试与测试的区别
调试与测试两词只有一字之差, 但两者目的并不相同, 调试的目的在于发现并解决问题, 而测试的目的在于发现问题;
-
权限
通常在
gitee
等代码仓库中都具有权限管理, 而一般测试人员只有读权限, 没有写权限, 因此测试人员只能读, 不能写; -
参与角色
测试与调试的人员角色也不同, 通常大部分情况, 调试由开发人员进行, 而测试通常由测试人员进行;
测试人员的主要工作职责是为了保障产品质量, 但产品质量并不只由测试人员保障, 产品质量由整个项目组(产品经理, 前/后端开发, 测试, 交互, 设计…)共同保障;
-
阶段
测试与调试的阶段也不同, 调试通常只在开发阶段进行, 而测试需要贯穿项目(软件)的整个生命周期;
测试人员通常是产品质量最后的把关者;
2. 开发过程中的需求
开发过程中一般分为两种需求, 分别为用户需求与软件需求;
-
用户需求
一般用户需求指甲方或是终端用户使用产品时必须要完成的任务, 通常用户需求较为简单;
如:
- 用户可以随时查看商品库存量
-
软件需求
软件需求通常是用户需求转化而来, 通常是技术化的描述;
如:
- 系统需为管理员提供实时库存量查询接口, 响应时间
<=1s
;
- 系统需为管理员提供实时库存量查询接口, 响应时间
总而言之用户需求是用户(甲方/客户)以自然语言提出, 反映业务目标和使用场景的, 而软件需求是由开发团队通过分析用户需求转化而来, 更加表现为技术化的描述;
用户需求与软件需求的表现形式不同, 通常用户需求以业务视角描述, 可能存在模糊性和主观性, 通常情况下, 用户需求不会第一时间就被解决, 而是需要对用户需求进行评估, 分析, 细化等过程转化为对应的软件需求才能着手被解决;
软件需求通常使用结构化文档, 如例图, User Story
, SRS
文档等进行描述;
用户需求 | 软件需求 |
---|---|
口头描述, 邮件/会议记录, 业务流程图 | 功能需求, 非功能需求, 数据模型 |
其次用户需求更关注高层次需求, 如"做什么", 不涉及实现方式;
而软件需求明确"怎么做", 需具备技术实现细节;
用户需求典型问题 | 软件需求典型问题 |
---|---|
- 表述模糊(如"更方便") - 隐性需求未明示 - 不同用户需求冲突 | - 技术要求不完整(如缺少性能指标) - 需求不可测试(如"代码要优雅") - 技术可行性判断失误 |
-
简要软件需求文档示例(实现用户注册功能)
1.1.1.1 注册账号
1.1.1.1.1 功能概述
1.1.1.1.1.1 匿名用户通过邮箱注册账户,需激活后登录。
1.1.1.1.2 输入规则
1.1.1.1.3 处理规则字段名称 必填性 长度/位数 格式要求 附加规则 姓名 必填 6~15字符 汉字/字母/空格 - 邮箱 必填 - 标准邮箱格式 格式错误时提示 密码 必填 6~15字符 字母+数字组合 两次输入不一致时提示 验证码 必填 6位数字 纯数字 邮箱发送,有效期5分钟 1.1.1.1.3.1 用户同意协议后填写信息,提交时校验字段合法性:
1.1.1.1.3.1.1 校验失败:高亮错误字段并提示原因。
1.1.1.1.3.1.2 校验成功:发送含24小时有效激活链接的邮件。1.1.1.1.4 异常规则
1.1.1.1.4.1 未收到激活邮件:登录界面可重新发送,每邮件限24小时有效。1.1.1.1.5 数据规则
1.1.1.1.5.1 存储表user_account
,含user_id
(自增主键)、email
(唯一)、is_activated
(默认false)。
1.1.1.1.5.2 密码SHA-256加盐存储,激活链接含一次性Token。1.1.1.1.6 后置条件
1.1.1.1.6.1 未激活账户禁止登录及操作系统功能。
需要明确一点的是并不是所有的用户需求都是合理的, 因此用户需求才需要经过评估, 分析等过程转化为软件需求;
用户需求不能直接作为开发和测试的依据, 针对用户需求, 产品经历需要进行需求分析(技术可行性, 市场可行性, 成本投入和收益占比等)后才可转变为软件需求;
3. 开发模型
3.1 软件的生命周期
实际上软件的生命周期就是软件的开发模型;
软件生命周期是指软件从规划, 需求分析, 设计, 开发, 测试, 部署, 维护到最终退役的完整过程, 是软件开发的全流程框架, 覆盖软件"从生到死"的各个阶段;
常见的几种开发模型有: 瀑布模型, 敏捷模型, 螺旋模型…
-
瀑布模型生命周期(严格线性, 不可逆)
需求分析 -> 设计 -> 编码 -> 测试 -> 维护
-
敏捷模型生命周期(持续迭代)
需求 -> 开发 -> 测试 -> 交付 -> 反馈 -> 新需求
-
螺旋模型生命周期(强调风险管理)
计划 -> 风险分析 -> 开发 -> 评估 -> 下一轮循环
假设存在一个用户需求为"邮箱注册功能", 其生命周期大概为如下:
-
计划
- 目标:明确功能范围和用户场景。
用户通过邮箱注册账号(必填项)。
需验证邮箱有效性(发送验证链接或验证码)。
防止重复注册或恶意注册(如频率限制、CAPTCHA)。
- 目标:明确功能范围和用户场景。
-
需求分析
- 功能定义:
邮箱注册为核心流程,需覆盖验证、防重复、安全防护。
非功能需求:邮件送达率 > 95%,响应时间 < 2秒。
- 功能定义:
-
设计
- 前端设计:
注册页面布局(邮箱输入框、验证码/验证链接触发按钮)。
错误提示(邮箱格式错误、重复注册、验证码超时)。 - 后端设计:
邮箱格式校验(正则表达式)。
验证邮件/短信服务集成(如SMTP、第三方API)。
数据库设计(存储邮箱、密码哈希、验证状态)。
- 前端设计:
-
编码
- 前端开发:
实现表单提交逻辑,绑定邮箱验证接口。
处理验证成功/失败的交互反馈。 - 后端开发:
实现邮箱验证码生成、存储(Redis缓存)。
邮件发送服务调用(异步队列)。
用户信息加密存储(如bcrypt哈希密码)。
- 前端开发:
-
测试
- 功能测试:
正常流程:输入有效邮箱 → 接收验证邮件 → 激活账号。
异常流程:无效邮箱格式、重复注册、验证码过期/错误。 - 安全测试:
SQL注入、XSS攻击防御。
验证码防爆破(限流策略)。 - 部署验证:
灰度发布:先小范围开放注册功能,监控异常。
配置生产环境:邮件服务参数、数据库连接、日志监控。
- 功能测试:
-
运行维护
- 修复性维护
- 完善性维护
- 预防性维护
-
退役
- 替代方案:
逐步迁移用户至新注册方式(如手机号登录)。 - 数据清理:
标记废弃邮箱账号,归档或删除历史数据。
- 替代方案:
不同企业对不同的软件的生命周期的框架不同, 如可能针对软件特定的特色功能在不同的阶段将会有不同的差异;
3.2 瀑布模型
瀑布模型是最早提出的软件生命周期模型, 其特点是:
- 每个流程只执行一次
- 线性的开发流程
3.2.1 瀑布模型的特点/缺点
瀑布模型最大的缺点在于一个可以运行的产品很迟才能被看到;
假设一个非常简单的用户需求被提出, 那么在上述过程, 包括"问题定义, 问题可行性…"等过程的阶段时间都很短, 上线过程也会比较快;
但若是出现一个非常复杂的用户需求被提出时, 对应的各个过程的时间开销将被延长, 因此可能当前较为流行的功能或者板块在长时间未上线后在对应功能板块不再流行时上线, 对应的资源开销将会贬值(没有收益/收益太低);
同时瀑布模型还有一个缺点就是, 由于所有流程只执行一次并且是线性执行, 因此如果在开发过程当中某个流程出现了问题后将需要向前追溯, 如测试人员在测试阶段发现问题需要反馈给编码对应人员, 开发人员认为没有问题将会继续向前追溯(设计), 以此类推, 这意味追溯甚至可能一直到源头, 即重新从问题定义, 即瀑布模型的源头, 否则如果出现问题并未解决的问题将暴露给用户, 将会降低用户的使用体验;
优点/特点 | 缺点 |
---|---|
- 强调开发的阶段性 - 线性结构, 每个阶段只执行一次 - 是其他模型的基础框架 | 1. 测试后置: - 各阶段的遗留风险推迟到测试阶段才被发现, 导致大面积返工, 失去及早修复的机会 - 必须留有足够的时间给测试, 否则导致测试不充分, 将缺陷直接暴露给用户(产品质量差) 2. 周期太长, 产品可能在需求/功能过时时才被看到和使用 |
瀑布模型的适用场景一般是需求固定的小型项目, 一般不适用于规模庞大, 复杂度高, 风险大的项目;
3.3 螺旋模型
螺旋开发模型的适用场景通常是一些规模庞大, 复杂度高, 风险大的项目;
螺旋模型是基于瀑布模型进行修改的模型, 将螺旋模型进行展开后得到的是一个类似于瀑布模型的"迭代式瀑布模型";
螺旋模型与瀑布模型最大的差别就在于螺旋模型在各阶段都引入了风险分析;
同时螺旋模型还引入了原型, 其中原型在螺旋模型中属于风险缓解工具, 主要用于验证关键技术的可行性与确认需求理解一致性, 原型通常不进入生产代码, 其生命周期仅限于当前迭代, 若原型验证失败, 触发的则是风险对应策略;
每个阶段均以 计划 -> 风险分析 -> 原型开发 -> 用户评估 的顺序进行;
3.3.1 螺旋模型的特点/缺点
螺旋模型引入了风险分析和原型, 其目的是减少各阶段遗留的风险问题, 避免把问题留到后面的阶段;
螺旋模型同样具有缺点, 对一个项目而言, 使用了螺旋模型进行开发, 那么意味着项目组需要存在对应的风险分析人员来进行风险分析;
各阶段是否遗留问题取决于风险分析人员, 该项与风险分析人员的技术能力直接挂钩;
优点/特点 | 缺点 |
---|---|
- 强调严格的全过程分析管理 - 强调各开发阶段的质量 - 增加风险分析和原型 | - 项目中可能存在的风险性与风险管理人员的技能水平有直接关系 - 需求人员, 资金, 时间的增加和投入可能会导致项目成本提高 |
3.4 增量模型与迭代模型
-
增量模型
当存在一个需求时, 增量模型旨在将大需求拆分成若干个小需求, 将每个小需求独立开发上线;
增量模型的每个增量都是一个完整的功能子集, 按照顺序开发并逐步集中到系统中;
-
迭代模型
相比于增量模型而言, 迭代模型同样会将一个需求细化为几个小需求, 随后对小需求进行基本实现, 随后进行上线, 通过由抽象逐步细化实施将抽象转化为具象, 不断优化;
迭代模型中的每一次迭代都可以是一个可运行的版本, 逐步优化功能和设计;
通常情况下迭代模型和增量模型会在一个项目的开发中配合使用;
迭代模型和增量模型的适用场景通常为大型项目, 且需求不明确的场景;
3.5 敏捷模型
敏捷模型又被成为增量开发迭代模型;
目前的开发人员在使用迭代瀑布模型来进行软件开发时将面临各种问题, 主要的困难包括在项目开发期间处理来自客户的变更请求以及合并这些变更所需的高成本时间, 而敏捷模型主要来解决这种问题;
虽然上述的螺旋模型中可以有效的避免问题的遗留, 但在开发过程中, 一款产品的功能是在不断变化的, 螺旋模型只能避免在计划过程中的问题遗留, 但无法避免用户/甲方的需求变更;
相比长期计划而言, 敏捷模型更强调灵活性和适应性, 相对其他模型而言, 敏捷模型是较为弹性的;
敏捷模型的主要目的是促进项目的快速完成;
通常情况下在敏捷模型中, 需求将被分节为许多可以增量开发的小部分, 敏捷模型采用迭代开发, 每次的迭代都旨在小而易于管理;
一次为客户计划, 开发和部署一个迭代, 通常不制定长期计划, 同时没有固定的风险分析阶段;
-
在敏捷模型中有一个非常重要的《敏捷宣言》, 其内容为:
-
“个体与交互重于过程和工具”
即团队成员的沟通与合作比讲话的流程和工具更为重要, 强调高效的沟通;
-
“可用的软件重于完备的文档”
即优先交付实际可运行的软件, 而非追求完美的文档, 强调轻文档;
-
“客户协作重于合同谈判”
即与客户持续合作, 而非通过合同条款固定需求, 主动及时了解当下的需求;
-
“响应变化重于遵循计划”
即灵活适应需求变化, 而非死守原始计划, 能主动迎接变化;
敏捷宣言强调人本, 实用, 协作, 灵活;
目标是快速交付价值并适应变化;
即轻文档, 轻流程, 重目标, 重产出;
-
3.5.1 Scrum模型
Scrum模型是敏捷模型中的一种, 其中Scrum中, 主要由三类角色和五个重要会议组成;
-
三类角色
三类角色分别为产品经理(Product Owner), 项目经理(Scrum Master)以及研发团队(Team)组成;
-
产品经理(Product Owner)
产品经理通常负责整理User Story, 定义其商业价值, 对其进行排序, 制定发布计划并对产品负责;
即收集需求, 产出软件需求文档;
-
项目经理(Scrum Master)
项目经理负责召开各种会议, 协调项目, 为研发团队服务;
-
研发团队(Team)
研发团队则由不同技能的组员组成, 通过紧密协同, 完成每一次迭代的目标并交付产品;
-
与瀑布模型不同, Scrum模型将会把产品开发分节为若干个小迭代(Sprint), 其中每个小迭代周期为一周到四周不等, 但通常不会超过四周, 参与的团队成员通常是5-9人, 每期迭代要完成的User Story是固定的, 每次迭代完成后都会进行向上交付(重目标, 重交付), 而通常瀑布模型需要集所有人的能力进行开发;
在 Scrum 模型的流程中, 主要围绕五个会议(事件), 分别为发布计划会议, 迭代计划会议, 每日例会, 演示会议, 回顾会议;
-
发布计划会议(Release Planning Meeting)
通常情况下, 在发布会议中, 产品经理需要负责讲解User Story, 对其进行估算和排序, 发布计划会议产出就是制定出这一期迭代要完成的Story列表, 即Sprint Backlog;
-
目的
确定产品发布的长期目标和范围, 规划多个Sprint(迭代)的总体方向;
-
参与者
产品经理, 项目经理, 开发团队和关键利益相关者;
-
关键内容
- 梳理产品代办列表(Product Backlog)并确定优先级
- 估算整体时间框架和资源需求
- 制定发布路线图
-
-
迭代计划会议(Sprint Planning Meeting)
该会议中项目团队将要对每一个Story进行任务分解, 分解的标准是完成该Story的所有任务, 每个任务都有明确的负责人, 并完成工时的初估计;
-
目的
为单个Sprint制定详细任务目标并明确交付内容;
-
参与者
产品经理, 项目经理, 开发团队
-
关键内容
- 从产品代办列表中选取本Sprint要完成的高优先级需求
- 将需求拆解为具体的开发任务 (Sprint Backlog)
- 估算任务工作量并分配职责
-
-
每日例会(Sprint Planning Meeting)
每天项目经理将会召集站立会议, 团队成员回答昨天做了什么, 今天计划做什么, 有什么问题;
-
目的
同步团队进度, 快速识别障碍, 确保Sprint目标顺利推进;
-
参与者
开发团队, 项目经理(主持)
-
关键内容(每人回答三个问题)
-
昨天完成了什么
明确知道每个人的进度;
-
今天计划做什么
今日的目标和计划;
-
遇到了什么阻碍
及时解决问题能够保证产品在规定的迭代周期内正常交付;
-
-
-
演示会议(Sprint Review Meeting)
迭代结束后, 召开演示会议, 相关人员受邀参加, 团队负责向大家展示本次迭代取得的成果, 期间大家的反馈记录下来, 由产品经理整理, 形成新的Story;
-
目的
向客户或利益相关者展示Sprint成果, 收集反馈;
-
参与者
产品负责人, 开发团队, Scrum Master, 客户/用户代表;
-
关键内容
- 演示可运行的增量功能
- 讨论反馈并调整后续需求优先级
-
-
回顾会议(Sprint Retrospective Meeting)
回顾上一次迭代流程中的问题, 不断优化;
-
目的
总结Sprint的优缺点, 持续改进团队协作和流程;
-
参与者
开发团队, 产品经理, 项目经理
-
关键内容
- 讨论"哪些做得好", “哪些需要改进”, “下一步行动”
- 制定具体的改进措施
-
会议 | 核心作用 | 关键产出 |
---|---|---|
发布计划会议 | 明确长期目标与路线图 | 发布计划, 优先级排序 |
迭代计划会议 | 制定短期任务清单 | Sprint目标, Sprint Backlog |
每日例会(站会) | 同步进展与解决问题 | 每日任务清单, 障碍解决方案 |
演示会议 | 交付成果并获取反馈 | 可运行增量, 需求调整方向 |
回顾会议 | 优化团队协作与流程 | 改进措施清单(如流程调整) |
3.5.2 敏捷模型中的测试
敏捷模型中的测试主要要求轻文档和快速迭代;
-
快速迭代
在敏捷模型中的测试需要进行快速迭代, 如在测试过程中的测试用例的迭代速度要快, 需要及时发生变化, 且测试用例要尽可能完整的去写一确保全面, 确保不会将问题暴露给用户;
-
轻文档
测试人员在测试过程中通常需要撰写多种文档, 包括但不限于测试用例, 测试计划文档, 测试报告等;
在敏捷开发模型过程中, 测试人员不应该使用传统的Excel编写测试用例的方法, 更多的是需要使用类似于思维导图, 探索性测试(强调自由度, 设计和执行同时进行, 根据测试结果不断调整测试计划), 自动化测试等;
在敏捷开发模型过程中, 测试人员应该多主动和开发人员了解需求, 讨论设计, 研究Bug出现的原因;
4 测试模型
下文中出现的两个模型, 即V模型和W模型本质上也是开发模型, 被称作测试模型的原因在于下列两个模型更加注重测试, 因此被称作测试模型;
4.1 V模型
在V模型中, 明确标注了测试过程中存在不同类型的测试;
其中每一阶段的测试都需要参考之前的设计或者需求, 如单元测试需要参考详细设计, 集成测试需要参考概要设计, 系统测试需要参考需求分析与系统, 验收测试需要参考用户需求;
-
通常在V模型中不同的测试阶段由不同的人员进行
-
单元测试
一般由开发人员进行测试, 如一个类或是一个函数;
-
集成测试
由开发人员与测试工程师完成, 其中开发人员主导, 测试人员辅助;
-
系统测试
由测试工程师完成;
-
验收测试
验收测试通常由客户或业务代表(最终用户, 产品经理)进行;
-
同时, V模型同样存在缺点, 最大的缺点是V模型仅仅把测试作为在编码之后的一个阶段, 未在需求阶段就介入测试;
这个缺点与瀑布模型有异曲同工之处, 主要为当在测试过程中某处出现问题需要回溯返工, 以造成过大的时间开销;
4.2 W模型(双V模型)
W模型本质上是在V模型上进行了优化;
W模型将测试贯穿于软件的生命周期;
W模型也被称为双V测试, 其中本质是在该测试模型中存在了两个V, 分别为开发与测试两个过程;
其中开发V模型并不单单指编码阶段, 而是为产品开发流程而实施的各个阶段;
在W模型中, 开发与测试两个过程基本上属于并行阶段;
但同样的W模型也具有缺点, 其主要的缺点为如下:
- 需求, 设计, 编码等活动被视为串行的;
- 测试和开发活动页保持着一种线性的前后关系, 上一阶段完全结束下一阶段才能开始进行工作;
- 重流程, 无法支持敏捷开发模式, 对当前软件开发复杂多变的需求面临着困惑;
相关文章:
『 测试 』测试基础
文章目录 1. 调试与测试的区别2. 开发过程中的需求3. 开发模型3.1 软件的生命周期3.2 瀑布模型3.2.1 瀑布模型的特点/缺点 3.3 螺旋模型3.3.1 螺旋模型的特点/缺点 3.4 增量模型与迭代模型3.5 敏捷模型3.5.1 Scrum模型3.5.2 敏捷模型中的测试 4 测试模型4.1 V模型4.2 W模型(双V…...
Pandas 时间处理利器:to_datetime() 与 Timestamp() 深度解析
Pandas 时间处理利器:to_datetime() 与 Timestamp() 深度解析 在数据分析和处理中,时间序列数据扮演着至关重要的角色。Pandas 库凭借其强大的时间序列处理能力,成为 Python 数据分析领域的佼佼者。其中,to_datetime() 函数和 Ti…...
支持向量机的回归用法详解
支持向量机的回归用法详解 在机器学习的广阔领域中,支持向量机(SVM)是一种极具影响力的算法,它不仅在分类任务上表现出色,在回归任务中同样有着独特的应用价值。本文将深入探讨 SVM 的回归用法,包括其基本…...
计算机基础
今天不和大家分享算法了,最近为什么一直分享算法题,一个是因为最近很忙加上状态不太在线,第二个是因为我报了ICPC的比赛,也就是大学生程序设计大赛,所以平时刷算法比较多一些,虽然说结果上也没有很多的收获…...
用C语言实现的——一个支持完整增删查改功能的二叉排序树BST管理系统,通过控制台实现用户与数据结构的交互操作。
一、知识回顾 二叉排序树(Binary Search Tree,BST),又称二叉查找树或二叉搜索树,是一种特殊的二叉树数据结构。 基本性质: ①有序性 对于树中的每个节点,其左子树中所有节点的值都小于该节点的…...
uniapp-商城-53-后台 商家信息(更新修改和深浅copy)
1、概述 文章主要讨论了在数据库管理中如何处理用户上传和修改商家信息的问题,特别是通过深浅拷贝技术来确保数据更新的准确性和安全性。 首先,解释了深拷贝和浅拷贝的区别:浅拷贝使得两个变量共享相同的内存地址,而深拷贝则创建新…...
vue数据可视化开发echarts等组件、插件的使用及建议-浅看一下就行
在 Vue 项目中使用 ECharts 进行数据可视化开发时,可以结合 Vue 的响应式特性和 ECharts 的强大功能,实现动态、交互式的图表展示。 一、ECharts 基础使用 1. 安装 ECharts npm install echarts2. 在 Vue 组件中使用 ECharts <template><div…...
百度AI战略解析:文心一言与自动驾驶的双轮驱动
百度AI战略解析:文心一言与自动驾驶的双轮驱动 系统化学习人工智能网站(收藏):https://www.captainbed.cn/flu 文章目录 百度AI战略解析:文心一言与自动驾驶的双轮驱动摘要引言一、技术架构:大模型与自动…...
MCP Streamable HTTP 传输层的深度解析及实战分析
一、Streamable HTTP 传输层设计革新 1. 核心设计思想 协议融合:将 HTTP/1.1、HTTP/2 与 SSE 协议特性深度整合动态协商:通过 HTTP Header 实现传输协议动态协商(X-MCP-Transport)流式优先:默认启用流式传输,支持半双工通信背压控制:基于 HTTP/2 流级流量控制实现智能速…...
六大设计模式--OCP(开闭原则):构建可扩展软件的基石
写在前面:一个真实的项目悲剧 某电商平台促销功能每次迭代都需要修改核心订单类,导致: ✅ 双十一活动修改导致支付功能崩溃 ✅ 新人优惠引发会员系统连环故障 ✅ 每次发布需全量回归测试 根本原因:系统架构违反开闭原则 一、开闭…...
ActiveMQ 生产环境问题排查与调优指南(一)
一、引言 在当今复杂的分布式系统架构中,消息中间件扮演着至关重要的角色,而 ActiveMQ 作为一款广泛使用的开源消息中间件,凭借其丰富的特性、良好的稳定性和易用性,在众多企业的生产环境中占据了一席之地。它基于 JMS(…...
深入理解 JavaScript 中的 FileReader API:从理论到实践
文章目录 深入理解 JavaScript 中的 FileReader API:从理论到实践前言什么是 FileReader?核心特性 FileReader 的常用方法事件监听实际案例案例 1:读取文本文件内容案例 2:图片预览(Data URL)案例 3&#x…...
Google LLM prompt engineering(谷歌提示词工程指南)
文章目录 基本概念AI输出配置:调整AI的回答方式输出长度温度(Temperature)Top-K和Top-P 提示技术:让AI更好地理解你零样本提示(Zero-shot)少样本提示(Few-shot)系统提示(…...
前端npm包发布流程:从准备到上线的完整指南
无论是使用第三方库还是创建和分享自己的工具,npm都为我们提供了一个强大而便捷的平台,然而很多开发者在将自己的代码发布到npm上时往往面临各种困惑和挑战,本篇文章将从准备工作到发布上线,探讨如何让npm包更易发布及避免常见的坑…...
【MySQL】表空间结构 - 从何为表空间到段页详解
📢博客主页:https://blog.csdn.net/2301_779549673 📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! &…...
OB Cloud 云数据库V4.3:SQL +AI全新体验
OB Cloud 云数据库V4.3:SQL AI全新体验 简介 OB Cloud云数据库全新升级至V4.3版本,为用户带来了SQLAI的最新技术体验,强化数据库的传统功能,深度融合了人工智能技术,引入先进的向量检索功能和优化的SQL引擎,…...
【Linux系统】第四节—详解yum+vim
hello 我是云边有个稻草人 Linux—本节课所属专栏—欢迎订阅—持续更新中~ 目录 画板—本节课知识点详解 一、软件包管理器 1.1 什么是软件包 1.2 Linux软件⽣态 1.3 yum具体操作 【查看软件包】 【安装软件】 【卸载软件】 【注意事项】 1.4 安装源 二、vim 2.1 …...
Git的核心作用详解
一、版本控制与历史追溯 Git作为分布式版本控制系统,其核心作用是记录代码的每一次修改,形成完整的历史记录。通过快照机制,Git会保存每次提交时所有文件的完整状态(而非仅记录差异),确保开发者可以随时回…...
Three.js + React 实战系列 - 职业经历区实现解析 Experience 组件✨(互动动作 + 3D 角色 + 点击切换动画)
对个人主页设计和实现感兴趣的朋友可以订阅我的专栏哦!!谢谢大家!!! 在这篇博客中,我们将分析一个极其有趣和互动性的组件 - Experience.jsx,该组件用于在主页中呈现个人的工作经历。 这个组件…...
3D虚拟工厂vue3+three.js
1、在线体验 3D虚拟工厂在线体验 2、功能介绍 1. 全屏显示功能2. 镜头重置功能3. 企业概况信息模块4. 标签隐藏/显示功能5. 模型自动旋转功能6. 办公楼分层分解展示7. 白天/夜晚 切换8. 场景资源预加载功能9. 晴天/雨天/雾天10. 无人机视角模式11. 行人漫游视角模式12. 键盘…...
[Java实战]Spring Boot 解决跨域问题(十四)
[Java实战]Spring Boot 解决跨域问题(十四) 一、CORS 问题背景 什么是跨域问题? 当浏览器通过 JavaScript 发起跨域请求(不同协议、域名、端口)时,会触发同源策略限制,导致请求被拦截。 示例场…...
嵌入式硬件篇---CAN
文章目录 前言1. CAN协议基础1.1 物理层特性差分信号线终端电阻通信速率总线拓扑 1.2 帧类型1.3 数据帧格式 2. STM32F103RCT6的CAN硬件配置2.1 硬件连接2.2 CubeMX配置启用CAN1模式波特率引脚分配过滤器配置(可选) 3. HAL库代码实现3.1 CAN初始化3.2 发…...
(2025)图文解锁RAG从原理到代码实操,代码保证可运行
什么是RAG RAG(检索增强生成)是一种将语言模型与可搜索知识库结合的方法,主要包含以下关键步骤: 数据预处理 加载:从不同格式(PDF、Markdown等)中提取文本分块:将长文本分割成短序列(通常100-500个标记),作为检索单元…...
TWAS、GWAS、FUSION
全基因组关联研究(GWAS,Genome-Wide Association Study)是一种统计学方法,用于在全基因组水平上识别与特定性状或疾病相关的遗传变异。虽然GWAS可以识别与性状相关的遗传信号,但它并不直接揭示这些遗传变异如何影响生物…...
大模型微调终极方案:LoRA、QLoRA原理详解与LLaMA-Factory、Xtuner实战对比
文章目录 一、微调概述1.1 微调步骤1.2 微调场景 二、微调方法2.1 三种方法2.2 方法对比2.3 关键结论 三、微调技术3.1 微调依据3.2 LoRA3.2.1 原理3.2.2 示例 3.3 QLoRA3.4 适用场景 四、微调框架4.1 LLaMA-Factory4.2 Xtuner4.3 对比 一、微调概述 微调(Fine-tun…...
FHE 之 面向小白的引导(Bootstrapping)
1. 引言 FHE初学者和工程师常会讨论的一个问题是; “什么是引导(bootstrapping)?” 从理论角度看,这个问题的答案很简单: 引导就是套用 Gentry 提出的思想——在加密状态下同态地执行解密操作ÿ…...
安装:Kali2025+Docker
安装:Kali2025Docker Kali2025安装 直接官网下载WMware版本 https://www.kali.org/get-kali/#kali-virtual-machines 直接打开运行 初始用户密码 kali/kali sudo -i 命令切换到root 更换镜像 切换到其他可用的 Kali Linux 镜像源可能会解决问题,可以使用国内的镜像源&…...
什么是深拷贝什么是浅拷贝,两者区别
什么是深拷贝什么是浅拷贝,两者区别 1.深拷贝 递归复制对象的所有层级,嵌套的引用类型属性,最后生成一个完全独立的新对象,与原对象无任何引用关联。 特点: 新对象和原对象的所有层级属性是独立的(修改…...
A2A大模型协议及Java示例
A2A大模型协议概述 1. 协议作用 A2A协议旨在解决以下问题: 数据交换:不同应用程序之间的数据格式可能不一致,A2A协议通过定义统一的接口和数据格式解决这一问题。模型调用:提供标准化的接口,使得外部应用可以轻松调…...
第七章 数据库编程
1 数据库编程基础 1.1 数据库系统概述 数据库系统是由数据库、数据库管理系统(DBMS)和应用程序组成的完整系统。其主要目的是高效地存储、管理和检索数据。现代数据库系统通常分为以下几类: 关系型数据库(RDBMS):如MySQL、PostgreSQL、Oracle等&#x…...
电影感户外哑光人像自拍摄影Lr调色预设,手机滤镜PS+Lightroom预设下载!
调色详情 电影感户外哑光人像自拍摄影 Lr 调色,是借助 Lightroom 软件,针对户外环境下拍摄的人像自拍进行后期处理。旨在模拟电影画面的氛围与质感,通过调色赋予照片独特的艺术气息。强调打造哑光效果,使画面色彩不过于浓烈刺眼&a…...
C++--类的构造函数与初始化列表差异
一,引言 在类中成员函数的构造函数担任其将对象初始化的作用,而初始化列表也有着相似的作用。大部分人建议都是初始化列表进行初始化,本文主要进行讲解二者的区别。 首先看一下构造函数的初始化方式: #define _CRT_SECURE_NO…...
深入浅出之STL源码分析4_类模版
1.引言 我在上面的文章中讲解了vector的基本操作,然后提出了几个问题。 STL之vector基本操作-CSDN博客 1.刚才我提到了我的编译器版本是g 11.4.0,而我们要讲解的是STL(标准模板库),那么二者之间的关系是什么&#x…...
Lambda表达式解读
本文通过具体案例演示函数式接口Function<T,R>的三种实现方式演变过程。 一、传统匿名内部类实现 Integer resInt1 t1(new Function<String, Integer>() {Overridepublic Integer apply(String s) {int i Integer.parseInt(s);return i;} });实现特点࿱…...
PySide6 GUI 学习笔记——常用类及控件使用方法(常用类边距QMarginsF)
文章目录 类简介方法总览关键说明示例代码 类简介 QMarginsF 用于定义四个浮点型边距(左、上、右、下),描述围绕矩形的边框尺寸。所有边距接近零时 isNull() 返回 True,支持运算符重载和数学运算。 方法总览 方法名/运算符参数返…...
Android方法耗时监控插件开发
需求:自定义一个Gradle插件,这个Gradle插件可以统计方法的耗时,并当方法耗时超过阈值时,可以通过打印Log日志在控制台,然后可以通过Log定位到耗时方法的位置,帮助我们找出耗时方法和当前线程名,…...
TWAS / FUSION
FUSION 是一套用于执行转录组范围和调控组范围关联研究(TWAS 和 RWAS)的工具。它通过构建功能/分子表型的遗传成分的预测模型,并使用 GWAS 汇总统计数据预测和测试该成分与疾病的关联,目标是识别 GWAS 表型与仅在参考数据中测量的…...
C++中的static_cast:类型转换的安全卫士
C中的static_cast:类型转换的安全卫士 在C编程中,类型转换是不可避免的操作,而static_cast作为C四大强制类型转换运算符之一,是最常用且相对安全的一种转换方式。今天我们就来深入探讨一下这个重要的类型转换工具。 一、static_…...
uniapp-商城-51-后台 商家信息(logo处理)
前面对页面基本进行了梳理和说明,特别是对验证规则进行了阐述,并对自定义规则的兼容性进行了特别补充,应该说是干货满满。不知道有没有小伙伴已经消化了。 下面我们继续前进,说说页面上的logo上传组件,主要就是uni-fil…...
04 mysql 修改端口和重置root密码
当我们过了一段时间,忘了自己当初创建的数据库密码和端口,或者端口被占用了,要怎么处理呢 首先,我们先停止mysql。 一、修改端口 打开my.ini文件,搜索port,默认是3306,根据你的需要修改为其他…...
多线程 2 - 死锁问题
死锁 死锁,是多线程代码中的一类经典问题。加锁能够解决线程安全问题,但如果加锁方式不当,就很可能产生死锁。 出现死锁的三种场景 1、一个线程一把锁 就像上篇文章讲过的,如果对同一个线程上了两把锁,而且上的锁是…...
网络原理(Java)
注:此博文为本人学习过程中的笔记 在网络初始中谈到TCP/IP五层模型,接下来我们将介绍这里面涉及到的网络协议。 应用层是程序员接触最多的层次,程序员写的代码只要涉及到网络通信都可以视为是应用层的一部分。应用层里的东西和程序员直接相…...
HDFS 常用基础命令详解——快速上手分布式文件系统
简介: 本文面向刚接触 Hadoop HDFS(Hadoop 分布式文件系统)的读者,结合 CSDN 博客风格,系统梳理最常用的 HDFS 客户端命令,并配以示例和注意事项,帮助你在开发和运维中快速掌握 HDFS 的文件管理…...
Unity Shaders and Effets Cookbook
目录 作者简介 审稿人简介 前言 我是偏偏 Unity Shaders and Effets Cookbook 第一章:Diffuse Shading - 漫反射着色器 第二章:Using Textures for Effects - 着色器纹理特效的应用 第三章:Making Your Game Shine with Specular - 镜…...
Markdown—LaTeX 数学公式
目录 一、字母1. 希腊大写字母2. 希腊小写字母3. 花体字母 二、上标和下标1. 上标2. 下标3. 其他 三、括号四、数学符号1. 基本数学符号1)运算符2)常见函数3)分式、根号、累加/乘4)极限5)积分 2. 三角函数与几何符号1&…...
AI 驱动的开发工具
🔧 主流 AI 前端开发工具 1. GitHub Copilot 由 GitHub 与 OpenAI 联合开发,集成在 Visual Studio Code、JetBrains 等主流 IDE 中,提供智能代码补全、函数生成等功能,极大地提高了开发效率。 (CSDN博客) 2. Cursor 一款 AI 驱…...
【入门】数字走向I
描述 输入整数N,输出相应方阵。 输入描述 一个整数N。( 0 < n < 10 ) 输出描述 一个方阵,每个数字的场宽为3。 #include <bits/stdc.h> using namespace std; int main() {int n;cin>>n;for(int i1;i<n*n;i){cout…...
Kubernetes生产实战(十三):灰度发布与蓝绿发布实战指南
在微服务架构中,如何安全高效地发布新版本是每个团队必须掌握的技能。本文将深入讲解Kubernetes中两种主流发布策略的落地实践,附带生产环境真实案例。 一、金丝雀发布(灰度发布):渐进式验证新版本 核心思想…...
数孪实战笔记(1)数字孪生的含义、应用及技术体系
一、含义 数字孪生(Digital Twin)是一种通过数字化模型在虚拟世界中实时映射和模拟物理实体、系统或过程的技术。它的核心目的是通过对现实对象的建模、感知、分析和预测,实现对物理世界的全面感知、智能控制和优化决策。数字孪生 实体对象 …...
深入浅出之STL源码分析5_类模版实例化与特化
在 C 中,类模板的实例化(Instantiation)和特化(Specialization) 是模板编程的核心概念,而 显式实例化(Explicit Instantiation)和隐式实例化(Implicit Insta…...