BladeX开发入门(记录)

news/2024/11/19 13:44:45/文章来源:https://www.cnblogs.com/kk8085/p/18330133

BladeX 物联网平台是一款高度集成的物联网解决方案,涵盖设备管理、数据采集、实时监控、数据分析以及开放API服务等核心功能。

平台经过精心设计与开发,提供了全面的品类、产品和设备支持。设备注册成功后,能够轻松桥接至其他物联网云平台,实现设备的无缝集成。

同时提供服务端订阅功能,支持MQTT与AMQP两者方式将设备数据订阅转发至自建服务端,实现设备数据的自定义监控与分析。

官方环境要求

基础开发环境

  • Java: 17
  • NodeJs: 18
  • Maven: 3.6+
  • MySql: 5.7+
  • Redis: 5.0+
  • InfluxDB: 1.8.x+

IDE插件

  • Lombok Plugin (必装)
  • MybatisX Plugin (idea选装)

推荐IDE

  • 后端使用 IntelliJ IDEA
  • 前端使用 IntelliJ WebStorm

本机测试环境

操作系统:Windows 10

IDE使用:IntelliJ IDEA

前端使用:VSCODE

一、环境准备

1 下载安装JDK17

下载openjdk17,前往下载地址找到符合自己机器的版本并安装配置环境变量,三种推荐版本选其一或公司选型的Jdk均可

  • 下载地址(Azul Zulu):https://www.azul.com/downloads/?version=java-17-lts&package=jdk#zulu

  • 下载地址(Eclipse Temurin™):https://adoptium.net/zh-CN/temurin/releases/?version=17

  • 下载地址(Amazon Corretto):https://aws.amazon.com/cn/corretto/?filtered-posts.sort-by=item.additionalFields.createdDate&filtered-posts.sort-order=desc

 选择Azul Zulu,找到windows版本进行下载:

下载zip版本,加压缩,验证版本信息:

定位到<installation_folder>\bin目录,执行:java -version

 (可选)添加<installation_folder>\bin到您的PATH系统变量,以便您可以java从任何目录执行而无需指定完整路径:

我的电脑->属性->高级系统设置->环境变量->系统变量->Path->编辑

在打开的对话框中,添加bin文件夹路径(Azul Zulu 安装文件.zip文件解压到的目录)。

注意:确保bin文件夹位于列表顶部(避免多个jdk版本导致不生效)

 

 

2 安装Maven

由于电脑已经安装3.9.4版本,略过:

 

3 NodeJs

由于电脑已经安装18.16.0,略过:

 

4 安装MySQL(用docker可不安装)

(1) 下载

下载地址:https://dev.mysql.com/downloads/mysql/

默认是最新版本,可以选择下载msi或者zip:

 由于环境要求是5.7+,最后选择5.7版本的最新版本(根据网上的建议)

切换到档案Archives,选择5.7.44版本:

解压缩到目录下(my.ini是新建的,详见下文)

 (2) 配置

配置环境变量:将MySQL安装路径下的bin目录配置到Path变量中

Path添加:D:\Program Files\mysql\mysql-5.7.44-winx64\bin

在【安装目录】内,新建 my.ini 空文件,添加以下内容(替换【安装目录】):

[mysql]  
# 设置 mysql 客户端默认字符集  
default-character-set=utf8  [mysqld]  
#设置 3306 端口  
port = 3306  # 设置 mysql 的安装目录  
basedir= 【安装目录】# 设置 mysql 数据库的数据的存放目录  
datadir= 【安装目录】\data  # 允许最大连接数  
max_connections=200  # 服务端使用的字符集默认为 8 比特编码的 latin1 字符集  
character-set-server=utf8  # 创建新表时将使用的默认存储引擎  
default-storage-engine=INNODB

如下:

(3) 安装

以管理员身份运行cmd,进入到MySQL的bin目录,执行初始化命令:

mysqld --initialize --user=mysql --console

 该命令用来初始化数据,在5.7以前的版本是不需要执行该命令的。初始化完成后会提供一个临时的root密码,如下图红色方框,记下该密码:0uNDD&/lq<Tr

再执行如下命令进行MySQL服务安装:

mysqld –install mysql

mysql为默认的服务名,可不写,若安装成功则有如下提示:

 需要注意的是一定要以管理员身份运行cmd,否则会出现如下图所示提示:

(4) 启动

 启动服务

net start mysql

 当出现如下图所示提示时表示MySQL安装并启动成功。

MySQL5.7以前的版本在安装时不需要执行第四步中的mysqld –initialize命令,

5.7版本如果漏掉该命令后在此步骤会出现如下错误:

 因为该版本的压缩包里面有些文件和文件夹(如data文件夹)需要在执行mysqld -initialize命令后才创建。

(5) 登录

mysql -u root -p

提示输入密码,输入前面安装的时候记录下的密码,按回车后出现如下页面表示登录成功,并进入了MySQL命令行模式。

(6) 修改密码

ALTER USER ‘root’@’localhost’  IDENTIFIED BY ‘new_password’

 修改成功会提示:Query OK, 0 rows affected (0.00 sec)

注意:sql命令要以分号结束,如果第一次没有结束,第二行再次执行还是会报错,分号结束后再执行就正常了,如上图所示。

如果没有修改密码就执行其它的SQL命令,则会提示如下错误:

(7) 操作数据库

安装和启动已经完成后,可输入下列语句,显示已有数据库:

show databases;

 退出命令行模式,可输入以下任一一个命令:

exit
quit
\q

停止数据库服务,输入:

net stop mysql

 

5 Redis(用docker可不安装)

参考文档:https://blog.csdn.net/ljj20161221/article/details/135134670

Window下Redis的安装和部署详细图文教程(包含Redis Desktop Manage安装和使用):https://www.jb51.net/database/320870vp2.htm

 

6 安装Docker

使用docker挂在mysql、redis、influxdb,宿主机器可无需安装mysql、redis

下载地址:https://docs.docker.com/desktop/install/windows-install/

下载完后按照默认安装好,修改 docker desktop 配置

 1)开启WSL 2运行Docker,正常是默认开启的

 2)修改资源存储目录:

 3)配置国内镜像源,可以添加多个,json格式

"registry-mirrors": ["https://mirror.ccs.tencentyun.com","http://hub-mirror.c.163.com","https://registry.docker-cn.com"]

 具体可参考:https://blog.csdn.net/mst_sun/article/details/135087651

二、Bladex物联网平台工程运行

1、中间件运行

根据需要先创建挂载目录:

 注:以下命令在命令行中执行,为避免出现其他问题,建议以管理员身份运行

docker启动mysql并挂载文件(关闭大小写敏感)

docker run ^--name mysql -d -p 13306:3306 ^-v D:\develop\docker\data\mysql\data:/var/lib/mysql ^-v D:\develop\docker\data\mysql\conf:/etc/mysql/conf.d ^-e MYSQL_ROOT_PASSWORD=mysql123456 ^--privileged=true ^mysql:5.7.44 ^--lower_case_table_names=1

  注意:

  • 运行前先创建好目录:D:\develop\docker\data\mysql\data和D:\develop\docker\data\mysql\conf
  • 因本机安装了mysql,端口3306被占用,改用了13306
  • Windows下换行用^;Linux底下换行用\

创建数据库并导入sql:

  • 服务启动成功后打开数据库,创建数据库名bladex_iot(字符集采用utf8mb4)
  • 导入BladeX-Links工程根目录下/doc/sql文件夹的bladex.mysql.iot.create.sql文件与bladex.mysql.sys.create.sql

  以navicat为例,新建完后右键运行SQL文件,然后找到指定文件运行即可。  

  

docker启动redis(注意生产环境必须关闭端口映射并且设置密码)

docker run --name redis -d -p 6379:6379 -v D:\develop\docker\data\redis\data:/data redis:7.2.4

  注:开发环境就没设置密码了

docker启动influxdb并挂载数据

docker run -d --name influxdb ^-p 8086:8086 ^-v D:\develop\docker\data\influxdb:/var/lib/influxdb ^-e INFLUXDB_DB=links ^-e INFLUXDB_HTTP_AUTH_ENABLED=true ^-e INFLUXDB_ADMIN_USER=admin ^-e INFLUXDB_ADMIN_PASSWORD=links ^influxdb:1.8.10

可以在docker中看到启动情况:

2、 后端运行

(1)获取BladeX-Links代码,使用IDEA打开工程,点击maven刷新按钮下载依赖

  • 物联网平台底层基于BladeX架构开发,运行方式两者基本一致,在此之前推荐先查阅框架相关资料
  • 特别详细的步骤,请看https://www.kancloud.cn/smallchill/blade/1482370

(2)修改配置前先获取秘钥:

bladex-links\blade-server\src\test\java\org\springblade\test\Sm2KeyGenerator.java

bladex-links\blade-server\src\test\java\org\springblade\test\SignKeyGenerator.java

 右键运行:

 在输出中可以看到public-key和private-key

 sign-key和aes-key:

(3)修改BladeX-Links工程下的blade-server配置

修改application.yml配置文件,修改密钥保持与blade-broker一致

bladex-links\blade-server\src\main\resources\application.yml:

blade-server的端口号默认是80,根据实际情况选择是否修改(测试因80端口被占用,改用8099端口):

 

修改application-dev.yml配置文件,修改数据库、redis、influxdb、minio等配置

bladex-links\blade-server\src\main\resources\application-dev.yml:端口密码等配置信息根据自己安装时候的实际情况修改

 

(4)修改BladeX-Links工程下的blade-broker配置

修改application.yml配置文件,修改密钥保持与blade-server一致

bladex-links\blade-broker\src\main\resources\application.yml:

修改application-dev.yml配置文件,修改数据库、redis、influxdb、minio等配置

bladex-links\blade-broker\src\main\resources\application-dev.yml:

(5)启动服务端

启动BladeX-Links工程下的blade-broker模块的BrokerApplication启动类,看到如下日志,则说明启动成功

   ____  _           _     __   __    _     _       _|  _ \| |         | |    \ \ / /   | |   (_)     | || |_) | | __ _  __| | ___ \ V /    | |    _ _ __ | | _____|  _ <| |/ _` |/ _` |/ _ \ > <     | |   | | '_ \| |/ / __|| |_) | | (_| | (_| |  __// . \    | |___| | | | |   <\__ \|____/|_|\__,_|\__,_|\___/_/ \_\   |_____|_|_| |_|_|\_\___/:: SpringBlade :: blade-broker:dev :: Running SpringBoot 3.2.4 :: 2024-06-03 00:26:26.238  INFO 21536 --- [kground-preinit] o.h.validator.internal.util.Version      : HV000001: Hibernate Validator 8.0.1.Final
2024-06-03 00:26:26.265  INFO 21536 --- [           main] o.s.mqtt.broker.BrokerApplication        : Starting BrokerApplication using Java 17.0.10 with PID 21536 (/Users/chill/Workspaces/product/BladeX-IOT/blade-broker/target/classes started by chill in /Users/chill/Workspaces/product/BladeX-IOT)
2024-06-03 00:26:26.265 DEBUG 21536 --- [           main] o.s.mqtt.broker.BrokerApplication        : Running with Spring Boot v3.2.4, Spring v6.1.5
2024-06-03 00:26:26.266  INFO 21536 --- [           main] o.s.mqtt.broker.BrokerApplication        : The following 1 profile is active: "dev"
2024-06-03 00:26:26.887  INFO 21536 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode
2024-06-03 00:26:26.888  INFO 21536 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode.
2024-06-03 00:26:26.904  INFO 21536 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 9 ms. Found 0 Redis repository interfaces.
2024-06-03 00:26:26.956  WARN 21536 --- [           main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'mqttAccountMapper' and 'org.springblade.mqtt.broker.auth.mapper.MqttAccountMapper' mapperInterface. Bean already defined with the same name!
2024-06-03 00:26:26.956  WARN 21536 --- [           main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'mqttAuthLogMapper' and 'org.springblade.mqtt.broker.auth.mapper.MqttAuthLogMapper' mapperInterface. Bean already defined with the same name!
2024-06-03 00:26:26.957  WARN 21536 --- [           main] o.m.s.mapper.ClassPathMapperScanner      : Skipping MapperFactoryBean with name 'deviceMapper' and 'org.springblade.mqtt.broker.device.mapper.DeviceMapper' mapperInterface. Bean already defined with the same name!
2024-06-03 00:26:26.998  INFO 21536 --- [           main] s.c.l.p.BladePropertySourcePostProcessor : BladePropertySourcePostProcessor init.
2024-06-03 00:26:27.021  INFO 21536 --- [           main] s.c.l.p.BladePropertySourcePostProcessor : BladePropertySourcePostProcessor process @BladePropertySource bean.
2024-06-03 00:26:27.336  WARN 21536 --- [           main] io.undertow.websockets.jsr               : UT026010: Buffer pool was not set on WebSocketDeploymentInfo, the default pool will be used
2024-06-03 00:26:27.343  INFO 21536 --- [           main] io.undertow.servlet                      : Initializing Spring embedded WebApplicationContext
2024-06-03 00:26:27.343  INFO 21536 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1057 ms
2024-06-03 00:26:27.503  INFO 21536 --- [           main] c.a.d.s.b.a.DruidDataSourceAutoConfigure : Init DruidDataSource
2024-06-03 00:26:27.541  INFO 21536 --- [           main] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1} inited
2024-06-03 00:26:28.647  INFO 21536 --- [           main] n.d.i.m.core.server.MqttServerCreator    : Mica mqtt http api enable:false websocket enable:true
2024-06-03 00:26:29.059  INFO 21536 --- [           main] o.s.core.boot.config.RetryConfiguration  : configServerRetryInterceptor: Changing backOffOptions to initial: 1000, multiplier: 1.2, maxInterval: 5000
2024-06-03 00:26:29.072  INFO 21536 --- [           main] o.s.core.log.logger.BladeLogger          : blade-broker: BladeLogger init success!
2024-06-03 00:26:29.459  INFO 21536 --- [           main] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 1 endpoint(s) beneath base path '/actuator'
2024-06-03 00:26:29.633  INFO 21536 --- [           main] io.undertow                              : starting server: Undertow - 2.3.12.Final
2024-06-03 00:26:29.636  INFO 21536 --- [           main] org.xnio                                 : XNIO version 3.8.8.Final
2024-06-03 00:26:29.640  INFO 21536 --- [           main] org.xnio.nio                             : XNIO NIO Implementation Version 3.8.8.Final
2024-06-03 00:26:29.651  INFO 21536 --- [           main] org.jboss.threads                        : JBoss Threads version 3.5.0.Final
2024-06-03 00:26:29.668  INFO 21536 --- [           main] o.s.b.w.e.undertow.UndertowWebServer     : Undertow started on port 8888 (http)
2024-06-03 00:26:29.670  INFO 21536 --- [       Thread-1] org.tio.utils.timer.TimingWheelThread    : Starting
2024-06-03 00:26:29.670  INFO 21536 --- [sync-executor-1] o.s.core.launch.StartEventListener       : ---[BLADE-BROKER]---启动完成,当前使用的端口:[8888],环境变量:[dev]---
2024-06-03 00:26:29.672  INFO 21536 --- [           main] org.tio.server.TioServer                 : 
|----------------------------------------------------------------------------------------|
| TioConfig name    | BladeX-Mqtt-Server                                                 |
| Mica net version  | 1.0.0                                                              |
| Started at        | 2024-06-03 00:26:29                                                |
| Listen on         | 0.0.0.0:1883                                                       |
| Main Class        | org.springblade.mqtt.broker.BrokerApplication                      |
| Jvm start time    | 4318ms                                                             |
| Tio start time    | 2ms                                                                |
| Pid               | 21536                                                              |
|----------------------------------------------------------------------------------------|2024-06-03 00:26:29.673  INFO 21536 --- [           main] org.tio.server.TioServer                 : 
|----------------------------------------------------------------------------------------|
| TioConfig name    | BladeX-Mqtt-Server-HTTP/Websocket                                  |
| Mica net version  | 1.0.0                                                              |
| Started at        | 2024-06-03 00:26:29                                                |
| Listen on         | 0.0.0.0:8083                                                       |
| Main Class        | org.springblade.mqtt.broker.BrokerApplication                      |
| Jvm start time    | 4319ms                                                             |
| Tio start time    | 1ms                                                                |
| Pid               | 21536                                                              |
|----------------------------------------------------------------------------------------|2024-06-03 00:26:29.684  INFO 21536 --- [           main] o.s.mqtt.broker.BrokerApplication        : Started BrokerApplication in 3.669 seconds (process running for 4.348)
2024-06-03 00:26:29.957  INFO 21536 --- [-192.168.31.254] io.undertow.servlet                      : Initializing Spring DispatcherServlet 'dispatcherServlet'
2024-06-03 00:26:29.958  INFO 21536 --- [-192.168.31.254] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2024-06-03 00:26:29.958  INFO 21536 --- [-192.168.31.254] o.s.web.servlet.DispatcherServlet        : Completed initialization in 0 ms

 

启动BladeX-Links工程下的blade-server模块的ServerApplication启动类 ,看到如下日志,则说明启动成功

   ____  _           _     __   __    _     _       _|  _ \| |         | |    \ \ / /   | |   (_)     | || |_) | | __ _  __| | ___ \ V /    | |    _ _ __ | | _____|  _ <| |/ _` |/ _` |/ _ \ > <     | |   | | '_ \| |/ / __|| |_) | | (_| | (_| |  __// . \    | |___| | | | |   <\__ \|____/|_|\__,_|\__,_|\___/_/ \_\   |_____|_|_| |_|_|\_\___/:: SpringBlade :: blade-server:dev :: Running SpringBoot 3.2.4 :: 2024-06-03 00:26:26.462  INFO 21541 --- [kground-preinit] o.h.validator.internal.util.Version      : HV000001: Hibernate Validator 8.0.1.Final
2024-06-03 00:26:26.493  INFO 21541 --- [           main] org.springblade.ServerApplication        : Starting ServerApplication using Java 17.0.10 with PID 21541 (/Users/chill/Workspaces/product/BladeX-IOT/blade-server/target/classes started by chill in /Users/chill/Workspaces/product/BladeX-IOT)
2024-06-03 00:26:26.493 DEBUG 21541 --- [           main] org.springblade.ServerApplication        : Running with Spring Boot v3.2.4, Spring v6.1.5
2024-06-03 00:26:26.493  INFO 21541 --- [           main] org.springblade.ServerApplication        : The following 1 profile is active: "dev"
2024-06-03 00:26:27.153  INFO 21541 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode
2024-06-03 00:26:27.154  INFO 21541 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode.
2024-06-03 00:26:27.192  INFO 21541 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 32 ms. Found 0 Redis repository interfaces.
2024-06-03 00:26:27.237  WARN 21541 --- [           main] o.m.s.mapper.ClassPathMapperScanner      : No MyBatis mapper was found in '[org.springblade]' package. Please check your configuration.
2024-06-03 00:26:27.298  INFO 21541 --- [           main] s.c.l.p.BladePropertySourcePostProcessor : BladePropertySourcePostProcessor init.
2024-06-03 00:26:27.320  INFO 21541 --- [           main] s.c.l.p.BladePropertySourcePostProcessor : BladePropertySourcePostProcessor process @BladePropertySource bean.
2024-06-03 00:26:27.637  WARN 21541 --- [           main] io.undertow.websockets.jsr               : UT026010: Buffer pool was not set on WebSocketDeploymentInfo, the default pool will be used
2024-06-03 00:26:27.643  INFO 21541 --- [           main] io.undertow.servlet                      : Initializing Spring embedded WebApplicationContext
2024-06-03 00:26:27.643  INFO 21541 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1133 ms
2024-06-03 00:26:27.813  INFO 21541 --- [           main] c.a.d.s.b.a.DruidDataSourceAutoConfigure : Init DruidDataSource
2024-06-03 00:26:27.847  INFO 21541 --- [           main] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1} inited
2024-06-03 00:26:30.954  INFO 21541 --- [           main] o.s.core.boot.config.RetryConfiguration  : configServerRetryInterceptor: Changing backOffOptions to initial: 1000, multiplier: 1.2, maxInterval: 5000
2024-06-03 00:26:30.962  INFO 21541 --- [           main] o.s.core.log.logger.BladeLogger          : blade-server: BladeLogger init success!
2024-06-03 00:26:31.395  INFO 21541 --- [           main] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 1 endpoint(s) beneath base path '/actuator'
2024-06-03 00:26:31.866  INFO 21541 --- [           main] io.undertow                              : starting server: Undertow - 2.3.12.Final
2024-06-03 00:26:31.869  INFO 21541 --- [           main] org.xnio                                 : XNIO version 3.8.8.Final
2024-06-03 00:26:31.872  INFO 21541 --- [           main] org.xnio.nio                             : XNIO NIO Implementation Version 3.8.8.Final
2024-06-03 00:26:31.882  INFO 21541 --- [           main] org.jboss.threads                        : JBoss Threads version 3.5.0.Final
2024-06-03 00:26:31.899  INFO 21541 --- [           main] o.s.b.w.e.undertow.UndertowWebServer     : Undertow started on port 80 (http)
2024-06-03 00:26:31.901  INFO 21541 --- [sync-executor-1] o.s.core.launch.StartEventListener       : ---[BLADE-SERVER]---启动完成,当前使用的端口:[80],环境变量:[dev]---
2024-06-03 00:26:31.910  INFO 21541 --- [           main] org.springblade.ServerApplication        : Started ServerApplication in 5.638 seconds (process running for 5.923)
2024-06-03 00:26:32.271  INFO 21541 --- [-192.168.31.254] io.undertow.servlet                      : Initializing Spring DispatcherServlet 'dispatcherServlet'
2024-06-03 00:26:32.271  INFO 21541 --- [-192.168.31.254] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2024-06-03 00:26:32.273  INFO 21541 --- [-192.168.31.254] o.s.web.servlet.DispatcherServlet        : Completed initialization in 2 ms

 

注意: 

  • 由于采用Java17,Java 模块化系统(Java Module System)的安全限制导致的针对反射等场景有可能会出现如下错误:
    • Cause: java.lang.reflect.InaccessibleObjectException: Unable to make field protected java.lang.reflect.InvocationHandler java.lang.reflect.Proxy.h accessible: module java.base does not "opens java.lang.reflect" to unnamed module @223aa2f7
    • 解决方案:在启动参数中添加--add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.lang.reflect=ALL-UNNAMED

       

3、 前端运行

获取前端代码bladex-links-ui,根据自己的习惯选择IDE打开(本人使用VSCODE)。

修改website.js配置文件,bladex-links-ui\src\config\website.js(需要和后端保持一致):

blade-server默认为80端口,如果不是80端口,请修改vite.config.mjs中的proxy配置:

 然后再终端执行启动web端:

npm install
npm run dev

 

最终运行成功页面:

默认用户密码登录后:

 

<本文完>

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RabbitMq 入门应用 提升性能 : 算法多阶段并行 (Python)

大问题: 我们有一个算法,它可以被分为多个阶段进行(顺序不可颠倒),每个阶段的性能和资源要求不同(且不均衡程度比较高); 假设我们现在可以堆资源(较多的CPU和内存),如何将算法各个步骤拆分并进行性能均衡和实现,使得算法性能最大化以满足生产要求? 多进程: 由于算法有严…

Github使用技巧

1、怎么查找对应关系 一般查找对应关系,可以去阅读下面的说明: 2、0.20.Release版本不存在的问题如上图:根本不知道0.2.1.RELEASE对应的dubbo-spring-boot-start版本是多少,在maven仓库中根本没有这个版本 解释:这里需要我们点击这个版本,然后就会跳转到这个代码上,如…

微信小程序修改radio颜色

看效果: 代码:<radio-group @change="onRadioChange"><label><radio value="同意" style="margin-right: 30rpx">同意</radio></label><label><radio value="不同意">不同意</radio&g…

springboot对接dubbo遇到的巨坑

1、添加配置jar包<dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>2.7.4.1</version></dependency><dependency><groupId>org.apache.dubbo</gr…

一款高性价比4g工业路由器,配置简单,网络覆盖强

​各位老铁,今天给大家介绍一下SR600这款工业级4G路由器。这玩意儿是专门为工业环境设计的,比如说化工厂、矿场这种恶劣环境,普通路由器根本扛不住。先说说SR600的硬件配置:处理器: 工业级CPU,厂家没透露具体型号,但性能够用内存: 128MB,满足工业控制需求存储: 16MB Flash,可扩…

VS Code 的SSH连接不成功问题分析与解决

问题描述:多次输入密码,一直连接不上 解决方法; 打开远程服务器中~/.vscode-server/bin/xxx文件夹,此时可以看到一个名为vscode-server.tar.gz,截图如下:上面的37开头的文件夹称为Commit Id,现在利用Commit ID下载远程连接需要的文件。使用这个链接: https://update.cod…

「FJWC2020Day5-zzq」rng 题解

题意简述 一个长度为 \(n\) 的实数序列 \(a_i\),其中 \(a_i\) 为 \([l_i, r_i]\) 中独立均匀随机选取的实数。你只能通过交换相邻两个数,使得 \(a_i\) 单调不降。你需要求出你最少操作次数的期望,对 \(M = 998244353\) 取模。 \(1 \leq n \leq 10^6\),\(0 \leq l_i \lt r_i…

wpf ToggleButton选中效果和一个登录界面

先看效果 我修改了ToggleButton的ControlTemplate,在ContentPresenter外面加了4个Border,控制4个Border的位置在ControlTemplate的左上、右上、左下、右下,选中时,触发4个边框的BorderThickness <Setter Property="BorderThickness&qu…

WindowSystemEvent

Qt中为WindowSystemEvent事件定义了处理函数Handler,通过宏定义和模版来声明定义 ---- QT_DEFINE_QPA_EVENT_HANDLER Matches (25 in 1 files) ---- qwindowsysteminterface.cpp (gui\kernel) line 199 : #define QT_DEFINE_QPA_EVENT_HANDLER(ReturnType, HandlerName, ...) …

基础数据结构之递归

递归 1) 概述 定义 计算机科学中,递归是一种解决计算问题的方法,其中解决方案取决于同一类问题的更小子集In computer science, recursion is a method of solving a computational problem where the solution depends on solutions to smaller instances of the same probl…

JAVA的数组基本用法

array 在声明数组变量时,需要指出数组类型和数组变量名,例如int[] a;不过这条语句只是声明了变量a,并没有将a初始化为一个真正的数组。应该使用new操作符来创建数组。 int[] a = int[100]或者var a = new int[100]数组长度不要求是常数 但是一旦创建了数组,就不能再改变它的…

Unity DatePicker用法,实现UI的日期/时间选择器功能

前言 用Unity3d做一个类似于选时间段,查询数据并展示统计UI的功能 插件 https://assetstore.unity.com/packages/tools/gui/datepicker-for-unityui-68264 样例效果 弹出日期选择器时间范围选择器包含类型 Shared Calendar 共享的日历,这个就是几个选择器共用一个日历来选择时…