亚马逊云科技 WAF 部署小指南(五):在客户端集成 Amazon WAF SDK 抵御 DDoS 攻击...

news2024/11/18 2:42:16

7c63262bdd2d04364fb24bb9d2209a15.gif

方案介绍

在 WAF 部署小指南(一)中,我们了解了 Amazon WAF 的原理,并通过创建 WEB ACL 和托管规则防护常见的攻击。也了解了通过创建自定义规则在 HTTP 请求到达应用之前判断是阻断还是允许该请求。在 Amazon WAF 自定义规则中,可配置请求 Header 必须包含特定字符,也就是 Token,只有包含合法 Token 的请求才能被允许发送到目标。使用 WAF 自定义规则的方式可以高效地进行非法攻击流量的过滤,但是 Token 的生成,分发,刷新,验证等管理操作,还是需要开发者在应用程序内提前进行相应的功能开发。

本文介绍了如何使用 Amazon WAF Client 集成 SDK。通过 SDK 包装,Token 的生成/分发/验证/刷新等操作在 SDK 内部完成。使用这个解决方案,Client 发起的业务请求会自动加上 Token 信息供 WAF 后台进行校验。使用 WAF Client SDK 集成,在应对 DDoS 攻击时,可以帮助开发者快速利用分布式,大容量的 WAF 产品对攻击流量进行精准清洗。

内容简介

本文分为两个部分:

第一部分会为您讲解互联网行业使用基于 Token Header 进行合法请求过滤的常用做法和原理。

第二部分会分为几个步骤为您讲述如何创建一个带有 WAF Client SDK 的网站环境。验证 WAF Client SDK 的功能并分析它的运行原理。

  • 步骤一:创建 Web ACL,并添加 Amazon WAF Bot Control 托管规则

  • 步骤二:Web 应用接入 WAF JavaScript API

  • 步骤三:准备 Client 使用的 Web 前端代码并上传 S3

  • 步骤四:完成 WAF 相关配置

  • 步骤五:测试效果

  • 步骤六:Bot Control Rule 成本分析和优化

第一部分

互联网行业如何使用 Token Header 

进行有效的合法请求过滤

在 WAF 的动作机制里,能够提供灵活的根据 Web 请求头进行过滤的功能。互联网行业的用户可以在应用开发中定义 Client 侧的请求的特征。并在 WAF 上准备对应的特征过滤条件。这样就可以利用亚马逊云科技高性能大容量的 WAF 来在源站之前进行精准的请求过滤。把 HTTP Flood 类型的 DDoS 请求阻挡在近攻击源的位置。使源站得到良好的保护。

想要做到这一点,在没有 WAF Client SDK 前,我们通常需要做下面两个步骤的准备。

步骤一:准备根据 Web 请求头中的 User-Token header 进行特征过滤的 WAF规则

* 在这个步骤之前,最好准备一个 WAF 部署小指南(一)中提到的最小环境。

然后在已有的 WebACL 里增加如下自定义规则,实现 Web 请求中如 User-Token header 中不包含指定的 Value,则请求被阻止。

c73fd1af32630e0f41e7819e226d9053.jpeg

这个规则在 WAF 配置完成以后是即刻生效的。配置完成后,没有”User-Token:tokenStringValue”请求头的请求都会被 WAF 阻断。

具体效果如下:

curl 发送不带 Token 请求被 WAF 阻断:

输入:

curl https://testingdomain

输出:

<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
</body>
</html>

左滑查看更多

curl 发送带合法 Token 的请求可以成功获得源站 Echo-Server 的内容

输入:

curl --header 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36 Edg/97.0.1072.69'  --header 'User-Token:tokenStringValue' "https://testingdomain/"

左滑查看更多

输出:

Request served by 21333d8542dd


GET / HTTP/1.1


Host: testingdomain
Accept: */*
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36 Edg/97.0.1072.69
User-Token: tokenStringValue
X-Amzn-Trace-Id: Root=1-64560859-2d9f381e2e263d06240608c7
X-Forwarded-For: *.*.*.202
X-Forwarded-Port: 443
X-Forwarded-Proto: https

左滑查看更多

步骤二:设计与 WAF 自定义规则相对应的应用程序 Token 管理分发架构

通过 WAF 自定义规则,可以实现 token 的流量过滤。但要实现完整的端到端防御方案,除了 WAF ACL 的配置,还需要应用程序开发实现 Token 的管理等维护工作,下面是一个常见的互联网前端程序架构供大家参考:

dff8df843726a4ac118465e83bc4f83b.png

预先的准备:定义 Token 的生成规则。

在 WAF 侧,按需动态更新 Token 检查规则在 WAF Rule 中,可使用多条 WAF 规则保证 Token 规则增加规则复杂程度,也有助于更换规则时的平滑过渡。

在客户端侧,需要设计动态更新 Token 生成信息的方法。如在 S3 对象存储中准备 Token 列表并通过 CloudFront 就近提供给客户端。

Token 检查步骤如下:

  1. App Client 从 CloudFront 中获取合法的 Token 信息。

  2. App Client 发起的业务请求带上 Token 信息。

  3. 请求被 App Client 发送给 ALB。

  4. 与 ALB 关联的 WAF 进行自定义 Token 检查规则的匹配。

  5. 拥有合法 Token 的请求被发送给 App Server,不合法的请求被拒绝。

  6. 定义 Token 过期的机制,并把最新的 Token 检查规则同步更新到 WAF 和 S3 上的 Token 列表。

以上架构在自定义 Token 分发的实现方面各个用户都会采用不同的方法。一旦实现就可以依靠高容量的 WAF 来精准保护源站。但是如何动态分发 Token 到各种平台的海量客户端,一直是开发团队的一个难点。

有没有一个比较标准的方法,能够用统一的开发 SDK 完成类似的需求呢?答案是有的。亚马逊云科技的 WAF Client SDK 就是这个问题的答案!

第二部分

客户端应用集成 WAF Client SDK 

网站环境的搭建和验证

WAF Client SDK 与应用程序客户端进行集成后,能自动与后台配置的 WAF ACL Bot Control 规则进行联动,完成 token 获取。SDK 也会把应用程序发送的请求,自动带上 Token 信息发送给 WAF 后台进行校验,Token 刷新的功能也原生就支持了。

WAF Client SDK 提供 iOS/Android Mobile SDK 和 Web JavaScript API。下面分步骤介绍如何为 Web 应用集成 JavaScript API 并配置 WAF ACL 规则进行攻击流量防护。移动端 SDK 的接入流程也与 Web 端 SDK 接入流程类似,具体可参考移动端接入文档:https://docs.aws.amazon.com/waf/latest/developerguide/waf-mobile-sdk.html

步骤一:创建 Web ACL,并添加 Amazon WAF Bot Control 托管规则

1、创建 WEB ACL,并添加 Amazon WAF Bot Control 托管规则

添加 AmazonManagedRulesBotControlRuleSet 托管规则到 ACL 中,并把 Rule 级别设置为 Target,可以实现客户端请求的 token 验证。如果请求中不包含 token 或者 token 无效,这条托管规则会触发 Challenge rule action,从而触发 Client SDK 在后台静默完成 Challenge 计算任务得到 token。

fc7449a422b3d9959f6b2caa348a9c07.png

2、选择 Bot Control inspection level 为 Targeted

cd6d2e384ff5018340f63b4043c9668f.jpeg

3、Rule action 选择 Challenge

d9ee018e913333b85be83ec53b03102f.jpeg

步骤二:Web 应用接入 WAF JavaScript API

从 WAF 的控制台中进入 Application integration,选择 Intelligent threat integration 选项,这里会显示已经开启 AmazonManagedRulesBotControlRuleSet 规则的 ACL。

3aed19a9c16920f14b4cc0b5b328f2da.jpeg

需要把 ACL 所对应的 JavaScript Integration URL 复制到 Web 应用的前端代码<head></head>的之间。

步骤三:准备 Client 使用的 Web 前端代码并上传 S3

1、Web 前端代码样例如下:

<html>
<head>
<script type="text/javascript" src="https://xxxxxxxxxxxx.us-west-2.sdk.awswaf.com/xxxxxxxxxxxx/xxxxxxxxxxxx/challenge.js" defer></script>
</head>
<body>
    <h1>Login Page</h1>
    <p>Click on the below button to login</p>
    <button onclick="login()">Login</button>


    <script>
        async function login(){
           let user = {
               name: 'username',
               surname: 'surname'
           };
           const response = await AwsWafIntegration.fetch('https://yourdomain.com/waf/query',{
               method: 'POST',
               headers: {
                   'Content-Type': 'application/json'
               },
               body: JSON.stringify(user)
           });
           const responseText = await response.text()
           document.getElementById("display").innerText = responseText
           console.log(responseText)
        }
</script>
<p>Hello WAF!</p>
<div id='display'></div>
</body>
</html>

左滑查看更多

WAF Client JavaScript API 提供了 AmazonWafIntegration.fetch()方法,是原生 JS fetch()方法的 Wrapper。与原生 fetch()方法相比,内部逻辑封装了 token 的请求和计算,并在业务 http 请求中自动加上了 token, 调用方法的参数与原生 JS fetch()相同。

样例代码使用 WAF client API 向后端发起了一个 Post 请求。后端使用 Amazon EC2 部署 Echo-Server 做为测试用的 Web 服务器,实现返回 http response,并通过 ALB 提供对外访问。ALB 被刚才配置的 WEB ACL 所保护。

2、上传样例代码到S3,呈现为客户端可访问的网页

这里我们会再次使用文章第一部分准备的 WAF 部署小指南(一)中提到的最小环境。

在这里我们对架构做一点小的修改,构成一个动静结合的网页:

a0ffe5b4514b45d50cf25055b093847b.jpeg

经过客户端调用 S3 上带有 SDK 的网页,用户最终访问一个 Echo-Server 的源站。

* 对 CloudFront 原理熟悉的同学可以使用 CloudFront 上的 Global WAF 与 Echo-Server EC2 做源站的方法来搭建。可以跳过 ALB 的搭建。只用执行亚马逊云科技 WAF 部署小指南 (一)步骤二 1-6 小步骤就可以。然后把 Echo-Server EC2 的 Public IP 对应的域名作为/waf/*的源站。

3、配置 CloudFront Path Pattern 完成动静态网页加速

配置 CloudFront,然后根据访问的 Path pattern 在 Behaviors 中分别进行静态和动态加速。访问/waf/*时回源 ALB 请求访问 Echo-Server 源站,其余访问路径回源 S3 获取前端 Web 页面。

98f031e6b326541831c8f0cd64282fce.jpeg

步骤四:完成 WAF 相关配置

1、在 WAF ACL 关联 ALB

ef3bcfefce878d755354e0bb7a2cca3e.png

2、在 WAF ACL 中配置 Token domain 列表

当 WAF 从 web 请求中侦测 token 时,默认只会接受与 ACL 所关联资源的 host domain。当请求是通过 Cloudfront 到 ALB 时,需要把 Cloudfront 所对应的 custom host domain 配置到 Token domain 列表中。配置参考文档:https://docs.aws.amazon.com/waf/latest/developerguide/waf-tokens-domains.html#waf-tokens-domain-lists

162c4e4e56f7a3a1e977c2d62d27a1d7.jpeg

步骤五:测试效果

1、访问集成 SDK 的前端网页,观察 Echo-Server 的响应

访问 Web 前端,打开浏览器开发者模式。可以看到,页面在初始化后自动与 WAF 后台进行交互,获取了 challenge.js 并进行静默计算得到 token。在发起 query 请求后,会自动在 cookie header 中带上 amazon-waf-token。WAF 后台的 Bot control Rule 进行 token 校验成功后,流量被发送到 ALB。Echo-Server 会把发送的请求原样返回,可以看到请求中包含了 token 信息。

c5e2d5b8971996f8c4c756ae2e889a65.jpeg

2、增加根据 token 判断阻断的 WAF rule

对于 Request 中不带有 token,或者 token 无效,我们希望 WAF 进行阻止的操作。需要做如下配置。

从流程上看,token 无效的请求,AmazonManagedRuleBotControlRuleSet 会给这条 Request 加上 Label,用于表示 token 不存在或 token 无效。我们可以继续配置自定义规则,如果 request 包含特定 label,则说明请求来自非法客户端,进行阻断。

  • Amazonwaf:managed:token:absent,包含这个 label 说明 token 不存在

  • Amazonwaf:managed:token:rejected,包含这个 label 说明 token 无效

增加 Custom Rule,如果请求中包含上述 Label,则 Block

5b169ee4c2bb1f39168356b66b72d63c.jpeg

49762263c5d9da6fe9bd6d3629e3e350.jpeg

增加 Custom Rule,如果请求的 token 无效,则 Block。以下是等效配置的 JSON 描述:

99ffd480e017bd0ae3807d29a4fd8a18.png

现在有三条 Rule 作用在 WAF ACL 上:

ba7db52ccbc90e412473a16058c1c849.png

3、观察不带 Token 的请求访问业务后端的情况

修改 Web 前端,使用 JS 原生 fetch(),不带 token 发送请求给业务后端。

<html>
<head>
</head>
<body>
    <h1>Login Page</h1>
    <p>Click on the below button to login</p>
    <button onclick="login()">Login</button>


    <script>
        async function login(){
           let user = {
               name: 'username',
               surname: 'surname'
           };
           const response = await fetch('https://yourdomain.com/waf/query',{
               method: 'POST',
               headers: {
                   'Content-Type': 'application/json'
               },
               body: JSON.stringify(user)
           });
           const responseText = await response.text()
           document.getElementById("display").innerText = responseText
           console.log(responseText)
        }
</script>
<p>Hello WAF!</p>
<div id='display'></div>
</body>
</html>

左滑查看更多

通过 Chrome 浏览器开发者模式可以看到,由于请求不带 token,请求被 WAF 所拒绝。

5ff69b65197f4c8b4c5267b392fbd5fd.jpeg

步骤六:Bot Control Rule 成本分析和优化

Bot Control rule 包括两种级别,Common 级别和 Targeted 级别。

  • Common 级别可以识别常见的机器人行为

  • Targeted 级别支持集成 Client SDK 通过 Token 智能识别威胁

Targeted 级别的 Bot 主要成本来自于 WAF ACL 所处理的 Request 数量,按照每百万次请求为一个单元计费。一般可以通过 Scope-down statement 功能,缩小需要被 Bot Control 所处理的 Request 范围来控制成本。

以本文所讲述的 WAF Client SDK 场景为例,如果出于成本的考虑,希望 BotControlRule 按需启动或者不长期运行。但由于嵌入到 Web 前端代码中的 Web ACL Integration URL 是在 WAF ACL 增加 BotControlRule 时生成并已经与 WAF ACL 进行了 1:1 关联。所以在业务上线后如再进行 Integration URL 修改或删除通常需要修改业务代码和版本发布。

利用 WAF Scope-down statement 功能,我们可以只允许带特定 Label 的 Request 才被 Bot Control Rule 处理,而这个特定的 Label 可以在 Bot Contrl Rule 被处理之前,用一条自定义的 Rule 进行生成。也就是说,增加一个自定义规则,用于当作 Bot Control Rule 是否生效的开关。在业务需要进行 Token 校验时,打开自定义规则为 Requst 增加 Label,反之删除这条自定义规则使 Bot Control Rule 失效。

1、增加 Custom Rule,把所有需处理的 Request 增加 wafclient:enabled 的 Label

1bee666bf2394075b5542866f9c49b09.jpeg

2、修改 AmazonManagedRulesBotControlRuleSet 增加 Scope-down 配置,只检测包含 wafclient:enabled 标签的 Request。

1211355828efe719d6c4de0928ffa364.jpeg

对于之前增加的两条用于 Block 无效 Token 请求的自定义 Rule,也需要修改判断逻辑,增加 wafclient:enabled 的处理。实现的效果是,只有 WafClient 开关开启,并且请求中没有合法 token,才进行Block。

3、WAFClient 开关开启,并且请求中没有 token,则阻止访问:

f75922e834fdf8c5f88fe83f947aed00.jpeg

4、WAFClient 开关开启,并且请求中的 token 无效,则阻止访问:

84367e13adf45020bf650bdd5a367e9c.png

5、最终有四条 Rule 作用在 WAF ACL 上:

ec6d96c8997f3495e78da99d57c9fc14.png

总结

通过在客户端集成亚马逊云科技 WAF Client SDK,可以高效方便地帮助业务抵御 7 层 DDoS 攻击。对比通过 WAF 自定义规则进行 Token 过滤,WAF 智能威胁检测只需要前端做 SDK 的接入(支持 iOS/Android/Web),免去了自己开发一整套复杂的 Token 管理分发流程。WAF SDK 和 WAF 后端自动实现了基于 Client Session 的 Token 分发和校验机制。开发者也可以通过 Scope-Down Statement 配置优化 Bot Control Rule 产生的 Request 成本。

本篇作者

b87e663011d23d182a866811eb0768c9.jpeg

秦镜高

亚马逊云科技资深解决方案架构师,负责基于亚马逊云科技云计算方案的架构设计,帮助客户利用领先的云服务技术构建更具创新性的应用。加入亚马逊云科技之前,有10多年丰富的游戏开发和架构设计实践经验。

4f4f193450eea36f6838009c83105c31.jpeg

崔俊杰

亚马逊云科技高级产品解决方案架构师,负责亚马逊云科技云边缘安全相关的服务产品。为亚马逊云用户提供 DDoS 防御/网站前端安全防御/域名安全相关的产品咨询。对 Cloudfront,Shield,WAF,Route53,Global Accelerator 等云边缘安全相关产品有深入了解。在计算机安全,数据中心和网络领域有多年的工作经验。

de6a3c99df8cf9d95e4f25b7dbb4fd86.gif

星标不迷路,开发更极速!

关注后记得星标「亚马逊云开发者」

f1f19a436c14ae4d8ba14d55836b98ce.gif

听说,点完下面4个按钮

就不会碰到bug了!

4772f2465e16d4fb8702935cc3800a01.gif

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

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

相关文章

asp.net core项目发布到 iis上

我们都知道与传统asp.net 项目比较&#xff0c;ASP.NET Core则完全不同&#xff0c;它并不是运行在IIS的工作进程中&#xff0c;而是独立运行的。它运行于控制台应用程序之中&#xff0c;控制台中则运行了Kestrel Web服务器组件。Kestrel作为一款.NET Web服务器的实现&#xff…

【机器学习300问】6、什么是机器学习中的特征量?

一、首先我们看三个例子 例一&#xff1a;在辨别水果的任务中&#xff0c;人类一般会通过外观、味道、颜色等方面信息来进行区分。而机器学习则通过水果的颜色、重量、气味成分的量等被称之为“特征量”的数值来区分。 例二&#xff1a;在手写数字识别任务中&#xff0c;人类…

20240112让移远mini-PCIE接口的4G模块EC20在Firefly的AIO-3399J开发板的Android11下跑通【DTS部分】

20240112让移远mini-PCIE接口的4G模块EC20在Firefly的AIO-3399J开发板的Android11下跑通【DTS部分】 2024/1/12 16:20 https://blog.csdn.net/u010164190/article/details/79096345 [Android6.0][RK3399] PCIe 接口 4G模块 EC20 调试记录 https://blog.csdn.net/hnjztyx/artic…

【软件测试】学习笔记-静态测试方法

这篇文章详细讨论人工静态测试方法和自动静态测试方法&#xff0c;来帮你理解研发流程上是如何保证代码质量的&#xff0c;以及如何搭建自己的自动静态代码扫描方案&#xff0c;并且应用到项目的日常开发工作中去。 人工静态方法本质上属于流程上的实践&#xff0c;实际能够发…

robot_sim配置

robot_sim https://github.com/Suyixiu/robot_sim 的issue https://www.bilibili.com/video/BV19f4y1h73E/ 下评论 文件来源 其余克隆 基于几何的抓取 banana不显示 解决参考 https://github.com/Suyixiu/robot_sim/issues/2 &#xff08;项目配置主要参考&#xff09; …

简易机器学习笔记(十一)opencv 简易使用-人脸识别、分类任务

前言 前段时间摸了下机器学习&#xff0c;然后我发现其实openCV还是一个很浩瀚的库的&#xff0c;现在也正在写一篇有关yolo的博客&#xff0c;不过感觉理论偏多&#xff0c;所以在学yolo之前先摸一下opencv&#xff0c;简单先写个项目感受感受opencv。 流程 openCV实际上已…

Dell 机架式服务器 - 高级定制

Dell 机架式服务器 - 高级定制 1. Dell Technologies2.1. Servers & Storage (服务器及存储) -> Servers2.2. Rack Servers (机架式服务器)2.3. Shop2.4. PowerEdge Rack Servers (PowerEdge 机架式服务器)2.5. PowerEdge R760 Rack Server (PowerEdge R760 机架式服务器…

vivado Revision Control

2020.2 只需要git 管理 prj.xpr 和 prj.srcs/ https://china.xilinx.com/video/hardware/ip-revision-control.html Using Vivado Design Suite with Revision Control https://www.xilinx.com/video/hardware/vivado-design-suite-revision-control.html http://www.xi…

基于STM32F103和ESP8266的Wi-Fi模块驱动程序设计与优化

基于STM32F103和ESP8266的Wi-Fi模块驱动程序设计和优化是一个重要的任务&#xff0c;它将使STM32F103微控制器能够与ESP8266模块进行通信并实现无线网络连接。在本文中&#xff0c;我们将介绍如何设计和优化这样的驱动程序&#xff0c;并提供相关的代码示例。 1. 系统概述 Wi…

【微服务】日志搜集elasticsearch+kibana+filebeat(单机)

日志搜集eskibanafilebeat&#xff08;单机&#xff09; 日志直接输出到es中&#xff0c;适用于日志量小的项目 基于7.17.16版本 主要配置在于filebeat&#xff0c; es kibana配置改动不大 环境部署 es kibana单机环境部署 略 解压即可 常见报错&#xff0c;百度即可。 记录…

easyexcel 3.0.x 版本实现指定列 锁定以及指定列隐藏

1&#xff1a;效果示例 2&#xff1a;代码示例&#xff1a; UnLockCell.java package com.example.juc.zhujie;/*** Author * Date Created in 2023/12/19 10:09* DESCRIPTION:* Version V1.0*/import java.lang.annotation.*;/*** 用于标记锁定哪些列不需要锁定* author 12…

强化学习应用(四):基于Q-learning的无人机物流路径规划研究(提供Python代码)

一、Q-learning简介 Q-learning是一种强化学习算法&#xff0c;用于解决基于马尔可夫决策过程&#xff08;MDP&#xff09;的问题。它通过学习一个价值函数来指导智能体在环境中做出决策&#xff0c;以最大化累积奖励。 Q-learning算法的核心思想是通过不断更新一个称为Q值的…

通义灵码 - 免费的阿里云 VS code Jetbrains AI 编码辅助工具

系列文章目录 前言 通义灵码&#xff0c;是阿里云出品的一款基于通义大模型的智能编码辅助工具&#xff0c;提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码注释生成、代码解释、研发智能问答、异常报错排查等能力&#xff0c;并针对阿里云 SDK/OpenAPI 的使用…

GPT Store,是否会成为下一个App Store?

经历了一场风波后&#xff0c;原本计划推出的GPT Store终于成功上线。OpenAI在北京时间1月11日推出了GPT Store&#xff0c;被广泛视为类似于苹果的"App Store"&#xff0c;为人工智能应用生态系统迈出了重要一步。然而&#xff0c;OpenAI要想将GPT Store打造成苹果般…

Salesforce财务状况分析

纵观Salesforce发展史和十几年财报中的信息&#xff0c;Salesforce从中小企业CRM服务的蓝海市场切入&#xff0c;但受限于中小企业的生命周期价值和每用户平均收入小且获客成本和流失率不对等&#xff0c;蓝海同时也是死海。 Salesforce通过收购逐渐补足品牌和产品两块短板&am…

py的函数讲解

前言:本章节我们来讲函数&#xff0c;主播略微感觉到有点小难&#xff0c;友友们需要认真看 目录 一.初始函数 1.1关于函数 1.2举例 1.3小结 二.函数的基础语法 2.1关于函数的语法 2.2举例 2.3小结 三.函数的参数 3.1关于函数的参数 3.2举例 3.3小结 四.函数的返回…

专业课120+总分380+海南大学838信号与系统考研经验分享-电子信息,信息与通信,人工智能,生物医学

今年专业课120&#xff0c;总分380顺利被海大录取&#xff0c;总结一下这一年来的复习经验&#xff0c;希望对大家复习有借鉴。特别提醒这两年专业课海南大学838信号与系统难度比较大&#xff0c;还考察了IDTFT&#xff0c;DTFT等&#xff0c;对离散域的考察颇多&#xff0c;不…

一文读懂ERP、OMS、WMS、TMS(2/2)

目录 二、ERP、OMS、WMS、TMS的区别 2.1 ERP (Enterprise Resource Planning) 企业资源计划 2.2 OMS (Order Management System) 订单管理系统 2.3 WMS (Warehouse Management System) 仓库管理系统 2.4 TMS (Transportation Management System) 运输管理系统 二、ERP、OM…

算法学习系列(十九):DFS、BFS

目录 引言一、DFS1.排列数字2.n-皇后问题 二、BFS1.走迷宫2.八数码问题 引言 关于这个DFS与BFS的问题非常的常见&#xff0c;其实这两个就是搜索的方式不一样而已&#xff0c;核心思想非常容易懂&#xff0c;题目的话也是做一道记一道&#xff0c;还是要针对题来看&#xff0c…

Vim一键配置指南,打造高效率C++开发环境

文章目录 前言安装与卸载功能演示gcc/g升级问题 前言 Vim作为当下最受欢迎的文本编译器之一&#xff0c;不仅具有强大的文本编辑功能&#xff0c;还提供了高度的可定制性。用户可以根据自己的喜好自定义配置&#xff0c;并且通过自己编写插件或者使用现有的插件来扩展Vim的功能…