你能用低代码完成编码挑战吗?当然可以!但为什么呢?
在申请软件工程职位时,目前的准备趋势是完成“LeetCode”挑战。LeetCode 是一个专门为软件工程师准备潜在面试问题而设计的问题网站。目前有两千多个挑战,全部旨在测试应聘者对效率、模式和解决问题的知识。
因此,我们有一个完整的网站,里面充满了专门用于测试多种语言的编码技能的编码挑战。我曾经使用过 C# 和 JavaScript,因此我可以轻松地使用其中一种语言来解决这些问题,但是,现在我不再这样做了。我现在是低代码的倡导者。我当然应该尝试用低代码来解决这些问题吧?
当然,低代码并不是专门为解决这类问题而设计的。它是一个用于构建业务应用程序的平台,而不是专注于超高效的解决问题的平台。然而,这些挑战被用来测试候选人是有原因的:它们可以应用于现实世界的应用程序。所以,让我们来尝试一下这个挑战,看看我们能否完成它。然后我们将讨论它如何应用于现实世界的应用程序,以及如何 Mendix 可以用来构建它。
挑战一:两项之和
这项挑战涉及获取一个数字数组,并找到两个数字的索引,这两个数字相加后等于目标值。从表面上看,这项挑战很简单:获取数组并循环遍历它,然后对每个值再次循环并找到实现目标所需的值。效率低下,但很简单。所以我们就从这里开始。
首先,我们创建一个简单的实体,它接受一个字符串来表示数组,一个整数属性来表示目标值,以及存储满足条件的项目索引所需的其他几个值(如下所示)。我们还将添加开始/结束时间来跟踪效率。
创建此实体后,我们可以整理一个表单来输入值并跟踪挑战的详细信息。没什么特别的——实用才是关键。如您所见,我们还需要添加一个按钮来执行微流程。(微流程就是 Mendix 调用一个函数。
问题一:字符串数组。 Mendix 并非真正设计用于处理字符串数组。如果您在实际解决方案中解决这个问题,您将有一个要处理的对象列表。这感觉有点像作弊,所以现在我们只处理字符串。
社区共享模块,可在 Mendix Marketplace 提供了一个函数,我们可以使用它来将字符串拆分成列表,它还可以方便地用索引标记每个项目。但是,它不会将值转换为整数,因此我们只能即时处理。
现在我们已经有一个值列表,只需循环遍历列表一,假设第一个值不超过目标,再次循环并查看是否还有另一个值可以加起来形成目标。
不过,这样设置应该可以解决问题,所以让我们尝试一下。
完美!效果非常好。任务完成了,对吧?不,还不够。还有一个挑战:你能想出一个时间复杂度小于 O(n2) 的算法吗?
鉴于我们的解决方案中有一个嵌套循环,这显然不是最有效的方法。那么,什么是最有效的方法呢?指针。对列表进行排序,然后将一个指针放在开头,将一个指针放在结尾。检查两个项目的和,如果和太低,则将第一个指针向上移动列表,如果和太高,则将最后一个指针向下移动列表。重复,直到找到解决方案或用完列表。
执行此操作会面临几个关键挑战。首先,排序列表。我们的列表存储为字符串,因此按值排序是行不通的。我们必须循环并将每个值转换为整数。
接下来,您无法使用索引值访问列表 Mendix 所以我们不能只有两个索引指针。不过,有一个简单的解决方法,使用列表操作“Head”操作从列表中获取第一个对象。然后我们可以保留列表的两个副本 - 一个按升序排序,一个按降序排序。当我们遍历列表时,如果当前正在检查的项目太高或太低,我们只需从相应的列表中删除它。
应用程序按预期运行,但对于较小的数字列表,其效率不如使用两个循环的强力方法。然而,当值的数量增加时,它确实变得非常高效。
这只是表明,只要有一点创造性思维,传统代码中做的事情在低代码中也是可以实现的。现在让我们更进一步,如果这是现实世界中的业务问题怎么办?
假设我们在一家包装产品的公司工作,我们想将两件产品装进一个箱子。但我们必须符合箱子的重量限制——不能高也不能低。为此,我们需要在库存中找到两件产品,当它们一起包装时,它们符合我们的目标价值。听起来很熟悉?
首先,让我们这样做 Mendix 方式,并从一开始就将数据加载到适当的实体中。我们将生成一个随机值列表,并将其链接到我们之前创建的结果实体。我们还将使其可持久化,以便我们能够跟踪产品。
现在我们有了一个列表,我们可以重构第二次尝试的代码。我们原始 Microflow 的这一部分可以轻松提取到子 Microflow 中,并用于原始函数和新函数。
我们现在有三种不同的数据处理方法(当生成数字列表时,它也会填充字符串数组,因此前两个函数仍然有效)。
这将为我们找到第一个完全匹配的产品。我们需要一种方法来跟踪哪些产品已包装以及它们与哪些产品配对。有很多方法可以做到这一点,但我们将在产品上使用自关联;这样我们就可以在需要时轻松地在产品之间跳转。我还设置了实体之间的关联,以便在删除主批次时自动删除任何产品,您会注意到我已将实体重命名为“批次”和“产品”,以尽量保持清晰。
我们还需要改变 Microflow 查找匹配项的工作方式,因为我们不再只是寻找一个精确匹配项。现在我们想要找到所有精确匹配项。我们还可以通过将对列表进行排序的工作重新放到数据库中来添加进一步的优化。
如您所见,当找到匹配项时,它会将两种产品相互链接,然后将其从正在检查的列表中删除。然后,它会转到下两种产品。
下面是完成的应用程序的屏幕截图。我们可以看到,在显示的批次中,我们已成功配对了 764 种产品。这不是显示数据的最佳方式,因为它实际上显示了所有产品两次,因为它们是从关联的每一侧显示的,但它表明它有效!
无论如何,它强调了一个事实:构建这些数据的最佳方式可能是拥有第三个实体“Box”,并从那里关联到这两种产品。然后,您可以生成唯一的盒子 ID,并且每种产品只显示一次。
从那里,只需几个简单的步骤即可将其与客户、快递员甚至店面联系起来。 Mendix 可以轻松用于构建任何这些应用程序 - 不仅仅是费用表格或假期申请系统。我们可能是一个“低代码”平台,但这并不意味着您不能使用它来构建解决复杂问题的应用程序。当低代码可能不够用时,总是可以使用 Java 操作来扩展应用程序。
请继续关注 我的下一篇文章 我尝试了其中一项更难的挑战:“装有最多水的容器”,这需要获取一系列柱子高度,并找出哪一对柱子形成的容器可以容纳最多的水或它们之间有最大的矩形面积。












