Springboot项目常见的8个报错

Springboot项目常见的8个报错 1.500状态码: 代表服务器业务代码出错,也就是执行Controller里面的某个方法的过程中报错, 此时在idea的控制台中会显示具体的错误信息, 所以需要去看idea控制台的报错,具体关注Caused by后面的报错信息描述。 2.404状态码: 找不到资源 localhost:8080/reg.html 找不到静态资源 检查请求地址是否拼写错误 检查静态资源文件的位置是否正确 如果以上都没有问题需要Build->ReBuild Project 然后重启工程测试 找不到动态资源 检查请求地址是否拼写错误 检查Controller中是否添加了@Controller注解或@RestController注解 检查@RequestMapping("路径") 注解里面的路径是否和请求路径一致 检查controller包是否创建在了工程自带的包里面 如果以上都没有问题需要Build->ReBuild Project 然后重启工程测试 3.运行的是新工程但是显示的却是之前工程的页面, 这种情况是因为浏览器加载的是缓存内容.在浏览器访问的老的页面中Shift+F5 清缓存刷新 4.MySQL服务重启电脑时自动关闭了,会导致以下报错, 需要找到MySQL服务开启,或者在命令提示符中用cmd命令开启。net start mysql 5.连接数据库时用户名或密码错误 6.8080端口被占用: - 检查是不是其它工程正在运行, 关闭其它工程即可解决 如果其它工程没有运行,可能是idea异常关闭导致8080端口被占用 重启电脑 找到占用8080端口的进程杀掉 找出占用8080端口的pid netstat -o -n -a | findstr :8080 kill掉目前8080端口所占用的进程 taskkill /F /PID 修改工程的端口号, 在application.properties里面添加以下内容修改工程的端口号 server.port=8081 7.Mybatis工程没有配置连接数据库的信息导致工程启动报错: - 解决方案: 在application.properties里面配置连接数据库的信息 spring.datasource.url=jdbc:mysql://localhost:3306/restaurant?characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false spring.datasource.username=root spring.datasource.password=root 8.400状态码: 代表传参出错

4月书讯!15本新书闭眼入!

书可以带着你的心灵旅行,走最远的旅行。每天看一本书,一年下来,别人与你就有 365 本书的差距。通过学习建立自己的风格与专业,把自己当作一项事业,当成个人品牌在经营,创造自己名字的价值,帮自己建立一个别人拿不走的身份,而不是社会价值下的职业。 四月图灵社区好书云集,适合正在布局读书计划的每一个人。 本月新书上市 15 本,不管是计算机还是科普,都能给你耳目一新的清新之感,快来跟我一起看看都有哪些新书吧! 计算机类 重磅来袭!超250万读者的选择:蟒蛇书《Python编程:从入门到实践(第3版)》终于终于预售啦! 《Python编程:从入门到实践(第3版)》 [美]埃里克·马瑟斯(Eric Matthes)|著 袁国忠|译 编程入门就选蟒蛇书! 本书是享誉全球的 Python 入门书,影响了超过250万读者。全书分两部分:第一部分介绍用Python编程所必须了解的基本概念,包括强大的 Python 库和工具,以及列表、字典、if 语句、类、文件和异常、代码测试等内容;第二部分将理论付诸实践,讲解如何开发三个项目,包括简单的 2D 游戏、利用数据生成交互式的信息图以及创建和定制简单的 Web 应用,并帮助读者解决常见编程问题和困惑。第 3 版进行了全面修订:使用了文本编辑器 VS Code,新增了介绍 removeprefix() 方法和 removesuffix() 方法的内容,并且在项目中利用了 Matplotlib 和 Plotly 的最新特性,等等。 豆瓣 9.6,冠绝 Python 圈,读完它才能理解 Python 之美,万千读者催更的第 2 版终于来啦! 《流畅的Python(第2版)》 卢西亚诺·拉马略|著 安道|译 本书致力于帮助读者挖掘这门语言及相关程序库的优秀特性,写出简洁、流畅、易读、易维护,并且地道的Python代码。第一版销量近10万册,得到读者译者好评。第2版内容更新率超过 3 成,基于 Python 3.10 全新升级,充分利用 Python 特性,写出高效且现代的 Python 3 代码。 接下来是前端大神司徒正美老师写给所有前端人的面试必备算法书,不论你是科班出身还是非科班出身的前端开发者,这本都可以让你快速上手! 《JavaScript算法:基本原理与代码实现》 司徒正美,李晓晨|著 本书以 JavaScript 作为演示代码,比较系统地涉及各种数据结构和常见的算法面试题,如常见排序算法、树的相关算法、字符串算法、回溯算法、动态规划问题等。书中没有难懂的数学公式与复杂度证明,详细列出解题步骤,给出可以套用的算法模板和多种解。 本月还有一本超级实用的 MySQL 实战指南,作者是“MySQL实战”公众号作者、甲骨文数据库专家陈臣老师,MySQL 常见问题读完这本都会一一拿下。 《MySQL实战》

小米平板6和小米平板6Pro的区别 小米平板6和小米平板6pro参数对比

小米平板6和小米平板6 Pro在外观设计方面几乎完全相同。它们都采用了超清护眼全面屏,背面的正方形圆角相机模块都位于左侧,全金属一体机身和直角边框设计。 机身厚度都是6.51mm,重量也只有约490g,这使得它们在手持使用时非常轻便。然而,虽然它们在外观上几乎一致,但它们的价格和性能却存在一些微小的差别。小米平板6 Pro比小米平板6价格更高,但配备了性能更强的处理器以及更好的相机。 二、显示屏 小米平板6和小米平板6 Pro在显示屏方面几乎完全相同。它们都采用了11英寸LCD材质的专业原色屏,分辨率达到2880x1800像素,可以呈现10亿种颜色,同时配备了AI 大师画质引擎,使得画质更为出色。 小米平板6 更多使用感受和评价 http://xiaomi.adiannao.cn/1 小米平板6Pro更多使用感受和评价 http://xiaomi.adiannao.cn/1 此外,它们的屏幕还支持30-144Hz刷新率的7挡可调,全局最高亮度达到550nit,并获得了莱茵硬件低蓝光护眼认证,同时提供经典护眼、纸质护眼、真彩显示、超动态显示等多种显示模式。这使得两款平板电脑在显示效果上表现出极高的水准,用户可以根据自己的需求选择不同的显示模式。因此,无论是娱乐还是工作,小米平板6和小米平板6 Pro都能够提供非常出色的视觉体验。 三、核心性能 小米平板6搭载了骁龙870处理器,采用台积电7nm工艺制程,搭配8GB运行内存,性能强劲,能够满足大多数用户的日常使用需求,无论是看视频、玩游戏还是进行多任务处理,都能够表现出不俗的表现。 而小米平板6 Pro则搭载了更为强劲的骁龙8+旗舰处理器,采用台积电4nm工艺制程,搭配12GB运行内存,性能更为出色,处理速度更快,能够应对更为复杂的操作场景和大型游戏的运行需求,同时也更加省电。因此,如果用户追求更高的性能和更好的游戏体验,小米平板6 Pro无疑是更为合适的选择,而对于普通用户来说,小米平板6的性能也足够强劲。 四、相机 小米平板6搭载了后置13MP摄像头和前置800万像素超广角镜头,能够满足用户的日常拍摄需求,支持4K 30fps视频拍摄,能够录制出清晰、流畅的视频内容,前置超广角镜头也能够满足用户自拍和视频通话的需求。 而小米平板6 Pro则搭载了后置50MP摄像头和前置2000万像素超广角镜头,拍摄效果更为出色,支持4K 60fps视频拍摄,可以录制更为流畅、清晰、逼真的视频内容,同时前置镜头也提供了更高的自拍和视频通话质量。 五、电池 小米平板6搭载了一块8840mAh电池,支持33W快充技术,可以让用户快速充电,同时电池容量也足够支持日常使用。但是相比于小米平板6 Pro而言,其充电速度稍显逊色。 小米平板6 Pro虽然配备了一块更小的8600mAh电池,但支持更快的67W快充技术,充电速度比小米平板6更快,同时电池容量也能够满足用户日常使用需求,能够更好地支持高性能处理器、高分辨率屏幕等硬件的消耗。 对比总结: 对比这两款小米平板电脑,它们最大的区别在于处理器性能和相机配置。如果你需要更强大的处理器和更出色的相机配置,并且愿意多花费500元,那么选择小米平板6 Pro是个不错的选择。 但是,如果你对处理器性能和相机配置不是特别苛刻,更注重性价比的话,那么小米平板6的配置及性能完全足够了。

vue3 下载图片实现方法,亲测有效

//图片编码 const getUrlBase64 = (url) => { return new Promise((resolve) => { let canvas = document.createElement("canvas"); let ctx = canvas.getContext("2d"); let img = new Image(); img.crossOrigin = "Anonymous"; //允许跨域 img.src = url; img.onload = function () { canvas.height = 300; canvas.width = 300; ctx.drawImage(img, 0, 0, 300, 300); let dataURL = canvas.toDataURL("image/png"); canvas = null; resolve(dataURL); }; }); }; // click事件调用方法 const download_qr_code = (item) => { getUrlBase64(item).then((base64) => { let link = document.

使用vmware安装ubuntu

1.下载VMware16 worksation VMware不限制白嫖。直接从官网下载vmware安装包即可。但是现在官网都是一些云啥的,很难找。我一般都直接访问pc.qq.com去下载正版安装包。安装过程中提示许可证,直接在网上找一个密钥即可。 2.下载ubuntu 去官网下,下载速度很快。我下载的是ubuntu-22.04.2-live-server-amd64版本的。 3.新建虚拟机,安装Ubuntu 乌班图server版的安装向导没有中文版的, 需要修改一个地方,将数据源更改为阿里镜像 然后一路下一步。 4.开启root用户 使用安装过程中设置的普通用户进行登录。执行sudo passwd root。设置root用户的密码。 5.开放防火墙22端口 以root登录。依次执行 sudo apt-get install openssh-server sudo apt-get install ufw sudo ufw enable sudo ufw allow 22 6.开启root远程登陆 vim /etc/ssh/sshd_config(如何使用vim自行百度) ... #PermitRootLogin prohibit-password PermitRootLogin yes # 允许root直接登录 ... #PermitEmptyPasswords no PermitEmptyPasswords no # 因为设置了root密码,所以需要修改为no 保存 7. 使用ssh/sftp工具测试连接

【MyBatis-Plus问题集】当我们使用MyBatis-Plus版本3.5.x时,会发现一直无法注册xxxMapper

目录 项目场景问题描述解决方案 项目场景 项目场景:我们想尝试新版本的MyBatis-Plus,使用目前比较新的版本3.5.3 问题描述 描述: 配置都确保正常且跟MyBatis-Plus官网配置一样后,启动项目时就会报错,无法找到xxxMapper,报错如下: Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘userController’: Unsatisfied dependency expressed through field ‘userService’; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘userServiceImpl’: Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘userMapper’ defined in file [D:\learnData\java_learning\project\cloudsurvey\target\classes\cn\itsource\code\mapper\UserMapper.class]: Unsatisfied dependency expressed through bean property ‘sqlSessionFactory’; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘com.

QT源码编译#error “Q_ATOMIC_INT64_IS_SUPPORTED must be defined on a 64-bit platform“

/home/ali/Qt/5.15.2/Src/qtbase/include/QtCore/../../src/corelib/global/qglobal.h:121:63: error: static assertion failed: template parameter is an integral of a size not supported on this platform 121 | # define Q_STATIC_ASSERT_X(Condition, Message) static_assert(bool(Condition), Message) | ^~~~~~~~~~~~~~~ /home/ali/Qt/5.15.2/Src/qtbase/include/QtCore/../../src/corelib/thread/qbasicatomic.h:97:5: note: in expansion of macro ‘Q_STATIC_ASSERT_X’ 97 | Q_STATIC_ASSERT_X(QAtomicOpsSupport<sizeof(T)>::IsSupported, "template parameter is an integral of a size not supported on this platform"); | ^~~~~~~~~~~~~~~~~ make[3]: *** [Makefile:23936: .obj/qatomic.o] Error 1 解决方案:在对应的交叉编译配置文件中添加一行: clangdefines += Q_ATOMIC_INT64_IS_SUPPORTED 比如编译的目标代码为linux-aarch64-gnu,则在qtbase/mkspecs/linux-aarch64-gnu-g+/qmake.conf文件中添加: # # qmake configuration for building with aarch64-none-linux-gnu-g++ # MAKEFILE_GENERATOR = UNIX CONFIG += incremental QMAKE_INCREMENTAL_STYLE = sublib include(.

jdbcTemplate封装一个CRUD框架

很久没更新博文了,今天抽了1个小时空,给大家分享一个基于jdbcTemplate封装的CRUD工具API。 pom.xml依赖坐标 该框架用到的maven坐标如下,由于这是框架,所有的maven依赖均指定optional为true,这个代表依赖版本号以使用者项目为准,同时使用该框架的客户端项目必须重新强制依赖的方式引入这批依赖,否则编译时将会报错: <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> <optional>true</optional> </dependency> ‍ 定义BaseModel 为什么一定要定义BaseModel?定义BaseModel有如下好处: 1、定义通用字段,例如主键、创建人、创建时间。 2、在CRUD DAO接口入参时通过泛型<M extends BaseModel>指定入参的父类型范围,然后可以在父类定义接口方式在DAO获取到主键进行操作。 BaseModel代码如下: @Data public abstract class BaseModel implements Serializable { static final long serialVersionUID = 25456241672452L; private Long id; private String createBy; private String updateBy; private LocalDateTime createDate; private LocalDateTime updateDate; /** * 表名 * @return */ public abstract String tableName(); } 定义BaseDao接口

flink k8s HA 报ClusterRetrieveException: Could not get the rest endpoint

文章目录 问题分析 问题 org.apache.flink.client.deployment.ClusterRetrieveException: Could not get the rest endpoint of flink-cluster 我是在用flink sql-client 提交任务发现的这个问题 分析 从源码中可以看到实现上的jobmanager 这个svc要以flink-cluster-rest 来命名才能解析到jobmanager地址

前端单元测试的实践指南

在前端开发中,单元测试是一种保证代码质量的重要方法。它可以帮助开发者快速发现代码中的问题,并且避免因为意外的修改带来新的问题。本篇文章将分享前端单元测试的实践指南,包括为什么需要单元测试、常用的测试框架和库、如何编写单元测试等内容,并且会结合实例代码来演示每种测试方法的使用。 为什么需要单元测试 在前端开发中,单元测试可以帮助我们及时发现代码中的错误和问题,并且使得开发过程更加高效和可靠。单元测试可以帮助我们: 确保代码的正确性:单元测试可以确保代码在各种情况下正确执行。提高代码可维护性:通过单元测试,可以让开发者更好地组织和维护代码。简化代码重构:单元测试可以让开发者在修改代码时快速找到潜在的问题,并且在代码修改后很容易验证其正确性。 常用的测试框架和库 在前端单元测试中,有很多框架和库可以使用。以下是其中一些常用的框架和库: Jest:Jest 是 Facebook 推出的一款适用于 React 应用程序的测试框架。它集成了代码覆盖率、模拟和快照测试等功能,而且易于使用。Mocha:Mocha 是一个功能丰富的测试框架,它支持浏览器和 Node.js 环境,可以使用各种断言库和异步代码测试。Karma:Karma 是一个测试运行器,可以在多种浏览器中运行单元测试。 如何编写单元测试 编写单元测试需要关注以下几个方面: 安装所需的测试库:如 Jest、Mocha、Karma 等。编写测试用例:为要测试的函数或组件编写测试用例。测试用例应该覆盖所有重要的路径,并且保证代码在各种情况下都能正确运行。运行测试用例:运行测试用例,确保它们能够正确地通过测试。持续集成测试:在持续集成过程中自动运行测试用例,并及时反馈测试结果。 以下是一个简单的测试用例,展示了如何使用 Jest 来测试函数的行为: function add(a, b) { return a + b; } test('adds 1 + 2 to equal 3', () => { expect(add(1, 2)).toBe(3); }); 在上面的代码中,我们首先定义了一个 add 函数,接着使用 test 函数来定义一个测试用例,该测试用例验证了 add 函数的正确性。 总结 本篇文章分享了前端单元测试的实践指南,包括为什么需要单元测试、常用的测试框架和库、如何编写单元测试等内容,并且演示了如何使用 Jest 来测试函数的行为。通过学习并实践单元测试,我们可以确保代码的正确性、提高代码的可维护性和简化代码的重构。

Linux系统安装apache详细教程

1.下载安装apache yum install httpd 2.查看是否安装成功 rpm -qa |grep httpd 3.启动apache服务 sudo systemctl start httpd.service 4.查看apache服务状态 sudo systemctl status httpd.service 相关命令: sudo systemctl stop httpd.service 停止apache服务 sudo systemctl restart httpd.service 重启apache服务

JavaScript常用数组方法以及使用方法

JavaScript中的数组是一种数据结构,可以存储一系列的值,并提供了许多方法来操纵和操作这些值。以下是一些常用的JavaScript数组方法: push():在数组末尾添加一个或多个元素,并返回新数组的长度。pop():删除并返回数组的最后一个元素。unshift():在数组开头添加一个或多个元素,并返回新数组的长度。shift():删除并返回数组的第一个元素。slice():从数组中提取指定的部分并返回一个新的数组,原始数组不会被修改。splice():从数组中删除、添加或替换元素,原始数组将被修改,并返回被删除的元素。concat():将两个或多个数组连接在一起,并返回新数组。reverse():反转数组的顺序,并返回修改后的数组。sort():按照字母顺序对数组进行排序,或者使用自定义函数对其进行排序,并返回修改后的数组。indexOf():返回指定元素在数组中的位置(从前往后找)。lastIndexOf():返回指定元素在数组中的位置(从后往前找)。forEach():遍历数组中的每个元素,并为每个元素执行回调函数。map():创建一个新数组,其中包含原始数组的所有元素,并对每个元素执行回调函数。filter():创建一个新数组,其中仅包含通过测试函数的元素。reduce():通过对数组中所有元素应用一个函数来将其减少为单个值,并返回该值。 join():用指定的分隔符将数组每一项拼接为字符串 find():返回匹配的值 findIndex():返回匹配位置的索引 toLocaleString()、toString():将数组转换为字符串 这些方法只是JavaScript中可用的一部分数组方法,还有很多其他的方法可以使用。push(): push()向数组末尾添加一个或多个元素,并返回新的长度 let fruits = ["apple", "banana"]; fruits.push("orange", "kiwi"); console.log(fruits); // ["apple", "banana", "orange", "kiwi"] pop()删除数组最后一个元素,并返回被删除元素的值 let fruits = ["apple", "banana", "orange", "kiwi"]; let lastFruit = fruits.pop(); console.log(lastFruit); // "kiwi" console.log(fruits); // ["apple", "banana", "orange"] unshift():向数组开头添加一个或多个元素,并返回新的长度 let fruits = ["apple", "banana"]; fruits.unshift("orange", "kiwi"); console.log(fruits); // ["orange", "kiwi", "apple", "banana"] shift():删除数组第一个元素,并返回被删除元素的值 let fruits = ["orange", "kiwi", "apple", "banana"]; let firstFruit = fruits.shift(); console.log(firstFruit); // "

Webpack 模块打包器的使用和配置

Webpack 是一款主流的模块打包器,它能够将各种依赖的模块打包成一个或多个静态资源,并且能够通过插件拓展其功能,支持对各种文件类型的处理。本篇文章将介绍 Webpack 模块打包器的使用和配置,包括如何安装和配置 Webpack、如何使用 Loader 和 Plugin等内容,并且将结合实例代码对这些配置进行演示。 安装和配置 Webpack 首先需要安装Webpack,使用以下命令即可: npm install -g webpack 接下来,我们需要为我们的项目添加一个 webpack.config.js 配置文件。这个配置文件通常位于项目的根目录。 在配置文件中,需要进行如下的配置: 指定项目的入口点(entry)指定输出目录(output)指定需要使用的 Loader 数组,用来转换待打包的文件,如ES6转换为ES5指定需要使用的 Plugin 数组,用来完成其他特定的打包任务,如代码压缩 为了更好地理解这些配置,接下来让我们通过示例代码来说明。 使用 Loader 在 Webpack 应用程序中,每个文件都被视为一个模块,包括 HTML, CSS, JavaScript 等。然而,Webpack 默认只能处理 JavaScript 文件,对于其他必须的文件类型,我们需要使用 Loader 来进行转换。 例如,我们可以使用 css-loader 来加载和处理 CSS 文件,使用 file-loader 来处理图像和其他资源。以下是一个简单的配置样例: module: { rules: [ { test: /\.css$/, use: [ 'style-loader', 'css-loader' ] }, { test: /\.(png|jpg|gif)$/, use: [ { loader: 'file-loader', options: {} } ] } ] } 在上面的示例代码中,我们配置了两个规则以处理 CSS 文件和图片文件。对于 CSS 文件,css-loader 将 CSS 转换为 JavaScript,而 style-loader 将 CSS 插入到 HTML 文件中。

Https域名解析——腾讯云免费SSL证书申请流程

背景 最近购买了一台腾讯云服务器,采用腾讯免费域名解析,只是绑定成功http请求及www请求。网站地址为:http://kalehu.com https一直不能访问,一直以为腾讯云与阿里虚拟主机绑定一样,只需勾选一个选项,可以直接完成,后来发现思路是错误。服务器绑定https,需要申请SSL证书之后才能进行解析,本文记录如何申请腾云免费的SSL证书 讯云免费的SSL证书。 免费腾讯云SSL说明 免费证书仅提供二级域名及其子域名证书申请,不支持 IP 与泛域名申请。例如 dnspod.cn、docs.dnspod.cn。 亚洲诚信范围内(不一定在腾讯云申请)的同一主域最多只能申请20张免费证书,申请时请注意该域名是否在其他服务商平台存在亚洲诚信下的证书,避免申请达到上限无法申请。更多详情请参见 免费证书名额相关问题。 免费证书到期后如需继续使用证书,请重新申请并安装。 申请步骤 登录 腾讯云控制台,进入 “我的证书” 管理页面,并单击申请免费证书。 2. 填写证书申请表单,如下图所示: 证书绑定域名:请填写单个域名。例如 kalehu.com 域名验证方式: 说明 自动DNS验证:验证方法请参见 自动添加 DNS。 若申请的域名已成功托管在 DNS 解析 DNSPod 控制台,可支持自动添加 DNS。 手动DNS验证:验证方法请参见 DNS 验证。 文件验证:验证方法请参见 文件验证。 申请邮箱:请输入您的邮箱地址。 算法选择:勾选所需证书的加密算法。加密算法具体内容请参见 RSA 加密算法与 ECC 加密算法的区别? 证书备注名:可选,请输入证书的备注名称,不可超过200字。 私钥密码:可选,为了保障私钥安全,目前不支持密码找回功能,请您牢记私钥密码。 注意 如需部署腾讯云负载均衡、CDN 等云服务,请勿填写私钥密码。 标签:请选择您的标签键和标签值,方便您管理腾讯云已有的资源分类。 说明 如需添加标签,请参见 管理标签。 所属项目:请选择您证书所属项目,方便您通过项目管理您的证书。 根据验证操作提示,完成域名身份验证,并单击完成。如下图所示: 4.域名验证通过后,CA 机构将在24小时内完成签发证书操作,请您耐心等待。 注意 提交域名未通过 CA 机构安全审核,具体原因请参见 安全审核失败原因。 下载和部署 完成域名审核后,颁发的证书即可单击下载到本地进行安装部署或部署到腾讯云相关云服务上。 文章参考来源:腾讯云

基于趋动云的chatGLM-6B模型的部署

首先根据官方示例教程,学会怎么创建项目,怎么使用数据,怎么进入开发环境,以及了解最重要的2个环境变量: 这个是进入开发环境以后的代码目录 $GEMINI_CODE 这个是引用数据集后,数据集存放的路径 $GEMINI_DATA_IN1 这2个linux shell环境变量很关键 创建项目时,需要注意的: 镜像选择: 数据集选择: 数据集选择后,页面会提示,数据集绑定在/gemini/data-1路径了。这个不用记忆,这个路径会保存在前面说的那个系统环境变量里,主要记住是data-#几。 运行规格选择: 这个模型你要想跑的效果快一些,必然是GPU显存多用一些,才能快,虽然6G也能跑,但是会很慢。所以选那个算力高一些的: 我第一次选的B1中等主机,结果加载到62%,直接被自动Kill了,需要大一些,建议搞large的! 上传代码: 把这三个代码上传上去,文件名别改,除非你自己懂。 requirements.txt protobuf>=3.19.5,<3.20.1 transformers>=4.26.1 icetk cpm_kernels gradio options.py import argparse parser = argparse.ArgumentParser() parser.add_argument("--port", type=int, default="17860") parser.add_argument("--model-path", type=str, default="/gemini/data-1") parser.add_argument("--precision", type=str, help="evaluate at this precision", choices=["fp16", "int4", "int8"], default="fp16") parser.add_argument("--listen", action='store_true', help="launch gradio with 0.0.0.0 as server name, allowing to respond to network requests") parser.add_argument("--cpu", action='store_true', help="use cpu") parser.add_argument("--share", action='store_true', help="use gradio share") webui.py

mac本配置maven后每次都要source才生效

每次打开终端,mvn -v都提示zsh: command not found: mvn 每次都要使用source .bash_profile才生效 解决办法⬇️ 1.打开终端,输入cd ~先进入当前用户账户的目录下 2.输入touch .zshrc创建zshrc文件,然后输入vim .zshrc准备在文件内编辑命令行 注:如果提示这个文件已经存在(already exist)的话,就在提示后输入e,并回车(代表edit这个文件) 3.改成英文输入法,输入i(代表insert),然后在文件内添加这行命令 source ~/.bash_profile 然后按esc,输入:wq并回车 4.重启终端 最后重启终端,mvn -v 正常展示版本号啦

Vivado更新比特流(.xsa)文件后,如何在vitis中更新硬件bsp文件?

大纲 一、更新板级支持包(注意是硬件平台右击,选择图中所示的Update Hardware Specification)二、复位重建BSP源文件三、clean 硬件平台四、 编译硬件平台五、最后一步,更新工程中的文件,刷新文件,编译工程即可。参考文献 在vivado中导出新的(.xsa)文件后,然后在vitis中进行以下的步骤: 一、更新板级支持包(注意是硬件平台右击,选择图中所示的Update Hardware Specification) 选择更新后的xsa文件 然后选择更新后的xsa文件路径 然后会出现 点击OK即可 二、复位重建BSP源文件 复位BSP文件后会出现这个错误,此时不必理会,后面编译工程后自会解决。 三、clean 硬件平台 四、 编译硬件平台 五、最后一步,更新工程中的文件,刷新文件,编译工程即可。 参考文献 [1] Update an Existing Vitis Platform’s Hardware Specification [2]赛灵思社区: vitis更新xsa问题 [3]赛灵思社区: Updating BSP in Vitis [4] CSDN: Vivado硬件平台更新后Vitis工程如何快捷更新

【 Node.js 教程(一)】安装、配置及初步使用

1. Node.js简介 2. Node.js的安装和配置 3. Node.js使用测试 4. 系统后台运行Node.js 应用程序 5. Excel文件读取和显示 1. Node.js简介 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时,它使用事件驱动、非阻塞 I/O 模型来构建轻量且高效的网络应用。以下是 Node.js 的发展历史和最新版本的介绍: 2009 年:Ryan Dahl 开始开发 Node.js,最初是为了使 JavaScript 能够在服务器端运行。2010 年:第一个稳定版本 0.1.14 发布,随后发布了一系列的版本,改进了稳定性和性能。2011 年:Node.js 的社区开始发展壮大,并发布了 0.4 和 0.6 版本,增加了很多新功能和改进。2012 年:Node.js 的社区出现分裂,因为在维护 Node.js 的过程中出现了一些问题。因此,一部分社区成员创建了 io.js 项目,这个项目包含了很多 Node.js 中没有的新特性。2015 年:Node.js 社区宣布与 io.js 合并,将两个项目合并为一个单一的 Node.js 项目。这个决定受到了 Node.js 开发者和用户的欢迎,因为它标志着 Node.js 社区的统一。2016 年:Node.js 6.x 版本发布,成为了长期支持版本(LTS)。该版本提供了一些新特性和性能优化,包括对 ES6 语法的更好支持和更快的模块加载速度。2017 年:Node.js 8.x 版本发布,成为了新的长期支持版本(LTS)。该版本提供了很多新特性和改进,包括异步追踪和性能优化。2018 年:Node.js 10.x 版本发布,成为了新的长期支持版本(LTS)。该版本增加了很多新特性,包括对 ES6 中新特性的更好支持、更好的安全性和更快的网络连接。2020 年:Node.

CSS知识全解

目录 一.CSS3三种关联方式 行内样式表 内部样式表 外部样式表 CSS优先级 扩展 二.CSS选择器 通用选择器 标签选择器 类选择器 ID选择器 后代选择器 子代选择器 交集选择器 并集选择器 伪类选择器 选择器的优先级 三.CSS常用文本属性 字体 字号 字体颜色 文本属性 四.其他常用属性 列表常用属性 超链接样式属性 五.CSS过渡与变换 transition:过渡属性 transform:变化属性 六.CSS动画 @keyframes创建关键帧动画 使用animation调用关键帧动画 七.盒子 IE盒模型 切换盒模型 八.盒属性 margin外边距 border边框 padding内边距 overflow内容溢出控制 outline外围线 box-shadow盒子阴影 border-radius边框圆角 border-image图片边框 九.浮动 clear清楚浮动 子盒子浮动造成父盒子高度塌陷 十.定位 relative相对定位 absolute绝对定位 fixed固定定位 使用定位实现元素的绝对居中 十一.z-index 作用 使用要求 z-index:auto与z-index:0的异同 z-index相同(处于同一平面的定位元素)的层叠关系 十二.网页布局 网页布局方式 响应式的实现方式 固定布局概念 流体布局概念 弹性布局详细 基本概念 作用于容器的属性 作用于项目的属性 补选择器大全 一.CSS3三种关联方式 行内样式表 就是将 CSS 代码放置在 HTML 代码内部

chomd命令

详细学习:Linux chmod 命令 | 菜鸟教程 结合实操了解:Linux命令`ll`的结果解析_ll命令显示结果详解_一位不想透露名字的路人甲的博客-CSDN博客

Distcp整理

可参考:distcp 是什么?如何在两个 HDFS 集群之间传输数据?_Shockang的博客-CSDN博客 Hadoop集群间数据拷贝distcp使用_skydow的博客-CSDN博客 一篇文章彻底搞定跨集群跨版本distcp的使用_涤生大数据的博客-CSDN博客 

如何在EXCEL中运行ChatGPT,从此不再需要记函数

文章目录 目录 文章目录 序言 如果你可以直接使用chatGPT 如果你不可以直接使用chatGPT 序言 Excel是处理大量数据非常有用的工具。然而,找到并实施正确的公式有时可能是一个复杂和令人沮丧的经历。幸运的是,ChatGPT可以成为一个优秀的助手,帮助克服这些挑战。 借助这个AI语言模型的帮助,您可以寻求Excel相关问题的协助、创建公式,并获得实时响应,帮助您充分利用Excel。在本文中,我们将探讨一些有效的使用ChatGPT在Excel中的方法,并发现它如何增强您的数据分析体验。 如果你可以直接使用chatGPT 1、打开EXCEL ,点击插入,选择加载项:如下图 2、搜索Openai ,点击右侧添加BrainiacHelper 插件即可; 3、登录openai 右上角获取openai apikeys ; 完成以上操作就可以在Excel 中使用 chatGPT了。 如果你不可以直接使用chatGPT 有问必答,ChatGPT让小白也能轻松做表 首先我现在有个Excel表格,长的是这个样子滴。 假设我是个小白,连求和公式也不会,想要对金额进行总计,我就可以找ChatGPT帮忙。 别急,我们把问题难度提高一点点。 我们来计算1月份的金额合计,ChatGPT能不能搞定? 咱们不确定这个答案对不对,所以复制这个公式,粘到单元格里面看看结果。 结果没有任何问题。 那么我们继续提高计算要求,先在I3:K3分别输入1、2、3,想要计算每个月的金额合计,看看有没有答案。 再也不用背什么函数语法了 这个C列的客户代码是一大串字符,其中括号里面的字母,是客户等级,我们想它提取出来,放在H里,用公式怎么写呢? 如果有人不会,可以自己贴到Excel里面去试试。 MID(D2,FIND("(",D2)+1,FIND(")",D2)-FIND("(",D2)-1) 注意啊,我提问的时候并没有说a、x、b是不确定长度的字符串,但在这里ChatGPT并没有用最简单的公式=MID(D2,3,1)来解决问题,而是准确的用FIND函数根据括号来定位x的位置,这个公式虽然长点,但是兼容性更高,真的要点赞。 当您要求ChatGPT为您创建公式时,有几件事需要记住: 提供的信息越多,越好。确保您的说明清晰明确。如果电子表格不太长,您可以复制其内容并将其提供给聊天机器人以获得更准确的响应。 双重检查ChatGPT创建的公式的格式和语法。如果其中任何一个不正确,Excel将返回错误。 始终双重检查结果以确保准确性。虽然ChatGPT可以为您创建公式,但它也有一定的限制。最好在小数据样本上测试公式,以确保它正在生成准确的结果。 下篇会有更精彩的介绍。

信息系统项目管理师第四版 笔记

第一章 信息化发展 第二章 信息技术发展 2.1 信息技术及其发展 2.1.1 计算机软硬件 2.1.2 计算机网络 网络标准协议 OSIIEEE 802协议族TCP/IP 软件定义网络(SDN)第五代移动通信技术(5G) 特点:高速率,低延时,大连接国际电信联盟(ITU)定义三大应用场景:增强移动宽带(eMBB)、超高可靠低延时通信(uRLLC)、海量机器类通信(mMTC)。 2.1.3 存储和数据库 存储技术 按服务器类型分: 封闭系统:大型机开放系统:unix、linux、麒麟等 内置存储外挂存储(按连接方式分) 直连式存储(DAS)网络化存储(FAS)(按传输协议分) 网络接入存储(NAS) 协议:TCP/IP存储区域网络(SAN) 协议:FC 第三章 信息系统治理

VM虚拟机和Docker冲突:VMware Workstation与Device/Credential Guard不兼容

windows电脑不能同时运行VM虚拟机和Docker,下面提供了两个程序运行时电脑的设置方式 使用VM不使用Docker 1. 控制面板-应用-启用或关闭windows功能(找不到可以搜索) 找到hyper-v 不勾选。确定后不要重启 2. win+x运行PowerShell(管理员),运行如下命令 bcdedit /set hypervisorlaunchtype off 3. 重启电脑 使用Docker不使用VM 1. 控制面板-应用-启动或关闭windows功能(找不到可以搜索) 找到hyper-v 勾选。确定后不要重启。 2. win+x运行PowerShell(管理员),运行如下命令 bcdedit /set hypervisorlaunchtype auto 3. 重启电脑

免费部署一个开源大模型 MOSS

2023年初,ChatGPT 人工智能对话模型火爆全球,仅两个月的时间就突破一亿月活用户,成为有史以来应用速度最快的技术之一。 ChatGPT 的大热引发了全球科技巨头之间的“军备竞赛”,中国本土的“中国版 ChatGPT ”也随之展开了激烈角逐。在中国多家科技公司中,百度于3月上线的对话 AI 产品“文心一言”最先开火。 近日复旦大学自然语言处理实验室邱锡鹏教授团队研发的大语言模型 MOSS 也已公开发布并开源。MOSS 的公开发布无疑加剧了国内 ChatGPT 式产品的竞争。 MOSS 是什么? MOSS 是一个支持中英双语和多种插件的开源对话语言模型,moss-moon系列模型具有160亿参数,在 FP16 精度下可在单张 A100/A800 或两张 3090 显卡运行,在 INT4/8 精度下可在单张 3090 显卡运行。MOSS 基座语言模型在约七千亿中英文以及代码单词上预训练得到,后续经过对话指令微调、插件增强学习和人类偏好训练具备多轮对话能力及使用多种插件的能力。 申请服务器 这里使用阿里云免费的 GPU 服务器进行部署,免费试用活动页 https://free.aliyun.com/ 。 只要没有申请过 PAI-DSW 资源的新老用户皆可申请 5000CU 的免费额度,3个月内使用。 点击试用,完成注册、实名、领取产品后进入如下页面。 创建工作空间并授权。 授权完成,前往默认工作空间。 创建交互式建模(DWS)实例。 输入实例名称,就叫它 550W 吧~,GPU 选择 A10 或者 V100 都行,这俩是支持资源包抵扣的,其他的不支持,这里注意!V100 性能更好,但我们测试使用没必要,就选 A10 就行,A10 显卡每小时消耗6.991计算时,如果不关机持续使用大概可以使用30天。 数据集是可选的,如果想闲时关机建议使用数据集,可以把数据保存,不然每次关机后启动都得重新部署。 选择镜像 URL,填入与地区对应的镜像地址。 杭州地域:dsw-registry-vpc.cn-hangzhou.cr.aliyuncs.com/cloud-dsw/eas-service:aigc-torch113-cu117-ubuntu22.04-v0.2.1_accelerated 北京地域:dsw-registry-vpc.cn-beijing.cr.aliyuncs.com/cloud-dsw/eas-service:aigc-torch113-cu117-ubuntu22.04-v0.2.1_accelerated 上海地域:dsw-registry-vpc.cn-shanghai.cr.aliyuncs.com/cloud-dsw/eas-service:aigc-torch113-cu117-ubuntu22.04-v0.2.1_accelerated 深圳地域:dsw-registry-vpc.cn-shenzhen.cr.aliyuncs.com/cloud-dsw/eas-service:aigc-torch113-cu117-ubuntu22.04-v0.2.1_accelerated 然后点击下一步,耐心等待实例创建,这个过程还是比较耗时的。 部署 MOSS 实例创建成功后,点击打开,进入控制台。 进入下面这个页面后,点击 “Terminal” 进入命令行。

手把手教你安装telnet(离线方式+在线方式)

系列文章目录 文章目录 系列文章目录前言一、telnet是什么?二、安装步骤总结 前言 一、telnet是什么? Telnet协议是TCP/IP协议族中的一员,是Internet远程登录服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器 检测是否安装telnet软件包(通常要两个) 1、telnet-client (或 telnet),这个软件包提供的是 telnet 客户端程序; 2、telnet-server 软件包,这个才是真正的 Telnet server 软件包! [root@localhost ~]# rpm -q telnet telnet-0.17-38.el5 telnet客户端一般默认情况是已安装 [root@localhost ~]# rpm -q telnet-server 无表示未安装 二、安装步骤 安装环境centos7.5 1、在线安装 yum install telnet yum install telnet-server 2、离线安装(rpm包安装) 下载地址:https://vault.centos.org/ 从7.6的路径下找telnet包telnet client与server https://vault.centos.org/7.6.1810/os/x86_64/Packages/ 上传到服务器 rpm -ivh telnet-0.17-48.el6.x86_64.rpm rpm -ivh telnet-server-0.17-48.el6.x86_64.rpm 总结 通过本文的总结,应该在centos7.5安装telnet很容易了把!!

flex弹性布局的基本操作知识

今天为大家阐述如何在开发APP或网站的时候,制定一套弹性布局,相互之间兼容,那么我们就可以用Flex来实现: 什么是flex?:Flex是Flexible Box的缩写,意为”弹性布局”,用来为盒状模型提供最大的灵活性。 任何一个容器都可以指定为Flex布局! 一: 容器的属性(共6个) flex-direction(属性决定主轴的方向(即项目的排列方向)) 1. row: 默认值,主轴为水平方向,起点在左端。 2. row-reverse:主轴为水平方向,起点在右端。 3. column:主轴为垂直方向,起点在上沿。 4. column-reverse:主轴为垂直方向,起点在下沿 flex-wrap (默认情况下,项目都排在一条线(又称”轴线”)上。flex-wrap属性定义,如果一条轴线排不下,如何换行。) 1. nowrap(默认):不换行 2. wrap:换行,第一行在上方。 3. wrap-reverse:换行,第一行在下方。 flex-flow(flex-flow属性是flex-direction属性和flex-wrap属性的简写形式,默认值为row nowrap) justify-content(justify-content属性定义了项目在主轴上的对齐方式) 它可能取5个值,具体对齐方式与轴的方向有关 1.flex-start(默认值):左对齐 2.flex-end:右对齐 3.center: 居中 4.space-between:两端对齐,项目之间的间隔都相等。 5.space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。 align-items(align-items属性定义项目在交叉轴上如何对齐) 它可能取5个值。具体的对齐方式与交叉轴的方向有关 1. flex-start:交叉轴的起点对齐。 2. flex-end:交叉轴的终点对齐。 3. center:交叉轴的中点对齐。 4. baseline: 项目的第一行文字的基线对齐。 5. stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度 align-content(align-content属性定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用) 该属性可能取6个值。 1.flex-start:与交叉轴的起点对齐。 2.flex-end:与交叉轴的终点对齐。 3.center:与交叉轴的中点对齐。 4.space-between:与交叉轴两端对齐,轴线之间的间隔平均分布。 5.space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。 6.stretch(默认值):轴线占满整个交叉轴。 二:项目的属性(共6个) order(order属性定义项目的排列顺序。数值越小,排列越靠前,默认为0) flex-grow(flex-grow属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。) flex-shrink(flex-shrink属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。) 如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。 负值对该属性无效 flex-basis(flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。) flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小 .item { flex-basis: <length> | auto; /* default auto */ } 它可以设为跟width或height属性一样的值(比如350px),则项目将占据固定空间 flex(flex属性是flex-grow, flex-shrink 和 flex-basis的简写,默认值为0 1 auto。后两个属性可选)

VS2013的类视图中的类显示不全

2023年4月24日 今天中午发现VS2013的类视图中的类有很多不显示出来。 解决方法: VS2013的项目会生成名为 ipch 的文件夹,在ipch目录中删除“*.ipch"文件,再重新启动 Visual Studio 2013就可以了。

Halcon图像的 OCR 识别&训练字符

2.1识别 OCR 的流程和方法 处理图像使得数字或是字母为白底黑字->创建字符识别句柄->识别->清除句柄 算子:read_ocr_class_mlp( : : FileName : OCRHandle) 示例:read_ocr_class_mlp ('Document_0-9A-Z_NoRej.omc', OCRHandle) 'Document_0-9A-Z_NoRej.omc'(输入控制参数):输入识别类型 OCRHandle(输出控制参数): 输出识别句柄 算子:do_ocr_multi_class_mlp(Character, Image : : OCRHandle : Class, Confidence) 示例:do_ocr_multi_class_mlp (ObjectSelected, ImageInvert, OCRHandle, Class, Confidence) ObjectSelected(输入对象):输入识别区域 ImageInvert(输入对象):输入识别图像 OCRHandle(输入参数):输入句柄 Class(输入对象):输出识别的字符 Confidence(输出参数):输出识别的相似度 算子:comment( : : Comment : ) 示例:clear_ocr_class_mlp (OCRHandle) OCRHandle(输入控制参数):输入识别句柄 2.2训练字符识别库文件流程和方法 1.提取图像中的字符-> 2.将每个字符加到训练文件中(append_ocr_trainf)-> 3.除重(uniq)-> 4.创建一个使用 多层感知器(create_ocr_class_mlp)-> 5.利用多层感知器创建一个新的OCR分级器(trainf_ocr_class_mlp)-> 6.将OCR分级器的OCRHandle写入文件的FileName(文件名)(write_ocr_class_mlp)-> 7.训练字符文件-> 8.读取训练后的文件 生成识别的分类器句柄read_ocr_class_mlp -> 9.识别字符:识别单个字符(do_ocr_single_class_mlp),识别多个字符(do_ocr_multi_class_mlp)-> 10.关闭分类器句柄(clear_ocr_class_mlp) **************************详细步骤********************** 2.将每个字符加到训练文件中(append_ocr_trainf) 算子:append_ocr_trainf(Character, Image : : Class, TrainingFile : ) 示例:append_ocr_trainf (ObjectSelected, ImageReduced, tuple[Index], 'train_ocr'+'.

实现谷歌第三方登录步骤

前言 主要是通过Firebase实现谷歌登录 首先需要有一个谷歌账号登录到Firebase 文档地址https://firebase.google.com/docs/auth/web/google-signin?hl=zh-cn 按照文档上的步骤 第一步吧项目添加到Firebase中 添加成功之后会生成一段代码 放到自己项目的main.js文件中 这样就可以让项目和Firebase建立联系 // Import the functions you need from the SDKs you need import { initializeApp } from "firebase/app"; import { getAnalytics } from "firebase/analytics"; // TODO: Add SDKs for Firebase products that you want to use // https://firebase.google.com/docs/web/setup#available-libraries // Your web app's Firebase configuration // For Firebase JS SDK v7.20.0 and later, measurementId is optional const firebaseConfig = { apiKey: "xxx", authDomain: "

React 一个实现打字机效果的库

npm install react-typewriter-hook 使用方法: import React from 'react' import useTypewriter from 'react-typewriter-hook' const Note = () => { const string = '我们在这个世界上只能生活几十年,虽然我们为不能活得更久而感到遗憾,但我已经非常幸运,能够得到这么多东西了。整个宇宙只不过是一堆旋转的原子,组成各种各样不同的东西,然后又消散。大多数原子,根本没有过生命。大多数原子没有成为人,没有谈过恋爱,没有看过落日,没有吃过冰淇淋。我们非常幸运,能够作为一个人来到这个世界上' const talk = useTypewriter(string) return <div>{talk}</div> } export default Note 时小记,终有成。

springSecurity2的自定义账号密码认证流程+多个参数的自定义流程

声明,本文章是学习 b站三更草堂的视频的时候所写 依赖 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <!--security 的依赖...........开始--> <dependency> <!--引入依赖之后,重启项目 访问接口就变了 需要登录,用户名是 user 密码看控制台 当然后期都可以修改--> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <!--security 的依赖...........结束--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.3.1</version> </dependency> <!--jwt 的 java依赖 简称 jjwt.......开始--> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.9.1</version> </dependency> <!--jwt 的 java依赖 简称 jjwt.......结束--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>com.alibaba.fastjson2</groupId> <artifactId>fastjson2</artifactId> <version>2.0.25</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> </dependencies> 配置 spring: application: name: demo redis: host: localhost port: 6379 datasource: url: jdbc:mysql://localhost:3306/cloud_user?

10 款常用的 API Mock 服务器工具

市面上常见的十款工具 API Mock 零基础教程 你是否曾因为后端接口还没开发完成而苦恼,而你作为前端开发人员却迫不及待地想要开始写代码?API Mock 服务器就是你的救星!它们可以快速搭建一个虚拟的后端环境,使你可以立即开始测试和开发。这篇文章将介绍 10 款 API Mock 服务器工具,并以轻松幽默的语气向你展示如何快速上手使用它们。 1. Nock 介绍 Nock 是一个基于 Node.js 的 HTTP 服务器模拟桩库,它可以拦截和记录 HTTP 请求,并根据预设规则返回模拟的响应。它允许你使用 JavaScript 代码编写自定义逻辑。 应用场景 适合在 Node.js 环境中进行单元测试和集成测试,模拟复杂的 API 请求和响应。 快速上手 使用 npm 或 yarn 安装 nock: npm install nock 创建一个简单的 nock 拦截示例: const nock = require('nock'); nock('http://api.example.com') .get('/users') .reply(200, [{ id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }]);``` ### 常用特性 - 支持拦截各种 HTTP 方法(GET、POST、PUT 等) - 可以设置请求头、查询参数等匹配条件 - 支持动态生成响应内容 ### 注意事项 - 使用 Nock 时,需要确保你的代码能够处理异步操作 - 请确保每次测试后清除所有拦截器,以避免测试用例之间的干扰 ### 原理概述 Nock 通过拦截 Node.

Vue -el-table表格动态控制表头动态展示数据(控制每一列展示)

前言 最近在实际开发中我们遇到一个需求是用户自己控制键值来生成对应表格数据。 换个思路就是我们还是正常查询数据,需要一个开关页面来动态改变表格展示每一列。 我们需要一个开关页面,里面有多选,确定重置取消,确定时把选中数据传递给父组件,动态数据for循环 最好是以封装成组件的形式,可以使代码减少,别的地方也可以用。组件全局注册直接用(主页文章有) 细节 1.可以直接让后端以分页形式把所有需要的字段都返来,最好可以加一个序号。 2.在打开子组件的时候,把默认选中的字段表头重新赋值一次,因为直接在data里面写死的话,子组件侦听器侦听不到, 3.在父组件页面打开的时候可以在month展示一次默认选中数据表格,用户体验较好。 代码如下-可直接复制 父组件 <template> <div class="content"> <!-- 标题 --> <div class="title">维保统计报表</div> <!-- 搜索 --> <el-form class="search" :inline="true" :model="pageInfo" size="mini"> <el-form-item label="工单类型:"> <el-input v-model="pageInfo.data" placeholder=""></el-input> </el-form-item> <el-form-item label="维保小组:"> <el-input v-model="pageInfo.data" placeholder=""></el-input> </el-form-item> <el-form-item label="完成情况:"> <el-input v-model="pageInfo.data" placeholder=""></el-input> </el-form-item> <el-form-item label="生成时间:"> <el-input v-model="pageInfo.data" placeholder=""></el-input> </el-form-item> <el-form-item> <el-button @click="onSubmit" icon="el-icon-search" type="primary" >查询</el-button > <el-button @click="showSetting" icon="el-icon-setting" type="primary" >配置表单</el-button > </el-form-item> </el-form> <!-- 表格数据 --> <div class="

VMware虚拟机安装及环境配置

VMware安装密钥、CentOS镜像安装、虚拟机环境配置 一、VMware安装二、镜像文件下载三、虚拟机环境配置 一、VMware安装 压缩包资源:链接:链接:https://pan.baidu.com/s/1VinrDesG9xuG9r_nOPV13w 提取码:0706 1.首先提前在除C盘的任意一个盘符里新建一个VMware文件夹,并将安装包压缩到其文件夹下,解压完的文件夹如下。 2.双击安装包,则会出现安装的界面,点击 “下一步”。 3.勾选我接受,然后点击下一步。 4.把安装路径修改到创建好的文件夹,勾选这俩个,点击下一步 5.勾选这俩个,点击下一步。 6.这边建议是取消勾选这俩个,点击下一步。 7.点击安装。 8.等待其安装完成,略等几分钟~。 9.安装完成后,会弹出这个页面,点击许可证。 输入密钥(ZF3R0-FHED2-M80TY-8QYGC-NPKYF)。 10.设置完成之后,直接双击桌面VMware图标,就安装完成啦。 二、镜像文件下载 11.首先进入CnetOS官网:https://www.centos.org/ 12.在下载界面点击右边的“Older Versions”会直接跳转到下方。 13.再点击链接“then click here”进入新界面。 14.往下滑动到“Arcjived Versions”部分,点击表格CnetOS Linux7中7.3版的存档树链接,跳转到存档树页面。 15.点击进入“isos/”→“x86_64/”,可看到CentOS7.3的镜像文件,点击下载,如出现报错页面,下载不了可以私聊我发压缩包。 三、虚拟机环境配置 16.点击创建新的虚拟机。 (新手推荐)选择典型,安装步骤比较简单,选择自定义可以设置更多的高级设置。 首先选择安装程序光盘印象文件,然后点击浏览,找到下载好的镜像文件,最后点击下一步。 输入Linux的用户名(必须是小写字母)和密码(简单为好)之后,点击下一步。 虚拟机名称使用默认的就行,位置是文件存储的位置,默认是C盘,我们改成自己需要存储的盘符即可,文件夹名字最好是Centos,方便后续查找。 默认的磁盘大小是20GB,为了保证后续使用,可以调整为40GB(看个人需要)。 如果需要修改配置信息,可以点击自定义硬件,进行修改,并勾选创建后开启,点击完成, 点击完成后,即开启了CentOS系统的安装,左上角就会出现刚刚创建的虚拟机,此时虚拟机正在创建。 我们最开始选择的是典型,虚拟机现在是自动化的进行安装,一般等待10~20分钟。 可以看到我们刚刚创建的操作系统,已经启动成功了,显示我们刚刚创建的用户ls。 点击用户ls,输入密码,点击sign in。 看到这个界面,就证明操作系统已经安装完成啦。 有问题私聊,多指点!谢谢大家啦!!! ————————————————

jmeter压测结果分析

jmeter结果查看主要在结果树和聚合报告,实际在做压测过程中不做可视化操作,用命令行执行,再查看测试报告。 python在本地起服务 cmd打开命令框执行语句:python -m http.server 9090(端口号,可自定义)页面进入:http://localhost(或本机ip地址):9090 可以先在可视化界面配置相关信息 添加http请求,并保存 执行后,查看聚合报告 聚合报告参数: Label:http请求的名称 Samples/样本:请求数。表示这次测试中一共发出了多少个请求,如果模拟10个用户,每个用户执行10次,总数就是100 Average/平均值:平均响应时间。默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,以Transaction 为单位显示平均响应时间 Median/中位数:中位数,即50% 用户的响应时间 90%/95%/99% Line:90%/95%/99% 用户的响应时间 Min/最小值:最小响应时间 Max/最大值:最大响应时间 Error%/异常:错误率。错误请求数/请求总数 Throughput/吞吐量:吞吐量。默认情况下表示每秒完成的请求数 Received/Send KB/Sec:每秒从服务器端接收/发送的数据量 其中标黄的为重点关注参数。 命令行执行并保存测试报告: jmeter.bat -n -t report_analysis.jmx -l report.jtl 查看测试报告: 在cmd中输入命令: jmeter.bat -g D:\report.jtl -o output 执行成功后,在bin目录下生成output文件夹,打开文件夹,查看index.html文件 服务器资源分析: 1.压测时多观察服务器资源使用情况,并发量从少到多,依次增加,避免一次性压测量太大导致系统崩溃 2.错误率提高后,查看服务器资源占用情况,可能存在性能瓶颈 3. 随着负载的增加,吞吐量应该增加,若吞吐量增加速度放缓,则表示系统可能已经达到了性能瓶颈 4. 关注平均响应时间,若超过预期,则需要查找原因并优化

Redis(十九) -- 过期删除策略和内存淘汰策略

1. 过期删除策略 1.1 redis支持三种过期删除策略: 定时删除:在设置键的过期时间的同时,创建一个定时器,让定时器在键的过期时间来临时,立即执行对键的删除操作惰性删除:放任键过期不管,但是每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除该键;如果没有过期,就返回该键定期删除: 每隔一段时间,程序就对数据库进行一次检查,删除里面的过期键。至于要删除多个过期键,以及要检查多少个数据库,则由算法决定 第一种和第三种为主动删除策略,而第二种则为被动删除策略 1.1.1 定时删除 优点:对内存是最友好的:通过使用定时器,定时删除策略可以保证过期键会尽可能快地被删除,并释放过期键所占用的内存缺点:对CPU时间是最不友好的:在过期键比较多的情况下,删除过期键这一行为可能会占用相当一部分CPU时间。创建一个定时器需要用到Redis服务器中的时间事件,而当前时间事件的实现方式——无序列表,查找一个事件的时间复杂度为O(N)——并不能高效地处理大量时间事件 1.1.2 惰性删除 优点:对CPU时间来说是最友好的:程序只会在取出键时才对键进行过期检查,这可以保证删除过期键的操作只会在非做不可的情况下进行,并且删除的目标仅限于当前处理的键,这个策略不会再删除其他无关的过期键上花费任何CPU时间缺点:它对内存是最不友好的:如果一个键已经过期,而这个键又仍然保留在数据库中,那么只要这个过期键不被删除,它所占用的内存就不会释放 1.1.3 定期删除 定期删除策略是前两种策略的一种整合和折中: 定期删除策略每隔一段时间执行一次删除过期键操作,并通过限制删除操作执行的时长和频率来减少删除操作对CPU时间的影响通过定期删除过期键,定期删除策略有效地减少了因为过期键而带来的内存浪费 定期删除策略的难点是确定删除操作执行的时长和频率: 如果删除操作执行得太频繁,或者执行的时间太长,定期删除策略就会退化成定时删除策略,以至于将CPU时间过多地消耗在删除过期键上面如果删除操作执行得太少,或者执行的时间太短,定期删除策略又会和惰性删除策略一样,出现浪费内存的情况 1.2 Redis使用的过期删除策略 Redis服务器实际使用的是惰性删除和定期删除两种策略:通过配合使用这两种策略,服务器可以很好地在合理使用CPU时间和避免浪费内存空间之间取得平衡 1.2.1 惰性删除策略的实现 过期键的惰性删除策略由db.c/expireIfNeeded函数实现,所有读写数据库的Redis命令在执行之前都会调用expireIfNeeded函数对输入键进行检查: 如果输入键已经过期,那么expireIfNeeded函数将输入键从数据库中删除如果输入键未过期,那么expireIfNeeded函数不做动作 1.2.2 定期删除策略的实现 过期键的定期删除策略由redis.c/activeExpireCycle函数实现,每当Redis的服务器周期性操作redis.c/serverCron函数执行时,activeExpireCycle函数就会被调用,它在规定的时间内,分多次遍历服务器中的各个数据库,从数据库的expires字典中随机检查一部分键的过期时间,并删除其中的过期键 activeExpireCycle函数的工作模式: 函数每次运行时,都会从一定数量的数据库中取出一定数量的随机键进行检查,并删除其中的过期键有一个全局变量current_db会记录当前activeExpireCycle函数检查的进度,并在下一次activeExpireCycle函数调用时,接着上一次的进度进行处理随着activeExpireCycle函数的不断执行,服务器中的所有数据库都会被检查一遍,这时函数将current_db变量重置为0,然后再次开始新一轮的检察工作 1.2.3 这样还存在的问题: 如果某个key过期后,定期删除没删除成功,然后也没再次去请求key,也就是说惰性删除也没生效。这时,如果大量过期的key堆积在内存中,redis的内存会越来越高,导致redis的内存块耗尽。那么就应该采用内存淘汰机制。 1.3 RDB对过期键的处理 1.3.1 生成RDB文件 在执行SAVE命令或者BGSAVE命令创建一个新的RDB文件时,程序会对数据库中的键进行检查,已过期的键不会被保存到新创建的RDB文件中 1.3.2 载入RDB文件 在启动Redis服务器时,如果服务器开启了RDB功能,那么服务器将对RDB文件进行载入: 如果服务器以主服务器模式运行,那么在载入RDB文件时,程序会对文件中保存的键进行检查,未过期的键会被载入到数据库中,而过期键则会被忽略,所以过期键对载入RDB文件的主服务器不会造成影响如果服务器以从服务器模式运行,那么在载入RDB文件时,文件中保存的所有键,不论是否过期,都会被载入到数据库中。不过,因为主从服务器在进行数据同步的时候,从服务器的数据库就会被清空,所以一般来说,过期键在载入RDB文件的从服务器也不会造成影响 1.4 AOF对过期键的处理 1.4.1 AOF文件写入 当服务器以AOF持久化模式运行时,如果数据库中的某个键已经过期,但它还没有被惰性删除或者定期删除,那么AOF文件不会因为这个过期键而产生任何影响 当过期键被惰性删除或者定期删除之后,程序会向AOF文件追加一个DEL命令,来显式地记录该键已被删除 1.4.2 AOF重写 和生成RDB文件时类似,在执行AOF重写的过程中,程序会对数据库中的键进行检查,已过期的键不会被保存到重写后的AOF文件中 1.5 复制对过期键的处理 当服务器运行在复制模式下时,从服务器的过期键删除动作由主服务器控制: 主服务器在删除一个过期键之后,会显示地向所有从服务器发送一个DEL命令,告知从服务器删除这个过期键从服务器在执行客户端发送的读命令时,即使碰到过期键也不会将过期键删除,而是继续处理未过期的键一样来处理过期键从服务器只有在接到主服务器发来的DEL命令之后,才会删除过期键 通过由主服务器来控制从服务器统一地删除过期键,可以保证主从服务器数据的一致性,也正是因为这个原因,当一个过期键仍然存在于主服务器的数据库时,这个过期键在从服务器里的复制品也会继续存在 2. 内存淘汰策略 在使用Redis时,我们一般会为Redis的缓存空间设置一个大小,不会让数据无限制地放入Redis缓存中。可以使用下面命令来设定缓存的大小,比如设置为4GB: CONFIG SET maxmemory 4gb 既然 Redis 设置了缓存的容量大小,那缓存被写满就是不可避免的。当缓存被写满时,我们需要考虑下面两个问题:决定淘汰哪些数据,如何处理那些被淘汰的数据。 2.1 redis提供的缓存淘汰策略 Redis共提供了8中缓存淘汰策略,其中 volatile-lfu 和 allkeys-lfu 是Redis 4.

css中overflow、overflow-x、overflow-y使用

overflow:当内容超出容器时的处理; 值:(1)visible:默认值,如果超出为显示; (2)auto:如果超出就出现滚动条,没有超出则不出现滚动条这样就可以出现滚动条; (3)hidden:如果超出就隐藏; (4)scroll:如果超出就内容会被修剪,但是浏览器会显示滚动条以便查看其余的内容; overflow-x:当内容x轴超出容器的宽时的处理; 值:(1)visible:默认值,如果超出为显示; (2)auto:如果超出就出现滚动条,没有超出则不出现滚动条这样就可以出现滚动条; (3)hidden:如果超出就隐藏; (4)scroll:如果超出就内容会被修剪,但是浏览器会显示滚动条以便查看其余的内容; overflow-y:当内容y轴超出容器的高时的处理; 值:(1)visible:默认值,如果超出为显示; (2)auto:如果超出就出现滚动条,没有超出则不出现滚动条这样就可以出现滚动条; (3)hidden:如果超出就隐藏; (4)scroll:如果超出就内容会被修剪,但是浏览器会显示滚动条以便查看其余的内容;

本地建站出现:SSL certificate problem: unable to get local issuer certificate

这个错误提示表明 SSL 证书有问题,可能是本地环境的配置出了些问题。建议您按照以下步骤排查: 确认您使用的 SSL 证书是否为有效、受信任的证书。如果您在本地测试站点时使用的是自签名证书,可能会导致此类问题。确认您正在使用的 PHP 版本是否支持 SSL/TLS 加密。可以检查 php.ini 配置文件中的 curl.cainfo 和 openssl.cafile 配置项是否正确设置为您系统中的可用 CA 根证书文件路径。确认是否存在防火墙等网络安全设备拦截了您的请求。 如果您使用的操作系统是 Windows,可以尝试从如下地址下载并安装可信赖的 CA 根证书列表:https://curl.se/ca/cacert.pem 安装完成后,可以在 php.ini 中添加如下一行代码: curl.cainfo = "C:/path/to/cacert.pem" 其中 C:/path/to/cacert.pem 是您所安装的根证书文件的路径。 然后重启Web服务,并尝试访问HTTPS网站查看是否还出现该问题。

【PHP教程(三)】PHP包管理、Markdown库和Excel解析库

1. 指定版本php的安装和卸载 2. php的包管理 3. php包管理工具Composer安装 4. Composer安装Markdown库 5. Composer安装PhpOffice库 6. php和python的一些区别 1.指定版本php的安装和卸载 Remi 存储库是一个第三方的软件源,它提供了一系列针对 CentOS、Red Hat Enterprise Linux(RHEL)和 Fedora 等系统的软件包。Remi 存储库的目的是提供最新版本的各种软件包,包括 PHP、MySQL、Redis、Nginx 等。 对于 PHP 开发者来说,Remi 存储库是一个非常有用的资源,因为它提供了最新版本的 PHP 和许多常用的 PHP 扩展和工具。使用 Remi 存储库,您可以轻松地升级到最新版本的 PHP,而无需手动编译和安装。此外,Remi 存储库还提供了不同版本的 PHP,您可以选择与您的应用程序兼容的版本进行安装。 1. 安装 EPEL 存储库。这个存储库包含了 PHP 8.0 所需的依赖项: dnf install epel-release 2. 安装 Remi 存储库。这个存储库包含了 PHP 8.0 的安装包: dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm 3. 安装 yum-utils 工具: dnf install yum-utils 4. 启用 PHP 8.0 模块:

定义一个学生类(Student):私有成员属性(姓名、年龄、分数)、成员方法(无参构造、有参构造、析构函数、show函数)再定义一个党员类(Party):私有成员属性(党组织活动,

#include <iostream> using namespace std; //学生类 class Stu { private: string name;//姓名 int age;//年龄 double score;//成绩 public: //无参构造 Stu(){cout<<"无参构造"<<endl;} //有参构造 Stu(string n,int a,double s):name(n),age(a),score(s){cout<<"有参函数"<<endl;} //析构函数 ~Stu(){cout<<"析构函数"<<endl;} //show函数 void show() { cout<<"name="<<name<<endl; cout<<"age="<<age<<endl; cout<<"score="<<score<<endl; } }; //党员类 class Party { private: string activi;//活动 string orga;//组织 public: //无参 Party(){cout<<"无参构造"<<endl;} //有参 Party(string a,string o):activi(a),orga(o){cout<<"有参构造"<<endl;} //析构函数 ~Party(){cout<<"析构函数"<<endl;} //show函数 void show() { cout<<"activi="<<activi<<endl; cout<<"orga="<<orga<<endl; } }; //干部类 class Leader : public Stu,public Party { private: string work;//职位 public: //无参 Leader(){cout<<"

Mysql大数据批量插入方法

MySQL是当前最流行的关系型数据库之一,大数据批量插入是MySQL中常用的操作之一。在处理大量数据时,如果一条一条地插入会极大地影响效率,因此批量插入是一个更好的选择,可以大大提高数据的处理速度。下面介绍几种MySQL大数据批量插入的方法。 使用LOAD DATA INFILE语句 LOAD DATA INFILE语句是MySQL中实现大数据批量插入的一种高效方式。该语句可以通过将文本文件中的数据加载到数据库表中,从而达到批量插入的目的。该语句的语法如下: LOAD DATA [LOCAL] INFILE 'file_name' [REPLACE|IGNORE] INTO TABLE table_name [CHARACTER SET charset_name] [FIELD TERMINATED BY 'delimiter'] [LINES TERMINATED BY 'delimiter'] [IGNORE number LINES] [(column1, column2, ..., column n)]; 其中,LOCAL为可选参数,表示将文本文件加载到本地MySQL客户端;file_name是文本文件的路径和名称;table_name是待插入数据的目标表;replace和ignore是可选参数,表示当目标表中存在同样的记录时,如何处理;charset_name是可选参数,指定文本文件的编码;delimiter是可选参数,指定字段和行的分隔符;number是可选参数,指定跳过文件的前几行;column1到column n表示待插入数据的字段名。 使用LOAD DATA INFILE语句进行批量插入,需要先将数据存储为文本文件,然后再通过LOAD DATA INFILE语句加载到数据库表中。以下是一个示例: LOAD DATA INFILE '/var/lib/mysql-files/data.txt' INTO TABLE mytable FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' (col1, col2, col3); 使用INSERT INTO VALUES语句 使用INSERT INTO VALUES语句是另一种常用的MySQL大数据批量插入的方式。该语句的语法如下: INSERT INTO table_name (column1, column2, .

centos7安装mysql8.0 图文教程(本地安装)

环境介绍 操作系统:Centos7.7 MySQL版本: 8.0.30 一、安装前准备 1.卸载MariaDB 安装MySQL的话会和MariaDB的文件冲突,所以需要先卸载掉MariaDB。 1.1 查看是否安装mariadb rpm -qa|grep mariadb 1.2 卸载 rpm -e --nodeps 文件名 1.3 检查是否卸载干净 rpm -qa|grep mariadb 2.检查依赖 2.1 查看是否安装libaio rpm -qa|grep libaio 如果没有安装则执行 yum -y install libaio //安装libaio 2.2 查看是否安装numactl rpm -qa|grep numactl 如果没有安装则执行 yum -y install numactl //安装numactl 二、安装MySQL 1.下载资源包 可以在官网下载安装包或者在服务器直接使用wget下载。 1.1 官网下载 MySQL官网下载地址:https://downloads.mysql.com/archives/community/ 1.2 wget下载 wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.30-el7-x86_64.tar 2.解压 注:本文安装包上传到了 /usr/local/ 目录下 进入安装包目录 cd /usr/local/ 拆分tar包 tar -xvf mysql-8.0.30-el7-x86_64.tar 解压安装包 tar -zxvf mysql-8.

MyBatis-Plus多数据源dynamic-datasource解决多线程情境下数据源切换失效问题

前言:项目中使用MyBatis-Plus多数据源dynamic-datasource,完成多数据源的切换;但是在并发场景下,我们会发现线程会一直访问默认数据源(配置的Master数据),并没有访问我们在上一步切换后的数据源,之前切换的数据源失效了;显然多数据源对于并发的处理并不友好,那么我们怎么解决这个问题呢。 本文是在springboot项目已集成dynamic-datasource 基础上延伸的问题,项目集成多数据源可以参考:Idea+maven+spring-cloud项目搭建系列–13 整合MyBatis-Plus多数据源dynamic-datasource 1 问题产生的原因: 问题的产生来源于多数据源com.baomidou.dynamic.datasource.toolkit 包下DynamicDataSourceContextHolder 类的问题,当我们打开这个类,会发现,存储当前线程的数据源使用了 ThreadLocal: package com.baomidou.dynamic.datasource.toolkit; import java.util.ArrayDeque; import java.util.Deque; import org.springframework.core.NamedThreadLocal; import org.springframework.util.StringUtils; public final class DynamicDataSourceContextHolder { // 线程数据源的存储 private static final ThreadLocal<Deque<String>> LOOKUP_KEY_HOLDER = new NamedThreadLocal<Deque<String>>("dynamic-datasource") { protected Deque<String> initialValue() { return new ArrayDeque(); } }; private DynamicDataSourceContextHolder() { } public static String peek() { // 访问数据库时 从队列中peek 出来数据源 return (String)((Deque)LOOKUP_KEY_HOLDER.get()).peek(); } // 放入要切换的数据源 public static String push(String ds) { String dataSourceStr = StringUtils.

报错: formRef.value.resetFields is not a function

let formRef = ref(“”); // 添加按钮-打开 const additem = () => { console.log(“formRef.value”, formRef.value == “”); if (formRef.value != “”) { formRef.value.resetFields(); //重置表单 } } 弹出这个错误大概是因为第一次点击弹框的时候弹框内本来就是初始值,并不需要 reset,所以可以在使用 resetFields 之前增加一个判断条件

Ubuntu20.04的ROS环境安装ORB-SLAM3详解

视觉SLAM实验要在Ubuntu20.04系统上使用ROS跑ORB-SLAM3,熟悉一下特征点法的SLAM,把安装过程总结记录下来。 文章目录 一、配置版本信息二、替换镜像源三、安装ROS环境1、ROS简介2、小鱼安装 四、环境配置1、安装库(1)安装git,g++(2)安装cv_bridge库(3)安装Opencv①安装依赖项②下载Opencv源文件③安装OpenCV④查看版本号 (4)安装EIGEN库(5)安装Pangolin库①下载Pangolin 0.6②安装依赖项③编译安装④验证 (6)安装Boost库 2、ORB-SLAM3编译(1)下载ORB-SLAM3(2)修改源文件(3)安装python2.7(4)添加ROS环境(5)编译 五、ORB-SLAM3运行1、创建工作目录2、安装usb_cam3、编译usb_cam4、测试usb摄像头5、相机标定(1)安装v4l2(2)张正友相机标定方法(3)8×6的角点(4)保存标定结果(5)标定结果文件calibrationdata.tar.gz 6、数据保存(1)点击`save`按钮,终端会打印生成文件及路径(计算机目录/tmp下)(2)点击`commit`按钮,提交数据并退出程序,可以看到提示写入文件head_camera.yaml(3)修改Asus.yaml(4)相机矩阵参数 7、运行ROS下ORB-SLAM3(1)接收话题名称更改(2)执行单目实时usb_cam效果 六、总结 一、配置版本信息 系统版本ubuntu20.04Pangolin0.6Eigen3Opencv4.2usb_cam 二、替换镜像源 # 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释 deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse # deb-src https://mirrors.

mybatis 使用及 SQL 语句优化小结

一、mybatis 总结 1.mybatis 查询/更新语句,没有找到符合条件的记录,会返回什么? 返回类型为 String 的, 实际返回 null; 返回类型为对象的:实际返回 null ; 返回类型为列表等集合: 实际返回空集合[]; 返回类型为 Boolean:实际返回 false 当数据库语句插入条件不满足,会返回 false;比如使用 dual 的 SQL 语句; 2.mybatis 会抛出哪些常见异常? 不是所有的异常,都认为程序出异常要报错, 比如用户重复收藏商品,可以直接返回成功,这时候对“违反唯一键”异常要特殊处理。 (1) 插入语句 DataIntegrityViolationException: 违反非空约束、数据大小超过约束 DuplicateKeyException:违反唯一键约束 CannotAcquireLockException: for update nowait 超时 (2)更新语句 条件不满足时,会返回 false 数据库操作应该判断返回值,比如下面 BUG: (3) bug 类,表字段找不到等场景 MyBatisSystemException BadSqlGrammarException 3.事务里面套用 for update,看上去绕过了事务 等 for update 获取锁后,select 出来的是最新的数据 4.for update 是一种行级锁,又叫排它锁 一旦用户对某个行施加了行级加锁,则该用户可以查询也可以更新被加锁的数据行,其它用户只能查询但不能更新被加锁的数据行; 如果查询条件带有主键,会锁行数据,如果没有,会锁表。 如果一定要用 FOR UPDATE,建议加上 NOWAIT 或 for update wait 3

vim: command not found

1. 查看系统是否安装完整vim 执行一下命令 rpm -qa|grep vim 如果已经正确安装的话,会显示如下三行 vim-enhanced-7.0.109-7.el5 vim-minimal-7.0.109-7.el5 vim-common-7.0.109-7.el5 2. 安装vim 如果少了其中的某一条,比如 vim-enhanced 的,就用命令 yum -y install vim-enhanced 来安裝 yum -y install vim-enhanced 如果上面的三条一条都沒有返回,可以直接用 yum -y install vim* 命令 yum -y install vim*

如何将 Nacos 嵌入到开发项目中?

1. 启动Naocs 1. 下载源码 https://github.com/alibaba/nacos/releases/tag/2.0.3 2. 将项目导入IDEA中,配置指定资源为Nexus的settings-nexus.xml文件 <?xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> <!-- 配置本地jar包存放路径 --> <localRepository>D:/repository</localRepository> <pluginGroups></pluginGroups> <proxies></proxies> <servers> <!-- 配置从nexus私服下载jar包所需要的账号密码 --> <server> <id>nexus</id> <username>admin</username> <password>admin123</password> </server> <!-- 配置往nexus私服上传jar包所需要的账号密码 --> <server> <!--注意这个id 需要和pom.xml的对应--> <id>maven-releases</id> <username>admin</username> <password>admin123</password> </server> <!-- 配置往nexus私服上传jar包所需要的账号密码 --> <server> <!--注意这个id 需要和pom.xml的对应--> <id>maven-snapshots</id> <username>admin</username> <password>admin123</password> </server> </servers> <!-- 配置镜像代理 --> <mirrors> <mirror> <id>nexus</id> <mirrorOf>*</mirrorOf><!-- 配置为*的意思是将所有请求都转发到镜像仓库上 --> <url>http://172.16.150.132:8084/repository/maven-public/</url> </mirror> <!--这2个备用 以免在外网环境连不上私服--> <!-- <mirror>--> <!-- <id>alimaven</id>--> <!-- <mirrorOf>central</mirrorOf>--> <!

【计算机基础】绝对路径和相对路径

目录 一.绝对路径 二.相对路径 例如 三.举例 一.绝对路径 绝对路径是指从根目录开始的完整路径,包括所有父目录的路径,直到目标文件或者目录 所在的位置。 全文件名=全路径文件名=绝对路经=完整的路径 例如,在windows系统中,绝对路径通常以盘符(例如C:\)开始,而在Unix/Linux系统中 绝对路径通常以斜杠(例如 /)开始。 二.相对路径 相对路径是指相对于当前目录的路径。当前工作目录是指用户当前正在工作的目录。 例如 1.在windows系统中,如果当前目录为C:\Users\UserName.要访问这个目录下 的“Documents"文件夹,可以使用相对路径 ..\Documents。 2.在Unix/Linux系统中,如果当前工作目录为/home/User/Name,要访问这个目录下的 ”Desktop"文件夹,可以使用相对路径../../Desktop。 三.举例 Windows文件系统的目录结构(C盘下)如下图所示,假设用户要访问文件f2.java,则该文件 的全文件名为_____。若系统当前工作目录为programFile,那么该文件下的相对路径为 ——————。 1.全文件名: C:\ProgramFile\java-prog\f2.java 全文件名=全路径文件名=绝对路经=完整的路径 2.当前工作目录为ProgramFile,该文件的相对路径为 相对于当前目录的相对路径为 “java-prog\f2.java" 相对于磁盘根目录的相对路径 ” \ProgramFile\java-prog\f2.java “