java运维部署操作手册

news2025/1/23 18:14:47

    关闭防火墙

不管是windows还是linux,首先必须关闭防火墙

# linux添加8080端口
firewall-cmd --zone=public --add-port=8080/tcp --permanent

#删除80端口
firewall-cmd --zone=public --remove-port=8080/tcp --permanent

# 刷新使端口立即生效
firewall-cmd --reload

JDK8安装

windows

找到【jdk-8u251-windows-x64.exe】,然后双击,一直点击【下一步】就行,不需要做任何修改,也不要修改安装路径。安装结束后,使用【CMD】命令,然后输入【java -version】,然后回车。出现了下面的版本号就表示JDK8安装完成。

linux安装

tar -zxvf jdk-8u144-linux-x64.tar.gz
vim /etc/profile
在文本的最后一行粘贴如下:
注意JAVA_HOME=/usr/java/jdk1.8.0_144 就是你自己的目录
#java environment
export JAVA_HOME=/usr/java/jdk1.8.0_144
export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
export PATH=$PATH:${JAVA_HOME}/bin
然后按esc,输入【:wq】
然后输入source /etc/profile
再次输入java -version

mysql修改用户名账号密码

# 修改root账号密码
set password for 'root'@'localhost'=password('Rays@145!');
flush privileges;

set password for 'root'@'%'=password('Rays@145!');
flush privileges;


# 创建新用户并且授权
grant all privileges on *.* to 'ecs'@'%' identified by 'Rays@149!';
flush privileges;


# 如果修改或使用新的账号来连接canal,需要删除canal中的dat配置文件

mysql安装

windows

找到【mysql-installer-community-8.0.28.0.msi】,然后双击。

密码验证方式(Authentication Method)这一步很重要

第一个是强密码校验,mysql推荐使用最新的数据库和相关客户端,MySQL8换了加密插件,所以如果选第一种方式,很可能你的navicat等客户端连不上mysql8。

所以这里一定要选第二个(下图红框的地方),因为我们后面使用客户端navicat,它连接mysql数据库用的是就是这个加密算法,所以这一步很重要。(重要的事情说三遍)

设置的密码为统一的密码,统一密码在文档顶部。 

 如果出现下图红框的警告,表示名称重复了,换个其他名称

linux安装 

sudo yum localinstall https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm
sudo yum install mysql-server
sudo service mysqld start
service mysqld status
# 默认没有密码
mysql -uroot -p
直接回车,然后输入命令 flush privileges
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Rays@135!';
ALTER USER 'root'@'%' IDENTIFIED BY 'Rays@135!';
# create user rrays@'%' identified by 'Rays@135!';
GRANT ALL PRIVILEGES ON *.* TO rrays;
flush privileges;
sudo service mysqld stop


在etc下新建my.cnf文件,如果my.cnf已经存在不要删除,也不要修改已经有的配置,添加自己的配置在下面即可。
vim /etc/my.cnf
[mysqld]
port=3306
user=mysql
ft_min_word_len=1
innodb_ft_min_token_size=1
ft_stopword_file=('')
default-time-zone='+8:00'
max_allowed_packet=500M
character-set-server=utf8mb4
default-storage-engine=INNODB
default_authentication_plugin=mysql_native_password 
default-character-setVariable=utf8mb4
max_connections=1000
max_connect_errors=100
max_user_connections=500
lower_case_table_names=1
interactive_timeout=1800
wait_timeout=1800
lock_wait_timeout=3600
table_open_cache=128
key_buffer_size=268435456
sort_buffer_size=16777208
table_cache=512M
innodb_log_buffer_size=64M
innodb_additional_mem_pool_size=60M
innodb_thread_concurrency=14
query_cache_size=4096M
query_cache_min_res_unit=1048576
innodb_buffer_pool_size=5G
innodb_buffer_pool_instances=-1
innodb_io_capacity=4500




# 关闭mysql8的ssl,执行下面的语句,可以看到ssl是打开的
SHOW VARIABLES LIKE '%ssl%';
| have_openssl | YES |
| have_ssl | YES |

# 停止mysql服务
$ service mysql stop

修改配置,找到自己安装的my.cnf文件,下面的路径只是demo
File: /path/to/file/my.cnf

# 增加skip_ssl
skip_ssl
# 注释掉disable_ssl
# disable_ssl

# 重启服务
$ service mysql restart

 sqlserver安装

 

 

 安装到指定的目录或者采用默认安装即可。

 密码请输入统一的密码

选择当前用户即可。 

 

 

安装好之后连接MYSQL数据库,修改root账号连接为所有机器可连接。如果不修改,其它机器是无法通过root账号连接mysql的。 

-- 一定要在安装的mysql机器上安装navicat,mysql默认不能其它路径访问
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';

FLUSH PRIVILEGES;

 修改完之后,一定要使用navicat新建一个通过IP连接的连接来测试是否可以连接,比如在自己的电脑上,插上网线,保证自己的电脑和MYSQL所在的机器在同一个IP网段内。

canal-server安装 

复制【canal-server-prod】文件夹到需要安装的地方。

然后打开【canal-server-prod\canal\conf\ecs\instance.properties】文件,txt编辑或者editplus或vscode工具都行。

启动只需要双击【startup.bat】即可。数据库都没有导入前不要启动。

修改程序的配置文件

修改配置文件中的所有数据库和redis的连接地址,端口,密码。修改服务间的调用的IP

 redis安装

windows

直接双击【Redis-x64-7.0.2.exe】就行,一步一步安装。

安装完成后不要启动,然后在进程中找到【redis-server.exe】,然后结束任务。如果没有忽略该步骤。

修改密码方法:--------------------------------必须修改密码

在计划任务中暂时停止Auto_Run_RedisServer【没有忽略】

在任务管理器中停止redis-server.exe进程

# 以下2个文件都要修改
# 修改安装文件中的conf文件(redis.windows-service.conf 和redis.windows.conf)中 905行
# requirepass foobared
# 将前面的#号移除即可实现设置密码的效果。如:
requirepass Rays@123!
# 则密码为Rays@123!

在计划任务中启用Auto_Run_RedisServer服务,如果没有该服务直接双击【RunRedisServer.exe】即可启动

至此,修改密码步骤完成。

redis客户端工具安装

双击【redisdesktop.exe】软件,一直按照提示安装即可,安装完成后记得连接redis,测试一下。

 linux安装

Redis下载地址:https://redis.io/download/,或者使用命令直接下载:

cd /opt/software
wget http://download.redis.io/releases/redis-7.0.6.tar.gz

yum install gcc

# 解压
tar -zxvf redis-7.0.6.tar.gz
cd redis-7.0.6
# 编译安装
make

# 修改配置文件
port 6380
# 注释掉
# bind 127.0.0.1 
pidfile /var/run/redis_6380.pid
requirepass iot#2023!
# 增加redis callback功能
notify-keyspace-events Ex

# 后台启动命令
/opt/redis-7.0.6/src/redis-server /opt/redis-7.0.6/redis.conf --daemonize yes
# 关闭命令
pkill redis-server
kill redis-server进程号
# 查看进程id
ps -ef|grep redis
kill -9 进程id

MYSQL新建数据库

设置字符集

MYSQL导入数据库脚本

SQLSERVER新建数据库

应用程序打包部署

dys-server部署

打包后jar文件地址

Windows机器发布

进入到wharfIntf.jar所在的文件夹,在空白处右键,选择【在终端中打开】,然后输入启动命令,其中的test为自己需要启动连接的环境。

java -Xms512m -Xmx512m -XX:PermSize=128m -jar wharfIntf.jar --spring.profiles.active=test

关闭服务

Windows关闭服务比较简单,直接关闭CMD窗口就行。

windows启动关闭命令

启动脚本

1、新建一个txt文件,把下面的命令复制进去

2、修改文件中对应的jar包名称和jar包路径

3、保存

4、将startup.txt文件修改为后缀为startup.bat文件

5、双击运行

6、不会有任何窗口弹出,都是后台隐藏式运行。

7、等待20秒到1分钟左右,打开浏览器输入http://ip:pot/项目名/test/welcome

8、如果看到有返回的json消息,说明项目启动成功。也可以查看启动日志。

@echo off

setlocal enabledelayedexpansion
for /f "tokens=1" %%a in ('jps ^| findstr dyecs.jar') do taskkill /f /pid %%a

start javaw -Xms512m -Xmx1024m -jar D:\server\dyecs.jar --spring.profiles.active=prod > D:\server\logs\dyecs.log 2>&1 &

exit

停止脚本

只要修改7070为自己项目的端口号

@echo off
set port=7070
for /f "tokens=1-5" %%i in ('netstat -ano^|findstr ":%port%"') do (
 echo kill the process %%m who use the port 
 taskkill /pid %%m -t -f
 goto q
)
:q

重启脚本

注意修改端口号,项目名称,项目路径,启动环境

@echo off
set port=7070
for /f "tokens=1-5" %%i in ('netstat -ano^|findstr ":%port%"') do (
 echo kill the process %%m who use the port 
 taskkill /pid %%m -t -f
 goto start
)
:start
  
START "wharfmng" javaw -Xms512m -Xmx512m -XX:PermSize=128m -jar D:/java_code/wharfmng/target/wharfmng.jar --spring.profiles.active=dev

备注

1、一般把这三个文件,放在和jar包同级目录

Linux启动命令脚本

启动命令

1、根据自己的项目地址,修改对应的路径和项目名称

2、把下面的命令复制到新建的startup.txt文件中,然后修改文件为startup.sh

3、把文件上传到需要的文件夹下,下文的demo中,需要把startup.sh文件保存在/home/wharfmng-server/startup.sh

4、上传完文件后,需要修改对应的文件夹和文件的权限为777

nohup java -jar -Xms512m -Xmx512m -XX:PermSize=128m /home/wharfmng-server/wharfmng-service/wharfmng.jar --spring.profiles.acive=prod >> /dev/null 2>&1 &

5、给文件夹赋予777读写权限,只有第一次新建文件或文件夹,或者删除了文件,修改了文件名之后重新上传文件,都需要赋权777.

chmod -R 777 /home/wharfmng-server

6、准备好之后,启动命令如下

sh /home/wharfmng-server/startup.sh

7、查看日志

tail -f /home/wharfmng-server/logs/wahrfmng.log

8、退出日志查看,直接同时按下Ctrl+C按键就行。

停止命令 

ps -ef|grep java回车
root 54345 1 15 15:43 pts/0 00:03:08 java -Xms512m -Xmx512m -XX:Perm Size=128m -jar /home/wharfmng-server/wharfmng-service/wharfmng.jar --spring.profiles.active=prod
#注意查看进程ID,ID每次都会变,不要关闭其它的项目
#如果要关闭54345的进程
kill -9 54345回车

结束

-----华丽的分割线,以下是凑字数,大家不用花时间看,快去改代码-----

-----华丽的分割线,以下是凑字数,大家不用花时间看,快去改代码-----

-----华丽的分割线,以下是凑字数,大家不用花时间看,快去改代码-----

package cn.renkai721.bean.vo;

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class MakeUpTheWordCount {

    private String make_up_the_word_count_column_999999999_1;
    private String make_up_the_word_count_column_999999999_2;
    private String make_up_the_word_count_column_999999999_3;
    private String make_up_the_word_count_column_999999999_4;
    private String make_up_the_word_count_column_999999999_5;
    private String make_up_the_word_count_column_999999999_6;
    private String make_up_the_word_count_column_999999999_7;
    private String make_up_the_word_count_column_999999999_8;
    private String make_up_the_word_count_column_999999999_9;
    private String make_up_the_word_count_column_999999999_10;
    private String make_up_the_word_count_column_999999999_11;
    private String make_up_the_word_count_column_999999999_12;
    private String make_up_the_word_count_column_999999999_13;
    private String make_up_the_word_count_column_999999999_14;
    private String make_up_the_word_count_column_999999999_15;
    private String make_up_the_word_count_column_999999999_16;
    private String make_up_the_word_count_column_999999999_17;
    private String make_up_the_word_count_column_999999999_18;
    private String make_up_the_word_count_column_999999999_19;
    private String make_up_the_word_count_column_999999999_20;

    public String getMake_up_the_word_count_column_999999999_1() {
        return make_up_the_word_count_column_999999999_1;
    }

    public void setMake_up_the_word_count_column_999999999_1(String make_up_the_word_count_column_999999999_1) {
        this.make_up_the_word_count_column_999999999_1 = make_up_the_word_count_column_999999999_1;
    }

    public String getMake_up_the_word_count_column_999999999_2() {
        return make_up_the_word_count_column_999999999_2;
    }

    public void setMake_up_the_word_count_column_999999999_2(String make_up_the_word_count_column_999999999_2) {
        this.make_up_the_word_count_column_999999999_2 = make_up_the_word_count_column_999999999_2;
    }

    public String getMake_up_the_word_count_column_999999999_3() {
        return make_up_the_word_count_column_999999999_3;
    }

    public void setMake_up_the_word_count_column_999999999_3(String make_up_the_word_count_column_999999999_3) {
        this.make_up_the_word_count_column_999999999_3 = make_up_the_word_count_column_999999999_3;
    }

    public String getMake_up_the_word_count_column_999999999_4() {
        return make_up_the_word_count_column_999999999_4;
    }

    public void setMake_up_the_word_count_column_999999999_4(String make_up_the_word_count_column_999999999_4) {
        this.make_up_the_word_count_column_999999999_4 = make_up_the_word_count_column_999999999_4;
    }

    public String getMake_up_the_word_count_column_999999999_5() {
        return make_up_the_word_count_column_999999999_5;
    }

    public void setMake_up_the_word_count_column_999999999_5(String make_up_the_word_count_column_999999999_5) {
        this.make_up_the_word_count_column_999999999_5 = make_up_the_word_count_column_999999999_5;
    }

    public String getMake_up_the_word_count_column_999999999_6() {
        return make_up_the_word_count_column_999999999_6;
    }

    public void setMake_up_the_word_count_column_999999999_6(String make_up_the_word_count_column_999999999_6) {
        this.make_up_the_word_count_column_999999999_6 = make_up_the_word_count_column_999999999_6;
    }

    public String getMake_up_the_word_count_column_999999999_7() {
        return make_up_the_word_count_column_999999999_7;
    }

    public void setMake_up_the_word_count_column_999999999_7(String make_up_the_word_count_column_999999999_7) {
        this.make_up_the_word_count_column_999999999_7 = make_up_the_word_count_column_999999999_7;
    }

    public String getMake_up_the_word_count_column_999999999_8() {
        return make_up_the_word_count_column_999999999_8;
    }

    public void setMake_up_the_word_count_column_999999999_8(String make_up_the_word_count_column_999999999_8) {
        this.make_up_the_word_count_column_999999999_8 = make_up_the_word_count_column_999999999_8;
    }

    public String getMake_up_the_word_count_column_999999999_9() {
        return make_up_the_word_count_column_999999999_9;
    }

    public void setMake_up_the_word_count_column_999999999_9(String make_up_the_word_count_column_999999999_9) {
        this.make_up_the_word_count_column_999999999_9 = make_up_the_word_count_column_999999999_9;
    }

    public String getMake_up_the_word_count_column_999999999_10() {
        return make_up_the_word_count_column_999999999_10;
    }

    public void setMake_up_the_word_count_column_999999999_10(String make_up_the_word_count_column_999999999_10) {
        this.make_up_the_word_count_column_999999999_10 = make_up_the_word_count_column_999999999_10;
    }

    public String getMake_up_the_word_count_column_999999999_11() {
        return make_up_the_word_count_column_999999999_11;
    }

    public void setMake_up_the_word_count_column_999999999_11(String make_up_the_word_count_column_999999999_11) {
        this.make_up_the_word_count_column_999999999_11 = make_up_the_word_count_column_999999999_11;
    }

    public String getMake_up_the_word_count_column_999999999_12() {
        return make_up_the_word_count_column_999999999_12;
    }

    public void setMake_up_the_word_count_column_999999999_12(String make_up_the_word_count_column_999999999_12) {
        this.make_up_the_word_count_column_999999999_12 = make_up_the_word_count_column_999999999_12;
    }

    public String getMake_up_the_word_count_column_999999999_13() {
        return make_up_the_word_count_column_999999999_13;
    }

    public void setMake_up_the_word_count_column_999999999_13(String make_up_the_word_count_column_999999999_13) {
        this.make_up_the_word_count_column_999999999_13 = make_up_the_word_count_column_999999999_13;
    }

    public String getMake_up_the_word_count_column_999999999_14() {
        return make_up_the_word_count_column_999999999_14;
    }

    public void setMake_up_the_word_count_column_999999999_14(String make_up_the_word_count_column_999999999_14) {
        this.make_up_the_word_count_column_999999999_14 = make_up_the_word_count_column_999999999_14;
    }

    public String getMake_up_the_word_count_column_999999999_15() {
        return make_up_the_word_count_column_999999999_15;
    }

    public void setMake_up_the_word_count_column_999999999_15(String make_up_the_word_count_column_999999999_15) {
        this.make_up_the_word_count_column_999999999_15 = make_up_the_word_count_column_999999999_15;
    }

    public String getMake_up_the_word_count_column_999999999_16() {
        return make_up_the_word_count_column_999999999_16;
    }

    public void setMake_up_the_word_count_column_999999999_16(String make_up_the_word_count_column_999999999_16) {
        this.make_up_the_word_count_column_999999999_16 = make_up_the_word_count_column_999999999_16;
    }

    public String getMake_up_the_word_count_column_999999999_17() {
        return make_up_the_word_count_column_999999999_17;
    }

    public void setMake_up_the_word_count_column_999999999_17(String make_up_the_word_count_column_999999999_17) {
        this.make_up_the_word_count_column_999999999_17 = make_up_the_word_count_column_999999999_17;
    }

    public String getMake_up_the_word_count_column_999999999_18() {
        return make_up_the_word_count_column_999999999_18;
    }

    public void setMake_up_the_word_count_column_999999999_18(String make_up_the_word_count_column_999999999_18) {
        this.make_up_the_word_count_column_999999999_18 = make_up_the_word_count_column_999999999_18;
    }

    public String getMake_up_the_word_count_column_999999999_19() {
        return make_up_the_word_count_column_999999999_19;
    }

    public void setMake_up_the_word_count_column_999999999_19(String make_up_the_word_count_column_999999999_19) {
        this.make_up_the_word_count_column_999999999_19 = make_up_the_word_count_column_999999999_19;
    }

    public String getMake_up_the_word_count_column_999999999_20() {
        return make_up_the_word_count_column_999999999_20;
    }

    public void setMake_up_the_word_count_column_999999999_20(String make_up_the_word_count_column_999999999_20) {
        this.make_up_the_word_count_column_999999999_20 = make_up_the_word_count_column_999999999_20;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1101773.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

成集云 | 1药城对接英克ERP | 解决方案

方案介绍 1药城是中国一家知名的互联网医药零售平台,提供在线药品购买及健康服务。1药城致力于为用户提供方便、安全、优质的购药体验,同时与各大医疗机构合作,为用户提供在线挂号、预约就诊等服务。 英克ERP系统是由英克公司开发的企业资源…

uniapp(uncloud) 使用生态开发接口详情3(新增产品分类,产品列表,新闻列表)

我的想法是有产品分类,产品列表,新闻咨询,新闻列表 项目中, uniCloud > database 目录下新建 sy_product_nav.schema.json // 代码如下 {"bsonType": "object","required": ["classname"],"permission": {"read&…

瓷器文玩经营商城小程序的作用是什么

瓷器文玩商品受到不少人喜欢,无论是高价值物品还是低价饰品,都有较高需求,然而随着线下流量匮乏及线上互联网发展,传统瓷器文玩品牌店也面临着一些难题。 私域是近几年的热词,也有不少品牌基于私域取得了成功&#xf…

uniapp:使用subNVue原生子窗体在map上层添加自定义组件

我们想要在地图上层添加自定义组件,比如一个数据提示框,点一下会展开,再点一下收起,在h5段显示正常,但是到app端真机测试发现组件显示不出来,这是因为map是内置原生组件,层级最高,自…

流程挖掘助力企业数字化转型:CBPM 2023圆桌论坛圆满召开

9月23日至24日,由山东科技大学、山东大学、中国石油大学和中国海洋大学联合承办,RPA中国、山东理工大学、青岛大学协办的第十三届中国业务过程管理大会(CBPM 2023)成功举办! 本次会议共有100余位来自国内外高校和科研…

《低代码指南》——AI低代码维格云架构视图怎么用?

架构视图是一个展示信息层级关系的视图,轻轻拖拽卡片,就能搭建精巧缜密的企业组织架构视图、实现信息结构化。 利用好架构视图,可以很好地解决以下场景: 展示企业/团队的组织关系 可视化管理产品开发架构 统筹全员 OKR 完成情况 架构视图的基础知识​ 架构视图分为以下几个…

深度学习入门(一)之感知机

文章目录 前言什么是感知机简单的逻辑电路与门与非门和或门 感知机的实现简单的实现导入权重和偏置 感知机的局限性异或门线性和非线性 多层感知机已有门电路的组合异或门的实现 代码合集 前言 感知机是由美国学者1957年提出来,作为神经网络的起源算法。因此学习感…

基于jsp+ssm+springboot的高校校园点餐系统【毕业论文+源码】

摘 要 21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识,科学化的管理,使信息存…

非技术背景项目经理如何发展?

非技术背景的项目经理在现代企业中扮演着重要的角色,他们负责协调和管理项目的各个方面,确保项目按时、按预算和按质量要求完成。对于没有技术背景的项目经理来说,他们需要通过一些特定的方法和策略来发展自己的职业生涯。 首先,…

七大排序的顶级理解(近万字详解)

目录 1. 排序的概念及引用 2.常见的排序算法 2.1直接插入排序 2.2希尔排序( 缩小增量排序 ) 2.3选择排序 2.4堆排序 2.5冒泡排序 2.6快速排序 2.6.1Hoare版 2.6.2挖坑法 2.6.3前后指针 2.7快速排序优化 2.7.1递归优化 2.7.2非递归实现快速排序 2.8归并排序 …

k8s-19 资源限制与监控

资源限制 上传镜像 limitrange 创建pod 自动添加限制 limitrage 是给所有的pod 都加range 自定义限制的pod也需要在limitrange定义的区间内 资源限制 创建的ResourceQuota对象将在default名字空间中添力头下限制:每个容器必须设置内存请求(memory request),内存限…

苹果手机视频误删怎么恢复?这3个方法分享给大家!

在手机相册中,除了照片,其余占据空间最多的便是视频了。视频和照片一样,都是我们用来记录生活的一种方式。在这个盛行短视频的时代,越来越多小伙伴喜欢在各个平台分享自己的生活。 对于他们或者是一些职业博主来说,视…

模拟IIC通讯协议(stm32)(硬件iic后面在补)

一、IIC基础知识总结。 (1)IIC通讯需要两条线就可以,SCL、SDA。 (2)IIC的数据传输的速率,不同的ic是不同的,根据电平维持的延时函数的时间来确定IIC数据传输的速率. (3)I…

16603/16604系列噪声源

仪器仪表苏州新利通 16603/16604系列噪声源 16603/16604 series noise sources 噪声源是一种能产生随机连续频谱信号的装置 国产思仪噪声源 01 产品综述 噪声源是一种能产生随机连续频谱信号的装置,良好的噪声源应在规定的频带内具有稳定的输出噪声功率和均匀的功…

QT10_16

X-mind #include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {this->resize(536,412);this->setWindowTitle(" 坤坤之家");this->setWindowIcon(QIcon("D:/Ubuntushare/preview.gif"));this->setWindowFlag…

工业机器视觉系统构成及功能

工业机器视觉系统构成及功能 工业机器视觉系统由光源、光学传感器、图像采集设备、图像处理设备、机器视觉软件、辅助传感器、控制单元和执行机构等组件构成。 光源提供光线以辅助图像获取。 光学传感器将外部场景转换为电信号。 图像采集设备将信号转换为图像数据&#xf…

F. Minimum Maximum Distance Codeforces Round 903 (Div. 3)

Problem - F - Codeforces 题目大意&#xff1a;有一棵n个点的树&#xff0c;其中有k个标记点&#xff0c;令点i到所有标记点的最远距离为fi&#xff0c;问所有点中fi的最小值是多少 1<k<n<2e5 思路&#xff1a;我们首先考虑取得最小值的点在哪&#xff0c;我们假设…

MatrixOne Logtail 设计解析

Logtail 是 CN&#xff08;Computation Node&#xff09;与 TN&#xff08;Transaction Node&#xff09;之间的一种日志同步协议&#xff0c;是 CN 和 TN 协同工作的基础。本文将介绍 logtail 协议的基本定位&#xff0c;协议内容和产生过程&#xff0c;也会提及一些遇到的挑战…

银河麒麟服务器x86安装qemu虚拟机

安装虚拟机 桌面右键&#xff0c;选择在终端中打开 输入下面的脚本 yum install -y virt-viewer virt-v2v libvirt* qemu* virt-manager 等待安装完成 安装成功 打开虚拟机软件 新建虚拟机&#xff0c;以windows server 2019为例 选择镜像 点击前进 点击&#xff1a;是 设置…

springboot实战(十)之全网最全RabbitMQ集成

序言 首先我要抛出几个问题让大家思考一下&#xff1a;为什么你的项目中要用MQ呢&#xff1f;使用MQ为你解决了什么问题&#xff1f;当然解决问题的同时它又有哪些弊端值得注意&#xff1f; 如果你不太清楚或者你根本没有考虑过&#xff0c;那么请往下看你会找到你想要的答案。…