保姆级教学:Java项目从0到1部署到云服务器

news2025/2/24 10:07:59

目录

1、明确内容

2、apt

2.1、apt 语法

2.2、常用命令

2.3、更新apt

3、安装JDK17

4、安装MySQL

4.1、安装

4.2、检查版本及安装位置

4.3、初始化MySQL配置⭐

4.4、检查状态

4.5、配置远程访问⭐

4.6、登录MySQL

4.7、测试数据库

4.8、设置权限与密码⭐

5、安装redis

6、安装Nginx

6.1、相关存储位置

6.2、配置文件

第一部分:全局块

第二部分:events块

第三部分:http块

完整配置文件

80端口占用

6.3、部署前端项目

6.4、测试效果

7、安装tomcat

7.1、报错

7.2、排错⭐

8、防火墙和安全组🔺

8.1、防火墙放行

8.2、阿里云安全组🔺

9、上传工程jar包

9.1、打包

9.2、上云

10、测试项目

10.1、运行

10.2、持续运行🔺


🍃作者介绍:双非本科大三网络工程专业在读,阿里云专家博主,专注于Java领域学习,擅长web应用开发、数据结构和算法,初步涉猎Python人工智能开发和前端开发。
🦅主页:@逐梦苍穹

📕所属专栏:项目
🍔您的一键三连,是我创作的最大动力🌹

Java项目开发完成之后,想要给第三方访问,则需要部署到公网上去,阿里云/腾讯云是不错的选择,这里以阿里云为例进行详细说明

1、明确内容

第一步需要明确好自己部署一个项目到云服务器的同时,需要运行什么其他服务(这里以Java项目为例说明)。

①Java项目首先要部署JDK,这里部署的是JDK17;

②现在主流的Java项目都是以SpringBoot为主流,SpringBoot内嵌了tomcat容器,所以可以不额外部署tomcat服务;

③项目当中涉及到数据存储,需要部署数据库服务,这里使用的是MySQL;

④项目涉及到缓存操作,需要部署redis;

⑤如果项目是前后端分离项目,还需要部署前端nginx服务器,可以配置tomcat集群;

2、apt

apt(Advanced Packaging Tool)是一个在 Debian 和 Ubuntu 中的 Shell 前端软件包管理器。

apt 命令提供了查找、安装、升级、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。

apt 命令执行需要超级管理员权限(root)。

安装:apt-get install name
更新:apt-get update name
卸载:apt-get remove name
查找:apt-cache search name

2.1、apt 语法

apt [options] [command] [package ...]

options可选,选项包括 -h(帮助),-y(当安装过程提示选择全部为"yes"),-q(不显示安装的过程)等等。

command要进行的操作。

package:安装的包名。

2.2、常用命令

操作

命令

列出所有可更新的软件清单

sudo apt update

升级软件包

sudo apt upgrade

列出可更新的软件包及版本信息

apt list --upgradeable

升级软件包,升级前先删除需要更新的软件包

sudo apt full-upgrade

安装指定的软件包

sudo apt install <package_name>

安装多个软件包

sudo apt install <package_1> <package_2> <package_3>

更新指定的软件包

sudo apt update <package_name>

显示软件包具体信息(例如:版本号,安装大小,依赖关系等)

sudo apt show <package_name>

删除软件包

sudo apt remove <package_name>

清理不再使用的依赖和库文件

sudo apt autoremove

移除软件包及配置文件

sudo apt purge <package_name>

查找软件包

sudo apt search

列出所有已安装的包

apt list --installed

列出所有已安装的包的版本信息

apt list --all-versions

2.3、更新apt

3、安装JDK17

sudo apt install openjdk-17-jdk

当系统要求输入密码时,请输入密码。然后键入 'Y' 并按 'Enter' 继续安装。

检查是否安装成功:

运行个jar包试试看:

正常运行,环境配置无误!

4、安装MySQL

4.1、安装

sudo apt-get install mysql-server

4.2、检查版本及安装位置

4.3初始化MySQL配置⭐

输入命令:sudo mysql_secure_installation

需要的配置项会比较多,详细如下:

1)这里输入N,选择不进行密码的强校验:

2)这里输入Y,选择确认删除匿名用户:

3)这里输入N,选择允许root远程登陆:

4)这里输入N,选择不删除test数据库:

5)这里输入Y,选择修改的权限立即生效:

6)至此,初始化完成:

4.4、检查状态

检查MySQL服务的运行状态:systemctl status mysql.service

可以看到正常运行!

4.5、配置远程访问

在Ubuntu下MySQL缺省是只允许本地访问的,使用远程连接工具是连不上的;

如果要其他机器也能够访问的话,需要进行配置;

找到 bind-address 修改值为 0.0.0.0(如果需要远程访问)。

命令:sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

此处修改为0.0.0.0

修改完成,记得重启服务:sudo /etc/init.d/mysql restart

如果遇到vi编辑器不能正常的插入和保存的情况,可以选择重新安装vim。

由于Ubuntu预装的是vim-tiny,而我们需要使用vim-full,步骤如下:

①卸载vim-tiny:apt-get remove vim-common

②安装vim-full:apt-get install vim

4.6、登录MySQL

命令:sudo mysql -uroot -p
输入用户和密码(按照上面的步骤,此时的root用户是没有密码的,直接回车即可):

4.7、测试数据库

show databases:

use mysql:

select User,authentication_string,Host from user:

select host,user,plugin from user:

4.8、设置权限与密码

命令:

使用mysql_native_password修改加密规则:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '密码';

更新用户的密码:

ALTER USER 'root'@'localhost' IDENTIFIED BY '密码' PASSWORD EXPIRE NEVER;

允许远程访问:

UPDATE user SET host = '%' WHERE user = 'root';

刷新cache中配置,刷新权限:

flush privileges;

如图:

到这里,MySQL在Ubuntu上的配置和安装就完成了!

5、安装redis

安装Redis:sudo apt install redis-server

安装完成后,Redis将自动启动。

检查Redis服务状态:sudo systemctl status redis-server

如果Redis未自动启动,则手动启动Redis:sudo systemctl start redis-server

接下来,为Redis设置密码:

首先,停止Redis服务:sudo systemctl stop redis-server

然后,编辑Redis配置文件:vim /etc/redis/redis.conf

在配置文件中找到以下行:# requirepass foobared

注释掉这行,添加密码,将 # requirepass foobared 修改为requirepass yourpassword,其中 yourpassword 是需要设置的密码。保存并关闭文件。

最后,重新启动Redis服务:sudo systemctl restart redis-server

现在,Redis已经安装并设置了密码。

使用以下命令测试连接Redis:redis-cli -h localhost -p 6379 -a yourpassword ping

如果一切正常,将看到回复 "PONG"。现在,已经成功在Ubuntu上安装了Redis并设置了密码。

redis监听的是127.0.0.1:6379,并不监听外网的请求,因此想要远程连接,还需要对redis.conf配置文件中的相关内容进行修改:

①将 bind 127.0.0.1 ::1 注释掉

②将 protected-mode 改成 no:

6、安装Nginx

安装命令:sudo apt-get install nginx

验证是否安装成功:nginx -v

6.1、相关存储位置

默认安装位置:

/usr/sbin/nginx:主程序

/etc/nginx:存放配置文件

/usr/share/nginx:存放静态文件

/var/log/nginx:存放日志

测试配置文件/etc/nginx/conf.d是否正确:

6.2、配置文件

nginx最重要的莫过于配置文件,其中:

主配置文件:/etc/nginx/nginx.conf

其他配置文件:/etc/nginx/conf.d/xxxx.conf

建议是一个主配置文件+多个其他配置文件协同工作,这样能更好的规范配置项,显得更有条理性

进入/etc/nginx目录:

主配置文件为:nginx.conf。

可以将 nginx.conf 配置文件分为三部分:

第一部分:全局块

worker_processes  auto;

从配置文件开始到 events 块之间的内容,主要会设置一些影响 Nginx 服务器整体运行的配置指令,主要包括:配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等。

上面这行 worker_processes 配置,这是 Nginx 服务器并发处理服务的关键配置,该值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的制约。

第二部分:events块

events {

 worker_connections  768;

}

events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括:是否开启对多 work process下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 wordprocess 可以同时支持的最大连接数等。

上述例子就表示每个 work process 支持的最大连接数为 1024。这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置。

第三部分:http块

http {
	sendfile on;
	tcp_nopush on;
	types_hash_max_size 2048;
	# server_tokens off;

	# server_names_hash_bucket_size 64;
	# server_name_in_redirect off;

	include /etc/nginx/mime.types;
	default_type application/octet-stream;

	ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
	ssl_prefer_server_ciphers on;

	access_log /var/log/nginx/access.log;
	error_log /var/log/nginx/error.log;

	gzip on;

	# gzip_vary on;
	# gzip_proxied any;
	# gzip_comp_level 6;
	# gzip_buffers 16 8k;
	# gzip_http_version 1.1;
	# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

	##
	# Virtual Host Configs
	##

	server {
		listen       80;
		server_name  localhost;

		#charset koi8-r;

		#access_log  logs/host.access.log  main;

		location / {
			root   html/sky;
			index  index.html index.htm;
		}
		
    error_page   500 502 503 504  /50x.html;
   	location = /50x.html {
    	root   html;
   	}

    # 反向代理,处理管理端发送的请求
    location /api/ {
    proxy_pass   http://localhost:8080/admin/;
          #proxy_pass   http://webservers/admin/;
    }

    # 反向代理,处理用户端发送的请求
    location /user/ {
          proxy_pass   http://localhost:8080/user/;
    }

    # WebSocket
    location /ws/ {
          proxy_pass   http://localhost:8080/ws/;
    }
	}
	
	include /etc/nginx/conf.d/*.conf;
	include /etc/nginx/sites-enabled/*;
}

这部分是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。

需要注意的是:http 块也可以包括 http 全局块、server 块。

下面的反向代理、动静分离、负载均衡都是在这部分中配置。

、http 全局块

http 全局块配置的指令包括:文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。

、server 块

这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。

每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。

而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块:

全局 server 块:最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或 IP 配置。

location 块:一个 server 块可以配置多个 location 块。这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称(也可以是 IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。

反向代理:

在server中配置:

完整配置文件

主配置文件内容如下:

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
	worker_connections 768;
	# multi_accept on;
}

http {
	sendfile on;
	tcp_nopush on;
	types_hash_max_size 2048;
	# server_tokens off;

	# server_names_hash_bucket_size 64;
	# server_name_in_redirect off;

	include /etc/nginx/mime.types;
	default_type application/octet-stream;

	ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
	ssl_prefer_server_ciphers on;

	access_log /var/log/nginx/access.log;
	error_log /var/log/nginx/error.log;

	gzip on;

	# gzip_vary on;
	# gzip_proxied any;
	# gzip_comp_level 6;
	# gzip_buffers 16 8k;
	# gzip_http_version 1.1;
	# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

	##
	# Virtual Host Configs
	##

	server {
		listen       80;
		server_name  localhost;

		#charset koi8-r;

		#access_log  logs/host.access.log  main;

		location / {
			root   html/sky;
			index  index.html index.htm;
		}
		
    error_page   500 502 503 504  /50x.html;
   	location = /50x.html {
    	root   html;
   	}

    # 反向代理,处理管理端发送的请求
    location /api/ {
    proxy_pass   http://localhost:8080/admin/;
          #proxy_pass   http://webservers/admin/;
    }

    # 反向代理,处理用户端发送的请求
    location /user/ {
          proxy_pass   http://localhost:8080/user/;
    }

    # WebSocket
    location /ws/ {
          proxy_pass   http://localhost:8080/ws/;
    }
	}
	
	include /etc/nginx/conf.d/*.conf;
	include /etc/nginx/sites-enabled/*;
}

80端口占用

在部署的过程中可以发现,当nginx.conf配置监听端口为非80端口时,访问nginx服务器的80端口依旧生效,会自动跳转到欢迎页面(welcome to nginx!) ,这是因为:

在/etc/nginx/sites-enabled这个目录下面有一个default文件,这个文件是默认加载的而配置文件:

编辑这个default文件,打开以后是这样的:

listen端口默认就是80,把它改为非80端口,就不会出现80端口被欢迎页面占用的情况。

6.3、部署前端项目

打包好的前端项目可以放在自定义的文件夹下面:

记得配置好相关路径:

监听端口默认80端口。

6.4、测试效果

部署完成可以开始测试:

在本地访问localhost,在阿里云则访问对应的ip地址:

可以看到,测试没有问题!

7、安装tomcat

这个步骤可以不需要,只是为了完善整套环境。

因为在第一部分"明确内容"的时候提到过,现在主流的都是SpringBoot项目,而SpringBoot是内嵌了tomcat容器的,如图:

项目使用的是SpringBoot2.X版本,所以内嵌的是tomcat9.0.65版本。

这里就安装对应的版本来测试一下即可。

安装:sudo apt install tomcat9

7.1、报错

这个环境下同时装了JDK17和tomcat9,不出意外的话,启动服务的时候是要报错的:

报错信息显示找不到JDK,但是实际上有JDK:

7.2、排错⭐

不出意外的话,这应该是一个老生常谈的"错误"了,就是tomcat9的某些配置文件不识别JDK17。

先查看tomcat9的安装路径(whereis tomcat9):

根据上面的报错信息,可以看到加载/lib/systemd/system/tomcat9.service失败。

下面进入/lib/systemd/system/,查看tomcat9.service文件:

可以看到Tomcat9的启动脚本是/usr/libexec/tomcat9/tomcat-start.sh,下面查看该脚本的内容:

可以发现,这里有一个脚本/usr/libexec/tomcat9/tomcat-locate-java.sh是用来寻找Java环境的,下面查看该脚本:

成功发现问题:这个脚本的内容不包括Java17

解决方案:加上Java17,如下:

像这样加入17,然后重启服务就可以了。

7.3、测试

systemctl restart tomcat9

systemctl status tomcat9

成功运行:

地址栏测试(访问8080端口)出现如下页面表示成功:

如果你在浏览器看到此页面,则表示tomcat成功运行

8、防火墙和安全组🔺

根据上面的七个步骤,整个项目的环境部署已经完成了,但是外部依旧无法访问。

此处有两个关键要点:①操作系统防火墙开放对应端口;②阿里云外部设置安全组策略

8.1、防火墙放行

放行命令:ufw allow [端口号]

查看防火墙:ufw status

8.2、阿里云安全组🔺

进入云服务器ECS控制台,找到"安全组":

点击管理规则:

点击手动添加入站规则:

至此,项目环境部署完成!

9、上传工程jar包

9.1、打包

打开开发工具IntelliJ IDEA,

第一步:跳过测试

第二步:在父模块下执行"clean":

第三步:在父模块执行"compile"编译

第四步:根据依赖关系依次执行"install"(依赖的内容越多,越慢执行"install")

这里的顺序就应该是:先"install"模块sky-pojo,再模块sky-common,最后"install"最核心的服务模块sky-server。最后打开"install"模块sky-server的jar包路径:

找到路径的target目录:

把这个jar包上传到阿里云服务器即可。

9.2、上云

利用远程连接工具连接阿里云服务器(如finalshell或Xshell):

10、测试项目

10.1、运行

连上阿里云操作系统:

在阿里云的Ubuntu系统上运行jar包即可,效果如图:

10.2、持续运行🔺

由于springboot内置了tomcat容器,我们通常会把项目打成jar或者war后直接使用java -jar xxx.jar命令去运行程序,但是当前ssh窗口被锁定或者按下ctrl+c又或者关闭了ssh窗口,那么程序就会被终止。

一旦退出操作系统,即使操作系统依旧在运行中,但是项目却无法访问了。

这是因为java -jar的命令只能在当前进程运行,我们需要的是在后台单独开一个进程,让它持续运行。

解决方案一:

java -jar xxx.jar &
&代表在后台运行。
特点:当前ssh窗口不被锁定,但是当窗口关闭时,程序中止运行。

解决方案二:

nohup java -jar SpringBootDemo.jar &

nohup 意思是不挂断运行命令,当账户退出或终端关闭时,程序仍然运行

当用 nohup 命令执行时,缺省情况下该进程的所有输出被重定向到nohup.out的文件中,除非另外指定了输出文件。

解决方案三:

nohup java -jar SpringBootDemo.jar >out.txt &

">out.txt"是将command的输出重定向到out.txt文件,即输出内容不打印到屏幕上,而是输出到out.txt文件中

推荐使用方案二或方案三!

这里只是做一个简单的样例展示,具体可以根据springBoot的日志技术,分层级分大小的去记录日志到本地文件

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

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

相关文章

基于Python flask MySQL 猫眼电影可视化系统设计与实现

1 绪论 1.1 设计背景及目的 猫眼电影作为国内知名的电影信息网站&#xff0c;拥有海量的电影信息、票房数据和用户评价数据。这些数据对于电影市场的研究和分析具有重要意义。然而&#xff0c;由于数据的复杂性和数据来源的多样性&#xff0c;如何有效地采集、存储和展示这些数…

0127-2-Vue深入学习5—Vue-Router路由模式

1、Vue-Router三种路由模式&#xff1a; hash&#xff1a;#️⃣使用URL hash 值来做路由&#xff0c;支持所有路由器&#xff1b;history:&#x1f4d6;依赖HTML5 History API和服务器配置&#xff1b;abstract:⛓支持所有JS运行环境&#xff0c;Node.js服务端&#xff1b; 1.1…

基于springboot+vue+mysql+mybatis的博客系统源码+数据库

pb-cms 介绍 博客系统&#xff0c;架构&#xff1a;springbootvuemysqlmybatis 软件架构 软件架构说明 系统截图 技术选型 技术版本说明Spring Boot2.1.6MVC核心框架Spring Security oauth22.1.5认证和授权框架MyBatis3.5.0ORM框架MyBatisPlus3.1.0基于mybatis&#xff0…

HCIA-HarmonyOS设备开发认证-3.内核基础

目录 前言目标一、进程与线程待续。。。 前言 对于任何一个操作系统而言&#xff0c;内核的运行机制与原理是最为关键的部分。本章内容从多角度了解HarmonyOS的内核运行机制&#xff0c;涵盖进程与线程的概念&#xff0c;内存管理机制&#xff0c;网络特性&#xff0c;文件系统…

高级CPU(提高CPU运行速度)

晶体管 早期是加快晶体管切换速度,来提升CPU速度 增加电路 给CPU专门的除法电路其他电路来做复杂操作 缓存&#xff08;cache&#xff09; 给CPU加缓存&#xff08;cache&#xff09;,提高数据存取速度,更快送给CPU&#xff0c;因为处理器里空间不大所以缓存一般只有KB或M…

BGP:03 BGP路由

这是实验拓扑&#xff0c;IBGP 利用环回口建立邻居&#xff0c;IGP 协议为 OSPF&#xff0c; EBGP 通过物理接口建立邻居 基本配置&#xff1a; R1: sys sysname R1 int loop 0 ip add 1.1.1.1 24 int g0/0/0 ip add 192.168.12.1 24 qR2: sys sysname R2 int loop 0 ip ad…

基于SSM的网络办公系统(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的网络办公系统&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring Spri…

c语言基础6

1.逗号表达式 逗号表达式&#xff0c;就是用逗号隔开的多个表达式。 逗号表达式&#xff0c;从左向右依次执行。整个表达式的结果是最后⼀个表达式的结果。 我们来看下面的一个代码&#xff1a; int main() {int a 1;int b 2;int ret (a > b, a b 2, b, b a 1);p…

shell脚本基础之函数与数组详解

目录 一、shell函数 1、shell函数的概念 2、shell函数的用法 2.1 定义函数 2.2 调用函数 2.3 函数作用范围 2.3.1 调用函数的范围 2.3.2 全局作用域和局部作用域 3、 函数返回值 3.1 系统默认的返回值 3.2 return语句 4、函数传参 5、查看函数列表 6、删除函数 …

RC4Drop加密:提升数据保护的新选择

摘要&#xff1a;RC4Drop是一种基于RC4算法的加密技术&#xff0c;通过将明文数据分成多个部分并进行加密&#xff0c;实现了对数据的高效保护。本文将对RC4Drop加密技术的优缺点进行详细分析&#xff0c;并给出一个Java完整demo示例。 RC4Drop加密解密 | 一个覆盖广泛主题工具…

kafka-顺序消息实现

kafka-顺序消息实现 场景 在购物付款的时候&#xff0c;订单会有不同的订单状态&#xff0c;对应不同的状态事件&#xff0c;比如&#xff1a;待支付&#xff0c;支付成功&#xff0c;支付失败等等&#xff0c;我们会将这些消息推送给消息队列 &#xff0c;后续的服务会根据订…

Redis数据类型-string

Redis-string类型 Redis中的数据类型全局命令get&setredis中变量设置的过期时间是如何检测的 keysexistsdelexpirettlpexpirepttltype string数据类型的底层的数据结构操作string类型的常用命令get&setmset&mgetsetnxsetexpsetexincr&decrincrby&decrbyinc…

前端实现弹小球功能

这篇文章将会做弹小球游戏&#xff0c;弹小球游戏大家小时候都玩过&#xff0c;玩家需要在小球到达游戏区域底部时候控制砖块去承接小球&#xff0c;并不断的将小球弹出去。 首先看一下实现的效果。 效果演示 玩家需要通过控制鼠标来实现砖块的移动&#xff0c;保证在小球下落…

借款还款记录账本,助你轻松地应对借还款带来的种种问题

借还款明细管理看似琐碎&#xff0c;实则关乎我们的切身利益。现在有【晨曦记账本】为你的财务健康保驾护航&#xff0c;让你可以更加轻松地应对借款和还款带来的种种问题&#xff0c;让生活更加简单、有序。 所需工具&#xff1a; 一个【晨曦记账本】软件 操作步骤&#xf…

使用大模型检索增强 Rerank 模型,检索效果提升太明显了!

Rerank 在 RAG&#xff08;Retrieval-Augmented Generation&#xff09;过程中扮演了一个非常重要的角色&#xff0c;普通的 RAG 可能会检索到大量的文档&#xff0c;但这些文档可能并不是所有的都跟问题相关&#xff0c;而 Rerank 可以对文档进行重新排序和筛选&#xff0c;让…

【C++】——类和对象(中)

一、前言 好久没有更新内容了&#xff0c;今天为大家带来类和对形中期的内容 &#xff01; 二、正文 1.this指针 1.1this指针的引入 class Date { public:void Init(int year, int month, int day){_year year;_month month;_day day;}void Print(){cout << _year …

2. HarmonyOS 应用开发 DevEco Studio 准备-2

2. HarmonyOS 应用开发 DevEco Studio 准备-2 首选项设置 中文设置 主题 字体 插件安装和使用 保存时操作 编辑器 工程树管理 代码树管理 标记 字符串可视化编辑 参考文档 常用快捷键 编辑 查找或替换 编译与运行 调试 其他 预览 页面预览 自定义组件预览 预览…

2023年中国工控自动化市场现状及竞争分析,美日占主角,国产品牌初崭头角

工控自动化是一种运用控制理论、仪器仪表理论、计算机和信息技术&#xff0c;对工业生产过程实现检测、控制、优化、调度、管理和决策&#xff0c;达到增加产量、提高质量、降低消耗、确保安全等目的综合性技术。产品应用领域广泛&#xff0c;可分为OEM型行业和项目型行业。 近…

Metaphor(EXA) 基于大语言模型的搜索引擎

文章目录 关于 Metaphor使用示例 关于 Metaphor Metaphor是基于大语言模型的搜索引擎&#xff0c;允许用户使用完整的句子和自然语言搜索&#xff0c;还可以模拟人们在互联网上分享和谈论链接的方式进行查询内容。 Metaphor同时还能与LLMs结合使用&#xff0c;允许LLMs连接互联…

༺༽༾ཊ—Unity之-05-抽象工厂模式—ཏ༿༼༻

首先创建一个项目&#xff0c; 在这个初始界面我们需要做一些准备工作&#xff0c; 建基础通用文件夹&#xff0c; 创建一个Plane 重置后 缩放100倍 加一个颜色&#xff0c; 任务&#xff1a;使用 抽象工厂模式 创建 人物与宠物 模型&#xff0c; 首先资源商店下载 人物与宠物…