使用 Github Action实现 flutter 项目的 CI/CD
CI/CD,即持续集成(Continuous Integration)和持续交付/部署(Continuous Delivery/Deployment),是一种软件开发实践,通过引入自动化的构建、测试和部署过程,来提升软件质量并加速交付周期;
使用 CI/CD 可以协助开发和运维人员保障我们软件工程质量
频繁的集成
在CI/CD流程中,开发人员会频繁地将代码合并到主分支,这可以避免长时间的分支开发导致的集成问题。
自动化构建和测试
每次代码变动都会触发自动化的构建和测试过程,这样可以及时发现并解决问题,而不是在软件开发周期的后期进行手动测试。自动化测试覆盖了单元测试、集成测试、功能测试、性能测试等,保证了代码的健壮性和可靠性。
快速反馈
如果在构建或测试阶段发现任何问题,开发人员会立即收到通知。这样,问题可以在早期阶段解决,修复的成本和影响将降到最低。
一致性的构建和部署环境
CI/CD可以确保在同一环境中构建和部署软件,从而避免了“在我机器上运行得好好的”问题。通过容器化技术,可以确保开发、测试和生产环境的一致 ...
leetcode-day1-最长子串
最长子串是什么题目: 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
12345eg: 输入: s = "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
最长子串能解决什么问题?最长子串这种问题在计算机科学和编程中有很多引用场景. 找到一个 字符串 中的最长无重复子串可以有以下应用场景:
* 文本分析以及搜索功能 在搜索引擎和数据库搜索中, 最长子串可以用来帮助我们找到最长的匹配字符串, 从而提高搜索效率和搜索精度
* 密码验证 可以用最长子串的概念来要求用户创建的密码必须包含一定长度的无重复字符串序列, 用来保证密码的复杂性和安全性
* 软件开发 在开发编程语言和工具时,最长子串问题可以用于语法高亮显示、自动补全、错误检测等功能。例如,语法高亮显示可能需要找到最长的匹配关键字,自动补全可能需要找到最长的匹配字符串,错误检测可能需要找到最长的不符合语法规则的字符串。
* 数据压缩 数据压缩中,最长子串问题可以用于查找重复的数据段,以 ...
leetcode-day0-两数之和
在算法领域,有一个经典问题,被称为“两数之和”。给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。这个问题可以用不同的方法解决,但是其中最常用的方法是使用哈希表。
两数之和哈希表算法的思想是,通过将数组中的每个元素存储在哈希表中,可以在O(1)时间内查找到特定的元素。因此,我们可以遍历整个数组,对于每个元素,在哈希表中查找是否存在与目标值的差值相等的元素。
给出代码如下:
123456789def two_sum(nums, target): num_map = {} # 创建一个空字典来保存数字和其对应的索引 for i, num in enumerate(nums): # 遍历输入列表 complement = target - num # 计算目标值与当前数字的差值 if complement in num_map: # 如果这个差值已经在字典中(也就是说,这个差值是之前遍历过的数字) return [num_map[complement], i] # 返回这个数字的索引和 ...
算法 排序
常用排序算法在软件工程中的应用本文将介绍软件工程中常用的排序算法,包括冒泡排序、选择排序、插入排序、快速排序、归并排序和堆排序,以及它们的基本思想和实现方法。了解这些排序算法将有助于我们在软件开发过程中根据实际需求选择合适的排序方法。
1 引言排序算法在软件工程中的应用非常广泛,它们用于对数据进行排序,以便进行进一步的处理和分析。本文将探讨六种常见的排序算法,分别是冒泡排序、选择排序、插入排序、快速排序、归并排序和堆排序。了解这些排序算法有助于我们在软件开发过程中根据实际需求选择合适的排序方法。
1.1. 冒泡排序冒泡排序是一种简单的排序算法,通过重复地遍历要排序的序列,比较相邻元素并交换它们的顺序(如果顺序错误),直到没有元素需要交换为止。冒泡排序的时间复杂度为 O(n^2),在处理大规模数据时效率较低。
1.2. 选择排序选择排序的基本思想是在每次遍历过程中找到序列中的最小(或最大)值,并将其与序列的首(或尾)元素交换。然后在剩余序列中继续执行相同的操作,直到整个序列有序。选择排序的时间复杂度同样为 O(n^2)。
1.3 插入排序插入排序的工作原理类似于我们手动对扑克牌进行排序。 ...
使用Flutter创建樱花落下动画
在本篇博客中,我们将学习如何使用 Flutter 制作一个樱花落下的动画效果。我们将实现一个简单的樱花落下动画,并加入微风效果以及淡入淡出效果。我们的最终目标是让樱花以不同的速度和初始位置落下,并在屏幕上按照一定的轨迹随微风飘动。
开始之前确保你已经安装了 Flutter 开发环境。本教程适用于具有一定 Flutter 基础知识的开发者。
创建动画首先,我们需要创建一个 StatefulWidget,因为我们需要使用动画控制器。接下来,我们在 State 类中使用 SingleTickerProviderStateMixin 来创建 AnimationController。
12345678910111213141516171819202122232425class FallingLeavesAnimation extends StatefulWidget { @override _FallingLeavesAnimationState createState() => _FallingLeavesAnimationState();}class _Fall ...
