机器人过程自动化(RPA)入门 3. 顺序、流程图和控制流程

到目前为止,我们已经了解了RPA是什么,并且我们已经看到了通过记录任务的活动并运行它来训练UiPath机器人是多么简单。使用记录器的UiPath可以很容易地自动化日常任务。在我们开始自动化复杂的任务之前,让我们学习如何控制从一个到另一个的活动流。

在本章中,我们将学习如何有序地安排活动以及如何控制流程。这些是任何编程的基础。我们将学习如何将活动放入序列、流程图和循环中。我们还将使用if-else来研究逻辑控制。

为了训练机器人处理一种类型的事务,有条理的流程中的指令是非常重要的。大多数情况下,这些指令是按顺序执行的。让我们详细了解这一点。

本章将涵盖以下主题:

  • 顺序工作流
  • 活动
  • 流程图是什么以及何时使用
  • 控制流、各种类型的循环和决策
  • 使用序列和流程图的示例

顺序工作流

UiPath提供了四种类型的项目:

  • 序列
  • 流程图
  • 用户事件
  • 状态机

这些都是用来设计一个基于类型和方便的项目。这四种类型的项目在处理不同类型的过程时非常有用。流程图和序列主要用于简单的自动化。用户事件有利于实现前台机器人,而状态机则用于处理复杂的业务流程。

什么是序列?

序列是一组逻辑步骤。每一步都代表一个动作或一件工作。序列用于线性连续发生的过程,即一个接一个的过程。UiPath中的三种类型的项目中,Sequences是最小的。下一节介绍了如何在UiPath Studio中构建序列。

在下面的例子中,我们将制作一个简单的项目,询问用户的姓名,然后显示他或她的回答:

  1. 打开UiPath Studio并单击“空白”以启动新项目。给它取一个有意义的名字。从左侧“活动”面板中拖放流程图活动。
  2. 在Activities(活动)面板中搜索序列,然后将其拖放到流程图中,如以下屏幕截图所示:
  3. 双击序列。我们现在必须添加我们想要执行的步骤。将每一步都视为一项行动。
  4. 我们可以在序列中添加许多步骤。为了简单起见,我们将添加两个步骤:
    1. 在输入对话框中询问用户名
    2. 在消息框中显示用户名
  5. “活动”面板的“搜索”面板中的搜索“输入”对话框。在序列中拖放输入对话框活动(输入对话框活动是一个显示消息或问题的对话框,要求用户在回复中填写):

    在“输入”对话框的“标签”上写下相应的消息,询问用户名。在我们的案例中,我们写入“what's your name?”。
  6. 将消息框活动拖放到序列中。(顾名思义,消息框显示给定的文本。在这种情况下,我们将使用它来显示用户在被问及姓名时在“输入”对话框中给出的文本/回复。)
  7. 接下来,创建一个变量并为其指定所需的名称。此变量将接收用户在“输入”对话框中输入的文本,以回答我们的问题,即用户名:
  8. 现在,我们必须指定“输入”对话框的“结果”属性(在“属性”面板中)。在那里指定变量名后,它将接收用户输入的文本。单击显示在Result属性右侧的虚线图标。现在,指定变量名:
  9. 指定我们在消息框的文本区域中创建的变量名称(消息框的“文本”区域用于输入将在消息框中显示的文本)。我们只需要将序列连接到开始图标。这可以通过右键单击“序列”活动并选择“设置为开始节点”选项来完成。
  10. 点击Run(运行)按钮,查看结果。

活动

在UiPath Studio中,一个活动表示一个操作单元。每个活动都执行一些操作。当这些活动结合在一起时,就变成了一个过程。

每个活动都位于设计器主面板的“活动”面板上。您可以搜索特定的活动并将其用于您的项目中。例如,当我们搜索浏览器时,所有浏览器活动都将显示在“活动”面板中,如以下屏幕截图所示:

将活动与工作流一起使用

我们已经了解了如何轻松地搜索特定的活动。现在,让我们看看如何在工作流中使用它们:

  1. 以与我们在“活动”面板搜索栏中搜索浏览器活动相同的方式搜索“流程图”。将流程图活动拖放到“设计器”面板内。
  2. 流程图显示在“设计器”面板中,并且我们有一个给定的“开始”节点。“开始”节点指定执行的开始位置。
  3. 我们准备在流程图中使用不同的活动。您可以使用流程图中的任何活动。为了简单起见,让我们只使用Write Line活动。
  4. 在流程图中拖放“Write Line”活动。通过提供字符串值来设置其文本属性。通过右键单击“Write Line”活动并选择“设置为起始节点”,将此Write Line活动与“开始”节点连接起来。

你可能想知道工作流的作用是什么。假设你有一个由数百个活动组成的大项目。您将如何调试它?处理这样的情况是开发人员的噩梦。在这里,工作流程开始发挥作用。要构建这样一个大项目,开发人员只需将其划分为较小的模块,并将其提取为工作流。现在,每个工作流都可以单独测试。因此,很容易发现bug和错误。创建不同的工作流并将它们组合成一个逻辑序列将提高我们的代码质量、可维护性、可靠性和可读性

我们制作了一个较小的模块,现在是时候将其提取为工作流了。右键单击“设计器”主面板,然后选择“提取为工作流”:

会弹出一个窗口询问姓名。给它一个有意义的名称,然后单击“创建”。这将是您的工作流名称:

我们刚刚使用了活动,并在工作流中提取了它们。如果检查设计主面板,它看起来像下面的屏幕截图:

它会自动生成“调用工作流”活动。现在,当我们运行程序时,它将调用我们提取的工作流(双击“调用工作流”活动,查看它将调用哪个工作流以及它在哪里生成)。

流程图是什么以及何时使用

流程图通常用于复杂的业务流程。它提供决策便利,可用于小型和大型项目。在这里,我们可以通过不同的方式添加活动:

流程图提供了多个分支逻辑运算符来进行决策。流程图可以反向运行。此外,它也可以在序列中使用。流程图有助于不同项目的可重用性。一旦我们创建了它用于项目,它就可以用于不同但相似的项目。

流程图的分支默认设置为true/false。但是,可以从“属性”面板手动更改其名称。

例如,输入两个数字并检查它们的总和是否小于20。

执行以下步骤:

  1. 首先,将“活动”面板中的流程图添加到“设计器”面板中。
  2. 在流程图中添加序列活动。
  3. 在“序列”活动中执行两个“输入”对话框活动(用于输入要添加的数字)。
  4. 创建变量x和y以保存值。
  5. 接下来,添加一个消息框活动以执行数学运算。在我们的例子中,这两个数字之和小于20:
    int.Parse(X)+int.Parse(Y)<20
  6. 现在,添加一个Flow Decision活动来检查数学运算。
  7. 如果为true,则Flow Decision将流向true分支。否则,它将流向假分支。


控制流、各种类型的循环和决策

控制流是指在自动化中执行操作的顺序或特定方式。UiPath为执行决策过程提供了许多活动。“活动”面板中的这些活动使用双击方法或拖放方法放入工作流中。

不同类型的控制流活动如下:

  • 分配活动
  • Delay活动
  • 中断活动
  • 先条件循环活动
  • 后条件循环活动
  • 遍历循环
  • if 活动
  • 切换活动

分配活动(Assign)

Assign活动用于为变量指定一个值。Assign活动可以用于不同的目的,例如增加循环中变量的值,或者使用变量的和、差、乘或除的结果并将其分配给另一个变量。

Delay活动

顾名思义,Delay活动用于通过将自动化暂停一段定义的时间来延迟或减缓自动化。工作流在指定的时间段后继续。它采用hh:mm:ss格式。当我们在自动化过程中需要一段等待期时,这个活动发挥着重要作用,比如说,打开特定应用程序所需的等待期。

示例

为了更好地理解Delay活动是如何工作的,让我们看一个自动化的例子,它向Output面板写入两条延迟50秒的消息。

执行以下步骤:

  1. 首先,创建一个新的流程图。
  2. 从Activities(活动)面板添加Write line(写入行)活动,并将其连接到Start(开始)节点。
  3. 选择写入行活动。现在,在文本框中键入以下文本:“Hey,What's your name?”。
  4. 接下来,添加一个Delay活动,并将其连接到Write line活动。
  5. 选择Delay活动,然后转到属性面板。在“持续时间”字段中,设置00:00:50。这是两条记录消息之间的50秒延迟。
  6. 采取另一个写入行活动,并将其连接到延迟活动。在文本字段中,写入My Name is Andrew Ng.。
  7. 单击Run(运行)按钮后,Output(输出)面板会显示一条消息,将其延迟50秒:

中断活动(Break)

中断活动用于在特定点中断/停止循环,然后根据要求继续进行下一个活动。它不能用于除对于遍历循环的任何其他活动。当我们想要打破循环以继续到对于遍历循环活动中的下一个活动时,这很有用。

示例

在本例中,我们将使用中断活动只执行一次迭代。

执行以下步骤:

  1. 将序列活动添加到设计器面板中。
  2. 下一步,在序列中添加遍历循环活动(如前一节所述,要使用Break活动,我们需要遍历循环):
  3. 创建两个变量;名为item的整数变量和名为X的数组整数变量。然后,将它们设置为文本字段。
  4. 在循环正文中添加中断活动。
  5. 在遍历循环活动下,添加一个Write line活动。
  6. 在Write Line活动中,在文本字段中键入item.ToString()。
  7. 当我们单击Run按钮时,它将显示一个元素,如下面的屏幕截图所示。这是由于Break活动,该活动在第一次迭代后已停止执行:

在进行其他控制流活动之前,我们将了解循环,这是自动化的一个重要方面。自动化最常被提及的优点之一是它能够执行重复的功能,并且能够毫无错误地执行这些功能。循环正是用于此类函数的。比方说,一个人想要针对不同的情况或当满足某个标准时重复工作流程的某个部分。在这种情况下,循环非常方便。可以简单地通过将工作流的末端连接到我们希望工作流恢复的点来创建循环。

在进行这样的循环时,需要记住的一件事是确保也有一个出口点。否则,循环将无限继续!

在各种控制流活动中提到的While先条件循环、Do While后条件循环和For each遍历循环活动就是循环的示例。现在让我们看看它们在哪里使用以及它们是如何工作的。

先条件循环活动(while)

While活动在自动化中用于根据特定条件执行语句或流程。如果结果为true,则执行循环;即重复执行该处理。只有当条件不成立时,项目才会退出循环。在遍历元素数组时,此活动非常有用。

示例

在下面的例子中,我们将看到一个整数变量如何以5为增量从5增加到50。

执行以下步骤:

  1. 在Blank项目中,添加Sequence活动(默认)。
  2. 现在,创建一个整数类型的变量X。将其默认值设置为5。
  3. 接下来,将先条件循环While活动添加到序列中。
  4. 在条件字段中,设置x<50。
  5. 将Assign活动添加到While循环的Body部分。
  6. 现在,转到Assign活动的Properties面板,在文本字段integer variable中键入value字段integer x+5
  7. 拖放Write line活动并指定变量名称X并应用ToString方法:
  8. 现在,单击Run(运行)按钮。输出将显示在输出面板中,如以下屏幕截图所示:

Do while后条件循环活动

Do while活动用于自动化中,当需要根据特定条件的满足执行语句时。它与While活动的不同之处在于,它执行一条语句,然后检查条件是否满足。如果条件未满足,则退出循环。

示例

让我们举一个例子来了解Do while活动在自动化中是如何工作的。取一个整数变量。从这个变量开始,我们将生成2的所有倍数,小于20。

执行以下步骤:

  1. 将Sequence(默认)添加到设计器面板。
  2. 从Activities面板添加Do while活动。
  3. 在Do while活动的正文部分中,添加一个Assign(分配)活动。
  4. 现在,选择分配活动。转到“属性”面板,创建一个整数变量Y。将其默认值设置为2。
  5. 在Assign活动的value部分设置Y+2,以每次将结果递增,直到执行循环为止。
  6. 在Assign活动中添加WriteLine活动。
  7. 在WriteLine活动的文本字段中,键入Y.ToString()。
  8. 在条件部分中,设置条件Y<209。循环将继续,直到条件成立:
  9. 单击Run(运行)按钮后,显示的输出如下:

For each遍历循环活动

For each活动的工作方式是一次迭代项集合或元素列表中的每个元素。在这个过程中,它将执行身体内部可用的所有操作。因此,它遍历数据并分别处理每条信息。

示例

在下面的示例中,我们将使用For each活动来遍历偶数集合,并一次显示一个元素。

执行以下步骤:

  1. 从UiPath中的空白项目开始。
  2. 将Sequence活动添加到设计器面板中。
  3. 接下来,在Sequence中添加For each活动,并创建一个整数类型的数组变量X。
  4. 在变量的默认值中,放入new int[]{2,4,6,8,10,12,14,16,18,20}
  5. 将“WriteLine”活动添加到设计器面板(此活动用于显示结果)。
  6. 在“WriteLine”活动的“文本”字段中,键入currentItem.ToString()
  7. 现在,运行程序。您将看到,由于使用了For each活动,数组中的每个数字都会逐一显示:

控制流还促进决策机制,有助于对特定活动的步骤做出决策。例如,假设我们使用的是一个循环,并且我们只想显示一个所需的值,那么我们可以通过实现If活动来过滤掉所有的所需值,并根据If活动的结果做出决定,即true或false。在执行所需元素后,决策过程将需要一些时间来中断操作。接下来是休息活动,这将发挥重要作用。如果要从任务中选择执行,则需要切换活动才能做出这样的决定。

If活动和Switch活动是控制流的决策活动。

If活动

If活动由一个具有两个条件的语句组成:true或false。如果该语句为true,则执行第一个条件;如果不是,则执行第二条件。当我们必须根据陈述作出决定时,这是有用的。

为了更好地理解If活动是如何工作的,让我们看一个检查任意两个数字之和是否小于6的示例。

执行以下步骤:

  1. 从“活动”面板添加流程图。
  2. 添加两个“输入”对话框活动。创建两个整数变量x和y。
  3. 在“属性”面板中,更改“输入”对话框活动的标签名称和标题名称。
  4. 现在,在两个“输入”对话框活动的“结果”属性中指定这两个变量的名称。
  5. 现在将If活动添加到Designer面板:

  6. 单击Run(运行)按钮以检查输出。如果条件成立,那么它将显示真实值;否则,它将显示false值,如第二个屏幕截图所示(在我们的情况下,我们将x和y的值分别作为和,从而得到13的和,该和不小于;因此,输出将其显示为false值):

(切换)活动

切换活动可用于进行选择。当我们有各种可用的选项并且想要执行一个选项时,我们经常使用Switch活动。

默认情况下,Switch活动接受一个整数参数。如果我们想要获取所需的参数,那么我们可以从属性面板的类型参数列表中对其进行更改。Switch活动在根据自己的选择对数据进行分类时非常有用。

示例

让我们看一个例子,我们必须检查给定的数字是奇数还是偶数。

我们知道,所有奇数除以2,都会留下1的余数。另一方面,偶数除以2后,余数为0。因此,我们将有两个情况得到1或0的余数。

执行以下步骤:

  1. 添加Sequence活动。
  2. 在Sequence中添加输入对话框活动。
  3. 现在,创建一个整数类型的变量k。
  4. 在“属性”面板内的“结果”属性中指定新创建的变量的名称。
  5. 在“输入”对话框活动下添加“切换”活动。
  6. 在表达式字段中,设置 C# k %2, VB k mod 2, 以检查数字是否可被2整除。
  7. 将“WriteLine”活动添加到“默认”部分,然后键入K.ToString()+" is an even number"在文本字段中。
  8. 现在,创建Case 1,向其中添加另一个Write行活动,然后键入K.ToString()+" is an odd number"

使用Sequence和流程图的示例

Sequence和流程图是相似的概念。它们都用于包含逻辑步骤或操作。每个人都应该知道何时使用它们。它们的不同之处在于,序列通常用于包含执行一个操作的多个步骤。另一方面,流程图适用于特定任务。当我们有很多类似的步骤时,我们将它们包含在序列中。可能有不同的序列在执行它们的工作。我们可以很容易地将类似的序列放入工作流中;每个工作流代表一个任务。单独测试单独的工作流非常容易。让我们通过一个例子来更好地理解它们。

如何使用Sequence

可能有不同的序列在执行它们的工作。我们可以很容易地将类似的序列放入工作流中;每个工作流代表一个任务。单独测试单独的工作流非常容易。让我们通过一个例子来更好地理解它们。

执行以下步骤:

  1. 将流程图拖放到“设计器”面板上。拖放序列活动。将“序列”活动与“Start”节点连接。
  2. 双击序列活动。拖放“输入”对话框活动和“消息框”活动。在“输入”对话框活动的标签属性中指定消息。

点击Run(运行)按钮或按F5键查看结果。

我们可以清楚地看到,我们在序列中使用了两个逻辑相关的活动(一个用于输入名称,另一个用于弹出名称)。在这里,序列包含两个活动。当然,您可以在序列中放置任意数量的活动;它将根据您定义它的顺序执行。

如何使用流程图

之前,我们已经了解了如何使用序列和活动。我们现在将学习如何使用流程图。流程图是一个容器。它可以包含其中的活动。

我要使用电子邮件活动,例如,请安装UiPath.Mail.activities。您可以通过单击管理程序包图标或按Ctrl+P找到它,然后在所有程序包中搜索邮件。您将在第六章中了解有关软件包的更多信息。

让我们在流程图中拖放一个消息框活动。双击消息框,在要引用文本的区域键入)“Hello world"。按F5键查看结果):

因此,当程序只有几个步骤时,我们可以直接在流程图中使用活动。然而,当我们有大量的步骤时,它会变得更加复杂。这就是为什么有必要将相关活动安排到序列中,然后将序列分组到流程图中。

让我们举一个例子来看看如何在流程图中使用序列。

我们不会实现发送电子邮件的实际代码。稍后将详细介绍。本案例的目的是清楚地了解我们在何处以及如何使用工作流和序列。

执行以下步骤:

  1. 在主流程图上拖放两个流程图活动。并且重命名为Send Email 和Message。
  2. 我们有两种不同的工作流程。“Send Email”工作流会将邮件发送到电子邮件地址。邮件工作流具有该电子邮件的邮件正文,并将要求用户输入姓名、邮件、发件人和收件人。
  3. 我们必须在两个工作流程中实施所需的步骤。
    为此,我们在流程图中使用序列。双击流程图。在两个流程图中拖放一个序列活动。通过右键单击“序列”并选择“设置为开始节点”选项,将“序列”连接到“开始”节点。
  4. 双击Message流程图中的序列。拖放名称、消息、发送者和接收者的四个输入对话框活动(在此序列中,我们不设置消息框的任何属性,因为本课程的目的是清楚地了解我们在何处以及如何使用工作流和序列):
  5. 双击“Send Email流程图”。双击序列。您可以在此处拖放电子邮件活动。(我们不会拖动任何邮件活动,尽管您可以自由拖动。那是另一章节的内容)。
  6. 就是这样。现在,转到主流程图。将Message流程图连接到“开始”节点。此外,请将“发送邮件”活动连接到“Send Email流程图”:

使用序列和控制流的示例

在本节中,我们将通过一个示例讨论控制流。我们将看到如何在序列中使用控制流。如前所述,存在各种控制流活动。

考虑一个名称数组。假设我们必须找出其中有多少名字以字母a开头。然后我们将创建一个自动化系统,计算以a开头的名字的数量,并显示结果。

执行以下步骤:

  1. 从活动面板中拖放流程图活动。
  2. 在流程图中拖放序列活动。通过右键单击“序列”活动并选择“设置为开始节点”选项,将“序列”连接到“开始”节点。
  3. 双击序列活动。创建一个变量,给它一个名称(在我们的例子中,我们将创建一个类型字符串的数组,并将变量命名为names)。将变量类型设置为[T]的数组。当询问数组的类型时,请选择字符串。
    此外,在变量的Default部分中,通过给数组一个默认值来初始化数组。例如,
    new string[]{"John","sam","Andrew","Anita"}

  4. 创建整型的变量Count以存储结果。将变量类型设置为Int32:
  5. 在序列中拖放Foreach活动。此外,在Foreach活动的表达式框中指定数组名称。Foreach活动用于对数组进行迭代。它每次都会从数组中提取一个名称,直到到达末尾:
  6. 从Activities(活动)面板拖放If(如果)活动,并将其放置在For each(对于每个活动)中提到drop activity here(将活动拖到此处)的位置。在If活动的表达式框中指定条件。If活动用于检查特定条件/表达式。如果满足该表达式,则将执行Then块。否则,Else块将被执行。
    我们已将表达式指定为currentItem.ToString().StartsWith('a'), 此表达式指定项变量中以字母开头的名称为a, For each活动在数组上迭代,一次获取一个名称,并将其存储为变量currentItem。
  7. 现在,我们将使用Count变量,并在每次数组中的名称以字母B开头时将其递增。为此,我们必须使用a+B Assign活动。将A+B Assign活动拖放到If活动中。将A+B Assign活动的To属性设置为Count(变量名),将Value属性设置为Count+1(以增加其值):
  8. 只需将“消息框”活动拖放到“序列”活动中即可。在“消息框”活动的表达式框中指定计数变量。但请记住,我们创建的变量的类型是Int32,因此,如果不将其转换为字符串,就无法将其用于Message box活动。为了将其转换为字符串,我们在UiPathStudio中提供了ToString方法。只需将其应用于变量并选择Count.ToString():

点击Run(运行)按钮或按F5键查看结果。

总结

在本章中,我们检查了记录器生成的项目,并看到了对程序流(工作流)结构的解释。我们了解序列的使用和活动的嵌套。我们学习了如何使用工作流、流程图和控制流的构建块(循环和决策)。

在下一章中,我们将学习使用内存和变量的技术,还将学习如何使用数据表在内存中存储和轻松操作数据。下一章还将展示如何使用磁盘文件(CSV、Excel等)来保存数据。

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

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

相关文章

传统遗产与技术相遇,古彝文的数字化与保护

古彝文是中国彝族的传统文字&#xff0c;具有悠久的历史和文化价值。然而&#xff0c;由于古彝文的形状复杂且没有标准化的字符集&#xff0c;对其进行文字识别一直是一项具有挑战性的任务。本文介绍了古彝文合合信息的文字识别技术&#xff0c;旨在提高古彝文的自动识别准确性…

分类预测 | MATLAB实现WOA-FS-SVM鲸鱼算法同步优化特征选择结合支持向量机分类预测

分类预测 | MATLAB实现WOA-FS-SVM鲸鱼算法同步优化特征选择结合支持向量机分类预测 目录 分类预测 | MATLAB实现WOA-FS-SVM鲸鱼算法同步优化特征选择结合支持向量机分类预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 MATLAB实现WOA-FS-SVM鲸鱼算法同步优化特征选择结…

Pikachu靶场——XXE 漏洞

文章目录 1. XXE1.1 查看系统文件内容1.2 查看PHP源代码1.3 查看开放端口1.4 探测内网主机 1. XXE 漏洞描述 XXE&#xff08;XML External Entity&#xff09;攻击是一种利用XML解析器漏洞的攻击。在这种攻击中&#xff0c;攻击者通过在XML文件中插入恶意实体来触发解析器加载…

直播软件开发技巧:7个实时视频传输和弹幕功能的关键步骤

近年来&#xff0c;随着直播行业的快速崛起&#xff0c;直播软件的开发变得越来越重要。直播软件的成功不仅依赖于稳定的实时视频传输&#xff0c;还需要强大的弹幕功能来提升用户体验。作为直播软件开发领域的专家&#xff0c;我将与您分享七个关键步骤&#xff0c;帮助您掌握…

用友移动管理系统任意文件上传漏洞

一、漏洞描述 用友移动管理系统 uploadApk.do 文件存在任意文件上传 二、fofa查询 body"../js/jslib/jquery.blockUI.js" 三、漏洞利用 poc POST /maportal/appmanager/uploadApk.dopk_obj HTTP/1.1 Host: ip:port Cache-Control: max-age0 Upgrade-Insecure-Req…

Android 使用kotlin+注解+反射+泛型实现MVP架构

一&#xff0c;MVP模式的定义 ①Model&#xff1a;用于存储数据。它负责处理领域逻辑以及与数据库或网络层的通信。 ②View&#xff1a;UI层&#xff0c;提供数据可视化界面&#xff0c;并跟踪用户的操作&#xff0c;以便通知presenter。 ③Presenter&#xff1a;从Model层获…

HTML - input type=file 允许用户选择多个文件

效果 示例 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><body><!-- When the multiple Boolean attribute is specified, the file input allows the user to select more than o…

No150.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

【项目】在线音乐播放器测试报告

目录 项目背景 项目功能 测试计划 功能测试 登录页面的测试 测试用例 测试结果 注册页面的测试 测试用例 测试结果 音乐列表页面的测试 测试用例 测试结果 出现的bug 搜索功能的bug 问题解决 删除功能的bug 问题解决 喜欢列表页面的测试 测试用例 测试结果…

电脑开机慢问题的简单处理

电脑用久了&#xff0c;开机时间要10-20分钟特别慢&#xff0c;一下介绍两种简单有效处理方式&#xff0c;这两种方式经测试不会影响原系统软件的使用&#xff1a; 方式一&#xff1a;禁用非必要启动项【效果不是很明显】 利用360里面的优化加速禁用启动项【禁用启动项还有其…

大数据分布式处理框架Hadoop

大数据是什么 大数据容量常以TB、PB、甚至EB为单位&#xff0c;远超传统数据库的承载能力&#xff0c;无论入库还是查询都出现性能瓶颈。 Hadoop是什么 Hadoop是开源的分布式计算技术框架&#xff0c;用于处理大规模数据和实现分布式存储。 Hadoop核心组件 HDFS&#xff08;…

【5G PHY】物理层逻辑和物理天线的映射

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…

估计、偏差和方差

一、介绍 统计领域为我们提供了很多工具来实现机器学习目标&#xff0c;不仅可以解决训练集上的任务&#xff0c;还可以泛化。基本的概念&#xff0c;例如参数估计、偏差和方差&#xff0c;对于正式地刻画泛化、欠拟合和过拟合都非常有帮助。 二、参数估计 参数估计 是统计学…

公司新产品上线如何打出知名度?

任何一个新产品上线时都需要进行推广打出知名度&#xff0c;软文作为一种成本低效果留存时间长的营销方式能够让公司的新产品打出知名度&#xff0c;向潜在用户展示新产品的独特优势以及特性&#xff0c;下面就让媒介盒子告诉大家&#xff0c;新产品上线时&#xff0c;公司应该…

电脑技巧:笔记本电脑升级固态硬盘的注意事项,看完你就懂了

目录 1、接口类型 2、接口速率 3、固态硬盘的尺寸 4、发热情况 5、总结 如今的固态硬盘价格越来越便宜了&#xff0c;甚至某品牌4TB的PCIe4.0 M.2还爆出过不到900元的“报恩价”&#xff0c;让不少小伙伴都动了扩容甚至囤货的心思。但对于笔记本电脑用户来说&#xff0c;升…

小波变换学习笔记【1】

【声明】本博客为学习B站视频小波分解与重构所做笔记&#xff0c;供自己和大家查阅学习&#xff0c;想查看 up 原视频请移步 B 站&#xff0c;侵删。 1.1 小波变换的由来 傅里叶变换基本思想&#xff1a;将信号分解成一系列不同频率的连续正弦波的叠加。 其缺点是&#xff0c;…

华为鸿蒙4,3,2禁用Google谷歌服务框架,使用最新谷歌Google play服务

华为鸿蒙4,鸿蒙3,鸿蒙2有一些应用或者游戏尤其是游戏需要最新版的谷歌play服务支持才可以使用。但是华为的鸿蒙系统解决完”设备未经 play 保护机制认证”之后,最稳定的谷歌play服务是20这个版本&#xff0c;一旦升级到最新的Google谷歌play服务&#xff0c;目前是最新版本23这…

MySQL到TiDB:Hive Metastore横向扩展之路

作者&#xff1a;vivo 互联网大数据团队 - Wang Zhiwen 本文介绍了vivo在大数据元数据服务横向扩展道路上的探索历程&#xff0c;由实际面临的问题出发&#xff0c;对当前主流的横向扩展方案进行了调研及对比测试&#xff0c;通过多方面对比数据择优选择TiDB方案。其次分享了整…

c语言常用语法,长时间不用容易忘。

关键字 auto 声明自动变量const 定义常量&#xff0c;如果一个变量被 const 修饰&#xff0c;那么它的值就不能再被改变extern 声明变量或函数是在其它文件或本文件的其他位置定义register 声明寄存器变量signed 声明有符号类型变量或函数static 声明静态变量&#xff0c;修饰…

作用域 CSS 回来了

几年前&#xff0c;消失的作用域 CSS&#xff0c;如今它回来了&#xff0c;而且比以前的版本要好得多。 更好的是&#xff0c;W3C规范基本稳定&#xff0c;现在Chrome中已经有一个工作原型。我们只需要社区稍微关注一下&#xff0c;引诱其他浏览器构建它们的实现&#xff0c;并…