如何将 Git 托管项目中的所有本地更改恢复到以前的状态?

问: 我运行了 git status,它告诉我一切都是最新的,并且没有本地更改。 然后我连续做了几次改变,意识到我想把所有的东西都扔掉,回到我原来的状态。这个命令会为我做吗? git reset --hard HEAD 答1: huntsbot.com – 高效赚钱,自由工作 要恢复对工作副本所做的更改,请执行以下操作: git checkout . 或者等效地,对于 git version >= 2.23: git restore . 要恢复对索引所做的更改(即您添加的),请执行此操作。警告这会将所有未推送的提交重置为 master!: git reset 要恢复您已提交的更改: git revert 要删除未跟踪的文件(例如,新文件、生成的文件): git clean -f 或未跟踪的目录(例如,新的或自动生成的目录): git clean -fd fwiw 这么长时间后,git checkout path/to/file 只会将本地更改还原为 path/to/file +1 在下面的答案中还提到 git clean -f (删除未跟踪的更改)和 -fd (也删除未跟踪的目录) git checkout . 和 git reset [--hard HEAD] 不起作用,我必须执行 git clean -fd 才能恢复我的更改。 git reset 不会重置您的更改,git reset --hard 会这样做。

React源码分析(三):useState,useReducer

热身准备 在正式讲useState,我们先热热身,了解下必备知识。 为什么会有hooks 大家都知道hooks是在函数组件的产物。之前class组件为什么没有出现hooks这种东西呢? 答案很简单,不需要。 因为在class组件中,在运行时,只会生成一个实例,而在这个实例中会保存组件的state等信息。在后续的更新操作中,也只是调用其中的render方法,实例中的信息不会丢失。而在函数组件中,每次渲染,更新都会去执行这个函数组件,所以在函数组件中是没办法保存state等信息的。为了保存state等信息,于是有了hooks,用来记录函数组件的状态,执行副作用。 hooks执行时机 上面提到,在函数组件中,每次渲染,更新都会去执行这个函数组件。所以我们在函数组件内部声明的hooks也会在每次执行函数组件时执行。 在这个时候,可能有的同学听了我上面的说法(hooks用来记录函数组件的状态,执行副作用),又有疑惑了,既然每次函数组件执行都会执行hooks方法,那hooks是怎么记录函数组件的状态的呢? 答案是,记录在函数组件对应的fiber节点中。 两套hooks 在我们刚开始学习使用hooks时,可能会有疑惑, 为什么hooks要在函数组件的顶部声明,而不能在条件语句或内部函数中声明? 答案是,React维护了两套hooks,一套用来在项目初始化mount时,初始化hooks。而在后续的更新操作中会基于初始化的hooks执行更新操作。如果我们在条件语句或函数中声明hooks,有可能在项目初始化时不会声明,这样就会导致在后面的更新操作中出问题。 hooks存储 提前讲一下hooks存储方式,避免看晕了~~~ 每个初始化的hook都会创建一个hook结构,多个hook是通过声明顺序用链表的结构相关联,最终这个链表会存放在fiber.memoizedState中: var hook = { memoizedState: null, // 存储hook操作,不要和fiber.memoizedState搞混了 baseState: null, baseQueue: null, queue: null, // 存储该hook本次更新阶段的所有更新操作 next: null // 链接下一个hook }; 而在每个hook.queue中存放的么个update也是一个链表结构存储的,千万不要和hook的链表搞混了。 接下来,让我们带着下面几个问题看文章: 为什么setState后不能马上拿到最新的state的值?多个setState是如何合并的?setState到底是同步还是异步的?为什么setState的值相同时,函数组件不更新? 假如我们有下面这样一段代码: function App(){ const [count, setCount] = useState(0) const handleClick = () => { setCount(count => count + 1) } return ( <div> 勇敢牛牛, <span>不怕困难</span> <span onClick={handleClick}>{count}</span> </div> ) } 初始化 mount useState 我们先来看下useState()函数:

【C语言】从键盘输入一个十进制整数,将其转换为二进制字符串,输出字符串。

#include <stdio.h> #include<string.h> #include<math.h> #define N 81 int main() { int i=0,j; int sum=0; char s[N]; char temp1; int x,temp; int count=0; scanf("%d",&x); do{ temp=x%2; s[i]=temp+'0'; i++; x=x/2; count++; }while(x!=0); for(i=0,j=count;i<j;i++,j--) { temp1=s[i]; s[i]=s[j]; s[j]=temp1; } for(i=0;i<=count;i++) { printf("%c",s[i]); } return 0; } 【问题描述】: 从键盘输入一个十进制整数,将其转换为二进制字符串,输出字符串。 【提示】: (1)定义字符数组s,定义整型变量x; (2)用2去除x,每除1次得到余数(余数是0或者1),将余数转换为数字字符,保存到数组s中 。直到商为0。 (3)将数组s中的字符串逆序存储。 (4)输出字符串 【样例输入与输出】: 如:输入十进制整数: 13 输出字符串: 1101 如:输入十进制整数: 50 输出字符串: 110010 【小知识点】: ①int类型转换为char 直接在int变量后加上一个’0’; 例如: int a = 10; printf(“%c\n”,a+’0’)

【C语言】计算奇数排的和并用拼音输出

#include <stdio.h> #include<string.h> #define N 10 int main() { int a[N][N],b[N],c[N]; int i,j,k; int m,n; int sum,temp,temp1,count,mask; scanf("%d %d",&m,&n); for(i=0;i<m;i++) { for(j=0;j<n;j++) { scanf("%d",&a[i][j]); } } for(i=0;i<m;i++) { sum=0; for(j=0;j<n;j++) { if(i==0||i%2==0) { sum+=a[i][j]; } else { break; } } b[i]=sum; } /*for(i=0;i<m;i++) { printf("%d\n",b[i]); } printf("\n");*/ //检验b[i]的各项值 for(i=0;i<m;i++) { if(b[i]==0) { for(j=i;j<m;j++) { temp=b[j]; b[j]=b[j+1]; b[j+1]=temp; } m--; } } //printf("%d\n",m); /*for(i=0;i<m;i++) { printf("%d\n",b[i]); } printf("\n");*/ //检验b[i]的各项值 for(i=0;i<m;i++) { mask=0; temp=b[i]; while(temp>0) { temp=temp/10; mask++; }//计算位数 temp1=b[i]; for(j=0;j<mask;j++) { c[j]=temp1%10; temp1=temp1/10; }//将每个数字储存在数组,方便输出; printf("

【C语言】删除指定字符并计算出现次数并重新排序

#include <stdio.h> #include<string.h> #define N 20 int main() { char a[N],b[N]; char temp; int i,j; int count=0; gets(a); for(i=0;a[i]!='\0';i++) { if(a[i]=='c') { count++; for(j=i;j<strlen(a)-1;j++) { a[j]=a[j+1]; } i--; a[j]='\0'; } } if(count!=0) { printf("count:%d\n",count); } else if(count==0) { printf("No c\n"); } for(i=0;a[i]!='\0';i++) { b[i]=a[i]; } b[i]='\0'; printf("b:"); puts(b); for(i=1;b[i]!='\0';i++) { for(j=0;j<strlen(b)-i;j++) { if(b[j]>b[j+1]) { temp=b[j]; b[j]=b[j+1]; b[j+1]=temp; } } } printf("b sorted:"); puts(b); return 0; } 程序功能:按示例格式完成以下要求: (1)输入一行字符(不超过20个),存入一维字符数组a中; (2)输出小写字母'c'出现的次数,若数组中没有'c',也要报告"No c"

idea 配置python环境

在 IDEA 中配置 Python 环境需要以下步骤: 安装 Python 环境。如果你没有安装 Python,那么需要先安装 Python 解释器。你可以前往 Python 官网下载最新版本的 Python。 在 IDEA 中安装 Python 插件。在 IDEA 中,打开“File”菜单,然后选择“Settings”,在打开的窗口中,在左侧的菜单中找到“Plugins”,然后在右侧的窗口中点击“Install Jetbrains Plugin”按钮,在弹出的窗口中搜索“Python”并安装。 在 IDEA 中创建 Python 项目。在 IDEA 中,打开“File”菜单,然后选择“New”,在弹出的窗口中选择“Project”,然后在下一个窗口中选择“Python”作为项目类型,然后点击“Next”按钮。在下一个窗口中设置 Python 项目的基本信息,如项目名称、位置等,然后点击“Create”按钮。 配置 Python 解释器。在 IDEA 中,打开“File”菜单,然后选择“Settings”,在打开的窗口中,在左侧的菜单中找到“Project: 项目名称”,然后在右侧的窗口中找到“Project Interpreter”,点击右侧的窗口中的“+”按钮,在弹出的窗口中选择已安装的 Python 解释器,然

爬虫遇到需要登录的网站怎么解决

在日常爬虫工作中我们会遇到这样需要先进行登录才能获取数据的网站,那在遇到这样的情况时我们需要怎么处理呢?今天我们就来简单的分享学习下爬虫对需要登录情况下得处理方式。 通常情况下,用户通过浏览器登录网站时,在特定的登录界面,输入个人登录信息,提交之后便能返回一个包含数据的网页。在浏览器层面的机制是,浏览器提交包含必要信息的http Request,服务器返回http Response。在运行爬虫过程中我们可以通过2种方式进行登录。 1、使用表单登陆 这种情况属于post请求,即先向服务器发送表单数据,服务器再将返回的cookie存入本地。 import requests data = {'data1':'XXXXX', 'data2':'XXXXX'} response = requests.post(url=url, data=data) 2、使用cookie进行登录 使用cookie登陆,服务器会认为你是一个已登陆的用户,所以就会返回给你一个已登陆的内容。因此,需要验证码的情况可以使用带验证码登陆的cookie解决。 Plain Text 复制代码 #! -*- encoding:utf-8 -*- import requests import random import requests.adapters # 要访问的目标页面 targetUrlList = [ "https://httpbin.org/ip", "https://httpbin.org/headers", "https://httpbin.org/user-agent", ] # 代理服务器(产品官网 www.16yun.cn) proxyHost = "t.16yun.cn" proxyPort = "31111" # 代理隧道验证信息 proxyUser = "username" proxyPass = "password" proxyMeta = "http://%(user)s:%(pass)s@%(host)s:%(port)s" % { "host": proxyHost, "port": proxyPort, "user": proxyUser, "pass": proxyPass, } # 设置 http和https访问都是用HTTP代理 proxies = { "

python 如何统计一个图片中不规则图形个数

首先,您需要将图片转化为二进制格式,然后使用 Python 的图像处理库进行处理。 有许多方法可以统计图像中的不规则图形的个数,这里介绍两种常用的方法。 使用轮廓: 使用 OpenCV 的 findContours() 函数可以找到图像中的轮廓。在找到轮廓后,您可以使用 len() 函数来统计轮廓的数量。 使用图像分割: 使用图像分割技术,您可以将图像分割成若干个不规则图形。然后,您可以使用 len() 函数来统计这些不规则图形的数量。 示例代码: import cv2 import numpy as np # 读入图像 img =

angular 判断路由是否存在,不存在跳到404,存在就跳到相应路由

你可以使用 Angular 的 Router 类的 navigate 方法来跳转到另一个路由。你可以使用 Router 类的 url 方法来获取当前路由的 URL。你可以在你的路由配置中设置一个通配符路由,用来匹配所有无法匹配到其它路由的 URL。然后你就可以在通配符路由的组件中处理 404 错误。 示例代码: import { Router } from '@angular/router'; @Component({ // 省略其它代码 }) export class MyComponent { constructor(private router: Router) {

python:Anaconda安装及配置

为啥需要Anaconda 首先我们需要从python本身说起, 从根源寻找问题, 我们在使用python语言编写程序之前需要下载一个python解释器, 这才是python的本体 没了python解释器, python脚本也没办法运行, 那这个解释器在哪呢.就在你安装python的地方,比如C:\Users\Acring\AppData\Local\Programs\Python\Python36-32 目录下的python.exe, 就是Python解释器解释器根据python的版本大概分为2和3. python2和3之间无法互相兼容, 也就是说用python2语法写出来的脚本不一定能在python3的解释器中运行. 除此之外还有个很重要的东西, Lib, 也就是python包文件, 包括自带的包和第三方包(而所有的第三方包都放在site-packages文件夹里面) 包集合中包含了自带的包和第三方包, 第三方包我们一般通过pip或者easy_install来下载, 当一个python环境中不包含这个包, 那么引用了这个包的程序不能在该python环境中运行. 即一个python环境中需要有一个解释器, 和一个包集合. python环境解释完了, 那么接下来就要说明这样的环境究竟产生哪些问题, 因为anaconda正式为了解决这些问题而诞生的 到底该装 Python2 呢还是 Python3: python2和python3在语法上是不兼容的, 那我的机器上应该装python2还是python3呢, 可能一开始选一个学习就好了, 但是如果你要开发的程序必须使用python2而不能使用python3,那这时候你就不得不再下载一个python2, 那这时候环境变量该设谁的目录呢, 如果还是切换环境变量岂不是很麻烦.包管理: 如果我在本地只有一个python环境那我所有程序用到的各种包都只能放到同一个环境中, 导致环境混乱, 另外当我将写好的程序放到另一电脑上运行时又会遇到缺少相关包, 需要自己手动一个个下载的情况, 实在是烦人, 要是能每个程序开发都选用不同的环境, 而开发好之后又能将该程序需要的环境(第三方包)都独立打包出来就好了. 是什么 Anaconda是一个用于科学计算的 Python 发行版,支持 Linux, Mac, Windows系统,提供了包管理与环境管理的功能,可以很方便地解决多版本 python 并存、切换以及各种第三方包安装问题。 Anaconda具有如下特点: ▪ 开源 ▪ 安装过程简单 ▪ 高性能使用Python和R语言 ▪ 免费的社区支持 其特点的实现主要基于Anaconda拥有的: ▪ conda包 ▪ 环境管理器 ▪ 1,000+开源库 如果日常工作或学习并不必要使用1,000多个库,那么可以考虑安装Miniconda 要不要卸载旧的python: 一般情况下,除非官方消息明确允许,否则永远不要删除"

你知道bdsm吗

是的,我知道 BDSM。BDSM 是一种性癖好,通常指一组相关的性癖好,包括:较强的角色扮演,较轻的或较重的身体触摸,以及在性活动中的安全词。BDSM 也可以包括授权和自我控制,以及建立信任和良好的沟通。BDSM 可能涉及各种形式的挑逗,包括鞭打,绑缚,以及假想游戏。

如何使用非暴力破解方法将一个整数可以拆成两个整数的平方和,给出python代码...

首先,您可以使用数学方法将一个整数表示为两个整数的平方和。例如,将整数n表示为两个整数的平方和的公式为: n = a^2 + b^2 您可以使用高斯求和公式来求解这个方程,即: a = sqrt((n/2) + sqrt(n)) b = sqrt((n/2) - sqrt(n)) 当然,您也可以使用暴力破解的方法,即对于给定的n,枚举a和b的所有可能值,直到找到满足条件的a和b为止。这种方法的时间复杂度为O(n^2)。 以下是使用高斯求和公式求解的python代码: importmath def solve(n): a = int(math.sqrt((n/2) + math.sqrt(n))) b = int(math.sqrt((n/2) - math.sqrt(n))) return (a, b) print(solve(5)) # 输出(2, 1) 希望这些信息对您有所帮助!

RuntimeError: DataLoader worker (pid(s) 2571167) exited unexpectedly

参考:https://blog.csdn.net/BBJG_001/article/details/104354990 网上解决方案大概是这两种,但是num_worker变成0训练效率降低很多 主要原因我猜想是在dataloader里使用了opencv占用内存较大 原来的opencv是安装python的时候自己安装好的,尝试升级opencv 3.X → 4.X pip install opencv-python 成功解决

怎么include指定特定文件夹下的头文件

在 C/C++ 程序中,可以使用 #include 指令来包含指定文件夹下的头文件。 通常有两种方法可以指定文件夹: 使用完整路径,如: #include "C:/MyProject/include/header.h" 在编译时指定头文件所在的文件夹。在编译时使用 -I 选项指定头文件目录,如: gcc -I C:/MyProject/include main.c 然后在程序中就可以使用下面的语句包含指定文件夹中的头文件: #include "header.h"

verilog学习笔记- 6)verilog基础知识

目录 Verilog 的逻辑值: Verilog 的标识符(类似C中的变量名): 1) 定义: 2) 规范建议: Verilog 的数字进制格式: Verilog 的数据类型: 1) 寄存器类型: 2) 线网类型: 3) 参数类型: Verilog 的运算符: 1) 算术运算符: 2) 关系运算符: 3) 逻辑运算符: 4) 条件运算符: 5) 位运算符: 6) 移位运算符: 7) 拼接运算符: 8) 运算符的优先级: Verilog 的逻辑值: 逻辑 0:表示低电平,也就是对应我们电路的 GND; 逻辑 1:表示高电平,也就是对应我们电路的 VCC; 逻辑 X:表示未知,有可能是高电平,也有可能是低电平; 逻辑 Z:表示高阻态,外部没有激励信号是一个悬空状态。 Verilog 的标识符(类似C中的变量名): 1) 定义: 标识符(identifier)用于定义模块名、端口名和信号名等。Verilog 的标识符可以是任意一组字母、数字、 $和_(下划线)符号的组合,但标识符的第一个字符必须是字母或者下划线。另外,标识符是区分大小写的。 以下是标识符的几个例子: Count COUNT //与 Count 不同。 R56_68 FIVE$ 不建议大小写混合使用,普通内部信号建议全部小写,参数定义建议大写,另外信号命名最好体现信 号的含义。 2) 规范建议: 1、用有意义的有效的名字如 sum、cpu_addr 等。

【亲测可用】VsCode配置C语言环境

【VSCode的本质】 简单来说,它就是一个编辑器 。就是说,它和我们的记事本没有什么本质的区别。就是说,如果我们用记事本来去写代码,和用VScode写代码从文件的编译运行的角度来说是一样的。 所以我们才需要安装各种各样的插件,装编译器啊,配置调试文件呀等等。 【第一步】下载工具链 MinGW-W64 GCC 工具链是什么东西?它是包含了由 GNU 项目所产生的各种编程工具的集合(GNU是一种类Unix操作系统的一个项目)。而我们现阶段其实仅仅能用到里面的gcc和g++。 记一下路径,为了待会要配置环境变量用。 注意!!!上面的路径不可以有中文,同理,下面在编写代码的时候,文件名也不要有中文出现!!! 下载链接:sourceforge.net/projects/mingw-w64/files/mingw-w64/ 也可以通过下载那个Installer,借助安装助手来安装也可。 由于官方下载有可能会慢,这里有百度云盘的下载地址。 链接:https://pan.baidu.com/s/1Cu3vU2P28vN4ZCGvNlhBUw 提取码:qylh 下载完成后解压。 配置环境变量 找到这个文件夹内的一个叫bin的文件夹: 把它的地址复制一下,找到此电脑(或者我的电脑)——>右键——>属性 打开高级系统设置,找到环境变量,单击打开,然后在环境变量中的系统变量中,找到Path变量,打开之后将刚刚复制的地址添加进去。 测试环境配置是否成功 win+R快捷键打开运行窗口,在里面输入cmd,回车打开cmd.exe gcc -v -E -x c++ - 如果运行结果像下方图片中这样,就配置成功了。 安装VScode插件 我们打开VScode,点开旁边的扩展栏,在里面搜索并下载: C/C++智能提示。主要用于代码补全、代码调试等。操作方法同理,先输入C/C++,然后Install。 Code Runner : 让你自动编译运行的。(当然你不装的话也可以手动编译运行) 下载好以后,【重启vscode】 文件编辑、配置 首先【在电脑的某个地方首先创建一个新的文件夹】。然后点击VScode里面的文件(如下图),然后选择【打开文件夹】->【选中想要的文件夹】->【是,我信任…】,然后就可以创建一个新的文件,创建文件,编写代码了。 ->假如我们新创建一个文件,叫【1.c】 我们按【ctrl】+【shift】+【P】,【找到C/C++编辑配置】 把下面的编译器路径和智能提示模式换掉 我们用gcc(C语言)或者g++(C++)所以,我们将其改成我们刚刚的工具链所在的地方。 如果是C语言,那就是gcc,如果是C++,那就是g++。 配置完之后,我们可以看到,C/C++扩展就自动为我们生成了一个文件:c_cpp_properties.json文件 我们打开【终端】-【配置任务】配置一下tasks.json文件 注意的是:一定要回到1.c这个.c源文件当中来,才能进行配置。 点击之后,我们就可以看到又多出来了一个tasks.json文件 然后我们就可以编写代码保存运行了。不过要强调的是,一定要保存,一定要保存,一定要保存!!!VScode不是VS,也不是devc++,它只是一款编辑器,它不会帮你自动保存。 保存完以后就可以运行啦~ 测试 #include<stdio.h> int main(){ printf("12aa"); printf("时间"); return 0; } 调试功能的配置 配一下launch.json文件 选择【运行】->【添加配置】 然后选择第一个 如果出现这个就选择默认的(如果你是第二次进行调试它应该是不会出现的)(不出现就不管它) 点右下角或点击【运行】->【添加配置】 选择gdb启动,根据提示修改 { // 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。 // 欲了解更多信息,请访问: https://go.

python爬取豆瓣TOP100电影

如果你想爬取豆瓣TOP100电影,你可以使用Python的第三方库来帮助你爬取网页信息。 你可以使用Python的requests库来发送HTTP请求并获取网页的内容,再使用Python的Beautiful Soup库来解析网页并提取你想要的信息。 下面是一个简单的例子,它爬取了豆瓣TOP100电影的电影名和评分: import requestsfrom bs4 import BeautifulSoup # 发送HTTP请求并获取网页内容 url = 'https://movie.douban.com/chart' response = requests.get(url) html = response.text # 使用Beautiful Soup解析网页并提取信息 soup = BeautifulSoup(html, 'html.parser') movies = soup.find_all(class_='pl2') for movie in movies: title = movie.find('a')['title'] rating = movie.find(class_='rating_nums').text print(title, rating) 在这个例子中,我们使用了requests库发送HTTP请求并获取了网页的内容,然后使用Beautiful Soup解析网页并提取了我们想要的信息。 希望这个例子对你有帮助!

利用Jmeter进行压力测试(基础版)

安装Jmeter 下载地址 下载完成后直接解压即可: 环境变量 新增JMETER_HOME环境变量,变量值为JMeter解压的路径 打开电脑的系统高级设置-点击环境变量-CLASSPATH变量,加上 %JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar;%JMETER_HOME%\lib\logkit-2.0.jar; 完成以上操作后,进入JMeter的bin目录,双击jmeter.bat文件即可打开JMeter。 记得修改jmeter安装路径bin文件夹下的jmeter.bat文件,找到以下文字: if not defined HEAP ( rem See the unix startup file for the rationale of the following parameters, rem including some tuning recommendations set HEAP=-Xms1g –Xmx1g -XX:MaxMetaspaceSize=256m ) 将其修改为:set HEAP=-Xms1g –Xmx2g -XX:MaxMetaspaceSize=512m 或set HEAP=-Xms1024m –Xmx1024m -XX:MaxMetaspaceSize=512m 该修改目的是为了防止内存溢出,视情况而定。 修改后启动Jmeter,进行以下配置进行压力测试。 压力测试 一、新建测试计划(Test Plan) Jmeter启动后会显示Test Plan,也就是测试计划,可以根据自己的测试计划名进行修改,中文英文都可以,我这里命名为reportartist,如下图: 二、新增线程组(Threads Group) Number of Threads(users):线程数量,即为虚拟用户数,一个虚拟用户占用一个进程或线程。Ramp-up period(seconds):启动时间/准备时长,以秒为单位,即虚拟用户数在多少时间内全部启动。Loop Count:循环次数,每个线程发送请求的次数。如果线程数为20 ,循环次数为100 ,那么每个线程发送100次请求。总请求数为20*100=2000 。如果勾选了“永远”,那么所有线程会一直发送请求,一到选择停止运行脚本。 右击测试计划(reportartist)——Add——Threads(Users)——Threads Group,命名为API Test, 三、添加Http请求(Http Request) 右击线程组(API Test)——Add——Sampler——Http Request,命名为Login API

录屏怎么录,试试这三个电脑录屏方法

录屏是当前最常用的功能,它可以帮助我们将喜爱的视频片段、线上会议,网络课程以及不能被下载的视频都给录制下来。电脑录屏怎么录?我们可以用电脑自带的录屏工具,或者使用第三方专业的电脑录屏软件来录制。 下面小编就给大家分享3个简单操作的电脑录屏方法。 电脑录屏方法一:QQ录屏 相信大部分人的电脑上都有安装QQ,如果对录屏的需求不高的话,可以直接使用QQ自带的【屏幕录制】功能来录制,或者是使用QQ电脑录屏快捷键ctrl+alt+a来录制视频。QQ具体录屏操作如下图所示: 步骤1:在电脑上登录QQ后,打开与好友的聊天窗口; 步骤2:然后在聊天窗口界面,点击“剪刀”图标,并在列表中选择“屏幕录制”,进入到电脑录屏界面; 步骤3:进入到电脑录屏界面,根据录制实际情况选择录屏区域。然后,点击“开始录制”按钮,即可开始录屏。 电脑录屏方法二:电脑自带录屏功能 有部分朋友还不知道电脑自带录屏怎么使用,本次以win10电脑系统为例,为大家演示一次录屏。在录制视频前,需要确认Xbox Game Bar该功能已开启;此外,还要特别注意的是该录屏功能不支持录制电脑桌面,只能够单独录制某个窗口。 步骤1:打开Windows【游戏】设置后,如下图所示将【Xbox Game Bar】电脑录屏功能开启; 步骤2:在电脑上输入【Win+G】进入到电脑录屏界面,点击白色【录制】按钮,即可电脑录屏; 电脑录屏方法三:专业录屏软件 除了上述2个方法外,今天小编给大家分享一款刚上线不久的专业录屏软件。这款软件功能十分齐全,可以支持不同的格式输出WMV、MP4、MoV、F4V、MPEG-TS、WebM、GIF。在录制视频方面,软件支持在视频中添加文字、添加画笔等工具,并有视频初剪辑、合并、压缩等后期功能。以下就是这款录屏软件试用版的基本录屏操作,其他录屏模式录制方法也差不多; 步骤1:从网页上获取软件安装链接,可以根据个人需求将软件自定义安装在其他磁盘里;然后,点击【立即安装】。 备注:软件分Windows和Mac版本,会根据电脑适配相对应的安装链接。不推荐将软件安装在C盘。 步骤2:在软件主界面点击顶部【三】图标,并在列表中点击【设置】;如下图所示,在【设置】中可以调整录制视频画面的清晰度与帧率。还可以调整视频输出的位置、格式、鼠标、音频等参数。 步骤3:在【视频录制】模式界面,调整【录制区域】、【扬声器】、【麦克风】以及【摄像头】,如果没有录制声源以及人像的需求可以将它们全部关闭。然后,点击【REC】即可录屏。 备注:电脑如何录屏幕视频和声音?可以根据自身录制需求在【录屏区域】选择全屏录制或者区域录制;如果你想录制电脑内部声源,可以将【扬声器】开启,再者确认【麦克风】是否是关闭状态;如果您想录制电脑外界声音,可以将【麦克风】开启,并检查【扬声器】是否是关闭状态。 步骤4:停止录屏后,将会自动弹出【预览窗口】。在【预览窗口】查看视频无误后,可以点击【完成】。软件将会为您自动保存在【历史记录】中,不用担心录屏内容会丢失;此外,如果您有视频后期处理的需求,可以在【历史记录】上使用【媒体工具】对视频进行剪辑、合并、压缩、转换等后期处理。 以上就是小编给大家分享三个简单操作的电脑录屏方法啦!电脑录屏怎么录,上述三个电脑录屏方法都能够满足大家对日常录屏需求。如果对视频的清晰度有需求的话,推荐使用这款录屏软件,该软件支持录制无损的视频画质。

UEFI 基础教程 (零) - 目录

GitHub 主页 UEFI 基础教程 (一) — 搭建UEFI开发环境 UEFI 基础教程 (二) — 运行第一个APP HelloWorld UEFI 基础教程 (三) — 运行第一个PEI Driver UEFI 基础教程 (四) — 运行第一个DXE Driver UEFI 基础教程 (五) — PPI 初探 UEFI 基础教程 (六) — PROTOCOL 简单使用 UEFI 基础教程 (七) — HOB 简单使用 UEFI 基础教程 (八) — PCD 简单使用 UEFI 基础教程 (九) — EVENT 简单使用 UEFI 基础教程 (十) — FileIO 简单使用 UEFI 基础教程 (十一) — Shell下读取SMBIOS信息 UEFI 基础教程 (十二) — 使用标准C库

win10卸载AVG AntiVirus Free

打开电脑发现多了一个名为“AVG AntiVirus Free”的软件 上网一查发现是个杀毒软件,但是我电脑上本地就有一个而且够用 准备卸载,但是网上说的各种!各种方法,目前都没有一个可以卸载的 下面的方法,最起码我是可以卸载,而且不用安装任何软件 1.打开AVG AntiVirus Free,找到设置,然后点击【故障排除】,把自我防护给关闭了,然后再把设置里所有能关的都关了 2.打开控制面板,选择程序,卸载程序,然后找到AVG点击卸载 3.然后会弹出来一个框,一定要看准卸载的字样,然后卸载,下图就是已经卸载完毕了,但是本地还有一些残留文件,重启电脑之后本地就没有这些残留文件了

基于ssm的社团报名管理系统开题答辩问题与答案

在社团报名管理系统的开题答辩中,可能会涉及到以下几个方面的问题与答案: 系统背景与目标:为什么要开发这个系统,它的目标是什么?系统功能与设计:系统实现了哪些功能,如何设计这些功能?系统架构与技术:系统采用了哪些技术和框架,它们之间是如何协作的?系统实现细节:在具体实现过程中,遇到了哪些困难或挑战,是如何解决的?系统测试与调试:系统经过了哪些测试,发现了哪些问题,是如何调试的?系统总结与展望:对于系统的设计和实现,有哪些值得称道的地方,还有哪些可以改进的地方?

java如何使用正则表达式替换所有前端标签

Java使用正则表达式替换所有前端标签的方法如下: 首先,要使用正则表达式替换字符串,需要使用Java的java.util.regex包。 然后,需要创建一个Pattern对象,该对象表示要匹配的正则表达式模式。例如,如果要匹配所有前端标签(如<div>、<p>等),可以使用以下代码创建Pattern对象: Pattern p= Pattern.compile("<[^>]+>"); 接下来,可以使用Matcher类的replaceAll方法来替换所有匹配的前端标签。例如,如果要将所有前端标签替换为空字符串,可以使用以下代码: String input= "这是一个<div>测试字符串</div>,其中包含了多个前端标签。"; Matcher m = p.matcher(input); String output = m.replaceAll(""); 最后,输出的output字符串就是所有前端标签都被替换为空字符串的字符串了。 注意:如果想要替换成其他的字符串,可以将空字符串替换为所需的字符串即可。 希望这些信息能帮到你!

Leaflet使用wfs的示例

Leaflet是一个开源的Web地图库,可以用来在网站上显示地图。可以使用Leaflet的功能扩展"Leaflet.WFS"来在Leaflet地图中使用WFS(Web Feature Service)功能。 以下是使用Leaflet和Leaflet.WFS显示WFS图层的示例代码: // 创建Leaflet地图 var map = L.map('map').setView([51.505, -0.09], 13); // 加载瓦片图层 L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { attribution: 'Map data © <a href="https://openstreetmap.org">OpenStreetMap</a> contributors', maxZoom: 18 }).addTo(map); // 加载WFS图层 var wfsLayer = L.wfs("http://example.com/geoserver/wfs", { typename: "my_layer", version: "1.1.0", maxFeatures: 1000, crs: L.CRS.EPSG4326, geometryField: "geom", style: { color: "#ff7800", weight: 1, fillColor: "#ff7800", fillOpacity: 0.5 } }); wfsLayer.addTo(map); 在上面的代码中,我们首先使用L.map函数创建了一个Leaflet地图,然后使用L.tileLayer函数加载瓦片图层。接着使用L.wfs函数加载WFS图层,并指定WFS服务的URL、图层名称、版本、最大要素数、坐标参考系以及几何字段。最后,使用addTo函数将WFS图层添加到地图上。

zookeeper看这一篇就够了

第一章 zookeeper简介 第1节 zookeeper的由来 1 2 3 4 1. zookeeper最早起源于雅虎研究院的一个研究小组 2. 在雅虎内部很多大型系统基本都需要依赖一个类似的系统来进行分布式协调,并且这个系统还有单点问题 3. 雅虎的开发人员就试图开发一个通用的无单点问题的分布式协调框架,以便让开发人员将精力集中在处理业务逻辑上,这是最早zookeeper的原型 4. 后来捐献给了apache成为了apache的顶级项目 第2节 zookeeper名字的由来 1 雅虎研究院很多项目都以动物命名,而zookeeper做为各个项目之间的协调,就起了一个动物管理员的名字(zookeeper),简称zk 第3节 zk应用场景 1 2 3 4 5 1. 注册中心(Dubbo框架介绍) 2. 配置中心 3. 分布式锁(本文不做讲解) ... 第二章 zk的下载 1 2 3 这里以3.4.9版本为例,下面是下载地址,下载zookeeper-3.4.9.tar.gz压缩包(在Windows/Linux/Mac下通用) https://archive.apache.org/dist/zookeeper/zookeeper-3.4.9/ 第三章 zk的单点安装 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 1.

告诉我怎么解决这个问题:输入:sudo ./yolov5 -s ../last.wts ../best.engine s 报错:sudo: ./yolov5:找不到命令...

这个问题的原因可能是你没有安装 yolov5,或者是你没有指定正确的安装路径。 要解决这个问题,你需要检查 yolov5 是否已经正确安装,并确保你在执行命令时使用了正确的路径。 如果 yolov5 还没有安装,你需要按照 yolov5 的安装说明进行安装。 另外,在执行命令时,如果遇到 “找不到命令” 的错误,还可能是因为系统没有找到相应的可执行文件。在这种情况下,你可以尝试使用绝对路径来指定可执行文件的位置,例如 “/usr/local/yolov5/yolov5”。

STM32+HAL库驱动GPIO点亮LED

【GPIO理论部分可参考:【小趴菜STM32开发笔记1】---- GPIO】 目录 1 新建cubemx工程 2 配置系统时钟 3 配置LED引脚 4 生成代码 5 进入Keil,补充代码 5.1 点亮LED 5.2 闪烁灯 【keil小技巧】----自动复位 1 新建cubemx工程 ​ ​ 2 配置系统时钟 ​ 3 配置LED引脚 通过查阅开发板原理图,可知PA5引脚控制LED,cubemx将PA5配置为GPIO_Output模式 ​ ​ 4 生成代码 ​ ​ ​ 5 进入Keil,补充代码 5.1 点亮LED int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); /* USER CODE BEGIN 2 */ HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_SET); //拉高PA5管脚,灯亮 /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ } 实验效果:

STM32+HAL库调试printf串口打印

目录 1 新建cubemx工程 2 配置系统时钟 3 配置串口引脚 4 生成keil工程 5 补充代码 5.1 重定向printf 5.2 main函数 6 编译烧录 7 实验现象 1 新建cubemx工程 选择对应芯片 2 配置系统时钟 主频为64MHz 对应给到usart2的时钟也为64MHz 3 配置串口引脚 查阅原理图,可知usart2引脚连接了USB串口 4 生成keil工程 5 补充代码 5.1 重定向printf 首先介绍一下printf和scanf: printf 函数根据 format 字符串给出的格式打印输出到 stdout(标准输出)中,当然,printf 函数是不会一个字符一个字符去输出,它会调用更底层的 I/O 函数:fputc去逐个字符打印。 printf 和fputc都定义在 <stdio.h> 头文件中: //fputc函数原型 int fputc(int ch, FILE *stream); //printf函数原型 int printf(const char *format, ...); fputc 函数写入字符 ch 到给定输出流 stream,printf函数在调用该函数时,会向stream参数传入stdout从而打印数据到标准输出。 那么,要实现printf打印到串口就变得非常简单了,只需要重新定义fputc函数,在fputc的函数中将数据通过串口发送,称之为:fputc重定向或者printf重定向。同理,只需要重新定义fgetc函数,在scanf的函数中将数据通过串口接收,称之为:scanf重定向。 在usart.c文件中添加重定向函数(且记得在usart.h中添加头文件和声明): #include "stdio.h" //重定向scanf int fgetc(FILE *f) { uint8_t ch=0; HAL_UART_Receive(&huart2,&ch,1,0xffff); return ch; } //重定向printf int fputc(int ch,FILE *f) { uint8_t temp[1]={ch}; HAL_UART_Transmit(&huart2,temp,1,2); return ch; } 5.

STM32+HAL库使用ADC轮询模式采集音频信号

ADC模块:咪头声音采集模块 ADC轮询模式 缺点:占用CPU的使用率 软件开始ADC转换后,一直等到转换完成后,才向后执行,这个代码在初始化ADC之后执行一次校准(不执行这一步也可以,但精度可能会低一些);然后就可以使用ADC轮询转换了,只需要三步:启动转换、等待转换完成、读取转换数据,即可完成一次ADC转换。 1 开启外部高速时钟 2 配置时钟树 3 USART配置 4 ADC配置 5 代码配置 //串口重定向 #include "stdio.h" int fgetc(FILE *f) { uint8_t ch=0; HAL_UART_Receive(&huart2,&ch,1,0xffff); return ch; } int fputc(int ch,FILE *f) { uint8_t temp[1]={ch}; HAL_UART_Transmit(&huart2,temp,1,2); return ch; } /* USER CODE BEGIN Header */ /** ****************************************************************************** * @file : main.c * @brief : Main program body ****************************************************************************** * @attention * * Copyright (c) 2022 STMicroelectronics. * All rights reserved. * * This software is licensed under terms that can be found in the LICENSE file * in the root directory of this software component.

shell获取函数返回值

1.使用return返回结果 #/bin/bash function test(){ return "123" } test echo $? 注意: 1.必须使用$?获取函数返回值,如果修改为 tmp=`test` 则无法获取返回值 2.返回值必须为整型,如果修改为浮点数或者字符串,则会报错numeric argument required 2.使用echo 通过输出到标准输出返回,因为子进程会继承父进程的标准输出,因此,子进程的输出也就直接反应到父进程,而且返回值不受只能是整型的限制 #/bin/bash function test(){ echo "123.12" } kk=$(test) echo $kk

在Altium Designer 2022中创建一个完整的PCB电子设计工程项目(超详细)

【Altium Designer】学习笔记第二篇——创建一个完整的PCB电子设计工程项目 一、概述 1、一个完整的PCB设计文件共包含五部分:原件库文件,原理库文件(包含网络表文件),PCB库文件,PCB文件,生产文件。如下图所示: 2、打开一个工程时,点击项目中后缀为PrjPcb的文件,打开其他的文件,无法打开整个项目工程,会出现一个Free Document的游离工程。 在此情况下,无法对工程进行修改。 二、创建步骤 1、首先,双击桌面图标,打开Altium Designer 2022软件(注:如果不会安装或没有安装包,请看上一篇文章) 2、打开软件后,在左上方依次点击“文件”-“新的...”-“项目”。 3、在弹出的对话框中,修改项目名称和保存路径,点击“create”即可。 4、刚创建的项目是这样的,项目下是空白的。 5、依次添加四个关键文件:第一个:原理图库。 依次点击“文件”-“新的...”-“库”-“原理图库” 注:如果创建文件后,找不到项目文件了,那就在最下方找到“Projects”单击即可,下面几个也是这样。 6、第二个:原理图 依次点击“文件”-“新的...”-“原理图” 7、第三个:PCB元件库 依次点击“文件”-“新的...”-“库”-“PCB元件库” 8、第四个:PCB 依次点击“文件”-“新的...”-“PCB” 9、然后依次保存,右击要保存的文件,点击保存,弹出的对话框的地址默认为项目文件下,无需更改,只需要更改要保存文件的名称即可。 10、同样的步骤,依次保存,四个新创建的文件即可。(比如我,全保存成了demo2) 11、此时,工程应该后面还是红色的文件形式,即为未保存,同理,右击工程,点击保存即可。 12、至此,一个简单而完整的PCB电子设计工程创建完毕。

c++条件断点设置string比较

无效情况说明 c++不支持条件断点直接判断std::string为某值:str=="123"。 但是支持一些符号的调用: “Visual Studio中的添加断点功能中支持的字符串函数有:strlen, wcslen, strnlen, wcsnlen, strcmp, wcscmp, _stricmp, _wcsicmp, strncmp, wcsncmp, _strnicmp, _wcsnicmp, strchr, wcschr, strstr, wcsstr.” 但是,也不能用这样的条件:strcmp(str.c_str(), "123") == 0。会提示函数调用(c_str())会有副作用,所以不计算值。但是str.size() == 5这样的条件可以,难道因为size()直接返回值吗? 有效方法 调查了一下,只能通过访问成员的方式进行比较。可以通过watch窗口查看string有什么成员: 输入“str,!”,逐级查看: 在条件断点中输入以下一个条件(按需领取): (newString._Mypair._Myval2._Myres < 16) ? strcmp(newString._Mypair._Myval2._Bx._Buf, "short") == 0 : false (newString._Mypair._Myval2._Myres < 16) ? false : strcmp(newString._Mypair._Myval2._Bx._Ptr, "My_test_str_value_longer_than_16_chars") == 0 (newString._Mypair._Myval2._Myres < 16) ? strcmp(newString._Mypair._Myval2._Bx._Buf, "My_test_string") == 0 : strcmp(newString._Mypair._Myval2._Bx._Ptr, "My_test_string") == 0 (newString._Mypair._Myval2._Myres < 16) ? wcscmp(newString._Mypair._Myval2._Bx._Buf, L"short") == 0 : false (newString.

(day2)自学java综合练习

目录 1.卖飞机票 2.找质数 3.开发验证码 4.数组元素的复制 5.评委打分 6.数字加密 7.数字解密 8.抢红包 9.模拟双色球 10.二维数组 1.卖飞机票 机票价格按照淡季旺季、头等舱和经济舱收费、输入机票原价、月份和头等舱或经济舱。按照如下规则计算机票价格:旺季(5-10月)头等舱9折,经济舱8.5折,淡季(11月到来年4月)头等舱7折,经济舱6.5折。 import java.util.Scanner; public class Test1 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.print("请输入机票原价:"); int ticket = sc.nextInt(); System.out.print("请输入机票月份(示例:1):"); int month = sc.nextInt(); System.out.print("头等舱请输入:1,经济舱请输入:2 :"); int planeSeat = sc.nextInt(); if (month >= 5 && month <= 10) { if (planeSeat == 1) { ticket = (int) (ticket * 0.9); } else if (planeSeat == 2) { ticket = (int) (ticket * 0.

Centos7 查看自启动列表systemctl list-unit-files以及设置服务自启动

CentOS7查看自启列表命令 [root@localhost mysql-rpm]# systemctl list-unit-files # 执行结果:"enabled:自启动","disabled:未自启动" UNIT FILE STATE proc-sys-fs-binfmt_misc.automount static dev-hugepages.mount static dev-mqueue.mount static proc-sys-fs-binfmt_misc.mount static sys-fs-fuse-connections.mount static sys-kernel-config.mount static sys-kernel-debug.mount static tmp.mount disabled brandbot.path disabled systemd-ask-password-console.path static systemd-ask-password-plymouth.path static systemd-ask-password-wall.path static session-1.scope static session-2.scope static arp-ethers.service disabled auditd.service enabled autovt@.service enabled blk-availability.service disabled brandbot.service static console-getty.service disabled console-shell.service disabled container-getty@.service static cpupower.service disabled crond.service enabled dbus-org.freedesktop.hostname1.service static dbus-org.freedesktop.import1.service static dbus-org.freedesktop.locale1.service static dbus-org.freedesktop.login1.service static dbus-org.freedesktop.machine1.service static dbus-org.freedesktop.NetworkManager.service enabled dbus-org.

node nrm切换镜像源

1、nrm 安装 npm install nrm -g 2、查看可用的镜像源 nrm ls 查看当前使用的镜像源:nrm current 3、切换镜像源地址 nrm use 镜像源名称 ,如 nrm use taobao 4、增加镜像源 nrm add 镜像源名称 镜像源地址 ,如 nrm add taobao https://registry.npmmirror.com/ 5、删除镜像源 nrm del 镜像源名称 ,如 nrm del taobao 6、镜像源测速 nrm test 镜像源名称 ,如 nrm test taobao ## npm config - 查看当前npm的相关配置 npm config list 或者 npm config ls - 可以通过参数设置方式改变镜像使用地址 () npm install --registry=https://registry.npm.taobao.org - 设置淘宝镜像 npm config set registry https://registry.

PRINTF函数通过UART串口输出显示

printf函数是一个格式化输出函数,可以通过输出流(如文件、屏幕或串口)将格式化的输出发送到指定的目标。在此情况下,你可以使用printf函数通过串口输出信息,方法是指定串口为输出流,然后调用printf函数。 例如,在C语言中,可以使用以下代码将信息输出到串口: #include <stdio.h> int main(void) { // 打开串口 FILE *serial_port = fopen("/dev/ttyS0", "w"); // 将串口作为输出流 setvbuf(serial_port, NULL, _IONBF, 0); // 使用printf函数输出信息到串口 printf("Hello, world!\n", serial_port); // 关闭串口 fclose(serial_port); return 0; } 希望这能帮到你!

2022LOL微博杯模糊问题,1080p高清看微博杯the shy比赛直播

2022LOL微博杯的直播模糊,看着不爽 观看方法 1.打开下面在线播放m3u8文件的地址 http://www.m3u8.zone/ 如图 2.输入播放地址 微博杯的播放地址: (1月三号的地址 如果失效往下看解决方法) https://plwb01.live.weibo.com/alicdn/4853543833438462.m3u8 将上面地址输入下面输入框点播放按钮 如图可以播放了 模糊原因 微博主动限制了网页推流 解决方法 解除网页推流限制 1.右键网页点审查或检查打开控制台 点击播放 并找到请求地址 我这是chrome浏览器,点击控制台的网络(internet),然后找到.m3u8的后缀请求地址 播放 https://plwb01.live.weibo.com/alicdn/4853543833438462_wb540avc.m3u8 拿到地址后 去掉 ‘_wb540avc’ 或 ‘_wb480avc’ 等字符: https://plwb01.live.weibo.com/alicdn/4853543833438462.m3u8 用上面的在线播放工具:http://www.m3u8.zone/ 或其他播放器播放这个链接地址

S32K144—从0到1一个MBD模型的诞生

一个MBD模型的诞生,分为以下几步: 1、连接好硬件S32K144 EVB 2、选择一个合适的工作空间,新建一个simulink模型,保存 3、在模型中拖入模块: MBD_S32K1xx_Config_Information Digital_Input_ISR Periodic_Interrupt_Timer 两个 Function-CallSubsystem 4、配置模块的参数 MBD_S32K1xx_Config_Information Digital_Input_ISR Periodic_Interrupt_Timer 5、构建中断调用函数 一个按键控制 GPI ISR 控制红色LED 一个PIT用作定时器,控制绿色LED 2Hz闪烁 6、设置步长0.001s 7、自动生成代码并下载运行

Redis事务P0级事故,超卖100瓶茅台,项目组慌的一批!

「 关注“石杉的架构笔记”,大厂架构经验倾囊相授 」 文章来源:【公众号:悟空聊架构】 一、前言 最近项目的生产环境遇到一个奇怪的问题: 现象:每天早上客服人员在后台创建客服事件时,都会创建失败。当我们重启这个微服务后,后台就可以正常创建了客服事件了。到第二天早上又会创建失败,又得重启这个微服务才行。 初步排查:创建一个客服事件时,会用到 Redis 的递增操作来生成一个唯一的分布式 ID 作为事件 id。代码如下所示: return redisTemplate.opsForValue().increment("count", 1); 而恰巧每天早上这个递增操作都会返回 null,进而导致后面的一系列逻辑出错,保存客服事件失败。当重启微服务后,这个递增操作又正常了。 那么排查的方向就是 Redis 的操作为什么会返回 null 了,以及为什么重启就又恢复正常了。 二、排查 根据上面的信息,我们先来看看 Redis 的自增操作在什么情况下会返回 null。 2.1 推测一 根据重启后就恢复正常,我们推测晚上执行了大量的 job,大量 Redis 连接未释放,当早上再来执行 Redis 操作时,执行失败。重启后,连接自动释放了。 但是其他有使用到 Redis 的业务功能又是正常的,所以推测一的方向有问题,排除。 2.2 推测二 可能是 Redis 事务造成的问题。这个推测的依据是根据下面的代码来排查的。 直接看 redisTemplate 递增的方法 increment,如下所示: 官方注释已经说明什么情况下会返回 null: 当在 pipeline(管道)中使用这个 increment 方法时会返回 null。 当在 transaction(事务)中使用这个 increment 方法时会返回 null。 事务提供了一种将多个命令打包,然后一次性、有序地执行机制. 多个命令会被入列到事务队列中,然后按先进先出(FIFO)的顺序执行。 事务在执行过程中不会被中断,当事务队列中的所有命令都被执行完毕之后,事务才会结束。(内容来自 Redis 设计与实现) 继续看代码,发现在操作 Redis 的 ServiceImpl 实现类的上面添加了一个 @Transactional 注解,推测是不是这个注解影响了 Redis 的操作结果。

推荐30个以上比较好的意图识别github源码?

好的,这里列出 30 个相对比较优秀的意图识别 GitHub 源码: DeepPavlovRasaSnipsspaCyOpenAI GPTOpenAI DialogFlowChatterBotBotpressAmazon LexMicrosoft Bot FrameworkRecast.AIApi.aiBotkitNLTKCoreNLPPocketSphinxWitParsey McParsefaceLUISAlmondJarvisMUTTBixbyIBM Watson AssistantCorticaHaptikMycroftSophiaKukiLyrebird 希望这些源码能对你有帮助!

【ROS】—— ROS通信机制——服务通信(三)

文章目录 前言1. 服务通信理论模型2. 服务通信自定义srv2.1 定义srv文件2.2 编辑配置文件2.3 编译 3. 服务通信自定义srv调用(C++)3.1 vscode配置3.2 服务端3.3 客户端3.4 配置 CMakeLists.txt 4. 服务通信自定义srv调用(python)4.1 vscode配置4.2 服务端4.3 客户端4.4 配置 CMakeLists.txt 前言 📢本系列将依托赵虚左老师的ROS课程,写下自己的一些心得与笔记。 📢课程链接:https://www.bilibili.com/video/BV1Ci4y1L7ZZ 📢讲义链接:http://www.autolabor.com.cn/book/ROSTutorials/index.html 📢 文章可能存在疏漏的地方,恳请大家指出。 1. 服务通信理论模型 服务通信也是ROS中一种极其常用的通信模式,服务通信是基于请求响应模式的,是一种应答机制。也即: 一个节点A向另一个节点B发送请求,B接收处理请求并产生响应结果返回给A。服务通信更适用于对时时性有要求、具有一定逻辑处理的应用场景。 概念 以请求响应的方式实现不同节点之间数据交互的通信模式。 作用 用于偶然的、对时时性有要求、有一定逻辑处理需求的数据传输场景。 服务通信较之于话题通信更简单些,理论模型如下图所示,该模型中涉及到三个角色: ROS master(管理者)Server(服务端)Client(客户端) ROS Master 负责保管 Server 和 Client 注册的信息,并匹配话题相同的 Server 与 Client ,帮助 Server 与 Client 建立连接,连接建立后,Client 发送请求信息,Server 返回响应信息。 整个流程由以下步骤实现: 0.Server注册 Server 启动后,会通过RPC在 ROS Master 中注册自身信息,其中包含提供的服务的名称。ROS Master 会将节点的注册信息加入到注册表中。 1.Client注册 Client 启动后,也会通过RPC在 ROS Master 中注册自身信息,包含需要请求的服务的名称。ROS Master 会将节点的注册信息加入到注册表中。

DIY NAS服务器之OMV 5.6入坑指南(四) -安装docker和Portainer

系列文章目录 DIY NAS服务器之OMV 5.6入坑指南(一)-openmediavalut 5.6安装 DIY NAS服务器之OMV 5.6入坑指南(二)- 安装omv-extras插件 DIY NAS服务器之OMV 5.6入坑指南(三)- 切换系统源​​​​​​​ ​​​​​​​ 目录 系列文章目录 前言 一、安装docker 二、安装Portainer​​​​​​​ 前言 本节内容为openmediavalut安装docker和Portainer 一、安装docker 在社区插件中安装docker Debian 10/OMV 5.x 默认使用iptables-nft,Docker 需要使用 iptables-legacy,可在 iptables 菜单手动切换 如果安装出现如下错误,则需设置一下DNS: DNS设置 为如下: nameserver 114.114.114.114 nameserver 8.8.8.8 安装Docker完成后,修改一下docker镜像服务器为国内的: 国内的 Docker 镜像服务器 网易云 https://hub-mirror.c.163.com/百度云 https://mirror.baidubce.comDaoCloud http://f1361db2.m.daocloud.io阿里云 https://ustc-edu-cn.mirror.aliyuncs.comGithub https://ghcr.io Docker 设置国内镜像服务器 第一步 创建 docker 配置文件目录 sudo mkdir /etc/docker 第二步 创建 daemon.json 配置文件 sudo touch /etc/docker/daemon.json 第三步 编辑配置文件 sudo nano /etc/docker/daemon.json 在编辑器中粘贴以下内容:

Windows技能(二):有效清理C盘垃圾的一些使用技巧 | C盘垃圾爆满

前言 C盘几乎爆满,让人不胜其烦,某管家清除垃圾,几乎就是个摆设!自己动手,丰衣足食! 一、C盘垃圾清理 1.1、关闭休眠的功能,至少释放10G+ 快捷键Win+R,输入命令cmd,打开cmd窗口。 关闭系统休眠,删除C盘 hiberfil.sys(休眠文件),该命令可以大大减少C盘的占用。 powercfg -h off 如果你想打开休眠功能: powercfg -h on 小节 仅此一招,立刻让C盘释放10G+的空间:powercfg - h off 尾言 C盘的清理工作,还有很多其他小技能,这些技能都是某管家不能触及的地方,因时间关系,后期慢慢更新……

k8s占用的端口号,使用什么linux命令可以查到

k8s 使用的端口号有很多,主要包括: 6443:kube-apiserver 的通信端口。 2379:etcd 的 client 端口。 2380:etcd 的 peer 端口。 10250:kubelet 的安全端口,用于与 kube-apiserver 通信。 10251:kube-controller-manager 的安全端口,用于与 kube-apiserver 通信。 10252:kube-scheduler 的安全端口,用于与 kube-apiserver 通信。 使用 Linux 命令 netstat 可以查看正在使用的端口。例如,你可以使用命令 netstat -tnlp 查看所有打开的 TCP 端口。 在 k8s 中,你还可以使用命令 kubectl get services 查看集群中所有服务的端口信息。

怎么用搜索命令或者lsof命令查看k8s占用的端口号

可以使用以下命令来查看 k8s 占用的端口号: 使用 kubectl 命令查看: kubectlget svc --all-namespaces 这个命令会列出所有命名空间中的服务,包括对应的端口号。 使用 lsof 命令查看: lsof -i -P -n| grep kube 这个命令会列出所有和 kube 相关的进程使用的端口号。 注意,这两个命令都需要在有 kubectl 或者 lsof 命令的环境中使用。

k8s占用的端口号,使用netstat命令查不到

k8s使用的端口号可能会有很多,因为它是一个容器编排系统,它可以管理和运行大量的容器。这些容器可能会运行在不同的主机上,并且可能使用不同的端口。 如果你想要查看k8s使用的端口号,你可以使用kubectl命令行工具,使用以下命令查看集群中所有的服务: kubectlget svc --all-namespaces 这将会列出集群中所有的服务以及它们使用的端口号。 另外,k8s还使用一些特定的端口号来进行内部通信,例如: 6443:kube-apiserver使用的端口号,用于集群内部的API服务。10250:kubelet使用的端口号,用于与kube-apiserver通信。10251:kube-scheduler使用的端口号,用于与kube-apiserver通信。10252:kube-controller-manager使用的端口号,用于与kube-apiserver通信。 这些端口号可能不会在netstat命令的输出中出现,因为它们是k8s内部使用的端口,不对外暴露。如果你想要查看这些端口的状态,可以使用lsof命令或者ss命令。

Linux中常用的shell命令

linux命令分内部命令和外部命令,外部是由第三方独立的程序提供的,比如vim,而内部命令就是由sell提供,比如常用的cd、mkdir、pwd等。 一、内部命令 查看及切换目录 cd 跳转到指定目录 pwd 查看当前目录 ls 当前目录下文件列表 创建目录和文件 touch 创建文件,更新文件时间 mkdir 创建目录 tree 命令可以以树状图列出文件目录结构 复制、删除、移动目录和伪文件 cp 即拷贝文件和目录rm 删除文件或目录(删除后不可恢复)mv 移动目录或文件,也可以给 文件或目录重命名 查找目录和文件 which 命令|程序名 which -a 命令|程序名 eg. which ls 、which cd find [查找范围] [查找条件表达式] 采用递归的方式,根据目标的名称、类型、大小等不同属性进行精细查找 二、快捷键辅助操作 Tab键:可以提供选项补全命令 Ctrl+c:停止进程 Ctrl+U:删除光标之前的内容 Ctrl+K:删除光标之后的内容 Ctrl+L:清空你的终端屏幕 Ctrl + A:该快捷键将移动光标到所在行首 Ctrl + E:移动光标到行尾 Ctrl + Y:粘贴使用 Ctrl+U 和 Ctrl+K 快捷键擦除的文本 快速获取命令帮助: help cd %查看内部命令的帮助man who %查看man手则页 /word可搜索word字符串vim --help %查看相关软件的外部命令 常用命令积累: make 根据当前目录下的Makefile文件进行文件编译;make clean 清除当前路径下的编译生成文件;ls 列出当前目录下的文件mkdir 创建新的目录clear 清除命令窗口;rm <name> 清除某个文件touch <name> 创建新文件(也可用于更新文件最新状态)vi(vim) <name> 使用vim编译器编写文件cat <name> 查看某个文件gedit <name> 使用gedit编译器编写文件(改写系统文件)ps 默认显示当前用户通过终端启动的应用程序which 命令可以查看执行命令所在位置su 切换root用户 用exit退出 总结: 1、Linux命令总结在不断更新中···

Kuboard安装

1.参考文档 https://kuboard.cn/install/install-dashboard.html#%E5%AE%89%E8%A3%85 这里使用Kuboard V2 2.安装命令 kubectl apply -f https://kuboard.cn/install-script/kuboard.yaml kubectl apply -f https://addons.kuboard.cn/metrics-server/0.3.7/metrics-server.yaml 查看 Kuboard运行状态 kubectl get pods -l k8s.kuboard.cn/name=kuboard -n kube-system 效果: 3.获取token 执行命令: echo $(kubectl -n kube-system get secret $(kubectl -n kube-system get secret | grep ^kuboard-user | awk '{print $1}') -o go-template='{{.data.token}}' | base64 -d) 4.访问Kuboard Kuboard Service 使用了 NodePort 的方式暴露服务,NodePort 为 32567;您可以按如下方式访问 Kuboard。 http://任意一个Worker节点的IP地址:32567/ 效果:

NodeJS学习

认识node node是JS运行在服务器端一种环境,可以让JS实现后端开发 1.node.js和JS对比 js JS客户端技术,运行于浏览器中 有多种解释器可以使用,每种浏览器的解释器可能不同 存在代码兼容性问题 支持ES对象,自定义对象,BOM,DOM对象 主要用于网页DOM元素的操作,实现用户的交互效果 node 服务器技术,与PHP,JSP等是类似的技术 只有一种解释器,只能运行与基于V8引擎改进而来的与运行环境 只有一种解释器,不存在兼容性问题 支持ES对象,自定义对象,node.js扩展对象 主要用于实现服务器端运行逻辑,如文件系统操作,数据库访问等 2.Node安装与基本命令 1. node安装需要去官网下载Node.js (nodejs.org),目前最新版本是18.12.1,版本并不兼容一定看好版本号 2. 安装完可以cmd命令行输入 node -v 如果有版本号,证明安装成功,我的是16.15.1版本的 3. node有两种模式:一种是交互模式,一种是脚本模式 node回车进入交互模式 脚本模式: node 然后拖拽写好的文件,比如下面,然后回车执行写好的js文件 4. 输入两次ctrl + c 或者一次 ctrl + d 退出交互模式 3.宿主环境 宿主环境就是JS运行时的环境,有浏览器,和node,宿主对象在不同环境下提供不同的对象 4.全局对象global和window 1.在任意作用域下都可以访问的对象称为全局对象,node环境下是global对象,浏览器环境下是window对象 2.在全局作用于下直接声明的变量,会自动添加到全局对象里面,称为全局对象的属性 5.console控制台(node环境下也可以使用) 1. console.log(1); // 输出日志 2. console.info(2) // 输出消息 3. console.warn(3) // 输出警告 黄色三角 4. console.error(4) // 输出错误 红色叉 5. console.time()/console.timeEnd() 记录执行时间 6.Buffer 对象 1. 缓冲区,是内存中的一块区域,用于临时存储数据