电商---part02 项目环境准备
1.虚拟机环境
可以通过VMWare来安装,但是通过VMWare安装大家经常会碰到网络ip连接问题,为了减少额外的环境因素影响,Docker内容会通过VirtualBox结合Vagrant来安装虚拟机。
VirtualBox官网:https://www.virtualbox.org/
Vagrant官网:https://www.vagrantup.com/
Vagrant镜像仓库:https://app.vagrantup.com/boxes/search
安装VirtualBox和Vagrant,傻瓜式安装。安装完成后需要重启计算机。
在cmd命令窗口输入 vagrant 命令弹出如下内容表示 vagrant 安装成功

通过Vagrant安装虚拟机:
- 创建一个空的目录,cmd切换到该目录中,然后执行
vagrant init centos/7会创建Vagrantfile文件 - 执行
vagrant up第一次执行的时候会远程下相关的镜像文件,并启动虚拟机。 - 连接虚拟机通过
vagrant ssh连接

网络配置:
找到对应的Vagrantfile文件

查看当前主机给虚拟机分配的网关的网段:

所以修改后的ip为:192.168.56.10
重启测试:需要提供私钥

私钥地址:

搞定
2.Docker环境

参考官方文档安装:https://docs.docker.com/engine/install/centos/
卸载原有的环境:
sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine
安装对应的依赖环境和镜像地址
sudo yum install -y yum-utilssudo yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repo
安装过慢设置镜像
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
直接安装docker CE
sudo yum install -y docker-ce docker-ce-cli containerd.io


表示安装成功
启动docker服务
sudo systemctl start docker
查看docker的版本
sudo docker version

补充:通过官方的镜像地址下载docker会比较慢,
配置阿里云的镜像地址:
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum更新下即可:
yum makecache fast
开机启动docker
sudo systemctl enable docker
3.基本软件安装
3.1 MySQL数据库安装
项目软件统一安装在 /mydata 目录下
docker拉取镜像命令
docker pull mysql:5.7
docker安装MySQL命令
docker run -p 3306:3306 --privileged=true --name mysql -v /mydata/mysql/log:/var/log/mysql -v /mydata/mysql/data:/var/lib/mysql -v /mydata/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
修改MySQL的配置文件 vim /mydata/mysql/conf/my.cnf
[client]
default-character-set=utf8[mysql]
default-character-set=utf8[mysqld]
init_connect="SET collation_connection = utf8_unicode_ci"
init_connect="SET NAMES utf8"
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
3.2 Redis安装
拉取Redis最新版本镜像
docker pull redis
先创建对应的Redis的映射配置文件
mkdir -p /mydata/redis/conf
touch /mydata/redis/conf/redis.conf
创建容器命令
docker run -d -p 6379:6379 --name mall-redis -v /mydata/redis/data:/data -v /mydata/redis/conf:/etc/redis redis redis-server /etc/redis/redis.conf
启动后测试连接:
[root@manager-node conf]# docker exec -it 4e redis-cli
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379>
更新redis配置文件:见课程附件
设置容器自启动
[root@localhost ~]# docker update --restart=always mysql
mysql
[root@localhost ~]# docker update --restart=always mall-redis
mall-redis
4.开发环境
4.1 环境版本
JDK环境

开发工具:IDEA2021 VSCode

4.2 Git安装
配置信息
git config --global user.name "bobo" git config --global user.email "dengpbs@163.com"
关联Gitee码云
ssh-keygen -t rsa -C "dengpbs@163.com"
生成对应的公钥和私钥,在用户目录下
$ ssh-keygen -t rsa -C "dengpbs@163.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/dpb/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/dpb/.ssh/id_rsa
Your public key has been saved in /c/Users/dpb/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:O+fr8mOR1GSB0GHJXS5s3ZYbq3qX9vvkCq4immGzCv8 dengpbs@163.com
The key's randomart image is:
+---[RSA 3072]----+
| .+o=.o. |
| .=.+o ..|
| ++ ooo|
| .... .+|
| S. . o |
| .o . |
|. + o .... o|
| o . =. o+o..o * |
| ooE. . **=o +oB|
+----[SHA256]-----+
然后把公钥中的内容复制到码云中去

保存即可
然后通过 ssh -T git@gitee.com来连接测试
dpb@DESKTOP-NM4KFCE MINGW64 /d/desktop
$ ssh -T git@gitee.com
The authenticity of host 'gitee.com (180.97.125.228)' can't be established.
ED25519 key fingerprint is SHA256:+ULzij2u99B9eWYFTw1Q4ErYG/aepHLbu96PAUCoV88.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'gitee.com' (ED25519) to the list of known hosts.
Hi 邓澎波! You've successfully authenticated, but GITEE.COM does not provide shell access.
4.3 后台服务创建
4.3.1 码云创建基本项目
在码云上创建整个聚合工程的父工程,创建一个新的仓库

设置仓库的相关信息

创建完成

4.3.2 IDEA关联
创建的父工程项目导入到IDEA中,两种方式,第一个是直接下载后导入,第二个是通过IDEA直接克隆
首先在IDEA中下载gitee的插件

然后需要登录

clone操作


克隆成功的项目

4.3.3 创建微服务
首先创建几个基础的微服务(商品,订单,会员,库存,活动)
创建商品模块

对应的项目信息

关联对应的依赖:web和OpenFegin的依赖

按照相同的步骤完成其他几个模块的创建

这是一个聚合工程,需要在父工程中完成对应的设置,去任意一个项目中拷贝pom.xml文件到父工程的根目录下,并完成相关的设置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.msb.mall</groupId><artifactId>mall-ware</artifactId><version>0.0.1-SNAPSHOT</version><name>mall-ware</name><description>三高项目-聚合工程</description><packaging>pom</packaging><modules><module>mall-ware</module><module>mall-member</module><module>mall-coupon</module><module>mall-order</module><module>mall-producet</module></modules>
</project>
然后完成maven项目的配置

然后可以通过父工程来统一管理

4.3.4 版本忽略信息

4.3.5 提交微服务到码云

commit


弹出检查窗口,直接提交

提交到了码云服务中

4.3.6 微服务相关表结构
维护微服务相关的数据库表结构,首先创建对应的5个数据库

然后创建相关的表结构。将对应提供的sql脚本文件运行即可

4.4 后台管理系统搭建
前端:Vue+ElementUI
后端:SpringBoot+MyBatisPlus+SpringMVC
在本项目中会通过人人开源中提供的模板项目来快速的实现项目的构建:https://gitee.com/renrenio

4.4.1 后端项目
下载下来的renren-fast解压后拷贝到项目的父工程的根目录下

修改人人-fast相关的数据库配置信息,查看数据库的连接信息,并修改

然后创建对应的数据库,名称为 renren_fast

同步更新对应的账号密码

然后跟进renren-fast中提供的sql脚本,创建对应的表结构


项目java版本5的调整


有可能设置失效多检查下,把其他数据库的驱动依赖注销掉。

然后将renren-fast的代码提交到码云中

4.4.2 前端服务
将下载的renren-fast-vue 项目解压出来后放置在对应的目录下

通过VSCode来作为前端项目的开发工具,对应安装相关的插件

前提必须自己安装node.js
Vue项目的开始与安装:https://github.com/renrenio/renren-fast-vue/wiki/Getting-started
设置代理镜像
npm install -g cnpm --registry=https://registry.npm.taobao.org
初始化
cnpm install
安装中如果出现了sass错误提示

那么通过
cnpm install --save node-sass

然后通过
npm run dev
启动成功

访问的页面

管理页面信息

4.4.3 generator项目
导入人人-generator项目,来实现快速生成相关的模板代码。

调整对应的数据库的配置

设置生成的模板文件相关的基础信息

启动项目,生成对应的模板代码,启动后的项目的端口 80

点击生成

4.4.4 商品系统调试
首先把生成的相关的模板文件拷贝到商品模块中。会发现代码有相关的错误提示,原因是缺少了renren-fast中的相关的依赖

针对这个情况,可以创建一个commons模块来存放所有的微服务需要的公共内容

创建的项目需要添加的依赖
<dependencies><!-- 引入MyBatisPlus的依赖 --><!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus</artifactId><version>3.4.3.4</version></dependency><!-- 添加lombok的依赖 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.22</version></dependency><dependency><groupId>commons-lang</groupId><artifactId>commons-lang</artifactId><version>2.6</version></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpcore</artifactId><version>4.4.14</version></dependency></dependencies>
需要添加的工具类

lombok插件安装

最后在product项目中引入commons的依赖

4.4.5 MyBatisPlus整合
需要添加相关的MyBatisPlus的依赖
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.3.1</version></dependency><!-- mysql依赖 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.11</version></dependency>
然后完成mybatisPlus的相关配置
数据库的相关连接信息配置
# 数据库的连接新
spring:datasource:username: rootpassword: rooturl: jdbc:mysql://192.168.56.100:3306/mall-pmsdriver-class-name: com.mysql.cj.jdbc.Driver
制定Mapper接口的路径
@SpringBootApplication
// 指定Mapper接口对应的路径
@MapperScan("com.msb.mall.product.dao")
public class MallProducetApplication {public static void main(String[] args) {SpringApplication.run(MallProducetApplication.class, args);}}
还需要制定Mapper映射文件的路径
mybatis-plus:mapper-locations: classpath*:/mapper/**/*.xmlglobal-config:db-config:id-type: auto # 主键自增
测试
@SpringBootTest(classes = MallProducetApplication.class)
class MallProducetApplicationTests {@AutowiredBrandService brandService;@Testvoid contextLoads() {BrandEntity entity = new BrandEntity();entity.setName("魅族");brandService.save(entity);}@Testvoid selectAll() {List<BrandEntity> list = brandService.list();for (BrandEntity entity : list) {System.out.println(entity);}}@Testvoid selectById() {List<BrandEntity> list = brandService.list(new QueryWrapper<BrandEntity>().eq("brand_id",2));for (BrandEntity entity : list) {System.out.println(entity);}}}
4.4.6 生成其他模块代码
通过generator代码生成其他模块的代码

但同时也会因为没有依赖commons项目所有有报错,那么每个微服务都让其依赖commons项目,然后每个项目都需要整合MyBatisPlus,按照product模块的方式实现即可。
然后分别给每个服务设置对应的端口

能正常运行那么说明微服务中的各个生成的模板代码没有问题。搞定!
5.微服务环境
在SpringCloud出现之前,微服务架构也能够解决。但是选择五花八门,比较乱,针对这种情况,SpringCloud整合一套微服务的解决方案。
SpringCloud生态提供了快速构建微服务的技术组件。https://spring.io/projects/spring-cloud-netflix

版本 关键词描述
- SR (发行版)
- RC (后续发行版本)
- M1/M2(PRE) 里程碑
- GA 稳定版
- BUILD-XXX 开发版
SpringCloud和SpringBoot的关联关系
大版本对应:
| Spring Cloud | Spring Boot |
|---|---|
| Angel版本 | 兼容Spring Boot 1.2.x |
| Brixton版本 | 兼容Spring Boot 1.3.x,也兼容Spring Boot 1.4.x |
| Camden版本 | 兼容Spring Boot 1.4.x,也兼容Spring Boot 1.5.x |
| Dalston版本、Edgware版本 | 兼容Spring Boot 1.5.x,不兼容Spring Boot 2.0.x |
| Finchley版本 | 兼容Spring Boot 2.0.x,不兼容Spring Boot 1.5.x |
| Greenwich版本 | 兼容Spring Boot 2.1.x |
| Hoxtonl版本 | 兼容Spring Boot 2.2.x |
在实际开发过程中,需要更详细的版本对应:
| Spring Boot | Spring Cloud |
|---|---|
| 1.5.2.RELEASE | Dalston.RC1 |
| 1.5.9.RELEASE | Edgware.RELEASE |
| 2.0.2.RELEASE | Finchley.BUILD-SNAPSHOT |
| 2.0.3.RELEASE | Finchley.RELEASE |
| 2.1.0.RELEASE-2.1.14.RELEASE | Greenwich.SR5 |
| 2.2.0.M4 | Hoxton.SR4 |
SpringCloud版本是和SpringBoot有关联关系的,官网中可以查看:https://docs.spring.io/spring-cloud/docs/current/reference/html/
5.1 SpringCloudAlibaba介绍
SpringCloudAlibaba GitHub地址:https://github.com/alibaba/spring-cloud-alibaba/
中文网站对应的地址:https://github.com/alibaba/spring-cloud-alibaba/blob/master/README-zh.md
- 注册中心:Nacos
- 配置中心:Nacos
- 负载均衡:Ribbon
- 声明式服务调用:OpenFegin
- 服务容错:Sentinel
- 网关服务:Gateway
- 链路监控:Sleuth
- 分布式事务:Seata
SpringCloudAlibaba和SpringBoot的对应版本

针对于SpringCloudAlibaba的版本关系,需要调整SpringBoot和SpringCloud的版本

然后在commons服务中设置SpringCloudAlibaba的依赖管理
<dependencyManagement><dependencies><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2021.1</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>
5.2 Nacos注册中心
5.2.1 Nacos服务搭建
首先在Nacos的GitHub中下载相关的安装文件。https://github.com/alibaba/nacos/releases

但是因为服务器在国外,所以直接给大家提供了对应的安装文件。直接解压缩到非中文的目录下,然后启动即可


服务访问的地址是:http://localhost:8848/nacos

5.2.2 Nacos服务注册
引入相关的依赖文件:
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>
放开注册中心:@EnableDiscoveryClient
// 放开注册中心
@EnableDiscoveryClient
@SpringBootApplication
// 指定Mapper接口对应的路径
@MapperScan("com.msb.mall.product.dao")
public class MallProducetApplication {public static void main(String[] args) {SpringApplication.run(MallProducetApplication.class, args);}}
然后需要在配置问中配置注册中心的相关信息

然后重启服务,就可以在注册中心中发现对应的服务注册信息了

那么安装相同的步骤,完成其他几个微服务的注册

5.2.3 Nacos容器中安装
为了使用的方便,将Nacos安装到Docker容器中
首先需要拉取对应的镜像文件
docker pull nacos/nacos-server:1.4.2
通过镜像文件运行nacos容器
docker run -d --env MODE=standalone --name nacos -v /mydata/nacos/conf:/home/nacos/conf -p 8848:8848 nacos/nacos-server:1.4.2
安装中如果出现了如下的提示

那么就把windows中的安装文件中的conf目录的文件上传到虚拟机中

服务启动时间比较长,耐心等待一会
启动容器后,测试访问:
http://192.168.56.100:8848/nacos 默认的账号密码:nacos nacos

设置nacos服务自启动
docker update --restart=always nacos

然后将众多的微服务的注册中心地址修改为docker容器中的注册中心地址:

看到注册信息就表示操作成功了

5.3 OpenFegin服务调用
OpenFegin是一个声明式的服务调用组件。本质上是封装的Ribbon实现的。

5.3.1 商品服务定义接口
在商品服务中定义一个对外提供功能的接口

5.3.2 订单服务中调用
在订单服务中集成OpenFegin,完成对应的商品服务调用
引入相关的依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>
然后创建对应的Fegin接口
/*** @FeignClient 指明要从注册中心中发现的服务的名称*/
@FeignClient(name = "mall-product")
public interface ProductService {/*** 需要访问的远程方法* @return*/@GetMapping("/product/brand/all")public R queryAllBrand();
}
还需要在启动类中开启远程调用
/*** basePackages 制定Fegin接口的路径*/
@EnableFeignClients(basePackages = "com.msb.mall.order.fegin")
@EnableDiscoveryClient
@SpringBootApplication
@MapperScan("com.msb.mall.order.dao")
public class MallOrderApplication {public static void main(String[] args) {SpringApplication.run(MallOrderApplication.class, args);}}
然后在Order的控制期中完成商品服务的调用
@AutowiredProductService productService;@GetMapping("/products")public R queryProduct(){// OpenFegin 远程调用服务return R.ok().put("products",productService.queryAllBrand());}
启动服务报错

然后就把相关的依赖添加上就可以了
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId></dependency>

通过@RefreshScope来动态的刷新配置数据,注解的位置写在Controller中

最后通过@Value(“#{}”) 来获取配置中心中的数据,配置中心的数据优先于application.yml中的属性信息

在对应的命名空间下创建对应的配置文件

默认使用的public命名空间,如果要使用特定的命名空间的话,需要在bootstrap.properties中显示的指定使用的命名空间

然后通过配置分组来区分不同的开发环境【开发环境dev,测试环境test,生产环境prod】
也就在具体的命名空间下创建的多个环境对应的配置文件

5.4 Nacos配置中心
5.4.1 配置中心的基本使用
首先添加对应的依赖,因为其他的微服务也需要向配置中心中获取配置信息,所以对应的依赖添加在了commons模块中
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId><version>3.0.3</version></dependency>
创建bootsrap.properties文件,这个文件会优先于application.yml文件加载
spring.application.name=mall-order
spring.cloud.nacos.config.server-addr=192.168.56.100:8848
在nacos服务中创建对应的数据集,名称是应用名称.properties ,mall-order.properties

5.4.2 命名空间和配置分组
在Nacos配置中心中是通过命名空间和配置分组来管理众多的配置信息
首先通过命名空间来隔离服务,给每一个服务创建一个对应的命名空间

如果需要加载对应的配置组中的信息,那么同样的需要在bootstrap.properties中设置对应的配置组信息

5.4.3 配置拆分
现在是将某个服务中的所有的配置都写在了同一个配置文件中。为了方便管理,可以将配置信息拆分到配置中心中。
可以将配置文件中的数据源,mybatis的配置信息以及其他的信息拆分开来

然后在bootstrap.properties中的指定
spring.application.name=mall-order
spring.cloud.nacos.config.server-addr=192.168.56.100:8848
# 指定使用的命名空间
spring.cloud.nacos.config.namespace=638a5c2f-488f-4fa4-b7d3-1533d772e715
# 指定对应的配置组
spring.cloud.nacos.config.group=prod# 配置多个配置集
spring.cloud.nacos.config.ext-config[0].data-id=mybats.yml
spring.cloud.nacos.config.ext-config[0].group=prod
spring.cloud.nacos.config.ext-config[0].refresh=falsespring.cloud.nacos.config.ext-config[1].data-id=datasourc.yml
spring.cloud.nacos.config.ext-config[1].group=prod
spring.cloud.nacos.config.ext-config[1].refresh=falsespring.cloud.nacos.config.ext-config[2].data-id=other.yml
spring.cloud.nacos.config.ext-config[2].group=prod
spring.cloud.nacos.config.ext-config[2].refresh=false
5.5 网关Gateway
5.5.1 网关基本介绍
在微服务架构里,服务的粒度被进一步细分,各个业务服务可以被独立的设计、开发、测试、部署和管理。这时,各个独立部署单元可以用不同的开发测试团队维护,可以使用不同的编程语言和技术平台进行设计,这就要求必须使用一种语言和平台无关的服务协议作为各个单元间的通讯方式。

本系统中选择的是Gateway作为网关组件,Spring Cloud Gateway是Spring官方基于Spring 5.0,Spring Boot 2.0和Project Reactor等技术开发的网关,Spring Cloud Gateway旨在为微服务架构提供一种简单而有效的统一的API路由管理方式。Spring Cloud Gateway作为Spring Cloud生态系中的网关,目标是替代ZUUL,其不仅提供统一的路由方式,并且基于Filter链的方式提供了网关基本的功能,例如:安全,监控/埋点,和限流等。
网关有几个非常重要的概念:
- Route(路由):这是网关的基本构建块,它由一个ID,一个目标URI,一组断言和一组过滤器定义,如果断言为真,则路由匹配
- Predicate(断言):是Java8中提供的函数式接口,用来判断是否路由匹配的
- Filter(过滤器):对断言匹配的请求和响应进行修改处理

5.5.2 网关应用
创建网关API服务,修改SpringBoot和SpringCloud相关版本和其他的微服务保持一致。
然后添加对应的依赖
<dependency><groupId>com.msb.mall</groupId><artifactId>mall-commons</artifactId><version>0.0.1-SNAPSHOT</version></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency>
因为网关服务路由的时候需要去注册中心中发现相关的服务所以需要完成Nacos注册中心的配置
# 注册中心的配置
spring.application.name=mall-gateway
spring.cloud.nacos.discovery.server-addr=192.168.56.100:8848# 指定注册中心的服务端口
server.port=8070
放开注解

同样的网关中的相关配置也需要添加到Nacos的配置中心中,所以也需要整合Nacos配置中心

然后测试路由规则是否可行
spring:application:name: mall-gatewaycloud:nacos:discovery:server-addr: 192.168.56.100:8848gateway:routes: - id: route1uri: http://www.baidu.compredicates:- Query=url,baidu- id: route2uri: http://www.jd.compredicates: - Query=url,jd
启动时候因为依赖的commons服务中有MyBatis的依赖,那么在网关API服务中也需要数据源的相关配置,那么没有就抛异常,可以在启动类的SpringBootApplication注解中排除DataSourceAutoConfiguration的自动注入。

然后根据对应的路由规则测试即可:
http://localhost:8070/?url=baidu
http://localhost:8070/?url=jd
相关文章:
电商---part02 项目环境准备
1.虚拟机环境 可以通过VMWare来安装,但是通过VMWare安装大家经常会碰到网络ip连接问题,为了减少额外的环境因素影响,Docker内容会通过VirtualBox结合Vagrant来安装虚拟机。 VirtualBox官网:https://www.virtualbox.org/ Vagran…...
LabVIEW提升程序响应速度
LabVIEW 程序在不同计算机上的响应速度可能存在较大差异,这通常由两方面因素决定:计算机硬件性能和程序本身的优化程度。本文将分别从硬件配置对程序运行的影响以及代码优化方法进行详细分析,帮助提升 LabVIEW 程序的执行效率。 一、计算机硬…...
工业领域网络安全技术发展路径洞察报告发布 | FreeBuf咨询
工业网络安全已成为国家安全、经济稳定和社会运行的重要基石。随着工业互联网、智能制造和关键基础设施的数字化升级,工业系统的复杂性和互联性显著提升,针对工业领域的网络攻击朝着目标多样化、勒索攻击产业化、攻击技术持续升级的方向发展,…...
WPF 登录页面
效果 项目结构 LoginWindow.xaml <Window x:Class"PrismWpfApp.Views.LoginWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.…...
【数学建模】动态规划算法(Dynamic Programming,简称DP)详解与应用
动态规划算法详解与应用 文章目录 动态规划算法详解与应用引言动态规划的基本概念动态规划的设计步骤经典动态规划问题1. 斐波那契数列2. 背包问题3. 最长公共子序列(LCS) 动态规划的优化技巧动态规划的应用领域总结 引言 动态规划(Dynamic Programming,简称DP)是一…...
leetcode-代码随想录-链表-移除链表元素
题目 链接:203. 移除链表元素 - 力扣(LeetCode) 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 输入:head [1,2,6,3,4,5,6], val 6 …...
低成本训练垂直领域文娱大模型的技术路径
标题:低成本训练垂直领域文娱大模型的技术路径 内容:1.摘要 在文娱产业快速发展且对智能化需求日益增长的背景下,为降低垂直领域文娱大模型的训练成本,本研究旨在探索低成本训练的有效技术路径。采用对现有开源模型进行微调、利用轻量化模型架构以及优化…...
Spring Boot 3.4.3 基于 Caffeine 实现本地缓存
在现代企业级应用中,缓存是提升系统性能和响应速度的关键技术。通过减少数据库查询或复杂计算的频率,缓存可以显著优化用户体验。Spring Boot 3.4.3 提供了强大的缓存抽象支持,而 Caffeine 作为一款高性能的本地缓存库,因其优异的吞吐量和灵活的配置,成为许多开发者的首选…...
手机为电脑提供移动互联网络的3种方式
写作目的 在当今数字化时代,电脑已成为人们日常工作和生活中不可或缺的工具,而网络连接更是其核心功能之一。无论是处理工作任务、进行在线学习、还是享受娱乐资源,稳定的网络环境都是保障这些活动顺利开展的关键。然而,在实际使用过程中,电脑网络驱动故障时有发生,这可…...
论文阅读Diffusion Autoencoders: Toward a Meaningful and Decodable Representation
原文框架图: 官方代码: https://github.com/phizaz/diffae/blob/master/interpolate.ipynb 主要想记录一下模型的推理过程 : %load_ext autoreload %autoreload 2 from templates import * device cuda:1 conf ffhq256_autoenc() # pri…...
Python集合(五)
集合一: 跟字典一样,最大的特性就是唯一性,集合中的所有的元素都是独一无二的,并且还是无序的 创建集合 第一种: 第二种:集合推导式: 第三种:使用类型构造器: 集合是无…...
ISIS多区域配置
一、什么是ISIS多区域 ISIS(Intermediate System to Intermediate System)多区域是指网络被划分为多个逻辑区域(Areas),不同区域之间通过特定的ISIS路由器(Level-1-2)进行路由交互。多区域设计提…...
2025-04-04 Unity 网络基础5——TCP分包与黏包
文章目录 1 分包与黏包2 解决方案2.1 数据接口2.2 定义消息2.3 NetManager2.4 分包、黏包处理 3 测试3.1 服务端3.2 客户端3.3 直接发送3.4 黏包发送3.5 分包发送3.6 分包、黏包发送3.7 其他 1 分包与黏包 分包、黏包指在网络通信中由于各种因素(网络环境、API …...
Leetcode——150. 逆波兰表达式求值
题解一 思路 和上一期1047. 删除字符串中的所有相邻重复项没差太多,基本思想都一样,就是读取输入的数据,如果是运算符,就进行相应的运算,然后把运算结果压栈。 代码 class Solution {public int evalRPN(String[] …...
【Node】一文掌握 Express 的详细用法(Express 备忘速查)
文章目录 入门Hello Worldexpress -hexpress()RouterApplicationRequest属性方法 Response属性方法 示例RouterResponseRequestres.end()res.json([body])app.allapp.deleteapp.disable(name)app.disabled(name)app.engine(ext, callback)app.listen([port[, host[, backlog]]]…...
chromium魔改——绕过无限debugger反调试
在进行以下操作之前,请确保已完成之前文章中提到的 源码拉取及编译 部分。 如果已顺利完成相关配置,即可继续执行后续操作。 在浏览器中实现“无限 debugger”的反调试技术是一种常见的手段,用于防止他人通过开发者工具对网页进行调试或逆向…...
Spring 核心技术解析【纯干货版】- XVI:Spring 网络模块 Spring-WebMvc 模块精讲
在现代 Web 开发中,高效、稳定、可扩展的框架至关重要。Spring WebMvc 作为 Spring Framework 的核心模块之一,为开发人员提供了强大的 MVC 体系支持,使得 Web 应用的构建更加便捷和规范。无论是传统的 JSP 视图渲染,还是基于 RES…...
【GPT入门】第33课 从应用场景出发,区分 TavilyAnswer 和 TavilySearchResults,代码实战
【GPT入门】第33课 从应用场景出发,区分 TavilyAnswer 和 TavilySearchResults,代码实战 1. 区别应用场景 2. 代码使用3.代码执行效果 在langchain_community.tools.tavily_search中,TavilyAnswer和TavilySearchResults有以下区别和应用场景&…...
JS dom修改元素的style样式属性
1通过样式属性修改 第三种 toggle有就删除 没就加上...
灭火器离位检测:智能视觉守护安全
利用视觉分析实现明火检测:技术、功能与应用 一、背景 清明节期间,兰州市连续发生多起因祭祖烧纸引发山火的警情,如七里河区魏岭乡赵某某等人上坟烧纸未妥善处理烛火引燃杂草,导致3人烧伤;七里河区彭家坪石板山村村民…...
网络:华为数通HCIA学习:IP路由基础
华为HCIA学习 IP路由基础路由协议或路由种类以及对应路由的优先级按工作区域分类:按工作机制及算法分类:路由的优先级路由器选择最优路由的顺序是什么? 前言自治系统LAN和广播域路由选路IP路由表路由度量建立路由表最长匹配原则路由器转发数据包总结 IP…...
多线程开发中List的使用
由于ArrayList在多线程高并发情况下是不安全的,因此要慎用,那么此时如果涉及到集合操作,应该怎么选: 方案一:Vector: 特点:通过给所有方法都用 synchronized 修饰从而保证线程安全, 缺点&…...
使用 .NET 9 和 Azure 构建云原生应用程序:有什么新功能?
随着 .NET 9 推出一系列以云为中心的增强功能,开发人员拥有比以往更多的工具来在 Azure 上创建可扩展、高性能的云原生应用程序。让我们深入了解 .NET 9 中的一些出色功能,这些功能使构建、部署和优化云应用程序变得更加容易,并附有示例以帮助…...
前端页面鼠标移动监控(鼠标运动、鼠标监控)鼠标防抖处理、mousemove、debounce()、事件停止触发、超时触发
文章目录 代码使用lodashjs库debounce函数做防抖处理(只有鼠标移动停止并超过一定时间,才会触发)手写防抖函数写法1写法2(注意addEventListener监听函数的第二个参数接收的是一个函数,需要构造一个匿名返回函数&#x…...
开源守护,智护童年——幼儿园未成年行为与安全智能监控系统
在孩子成长的每一步,安全始终是第一位的。幼儿园作为孩子们探索世界的起点,其安全管理的重要性不言而喻。然而,哭闹、打闹、意外跌倒,甚至外部隐患如陌生人逗留、内部管理疏漏等问题,常常让传统人工监控捉襟见肘。家长…...
WinForm真入门(5)——控件的基类Control
控件的基类–Control 用于 Windows 窗体应用程序的控件都派生自 Control类并继承了许多通用成员,这些成员都是平时使用控件的过程最常用到的。无论要学习哪个控件的使用,都离不开这些基本成员,尤其是一些公共属性。由于 Conlrol 类规范了控件的基本特征…...
《Linux内存管理:实验驱动的深度探索》【附录】【实验环境搭建 4】【Qemu 如何模拟numa架构】
我们在学习 linux 内核时,会涉及到很多 numa 的知识,那我们该如何在 qemu 中模拟这种情况,来配合我们的学习呢? 我们该如何模拟 如下的 numa 架构 Qemu 模拟 NUMA 架构 -M virt,gic-version3,virtualizationon,typevirt \ -cp…...
【YOLO系列(V5-V12)通用数据集-工程用车检测数据集】
YOLO格式的工程车检测数据集,适用于YOLOv5-v11所有版本,可以用于本科毕设、发paper、做课设等等,有需要的在这里获取: 【YOLO系列(V5-V12)通用数据集-工程用车检测数据集】 【工程车类型检测数据集】共2655…...
卫星智能化健康管理#卫星工程系列
伴随我国航天业飞速发展,积累了大量的卫星试验数据,如何从海量、多源、多模态的卫星试验数据中挖掘分析出内部规律和潜在价值,构建卫星装备系统的全生命周期试验数据知识体系显得尤为迫切。卫星故障传统的诊断方法局限在门限层面,…...
【面试篇】Mysql
1. 请介绍一下 MySQL 常见的存储引擎(如 InnoDB、MyISAM),它们的特点分别是什么?在什么场景下适合使用 InnoDB,什么场景下适合使用 MyISAM? InnoDB: 特点:支持事务,具有…...
