Name for argument of type [java.lang.String] not specified, and parameter name information not avail

错误分析:由于在参数上未显示使用注解来指定参数名,而编译时没有保留方法参数名,导致无法确定参数名,所以才报错。 开发环境:eclipse,jdk17,springboot3.2.x 测试地址git:https://gitee.com/aliang-xyl/springboot3-demo 错误信息 使用springboot框架时报错,以下是错误信息: java.lang.IllegalArgumentException: Name for argument of type [java.lang.String] not specified, and parameter name information not available via reflection. Ensure that the compiler uses the '-parameters' flag. at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.updateNamedValueInfo(AbstractNamedValueMethodArgumentResolver.java:186) ~[spring-web-6.1.5.jar:6.1.5] at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.getNamedValueInfo(AbstractNamedValueMethodArgumentResolver.java:161) ~[spring-web-6.1.5.jar:6.1.5] at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:107) ~[spring-web-6.1.5.jar:6.1.5] at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122) ~[spring-web-6.1.5.jar:6.1.5] at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:224) ~[spring-web-6.1.5.jar:6.1.5] at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:178) ~[spring-web-6.1.5.jar:6.1.5] at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) ~[spring-webmvc-6.1.5.jar:6.1.5] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:925) ~[spring-webmvc-6.1.5.jar:6.1.5] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:830) ~[spring-webmvc-6.1.5.jar:6.1.5] at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-6.1.5.jar:6.1.5] at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) [spring-webmvc-6.1.5.jar:6.1.5] at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) [spring-webmvc-6.1.5.jar:6.1.5] at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) [spring-webmvc-6.1.5.jar:6.1.5] at org.

docker报错Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the d

问题描述: docker报错Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the d 问题解析: 报错 `Cannot connect to the Docker daemon at unix:///var/run/docker.sock` 是因为 Docker 客户端无法连接到 Docker 守护进程。这可能是由于守护进程未启动或者未正确加载所需的配置。 解决方式: 1.使用systemctl restart docker.service systemctl restart docker.service 的作用是重新启动 Docker 服务。当你对 Docker 的配置进行更改或者更新后,通过执行这个命令,你可以强制 Docker 服务重新启动,以便应用新的配置或者更新。这个命令确保 Docker 守护进程以最新的配置重新启动,以便确保 Docker 容器能够正常运行,并且新的配置能够生效。 2.使用systemctl enable docker和systemctl start docker systemctl enable docker 的作用是将 Docker 服务设置为系统启动时自动启动。当你运行这个命令时,它会在系统启动时启用 Docker 服务,使得 Docker 守护进程会在系统启动时自动启动。 systemctl start docker 的作用是手动启动 Docker 服务。当你运行这个命令时,它会立即启动 Docker 守护进程,使得你可以开始使用 Docker 容器来管理和运行应用程序。

Midjourney教程(完整版)-看这篇就够了

Midjourney使用指南 - 订阅计划费用比较 Midjourney 具有三个订阅版本。按月或全年支付可享受 20% 的折扣。每个订阅计划都包括访问 Midjourney 图库、官方 Discord、一般商业使用条款等。 如何订阅 使用该/subscribe命令生成指向订阅页面的个人链接。 或者,转到Midjourney.com/account 或者,Manage Sub在登录到 Midjourney 网站时从边栏中选择。 计划比较 免费试用基本计划标准计划专业计划每月订阅费用-10 美元30美元$60年度订阅费用-96 美元(8 美元/月)288 美元(24 美元/月)576 美元(48 美元/月)快速 GPU 时间0.4 小时/寿命3.3 小时/月15 小时/月30 小时/月每月慢速 GPU 时间--无限无限购买额外的GPU 时间-$4/小时$4/小时$4/小时一对一私信-✓✓✓隐身模式---✓最大队列3 个并发作业10 个作业在队列中等待3 个并发作业10 个作业在队列中等待3 个并发作业10 个作业在队列中等待12 个并发快速作业3 个并发轻松作业10 个作业在队列中等待评价图片以获得免费 GPU 时间-✓✓✓使用权抄送-NC 4.0一般商业条款*一般商业条款*一般商业条款* 所有订阅计划,你都可以以你想要的方式自由使用你的图片。如果你是一家年总收入超过 1,000,000 美元的公司,则必须购买 Pro 计划。有关完整的详细信息,请参阅服务条款 订阅计划 转到https://www.midjourney.com/account/或使用/subscribe命令生成指向订阅页面的链接。 不要分享你的链接 生成的链接对于每个帐户都是唯一的,切勿与他人共享! 支付方式 目前仅接受Stripe 支持的支付方式:由 Mastercard、VISA 或 American Express 等服务机构发行的信用卡或借记卡。Stripe 是 PCI Service Provider Level 1,这是支付行业中最严格的认证级别。

MySQL连接IDEA(Java Web)保姆级教程

第一步:新建项目(File)->Project 第二步:New Project(JDK最好设置1.8版本与数据库适配,详细适配网请到MySQL官网查询MySQL :: MySQL 8.3 Reference Manual :: Search Results) 第三步:点中MySQLTest(项目名)并连续双击shift键->搜索Add Framework Support(添加框架支持) 第四步:添加Java EE中的Web Application 第五步:成功后项目中会出现一个web文件夹,用于Web操作 第六步:在Web文件下的WEB-INF文件下添加两个空文件夹classes和lib 第七步:File->Project Structure(项目结构) 第八步:点击Modules->Paths->Use module comple output path,从文件夹中搜索本项目的文件夹下面的web->WEB-INF下的classes(刚才设置的),设置为依赖项 第九步:点击Modules->Dependencies中的"+"号,选择JARS or Directories,选择刚才添加的lib空文件夹,并且选择Jar Directory 第十步:成功后,WEB-INF下面的classes文件夹会变黄(设置成功) 第十一步:再次点击Project Structure->Libraries 这里面现在应该是空的,点击"+"后添加Java添加文件 这里你需要选择jsp-api.jar和servlet.api.jar以及JSDB数据库连接包mysql-connector-j-8.2.0.jar(这个需要自己下载并且拖动到tomcat的lib文件夹下,mysql-connector-j-8.2.0.jar资源链接:https://pan.baidu.com/s/1Dtwg46HJu4ucg1kVbsuj8Q 提取码:cpev) 如果成功了,你将看到External Libraries(外部库)将会出现这三个jar包 第十二步:点击Run->Edit Configurations(运行设置),点击"+"号后添加Tomcat Server中的Local 点击Deployment并添加Artifact 第十三步:一切准备就绪,点击右上角的开始运行,测试Web是否正常工作 出现该页面,并且地址栏有localhost:8080则表示成功运行Web 第十四步:添加一个类进行测试数据库连接是否成功 运行代码如下 import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class DatabaseConnection { private static final String JDBC_URL = "jdbc:mysql://localhost:3306/javatest9"; private static final String JDBC_USER = "

Midjourney指南 - 生成高分辨率图片(内容已更新至V5)

Midjourney 首先为每个作业生成一个低分辨率图片网格(2x2)。你可以在选择其中任一图片,使用 Midjourney upscaler 来增加尺寸并添加更多细节。有多种可用于放大图像的放大模型。 每个图像网格下方的按钮用于放大所选图像。U1 U2 U3 U4 注:upscaler 以下都翻译为【升频器】 Midjourney上的分辨率和尺寸 所有尺寸均适用于 1:1 宽高比的正方形。 模型版本起始大小V4 默认升频器细节高档轻高档beta高档动漫高档最大高档**默认模型版本 4512 x 5121024 x 1024 *1024 x 10241 024 × 10242048 x 20481024 x 1024-版本 51024 x 1024------v1–v3256×256-1024 x 1024*1024 x 10241024 x 10241024 x 10241664 x 1664niji512 x 5121024 x 10241024 x 10241024 x 10242048 x 20481024 x 1024-test/testp512 x 512---2048 x 20481024 x 1024*-hd512 x 512-1536 x 1536*1536 x 15362048 x 2048-1024 x 1024 *= 每个 Midjourney 版本模型的默认升频器。

uniapp h5项目上传图片到oss(纯前端)

需求:后端给前端一个oss上传地址,前端需要根据getCkOSSToken获取stsToken,使用client.put方法将图片上传成功,并且使用canvas压缩图片 效果图 废话不多说,直接上代码,代码可直接复制,运行 准备工作 cnpm install ali-oss --save 在需要的页面引入 import OSS from 'ali-oss' 1.html <view class="" style="margin-top: 20rpx;"> <uni-file-picker limit="1" title="" @select="selectImg" @delete="deletePic" :sizeType="sizeType" ></uni-file-picker> </view> 2.javaScript // 选择图片 selectImg(e) { this.flag = true let that = this // const OSS = require('ali-oss'); let path = e.tempFiles[0].file console.log(path,'path') const file = path; if (file) { that.compressImage(file, 1024, 0.2, (compressedBlob) => { const compressedFile = that.blobToFile(compressedBlob, file.name); // 这里拿到最终的File对象 compressedFile,可以用于上传等操作 this.

Python深度学习环境配置(Pytorch、CUDA、cuDNN),包括Anaconda搭配Pycharm的环境搭建以及基础使用教程(保姆级教程,适合小白、深度学习零基础入门)

全流程导览 一、前言二、基本介绍2.1全过程软件基本介绍2.1.1 Pytorch2.1.2 Anaconda2.1.3 Pycharm2.1.4 显卡GPU及其相关概念2.1.5 CUDA和cuDNN 2.2 各部分相互间的联系和安装逻辑关系 三、Anaconda安装3.1安装Anaconda3.2配置环境变量3.3检验是否安装成功 四、Pycharm安装五、Anaconda和Pycharm的基本使用5.1Anaconda的基本使用5.1.1Anaconda的一些基本指令5.1.2有关下载源的一些指令和说明5.1.3 如何自定义Anaconda新建的虚拟环境位置(移到C盘以外) 5.2Pycharm的基本使用(搭配Anaconda)5.2.1 新建项目5.2.2 切换解释器(环境) 六、安装前的信息确认6.1 检查显卡驱动6.1.1如何检查6.1.2 如何安装显卡驱动 6.2 确定CUDA型号6.2.1 首先根据自己的显卡型号确定显卡算力6.2.2 根据算力,匹配合适的CUDA版本 6.3 确定torch的版本6.4 确定对应的python版本 七、Pytorch_GPU版本的安装八、CUDA的安装九、cuDNN的安装十、检验环境是否配置成功附录参考文献 一、前言 最近因为各种各样的原因,电脑重装了三次,有关于python和深度学习的环境也反反复复的重新安装了多次,期间找了很多的资料,也看了很多文章,各位大佬基本把环境配置的各个环节都论述的十分清楚了,但是有关各个环节的讲解还是比较分散。 因此,我想总结一台电脑从零开始配置到调用Pytorch使用GPU进行深度学习计算的全过程环境搭建,于是便有了写这篇文章的想法。因为是第一次在CSDN上写长篇,还有许多不足,大家在阅读本文的过程中如有发现任何错误,欢迎指出,也欢迎大家多提建议,我们一起共同进步! 本文总结了大量文章及视频的相关内容,博采众长,并加入了些许自己的理解,所有的引用均已在对应板块注明,如有侵权,请联系我删除。 文章大致结构如下: 首先是前言介绍了文章背景和形式,以及文章的主要内容。第二章介绍了相关软件和相互之间的逻辑关系。接下来的第三、四、五章,讲解了Anaconda和Pycharm的配置,以及他们的一些基本使用,完成这三步后,即完成了Python的配置工作,可以开始使用Python进行项目开发。第六章进行了安装前的信息确认,确定了CUDA、Pytorch以及Python三者之间的版本关系。第七章介绍了如何在虚拟环境中配置Pytorch,完成后可以调用CPU进行深度学习的计算。第八、九章介绍了CUDA和cuDNN的环境配置,完成后,python即可调用GPU对深度学习的计算进行加速。第十章介绍了如何检验环境是否配置成功。 二、基本介绍 2.1全过程软件基本介绍 本部分内容总结自以下文章,并加入了一些自己的理解: 链接:Pytorch深度学习环境配置(GPU版本) 链接:pytorch 的一些介绍以及常用工具包展示 链接:CUDA、cuDNN以及Pytorch介绍 2.1.1 Pytorch Pytorch是torch的python版本,是由Facebook开源的神经网络框架,专门针对 GPU 加速的深度神经网络(DNN)编程。Torch 是一个经典的对多维矩阵数据进行操作的张量(tensor )库,在机器学习和其他数学密集型应用有广泛应用;Pytorch的计算图是动态的,可以根据计算需要实时改变计算图;由于Torch语言采用 Lua,导致在国内一直很小众,并逐渐被支持 Python 的 Tensorflow 抢走用户。作为经典机器学习库 Torch 的端口,PyTorch 为 Python 语言使用者提供了舒适的写代码选择。 官网链接:Pytorch官网链接 2.1.2 Anaconda 在配置深度学习环境的时候,并不是从python官网下载python然后使用pip命令安装,更多的是使用Anaconda这个软件。 Anaconda是一个环境管理软件,可以帮助我们创建虚拟环境,管理虚拟环境。 同时,可以把conda理解为手机上的应用商店,各种的包类似于各种的APP,当我们需要用到其他的开源库、包的时候,可以通过Anaconda进行下载,不同应用商店的下载安装速度会有所差异,并且会维护软件,同样的,conda也会维护包和库。 安装Anaconda会默认安装很多东西,包括python的环境、conda命令,conda命令可以安装其他的库(conda install 包名)和pip差不多,因此不需要再单独下载python,直接安装Anaconda即可,详细的操作步骤见后文。 虚拟环境:由于不同的项目可能会使用不同的环境,(例如A项目要用Pytorch1.10版本而B项目要使用1.4版本),Anaconda可以创建多个虚拟环境来独立维护不同项目需要用到的包,使两个项目环境互不干扰。 Anaconda界面: 2.1.3 Pycharm Pycharm和IDEA一样都是IDE,我们在上面配置好一个Anaconda的虚拟环境了之后,这时创建新的Pycharm项目选择解释器的时候就可以选择已经配置好的环境而不用再创建一个虚拟环境了,通常我们创建项目都选择的是之前配置好的环境。并且,Pycharm还可以很方便的切换环境,只需要添加、更换解释器即可。 Pycharm初始界面: 2.

C# WPF项目打包成一个exe安装包教程(VS2022)

创作背景:一直想找到一个合适方法将项目打包成一个安装包,曾经尝试很多次,也再网上找了很多资料,这里进行一个总结,希望能给有需要的朋友提供一份思路,避免走我走过的弯路。 以下就是我整理后的过程: ****特别注意**** :一定要将需要打包项目和Set up项目放到一个解决方案中!!!! 1、下载扩展Microsoft Visual Studio Installer Projects 点击扩展 ---> 管理扩展,搜索Microsoft Visual Studio Installer Projects,点击下载,完成安装。 2、新建Set up项目 右击解决方案 ---> 添加 ---> 新建项目,在搜索框中搜索Setup,选择如图所示工程 ,并配置新项目信息。 安装项目,三个目录的作用 Application Folder:即 “应用程序文件夹”,表示要安装的应用程序需要添加的文件(注:如果项目中用了三方开源插件,也需要在里面添加上) User‘s Desktop:即 “用户桌面”,表示这个应用程序安装完,用户的桌面上的创建的.exe快捷方式 User’s Programs Menu:即 “用户的程序菜单”,表示应用程序安装完,用户的“开始菜单”中的显示的内容,一般在这个文件夹中,需要再创建一个文件夹用来存放:应用程序.exe和卸载程序.exe 3、应用程序文件夹下添加文件 右击Application Folder(应用程序文件夹)---> Add ---> 文件,把你需要打包的项目下的---> bin ---> Debug目录下的所有文件添加到Application Folder中(比如下图所示的一些.dll、.pdb文件,如果Debug目录下还有子目录那也需要把子目录里的文件一并添加进去) 假如有子目录,需要在“Application Folder”新建文件夹,并修改为相同名称,并把文件文件中的内容同样添加,防止程序中的调用找不到路径。 4、添加卸载程序 右击Application Folder ---> Add ---> 文件 --->把C:\Windows\System32下的msiexec.exe文件添加到Application Folder中,添加进来并重命名为 Uninstall.exe 右击Uninstall.exe文件 ---> 点击Create Shortcut to msiexec.exe,创建快捷键方式,重命名为 卸载程序.exe 点击您刚刚新建的Setup项目,复制ProductCode 属性的值 点击卸载程序.exe ---> 将复制的ProductCode 的属性值粘贴在Arguments 属性中,然后在最前面加上 /X (PS:/X后有一个空格哦)

vue3项目创建+配置

一. 创建项目 注意:vue3项目node版本必须16以上版本 // 1. npm npm init vue@latest npm create vue // 2.pnpm pnpm create vue 配置选择:Vue Router、Pinia、ESLint、Prettier 二. 配置eslint 1、需配置文件 1.1.eslintrc.cjs文件中追加代码 rules: { 'prettier/prettier': [ 'warn', { singleQuote: true, // 单引号 semi: false, // 无分号 printwidth: 80, // 每行宽度至多80字符 trailingComma: 'none' // 换行符号不限制(win mac 不一致) } ], 'vue/multi-word-component-names': [ 'warn', { ignores: ['index'] // vue组件名称多单词组成(忽略index.vue) } ], 'vue/no-setup-props-destructure': ['off'], // 关闭 props 解构的校验 // 添加未定义变量错误提示, create-vue@3.6.3关闭, 这里加上是为了支持下一个章节演示. 'no-undef': 'error' } 1.

员工离职预测模型-机器学习实战-逻辑回归

员工离职预测模型 背景介绍模型搭建数据准备检查是否存在缺失值和异常值处理缺失值处理异常值检验 数据预处理构建模型 验证模型,找到相关变量分析步骤以及主要发现应用与测试集总结 数据集可以在我发布的资源里面找到 背景介绍 员工离职预测 为什么我们最好和最有经验的员工过早离职?数据来自Kaggle(大数据机器学习网站)中的,想并尝试预测下一个什么样的有价值的员工将离开。通过分析数据,了解影响员工辞职的因素有哪些,以及最主要的原因,预测哪些优秀员工会离职。 本文用pandas进行数据清洗,数据转换,以及特征提取;用sklearn进行模型构建,模型评估,并进行相关预测。(用特征工程和相关分析的方法),从给定的影响员工离职的因素和员工是否离职的记录(训练集),建立一个逻辑回归模型预测有可能离职的员工。并在测试集上进行预测,给出每位员工离职的概率 模型搭建 数据准备 因为要根据训练积极搭建模型,首先要做的就是导入训练集: import pandas as pd data = pd.read_csv('D:/学习资料/机器学习/pfm_train.csv') # 查看数据 data.head() data.head()是用于查看这个csv文件的前几行,我用的是jupyter notebook,如果你用的是python,需要改为print(data.head()) 得到结果: 接下来就是分类和数值列: categorical_cols = data.select_dtypes(include=['object']).columns.tolist() numerical_cols = data.select_dtypes(exclude=['object']).columns.tolist() numerical_cols.remove('Attrition') # 移除目标列,这个Attrition是员工是否离职,是我们的目标变量,肯定是不进行清理处理的 Attrition这一列是我们的目标列,也就是员工是否离职,用0和1表示 检查是否存在缺失值和异常值 在检查的前后查看一下其描述性统计信息,可以更直观的看到是否处理了异常值 numerical_stats = data.describe() # 查看一下其描述性统计信息 numerical_stats # 同理,也是打印,python的话就加一个print 得到结果如下: 处理缺失值 isnull()判断是否有缺失值,把缺失值的个数加起来 # 查看是否有缺失值 missing_data = data.isnull().sum() missing_data[missing_data > 0] 得到结果: 从结果可以看到,其实并没有缺失值,所以就不处理了 处理异常值 计算Z-score来检测数值列的潜在异常值,通常认为Z-score的绝对值大于3是异常值。 使用的是中位数来处理异常值,也可以使用平均数等,都可以。 import numpy as np # 异常值检测和处理 # 计算Z-score来检测数值列的潜在异常值,通常认为Z-score的绝对值大于3是异常值。 z_scores = np.

【Python】【三分钟】熟练使用 str()

【Python】【三分钟】熟练使用 str() 🌵文章目录🌵 🔍 一、初识str():将非字符串类型转换为字符串💡 二、深入理解str():转换其他数据类型🚀 三、str()的实战应用:格式化输出🔍 四、str()与类型转换的关系💡 五、str()的扩展应用:自定义对象转字符串🚀 六、str()的最佳实践:避免隐式转换📚 七、总结🎉 结语 🔍 一、初识str():将非字符串类型转换为字符串 在Python编程中,我们经常需要将各种数据类型转换为字符串类型,以便进行字符串拼接、输出或其他操作。str()函数就是用来完成这一任务的强大工具。它可以将整数、浮点数、列表、元组等几乎所有数据类型转换为字符串类型。 代码示例* : # 示例:将整数和浮点数转换为字符串 num_int = 123 num_float = 45.67 str_int = str(num_int) str_float = str(num_float) print(str_int, type(str_int)) # 输出: 123 <class 'str'> print(str_float, type(str_float)) # 输出: 45.67 <class 'str'> 在这个例子中,str()函数分别将整数num_int和浮点数num_float转换为了字符串类型,并打印了转换后的结果及其类型。 💡 二、深入理解str():转换其他数据类型 除了基本的数值类型,str()函数还可以用来转换其他复杂的数据类型,如列表、元组、字典等。但需要注意的是,对于这些复杂的数据类型,str()函数会将其转换为它们的字符串表示形式,而不是将其中的每个元素都转换为字符串。 代码示例如下: # 示例:将列表和元组转换为字符串 my_list = [1, 2, 3] my_tuple = (4, 5, 6) str_list = str(my_list) str_tuple = str(my_tuple) print(str_list) # 输出: [1, 2, 3] print(str_tuple) # 输出: (4, 5, 6) 在这个例子中,str()函数将列表my_list和元组my_tuple转换为了它们的字符串表示形式。注意,转换后的字符串包含了原始数据类型的结构和元素,但并没有将每个元素都转换为字符串。

【Python】一文详细介绍操作符 % 的作用和用法

【Python】一文详细介绍操作符 % 的作用和用法 🌵文章目录🌵 🔍 一、初识操作符 %💡 二、操作符 % 的基本用法🎯 三、操作符 % 与字符串格式化🔄 四、操作符 % 的高级用法🌐 五、总结与展望 🔍 一、初识操作符 % 在Python中,% 是一个常用的操作符,被称为取模运算符或求余运算符。它的作用是返回两个数相除的余数。对于整数,它直接返回余数;对于浮点数,它会先对两个数进行整数除法,然后返回余数。 举个简单的例子: remainder = 7 % 3 # 结果为 1,因为 7 除以 3 的余数是 1 print(remainder) 在这个例子中,7 % 3 的结果是 1,因为 7 除以 3 的商是 2,余数是 1。 💡 二、操作符 % 的基本用法 操作符 % 的基本用法非常直接,就是用于求余数。这在许多场景中都非常有用,比如检查一个数是否为偶数、计算循环中的索引位置等。 例如,检查一个数是否为偶数: def is_even(number): return number % 2 == 0 print(is_even(4)) # 输出 True,因为 4 是偶数 print(is_even(5)) # 输出 False,因为 5 不是偶数 在上面的代码中,我们定义了一个函数 is_even,它接受一个整数作为参数,并检查该数除以 2 的余数是否为 0。如果是

MySQL中查询、删除重复记录的方法大全

一、查找重复记录 1、查找全部重复记录 SELECT * FROM t_info a WHERE ((SELECT COUNT(*) FROM t_info WHERE Title = a.Title) > 1) ORDER BY Title DESC 2、过滤重复记录(只显示一条) Select * From HZT Where ID In (Select Max(ID) From HZT Group By Title) 注:此处显示ID最大一条记录 二、删除重复记录 1、删除全部重复记录(慎用) Delete 表 Where 重复字段 In (Select 重复字段 From 表 Group By 重复字段 Having Count(*)>1) 2、保留一条(这个应该是大多数人所需要的 _) Delete HZT Where ID Not In (Select Max(ID) From HZT Group By Title)

【安装部署】Apache SeaTunnel 和 Web快速安装详解

版本说明 由于作者目前接触当前最新版本为2.3.4 但是官方提供的web版本未1.0.0,不兼容2.3.4,因此这里仍然使用2.3.3版本。 可以自定义兼容处理,官方提供了文档:https://mp.weixin.qq.com/s/Al1VmBoOKu2P02sBOTB6DQ 因为大部分用户使用SeaTunnel Web都是基于SeaTunnel-2.3.3 版本做的适配,而最新发布的SeaTunnel2.3.4部分API发生了改动导致直接升级的过程中会出现API不兼容的问题,所以本篇文章重点来了:我们需要对调用SeaTunnel APl的SeaTunnel Web源码部分进行修改,修改完之后,就能完全适配2.3.4最新版本。 下载地址 Apache SeaTunnel下载 https://seatunnel.apache.org/download SeaTunnel-web下载 https://seatunnel.apache.org/download 和SeaTunnel在相同的页面,往下拉,最下面有下载地址: 安装SeaTunnel 上传压缩包 将下载的压缩包上传到指定目录下 # 在opt下创建seatunnel文件夹 mkdir /opt/seatunnel # 用rz命令或shell工具上传即可 解压 tar -zxvf apache-seatunnel-2.3.3-bin.tar.gz 配置环境变量 # 编辑/etc/profile.d/my.env vim /etc/profile.d/my.env # 加入以下配置,具体路径根据自己服务设定 # 加入java环境变量 export JAVA_HOME=/opt/module/jdk1.8.0_212 export PATH=$JAVA_HOME/bin:$PATH # 加入maven环境变量 export MAVEN_HOME=/opt/module/apache-maven-3.5.4 export PATH=$MAVEN_HOME/bin:$PATH 执行source刷新环境变量 source /etc/profile 下载JAR包 Apache SeaTunnel里面的Connector对应的jar包需要自己下载,在执行自动下载jar包前,进入apache-seatunnel-2.3.3,查看vim bin/install-plugin.sh内容,主要内容就是下载jar包, 下载包的配置文件是: ${SEATUNNEL_HOME}/config/plugin_config 这个配置文件中不需要的可以删掉或注释掉,只下载自己需要的;默认是从mvvm下载,下载速度太慢,我这边安装了maven,并且配置了阿里云仓库,因此可以直接将下图中命令替换,从maven中下载, 将 ${SEATUNNEL_HOME}/mvnw 替换为 mvn 保存后退出 修改后: jar包将下载下载到connectors/seatunnel这个目录下; 执行下载命令 sh bin/install-plugin.sh 看到是从阿里云下载的,等待下载完成即可

深入理解数据结构第六弹——排序(3)——归并排序

排序1:深入了解数据结构第四弹——排序(1)——插入排序和希尔排序-CSDN博客 排序2:深入理解数据结构第五弹——排序(2)——快速排序-CSDN博客 前言: 在前面,我们已经学习了插入排序、堆排序、快速排序等一系列排序,今天我们来讲解一下另一个很高效的排序方法——归并排序 目录 一、归并排序的思想 二、归并排序的递归实现 三、归并排序的非递归实现 四、完整的代码实例 五、总结 一、归并排序的思想 归并排序是一种经典的排序算法,它采用了分治法的思想。分治法的核心是“分而治之”,即将一个复杂的问题分解成两个或多个相同或相似的子问题,将这些子问题逐个解决,最后将子问题的解合并以解决原问题。 归并排序的基本思想如下: 分解(Divide): 将待排序的数组从中间分成两半,递归地对这两半分别进行归并排序。一直分解,直到每个子数组只包含一个元素,因为一个元素的数组自然是有序的。 解决(Conquer): 当分解到最小子问题时,即每个子数组只有一个元素时,开始解决这些小问题。解决的方式是合并(Merge)两个有序的子数组,从而得到一个更大的有序数组。 合并(Merge): 合并过程是归并排序的关键步骤。它将两个有序的子数组合并成一个有序的数组。通常使用两个指针分别指向两个子数组的起始位置,然后比较两个指针所指向的元素,将较小的元素放入结果数组中,并移动该指针。重复这个过程,直到一个子数组被完全合并到结果数组中,然后将另一个子数组的剩余元素直接复制到结果数组中。 归并排序的操作如下: 归并操作其实就是将一组数据通过递归等不断划分成两个部分,直到划分到一个元素之后,再对这两部分排序排进一个数组内,相当于把划分的过程再反过来走了一遍,只是走回去的过程中会把数组一步一步的有序化 二、归并排序的递归实现 递归的实现其实是很有意思的,在上面我们已经讲了递归的思想,其实就是不断的重复划分然后排序的过程,所以我们就可以设计一个递归来实现这种,同时,由于每一步都要进行分区划分,所以我们可以封装一个划分函数(_MergeSort函数)在前,重复这个过程 void MergeSort(int* a, int n) { int* tmp = (int*)malloc(sizeof(int) * n); _MergeSort(a, 0, n - 1,tmp); free(tmp); } 1、因为我们在划分结束后,需要将各个小的部分再排序成一个有序的大部分,所以我们创建一个tmp的指针指向一个与原数组一样大小的空间,然后每一次排序放进这个空间,最后再把这个空间中的数据复制回原数组 2、其中_MergeSort函数内参数分别为原数组指针,首元素位置,尾元素位置,tmp指针 然后我们就来实现这个分步函数,这个函数的功能就是实现将一个数组不断分为两个部分,当划分成最小单元时,两个两个比较大小,并且放入tmp中,再复制进原数组中,我们先拿数组 { 8 ,7,6,5,4,3,2,1 } 举个例子 实现上述过程的代码如下 //归并排序 void _MergeSort(int* a, int begin,int end,int* tmp) { if (begin == end) return; //小区间优化 if (end - begin + 1 < 10) { InsertSort(a + begin, begin - end + 1); } int mid = (begin + end) / 2; _MergeSort(a, begin, mid, tmp); _MergeSort(a, mid + 1, end, tmp); int begin1 = begin, end1 = mid; int begin2 = mid + 1, end2 = end; int i = begin; while (begin1 <= end1 && begin2 <= end2) { if (a[begin1] < a[begin2]) { tmp[i++] = a[begin1]; begin1++; } else tmp[i++] = a[begin2++]; } while (begin1 <= end1) { tmp[i++] = a[begin1++]; } while (begin2 <= end2) { tmp[i++] = a[begin2++]; } memcpy(a + begin, tmp + begin, sizeof(int) * (end - begin + 1)); } 在这段代码有些部分我们在下面单独讲解一下:

Redis实现JWT(JSON Web TOKEN)自动延长TOKEN过期时间

JWT是JSON WEB TOKEN的简写,常用于生成及校验Token。 常见的使用场景为:用户携带name和秘钥访问后端服务器,应用后端在校验通过后使用JWT生成并返回一串Token,后续用户只需要携带此Token就可以访问服务器,在此不多赘述。 本文目的是基于redis实现token自动更新其过期时间,在校验用户姓名和密码后使用JWT工具类生成会过期的Token,当用户携带此Token访问服务器后会自动延长其过期时间。 例如:用户A携带账户名及秘钥获取token,该token过期时间为2小时,过了1小时后用户再次携带该token访问系统,系统会自动将该token过期时间设置为此刻往后2小时候过期。 1、前提 1.1、JWT工具类 public class JwtUtil { public static final String JWT_ID = "dshsdhsdgjhjdsh"; /** * jwt 加密解密密钥(可自行填写Base64加密) */ private static final String JWT_SECRET = "ahsagsggfTwGGFff"; /** * 创建JWT */ public static String createJwt(Map<String, Object> claims, Long time) { //指定签名的时候使用的签名算法,也就是header那部分,jjwt已经将这部分内容封装好了。 SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256; Date now = new Date(System.currentTimeMillis()); SecretKey secretKey = generalKey(); //下面就是在为payload添加各种标准声明和私有声明了,new一个JwtBuilder,设置jwt的body JwtBuilder builder = Jwts.builder() //如果有私有声明,一定要先设置这个自己创建的私有的声明,这个是给builder的claim赋值,一旦写在标准的声明赋值之后,就是覆盖了那些标准的声明的 .setClaims(claims) //设置jti(JWT ID):是JWT的唯一标识,根据业务需要,这个可以设置为一个不重复的值,主要用来作为一次性token,从而回避重放攻击。 .setId(JWT_ID) //iat: jwt的签发时间 .

安装MySQL时遇到的Initializing database错误_initializing database出现问题

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7 深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前! 因此收集整理了一份《2024年最新网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。 既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上网络安全知识点,真正体系化! 由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新 如果你需要这些资料,可以添加V获取:vip204888 (备注网络安全) 正文 首先到目录C:\ProgramData\MySQL\MySQL Server 8.0(mysql server安装的默认路径)下找到my.ini文件,双击打开,下拉发现有汉字,mysql不识别导致初始化失败 我自己之前没事干修改的设备名称QAQ,建议不要乱修改 将my.ini文件中汉字部分修改成任意英文即可 ctrl+s保存,如果出现没有权限的情况 关掉文件返回目录,鼠标右击my.ini 属性–>安全–>编辑–>选择Users–>权限全选 确定保存,然后再打开my.ini即可修改,按照前述步骤修改好后保存,退出安装程序 找到安装驱动,重启会出现如下界面 点击Reconfigure重新安装MySQL server 勾选Show Advanced and Logging Options 会发现已经是自己修改好的名称 excute后成功安装 后面记得继续在 重启驱动的界面Reconfigure MySQL router和Samples and Examples 最后安装完成 安装完成后记得配置环境变量 本人从事网路安全工作12年,曾在2个大厂工作过,安全服务、售后服务、售前、攻防比赛、安全讲师、销售经理等职位都做过,对这个行业了解比较全面。 最近遍览了各种网络安全类的文章,内容参差不齐,其中不伐有大佬倾力教学,也有各种不良机构浑水摸鱼,在收到几条私信,发现大家对一套完整的系统的网络安全从学习路线到学习资料,甚至是工具有着不小的需求。 最后,我将这部分内容融会贯通成了一套282G的网络安全资料包,所有类目条理清晰,知识点层层递进,需要的小伙伴可以点击下方小卡片领取哦!下面就开始进入正题,如何从一个萌新一步一步进入网络安全行业。 学习路线图 其中最为瞩目也是最为基础的就是网络安全学习路线图,这里我给大家分享一份打磨了3个月,已经更新到4.0版本的网络安全学习路线图。 相比起繁琐的文字,还是生动的视频教程更加适合零基础的同学们学习,这里也是整理了一份与上述学习路线一一对应的网络安全视频教程。 网络安全工具箱 当然,当你入门之后,仅仅是视频教程已经不能满足你的需求了,你肯定需要学习各种工具的使用以及大量的实战项目,这里也分享一份我自己整理的网络安全入门工具以及使用教程和实战。 项目实战 最后就是项目实战,这里带来的是SRC资料&HW资料,毕竟实战是检验真理的唯一标准嘛~ 面试题 归根结底,我们的最终目的都是为了就业,所以这份结合了多位朋友的亲身经验打磨的面试题合集你绝对不能错过! 网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。 需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注网络安全) 一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长! 204888 (备注网络安全)** [外链图片转存中…(img-xnvNd8DG-1713239119994)] 一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

安装MySQL时遇到的Initializing database错误_initializing database出现问题(1)

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7 深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前! 因此收集整理了一份《2024年最新网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。 既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上网络安全知识点,真正体系化! 由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新 如果你需要这些资料,可以添加V获取:vip204888 (备注网络安全) 正文 将my.ini文件中汉字部分修改成任意英文即可 ctrl+s保存,如果出现没有权限的情况 关掉文件返回目录,鼠标右击my.ini 属性–>安全–>编辑–>选择Users–>权限全选 确定保存,然后再打开my.ini即可修改,按照前述步骤修改好后保存,退出安装程序 找到安装驱动,重启会出现如下界面 点击Reconfigure重新安装MySQL server 勾选Show Advanced and Logging Options 会发现已经是自己修改好的名称 excute后成功安装 后面记得继续在 重启驱动的界面Reconfigure MySQL router和Samples and Examples 最后安装完成 安装完成后记得配置环境变量 在输选框搜索编辑环境变量 点击打开 环境变量–>系统变量–>选择path–>编辑–>新建 输入 %MYSQL_HOME%\bin 如何自学黑客&网络安全 黑客零基础入门学习路线&规划 初级黑客 1、网络安全理论知识(2天) ①了解行业相关背景,前景,确定发展方向。 ②学习网络安全相关法律法规。 ③网络安全运营的概念。 ④等保简介、等保规定、流程和规范。(非常重要) 2、渗透测试基础(一周) ①渗透测试的流程、分类、标准 ②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking ③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察 ④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等 3、操作系统基础(一周) ①Windows系统常见功能和命令 ②Kali Linux系统常见功能和命令 ③操作系统安全(系统入侵排查/系统加固基础) 4、计算机网络基础(一周) ①计算机网络基础、协议和架构 ②网络通信原理、OSI模型、数据转发流程 ③常见协议解析(HTTP、TCP/IP、ARP等) ④网络攻击技术与网络安全防御技术 ⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现 5、数据库基础操作(2天) ①数据库基础 ②SQL语言基础 ③数据库安全加固 6、Web渗透(1周) ①HTML、CSS和JavaScript简介 ②OWASP Top10

【Java】通过java将doc文件转换为docx

方法一:使用JACOB进行转换 工具:jacob.jar 注意事项: 依赖Windows环境: JACOB依赖于Windows操作系统及安装的Microsoft Word。转换过程将在后台启动Word进程,因此要求目标机器上必须安装有支持.doc到.docx转换的Word版本(通常至少是Word 2007及以上)。 性能和稳定性: 由于JACOB是通过COM接口调用Word应用程序进行转换,这种间接方式可能比使用纯Java库(如Apache POI)慢,并且受Word本身稳定性的影响。此外,长时间、大量文件的转换可能会消耗大量系统资源。 并发和许可问题: 并发执行多个转换任务时,需要考虑Word是否支持多实例并发以及许可证限制。在生产环境中,可能需要设计适当的并发控制机制。 异常处理: 必须妥善处理可能出现的异常,如文件不存在、Word未安装、权限问题等。此外,转换失败时可能需要清理临时文件或恢复原始状态。 示例代码: import com.jacob.activeX.ActiveXComponent; import com.jacob.com.Dispatch; import com.jacob.com.Variant; import java.io.File; import java.util.concurrent.TimeUnit; public class DocToDocxConverter { public static void main(String[] args) { String inputFilePath = "C:\\path\\to\\input.doc"; String outputFilePath = "C:\\path\\to\\output.docx"; try { // 创建Word Application对象 ActiveXComponent wordApp = new ActiveXComponent("Word.Application"); // 设置Word为可见(可选,调试时便于观察) wordApp.setProperty("Visible", new Variant(false)); // 打开源.doc文件 Dispatch documents = wordApp.getProperty("Documents").toDispatch(); Dispatch document = Dispatch.call(documents, "Open", inputFilePath, false, true).

Asp.NET Core WebAPI 入门学习笔记,超详细

1.WebAPI概述 1.1 WebAPI WebAPI 是一种传统的方式,用于构建和暴露 RESTUI风格的Web服务。它提供了丰富的功能和灵活性,可以处理各种HTTP请求,并支持各种数据格式,如JSON、XML等。 WebAPI使用控制器(Controllers)和动作方法(ActionMethods)的概念、通过路由配置将请求映射到相应的方法上。 开发人员可以使用各种属性和过滤器来处理请求、控制访问权限、验证数据等。 1.2 MinimaIAPI MinimaIAPI 是ASP.NET COre6引入的一种新的轻量级 API开发模型。 它旨在简化 API的创建过程,提供更简洁、更集中的代码结构。 MinimalAP1基于函数式编程模型,通过一个顶级的webAppiication 类来配置路由和请求处理。开发人员可以使用链式调用的方式定义路由、请求处理逻辑和中间件。这种模型更加直观和易于理解,尤其适合构建小型的、单一用途的 WebAPI。 与WebAPI相比,MinimalAPI的主要区别包括: 1.代码量更少:MinimalAPI基于函数式编程模型,代码更加简洁、消除了控制器和动作方法的概念。2.更少的依赖项:MinimalAPI不需要使用额外的NuGet包,只需使用ASP.NET Core 本身的核心包即可。3.更直观的路由配置:MinimaAP1使用链式调用的方式定义路由,路由配置更加直观和易于理解。4.更轻量级的应用:由于代码量少、依赖项少,MinimalAPI应用程序的启动时间更快,内存占用更小。 2.新建WebAPI Web API项目模板提供了一个入门版控制器: [ApiConyroller] [Route("[controller]")] public class WeatherForecastController : ControllerBase Web API控制器通常应派生自 ControllerBase 而不是 Controler。Controller派生自ControlerBase,并添加对视图的支持,因此它用于处理 Web页面,而不是WebAPI请求。如果同一控制器必须支持视图和 Web API,则派生自Controller. 写一个简洁的API,我们新建一个控制器VauleController: using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; namespace WebAPI.Controllers { [Route("api/[controller]/[action]")] [ApiController] public class ValuesController : ControllerBase { [HttpGet] public string Test() { return "ok"; } } } 在浏览器上访问: 通过在浏览器上输入api/[controller]/[action] 从而调用接口,如下图所示接口可用。