linux安装部署mysql资料
安装虚拟机
等待检查完成
选择中文
软件选择
网络和主机名
开始安装
设置root密码 ADH-password
创建用户
等待安装完成
重启
接受许可证
Centos 7 64安装完成
安装mysql开始
Putty连接指定服务器
在 opt目录下新建download目录 将mysql文件传到该目录下
查看linux服务器的版本,并下载相符合的mysql版本
使用filezilla工具进行文件传输
不知道linux系统机构的,可以执行如下命令查看系统处理器架构 uname -m
若不知道自己的系统信息,可以执行如下命令 cat /etc/os-release
解压文件 tar -xvf mysql-8.0.40-linux-glibc2.17-x86_64.tar.xz
移动文件到/usr/local/mysql路径下
mv mysql-8.0.40-linux-glibc2.17-x86_64 /usr/local/mysql
当/usr/losal/msyql路径不存在时,会自动创建
创建data目录,存储MySQL数据
cd /usr/local/mysql
mkdir data
# MySQL错误日志路径
mkdir data/error
# 日志文件
touch data/error/mysql.log
# 临时文件
mkdir data/tmp
创建用户并添加用户组
groupadd mysql #创建mysql用户组
useradd -g mysql mysql #创建用户mysql,并指定用户的组
为mysql用户分配文件权限
chown -R mysql:mysql /usr/local/mysql
chmod 750 /usr/local/mysql/data
查看/usr/local/mysql文件权限
ll -al /usr/local/mysql
修改or创建mysql的配置文件
vim /etc/my.cnf
[mysqld]
bind-address=0.0.0.0
# 端口
port=3306
# 用户
user=mysql
# mysql根路径
basedir=/usr/local/mysql
# mysql数据路径
datadir=/usr/local/mysql/data
[mysqld_safe]
# 会话信息
socket=/usr/local/mysql/data/tmp/mysql.sock
# 错误日志路径
log-error=/usr/local/mysql/data/error/mysql.log
# 进程存放路径
pid-file=/usr/local/mysql/data/mysql.pid
#character config
# 服务编码格式
character_set_server=utf8mb4
# symbolic-links=0为是否支持符号链接,即数据库或表可以存储在my.cnf中指定datadir之外的分区或目录,为0不开启
symbolic-links=0
# 对column属性是timestamp的处理模式,默认OFF
explicit_defaults_for_timestamp=ON
# 关闭MySQL的only_full_group_by模式
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
#忽略表名大小写
lower_case_table_names=1
[client]
# 客户端默认编码格式
default-character-set=utf8mb4
socket=/usr/local/mysql/data/tmp/mysql.sock
删掉注释后的内容
[mysqld_safe]
socket=/usr/local/mysql/data/tmp/mysql.sock
log-error=/usr/local/mysql/data/error/mysql.log
pid-file=/usr/local/mysql/data/mysql.pid
character_set_server=utf8mb4
symbolic-links=0
explicit_defaults_for_timestamp=ON
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
lower_case_table_names=1
[client]
default-character-set=utf8mb4
socket=/usr/local/mysql/data/tmp/mysql.sock
创建mysql-server服务
cp -a /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
/etc/init.d 目录通常用于存放启动脚本,这些脚本用于管理系统服务的启动、停止和重启。
授权授权以及添加服务
chmod +x /etc/init.d/mysql
chkconfig --add mysql
检查mysql服务是否生效
chkconfig --list mysql
数据库初始化
切换到/usr/local/mysql/bin目录下
cd /usr/local/mysql/bin
执行数据库初始化命令
./mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data/ --initialize
执行报错 解决如下
再次执行成功,一定要记住初始化的密码
这是这次初始化的密码:JyV%fGC!d1Bc
环境配置与服务启动
配置MySQL全局变量
编辑配置文件
vim /etc/profile.d/mysql_home.sh
写入下面参数配置,:wq!保存退出。
export PATH=$PATH:/usr/local/mysql/bin:/usr/local/mysql/lib
export PATH
设置环境变量立即生效使用source /etc/profile命令
source /etc/profile
启动MySQL服务
service mysql start
报错:解决文件不存在的问题
上传error文件到data目录下
上传tmp文件到data目录下
报错如下 【Starting MySQL. ERROR! The server quit without updating PID file (/usr/local/mysql/data/192.168.1.100.pid).】
解决上面错误
检查权限问题
确保 MySQL 数据目录(/usr/local/mysql/data)及其子目录和文件对 MySQL 用户是可写的。你可以使用 chown 和 chmod 命令来设置正确的权限。
sudo chown -R mysql:mysql /usr/local/mysql/data
sudo chmod -R 755 /usr/local/mysql/data
再运行service mysql start:启动成功
修改密码
使用上述初始化是的原始密码,登录MySQL服务
mysql -uroot -p
修改mysql数据库密码,注意:此处adh-password修改为自己的需要密码即可。
ALTER USER 'root'@'localhost' IDENTIFIED BY 'adh-password';
刷新权限配置&退出
flush privileges;
exit;
重启MySQL服务
service mysql restart
设置远程登录
use mysql;
设置允许远程访问
update user set host='%' where user='root';
刷新权限配置&退出
flush privileges;
exit;
使用Navicat Premium 16工具进行登录验证
新建数据库
创建数据库
运行sql文件
选择好之前备份的sql文件
点击开始
导入完成
再次手动刷新一下库的表
刷新成功,导入成功
Linux系统会对大小写有具体区分
检查是否有任何拼写错误或大小写不匹配的问题(MySQL 在某些操作系统上对表名的大小写敏感)。
关闭防火墙
禁用防火墙: systemctl stop firewalld
禁用开机防火墙 systemctl disable firewalld.service
在usr目录下新建Java目录,然后将下载的JDK拷贝到这个新建的Java目录中
创建目录命令:mkdir /usr/java
上传jdk文件到创建的目录下
进入到Java目录中解压下载的JDK
解压命令:tar -zxvf jdk-8u371-linux-x64.tar.gz
设置环境变量
设置命令:vim /etc/profile
输入上面的命令后,shift+g快速将光标定位到最后一行,然后按“i”,再输入下面代码
export JAVA_HOME=/usr/java/jdk1.8.0_371
export PATH=$JAVA_HOME/bin:$PATH
输入下面命令让设置的环境变量生效
source /etc/profile
验证JDK是否安装成功 java -version
安装tomcat
上传tomcat到目录下
解压命令:tar -zxvf apache-tomcat-9.0.76.tar.gz
在webapps目录下新建目录
上传项目到新建目录下
并进行解压 unzip ARRANGE_V2_Mysql.zip
进行server.xml的项目配置化
在适当位置添加该语句
<Context path="/arrange" docBase="itemArrangeMZ/ARRANGE_V2_Mysql" />
部署完成,运行项目
--进入tomcat的bin目录
cd /home/ioas/Tomcat/apache-tomcat-9.0.76/bin
--运行可查看日志
./catalina.sh run
--直接运行
./startup.sh
项目运行成功
浏览器访问http://192.168.1.100:8080/arrange
设置jdk环境变量的语句 export JAVA_HOME=/usr/java/jdk1.8.0_371
Tomcat设置如何开机自启
创建 tomcat 服务配置文件 vim /etc/init.d/tomcat
JAVA_HOME、CATALINA_HOME改成自己本地对应的路径
#!/bin/bash
# description: Tomcat Start Stop Restart
# processname: tomcat
# chkconfig: 2345 20 80
#idea - tomcat config start
#!/bin/bash
# description: Tomcat Start Stop Restart
# processname: tomcat
# chkconfig: 2345 20 80
JAVA_HOME=/usr/java/jdk1.8.0_371
export JAVA_HOME
PATH=$JAVA_HOME/bin:$PATH
export PATH
CATALINA_HOME=/usr/java/apache-tomcat-9.0.76
case $1 in
start)
sh $CATALINA_HOME/bin/startup.sh
;;
stop)
sh $CATALINA_HOME/bin/shutdown.sh
;;
restart)
sh $CATALINA_HOME/bin/shutdown.sh
sh $CATALINA_HOME/bin/startup.sh
;;
esac
exit 0
#chmod 755 tomcat
#chkconfig --add tomcat
#chkconfig --level 2345 tomcat on
给文件授权 chmod +x /etc/init.d/tomcat
添加到服务列表 chkconfig --add /etc/init.d/tomcat
查看服务列表 chkconfig --list
2,3,4,5都是开表示随系统而启动
启动 tomcat命令 service tomcat start
关闭 tomcat命令 service tomcat stop
重启 tomcat命令 service tomcat restart
实时查看tomcat日志
进入到tomcat的安装目录的logs目录下 运行 tail -f catalina.out
使用 crontab 设置定时重启服务
编写重启tomcat服务的脚本
首先,你需要编写一个 Shell 脚本来重启指定的服务。例如,如果你要重启 Apache HTTP 服务器(通常服务名为 apache2 或 httpd),可以创建一个名为 restart_service.sh 的脚本
确保脚本具有执行权限
chmod +x restart_service.sh
编辑 crontab 文件
使用 crontab -e 命令打开 crontab 编辑器。
添加定时任务
在 crontab 编辑器中,添加一行来指定定时任务和要执行的脚本。crontab 的时间格式如下:
请将 /path/to/restart_service.sh 替换为你实际脚本的路径。
【59 17 * * * /usr/java/restartTask/restart_service.sh】
验证定时任务
你可以通过以下命令查看当前用户的 crontab 定时任务列表,以确保你的任务已正确添加:
crontab -l
关于科大讯飞对接知识(Linux版本)
访问科大讯飞的网站 离线语音合成 - 语音合成 - 讯飞开放平台
点击服务管理 进行sdk的下载
网站下载地址 控制台-讯飞开放平台
下载相对应的sdk版本
这是我本地已下载好的sdk
将下载的sdk文件上传到 /usr/local/tts_server/env/voice 该路径下(没有该目录请依次创建目录)
解压sdk包
解压成功
在新建一个MyDemo的文件夹
然后将 bin、include、libs文件拷到新建的MyDemo文件夹下
命令如下
cd Mydemo
cp ../bin/ ../include/ ../libs/ . -rf
在将/usr/local/tts_server/env/voice/samples 文件夹下的tts_offline_sample拷贝到MyDemo文件夹下
命令如下
cp ../samples/tts_offline_sample . -rf
进入到/usr/local/tts_server/env/voice/Mydemo/tts_offline_sample 的文件夹下 对64bit_make.sh的内容进行修改
命令如下
vim 64bit_make.sh
修改如下
再对 /usr/local/tts_server/env/voice/Mydemo/tts_offline_sample 的文件夹下 对Makefile的内容进行修改
命令如下
vim Makefile
修改如下
对 64bit_make.sh 进行source
命令如下
source 64bit_make.sh
再进行make
Make完之后会在/usr/local/tts_server/env/voice/Mydemo/bin 文件夹下生成 tts_offline_sample该文件
随后我们进行该文件命令的执行
./tts_offline_sample
可以看到语音文件生成成功 ,可以下载到本地进行播放
到该处说明科大讯飞的sdk安装部署完成成功
下一步进行代码的改动、参数可配置话和环境部署
为了实现可配置话,我们需要对/usr/local/tts_server/env/voice/MyDemo/tts_offline_sample 目录下的tts_offline_sample.c 文件进行改造
修改如图
const char* base_path = "/usr/java/apache-tomcat-9.0.76/webapps/itemArrangeMZ/ARRANGE_V2_Mysql/tts/";
注意此处的生成路径是固定的值;需要修改
/* * 语音合成(Text To Speech,TTS)技术能够自动将任意文字实时转换为连续的 * 自然语音,是一种能够在任何时间、任何地点,向任何人提供语音信息服务的 * 高效便捷手段,非常符合信息时代海量数据、动态更新和个性化查询的需求。 */ #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <errno.h> #include <string.h> #include <inttypes.h> #include <sys/types.h> #include <sys/stat.h> #include <time.h> #include "../include/qtts.h" #include "../include/msp_cmn.h" #include "../include/msp_errors.h" typedef int SR_DWORD; typedef short int SR_WORD ; /* wav音频头部格式 */ typedef struct _wave_pcm_hdr { char riff[4]; // = "RIFF" int size_8; // = FileSize - 8 char wave[4]; // = "WAVE" char fmt[4]; // = "fmt " int fmt_size; // = 下一个结构体的大小 : 16 short int format_tag; // = PCM : 1 short int channels; // = 通道数 : 1 int samples_per_sec; // = 采样率 : 8000 | 6000 | 11025 | 16000 int avg_bytes_per_sec; // = 每秒字节数 : samples_per_sec * bits_per_sample / 8 short int block_align; // = 每采样点字节数 : wBitsPerSample / 8 short int bits_per_sample; // = 量化比特数: 8 | 16 char data[4]; // = "data"; int data_size; // = 纯数据长度 : FileSize - 44 } wave_pcm_hdr; /* 默认wav音频头部数据 */ wave_pcm_hdr default_wav_hdr = { { 'R', 'I', 'F', 'F' }, 0, {'W', 'A', 'V', 'E'}, {'f', 'm', 't', ' '}, 16, 1, 1, 16000, 32000, 2, 16, {'d', 'a', 't', 'a'}, 0 }; /* 文本合成 */ int text_to_speech(const char* src_text, const char* des_path, const char* params) { int ret = -1; FILE* fp = NULL; const char* sessionID = NULL; unsigned int audio_len = 0; wave_pcm_hdr wav_hdr = default_wav_hdr; int synth_status = MSP_TTS_FLAG_STILL_HAVE_DATA; if (NULL == src_text || NULL == des_path) { printf("params is error!\n"); return ret; } fp = fopen(des_path, "wb"); if (NULL == fp) { printf("open %s error.\n", des_path); return ret; } /* 开始合成 */ sessionID = QTTSSessionBegin(params, &ret); if (MSP_SUCCESS != ret) { printf("QTTSSessionBegin failed, error code: %d.\n", ret); fclose(fp); return ret; } ret = QTTSTextPut(sessionID, src_text, (unsigned int)strlen(src_text), NULL); if (MSP_SUCCESS != ret) { printf("QTTSTextPut failed, error code: %d.\n",ret); QTTSSessionEnd(sessionID, "TextPutError"); fclose(fp); return ret; } fwrite(&wav_hdr, sizeof(wav_hdr) ,1, fp); //添加wav音频头,使用采样率为16000 while (1) { /* 获取合成音频 */ const void* data = QTTSAudioGet(sessionID, &audio_len, &synth_status, &ret); if (MSP_SUCCESS != ret) break; if (NULL != data) { fwrite(data, audio_len, 1, fp); wav_hdr.data_size += audio_len; //计算data_size大小 } if (MSP_TTS_FLAG_DATA_END == synth_status) break; } printf("\n"); if (MSP_SUCCESS != ret) { printf("QTTSAudioGet failed, error code: %d.\n",ret); QTTSSessionEnd(sessionID, "AudioGetError"); fclose(fp); return ret; } /* 修正wav文件头数据的大小 */ wav_hdr.size_8 += wav_hdr.data_size + (sizeof(wav_hdr) - 8);
/* 将修正过的数据写回文件头部,音频文件为wav格式 */ fseek(fp, 4, 0); fwrite(&wav_hdr.size_8,sizeof(wav_hdr.size_8), 1, fp); //写入size_8的值 fseek(fp, 40, 0); //将文件指针偏移到存储data_size值的位置 fwrite(&wav_hdr.data_size,sizeof(wav_hdr.data_size), 1, fp); //写入data_size的值 fclose(fp); fp = NULL; /* 合成完毕 */ ret = QTTSSessionEnd(sessionID, "Normal"); if (MSP_SUCCESS != ret) { printf("QTTSSessionEnd failed, error code: %d.\n",ret); } return ret; } int ensure_directory_exists(const char* path) { // 使用F_OK检查文件(或文件夹)是否存在 if (access(path, F_OK) != -1) { // 路径存在,可能是文件或文件夹,但我们假设它是文件夹(这里不进一步区分) printf("\n"); printf("1"); return 0; // 成功,路径已存在 } else { // 路径不存在,尝试创建文件夹 // 注意:mkdir的第二个参数设置了文件夹的权限(如0755表示rwxr-xr-x) if (mkdir(path, 0755) != 0) { // 创建文件夹失败 printf("\n"); printf(path); printf("\n"); printf("2"); printf("\n"); perror("mkdir failed"); return -1; // 失败 } } return 0; // 成功(无论是已存在还是新创建) } char* create_filename(const char* file_path) { const char* base_path = "/usr/java/apache-tomcat-9.0.76/webapps/itemArrangeMZ/ARRANGE_V2_Mysql/tts/"; char date_str[11]; // "YYYY_MM_DD"格式最多需要10个字符+1个空字符 char directory_path[256]; // 足够大的缓冲区来存储完整路径
// 获取当前日期并格式化为"YYYY_MM_DD" time_t rawtime; struct tm *timeinfo; time(&rawtime); timeinfo = localtime(&rawtime); strftime(date_str, sizeof(date_str), "%Y-%m-%d", timeinfo);
// 构建完整路径 snprintf(directory_path, sizeof(directory_path), "%s%s%s", base_path, date_str,"/"); ensure_directory_exists(directory_path); const char* extension = ".wav";
// 计算所需的总长度(包括null终止符) size_t total_length = strlen(directory_path) + strlen(file_path) + strlen(extension) + 1;
// 动态分配内存来存储完整的文件名 char* filename = (char*)malloc(total_length * sizeof(char)); if (filename == NULL) { perror("malloc failed"); return NULL; // 内存分配失败时返回NULL }
// 使用snprintf来安全地拼接字符串 snprintf(filename, total_length, "%s%s%s", directory_path, file_path, extension);
return filename; } int main(int argc, char* argv[]) { /*解析入口参数*/
/**tts文本*/ const char* tts_txt = argv[1]; printf("ttswenben:"); printf(tts_txt); printf("\n"); /*生成文件存储文件名字*/ const char* file_path=argv[2]; printf(file_path); printf("\n"); /*tts发声参数*/ const char* tts_param=argv[3]; printf(tts_param); printf("\n"); int ret = MSP_SUCCESS; const char* login_params = "appid =8c3c5635, work_dir = .";//登录参数,appid与msc库绑定,请勿随意改动 /* * rdn: 合成音频数字发音方式 * volume: 合成音频的音量 * pitch: 合成音频的音调 * speed: 合成音频对应的语速 * voice_name: 合成发音人 * sample_rate: 合成音频采样率 * text_encoding: 合成文本编码格式 * */
const char* session_begin_params = tts_param; printf(session_begin_params); const char* filename = create_filename(file_path); const char* text = tts_txt; /* 用户登录 */ ret = MSPLogin(NULL, NULL, login_params); //第一个参数是用户名,第二个参数是密码,第三个参数是登录参数,用户名和密码可在http://www.xfyun.cn注册获取 if (MSP_SUCCESS != ret) { printf("MSPLogin failed, error code: %d.\n", ret); MSPLogout(); //退出登录 return 0; } /* 文本合成 */ ret = text_to_speech(text, filename, session_begin_params); if (MSP_SUCCESS != ret) { printf("text_to_speech failed, error code: %d.\n", ret); } MSPLogout(); //退出登录 return 0; } |
更新修改文件
更新完之后,需要进入到/usr/local/tts_server/env/voice/Mydemo/tts_offline_sample 的目录下再次进行
命令如下
source 64bit_make.sh
make
修改完之后 我们可以在/usr/local/tts_server/env/voice/MyDemo/bin 目录下进行测试
命令如下
tts测试 是生成的文字
ewr5we 是命名的wav文件名
./tts_offline_sample "tts测试" ewr5we "engine_type = local,voice_name=xiaoyan, text_encoding = UTF8, tts_res_path = fo|res/tts/xiaoyan.jet;fo|res/tts/common.jet, sample_rate = 16000, speed = 50, volume = 50, pitch = 50, rdn = 2"
执行完之后,可以看到语音文件已经成功生成
以上就是执行的可变参数,但是java调用只能调用Linux的sh脚本,所以我们需要新建一个脚本来供给java进行调用
脚本命令如下
脚本名称为 tts_test.sh |
#!/bin/bash # 定义要source的文件的绝对路径 SOURCE_SCRIPT="/usr/local/tts_server/env/voice/MyDemo/tts_offline_sample/64bit_make.sh" # 定义make命令要执行的目录的绝对路径 MAKE_DIRECTORY="/usr/local/tts_server/env/voice/MyDemo/tts_offline_sample" # 检查source脚本是否存在 if [ ! -f "$SOURCE_SCRIPT" ]; then echo "Error: Source script '$SOURCE_SCRIPT' not found!" exit 1 fi # source该脚本 source "$SOURCE_SCRIPT" # 切换到make命令要执行的目录(如果需要的话) # 注意:如果64bit_make.sh已经设置了必要的环境变量,并且这些变量对make命令有效, # 那么可能不需要下面的cd命令。这取决于64bit_make.sh的具体内容。 # cd "$MAKE_DIRECTORY" # 执行make命令 make -C "$MAKE_DIRECTORY" # 检查make命令的退出状态 if [ $? -ne 0 ]; then echo "Error: Make command failed!" exit 1 fi echo "Make command completed successfully." /usr/local/tts_server/env/voice/MyDemo/bin/tts_offline_sample "$1" $2 "engine_type = local,voice_name=xiaoyan, text_encoding = UTF8, tts_res_path = fo|/usr/local/tts_server/env/voice/MyDemo/bin/msc/res/tts/xiaoyan.jet;fo|/usr/local/tts_server/env/voice/MyDemo/bin/msc/res/tts/common.jet, sample_rate = 16000, speed = 50, volume = 50, pitch = 50, rdn = 2" |
直接上传脚本
由于脚本执行的是绝对路径,所以我们需要修改/usr/local/tts_server/env/voice/Mydemo/tts_offline_sample目录下的64bit_make.sh和Makefile文件下的目录
如果不修改会报如下的错误
修改如图
64bit_make.sh文件修改如图
Makefile文件修改如图
修改完之后 直接进行呼叫测试
成功呼叫
语音文件也成功生成
相关文章:

linux安装部署mysql资料
安装虚拟机 等待检查完成 选择中文 软件选择 网络和主机名 开始安装 设置root密码 ADH-password 创建用户 等待安装完成 重启 接受许可证 Centos 7 64安装完成 安装mysql开始 Putty连接指定服务器 在 opt目录下新建download目录 将mysql文件传到该目录下 查看linux服务器的…...
深入理解 MongoDB:一款灵活高效的 NoSQL 数据库
在现代应用程序开发中,数据存储技术已经从传统的关系型数据库(RDBMS)扩展到多样化的 NoSQL 数据库。MongoDB 作为一款广泛使用的文档型数据库,以其灵活性、高性能和易用性成为开发者的首选之一。本篇博文将从 MongoDB 的核心概念、…...
爆改老旧笔记本---将笔记本改造为家用linux服务器
爆改老旧笔记本---将笔记本改造为家用linux服务器 linux启动盘制作镜像文件分区类型:MBR分区和GPT分区的定义MBR分区(Master Boot Record)GPT分区(GUID Partition Table)应用场景和优势MBR的应用场景和优势GPT的应用场景和优势 Li…...

RocketMQ MQTT Windows10 环境启动
RocketMQ MQTT Windows10 环境启动 参考环境和软件版本下载资源启动RocketMQ启动RocketMQ MQTT 参考 https://blog.csdn.net/weixin_43114058/article/details/140043257 https://blog.csdn.net/yangxiaovip/article/details/138355443 环境和软件版本 操作系统:…...

sd webui整合包怎么安装comfyui
环境: sd webui整合包 comfyui 问题描述: sd webui整合包怎么安装comfyui 扩展安装不成功 解决方案: 1.直接下载 ,解压到SD文件夹里(或者git拉一下) 2.ComfyUI模型共享:如果本机部署过Webui,那么ComfyUI可以与WebUI公用一套模型,防止复制大量模型浪费空间 将…...

Edify 3D: Scalable High-Quality 3D Asset Generation
Deep Imagination Research | NVIDIA 目录 一、Abstract 二、核心内容 1、多视图扩散模型 3、重建模型: 4、数据处理模块: 三、结果 1、文本到 3D 生成结果 2、图像到 3D 生成结果 3、四边形网格拓扑结构 一、Abstract NVIDIA 开发的用于高质量…...
鸿蒙HarmonyOS学习笔记(6)
定义扩展组件样式:Extend装饰器 在前文的示例中,可以使用Styles用于样式的重用,在Styles的基础上,我们提供了Extend,用于扩展原生组件样式。 说明 从API version 9开始,该装饰器支持在ArkTS卡片中使用。 从…...

蓝桥杯备赛笔记(一)
这里的笔记是关于蓝桥杯关键知识点的记录,有别于基础语法,很多内容只要求会用就行,无需深入掌握。 文章目录 前言一、编程基础1.1 C基础格式和版本选择1.2 输入输出cin和cout: 1.3 string以下是字符串的一些简介:字符串…...
在Java中使用Apache POI导入导出Excel(二)
本文将继续介绍POI的使用,上接在Java中使用Apache POI导入导出Excel(一) 使用Apache POI组件操作Excel(二) 14、读取和重写工作簿 try (InputStream inp new FileInputStream("workbook.xls")) { //Inpu…...

linux 中后端jar包启动不起来怎么回事 -bash: java: 未找到命令
一、用以下命令检查jdk版本 输入:java -version,如果JDK 环境变量没有配置,你会看到如下提示 二、配置jdk环境 1.先找到/etc/profile文件,然后在该文件最后面加上以下配置 export JAVA_HOME/usr/local/jdk-21.0.1 export PATH$…...

六大排序算法:插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序
本章讲述数据结构中的六大排序算法 欢迎大佬们踊跃讨论,感谢大家支持! 我的博客主页链接 六大排序算法 一.插入排序1.1 直接插入排序1.2 希尔排序 二.选择排序2.1 单向选择排序2.2双向选择排序2.3 堆排序 三.交换排序3.1 冒泡排序3.2 快速排序3.2.1 Hoa…...
快速排序(C++实现)
基本思想 任取一个元素为中心,所有比它小的元素一律前放,比他大的元素一律后放,形成左右两个子表;对各子表重新选择中心元素并依此规则调整,直到每个子表的元素只剩一个。 通过一趟排序,将待排序记录分割成…...
【数据库知识】数据库关系代数表达式
文章目录 概述一、关系代数表达式的基本组成部分二、关系代数运算符及其使用样例三、关系代数表达式的优化四、总结 概述 数据库关系代数表达式是关系数据库系统查询语言的理论基础,它使用一系列符号和运算符来描述从一个或多个关系(即表)中…...

linux系统清理全部python环境并重装
提问 centos系统清理全部python环境并重装,并且使用宝塔。 解答 要在CentOS系统中彻底清理Python3环境,可以遵循以下步骤: 卸载Python3 使用rpm命令卸载所有与Python3相关的包。这个命令会查询所有已安装的与python3相关的rpm包…...
Servlet的介绍
Servlet是Java Web的核心组件,它是一个运行在服务器端的Java程序,用于接收客户端的请求、处理请求并返回响应。Servlet遵循特定的生命周期,包括初始化、服务、销毁等阶段。 生命周期: init():初始化Servlet实例&#x…...

DICOM医学影像应用篇——伪彩色映射 在DICOM医学影像中的应用详解
目录 引言 伪彩色映射的概念 基本原理 查找表(Look-Up Table, LUT) 步骤 示例映射方案 实现伪彩色映射的C代码 代码详解 伪彩色处理效果展示 总结 扩展知识 LUT 的基本概念 LUT 在伪彩色映射中的应用 示例 引言 在医学影像处理中,…...

(超详细图文详情)Navicat 配置连接 Oracle
1、下载依赖文件 Oracle官网下载直链:https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html 夸克网盘下载(oracle19c版本):https://pan.quark.cn/s/5061e690debc 官网下载选择对应 Oracle 版…...
PyTorch:神经网络的基本骨架 nn.Module的使用
神经网络的基本骨架 nn.Module的使用 为了更全面地展示如何使用 nn.Module 构建一个适用于现代图像处理任务的卷积神经网络(CNN),我们将设计一个针对手写数字识别(如MNIST数据集)的简单CNN模型。CNN非常适合处理图像数…...

学习threejs,使用CubeCamera相机创建反光效果
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️CubeCamera 立方体相机 二、…...

Linux网络——IO模型和多路转接
通常所谓的IO,其本质就是等待通信和进行通信,即IO 等 拷贝。 那么想要做到高效的IO,就要在单位时间内,减少“等”的比重。 一.五种IO模型 阻塞 IO: 在内核将数据准备好之前, 系统调用会一直等待. 所有的套接字, 默认都是阻塞方…...

跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向
在人工智能技术呈指数级发展的当下,大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性,吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型,成为释放其巨大潜力的关键所在&…...
Monorepo架构: Nx Cloud 扩展能力与缓存加速
借助 Nx Cloud 实现项目协同与加速构建 1 ) 缓存工作原理分析 在了解了本地缓存和远程缓存之后,我们来探究缓存是如何工作的。以计算文件的哈希串为例,若后续运行任务时文件哈希串未变,系统会直接使用对应的输出和制品文件。 2 …...

HTML版英语学习系统
HTML版英语学习系统 这是一个完全免费、无需安装、功能完整的英语学习工具,使用HTML CSS JavaScript实现。 功能 文本朗读练习 - 输入英文文章,系统朗读帮助练习听力和发音,适合跟读练习,模仿学习;实时词典查询 - 双…...

C++ Saucer 编写Windows桌面应用
文章目录 一、背景二、Saucer 简介核心特性典型应用场景 三、生成自己的项目四、以Win32项目方式构建Win32项目禁用最大化按钮 五、总结 一、背景 使用Saucer框架,开发Windows桌面应用,把一个html页面作为GUI设计放到Saucer里,隐藏掉运行时弹…...

简单聊下阿里云DNS劫持事件
阿里云域名被DNS劫持事件 事件总结 根据ICANN规则,域名注册商(Verisign)认定aliyuncs.com域名下的部分网站被用于非法活动(如传播恶意软件);顶级域名DNS服务器将aliyuncs.com域名的DNS记录统一解析到shado…...