This commit is contained in:
YUN-PC5\user 2023-09-18 16:53:28 +08:00
parent 400ee7c6a0
commit c9c11bcfcf
3 changed files with 223 additions and 1 deletions

View File

@ -789,6 +789,8 @@ public class CustomIpRateLimitMiddleware : IpRateLimitMiddleware
## 使用 ## 使用
### Hello Quartz.Net
添加Quartz.Net的引用 添加Quartz.Net的引用
```shell ```shell
@ -848,6 +850,46 @@ Hello Quartz.Net
3. 创建触发器。触发器描述了在何时执行作业。 3. 创建触发器。触发器描述了在何时执行作业。
4. 添加调度。当完成以上三步以后,就可以对作业进行调度了。 4. 添加调度。当完成以上三步以后,就可以对作业进行调度了。
### 作业Job和JobDetail
Job是作业的类型描述了作业是如何执行的这个类型是由我们定义的例如上文的`HelloQuartzJob`。Job实现IJob接口而IJob接口只有一个`Execute`方法,参数`context`中包含了与当前上下文中关联的Scheduler、JobDetail、Trigger等。
一个典型的Job定义如下
```c#
public class HelloQuartzJob : IJob
{
public Task Execute(IJobExecutionContext context)
{
return Task.Factory.StartNew(() =>
{
Console.WriteLine("Hello Quartz.Net");
})
}
}
```
#### JobData
Job不是孤立存在的它需要执行的参数这些参数如何传递进来呢我们来定义一个Job类进行演示。
```c#
public class SayHelloJob : IJob
{
public string UserName { get; set; }
public Task Execute(IJobExecutionContext context)
{
return Task.Factory.StartNew(() =>
{
Console.WriteLine($"Hello {UserName}!");
})
}
}
```
# NLog 日志记录 # NLog 日志记录
## 介绍 ## 介绍

View File

@ -228,3 +228,105 @@ var arrowFunc = (arg1, arg2) => {
在 JavaScript 中,`~` 符号是按位取反运算符。它将操作数的每个二进制位取反,即将 0 变为 1将 1 变为 0。然后返回这个值的负数加一。 在 JavaScript 中,`~` 符号是按位取反运算符。它将操作数的每个二进制位取反,即将 0 变为 1将 1 变为 0。然后返回这个值的负数加一。
例如,对于十进制数 10它的二进制表示为 1010按位取反后变为 0101即 5。因此`~10` 的结果为 -11。 例如,对于十进制数 10它的二进制表示为 1010按位取反后变为 0101即 5。因此`~10` 的结果为 -11。
# 性能优化
## 防抖debounce
> 多次触发 只执行最后一次
**作用:**高频率触发的事件,在指定的单位时间内,只相应最后一次,如果在指定时间内再次触发,则重新计算时间。
防抖类似于英雄联盟回城6秒如果回城中被打断再次回城需要再等6秒
![image-20230918145946833](https://markdownhexo.oss-cn-hangzhou.aliyuncs.com/img/image-20230918145946833.png)
**实现代码:**
```javascript
<body>
<input type="text" id="inp">
<script>
// 1.封装防抖函数
function debounce(fn, time) {
// 4.创建一个标记用来存放定时器的返回值
let timeout = null;
return function () {
// 5.每当用户触发input事件 把前一个 setTimeout 清楚掉
clearTimeout(timeout);
// 6.然后又创建一个新的 setTimeout, 这样就能保证输入字符后等待的间隔内 还有字符输入的话,就不会执行 setTimeout里面的内容
timeout = setTimeout(() => {
// 7.这里进行防抖的内容
fn();
}, time);
};
}
// 2.获取inpt元素
var inp = document.getElementById('inp');
// 8. 测试防抖临时使用的函数
function sayHi() {
console.log('防抖成功');
}
// 3.给inp绑定input事件 调用封装的防抖函数 传入要执行的内容与间隔事件
inp.addEventListener('input', debounce(sayHi, 5000));
</script>
</body>
```
**使用场景:**
search搜索时用户在不断输入值时用防抖来节约请求资源。
## 节流throttle
> 规定时间内 只触发一次
**作用:**高频率触发的事件,在指定的单位时间内,只响应第一次
节流类似于英雄联盟里的技能 触发一次必须等技能刷新后才能再次触发
![image-20230918151523728](https://markdownhexo.oss-cn-hangzhou.aliyuncs.com/img/image-20230918151523728.png)
**实现代码:**
```javascript
<script>
// 1.封装节流函数
function throttle(fn, time) {
//3. 通过闭包保存一个 "节流阀" 默认为false
let temp = false;
return function () {
//8.触发事件被调用 判断"节流阀" 是否为true 如果为true就直接trurn出去不做任何操作
if (temp) {
return;
} else {
//4. 如果节流阀为false 立即将节流阀设置为true
temp = true; //节流阀设置为true
//5. 开启定时器
setTimeout(() => {
//6. 将外部传入的函数的执行放在setTimeout中
fn.apply(this, arguments);
//7. 最后在setTimeout执行完毕后再把标记'节流阀'为false(关键) 表示可以执行下一次循环了。当定时器没有执行的时候标记永远是true在开头被return掉
temp = false;
}, time);
}
};
}
function sayHi(e) {
// 打印当前 document 的宽高
console.log(e.target.innerWidth, e.target.innerHeight);
}
// 2.绑定事件,绑定时就调用节流函数
// 敲黑板!!! 这里是重点 绑定是就要调用一下封装的节流函数 触发事件是触发封装函数内部的函数
window.addEventListener('resize', throttle(sayHi, 2000));
</script>
```
**使用场景:**
鼠标不断点击触发mousedown单位时间内只触发一次
监听滚动事件比如是否滑到底部自动加载更多用throttle来判断

View File

@ -41,3 +41,81 @@ Rust 编译工具从链接 [安装 Rust - Rust 程序设计语言 (rust-lang.org
![image-20230915135358199](https://markdownhexo.oss-cn-hangzhou.aliyuncs.com/img/image-20230915135358199.png) ![image-20230915135358199](https://markdownhexo.oss-cn-hangzhou.aliyuncs.com/img/image-20230915135358199.png)
上图显示的是一个命令行安装向导。
**如果你已经安装MSVC推荐那么安装过程会非常的简单输入 1 并回车,直接进入第二步。**
如果你安装的是MinGW那么你需要输入 2自定义安装然后系统会询问你 Default host triple?,请将上图中 **default host triple**的"msvc"改为"gnu"再输入安装程序:
![img](https://www.runoob.com/wp-content/uploads/2020/04/rust-env2.png)
其他属性都默认。
设置完所有选项,会回到安装向导界面(第一张图),这时我们输入 1 并回车即可。
![img](https://www.runoob.com/wp-content/uploads/2020/04/rust-env3.png)
进行到这一步就完成了Rust的安装可以通过以下命令测试
```shell
rustc -V # 注意大写的 V
```
![img](https://www.runoob.com/wp-content/uploads/2020/04/rust-env4.png)
如果以上两个命令能够输出你安装的版本号,就是安装成功了。
## 搭建 Visual Studio Code 开发环境
安装`rust-analyzer``Native Debug`两个扩展。
![img](https://www.runoob.com/wp-content/uploads/2020/04/49033261-B1B8-4D70-8090-53DC45A8727E.jpeg)
![img](https://www.runoob.com/wp-content/uploads/2020/04/rust-env8.png)
重新启动 VsCodeRust 的开发环境就搭建好了。
现在新建一个文件夹,如 RustLearn。
在VsCode中打开新建的文件夹。
打开文件夹后,新建终端。
输入以下命令:
```shell
cargo new greeting
```
当前文件夹下会构建一个名叫 greeting 的 Rust 的工程目录。
在终端里输入以下三个命令:
```shell
cd ./greeting
cargo build
cargo run
```
系统在创建工程时会生成一个Hello World源程序main.rs这时会被编译运行
# Cargo 教程
## Cargo 是什么
Cargo 是 Rust 的构建系统和包管理器。
Rust 开发者 常用 Cargo 来管理 Rust 工程和获取工程所依赖的库。在上个教程中我们曾使用 cargo new greeting 命令创建一个名为 greeting 的工程Cargo 新建了一个名为 greeting 的文件夹并在里面部署了一个 Rust 工程最典型的文件结构。这个 greeting 文件夹就是工程本身。
## Cargo 功能
Cargo 除了创建工程以外还具备构建build工程、运行run工程等一系列功能构建和运行分别对应以下命令
```shell
cargo build
cargo run
```
Cargo 还具有获取包、打包、高级构建等功能,详细使用方法参见 Cargo 命令。
## 在