dbeaver配置SQL server连接

一、需要java jdk环境,我用的比较新 新的,那坑可就来了,先记着 cmd中 java --version出现版本号代表安装成功 二、dbeaver新建连接SQL server 点击测试连接会自动下载驱动,这个时候重点报错就开始出现了 错误一:DBeaver Windows中连接数据库出现Network Unavailable 这个有很多人说需要新增阿里云maven地址 https://maven.aliyun.com/repository/public/ 输入上述阿里云maven地址,应用并关闭 右键项目编辑连接再次测试驱动,网上有很多,不赘述。那就来说说我的 并没有成功,依旧报错,我就想着从根源上解决问题,直接去官网下了两个包加进去。 下载地址 解压出来 进入DBeaver=》编辑连接 编辑驱动设置=》库=》添加文件将解压出来的jar包添加进去,原有的删除掉=》确定 即添加成功 报错二 再次测试连接 The server selected protocol version TLS10 is not accepted by client prefere报错 全局搜索java.security文件 打开此文件找到jdk.tls.disabledAlgorithms=SSLv3 将其中的TLSv1, TLSv1.1配置删除掉即可,这2个配置是Java高版本中增加的,低版本不存在这2个配置 然后重启DBeaver,重新连接SqlServer 我还是没有成功!!! 报错三 ssl error :PKIX path building failed : sun.security.provider.certpath.SuncertPathBuilderException 这个问题是数据库开启了ssl,而连接数据库时未开启ssl 都看到这了,这个页面就不教怎么进了,应该驾轻就熟了 勾选使用SSL 确定即可! 再连接,成功! 分享一下喜悦,此为记录贴,搞了老半天搞好的。希望看到此的小伙伴能够解决自己的问题,祝你成功!

【前端规范】代码规约

目录: 一、HTML/Template 编码规范 二、CSS / Less 编码规范 三、JavaScript 编码规范 四、Vue 组件编码规范 五、代码风格(大部分工具自动化可以解决) 一、HTML/Template 编码规范 1 [强制] 缩进使用两个空格代替Tab 前端代码层级较深,使用短缩进有利于利用屏幕空间,提升效率,使用两个空格代替Tab可以保证在所有环境下获得一致展现。 <!-- not good --> <div> <div>bar</div> </div> <!- good --> <div> <div>bar</div> </div> 2 [强制]嵌套元素应当缩进一次(即两个空格),同层级缩进应保持一致 <!- not good --> <div> <div>bar</div> <div>bar</div> </div> <!- good--> <div> <div>bar</div> <div>bar</div> </div> 3.[强制]对于属性的定义,使用双引号,不要使用单引号 <!- not good --> <input class='a' type=text> <!- good--> <input class="a" type="text"> 4. [强制] 不要省略可选的结束标签(closing tag) (如</li>或</body>) 省略可选的结束标签,虽不会违反H5规范,但可能会造成层级上的困扰,导致代码出现无法预料的问题。 <!-- not good --> <h1>h1 text <h2>h2 text <!

1.入门matlab数理统计随机数的产生(matlab程序)

1.简述 一、常见分布的随机数的产生 随机数是专门的随机试验的结果。在统计学的不同技术中需要使用随机数,比如在从统计总体中抽取有代表性的样本的时候。而matlab直接提供了产生随机数的通用函数,但针对不同的分布,函数形式会有所不同,但通用公式如下: 命令:namernd(A,B,m,n) y = random(‘name’,A1,A2,A3, m, n) 说明:对于namernd(A,B,m,n)函数,m和n表示产生随机数的矩阵大小,例如m=1,n=1就表示产生一个随机数;m=2,n=2就表示产生一个2*2的随机数矩阵,name表示函数名。 下面表格列出了各种分布的随机数生成函数 函数名 调用形式 注 释 betarnd betarnd(A, B,m,n) 参数为A, B的β分布随机数 binornd binornd(N,P,m,n) 参数为N, p的二项分布随机数 chi2rnd chi2rnd(N, m, n) 自由度为N的χ 2 分布随机数 exprnd exprnd(Lambda,m,n) 参数为Lambda的指数分布随机数 frnd frnd(N1, N2, m,n) 第一自由度为N1,第二自由度为N2的F分布随机数 gamrnd gamrnd(A, B, m,n) 参数为A, B的γ分布随机数 geornd geornd(P,m,n) 参数为 P的几何分布随机数 hygernd hygernd(M,K,N,m,n) 参数为 M,K,N的超几何分布随机数 lognrnd lognrnd(MU, SIGMA, m, n) 参数为MU, SIGMA的对数正态分布随机数 nbinrnd nbinrnd(R, P,m,n) 参数为R, P的负二项式分布随机数 ncfrnd ncfrnd(N1, N2, delta,m,n) 参数为N1,N2, delta的非中心F分布随机数

基于docker部署前后端分离项目--->docker+Dockerfile+vue+nginx+uwsgi+django+socket+负载均衡

1. 介绍 本文基于阿里云服务器,安装的ubuntu20.04系统 适用于conten7.5系列适用于ubuntu16.04以上系列 vue已经打包完成,所以不能使用我的vue项目 2. 部署 部署步骤 # 下载到opt目录下 git clone https://gitee.com/yqmc/qq.git # 进入后端项目目录下 cd /opt/qq/qapi # uwsgi(配置在后面,必须与manage.py同一级) vim uwsgi.ini # Dockfile(配置在后面,必须与manage.py同一级) vim Dockerfile # 静态文件的收集 vim qapi/settings.py # 解开最后一行 如果没有添加,把这个添加进去# 静态文件的存放路径,STATIC_ROOT='/opt/static' # 进行静态文件收集 python3 manage.py collectstatic # 构建镜像 docker build -t='q_d' . # nginx的配置 # 创建目录用于挂载 mkdir -p /opt/nginx/conf /opt/nginx/logs touch /opt/nginx/conf/nginx.conf touch /opt/nginx/conf/default.conf touch /opt/nginx/logs/error.log touch /opt/nginx/logs/access.log # nginx做的事情 正向代理静态文件 正向代理django静态文件 反向代理转发 # 写入配置(配置在后面) vim /opt/nginx/conf/nginx.conf vim /opt/nginx/conf/default.

Visio Studio所用安装程序不完整,且找不到installer的解决方法

问题描述:本来想添加一个生成exe文件的拓展功能,但安装一半把电脑关机了,再次启动Visio studio时显示安装程序不完整。 目的:重新启动visual studio所用的安装程序 方法一:打开Visio studio对应的文件位置,在Microsoft Visual Studio文件位置中直接找到installer的文件夹,启动其中的vs_installer.exe文件,即可启动对应的安装程序。 方法二:打开visual studio对应文件后找不到对应的installer文件夹,只显示了一个对应版本号的2022文件夹。 这可能是由于移动了软件位置造成的下载包丢失,但可能存在于电脑中的其他位置。 此时可以通过直接搜寻此电脑中的vs_installer.exe,搜寻到之后将其启动,但搜寻的速度可能会有点满,可以使用第三种方法更快达到目的 笔者尝试在其中找寻2022文件夹中的installer文件,只找到名称相近但无法确定操作的VSIXInstaller文件,该文件无法启动。 方法三:使用腾讯电脑管家(其他的软件助手原理类似) 点击其中的软件市场 在软件市场中搜索已安装的Visual Studio并直接打开 便会直接跳转到vs_Installer.exe对应安装程序界面 关闭跳出的弹窗,并选择修复visual studio 修复结束后,重启电脑便可启动了。 【侵删】

前端工程化的开发过程

Vscode 应用 项目中的前端工具: vscode、hbuilder、webstorm 插件 使用chrome浏览器 Google Chrome 网络浏览器 测试 前端工程化 Node.js Node.js 是一个开源的、跨平台的 JavaScript 运行时环境。 下载 安装 · npm配置 ??: 如果网络慢,考虑配置淘宝镜像,类似于maven阿里云镜像。 vue-cli C:\Users\Administrator>npm install -g @vue/cli@4.5.15 D:\wnhz-web\wn-market>vue --version@vue/cli 4.5.15 vue项目 vue create 项目名称(wn-market-web) Vue CLI v4.5.15┌──────────────────────────────────────────┐│ ││ New version available 4.5.15 → 5.0.8 ││ Run npm i -g @vue/cli to update! ││ │└──────────────────────────────────────────┘? Please pick a preset: (Use arrow keys)> Default ([Vue 2] babel, eslint)Default (Vue 3) ([Vue 3] babel, eslint)Manually select features "

SQL.数据控制语言(DCL)

数据库中用户和权限管理的操作语言 ①创建用户 创建一个指定的ip地址 所属电脑 能够使用的账号 create user '账号名'@'ip地址' identified by '密码'; 创建一个任意ip地址的电脑都能连接本数据库的账号 create user '账号名'@'%' identified by '密码'; ②账号授权 给账号设置单个权限 grant 权限 on 仓库名. 表名 to '账号'@'ip地址'; 给账号授权多个权限 grant 权限1,权限2 on 仓库名.表名 to '账号'@'ip地址'; 给账号设置all 权限 grant all on *.* to '账号'@'ip地址'; ③撤销权限 revoke 权限,权限 on 仓库名.表名 from '账号名'@'ip地址'; ④修改密码 --修改其它用户密码 set password for '账号'@'ip地址' = password('新密码'); --修改当前账号的密码 set password=password('新密码'); ⑤删除用户 drop user '账号名'@'ip地址';

SQL.数据查询语言(DQL)

DQL语言(数据查询语言) 1、单表查询 (1)无条件查询 查询所有行中信息 查询行中的所有字段 select * from 表名; 查询行中的部分字段 select 字段名,字段名,字段名 from 表名; 例如: select name,sex from stu; (2)有条件查询 1.比较运算符条件查询 > 大于 select * from 表名 where 字段>值; < 小于 select * from 表名 where 字段<值; = 等于 select * from 表名 where 字段=值; >= 大于等于 <= 小于等于 != 不等于 select * from 表名 where 字段 != 值; 2.模糊查询 like like实现模糊查询,需要 通配符 配合 % : 匹配任意长度的任意字符 '张%' _ : 匹配单个任意字符 '张__' 模糊查询 select * from 表名 where 字段 like '%关键词' select * from 表名 where 字段 like '_关键词_' 3.

Stable-diffusion支持Intel和AMD显卡加速出图的操作方法

英伟达的显卡有CUDA加持Stable diffusion出图很快,但我无奈家徒四壁,只有AMD老显卡苦苦支撑着本不富裕的家庭,但是生活还是继续不是。来吧!兄弟,看看老显卡能不能加速出图就完事了。 说明,我在MacOs上操作成功,同时我也加了windows上操作步骤 目录 第一步,安装OpenVINO™开发工具。 第二步,启用inter、AMD显卡加持 实际结果比较 第一步,安装OpenVINO™开发工具。 1、创建一个虚拟Python环境以避免依赖项冲突。要创建一个虚拟环境,请使用以下命令: Linux和macOS python3 -m venv openvino_env Windows python -m venv openvino_env 2.激活虚拟环境 激活新创建的Python虚拟环境,发出此命令: Linux和macOS source openvino_env/bin/activate Windows openvino_env\Scripts\activate 重要提示 以上命令在打开新的命令终端窗口时必须重新运行。 3.设置和更新PIP到最高版本 确保在您的环境中安装了*pip*,并通过发出以下命令将其升级到最新版本: 4.安装软件包 Python要将OpenVINO Development Tools安装到现有环境中,并选择您选择的深度学习框架,请运行以下命令: pip install openvino-dev[onnx,pytorch]==2022.3.0 5.测试安装 为了验证软件包是否正确安装,请运行以下命令(这可能需要几秒钟): mo -h 如果安装成功,您将看到模型优化器的帮助消息。 第二步,启用inter、AMD显卡加持 1,下载补丁工具到stable-diffusion目录 https://github.com/bes-dev/stable_diffusion.openvino.git 2,确保程序能够升级成功,运行如下命令(也可以忽略本步骤) python -m pip install --upgrade pip pip install openvino-dev[onnx,pytorch]==2022.3.0 3,使用国内镜像,进行编译和加载依赖包 cd stable_diffusion.openvino python3 -m pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple 4,把GPU加速程序加载到stable-diffusion运行程序里 TORCH_COMMAND='pip install torch torchvision --extra-index-url https://download.

[BUG解决]MMCV CUDA Compiler : not available与RuntimeError: nms is not compiled with GPU support

问题描述: 在GFL复现过程中第一个Epoch结束后发现 RuntimeError: nms is not compiled with GPU support 在日志文件中发现: TorchVision: 0.8.1+cu110 OpenCV: 4.7.0 MMCV: 1.2.0 MMCV Compiler: GCC 7.3 MMCV CUDA Compiler: not available MMDetection: 2.6.0+ fatal: not a git repository (or any parent up to mount point /) Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set). 问题分析: MMCV没有驱动cuda,mmcv没驱动GPU 问题解决: 确保成功安装了torch的gpu版本确保mmcv的版本与自己的torch、cuda版本匹配(可以通过这里查找安装 MMCV — mmcv 1.7.1 文档MMCV 未与 CUDA 一起安装:MMCV_WITH_OPS=1 FORCE_CUDA=1 pip install mmcv-full 综上: 以我自己的版本举例: PyTorch: 1.7.0+cu110(编译环境要求mmcv<=1.3.0 则

YOLO v5目标检测模型

目录 1 YOLO v5模型结构 2 YOLO v5训练相关设置 3 目标检测模型评估指标 1 YOLO v5模型结构 YOLO v5模型根据其深度、宽度的差异可以分为四个不同规模的模型,分别为YOLO v5nano、YOLO v5samll、YOLO v5middle以及YOLO v5large,鉴于本文后续研究主要在YOLO v5nano以及YOLO v5small(后续简写为YOLO v5n与YOLO v5s)上开展,现将YOLO v5s的模型结构绘制如图2.3中所示。 图2.3 YOLO v5small结构示意图 结合图2.3可以看到,YOLO v5主要由三个大的结构组成,即骨干网络Backbone,Neck以及检测头Head部分。在Backbone中,主要是由CBR模块、CSP1模块以及SPPF模块组成。Backbone作为输入图片在检测网络中首先经过的阶段,其主要作用即提取图片中不同尺度下的特征,并作为输出提供给Neck部分。输入图片在预处理阶段被调整为像素大小为640×640的RGB三通道图像,在原YOLO v5网络中第一层为Focus层,即对输入为640×640×3的图片进行切片处理,输出为320×320×12的特征图,随后再进行后续模块的处理,在本研究中,为提升模型在GPU等硬件平台上的效率并便于后续部署,将该层替换为该模型中常见的CBR模块。CBR模块由卷积层、BN层以及ReLU激活函数层组成,为YOLO v5模型中最基础的模块。同样是为了便于在终端硬件上行的部署,已经原模型中SiLU激活函数全部替换为图2.3中的ReLU激活。CSP1模块的结构如图2.3右下角所示,其中包含了两个分支,即输入经过两个分支的处理后经Concat算子拼接后再经CBR模块处理。需要注意到,CSP1模块后缀的数值即表示在该模型的分支中出现残差块的数量,例如在YOLO v5s的Backbone中,CSP1模块中残差块的重复次数分别为1、2、3、1;残差块的结构如图2.3右上角所示,由两个CBR模块以及一个带有Shortcut的ADD操作构成,此处的带有Shortcut的ADD操作也被称为Skip-Connection操作,即完成残差模块中两个分支的相加运算。Backbone中还有一个SPPF模块,如图2.3右部所示,其由CBR模块以及三个串行的Maxpool最大池化组成,四路输出经Concat拼接,主要作用在于通过多次池化,完成对高层次语义特征的提取与融合。 观察图2.3中的Neck部分,可以显著地看到一个自上而下的通路与一个自下而上的通路,此即一个FPN+PAN的组合结构。其中FPN即特征金字塔网络(Feature Pyramid Network)[27],用来处理来自Backbone中多个尺度的输出,进而构建出高级语义特征信息,而PAN即通道聚合网络(Path Aggregation Network)[149],在FPN中传递的底层位置信息已经较为模糊的情况下,通过PAN的自底向上的结构,弥补并融合强定位信息,最终将输出用于Head的检测中。此外,在Neck阶段,还进行了两次上采样操作,在YOLO v5中均通过最简单的最近邻插值法来完成上采样,即均通过复制左上角的像素值来填充一个2×2窗口中的另外三个值,最终得到高、宽均扩展一倍的特征图。不同于Backbone中的CSP1模块,Neck阶段采用的是CSP2模块,如图2.3右下角所示,CSP2中将原CSP1中的残差块替换为两个连续的CBR模块,即没有了Skip-Connection操作。 在检测头Head中,其网络结构较为简单,仅含有三个并行的卷积层,当输入图片的大小被调整为640×640×3时,三个卷积层的输出分别为80×80×255、40×40×255以及20×20×255;其中80、40以及20均根据输入图片的像素大小而确定,分别下降8倍、16倍以及32倍;而其中的255则主要由四类信息决定,分别为锚框数量、数据集类目数目(所采用的MS-COCO数据集中共包含80个类别)、置信度以及边界框位置信息(边界框的中心点坐标以及宽、高值)。需要注意到,三个卷积层输出的特征图需要划分为与该特征图等尺寸的网格,例如20×20的特征图即划分为20×20个网格,每个网格对应到原输入图片中一个32×32的像素块。每个网格中会包含该尺度网格下对应的三个锚框的预测信息,综上可得等式255=3×(80+1+4) ,即每个预测框均含有85个相关信息。关于锚框的确定以及对检测头输出网格信息的处理将在下一节介绍。 2 YOLO v5训练相关设置 YOLO v5模型作为一种Anchor-based检测算法,其Anchor即锚框的尺寸设置对网络精度的提升极为关键。如上一节中所述,共有三个尺度的输出特征图,其中80×80的特征图中每个网格对应原图的像素块大小为8×8,包含的多为低层次信息,用于检测小目标,因此该尺度特征图对应的三个Anchor尺度均较小;而对于20×20的特征图,其对应到原图的像素块大小为32×32,可能包含了如结构、轮廓等高层次信息,适用于检测大目标;同理,40×40的特征图适用于检测中等大小的目标。基于上述原理,YOLO v5中利用聚类算法,在每次训练时都将根据所选数据集聚类得到9个不同的原始锚框比例,随后按照大小分别对应到三个尺度的输出特征图中。 训练时,将对输入网络的图片数据进行增强处理,主要包括三种,即缩放、色彩空间调整以及Mosaic(马赛克)增强。其中Mosaic增强主要是通过利用4张图片,进行随机裁剪与缩放,最终得到随机拼接而成的图片。Mosaic增强主要用来提高小目标的检测效果,在中,定义的小目标大小为低于32×32像素值的,中目标大小为低于96×96,高于32×32的,大目标为高于96×96的;通过利用Mosaic增强,随机增加了训练时的小目标数量,极大地缓解了MS-COCO数据集中小目标分布不均进而导致对小目标检测效果较差的问题。 YOLO v5在训练阶段的损失函数主要由三部分组成,分别为分类损失、回归损失以及置信度损失。其中分类损失与置信度损失均通过二元交叉熵函数计算(BCE With Logits Loss);回归损失则通过CIOU计算得到。IOU即交并比,是预测框与真实框交集与并集的比值,传统的IOU作损失函数主要存在两个问题,即当预测框与真实框完全无交集是,比值为0,但无法知道此时两框之间的距离,而当预测框完全位于真实框之中时,比值为固定值,此时同样无法知道预测框的具体位置,这两点都严重降低了目标检测的精度。鉴于此,此处采用了CIOU来计算回归损失,其计算式如式2.3中所示。 在CIOU中,不仅考了IOU与两框之间的中心点距离,还考虑了两框的相对比例。如式2.3中所示,b 与bgt 分别为预测框与真实框的中心点坐标,ρ 为两框之间的欧氏距离,c 则为两框并集所形成区域的对角线距离。 按照上一节所述,在检测头Head部分得到三个输出,其中共包含了80×80×3、40×40×3以及20×20×3个预测框的信息,即共25200个预测框,显然,其中绝大多数预测框中都没有包含目标,在YOLO v5模型中将通过NMS(Non-Maximum Suppression),即非极大值抑制来筛选预测框,最终留下包含有目标的预测框,如此即完成了一次对输入图片的目标检测过程。 3 目标检测模型评估指标 鉴于在目标检测任务中,检测的每张图片中都可能包含了不同数量、不同类别的目标,所以此时再沿用图像分类任务中的评估指标precision已经不合适,而需要一个指标可同时评估模型的分类与定位性能,如此即用到了mAP评估指标,本节将详解介绍mAP的计算过程。 首先需要计算precision(精确率/查准率)、recall(召回率/查全率)以及AP(Average Precision,平均精度),前两个评估指标的计算则涉及到TP、FP等指标的计算,如表2.1中所示。 表2.1 TP/FP/FN/TN指标分类简述 类别 与置信度阈值Pthre的关系 与交并比阈值IOUthre的关系

flink sql primary key

flink sql 添加主键DDL案例: 我们以mysql为例 -- 创建source表映射,注意:这里并不是真正的创建物理表,而是该表在数据库中已经存在。 create table source( id bigint, name STRING, PRIMARY KEY (id) NOT ENFORCED )with (); -- 创建sink表映射 create table sink( id bigint, name STRING, PRIMARY KEY (id) NOT ENFORCED )with (); -- 将source表中的数据同步到sink表 insert into sink select * from source; 添加主键带来的效果如下: 1、当sink表为空表时,source表的数据会全部追加到sink表。 2、当sink表中有数据时,source表的数据会把全量数据同步到sink表,并且会覆盖原有的数据。例如 同步数据之后会把相同主键的value值覆盖掉。例如 flink sql 不添加主键DDL案例: -- 创建source表映射,注意:这里并不是真正的创建物理表,而是该表在数据库中已经存在。 create table source( id bigint, name STRING )with (); -- 创建sink表映射 create table sink( id bigint, name STRING )with (); -- 将source表中的数据同步到sink表 insert into sink select * from source; 不添加主键的效果如下: 1、当sink表为空表时,会将source表的全部数据进行同步 2、当sink表中有数据时,(当mysql表中存在id为主键的情况下)不会将原有数据进行覆盖。例如: 注意:当mysql表中设置以id为主键时,不会把原有的数据覆盖,而是把没有的主键数据(增量数据)同步进来,不过这种情况会报错,原因是主键冲突。当mysql表中没有设置id为主键时,flink会把source表的数据以追加的方式追加到sink表。

Python网络爬虫实战

Python网络爬虫实战:从初学者到高级应用 1. 介绍 简要介绍网络爬虫的概念和作用。引入Python作为网络爬虫的首选语言。 2. 环境设置 安装Python解释器和相关依赖库(如requests、beautifulsoup、selenium等)。配置开发环境(如使用PyCharm等)。 3. 网络请求 使用requests库发送HTTP请求,获取网页内容。处理不同类型的请求(GET、POST等)。处理请求头和cookies。 4. 解析网页内容 使用beautifulsoup库解析HTML文档。提取所需的数据,如链接、文本等。使用CSS选择器或XPath定位元素。 5. 数据存储 将提取的数据存储到本地文件或数据库。使用适当的数据结构(如字典、列表等)组织数据。 6. 高级应用:动态网页爬取 使用selenium库模拟浏览器行为。处理JavaScript渲染的网页。提取动态生成的数据。 7. 防止反爬机制 设置合适的请求头,模拟浏览器行为。处理验证码和登录验证。使用IP代理和User-Agent轮换等技术。 8. 实战示例:爬取电商网站商品信息 选择目标网站和页面。发送请求并解析网页内容。提取商品信息并存储到数据库。 9. 示例代码: import requests from bs4 import BeautifulSoup # 发送HTTP请求 response = requests.get('https://example.com') html = response.text # 解析HTML文档 soup = BeautifulSoup(html, 'html.parser') # 提取网页标题 title = soup.title.text print('网页标题:', title) # 提取所有链接 links = soup.find_all('a') for link in links: print(link['href']) # 提取特定元素 content = soup.find('div', class_='content') print('内容:', content.

如何在Ubuntu 22.04上安装KVM?

Kernel-based Virtual Machine(KVM)是Linux内核中的一个虚拟化模块,它允许内核作为一个虚拟机监视器(hypervisor)工作。今天,我们将探讨如何在Ubuntu机器上安装KVM。我们将使用Ubuntu的最新版本,22.04。安装将通过命令行进行。我们将运行基本的Linux命令来安装KVM及其必要的依赖项。在本教程结束时,你将知道在你的系统上安装KVM是多么容易。 安装指南 以下是在Ubuntu 22.04上安装KVM的步骤: 步骤1:更新和升级你的Ubuntu 22.04系统 在你的系统上安装KVM之前,先更新和升级系统。 使用以下命令更新系统: sudo apt update 接下来,使用以下命令升级系统: sudo apt upgrade 步骤2:检查你的系统与KVM的兼容性 在安装KVM之前,确保KVM与你的系统兼容。否则,你将不断遇到错误,KVM也无法正确安装。 要检查两者之间的兼容性,运行此命令: egrep -c '(vmx|svm)' /proc/cpuinfo 如果你得到的输出大于0,那么意味着KVM与系统兼容,可以安装。 步骤3:安装KVM所需的包 现在我们已经确认了兼容性,让我们开始使用以下命令安装必要的KVM依赖项: sudo apt install qemu-kvm libvirt-daemon-system virtinst libvirt-clients bridge-utils 步骤4:启用虚拟化所需的服务并检查它们的状态 成功安装必要的依赖项后,让我们启用需要进行虚拟化的服务。使用以下命令启用livirtd: sudo systemctl enable libvirtd 现在通过发出以下命令启动libvirtd: sudo systemctl start libvirtd 让我们使用下面提到的命令验证libvirtd的状态。如果它运行正常,你将在输出中看到'active'。 sudo systemctl status libvirtd 步骤5:将你的用户添加到KVM和Libvirt组 现在将你的用户添加到KVM和libvirt组,以便启动KVM并避免遇到问题。可以使用此命令将用户添加到KVM组: sudo usermod -aG kvm $USER 现在使用此命令将用户添加到libvirt组: sudo usermod -aG libvirt $USER 步骤6:为虚拟机(VMs)创建一个桥接网络 在这一步,我们将创建一个桥接网络。这可以通过创建一个netplan配置文件来完成: sudo nano /etc/netplan/01-netcfg.yaml 现在在01-netcfg.

MacOS13+系统运行Stable Diffusion出现的问题及解决方法汇总

目录 先睹为快 开发环境 问题一,点“生成”按钮就退出程序 问题二、生成的图片是马赛克 第一步:解决环境问题 第二步:更新指定的torch版本包 步骤一:更新指定的torch包: 步骤二:重新安装pytorch-nightly版本的包: 问题三:正确的启动webui.sh 先睹为快 开发环境 硬件:基于Intel的CPU,AMD7970显卡,同样适用于所有AMD的GPU 软件:python3.10,torch==1.12.1 torchvision==0.13.1 或者:python3.11 torch==2.0.1 torchvision==0.15.2 问题一,点“生成”按钮就退出程序 报错如下: loc("varianceEps"("(mpsFileLoc): /AppleInternal/Library/BuildRoots/a0876c02-1788-11ed-b9c4-96898e02b808/Library/Caches/com.apple.xbs/Sources/MetalPerformanceShadersGraph/mpsgraph/MetalPerformanceShadersGraph/Core/Files/MPSGraphUtilities.mm":219:0)): error: input types 'tensor<1x77x1xf16>' and 'tensor<1xf32>' are not broadcast compatible LLVM ERROR: Failed to infer result type(s). 解决方法:修改webui-macos-env.sh 原来的内容: export COMMANDLINE_ARGS="--skip-torch-cuda-test --upcast-sampling --no-half-vae --use-cpu interrogate" 修改为: export COMMANDLINE_ARGS="--skip-torch-cuda-test --upcast-sampling --no-half-vae --use-cpu interrogate --no-half" 或者在启动webui.sh里添加参数: >>./webui.sh --no-half 问题二、生成的图片是马赛克 效果: 第一步:解决环境问题 这个产生的原因很多,不过第一步,你应该先检查你的python环境,保证当前启动的python版本和pip版本是一致的。 检查方法: >>python3 --version Python 3.11.4 >>pip3 --version pip 23.

FPGA通过一个按键控制三个LED灯亮灭(状态机法)

FPGA型号:Cyclone IV EPFCE10F17C8 开发工具:Quartus13.0专业版 Modelsim 10.1d 文章目录 状态机一、设计思路二、代码设计 1.顶层代码2.测试代码三、仿真 状态机 状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作、完成特定操作的控制中心。状态机的4个要素:现态、条件、动作、次态。“现态”和“条件”是因 ,“动作”和“次态”是果。 1)现态:指当前所处状态; 2)条件:又称“事件”。当条件被满足时,将会触发一个动作,或者执行一次状态的迁移。 3)动作:条件满足后执行的动作。条件满足后执行的动作。动作执行完毕后,可以迁移到新的状态,也可以仍旧保持原状态。动作不是必须的,当条件满足后,也可以不执行任何动作,迁移到新状态。 4)次态:条件满足后要迁往的新状态。“次态”是相对于“现态”而言的,“次态”一旦被激活,就变成新的“现态”了。 有限状态机简写为FSM(Finite State Machine),主要分为2大类: 第一类,若输出只和状态有关而与输入无关,则称为Moore状态机。 第二类,输出不仅和状态有关而且和输入有关系,则称为Mealy状态机 常用的三段式状态机的设计思路为: 1)一段式:利用一个进程来描述状态的转换及输出信号的定义; 2)二段式:一个为时序电路主要负责状态变量的更新,此进程为同步电路,而另一个进程语句主要是描述下次态变量和输出的更新; 3)三段式:第一个进程主要负责状态变量的更新,第二个进程语句负责描述次态变量,而最后一个则是负责输出信号的更新。 一、设计思路 FPGA实现一个按键控制三个LED灯亮灭的状态机如图所示。在初始状态下,LED灯全部处于熄灭状态。当按键被按下时,会启动消抖程序,默认按键按下时,延迟10ms,若按键仍处于低电平,则说明按键确实被按下,系统进入进入状态1,即LED_r处于低电平,红色LED灯亮起,并保持。当按键再次被按下时,继续进行消除抖动检测,若满足,则系统进入状态2,即LED_g处于低电平,绿色LED灯亮起,并保持。同理,当系统进入状态3时,LED_b处于低电平,蓝色LED灯亮起,并保持。当系统复位时,系统返回至初始状态。 时序图如图所示: 二、代码 1.顶层代码 `timescale 1ns/1ps //模块定义 module FSM( clk, rst_n, key, led_r, led_g, led_b ); //输入输出 input clk; input rst_n; input key; output led_r; output led_g; output led_b; //信号类型定义 parameter ms_10 = 250_000; reg key_en; reg [17:0] low_cnt; reg [17:0] hig_cnt; reg [1:0] led_cnt; reg led_r; reg led_g; reg led_b; wire key_flag; //按键消抖 always @ (posedge clk or negedge rst_n) begin if (!

山东大学(威海)2022-2023-2 高级程序设计语言 PTA作业 1-3章

山东大学(威海)2022-2023-2 高级程序设计语言 PTA作业 1-3章 一、单选题 1-1 分数 2 作者 王秀 单位 福州大学 若变量已正确定义并赋值,表达式 -k++ 等价于( )。 A. -(k++) B. -(k+1) C. -(++k) D. (-k)++ 答案:A. -(k++) 分析:k后++为后缀自增运算符,k前-为符号代表正负,++,--的优先级要高于正负号的优先级,故-k++等价于-(k++)。 1-2 分数 2 作者 王秀 单位 福州大学 若x为浮点型,则表达式x=10/4为( ) A. 2.5 B. 2.0 C. 2 D. 3 答案:B. 2.0 分析:x为浮点型,C,D为整型排除,10与4皆为整型,整型除整型只能得到整型,所以省略小数部分,即实际10/4=2.5在程序中为10/4=2,由于x为浮点型,则此处x=2.0。 以下为程序验证: #include <stdio.h> int main() { float x; printf("x = %f ",x=10/4); return 0; } 程序运行结果: 1-3 分数 2 作者 王秀 单位 福州大学

数组转字符串

int fib[10]; 。。。 char str[100] = {'\0'}; char stm[100] = {'\0'}; for(int s = 0;s <= num - 1;s ++) { sprintf(str,"%d",fib[s]); strcat(stm,str); strcat(stm," "); } memset(stm, 0, sizeof(stm)); memset(str, 0, sizeof(str)); 字符串数组或者整数数组,转换为字符串输出。 int yfini_get_number(const char *ptitle,const char* psubname,const char *pinipath,int *pgetvalue) { int nresult=0; char cbuf[255]={0},ctitlebuf[255]={0}; char *ppoint; FILE *fp; strcat(ctitlebuf,"["); strcat(ctitlebuf,ptitle); strcat(ctitlebuf,"]"); if((fp = fopen(pinipath,"r"))==NULL) { yflog_locallog_error("yfini_get_number %s error!",psubname); return YF_LOG_ERROR; } while ((fgets(cbuf,sizeof(cbuf),fp))!=NULL) { if(cbuf[0]=='#') continue; if((strncmp(cbuf,ctitlebuf,strlen(ctitlebuf)))==0) { memset(cbuf,0,sizeof(cbuf)); while ((fgets(cbuf,sizeof(cbuf),fp))!

oracle和kingbase的sql语法区别

kingbase对oracle的sql语法支持度据说达到97%。但有些语句仍会报错,需要改写: 1.oracle 的位图索引 kingbase 语法: create bitmap index INX_EHR_RECORD_PHRID on EHR_RECORD (MOVETYPE); 变为: create index INX_EHR_RECORD_PHRID on EHR_RECORD using bitmap(MOVETYPE); 2.oracle 修改字段类型 默认值语法,kingbase: alter table EMR_YZDY_TEMP modify dyym NUMBER(4) default 0; 变为: alter table EMR_YZDY_TEMP modify dyym NUMBER(4); alter table EMR_YZDY_TEMP modify dyym default 0;

机器学习实战 | emojify 使用Python创建自己的表情符号(深度学习初级)

目录 简介技术流程1. 加载依赖包2. 初始化训练和验证生成器3. 建立网络结构4. 编译和训练模型5. 保存模型权重6. 输出预测结果 完整程序1. train.py程序2. gui.py程序 简介 准备写个系列博客介绍机器学习实战中的部分公开项目。首先从初级项目开始。 本文主要介绍机器学习项目实战之训练和创建自己的表情符号。项目原网址为:Emojify – Create your own emoji with Deep Learning。 这个外文网址中的一些链接打不开,因此这里给出程序中用到的相关文件并且给出部分程序分析,希望能够帮大家从0构建深度学习项目。 技术流程 Emojify – Create your own emoji with Deep Learning, 该机器学习项目的目的是对人的面部表情进行分类并将其映射为表情符号。 程序中将建立一个卷积神经网络来识别面部表情,然后将使用相应的表情符号或头像来映射这些情感。 以下图为例,左侧摄像头实时拍摄到人脸照片,右侧显示检测结果“surprised”,并将其映射为表情符号。 1. 加载依赖包 import numpy as np import cv2 from keras.models import Sequential from keras.layers import Dense, Dropout, Flatten from keras.layers import Conv2D from keras.optimizers import Adam from keras.layers import MaxPooling2D from keras.preprocessing.image import ImageDataGenerator 解析:

整数区间----贪心2 (爱思创)

题目描述 请编程完成以下任务: 1. 从文件中读取闭a区间的个数及它们的描述; 2. 找到一个含元素个数最少的集合,使得对于每一个区间,都至少有一个整数属于该集合,输出该集合的元素个数。 输入格式 首行包括区间的数目n(1<=n<=10000); 接下来的n行,每行包括两个用空格隔开的整数a,b(0<=a<=b<=10000),它们是某一个区间的开始值和结束值。 输出格式 一行一个数,答案。 样例输入a 4 3 6 2 4 0 2 4 7 样例输出 2 问题提示 源代码 #include <bits/stdc++.h> using namespace std; struct node{ int s,t; }a[10010]; int cmp(node x,node y){ return x.t<y.t; } int main(){ int n; cin>>n; for(int i=1;i<=n;i++){ cin>>a[i].s>>a[i].t; } sort(a+1,a+n+1,cmp); int ans=1,last=a[1].t; for(int i=2;i<=n;i++){ if(a[i].s>last){ ans++; last=a[i].t; } } cout<<ans<<endl; return 0; }

关于Spring Aop的深入理解

一、简介 1.AOP定义 AOP就是 面向切面编程,AOP 是一种编程思想,是面向对象编程(OOP)的一种补充,是Spring 一个重要的核心。 2.AOP作用 AOP主要作用是分离功能性需求和非功能性需求,使开发人员可以集中处理某一个关注点或者横切逻辑,减少对业务代码的侵入,增强代码的可读性和可维护性。 3.AOP应用场景 比较典型应用有: 可以做接口日志记录可以做事务管理可以做接口的权限验证可以做性能监测 4.AOP 实现原理 AOP 保证开发者不修改源代码的前提下,为系统中的业务组件添加某种通用功能。AOP 的本质是由 AOP 框架修改业务组件的源代码,达到增强功能的目的。AOP可以将其分为两类: 静态 AOP 实现:AOP 框架在编译阶段对程序源代码进行修改,生成了静态的 AOP 代理类(生成的 *.class 文件已经被改掉了,需要使用特定的编译器),比如 AspectJ。动态 AOP 实现:AOP 框架在运行阶段动态生成代理对象(在内存中以 JDK 动态代理,或 CGlib 动态地生成 AOP 代理类),如 SpringAOP。 4.AOP核心概念 在正式讲解 AOP 的操作之前,我们必须理解 AOP 的相关术语,常用术语如下: Target(目标对象):代理的目标对象Proxy (代理):一个类被 AOP 织入增强后,就产生一个结果代理类Joinpoint(连接点):所谓连接点是指那些被拦截到的点。在spring中,这些点指的是方法,因为spring只支持方法类型的连接点Pointcut(切入点):所谓切入点是指我们要对哪些 Joinpoint 进行拦截的定义Advice(通知/ 增强):所谓通知是指拦截到 Joinpoint 之后所要做的事情就是通知Aspect(切面):是切入点和通知(引介)的结合Weaving(织入):是指把增强应用到目标对象来创建新的代理对象的过程。spring采用动态代理织入,而AspectJ采用编译期织入和类装载期织入 Spring AOP 通知分类: before(前置通知) :通知方法在目标方法调用之前执行。after(后置通知):通知方法在目标方法返回或异常后调用。after-returning(返回后通知):通知方法会在目标方法返回后调用。after-throwing(抛出异常后通知):通知方法会在抛出异常后调用。around(环绕通知):通知方法会将目标方法封装起来。 5.Spring AOP的实现原理 Spring AOP 采用了两种混合的实现方式:JDK 动态代理和 CGLib 动态代理。 JDK动态代理 Spring默认使用JDK的动态代理实现AOP,类如果实现了接口,Spring就会使用这种方式实现动态代理。 JDK实现动态代理需要两个组件,首先第一个就是InvocationHandler接口,另一个是Proxy类。 我们在使用JDK的动态代理时,需要编写一个类,去实现这个接口,然后重写invoke方法,这个方法其实就是我们提供的代理方法。代码如下所示:

关于金额(包含外币)转大写的使用

@TOC 在遇到相关需求,需要将金额转成中文大写, 此前遇到类似,都是前端进行转换,故整理记录一下后端实现. 1 自定义实现方案 /** * 把输入的金额转换为汉语中人民币的大写 */ public class NumberToCN { // 大写数字 private static final String[] NUMBERS = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"}; // 整数部分的单位 private static final String[] IUNIT = {"元", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟", "万", "拾", "佰", "仟"}; // 小数部分的单位 private static final String[] DUNIT = {"角", "分", "厘"}; /** * 转换为大写的中文金额 * * @param str 字符串类型的 金额数字 * @return */ public static String toChinese(String str) { // 判断输入的金额字符串是否符合要求 if (StrUtil.

A Survey on Evaluation of Large Language Models

这是LLM相关的系列文章,针对《A Survey on Evaluation of Large Language Models》的翻译。 大型语言模型评价综述 摘要1 引言2 背景2.1 大语言模型2.2 AI模型评估 3 评估什么3.1 自然语言处理任务3.1.1 自然语言理解3.1.2 推理3.1.3 自然语言生成3.1.4 多语言任务3.1.5 事实 3.2 健壮、道德、偏见和可信度3.2.1 健壮性3.2.2 道德和偏见3.2.3 可信度 3.3 社会科学3.4 自然科学与工程3.4.1 数学3.4.2 一般科学3.4.3 工程 3.5 医学应用3.5.1 医学QA3.5.2 医学检验3.5.3 医学教育3.5.4 医学助手 3.6 代理应用3.7 其他应用3.7.1 教育3.7.2 搜索与推荐3.7.3 人格测试3.7.4 特定应用 4 在哪里评估:数据集与基准4.1 一般任务基准4.2 特定下游任务基准 5 如何评估5.1 自动评估5.2 人类评估 6 总结6.1 任务:LLM成功和失败的案例6.1.1 LLM能做得好的地方6.1.2 LLM什么时候会失败 6.2 基准和评估协议 7 重大挑战7.1 设计AGI的基准7.2 完整的行为评估7.3 鲁棒性评估7.4 动态和演化评估7.5 原则和可信评估7.6 支持所有LLM任务的统一评估7.7 超越评估:LLM增强 8 结论 摘要 大型语言模型(LLM)由于其在各种应用中前所未有的性能,在学术界和工业界都越来越受欢迎。随着LLM在研究和日常使用中继续发挥重要作用,其评估变得越来越重要,不仅在任务层面,而且在社会层面,以更好地了解其潜在风险。在过去的几年里,我们做出了重大努力,从不同的角度来调研LLM。本文对LLM的这些评估方法进行了全面的回顾,重点关注三个关键维度:评估什么、在哪里评估以及如何评估。首先,我们从评估任务的角度进行了概述,包括一般的自然语言处理任务、推理、医学使用、伦理、教育、自然科学和社会科学、代理应用和其他领域。其次,我们通过深入研究评估方法和基准来回答“在哪里”和“如何”的问题,这些方法和基准是评估LLM绩效的关键组成部分。然后,我们总结了LLM在不同任务中的成功和失败案例。最后,我们阐明了LLM评估未来面临的几个挑战。我们的目标是为LLM评估领域的研究人员提供宝贵的见解,从而帮助开发更熟练的LLM。我们的重点是,评估应被视为一门基本学科,以更好地帮助LLM的发展。我们将一致地相关开源材料保存在:https://github.

在idea中添加mapper.xml文件模板

文章目录 1、创建模板2. 创建mapper.xml文件 1、创建模板 打开创建模板页面 位置:File-》Settings-》Editor-》File and Code Templates 点击+号,新建模板,填入Name(随意)、Extension(必须为xml) 填入模板内容: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace=""> </mapper> 最后 点击 apply 、ok 大功告成 2. 创建mapper.xml文件 填入映射mapper接口文件即可编写sql。

第三章:Linux简介及面试常问问题

目录 一、Linux发展史 1.Linux前身-Unix 2.Linux诞生 3.开源文化 4.Linux系统特点 5.Linux操作系统优点 6.Linux操作系统发行版 7.Linux内核命名规则 二、Linux系统的安装 三、linux系统分区简介及如何分区 1.自动分区 2.手动分区 3.linux下查看分区信息和剩余空间大小 五、Linux系统的文件目录结构 六、目录结构与磁盘管理 七、如何挂载外部设备(例如U盘) 1.企业中服务器品牌DELL R7300,其硬盘总容量为300G,现需要安装CentOS7 Linux操作系统,请问如何分区? 2.GNU与GPL的区别是什么? 3.Linux内核显示:3.10.0-327.36.3.el7.x86_64,分别说出点号分割的每个数字及字幕的含义? 4.如何在Linux系统/tmp目录下快速创建1000个目录、目录名为test1、test2、test3… 一、Linux发展史 1.Linux前身-Unix 1968年 Multics项目 MIT、Bell实验室、美国通用电气有限公司走到了一起,致力于开发Multics项目。到后期由于开发进度不是很好,MIT和Bell实验室相继离开这个项目的开发,最终导致项目搁浅。 1970年(Unix元年,时间戳) Unix诞生 当时在开发Multics项目的时候,实验室中有一个开发成员开发了一款游戏(travelspace:遨游太空),因为两个实验室相继离开项目开发,导致这名开发人员没法玩游戏,后来他提议组织人员重新在Multics项目之上重新的开发,也就出现了1970年的Unix。当时Unix操作系统是使用的汇编语言(机器语言)开发的。 1973年 用C语言重写Unix 因为汇编语言有一个最大的局限性:对于计算机硬件过于依赖。导致移植性不好,所以后期在1973年使用了C语言对其进行重新开发。 1975年 Bell实验室允许大学使用Unix。 1975年 bell实验室允许大学使用Unix操作系统用于教学作用,而不允许用于商业用途。 2.Linux诞生 Linux的开发作者,Linux之父,李纳斯·托瓦兹。Linux诞生时是荷兰在校大学生。 1991年 0.0.1版本 李纳斯当时学校使用的就是Unix操作系统,然后其对系统的底层代码进行了修改,放到了学校为学生开放的网站上,原先他把文件命名写成了Linus’s Unix,后期网络管理发现之后觉得这个名字不好,自己手动的将名字改成Linux。随后其他同学下载之后发现这个版本还是挺好用的,随后都把自己代码贡献给李纳斯。 3.开源文化 Linux是开源的操作系统。所谓开源就是指开放源代码。 4.Linux系统特点 开放性(开源)、多用户、多任务、良好的用户界面、优异的性能与稳定性 多用户多任务: 单用户:一个用户,在登录计算机(操作系统),只能允许同时登录一个用户; 单任务:一个任务,允许用户同时进行的操作任务数量; 多用户:多个用户,在登录计算机(操作系统),允许同时登录多个用户进行操作; 多任务:多个任务,允许用户同时进行多个操作任务; Windows属于:单用户、多任务。 Linux属于:多用户、多任务。 5.Linux操作系统优点 系统迭代更新,系统性能稳定,安全性高多任务,多用户,耗资源少,内核小,应用领域广泛 6.Linux操作系统发行版 学习Linux操作系统,需要选择不同的发行版本,Linux操作系统是一个大类别,Linux操作系统主流发行版本包括:Red Hat Linux、CentOS、Ubuntu、SUSE Linux、Fedora Linux等CentOS社区企业版操作系统(Community Enterprise Operating System,CentOS)是Linux发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码所编译而成

Python毕业设计推荐

今天给大家推荐几个基于python/django的毕业设计/课程设计。 1. 网上商城系统 这是一个基于python+vue开发的商城网站,平台采用B/S结构,后端采用主流的Python语言进行开发,前端采用主流的Vue.js进行开发。 整个平台包括前台和后台两个部分。 前台功能包括:首页、商品详情页、用户中心模块。 后台功能包括:总览、订单管理、商品管理、分类管理、标签管理、评论管理、用户管理、运营管理、日志管理、系统信息模块。 源码地址: https://github.com/geeeeeeeek/shop 2.在线视频点播网站 一个视频点播网站,因为笔者非常喜欢观看视频,尤其是YouTube、bilibili都是笔者非常喜欢的视频网站,所以想自己实现一个简单的视频点播网站,学以致用。本项目分为前台和后台。 前台功能:视频列表展示、视频播放详情、详情评论、个人中心 后台功能:视频管理、评论管理、用户管理、反馈管理 源码下载: https://github.com/geeeeeeeek/videoproject/ 3.在线图书借阅系统 这是一个基于python+vue开发的图书借阅网站。平台采用B/S结构,后端采用主流的Python语言进行开发,前端采用主流的Vue.js进行开发。 整个平台包括前台和后台两个部分。 前台功能包括:首页、图书详情页、用户中心模块。 后台功能包括:总览、借阅管理、图书管理、分类管理、标签管理、评论管理、用户管理、运营管理、日志管理、系统信息模块。 源码下载: https://github.com/geeeeeeeek/book 4.电影链接搜索网站 该项目是基于python的web类库django开发的一套web网站,给同学做的毕业设计。本人的研究方向是一项关于搜索的研究项目。在该项目中,笔者开发了一个简单版的搜索网站,实现了对数据库数据的检索和更新。通过开发该项目,笔者学习和巩固了python的相关技术和框架。 源码下载: https://github.com/geeeeeeeek/bt 5.基于python的租房网站-房屋出租租赁系统 该项目是基于python/django/vue开发的房屋租赁系统/租房平台,作为学生的课程作业作品。内容制作非常精良。 源码下载: https://github.com/geeeeeeeek/python_zf 6.基于python的家教预约网站-家教信息平台系统 该项目是基于python/django/vue开发的家教信息平台,作为家长和学生请家教的平台。整个平台包括前台和后台两个部分。前台功能包括:首页、家教详情页、用户中心、家教入驻模块。后台功能包括:总览、家教管理、分类管理、标签管理、评论管理、用户管理、运营管理、日志管理、系统信息模块。 源码下载: https://github.com/geeeeeeeek/python_jiajiao 7.基于python+django的外卖点餐系统 该系统是基于python+django开发的外卖点餐系统。适用场景:大学生、课程作业、毕业设计。学习过程中,如遇问题可以在github给作者留言。平台采用B/S结构,后端采用主流的Python语言+django框架进行开发,前端采用主流的Vue.js进行开发。 整个平台包括前台和后台两个部分。 前台功能包括:首页、菜品详情页、订单中心、用户中心模块。后台功能包括:总览、订单管理、菜品管理、分类管理、标签管理、评论管理、用户管理、运营管理、日志管理、系统信息模块。 源码下载: https://github.com/geeeeeeeek/python_food 8.基于python+django的酒店预定网站-酒店客房管理系统 该系统是基于python+django开发的酒店预定管理系统。适用场景:大学生、课程作业、毕业设计。学习过程中,如遇问题可在github给作者留言。 整个平台包括前台和后台两个部分。 前台功能包括:首页、客房详情页、订单中心、用户中心模块。后台功能包括:总览、订单管理、客房管理、房间分类管理、标签管理、评论管理、用户管理、运营管理、日志管理、系统信息模块。 源码下载: https://github.com/geeeeeeeek/python_hotel 9.基于python+django的旅游信息网站-旅游景点门票管理系统 该系统是基于python+django开发的旅游景点门票管理系统。是给师弟做的课程作业。 平台采用B/S结构,后端采用主流的Python语言+django框架进行开发,前端采用主流的Vue.js进行开发。 整个平台包括前台和后台两个部分。 前台功能包括:首页、景区详情页、门票购买、用户中心模块。后台功能包括:总览、订单管理、景区管理、分类管理、标签管理、评论管理、用户管理、运营管理、日志管理、系统信息模块。 源码下载: https://github.com/geeeeeeeek/python_travel 10.基于python+django开发的宠物商店-宠物管理系统设计与实现 该系统是基于python+django开发的宠物商店-宠物管理系统。是给师妹开发的课程作业。现将源码开放给大家。 整个平台包括前台和后台两个部分。 前台功能包括:首页、宠物详情页、用户中心模块。后台功能包括:总览、订单管理、宠物管理、分类管理、标签管理、评论管理、用户管理、运营管理、日志管理、系统信息模块。 源码下载: https://github.com/geeeeeeeek/python_pet 11.基于python+django的二手商品交易平台-二手商品供需系统 该项目是基于python的web类库django开发的一套web网站,二手商品交易平台,给师弟开发的课程作业。 源码下载: https://github.com/geeeeeeeek/mask 12.基于django开发的视频点播网站 平台采用B/S结构,后端采用主流的Python语言进行开发,前端采用主流的Vue.js进行开发。 整个平台包括前台和后台两个部分。 前台功能包括:首页、视频列表页面、视频详情页、用户中心模块。后台功能包括:总览、视频管理、分类管理、标签管理、评论管理、用户管理、运营管理、日志管理、系统信息模块。 源码下载: https://github.com/geeeeeeeek/python_video

CentOS7 静默方式安装 Oracle19C

CentOS7 静默方式安装 Oracle19C 操作系统:CentOS7 Oracle: 19C 安装常用工具和依赖 yum -y install vim tar net-tools wget perl python3 readline* deltarpm python-deltarpm \ zip unzip bc compat-libcap1* compat-libcap* binutils compat-libstdc++-33 \ elfutils-libelf elfutils-libelf-devel gcc gcc-c++ glibc-2.5 glibc-common glibc-devel \ glibc-headers ksh libaio libaio-devel libgcc libstdc++ libstdc++-devel make sysstat \ unixODBC unixODBC-devel binutils* compat-libstdc* elfutils-libelf* \ gcc* glibc* ksh* libaio* libgcc* libstdc* make* sysstat* libXp* glibc-kernheaders 绑定主机名和IP映射 # 修改主机名 hostnamectl set-hostname oracle # 绑定主机名和IP映射 vim /etc/hosts 填写以下内容

【vant】打开vant表单的正确形式(基于vant表单的二次封装)

前言 最近在用vant做关于移动端的项目,由于表单字段太多,不想写直接写到template中,这样太繁琐了,所以我们以把表单弄成schema配置形式: // data.ts import type { ItemSchema } from '@/typing/helper'; import { StudentField } from '@/components'; import { getDictTextByCode } from '@/data/dict'; import { textField, switchField, dividerField, dictField, selectField, entityField, } from '@/helpers'; export const baseFormSchema: ItemSchema[] = [ dividerField('普通文本'), textField('name', '姓名', { required: true }), dividerField('文本域'), textField('address', '地址', { type: 'textarea' }), dividerField('是否字段'), switchField('isMarried', '是否婚配'), dividerField('字典选择'), dictField('marital', '婚姻情况', 'marital'), dividerField('select'), selectField('way', '交通工具', [ { text: '汽车', code: 1 }, { text: '步行', code: 2 }, ]), dividerField('实体选择(学生)'), entityField('studentId', '学生', StudentField, { change(record) { console.

linux系统创建新用户

一般情况下linux系统创建、删除新用户主要有以下几种方式: 1. 创建新用户:useradd 用户名,删除用户:userdel 用户名 2. sudo useradd -m 用户名,删除用户:sudo userdel -r 用户名(可以直接删掉用户和该用户的系统文件) 3.adduser 用户名,删除用户:userdel -r 用户名(可以直接删掉用户和该用户的系统文件) 这两种方式的区别: 第一种方式:只是建立了一个新的用户名,并没有在/home目录下创建同名文件,利用这个用户登陆系统是登陆不了的 第二种方式:在建立了新用户名的同时,也会在/home目录下创建一个同名文件,可以利用“passwd 用户名“来为指定用户创建密码 第三种方式:是useradd等类似底层命令的更友好的前端,它会用交互性的方式建立新用户,使用它可以指定新用户的家目录,登录密码,是否加密主目录等等,也会在/home目录下创建一个同名文件 userdel 用户名只能删除了用户名,不能删除/home目录下的同名文件,当仅删除了用户名时,该用户的/home目录下的同名文件可以用“userdel -r 用户名”删除

全网最牛,Pytest自动化测试-pytest.mark.parametrize参数化实战(详细)

目录:导读 前言 一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 pytest允许在多个级别启用测试参数化: @pytest.mark.parametrize:允许在测试函数或类中定义多组参数和fixtures pytest_generate_tests:允许定义自定义参数化方案或扩展(拓展) 参数化场景 只有测试数据和期望结果不一样,但操作步骤是一样的测试用例可以用上参数化; 参数化例子 未参数化的代码 def test_1(): assert 3 + 5 == 9 def test_2(): assert 2 + 4 == 6 def test_3(): assert 6 * 9 == 42 可以看到,三个用例都是加法然后断言某个值,重复写三个类似的用例有点冗余 利用参数化优化之后的代码 @pytest.mark.parametrize("test_input,expected", [("3+5", 8), ("2+4", 6), ("6*9", 42)]) def test_eval(test_input, expected): print(f"测试数据{test_input},期望结果{expected}") assert eval(test_input) == expected 执行结果 可以看到,只有一条用例,但是利用参数化输入三组不同的测试数据和期望结果,最终执行的测试用例数=3,可以节省很多代码 实际Web UI自动化中的开发场景 比如是一个登录框: 你肯定需要测试账号空、密码空、账号密码都为空、账号不存在、密码错误、账号密码正确等情况 这些用例的区别就在于输入的测试数据和对应的交互结果 所以我们可以只写一条登录测试用例,然后把多组测试数据和期望结果参数化,节省很多代码量 源码分析 def parametrize(self,argnames, argvalues, indirect=False, ids=None, scope=None): argnames 源码解析:a comma-separated string denoting one or more argument names, or a list/tuple of argument strings.

mysql中根据已有的表来创建新表的三种方式

mysql根据现有表创建新表 1、语法1:CREATE TABLE new_tbl LIKE orig_tbl; 1、1 根据departments表创建新表departments1 departments 表结果和表数据库如下 创建departments1如下 使用命令: CREATE TABLE departments1 LIKE departments; 这种语法,将从源表复制列名、数据类型、大小、非空约束以及索引和主键。而表的内容以及其它约束不会复制,新表是一张空表。 2、语法2:CREATE TABLE new_tbl [AS] SELECT {*|column,…} FROM orig_tbl; 2、1 根据departments表创建新表departments2 命令如下: create table departments2 as select * from departments 新表的结构由select列表决定。同时把查询返回的结果集中的行插入到目标表中。这种语法同样只能把非空约束带入到新表中。也不会复制索引,主键 3、语法3:CREATE TEMPORARY TABLE new_tbl [AS] SELECT {*|column,…} FROM orig_tbl; 3、1 根据departments表创建新表departments3 命令如下: CREATE TEMPORARY TABLE departments3 as SELECT * FROM departments; 新表的结构由select列表决定。同时把查询返回的结果集中的行插入到目标表中。这种语法同样只能把非空约束带入到新表中。也不会复制索引,主键

《深入浅出Dart》搭建环境

点击在线阅读,体验更好链接现代JavaScript高级小册链接深入浅出Dart链接现代TypeScript高级小册链接 搭建环境 对于任何编程语言来说,搭建一个有效且稳定的开发环境是编程旅程的第一步。对于Dart,这个过程已经变得非常简单。下面是一篇关于如何安装和配置Dart环境的详细指南: 第一步:下载Dart SDK 首先,你需要下载Dart的软件开发包(SDK)。SDK包含了运行和开发Dart应用所需要的一切工具,包括Dart VM,Dart的包管理器Pub,以及一系列用于编译和调试的工具。你可以从Dart的官方网站下载最新版本的Dart SDK。 第二步:安装Dart SDK 下载完成后,你需要安装Dart SDK。具体的安装步骤可能会根据你的操作系统有所不同: 在Windows上,你需要运行你刚刚下载的安装程序Dart SDK,然后按照安装向导的提示进行操作。 在macOS上,你可以使用Homebrew(一个macOS的包管理器)来安装Dart SDK。只需要在终端中输入brew tap dart-lang/dart 和 brew install dart即可。 在Linux上,你可以使用apt-get(一个Linux的包管理器)来安装Dart SDK。只需要在终端中输入sudo apt-get update 和 sudo apt-get install dart即可。 第三步:配置环境变量 安装完Dart SDK后,你需要将Dart的bin目录添加到PATH环境变量中。这样,你就可以在任何位置运行Dart命令了。 在Windows上,你可以在“控制面板” > “系统” > “高级系统设置” > “环境变量”中编辑PATH环境变量,将Dart的bin目录添加进去。 在macOS和Linux上,你可以在.bashrc或.zshrc文件中添加export PATH="$PATH:<DART_PATH>/bin"。这里的<DART_PATH>应该被替换为Dart SDK的实际安装路径。 第四步:验证安装 最后,你应该验证一下你的安装是否成功。打开一个新的命令行窗口,然后输入dart --version。如果显示出Dart的版本信息,那么恭喜你,你已经成功安装了Dart! 在线运行环境 dart.dev dart.cn

从OVF矢量场文件中获取磁斯格明子的位置和半径的粗略方法(trace skyrmion)

文章目录 前言一、使用oommf的avf2odt命令行程序获取斯格明子中心位置的示例二、当磁体系的单个xy平面层仅有一个斯格明子的情况1.读取所有磁化文件中的指定磁化分量2.筛选出每一个xy平面层中位于磁化分量阈值范围内的单元格3.计算组成磁结构的所有单元格的平均坐标和平均距离 三、当磁体系的单个xy平面层存在多个斯格明子和磁畴壁共存的情况1.递归查找处于磁化分量阈值范围内的紧邻的单元格并分离成不重叠的磁结构2.根据每一个磁结构的单元格排布规律来区分出斯格明子和磁畴壁 四、使用OpenCV库函数来识别“圆”特征五、测试验证总结 泥上偶然留指爪,鸿飞那复计东西。——苏轼 《和子由渑池怀旧》 前言 近来想做一个与磁斯格明子相关的内容,但苦于没有找到有关获取磁化文件中斯格明子的中心位置和半径的参考代码,所以只能自己动手丰衣足食了。主要思路是参考oommf官网上识别磁化文件中斯格明子的方法,即遍历单个磁化文件中所有xy平面层中的单元格,再从每一个xy平面层中筛选处于磁化分量阈值范围内即磁畴壁区域中的单元格,最后把位于斯格明子环状畴壁中所有单元格的平均坐标作为斯格明子的中心位置,取中心位置到这些单元格的平均距离作为半径。本文还通过递归查找紧邻单元格的方式来分离出磁体系中存在的多个斯格明子和多个磁畴壁等磁结构,然后根据每一个磁结构的单元格排布规律来判断是否为斯格明子。另外还提供了一种利用OpenCV库函数的方法,将每一个xy平面层的单元格映射为灰度图中的一个像素点,然后用OpenCV库函数去识别“圆”特征,并得到“圆”的中心位置和半径。最后,则是通过复现一篇文章中的部分内容来测试该程序。该程序的源码见文末的下载链接。 ###### 本文链接:https://blog.csdn.net/qq_43572058/article/details/131617080 CSDN@搬砖工人_0803号 ###### 一、使用oommf的avf2odt命令行程序获取斯格明子中心位置的示例 参考oommf网页链接,该作者通过使用命令行tclsh oommf.tcl avf2odt -average space -index t ns '$i*0.05' -valfunc xpos nm '$vz>0.5 ? $x*1e9 : 0' -valfunc ypos nm '$vz>0.5 ? $y*1e9 : 0' -valfunc wgt '' '$vz>0.5 ? 1 : 0' -defaultvals 0 -headers collapse -truncate 1 -onefile foo-a.odt skyrmion_example-alpha0.100-Oxs_TimeDriver-Spin-*omf来利用avf2odt程序遍历所有矢量场文件,对每一个矢量场文件遍历其所有单元格,若某一个单元格的z分量的值满足-valfunc参数定义的阈值范围,则将该单元格的坐标放入统计列表,最后根据-average参数来计算输出每一列的值。显然该方法只适用于磁体系的单个平面层中仅有一个斯格明子的情况,一旦有着两个及以上的斯格明子,或者斯格明子和磁畴壁等其他磁结构同时存在的情况下,该方法就不可用了。此外,虽然感觉也可以通过该命令行程序获取斯格明子的半径,但相比于苦思冥想构造命令行,还不如直接写一个程序来计算半径来的简单。 通过该示例,我们可以大致理解如何从一个磁化文件中(一般我们使用微磁模拟软件只输出磁化分布M(r,t)的文件,所以后文简称为磁化文件)找到斯格明子的中心位置的过程了。对于每一个磁化文件来说,首先要定义一个磁畴壁所处的磁化分量阈值范围(无磁性的单元格的三个磁化分量都为零,所以需要首先排除掉无磁性的单元格,再进行后续的筛选操作),接着遍历该磁化文件中所有的单元格,筛选出处于磁化分量阈值范围内的所有单元格,即找到位于斯格明子的环状畴壁中的单元格,最后对这些单元格的坐标取平均值并作为斯格明子的中心位置。此外,在本文中直接取该中心位置到这些环状畴壁中单元格的平均距离作为斯格明子的半径。 二、当磁体系的单个xy平面层仅有一个斯格明子的情况 1.读取所有磁化文件中的指定磁化分量 关于OVF矢量场文件的格式请查阅笔记01,由于它的标题行是文本格式,而数据行可以是文本格式(text)或者4/8字节的二进制格式(b4/b8),所以这种混合格式的文件并不容易读取。囿于个人coding水平有限导致不知道如何读取这种混合格式的文件,所以只能使用avf2ovf命令行程序非常麻烦耗时的将磁化文件的数据行转化为文本格式,从而让整个磁化文件的格式统一,方便使用numpy库的loadtxt函数读取磁化文件中指定的数据列。当然,在模拟开始前,我们可以在mumax的代码中添加一行语句 OutputFormat = OVF2_TEXT,在oommf的driver类中添加一行语句 vector_field_output_format {text %#.17g},从而让模拟软件输出的磁化文件的默认格式从二进制格式变成text文本格式。 这里扩展了笔记05中MFA读取磁化文件中指定磁化分量的代码,根据该程序是否第一次读取磁化文件分为单进程读取和多进程读取的方法,将所有磁化文件的所有单元格的指定磁化分量按读取顺序放入一个结果列表m_allFiles返回: from functools import partial import numpy as np import os from multiprocessing import Pool ##读取一个磁化文件中的某一磁化分量,name:文件名称;colum:读取的矢量分量 def fileload(name,colum): colum = int(colum) #磁化文件中'#'是注释 m_oneFile = np.

Elasticsearch 搜索推荐

搜索推荐 Suggester 搜索推荐 term suggester 语法 POST <index>/_search { "suggest": { "<suggest_name>": { "text": "<search_content>", "term": { "suggest_mode": "<suggest_mode>", "field": "<field_name>" } } } } 选项 text 用户搜索的文本 field field:要从哪个字段选取推荐数据 analyzer analyzer:使用哪种分词器 size size:每个建议返回的最大结果数 sort sort:如何按照提示词项排序,参数值只可以是以下两个枚举: score:分数>词频>词项本身frequency:词频>分数>词项本身 suggest_mode missing:默认值,仅为不在索引中的词项生成建议词 popular:仅返回与搜索词文档词频或文档词频更高的建议词 always:根据 建议文本中的词项 推荐 任何匹配的建议词 missing 一种场景: 要搜的词: 五万的宝马; 拆解这个词一个是价格一个是品牌,然后把这两个词分别应用到价格字段和品牌字段做精准匹配 这样就避免了比如一些蹭热度的标题如:"仅五万动力超过宝马"这种,因为它实际品牌可能是宝骏,提高命中程度 其实这个意思是说,一旦我精准匹配了,还需要给你推荐似是而非的词项吗? 比如"仅五万动力超过宝马"这种命中是否还要推送给你?很明显不需要的 missing就是当精准匹配了,就不需要再推荐其他可能词项了,这就像你在京东搜索框搜索宝马,它下边会有很多推荐项.这的精准匹配指的在索引中匹配到了. DELETE news POST _bulk { "index" : { "_index" : "news","_id":1 } } { "title": "baoqiang bought a new hat with the same color of this font, which is very beautiful baoqiangba baoqiangda baoqiangdada baoqian baoqia"

Java多线程(二)——Thread 类及常见方法和线程的基本操作

文章目录 一、Thread 的常见构造方法二、Thread常见属性1.线程名字2.线程的状态3.优先级4.后台线程5.线程是否存活 三、线程的基本操作1.start(启动线程)2.Sleep(休眠线程)3.currentThread(获取当前线程引用)4.interrupt(中断线程)5.join(线程等待) 四、线程的状态 接上一篇 线程的概念和创建 介绍了什么是线程,线程和进程的关系以及线程的创建。再来了解一下Java多线程类 Thread 的常见构造方法和属性 一、Thread 的常见构造方法 方法说明Thread()创建线程对象Thread(Runnable target)使用 Runnable对象创建线程Thread(String name)创建线程对象,并命名Thread(Runnable target, String name)使用 Runnable 对象创建线程对象,并命名Thread(ThreadGroup group,Runnable target)线程可以被用来分组管理,分好的组即为线程组 这些构造方法都比较简单,在上一篇博客中也介绍了线程的几种创建方法 public static void main(String[] args) { Thread t1 = new Thread("线程1"); Thread t2 = new Thread(new Runnable() { @Override public void run() { } },"线程2"); } 二、Thread常见属性 属性获取的方法IDgetId()名称getName()状态getState()优先级getPriority()是否后台线程isDaemon()是否存活isAlive()是否被中断isInterrupted() 来看一段代码: 当线程没有启动时 public static void main(String[] args) { Thread t = new Thread(new Runnable() { @Override public void run() { while (true) { System.

什么是SOME/IP-SD?

SOME/IP-SD 是"Scalable service-Oriented MiddlewarE over IP - Service Discovery"的缩写,是SOME/IP的一种特殊报文,可以让Client知道Server可以提供哪些服务,SOME/IP有两种动态发现服务的机制:一种是Offer Service,由Server向网络上的小伙伴告知它所提供的服务;另一种是Find Service,由Client向Server请求可用的服务。 1. 简介和概述 该协议规范定义了SOME/IP-SD的格式、消息序列和语义。SOME/IP-SD主要任务是车载功能实体调用服务的通信可用性以及控制事件消息的发送行为。这种机制只允许事件消息发送给需要它们的接收者(Publish/Subscribe)。 1.1 协议的目的 SOME/IP-SD 主要用于 定位服务实例检测服务实例是否还在运行完成发布/订阅管理 1.2 协议的应用范围 SOME/IP-SD用于车载网络的服务发现,使用该协议有以下约束: SOME/IP-SD仅支持IP通信如果客户端订阅服务是通过多播选项声明的客户端服务多播端点,则网络通信设计必须考虑以下限值: - 基于点对点连接的通信可能无法正常工作(例如端到端相关通信、IPsec通信)。 - 初始化事件必须谨慎使用,因为所有客户端服务都订阅了相同的组播端点到相同的服务器服务,每次新的客户端服务使用相同的组播端点订阅到相同的服务器服务时,都会接收初始化事件 1.3 依赖 1.3.1 协议层依赖 从下图可以看出SOME/IP-SD是基于SOME/IP协议,而SOME/IP协议是基于TCP或UDP协议,但是SOME/IP-SD只能基于UDP协议。 2 用例 IDNameDescriptionUC_001提供服务服务端向网络提供服务,而不需要在客户端静态配置服务器UC_002订阅服务客户端在不知道发送者位置的情况下找到所需的服务并订阅它UC_003灵活的通信路径开发人员希望在不知道谁将接收数据或谁将发送所需数据的情况下设计应用程序。服务发现允许在集成期间建立通信路径。 3 协议需求列表 略 4 术语和缩略语 术语/缩略语描述Byte Order Mark字节顺序标记(byte order mark, BOM)是一个Unicode字符,U+FEFF字节顺序标记(byte order mark, BOM),它作为一个魔数出现在文本流的开头,用于表明所使用的编码Method可被调用的方法、过程、函数或子程序Parameters方法或事件的输入、输出或输入/输出参数Remote Procedure Call (RPC)从一个ECU到另一个ECU的方法调用,使用消息传输Request客户端发给服务端用来调用方法(Method)的消息Response服务端响应客户端方法调用的消息Request/Response communication一次请求/回复过程,也就是RPCEvent(事件)单向数据传输,只在变化时调用或循环调用,从数据的生产者发送到消费者FieldField(字段)代表一种状态,因此在getter、setter和notifier操作的任何时候都有一个有效值Notification Event用字段通知的事件消息Getter允许读取字段的请求/响应调用。Setter允许对字段进行写访问的请求/响应调用。Service零个或多个方法、零个或多个事件、零个或多个字段的逻辑组合。Eventgroup一个服务中事件和字段通知事件的逻辑组合,以便允许订阅Service Instance一个服务的实现,它可以在车辆上多次存在,也可以在ECU上多次存在Server提供服务实例的ECU在这个服务实例的上下文中应该被称为服务器。Client在这个服务实例的上下文中,使用服务器服务实例的ECU应该被称为客户端。Fire and Forget无回复的请求叫做 解雇并遗忘User Datagram Protocol一种传输层协议Union一种动态假设不同数据类型的数据结构non-extensible (standard) struct序列化时不带标签的结构体。最多可以在结构体末尾以兼容的方式添加新成员,而不能添加可选成员。extensible struct用标签序列化的结构体。可以在任意位置以兼容的方式添加新成员,也可以添加可选成员。 5 协议规范 5.1 SOME/IP-SD 5.1.1 概览 SOME/IP-SD 主要用于

100套基于Python的毕业设计-Django项目实战(附源码+论文+演示视频)

大家好!我是职场程序猿,感谢您阅读本文,欢迎一键三连哦。 🧡今天给大家分享100+基于Python和Django的毕业设计,这些项目都经过精心挑选,涵盖了不同的实战主题和用例,可做毕业设计和课程设计参考。 ✍️除了源码,对于大部分项目实现的功能都有相应的介绍,并且配有演示视频,方便大家根据自己的需要择优下载学习。 💂另外如有定制需求或者想要相对应的论文参考,文末可以加我微信联系。 🤝后续还会持续更新,欢迎关注! 目录 一、主要技术二、项目汇总关于论文和定制 一、主要技术 开发语言:Python 框架:Django 二、项目汇总 项目功能简介&源码下载视频演示web服务统一身份认证协议设计点此查看及下载传送门web漏洞挖掘技术的研究点此查看及下载传送门web渗透测试工具点此查看及下载传送门大学生就业信息管理系统点此查看及下载传送门登录网站验证码的生成与识别系统点此查看及下载传送门多媒体资料管理系统点此查看及下载传送门二维码生成算法研究和实现点此查看及下载传送门二维码识别系统点此查看及下载传送门反爬虫技术的研究点此查看及下载传送门房屋信息可视化及价格预测系统点此查看及下载传送门高校社团学生会管理系统点此查看及下载传送门高校学生学业预警系统点此查看及下载传送门个人密码本管理系统点此查看及下载传送门互联网+志愿服务求职招聘系统点此查看及下载传送门基于AI的动物识别技术研究点此查看及下载传送门基于B站用户行为分析系统点此查看及下载传送门基于des算法的企业用户数据安全软件点此查看及下载传送门基于lsb算法与rsa算法的信息隐藏算法实现点此查看及下载传送门基于opencv的疲劳检测系统点此查看及下载传送门基于OpenCV全景图像拼接系统点此查看及下载传送门基于RSA加密算法软件的研究设计点此查看及下载传送门基于RSA算法的数字签名生成软件点此查看及下载传送门基于贝叶斯网络的城市火灾预测方法点此查看及下载传送门基于大数据的电影市场预测分析点此查看及下载传送门基于大数据反电信诈骗管理系统点此查看及下载传送门基于改进高斯混合模型的图割算法研究点此查看及下载传送门基于混沌系统敏感文本信息加密算法研究点此查看及下载传送门基于机器学习的文本分类系统点此查看及下载传送门基于机器学习的文本情感系统点此查看及下载传送门基于计算机视觉的答题卡识别及判分系统点此查看及下载传送门基于卷积神经网络的车牌识别仿真软件点此查看及下载传送门基于模板的药品名称识别系统点此查看及下载传送门基于爬虫的贵州菜价可视化系统点此查看及下载传送门基于人脸识别的景区票务系统点此查看及下载传送门基于人脸识别的酒店客房入侵检测系统点此查看及下载传送门基于人脸识别的实验室智能门禁系统点此查看及下载传送门基于深度学习的安全帽佩戴检测点此查看及下载传送门基于深度学习的车俩特征分析系统点此查看及下载传送门基于深度学习的车牌识别系统点此查看及下载传送门基于深度学习的电影评论情感分析系统点此查看及下载传送门基于深度学习的交通标志识别系统点此查看及下载传送门基于深度学习的聊天机器人设计点此查看及下载传送门基于深度学习的身份证识别考勤系统点此查看及下载传送门基于深度学习的音乐推荐方法研究系统点此查看及下载传送门基于深度学习屋内烟雾检测方法点此查看及下载传送门基于时间序列分析的大气污染预测软件点此查看及下载传送门基于搜索的目标站点内容监测系统点此查看及下载传送门基于图像的信息隐藏技术研究点此查看及下载传送门1+传送门2基于网易新闻+评论的舆情热点分析平台点此查看及下载传送门基于小波变换的数字水印研究点此查看及下载传送门基于循环神经网络的情感分类系统点此查看及下载传送门基于语音识别的智能垃圾分类系统点此查看及下载传送门基于知识图谱的百科知识问答平台点此查看及下载传送门基于知识图谱的医疗问答系统点此查看及下载传送门基于知识图谱电影推荐问答系统点此查看及下载传送门基于自然语言处理技术的话题文本分类的研究点此查看及下载传送门基于自适应svm电影评价倾向性分析(cs)点此查看及下载传送门开放领域事件抽取系统点此查看及下载传送门课堂投票系统点此查看及下载传送门漏洞扫描系统点此查看及下载传送门旅游城市关键词分析点此查看及下载传送门1+传送门2旅游景点方面级别情感分析语料库与模型点此查看及下载传送门棉花数据平台建设与可视化系统点此查看及下载传送门某大学学生影响力分析系统点此查看及下载传送门某医院体检挂号系统点此查看及下载传送门某在线中药店销售数据统计与分析系统点此查看及下载传送门企业物流管理系统点此查看及下载传送门人脸表情的分类算法的设计点此查看及下载传送门信息管理系统及安全策略分析点此查看及下载传送门深度学习的web端多格式纠错系统点此查看及下载传送门手写数字识别系统点此查看及下载传送门书籍售卖系统点此查看及下载传送门数学函数绘图软件cs点此查看及下载传送门图书馆大数据可视化分析系统点此查看及下载传送门图像取证技术研究与实现点此查看及下载传送门图像去雾算法研究系统点此查看及下载传送门图像信息隐藏技术设计点此查看及下载传送门网络舆情分析系统点此查看及下载传送门网上购物商城点此查看及下载传送门文本相似度计算系统点此查看及下载传送门文件销毁工具点此查看及下载传送门小区监控图像拼接系统点此查看及下载传送门校园疫情监控平台点此查看及下载传送门校园舆情管理系统点此查看及下载传送门校园预约打印网点此查看及下载传送门信息安全领域中语义搜索引擎的设计点此查看及下载传送门信息加密解密网站点此查看及下载传送门选课热度分析系统点此查看及下载传送门医疗领域用户问答的意图识别算法研究点此查看及下载传送门医疗知识图谱问答系统点此查看及下载传送门医用耗材网上申领系统点此查看及下载传送门英汉电子词典软件点此查看及下载传送门语音和背景音乐分离算法及系统点此查看及下载传送门语音识别与蓝牙通信的温控系统点此查看及下载传送门在线电影推荐系统点此查看及下载传送门在线水果销售系统点此查看及下载传送门在线自主评测系统点此查看及下载传送门招聘数据分析可视化系统点此查看及下载传送门中学地理—中国的江河湖泊教学网点此查看及下载传送门主观题自动阅卷系统点此查看及下载传送门 关于论文和定制 如需对应的论文参考或者有其他定制需求,也可下方微信联系我。

SpringBoot接口加密

SpringBoot接口加密 转载:https://mp.weixin.qq.com/s?__biz=MzA3ODQ0Mzg2OA==&tempkey=MTA2M19saURZS0ZPcG1lVjFGUXBSTy0zVW9NRXFaRGtKeUc2YUpLTHFFSklHTlZ0YXRzU0VPNG12WnVrZ045Nlc2V0JPalAtVXY3S3ZnWUhqS3RScjhmdU9QV2JWUV9YX1drQlRsRVNSU0lWRlUzMUxORTFUZWVtRVk0WGhNV3pfdWljdFk1dWNmV2s2QzJ1RkU4V0lhU1IxbzlJWlZfMWRlV21JUG5BQTRnfn4%3D&chksm=075351cb3024d8dd29e0fe43ff67722670b0e9fc97a1668443e66d97b7c08e1bffae90d71ec3&scene=0&xtrack=1&previewkey=VfqabKyt7HOlYs5NS8mOc8NS9bJajjJKzz%252F0By7ITJA%253D&key=b62499e58a6e381aacc46172affbb594793a38978c0b5bccc6b1183750f5c7b074777f05aa0d2ce8a10fdfeea38323f0c6ec9dfdf3fe4cf13f85dbec4405cff92897b9a0799764e818dba66d5e222f41&ascene=1&uin=MzA3MTc0NjQw&devicetype=Windows+10+x64&version=6209007b&lang=zh_CN&exportkey=AUyKg1eKtlvogRl9v7H0grw%3D&pass_ticket=qk6QORgMTc1bhKWfTq1nTlIW%2FBdWoxTwa4lAe5msousXFx92XMopUvIaSUrD2lUK 后端加密 公钥加密、私钥解密、私钥签名、公钥验签 <dependency> <groupId>cn.shuibo</groupId> <artifactId>rsa-encrypt-body-spring-boot</artifactId> <version>1.0.1.RELEASE</version> </dependency> 前端解密 <script src="https://cdn.bootcdn.net/ajax/libs/jsencrypt/3.0.0-rc.1/jsencrypt.js"></script> 转载理由:用的上 之前转载链接失效,补上别人辛苦整理的 springboot接口数据加密(参数和返回结果)_springboot接口加密_巧克力的骄傲的博客-CSDN博客 ps:api加密

Vue项目部署路由加前缀

前提:再部署项目的时候会有需求,几个项目同时部署,只提供一个端口的情况; 解决方案:路由加前缀来区分项目; vue-cli2.0与vue-cli3.0还是有很大的区别; 1、vue-cli2.0 ①:在config/index.js/build 对象中 先配置 assetsPublicPath:“/前缀” ②:修改路由,route/index.js new VueRouter({base:“/前缀”}); ③:在build/webpack.base.conf.js 中修改文件的路径 ,配置修改如下图 2、vue-cli3.0 ①:静态资源前缀 vue.config.js /module.exports 中配置 publicPath:“/前缀”; ②:路由前缀 route/index.js export default new Router({ base:”/前缀" , })

基于SpringBoot+vue校园信息交流互助系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式 🍅 作者主页:Java韩立 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SpringBoot+vue校园信息交流互助系统,java项目。 eclipse和idea都能打开运行。 推荐环境配置:eclipse/idea jdk1.8 maven mysql 前端技术:vue,Ajax,Json 后端技术:SpringBoot,MyBatis 主要功能有: 首页 、校园资讯、校园互助、校园交友、论坛、个人中心、发布帖子,评论等。 提供远程调试、代码讲解服务 更多精品项目,请查看主页 主要功能截图: 部分代码展示 控制层,ClockInNewController,对登录用户信息的查询,基于Cookie,从cookie中提取用户信息,并根据提取的用户字段,在数据库中查询相关信息。 @RequestMapping("/queryClockInAll2") public JsonObject queryClockInAll2(Clockinnew clockinnew, HttpServletRequest request, @RequestParam(defaultValue = "1") Integer pageNum, @RequestParam(defaultValue = "15") Integer pageSize ){ //获取当前得登录用户 Userinfo userinfo= (Userinfo) request.getSession().getAttribute("user"); String username=userinfo.getUsername(); //根据username获取登录账号得业主id Owner owner=ownerService.queryOwnerByName(username); clockinnew.setOwnerId(owner.getId()); PageInfo<Clockinnew> pageInfo= clockinnewService.queryClockInAll(pageNum,pageSize,clockinnew); return new JsonObject(0,"ok",pageInfo.getTotal(),pageInfo.getList()); } 核心接口,封装具体方法,方便对象的注入 package com.yx.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; import com.

网络编程—Socket套接字详解

目录 一、网络编程 1.1、为什么需要网络编程? 1.2、什么是网络编程 1.3、发送端和接收端 ​编辑1.4、请求和响应 ​编辑1.5、客户端和服务端 二、Socket套接字 2.1、概念 2.2、分类 2.2.1、流套接字 2.2.2、数据报套接字 2.2.3、原始套接字 2.3、Socket编程注意事项 一、网络编程 1.1、为什么需要网络编程? 现在网络普及程度越来越高,网络上保存着我们日常生活中所需要的各种资源,使用程序通过网络来获取这些资源的过程就需要网络编程来实现。 1.2、什么是网络编程 网络编程,是指网络上的主机,通过不同的进程,以程序的方式实现网络编程(网络数据传输)。 当然,只要满足不同的进程就行;所以即便是同一个主机,只要是不同的进程,基于网络来传输数据,也属于网络编程。 对于条件有限情况下,一般也都是在一个主机中运行多个进程来完成网络编程。 但是,一定要明确,目的是提供网络上不同主机,基于网络来传输数据资源。 进程A:编程来获取网络资源进程B:编程来提供网络资源 1.3、发送端和接收端 在第一次网络数据传输时: 发送端:数据的发送方进程,称为发送端,发送端主机即网络通信中的源主机。 接收端:数据的接收方进程,称为接收端,接收端主机即网络通信中的目的主机。 收发端:发送端和接收端两端,简称为收发端。 注意:发送端和接收端只是相对的,只是一次网络数据传输产生数据流向后的概念。 1.4、请求和响应 一般来说,获取一个网络资源,涉及到两次数据传输: 第一次:请求数据的发送第二次:响应数据的发送 好比餐馆吃饭:先要发起请求—点份炒饭;响应对方的请求—提供一份炒饭。 1.5、客户端和服务端 服务端:在常见的网络数据传输的场景下,把提供服务的一方进程,称为服务端,可以对外提供服务。 客户端:获取服务的一方进程,称为客户端。 对于服务来说,一般是提供: 客户端获取服务资源 客户端保存资源在服务端 好比我们在银行办理业务 银行提供存款服务:用户(客户端)存储现金(资源)在银行(服务端).银行提供取款服务:用户(客户端)取存储的现金(获取用户端资源). 常见的客户端和服务端模型 客户端是只给用户使用的程序,服务端是提供用户服务的程序。 客户端先发送请求到服务端.服务端根据请求数据,执行相应的业务处理.服务端返回响应,发送业务处理结果.客户端根据响应数据,展示处理结果(获取的资源,或提示保存资源的处理结果). 二、Socket套接字 2.1、概念 Socket套接字,是由系统提供用于网络通信的技术,是基于TCP/IP协议的网络通信的基本操作单元。基于Socket套接字的网络程序开发就是网络编程。 2.2、分类 Socket套接字主要针对传输层协议划分为如下三类: 2.2.1、流套接字 使用传输层TCP协议,以下为TCP协议的特点 有连接可靠传输面向字节流有接收缓冲区,也有发送缓冲区大小不限 对于字节流来说,可以简单理解为,传输数据是基于IO流,流式数据的特征就是在IO流没有关闭的情况下,是无边界的数据,可以多次发送,也可以分开多次发送。 2.2.2、数据报套接字 使用传输层UDP协议 ,以下为UDP协议的特点 有连接不可靠传输面向数据报有接收缓冲区,也有发送缓冲区大小受限:一次最多传输64k 对于数据报来说,可以简单理解为,传输数据是一块一块的,发送一块数据假如是100个字节,必须一次性发送,接收也必须一次性接收,而不能分一百接收,每次接收一个字节。 2.2.3、原始套接字 原始套接字用于自定义传输协议,用于读写内核没有处理的IP协议数据。 有兴趣了解的盆友可以去看看这位大佬的博客原始套接字 2.3、Socket编程注意事项 客户端和服务端:开发时,经常是基于一个主机开启两个进程作为客户端和服务端,但真实的场景,一般都是不同主机。注意目的IP和目的端口号,标识了一次数据传输时要发送数据的终点主机和进程。Socket编程我们是使用流套接字和数据报套接字,基于传输层的TCP或UDP协议,但应用层协议,也需要考虑,这块我们在后续来说明如何设计应用层协议。关于端口被占用的问题。 如果一个进程A已经绑定了一个端口,再启动一个进程B绑定该端口,就会报错,这种情况也叫端口占用。对于java进程来说端口占用报错信息 此时就需要检查进程B绑定的是哪个端口,再查看哪个端口被占用,以下为端口查看进程的方式 1、打开命令行窗口输入命令,查找占用端口的应用进程。则可以显示对应进程的pid。如以下命令显示了8888进程的pid。 netstat -ano|findstr 端口号 2、在任务管理器中,通过pid查找进程

Shiro安全框架讲解及应用

目录 1、权限管理 1.1、什么是权限管理 1.2、什么是身份认证 1.3、什么是授权 2、什么是shiro 2.1、用shiro的原因 3、shiro的核心组件 3.1、Subject 3.2、SecurityManager 3.3、Authenticator(认证器) 3.4、Authorizer(授权器) 3.5、Realm(数据库读取+认证功能+授权功能实现) 3.6、SessionManager 3.7、SessionDAO 3.8、CacheManager 3.9、Cryptography 4、使用shiro完成认证和授权 4.1、使用shiro完成认证 4.1.1、创建一个普通的maven工程 4.1.2、创建一个ini文件 4.1.3、编写测试代码 4.1.4、认证过程流程图 4.2、使用shiro完成授权 4.2.1、修改ini文件 4.2.2、修改测试代码 4.2.3、授权过程流程图 1、权限管理 1.1、什么是权限管理 基本上涉及到用户参与的系统都要进行权限管理,权限管理属于系统安全的范畴,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源。 权限管理包括用户身份认证和授权两部分,简称认证授权。对于需要访问控制的资源用户首先经过身份认证,认证通过后用户具有该资源的访问权限方可访问。 1.2、什么是身份认证 身份认证,就是判断一个用户是否为合法用户的处理过程。最常用的简单身份认证方式是系统通过核对用户输入的用户名和口令,看其是否与系统中存储的该用户的用户名和口令一致,来判断用户身份是否正确。对于采用指纹等系统,则出示指纹;对于硬件Key等刷卡系统,则需要刷卡。 1.3、什么是授权 授权,即访问控制,控制谁能访问哪些资源。主体进行身份认证后需要分配权限方可访问系统的资源,对于某些资源没有权限是无法访问的。 自己完成认证和授权相对来说比较麻烦。可以使用第三方框架帮你完成认证和权限的绑定。 使用比较多的第三方框架---shiro和springsecurity安全框架。shiro使用比较简单。而且它可以单独使用也可以和spring框架整合。 2、什么是shiro Apache Shiro 是一个强大易用的 Java 安全框架,提供了认证、授权、加密和会话管理等功能,对于任何一个应用程序,Shiro 都可以提供全面的安全管理服务。并且相对于其他安全框架spring security,Shiro 要简单的多。 2.1、用shiro的原因 Shiro可以非常容易的开发出足够好的应用,其不仅可以用在JavaSE环境,也可以用在JavaEE环境。Shiro可以帮助我们完成:认证、授权、加密、会话管理、与Web集成、缓存等。 3、shiro的核心组件 3.1、Subject Subject主体,外部应用与subject进行交互,subject将用户作为当前操作的主体,这个主体:可以是一个通过浏览器请求的用户,也可能是一个运行的程序。Subject在shiro中是一个接口,接口中定义了很多认证授相关的方法,外部程序通过subject进行认证授,而subject是通过SecurityManager安全管理器进行认证授权。 3.2、SecurityManager SecurityManager权限管理器,它是shiro的核心,负责对所有的subject进行安全管理。通过SecurityManager可以完成subject的认证、授权等,SecurityManager是通过Authenticator进行认证,通过Authorizer进行授权,通过SessionManager进行会话管理等。SecurityManager是一个接口,继承了Authenticator, Authorizer, SessionManager这三个接口。 3.3、Authenticator(认证器) Authenticator即认证器,对用户登录时进行身份认证。 3.4、Authorizer(授权器) Authorizer授权器,用户通过认证器认证通过,在访问功能时需要通过授权器判断用户是否有此功能的操作权限。 3.5、Realm(数据库读取+认证功能+授权功能实现) Realm领域,相当于datasource数据源,securityManager进行安全认证需要通过Realm获取用户权限数据。 比如: 如果用户身份数据在数据库那么realm就需要从数据库获取用户身份信息。 注意: 不要把realm理解成只是从数据源取数据,在realm中还有认证授权校验的相关的代码。 3.6、SessionManager SessionManager会话管理,shiro框架定义了一套会话管理,它不依赖web容器的session,所以shiro可以使用在非web应用上,也可以将分布式应用的会话集中在一点管理,此特性可使它实现单点登录。 3.7、SessionDAO SessionDAO即会话dao,是对session会话操作的一套接口

Vue3+TS 报错解决:找不到模块或其相应的类型声明。

报错原因:typescript 只能理解 .ts 文件,无法理解 .vue文件 解决方法:在项目根目录或 src 文件夹下编辑vite-env.d.ts文件,新增下列代码或者创建一个后缀为 .d.ts 的文件,并写入以下内容: declare module '*.vue' { import { ComponentOptions } from 'vue' const componentOptions: ComponentOptions export default componentOptions }

SQL语言与数据库具体操作

一、概念 关系型数据的操作语言。 二、分类 数据定义语言(DDL):对数据库和表进行 创建 删除 和修改 数据操作语言(DML):数据的增, 删,改 操作 数据查询语言(DQL):查询数据的语言 数据库控制语言(DCL):数据库中用户和权限管理的操作语言 数据库事务控制语言(TCL):数据库事务语言 三、数据库操作(database) 1、查询仓库 show databases; //显示仓库列表 2、新建仓库 create database 仓库名; create database if not exists 仓库名; //若该仓库不存在则新建 3、选择仓库 use 仓库名; //进入该仓库 4、查询仓库中的所有表 show tables; 5、删除仓库 drop database 仓库名; 6、查询当前所在仓库 select database; 7、查询仓库的创建语言 show create database 仓库名; 8、修改仓库字符集 alter database 仓库名 character set 字符集名称; 英文字符集 --- iso-88859-1 中文字符集 --- gbk、gb2312、utf-8 9、查询数据库的默认字符集 show variables like '%character%';

VMware 安装 CentOS 7(2023 热乎的教程)

本文目录 1. 下载 CentOS 镜像文件2. 安装虚拟机3. 安装 CentOS 74. 配置网络 1. 下载 CentOS 镜像文件 下载网址:阿里云开源镜像站 小提示:直接用浏览器下载速度可能很慢,建议大家将上面的下载地址复制到【迅雷】进行下载,这样会快很多,下面是详细的步骤: 上述 3 步完成后,就可以点击【立即下载】进行下载了。 2. 安装虚拟机 打开 VWware,鼠标左键点击左上角的【文件】,然后点击【新建虚拟机】(此步骤的快捷键为 Ctrl + N)。 注:还有一种情况就是:在此之前,你的 VMware 可能没有安装过任何虚拟机,你的界面可能是下面这样,此时你就可以直接点击【创建新的虚拟机】: 勾选【典型】,然后点击【下一步】: 勾选【稍后安装操作系统】,然后点击【下一步】: 操作系统选择【Linux】,版本选择自己镜像文件的版本(我的是【CentOS 7 64位】)。然后点击【下一步】: 【虚拟机名称】可以自己改,然后点击【浏览】选择安装路径(个人自己选择),最后点击【下一步】: 【最大磁盘大小】可以选择默认的 20,也可以根据自己的需求改。然后勾选【将虚拟磁盘拆分为多个文件】(默认就是这个),最后点击【下一步】: 点击【完成】: 回到下面这个界面: 3. 安装 CentOS 7 鼠标左键单击【CentOS 7 64位】,也就是上一步创建的虚拟机的名称。然后点击【CD/DVD(IDE) 自动检测】: 勾选【使用 IOS 映像文件】,然后点击【浏览】,选择第一步下载的 CentOS 镜像文件,最后点击【确定】: 鼠标左键单击【CentOS 7 64位】,也就是上一步创建的虚拟机的名称。点击【开启此虚拟机】: 然后就会出现下面这个界面,我们需要等待一段时间: 一段时间的等待之后,会出现下面这样的界面。选择语言,我个人强烈建议选择英文,因为后面你用 Linux 命令的话会方便很多,然后点击【Continue】: 选择【SYSTEM】下的第一个【INSTALLATION DESTINATION】: 默认即可,然后点击【Done】,如下如所示: 上一步完成之后,会回到下面的界面,然后点击【SOFTWARE】下的【SOFTWARE SELECTION】: 对于初次接触该系统的,建议选择图形化界面,选择之后点击左上角的【Done】。不过界面一般对于我们来说用处不大,而且 CentOS 的界面不好操作,所以这里选择最小安装: 选择日期和时间,点击【DATE & TIME】: 选择【shanghai】,然后点击左上角的【Done】: 点击【Begin Installation】,也就是开始安装: 设置 root 账户密码,点击【ROOT PASSWORD】: 设置密码: 密码设置完成后,进入下面这个界面,等待一会即可: 一段时间后,回到下面这个界面,点击右下角的【Finish configuration】(有时候可能没有这个界面,直接看下一步即可): 点击右下角的【Reboot】,也就是重启: 输入账户名和密码,密码不可见,然后点击回车: 输入完成后,进入命令行模式: 4.

java中不定长数组的一些方法

数组的创立: ArrarList<E> 数组名 = new ArrayList<>(); E:数组中元素的类型(不能是基元:int,long等) ArrayList<Student> array = new ArrayList<Student>(); 数组元素的查看: 数组名.get(下标) Student s = array.get(m); 数组元素的删除: 数组名.remove(下标) array.remove(m); remove 只用在不定长的数组中,定长数组采用后位元素覆盖前位元素或者新建数组将所留信息重新转移来进行数组元素的删除 数组元素的添加: 数组名.add(增添元素 Student s = new Student(); ..... ..... array.add(s);

基于vue3.2的element-plus省市区选择器

<template> <div class="wrap"> <!--默认使用--> <elui-china-area-dht @change="onChange"></elui-china-area-dht> <!--带isall参数和leave参数示例--> <elui-china-area-dht isall :leave="2" @change="onChange"></elui-china-area-dht> </div> </template> <script lang="ts" setup> import { getData } from "@/api/lineCity"; import { EluiChinaAreaDht } from 'elui-china-area-dht' const chinaData = new EluiChinaAreaDht.ChinaArea().chinaAreaflat // 覆盖区县 const onChange = (e:any) => { const province = chinaData[e[0]] const city = chinaData[e[1]] const area = chinaData[e[2]] console.log(province, city ,area) } </script> 基于vue3.2的element-plus省市区选择器 下载安装命令 npm i elui-china-area-dht leave 数据可选层级,3代表省市区三级级联选项 补充:关于回显问题,我是做了2个div, 点击事件,if 隐藏div的方法。 如果小伙伴还有更好的方法,评论区留言分享

解决:RuntimeError: CUDA error: invalid device ordinal CUDA kernel errors might be asynchronously

RuntimeError: CUDA error: invalid device ordinal CUDA kernel errors might be asynchronously reported at some other API call,so the stacktrace below might be incorrect. For debugging consider passing CUDA_LAUNCH_BLOCKING=1. 解决: device = torch.device(‘cuda:1’) 如果是别的代码,可能把1改成0就行。 DAZLE # idx_GPU = 4 idx_GPU = 0#改 device = torch.device("cuda:{}".format(idx_GPU) if torch.cuda.is_available() else "cpu")

一个基于arp扫描同网段存活ip和mac的python脚本

#!/usr/bin/env python # -*- coding: UTF-8 -*- """ @Project :python-learn @File :arp扫描.py @Author :星之尘 @Date :2023/6/12 19:29 @脚本说明: """ import threading from scapy.layers.l2 import ARP from scapy.sendrecv import sr1 import logging # 定义扫描ip函数 def scan_arp_ip(network_segment, ip_start): end_ip = ip_start + 10 if end_ip > 254: end_ip = 254 for i in range(ip_start, end_ip): ip = f'192.168.{network_segment}.{i}' data = ARP(pdst=ip) try: res = sr1(data, timeout=1, verbose=False) print(f'存活的ip地址是:{res[ARP].psrc} mac地址是:{res[ARP].hwsrc}') except: pass if __name__ == '__main__': network_segment = int(input('请输入要扫描的网段:')) for i in range(1, 254, 10): threading.

[BUG解决]unzip: cannot find zipfile directory in one of...

终端输入:unzip train2017.zip 终端输出Archive: train2017.zip End-of-central-directory signature not found. Either this file is not a zipfile, or it constitutes one disk of a multi-part archive. In the latter case the central directory and zipfile comment will be found on the last disk(s) of this archive. unzip: cannot find zipfile directory in one of train2017.zip or train2017.zip.zip, and cannot find train2017.zip.ZIP, period 原本以为是服务器的原因,没想到是压缩文件夹没上传完整成功, 解决办法,再上传完整就好了嘛

java抽奖

目录 一、简要描述 二、代码 一、简要描述 此抽奖方式为:在1~30个数字之间 挑选7个不重复的数字输入,系统会根据中奖的号码与用户输入的号码进行比较,系统会输出是否中奖的提示! 二、代码 import java.util.Scanner; import java.util.ArrayList; import java.util.List; import java.util.Random;//随机数 public class ArrayMax{ @SuppressWarnings("unchecked") public static void main(String[] args) { int flag=0; Random r=new Random(); @SuppressWarnings("rawtypes") List myList=new ArrayList();//生成数据集,保存随机数 int[] num=new int[7]; //将输入的数字存入数组中 int[] arr=new int[7]; //将产生的随机数存入数组 System.out.println("请从1~30中挑选7个不重复的数字输入!"); @SuppressWarnings("resource") Scanner sc=new Scanner(System.in); for(int i=0;i<7;i++) { int j=i+1; System.out.print("请输入第"+j+"个数字:"); int number=sc.nextInt(); if(number>=1&&number<=30) { num[i]=number; //将输入的数字存入数组 } else { System.out.print("您输入第"+j+"个号码不在设定的范围之内,请重新输入:"); number=sc.nextInt(); num[i]=number; } } while(myList.size()<7) { int code=r.

Java父子类间构造函数调用问题

注:super():调用父类构造函数,super.属性:调用父类的属性 前提一:父类中有一定的属性(参数),子类中无新属性: 情况1:当父类和子类均无自定义构造函数(即均使用默认构造函数)时,可独立创建父和子类实体。 情况1.1:当父类和子类均有自定义无参构造函数时,可独立创建父和子类实体。 情况2:当父类和子类均有自定义构造函数,子类中自定义构造函数使用super()函数可独立创建父和子类实体。 情况3:当父类无自定义构造函数,子类使用super(),编译报错。若此时子类使用super.属性进行构造则只能创建子实体,无法带参创建父实体,但可以无参数创建父实体。 情况4:当父类有自定义构造函数,子类无自定义构造函数时。只能创建父类实体,无法创建子类实体。 情况5:当父子都有自定义构造函数时,子类使用super().还是super.属性都可独立创建父子类。 前提二:父类中有一定的属性(参数),子类有新属性: 情况1:当父类无自定义构造函数,子类有构造函数时,仅当子类使用super.属性时才能独立创建子类实体,无法使用super()。 //父类 public class person { String name; String sex; } //子类 public class OneMan extends person{ String greet; public OneMan(String name, String sex,String greet) { super.name=name; super.sex=sex; this.greet=greet; } } public class Main{ public static void main(String[] args){ OneMan A=new OneMan("小明儿","男","哈喽哈喽"); System.out.printf("%s %s %s\n",A.name,A.sex,A.greet); } } 情况2:当父子类都有自定义函数时,子类必须先使用super(属性,属性)调用父类构造函数。此时可独立创建父类实体和子类实体。 //父类 public class person { String name; String sex; public person(String name,String sex) { this.

大数据之路—数据架构体系及模型设计

大数据之路—数据架构体系及模型设计 一、阿里巴巴数据整合及管理体系二、维度设计1、基本概念2、规范化和反规范化3、维度整合4、维度拆分5、维度变化6、特殊维度 三、事实表设计1、事实表特性2、事实表类型3、事实表设计原则4、事务事实表5、周期快照事实表的注意事项6、累计快照事实表的物理实现7、三种事实表的比较8、聚集型事实表 一、阿里巴巴数据整合及管理体系 实施工作流: 1、划分数据域:根据业务过程抽象出数据域。 2、构建总线矩阵:明确每个数据域下有哪些业务过程,业务过程与哪些维度相关,并定义每个数据域下的业务过程和维度。 3、规范定义:定义度量/原子指标、修饰类型、修饰词、时间周期、派生指标。是一套数据规范命名体系,用在模型设计中。 规范定义实例: 指标定义: 事务型指标:指对业务活动进行衡量的指标,例如新发商品数、新增会员数等。存量型指标:指对实体对象某些状态的统计,例如商品总数、会员总数。复合型指标:是在事务型指标和存量型指标的基础上复合而成的,例如浏览 UV-下单买家数转化率,有些需要创建新原子指标,有些则可以在事务型或存量型原子指标的基础上增加修饰词得到派生指标。 4、模型设计:维度及属性的规范定义,维表、明细事实表和汇总事实表的模型设计。 5、模型架构图 操作数据层(ODS):把操作系统数据几乎无处理地存放在数据仓库系统中。 公共模型层(CDM):存放明细事实数据、维表数据及公共指标汇总数据 ,其中明细事实数据、维表数据一般根据 ODS 层数据加工生成 ;公共指标汇总数据一般根据维表数据和明细事实数据加工生成。 明细数据层(DWD)和汇总数据层(DWS):CDM 层又细分为 DWD 层和 DWS 层,分别是明细数据层和汇总数据层,采用维度模型方法作为理论基础 ,更多地采用一些维度退化手法, 将维度退化至事实表中,减少事实表和维表的关联 ,提高明细数据表的易用性;同时在汇总数据层, 加强指标的维度退化, 采取更多的宽表化手段构建公共指标数据层,提升公共指标的复用性,减少重复加工。 应用数据层(ADS):存放数据产品个性化的统计指标数据,根据 CDM 层与 ODS 层加工生成 。 6、模型设计原则 (1)高内聚和低耦合 主要从数据业务特性和访问特性两个角度来考虑:将业务相近或者相关、粒度相同的数据设计为一个逻辑或者物理模型;将高概率同时访问的数据放一起,将低概率同时访问的数据分开存储。 (2)核心模型与扩展模型分离 建立核心模型与扩展模型体系,核心模型包括的字段支持常用的核心业务,扩展模型包括的字段支持个性化或少量应用的需要 ,不能让扩展模型的宇段过度侵入核心模型,以免破坏核心模型的架构简洁性与可维护性。 (3)公共处理逻辑下沉及单一 越是底层公用的处理逻辑越应该在数据调度依赖的底层进行封装与实现,不要让公用的处理逻辑暴露给应用层实现,不要让公共逻辑多处同时存在。 (4)成本与性能平衡 适当的数据冗余可换取查询和刷新性能,不宜过度冗余与数据复制。 (5)数据可回滚 处理逻辑不变,在不同时间多次运行数据结果确定不变。 (6)一致性 具有相同含义的字段在不同表中的命名必须相同,必须使用规范定义中的名称。 (7)命名清晰、可理解 表命名需清晰、一致,表名需易于消费者理解和使用。 二、维度设计 1、基本概念 在维度建模中,将度量成为“事实”,将环境称为“维度”。代理键和自然键–例如,对于前台应用系统来说,商品ID是代理键;而对于数据仓库系统来说,商品ID则属于自然键。 2、规范化和反规范化 当属性层次被实例化为一系列维度,而不是单一维度时被称为雪花模型。大多数OLTP系统模型采用雪花模型这种规范化操作。采用雪花模型,除了可以节约一部分存储外,对于OLAP系统来说没有其他效用,而现阶段存储的成本很低,所以在实际应用中几乎总是使用维表的空间来换取简明性和查询性能。 3、维度整合 数据集成到数仓中的体现: 命名规范的统一字段类型的统一公共代码及代码值的统一业务含义相同的表的统一:通常有3种方式–主从表(将多个表都有的字段放在主表中,而从属信息分别放在各自的从表中)、直接合并、不合并,具体可以根据源表重合度及差异等状况确定。 垂直整合: 不同的来源表包含相同的数据集,比如淘宝会员在源系统中有多个表,包括会员基础信息表、会员扩展信息表等,可以尽量垂直整合到会员维度模型中。 水平整合: 不同的来源表包含不同的数据集,不同子集之间无交叉,也可以存在部分交叉,如果要整合则可以采用各子集的自然键作为联合主键的方式来实现。 4、维度拆分 水平拆分: 属性差异较大时,将所有属性建在一张维表中是不切实际的。可以抽象出稳定的公共维度,特殊维度单独落地。两个相关性较低的业务,整合在一起弊大于利,对模型的稳定性和易用性影响较大,需要拆分单独落地。 垂直拆分:

centos7下离线安装mysql

1.下载 官网下载:MySQL :: Download MySQL Community Server (Archived Versions) 我这边是centos7,所以选择Red Hat Linux7版本,选择RPM Bundle版本下载。 ​ 2.安装 上传到centos7服务器上 #根据你自己下的版本解压缩 tar -xvf mysql-8.0.11-1.el7.x86_64.rpm-bundle.tar #安装 rpm -ivh mysql-community-common-8.0.11-1.el7.x86_64.rpm --nodeps --force rpm -ivh mysql-community-libs-8.0.11-1.el7.x86_64.rpm --nodeps --force rpm -ivh mysql-community-client-8.0.11-1.el7.x86_64.rpm --nodeps --force rpm -ivh mysql-community-server-8.0.11-1.el7.x86_64.rpm --nodeps --force # MySQL大小写敏感由lower_case_table_names参数控制,默认为0表示大小写敏感,MySQL 8.0 之前版本,直接在/etc/my.cnf加入lower_case_table_names = 1参数重启MySQL即可修改成功,但MySQL 8.0以后此参数只能在数据库软件第一次启动时修改,之后无法修改,如果强行修改启动会报错。 cd /etc/my.cnf,添加lower_case_table_names = 1 #对mysql数据库的初始化和相关配置命令,包含自启动: mysqld --initialize chown mysql:mysql /var/lib/mysql -R systemctl start mysqld.service systemctl enable mysqld #查看数据库的密码命令: cat /var/log/mysqld.log | grep password #连接mysql: mysql -u root -p #修改密码: mysql>ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'admin@123'; #开启远程: mysql>update mysql.

sdc中set_multicycle_path的解释

目录 1.同频时钟,时钟上升沿对齐 2.launch clk是快时钟,capture clk是慢时钟 3.launch clk是慢时钟,capture clk是快时钟 总结 最近遇到了set_multicycle_path的问题,网上看到几篇文章有些有自相矛盾的地方。自己研究了半天先将自己的理解整理如下。理解错误之处欢迎指正。 该命令的格式如下: set_multicycle_path path_multiplier [-setup|-hold] [-start|-end] \ -from <StartPoint> -through <ThroughPoint> -to <EndPoint> 其中: Default path_multiplier: Setup 1, Hold 0. setup/hold :表明path_multiplier是针对setup(max delay)或者是hold(min delay)的操作。 start:表示要移动的clock为start clock也就是launch clock。hold默认移动该clk。 end:表示要移动的clock为end clock也就是capture clock。setup默认移动该clk。 当start clk和end clk为同频时,指定这两个选项是无意义的,因为此时两个clock频率一致。 关于这个问题分为3类 同频时钟。launch clk是快时钟,capture clk是慢时钟launch clk是慢时钟,capture clk是快时钟。 下面对于上述情况依次分析。 1.同频时钟,时钟上升沿对齐 如下图所示,为默认的STA检查情况。 这种情况对应的multicycle设置如下 set_multicycle_path 1 -setup -from CLK1 -to CLK2 set_multicycle_path 0 -hold -from CLK1 -to CLK2 可以看出默认情况下 setup 检查是从 launch clk的一个上升沿到下一个capture clk的上升沿。

简单尝试将go项目用宝塔部署到服务器

最近写了一个go项目的小demo打算放到服务器上,但是中间遇到一些问题,这里我记录下: 一、找一个文件夹将打包后的go项目放进去,如图 注意:如果项目中需要加载一些配置文件,由于打包后只有一个exe文件,需要手动将配置文件放到目录下,具体路径需要调试下 二、安装执行exe文件的wine 终端执行命令 yum install wine 终端在这,如图: 这里安装的时候如果出现 command not found 这个错误 我这里包管理工具是 yum 所以执行 sudo yum install git 命令解决, 之后在执行 yum install wine 安装wine 三、在宝塔上创建go项目 注意这里的执行命令需要是这样的:wine xxxx.exe 上面步骤都操作完了以后,去对应端口上测试一下就发现可以了,注意端口要开放哦,就这样🤪

2023黑马头条.微服务项目.跟学笔记(四)

2023黑马头条.微服务项目.跟学笔记 四 自媒体文章-自动审核今日内容介绍1.自媒体文章自动审核流程2.内容安全第三方接口2.1 概述2.2 准备工作2.3 文本内容审核接口2.4 图片审核接口2.5 项目集成 3.app端文章保存接口3.1 表结构说明3.2 分布式id3.3 思路分析3.4 feign接口 4.自媒体文章自动审核功能实现4.1 表结构说明4.2 实现4.3 单元测试4.4 feign远程接口调用方式4.5 服务降级处理 5.发布文章提交审核集成5.1 同步调用与异步调用5.2 Springboot集成异步线程调用 6.文章审核功能-综合测试6.1 服务启动列表6.2 测试情况列表 7.新需求-自管理敏感词7.1 需求分析7.2 敏感词-过滤7.3 DFA实现原理7.4 自管理敏感词集成到文章审核中 8.新需求-图片识别文字审核敏感词8.1 需求分析8.2 图片文字识别8.3 Tess4j案例8.4 管理敏感词和图片文字识别集成到文章审核 9.文章详情-静态文件生成9.1 思路分析9.2 实现步骤 10.今日作业以及思考 自媒体文章-自动审核 今日内容介绍 1.自媒体文章自动审核流程 文章数据流 流程: 自动审核的流程如下: 1 自媒体端发布文章后,开始审核文章 2 审核的主要是审核文章的内容(文本内容和图片) 3 借助第三方提供的接口审核文本 4 借助第三方提供的接口审核图片,由于图片存储到minIO中,需要先下载才能审核 5 如果审核失败,则需要修改自媒体文章的状态,status:2 审核失败 status:3 转到人工审核 6 如果审核成功,则需要在文章微服务中创建app端需要的文章 2.内容安全第三方接口 2.1 概述 内容安全是识别服务,支持对图片、视频、文本、语音等对象进行多样化场景检测,有效降低内容违规风险。 目前很多平台都支持内容检测,如阿里云、腾讯云、百度AI、网易云等国内大型互联网公司都对外提供了API。 按照性能和收费来看,黑马头条项目使用的就是阿里云的内容安全接口,使用到了图片和文本的审核。 阿里云收费标准:https://www.aliyun.com/price/product/?spm=a2c4g.11186623.2.10.4146401eg5oeu8#/lvwang/detail 2.2 准备工作 您在使用内容检测API之前,需要先注册阿里云账号,添加Access Key并签约云盾内容安全。

格利尔实习经历记录(2023.6.30-7.10)

文章目录 12345 1 本次实习,我们首先在会议厅光看企业的介绍视频和相关ppt,从中了解到分析一个企业应该从以下四方面进行考虑:企业概况、事业架构、发展模式和企业文化。该企业致力于孕妇的生理健康和婴幼儿状况监测,从事业架构上,分为行政中心、营销中心、质量中心等。从发展模式看从1996年创业至今,一步步取得成就。从企业文化中,有相应的文化委员会、班车、食堂、宿舍等都有相应组织,也会定期举行活动。 在此期间,实习老师吕磊强调治理分为法制和人治,法制也就是迟到早退等情况处理、而人治则是通过企业文化进行影响,同时也表明如果一个人不能融入企业文化,很容易被隔离,不受重视,因此对于我们需要逐步接受企业文化。并且讲述了加西亚的信的故事,结合之前所了解的情况,企业会给你全新的挑战,这个挑战是你之前完全没有了解,甚至怎么算完成你都不知道,这是需要执行力、不推脱的体现,因此完成任务才是最重要的。结束讲座,带我们来到了企业的成品展示区,自主研发了婚前检测、婴儿健康检测等多种仪器的使用,感受到一个企业能取得如此成就,也是花费巨大的心血。又去了研发部、营销部和质检部,感受到优质的工作环境,感受到那种认真工作的态度。之后又去了生产车间,和我想象的流水线不太一样,人员稀少,只有零零散散的几个人在生产,很多设备也没开启,不过也算是见识到一个生产车间的几个部分,物料、装件、质检等 2 我所分配在的是贴装组,我们带上防静电服,进入杀毒室进行消杀,之后就到了我所实习的车间,他们这个车间做的是对已经打印出来的PCB进行上锡贴片焊接,他们这里一共4个流水线,其中一个已经关停,一个是生产控制板另外两个就是生产两种LED警示灯。由于流程都是一样的,我将以一条LED流水线进行介绍。首先就是第一道工序就是印刷机,就是通过钢网覆上PCB再用铣刀进行上锡,这其中重要一点就是找到PCB的MARK点,这也是这台机器经常报错的原因,它找不到这个MARK点所以需要人工在旁边框出。这我第一反应就是Labview的视觉图像处理,这种控件的定位第一想到的就是Labview的工业应用,我看了那张图片,就是二值化后的图片,但是边缘很粗糙应该是没有经过平滑处理吧,机器需要找到那个框,应该是阈值太高了,所以经常找不到那个框。 此时出来的板子通过接驳机可以看到已经附上锡膏了,下一步就是送入锡膏光测机,这个机器的主要目的通过光学反射确定在焊点所上的锡膏是否厚度合格、是否位置对其。这个机器也是经常报错,询问了那边的工作人员之后才知道这是,这台机器也是属于视觉检测机器,由于对上锡的厚度很严格,因此也会经常报警报另一类错误就是检测不到焊点处的锡膏或者说是框到了一半也会报错,还是想到Labview的工业级应用,确实是这种图像处理最便捷的还是labview,当我思考labview应用于这种场景时,发现可行性是非常高的,结合着项目想了想只有视觉加上运动才更具有实际意义。 3 第三天继续给我们介绍接下来的工序,首先就是自动贴装机,1秒钟能贴3-4个元器件,由于PCB版可能元器件数量不等,所以那里一条流水线总共两个自动贴装机,此时PCB版上已经贴上所有常见的贴片元器件,此时需要一名员工在最后的贴装机的接驳台上进行人工检测防止有自动贴片机的疏漏,最后一步工序就是回流焊了,利用回流所产生的高温对焊锡进行融化再降温,融化温度大概在250度左右,210度左右是锡膏凝固。具体情况也各有各的不同,因此那边的班长也给我们看了一些过往的样本,都是用来测试温度的,有电源模块、控制板、LED警报灯等等。 之后班长又给我们讲了设计PCB板的一些特殊情况,比如设计的时候对过孔的要求,一个PCB指定多少个过孔,特殊的元器件之间的距离也是有严格的距离把控,例如LED和电源的的输入端的距离是需要大于版面的一半,也就是说,在电路设计出来的之后,更难的部分就是PCB布线方面的设计,因此在设计PCB的时候难度并不是向我们想的那样轻松容易,在校的我们对于布线没有那么多考虑,不会考虑元器件和元器件之间的影响,因此我们总是疏忽了实际情况的考虑。对于回流焊之后其实还有一个质检工序,也就是通过LM光测机,看看是否有错误,比如高温时,可能二极管突然翻转过来,或者其他空焊、虚焊等情况,因此需要最后进行质检。 4 第四天,我们来到格利尔集团的成品展厅,期间我们看到了该企业的历年的的产品成果,有做高速路灯、有台灯,让我印象最深就是光通信装置和逆变器。光通信是一种利用光传输数据的通信技术。它使用光纤作为传输媒介,通过光的折射和反射来传输信息。 光通信具有许多优点。首先,光信号传输速度非常快,因为光的传播速度比电磁波快得多。这使得光通信在需要高速数据传输的场景中非常有用,如互联网、视频流媒体和云计算等领域。其次,光通信具有较高的带宽能力。由于光纤的宽带特性,可以同时传输大量的数据。这使得光通信能够满足日益增长的数据需求,支持更多用户和应用程序。 另外,光通信还具有较低的信号衰减和干扰问题。相比于传统的电缆系统,光纤传输的信号损耗很小,并且不容易受到电磁干扰的影响。这使得光通信系统更加稳定可靠。 光通信在现代通信领域发挥着重要作用。它被广泛应用于光纤通信网络、无线通信基站之间的连接以及数据中心内部的连接等领域。随着技术的不断发展,光通信还在不断创新和进步,为人们提供更快、更可靠的通信服务。 5 我们这一次进行生产车间的参观,首先我们穿好防护服进入消杀室,去除静电,负责人也明确表示,静电对于芯片的危害性特别大,因此进入一楼的贴装车间的时候必须经过这个过程,然后我们进入我所在的贴装车间,这里不再赘述,之后我们来到质检区,负责人说这里有个通电检测装置,这一套从硬件到软件都是企业独立作出的,之后我们去了他们的生产车间,首先看见的,就是应急电源,为了在断点的时候,这些电源可以为LED供电持续1-2两小时的工作时间,这也是安全的急救所需要的时间区间,之后看到了对于电源的衰老检测,也就是测试电源的运行时长和效率等等。之后到了他们生产台灯的地方,根据负责人所说,这里的台灯只对美国进行出售,国内只有生产权,没有对国内销售,在国外这个台灯售价的138美元,经过介绍我才知道,这个台灯不仅仅是台灯,在灯光方面模拟了太阳阳光并且集成了蓝牙、闹钟、远控等多种功能。这么多的功能真的让我叹为观止。 之后就是进入了二楼,一进去就是变压器,各种变压器,有自动缠绕的,也有人工缠绕的,分别对应看需求量的大小而决定的,各种变压器这里都是可以生产的。当然我对这部分工艺不是特别了解,所以没太懂。

众多高校和研究机构联合发表:LLMs评估综述

本篇文章是一份关于大型语言模型评估的综述,涵盖了评估的各种方法,包括评估什么、在哪里评估以及如何评估。 进NLP群—>加入NLP交流群 文章首先介绍了大型语言模型的发展历程和应用领域,然后详细介绍了大型语言模型的评估方法,包括人工评估、自动评估和基准测试等。接着,文章介绍了大型语言模型在不同任务中的表现,包括文本生成、问答、机器翻译等。最后,文章总结了大型语言模型评估的挑战和未来发展方向。 本文结构图 本文贡献点 LLMs评估论文趋势图 评估内容 本次调查涵盖了多个关键评估任务,包括一般自然语言处理任务、推理、医疗应用、伦理、教育、自然和社会科学、代理应用和其他领域。 最新综述评估任务总结 LLM 关于稳健性、道德、偏见和可信度的评估摘要。 基于数学、科学和工程三个方面的自然科学与工程任务评估综述 基于四个方面对医疗应用的评价总结:考试、助理、问答和教育 其他应用的评估总结,包含四方面:教育、搜拖推荐、性格测试和其他特殊任务 文章中提到了关于LLM在不同任务中成功和不成功的案例。 具体来说,在自然语言理解任务中,LLM在多项任务中表现出色。在文本生成任务中,LLM的生成质量有时甚至超过了人类提供的参考答案。然而,在法律任务中,LLM的零样本性能较差,存在多种问题,包括不完整的句子和单词、多个句子被无意义地合并以及更严重的错误,如不一致和虚构信息。 哪里评估 LLM 评估基准总结 评估方法和基准在评估LLM的表现中发挥着关键作用。 评估方法可以帮助研究人员确定LLM在不同任务中的表现,并提供改进LLM的方向。基准测试可以提供一个公共的标准,使得不同的研究人员可以在相同的数据集上进行比较,从而更好地评估LLM的表现。因此,评估方法和基准测试都是评估LLM表现的重要组成部分。 怎么评估 主要包括自动评估和人工评估。 评估协议总结 结论 本文的结论是,评估应该被视为更好地帮助开发更有效的LLM的关键学科。文章总结了LLM的评估方法和基准测试,并提供了LLM在不同任务中的成功和失败案例。此外,文章还指出了LLM评估面临的未来挑战。最后,本文还提供了一个开源的材料库,以帮助研究人员更好地评估LLM的表现能力。 论文: A Survey on Evaluation of Large Language Models 地址: https://arxiv.org/abs/2307.03109 进NLP群—>加入NLP交流群

【Redis】不卡壳的 Redis 学习之路:从十大数据类型开始入手

目录 类型 String 字符串 List 列表 Set 集合 Sorted Set /ZSet 有序集合 Hash 哈希表 GEO 地理空间 HyperLogLog 基数统计 Bitmap 位图 BitField 位域 Stream 流 线上测试地址 常用命令 key 操作指令 String 操作指令 List 操作指令 Set 操作指令 ZSet 操作指令 Hash操作指令 GEO 操作指令 HyperLogLog 操作指令 Bitmap 操作指令 Bitfield 操作指令 Stream 操作指令(附示例) 这是Redis系列的第一篇( ̄∇ ̄)/,我们来介绍众说纷纭的Redis数据类型,本文会对 Redis 7.0 中10大数据类型的基本定义、使用场景、常用命令进行通俗易懂的介绍(就是额。。🤔说人话),看完会对Redis的数据类型方面有个全面的了解(应付个面试够够的),如果还想要更深入更全面的学习,我也都附上了官方文档的地址,可直达权威⁄(⁄ ⁄ ⁄ω⁄ ⁄ ⁄)⁄ 正文开始┏ (^ω^)= 估计大家应该也都看过挺多相关的内容,但各个文章总有些小不同,首先强调下,本系列文章讨论的是 Redis 7.0,不同版本之间还是有有一些差异的,为确保准确,我们直接看官网 https://redis.io/docs/data-types/ 类型 这里的类型是Value,Key一般都是String Strings Lists Sets Sorted Sets (ZSet)

根据Java实体生成建表SQL(2.0版本)

package com.zyq.ok; import java.io.*; import java.lang.invoke.SerializedLambda; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.math.BigDecimal; import java.time.LocalDate; import java.util.*; import java.util.function.Function; /** * @author Yuanqiang.Zhang * @since 2023/7/5 */ public class ClassUtils { public static void main(String[] args) throws Exception { Table table = getTable(User.class); System.out.println(table.sql()); } /** * Java类转化为数据库表对象 * * @param c java实体类 * @param <T> 泛型 * @return 数据库表对象 */ private static <T> Table getTable(Class<T> c) { List<String> codes = getClassSourceCodes(c); Map<String, Column> columnMap = getFieldColumnMap(c, codes); Class<?

PHP & Golang 关于Grpc 学习笔记

Grpc 入门介绍 gRPC 官方文档中文版_V1.0 安装教程 在Golang 下安装 go get google.golang.org/grpc v1.56.1 go get google.golang.org/protobuf v1.30.0 在PHP下安装grpc 扩展 使用composer 安装grpc和protobuf(推荐使用)。 { "name": "root/work", "type": "composer-plugin", "autoload": { "psr-4": { "Root\\Work\\": "src/" } }, "authors": [ { "name": "wangxiaoyang" } ], "require": { "grpc/grpc": "^1.52", "google/protobuf": "^3.23" } } 安装php扩展(grpc.so,protobuf.so) pecl install grpc pecl install protobuf grpc_php_plugin 依赖安装(安装过程较慢)(用于生成客户端代码,可手动写客户端代码) git clone -b RELEASE_TAG_HERE https://github.com/grpc/grpc cd grpc git submodule update --init mkdir -p cmake/build cd cmake/build cmake .

easyexcel自定义样式

1、导入接口 导入工具类中 .registerWriteHandler(new OrgSheetWriteHandler()) 自定义拦截器进行设置 .registerWriteHandler(OrgSheetWriteHandler.getStyleStrategy()) 自定义内容、标题格式 .needHead(false) 不需要表头 public static void exportOrgModelExcel(List<?> list, String sheetName, Class<?> pojoClass, String fileName, HttpServletResponse response) { OutputStream out = null; try { if (fileName.indexOf(".") < 0) { throw new BizException("文件名必须带后缀"); } response.reset(); response.setCharacterEncoding("UTF-8"); response.setContentType("charset=UTF-8;application/form-data"); response.setHeader("Content-Disposition", "attachment; filename=" + new String(fileName.getBytes(), "ISO8859-1")); response.setHeader("Set-Cookie", "fileDownload=true; path=/"); out = response.getOutputStream(); EasyExcel.write(out, pojoClass).sheet(StringUtils.isEmpty(sheetName) ? "sheet0" : sheetName) // 宽度自适应 .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) // 第9列设置为文本格式 .registerWriteHandler(new OrgSheetWriteHandler()) // 自定义全表的样式 .

oracle11g发行版的卸载(详细教程)

1、控制面板->管理工具->服务 停止所有Oracle服务。 2、使用程序中的Universal Installer卸载所有Oracle产品。 在开始菜单找到oracle安装程序,选择卸载 3、win+r运行regedit,选择HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE,按del键删除这个入口。 4、选择HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Servic es,滚动这个列表,删除所有Oracle入口 5、从桌面上、STARTUP(启动)组、程序菜单中,删除所有有关Oracle的组和图标 6、重新启动计算机,重起后才能完全删除Oracle所在目录 7、删除与Oracle有关的文件,选择Oracle所在的缺省目录C:\Oracle,删除这个入口目录及所有子目录.

Nginx实现内网穿透

外网ip访问内网服务器 端口映射Nginx端口映射介绍使用步骤注意事项二级目录三级目录 端口映射 Nginx作为一款强大的反向代理服务器,可以通过端口映射的方式实现将内网的服务暴露到外网,从而实现安全的内网穿透。 而在实际应用中,花生壳作为一款知名的内网穿透服务工具,也经常与Nginx端口映射相结合使用,为用户提供便捷的远程访问和管理体验。 Nginx端口映射介绍 Nginx端口映射是一种将外网的请求转发到内网的服务的方式,这对于需要在内网部署服务,但又希望外网用户能够访问的场景非常实用,例如家庭网络中的NAS设备、本地测试服务器等。 而在使用Nginx端口映射时,花生壳作为一款内网穿透服务工具,可以帮助用户解决一些常见的问题。例如,对于拥有动态IP地址的用户,花生壳可以提供动态DNS服务,将动态IP地址映射到用户自定义的域名上,从而方便用户通过域名访问内网服务器。此外,花生壳还提供了安全认证、访问控制等功能,可以保护内网服务器的安全性和隐私。 使用步骤 使用Nginx端口映射和花生壳内网穿透服务的步骤相对简单。在花生壳的官方网站上注册账号,创建一个隧道,将Nginx服务器的外网IP地址和端口与花生壳提供的域名或者自定义的域名绑定起来。最后,根据花生壳提供的客户端软件或者API接口,将隧道与Nginx服务器进行连接,从而实现安全的内网穿透。 注意事项 需要注意的是,在使用Nginx端口映射和花生壳内网穿透服务时,应该遵循当地法律法规和相关规定,合法合规地使用这些技术。同时,也应该注意确保服务器和花生壳账号的安全。例如,应定期更新Nginx服务器的软件和操作系统,设置合理的访问控制策略,以防止未经授权的访问。同时,花生壳账号的密码应该设置为强密码,并且不要轻易泄露给他人,以保护账号的安全性。 此外,还应该定期监控Nginx服务器和花生壳账号的使用情况,及时发现异常活动并采取相应措施。例如,及时关闭不再使用的端口映射规则,及时撤销不需要的花生壳隧道,以减少安全风险。 总的来说,使用Nginx端口映射结合花生壳内网穿透服务可以实现安全的内网穿透,方便外网用户访问内网服务器的服务。但在使用时,应遵循合法合规的原则,保护服务器和账号的安全,以确保数据和隐私的保密性。 二级目录 三级目录

MySQL8 - Docker官方镜像的使用

我这里安装的是8.0.25的版本。 1、获取MySQL的Docker镜像 docker pull mysql:8.0.25 2、重新打TAG并上传Harbor服务器 重新打TAG docker tag mysql:8.0.25 11.248.245.184/mysql/release:8.0.25 上传Harbor docker push 11.248.245.184/mysql/release:8.0.25 3、启动MySQL 登陆服务器,并下载镜像 docker pull 11.248.245.184/mysql/release:8.0.25 在启动之前初始化MySQL的配置,新建文件路径 sudo mkdir /home/mysql/conf.d 在新建的文件夹下面添加如下配置文件 docker.cnf文件 [mysqld] skip-host-cache skip-name-resolve default_authentication_plugin = mysql_native_password mysql.cnf文件 # Copyright (c) 2015, 2021, Oracle and/or its affiliates. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License, version 2.0, # as published by the Free Software Foundation.

【Zabbix 6.0 监控系统安装和部署】

目录 一、Zabbix 介绍1、zabbix 是什么?2、zabbix 监控原理(重点)3、Zabbix 6.0 新特性4、Zabbix 6.0 功能组件1、Zabbix Server2、数据库3、Web 界面4、Zabbix Agent5、Zabbix Proxy6、Java Gateway 二、Zabbix 6.0 部署1、部署 zabbix 服务端2、部署 Nginx + PHP 环境并测试1、安装 nginx2、安装 php3、修改 nginx 配置4、修改 php 配置5、创建目录和测试文件6、启动服务7、在源主机上进行测试访问 3、部署数据库,==要求 MySQL 5.7 或 Mariadb 10.5 及以上版本==1、配置 Mariadb yum源2、初始化数据库3、创建数据库并指定字符集4、创建 zabbix 数据库用户并授权5、向数据库导入 zabbix 数据 4、编译安装 zabbix Server 服务端1、安装依赖包,创建 zabbix 用户2、编译安装3、检查版本4、修改 zabbix server 配置文件,修改数据库的密码 5、准备 systemctl 服务管理文件6、部署 Web 前端,进行访问7、浏览器访问测试 三、zabbix监控系统1、创建登录页面2、安装 zabbix 客户端,实现 zabbix 服务端自我监控3、解决 zabbix-server Web页面中文乱码问题 一、Zabbix 介绍 利用一个优秀的监控软件,我们可以: ●通过一个友好的界面进行浏览整个网站所有的服务器状态 ●可以在 Web 前端方便的查看监控数据

QT运行不出界面

如果只出现如下一个黑色运行窗口 说明你环境配置的基本没啥问题,可以试试 项目->构建设置中->General->【Shadow build】取消勾选,如下 如果第一种没有解决,看下构建出的release目录或者debug目录中,是否缺少dll文件,如下两个目录下面 如果没有dll文件,可以拉dll文件到release或者debug目录下面 然后就能正常运行出界面了 如果报“未找到文件:***.obj” 查看自己项目中引用的***.h和***.cpp文件是否在***.pro文件中包含,如果没有包含,将.h和.cpp文件加进去,就不报错了。 如果上述方法都不行,看下具体报错,动手再查查,也可以找个有经验的同事或者同学问下。

Spring Boot实训项目 瑞吉外卖功能实现

1 实训基本信息 1.1 实训项目名称 “外卖点餐”系统。 1.2 实训时间及地点 2 实训内容简介 本项目(“外卖点餐”系统)是专门为餐饮企业(餐厅、饭店)定制的-款软件产品,包括系统管理后台和移动端应用两部分。 其中系统管理后台主要提供给餐饮企业内部员工使用,可以对餐厅的菜品、套餐、订单等进行管理维护。移动端应用主要提供给消费者使用,可以在线浏览菜品、添加购物车、下单等。 3 需求分析 3.1 软硬件条件 IDEA 2021.2.3 MySQL 5.5 MyBatis MyBatisPlus Git: 版本控制工具。 Maven: 3.6.1 Junit:单元测试工具。 3.2 技术可行性 3.2.1 技术需求 外卖点单、支付、订单管理、配送等功能是瑞吉外卖必不可少的技术需求。此外,还需要提供用户注册、登录、反馈、推荐等功能。 3.2.2 市场需求 外卖市场的需求是巨大的,但竞争也是非常激烈的。应该进行市场细分,并确定与众不同的商业模式和目标用户,同时提供具有差异化的服务和体验。 3.2.3 开发成本 应该评估开发瑞吉外卖应用所需的成本,包括技术设计、软件工程、移动端应用开发、数据分析等方面。 3.2.4 数据连通性 外卖应用需要和多个配送和支付供应商的应用进行连接,确保订单的顺利传递和支付的正确处理。 3.2.5 用户体验 好的用户体验是被用户所赞赏和记住的重要要素。外卖应用中,用户体验包括易用、快速、准确、方便等多个方面。 4 功能设计 4.1 管理端 4.1.1 登录/退出 内部员工必须登录后,才可以访问系统管理后台。 4.1.2 员工管理 管理员可以在系统后台对员工信息进行管理,包含查询、新增、编辑、禁用等功能。 4.1.3 分类管理 主要对当前餐厅经营的菜品分类或套餐分类进行管理维护,包含查询、新增、修改、删除等功能。 4.1.4 菜品管理 主要维护各个分类下的菜品信息,包含查询、新增、修改、删除、启售、停售等功能。 4.1.5 套餐管理 主要维护当前餐厅中的套餐信息,包含查询、新增、修改、删除、启售、停售等功能。 4.1.6 订单明细 主要维护用户在移动端下的订单信息,包含查询、取消、派送、完成,以及订单报表下载等功能。 4.2 用户端 4.2.1 登录/退出

Java课程实验 Spring Boot 文件上传与下载

一、实验目的 1.文件上传 2.文件下载 二、实验内容 1.掌握 Spring Boot 中 MVC 功能的定制和扩展 2.掌握 Spring Boot 整合 Servlet 三大组件的实现 3.掌握 Spring Boot 文件上传与下载的实现 三、实验步骤及截图 1.使用Idea+Maven新建项目,并对Idea必要配置。 2.导入数据库,配置POM.xml引入commons-io等必要包。 3.编写 全局配置文件 application.properties,配置上传下载参数等。 4.编写入口类。 @EnableCaching @ServletComponentScan @SpringBootApplication public class Chapter04MySQL { public static void main(String[] args) { SpringApplication.run(Chapter04MySQL.class); } } 5.编写controller类,实现文件上传功能。 @Controller public class FileController { String pathParent = "G:/File"; //向文件上传页面跳转 @GetMapping("/toUpload") public String toUpload(){ return "file/upload"; } //文件上传管理 @PostMapping("/uploadFile") public String uploadFile(MultipartFile[] fileUpload, Model model) { //上传成功返回状态信息 model.

Java课程实验 Spring Boot 任务管理

一、实验目的 1.使用 Spring Boot 完成异步任务、定时任务以及邮件任务。 二、实验内容 1.熟悉 Spring Boot 整合异步任务的实现 2.熟悉 Spring Boot 整合定时任务的实现 3.熟悉 Spring Boot 整合邮件任务的实现 三、实验步骤及截图 1.使用Idea+Maven新建项目,并进行必要配置。 2.编写入口类,并启用计划任务。 @EnableScheduling @SpringBootApplication public class ChapterAsync_LWL { public static void main(String[] args){ SpringApplication.run(ChapterAsync_LWL.class,args); } } 3.在service类,编写方法测试cron定时任务。 // 简单的定时任务 @Scheduled(cron = "10 * * * * *") public void Task01(){ System.out.println("***********每分钟的第10S启动!*********"+simpleDateFormat.format(new Date())); } 4.在service类,编写方法测试fixedDelay定时任务。 //delay从第一次开始就计算间隔时间 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); int index = 1; @Scheduled(fixedDelay = 10000) public void Task02(){ System.

Perl 通过sqlplus 执行Spool语句

====>a.sql spool on set pages 50000 set lines 200 set trims on set colsep ',' set heading off set termout off set feedback off SPOOL t2.csv select /*+PARALLEL(20)*/ BROAD_RATE_ATTR_ID, '20230707','duanhw' from T_DIM_BROAD_RATE; SPOOL OFF exit ====> my $sql_script = 'a.sql'; system("sqlplus user/passwd\@DB3 \@${sql_script} \\ ");

Redis Cluster 7.0 用户管理与ACLs权限控制

在Redis6之前的版本,我们只能使用requirepass参数给default用户配置登录密码,同一个redis集群的所有开发都共享default用户,难免会出现误操作把别人的key删掉或者数据泄露的情况,那之前我们也可以使用rename command的方式给一些危险函数重命名或禁用,但是这样也防止不了自己的key被其他人访问。 因此Redis6版本推出了ACL(Access Control List)访问控制权限的功能,基于此功能,我们可以设置多个用户,并且给每个用户单独设置命令权限和数据权限。 为了保证向下兼容,Redis6保留了default用户和使用requirepass的方式给default用户设置密码,默认情况下default用户拥有Redis最大权限,我们使用redis-cli连接时如果没有指定用户名,用户也是默认default。 我们知道既然redis6.0之后允许创建多个用户,那么redis-cli在认证的过程中,认证的方式就会发生改变: 老的认证方式:AUTH <password>新的认证方式:AUTH <username> <password> 一、开启ACL配置 在介绍ACLs之前,我们先开启ACL配置。配置ACL的方式有两种: 用户可以直接在redis.conf文件中指定;可以指定外部ACL文件。 这两种方法是相互不兼容的,所以Redis会要求你使用其中一种。在redis.conf中指定用户适用于简单的用例。在复杂的环境中,当需要定义多个用户时,建议使用ACL文件。 在redis.conf和外部ACL文件中使用的格式是完全相同的,所以从一种方式切换到另一种方式的情况,不需要关注ACL命令格式的变化,如下所示: user <username> ... acl rules ... 例如: user worker +@list +@connection ~jobs:* on >efa7303c493aa09 注意: 两种配置方式,对于存储新用户配置所使用的命令有所不同: redis.conf方式:使用CONFIG REWRITE来通过重写文件来存储新的用户配置。ACL file方式:使用ACL SAVE来通过重写文件来存储新的用户配置。 我这里只ACL File的配置模式: 如果之前使用了config模式,redis.conf中会有之前已经生效的DSL,我们需要注释掉。例如: #user default on nopass ~* &* +@all 可能我们的redis.conf文件中还会有requirepass配置,当我们开启ACL之后,requirepass将不在生效,这里我们也注释掉,当然如果不注释也不会有影响: #requirepass default123 在config文件中配置aclfile的路径,需要在redis.conf中添加: #这里需要注意如果是docker形式部署,引用的是docker容器中的挂载路径 aclfile /home/redis/conf/users.acl 需要注意对应的文件要先建立好,不然重启redis时会报错。 touch /home/redis/conf/users.acl && chmod -R 777 /home/redis/conf/ 重启redis即生效。(配置完成之后,default用户属于无密码状态) 使用外部ACL文件的方式会更强大。可以执行以下操作: 如果手动修改了ACL文件后发现配置错误,我们想要恢复到之前Redis中ACL的旧配置时,可以使用ACL LOAD。注意,只有在正确指定了所有用户时,该命令才能加载文件。否则,将向用户报告错误,旧的配置仍然有效;(对于这方面,redis.conf方式想要实现ACL LOAD的效果,只能重启redis服务,在这一方面ACL file方式更强大)使用ACL SAVE命令保存当前ACL配置到ACL文件中; 开启aclfile之后不能使用redis-cli -a xxx登陆,必须使用redis-cli --user xxx --pass yyy来登陆。

CSS动画之——跑马灯的无缝循环

在写官网的过程中,有一个需求是想要是先人物卡片横向无缝循环的功能。但是直接用跑马灯的时候发现他的效果是要等所有的盒子都从左边消失后才会从后面出来第一个。 怎么调都不合适 给我整疑惑了, 后来百度下说是可以两个相同的盒子 一前一后,看到这豁然开朗,但是后来忘了是哪篇帖子了 这里记录一下。 先来看看效果 (因为上传限制只能传个单次循环的 首先我是用v-for循环定义了四个盒子 再复制一份 这样我们一共就有八个盒子 <div class="target-top" style="overflow: hidden"> <div class="target-img"> <div v-for="item in targetFors" :key="item.id"> ...//内容不重要 </div> </div> <div class="target-img img-right"> <div v-for="item in targetFors" :key="item.id"> ...//内容不重要 </div> </div> </div> 设置其中的样式 这里还做了一个鼠标移入实现动画暂停以及放大的效果 .target-top { position: relative; overflow: hidden; display: inline-flex; } .img-right { position: relative; left: 10px; // 这里的间距可以根据你想要的宽度自行调整 } .target-img { width: 100%; height: 400px; // display: flex; display: inline-flex; justify-content: space-between; animation: marquee 30s linear infinite; //这里做了一个鼠标移入盒子放大的效果 > div:hover { transition: all 0.

SSH远程连接linux虚拟机详细步骤(超详细)

文章目录 一、 配置环境二、工具下载三、配置过程1、虚拟机里有没有配置`ssh`2、命令安装ssh3、输入Y 继续安装4、重启`ssh`服务5、开启默认端口号6、保存并退出`:q` 回车7、重启`SSH`服务 四、本地`SSH`连接虚拟机1、找到自己的`IP`端口为刚才的`22`2、用`root`用户连接会连接不上,用普通用户连接不会报错 五、致谢 今天搞Redis 的时候一直报错,错误代码如下: To escape to local shell, press 'Ctrl+Alt+]'. 我一直在想是不是Redis哪里配错了,来来回回折腾两天,虚拟机不给力,总是打不开,做完折腾到两点多,终于把Redis安装上了,高兴坏了,以为今天能通了,谁知还是这个错,我这一路郁闷,晚上偶然间想到Xshell是ssh连接工具,是不是虚拟机里面没配置ssh,谁知一试惊天雷,终于好了,竟然好了!!!! 下面把SSH连接虚拟机过程记录下来 一、 配置环境 1、VMware 15 2、ubuntu-18.04.1-desktop-amd64 3、Xshell7 二、工具下载 用到的工具可自行下载 或者联系博主 三、配置过程 首先虚拟机先设置为NAT模式 右击需要配置的虚拟机——>设置——>网络适配器 启动虚拟机 1、虚拟机里有没有配置ssh root@kqz-virtual-machine:/usr/bin/bin# /etc/init.d/iptables start bash: /etc/init.d/iptables: 没有那个文件或目录 这是因为没有安装ssh座椅提示没有这个文件或者目录。 2、命令安装ssh root@kqz-virtual-machine:/etc# sudo apt install openssh-server 3、输入Y 继续安装 您希望继续执行吗? [Y/n] y 获取:1 http://mirrors.aliyun.com/ubuntu bionic-updates/main amd64 ncurses-term all 6.1-1ubuntu1.18.04 [248 kB] 获取:2 http://mirrors.aliyun.com/ubuntu bionic-proposed/main amd64 openssh-sftp-server amd64 1:7.6p1-4ubuntu0.4 [45.5 kB] 获取:3 http://mirrors.

【导出Excel】Excel表格单元格最多放多少个字

结论 Excel的单元格里最多能放32767个字 导出Excel功能注意: 数据库导出: 数据库TEXT类型的数据最多能存放 类型大小utf8最多放几个字gbk最多放几个字用途CHAR255字节85127定长字符串VARCHAR65536字节2184532768变长字符串TINYBLOB255字节85127不超过 255 个字符的二进制字符串TINYTEXT255字节85127短文本字符串BLOB65 535字节2184532767二进制形式的长文本数据TEXT65 535字节2184532767长文本数据MEDIUMBLOB16 777 215字节55924058388607二进制形式的中等长度文本数据MEDIUMTEXT16 777 215字节55924058388607中等长度文本数据LOGNGBLOB4 294 967 295字节14316557652147483648二进制形式的极大文本数据LONGTEXT4 294 967 295字节14316557652147483648极大文本数据

JTS-Java图形拓扑学习笔记

简介 JTS由加拿大的VividSolutions公司开发,是一个用Java语言描述的几何拓扑套件,遵循OpenGIS的Simple Feature Specification,封装了2D几何类型和非常多的空间分析操作,而且包含了不少常见的计算几何算法实现。 JTS被广泛地应用在开源GIS软件中,作为GeoTools和基于GeoTools的GeoServer和uDig的底层库。 JTS官方文档 WKT 在线查看工具 Maven 依赖 <dependency> <groupId>com.vividsolutions</groupId> <artifactId>jts</artifactId> <version>1.13</version> </dependency> 1 2 3 4 5 几何模型 Point 点 Coordinate coord = new Coordinate(102.6806945800781 24.999259605696068); Point point = new GeometryFactory().createPoint( coord ); 1 2 或 WKTReader reader = new WKTReader(new GeometryFactory()); Point point = (Point)reader.read("POINT(102.6806945800781 24.999259605696068)"); 1 2 MultiPoint 多点 WKTReader reader = new WKTReader(new GeometryFactory()); MultiPoint mpoint = (MultiPoint)reader.read("MULTIPOINT((102.6806945800781 24.999259605696068),(102.6811065673828 24.99851282550918))"); 1 2 LineString 线

SpringBoot项目打成jar后加载外部配置文件

我们在开发中老是会出现频繁修改springboot项目中的配置文件,每次都要重新打包,重新验证,重新部署,有没有一劳永逸的方式,肯定是有的,搞起。 SpringApplication 将从 application.properties 以下位置的文件中加载属性并且将其添加到 Spring 的环境当中: 这里说了四种方式可以把配置文件放到外部的。 第一种是在jar包的同一目录下建一个config文件夹,然后把配置文件放到这个文件夹下; 第二种是直接把配置文件放到jar包的同级目录; 第三种在classpath下建一个config文件夹,然后把配置文件放进去; 第四种是在classpath下直接放配置文件(也就是项目resource文件夹下)。 从 一 到 四 优先级逐渐降低。

SPDK学习笔记----理解spdk的工作原理

引言 前段时间,我将<<DPDK和SPDK开源社区>>公众号中收录的SPDK相关的文章学习了一遍,最近结合最新的代码v23.0.x,对example目录下的示例程序hello_word/hello_blob/hello_bdev,以及app目录下的应用程序vhost/nvmef的源码进行了走读分析:和大家熟悉的存储服务程序一样,可以将一个spdk程序分成管理面和数据面,管理面负责程序运行环境的初始化,各子系统及模块的初始化,rpc动态管理,数据面根据管理面中设置好的运行环境和数据结构完成具体的I/O操作。我将以vhost-blk为例,从管理面的初始化,数据面的I/O操作两个层面介绍spdk的实现原理。 注:本文不适合初学者,您至少应该将公众号<<DPDK和SPDK开源社区>>中的文章阅读一遍,了解spdk的基本概念,实现思想,机制,最好在环境上运行,调试下example下面的示例程序,同时对qemu设备虚拟化(virtio)有所了解 virtio 在进入正文前,我们一起来了解下virtio,virtio是当前虚拟化应用中的主要IO(半)虚拟化技术,包括前端驱动(front-end),传输队列(virt-queue)和后端设备(back-end)三部分,前端驱动运行在Guest虚拟机或者bare-metal裸金属应用中,后端设备位于Host主机的Hypervisor虚拟化进程或者独立的进程中,传输队列主要通过共享内存在前端驱动和后端设备间传递数据。后端设备的实现一直在变化,从完全在qemu进程中实现,到vhost, 再到vdpa。传统virtio及vhost-user的实现原理图如下(IO路径如黑色虚线,控制路径如绿色虚线): 从上图我们可以看到:传统virtio和vhost-user在guest侧的处理都是一样的, IO请求从用户程序下发,经过内核IO栈到达virtio驱动,然后通过virtqueue将请求传递给后端设备处理,后端设备处理完成后以中断(irqfd)方式通知虚拟机。 上图左侧的传统virtio实现中,后端设备完全基于Qemu实现,(IO请求添加到virtqueue后,虚拟机会陷入内核,通过KVM通知后端设备有IO达到),qemu进程中的io线程通过virtio-backend从virtqueue中取出请求,将请求通过系统调用传递给内核IO栈,NVMe控制器完成请求后通过物理中断通知qemu的io线程,qemu的io线程通过virtio-backend将响应放入virtqueue并通过虚拟中断通知虚拟机。 上图右侧是vhost-user的实现,控制面仍需qemu参与完成,而virtqueue的数据面从qemu中剥离由vhost程序实现,vhost程序以polling的方式从virtqueue中取出请求,然后将请求交给用户态的NVMe驱动处理,vhost程序以polling方式获取NVMe设备的请求响应,将响应请求添加到virtqueue并通过虚拟中断通知虚拟机。 vhost-blk控制面 配置编译好spdk后,app目录下会生成一个vhost文件,这就是vhost-user服务的可执行文件,如下是本文使用的一个vhost服务示例: //-S参数指定socket路径, -c指定了json配置文件(内容如下),运行在core1 # sdpk/app/vhost -S /var/tmp -c vhost.json -m 0x1 # cat vhost.json { "subsystems": [ { "subsystem": "bdev", //创建一个内存设备作为vhost-blk的磁盘 "config": [ { "method": "bdev_malloc_create", "params": { "name": "Malloc0", "num_blocks": 32768, "block_size": 512 } } ] }, { “subsystem”: "vhost-blk", //创建vhost-blk设备,名称为VhostBlk.0,磁盘为内存设备Malloc0 "config":[ { "method": "vhost_create_blk_controller", "params":{ "ctrlr":"VhostBlk.0" "dev_name":"Malloc0", "transport":"vhost_user_blk" } } ] } ] } //guest挂载vhost-blk设备的参数,path指向vhost-blk设备的unix socket监听路径 -chardev socket,id=spdk_vhost_blk0,path=/var/tmp/VhostBlk.

Java String的创建声明及基本操作

目录 String类字符串的声明和创建: 一:连接多个字符串和其它数据类型 二:获取字符串长度,查询子串位置,根据脚标检索字符 三:字符串操作 1:字符串截取substring() 2:除去前后空格trim() 3:判断两串是否相等equals() 4:字母大小写转换toLowerCase() 5:字符串分割split(String sign,int limit) String类字符串的声明和创建: String s=new String(可为String类 or char[]数组 or 空); String s="hello world";//直接声明内容创建 一:连接多个字符串和其它数据类型 String s1=new String("hello "); String s2=new String("world"); String s3="!"; int a=33; System.out.println(s1+s2+s3); System.out.println(s1+s2+s3+a);//类型不同时自动转化为String 输出结果:hello world! hello world!33 二:获取字符串长度,查询子串位置,根据脚标检索字符 String s=new String("hello"); String t="l"; System.out.println(s.length());//获取字符串长度 //从前往后检索子串t的首字符位置,若没有查找到返回-1: System.out.println(s.indexOf(t)); //从后往前检索子串t的首字符位置,若没有查找到返回-1: System.out.println(s.lastIndexOf(t)); System.out.println(s.charAt(4));//检索出脚标为4的位置处的字符 输出结果:5 2 3 o 三:字符串操作 1:字符串截取,substring()操作可用于截取子字符串,其方法被重载为两种,代码示例如下 //s.substring(int beginIndex) 从当前脚标为beginIndex的位置开始截取到字符串结束 //s.substring(int beginIndex,int endIndex) 从脚标beginIndex截取到脚标endIndex处截止,左开右闭 String s="甲乙丙丁戊己庚辛壬癸"; String t1=s.

python 之 virtualenv 虚拟环境

最近需要使用virtualenv,查了下资料总结记录下。 virtualenv是Python的一个工具,用于创建独立的Python环境。它允许你在同一台计算机上同时管理多个独立的Python环境,每个环境都可以有自己的包依赖和Python版本。 在开发Python应用程序时,常常会遇到不同项目需要使用不同的包版本或Python版本的情况。使用virtualenv可以创建隔离的Python环境,使得每个项目可以拥有自己的独立环境,并在这些环境中安装和管理所需的包。 通过使用virtualenv,你可以避免不同项目之间的依赖冲突,确保项目的环境是独立的和可重现的。这样一来,即使在同一台计算机上同时进行多个项目的开发,也能够保持它们之间的隔离性。 以下是使用virtualenv的一些常见操作: 创建虚拟环境: 在你希望创建虚拟环境的位置,使用以下命令创建一个新的虚拟环境(记得提前执行pip install virtualenv): $ virtualenv myenv 或者 python -m venv myenv 激活虚拟环境: 进入你的项目目录,并激活虚拟环境。在终端中执行以下命令: $ source myenv/bin/activate #(在 Linux 或 macOS 上) $ myenv\Scripts\activate #(在 Windows 上) 安装包: 激活虚拟环境后,在项目目录中使用pip命令安装项目所需的依赖包: 如果报错没有pip,那就安装pip (myenv) $ python -m ensurepip (myenv) $ pip install package_name 查看已安装的包: (myenv) $ pip list 退出虚拟环境: (myenv) $ deactivate 通过创建和使用虚拟环境,你可以更好地管理Python项目和依赖,确保项目之间的隔离性和灵活性。这在开发过程中非常有用,尤其是当你需要同时处理多个项目或者需要在不同的环境中运行相同的代码时。

第二章:安装VM+CentOS7安装+JDK及tomcat安装+安装mysql

目录 1. 安装VMWare 2. centos7安装 2.1 常见问题 3. 查看、设置IP地址 4. 关机与重启 5. 切换为国内源 6. Linux下的目录结构 7. JDK及tomcat安装 7.1 将压缩包上传到linux 7.2 安装JDK 7.3 安装Tomcat 8. 安装mysql 8.1 离线安装 8.2 在线安装 1. 安装VMWare 注意:最好不要安装在C盘,会使电脑变得很卡。 注意:这里去掉“启动时检查产品更新”,每次启动更新麻烦,影响效率 VMware 12 Pro 永久许可证激活密钥 5A02H-AU243-TZJ49-GTC7K-3C61N 【VMware Workstation Pro 14 永久许可证激活密钥】 AA702-81D8N-0817Y-75PQT-Q70A4 YC592-8VF55-M81AZ-FWW5T-WVRV0 FC78K-FKED6-H88LZ-0QPEE-QP8X6 UV1H2-AKWD2-H8EJZ-GGMEE-PCATD AC310-0VG0P-M88CQ-YWY5Z-QPRG0 【VMware Workstation 15 Pro 永久许可证激活密钥】 AZ312-2FE41-M81LP-R6WEZ-NA2Z4 VC1J8-0TX11-M84WP-2WNGX-PQKD8 AA7EU-FUE97-4896Q-3WYZC-WYKY0 AU71H-0VE44-M81DZ-77Y5C-QG0G4 ZY7EU-2JG01-H8EDZ-9NYNX-ZVHW0 2. centos7安装 centos7 下载地址 http://mirrors.zju.edu.cn/centos/7.7.1908/isos/x86_64/CentOS-7-x86_64-DVD-1908.iso 可以选择第二项安装iso镜像 注意:这里虚拟机内存选择512M,如>=1G的默认安装CentOS桌面版,低于<1G的默认安装CentOS 服务器版 注:NAT网络地址转换,这种方式的会在宿主机创建一个虚拟NAT设备,虚拟机通过虚拟NAT设备使用宿主机的网络地址连接互联网。优点是连接互联网简单不用另外配置。 注意:这里只是安装了一个空壳的Linux,因为里面还没有装具体的系统。 注意:如果出现该错误提示,表示前面选中的“CentOS 64位”安装不了。

解决报错The URL must be of scheme file at xxx\vite.config.ts

实际的报错是: failed to load config from xxx\vite.config.ts error when starting dev server: Error: The URL must be of scheme file at xxx\vite.config.ts at loadConfigFromBundledFile ... 我并没有更改任何的vite.config.ts的代码,完全就是默认的情况。出现这个报错也让我困惑了很久。 网上去查可以发现有人说是要用pnpm安装,有人说是要安装vscode的插件,其实都不是。 这个错误其实根本的问题在于node的版本。我之前的版本是:node 16.15.x,后来将node的版本降低到了16.14.2,然后直接指定了pnpm的版本为8.0.0,就可以直接运行了。 至于如何更改自己的node版本,可以参考这篇文章:如何把已安装的nodejs高版本降级为低版本_node降级到指定版本_誰言♧秋桜的博客-CSDN博客 需要注意的就是环境变量的设置,别设置错了,不然nvm没有办法安装相应正确的node版本。 目前我并不清楚这个报错是否还有其他的方法可以解决,但是我今天亲测更改node的版本是可以解决这个问题的。 成功之后就长这样:

共享文件夹在虚拟机下的路径

在虚拟机下的共享文件夹路径为/mnt/hgfs/。 若想复制共享文件夹下的文件到某一路径,以当前工作目录为例命令为 cp /mnt/hgfs/share/xxx . -rf share:为用户创建的共享文件夹 xxx:是共享文件夹下的某个文件 -rf:将xxx目录以及子目录和文件全部复制到当前工作目录中,并且不在询问用户直接覆盖同名文件或目录。

redis常用命令

文章目录 前言一、常用命令1.服务启动和连接1.1启动服务端1.2启动服务端1.3客户端ping测试和服务端连接1.4清屏1.5获取配置参数 2.数据库2.1选择数据库2.2当前数据库key数量2.3清空数据库 3.key3.1查看所有key3.2添加key值3.3获取key值3.4查询key是否存在3.5获取key存储类型3.6删除key3.7设置key到期时间(单位:秒)3.8查看key有效的秒数3.9添加多个key值3.10获取多个key值3.11设置分布式锁3.12删除分布式锁(释放锁)3.13设置分布式锁过期时间3.14批量删除 4.Transactions(事务)4.1开启事务4.2执行事务4.3丢弃事务4.4监听key(乐观锁)4.5解除监听key 5.acl5.1查看用户列表5.2添加用户5.3查看用户5.4切换用户5.5删除用户5.6查看当前用户 二、常用数据类型1.string(字符串)1.1添加值1.2获取值1.3获取值长度1.4自增(incr)1.5自减(decr)1.6追加值(append)1.7截取字符串1.7替换字符串 2.list(列表)2.1入队2.2获取指定范围元素2.3获取列表元素数量2.4出队2.5索引2.6删除元素2.7插入元素 3.set(集合)3.1插入元素3.2获取元素(全部)3.3获取元素数量3.4值是否存在集合中3.5元素删除3.6差集3.7交集3.8并集3.9删除并获取元素 4.hash(哈希)4.1添加元素4.2获取元素4.2.1获取单个属性4.2.2获取多个属性4.2.3获取所有field4.2.4获取所有value4.2.5获取整个对象的全部键值对 4.3判断field是否已经存在4.4获取field数量4.5获取value长度4.6自增或自减4.7遍历所有键值对4.8删除field 5.Sorted Sets(有序集合)5.1添加元素5.2获取元素(withscores分数)5.3删除元素5.4获取元素数量5.5获取分数范围内元素个数5.6分数自增和自减5.7元素在集合中的索引5.8字典顺序排序(分数相同)5.9字典顺序排序(分数相同)5.10字典顺序删除元素(分数相同) 总结 前言 redis版本7.0.5 reids安装案例 redis中文网命令参考 redis官方命令参考 redis在线测试 一、常用命令 1.服务启动和连接 1.1启动服务端 redis-server 1.2启动服务端 redis-cli 1.3客户端ping测试和服务端连接 返回PONG,连接正常 ping 1.4清屏 clear 1.5获取配置参数 config get port 2.数据库 2.1选择数据库 select 0 2.2当前数据库key数量 dbsize 2.3清空数据库 flushdb 3.key 3.1查看所有key redis的key要保证唯一 keys * 3.2添加key值 set user zhangjg ex到期时间,单位秒 不设置默认-1,永久有效 set user zhangjg ex 3 3.3获取key值 get user 3.4查询key是否存在 exists user 3.5获取key存储类型 type user 3.6删除key del user 3.

【黑马头条day02的坑】Failed to parse configuration class [xxApplication]

做完APP端的文章列表展示功能后,在idea启动微服务时, article这个模块中, ArticleApplication会报错,大致内容如下: class path resource [com/heima/apis/article/IArticleClient.class] cannot be opened 我找了好多文章,最后把user,article,gateway中的三个target目录删去重启项目即可

The instance of entity type ‘Model‘ cannot be tracked because another instance with the same key val

一、EFCore 使用异常 The instance of entity type 'Model' cannot be tracked because another instance with the same key value for {'Id'} is already being tracked. When attaching existing entities, ensure that only one entity instance with a given key value is attached. Consider using 'DbContextOptionsBuilder.EnableSensitiveDataLogging' to see the conflicting key values. The instance of entity type 'Model' cannot be tracked because another instance with the same key value for {'Id'} is already being tracked.

python端口扫描器—多线程

本篇补充上篇的《python制作扫描器》,修改为多线程实现 optparse是Python中的一个命令行参数解析模块,可以方便地处理命令行参数,提供了很多有用的功能,例如: 1、支持长参数和短参数; 2、支持参数的默认值和描述信息; 3、支持参数的互斥和必须出现; 4、支持自定义参数类型和合法值范围等。 5、使用optparse模块可以快速地编写命令行工具,并且用户可以通过-help或--help选项获取帮助信息。 而多线程是Python中常用的一种并发编程方式,能够提高程序的运行效率。通过使用多线程,可以在程序中同时运行多个任务,充分利用CPU资源。 Python中内置的threading模块提供了多线程编程的支持,可以通过创建Thread对象来创建和启动线程,通过使用锁机制来避免多个线程同时访问共享资源导致的数据竞争和错误。 多线程可以用于网络编程、数据处理、并发读写等场景,可以大大提高程序的效率和性能。 以下是端口扫描器用**optparse模块和多线程的结合** 实例 #! /usr/bin/python # -*-coding: UTF-8 -*- import socket from optparse import OptionParser from threading import Thread #判断端口是否开放 def is_open(ip,port): s = socket.socket try: s.connect(ip,port) return True except: return False pass #默认扫描函数 def scan(ip,port): if is_open(ip,port): print("%s的主机 %s 端口 open"%(ip,port)) else: print("%s的主机 %s 端口 close"%(ip,port)) pass # #范围扫描函数 # def rscan(ip,s,e): # for x in range(int(s),int(e)): # if is_open(ip,x): # print("

Zabbix6.0 的部署、自定义监控服务

目录 一、概述 二、 zabbix 1.zabbix简介 2.zabbix监控原理 3. Zabbix 6.0 新特性 3.1Zabbix server高可用防止硬件故障或计划维护期的停机 3.2 Zabbix 6.0 LTS新增Kubernetes监控功能,可以在Kubernetes系统从多个维度采集指标 4. Zabbix 6.0 功能组件 4.1Zabbix Server 4.2数据库 4.3Web 界面 4.4Zabbix Agent 4.5Zabbix Proxy 4.6Java Gateway 三、部署 Zabbix 6.0 1.关闭 selinux 与防火墙 2.部署 Nginx + PHP 环境并测试 2.1安装 nginx 2.2安装 php 2.3修改 nginx 配置 2.4修改 php 配置 2.5创建目录和测试文件,启动服务 2.6测试访问(hosts解析) 3.部署数据库,要求 MySQL 5.7 或 Mariadb 10.5 及以上版本 3.1配置 Mariadb yum源 3.2初始化数据库 3.3创建数据库并指定字符集 3.4创建 zabbix 数据库用户并授权

MODBUSTCP和MODBUSRTU数据帧对比

工具介绍 ModBus Poll 在TCP中模拟客户端,在RTU中模拟主机;(请求数据方) ModBus Slave 在TCP中模拟服务器,在RTU中模拟从机;(响应数据方) 数据帧简介 ModBus是一种通信协议,用于在工业自动化领域中,通过串行通信或以太网连接来传输数据。ModBus数据帧是用于在ModBus协议中传输数据的格式。 ModBus协议支持两种不同的数据帧格式:ModBus TCP和ModBus RTU。 ModBus TCP数据帧: ModBus TCP是基于以太网的ModBus协议版本。在ModBus TCP中,数据帧格式如下: 1)事务标识符(2字节):用于标识请求和响应之间的关联。 2)协议标识符(2字节):用于指定ModBus协议版本。 3)长度字段(2字节):指定数据帧中后续字段的长度。 4)单元标识符(1字节):用于标识ModBus设备。 5)功能码(1字节):指定要执行的操作。 6)字节数(1字节):数据的字节数量 6)数据(可变长度):根据功能码的不同,数据字段可以包含不同类型的数据。 ModBus RTU数据帧: ModBus RTU是基于串行通信的ModBus协议版本。在ModBus RTU中,数据帧格式如下: 1)地址(1字节):用于标识ModBus设备。 2)功能码(1字节):指定要执行的操作。 3) 字节数(1 字节) :数据的字节个数 3) 数据(可变长度):根据功能码的不同,数据字段可以包含不同类型的数据。 4) CRC(2字节):用于检测数据传输中的错误。 数据帧具体举例 ModBusTCP和ModBusRTU数据帧,主从对比示例。功能码为4 以下是一个主从模式下使用功能码为4的ModBusTCP和ModBusRTU数据帧的对比示例: 假设我们有一个ModBus主设备(主机)和一个ModBus从设备(从机),主设备要从从设备读取输入寄存器的值。 ModBus TCP主从模式数据帧示例: 主设备发送: 1)事务标识符:0x0001 2)协议标识符:0x0000 3)长度字段:0x0006 4)单元标识符:0x01 5)功能码:0x04 6)起始地址:0x0000 7)读取长度:0x0002 从设备响应: 1)事务标识符:0x0001 2)协议标识符:0x0000 3)长度字段:0x0005 4)单元标识符:0x01 5)功能码:0x04 6)字节数:0x04 7)数据:0x1234 0x5678(输入寄存器的值) ModBus RTU主从模式数据帧示例: 主设备发送: 1)地址:0x01 2)功能码:0x04 3)起始地址:0x0000 4)读取长度:0x0002

oracle,update更新时,条件没走索引

update更新时没走索引, 查询索引是有效的: 没走索引的原因是条件字段的字段类型不一致, 一个是varchar2, 另一个是 nvarchar2 。 要走索引需要字段类型一致,可以利用to_char()将 nvarchar2转为 varchar2

canvas.js、node-canvas的坑

一、依赖下载后半天没 install 完,最后还报错, \node_modules\canvas: Command failed. Exit code: 1 Command: node-pre-gyp install --fallback-to-build Arguments: 解决方法:官方: Installation: Windows · Automattic/node-canvas Wiki · GitHub 1、先全局安装一个依赖: npm i node-gyp 2、下载 GTK 2 下载链接-win64 3、然后解压到C盘的文件夹 GTK 4、然后重新下载canvas依赖就行 二、部分图片编码格式不支持 从网上找的图,同样的png,但是因为编码方式或图片编码信息有缺失就会报错,目前解决方法是,使用图片重构插件重构就行

CSO 们关注的软件供应链安全十个关键问题

写在前面 自从和几个小伙伴一起创办墨菲安全以来,有一年半多的时间了,创业对于我来说,很有意思的一个地方,就是有机会可以和各行各业很多非常有意思的人一起交流,在这个交流的过程中能够不断的提升自己的认知,以我自己创业之前的经历来说,我接触的大多都是互联网和互联网安全这个圈子的人,而现在有很多机会去接触到更多行业的客户和合作伙伴,可以有机会去了解不同行业的业务、安全和他们所在行业的一些成熟的治理经验,除此之外也能了解不同行业的专家、大佬的不同思维模式和很多有意思的经验和经历。这对于我们去做一个更包容、更通用的产品有非常大的帮助。 那么,这篇文章我给大家分享一下我和超过 180 家各行业企业的安全负责人和一线的工程师们一起交流关于企业软件供应链治理问题过程的一些收获,我会把大家讨论和关心的共性问题做一些总结和提炼,然后也结合我自己在产品上的一些思考,分享给大家。 这一篇文章中的每一个核心问题,我大概不会展开说的很细,主要还是梳理思考这些问题的一些关键思路和拆解过程,至于如何解决这些问题,以及一些解决方案的实现方式,我后面计划把这些问题逐一拆解,再通过文章、直播等方式去做一些分享。 致谢 这篇文章的创作过程得到了很多来自互联网、金融、科技出海等各个行业在软件供应链安全领域有非常丰富的实践经验的技术大佬,他们是程岩同学、黄扬洋同学、吴圣同学、崔泷跃同学、张国超同学、杜中伟同学、苏嘉鹏同学、小孟同学、高渐离同学,非常感谢他们贡献的场景、治理思路和建议。 目录 一、软件供应链安全主要包含哪些威胁? 软件安全漏洞导致的攻击 软件投毒的攻击 软件知识产权合规风险 供应中断风险 二、全球及中国关于软件供应链安全相关的监管趋势如何? 欧美法律法规 国内法律法规及标准 三、如何快速评估企业所面临的软件供应链安全威胁? 供应链软件引入规模 单位供应链软件所带来的潜在威胁 四、关于软件供应链安全治理思路是什么? 软件供应链攻击面管理之资产透明 供应链风险的透明管理 供应链风险的左移治理 五、软件供应链安全治理应该从何入手? ​编辑 风险摸底 制定治理规划 能力深化 六、如何构建高效的软件供应链安全持续运营体系? 谁是主导者? 清晰的管理策略和好用的工具支撑 持续运营,润物无声 七、软件供应链安全治理过程中最大的技术难点及挑战是什么? 开发者修复问题成本 资产台账的动态管理 供应链软件漏洞及情报能力 八、如何衡量软件供应链安全治理的好与坏? 九、国内外关于软件供应链安全治理有哪些最佳实践? 十、关于软件供应链安全理解的误区? 软件供应链安全 = SCA? 软件供应链安全 = 开源风险治理? 软件供应链安全 = DevSecOps? 一个交流活动 参与方式 一、软件供应链安全主要包含哪些威胁? 企业生产及办公过程中从外部引入的供应链软件从形态上来说主要包含三大类:开源组件、开源软件、闭源软件;从使用场景上来说分为两大类:办公软件及用户生产服务构建的软件;从付费角度来说分为商业软件及免费软件;总之,这些供应链软件由公司之外的第三方主体(组织或个人)开发并拥有知识产权的软件。 这些供应链软件在企业使用过程中会给企业带来的风险有四大类,按照影响面的通用性和危害程度,可以分为:软件安全漏洞导致的攻击、软件投毒攻击、软件知识产权合规风险、供应中断风险。 软件安全漏洞导致的攻击 顾名思义,但凡是软件都可能会存在安全漏洞,而且是越复杂的软件漏洞自然越多,同时使用的越广泛的供应链软件相对来说漏洞越多,因为攻击者可以通过挖掘这一类应用广泛的组件存在的漏洞来攻击更多的企业,谋取更多的利益;同样,一些专门从事漏洞挖掘的安全专家同样乐于去挖掘这些应用广泛的供应链软件的漏洞,这样他可以获得更多的漏洞赏金和社区影响力; 通常是谁在利用软件安全漏洞进行攻击或模拟攻击行为: 1)全球以勒索、挖矿为主要手段的黑灰产,对于他们来说,利用一个或多个应用广泛的供应链软件存在的漏洞对全球范围内的企业发起扫描,一旦发现漏洞后便实时数据窃取或数据加密后的勒索,或者干脆就入侵服务器挖矿,这是一种非常高效的攻击获利手段; 2)区域性或国家级的攻防演练的过程中,攻击者常用的攻击手段就是准备一堆供应链软件的 Nday&0day 来对企业目标进行渗透攻击,以达成攻破目标的目的。 3)针对重点企业及国家关键基础设施企业的针对性攻击,近几年外部攻击者惯用的攻击手段就是对国内的关键基础设施及企业的软件供应商发起攻击,以窃取敏感数据或者发起破坏。因为这些关基单位本身安全防护做的不错,那么攻击就是转而攻击关基的大量供应商以达到获取数据及关键信息的目的。 4)随着大模型AI的技术的广泛应用和普及,针对模型训练、推理过程中,较多的用到了开源/第三方库、算法或组件,可能因算法后门和软件供应链安全导致训练数据、代码、模型泄漏,这一类的风险也不容忽视;前段时间3月24号的时候,OpenAI发布声明,向其用户和整个ChatGPT社区道歉,道歉声明ChatGPT因为一个开源库存在安全漏洞,导致一部分用户的聊天数据泄露。此后OpenAI向社区发布悬赏计划,以最高2万美元的奖励悬赏社区白帽子为其找漏洞。 软件投毒的攻击 软件投毒的本质是人为的为供应链软件创造一个可用于攻击的漏洞或者后门,以达到攻击的目的,当前我们看到的主流投毒攻击包含 3 大类: 1)是针对商业软件的投毒,通常是入侵某应用广泛的商业软件公司,然后在该公司的商业产品更新中植入后门,等该软件的客户更新时对客户发起感染,非常典型的就是 solarwinds 事件;这一类攻击可以极其隐蔽,国内这两年也出现过不少这样的事件。一方面厂商的安全防护能力不一定有那么强,另一方面,这些有网络或管理特权的软件,管控的力度不会有正常应用那么严格(如放在管理网段,默认就放行各种网络);