大型项目开发设计文档规范

目录

 一、 需求文档分析

二、 需求分析

1.交互层分析

2.功能需求分析

3.数据分析

4.兼容性分析

5.非功能性分析

三、 系统现状分析

1. 判断要开发的功能属于哪个模块,需要与哪几个模块联动?

2. 要开发的功能属于新接口开发,还是既有接口的基础上进行改造,对哪些接口有影响?

3. 现有数据库结构是怎样的?

4. 是否涉及到缓存,当前的缓存使用方案是何逻辑?

5. 是否涉及MQ,消息队列的使用方案是怎样的?

6. 是否涉及ES,现有的mapping方案、搜索逻辑是怎样的?是否涉及聚合分析?

四、 概要设计

1.架构图

2. 用例设计

3.接口梳理

3.1对外提供的接口

3.2外部提供的接口

4.核心接口流程梳理

5.数据ER图梳理

五、 详细设计

1.核心接口流程图&时序图

2.核心算法设计&类图

3.数据库DDL方案&数据清洗方案

4.中间件平台使用

5.第三方类库或开源框架引入

六、 测试方案

1.单元测试

2.联调测试

3.性能测试

七、 上线方案

1.可灰度 (Canary Deployment)

2.可回滚 (Rollback)

3.可监控 (Monitoring)

八、 风险分析

确定风险的类型

建立风险清单

评估风险的影响和可能性

优先排序风险

制定风险应对策略

执行风险应对计划

监控和更新风险清单

沟通和共享信息

持续改进

文档和记录

九、 排期


一、 需求文档分析

产品经理通常会在产品开发过程中编写和使用不同层次的文档来指导产品的设计、开发和推广。这些文档的三个主要层次分别是BRD(业务需求文档),MRD(市场需求文档)和PRD(产品需求文档)。该部分应该直接将对应的相关文档url进行展示和做简要说明。

文档类型

说明

主要信息

BRD

Business Requirement Document

商业需求文档

项目背景(产品介绍)、市场分析、团队、产品路线、财务计划、竞争对手分析 等

MRD

Market Requirement Document

市场需求文档

目标市场分析(目标、规模、特征、趋势)、目标用户分析(用户描述、用户使用场景、用户分类统计、核心用户、用户分类分析、竞争对手分析 、产品需求概况(定位、前景))

PRD

Product Requirement Document

产品需求文档

详细功能说明(功能清单、优先级、功能目的、功能详细说明)、业务流程(业务流程、用例)、业务规则、界面原型(界面流程、界面原型)、数据要求(输入输出、极限范围、数据格式等)

备注:在进行需求评审的时候,也可以从这几个层面去考虑和分析,与产品经理进行沟通。

从开发的角度对产品需求进行分析和思考是非常重要的,这有助于确保产品开发过程中的合理性和可行性。以下是一些从开发角度考虑和分析产品需求的重要方面:

  1. 需求的清晰性和合理性:评估PRD或产品需求文档中提供的需求是否足够清晰、具体且合理。如果需求存在模糊或矛盾之处,应及早与产品经理进行沟通,以澄清和完善需求。

  2. 技术可行性:分析产品需求是否在技术上可行。这包括检查是否有合适的技术解决方案来实现需求,以及是否需要额外的资源或工具来支持实施。

  3. 性能和可扩展性:考虑产品需求对系统性能和可扩展性的影响。确保需求不会导致性能问题或限制产品未来的扩展能力。

  4. 数据和存储需求:了解产品需求对于数据模型和存储的要求。确保数据的采集、存储和处理都能够满足需求,同时考虑数据的安全性和隐私问题。

  5. 用户体验:关注产品需求对用户界面和用户体验的影响。确保需求能够提供良好的用户体验,并考虑用户友好性和易用性。

  6. 测试和质量保证:确定产品需求的测试策略和质量保证计划。确保所有需求都能够被充分测试,并且产品能够在生产环境中稳定运行。

  7. 风险评估:识别潜在的风险和问题,以及它们对项目进度和质量的影响。建议与产品经理和团队讨论并寻找解决方案。

  8. 建议改进和优化:如您所提到,开发团队可能会提出改进和优化的建议,以提高产品的效率、性能或用户体验。这些建议可以与产品经理一起讨论,以找到最佳解决方案。

在设计文档中体现您的分析和思考是非常重要的,这有助于确保产品在开发过程中考虑到了所有关键方面,并能够满足业务需求和用户期望。与产品经理的协作和沟通是保证需求和开发之间良好对接的关键。

二、 需求分析

1.交互层分析

这一章节主要是针对产品原型,也就是前端部分的分析。

作为后端开发,对前端部分的分析有助于我们梳理需求的业务、功能流程,进而方便我们进行实现环节的用例分析和接口分析。

2.功能需求分析

这一章节是从产品模块的角度进行分析,梳理会对我们的哪些模块产生影响,判断是一个通用需求还是一个特性需求,判断是一个横向需求还是一个纵向需求,功能的运作流程是怎样的。

产品进行服务拆分后,会涉及到多少个服务?这些影响之间是彼此独立的,还是相互耦合的?

功能触发以后的业务流程是怎样的的?数据是怎么流转的?

3.数据分析

该功能的实现,是在现有的数据模型基础上开发,还是需要增加新的数据模型?

对原有的数据模型会产生怎样的影响,是否有可能需求进行数据清洗?

4.兼容性分析

有一些需求可能属于已有功能的改造,那么有必要考虑兼容性方面的内容。

是否对原有实现有侵入,是否可以兼容,如果不能兼容的处理方案是什么样的?

5.非功能性分析

这个属于一个提前判断,判断是否可能存在性能问题,可能存在调用链路混乱问题,可能存在的痛点和需要技术攻关的点。

三、 系统现状分析

系统现状分析,主要是针对现有功能改造,以及与现有接口耦合比较紧密的功能开发。

1. 判断要开发的功能属于哪个模块,需要与哪几个模块联动?

  • 模块分类和定位:首先,要对要开发的功能进行分类和定位,明确它属于哪个模块或子系统。
  • 模块依赖关系:确定新功能与其他模块之间的依赖关系和交互方式。识别哪些模块需要与新功能进行联动,以确保功能的完整性和一致性。
  • 接口和数据传递:了解模块间的数据传递方式和接口,以确保数据的正确流转和互操作性。确保接口的参数和返回值能够满足联动模块的需求。

2. 要开发的功能属于新接口开发,还是既有接口的基础上进行改造,对哪些接口有影响?

  • 接口设计决策:确定新功能是否需要引入全新的接口,还是在现有接口的基础上进行改造和扩展。这需要权衡新功能的特殊需求和现有接口的可扩展性。
  • 接口影响分析:分析新功能对现有接口的影响范围。特别关注那些依赖于接口的其他功能,以确保改动不会破坏现有功能的稳定性。
  • 向后兼容性:确保接口改动是向后兼容的,以不影响现有客户端代码。如果需要破坏性的改动,要提前通知相关开发者并制定过渡计划。

3. 现有数据库结构是怎样的?

  • 数据库结构调研:详细了解现有数据库的结构,包括表、字段、关系、索引等。
  • 数据模型分析:分析新功能对数据库的需求,可能需要进行数据模型的改变或扩展。确保新数据的存储方式符合业务需求。
  • 数据迁移和一致性:考虑数据库迁移和数据一致性方案,以确保数据的平滑过渡和完整性。

4. 是否涉及到缓存,当前的缓存使用方案是何逻辑?

  • 缓存需求评估:分析新功能是否需要使用缓存来提高性能或减轻数据库负载。
  • 缓存逻辑和策略:了解当前的缓存逻辑,包括何时更新缓存、缓存的失效策略以及缓存清理策略等。
  • 新功能的缓存策略:制定新功能的缓存策略,确保与现有缓存逻辑协调一致。

5. 是否涉及MQ,消息队列的使用方案是怎样的?

  • MQ需求分析:确定新功能是否需要利用消息队列来处理异步任务或事件,以提高系统的响应性。
  • MQ方案调研:了解现有消息队列的使用方案,包括消息的生产、消费、失败处理和重试策略等。
  • 新功能的MQ集成:确保新功能与消息队列的集成和消息传递方案。

6. 是否涉及ES,现有的mapping方案、搜索逻辑是怎样的?是否涉及聚合分析?

  • Elasticsearch需求评估:判断是否需要使用Elasticsearch支持新功能的搜索和聚合分析需求。
  • mapping方案和搜索逻辑分析:了解现有的mapping方案、搜索逻辑和聚合分析需求,看是否需要进行改进以适应新功能。
  • 新功能的Elasticsearch集成:确保新功能能够与Elasticsearch的索引、搜索和聚合功能正确集成。

这些分析和思考能够帮助确保新功能的开发与现有系统的无缝集成,并在不破坏现有功能的前提下实现改进。同时,与各个相关团队和利益相关者的积极协作和沟通是成功的关键。

四、 概要设计

1.架构图

如果是系统层级的设计,需要提供架构设计图(构件图、 部署图等单独列出)。范例如下:

2. 用例设计

用例图是指由参与者(Actor)、用例(Use Case),边界以及它们之间的关系构成的用于描述系统功能的视图。

用例图(User Case)是外部用户(被称为参与者)所能观察到的系统功能的模型图。用例图是系统的蓝图。

用例图呈现了一些参与者,一些用例,以及它们之间的关系,主要用于对系统、子系统或类的功能行为进行建模。

用例图—百度百科

用例可以帮我们梳理系统边界,需要提供的接口,以及接口之间的关系(扩展、泛化、包含)。而这些分析有助于我们进行设计。

范例如下:

3.接口梳理

3.1对外提供的接口

大部分情况下,我们的交互方主要是前端团队,为前端提供相应的接口进行CRUD。另外一些情况,譬如OpenApi以及与外部团队合作的时候,也会提供相应的调用接口。(Http接口/Thrift接口/grpc接口等)

设计文档中,需要识别当前功能开发中相关的已存在的接口,同时还要识别需要新提供的接口。

在对非前端团队提供的对外接口中,需要考虑接口鉴权方式、接口调用频率、数据安全隔离、交互数据格式标准、系统解耦、接口复用等方面的内容。

同时,在进行设计时,应该了解一些设计原则(并不是严格对照,但是对这些原则内心有了认同之后,会不自觉地贯彻和应用)。

SOLID原则:接口设计也应该尽量遵循设计模式相关的原则,如下所示

  • SRP:单一职责原则

  • OCP:开放封闭原则

  • LSP:里式替换原则

  • LOD:迪米特法则

  • ISP:接口隔离原则

  • DIP:依赖倒置原则

3.2外部提供的接口

在与外部系统对接的情况下,需要关注如下一些层面的内容:

  • 外部提供的接口类型;

  • 外部接口的鉴权方式;

  • 外部接口的接入方式;

  • 必要时要考虑是否有降级处理方案;

4.核心接口流程梳理

概要设计部分中的接口流程,可以达到服务调用级别。

服务调用级别的话,这里也需要把一些横切层面的功能(譬如鉴权、譬如操作记录等)囊括进来。

5.数据ER图梳理

数据ER图在两种场景下都可以使用,并起到各自不同的作用:

  • 对现有的数据库结构设计,可以帮忙梳理数据关系(尤其是我们现在使用逻辑外键的情况下);

  • 对新的数据库结构设计,可以帮忙进行数据库设计范式(规范化目的是使结构更合理,消除存储异常,使数据冗余尽量小。便于插入、删除和更新。

  • 同时在ER图梳理过程中,可以分析相应的约束(主键约束、外键约束、非空约束、唯一约束、默认约束);

  • 如果表关系极其复杂(可能出现类似图的情况),可能出现多表join或者多级查询的情况;要仔细分析是否可以改善,并分析可能的慢查询以及索引优化的可能性;

ER图范例如下:

五、 详细设计

1.核心接口流程图&时序图

在详细设计的层面,接口流程就要涉及具体的服务内部的调用了。这里需要把接口的整个业务流程表现出来,进行文档说明。当然《用图表说话》会更形象:

接口流程图如下所示范例:

 时序图如下所示范例:

2.核心算法设计&类图

算法就是解决问题的方法和步骤!

算法可以采用自然语言、流程图、伪代码进行描述!

有一些功能开发是涉及到一些算法在里面的,我们的系统主要是上层的应用,就算法而言可能并不是太深入,主要还是一些业务算法(譬如工时的计算逻辑等)。

针对这些算法,详细设计部分需要对算法进行准确的描述,这一部分也是功能上线后的统一对外口径。

在类图层面的设计上,建议进行设计模式的相关学习。

有一些典型的设计模式应用场景可以在此时起到化腐朽为神奇的作用(常见的如工厂、装饰者、观察者、外观、组合、适配器、模板方法、策略等)。

范例如下:

3.数据库DDL方案&数据清洗方案

如果新功能的开发对于已有的数据结构或者数据本身有影响的话,那么就会涉及DDL和DML的操作。

这里需要关注的点:

  • 数据库结构设计能达到哪个范式,是否会出现冗余导致的不一致问题;

  • 数据库更新的时机问题,尽量避免高峰使用期做数据库Scheme变更;

  • 动线上数据是一件很危险的事情,是否考虑全面了,是否有回滚方案;

  • 如果是效率层面考虑的索引优化,需要给出全面的分析(整理系统目前的SQL查询情况,分析当前索引的缺失之处,增加索引之后的SQL执行方案是怎样的,explain效果如何等);

数据清洗方案采用的是接口方案,还是SQL工单方案?

是否在线下进行了测试?

4.中间件平台使用

关于中间件的使用,缓存、消息队列、搜索引擎都有对应的场景。譬如缓存在DB之前分担数据库的读压力,MQ可以进行解耦,搜索引擎可以进行复杂查询和聚合分析等。

在方案设计遇到相应的场景时应该考虑采用对应的中间件平台。

而使用的具体规范就不在这里赘述了,这一块的内容需要大家自行研究相应的中间件,并参考优秀的实践方案,采取合理的使用方式。

5.第三方类库或开源框架引入

  • 开源或者第三方类库引入之前,要做相应的成熟度评估,不要引入尚不成熟或者未规模化应用的类库或框架。在设计文档中应该对此进行说明,设计方案评审时需要考核此项内容。

  • 要说明引入该框架所要解决的问题,该框架解决该问题的方案和思路;

  • 是否有方案比选,为何选择该框架;

对于一些成熟的类库,譬如apache,guava,joda,json相关的几个,无需说明。对于一些不广为人知的类库,需要在设计文档中进行说明。

六、 测试方案

虽然目前QA团队做的是白盒测试,但是开发团队自身也要制定相应的功能测试方案以及联调方案。

1.单元测试

对于核心算法接口的单元测试,确保测试覆盖面广泛且可靠是非常重要的。以下是有关编写和执行单元测试的一些建议:

  • 使用Spring Boot的test模块:Spring Boot提供了强大的测试支持,可以轻松地进行单元测试。使用Spring Boot的测试框架来编写和执行单元测试是一个不错的选择,它能够帮助模拟应用程序的上下文环境,包括依赖注入和数据库连接等。

  • 边界测试:确保单元测试涵盖了各种边界情况,例如针对输入参数的最小值、最大值,边界值以及异常情况的测试。这有助于发现潜在的边界条件错误。

  • 异常测试:编写测试用例来模拟可能出现的异常情况,例如无效的输入、资源不足、连接失败等。确保你的代码在异常情况下能够适当地处理和报告错误。

  • Assert机制:使用Assert机制来验证测试的预期结果与实际结果是否一致。这有助于确保代码的正确性,并在测试失败时提供明确的错误信息。

  • 测试结果自动化:不要依赖于人工识别测试结果。确保测试用例的结果可以自动化地验证,以减少人为误差。Spring Boot提供了丰富的断言工具,可以方便地验证结果。

  • 数据库还原:在测试数据库相关的代码时,确保能够还原数据库的现场状态。可以使用事务管理来实现测试前将数据库状态置于预期状态,然后在测试完成后回滚事务以还原数据库。

  • 模拟依赖:尽量模拟依赖的行为,而不是实际地依赖外部服务或组件。这有助于测试的独立性,避免对外部资源的不必要依赖。

  • 持续集成:将单元测试纳入持续集成流程中,确保每次代码提交后都运行测试。这有助于及早发现和解决问题,并提高代码质量。

  • 覆盖率报告:使用工具来生成代码覆盖率报告,以了解测试覆盖的程度。这可以帮助确定是否有未覆盖的代码路径。

  • 测试文档:编写良好的测试文档,描述测试的目的、输入和预期结果。这有助于其他开发人员理解和维护测试用例。

综合考虑这些建议,可以编写高质量的单元测试,提高代码的可靠性和稳定性。单元测试是确保核心算法接口的可靠性和正确性的重要手段,也有助于减少未来的回归问题。

2.联调测试

与前端或外部团队的联调是确保整个系统顺利运行的关键步骤之一。以下是一些关于进行联调的注意事项和建议:

  • 时间咬合计划

    • 提前确定时间咬合计划,确保双方团队在同一频道上,并有足够的时间进行联调。
    • 协调双方的工作时间表,以确保在联调期间有足够的资源和人员。
  • 联调方案制定

    • 制定详细的联调方案,明确联调的目标、范围和流程。
    • 定义联调的入口点和出口点,以确保各个模块能够正确地对接和集成。
  • 联调用例设计

    • 编写联调用例,确保用例涵盖各类情况,包括正常情况和异常情况。
    • 确保用例包括数据的输入和输出,以验证数据的正确传递和处理。
  • 数据准备

    • 提前准备好测试数据,包括正常数据和边界数据,以用于联调测试。
    • 确保测试数据的一致性,以防止因数据问题引起的错误。
  • 日志和调试工具

    • 配置日志和调试工具,以便在联调期间能够有效地监控和调试系统。
    • 确保双方都具备必要的日志和调试信息,以便快速定位和解决问题。
  • 沟通和协作

    • 保持良好的沟通和协作,及时共享问题和进展。
    • 确保有明确的联调负责人或团队,负责统筹和协调联调过程。
  • 版本控制

    • 确保双方使用相同的代码版本和依赖库,以避免版本兼容性问题。
  • 性能测试

    • 如果涉及性能问题,可以在联调期间进行基本的性能测试,以发现和解决潜在的性能瓶颈。
  • 自动化测试

    • 考虑使用自动化测试工具来执行重复性的联调测试,以节省时间和提高可重复性。
  • 备份和恢复计划

    • 准备好备份和恢复计划,以防在联调期间发生不可预测的问题,可以迅速回滚到稳定状态。

最重要的是,联调期间要保持冷静和耐心,理解在整合不同组件和系统时可能会出现的挑战。密切关注问题并及时解决,确保联调的成功,以实现整个系统的顺利运行。

3.性能测试

对于可能频繁调用的接口,需要进行性能测试。利用quake平台进行测试,并可在trace平台观察压测结果。

七、 上线方案

"可灰度,可回滚,可监控" 是上线新版本或功能时的关键原则,确保平稳的发布和稳定的运行。以下是这三个方面的详细解释:

1.可灰度 (Canary Deployment)

  • 可灰度是指在生产环境中逐步发布新版本或功能,而不是一次性全部发布。这样可以将新功能或版本逐渐引入系统,以降低潜在风险。
  • 实施可灰度部署时,通常将一小部分用户或流量导向新版本,而其他用户仍然使用旧版本。这可以用于评估新版本的稳定性和性能。
  • 如果在可灰度发布期间出现问题,可以快速回滚到之前的稳定版本,而不会影响所有用户。这有助于降低发布风险。

2.可回滚 (Rollback)

  • 可回滚是指在发布新版本后,如果发现问题或出现严重故障,可以快速恢复到之前的稳定版本。
  • 实施可回滚需要确保在发布过程中能够追踪并保存旧版本的备份或状态。这可以通过备份数据库、代码版本控制等方式来实现。
  • 在出现问题时,迅速回滚到之前的版本可以降低系统的停机时间和对用户的影响。

3.可监控 (Monitoring)

  • 可监控是指在上线后,需要实时监测系统的性能、稳定性和安全性。这可以通过各种监控工具和指标来实现。
  • 实时监控可以帮助发现潜在问题和异常,及早采取措施解决。监控指标可以包括服务器负载、响应时间、错误率、内存使用、数据库查询性能等。
  • 可监控还包括警报机制,当系统达到一定阈值或发生异常时,能够及时通知相关团队,以便迅速响应和解决问题。

综合来看,这三板斧是确保上线新版本或功能的关键步骤,旨在最大程度地减少风险、提高可用性,并提供高质量的用户体验。它们在现代软件开发中是非常重要的实践,有助于避免大规模的系统故障和用户体验下降。

八、 风险分析

风险分析是项目管理的关键步骤,它旨在识别、评估和应对可能影响项目成功的潜在风险。以下是一些步骤,以帮助您进行有效的风险分析:

确定风险的类型

首先,识别可能影响项目的不同类型的风险。常见的风险类型包括技术风险、资源风险、市场风险、法律风险等。

建立风险清单

创建一个详细的风险清单,列出可能的风险事件。每个风险事件都应该包括描述、潜在的影响和可能性。

评估风险的影响和可能性

对每个风险事件进行定量或定性评估,以确定其可能的影响程度和发生的可能性。可以使用风险矩阵或其他评估工具来进行评估。

优先排序风险

根据影响和可能性的评估,对风险事件进行优先排序,以确定哪些风险最值得关注。

制定风险应对策略

为每个高优先级的风险事件制定具体的风险应对策略。这包括确定如何降低风险、减轻风险的影响、转移风险或接受风险。

执行风险应对计划

实施已经制定的风险应对策略。这可能包括采取预防措施、建立备用计划、购买保险或与利益相关者协商。

监控和更新风险清单

定期监控项目的进展,以确定是否有新的风险出现或现有的风险发生了变化。

更新风险清单和应对策略,以反映新的信息和情况。

沟通和共享信息

确保项目团队和利益相关者了解项目的风险情况。透明的沟通可以帮助各方共同努力来应对风险。

持续改进

风险分析是一个动态过程,需要持续改进。根据项目进展和新的信息,调整风险分析和应对策略。

文档和记录

记录风险分析的过程和结果。这有助于项目管理团队和利益相关者了解项目的风险历史和应对措施。

风险分析是项目管理的重要组成部分,它有助于降低不确定性,提高项目成功的机会。通过系统地识别、评估和应对风险,项目团队可以更好地应对挑战,确保项目按时、按预算并达到预期的目标。

九、 排期

以下是一些关于任务排期和时间估算的进一步说明和建议:

 倒排的功能开发任务

当时间紧张或有紧急需求时,需要向BOSS或相关利益相关者提供明确的解释和理由,以说明为什么需要优先处理倒排任务。

提供风险评估,包括如果不及时完成倒排任务可能带来的潜在问题和影响。

如果可能,提供备选方案或资源调配建议,以确保项目的其他部分不受影响。

正排的功能开发任务

对于正排任务,合理的时间估算是非常关键的。使用1.2到1.5的系数是一个常见的估算实践,以考虑不可预见的问题和额外的时间。

在估算时间时,要考虑到任务的复杂性、技术难度、依赖关系和其他因素,以便更准确地估算所需的时间。

任务拆分和合理估时

任务拆分是确保准确估算时间的关键步骤。将任务细化成较小的子任务,每个子任务都有清晰的描述和估算时间。

考虑到任务拆分的合理性,确保每个子任务都具有一定的独立性,以便并行处理或重新安排任务。

估时时要考虑到团队成员的经验和技能水平,以便更准确地估算时间。

监控和调整

在项目进行中,持续监控任务的进展和时间计划。如果发现任务进展偏慢或估算时间不准确,及时调整时间计划或资源分配。

透明的沟通

与BOSS和项目利益相关者进行透明的沟通,分享任务排期和时间估算的详细信息。这有助于建立信任和理解。

风险管理

不仅考虑任务时间估算,还要考虑风险管理。识别潜在的风险,制定应对计划,以便在出现问题时能够迅速应对。 

任务排期和时间估算是项目管理中的核心活动之一。通过合理的拆分、估算和透明的沟通,可以帮助项目团队更好地管理时间,降低风险,确保项目按时交付。

具体操作:输出表格指定对应人员和时间线等,正常办公中可以借助现有的框架进行管理分析。

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

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

相关文章

7.3 调用函数

前言: 思维导图: 7.3.1 函数调用的形式 我的笔记: 函数调用的形式 在C语言中,调用函数是一种常见的操作,主要有以下几种调用方式: 1. 函数调用语句 此时,函数调用独立存在,作为…

用于时间触发的嵌入式软件的IDE

TTE Systems的RapidiTTy IDE为希望创建“时间触发”微控制器软件以提高整体系统可靠性的开发人员提供了一个独立的环境。RapidiTTy(下面的图1)旨在解决深度嵌入的应用,包括医疗,国防,汽车和工业部门以及白色和棕色商品…

结合Mockjs与Bus事件总线搭建首页导航和左侧菜单

结合Mockjs与Bus事件总线搭建首页导航和左侧菜单 一、前言二、Mock.js的使用2.2.安装与配置2.2.引入Mock.js2.4.Mock.js的使用 三、Bus事物总线3.1.首页导航栏与左侧菜单搭建 ) 一、前言 Mock.js 是一个前端开发中常用的模拟数据生成工具。使用 Mock.js 可以方便地在前端开发…

Android 命令行工具简介

关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持。 目录 一、导读二、概览三、相关工具3.1 Android SDK 命令行工…

前端开发网站推荐

每个人都会遇见那么一个人,永远无法忘却,也永远不能拥有。 以下是一些可以用来查找和比较前端框架的推荐网站: JavaScript框架比较: 这些网站提供了对不同JavaScript框架和库的详细比较和评估。 JavaScripting: 提供了大量的JavaS…

MySQL的内置函数

文章目录 1. 聚合函数2. group by子句的使用3. 日期函数4. 字符串函5. 数学函数6. 其它函数 1. 聚合函数 COUNT([DISTINCT] expr) 返回查询到的数据的数量 用SELECT COUNT(*) FROM students或者SELECT COUNT(1) FROM students也能查询总个数。 统计本次考试的数学成绩分数去…

Java集成Onlyoffice以及安装和使用示例,轻松实现word、ppt、excel在线编辑功能协同操作,Docker安装Onlyoffice

安装Onlyoffice 拉取onlyoffice镜像 docker pull onlyoffice/documentserver 查看镜像是否下载完成 docker images 启动onlyoffice 以下是将本机的9001端口映射到docker的80端口上,访问时通过服务器ip:9001访问,并且用 -v 将本机机/data/a…

vue造轮子完整指南--npm组件包开发步骤

一、项目包文件的创建和初始化。 1. 新建项目包。 vue create <Project Name> //用于发布npm包的项目文件名 ps:一般选择自定义&#xff0c;然后不需要Vuex和Router&#xff0c;其他选项按自己实际情况选择安装即可。 2.修改原始src文件名、新增组件项目存放文件和修改…

【vue3】Suspense组件和动态引入defineAsyncComponent的搭配使用

假期第五篇&#xff0c;对于基础的知识点&#xff0c;我感觉自己还是很薄弱的。 趁着假期&#xff0c;再去复习一遍 在app中定义子组件child //静态引入&#xff0c;网速慢的时候&#xff0c;父子组件也是同时渲染出来 <template><div><h3>APP父组件</…

【Python】返回指定时间对应的时间戳

使用模块datetime&#xff0c;附赠一个没啥用的“时间推算”功能(获取n天后对应的时间 代码&#xff1a; import datetimedef GetTimestamp(year,month,day,hour,minute,second,*,relativeNone,timezoneNone):#返回指定时间戳。指定relative时进行时间推算"""根…

【C++进阶】二叉搜索树

&#x1f680;write in front&#x1f680; &#x1f4dc;所属专栏&#xff1a; C学习 &#x1f6f0;️博客主页&#xff1a;睿睿的博客主页 &#x1f6f0;️代码仓库&#xff1a;&#x1f389;VS2022_C语言仓库 &#x1f3a1;您的点赞、关注、收藏、评论&#xff0c;是对我最大…

Android自动化测试之MonkeyRunner--从环境构建、参数讲解、脚本制作到实战技巧

monkeyrunner 概述、环境搭建 monkeyrunner环境搭建 (1) JDK的安装不配置 http://www.oracle.com/technetwork/java/javase/downloads/index.html (2) 安装Python编译器 https://www.python.org/download/ (3) 设置环境变量(配置Monkeyrunner工具至path目彔下也可丌配置) (4) …

【人工智能导论】线性回归模型

一、线性回归模型概述 线性回归是利用函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析。简单来说&#xff0c;就是试图找到自变量与因变量之间的关系。 二、线性回归案例&#xff1a;房价预测 1、案例分析 问题&#xff1a;现在要预测140平方的房屋的价格&…

嵌入式Linux应用开发-基础知识-第十八章系统对中断的处理③

嵌入式Linux应用开发-基础知识-第十八章系统对中断的处理③ 第十八章 Linux系统对中断的处理 ③18.5 编写使用中断的按键驱动程序 ③18.5.1 编程思路18.5.1.1 设备树相关18.5.1.2 驱动代码相关 18.5.2 先编写驱动程序18.5.2.1 从设备树获得 GPIO18.5.2.2 从 GPIO获得中断号18.5…

Redis Cluster集群运维与核心原理剖析

文章目录 Redis集群方案比较哨兵模式高可用集群模式 Redis高可用集群搭建Java操作redis集群Redis集群原理分析槽位定位算法跳转重定位Redis集群节点间的通信机制集中式gossipgossip通信的10000端口 网络抖动Redis集群选举原理分析集群脑裂数据丢失问题集群是否完整才能对外提供…

Node18.x基础使用总结(二)

Node18.x基础使用总结 1、Node.js模块化1.1、模块暴露数据1.2、引入模块 2、包管理工具2.1、npm2.2、npm的安装2.3、npm基本使用2.4、搜索包2.5、下载安装包2.6、生产环境与开发环境2.7、生产依赖与开发依赖2.8、全局安装2.9、修改windows执行策略2.10、安装包依赖2.11、安装指…

深入了解 Linux 中的 AWK 命令:文本处理的瑞士军刀

简介 在Linux和Unix操作系统中&#xff0c;文本处理是一个常见的任务。AWK命令是一个强大的文本处理工具&#xff0c;专门进行文本截取和分析&#xff0c;它允许你在文本文件中查找、过滤、处理和格式化数据。本文将深入介绍Linux中的AWK命令&#xff0c;让你了解其基本用法和…

【多线程进阶】常见的锁策略

文章目录 前言1. 乐观锁 vs 悲观锁2. 轻量级锁 vs 重量级锁3. 自旋锁 vs 挂起等待锁4. 读写锁 vs 互斥锁5. 公平锁 vs 非公平锁6. 可重入锁 vs 不可重入锁总结 前言 本章节所讲解的锁策略不仅仅是局限于 Java . 任何和 “锁” 相关的话题, 都可能会涉及到以下内容. 这些特性主…

如何初始化一个vue项目

如何初始化一个vue项目 安装 vue-cli 后 ,终端执行 vue ui npm install vue-cli --save-devCLI 服务 | Vue CLI (vuejs.org) 等一段时间后 。。。 进入项目仪表盘 设置其他模块 项目构建后目录 vue.config.js 文件相关配置 官方vue.config.js 参考文档 https://cli.vuejs.o…

Linux基础指令(六)

目录 前言1. man 指令2. date 指令3. cal 指令4. bc 指令5. uname 指令结语&#xff1a; 前言 欢迎各位伙伴来到学习 Linux 指令的 第六天&#xff01;&#xff01;&#xff01; 在上一篇文章 Linux基本指令(五) 中&#xff0c;我们通过一段故事线&#xff0c;带大家感性的了…