当前位置: 首页 > news >正文

Qt在统信UOS及银河麒麟Kylin系统中进行软件开发的环境配置,打包发布和注意事项

前述

之前由于项目的产品需要,必须将原本Windows上的产品移植到信创环境,也就是现在的主流国产操作系统统信UOS及银河麒麟Kylin。
先大概讲下信创系统:
信创系统就像是中国自己打造的 “数字基建”,目的是让咱们国家的信息技术不再依赖国外,实现自主可控。简单来说,就是从电脑、手机到服务器,从操作系统、软件到芯片,全部用国产技术搭建,避免被 “卡脖子”,保障数据安全。比如政府、银行、医院这些关键部门,现在都在逐步换成信创系统,就像给信息安全上了一道 “防盗门”。
那么针对主流的两个国产操作系统统信UOS及银河麒麟Kylin,他们都属于信创,其实跟华为的鸿蒙产生的背景一样。
这两个操作系统的产品大概有两大类,既有用于服务器的操作系统,类似CentOS,或者Windows Server;也有用于个人用户电脑的操作系统,类似Windows10,Windows11等。
本篇文章主要说明在统信UOS及银河麒麟Kylin这两个系统的个人PC版上的使用。

回到主题,本篇就以Qt5+统信UOS为例,解释如何在统信UOS上进行Qt软件开发,及其环境的配置,有哪些要注意的事项。

一.环境搭建

1.1.操作系统的选择和安装;

首先,你要获取统信 UOS 开发版系统
可以访问统信软件官网下载最新的统信 UOS 桌面开发版镜像。然后在你的虚拟机或实体机上进行系统安装(虚拟机搭建机系统安装不作为本次重点,这里就一笔带过);

1.2.开发环境的搭建;

目标操作系统搭建好之后,接下来就要搭建开发环境。根据你的需要,一路命令往下走:

1.2.1 安装gcc

使用命令"sudo apt update",然后"sudo apt install gcc",安装好gcc;

1.2.2 安装g++

使用命令"sudo apt update",然后"sudo apt install g++",安装好g++;

1.2.3 解压依赖包

如果有用到,根据自己的需要来:

  • 运行tar -zxvf 包名,解压一些常用的依赖包,比如:boost包,OpenSSL包,curl包;
  • 进入boost包,执行./bootstrap.sh编译,然后执行sudo ./b2 install安装;
  • 进入OpenSSL包,执行./config,然后make,然后sudo make install;
  • 进入curl包,执行./configure,(mips处理器下用./Configure linux64-mips64 no-asm生成makefile)然后执行make,然后sudo make install;
1.2.4 安装Qt
  • 在系统的应用商店安装Qt,这里为什么一定要在系统的商店去安装,因为目前UOS商店里的Qt安装包是他们系统商自己二次开发并进行测试无误后上架的,基本上在UOS系统上使用没什么问题的。个人不建议自己通过Qt源码进行交叉编译安装,因为UOS系统界面也是他们用Qt作为开发工具做的,如果自己编译Qt,很容易跟系统商用Qt做的一些系统用的依赖库产生冲突(我自己就踩过坑)。
  • 如果使用商店里装的Qt打开后不能配置项目,这时候就要查看以下Qt的kits配置项中的Qt versions,手动配置Qt版本(一般在usr/bin/qmake),如果无法配置,则用命令“qmake -v”检测下qmake,如果qmake没有安装好的话,使用命令sudo apt install qt5-default重新安装qt;,如果安装提示还有依赖没安装,则先安装依赖的包,安装也可以用命令“sudo aptitude install qt5-default”来安装,如果没有安装qtcreator使用命令“sudo apt install -f qtcreator“来安装。
  • 安装qtwebsocket包(如果有用到这些基本库之外的模块),解压qtwebsocket包,执行qmake生成makefile文件,执行make,如果报错“qobject_p.h”有问题,执行sudo apt install qtbase5-private-dev,安装qt的一个基础库,然后再重新执行make,make成功后,执行sudo make install安装qtwebsocket包;建议优先使用系统自带的qtwebsocket包安装,使用命令sudo apt-get install libqt5websockets5-dev;
1.2.5 安装Cmake
  • 执行"sudo apt install cmake" 先安装cmake;
  • 然后执行sudo apt install cmake-qt-gui安装Cmake执行器;
  • 然后执行cmake-gui,打开cmake,设置BrowseSource和BrowseBuild的源码路径,及创建路径。注意:如果是麒麟系统,直接pwd取的路径直接填,如果是uos,要去掉前面的/data;

这样基本上Qt本身的开发环境就搭建好了。
接下来就是编译你移植过来的程序代码

二.编译程序

2.1 直接使用gcc编译的

对于有makefile文件,直接使用make命令启动gcc编译;

2.2 使用cmake编译的

  • 执行cmake-gui,打开cmake,设置BrowseSource和BrowseBuild的源码路径及创建路径,这里像前文说的注意麒麟系统上直接pwd取的路径直接填,uos上要去掉前面的/data,先点击“Configure”,初步编译后,修改CMAKE_INSTALL_PREFIX为…/libs,点击“Configure”来生成makefile;
  • 缺少库依赖,前面使用cmake编译时,如果出现缺少依赖库的报错情况,则需要根据报错提示,缺少什么库,就安装什么库;
  • 依赖库安装成功后,点击Generate按钮在build下生成Makefile,在Makefile中执行make命令来编译程序;

2.3 使用Qt编译的

如果是Qt开发的程序,需要时qmake编译,那就直接打开Qt,在Qt的构建套件中,选择合适的Qt版本编译器来编译输出。

三.打包输出

统信UOS和银河麒麟Kylin都要求输出deb包,就是打包格式是“.deb”。

3.1 文件拷贝

首先创建一个目录,安装打包输出的目录,将主程序,依赖库,配置文件等都放入到相应位置。
目录设定如下:
请添加图片描述

这个目录框架基本是固定的。
包名:com.你的公司名.你的产品名,就像这样“com.mycompanyname.myproduct”;
安装目录:/opt/apps/
控制类文件:control,postinst,postrm,preinst。
桌面链接:.desktop文件,也就是类似Windows的桌面快捷方式;
桌面图标:必须放在…/entries/icons/hicolor下;
info文件:产品包的说明型文件;

3.2 控制文件

四个控制文件,这个很重要,是如果操作包解压安装以及卸载的流程关键。
control文件写法举例:

Package: com.mycompanyname.myproduct
Name: myproduct
Version: 1.0.1.2
Section: utils
Priority: optional
Architecture: mips64el
Installed-Size: 20
Maintainer: szca
Description: 深圳xxx公司最牛逼的信息产品UOS包

postinst文件写法举例:

echo "开始执行配置脚本"
theuser=$(users | awk '{print $1;}')
if [ ! -d "/home/$theuser/桌面" ]; thendes="/home/$theuser/Desktop"
elsedes="/home/$theuser/桌面"
fi
echo "驱动桌面快捷方式"
cp /opt/apps/com.mycompanyname.myproduct/entries/applications/xxxx_Monitor.desktop "$des"
chmod a+x "$des/xxxx_Monitor.desktop"
chown $theuser "$des/xxxx_Monitor.desktop"echo "创建客户端桌面快捷方式"
cp /opt/apps/com.mycompanyname.myproduct/entries/applications/xxxx_Tool.desktop "$des"
chmod a+x "$des/xxxx_Tool.desktop"
chown $theuser "$des/xxxx_Tool.desktop"echo "配置本地服务自启动"
chmod a+x /opt/apps/com.mycompanyname.myproduct/entries/applications/xxx_watcher.desktop
sudo cp /opt/apps/com.mycompanyname.myproduct/entries/applications/xxx_watcher.desktop /etc/xdg/autostart/echo "配置本地服务安装开启"
bash /opt/apps/com.szca.signproducttool/files/xxxx_watcherRun.sh
sudo ldconfigecho "配置结束"

postrm文件写法举例:

sudo update-rc.d -f xxxx_watcher remove
sudo rm /etc/xdg/autostart/xxxx_watcher .desktop
if [ "$1" = 0 ]; thentheuser=$(users | awk '{print $1;}')rm -rf /home/*/.config/xxxx_Monitorrm -rf /home/*/.config/xxxx_Toolecho "移除缓存数据"if [ ! -d "/home/$theuser/桌面" ]; thendes="/home/$theuser/Desktop"elsedes="/home/$theuser/桌面"firm "$des/xxxx_Monitor.desktop"echo "移除驱动的桌面快捷方式"rm "$des/xxxx_Tool.desktop"echo "移除客户端的桌面快捷方式"
fi

preinst文件写法举例:

echo "安装前执行脚本"
PIDS=`ps -ef |grep xxxx_Monitor |grep -v grep | awk '{print $2}'`
PIDS=`ps -ef |grep xxxx_Tool |grep -v grep | awk '{print $2}'`

3.3 包信息说明

包信息的说明文件就是包里边的info文件,info文件的内容如下:
包括包的ID(也就是名称),产品名称,适配的处理器,注意:这里是个重点要关注的地方,不同的处理器都要重新编译适配打包的,比如x86,arm,mips,都得各自走一遍编译适配。

{"appid":"com.mycompanyname.myproduct","name":"myproduct","version":"1.0.1.2","arch": ["mips64el"],"permissions": {"autostart": false,"notification": false,"trayicon": false,"clipboard": false,"account": false,"bluetooth": false,"camera": false,"audio_record": false,"installed_apps": false},"support-plugins": ["plugin/demo"],"plugins": ["plugin/webbrowser","plugin/office"]
}

3.5 桌面链接

也就是桌面快捷方式,写法如下:

[Desktop Entry]
Categories=Application
Comment="released_on_2023_09_24"
Encoding=UTF-8
Exec=sh /opt/apps/com.mycompanyname.myproduct/files/xxxx_MonitorRun.sh
Icon=/opt/apps/com.mycompanyname.myproduct/entries/icons/hicolor/128x128/apps/SZCAMonitor.png
Name=SZCAMonitor
Name[zh_CN]=驱动助手
Terminal=false
Type=Application
X-Deepin-Vendor=user-custom

3.6 其他说明

对于一些要启动的程序,建议去创建脚本,使用脚本启动程序运行,这样可以在脚本中添加环境变量,以及一些依赖库的配置等,你可以把启动脚本看作程序的启动入口,比如桌面链接启动程序时,就可以调用启动脚本来拉起程序;例如设置某个工具的启动脚本:

#!/bin/sh#环境变量
cd /opt/apps/com.mycompanyname.myproduct/files/
#export PATH="/opt/apps/com.mycompanyname.myproduct/files/:$PATH"
export LD_LIBRARY_PATH="/opt/apps/com.mycompanyname.myproduct/files/lib/:$LD_LIBRARY_PATH"
apps_path=/opt/apps/com.mycompanyname.myproduct/files/xxxx_Toolpgrep xxxx_Tool
if [ $? -eq 0 ];thenpkill -9 xxxx_Tool
fiif [ -f ${apps_path} ];then
echo "xxxx_Toolrun..."
${apps_path}&
else
echo "xxxx_Tool not found..."
fi

3.7 打包输出

前面文件配置好后,再打包就很简单,在包文件夹外执行命令“sudo dpkg -r com.mycompanyname.myproduct”即可,就会输出.deb包发给UOS进行检验,以供后续申请上架。

四.其他环境

如果是银河麒麟系统,有一点注意事项:

  • 银河麒麟系统如果需要做桌面链接(桌面快捷方式),需要将前文“entries”目录下的所有文件转到跟“opt”平级的“usr”目录下,并且支持".svg"图片格式,他的目录结构是这样的:
    请添加图片描述
  • 银河麒麟下,对于一些主程序的依赖库,需要额外配置,可以使用脚本,在打包后先安装,然后执行脚本,或者将该脚本放入到启动脚本中:
#!/bin/bash
cd /opt/apps/com.mycompanyname.myproduct/files
patchelf --set-rpath /opt/apps/com.mycompanyname.myproduct/files/lib xxxx_Tool
patchelf --set-rpath /opt/apps/com.mycompanyname.myproduct/files/lib xxxx_Monitorcd /opt/apps/com.mycompanyname.myproduct/files/lib
patchelf --set-rpath /opt/apps/com.szca.signproducttool/files/lib libzzzz.so.1
patchelf --set-rpath /opt/apps/com.szca.signproducttool/files/lib libyyyy.so
patchelf --set-rpath /opt/apps/com.szca.signproducttool/files/lib libxxxx.so
  • 银河麒麟要求将依赖库必须放到lib文件夹中;
  • 银河麒麟要求包名必须要全部小写,不能出现大写字母;
  • 另外要注意,在前期开发时,尽量避免使用系统库的东西,能用Qt库或者C++标准库的绝不用系统库,不然移植到Linux环境,没有依赖库很麻烦。

以上即之前对接适配信创系统进行移植编译开发的一些记录。

相关文章:

Qt在统信UOS及银河麒麟Kylin系统中进行软件开发的环境配置,打包发布和注意事项

前述 之前由于项目的产品需要,必须将原本Windows上的产品移植到信创环境,也就是现在的主流国产操作系统统信UOS及银河麒麟Kylin。 先大概讲下信创系统: 信创系统就像是中国自己打造的 “数字基建”,目的是让咱们国家的信息技术不…...

一个完整的项目示例:taro开发微信小程序

前一周完成了一个项目,体测成绩转换的工具,没做记录,。这次计划开发一个地图应用小程序,记录一下。方便给使用的人。 一、申请微信小程序,填写相应的信息,取得开发者ID。这个要给腾讯地图使用的。 二、申…...

二次封装 el-dialog 组件:打造更灵活的对话框解决方案

文章目录 引言为什么需要二次封装?封装思路代码实现1. 基础封装组件 (Dialog.vue)2. Vue中引入使用示例 封装后的优势进阶优化建议 总结 引言 在 Vue 项目中,Element UI 的 el-dialog 是一个非常实用的对话框组件。但在实际开发中,我们经常会…...

3.2 一点一世界

第一步:引入背景与动机 “一点一世界”这个概念来源于泰勒公式的思想,即通过一个点及其导数信息来近似描述整个函数的行为。这种方法在数学分析中非常有用,因为它允许我们将复杂的函数简化为多项式形式,从而更容易进行计算和理解…...

力扣第156场双周赛

1. 找到频率最高的元音和辅音 给你一个由小写英文字母(a 到 z)组成的字符串 s。你的任务是找出出现频率 最高 的元音(a、e、i、o、u 中的一个)和出现频率最高的辅音(除元音以外的所有字母),并返…...

学习日志05 java

1 java里面的类型转换怎么做?int转double为例 在 Java 里,把int转换为double有自动类型转换和强制类型转换两种方式。下面为你详细介绍: 自动类型转换(隐式转换) 由于double的取值范围比int大,Java 能够…...

4.7/Q1,GBD数据库最新文章解读

文章题目:Burden of non-COVID-19 lower respiratory infections in China (1990-2021): a global burden of disease study analysis DOI:10.1186/s12931-025-03197-7 中文标题:中国非 COVID-19 下呼吸道感染负担(1990-2021 年&a…...

do while

先进再查 import java.util.Scanner;public class Hello {public static void main(String[] args) {Scanner in new Scanner(System.in);int number in.nextInt();int count 0;do{number number / 10;count count 1;} while( number > 0 );System.out.println(count…...

MySQL 主从复制与读写分离

一、MySQL 主从复制 (0)概述 MySQL 主从复制是一种数据同步机制,允许数据从一个主数据库(Master)复制到一个或多个从数据库(Slave)。其主要用途包括: 数据冗余与灾备:通…...

CSS3 基础知识、原理及与CSS的区别

CSS3 基础知识、原理及与CSS的区别 CSS3 基础知识 CSS3 是 Cascading Style Sheets 的第3个版本,是CSS技术的升级版本,于1999年开始制订,2001年5月23日W3C完成了CSS3的工作草案。 CSS3 主要模块 选择器:更强大的元素选择方式盒…...

第十七章:Llama Factory 深度剖析:易用性背后的微调框架设计

章节引导:在模型定制的实践中,Llama Factory (github.com/hiyouga/LLaMA-Factory) 以其惊人的易用性和对多种开源大模型、多种参数高效微调方法(PEFT)的广泛支持,迅速成为开源社区的热门选择。你可能已经熟练掌握了如何…...

SpringSecurity当中的CSRF防范详解

CSRF防范 什么是CSER 以下是基于 CSRF 攻击过程的 顺序图 及详细解释,结合多个技术文档中的攻击流程: CSRF 攻击顺序图 #mermaid-svg-FqfMBQr8DsGRoY2C {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#m…...

CSRF防范歪招

不保存到Cookie里呗 如果每次请求都强制通过请求头携带Token,并且不将Token存储在Cookie中,这种设计可以有效防御CSRF攻击。以下是具体原因和关键实现要点: 1. 防御原理 CSRF攻击的本质是攻击者伪造用户的请求,利用浏览器自动携…...

MyBatis与MyBatis-Plus深度分析

MyBatis与MyBatis-Plus深度分析 一、MyBatis原理与基础 1. MyBatis核心原理 MyBatis是一个半自动ORM框架,主要原理包括: SQL与代码分离:通过XML或注解配置SQL语句动态SQL:提供if、choose、foreach等标签实现动态SQL结果集映射…...

STM32 变量加载到flash的过程中

在STM32中,BIN文件内需要加载到RAM的数据由链接脚本(Linker Script)​和启动代码(Startup Code)​共同决定,具体机制如下: 一、BIN文件内容结构 STM32的BIN文件包含三类数据: ​Co…...

TCP核心机制

1. TCP五大核心机制 1.1. 顺序问题(稳重不乱) 背景:网络传输中数据包可能因路径不同或网络波动导致乱序到达,需保证接收方能按正确顺序处理数据。 原理: 序列号(Sequence Number)&#xff1…...

6.3对象序列化

在 Java 中,ObjectInputStream 和 ObjectOutputStream 是用于实现对象序列化(Serialization)和反序列化(Deserialization)的核心类。通过这两个类,可以将对象转换为字节流进行存储或传输,并在需…...

Flutter小白入门指南

Flutter小白入门指南 🚀 轻松构建漂亮的跨平台应用 📑 目录 一、Flutter是什么? 为什么选择Flutter?Flutter工作原理 二、环境搭建与命令行 安装Flutter SDK常用Flutter命令创建第一个项目 三、Flutter基础语法 变量与类型函数条…...

Python -将MP4文件转为GIF图片

给大家提供一个工具代码,使用Python,将MP4格式的视频文件,转换为GIF图片 首先先安装必要的包: pip install imageio pip install imageio[ffmpeg] 工具代码: import imageio# 视频文件路径 video_path r""…...

51c嵌入式~电路~合集27

我自己的原文哦~ 一、7805应用电路 简介 如上图,7805 集成稳压电路。 7805是串联式三端稳压器,三个端口分别是电压输入端(IN),地线(GND),稳压输出(OUT)…...

数据结构—(链表,栈,队列,树)

本文章写的比较乱,属于是缝合怪,很多细节没处理,显得粗糙,日后完善,今天赶时间了。 1. 红黑树的修复篇章 2. 红黑树的代码理解(部分写道注释之中了) 3. 队列与栈的代码 4. 重要是理解物理逻辑&a…...

GitHub 趋势日报 (2025年05月12日)

本日报由 TrendForge 系统生成 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日整体趋势 Top 10 排名项目名称项目描述今日获星总星数语言1harry0703/MoneyPrinterTurbo利用ai大模型,一键生成高清短视频使用…...

ebook2audiobook开源程序使用动态 AI 模型和语音克隆将电子书转换为带有章节和元数据的有声读物。支持 1,107+ 种语言

​一、软件介绍 文末提供程序和源码下载 ebook2audiobook开源程序使用动态 AI 模型和语音克隆将电子书转换为带有章节和元数据的有声读物。支持 1,107 种语言。从电子书到带有章节和元数据的有声读物的 CPU/GPU 转换器,使用 XTTSv2、Bark、Vits、Fairseq、YourTTS …...

《算法导论(第4版)》阅读笔记:p39-p48

《算法导论(第4版)》学习第 13 天,p39-p48 总结,总计 10 页。 一、技术总结 1. recurrence/recurrence equation 书里面 recurrence(递归式) 和 recurrence equation(递归方程) 指的是同一个东西。 二、英语总结(生词:2) 1. squint (1)…...

c语言第一个小游戏:贪吃蛇小游戏07

贪吃蛇吃饭喽 所谓贪吃蛇的食物&#xff0c;也就是创建一个和蛇身一样的结构体&#xff0c;只是这个结构体不是链表&#xff0c;也是将这个结构体设置hang和lie坐标&#xff0c;放进gamepic进行扫描&#xff0c;扫到了就也是做操作将 ## 打出来 #include <curses.h> #i…...

(七)深度学习---神经网络原理与实现

分类问题回归问题聚类问题各种复杂问题决策树√线性回归√K-means√神经网络√逻辑回归√岭回归密度聚类深度学习√集成学习√Lasso回归谱聚类条件随机场贝叶斯层次聚类隐马尔可夫模型支持向量机高斯混合聚类LDA主题模型 一.神经网络原理概述 二.神经网络的训练方法 三.基于Ker…...

VSCode中Node.js 使用教程

一、visual studio code下载与安装 二、修改vscode主题颜色 三、汉化 菜单view-->Command Palette...,输入Configure Display Language。 重启之后如下&#xff1a; 四、安装node.js Node.js 是一个基于Chrome V8引擎的JavaScript运行环境&#xff0c;使用了事件驱动、非阻…...

web 自动化之 KDT 关键字驱动详解

一、什么是关键字驱动&#xff1f; 1、什么是关键字驱动&#xff1f;&#xff08;以关键字函数驱动测试&#xff09; 关键字驱动又叫动作字驱动&#xff0c;把项目业务封装成关键字函数&#xff0c;再基于关键字函数实现自动化测试 2、关键字驱动测试原理 关键字驱动测试是一…...

web 自动化之 yaml 数据/日志/截图

文章目录 一、yaml 数据获取二、日志获取三、截图 一、yaml 数据获取 需要安装 PyYAML 库 import yaml import os from TestPOM.common import dir_config as Dirdef read_yaml(key,file_name"test_datas.yaml"):file_path os.path.join(Dir.testcases_dir, file_…...

基于javaweb的SpringBoot酒店管理系统设计与实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…...

数学复习笔记 6

前言 复习一下行列式的一些基本的题。感觉网课有点没跟上了。今天花点时间跟上网课的进度。要紧跟进度&#xff0c;然后剩下的时间再去复习前面的内容。多复习&#xff0c;提升自己的解题能力。 行列式和矩阵 三年级&#xff0c;我现在是三年级下册。。。马上就要结束大学的…...

JS Map使用方法

JS Map使用方法 Map 是 ES6 引入的一种新的数据结构&#xff0c;它类似于对象&#xff08;Object&#xff09;&#xff0c;但提供了更强大的键值对存储功能。 文章目录 JS Map使用方法基本特性基本用法创建 Map常用方法遍历方法 与 Object 的区别实际应用示例示例1&#xff1a…...

大模型分布式光伏功率预测实现详解

一、引言 随着全球能源结构向可再生能源转型,光伏发电作为清洁能源的重要组成部分,其装机容量持续快速增长。然而,光伏发电具有显著的间歇性和波动性特点,给电力系统的稳定运行带来了巨大挑战。准确的光伏功率预测对于电网调度、电力市场交易和电站运营管理至关重要。近年…...

武汉大学无人机视角下的多目标指代理解新基准!RefDrone:无人机场景指代表达理解数据集

作者&#xff1a;Zhichao Sun, Yepeng Liu, Huachao Zhu, Yuliang Gu, Yuda Zou, Zelong Liu, Gui-Song Xia, Bo Du, Yongchao Xu 单位&#xff1a;武汉大学计算机学院 论文标题&#xff1a;RefDrone: A Challenging Benchmark for Drone Scene Referring Expression Compreh…...

【LLM模型】如何构建自己的MCP Server?

什么是 MCP&#xff1f; Model Context Protocol (MCP) 是一种协议&#xff0c;它允许大型语言模型&#xff08;LLMs&#xff09;访问自定义的工具和服务。Trae 中的智能体作为 MCP 客户端可以选择向 MCP Server 发起请求&#xff0c;以使用它们提供的工具。你可以自行添加 MC…...

SQL 索引优化指南:原理、知识点与实践案例

SQL 索引优化指南&#xff1a;原理、知识点与实践案例 索引的基本原理 索引是数据库中用于加速数据检索的数据结构&#xff0c;类似于书籍的目录。它通过创建额外的数据结构来存储部分数据&#xff0c;使得查询可以快速定位到所需数据而不必扫描整个表。 索引的工作原理 B-…...

java基础-方法的重写、super关键字

1.定义&#xff1a;子类可以根据需要改写从父类那继承来的方法&#xff0c;执行时&#xff0c;子类的方法会覆盖父类的方法 2.要求&#xff1a; &#xff08;1&#xff09;子类和父类的方法必须同名&#xff0c;同参数列表 &#xff08;2&#xff09;父类中private修饰的方法…...

技术并不能产生一个好的产品

技术是产生一个好的产品充分条件&#xff0c;不是必要条件。 当笔者到了40岁的年龄时间&#xff0c;发现再怎么努力提升技术&#xff0c;也没办法挽救烂的产品设计。 一个好的产品&#xff0c;首先要找准自己的定位&#xff0c;不能动不动就把自己拿一线品牌来比较。 好的产品…...

lubuntu 系统详解

Lubuntu 系统详解&#xff1a;轻量高效的 Ubuntu 衍生版 一、系统概述 定位与背景&#xff1a; Lubuntu 是 Ubuntu 的官方衍生版本&#xff08;Flavor&#xff09;&#xff0c;专注于轻量性与高效性&#xff0c;旨在为低配置设备&#xff08;如老旧电脑、上网本、低配笔记本 …...

《设备管理与维修》审核严吗?“修改后再投”是拒稿了吗?

有过论文投稿经验的朋友&#xff0c;可能在审核后收到过“修改后再投”的回复。有些期刊可能是真的建议投稿人在修改后再投稿&#xff0c;有些则可能是标准的拒稿模板。 《设备管理与维修》审核严吗&#xff1f;收到“修改后再投”的回复该怎么办&#xff1f;下面我就来分享下之…...

2025年5月-信息系统项目管理师高级-软考高项一般计算题

决策树和期望货币值 加权算法 自制和外购分析 沟通渠道 三点估算PERT 当其他条件一样时&#xff0c;npv越大越好...

界面组件DevExpress WPF中文教程:Grid - 如何自定义Band Header外观?

DevExpress WPF拥有120个控件和库&#xff0c;将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序&#xff0c;这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…...

Supabase 的入门详细介绍

Supabase 是什么&#xff1f; 简单来说&#xff0c;Supabase 是一个开源的 Firebase 替代品。它提供了一整套后端即服务 (BaaS - Backend as a Service) 的工具&#xff0c;让你能够快速构建应用程序的后端&#xff0c;而无需自己从头搭建和管理服务器、数据库等基础设施。 S…...

【实战】基于 ABP vNext 构建高可用 S7 协议采集平台(西门子 PLC 通信全流程)

&#x1f680;&#x1f527;【实战】基于 ABP vNext 构建高可用 S7 协议采集平台&#xff08;西门子 PLC 通信全流程&#xff09;&#x1f4ca; &#x1f4d1; 目录 &#x1f680;&#x1f527;【实战】基于 ABP vNext 构建高可用 S7 协议采集平台&#xff08;西门子 PLC 通信全…...

20、map和set、unordered_map、un_ordered_set的复现

一、map 1、了解 map的使用和常考面试题等等&#xff0c;看这篇文章 map的key是有序的 &#xff0c;值不可重复 。插入使用 insert的效率更高&#xff0c;而在"更新map的键值对时&#xff0c;使用 [ ]运算符效率更高 。" 注意 map 的lower和upper那2个函数&#x…...

leetcode 189. 轮转数组

题目描述 代码&#xff1a; class Solution { public:void rotate(vector<int>& nums, int k) {int len nums.size();k k % len;reverse(nums,0,len-1);reverse(nums,0,k-1);reverse(nums,k,len-1);}void reverse(vector<int>& nums,int left,int right…...

得物0509面试手撕题目解答

题目 使用两个栈&#xff08;一个无序栈和一个空栈&#xff09;将无序栈中的元素转移到空栈&#xff0c;使其有序&#xff0c;不允许使用其他数据结构。 示例&#xff1a;输入&#xff1a;[3, 1, 6, 4, 2, 5]&#xff0c;输出&#xff1a;[6, 5, 4, 3, 2, 1] 思路与代码 如…...

8天Python从入门到精通【itheima】-6~10

目录 7节-开发出第一个Python程序&#xff1a; 1.在cmd窗口写下第一个最简单的程序&#xff1a;Hello World!!! 9节&#xff1a; 1.如何卸载python&#xff1a; 2.报错&#xff1a;不是可运行的程序 ​编辑 3.报错&#xff1a;无法初始化设备PRN&#xff1a; 4.报错&…...

Qt —— 使用Enigma Virtual Box将Qt程序打包为独立可运行exe(附:完整打包方法且完美运行)

🔔 Qt 相关技术、疑难杂症文章合集(掌握后可自封大侠 ⓿_⓿)(记得收藏,持续更新中…) 打包结果 1、如下图,准备好Qt已打包后程序文件夹。附 Qt —— 在Windows下打包Qt应用程序(在其他Windows电脑下使用)...

大语言模型RLHF训练框架全景解析:OpenRLHF、verl、LLaMA-Factory与SWIFT深度对比

引言 随着大语言模型&#xff08;LLM&#xff09;参数规模突破千亿级&#xff0c;基于人类反馈的强化学习&#xff08;RLHF&#xff09;成为提升模型对齐能力的关键技术。OpenRLHF、verl、LLaMA-Factory和SWIFT作为开源社区的四大标杆框架&#xff0c;分别通过分布式架构、混合…...