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

jenkins部署Maven和NodeJS项目

        在 Java 项目开发中,项目的编译、测试、打包等是比较繁琐的,属于重复劳动的工作,浪费人力和时间成本。以往开发项目时,程序员往往需要花较多的精力在引用 jar 包搭建项目环境上,跨部门甚至跨人员之间的项目结构都有可能不一样。Maven 的仓库管理、依赖管理、继承和聚合等特性为项目的构建提供了一整套完善的解决方案。将 Maven 集成到 jenkins 环境中,为开发人员的编译、打包、部署,测试等工作,提供了高效率的集成环境。

一、开发相关概念

1.什么是 Maven

        每一个开发工具(IDE)都有自己不同的项目结构,它们互相之间不通用。比如我再 eclipse 中创建的目录,无法在 idea 中进行使用,这就造成了很大的不方便。Maven 提供了一套标准化的项目结构,所有的 IDE 使用 Maven 构建的项目完全一样,所以 IDE 创建的 Maven 项目可以通用。       

         Maven 是 Apache 软件基金会组织维护的一款自动化构建工具,专注服务于 ava 平台的项目构建和 依赖管理。Maven 这个单词的本意是:专家,内行。读音是['merv(ə)n]或['mevn]。

        Maven 项目对象模型(POM)是可以通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。

2.Maven的作用

(1)项目构建: Maven 自动化 Java项目的构建过程。它根据预定的生命周期并执行各个生命周期阶段的任务,实现编译、测试、打包等,并确保构建的一致性和可重复性。

(2)依赖管理: Maven 根据 pom.xml 文件的依赖信息自动下载和管理库和框架。它规范了依赖解析和库搜索过程,避免了版本冲突和传递问题。
(3)项目信息管理: Maven 利用 pom.xml 文件描述的项目信息生成报告和文档。这提高了项目的可读性和可维护性。
(4)插件及扩展: Maven 通过插件系统实现高度可扩展性。插件增强项目功能,如代码生成、代码质量检查、测试报告等。
(5)多模块项目支持: Maven 支持创建多模块项目,简化大型项目的组织和管理。多模块项目共享依赖、插件和属性配置,方便项目配置和维护。
(6)持续集成: Maven 与各种持续集成工具(如 Jenkins、Travis CI等)相结合,实现项目的自动化构建、测试和部署等,有助于提高项目的质量和交付速度。

3.什么是构建

        构建就是以我们编写的 Java 代码、框架配置文件、其他资源文件、JSP 页面和图片等静态资源作为“原材料”,去“生产”出一个可以运行的项目的过程。

(1)构建过程的几个主要环节
  • 清理:删除以前的编译结果,为重新编译做好准备
  • 编译:将 Java 源程序编译为字节码文件。
  • 测试:针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性。
  • 报告:在每一次测试后以标准的格式记录和展示测试结果。
  • 打包:将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署。Java 工程对应 jar 包,Web 工程对应 war 包。
  • 安装:在 Maven 环境下特指将打包的结果-jar 包或 war 包安装到本地仓库中。
  • 部署:将打包的结果部署到远程仓库或将war 包部署到服务器上运行。
(2)自动化构建

        我们为什么要使用 Maven 这样的构建工具呢?我们来看一个程序员在某一天的工作:

        托马斯像往常一样早早的来到了公司,冲好一杯咖啡,打开了自己的邮箱--很不幸,QA 小组发来了一封邮件,报告了他昨天提交的模块的测试结果--有 BUG。“好吧,反正也不是第一 次”,托马斯摇摇头,进入 IDE,运行自己的程序,编译、打包、部署到服务器上,然后按照邮件中的操作路径进行测试。“嗯没错,这个地方确实有问题”,托马斯说道。于是托马斯开始尝试修复这个 BUG,当他差不多有眉目的时候已经到了午饭时间。
下午继续工作。BUG 很快被修正了,接着托马斯对模块重新进行了编译、打包、部署,测试之后确认没有问题了,回复了 OA 小组的邮件。
        一天就这样过去了,然而第二天、第三天,基本都是这样度过的。

让我们来梳理一下托马斯这一天中的工作内容:.

从中我们发现,托马斯的很大一部分时间花在了“编译、打包、部署、测试”这些程序化的工作上面,而真正需要有人接介入实现的分析问题和编码环节其实只占了很少一部分,如下图所示:

能将这些程序化的工作交给机器自动完成么?当然是可以的,这就是自动化构建。这样一来,构建的流程就成了下图所示的过程:

此时 Maven 的意义就体现了出来,它可以自动的从构建过程的起点一致执行到终点:

4.Maven 核心--pod 文件

        Maven 能够实现自动化构建是和它的内部原理分不开的,而构建过程离不开一个关键对象,就是 pom文件。
        pom 全称为 project object model,意思为项目对象模型。通过 xml 表示 maven 项目,使用 pom.xml来实现。pom 文件是 Maven 项目的核心文件之一,它包含了 Maven 项目的所有配置信息。
        pom 文件是对项目描述:包括配置文件,开发者需要遵循的规则,组织和项目的 ur1,项目的依赖性,以及其他所有的项目相关因素。pom 文件是 Maven 的重要组成部分,可以帮助开发者管理和构建项目。在使用 Maven 进行项目构建时,需要根据项目的需要配置 pom 文件。Maven 借助于这个文件,就可以自动化构建、测试、打包和发布 Java 项目。

5.Maven 项目自动化部署流程

二、电子商城项目简介

        作为后端开发人员,我们不仅需要开发项目,有时候还需要对项目进行部署,这时就少不了和 Linux和 Docker 打交道。在接下来的课程中我们将以 ma11 项目为例,学习 Linux、Docker 及Jenkins 自动化部署。

1.mall 商城项目简介

        mall项目是一套电商系统,包括前台商城系统及后台管理系统,基于SpringBoot+MyBatis 实现,采用 Docker 容器化部署。前台商城系统包含首页门户、商品推荐、商品搜索、商品展示、购物车、订单流程、会员中心、客户服务、帮助中心等模块。后台管理系统包含商品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计报表、财务管理、权限管理、设置等模块。

2.系统架构图

3.业务架构

4.设备清单

三、mall商城运行环境部署

1.docker环境的安装

(1)为mall 主机安装 docker 环境

步骤略(可以直接使用先有的 docker 环境)

(2)设置主机名
[root@localhost ~]# hostnamectl set-hostname mall
[root@localhost ~]# bash
bash

2.开启 Docker 的远程管理 API

        因为 jenkins 在直接在 docker 主机中生成镜像,所以 docker 主机需要开启远程 API,以便能够实现镜像的远程推送。

[root@mall ~]# vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H t
cp://0.0.0.0:2375

 3.重启docker进程

[root@mall ~]# systemctl daemon-reload
[root@mall ~]# systemctl restart docker

 4.MySQL 安装

(1)下载 MySQL5.7 的 docker 镜像:
[root@mall ~]# docker pull mysql:5.7
(2)使用如下命令启动 MySQL 服务: 
[root@mall ~]# docker run -p 3306:3306 --name mysql -v /mydata/mysql/log:/var/log/mysql -v /mydata/mysql/data:/var/lib/mysql -v /mydata/mysql/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7

 参数说明

  • -p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口
  • -v /mydata/mysql/conf:/etc/mysql:将配置文件夹挂在到主机
  • -v/mydata/mysql/log:/var/log/mysql:将日志文件夹挂载到主机
  • -v /mydata/mysql/data:/var/lib/mysql/:将数据文件夹挂载到主机
  • -e MYSQL ROOT PASSWORD=root:初始化 root 用户的密码
(3)将mall.sql文件拷贝到 mysql容器的/目录下

上传数据库脚本 ma11.sq1 到当前工作目录

[root@mall ~]# docker cp mall.sql mysql:/
 (4)进入运行MySQL 的 docker 容器
[root@mall ~]# docker exec-it mysql /bin/bash
 (5)登录到 mysql
[root@mall ~]# mysql -uroot -proot--default-character-set=utf8
(6)创建 mall 数据库 
create database mall character set utf8:
 (7)将 sql 脚本文件导入到数据库
mysql> use mall;
mysql> source /mall.sql;
 (8)设置授权

创建一个 reader:123456 帐号并修改权限,使得任何 ip 都能访问:

mysql> grant all privileges on *,* to 'reader'@'%' identified by '123456';
mysql> exit

退出容器 

root@118ef491787f:/# exit

 5.Elasticsearch安装

        Elasticsearch 为 mall提供商品搜索功能,我们是使用数据库来实现的商品搜索功能的,考虑到中文分词和搜索数据并发量大的情况,真实环境中我们一般采用 Elasticsearch 来实现搜索功能。

(1)下载Elasticsearch7.17.3 的 docker 镜像:
[root@mall ~]# docker pull elasticsearch:7.17.3
(2)修改虚拟内存区域大小,否则会因为过小而无法启动: 
[root@mall ~]# sysctl -w vm.max map count=262144
 (3)启动Elasticsearch 服务
[root@mall ~]# docker run -p 9200:9200 -p 9300:9300 --name elasticsearch -e "discovery.type=single-node" -e "cluster.name=elasticsearch" -e "ES_JAVA_OPTS=-Xms512m -Xmx1024m" -v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins -v /mydata/elasticsearch/data:/usr/share/elasticsearch/data -d elasticsearch:7.17.3

备注:
内存小的服务器可以通过 ES JAVA OPTS 来设置占用内存大小: 

(4)修改/mydata/elasticsearch/data目录的权限
[root@mall ~]# chmod 777 /mydata/elasticsearch/data

注意
/usr/share/elasticsearch/data目录没有访问权限,只需要修改/mydata/elasticsearch/data 目录的权限,再重新启动即可。

 (5)下载中文分词器 IKAnalyzer(已有理想安装包,此步骤可跳过)

        IKAnalyzer 是一个开源的,基于java 语言开发的轻量级的中文分词工具包,IK 是目前最为流行的中文分词器,它是一个基于 Maven 构建的项目,具有 60 万字/秒的高速处理能力;并且支持用户词典扩展定义。
注意下载与 Elasticsearch 对应的版本,下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases
注意对应好版本要使用 7.17.3 的版本,本案例的 Elasticsearch 版本为7.17.3,需要的 analysis-ik也是7.17.3

 (6)安装分词器

将下载好的分词器上传到服务器的当前工作目录:
将其解压到/mydata/elasticsearch/plugins/analysis-ik/ 的目录中。

[root@mall ~]# yum -y install unzip
[root@mall ~]# unzip elasticsearch-analysis-ik-7.17.3.zip -d /mydata/elasticsearch/plugins/analysis-ik
[root@mall ~]# ll /mydata/elasticsearch/plugins/analysis-ik/
总用量 1432
-rw-r--r-- 1 root root 263965 1月  18 2022 commons-codec-1.9.jar
-rw-r--r-- 1 root root  61829 1月  18 2022 commons-logging-1.2.jar
drwxr-xr-x 2 root root   4096 1月  18 2022 config
-rw-r--r-- 1 root root  54931 4月  27 2022 elasticsearch-analysis-ik-7.17.3.jar
-rw-r--r-- 1 root root 736658 1月  18 2022 httpclient-4.5.2.jar
-rw-r--r-- 1 root root 326724 1月  18 2022 httpcore-4.4.4.jar
-rw-r--r-- 1 root root   1807 4月  27 2022 plugin-descriptor.properties
-rw-r--r-- 1 root root    125 4月  27 2022 plugin-security.policy
(7)重新启动服务: 
[root@mall ~]# docker restart elasticsearch

6. Nginx安装

nginx 为 mall 电商平台的管理前端提供的访问入口。

(1)下载Nginx1.22 的 docker 镜像:
[root@mall ~]# docker pull nginx:1.22
(2)先运行一次容器(为了拷贝配置文件): 
[root@mall ~]# docker run -p 80:80 --name nginx -v /mydata/nginx/html:/usr/share/nginx/html -v /mydata/nginx/log:/var/log/nginx -d nginx:1.22
(3)设置网站目录权限 
[root@mall ~]# chmod -R 755 /mydata/nginx/html/

四、利用 jenkins 部署 mall 商城后台程序

1.为 Jenkins 安装 maven 环境(如果已经安装过,可以跳过此步)

(1)安装maven
[root@jenkins ~]# tar zxvf apache-maven-3.8.6-bin.tar.gz
[root@jenkins ~]# mv apache-maven-3.8.6 /usr/local/maven
(2)设置 java 和 maven 的环境变量
[root@jenkins ~l# vim /etc/profile
#在文件末尾添加:
export JAVA HOME=/usr/local/java/
export CLASSPATH=$JAVA HOME/lib:$CLASSPATH
export PATH=$JAVA HOME/bin:$PATH
export MAVEN HOME=/usr/local/maven
export PATH=$PATH:$MAVEN HOME/bin
[root@jenkins ~l# source /etc/profile
(3)查看maven 版本
[root@jenkins ~l# mvn -version
(4)修改 maven 更新源
[root@jenkins ~]# vim /usr/local/maven/conf/settings.xml
#修改 maven 的仓库:
<mirrors>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url></mirror>
</mirrors>

备注:
阿里提供了 maven 更新源,可访问阿里官方网站査看详细信息。

https://maven.aliyun.com

2.为 Jenkins 配置 JDK 环境

        在 Jenkins 首页中,单击“Manage Jenkins”→“System configuration”→“Tools”→“JDK安装”,点击“新增 JDK”,并取消勾选“Install automatically”。其中,JDK 别名设置为“jdk-11”JAVA HOME 设置为本案例中 JDK 实际安装路径“/usr/local/java”。

3.为 Jenkins 配置 Maven 环境

        找到“Maven 安装”选项,然后单击“新增 Maven”,取消勾选“Install automatically”,并设置 Name(名称)为“maven”、MAVEN HOME 为“/usr/local/maven”。

        以上各项配置完毕后,点击保存按钮,推荐重启下Jenkins 服务

提示:
        可以在这里做个快照,方便后续的使用,

4.gitlab 中创建项目

(1)gitlab 中导入 gitee 中的 mall 项目

在 gitlab 中导入 mall 项目:https://gitee.com/kgc-wjq/mall.git

参数如下图所示:

(2)修改代码

        直接在 gitlab 中修改项目文件 pom.xm1 的代码。将远程 docker 主机的 ip 地址设置为本案例中的docker 主机的 IP 地址:192.168.10.101。修改好后点击提交修改的按钮。

(3)获取 gitlab 仓库 URL

链接如下:
http://192.168.10.105/root/mall.git

5.在jenkins 中添加 SSH Server

“Manage Jenkins”-->“System”,添加“Publish over SsH”

点击 SSH Servers 的新增按钮,添加一个 SSH 的主机。参数如下图所示,并保存设置。

6.为Jenkins添加SSH remote hosts

        在本案例中,我们要通过 Jenkins 在 docker 主机上执行命令,需要将 docker 添加为 Jenkins 的ssh 远程主机,操作步骤如下。

(1)为 docker 主机添加凭据

(2)添加SSH remote hosts

“Dashboard”-->“Manage Jenkins”-->“system”-->“SSH remote hosts”

7.新建Item

8.设置项目参数

(1)源码管理设置

在源码管理中,选中“Git”,并在仓库 URL 中填写 ma11 项目代码仓库的 URL 地址,在指定分支中将分支填写为“*/main”。

http://192.168.10.105/root/mall.git

(2)设置 maven 构建参数

选择“Build”模块,“Goals and options”填写“clean package”。

备注:
在 Build 下配置 Goals and options,即给 mvn 命令的参数

这里可以设置的 maven 参数如下:
mvn clean

清理环境,清除 target 文件夹。
mvn compile
编译,将 Java 源文件编译成 class 文件。
mvn test
执行 test 目录下的测试用例。
mvn package
打包,将 Java 工程打成 jar 包。
mvn clean package -Dmaven.test.skip=true跳过单元测试

(3)添加“Post steps”--“Execute shell”

        在“Post steps”选项中,点击“Add post-build step”按钮,添加一个构建后的步骤“Executeshell”,这里需要将后台程序的启动脚本目录 mall-sh 上传到 Jenkins 主机的 root 家目录下,然后在下图界面中设置同步脚本:scp -r /root/mall-sh 192.168.10.101:/root。注意,此命令是在 Jenkins主机上执行的。

(4)添加“Post steps"--“Execute shell script on remote host using ssh”

        点击“Add post-build step”按钮,选择“Execute shell script on remote host using ssh”,添加要在远程主机执行的脚本。此插件时利用 ssh 协议在远程主机上执行命令,因此,Jenkins 主机和远
程的 docker 主机之间需要有免密连接的环境。
        注意这个脚本是放在远程主机上的。在上一步中,我们用 scp 的方法将脚本拷贝到了远程主机。在这个步骤中,就需要在远程主机中执行这些脚本。

设置如下:
chmod +x /root/mall-sh/*
/root/mall-sh/mall-admin.sh
/root/mall-sh/mall-search.sh

/root/mall-sh/mall-portal.sh

(5)设置免密连接

[root@jenkins ~]# ssh-keygen
[root@jenkins ~# ssh-copy-id 192.168.10.101

备注:
如果 Jenkins 主机已有 ssh 密钥对,可以不必生成,直接执行 ssh-copy-id 即可。

(6)保存并构建

保存设置后点击“Build Now”
第一次构建需要较长的时间。此步骤需要联网,注意网络状态。如果网络状态不好,会影响拉取 maven 更新源的 jar 包,最终导致构建失败。
构建过程需要利用 iava 镜像,需要在 docker 主机中提前拉取好 iava 的镜像

9.访问后台程序验证结果

(1)mall-admin 的后台系统 api 接口文档地址:

http://192.168.10.101:8080/swagger-ui/

(2)mall-search 的搜索系统 api 接口文档地址:

http://192.168.10.101:8081/swagger-ui/

(3)mall-portal 的前台 api 接口文档地址:

http://192.168.10.101:8085/swagger-ui/

五、使用 Jenkins 一键打包部署 NodeJs 前端应用

1.什么是 NodeJs

        Javascript 诞生于 1995 年,几乎是和互联网同时出现;Node.js 诞生于 2009 年,比 Javascript 晚了 15 年左右。

        在 Node.js 之前,Javascript 只能运行在浏览器中,作为网页脚本使用,为网页添加些特效,或者和服务器进行通信。有了 Node.js 以后,JavaScript 就可以脱离浏览器像其它编程语言一样直接在计算机上使用,想干什么就干什么,再也不受浏览器的限制了。
        Node.js 并不是一门新的编程语言,也不是一个 Javascript 的框架,它是一套Javascript 运行环境,用来支持 Javascript 代码的执行。用编程术语来讲,Node.js 是一个 Javascript 运行时(Runtime)。

2.为 jenkins 安装 NodeJs(如果已装过,可以跳过此步)

        在对 Node]s 项目进行构建的时候,需要 g++的编译环境,不同的项目 Node]s 的版本也不一样,在进行部署的时候要根据项目的依赖版本进行选择,

[root@jenkins ~]# yum -y install gcc automake autoconf libtool make
[root@jenkins ~]# yum -y install gcc gcc-c++
[root@jenkins ~]# tar zxvf node-v14.18.0-linux-x64.tar.gz
[root@jenkins ~]# mv node-v14.18.0-linux-x64 /usr/local/nodejs14
[root@jenkins ~]# ln-s /usr/local/nodejs14/bin/* /usr/local/bin
[root@jenkins ~]# node -v
v14.18.0
[root@jenkins ~]# npm -v
6.14.15

3.gitlab 添加项目

(1)gitlab 中创建项目

在 gitlab 中导入mall-admin-web 项目:
项目的 gitee 仓库链接为:https://gitee.com/kgc-wjq/mall-admin-web.git

参数如下所示:

(2)修改代码

修改 config 目录下“prod.env.js”文件。
将 BASE API 接口地址修改为“http://192.168.10.101:8080”,并提交修改。

(3)拷贝出项目的仓库 URL

http://192.168.10.105/root/mall-admin-web.git

4.构建NodeJS项目

(1)构建一个自由风格的软件项目

(2)设置源码管理

选中“Git”,并将 mall-admin-web 的项目仓库 URL 填写进去,修改分支为“*/main'

(3)添加一个执行shell的构建

在“Build Steps”中,点击增加构建步骤按钮,增加一个“Execute shell”

添加一个执行 shell 的构建,用于将我们的前端代码进行编译打包

脚本代码如下:

#查看版本信息
npm -v
#删除上一次构建数据
rm -rf node modules
rm package-lock.json
npm cache clear--force
#将镜像源替换为阿里的加速访问
npm config set registry http://mirrors.cloud.tencent.com/npm/
#安装依赖
npm install --unsafe-perm
#项目打包
npm run build
#拷贝前端程序到 docker 主机
scp -r /root/.jenkins/workspace/mall-admin-web/dist/*192.168.10.101:/mydata/nginx/html/

备注:
如果 npm 镜像站无法使用,会导致构建失败,可以替换为其他的镜像服务器。国内 npm 镜像站:
npm config set registry https://registry.npmmirror.com
npm config set registry http://mirrors.cloud.tencent.com/npm/
npm config set registry https://mirrors.huaweicloud.com/repository/npm,

(4)增加构建后操作

在“构建后操作”中,增加“Send build artifacts over SSH”,利用该插件在远程 docker 主机上执行命令,此处需要在 docker 主机上为网站目录授权,否则,当把项目推送到 docker 主机后,其网站目录的权限不足,页面会提示 483的错误。授权命令为:chmod-R755 /mydata/nginx/html/,如下图所小。

(5)保存设置后开始构建

5.登录前端验证项目部署结果

http://192.168.10.101
默认账号密码
admin
macro123

六、APP 端测试

APP 端在测试的时候可以使用 HBuilder x,这是一个手机端的模拟器,可以测试 APP 应用程序。

1.导入 APP 端项目

        在 windows 中使用 HBuilderX导入 mall-app-web-1.0.0 项目,在“文件”菜单中导入本地项目,找到“mall-app-web-1.0.0”的项目文件夹,导入即可。

2.修改 mall-app-web 连接地址

        访问在线接口无需搭建后台环境,只需将 mall-app-web-1.0.0/utils/requestutil.js 文件中的config.baseUrl 改为线上地址即可,修改 requestutil.js 文件内容:

3.运行移动端网页

在 HBuilder x中使用“运行”->“运行到浏览器”->“chrome”运行项目。

注意:如果是第一次执行,需要下载相关插件。

运行成功后会自动打开下面地址(将浏览器改为手机模式):http://localhost:8060/

如果浏览器没有启动的话,可以直接访问如下地址访问:http://localhost:8060/

相关文章:

jenkins部署Maven和NodeJS项目

在 Java 项目开发中&#xff0c;项目的编译、测试、打包等是比较繁琐的&#xff0c;属于重复劳动的工作&#xff0c;浪费人力和时间成本。以往开发项目时&#xff0c;程序员往往需要花较多的精力在引用 jar 包搭建项目环境上&#xff0c;跨部门甚至跨人员之间的项目结构都有可能…...

在unity资源中发现无效引用

本文主要解决在不打开unity的情况下搜索出无效引用的资源的方法 1. 概述 一般只要遍历一下目录里所有资源,判空一下就好了但有些情况下,不希望打开unity, 尤其希望是在资源整合时,想更快验证资源的合法性, 这对合并提交及出包验证时,都要较大的需求 2. 简单的验证方法 简单来…...

C#知识|基于反射和接口实现抽象工厂设计模式

哈喽&#xff0c;你好啊&#xff0c;我是雷工&#xff01; 01 应用场景 在项目的多数据库支持上、业务的多算法封装、以及各种变化的业务中&#xff1b; 02 抽象工厂组成 抽象工厂包括抽象产品&#xff08;即业务接口&#xff0c;可以通过抽象类或抽象接口设计&#xff09;…...

【分布式微服务云原生】gRPC vs RPC:深入探索远程过程调用的现代与经典

摘要 在分布式系统的世界里&#xff0c;gRPC和RPC是两个耳熟能详的术语&#xff0c;但它们之间有何区别和联系&#xff1f;本文将深入探讨gRPC和RPC的概念、关键特性、以及它们在现代软件开发中的应用。你将了解到gRPC如何作为RPC的一种实现&#xff0c;提供高性能的跨语言远程…...

听说这是MATLAB基础?

MATLAB&#xff08;矩阵实验室&#xff09;是一个强大的高性能计算环境和编程语言&#xff0c;广泛应用于数学计算、算法开发、数据分析、可视化以及模拟等多个领域。以下是MATLAB的一些基础知识&#xff0c;涵盖其功能、语法、基本操作等方面。 1. MATLAB环境 工作区&#xf…...

【CSS/HTML】圣杯布局和双飞翼布局实现两侧宽度固定,中间宽度自适应及其他扩展实现

前沿简介 圣杯布局和双飞翼布局是前端重要的布局方式。两者的功能相同&#xff0c;都是为了实现一个两侧宽度固定&#xff0c;中间宽度自适应的三栏布局。 圣杯布局来源于文章In Search of the Holy Grail,双飞翼布局来源于淘宝UED。 两者的实现方式有差异&#xff0c;但是都…...

数据流和数据流处理技术

一数据流 首先明确数据流概念&#xff1a;数据流是连续不断生成的、快速变化的无界数据序列 数据流类型&#xff1a; 数据流大致可以分为四种类型 1.连续型数据流&#xff1a;不断地产生数据&#xff0c;数据稳定速度输入系统。 2.突发型数据流&#xff1a;在某特定时间或…...

(IDEA)spring项目导入本地jar包方法和项目打包时找不到引入本地jar包的问题解决方案

系列文章目录 文章目录 系列文章目录一、&#xff08;IDEA&#xff09;spring项目导入本地jar包方法和项目打包时找不到引入本地jar包的问题解决方案1.资料 一、&#xff08;IDEA&#xff09;spring项目导入本地jar包方法和项目打包时找不到引入本地jar包的问题解决方案 1.资料…...

解决TikTok无网络连接问题解析

随着社交媒体的快速发展&#xff0c;TikTok已成为全球用户最喜欢的短视频平台之一&#xff0c;吸引了数以亿计的用户。然而&#xff0c;在享受这个平台时&#xff0c;用户经常会遇到无网络连接的问题&#xff0c;这不仅影响观看体验&#xff0c;还可能导致无法上传内容或参与社…...

k8s中,ingress的实现原理,及其架构。

图片来源&#xff1a;自己画的 图片来源&#xff1a;k8s官网 首先&#xff0c;什么是ingress? 是服务还是控制器&#xff1f; 都不精确 ingress是一个api资源 service和deployment也是api资源。 这几个相互协作&#xff0c;组建成一个对外提供服务的架构。 ingress提供的…...

【数据结构强化】应用题打卡

应用题打卡 数组的应用 对称矩阵的压缩存储 注意&#xff1a; 1. 2.上三角的行优先存储及下三角的列优先存储与数组的下表对应 上/下三角矩阵的压缩存储 注意&#xff1a; 上/下三角压缩存储是将0元素统一压缩存储&#xff0c;而不是将对角线元素统一压缩存储 三对角矩阵的…...

解决 MySQL 服务无法启动:failed to restart mysql.service: unit not found

目录 前言1. 问题描述2. 问题分析3. 解决步骤3.1 检查 MySQL 服务文件3.2 备份旧的服务文件3.3 启动 MySQL 服务3.4 验证服务状态 4. 总结结语 前言 在日常使用 MySQL 数据库时&#xff0c;有时候可能会遇到服务无法正常启动的问题。这类问题通常出现在系统更新或者服务配置文…...

Dubbo和Http的调用有什么区别

背景 我们在项目开发中&#xff0c;需要进行调用外部接口时&#xff0c;往往使用Dubbo和Http方式都能实现远程调用。那么他们在使用上&#xff0c;有什么区别呢&#xff1f; 定位不同 一个是分布式环境下的框架&#xff0c;一个是通信协议。 Dubbo&#xff1a;是一种高性能的…...

ARM 架构、cpu

一、ARM的架构 ARM是一种基于精简指令集&#xff08;RISC&#xff09;的处理器架构. 1、ARM芯片特点 ARM芯片的主要特点有以下几点&#xff1a; 精简指令集&#xff1a;ARM芯片使用精简指令集&#xff0c;即每条指令只完成一项简单的操作&#xff0c;从而提高指令的执行效率…...

【React】入门Day03 —— Redux 与 React Router 核心概念及应用实例详解

1. Redux 介绍 // 创建一个简单的Redux store const { createStore } Redux;// reducer函数 function counterReducer(state { count: 0 }, action) {switch (action.type) {case INCREMENT:return { count: state.count 1 };case DECREMENT:return { count: state.count -…...

u2net网络模型训练自己数据集

单分类 下载项目源码 项目源码 准备数据集 将json转为mask json_to_dataset.py import cv2 import json import numpy as np import os import sys import globdef func(file):with open(file, moder, encoding"utf-8") as f:configs json.load(f)shapes configs…...

登录功能开发 P167重点

会话技术&#xff1a; cookie jwt令牌会话技术&#xff1a; jwt生成&#xff1a; Claims&#xff1a;jwt中的第二部分 过滤器&#xff1a; 拦截器&#xff1a; 前端无法识别controller方法&#xff0c;因此存在Dispa什么的...

数据架构图:从数据源到数据消费的全面展示

在这篇文章中&#xff0c;我们将探讨如何通过架构图来展示数据的整个生命周期&#xff0c;从数据源到数据消费。下面是一个使用Mermaid格式的示例数据架构图&#xff0c;展示了数据从源到消费的流动、处理和存储过程。 数据架构图示例 说明 数据源&#xff1a;分为内部数据源&…...

useEffect 与 useLayoutEffect 的区别

useEffect 与 useLayoutEffect 的区别 useEffect和useLayoutEffect是处理副作用的React钩子函数&#xff0c;有以下区别1. 执行时机不同2. 对性能影响不同3. 对渲染的影响不同&#xff1a;4. 使用场景不同 使用建议 useEffect和useLayoutEffect是处理副作用的React钩子函数&…...

OPENCV判断图像中目标物位置及多目标物聚类

文章目录 在最近的项目中&#xff0c;又碰到一个有意思的问题需要通过图像算法来解决。就是显微拍摄的到的医疗图像中&#xff0c;有时候目标物比较偏&#xff0c;也就是在图像的比较偏的位置&#xff0c;需要通过移动样本&#xff0c;将目标物置于视野正中央&#xff0c;然后再…...

分布式理论:拜占庭将军问题

分布式理论&#xff1a;拜占庭将军问题 介绍拜占庭将军的故事将军的难题 解决方案口信消息型拜占庭问题之解流程总结 签名消息型拜占庭问题之解 总结 介绍 拜占庭将军问题是对分布式共识问题的一种情景化描述&#xff0c;由兰伯特于1082首次发表《The Byzantine Generals Prob…...

从零开始Ubuntu24.04上Docker构建自动化部署(三)Docker安装Nginx

安装nginx sudo docker pull nginx 启动nginx 宿主机创建目录 sudo mkdir -p /home/nginx/{conf,conf.d,html,logs} 先启动nginx sudo docker run -d --name mynginx -p 80:80 nginx 宿主机上拷贝docker上nginx服务上文件到本地目录 sudo docker cp mynginx:/etc/nginx/ngin…...

阿里云 SAE Web:百毫秒高弹性的实时事件中心的架构和挑战

作者&#xff1a;胡志广(独鳌) 背景 Serverless 应用引擎 SAE 事件中心主要面向早期的 SAE 控制台只有针对于应用维度的事件&#xff0c;这个事件是 K8s 原生的事件&#xff0c;其实绝大多数的用户并不会关心&#xff0c;同时也可能看不懂。而事件中心&#xff0c;是希望能够…...

人口普查管理系统基于VUE+SpringBoot+Spring+SpringMVC+MyBatis开发设计与实现

目录 1. 系统概述 2. 系统架构设计 3. 技术实现细节 3.1 前端实现 3.2 后端实现 3.3 数据库设计 4. 安全性设计 5. 效果展示 ​编辑​编辑 6. 测试与部署 7. 示例代码 8. 结论与展望 一个基于 Vue Spring Boot Spring Spring MVC MyBatis 的人口普查管理…...

使用VBA快速将文本转换为Word表格

Word提供了一个强大的文本转表格的功能&#xff0c;结合VBA可以实现文本快速转换表格。 示例文档如下所示。 现在需要将上述文档内容转换为如下格式的表格&#xff0c;表格内容的起始标志为。 示例代码如下。 Sub SearchTab()Application.DefaultTableSeparator "*&quo…...

力扣题解1870

这道题是一个典型的算法题&#xff0c;涉及计算在限制的时间内列车速度的最小值。这是一个优化问题&#xff0c;通常需要使用二分查找来求解。 题目描述&#xff08;中等&#xff09; 准时到达的列车最小时速 给你一个浮点数 hour &#xff0c;表示你到达办公室可用的总通勤时…...

D3.js数据可视化基础——基于Notepad++、IDEA前端开发

实验:D3.js数据可视化基础 1、实验名称 D3数据可视化基础 2、实验目的 熟悉D3数据可视化的使用方法。 3、实验原理 D3 的全称是(Data-Driven Documents),是一个被数据驱动的文档,其实就是一个 JavaScript 的函数库,使用它主要是用来做数据可视化的。本次实…...

在Robot Framework中Run Keyword If的用法

基本用法使用 ELSE使用 ELSE IF使用内置变量使用Python表达式本文永久更新地址: 在Robot Framework中&#xff0c;Run Keyword If 是一个条件执行的关键字&#xff0c;它允许根据某个条件来决定是否执行某个关键字。下面是 Run Keyword If 的基本用法&#xff1a; Run Keyword…...

虚拟机ip突然看不了了

打印大致如下&#xff1a; 解决办法 如果您发现虚拟机的IP地址与主机不在同一网段&#xff0c;可以采取的措施之一是调整网络设置。将虚拟机的网络模式更改为桥接模式&#xff0c;这样它就会获得与主机相同的IP地址&#xff0c;从而处于同一网段。或者&#xff0c;您可以使用…...

LeetCode[中等] 763. 划分字母区间

给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段&#xff0c;同一字母最多出现在一个片段中。 注意&#xff0c;划分结果需要满足&#xff1a;将所有划分结果按顺序连接&#xff0c;得到的字符串仍然是 s 。 返回一个表示每个字符串片段的长度的列表。 思路 贪心…...

网站关键词 提醒/国内搜索引擎优化的公司

#实现isPrime()函数&#xff0c;参数为整数&#xff0c;要有异常处理。如果整数是质数&#xff0c;返回True,否则返回False。#函数分为定义、调用、执行、返回四部分&#xff0c;循环读取输入&#xff0c;注意缩进。*********************************************************…...

Iis wordpress无法发表文章/培训心得体会模板

1.与map的结合使用 我们知道map的元素类型是pair&#xff0c;元素<key,value>是成对出现的。key值是const类型&#xff0c;而value是可变的&#xff0c;我们尝试把value值改变 如图所示&#xff0c;我们发现一个问题&#xff0c;value的值应该由“haha”变为“haha1”&am…...

开个小网站要怎么做/站长资讯

1&#xff0c;Android UI体系 1&#xff09; 三层架构、MVC、MVP、MVVM 对于小项目可以按如下分法&#xff08;mvp选用&#xff09;&#xff1b;对于大项目可以按模块分&#xff0c;然后模块内再按如下分发。 分包&#xff08;按功能分&#xff09;&#xff1a; basal&#xff…...

做网站 我们的工人怎么写/哈尔滨推广优化公司

在现代社会中&#xff0c;拍照已经成为了一项非常普遍的活动。但是&#xff0c;有时我们可能会拍摄出模糊的照片。这些模糊的照片让人感到失望&#xff0c;因为它们无法清晰地展现照片中的主题。然而&#xff0c;你不必放弃这些模糊的照片&#xff0c;因为有一些简单的技巧可以…...

wordpress 折叠文章/seo网站关键字优化

安装黑苹果有风险&#xff0c;请注意备份数据说实话&#xff0c;这种知识类的东西分享很少有人看&#xff0c;也很少得到推荐&#xff0c;也不知道值不值得继续更新。一、问题描述10月13号苹果官方就开始推送big sur&#xff0c;好多用户都收到推送消息&#xff0c;自己又不想升…...

房地产网站模板/徐州百度运营中心

MySQL简单语句的使用在MySQL命令行中&#xff0c;每条语句都是以“&#xff1b;”为标记表示语句的结束。1、查看服务器上存在的数据库mysql> SHOW DATABASES;其中information_schema、mysql两个数据库为MySQL系统数据库&#xff0c;绝对不允许手工配置或修改。2、创建数据库…...