敏捷开发:拥抱变化,持续交付价值的艺术

目录

敏捷开发:拥抱变化,持续交付价值的艺术

引言

第一部分:敏捷开发是什么?

a.定义:敏捷开发的基本概念和核心原则

b.历史:敏捷宣言的诞生和敏捷开发的历史背景

c.价值观:敏捷宣言的12条原则

d.特点:与瀑布模型的对比

第二部分:为什么选择敏捷开发?

第三部分:敏捷开发的实践方法

a.Scrum

b.Kanban

c.极限编程(XP)

d.精益开发

第四部分:如何实施敏捷开发?

a.团队组建

b.需求梳理

c.计划制定

d.迭代开发

e.评审和调整

f.持续集成

g.交付和部署

第五部分:敏捷开发的最佳实践

a.沟通

b.透明度

c.反馈

d.学习和改进

e.工具和自动化

f.其他最佳实践

第六部分:敏捷开发的挑战与应对

a.组织文化

b.规模扩展

c.度量和评估

d.培训和教育

e.其他挑战与应对

结语

a.敏捷开发的价值和重要性

b.鼓励读者开始敏捷之旅


敏捷开发:拥抱变化,持续交付价值的艺术

引言

在快速变化的技术和市场环境中,软件开发项目面临着前所未有的挑战。传统的瀑布模型,尽管在某些情况下仍然有效,但往往因为其僵化和缺乏灵活性而受到批评。敏捷开发,作为一种新兴的软件开发方法论,应运而生,旨在解决这些问题,提供一种更加灵活、响应快速的开发方式。

第一部分:敏捷开发是什么?

a.定义:敏捷开发的基本概念和核心原则

敏捷开发是一种以人为核心、迭代、灵活的软件开发方法论。它强调团队合作、客户参与、快速响应变化和持续交付价值。敏捷开发的核心是敏捷宣言,该宣言由17位软件开发者在2001年提出,它包括四个核心价值观和十二条原则

敏捷宣言的四个核心价值观是:

  1. 个体和交互高于流程和工具。
  2. 可工作的软件高于详尽的文档。
  3. 客户合作高于合同谈判。
  4. 响应变化高于遵循计划。

这些价值观强调的是人的因素和适应性,而不是僵化的流程和文档。

b.历史:敏捷宣言的诞生和敏捷开发的历史背景

敏捷开发的起源可以追溯到2001年,当时17位软件开发者聚集在美国犹他州的雪鸟滑雪度假村,讨论软件开发中的各种问题和挑战。他们意识到,传统的瀑布模型无法满足快速变化的市场需求和客户期望,因此他们共同起草了敏捷宣言

敏捷宣言的诞生标志着软件开发方法论的一次重大转变,它强调了软件开发过程中的适应性、灵活性和人的因素,与之前以文档和流程为核心的方法论形成了鲜明对比。

c.价值观:敏捷宣言的12条原则

敏捷宣言的12条原则进一步阐述了敏捷开发的核心价值观和实践:

  1. 我们最重要的目标是通过持续交付有价值的软件满足客户的需求。
  2. 即使在开发后期,也欢迎变更需求。敏捷过程利用变更为客户的竞争优势。
  3. 经常交付可工作的软件,周期从几周到几个月。
  4. 业务人员和开发者必须每天一起工作。
  5. 建立项目团队的个体和交互,给予他们所需的环境和支持,并且信任他们能够完成工作。
  6. 面对面的沟通是信息传递效率和效果最佳的方式。
  7. 可用的软件是衡量进度的主要指标。
  8. 敏捷过程提倡可持续的开发速度。赞助者、开发者和用户应该能够保持一个恒定的速度。
  9. 持续关注技术卓越和良好设计可以增强敏捷性。
  10. 简洁——通过尽可能少的工作量做到最大化的工作。
  11. 最佳的架构、需求和设计来自于自组织的团队。
  12. 团队定期反思如何更有效率,然后调整团队的行为。

这些原则为敏捷开发提供了具体的指导和实践建议。

d.特点:与瀑布模型的对比

瀑布模型是一种传统的软件开发方法论,它将软件开发过程划分为一系列严格的阶段,每个阶段完成后才能开始下一个阶段。瀑布模型的特点包括:

  • 严格的阶段划分。
  • 每个阶段完成后才能开始下一个阶段。
  • 重视文档和计划。
  • 变更需求困难。

与瀑布模型相比,敏捷开发的特点包括:

  • 迭代开发,允许在开发过程中不断调整和改进。
  • 强调团队合作和沟通。
  • 重视客户参与和反馈。
  • 快速响应变化,灵活调整计划。

敏捷开发通过其迭代和灵活的特点,能够更好地适应快速变化的市场和客户需求,提高软件开发的效率和质量。

第二部分:为什么选择敏捷开发?

  1. 适应性:敏捷开发强调快速响应变化的能力。在软件开发过程中,需求往往不是一成不变的。敏捷开发允许团队在项目周期中不断调整和适应,以满足客户或市场的变化需求。这种灵活性可以减少因需求变更带来的风险和成本。

  2. 客户满意度:敏捷开发通过持续交付价值和客户参与来提高客户满意度。团队与客户紧密合作,确保开发的产品或服务能够满足客户的真正需求。客户可以在整个开发过程中提供反馈,帮助团队及时调整方向,从而提高最终产品的质量。

  3. 团队合作:敏捷开发鼓励跨职能团队的协作和沟通。团队成员来自不同的专业背景,具有不同的技能,他们共同工作以达成项目目标。这种合作方式可以提高团队效率,促进知识的共享和创新。

  4. 风险管理:敏捷开发有助于早期发现和解决问题。通过短周期的迭代开发,团队可以快速识别问题并采取行动,避免问题在项目后期变得难以控制。这种早期介入的方法减少了项目失败的风险。

  5. 效率:敏捷开发通过减少浪费和提高生产力来提高效率。它强调只做必要的工作,避免过度设计和过度开发。团队专注于提供价值,而不是花费时间在可能永远不会被使用的功能上。这有助于减少时间和资源的浪费。

总的来说,敏捷开发是一种以人为核心、迭代、增量的软件开发方法论。它通过提高适应性、客户满意度、团队合作、风险管理和效率,帮助组织更有效地交付高质量的软件产品。

第三部分:敏捷开发的实践方法

a.Scrum

Scrum框架的介绍: Scrum是一个轻量级的敏捷框架,用于管理和控制复杂项目的软件开发过程。它通过提供一种结构化的方法来促进团队合作,提高生产力和透明度。

Scrum中的角色

  • 产品负责人(Product Owner):负责定义产品愿景,管理产品待办事项列表(Product Backlog),并确保团队交付的产品符合客户的需求。
  • Scrum Master:负责确保团队遵循Scrum框架,并帮助团队解决阻碍进度的问题。
  • 开发团队:一个跨职能的团队,负责交付潜在可交付的产品增量。

Scrum的事件

  • Sprint一个时间固定(通常为2-4周)的迭代周期,团队在其中完成特定的工作量
  • Sprint计划会议:开始每个Sprint时,团队计划在该Sprint中完成的工作。
  • 每日Scrum:团队成员每天进行的短会议(比如早上站会10分钟),讨论进展和计划。
  • Sprint回顾:在Sprint结束时,团队展示完成的工作,并收集反馈。
  • Sprint评审会议:与利益相关者一起审查Sprint成果,并根据需要调整产品待办事项列表。

Scrum的工件

  • 产品待办事项列表一个优先级列表,列出了所有需要完成的工作
  • Sprint待办事项列表:在Sprint计划会议中确定的,将在当前Sprint中完成的工作项。

在Scrum框架中,产品负责人(Product Owner)和Scrum Master是两个关键角色,各自承担着不同的职责:

产品负责人(Product Owner)的职责:

  1. 管理产品待办事项列表(Product Backlog):产品负责人负责定义和维护产品待办事项列表,这是项目需求和特性的优先级列表。
  2. 确保产品愿景:他们需要确保产品符合公司的愿景和战略目标。
  3. 优先级排序:根据业务价值和技术可行性,对产品待办事项列表中的条目进行排序。
  4. 定义用户故事:为每个待办事项定义清晰的用户故事,帮助开发团队理解需求。
  5. 与利益相关者沟通:与客户、用户和其他利益相关者沟通,确保他们的需求和期望被理解和满足。
  6. 接受或拒绝完成的工作:在Sprint评审会议中,产品负责人需要根据验收标准来接受或拒绝团队完成的工作。
  7. 做出决策:在开发过程中,产品负责人需要做出决策,以解决需求上的冲突和优先级问题。

Scrum Master的职责:

  1. 确保Scrum实践:Scrum Master负责确保团队遵循Scrum框架和流程。
  2. 服务于团队:他们作为团队的服务者,帮助团队消除阻碍和障碍,确保团队可以专注于工作。
  3. 促进Scrum事件:Scrum Master负责组织和促进Scrum事件,如Sprint计划会议、每日Scrum、Sprint回顾和评审会议。
  4. 保护团队:保护团队免受外部干扰,确保团队能够专注于他们的工作。
  5. 教练和指导:Scrum Master帮助团队成员理解Scrum原则,并指导他们如何更有效地工作。
  6. 解决冲突:在团队内部或团队与利益相关者之间出现冲突时,Scrum Master需要介入并帮助解决。
  7. 持续改进:Scrum Master帮助团队识别改进机会,并引导团队实施改进措施。

产品负责人和Scrum Master的职责虽然不同,但他们的工作是互补的。产品负责人关注产品的价值和方向,而Scrum Master则专注于确保团队能够高效地工作,并遵循Scrum实践。两者的合作对于Scrum团队的成功至关重要。

b.Kanban

Kanban板的介绍: Kanban是一种可视化的项目管理方法,它帮助团队成员理解工作流程,并管理任务和流程。Kanban板通常是一个看板,上面有多个列,代表工作的不同阶段。

流动和限制理论

  • 流动:工作项在系统中从一个阶段移动到另一个阶段。
  • 限制:识别和管理工作流程中的瓶颈,以优化整体效率。

c.极限编程(XP)

测试驱动开发(TDD): 一种软件开发方法,要求开发人员先编写单元测试,然后编写能够通过这些测试的代码。TDD鼓励简洁的设计和提高代码质量。

持续集成(CI): 团队成员频繁地将代码集成到共享仓库中,每次集成都通过自动化测试来确保代码的集成不会破坏现有的功能。

配对编程: 两名开发人员在同一台计算机上共同工作,一人编写代码,另一人审查。这种方法可以提高代码质量,促进知识和技能的共享。

d.精益开发

减少浪费: 精益开发的目标是识别和消除任何不增加价值的活动,从而提高效率和生产力。

持续改进(Kaizen): 一种持续改进的方法,鼓励团队不断寻找改进的机会,以提高工作流程和产品质量。

每种敏捷实践方法都有其特定的工具和实践,团队可以根据自己的需求和环境选择最合适的方法。敏捷开发的核心是适应性、协作和持续改进,这些实践方法都是为了支持这些原则。

第四部分:如何实施敏捷开发?

实施敏捷开发是一个涉及多个步骤和实践的过程,以下是如何实施敏捷开发的详细步骤:

a.团队组建

  1. 组建跨职能团队:创建一个由不同专业背景的成员组成的团队,包括开发人员、测试人员、业务分析师等,确保团队能够独立完成从概念到交付的所有工作。

b.需求梳理

  1. 与客户合作:与客户紧密合作,确保开发的产品或服务能够满足客户的需求。
  2. 梳理用户故事:与客户一起定义用户故事,这些故事描述了产品如何满足用户的需求。用户故事通常遵循"作为[角色],我希望[功能],以便[收益]"的模式。

c.计划制定

  1. 制定迭代计划在每个迭代周期(Sprint)开始时,团队需要制定一个计划,确定在该周期内要完成的工作
  2. 任务分配将用户故事分解为更小的任务,并分配给团队成员

d.迭代开发

  1. 短周期迭代:采用短周期(通常为1-4周)的迭代开发,每个迭代结束时都能交付一个潜在可交付的产品增量。
  2. 每日站立会议团队成员每天进行站立会议,分享他们的进展、计划和遇到的障碍

e.评审和调整

  1. 迭代评审:在每个迭代结束时,团队展示他们的工作成果,收集利益相关者的反馈。
  2. 回顾会议:团队回顾迭代过程,讨论哪些做得好,哪些需要改进,并制定相应的行动计划。

f.持续集成

  1. 自动化测试:开发自动化测试来确保代码的质量,并在开发过程中持续运行这些测试。
  2. 部署:通过自动化部署流程,确保代码的更改可以快速且频繁地集成到主分支。

g.交付和部署

  1. 逐步交付:逐步向客户交付功能,允许客户在开发过程中提供反馈,并根据反馈进行调整。
  2. 部署功能:将完成的功能部署到生产环境,确保产品可以持续地提供价值。

实施敏捷开发不仅仅是遵循一系列步骤,更重要的是培养一种文化和思维方式,其中包括开放的沟通、团队协作、持续改进和对变化的快速响应。通过这些实践,团队能够更有效地响应变化,提高客户满意度,并持续交付高质量的产品。

第五部分:敏捷开发的最佳实践

敏捷开发的最佳实践是一系列原则和行动,旨在帮助团队更高效地工作,提高产品质量,并满足客户的需求。以下是一些关键的最佳实践:

a.沟通

  1. 促进团队内部沟通:确保团队成员之间有频繁和开放的沟通,以便共享信息和协调工作。
  2. 与客户合作:与客户保持紧密的沟通,确保开发的产品或服务真正符合他们的需求。
  3. 定期会议:定期举行会议,如每日站立会议、迭代评审和回顾会议,以促进沟通和协作。

b.透明度

  1. 过程透明:确保团队的工作过程对所有利益相关者都是透明的,这有助于建立信任和理解。
  2. 进度透明:定期更新项目进度,让团队成员和客户都能清楚地了解当前状态和下一步计划。

c.反馈

  1. 积极寻求反馈:主动向客户和团队成员寻求反馈,了解他们对产品或服务的看法。
  2. 利用反馈进行改进:将收到的反馈作为改进产品和过程的重要信息来源。

d.学习和改进

  1. 持续学习:鼓励团队成员持续学习新技能、新工具和新方法,以保持竞争力。
  2. 改进过程:基于团队的经验和客户的反馈,不断改进开发过程和实践。

e.工具和自动化

  1. 选择合适的工具:选择能够帮助团队提高效率和协作的工具,如项目管理软件、代码仓库、持续集成工具等。
  2. 自动化重复任务:通过自动化测试、部署和构建等重复性任务,减少人为错误并提高效率。
  3. 持续集成/持续部署(CI/CD):实施持续集成和持续部署流程,以确保代码的快速集成和部署。

f.其他最佳实践

  1. 用户故事和验收测试:使用用户故事来定义需求,并编写验收测试来验证功能是否满足用户故事的要求。
  2. 技术债务管理:积极识别和管理技术债务,避免长期的维护问题和成本。
  3. 敏捷领导:管理层应该支持敏捷实践,为团队提供必要的资源和支持,同时避免过度干预。

通过遵循这些最佳实践,敏捷团队可以更有效地协作,更快地响应变化,持续交付高质量的产品,并最终提高客户满意度。

复制再试一次分享

第六部分:敏捷开发的挑战与应对

在实施敏捷开发的过程中,团队和组织可能会面临一些挑战。以下是一些常见的挑战以及可能的应对策略:

a.组织文化

挑战:传统的组织文化可能不支持敏捷开发所需的开放沟通、团队自组织和快速决策。

应对

  • 培养敏捷文化:通过教育和培训,帮助员工理解敏捷的价值观和原则。
  • 领导层的支持:确保管理层理解并支持敏捷转型。
  • 小步快跑:逐步实施敏捷实践,允许团队适应新的工作方式。

b.规模扩展

挑战:在大型项目或组织中实施敏捷可能会遇到沟通和协调的困难。

应对

  • 采用敏捷框架:如Scrum of Scrums或LeSS(Large-Scale Scrum),这些框架为大型团队提供了特定的敏捷实践。
  • 强化沟通:建立跨团队的沟通机制,确保信息流通。
  • 分布式敏捷:为分布式团队提供必要的工具和流程,以支持远程协作。

c.度量和评估

挑战:确定哪些指标可以准确反映敏捷开发的成功,以及如何收集和分析这些数据。

应对

  • 定义成功指标:与团队和利益相关者一起确定衡量敏捷成功的关键指标。
  • 使用敏捷度量工具:采用工具来跟踪和报告敏捷度量,如燃尽图、速度图和累积流图。
  • 持续监控和调整:定期审查度量结果,并根据需要调整过程。

d.培训和教育

挑战:团队成员可能缺乏敏捷开发所需的知识和技能。

应对

  • 提供敏捷培训:为团队成员提供Scrum、Kanban或其他敏捷方法的培训。
  • 内部分享会:鼓励团队成员分享他们的知识和经验。
  • 持续学习:创建一个学习文化,鼓励团队成员不断学习和成长。

e.其他挑战与应对

  • 抵抗变化:人们通常对变化持保守态度,这可能会阻碍敏捷的实施。
    • 应对:通过沟通和教育来减少对变化的恐惧,展示敏捷带来的好处。
  • 技术债务:在快速迭代的过程中,可能会积累技术债务。
    • 应对:定期安排时间来偿还技术债务,确保代码质量和可维护性。
  • 需求管理:在敏捷开发中管理不断变化的需求可能是一个挑战。
    • 应对:使用用户故事和产品待办事项列表来管理需求,并确保它们清晰、有序。

通过识别这些挑战并采取相应的应对策略,组织可以更顺利地实施敏捷开发,并从中获得最大的收益。

结语

在结语部分,我们可以从以下几个方面来总结敏捷开发的价值和重要性,并鼓励读者开始他们的敏捷之旅:

a.敏捷开发的价值和重要性

  1. 快速响应变化:在不断变化的市场和技术环境中,敏捷开发提供了一种快速适应变化的方法,使团队能够及时调整方向,满足客户需求。

  2. 提高客户满意度:通过持续交付价值和与客户紧密合作,敏捷开发确保了开发的产品或服务能够满足甚至超越客户的期望。

  3. 增强团队合作:敏捷开发鼓励跨职能团队的协作和沟通,有助于团队成员之间的知识共享和集体智慧的发挥。

  4. 优化资源利用:通过减少浪费和提高生产力,敏捷开发帮助团队更有效地利用资源,实现更高的效率和更好的成果。

  5. 持续改进:敏捷开发强调持续学习和改进,鼓励团队不断寻找提升工作流程和产品质量的机会。

  6. 风险管理:通过早期发现和解决问题,敏捷开发有助于降低项目失败的风险,确保项目顺利进行。

b.鼓励读者开始敏捷之旅

  1. 拥抱变化:鼓励读者接受敏捷开发的核心理念,即在变化中寻找机会,而不是抵抗变化。

  2. 开始实践:鼓励读者从小处着手,开始实践敏捷开发的原则和实践,逐步扩大到整个组织或项目。

  3. 持续学习:鼓励读者保持好奇心和学习态度,不断探索新的敏捷方法和工具,以适应不断变化的环境。

  4. 开放沟通:鼓励读者与团队成员和利益相关者保持开放的沟通,这是敏捷成功的关键。

  5. 寻求支持:鼓励读者寻求管理层和同事的支持,因为敏捷转型需要团队和组织的共同努力。

  6. 庆祝成功:鼓励读者庆祝每一个小的成功,这有助于建立团队的信心和动力,推动敏捷之旅的持续前进。

敏捷开发不仅仅是一种软件开发方法,它更是一种思维方式和文化,能够帮助团队和组织在快速变化的世界中保持竞争力。通过实施敏捷开发,组织能够更灵活地应对挑战,更有效地交付价值,并最终实现长期的成功和成长。

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

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

相关文章

DP读书:《ModelArts人工智能应用开发指南》(一)人工智能技术、应用平台

怎么用ModelArts人工智能应用 训练底座训练案例 盘古矿山模型Main config.py 训练底座 训练案例 盘古矿山模型 Main 下面是快速助手 https://support.huaweicloud.com/qs-modelarts/modelarts_06_0006.html 准备开发环境 在ModelArts控制台的“ 开发环境 > Notebook”页面…

英伟达再创历史,市值超越苹果,跃居全球第二大上市公司

进入2024年,英伟达股价依然突飞猛进。 今天凌晨,英伟达凭借其在AI领域强劲的创新能力和市场势头,达成了历史性的里程碑——市值首次突破3万亿美元,成功超越苹果,成为全球市值第二大上市公司。 排名仅次于微软。 英伟达…

从当当网批量获取图书信息

爬取当当网图书数据并保存到本地,使用request、lxml的etree模块、pandas保存数据为excel到本地。 爬取网页的url为: http://search.dangdang.com/?key{}&actinput&page_index{} 其中key为搜索关键字,page_index为页码。 爬取的数据…

低代码与人工智能的深度融合:行业应用的广泛前景

引言 在当今快速变化的数字化时代,企业面临着越来越多的挑战和机遇。低代码平台和人工智能技术的兴起,为企业提供了新的解决方案,加速了应用开发和智能化转型的步伐。 低代码平台的基本概念及发展背景 低代码平台是一种软件开发方法&#x…

音视频直播(一)

协议基础篇 直播协议基础推流与拉流推流拉流 直播传输协议RTMP传输协议 && HTTP-FLV协议为什么RTMP做推流,反而很少做拉流?HTTP-FLV协议 RTSP协议HLS协议SRT协议 WebRTC协议应用于直播 直播协议基础 从网络上搜寻到的有关推流与拉流的示意图 从…

PhpSpreadsheet表格导出

个人笔记记录 使用PhpSpreadsheet 导出excel。 多重表头生成excel 表 //读取数据库public function demo1(){// 连接数据库$config Config::get(databaseedc);$db Db::connect($config);$data $db->name("xxxx")->alias(a)->field(main_header, sub_hea…

【ROS2大白话】三、给turtlebot3安装realsense深度相机

系列文章目录 【ROS2大白话】一、ROS2 humble及cartorgrapher安装 【ROS2大白话】二、turtlebot3安装 【ROS2大白话】三、给turtlebot3安装realsense深度相机 【ROS2大白话】四、ROS2非常简单的传参方式 文章目录 系列文章目录效果展示一、修改model.sdf文件1. 路径位置2. 修改…

【Linux取经路】网络套接字编程——初识篇

文章目录 一、端口号1.1 认识端口号1.2 端口号 VS 进程 PID 二、认识 TCP 协议三、认识 UDP四、网络字节序列五、socket 编程接口5.1 常用 API5.2 sockaddr 结构 六、结语 一、端口号 网络通信的本质是应用层软件进行数据的发送和接受,软件在启动之后,本…

基于RNN和Transformer的词级语言建模 代码分析 _generate_square_subsequent_mask

基于RNN和Transformer的词级语言建模 代码分析 _generate_square_subsequent_mask flyfish Word-level Language Modeling using RNN and Transformer word_language_model PyTorch 提供的 word_language_model 示例展示了如何使用循环神经网络RNN(GRU或LSTM)和 Transforme…

顶顶通呼叫中心中间件-同振和顺振配置步骤(mod_cti基于FreeSWITCH)

顶顶通呼叫中心中间件-同振和顺振配置步骤(mod_cti基于FreeSWITCH) 一、拨号方案配置 1、同振 win-ccadmin配置方法 1、点击拨号方案->2、在红框中输入同振->3、点击添加->4、根据图中配置,配置好了等待一分钟即可生效。 web-ccadmin配置方法 2、顺振…

关于浔川python社在全网博主原力月度排名泸州地区排名第三名的调查——浔川总社部

6月6日,浔川python社在全网博主原力月度排名泸州地区排名第三名。 引起了广大python爱好者等的不满,为什么浔川python社这么一个大的python社排名第三? 2024-06-04 21:59:52 浔川python社在全网博主原力月度排名泸州地区排名第一名。 2024-…

重复文件怎么查找并清理,试试这5个文件去重方法(新)

重复文件怎么查找并清理?日常工作中,我们使用电脑的时间长了,都会累积大量好的文件,这其中难免会出现重复文件。这些重复文件不仅占用了电脑磁盘空间,还会降低电脑性能。因此,我们必须定期对重复文件查找出…

每日两题 / 198. 打家劫舍 74. 搜索二维矩阵(LeetCode热题100)

198. 打家劫舍 - 力扣(LeetCode) dp[i]表示考虑前i 1号房屋,能获取的最大金额。对于没一间房屋都有偷与不偷两种选择 如果偷,需要从dp[i - 2]转移,因为不能偷窃相邻房屋,dp[i] dp[i - 2] nums[i] 如果…

【Linux取经路】信号的发送与保存

文章目录 一、重新理解发送信号二、信号的保存、阻塞信号的概念三、信号集操作函数3.1 sigprocmask3.2 sigpending 四、阻塞信号代码验证五、结语 一、重新理解发送信号 进程通过位图来实现对普通信号(1-31号信号)的保存,该位图保存在进程的…

【漏洞复现】I Doc View 在线文档预览 qJvqhFt.json 任意文件读取漏洞(XVE-2024-2115)

0x01 产品简介 iDocView是一个在线文档解析应用,旨在提供便捷的文件查看和编辑服务。 0x02 漏洞概述 iDocView是一个在线文档预览系统 /iew/gJvghftjson 接口处存在任意文件读取漏洞,未授权的攻击者可以利用此接口并携带默认token读取服务器敏感文件信…

面试Tip--java创建对象的四种方式

java创建对象一共有四种方式,但是我们在写代码的时候用的new 关键字偏多,像一些接口对接则是序列化创建对象偏多,今天我们来简单介绍下使用场景以及各个方式 1. 使用 new 关键字 这是最常见的创建对象的方式。 public class Example {priva…

【AIGC X UML 落地】通过多智能体实现自然语言绘制UML图

前天写了篇博文讲到用PlantUML来绘制C类图和流程图。后台有读者留言,问这步能否自动化生成,不想学习 PlantUML 语法。 我想了下,发现这事可行,确实可以做到通过自然语言的描述就能实现 UML图的绘制,昨天晚上加了个班到…

统信UOS SSH服务升级(ubuntu20)内网

服务器配置 系统信息 SSH版本 目标版本 openssh-server_8.2p1-4_arm64.deb 因为不通互联网,所以所有deb包需要手动下载(可以连接互联网的可以自动忽略手动下载deb步骤,直接apt-get install xxx 即可) 升级步骤 !!!deb下载方式…

在Jenkins 中使用 NVM 管理 Node.js 部署项目的自动化脚本

在Jenkins 中使用 NVM 管理 Node.js 部署项目的自动化脚本 人生旅途,总有人不断地走来,有人不断地离去。当新名字变成老名字,当老的名字渐渐模糊,又是一个故事的结束和另一个故事的开始。 在现代软件开发中,持续集成/持…

Windows11下Docker使用记录(五)

目录 准备1. WSL安装cuda container toolkit2. win11 Docker Desktop 设置3. WSL创建docker container并连接cuda4. container安装miniconda(可选) Docker容器可以从底层虚拟化,使我们能够在 不降级 CUDA驱动程序的情况下使用 任何版本的CU…