基于Qt的app开发第九天
写在前面
笔者的课设截止时间已经越来越近了,还有不少地方的功能没有完成,所以重构一事还是放到做完整个项目、学完设计模式再考虑。目前就是继续往屎山堆屎。
需求分析
笔者的学长要做多线程,传数据的时候涉及到互斥锁之类的内容,当前的代码结构不能方便地实现,所以他们提了几个优化要求,本篇博客主要记录修改这些对应代码的过程
1. 新增一个主界面,登录之后先到这个界面,然后点击主界面上某个按钮之后再初始化对应板块对象
2. 用vector存储数据,一层数据存一个节点
3. 把时间控件统一成标准输入框
4. 用正则表达式限制输入范围
思路梳理
根据这几个问题分开来梳理实现思路:
1. 主界面就用mainwindow就行,在mainwindow.ui里画主界面的ui,然后在主函数里初始化Login类的对象,直接把这个对象show出去,然后要改的东西其实比较多,把构造函数中的初始化部分都去掉,在主界面的按钮控件槽函数中写跳转界面和初始化对象。Login.ui里的登录按钮槽函数内容应该改掉,把展示task.ui改成展示mainwindow.ui,初始时也不需要写那几个对象的show/hide状态了。
2. 目前已经实现了三个板块的功能,这三个板块都需要用vector做暂时的数据存储,这样方便向数据库中传输。可以开一个结构体存储这些内容,然后vector就是结构体数组。每次向表格传数据的时候顺便也向数组中传一次
3. 时间控件这个好处理,就是注意修改了控件要改命名要改对应的修改文本和传输数据的函数
4. 正则表达式笔者还没学(苦笑)不过没有关系,可以边学边做,在这里就列一下要限制输入范围的地方:账号密码的位数和形式
具体实现
具体实现还是按照从易到难来做吧,先完成简单的再做难的
(1)修改控件
把和时间相关的控件由textEdit改成dateEdit,然后改对应的命名和代码
先改待办板块的控件及代码:
控件已经改成这样,然后就去对应的cpp文件里改报错的地方
做这一步只有一个难点,那就是类型转换
当然,每当我认为一个东西是难点的时候,我就可以提升自己了。因为QDateTimeEdit有些特殊,它的内容是QDateTime类型的,但是可以和QString建立关系。
ui->startTimeEdit->setDisplayFormat("yyyy/MM/dd HH:mm");ui->endTimeEdit->setDisplayFormat("yyyy/MM/dd HH:mm");
使用这两句,放在构造函数里,然后就把这两个控件的文本格式定死了
QString format = "yyyy/MM/dd HH:mm";QDateTime startTime = QDateTime::fromString(shiftTaskList[1],format);QDateTime endTime = QDateTime::fromString(shiftTaskList[2],format);if (startTime.isValid()){ui->startTimeEdit->setDateTime(startTime);} else{qDebug() << "开始时间转换失败,原始字符串:" << shiftTaskList[1];}if (endTime.isValid()){ui->endTimeEdit->setDateTime(endTime);} else{qDebug() << "开始时间转换失败,原始字符串:" << shiftTaskList[2];}
使用fromString函数可以把第一个QString类型的参数转换为第二个参数指定的格式的QDateTime类型变量,然后把它再设置到QDateTimeEdit控件里就行
经过测试,是可以正常运行的
接下来再改规划板块,因为打卡板块本来就是QTimeEdit控件不需要改动
对着待办板块照猫画虎即可,就不细讲了
(2)用正则表达式限制输入范围
虽然我没学正则表达式,但是这个只需要改登录界面和注册界面,所以难度还是算小的
下面来讲一下正则表达式的用法:
注意这里只讲正则表达式限制输入的知识,正则表达式的用途有很多,一时半会儿是讲不清的,笔者事后有时间会去仔细学的
正则表达式的作用其实是匹配,在Qt里有验证器,验证是否匹配,如果匹配的话才显示在输入框中,否则就忽略。大致原理就是这样:通过正则表达式和验证器,来判断输入的内容是否为正则表达式匹配到的,如果是就正常显示,不是就忽略
那接下来就正式开始做
我的思路是把针对这四个输入框的初始化放在一个函数里,这个函数的主要作用是初始化四个输入框的提醒,显式告诉用户限制输入的范围,然后用正则表达式配限制器限制用户输入
#include <QRegularExpression>
#include <QRegularExpressionValidator>
要包含引用这两个头文件,一个是正则表达式,一个是验证器
//这个函数的作用是利用正则表达式限制输入框的输入范围----------------------------------------------------密码限制没实现
void Login::originalInputEdit()
{//初始化提醒ui->register_passwordInput->setPlaceholderText("要求8位以上,需要同时包括字母和数字");ui->register_password_confirm->setPlaceholderText("请与第一次输入的密码保持一致");ui->register_accountInput->setPlaceholderText("要求最长为10位");ui->sign_passwordInput->setPlaceholderText("请输入密码");ui->sign_accountInput->setPlaceholderText("请输入账号");//设置一个正则表达式,它可以匹配任意字符,但总长度不超过10,再设置一个限制器限制是否输入正确QRegularExpression accountRegex("^.{0,10}$");accountValidator = new QRegularExpressionValidator(accountRegex, this);//设置一个正则表达式,它匹配最短8位的要同时包含字母和数字组合QRegularExpression passwordRegex("^(?=.*[a-zA-Z])(?=.*[0-9])[a-zA-Z0-9]{8,}$");passwordValidator = new QRegularExpressionValidator(passwordRegex, this);// 应用到sign_passwordInput控件ui->sign_passwordInput->setValidator(passwordValidator);// 应用到sign_accountInput控件ui->sign_accountInput->setValidator(accountValidator);//应用到register_accountInput控件ui->register_accountInput->setValidator(accountValidator);//应用到register_passwordInput控件ui->register_passwordInput->setValidator(passwordValidator);//应用到register_password_confirm控件ui->register_password_confirm->setValidator(passwordValidator);
}
这个函数实现了账号输入的长度限制,但是密码限制失败了,可能是和学长的代码有了冲突吧,反正我仔细排查也没有排查出来,后续再改吧
(3)新增主界面
把它放到第三位还是因为vector数组存储涉及到的地方太多了,这个相对来说更简单一点
具体思路:充分利用mainwindow配套h、cpp、ui文件,用mainwindow.ui创一个主界面。因为笔者当时界面切换的思路是让mainwindow文件作媒介,接受其他板块发出的信号,现在就需要大改一下了。
首先,需要把四个板块的初始化安排到系统运行的过程中,为了防止重复初始化,需要做四个布尔变量,存储初始化情况。然后在界面切换的槽函数里做出判断,如果没有初始化的话就初始化板块对象
其次,要处理当前界面展示切换与搭配上主界面之后的逻辑矛盾。笔者原版本是将四个对象直接在构造函数里初始化,然后把其中三个hide,一个show出来,然后界面切换就是hide一个show一个。现在有了主界面那就应该在登录界面之后直接展示主界面,然后主界面要再切换其他界面。
好了,开始梳理实现顺序:先画出主界面ui,然后在main函数中初始化一个mainwindow的对象,它的构造函数里还是应该先把this hide一下,然后把login对象show出来,然后点了login的登录槽函数连接到mainwindow的connect函数,这个函数要把原来task对象show出来改成this对象show出来,然后在mainwindow的按钮槽函数里设置对应的hide和show,注意每个槽函数都要进行判断之后的初始化对象
最后有一个小小的易错点,每个界面切换都要加上判断之后的初始化对象
笔者在这里忏悔一波吧。有很多东西不做的话是想不到的。笔者已经完成了上述所有的修改,然后在运行时进程崩溃了。这是为什么呢?因为我的connect函数连接了所有板块的对象,connect是构造函数里的,如果对象在那个地方还没有初始化的话connect就站不住脚了。
所以这个功能暂时是做不出来了。只能说积累经验吧,在代码架构上问题太多了,导致后续想优化点什么也做不了。
(4)使用vector存储数据
笔者之所以认为这点最难,是因为它涉及到了三个板块
来梳理一下实现思路:主要要做的就是每次修改或者新增时要把本该传进表格的数据再传到数组中
然后这里应该怎么实现呢?我的思路是开一个结构体存储对应的内容,然后数组就是这个结构体的数组,新建就push一个,修改的话修改对应节点的数据。
那可以直接列实现顺序了:开一个结构体,这个结构体需要包括对应板块中的数据,然后开一个vector,设置数据类型是这个结构体,表格的行号对应这一个节点的下标
先改待办板块
struct TaskShift{QString taskName;QString startTime;QString endTime;QString category;QString priority;QString remindTime;};QVector<TaskShift> shiftTaskVector;
在类的声明中的私有成员里写这样一段,这个数组就可以存每次传进去的内容
//这段代码的作用是把当前传进表格的内容也传进数组中TaskShift t;t.taskName=name;t.startTime=startTime;t.endTime=endTime;t.category=category;t.priority=priority;t.remindTime=remindTime;shiftTaskVector.push_back(t);
这段代码写在保存新建操作里,就是往这个数组中存一个节点进去
//这段代码的作用是把当前传进表格的内容也传进数组中TaskShift t;t.taskName=name;t.startTime=startTime;t.endTime=endTime;t.category=category;t.priority=priority;t.remindTime=remindTime;shiftTaskVector[currentRow]=t;
这段代码写在保存修改操作里,因为下标和行号都是从0开始,所以选中这一行的行号和数组的下标是对应的
再改打卡板块,打卡板块的运行流程实际上和待办没什么区别,就不细说了
规划板块需要单独思考一下,一方面它的视图是一列一列的,一方面它有两个表格
这里应该开两个结构体和两个vector,第一个结构体存第三个界面传到第二个界面的数据,第二个结构体存第二个界面传到第一个界面的数据。然后数组的下标就对应的是表格的列
笔者在做这一部分有了一个更深刻的理解
多线程要传的数据实际上还是第一个界面的内容,所以这两个界面其实是包含关系,第一个界面要传的数据包含第二个界面,而这需要使第一个界面的结构体里存第二个界面的结构体数组
struct TaskShift{QString startTime;QString endTime;QString event;QString isSuccess;};QVector<TaskShift>shiftTaskVector;struct PlanShift{QVector<TaskShift> shiftTaskVector;QString title;QString evalution;};QVector<PlanShift>shiftPlanVector;
在类里声明这两个结构体和对应的数组
笔者这里可能会出错,趁着现在脑子比较清醒,还记着实现这个地方的思路,就在这里留下我的代码
//这几句的内容是把要传递的数组、标题和自我评价放到数组中PlanShift p;p.title=title;p.evalution=evalution;p.shiftTaskVector=shiftTaskVector;shiftPlanVector.push_back(p);shiftTaskVector.clear();
这是新建时的思路,因为第二个界面的数据实际上没用,第一个界面的数据才需要传到服务器,所以第二个界面的存储数组要清空,以便于下一次使用
//这几句的内容是把要传递的数组、标题和自我评价放到数组中PlanShift p;p.title=title;p.evalution=evalution;p.shiftTaskVector=shiftTaskVector;shiftPlanVector[currentCol]=p;shiftTaskVector.clear();
这个步骤我不知道对不对,因为这个要传数据的时候才能看出会不会有bug,到那个时候我可能已经忘了我是怎么做的,所以留在这里,等真的出bug了再来排查
篇末总结
这次修改任务做完我也学到了很多,虽然这个项目时间跨度很大,但是我学到的东西确实很多,每次写这么一篇博客我都能学到很多东西
首先就是团队协作,做项目肯定不是一个人的事情,我很幸运处女作就是团队协作的作品,而且团队成员都比我要强,学长会根据他们的需求让我改动代码
其次是一些厚积薄发类的感悟:
类型转换在编程中是一种很常见很重要的操作,不要觉得这是什么很高大上的事情,这就是基础中的基础
失败乃是常态,改来改去才是程序员最常见的工作
代码结构一定要做好,后续修改也会很容易
设计模式真的能提高一个程序员的下限,不能急于求成了,笔者要先沉淀好设计模式再去学java
相关文章:
基于Qt的app开发第九天
写在前面 笔者的课设截止时间已经越来越近了,还有不少地方的功能没有完成,所以重构一事还是放到做完整个项目、学完设计模式再考虑。目前就是继续往屎山堆屎。 需求分析 笔者的学长要做多线程,传数据的时候涉及到互斥锁之类的内容࿰…...
Baklib内容中台驱动资源管理创新
内容中台驱动智能整合 现代企业数字化进程中,内容中台通过结构化数据治理与智能算法协同,有效解决跨系统内容孤岛问题。以Baklib为例,其核心功能通过多语言支持与API接口集成能力,实现营销素材、产品文档等异构资源的统一索引与动…...
项目记录:「五秒反应挑战」小游戏的开发全过程
我正在参加CodeBuddy「首席试玩官」内容创作大赛,本文所使用的 CodeBuddy 免费下载链接:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 灵感来源与目标设定 最近我突然有个小想法:想做一个简洁但富有科技感的小型游戏,最好能…...
Git本地使用小Tips
要将本地仓库 d:\test 的更新推送到另一个本地仓库 e:\test,可以使用 Git 的远程仓库功能。以下是具体步骤: 在 e:\test 中添加 d:\test 作为远程仓库 在 e:\test 目录中打开 Git Bash 或命令行,执行以下命令: git remo…...
【AWS入门】AWS身份验证和访问管理(IAM)
【AWS入门】AWS身份验证和访问管理(IAM) [AWS Essentials] AWS Identity and Access Management (IAM) By JacksonML 众所周知,AWS亚马逊云科技位列全球云计算服务第一位,并且持续为广大客户提供安全、稳定的各类云产品和服务。…...
【NLP】36. 从指令微调到人类偏好:构建更有用的大语言模型
从指令微调到人类偏好:构建更有用的大语言模型 大语言模型(LLMs)已经成为现代自然语言处理系统的核心,但单纯依赖传统语言建模目标,往往难以满足实际应用的“人类意图”。从 Instruction Tuning(指令微调&…...
蓝桥杯1447 砝码称重
问题描述 你有一架天平和 N 个砝码,这 N 个砝码重量依次是 W1,W2,⋅⋅⋅,WN。 请你计算一共可以称出多少种不同的重量? 注意砝码可以放在天平两边。 输入格式 输入的第一行包含一个整数 N。 第二行包含 N 个整数:W1,W2,W3,⋅⋅⋅,WN…...
每日c/c++题 备战蓝桥杯(洛谷P4715 【深基16.例1】淘汰赛 题解)
洛谷P4715 【深基16.例1】淘汰赛 题解 题目大意 有 (2^n) 名选手进行淘汰赛,每场比赛两人对决,能力值高者胜出;若能力值相同,则编号较小者胜出。最终决出冠军,要求输出亚军的编号。 解题思路 关键观察:…...
基于深度学习的电力负荷预测研究
一、深度学习模型框架 在当今数字化时代,基于深度学习的电力负荷预测研究正成为保障电力系统稳定、高效运行的关键领域。其模型构建是一个复杂而精妙的过程,涉及多学科知识与前沿技术的融合应用。首先,要明确电力负荷预测的目标,…...
没有 Mac,我如何用 Appuploader 完成 iOS App 上架
没有 Mac,我如何用 Appuploader 完成 iOS App 上架|一个跨平台开发者的实战笔记 在做移动开发这些年里,唯一让我频繁想砸电脑的时刻,大概就是每次要把 iOS App 上传到 App Store。 作为一个主要在 Windows 和 Linux 开发的程序员…...
卓力达手撕垫片:精密制造的创新解决方案与多领域应用
目录 引言 一、手撕垫片的技术特性与核心功能 二、手撕垫片的多领域应用 三、南通卓力达手撕垫片的核心优势 四、未来技术展望 结语 引言 手撕垫片作为一种创新型精密金属部件,凭借其“可分层剥离、快速安装”的特性,在工业制造、电子通信、航空航天等…...
[[春秋云境] Privilege仿真场景
文章目录 靶标介绍:知识点卷影拷贝(VSS) 外网任意文件读取Jenkins管理员后台rdp远程登录Gitlab apiToken 内网搭建代理 Oracle RCESeRestorePrivilege提权mimikatzspn卷影拷贝提取SAM 参考文章 靶标介绍: 在这个靶场中,您将扮演一名资深黑客…...
【工具推荐】--Git详解
本文讲诉,git命令环境的安装和git命令的介绍 Git 是一个非常流行的分布式版本控制系统,它帮助开发者管理和跟踪项目中的代码变化。通俗地说,可以认为 Git 就像是一个代码的时间机器,它记录了项目从开始到结束的每一次代码变动。 …...
在linux里上传本地项目到github中
首先先安装git,安装完git后,输入如下操作指令: 输入自己的用户名和邮箱(为注册GITHUB账号时的用户名和邮箱): git config --global user.name "111"git config --global user.email "121…...
【基础】Windows开发设置入门8:Windows 子系统 (WSL)操作入门
前言 大家熟悉的docker、Python,但对于Windows上有一套开配合开发的相对底层的环境设置,包括powershell、winget、WSL、还有开发驱动器什么的,我准备系统学一下,不然地基不牢,也盖不起冲天高楼~ 本节,介绍…...
服务器上的Nano 编辑器进行git合并
使用git pull拉取后,出现如下部分: GNU nano 2.9.3 /data/zhouy24Files/embody/DSLab-embodied-intelligence/.git/MERGE_MSG Merge branch …...
【idea 报错:java: 非法字符: ‘\ufeff‘】
执行main方法报错:: ‘\ufeff’?package cn.com 截图如下:任何一个mian都不能执行,都报这个 写出来希望大家都能快速解决这种少见的问题,还不好弄。 我是参考这篇文章就好了:idea 报错:java: 非法字符: …...
BM25(Best Matching 25)介绍与使用
BM25(Best Matching 25)是一种基于概率检索框架的改进算法,主要用于信息检索中的相关性评分。它通过引入词频饱和函数、文档长度归一化等机制,克服了传统TF-IDF算法的局限性。 一、BM25的核心原理 1. 改进TF-IDF的三大维度 词频…...
.NET 函数:检测 SQL 注入风险
以下是一个用 C# 编写的 .NET 函数,用于检测用户输入是否存在潜在的 SQL 注入风险: using System; using System.Text.RegularExpressions;public class SqlInjectionChecker {// 常见 SQL 注入关键词和模式private static readonly string[] SqlKeywor…...
远程数据采集智能网关支持下的雨洪资源分布式监测网络搭建实践
一、项目背景 随着城市化进程的加快以及气候变化的影响,雨洪水管理成为了城市基础设施建设中的重要课题。传统的雨洪水监测手段主要依赖人工巡查和固定站点监测,存在数据获取不及时、不全面,以及在恶劣天气条件下人员安全隐患等诸多问题。为…...
LinuxYUM下载笔记
在基于RPM的Linux发行版(如CentOS、RHEL、Fedora等)中,YUM(Yellowdog Updater Modified)是默认的包管理工具,用于简化软件的安装、更新和依赖管理。以下是YUM的使用指南: 一、检查YUM是否安装 …...
研读论文《Attention Is All You Need》(7)
原文 14 3.2 Attention An attention function can be described as mapping a query and a set of key-value pairs to an output, where the query, keys, values, and output are all vectors. The output is computed as a weighted sum of the values, where the weight…...
使用excel 工具做数据清洗
数据分析中有个很重要的预处理步骤,叫做「数据清洗」。 简单来说就是把数据中「脏脏的 」部分 —— 缺失的、重复的、错误的等等,给它清除掉,剩下「干净的」数据。 1、缺失数据 如果某处缺了一两个数据,最简单的方法就是 —— …...
LeetCode 217.存在重复元素
目录 题目: 题目描述: 题目链接: 思路: 思路一详解(排序): 思路二详解(Set): 思路三详解(Map): 代码: …...
Flask 与 Django 服务器部署
一、引言 在 Web 开发领域,Flask 和 Django 是 Python 生态中最受欢迎的两个 Web 框架。Flask 以其轻量级和灵活性著称,适合快速开发小型应用和 API;而 Django 则提供了全面的功能套件,包括 ORM、管理界面和认证系统,…...
Python:操作Excel按行写入
Python按行写入Excel数据,5种实用方法大揭秘! 在日常的数据处理和分析工作中,我们经常需要将数据写入到Excel文件中。Python作为一门强大的编程语言,提供了多种库和方法来实现将数据按行写入Excel文件的功能。本文将详细介绍5种常见的Python按行写入Excel数据的方法,并附上…...
架构演变 -单体到云原生
软件架构的演变是随着技术发展、业务需求和硬件条件的变化而不断迭代的过程。以下是从单体架构到现代云原生架构的典型演变路径及关键阶段特点: 一、单体架构(Monolithic Architecture) 时间阶段:2000 年代前 特点: …...
VSCode 安装教程
访问官网 Visual Studio Code 官网 打开下载的exe文件 选一个安装位置 创建桌面快捷方式 (D) 在桌面生成 VSCode 的快捷图标,方便快速启动程序。 将 “通过 Code 打开” 操作添加到 Windows 资源管理器文件上下文菜单 右键点击文件时,菜单中会新增 “通…...
开源表单设计器FcDesigner配置多语言教程
开源低代码表单设计器FcDesigner中提供了强大的多语言支持功能,允许开发者在表单中实现一键式语言切换。在现代业务应用中,多语言支持是一项基本需求,尤其在国际化产品中。 源码地址: Github | Gitee | 文档 | 在线演示 设计器中配置多语言…...
ONIE安装NOS操作说明
ONIE 安装 NOS 操作说明 1. ONIE 简介 ONIE(Open Network Install Environment)是开放网络设备的出厂预装环境,类似于服务器的PXE/BIOS,主要用于自动或手动安装网络操作系统(NOS,如SONiC、Cumulus、FBOSS等…...
fastadmin 数据导出,设置excel行高和限制图片大小
fastadmin默认导出图片全部都再一块,而且不在单元格里 话不多说,上代码 修改文件的路径: /public/assets/js/require-table.js exportOptions: {fileName: export_ Moment().format("YYYY-MM-DD"),preventInjection: false,mso…...
仿腾讯会议——音频服务器部分
1、中介者定义处理音频帧函数 2、 中介者实现处理音频帧函数 3、绑定函数映射 4、服务器定义音频处理函数 5、 服务器实现音频处理函数...
国产化替代对金融行业有哪些影响?如何应对?
在全球产业链重构与科技自主创新的时代背景下,国产化替代已从技术领域的局部探索,升级为金融行业应对复杂外部环境、夯实发展根基的战略选择。作为国家核心竞争力的重要组成部分,金融行业长期依赖国外技术设备的传统模式正面临安全性、可控性…...
包装类(1)
1.包装类的分类 1.针对八种基本数据类型相应的引用类型--包装类 2.有了类的特点,就可以调用类中的方法. 基本数据类型. 包装类 例: 手动装箱 int->Integer 手动执箱 Integer->int 注:jdk5后就可以自动装箱和拆箱 2.包装类和基本数据的转换 (1)jdk5前的…...
java中如何优雅处理多租户系统的查询?
多租户系统通常是指一个应用服务多个客户(租户),每个租户的数据需要隔离,确保数据安全和隐私。处理这样的系统需要考虑数据隔离、查询效率、代码的可维护性等方面。 首先,我应该明确多租户的实现方式。常见的多租户数据…...
Ubuntu服务器部署多语言项目(Node.js/Python)方式实践
Ubuntu服务器部署多语言项目(Node.js/Python)方式实践 服务器脚本运行方式命令行直接执行nohup后台执行进程 Screen概述安装基本操作命令启动 Screen退出当前会话(不终止进程)查看所有会话重连会话关闭会话 常用快捷键典型使用场景…...
【MySQL】基础操作
MySQL(二)基础操作 一、数据库操作 1.创建库 2.查看库 3.选中库 4.删除库 二、表操作 1.创建表 1.1[comment 注释]: 1.2,...: 2.查看表 2.1查看所有表 2.2查看表结构 3.删除表 三、记录操作 1.插入记录 1.1全列插入 1.2指定列插入 1.3…...
在 Java MyBatis 中遇到 “操作数类型冲突: varbinary 与 float 不兼容” 的解决方法
在 MyBatis 中遇到 “操作数类型冲突: varbinary 与 float 不兼容” 错误,通常是因为当字段值为 null 时,MyBatis 无法正确推断其 JDBC 类型,导致向数据库传递 null 值时类型不匹配。以下是原因分析和解决方案: 问题原因 未指定 j…...
课题推荐——扩展卡尔曼滤波(EKF)估计pmsm的位置误差
扩展卡尔曼滤波(EKF)是一种常用于非线性系统状态估计的方法,特别适用于永磁同步电机(PMSM)的位置和速度估计。EKF可以实时估计电机的转子位置误差(与实际转子位置的偏差),从而提高控…...
elasticsearch之记录es7.17升级8.17 springboot2.7.0 程序改造坑
es7.17升级8.x问题目录 一、硬件安装1-1. centos7 服务器上,删除elasticsearch7.17,安装es8.17 二、 程序改造2-1. Java API Client 8.17.52-2. 依赖引入2-3. 配置文件2-4. Java 配置类 三、根据 Elasticsearch 集群信息(版本 8.17.2…...
SpringBoot+ELK 搭建日志监控平台
ELK 简介 ELK(Elasticsearch, Logstash, Kibana)是一个目前主流的开源日志监控平台。由三个主要组件组成的: Elasticsearch: 是一个开源的分布式搜索和分析引擎,可以用于全文检索、结构化检索和分析,它构建…...
家庭数字生态构建实战:基于飞牛fnOS的智能家居数据中台搭建全流程解析
文章目录 前言1. VMware安装飞牛云(fnOS)1.1 打开VMware创建虚拟机1.3 初始化系统 2. 安装Cpolar工具3. 配置远程访问地址4. 远程访问飞牛云NAS5. 固定远程访问地址 前言 在数字生活时代,数据管理正成为每个家庭的刚需。今天要向大家重点推荐…...
博客系统功能测试
博客系统网址:http://8.137.19.140:9090/blog_list.html 主要测试内容 功能测试、界面测试、性能测试、易用性测试、安全测试、兼容性测试、弱网测试、安装卸载测试、压力测试… 测试方法及目的 利用selenium和python编写测试脚本,对博客系统进行的相关…...
抽奖相关功能测试思路
1. 抽奖系统功能测试用例设计(登录 每日3次 中奖40% 道具兑换码) ✅ 功能点分析 必须登录后才能抽奖每天最多抽奖3次抽奖有 40% 概率中奖中奖返回兑换码 ✅ 测试用例设计 编号 用例描述 前置条件 操作 预期结果 TC01 未登录时抽奖 未登录 …...
paddle ocr本地化部署进行文字识别
一、Paddle 简介 1. 基本概念 Paddle(全称 PaddlePaddle,飞桨)是百度开发的 开源深度学习平台,也是中国首个自主研发、功能丰富、技术领先的工业级深度学习平台。它覆盖了深度学习从数据准备、模型训练、模型部署到预测的全流程…...
在CentOS系统上部署GitLabRunner并配置CICD自动项目集成!
在CentOS系统上部署GitLabRunner并配置CICD自动项目集成 在CentOS系统上部署GitLab Runner并配置CI/CD自动项目集成GitLab CI/CD是一个强大的持续集成和持续部署工具,能够显著提高开发团队的效率。 本文将详细介绍如何在CentOS系统上部署GitLab Runner,…...
python学习day2(未写完,明天继续补充)
今天主要学习了变量的数据类型,以及如何使用格式化符号进行输出。 一、认识数据类型 在python里为了应对不同的业务需求,也把数据分为不同的类型。 代码如下: """ 1、按类型将不同的变量存储在不同的类型数据 2、验证这些…...
深度强化学习框架DI-engine
深度强化学习框架DI-engine 一、DI-engine概述:决策智能的通用引擎 DI-engine是由OpenDILab开源的决策智能引擎,基于PyTorch和JAX构建,旨在为强化学习(RL)、模仿学习(IL)、离线学习等场景提供…...
gitlab迁移
需求:需要将A服务器上的 gitlab 迁移到B服务器上,均使用docker 部署 一、备份数据 进入到A服务器的 gitlab 的容器中,运行gitlab-rake gitlab:backup:create 该命令会在 /var/opt/gitlab/backups/ 目录下创建一个xxx_gitlab_backup.tar 压缩…...
UEFI Spec 学习笔记---33 - Human Interface Infrastructure Overview---33.2.6 Strings
33.2.6 Strings UEFI 环境中的 string 是使用 UCS-2 格式定义,每个字符由 16bit 数据表示。对于用户界面,strings 也是一种可以安装到 HIIdatabase 的一种数据。 为了本土化,每个 string 通过一个唯一标识符来识别,而每一个标识…...