软件工程:说透软件5种常见的部署策略

news2024/11/25 2:54:31

hi,我是熵减,见字如面。

在软件工程中,最终的价值交付,都是要通过软件的部署上线来完成的。

那如何将新的或改进的软件功能交付给用户,同时还要确保高质量、稳定性和用户体验,选择适当的部署策略变得至关重要。

image

复杂软件工程中,新功能的部署,成为了软件价值交付的重要环节,今天我们就来聊聊关于部署的5种常见的策略。

5种策略概述

在现代软件工程领域,有五种常见的部署策略:大爆炸、滚动、蓝绿、金丝雀和功能切换。具体如下:

  • 大爆炸(Big Bang)部署:这种部署策略是将整个软件系统在一个短时间内全部部署到生产环境中。它通常用于小型项目或者新项目的首次部署。虽然这种部署策略简单快速,但风险较大,因为如果出现问题,整个系统可能会受到影响。

  • 滚动(Rolling)部署:滚动部署是逐步将新版本的软件部署到生产环境中,同时保留旧版本的部分或全部功能。通过逐步替换旧版本,滚动部署可以减小风险,并允许逐步调整和修复问题。

  • 蓝绿(Blue-Green)部署:蓝绿部署是通过在生产环境中同时维护两个完全独立的系统实例来实现。蓝色系统是当前正在使用的稳定版本,而绿色系统是新版本。在部署新版本之前,可以先在绿色系统上进行测试和验证,确保其稳定性和功能正常。一旦验证通过,可以将流量切换到绿色系统,并逐步将蓝色系统停用。

  • 金丝雀(Canary)部署:静思却部署是一种逐步部署新版本的策略,类似于蓝绿部署。不同之处在于,静思却部署只在一小部分用户或流量上进行测试,而不是整个系统。这样可以在小范围内验证新版本,收集反馈和性能数据,以确保新版本的稳定性和可靠性。

  • 功能切换(Feature Toggle)部署:功能切换部署是一种通过开关或配置项来控制不同功能是否可用的策略。在部署新功能时,可以将其默认关闭,然后逐步启用。这种策略可以在不中断整个系统的情况下引入新功能,并允许逐步测试和调整。

这些策略各具特点,为软件开发团队提供了灵活的选择,使他们能够在不同场景下有效地交付软件价值。可以根据具体的项目需求和条件选择使用,以最大程度地减小风险并提高部署的灵活性和可控性。

大爆炸(Big Bang)部署

什么是大爆炸部署

大爆炸(Big Bang)部署是一种软件部署策略,指的是将整个软件系统在一个短时间内全部部署到生产环境中。它通常用于小型项目或者新项目的首次部署。

在大爆炸部署中,所有软件的组件和功能一次性地部署到生产环境,然后立即启动。这种部署策略的关键特点是在一个较短的时间窗口内完成整个部署过程,从而迅速将新软件投入使用。

大爆炸部署的主要优点是简单和快速。由于所有组件一次性部署,减少了部署过程的复杂性和时间成本。此外,大爆炸部署适用于小型项目或新项目,因为它们可能没有现有的用户或流量,因此不会对现有用户产生中断或影响。

image

然而,大爆炸部署也存在一些潜在的风险和挑战。由于整个系统一次性部署,如果出现问题,可能会对整个系统产生严重的影响,导致系统不可用。此外,由于没有经过逐步验证和测试的过程,可能会导致问题的发现和修复变得更加困难。

因此,在考虑使用大爆炸部署策略时,需要仔细评估项目的规模、复杂性和可行性,并确保在部署之前进行充分的测试和验证。对于大型、复杂或已经有用户的系统,通常会选择更加谨慎和逐步的部署策略。

大爆炸部署的优缺点

大爆炸(Big Bang)部署的优点和缺点如下:

优点

  • 简单和快速的部署过程:大爆炸部署通常涉及将整个系统一次性部署到生产环境中,这可以带来快速的部署速度,特别适用于小型项目或新项目。

  • 适用于没有现有用户的情况:如果系统是一个全新的项目或者目标是完全替换现有系统,大爆炸部署可以是一种有效的方式,因为没有现有用户会受到中断或影响。

  • 没有逐步验证和测试的过程:由于一次性部署整个系统,可以跳过逐步验证和测试的过程,这在某些情况下可以节省时间和资源。

缺点

  • 风险高:由于一次性部署整个系统,如果在部署过程中出现问题,可能会对整个系统产生严重影响,包括系统不可用或数据丢失等风险。

  • 缺乏逐步验证和测试的过程:大爆炸部署没有逐步验证和测试的过程,这意味着在部署之前无法逐步发现和解决潜在的问题,可能导致部署后的故障或质量问题。

  • 无法快速回滚:由于一次性部署整个系统,如果在部署后出现问题,回滚可能会变得困难和耗时,需要额外的努力来恢复到先前的稳定状态。

综合考虑这些优点和缺点,大爆炸部署适用于某些特定情况,如全新项目或目标是完全替换现有系统的情况。

然而,它也带来了较高的风险和限制,需要在实施前仔细评估项目的需求和风险才能做出决策。

对于大型、复杂或有现有用户的项目,其他部署策略可能更合适,以逐步验证、测试和控制风险。

滚动(Rolling)部署

什么是滚动部署

滚动(Rolling)部署是一种软件部署策略,旨在逐步将新版本的软件部署到生产环境中,同时保留旧版本的部分或全部功能。它通过逐步替换旧版本来实现软件的更新。

在滚动部署中,新版本的软件被部署到一小部分目标服务器或实例上,然后逐步扩展到整个系统。这种策略允许在部署过程中保持系统的稳定性和可用性,并且如果出现问题,可以快速回滚到旧版本。

image

以下是滚动部署的一般步骤:

  • 准备新版本:确保新版本的软件已经准备好,并经过充分的测试和验证。

  • 选取目标:选择一小部分目标服务器或实例作为初始部署目标。这些目标可以根据负载均衡器、代理或路由配置来控制。

  • 部署新版本:将新版本的软件部署到选定的目标上,替换旧版本的相应组件。

  • 验证和监控:在新版本的目标上进行验证和监控,确保其稳定性和性能。

  • 逐步扩展:如果新版本表现良好,可以逐步将新版本部署到更多的目标服务器或实例上,扩大覆盖范围。

  • 回滚和修复:如果在部署过程中发现问题,可以快速回滚到旧版本,并进行修复和调整。

通过滚动部署,团队可以控制部署过程的速度和影响范围,以最小化对整个系统的冲击。这种策略允许团队快速部署新功能和修复,同时减少风险并提供更好的可控性。

然而,滚动部署也需要注意一些问题,例如确保版本之间的兼容性、数据一致性和系统状态的稳定性。

综合考虑这些因素,滚动部署可以帮助团队平滑地进行软件更新,并确保系统在整个过程中保持稳定和可用。

滚动部署的优缺点

滚动(Rolling)部署的优点和缺点如下:

优点

  • 逐步替换旧版本:滚动部署允许逐步替换旧版本的软件组件,而不是一次性部署整个系统。这种逐步替换的方式可以降低风险,使部署过程更加可控。

  • 控制部署速度和影响范围:滚动部署允许团队控制部署的速度和影响范围。可以逐步将新版本部署到一小部分用户或环境中,通过逐步验证和测试,确保新版本的稳定性和可靠性,然后再扩展到更多的用户和环境。

  • 保持系统的稳定性和可用性:由于滚动部署只逐步替换组件,系统的稳定性和可用性可以得到保持。如果在部署过程中发现问题,可以快速回滚到旧版本,减少对用户的中断和影响。

缺点

  • 部署过程相对较长:相比于大爆炸部署,滚动部署需要更长的时间来逐步部署和验证每个组件。这可能会导致部署时间延长,尤其是对于较大的系统或复杂的环境。

  • 需要管理版本兼容性和数据一致性:滚动部署涉及同时运行多个版本的组件,需要确保新旧版本之间的兼容性,以及数据在过渡期间的一致性。这可能需要额外的管理和协调工作。

  • 需要更多的计划和准备工作:由于滚动部署需要控制部署速度和影响范围,团队需要更多的计划和准备工作。这包括定义逐步替换的策略、制定验证和回滚计划等,以确保顺利的部署过程。

综合考虑这些优点和缺点,滚动部署适用于那些希望逐步控制部署风险和影响范围的项目。

它适用于大型或复杂系统,需要保持稳定性和可用性,并在部署过程中逐步验证和测试新版本。

然而,滚动部署可能需要更多的计划和准备工作,并且部署过程相对较长。团队需要在实施前仔细评估项目需求和限制,以确定滚动部署是否是合适的选择。

蓝绿(Blue-Green)部署

什么是蓝绿部署

蓝绿(Blue-Green)部署策略是一种软件部署策略,旨在实现零宕机和无缝切换的部署过程。它通过同时维护两个完全相同的生产环境(称为蓝环境和绿环境),来实现新版本软件的部署和切换。

在蓝绿部署中,原有的生产环境被称为蓝环境(Blue Environment),而新版本的生产环境被称为绿环境(Green Environment)。初始情况下,所有的流量都被导向到蓝环境,而绿环境保持闲置。

image

下面是蓝绿部署的一般流程:

  • 准备新版本:确保新版本的软件已经准备好,并经过充分的测试和验证。

  • 建立绿环境:在与蓝环境相同的配置和环境中创建绿环境,并部署新版本的软件。

  • 验证和测试:在绿环境中验证和测试新版本的软件,确保其稳定性和性能。

  • 切换流量:将流量逐渐导向绿环境,使一部分用户或流量开始访问新版本的软件。

  • 监控和验证:在切换流量后,持续监控绿环境的性能和稳定性,确保新版本正常运行。

  • 完全切换:如果绿环境表现良好,可以将所有流量完全切换到绿环境,并停用蓝环境。

蓝绿部署的关键优势是实现无缝切换和零宕机的部署过程。通过维护两个完全相同的生产环境,可以在切换流量时实现实时验证和监控,从而最大程度地减少潜在的风险。

然而,蓝绿部署也需要考虑资源利用和成本问题,因为需要同时维护两个环境。此外,对于需要长时间的数据迁移或状态同步的系统,蓝绿部署可能需要更多的计划和准备工作。

总体而言,蓝绿部署策略可以帮助团队实现高可用性和可靠性的软件部署,并提供无缝的版本切换体验。

蓝绿部署的优缺点

蓝绿(Blue-Green)部署的优点和缺点如下:

优点

  • 无缝切换:蓝绿部署允许在两个完全独立的环境中同时运行两个版本的软件,即蓝色环境和绿色环境。这种方式可以实现无缝切换,确保在部署过程中没有用户中断和影响。

  • 快速回滚:由于蓝绿部署中两个环境完全独立,如果在部署后发现问题,可以迅速回滚到之前的环境。这种快速回滚的能力降低了部署过程中的风险,并减少了对用户的中断。

  • 灵活性和可测试性:蓝绿部署提供了灵活性和可测试性。可以在绿色环境中进行各种测试和验证,确保新版本的稳定性和性能。只有在验证成功后,才会将流量切换到绿色环境,确保了部署的质量和可靠性。

  • 容错性和可回滚性:蓝绿部署中的蓝色环境可以作为备份和容错机制。如果在绿色环境中发现问题,可以立即切换回蓝色环境,确保系统的可用性和稳定性。

缺点

  • 需要额外的资源:蓝绿部署需要维护两个完全独立的环境,这需要额外的资源和成本。需要考虑硬件、网络和维护等方面的资源投入。

  • 部署时间相对较长:由于蓝绿部署涉及维护两个环境并进行测试和验证,部署时间可能相对较长,特别是对于大型和复杂的系统。

  • 系统复杂性增加:蓝绿部署引入了两个独立的环境,增加了系统的复杂性。需要进行环境的管理和同步,以确保两个环境之间的一致性和版本控制。

综合考虑这些优点和缺点,蓝绿部署适用于那些希望实现无缝切换、快速回滚和灵活验证的项目。

它对于保持系统的可用性和稳定性非常有价值,并提供了高度的灵活性和可测试性。

然而,蓝绿部署需要额外的资源和部署时间,并增加了系统的复杂性。

团队需要在项目需求和资源限制的基础上权衡利弊,确定是否选择蓝绿部署作为部署策略。

金丝雀(Canary)部署

什么是金丝雀部署

金丝雀部署(Canary Deployment)是一种软件部署策略,旨在逐步引入新版本的软件到生产环境中,以验证其稳定性和性能,同时最小化潜在的影响范围。这个策略的名称灵感来源于金丝雀鸟在矿井中被用作气体泄露检测的传统方法。

金丝雀部署的核心思想是在实际运行环境中的一小部分用户或流量上测试新版本的软件,而大部分用户或流量仍然使用旧版本。通过对新版本进行有限范围的实时测试和监控,可以及早发现潜在的问题,并减少对整个系统的冲击。

image

下面是金丝雀部署的一般步骤:

  • 选择目标群体:确定一小部分用户或流量将会使用新版本。这可以根据用户分群、地理位置或其他标准来选择。

  • 部署新版本:将新版本的软件部署到目标群体中。可以使用负载均衡器、代理或路由配置来控制流量的分发。

  • 监控和验证:对新版本的性能、稳定性和其他关键指标进行监控。如果发现问题,可以快速回滚或修复。

  • 逐步扩展:如果新版本表现良好,可以逐步扩大目标群体的规模,让更多用户或流量使用新版本。

  • 完全切换:在经过充分测试和验证后,可以将所有用户或流量都切换到新版本,并停用旧版本。

金丝雀部署的好处是可以降低风险,因为新版本的影响范围较小,可以更容易地定位和解决问题。

同时,它还可以提供快速反馈和验证新功能或改进的机会。

然而,金丝雀部署也需要注意一些问题,例如确保版本之间的数据一致性、跨版本的兼容性和合理的回滚计划。

金丝雀部署的优缺点

金丝雀部署的优点和缺点如下:

优点

  • 风险控制:金丝雀部署允许将新版本的软件逐步引入生产环境,只对一小部分用户或流量进行测试。这种渐进式的部署方式可以帮助控制风险,减少对整个系统的影响。

  • 快速反馈和修复:通过将新版本部署给一小部分用户,可以快速获得用户的反馈和观察新功能的运行情况。如果出现问题,可以及时修复,避免对所有用户造成负面影响。

  • 数据驱动决策:金丝雀部署可以基于数据进行决策。通过对比新版本和旧版本的性能指标、用户行为等数据,可以评估新功能的效果和性能,并根据数据做出相应调整和决策。

  • 逐步扩展:金丝雀部署可以逐步扩展新版本的用户范围和流量比例。在验证和测试阶段通过逐步增加用户和流量,可以逐步扩展系统的能力和稳定性,以确保系统能够处理更多的用户和负载。

缺点

  • 部署过程复杂性:金丝雀部署涉及对不同版本的软件进行管理和控制,需要额外的部署和配置工作。这增加了系统复杂性和管理的挑战。

  • 需要额外的资源:为了实施金丝雀部署,需要额外的硬件、网络和基础设施资源,以支持并行运行不同版本的软件。

  • 监控和故障排除:金丝雀部署中,需要对不同版本的软件进行监控和故障排除,以确保每个版本的稳定性和性能。这可能增加团队的工作量和复杂性。

综合考虑这些优点和缺点,金丝雀部署适用于那些希望渐进式地引入新功能和控制风险的项目。

金丝雀部署提供了快速反馈和修复的机制,并以数据驱动决策,从而逐步改进和优化软件。

然而,金丝雀部署需要更多的部署和配置工作,并增加了系统的复杂性。

团队需要在项目需求和资源限制的基础上权衡利弊,确定是否选择金丝雀部署作为部署策略。

功能切换(Feature Toggle)部署

什么是功能切换部署

功能切换(Feature Toggle)部署是一种软件部署策略,旨在通过控制功能的开启和关闭来实现逐步部署和灰度发布。它允许在生产环境中动态启用或禁用特定功能,以便更加灵活地管理功能的发布和测试。

功能切换部署的核心概念是引入一个开关(toggle)来控制功能的可见性。这个开关可以是一个配置选项、环境变量、数据库标志或其他形式的开关机制。通过控制开关的状态,可以选择性地启用或禁用特定功能。

image

下面是功能切换部署的一般流程:

  • 准备新功能:确保新功能已经准备好,并经过充分的开发和测试。

  • 引入功能开关:在代码中引入一个功能开关,用于控制新功能的可见性。这个开关可以根据环境、用户、权限或其他条件来进行配置。

  • 默认关闭:初始状态下,新功能的开关处于关闭状态,即新功能对用户不可见。

  • 部署和验证:将包含新功能开关的代码部署到生产环境,并验证新功能的性能和稳定性。

  • 逐渐开启:根据计划和策略,逐渐将功能开关打开,使新功能对一部分用户或流量可见。

  • 监控和反馈:持续监控新功能的使用情况和用户反馈,以确保其稳定性和用户满意度。

  • 完全启用或回滚:根据测试和用户反馈的结果,决定是完全启用新功能还是回滚到旧功能。

功能切换部署的主要优势是可以在生产环境中控制功能的发布,从而最小化潜在的影响范围和风险。

功能切换部署还允许团队在生产环境中进行实时测试和验证,收集用户反馈,并根据需求和条件动态调整功能的可见性。

然而,功能切换部署也需要注意一些问题,例如管理和维护开关的状态、确保不会引入过多的开关和逻辑复杂性,以及处理开关状态的一致性和同步问题。

功能切换部署的优缺点

功能切换(Feature Toggle)的优点和缺点如下:

优点

  • 渐进式发布:功能切换允许在生产环境中渐进式地启用或禁用特定功能。这种方式可以逐步引入新功能,而无需等待整个软件的发布,从而实现更快的功能交付和反馈。

  • 风险控制:功能切换可以帮助降低部署新功能的风险。通过在代码中引入功能开关,可以在需要时立即关闭新功能,以避免潜在的问题对用户的影响。这样可以在生产环境中进行实时控制和调整。

  • 灵活性和定制化:功能切换提供了灵活性和定制化的能力。可以根据不同用户或用户组的需求,启用或禁用特定功能。这样可以根据用户反馈和需求,灵活地调整功能的开启和关闭,以提供个性化的用户体验。

  • A/B测试和性能评估:功能切换可以用于A/B测试和性能评估。通过在功能切换中创建不同的变体,可以比较不同功能的表现和用户反馈。这样可以帮助团队更好地了解用户需求和功能性能,从而做出优化和改进。

缺点

  • 增加复杂性:功能切换引入了额外的代码和逻辑,增加了系统的复杂性。需要在代码中添加和管理功能开关,以及相应的条件逻辑。这可能增加代码的复杂性、维护成本和潜在的错误。

  • 需要有效的管理和沟通:功能切换需要有效的管理和沟通。团队成员需要清楚了解功能开关的状态和使用规则,以确保正确的功能启用和禁用。此外,需要与相关团队和利益相关者进行及时的沟通和协调,以避免功能切换引起的混淆和冲突。

  • 可能导致技术债务:在开发过程中频繁使用功能切换,可能导致累积的技术债务。如果过多的功能开关被保留在代码中,会增加代码的复杂性和维护成本,并可能导致代码的脆弱性和不稳定性。

综合考虑这些优点和缺点,功能切换适用于那些希望灵活控制功能交付和降低风险的项目。它允许逐步发布功能,并根据用户需求和反馈进行灵活调整。然而,功能切换增加了系统的复杂性,需要有效的管理和沟通,并可能导致技术债务的累积。团队需要在项目需求和开发成本的基础上权衡利弊,确定是否选择功能切换作为部署策略。

对比总结

下面是一个对5种不同部署策略的对比图表:

部署策略优点缺点适用场景
大爆炸- 快速部署整个系统
- 适用于小型项目或新系统
- 高风险
- 难以回滚
- 小型项目或新系统
- 可容忍较高的风险
滚动- 逐步部署和验证新版本
- 容易回滚
- 部署时间较长
- 可能影响整个系统
- 大型项目
- 对系统中断时间敏感的应用
蓝绿- 无缝切换
- 快速回滚
- 灵活性和可测试性
- 需要额外资源
- 部署时间较长
- 增加系统复杂性
- 对系统可用性和稳定性要求较高的应用
- 需要逐步扩展系统能力和验证新功能的应用
金丝雀- 风险控制
- 快速反馈和修复
- 数据驱动决策
- 部署过程复杂性
- 需要额外资源
- 渐进式引入新功能
- 需要控制风险和快速获得用户反馈的应用
功能切换- 渐进式发布
- 风险控制
- 灵活性和定制化
- 增加系统复杂性
- 需要有效的管理和沟通
- 可能导致技术债务
- 灵活控制功能交付
- 需要降低风险和根据用户需求定制功能的应用
- A/B测试和性能评估的应用

这个表格提供了对大爆炸、滚动、蓝绿、金丝雀和功能切换部署策略的优点、缺点和适用场景的简要对比。根据具体的项目需求、团队能力和资源限制,可以选择最适合的部署策略来实施软件部署。

最后

在软件工程中,选择适当的部署策略对于项目的成功至关重要。无论是大爆炸、滚动、蓝绿、金丝雀还是功能切换,每种策略都有其独特的优点和缺点,适用于不同的场景和需求。

在选择部署策略时,需要综合考虑项目需求、团队能力和资源限制。关注风险控制、快速反馈、灵活性和用户体验,是做出明智选择的关键。通过合理评估每种策略的优点、缺点和适用场景,能够为项目的成功部署提供有力的支持。

无论你选择哪种部署策略,确保与团队成员和利益相关者进行充分的沟通和协调。

最终,通过选择合适的部署策略,你将能够以高效、可靠的方式将软件交付给用户,并实现项目的成功。

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

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

相关文章

数字中国,开鸿见日

讲个小故事,《晋书乐广传》记载,西晋名士乐广,请大文学家潘岳替自己写一篇文章。潘岳让乐广把意思完完整整告诉他,再由他来动笔,最终写成了名扬当时的《呈太尉辞河南尹表》。时人看过这篇文章,评价乐广是“…

WPF开发txt阅读器5:书籍管理系统,文件夹对话框

文章目录 书柜类文件夹对话框验证 txt阅读器系列: 需求分析和文件读写目录提取类💎列表控件与目录字体控件绑定 书柜类 任何小说阅读器,都免不了要有一个书架功能,而所谓书架,其实就是一个文件夹,通过对…

postgre查询今天,昨天的数据

昨天数据 SELECT* FROMsys_device WHERE age(current_date,to_timestamp(substring(update_time FROM 1 FOR 10),yyyy-MM-dd)) 1 days; 今天数据 SELECT* FROMsys_device WHERE to_char(update_time:: DATE, yyyy-MM-DD hh 24: mi :s) to_char(CURRENT_DATE:: DATE, …

nodejs+vue+mysql汽车新闻资讯网站jtw43

本汽车资讯网站有管理员和用户。管理员功能有个人中心,用户管理,汽车品牌管理,价格分类管理,经销商管理,汽车信息管理,留言板管理,系统管理等。用户可以查看各种汽车信息,还可以进行…

无人机上仅使用CPU实时运行Yolov5(OpenVINO实现)(上篇)

Intel CPU在运行视觉导航等算法时实时性要优于Nvidia等平台,如Jetson Tx2,NX。而Nvidia平台在运行深度学习算法方面具有很大优势,两种平台各有利弊。但是,Intel OpenVINO的推出允许NUC平台实时运行深度学习模型,如目前…

Zookeeper 3.5.7

文章目录 1、Zookeeper 入门1.1 概述1.2 特点1.3 数据结构1.4 应用场景 2、本地安装2.1 本地模式安装2.2 配置参数解读 3、集群操作3.1 集群操作3.1.1 集群安装3.1.2 选举机制(面试重点)3.1.3 集群启停脚本 3.2 客户端命令行操作3.2.1 命令行语法3.2.2 z…

你没见过的黑科技,真会玩

很久之前分享过谷歌浏览器那些有趣的隐藏功能 &#xff0c;今天再分享几个浏览器黑科技。 第一个是这个项目https://github.com/zserge/awfice &#xff0c;利用data URI浏览器也可以当编辑器&#xff0c;输入data:text/html,<body contenteditable styleline-height:1.5;fo…

电力电子助力小米快充生态,磁材创新驱动未来无线充电

6月14日&#xff0c;第二届非晶合金材料在电力电子产业发展中的机遇与挑战研讨会于上海开幕。小米手机部工程师史学伟作为代表出席本次会议&#xff0c;并作《小米无线快充生态纳米晶合金材料应用及材料发展建议》主题报告&#xff0c;分享小米无线充电技术与产品应用&#xff…

【WinForm】C#实现商场收银软件,从面向过程到面向对象,设计模式的应用

文章目录 前言一、收银系统版本11、运行效果2、界面设计3、代码 二、收银系统版本21、运行效果2、界面设计3、代码&#xff1a; 三、收银系统版本31、运行效果2、界面设计3、代码 四、收银系统版本41、运行效果2、界面设计3、代码 总结面向对象23中设计模式总结设计模式关系图 …

C++类的成员变量和成员函数

类的成员变量和普通变量一样&#xff0c;也有数据类型和名称&#xff0c;占用固定长度的内存。但是在定义类的时候不能对成员变量赋值&#xff1b; 类的成员函数也和普通函数一样&#xff0c;都有返回值和参数列表&#xff0c;它与一般函数的区别是&#xff0c;成员函数是一个…

OpenAI深夜放毒:发布GPT-4新模型,GPT-3.5支持16K上下文,并且价格降低75%

一觉起来&#xff0c;发现OpenAI Twitter更新了&#xff0c;而且更新力度很大&#xff0c;这真是深夜放毒。 下面我们看下OpenAI本次的重大更新都有哪些&#xff1f; 函数调用能力 在Chat Completions API中引入了新的功能调用能力。gpt-4-0613和gpt-3.5-turbo-0613版本已进行了…

原创 | 一文读懂足球比赛中的随机博弈

作者&#xff1a;陈之炎本文约1500字&#xff0c;建议阅读5分钟 本文介绍了如何在足球比赛中读懂随机博弈。 据悉世界足坛的传奇球星梅西将于2023年6月中率领阿根廷国家足球队来到中国北京&#xff0c;参加一场备受瞩目的比赛。这场比赛成为了足球迷们心心念念的盛事&#xff0…

熬夜三晚之深度解析DuckDB MetaPipeline

深度解析DuckDB MetaPipeline 深度解析DuckDB MetaPipeline 1.导语 2.基础理论 3.HashJoin深度解析 3.1 RESULT_COLLECTOR 3.2 PROJECTION 3.3 HASH_JOIN 4.Ready 4.1 翻转 4.2 MetaPipeline与pipeline 5.汇总 1.导语 DuckDB 是…

用 ChatGPT 重构工作流程

如果你第一次听说 ChatGPT&#xff0c;那你要反思一下自己的信息获取渠道是不是出了问题&#xff0c;作为 AI 时代最强代表&#xff0c;你一定要亲自去体验一下&#xff0c;而不是道听途说。 公司需要降本增效&#xff0c;个体也一样&#xff0c;在工作中畅快应用 AI 来帮助自己…

chatgpt赋能python:Python断点调试指南:让调试更高效

Python断点调试指南&#xff1a;让调试更高效 在Python编程中&#xff0c;调试是一个必不可少的环节。当我们面临代码出现错误或程序不按预期运行时&#xff0c;如何快速找到问题&#xff0c;解决它们呢&#xff1f;这时候断点调试就发挥了重要的作用。本篇文章主要介绍Python…

NI VeriStand

概览 本文简要概述了NI VeriStand以及如何创建实时测试应用程序&#xff0c;并介绍如何结合NI LabVIEW等不同软件环境采用不同的方式创建额外的功能&#xff0c;如模型导入、FPGA功能自定义以及将NI LabVIEW Run-Time控件添加为工作区对象等。 内容 什么是NI VeriStand什么是…

Vicuna本地部署的实战方案

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

全志V3S嵌入式驱动开发(屏幕花屏问题的解决)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 之前我们测试过lcd屏幕驱动以及触控驱动时&#xff0c;当时确实是成功的。但是由于这个屏幕是直接从旗舰店买的&#xff0c;价格略贵&#xff0c;有…

vue3+vite+element-plus创建项目,修改主题色

element-plus按需引入&#xff0c;修改项目的主题色 根据官方文档安装依赖 ​npm install -D unplugin-vue-components unplugin-auto-import vite.config.js配置 // vite.config.ts import { defineConfig } from vite import AutoImport from unplugin-auto-import/vite …