win10系统下载安装wsl2

1.查看电脑版本 在cmd里键入“winver”,必须是Windows 10 版本 2004 及更高版本(内部版本 19041 及更高版本)及win11 2.启用所需Windows功能 控制面板--程序--程序和功能--启用或者关闭Windows功能--勾选虚拟机平台和适用于Linux的Windows子系统--重启电脑 tips: 若无法开启适用于linux的windows的子系统和虚拟机平台,请参考链接:win10无法开启适用于linux的windows的子系统和虚拟机平台-CSDN博客 3.启用虚拟功能 右键开始--以管理员身份打开 PowerShell 并运行: dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart 运行完成后需重启电脑以完成安装 4.下载 Linux 内核更新包 下载地址: https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi 直接下载安装即可 双击安装包 5.设置默认WSL版本 在PowerShell或者cmd使用下面的命令设置默认版本 (我设置的是版本wsl2) wsl --set-default-version 2 6.安装Linux发行版 在微软应用商店中搜索并下载Ubuntu20.04 在power shell里使用wsl -l -v命令查看安装版本是否正确(VERSION为2) 7.更改安装包位置 使用微软商店下载的应用安装包会默认保存在C:\Program Files\WindowsApps目录下。 如果发现没有权限打开C:\Program Files\WindowsApps文件夹 可以用PowerShell(管理员权限运行)的命令打开,输入代码: cd "C:\Program Files\WindowsApps" Ubuntu安装包默认保存在WindowsApps目录下的某个文件夹里。文件夹名称的开头应该类似于CanonicalGroupLimited。 寻找当前目录下以CanonicalGroupLimited开头的文件夹: dir CanonicalGroupLimited* 可能会有多个类似的文件夹,依次查看这些文件夹: dir CanonicalGroupLimited(不要回车执行) 然后按多次tab键,可以在这些类似的文件夹名之间切换。切换到你想要查看的文件夹,回车执行命令。如果文件夹里面有ubuntu<版本号>.exe文件,这就是我们要找的文件夹。 复制安装包和相关文件到想要的安装位置 cp <安装包所在的文件夹名>\* <你想要安装ubuntu文件夹的路径> cp .

Overloud TH-U Complete for Mac:演绎您的音乐世界

Overloud TH-U Complete for Mac是一款功能强大的吉他谱曲软件,可以让您在Mac电脑上轻松进行吉他模拟、录音和混音等操作,创作属于自己的音乐作品。 Overloud TH-U Complete for Mac提供了丰富的吉他模拟和音效库,涵盖了多种吉他放大器、箱体、效果器和预设等。通过简单的拖放操作,你就可以在音轨中添加自己喜欢的模拟器和效果器,并实时预览效果。同时,它还支持多轨录音和混音,让您能够更加灵活地处理音频数据和声效。 除了模拟和录制功能,Overloud TH-U Complete for Mac还提供了创新的Smart MIDI功能,让您能够在吉他演奏过程中,快速生成符合和声的MIDI音乐片段,便于在数字音乐工作站中编辑和改进。此外,这款软件还支持AAX、AU和VST插件格式,可以轻松集成到您的数字音乐工作站中,方便快捷。 Overloud TH-U Complete for Mac的界面设计简洁明了,操作起来非常直观。你可以根据自己的喜好进行主题和布局的选择,使得谱曲过程更加舒适。此外,它还支持导出高质量音频文件,支持多种常用格式。您能够轻松分享自己的音乐作品到社交媒体或在线音乐平台上。 总结来说,Overloud TH-U Complete for Mac是一款功能强大、操作简便的吉他谱曲工具,让您能够更加专注于音乐创作,为您的音乐世界增添无限灵感和可能性。无论您是独立创作者还是团队合作,Overloud TH-U Complete for Mac都能帮助您诠释您的音乐梦想,成为一名真正的音乐家。立即下载使用Overloud TH-U Complete for Mac,开启您的音乐之旅! 安装:Overloud TH-U Complete for Mac(吉他谱曲软件)v1.4.20版

C++源文件中使用EasyX图形库往屏幕上输出图片

#include<graphics.h>//引入EasyX图形库的头文件 IMAGE a;//声明了一个图片类型的变量 int main() { loadimage(&a, "res/bg.jpg");//往这个图片类型的变量中导入图片 initgraph(1400, 600);//创建一个绘图窗口 putimage(0, 0, &a);//将这个图片类型的变量中的图片打印到绘图窗口中 system("pause");//暂停程序,使绘图窗口和图片一直出现在屏幕上 return 0; }

python实现对森林生物量进行随机森林回归预测

使用随机森林回归预测森林生物量(python) 随机森林算法的基本思想是基于多颗决策树的集成学习过程,使用场景广泛,一般的分类回归问题都可以使用。我们以光学影像为例,来估测森林生物量。 建立回归关系需要满足的条件 1、线性关系:回归关系应该是线性的,即自变量和因变量之间的关系应该是线性的。 2、独立性:自变量之间应该是独立的,即自变量之间的相关性应该尽可能小,自变量之间不应该存在多重共线性。 3、正态性:残差应该是正态分布的,即残差应该符合正态分布的假设。 4、同方差性:残差的方差应该是恒定的,即残差的方差应该在自变量的不同取值下是相同的。 5、随机性:误差项应该是随机的,即误差项应该是不可预测的,不能被自变量解释。 使用传统机器学习方法估测森林生物量的过程 基本思想:由于遥感影像一般可以覆盖整个研究区,而地面调查工作一般不会对整个研究区进行展开,所以就可以利用遥感影像和地面调查数据建立回归关系,然后再利用所建立的这个关系对未进行地面调查的地方进行预测。 指标筛选:建立回归关系首先要满足指标变量和预测变量之间存在相关性。先从光学影像中提取指标变量,单波段或者波段组合运算啥的,可以参考相关论文来选。 指标提取:在同一张影像中提取的自变量之间难免存在共线性问题,但也不是不能减少其对模型的影响,例如:使用PCA对指标进行降维;对指标进行逐步回归或者相关性分析提取对生物量解释程度很高的几个变量作为自变量;在损失函数中添加惩罚项来降低模型复杂度,从而缓解指标共线性问题;使用树模型,例如典型的随机森林,由于随机森林在建立决策树过程是随机选取指标以及特征,这种随机性可以使得模型对于共线性较弱的特征更加敏感,从而避免了共线性的影响;随机森林模型在建立过程中是通过计算特征调用率,建立分裂树信息熵减少量等来判断特征对于预测指标的重要性,可以剔除一些重要性较低的指标从而提高模型的泛化能力。 建立随机森林回归 提取样地点对应指标变量的像元值作为自变量,样地点生物量作为因变量后就可以建立随机森林模型并对整个研究区生物量就行预测,具体实现过程如下: 数据准备 import pandas as pd import numpy as np from matplotlib import pyplot as plt from sklearn.ensemble import RandomForestRegressor from sklearn.model_selection import train_test_split from sklearn.metrics import mean_squared_error, r2_score from pyswarm import pso import rasterio # 读取Excel表格数据 data = pd.read_excel(r'D:\code\3s\redata.xlsx', sheet_name='Sheet3') y = data.iloc[:, 0].values # 生物量 X = data.iloc[:, 1:].values # 指标变量 # 分割数据集为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.

CUDA、cudNN 、CUDAToolKit三者关系

cudatoolkit和cuda有关系吗 CUDA 是 NVIDIA 推出的一种并行计算平台和编程模型,可以在 NVIDIA GPU 上运行 C/C++ 代码。 CUDA Toolkit 是 NVIDIA 提供的一套开发工具,它包含了用于开发 CUDA 应用程序所需的各种工具,如编译器、调试器和库。 因此,CUDA 和 CUDA Toolkit 是有关系的,CUDA 是并行计算平台和编程模型,而 CUDA Toolkit 是一套开发工具。 cuda cudnn cudatoolkit Cuda、Cudnn和Cudatoolkit是一些用于GPU编程和深度学习的工具和库。 Cuda是由NVIDIA开发的一个并行计算平台和编程模型,它允许开发人员使用C/C++等编程语言来利用GPU的并行计算能力。 Cudnn是NVIDIA提供的一个深度神经网络加速库,它包含了一系列高性能的基本函数和算法,用于加速深度学习任务的计算。它可以与Cuda一起使用,提供了针对深度学习任务的高效实现。 Cudatoolkit是NVIDIA提供的一个开发工具集,包含了一系列用于GPU编程的工具和库。其中包括了Cuda和Cudnn,还包括其他一些用于并行计算和高性能计算的库。Cudatoolkit的目的是为开发人员提供方便操作GPU的工具和库,避免他们需要重复编写底层功能。 在选择Cudatoolkit的版本时,需要考虑与所使用的驱动程序版本的兼容性。通常情况下,Cuda驱动是向下兼容的,即高版本的驱动可以兼容低版本的Cudatoolkit。根据具体的驱动版本,可以在相关文档或表格中查找兼容的Cudatoolkit版本。例如,如果驱动版本是525.116.04,可以选择Cudatoolkit版本小于等于12.0。 总结起来,Cuda、Cudnn和Cudatoolkit是用于GPU编程和深度学习的工具和库,它们可以帮助开发人员充分利用GPU的并行计算能力并加速深度学习任务的计算。在选择Cudatoolkit的版本时,需要考虑与所使用的驱动程序版本的兼容性。

算法刷题总结 (八) 前缀和

算法总结8 前缀和 一、前缀和的概念1.1、什么是前缀和?* 内置函数accumulate 1.2、常见类型1.2.1、求数组前i个数之和1.2.2、求数组的区间和 二、经典例题2.1、求数组前i个数之和525. 连续数组 2.2、求数组的区间和1109. 航班预订统计 - 差分303. 区域和检索 - 数组不可变643. 子数组最大平均数 I - (隐藏的前缀和)304. 二维区域和检索 - 矩阵不可变 - (二维区间)560. * 和为 K 的子数组 - 前缀和+哈希表974. * 和可被 K 整除的子数组 - (前缀和优化/哈希表优化) 2.3、求数组的所有子数组的区间和 - (*前缀和的前缀和)* 子数组的所有和910. 巫师的总力量和1508. 子数组和排序后的区间和 2.4、其他变体554. 砖墙1589. 所有排列中的最大和 三、练习2857. 统计距离为 k 的点对 参考 一、前缀和的概念 1.1、什么是前缀和? 前缀和,英文是 preSum。是面试中经常考到的题目,并且难度也不大,我们直接从题目入手开始讲解。 首先我们看看一道很经典的简单题 1480. 一维数组的动态和,在没接触过前缀和的时候,我们对这道题的解法,很可能采用双重循环: class Solution: def runningSum(self, nums: List[int]) -> List[int]: preSum = [] # 选取每一个索引,当做下一层循环的结尾 for i in range(len(nums)): # 用来记录总和 su_m = 0 # 从0开始到i求和 for j in range(i+1): su_m+=nums[j] # 添加到结果 preSum.

c语言中的for循环

#include <stdio.h> //for循环 /*for(表达式1;表达式2;表达式3) * { * //复合语句,循环体 * 语句块 * } * 执行顺序: * 先执行表达式1且执行一次,然后执行表达式2,如果表达式2成立则执行语句 * 块,当语句块执行完毕之后接着执行表达式3,然后执行表达式2,如果表达 * 式2成立,则继续执行语句块,一系列他,直到表达式2不成立循环结束。 */ int main() { int i; int sum=0; for (i=1;i<=100;i++) { sum += i; } printf("sum=%d\n",sum); return 0; }

【脚本语言】Shell Script - 终端打印指令

本文共计1559字,预计阅读时间6分钟 目录 终端打印 基础语法 有趣的拓展 在echo中使用转义序列 输出彩色文本 终端打印 终端是交互式工具,在终端中打印文本是绝大多数脚本中的基本任务。 基础语法 终端打印有两种方法输出文本,分别是 echo 和 printf (就是C/C++中的那个)。 在默认情况下,echo在每次调用时会添加一个换行符。 输出文本的方式也有很多种: 可以在字符串上加上双引号,例如 echo "Hello world!" 也可以直接输入文本,同样可以达到相同效果 echo Hello world! 另外还可以使用单引号 echo 'Hello world!' 但这三种打印方法都有一定局限性 使用不带引号的echo时,无法在文本中使用分号(;),因为分号在Bash Shell中被用作定界符。例如: echo Hello;world 这句话将在输出完"Hello"后结束,并查找名为world的指令并执行。 还有一种可用于终端打印的命令是printf(是的,就是C语言中的那个printf) printf "Hello world" 默认情况下,printf并不像echo命令那样会自动添加换行符,若需要则需手动添加。同时,Bash中的printf指令同C语言中一样,可以控制输出的格式(比如字符串的宽度、左右对齐方式等),比如下列脚本: #!/bin/bash #文件名: printf.sh printf "%-5s %-10s %-4s\n" No. Name Mark printf "%-5s %-10s %-4.2f\n" 1 Curry 92.32 printf "%-5s %-10s %-4.2f\n" 2 James 94.87 printf "%-5s %-10s %-4.2f\n" 3 Kevin 91.

黄金矿工(Java)

目录 1、十五个功能点 2、基本功能的实现 2、1 窗体绘制 2、2 图片载入和绘制 2、3 红线的绘制 2、4 创建金块/石块 2、5 双缓存技术 2、6 抓取判定 3、界面展示 1、十五个功能点 1、窗体绘制 2、钩爪往返旋转 3、物体批量绘制 4、双缓存解决闪动问题 5、点和矩形碰撞检测 6、多种类物体随机生成 7、物体堆叠检测 8、多种类抓取速度判定 9、积分设置 10、关卡设置 11、重新开始 12、单关卡倒计时 13、金块的快速拉取 14、石块爆破 15、商店购物 2、基本功能的实现 2、1 窗体绘制 创建一个Java项目,命名为The Gold Miner ,在项目下创建GameWin类。让GameWin类继承 JFrame类。这样才具有创建窗口,监听鼠标键盘事件的功能。 JFrame窗体是一个容器,它扩展了java.awt.Frame类,是Swing程序中各个组件的载体。在开发应用程序时,可以通过继承javax.swing.JFrame类来创建一个窗体对象,这个窗体继承了JFrame类自带的控制窗体的按钮,如“最大化”“最小化”“关闭”等,可以在窗体中添加组件以及为组件设置事件。 设置窗口信息: ●设置窗体可见,setVisible(true); ●设置窗口大小,setSize(500,500); ●设置窗口位置居中,setLocationRelativeTo(null); ●设置窗口标题:setTitle("黄金矿工"); ●关闭窗口的方法:setDefaultCloseOperation(EXIT_ON_CLOSE); //点击关闭按钮时,隐藏窗口 2、2 图片载入和绘制 用Image方法将图片载入程序当中。 例:Image bg =Toolkit.getDefaultToolkit().getImage("此处放置图片的路径(imgs/bg.jpg)"); 调用 drawImage 绘制图片: g.drawImage(bg,0,0,null); //起始坐标设置为0,0。 2、3 红线的绘制 drawLine() 是划线的方法。需要传入四个参数即起点坐标和终点坐标。 setColor(Color.red) //将绳子设置为红色。 红线摇摆情况: ●红线在水平面下做往返运动,可以发现,起点坐标是确定的,线段长度是确定的,终点坐标随角度的变化而变化。那么我们可以根据三角函数,求得其终点坐标,如上图所示。 ●角度设置为0-π。操作n实现角度的变化。 红绳有摇摆、抓取、收回三种状态。设置一个鼠标事件(点击事件),通过鼠标事件来改变参数,继而改变红绳的状态。使用一个switch语句,如果状态时0则左右摇摆,如果状态为1(右键),则不停延长(增加线的长度)。如果是状态2,则收回(即线长变短)。

Mac上如何修复损坏的音频?试试iZotope RX 10,对音频进行处理,提高音频质量!

iZotope RX 10是一款由iZotope公司开发的音频修复和编辑软件。它被广泛用于电影、电视、音乐和游戏等行业的音频后期制作,以及声音设计和修复工作。 在RX 10中,iZotope从头开始重新设计了全新的Repair Assistant修复助手,并且推出了相应的修复助手插件。这个插件能够智能地识别噪音和其他问题,只需要点击学习(learn)插件就可以自动识别音频素材,可以自动分析并自适应处理咝咝声、混响、人声、噪音等音频问题,并可以一键控制处理。 此外,RX 10还提供了许多其他的修复工具,例如去嗡嗡声中的自适应动态模式,新的频谱恢复可以将低质量的音频重新合成为高质量,解决因录制问题产生的基本上不可修复的问题。选区羽化工具可以在音频中选择特定的区域进行羽化处理,使得音频过渡更加自然。文本导航+多说话人检测功能可以自动翻译音频并能区分多人对话。 总的来说,iZotope RX 10是一款非常强大的音频修复和编辑软件,提供了许多先进的工具和算法,可以帮助用户快速有效地处理各种音频问题。 Mac版:点此下载 win版:点此下载

Python集成开发环境(IDE):WingPro for Mac

WingPro for Mac是一款Python集成开发环境(IDE)软件,它提供了一系列强大的工具和功能,帮助Python开发人员提高开发效率和质量。 WingPro for Mac拥有直观的用户界面和强大的调试器,可以帮助用户快速定位问题和修复错误。它还提供了智能代码补全、语法高亮、代码折叠等功能,使编写Python代码更加方便和快速。此外,WingPro for Mac还支持各种Python框架和库,包括Django、Flask、Pyramid等,使得开发人员可以更加轻松地编写Python应用程序。 总的来说,WingPro for Mac是一款非常实用的Python开发工具,为开发人员提供了强大的功能和工具,帮助他们更加高效地编写Python代码。 WingPro mac版破解教程 软件下载完成后,先双击python.pkg根据提示进行安装 将左侧的WingPro拖到右侧的应用程序进行安装 运行wingpro ,点击accept,选择Activate a purchased license,先放一边待用。 将镜像包中的wingpro破解工具keygen9.pyc拖到桌面 打开终端,输入python3注意python3后面需加一个空格 把wingpro破解工具拖进终端并回车 提示输入密码,输入avh.world后回车 此时终端会生成一串wingpro注册码。 把wingpro注册码复制到软件注册页面。如若不行,重新启动终端重试! wingpro注册码输入之后请点击continue 把wingpro软件中生成的request code复制到终端中,然后点击回车。 终端会生成另一串WingIDE注册密钥,把WingIDE密钥复制到软件注册页面的正确位置中,再点击Continue wingpro mac 破解版提示您注册成功!!

Cinema 4D 2024更新, 比旧版速度更快!

Cinema 4D 2024 for Mac更新至v2024.0.2版本,其中Cinema 4D核心得到了全面优化,增强了可调的Pyro模拟、增强了真实镜头耀斑和色彩校正工作流程。 Cinema 4D 2024变得更加强大,在交互式播放方面有了巨大的性能改进,对刚性体模拟进行了增强,并提供了更具“艺术指导性”的Pyro工作流程。通过Trapcode 2024,艺术家现在可以使用新的燃烧功能创建逼真的热力动力学效果,并使用“父级行程”功能创建粒子轨迹。 VFX 2024在光照控制方面开辟了新的领域,并对备受欢迎的真实镜头耀斑进行了多项增强。通过Magic Bullet 2024,色彩校正变得比以往更容易。此外,一系列新的预设使艺术家拥有更多创作自由。Universe 2024还提供了许多工作流程改进,并提供新的预设。 在多核CPU上使用MatCap和Distorter着色器时,Redshift为用户提供了更多创作自由,并进行了性能改进。作为对Maxon One订户的特别款待,我们带来了迄今为止最全面的Maxon Capsules,包括由Rocket Lasso提供的新样条修改器、Redshift金属和汽车漆材质,以及用于室内和室外可视化的即用型3D模型。 一、Cinema 4D 2024 Cinema 4D 2024为最复杂的创意场景提供了无与伦比的速度和性能。刚体模拟现在可以与所有现有力、火焰、布料和软体进行交互。火焰兵闪耀着一个热门的新功能,允许从粒子和矩阵中发射火焰。新的顶点法线工具为艺术家提供了无与伦比的精度,以达到完美的表面。 Cinema 4D 2024的速度是以前版本的两倍多,通过Maxon全新内核的强大功能,优化了速度和性能。 由于在Cinema 4D的统一模拟系统中添加了刚体模拟,实体对象现在可以与场景中的所有模拟类型进行交互,无论是软体,布料,绳索还是火焰兵。 Pyro 现在为美术师提供了更精确的控制,以指导他们的模拟并确保它符合他们的愿景。通过将火焰兵标签添加到标准粒子发射器中,考虑粒子几何形状和矩阵克隆器,他们现在可以发射火焰兵。这使艺术家能够创建带有火焰、烟雾轨迹和爆炸的电影场景,或在夜空中可视化美丽的烟花。 在UpRes的帮助下,创意人员可以在项目的艺术指导和概念阶段使用较低分辨率的模拟来加快周转速度,然后以完整的质量渲染模拟以进行最终输出。 Cinema 4D 2024引入了新的顶点法线控件,使艺术家可以完全控制调整顶点和多边形法线以消除阴影伪影。 Cinema 4D 2024中的新建模工具将使处理复杂任务变得轻而易举。“选择图案”允许艺术家一键在网格表面上重复选择。投影变形器为用户提供了快速控制,并允许他们将点从一个对象移动到另一个对象的任何方向。 Cinema 4D 2024 中的节点 UI 已改版。除了改善整体外观外,新的注释功能还通过节点编辑器中的直接注释大放异彩,艺术家可以使用这些注释来记录他们的节点网络。 二、Red Giant 2024 Red Giant的最新更新包括对Trapcode,Magic Bullet,VFX和Universe工具集的更新。Trapcode 2024 允许艺术家创建逼真的热动力学,这要归功于特定流体动力学模拟扩展。VFX 2024 在光照控制方面开辟了一个新的维度,并对流行的真实镜头光晕进行了多项增强。借助 Magic Bullet 2024,色彩校正比以往任何时候都更容易 - 加上大量新的预设,为设计师提供了更多的创作自由,Universe 2024 提供了大量新的预设。 此外,Red Giant中的所有工具现在都有中文和日语版本,使艺术家更容易开始使用母语的软件。 三、Trapcode 2024 燃烧是特定流体动力学组中的新参数子集,为模拟添加了真实的热力学属性。燃烧使艺术家能够直接在After Effects中创建令人信服的烟火效果,例如用对位置数据做出真实反应的火焰点燃演员手中未点燃的火炬。 Stroke from Parent是一个新的发射器类型选项,也是Emit from Parent的替代方案。由于“来自父项的描边”的行为更像是3D描边,因此艺术家可以在父项粒子后面创建无缝轨迹。

听图森CTO王乃岩浅谈从L2到L4商用车自动驾驶中的规模化

题解 | #4bit超前进位加法器电路# `timescale 1ns/1nsmodule lca_4( input [3:0] A_in , input [3:0] B_in 题解 | #24点游戏算法# #include <iostream>using namespace std;#include <bits/stdc++.h>vecto 题解 | #信号反转输出# `timescale 1ns/1nsmodule top_module( input [15:0] in, output [15:0] out);genv 题解 | #牛客网连续练习题目3天及以上的用户# import sysimport pandas as pd fm=pd.read_csv('nowcoder.csv',sep=',')#预处理筛选fm.dat 题解 | #查看不同年龄段的用户明细# SELECT device_id, gender, (CASE WHEN age<20 THEN '20岁以下' WHEN age>= 马康磊的人生经历:一个令人惊叹的故事。 我一直在想:我希望做个什么样的人?我能做个什么样的人?我应该做个什么样的`人?人生几十年!是一个绚丽、悠长的梦。聚也匆匆,散也匆匆。等到白发于我们的那一年,梦也 题解 | #判断链表中是否有环(哈希表)# /** * Definition for singly-linked list. * struct ListNode { * int val; * 题解 | #顺时针打印矩阵#

Jmeter生成可视化的HTML测试报告

Jmeter也是可以生成测试报告的。 性能测试工具Jmeter由于其体积小、使用方便、学习成本低等原因,在现在的性能测试过程中,使用率越来越高,但其本身也有一定的缺点,比如提供的测试结果可视化做的很一般。 不过从3.0版本开始,jmeter引入了Dashboard Report模块,用于生成HTML类型的可视化图形报告(3.0版本的Dashboard Report模块会中文乱码,因此建议使用3.0以上的版本)。 简单介绍下在利用jmeter进行性能测试时,生成HTML的可视化测试报告。。。 一、生成HTML测试报告的两种方式 1、利用已有.jtl文件生成报告 如果已经有经过测试生成的.jtl文件,可以利用该文件直接生成HTML可视化测试报告。 进入jmeter的bin目录下,输入如下命令: jmeter -g test.jtl -o /path # -g:后跟test.jtl文件所在的路径 # -o:后跟生成的HTML文件存放的路径 PS:如果是在Windows环境命令行运行,必须指定生成的HTML文件存放文件夹,否则会报错;如果是linux环境,如指定路径下不存在该文件夹,会生成对应的文件夹存放报告文件! 2、无.jtl文件生成测试报告 如果还未生成.jtl文件,则可以通过如下命令,一次性完成测试执行和生成HTML可视化报告的操作,进入jmeter的bin目录下,输入如下命令: jmeter -n -t test.jmx -l test.jtl -e -o /path # -n:以非GUI形式运行Jmeter # -t:source.jmx 脚本路径 # -l:result.jtl 运行结果保存路径(.jtl),此文件必须不存在 # -e:在脚本运行结束后生成html报告 # -o:用于存放html报告的目录 PS:(linux系统和windows系统命令一样)需要注意的是,生成的.jtl文件路径下,不能存在同名的.jtl文件(我理解的就是一个jtl文件就代表了一个.jmx文件),否则会执行失败。 执行完毕后,会得到这些东西 用浏览器打开存放报告的文件夹下的index.html,效果展示如下: 二、图表信息详解 测试报告分为两部分,Dashboard和Charts,下面分开解析。 1、Dashboard(概览仪表盘) ①、Test and Report informations ②、APDEX (应用性能指标) 关于APDEX的相关信息,请参考这里:应用性能指标;英文原文,参考这里:Apdex-Wikipedia ③、Requests Summary 2、Charts(详细信息图表) PS:由于详细信息图表有点多,这里我挑几个性能测试过程中比较关键的图表解析! Over Time ①、Response Times Over Time(脚本运行期间的响应时间变化趋势图) 说明:可以根据响应时间和变化和TPS以及模拟的并发数变化,判断性能拐点的范围。 ②、 Response Time Percentiles Over Time (successful responses)

json数组对象如何取出其中一部分需要的字段,组成新数组对象

这是一个笑话,折腾了半天,发现js、ts提供了默认的办法。 从后台获取的数据: //服务器获得的 data = [ {dd:'22' ,AA:'东东' ,re1:123}, {dd:'33' ,AA:'丽丽' ,re1:234}, {dd:'44' ,AA:'明明' ,re1:456} ]; //理想的 [ {dd:'22' ,re1:123}, {dd:'33' ,re1:234}, {dd:'44' ,re1:456} ]; TS的解决方案: interface myData{ dd:string; rel:number; } const newArr=ref<myData>([]) 取出数据,假设已经封装了get方法: function getDataList() { return (baseService.get("/sys/tData/list").then((res) => { newArr.value = res.data; console.log('数据:',newArr.value) }) ) } TS根据接口定义的数据,自动去匹配过来的数据,不需要再次做复杂的转换

【Linux】完美解决ubuntu18.04下vi不能使用方向键和退格键

今天在刚安装完ubuntu18.04,发现在使用vi命令配置文件时使用方向键并不能移动光标,而是出现一堆奇怪的英文字母,使用退格键也不能正常地删除内容,用惯了CentOS的我已经感觉到ubuntu没有centos用着丝滑,但是没办法,ubuntu才是我后续实验学习中的主流,我将以上问题总结出了以下两个解决办法: 文章目录 1.方法1:1.方法2: 1.方法1: 上网查了一下,这是由于Ubuntu预装的是vim-tiny,而我们需要使用vim-full。执行下面的语句安装vim full版本。 这个问题是由于新系统预装的是vi而不是vim所致。因为vi不支持直接使用退格键删除字符,只有在按下esc键时,才能让退格键删除字符生效。相比之下,vim可以像记事本一样直接编辑字符,更加方便 只要依次执行以下两个命令即可完美解决Ubuntu下vi编辑器方向键变字母的问题。即:卸载当前vi编辑器,然后重新安装。 先打开命令行窗口,以root管理员身份登录。 1.执行命令 sudo apt-get remove vim-common 2.执行命令 sudo apt-get install vim 再试试vi编辑器,可以看到方向键和退格键已经可以正常使用了。 1.方法2: 由于/etc/vim/vimrc.tiny的拥有者是root用户,所以要在root的权限下对这个文件进行修改。 su root 在root用户下使用命令 vi /etc/vim/vimrc.tiny 修改文件,将set compatible 设置成set nocompatible非兼容模式,就可以解决方向键变ABCD的问题了。 vi /etc/vim/vimrc.tiny 这是因为有时候系统会默认vim兼容vi,所以使用vi的命令。 接下来要解决Backspace键的问题也很简单,在刚才那句话后面再加一句:set backspace=2 即可。 set nocompatible set backspace=2 以上就是解决ubuntu18.04下vi不能使用方向键和退格键的两个方法,欢迎各位小伙伴和前辈们提出宝贵的意见,如果本篇文章对你有帮助,请点赞收藏+关注哦~

【Linux】CentOS-6.8超详细安装教程

文章目录 1.CentOS介绍:2.必要准备:3.创建虚拟机:4 .安装系统 1.CentOS介绍: CentOS是一种基于开放源代码的Linux操作系统,它以其稳定性、安全性和可靠性而闻名,它有以下特点: 开源性:CentOS是一个免费、开源的操作系统,它遵循GNU通用公共许可证(GPL)的条款。这意味着任何人都可以自由地使用、修改和分发CentOS的源代码。 基于Red Hat Enterprise Linux(RHEL):CentOS源码直接从RHEL中衍生,因此它保持了与商业版RHEL高度的二进制兼容性。这使得CentOS成为了一个非常可靠和稳定的操作系统选择。 长期支持(LTS):CentOS提供长期支持版本,通常每个版本的支持周期为10年。这意味着用户可以在较长的时间内获得安全更新和错误修复,这对于企业和生产环境来说非常重要。 安全性:CentOS通过及时提供安全更新和修补程序来确保系统的安全性。它也受到活跃的社区支持,用户可以及时获取安全建议和支持。 社区支持:CentOS有庞大的用户社区,提供了广泛的技术支持和资源。社区成员之间分享经验、解决问题,并提供教程和文档,这让用户能够更好地使用和定制CentOS。 服务器应用:由于其稳定性和安全性,CentOS被广泛用于服务器环境。它支持多种服务器应用程序、服务和工具,如Web服务器(如Apache、Nginx)、数据库服务器(如MySQL、PostgreSQL)和邮件服务器等。 软件包管理器:CentOS使用YUM(Yellowdog Updater Modified)作为其主要软件包管理器。YUM使得安装、更新和删除软件包变得简单和高效。 2.必要准备: 虚拟机:VMware Workstation Pro 14 镜像⽂件:CentOS-6.8-x86_64-bin-DVD1.iso 6.8已经是⼀个⽐较早的版本了,现在6.8的镜像文件也已经很难找到了,我这里免费给大家提供网盘地址: 夸克网盘链接:https://pan.quark.cn/s/7231da1640c4 提取码:ndhG 3.创建虚拟机: (1) 创建新的虚拟机: 可以在主页直接点击创建新的虚拟机 也可以在上⽅,点击⽂件,新建虚拟机 (2) 选择⾃定义(⾼级) (3) 硬盘兼容性 默认即可。我这⾥是VM14,点击下⼀步 (4) 选择稍后安装操作系统 这⾥,选择稍后安装操作系统,安装完成过后,⼤家可以选择删掉⼀些不要的硬件,例如打印机等等 (5) 选择操作系统以及版本 这⾥选择 Linux 系统,指定为 CentOS 64 位 (6) 命名虚拟机 指定虚拟机的名称,后期也可以改 同时指定其位置,⾃⼰安排就好,下⾯是我的例⼦ (7) 处理器配置 根据真机的性能设置 CPU处理器的数量以及每个处理器的核⼼数量,当然 4 可不是固定的 当然了,总不能超过你的真机,否则就会报错哈 (8) 设置虚拟机内存 建议把内存指定为 2G(2 x 1024MB),最低也给到 1G,⽽2G 也够了,也没太⼤的必要更⾼ (9) 设置⽹络类型 想要使⽤⽹络,给出了三种⽅式:桥接模式、NAT模式、仅主机模式

c语言中的条件运算符和关系运算符

#include <stdio.h> /*条件运算符 * ()?():() * 如果?前面的表达式成立,整个表达式的值,是?和:之间的表达式的结果 * 否则是:之后的表达式的结果。 * A?B:C * 首先判断表达式A 的结果,如果结果为真,则执行表达式B,如果表达式S为 * 假则执行表达式C条件运算符其实就是一个简单的if else语句 * if(A){ * B * }else{ * C * } */ /*逗号预算符 * ( ..., ..., ...) * 使用逗号隔开的表达式从左向右依次执行,最后表达式的值是整个运算的结果 * A = ( B , C , D ) * 先运行表达式A,再运行表达式C,最后运行表达式D,最终变量A的值为表达式D的值 * */ int main() { //条件运算符 int a=10,b=20; int c; c = (a > b) ? (a += 10) : (b += 10); printf("

CarPlay iAP2附件协议

CarPlay only supports USB before iOS 8.3, maximum NCM packet size is 64KB (40 x 1514-byte MTU). USB CarPlay uses H.264 HP3.1/3.2 Profile, 25Mbps. Wireless CarPlay uses iAP2 over Bluetooth profile. It uses H.264 HP3.1/3.2 Profile, 10Mbps. Download Data Center Software from Total Phase. 1 Lightning 1.1 Lightning线缆方向发现 Figure 1-1 Apple Lightning Cable Orientation Discovery ID0或者ID1的通信位速率大概为85kbps,USB PD协议的CC线BMC编码位速率是600Kbps。 1.2 BQ25890 Figure 1-2 CDP探测波形 1.3 Apple charger mode divider 1: 5W, DP = 2 V, DM = 2.

PyQt5安装以及使用

PyQt5安装以及使用 1 简介2 安装方法2.1 方法1 pip install PyQt52.2 方法2 pip install PyQt5‑5.15.9‑cp37‑cp37m‑win_amd64.whl 3 安装PyQt5-tools4 设置环境变量5 测试6 Qt Designer6.1 安装6.2 在 PyCharm 中配置 Qt Designer6.3 在PyCharm中测试Qt Designer 7 将ui文件转为py文件7.1 方法1 使用pyuic5命令7.2 方法2 使用pyside2-uic7.3 测试 1 简介 开发工具为PyCharm,Anaconda。配置过程可能遇到问题:1)没有designer.exe,单独安装Qt Designer即可;2)没有pyuic5.exe,用命令行将ui文件转为py文件即可。 2 安装方法 安装方法有三种: 1)源码编译,复杂就不介绍了 2)直接命令:pip install PyQt5 3)通过命令:pip install PyQt5‑5.15.9‑cp37‑cp37m‑win_amd64.whl 2.1 方法1 pip install PyQt5 由于国内网络原因可能出现链接超时错误: Collecting PyQt5 Downloading PyQt5-5.15.9-cp37-abi3-win_amd64.whl (6.8 MB) ━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.4/6.8 MB 36.5 kB/s eta 0:02:56 ERROR: Exception: Traceback (most recent call last): File "

React实战过程的知识了解

做项目用到react和antd,没办法循序渐进的学习,只能把一些点记录在这里,希望大家指正。 1.杂七杂八 正文 //actionRef,操作表单的预设方法,包括:刷新、重置所有项并刷新、重置到默认项、加载更多、清空选中项 const actionRef = useRef(); //刷新界面 actionRef?.current?.reload(); //重置表单数据 formRef?.current?.resetFields() //富文本展示 <div dangerouslySetInnerHTML={{__html: contentInfo}}/> 1.ProTable Demo 这是antd提供的一种高级表格,如果我们的表格需要和后端交互,这是较好的一种选择。 1.1 request 表格主要是和后端交互,所以为这是protable里最重要的api。 request 会接收一个对象。对象中必须要有 data 和 success,如果需要手动分页 total 也是必需的。 <ProTable<DataType, Params> // params 是需要自带的参数 // 这个参数优先级更高,会覆盖查询表单的参数 params={params} request={async ( // 第一个参数 params 查询表单和 params 参数的结合 // 第一个参数中一定会有 pageSize 和 current ,这两个参数是 antd 的规范 params: T & { pageSize: number; current: number; }, sort, filter, ) => { // 这里需要返回一个 Promise,在返回之前你可以进行数据转化 // 如果需要转化参数可以在这里进行修改 const msg = await myQuery({ page: params.

简单介绍一下Yolov5

YoloV5是一种基于目标检测的深度学习模型,是YOLO系列模型的最新版本。YoloV5相对于前几个版本,改进了网络结构和训练方式,提高了检测精度,同时也减少了推理时间。YoloV5使用了轻量级的网络结构,可以在不牺牲准确率的情况下减少模型大小和计算量。 YoloV5采用了新的网络结构,称为CSPNet(Cross Stage Partial Network)。该网络结构采用了跨阶段部分连接来提高特征提取的效率,同时也避免了信息丢失的问题。此外,CSPNet还通过使用SPP(Spatial Pyramid Pooling)模块来提高特征提取的效率,以及使用PAN(Path Aggregation Network)模块来融合不同的特征图,从而提高检测精度。 YoloV5还引入了自适应训练技术。传统的训练方式需要手动调整学习率和训练时长等参数,而自适应训练技术可以自动调整这些参数,从而提高模型的训练效率和准确率。此外,YoloV5还使用了数据增强技术和MixUp技术来增加训练数据的多样性,提高模型的鲁棒性。 总之,YoloV5是一种高效、精确的目标检测模型,可以用于各种实际应用中,如自动驾驶、安防监控、智能交通等。 下面是CSPNet的代码实现 import torch import torch.nn as nn import torch.nn.functional as F class CSPBlock(nn.Module): def __init__(self, in_channels, out_channels, bottleneck_ratio=0.5): super(CSPBlock, self).__init__() self.conv1 = nn.Conv2d(in_channels, int(out_channels * bottleneck_ratio), 1) self.bn1 = nn.BatchNorm2d(int(out_channels * bottleneck_ratio)) self.conv2 = nn.Conv2d(in_channels, int(out_channels * bottleneck_ratio), 1) self.bn2 = nn.BatchNorm2d(int(out_channels * bottleneck_ratio)) self.conv3 = nn.Conv2d(int(out_channels * bottleneck_ratio), int(out_channels * bottleneck_ratio), 3, padding=1) self.bn3 = nn.BatchNorm2d(int(out_channels * bottleneck_ratio)) self.

【JVM】并发可达性分析-三色标记算法

欢迎访问👋zjyun.cc 可达性分析 为了验证堆中的对象是否为可回收对象(Garbage)标记上的对象,即是存活的对象,不会被垃圾回收器回收,没有标记的对象会被垃圾回收器回收,在标记的过程中需要stop the world (STW)。 缺点:当堆中的对象很多、很复杂时,用。等待时间会很长。 什么是并发可达性分析 并发的意思是指和用户的线程进行并行运行,在运行时不需要进行STW。 三色算法理论-引入三种颜色 白色:尚未访问过。 黑色:本对象已访问过,而且本对象 引用到 的其他对象 也全部访问过了。 灰色:本对象已访问过,但是本对象 引用到 的其他对象 尚未全部访问完。全部访问后,会转换为黑色。 三色算法理论-解释多标-浮动垃圾问题 浮动垃圾(Floating Garbage): 如图,在本图中A为GC ROOT,扫描到了B节点的时刻,断开了A到B 的应用:A.referenceB=null ,此时B下的100个下游对象,都无法被扫描到,导致无法被回收,这部分本应该回收但是没有回收到的内存,被称之为“浮动垃圾”。浮动垃圾并不会影响应用程序的正确性,只是需要等到下一轮垃圾回收中才被清除。 三色算法理论-解释漏标-对象消失问题 【描述】: 当扫描到B节点时,断开时了B->C 的链接,A->C 新增一条新的引用: c=b.reference; b.referenceC=null; a.referencec=c; 【问题!!!】 由于将B到C 的引用断开,导致C的状态还是白色,虽然新增了A到C的引用,但是A已经是黑色,不会重新进行扫描,我因此,会出现当本次扫描完成后,C还是白色,C和C引用的100个对象被回收掉了!!这是完全不能忍受的。 【出现问题的两个条件】 赋值器插入了一条或者多条从黑色对象到白色对象的新引用;赋值器删除了全部从灰色对象到该白色对象的直接或间接引用。 要解决对象消失的问题,就要使引发问题的根源条件处理,这就引出了2种解决对象消失问题的方式,增量更新或原始快照。 如何解决漏标-增量更新(Incremental Update) 代表回收器:CMS 增量更新破坏的是第一个条件,当黑色对象插入新的指向白色对象的引用时,就将这个新加入的引用记录下来,待并发标记完成后,重新对这种新增的引用记录进行扫描; 简记:黑色对象一旦插入新的白色对象,黑色就变成灰色(需要重新扫描) 如何解决漏标-原始快照(Snapshot At The Beginning,SATB) 代表回收器:G1、Shenandoah 原始快照破坏的是第二个条件,当灰色对象要删除指向白色对象的引用关系时,也是将这个记录下来,并发标记完成后,对该记录进行重新扫描。 简记:如果灰色对象下的所有白色节点之间的引用删掉,那么灰色节点将变为根节点,重新进行扫描。 【复杂度分析】 优缺点分析 增量更新:黑色对象新增一条指向白色对象的引用,那么要进行深入扫描白色对象及它的引用对象。 原始快照:灰色对象删除了一条指向白色对象的引用,实际上就产生了浮动垃圾,好处是不需要像 CMS 那样 remark,再走一遍 root trace 这种相当耗时的流程。 SATB相对增量更新效率会高(当然SATB可能造成更多的浮动垃圾),因为不需要在重新标记阶段再次深度扫描被删除引用对象,而CMS对增量引用的根对象会做深度扫描,G1因为很多对象都位于不同的region,CMS就一块老年代区域,重新深度扫描对象的话G1的代价会比CMS高,所以G1选择SATB不深度扫描对象,只是简单标记,等到下一轮GC再深度扫描。

【k8s】kubectl命令详解

文章目录 命令行工具 kubectl在slave下配置kubectl资源操作创建对象 API概述类型访问控制认证授权 废弃API说明 资源管理资源管理介绍资源管理方式命令式对象管理命令式对象配置创建yaml文件创建资源查看资源删除资源 声明式对象配置 kebectl在node节点上运行查看每种资源的可配置项推荐增删改查操作 命令行工具 kubectl 官方文档:https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands 在slave下配置kubectl # 1. 将 master 节点中 /etc/kubernetes/admin.conf 拷贝到需要运行的服务器的 /etc/kubernetes 目录中 scp /etc/kubernetes/admin.conf root@slave:/etc/kubernetes # 2. 在对应的服务器上配置环境变量 echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile source ~/.bash_profile 资源操作 创建对象 $ kubectl create -f ./my-manifest.yaml # 创建资源 $ kubectl create -f ./my1.yaml -f ./my2.yaml # 使用多个文件创建资源 $ kubectl create -f ./dir # 使用目录下的所有清单文件来创建资源 $ kubectl create -f https://git.io/vPieo # 使用 url 来创建资源 $ kubectl run nginx --image=nginx # 启动一个 nginx 实例 $ kubectl explain pods,svc # 获取 pod 和 svc 的文档 # 从 stdin 输入中创建多个 YAML 对象 $ cat <<EOF | kubectl create -f - apiVersion: v1 kind: Pod metadata: name: busybox-sleep spec: containers: - name: busybox image: busybox args: - sleep - "

锋利的开罐器-Arthas

官网:https://arthas.aliyun.com/ github:https://github.com/alibaba/arthas 做什么的? Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。 具体的引用场景 CPU飙高,什么原因造成的?这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!是否有一个全局视角来查看系统的运行状况?有什么办法可以监控到 JVM 的实时运行状态?怎么快速定位应用的热点,生成火焰图?怎样直接从 JVM 内查找某个类的实例? - base64 - base64 编码转换,和 linux 里的 base64 命令类似 [arthas@70070]$ echo 'abc' > /tmp/test.txt [arthas@70070]$ cat /tmp/test.txt abc [arthas@70070]$ base64 /tmp/test.txt YWJjCg== 基础命令 - cat - 打印文件内容,和 linux 里的 cat 命令类似 - cls - 清空当前屏幕区域 - echo - 打印参数,和 linux 里的 echo 命令类似 - grep - 匹配查找,和 linux 里的 grep 命令类似 - help - 查看命令帮助信息 - history - 打印命令历史 - pwd - 返回当前的工作目录,和 linux 命令类似 - reset - 重置增强类,将被 Arthas 增强过的类全部还原,Arthas 服务端关闭时会重置所有增强过的类 - session - 查看当前会话的信息 [arthas@19836]$ session Name Value -------------------------------------------------- JAVA_PID 19836 SESSION_ID d864f3f9-a139-473d-951c-0fa8039ea901 - quit - 退出当前 Arthas 客户端,其他 Arthas 客户端不受影响 - stop - 关闭 Arthas 服务端,所有 Arthas 客户端全部退出 - tee - 复制标准输入到标准输出和指定的文件,和 linux 里的 tee 命令类似 - version - 输出当前目标 Java 进程所加载的 Arthas 版本号 - - keymap - Arthas 快捷键列表及自定义快捷键 JVM相关命令 - dashboard - 当前系统的实时数据面板🔥 - thread - 查看当前 JVM 的线程堆栈信息🔥 - jvm - 查看当前 JVM 的信息🔥 - sysprop - 查看和修改 JVM 的系统属性 - sysenv - 查看 JVM 的环境变量 - vmoption - 查看和修改 JVM 里诊断相关的 option - getstatic - 查看类的静态属性 - ognl - 执行 ognl 表达式 ognl '@java.

windows实用功能快捷入口

文章目录 windows实用功能快捷入口运行快捷键打开windows设置打开运行回到桌面打开文件资源管理器 参考 windows实用功能快捷入口 运行 原理实际上就是通过名字调用C:\Windows\System32下的文件(不区分大小写)如输入mstsc点确定后实际上就相当于点击C:\Windows\System32\mstsc.exe文件 命令说明mstsc远程桌面cleanmgr磁盘清理msconfig系统配置control控制面板winver查看系统版本services.msc打开服务管理器calc打开计算器shell:startup打开开机启动程序目录regedit注册表编辑器dxdiage打开DirectX诊断工具\\wsl$打开wsl目录 快捷键 打开windows设置 win+i 打开运行 win+R 回到桌面 win+D 打开文件资源管理器 win+E 参考

java关于多线程并发和异步操作由浅入深

目录 前言一、初识多线程多线程最基本的两种实现方式方式一方式二 多线程优点 二、匿名函数实现无返回值的多线程异步调用三、CompletableFuture实现多线程异步调用无返回值的异步调用有返回值的异步调用什么是 Callable 和 Future? 四、四种线程池的使用1.newFixedThreadPool定长线程池2.CachedThreadPool可缓存线程池3.newSingleThreadExecutor单线程化线程池4. newScheduledThreadPool周期性线程池无返回值的延时线程示例有返回值的延时线程示例定时线程执行 五、使用guava库的线程池创建线程(推荐)无返回值的线程创建有返回值的多线程调用线程池的submit和execute方法区别有返回值的批量多线程调用多任务其中一个执行完其余都停止invokeAny()与invokeAll()区别: 六、线程间的数据同步多线程间的数据一致性——原子操作线程间变量同步——synchronized关键字线程间通信——管道通信线程间变量隔离独立——ThreadLocalConcurrentHashMap的使用 七、Semaphore信号八、简单练习 前言 多线程一直以来都知识点比较多,让人难以理解,网上的文章大多也是长篇大论。最近有空所以将平时接触到的多线程知识由浅入深的以代码示例形式整理出来,希望为后来者解惑,快速的了解多线程相关的知识,减少踩坑。 一、初识多线程 多线程最基本的两种实现方式 方式一 继承Thread类并并重写run方法 public class MyThread extends Thread { @Override public void run() { for (int i = 1; i <= 5; i++) { System.out.println("线程名:" + Thread.currentThread().getName() + " i是:" + i); } } } 测试: public class Test { public static void main(String[] args) { MyThread myThread1 = new MyThread(); MyThread myThread2 = new MyThread(); myThread1.

uniapp APP端使用html2canvas截图分享小程序卡片图片模糊、跨域等问题解决

项目场景: 项目场景:uniapp APP端,分享小程序到微信好友,使用html2canvas截取当前页面做卡片封面图。仅是需要展示部分内容用作卡片封面就可以,不强制需要全屏截图。 问题描述 问题1、部分页面截取到的图片分享到微信后卡片图片模糊。 问题2、截图时报错:Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported。 实现方案: APP端 html2canvas截图步骤: 1、npm方式下载 npm i html2canvas 2、引用 html2canvas import html2canvas from 'html2canvas' 3、APP中需要用renderjs方式进行,开始截图: 1)在需要截图的页面定义如下renderjs的截图函数: <script module="canvasToImage" lang="renderjs"> import html2canvas from 'html2canvas'; export default { data() { return {} }, methods: { getImage(event, ownerInstance) { ownerInstance.callMethod('showLoading', {}) //containert为需要操作的dom节点,也就是定义的id值 var dom = document.getElementById('containert'); html2canvas(dom, { width: window.clientWidth, height: 200, useCORS: true, scale: 1, dpi: 1000 }).

【VUE复习·10】v-for 高级::key 作用和原理;尽量不要使用 index 来遍历

总览 1.:key 作用和原理 2.尽量不要使用 index 来遍历 一、:key 作用和原理 1.数据产生串位的原因 在我们使用 index 进行遍历的时候,会出现虚拟 DOM 和 真实 DOM 的渲染问题。 二、尽量不要使用 index 来遍历 详情见视频 1/3 处: https://www.bilibili.com/video/BV1Zy4y1K7SH?p=30&spm_id_from=pageDriver&vd_source=38d6ea3466db371e6c07c24eed03219b

c语言中的if...else语句

#include <stdio.h> /*if 语句 * if(条件表达式) * {//复合语句,若干条件语句的结合 * 语句1; * 语句2; * } */ int main() { // //形式1,只有if // //首先判断if后买你括号里面的表达式是否为真,如果为真则执行大括号里面的语句,反之则不执行 int n=50; int m=40; // if(n>=50){ // printf("%d>=50\n",n); // } // if(m>=50){ // printf("%d>=50\n",n); // } // //形式2,if else语句 // //首先判断if后买你括号里面的表达式是否为真,如果为真则执行大括号里面的语句,反之则执行else大括号里面的语句 // //注意如果if和else后面只有一条语句后面可以不加大括号,如果有多条语句,必须加大括号,否则else找不到与之最近的if编译会报错 // if(n>=50) // { // printf("%d>=50\n",n); // }else { // printf("%d<50\n",n); // } // if(m>=50) // { // printf("%d>=50\n",m); // }else { // printf("%d<50\n",m); // } //形式3,if() else if() else if().

PTA 编程题 -- 最大公约数和最小公倍数

本题要求两个给定正整数的最大公约数和最小公倍数。 输入格式: 输入在一行中给出两个正整数M和N(≤1000)。 输出格式: 在一行中顺序输出M和N的最大公约数和最小公倍数,两数字间以1空格分隔。 输入样例: 511 292 输出样例: 73 2044 思路:求最大公约数的方法,目前来说最好的就是辗转相除法,也叫欧几里得算法(Euclidean Algorithm)。 例如,要计算15和24的最大公约数,首先让把较大的数赋值给p,把较小的数赋值给q,p=24,q=15; 然后计算p,q的余数,即r=p%q,显然如果r==0了,q就是能整除p的从而最大公约数就是q。如果r!=0,那么可以推导出p,q的最大公因子一定等于q,r的最大公因子。 于是从新赋值p=q,q=r, 并重复上面的步骤,直到r==0为止,这时的q就是,原p,q的最大公因子。 至于最小公倍数,它显然就是两数乘机除以最大公约数。 代码1: int main () { int M,N,p,q,r; scanf("%d %d", &M, &N); p = M>N? M:N; // p是较大的 q = M>N? N:M; // q是较小的 r = p%q; // r是余数 // 以下代码就是小学奥数(或者初等数论)里讲的辗转相除法,也叫欧几里得算法(Euclidean Algorithm) while (r > 0) { p = q; q = r; r = p%q; } // 最后一个非零的余数r,就是M,N的最大公约数 printf("%d %d", q, M*N/q); // 最小公倍数就是两数之积除以最大公约数 return 0; } 代码2:通常我们会把求最大公因子的代码写成一个函数,就像下面这样

window.print()打印及出现的问题

<template> <transition name="el-zoom-in-center"> <div class="JNPF-preview-main"> <div class="JNPF-common-page-header"> <el-page-header @back="goBack" :content="'打印通知书'" /> <div class="options"> <el-button type="primary" @click="print()"> 打 印 </el-button> </div> </div> <div v-loading="loading"> <div ref="print"> <div style="width: 90%; margin: 30px auto 0 auto;font-size:18px"> <h1 style="text-align: center;font-size: 34px;letter-spacing:20px">催收函</h1> <h2>&nbsp;</h2> 致:{{list.customerName}} <div style="float: right; margin-top: 50px"> <div style="float: right;"> <p>{{ formatDate() }}</p> </div> </div> </div> </div> </div> </div> </transition> </template> <script> import request from "@/utils/request"; import {formatToMoney, formatToNum} from '@/utils' export default { data() { return { id: "

Java把Base64编码格式的图片下载到本地指定文件夹下

import com.alibaba.fastjson.JSONObject; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sun.misc.BASE64Decoder; import java.io.*; import java.util.Collections; import java.util.List; import java.util.Properties; public class KafkaConsumer extends ShutdownableThread { private static final Logger LOG = LoggerFactory.getLogger(KafkaConsumer.class); public static void main(String[] args) { // 图片base64字符串 String img = ""; Properties properties = getProperties(); String filePath = properties.getProperty("file.path"); filePath = filePath.replace("\\", "\\\\"); String xm = "张三"; String idCard = "360111"; try { boolean f = downloadImg(img, filePath, xm, idCard); if (f) { LOG.

python mongodb数据查询

要在Python中执行MongoDB查询,需要使用MongoDB的官方Python驱动程序——PyMongo。首先,您需要安装PyMongo,然后连接到MongoDB数据库,执行查询操作。 安装PyMongo: pip install pymongo 使用PyMongo连接到MongoDB import pymongo # 连接到MongoDB数据库 client = pymongo.MongoClient("mongodb://localhost:27017/") # MongoDB连接字符串 # 选择数据库 db = client["mydatabase"] # 数据库名称 # 选择集合(MongoDB中的集合类似于表) collection = db["mycollection"] #集合名称 如果MongoDB需要用户名和密码进行身份验证,请使用PyMongo的MongoClient构造函数提供这些凭据来连接到数据库。以下是一个示例: import pymongo # MongoDB连接信息 mongodb_host = "localhost" # MongoDB主机地址 mongodb_port = 27017 # 替换为MongoDB端口 mongodb_username = "your_username" # MongoDB用户名 mongodb_password = "your_password" # MongoDB密码 mongodb_database = "your_database" # 数据库名称 # 创建MongoDB客户端并连接 client = pymongo.MongoClient(f"mongodb://{mongodb_username}:{mongodb_password}@{mongodb_host}:{mongodb_port}/") # 选择数据库 db = client[mongodb_database] # 选择集合 collection = db["

常用排序算法时间与空间复杂度

常用排序算法 常用的排序算法有多种,它们的时间和空间复杂度可以根据算法类型进行比较。以下是一些常见的排序算法的时间和空间复杂度对比: 冒泡排序 (Bubble Sort): 时间复杂度:O(n^2)空间复杂度:O(1) 冒泡排序是一种简单的比较排序算法,它通过多次迭代来比较相邻的元素并交换它们,将最大(或最小)的元素逐渐“冒泡”到正确的位置。在最坏情况下,时间复杂度为O(n^2),其中n是元素的数量。空间复杂度是O(1),因为它只需要少量的额外空间用于交换。 选择排序 (Selection Sort): 时间复杂度:O(n^2) 空间复杂度:O(1) 选择排序是另一种简单的比较排序算法,它不断地选择剩余元素中的最小(或最大)元素并将其放在已排序的部分。时间复杂度为O(n^2),空间复杂度为O(1)。 插入排序 (Insertion Sort): 时间复杂度:O(n^2)空间复杂度:O(1) 插入排序将元素逐个插入到已排序的部分,将未排序部分的元素逐渐移动到正确的位置。时间复杂度为O(n^2),空间复杂度为O(1)。 快速排序 (Quick Sort): 时间复杂度:O(n log n) 平均情况,O(n^2) 最坏情况空间复杂度:O(log n) 快速排序是一种分而治之的排序算法,它的平均时间复杂度为O(n log n),但在最坏情况下可能达到O(n^2)。它的空间复杂度为O(log n),因为它使用递归调用的堆栈空间。 归并排序 (Merge Sort): 时间复杂度:O(n log n)空间复杂度:O(n) 归并排序也是一种分而治之的排序算法,它的时间复杂度始终为O(n log n),但它需要额外的O(n)空间来存储临时数组。 堆排序 (Heap Sort): 时间复杂度:O(n log n)空间复杂度:O(1) 堆排序使用二叉堆数据结构来进行排序,其时间复杂度为O(n log n),空间复杂度为O(1)。 计数排序 (Counting Sort): 时间复杂度:O(n + k),其中k是范围内的元素数量空间复杂度:O(n + k) 计数排序适用于元素范围较小的情况,其时间复杂度为O(n + k),其中k是范围内的元素数量。空间复杂度为O(n + k),因为它需要一个计数数组来存储元素出现的频率。 总结:不同排序算法具有不同的时间和空间复杂度特征,因此在选择排序算法时需要考虑数据规模和性质。 在平均情况下,快速排序、归并排序和堆排序通常是性能最好的排序算法,其时间复杂度为O(n log n)。 冒泡排序、选择排序和插入排序适用于小规模数据或在某些情况下。 计数排序适用于元素范围有限的情况,它的性能可以达到线性时间。

常用的查找算法时间和空间复杂的对比

以下是常用的查找算法的时间和空间复杂度对比,并附带了Python代码示例: 线性查找 (Linear Search): 时间复杂度:O(n)空间复杂度:O(1) def linear_search(arr, target): for i in range(len(arr)): if arr[i] == target: return i # 找到目标元素的索引 return -1 # 目标元素不存在 # 示例用法 arr = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5] target = 4 result = linear_search(arr, target) print(f"目标元素 {target} 在数组中的索引为: {result}") 二分查找 (Binary Search): 时间复杂度:O(log n)空间复杂度:O(1) def binary_search(arr, target): left, right = 0, len(arr) - 1 while left <= right: mid = (left + right) // 2 if arr[mid] == target: return mid # 找到目标元素的索引 elif arr[mid] < target: left = mid + 1 else: right = mid - 1 return -1 # 目标元素不存在 # 注意:数组必须是有序的 arr = [1, 2, 3, 4, 5, 6, 7, 8, 9] target = 4 result = binary_search(arr, target) print(f"

c语言中自增自减运算符

#include <stdio.h> //自增自减运算符 int main() { //将++或者--放在变量的后面 //先使用,后自增或者自减 int a=100; int b; b = a++; printf("a=%d,b=%d\n",a,b); //将++或者--放在变量的前面 //先自增或者自减,后使用 int c; c = ++a; printf("a=%d,c=%d\n",a,c); return 0; }

9月27日作业

1、 推演部分 程序验算部分 2、 #include<file.h>表示直接在系统库文件中查找该头文件 #include“file.h”表示现在当前目录下找头文件,如果找不到再在系统库文件中查找 3、 程序验证

Navicat 连接MySQL出现1045-Access denied for user ‘root‘@‘localhost‘已解决

转载: 原文链接:https://blog.csdn.net/li_wen_jin/article/details/103806171 出现这种情况可能是密码错误或者未授权 步骤概括 1、找到mysql配置文件,/etc/my.cnf ,在配置文件加入skip-grant-tables,然后重启mysql服务即可生效 2、免密登录mysql,修改密码,重新重启mysql 5.7 之前版本:update user set password = password('root') where user='root'; 5.7及之后版本:update user set authentication_string = password('root') where user='root'; 3、授权 grant all privileges on *.* to 'root'@'%' identified by 'root'; flush privileges; 详细步骤 1、找到mysql配置文件,/etc/my.cnf ,在配置文件加入skip-grant-tables 2、重启mysql服务即可生效 systemctl restart mysqld.service //重启mysql服务 systemctl status mysqld.service //查看mysql状态 systemctl stop mysqld.service //停止mysql服务 3、进入mysql,修改mysql密码 mysql -uroot -p 不用输入密码,直接回车,即可进入mysql命令界面 首先进入表mysql use mysql 修改密码:这里要根据版本来执行不同的SQL语句了,因为版本不同,存储密码的字段可能不相同。5.7以前的版本可以用以下语句更新root密码: update user set password = password(‘root’) where user=‘root’;

Java实现文件上传和下载的方法详解

文件上传,也称为upload,是指将本地图片、视频、音频等文件上传到服务器上。文件下载,也称为download,是指将文件从服务器传输到本地计算机的过程。本文将用Java实现文件上传和下载,需要的可以参考一下 1、文件上传 1.1 介绍 文件上传,也称为upload,是指将本地图片、视频、音频等文件上传到服务器上,可以供其他用户浏览或下载的过程。文件上传在项目中应用非常广泛,我们经常发微博、发微信朋友圈都用到了文件上传功能。 文件上传时,对页面的form表单有如下要求: 表单属性 取值 说明 method post 必须选择post方式提交 enctype multipart/form-data 采用multipart格式上传文件 type file 使用input的file控件上传 举例: <form method="post" action="/common/upload" enctype="multipart/form-data"> <input name="myFile" type="file" /> <input type="submit" value="提交" /> </form> 目前一些前端组件库也提供了相应的上传组件,例如Element-ui,但是底层原理还是基于form表单的文件上传。 1.2 代码实现 这里我主要实现后端代码,对于前端页面,可以使用ElementUI提供的上传组件。 1、application.yml 首先我们需要在yml 文件里 配置一下文件存储路径。 2、Controller 然后我们就可以编写上传文件的Controller。 编写文件上传的方法, 通过MultipartFile类型的参数即可接收上传的文件, 方法形参的名称需要与页面的file域的name属性一致。 package com.jie.reggjie.controller; import com.jie.reggjie.common.R; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; /** * 文件上传和下载 */ @RestController @RequestMapping("/common") @Slf4j public class CommonController { @Value("

Python实现互斥锁解决redis缓存雪崩的问题

1、缓存雪崩 说明:redis中大量的key同时过期,导致请求大量访问数据库,数据库压力激增。 2、解决方案: 均匀设置过期时间使用互斥锁 3、互斥锁实现 import redis import time # 创建Redis连接 redis_client = redis.Redis(host='localhost', port=6379, db=0) def get_data_from_cache(key): # 尝试从缓存中获取数据 data = redis_client.get(key) if data is None: # 缓存中没有数据,需要重新生成 # 获取互斥锁的名称 lock_key = f"{key}:lock" # 尝试获取互斥锁 acquired_lock = redis_client.set(lock_key, 'locked', nx=True, ex=10) # nx=True表示只有当锁不存在时才会设置成功,ex=10表示锁的过期时间为10秒 if acquired_lock: # 获取到了互斥锁,生成数据并设置到缓存中 data = generate_data_fromdb() redis_client.set(key, data, ex=60) # 设置缓存数据的过期时间为60秒 # 释放互斥锁 redis_client.delete(lock_key) else: # 未获取到互斥锁,先走缓存 time.sleep(0.1) data = redis_client.get(key) if not data: data = generate_data_fromdb() redis_client.

Nacos服务注册和配置中心

Nacos服务注册和配置中心 简介 Nacos 前两个字母分别是Naming和Configuration的前两个字母,最后s为Service 官网地址:https://nacos.io/zh-cn/ GitHub:https://github.com/alibaba/nacos Spring Cloud Alibaba Reference Documentation Nacos:Eureka+Confg+Bus Nacos 的关键特性包括: 服务发现和服务健康监测动态配置服务动态 DNS 服务服务及其元数据管理 安装 所有版本地址:https://github.com/alibaba/nacos/releases nacos-server-1.4.4.zip下载链接https://github.com/alibaba/nacos/releases/download/1.4.4/nacos-server-1.4.4.zip 下载解压,进入/bin,命令行输入。 startup -m standalone 访问界面http://127.0.0.1:8848/nacos/ 一般pom文件 <dependencies> <!--SpringCloud ailibaba nacos --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <!-- SpringBoot整合Web组件 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <!--日常通用jar包配置--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> 测试Demo application.yml server: port: 9001 spring: application: name: nacos-payment-provider cloud: nacos: discovery: server-addr: localhost:8848 #配置Nacos地址 management: endpoints: web: exposure: include: '*' Main.

雪花算法案例

雪花算法 “雪花算法”(Snowflake Algorithm)是一种用于生成唯一ID的算法。它之所以被称为“雪花算法”,是因为它的ID格式和雪花的形状有些相似。 雪花算法的主要目标是生成一个全局唯一的ID,用于在分布式系统中标识不同的数据元素或对象。这些ID通常包含了时间戳、机器节点ID和序列号等信息。雪花算法中的时间戳精确到毫秒级,机器节点ID用于在多台机器上唯一标识,序列号保证了在同一毫秒内生成的ID的唯一性。 雪花算法的设计理念是简单高效,生成的ID具有趋势递增的特点,方便数据库索引和查询优化。它被广泛应用于分布式系统中,例如在大规模的数据存储、消息队列、分布式锁等方面。 public class SnowflakeIdGenerator { // 起始的时间戳,用于计算时间戳部分 private final static long START_TIMESTAMP = 1632585600000L; // 这里以2021-09-26 00:00:00为起始时间 // 分别占用位数 private final static long SEQUENCE_BITS = 12; // 序列号占用的位数 private final static long MACHINE_ID_BITS = 5; // 机器标识占用的位数 private final static long DATA_CENTER_ID_BITS = 5; // 数据中心占用的位数 // 每部分的最大值 private final static long MAX_SEQUENCE = ~(-1L << SEQUENCE_BITS); private final static long MAX_MACHINE_ID = ~(-1L << MACHINE_ID_BITS); private final static long MAX_DATA_CENTER_ID = ~(-1L << DATA_CENTER_ID_BITS); // 每部分向左的位移 private final static long MACHINE_ID_SHIFT = SEQUENCE_BITS; private final static long DATA_CENTER_ID_SHIFT = SEQUENCE_BITS + MACHINE_ID_BITS; private final static long TIMESTAMP_SHIFT = SEQUENCE_BITS + MACHINE_ID_BITS + DATA_CENTER_ID_BITS; private long dataCenterId; // 数据中心ID private long machineId; // 机器标识ID private long sequence = 0L; // 序列号 private long lastTimestamp = -1L; // 上次生成ID的时间戳 public SnowflakeIdGenerator(long dataCenterId, long machineId) { if (dataCenterId > MAX_DATA_CENTER_ID || dataCenterId < 0) { throw new IllegalArgumentException("

This application has no explicit mapping for /error, so you are seeing this as a fallback.

最近在写SpringBoot和vue连接的时候,发现通过前端调用后端始终报错,报错如下: 1、在查找并调整包括注解注入方法、axios调参、测试等等网上给出的诸多方面的方法后,发现是数据库中字段与entity中的属性数据库类型不同。数据库中是Integer[],而entity中是Integer,因此出现过好几次以下错误: org.postgresql.util.PSQLException:不良的类型值 int:{0} ;不良的类型值 int:{0}; 之前一直没当回事,因为数据库连接是正常的,结果在查了这句话的意思之后才肯定是数据库的问题,在修改属性数据类型为Integer[]后,成功! 2、并且,当我的controller类前有@RequestMapping(“/a”),同时类中的方法前有@GetMapping(“/b”)时,是没办法在前端页面调用方法的,当删掉@RequestMapping(“/”)后就可以正常运行。 哦,原来得加上RequestMapping(“/a”)的父路径就可以了,hhh5555,怪我把注解给忘得差不多了。