『 测试 』测试基础

文章目录

    • 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 输入规则

    字段名称必填性长度/位数格式要求附加规则
    姓名必填6~15字符汉字/字母/空格-
    邮箱必填-标准邮箱格式格式错误时提示
    密码必填6~15字符字母+数字组合两次输入不一致时提示
    验证码必填6位数字纯数字邮箱发送,有效期5分钟
    1.1.1.1.3 处理规则

    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 软件的生命周期

实际上软件的生命周期就是软件的开发模型;

软件生命周期是指软件从规划, 需求分析, 设计, 开发, 测试, 部署, 维护到最终退役的完整过程, 是软件开发的全流程框架, 覆盖软件"从生到死"的各个阶段;

常见的几种开发模型有: 瀑布模型, 敏捷模型, 螺旋模型…

  • 瀑布模型生命周期(严格线性, 不可逆)

    需求分析 -> 设计 -> 编码 -> 测试 -> 维护

  • 敏捷模型生命周期(持续迭代)

    需求 -> 开发 -> 测试 -> 交付 -> 反馈 -> 新需求

  • 螺旋模型生命周期(强调风险管理)

    计划 -> 风险分析 -> 开发 -> 评估 -> 下一轮循环


假设存在一个用户需求为"邮箱注册功能", 其生命周期大概为如下:

  1. 计划

    1. 目标:明确功能范围和用户场景。
      用户通过邮箱注册账号(必填项)。
      需验证邮箱有效性(发送验证链接或验证码)。
      防止重复注册或恶意注册(如频率限制、CAPTCHA)。
  2. 需求分析

    1. 功能定义:
      邮箱注册为核心流程,需覆盖验证、防重复、安全防护。
      非功能需求:邮件送达率 > 95%,响应时间 < 2秒。
  3. 设计

    1. 前端设计:
      注册页面布局(邮箱输入框、验证码/验证链接触发按钮)。
      错误提示(邮箱格式错误、重复注册、验证码超时)。
    2. 后端设计:
      邮箱格式校验(正则表达式)。
      验证邮件/短信服务集成(如SMTP、第三方API)。
      数据库设计(存储邮箱、密码哈希、验证状态)。
  4. 编码

    1. 前端开发:
      实现表单提交逻辑,绑定邮箱验证接口。
      处理验证成功/失败的交互反馈。
    2. 后端开发:
      实现邮箱验证码生成、存储(Redis缓存)。
      邮件发送服务调用(异步队列)。
      用户信息加密存储(如bcrypt哈希密码)。
  5. 测试

    1. 功能测试:
      正常流程:输入有效邮箱 → 接收验证邮件 → 激活账号。
      异常流程:无效邮箱格式、重复注册、验证码过期/错误。
    2. 安全测试:
      SQL注入、XSS攻击防御。
      验证码防爆破(限流策略)。
    3. 部署验证:
      灰度发布:先小范围开放注册功能,监控异常。
      配置生产环境:邮件服务参数、数据库连接、日志监控。
  6. 运行维护

    1. 修复性维护
    2. 完善性维护
    3. 预防性维护
  7. 退役

    1. 替代方案:
      逐步迁移用户至新注册方式(如手机号登录)。
    2. 数据清理:
      标记废弃邮箱账号,归档或删除历史数据。

不同企业对不同的软件的生命周期的框架不同, 如可能针对软件特定的特色功能在不同的阶段将会有不同的差异;


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模型也具有缺点, 其主要的缺点为如下:

  • 需求, 设计, 编码等活动被视为串行的;
  • 测试和开发活动页保持着一种线性的前后关系, 上一阶段完全结束下一阶段才能开始进行工作;
  • 重流程, 无法支持敏捷开发模式, 对当前软件开发复杂多变的需求面临着困惑;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/82557.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

红外遥控键

红外 本章节旨在让用户自定义红外遥控功能&#xff0c;需要有板载红外接收的板卡。 12.1. 获取红外遥控键值 由于不同遥控器厂家定义的按键键值不一样&#xff0c;所以配置不通用&#xff0c;需要获取实际按键对应的键值。 1 2 3 4 5 6 #设置输出等级 echo 7 4 1 7> /pr…

同一个虚拟环境中conda和pip安装的文件存储位置解析

文章目录 存储位置的基本区别conda安装的包pip安装的包 看似相同实则不同的机制实际路径示例这种差异带来的问题如何检查包安装来源最佳实践建议 总结 存储位置的基本区别 conda安装的包 存储在Anaconda(或Miniconda)目录下的pkgs和envs子目录中&#xff1a; ~/anaconda3/en…

机器学习极简入门:从基础概念到行业应用

有监督学习&#xff08;supervised learning&#xff09; 让模型学习的数据包含正确答案&#xff08;标签&#xff09;的方法&#xff0c;最终模型可以对无标签的数据进行正确处理和预测&#xff0c;可以分为分类与回归两大类 分类问题主要是为了“尽可能分开整个数据而画线”…

split和join的区别‌

split和join是Python中用于处理字符串的两种方法&#xff0c;它们的主要区别在于功能和使用场景。‌ split()方法 ‌split()方法用于将字符串按照指定的分隔符分割成多个子串&#xff0c;并返回这些子串组成的列表‌。如果不指定分隔符&#xff0c;则默认分割所有的空白字符&am…

MySQL从入门到精通(二):Windows和Mac版本MySQL安装教程

目录 MySQL安装流程 &#xff08;一&#xff09;、进入MySQL官网 &#xff08;二&#xff09;、点击下载&#xff08;Download&#xff09; &#xff08;三&#xff09;、Windows和Mac版本下载 下载Windows版本 下载Mac版本 &#xff08;四&#xff09;、验证并启动MySQL …

LeetCode 解题思路 45(分割等和子集、最长有效括号)

解题思路&#xff1a; dp 数组的含义&#xff1a; 在数组中是否存在一个子集&#xff0c;其和为 i。递推公式&#xff1a; dp[i] | dp[i - num]。dp 数组初始化&#xff1a; dp[0] true。遍历顺序&#xff1a; 从大到小去遍历&#xff0c;从 i target 开始&#xff0c;直到 …

电影感户外哑光人像自拍摄影Lr调色预设,手机滤镜PS+Lightroom预设下载!

调色详情 电影感户外哑光人像自拍摄影 Lr 调色&#xff0c;是借助 Lightroom 软件&#xff0c;针对户外环境下拍摄的人像自拍进行后期处理。旨在模拟电影画面的氛围与质感&#xff0c;通过调色赋予照片独特的艺术气息。强调打造哑光效果&#xff0c;使画面色彩不过于浓烈刺眼&a…

使用 NV‑Ingest、Unstructured 和 Elasticsearch 处理非结构化数据

作者&#xff1a;来自 Elastic Ajay Krishnan Gopalan 了解如何使用 NV-Ingest、Unstructured Platform 和 Elasticsearch 为 RAG 应用构建可扩展的非结构化文档数据管道。 Elasticsearch 原生集成了行业领先的生成式 AI 工具和提供商。查看我们的网络研讨会&#xff0c;了解如…

Android 13 使能user版本进recovery

在 debug 版本上&#xff0c;可以在关机状态下&#xff0c;同时按 电源键 和 音量加键 进 recovery 。 user 版本上不行。 参考 使用 build 变体 debug 版本和 user 版本的差别之一就是 ro.debuggable 属性不同。 顺着这个思路追踪&#xff0c;找到 bootable/recovery/reco…

每日算法刷题计划

这是我每天坚持刷算法题的仓库&#xff0c;每天刷1-3道&#xff0c;时间30-40min&#xff0c;加油! 目前考虑leetcode洛谷形式&#xff0c;c和python3语言&#xff0c;leetcode主要学核心思想&#xff0c;洛谷学会输入输出格式 每日打卡:markdowncsdn打卡 刷题策略: 按分类刷…

红黑树():

1. 红黑树&#xff1a; 红黑树从根节点开始的最长的路径不会超过最短路径的2倍。 红黑树的话&#xff0c;他的结点的分布没有我们的AVL树的结点的分布均衡&#xff0c;但是效率也不错&#xff0c;AVL树的结点分布的那么均匀&#xff0c;其实也是在进行了旋转&#xff0c;付出了…

【AI智能推荐系统】第六篇:隐私保护与联邦学习在推荐系统中的平衡之道

第六篇:隐私保护与联邦学习在推荐系统中的平衡之道 提示语:🔥 “数据不出域,推荐更精准!深度揭秘腾讯、蚂蚁集团如何用联邦学习打造合规推荐系统,隐私计算技术全景解析与工业级实现方案!” 目录 隐私保护的行业挑战隐私计算技术体系 2.1 联邦学习基础架构2.2 差分隐私…

【Qt/C++】深入理解 Lambda 表达式与 `mutable` 关键字的使用

【Qt/C】深入理解 Lambda 表达式与 mutable 关键字的使用 在 Qt 开发中&#xff0c;我们常常会用到 lambda 表达式来编写简洁的槽函数。今天通过一个实际代码示例&#xff0c;详细讲解 lambda 的语法、变量捕获方式&#xff0c;特别是 mutable 的作用。 示例代码 QPushButto…

记录 ubuntu 安装中文语言出现 software database is broken

搜索出来的结果是 sudo apt-get install language-pack-zh-han* 然而,无效,最后手动安装如下 apt install language-pack-zh-hans apt install language-pack-zh-hans-base apt install language-pack-gnome-zh-hans apt install fonts-arphic-uming apt install libreoffic…

[虚幻官方教程学习笔记]深入理解实时渲染(An In-Depth Look at Real-Time Rendering)

原英文教程地址深入理解实时渲染&#xff08;An In-Depth Look at Real-Time Rendering&#xff09; 文章目录 1.Intro to An In-Depth Look at Real-Time RenderingCPU VS GPUDeferred VS Forward 2. Before Rendering and OcclusionCulling计算的步骤使用console command:fre…

Linux进程间信号

目录 信号入门 生活角度中的信号 技术应用角度的信号 信号的发送与记录 信号处理常见方式概述 产生信号 通过终端按键产生 通过系统函数向进程发信号 由软件条件产生信号 由硬件异常产生信号 阻塞信号 信号其他相关常见概念 在内核中的表示 sigset_t 信号集操作…

Git简介和发展

Git 简介 Git是一个开源的分布式版本控制系统&#xff0c;跨平台&#xff0c;支持Windows、Linux、MacOS。主要是用于项目的版本管理&#xff0c;是由林纳斯托瓦兹(Linux Torvalds)在2005年为Linux内核开发而创建。 起因 在2002年至2005年间&#xff0c;Linux内核开发团队使…

Perspective,数据可视化的超级引擎!

Perspective 是一个强大的交互式数据分析和可视化库&#xff0c;它允许你创建高度可配置的报告、仪表板、笔记本和应用程序。给用户提供了一个新的视角来看待数据。 Stars 数9125Forks 数1217 主要特点 高效流式查询引擎&#xff1a;Perspective使用C编写&#xff0c;并编译为…

MySQL COUNT(*) 查询优化详解!

目录 前言1. COUNT(*) 为什么慢&#xff1f;—— InnoDB 的“计数烦恼” &#x1f914;2. MySQL 执行 COUNT(*) 的方式 (InnoDB)3. COUNT(*) 优化策略&#xff1a;快&#xff01;准&#xff01;狠&#xff01;策略一&#xff1a;利用索引优化带 WHERE 子句的 COUNT(*) (最常见且…

如何在postman使用时间戳

1. 使用 Pre-request Script 动态转换​ 在发送请求前&#xff0c;将日期字符串转为时间戳并存储为环境变量/全局变量。 ​示例代码​ // 将日期字符串&#xff08;如 "2023-10-01"&#xff09;转为时间戳&#xff08;毫秒&#xff09; const dateString "2…