搭建Tomcat(一)---SocketServerSocket
目录
引入1
引入2--socket
流程
Socket(应用程序之间的通讯保障)
网卡(计算机之间的通讯保障)
端口
端口号
实例
client端
解析
server端
解析
相关方法
问题1:ServerSocket和Socket有什么关系?
ServerSocket
Socket
关系和作用总结
问题2:ServerSocket和Socket的区别?
一、构造方法与参数
二、核心方法
三、通信过程
引入1
Tomcat是一个开源的Java Web服务器和Servlet容器,它遵循Servlet和JavaServer Pages(JSP)规范。Tomcat的架构主要包含两个核心组件:连接器(Connector)和容器(Container)。
那么Tomcat究竟是做什么的呢?---服务器开发
简而言之,一句话总结,tomcat就是一个用来承载项目的web容器。
众所周知,我们自己创建的项目是不能随意访问的。
要想让网络能够随意访问这些项目,就要把它们丢进tomcat中。
上面将项目丢进tomcat的操作,就是实现其中配置的项目接受http请求。
使用tomcat的过程,就是实现以下路径的转变:
经过上述简单概念,对tomcat的作用和概念有了简单的了解,接下来引入另一个重要概念:Socket。
引入2--socket
如下的关系图是两个应用程序(或两台计算机)之间传输数据的构造图:
流程
简述不同计算机程序之间是如何互传信息的流程:
本台应用程序A输出一些数据信息,并且通过socket传输给本台操作系统对数据进行处理后变成由0和1组成的二进制数据流信号,进而被本台的网卡通过计算机网络(WiFi等)传输给另一台计算机的网卡接收,经另一台计算机的操作系统处理信息后,通过socket传输给应用程序B上展示。
以上就是一个完整的工作流程。
Socket(应用程序之间的通讯保障)
Socket(套接字)是网络通信中的一个抽象接口,它提供了进程间通信的端点。Socket允许同一台计算机或不同计算机上的应用程序通过网络进行通信,实现了跨网络的进程间通信。Socket不仅包含了IP地址和端口号等通信信息,还提供了数据传输和接收的接口。通过Socket,应用程序可以建立网络连接、发送和接收数据,实现网络通信的各种功能。
(每个Socket都对应一个来源,多个socket对应多个来源;Socket会一直保存来源线程,我们只需要通过Response直接返回到socket上即可!)
网卡(计算机之间的通讯保障)
网卡通常安装在计算机的主板插槽中,或者通过USB、PCIe等接口与计算机连接。它的主要功能是实现计算机与网络之间的数据交换,即将计算机内部的数据通过网络传输到外部,同时将外部网络的数据传输到计算机内部。
简而言之,网卡就是相互之间通过计算机网络接收和发送0101这种信息的一种物理硬件。
端口
端口是网络通信中的逻辑接口,用于区分不同的服务和应用进程。每个端口都有一个唯一的标识符,即端口号,用于标识特定的服务或应用进程。当计算机通过网络发送数据时,数据会被封装成数据包,并标记上目标端口号,以便接收端能够正确识别和处理。端口的作用在于确保数据能够准确地被发送到目标服务或应用进程,实现网络通信的精确性和可靠性。
端口号
- 作用:端口号用于唯一标识一个网络服务或应用程序。当计算机接收到一个数据包时,它会检查数据包中的目标端口号,并将数据包发送到监听该端口的服务或应用程序。
- 范围:端口号的范围通常是0到65535。其中,0到1023是系统保留端口,通常被用于常见的网络服务,如HTTP(80端口)、HTTPS(443端口)、FTP(21端口)等。这些端口通常被系统或管理员保留,不建议普通用户随意使用。1024到65535是用户端口或动态端口,可以由用户根据需要自由分配。
如下,就是一个对端口号应用的例子:
通过端口号实现一台计算机上不同网络服务或应用程序的区分,以保证数据信息能够准确无误的传输。
实例
下面来实现客户端向服务端发送信息,以及服务端接收到并且输出的代码:
client端
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.Socket;
import java.util.Scanner;public class Client {public static void main(String[] args) throws IOException {//客户端只需要从本地IP地址向指定的端口去发送Socket socket=new Socket("127.0.0.1",8080);//打开输出流--准备传送数据OutputStream outputStream=socket.getOutputStream();//创建输出流类型的流数据类型参数PrintStream printStream=new PrintStream(outputStream);Scanner in=new Scanner(System.in);String x=in.nextLine();//获取一行的数据printStream.println(x);printStream.close();in.close();}
}
解析
接下来开始解析上述的代码:
Socket socket=new Socket("127.0.0.1",8080);
"127.0.0.1"是本地IP,8080是一个端口号,这一条表示声明一个Socket对象,用于建立本地客户端与服务器之间的连接,通过8080端口。
OutputStream outputStream=socket.getOutputStream();
通过Socket对象的getOutputStream()方法获取输出流;这个输出流用于向服务器发送数据
PrintStream printStream=new PrintStream(outputStream);
创建一个PrintStream对象,将OutputStream作为参数传入(将将 OutputStream
包装成 PrintStream
)
为什么使用PrintStream?
PrintStream提供了丰富的打印方法,使得向输出流写入数据变得更加方便,(如
print()
,println()
,printf()
等),这些方法可以自动将参数转换为字符串并写入到输出流中,同时,PrintStream还提供自动刷新功能,每次写入后都会自动调用flush()
方法,确保数据被及时发送到输出流。
客户端的输出流一定要使用PrintStream吗?
如果数据是纯字节数据(如图像、音频文件等),那么直接使用
OutputStream
的write()
方法就足够了,不需要将OutputStream
包装成PrintStream
。如果数据是文本数据,并且需要格式化输出(如添加换行符、格式化数字等),那么使用
PrintStream
会更加便捷。在客户端向服务器发送文本数据时,虽然可以直接使用
OutputStream
的write(byte[] b, int off, int len)
方法来发送字符串的字节表示(通过字符串的getBytes()
方法获取字节数组),但这样做需要手动处理字符串的编码和转换,而且不方便添加换行符等文本格式。因此,使用PrintStream
可以简化这些操作。
Scanner in=new Scanner(System.in);
String x=in.nextLine();//获取一行的数据
键盘输出一行作为传送信息
printStream.println(x);printStream.close();in.close();
使用PrintStream的println()方法将用户输入的字符串发送到服务器;其中println()方法会在字符串末尾自动添加换行符,并将其写入到输出流中。
完成这一切后,关闭scanner和printStream。
server端
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;public class Server {public static void main(String[] args) throws IOException {run();}public static void run() throws IOException {ServerSocket serverSocket=new ServerSocket(8080); //0~65535监听接口while(true){//一直等待客户端连接(无限循环)//无限循环就意味着需要做出解除方法Socket socket= serverSocket.accept();//接收到client信息后,将获取的请求初始化给Socket(阻塞监听)//输出客户端给我们发来的程序InputStream inputStream=socket.getInputStream(); //打开输入流-接收输入的信息--并赋值给inputStreamint count=0;while(count==0){count= inputStream.available(); //获取可读出的字节数}byte[] bytes=new byte[count]; //开辟适合大小的byte数组inputStream.read(bytes);// 从输入流中读取数据到byte数组String context=new String(bytes);//将输入流转化为字符串输出System.out.println(context);}}
}
解析
接下来开始解析上述的代码:
ServerSocket serverSocket = new ServerSocket(8080);
创建一个监听端口8080的ServerSocket
实例。端口号8080是任选的,但必须是0到65535之间的有效端口。
while (true)
服务器持续运行,等待客户端连接。
Socket socket = serverSocket.accept();
accept
方法会阻塞(暂停执行),直到一个客户端连接到服务器。一旦有连接,它就返回一个Socket
实例,用于与该客户端通信。
//输出客户端给我们发来的程序InputStream inputStream=socket.getInputStream(); //打开输入流-接收输入的信息--并赋值给inputStreamint count=0;while(count==0){count= inputStream.available(); //获取可读出的字节数}byte[] bytes=new byte[count]; //开辟适合大小的byte数组inputStream.read(bytes);// 从输入流中读取数据到byte数组String context=new String(bytes);//将输入流转化为字符串输出System.out.println(context);
InputStream inputStream = socket.getInputStream();
:从客户端连接获取输入流,用于读取客户端发送的数据(创建输入流)。int count = 0; while (count == 0) { count = inputStream.available(); }
:这段代码读取输入流中可用的字节数。byte[] bytes = new byte[count];
:根据available()
返回的字节数创建一个字节数组。inputStream.read(bytes);
:从输入流中读取数据到字节数组。String context = new String(bytes);
:将字节数组转换为字符串。方便下一步输出。System.out.println(context);
:在控制台上打印从客户端接收到的字符串。
运行1:
在client端借用socket输出流时(这个方法毋庸置疑,毕竟这两段代码的本质目的就是为了这个)
我在客户端输入“你好!”
将在服务器端接收到“你好!”
运行2
我在浏览器输入:
也能在服务端拦截到这个信息(这是因为服务器一直在拦截识别8080端口的信息,不管出自哪里,所用通路是一样的):
相关问题
通过上述的讲解和应用,罗列了以下问题:
问题1:ServerSocket和Socket有什么关系?
ServerSocket
ServerSocket
类位于java.net
包中,它用于创建一个服务器端套接字,该套接字可以监听来自客户端的连接请求。服务器通过绑定到一个特定的端口来等待客户端的连接。一旦有客户端尝试连接到该端口,ServerSocket
就会接受这个连接,并返回一个新的Socket
实例,该实例代表了服务器与客户端之间的通信链路。
ServerSocket
的主要作用包括:
- 监听端口:服务器绑定到一个特定的端口,等待客户端的连接请求。
- 接受连接:通过
accept()
方法阻塞等待,直到一个客户端连接请求到达。- 返回通信链路:一旦连接建立,
accept()
方法会返回一个Socket
对象,用于后续的通信。Socket
Socket
类同样位于java.net
包中,它代表了一个客户端套接字,或者是一个服务器与客户端之间已经建立的通信链路(在服务器端,这个Socket
对象是由ServerSocket
的accept()
方法返回的)。Socket
提供了输入流和输出流,用于在客户端和服务器之间发送和接收数据。
Socket
的主要作用包括:
- 建立连接:客户端通过
Socket
类的构造函数或connect()
方法尝试连接到服务器。- 获取输入/输出流:通过
getInputStream()
和getOutputStream()
方法获取用于读取和写入数据的流。- 通信:使用输入/输出流与服务器进行通信,发送和接收数据。
- 关闭连接:通过
close()
方法关闭与服务器的连接。关系和作用总结
ServerSocket
用于服务器端,负责监听端口和接受客户端的连接请求。Socket
用于客户端(或者服务器端与客户端之间的通信链路),负责建立连接、发送和接收数据。- 服务器端通过
ServerSocket
接受连接后,会返回一个Socket
对象,该对象用于与客户端进行后续的通信。- 客户端通过
Socket
连接到服务器后,同样获得一个Socket
对象(这个对象在客户端创建时就已经获得),用于与服务器进行通信。
问题2:ServerSocket和Socket的区别?
一、构造方法与参数
Socket
- 常见的构造方法有:
Socket(String host, int port)
:创建一个Socket并连接到指定主机上的指定端口。Socket(InetAddress address, int port)
:创建一个Socket并连接到指定IP地址和端口。ServerSocket
- 常见的构造方法有:
ServerSocket(int port)
:创建一个绑定到指定端口的ServerSocket实例。ServerSocket(int port, int backlog)
:创建一个绑定到指定端口的ServerSocket实例,并设置客户端连接请求队列的长度。ServerSocket(int port, int backlog, InetAddress bindAddr)
:创建一个绑定到指定端口和IP地址的ServerSocket实例,并设置客户端连接请求队列的长度。二、核心方法
Socket
connect(SocketAddress endpoint)
:连接到服务器。getInputStream()
:获取输入流,用于从服务器接收数据。getOutputStream()
:获取输出流,用于向服务器发送数据。ServerSocket
accept()
:监听并接受客户端的连接。此方法会阻塞,直到有客户端连接为止。一旦连接建立,它会返回一个新的Socket对象,表示与客户端的连接。getLocalPort()
:获取服务器套接字绑定的本地端口。isClosed()
:检查ServerSocket是否已关闭。三、通信过程
Socket
- 客户端创建一个Socket对象,指定服务器地址和端口。
- 客户端通过Socket对象的输出流向服务器发送数据。
- 客户端通过Socket对象的输入流接收服务器的响应。
ServerSocket
- 服务器创建一个ServerSocket对象,监听指定的端口。
- 服务器调用ServerSocket对象的accept()方法,等待客户端的连接请求。
- 一旦有客户端连接到服务器,ServerSocket会创建一个Socket对象与客户端进行通信。
- 服务器通过Socket对象的输入流接收客户端发送的数据。
- 服务器通过Socket对象的输出流发送响应给客户端。
相关文章:
搭建Tomcat(一)---SocketServerSocket
目录 引入1 引入2--socket 流程 Socket(应用程序之间的通讯保障) 网卡(计算机之间的通讯保障) 端口 端口号 实例 client端 解析 server端 解析 相关方法 问题1:ServerSocket和Socket有什么关系? ServerSocket Soc…...
Sublime Text 64位:前端及全栈开发利器
本文还有配套的精品资源,点击获取 简介:Sublime Text作为一款高效的文本编辑器,在前端网页开发领域受到广泛青睐,特别是其64位版本在处理大型项目和高内存需求的场景下表现出色。编辑器内置Emmet插件,提供代码高亮、…...
CNCF云原生生态版图-分类指南(一)- 观测和分析
CNCF云原生生态版图-分类指南(一)- 观测和分析 CNCF云原生生态版图-分类指南一、观测和分析(Observability and Analysis)(一)可观测性(Observablility)1. 是什么?2. 解决…...
Ubuntu本地快速搭建web小游戏网站,公网用户远程访问【内网穿透】
文章目录 前言1. 本地环境服务搭建2. 局域网测试访问3. 内网穿透3.1 ubuntu本地安装cpolar内网穿透3.2 创建隧道3.3 测试公网访问4. 配置固定二级子域名4.1 保留一个二级子域名4.2 配置二级子域名4.3 测试访问公网固定二级子域名前言 网:我们通常说的是互联网;站:可以理解成…...
VMware ubuntu12.04怎么设置静态IP联网
记得刚开始学习嵌入式就是从ubuntu12.04的环境开始学习的C语言,当时没有弄清楚怎么设置静态IP联网,现在写一篇文章。 1.首先,关闭ubuntu的网络; 2.电脑使用的是wifi,将VMware桥接到该网卡上; 3.在虚拟机设置里面选择桥…...
Qt WORD/PDF(一)使用 QtPdfium库实现 PDF 预览
文章目录 一、简介二、下载 QtPdfium三、加载 QtPdfium 动态库四、Demo 使用 关于QT Widget 其它文章请点击这里: QT Widget 姊妹篇: Qt WORD/PDF(一)使用 QtPdfium库实现 PDF 操作 Qt WORD/PDF(二)使用 QtPdfium库实现…...
UE5 C++ Subsystem 和 多线程
一.Subsystem先做一个简单的介绍,其实可以去看大钊的文章有一篇专门讲这个的。 GamePlay框架基础上的一个增强功能,属于GamePlay架构的范围。Subsystems是一套可以定义自动实例化和释放的类的框架。这个框架允许你从5类里选择一个来定义子类(只能在C定义…...
23.DDD与微服务
学习视频来源:DDD独家秘籍视频合集 https://space.bilibili.com/24690212/channel/collectiondetail?sid1940048&ctype0 文章目录 DDD与微服务的关系1. DDD可以用微服务实现,也可以不用微服务实现2. DDD是微服务拆分的必须参考项之一3. 微服务架构…...
vue3+ant design vue实现日期选择器不展示清除按钮
1、代码:只需设置:allowClear"false"即可 <a-date-pickerv-model:value"value1":disabledDate"disabledDate"change"queryRate":allowClear"false" />const disabledDate (current: Dayjs) > {// 获取…...
Amazon Bedrock与AWS服务的无缝集成,如何打造智能化应用
在AI和大数据飞速发展的今天,Amazon Bedrock作为AWS的一项新兴服务,正逐渐成为开发者和企业拥抱生成式AI的核心工具。那么,Amazon Bedrock与AWS其他服务结合,究竟能够带来哪些强大的应用场景呢?今天九河云就来和大家探…...
Rust之抽空学习系列(四)—— 编程通用概念(下)
Rust之抽空学习系列(四)—— 编程通用概念(下) 1、函数 函数用来对功能逻辑进行封装,能够增强复用、提高代码的可读 以下是函数的主要组成部分: 名称参数返回类型函数体 1.1、函数名称 在Rust中&…...
【Apache paimon】-- 集成 hive3.1.3 异常
目录 1、场景再现 Step1:在 hive cli beeline 执行创建 hive paimon 表 Step2:使用 insert into 写入数据 Step3:抛出异常 2、原因分析 Step1:在 yarn resource manager 作业界面查询 hive sql mr job 的 yarn log Step2:搜索job 使用的 zstd jar 版本 Step3:定…...
SpringCloud微服务实战系列:01让SpringCloud项目在你机器上运行起来
目录 项目选型 项目安装-本地运行起来 软件安装: 项目启动: 总结&答疑 项目选型 软件开发,基本上都不会从0开始,一般都是在其他项目或者组件的基础上进行整合优化迭代,站在巨人肩膀上才能看得更远,…...
分布式锁【Redis场景分布式锁篇】
文章目录 1.Redis分布式锁2.分布式锁其它方案1.主动轮询型1.MySQL分布式锁2.Redis分布式锁 2.监听回调型1.Etcd2.Zookeeper 总结 1.Redis分布式锁 锁通常用来控制共享资源,比如一个进程内有多个线程竞争一个数据的使用权限,解决方式之一就是加锁。分布式…...
BGP协议
BGP(Border Gateway Protocol,边界网关协议)是一种用于在不同网络之间传输可达性信息的路由协议。它是互联网上使用的主要协议之一,用于连接不同的自治系统(AS),即由单个实体控。边界网关协议_百…...
iframe webview打开外链内嵌video标签导致视频无法全屏展示
iframe webview打开外链内嵌video标签导致视频无法全屏展示 解决方法iframe 添加属性webview 添加属性 解决方法 iframe 添加属性 <iframe style"width: 100%;height: 100vh;" src"http://xxx.xxx........" allowfullscreen"true" w…...
学习日志024--opencv中处理轮廓的函数
目录 前言 一、 梯度处理的sobel算子函数 功能 参数 返回值 代码演示 二、梯度处理拉普拉斯算子 功能 参数 返回值 代码演示 三、Canny算子 功能 参数 返回值 代码演示 四、findContours函数与drawContours函数 功能 参数 返回值 代码演示 …...
【从零开始入门unity游戏开发之——C#篇05】转义字符、@处理多行文本或者不使用转义字符、随机数
文章目录 一、转义字符1、什么是转义字符?2、常见的转义字符3、总结 二、使用处理多行文本或者不使用转义字符1、多行字符串2、不使用转义字符 三、随机数1、Random.Next()生成随机整数示例:生成一个随机整数生成指定范围内的随机整数 2、Random.NextSin…...
PHP获取指定日期的下周日至下周六的日期(下周几的日期)
PHP获取指定日期的下周日至下周六的日期(下周几的日期) 在PHP中,可以使用strtotime()函数来获取指定日期的下周日至下周六的日期。 // 周天 sunday // 周一 monday // 周二 tuesday // 周三 wednesday // 周四 thursday // 周五 friday // …...
超越飞书钉钉:探索高效内部知识库平替方案与应用
在团队协作日益频繁的今天,飞书与钉钉作为两大主流的企业沟通与协作平台,广受企业青睐。然而,随着企业规模的扩大和知识的累积,单纯的沟通与协作已难以满足企业对知识管理与传承的需求。因此,寻找一款能够高效整合内部…...
3D相框案例讲解(详细)
前言 通过现阶段的学习,我们已经掌握了HTML,CSS和JS部分的相关知识点,现在让我们通过一篇案例,来巩固我们近期所学的知识点。 详细视频讲解戳这里 任务一 了解目标案例样式 1.1了解案例 3D相框 1.2 分析案例 首先我们看到一个…...
一、基于langchain使用Qwen搭建金融RAG问答机器人--技术准备
一,LangChain框架介绍 LangChain 框架是一个开源工具,通过为各种 LLM 提供通用接口来简化应用程序的开发流程,帮助开发者自由构建 LLM应用。 LangChain封装了很多组件,通过这些组件的组合可以构建多种类型的RAG应用。开发者可以直接将私有数…...
2024年全球安全光幕装置行业总体规模、主要企业国内外市场占有率及排名
根据研究团队调研统计,2023年全球安全光幕装置市场销售额达到了46亿元,预计2030年将达到70亿元,年复合增长率(CAGR)为6.4%(2024-2030)。中国市场在过去几年变化较快,2023年市场规模为…...
uniapp跨端适配—条件编译
在uniapp中,跨端适配是通过条件编译实现的。条件编译允许开发者根据不同的平台(如iOS、Android、微信小程序、百度小程序等)编写不同的代码。这样可以确保每个平台上的应用都能得到最优的性能和用户体验。 以下是uniapp中条件编译的基本语法…...
HTML、CSS表格的斜表头样式设置title 画对角线
我里面有用到layui框架的影响,实际根据你自己的框架来小调下就可以 效果如下 上代码 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-wi…...
自动驾驶控制与规划——Project 2: 车辆横向控制
目录 零、任务介绍一、环境配置二、算法三、代码实现四、效果展示 零、任务介绍 补全src/ros-bridge/carla_shenlan_projects/carla_shenlan_stanley_pid_controller/src/stanley_controller.cpp中的TODO部分。 一、环境配置 上一次作业中没有配置docker使用gpu,…...
Docker的初识
目录 1. 容器技术发展史1.1 Jail 时代1.2 云时代1.3 云原生时代1.3.1 Google & Docker 竞争1.3.2 k8s 成为云原生事实标准 2. 虚拟化和容器化的概念2.1 什么是虚拟化、容器化2.2 为什么要虚拟化、容器化?2.3 虚拟化实现方式2.3.1 应用程序执行环境分层2.3.2 虚拟…...
R-Studio Technician,无网络负担地进行远程数据分析和数据恢复任务
对于数据恢复技术人员和技术支持团队来说,时间就是金钱。这不仅包括您在客户机器上花费的时间 - 还包括您往返公司办公室的时间,这可能会带来巨大的不便,特别是如果客户位于其他省市。电话支持通常不适用于需要数小时才能完成的复杂任务&…...
Couchbase的OLAP支持情况
Couchbase 是一个高性能的 NoSQL 数据库,主要用于在线事务处理(OLTP)场景,但它也提供了一些功能来支持在线分析处理(OLAP)需求。以下是 Couchbase 对 OLAP 支持的几个方面: 1. N1QL 查询语言 …...
路径规划之启发式算法之十六:和声搜索算法(Harmony Search, HS)
和声搜索算法(Harmony Search, HS)是一种新兴的启发式全局搜索算法,是一种模拟音乐家即兴演奏过程的群体智能优化算法。这种算法由Zong Woo Geem等人在2001年提出,灵感来源于音乐家在寻找和声时的创造性思维过程。HS算法通过模拟音乐家演奏音乐时的选择过程来寻找问题的最优…...
服务器---centos上安装docker并使用docker配置jenkins
要在 Docker 中安装 Jenkins 并进行管理,可以按照以下步骤操作: 1. 安装 Docker 首先,确保你的系统已经安装了 Docker。如果尚未安装,可以使用以下命令进行安装: 在 CentOS 上安装 Docker sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://…...
面试题整理1---正向代理和反向代理的含义及异同
面试题整理1---正向代理和反向代理的含义及异同 1. 正向代理 (Forward Proxy)1.1 正向代理定义:1.2 正向代理的工作流程:1.3 正向代理的应用场景: 2. 反向代理 (Reverse Proxy)2.1 反向代理的定义:2.2 反向代理的工作流程…...
记录学习《手动学习深度学习》这本书的笔记(五)
这一章是循环神经网络,太难了太难了,有很多卡壳的地方理解了好久,比如隐藏层和隐状态的区别、代码的含义(为此专门另写了一篇【笔记】记录对自主实现一个神经网络的步骤的理解)、梯度计算相关(【笔记】记录…...
鸿蒙调试打包(非正式打包)
文章目录 前言第一步:生成.p12和.csr文件第二步:申请证书的前置步骤第三步:申请证书 前言 HarmonyOS 应用打包后的文件为.app 格式, android 打包后的文件为.apk,IOS 打包后的文件为.apa HarmonyOS通过数字证书&#…...
Python中的容器化服务监控:结合Prometheus和Grafana实现高效监控与可视化
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 在现代的DevOps和微服务架构中,容器化技术(如Docker)已成为主流的部署方式。然而,容器环境的动态特性使得服务监控和性能分析变得更加复…...
【大数据】-- 读放大和写放大
目录 一、定义 1. 读放大(Read Amplification) 定义 原因 优化方法 2. 写放大(Write Amplification) 定义 原因 优化方法 对比与联系 二、举例 1. Hadoop(HDFS) 读放大 写放大 2. Flink 读放大 写放大 3. Hive 读放大 写放大 4. Presto 读放大 写放…...
[工具升级问题] 钉钉(linux版)升级带来的小麻烦
本文由Markdown语法编辑器编辑完成。 1. 背景: 今日钉钉又发布了新的升级版本。由于我工作时使用的是Ubuntu 20.04版本,收到的升级推送信息是,可以升级到最新的7.6.25-Release版本。根据钉钉官方给出的历次更新版说明,这个新的版本…...
Maven学习(Maven项目模块化。模块间“继承“机制。父(工程),子项目(模块)间聚合)
目录 一、Maven项目模块化? (1)基本介绍。 (2)汽车模块化生产再聚合组装。 (3)Maven项目模块化图解。 1、maven_parent。 2、maven_pojo。 3、maven_dao。 4、maven_service。 5、maven_web。 6…...
Opencv之图像添加水印
一、实验原理 在图片处理领域,添加水印是一种常见的操作。通过叠加图像的方式,可以将水印无缝嵌入目标图像的指定位置。其基本原理包括以下步骤: 1、模板输入(掩膜生成): 将水印图片转换为灰度图…...
在线预约陪诊小程序
一、前言 随着社会老龄化加剧以及人们健康意识的提高,就医过程中的陪伴需求日益增长。许多患者在面对复杂的医院环境、繁琐的就医流程时,需要有人协助挂号、候诊、取药等,而家属可能因工作繁忙无法全程陪同。同时,异地就医的患者更…...
2024年9月CCF GESP Scratch图形化编程等级考试四级真题试卷
GESP 图形化四级试卷(A) (满分:100 分 考试时间:120 分钟) 一、单选题(共 10 题,每题 2 分,共 30 分) 1、2024 年 10 月 8 日,诺贝尔物理学奖“意…...
[免费]SpringBoot+Vue校园社团管理系统(优质版)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的SpringBootVue校园社团管理系统(优质版),分享下哈。 项目视频演示 【免费】SpringBootVue校园社团管理系统(优质版) Java毕业设计_哔哩哔哩_bilibili 项目介绍 随着信息技术的迅速发展&#x…...
NX系列-使用 `nmcli` 命令创建 Wi-Fi 热点并设置固定 IP 地址
使用 nmcli 命令创建 Wi-Fi 热点并设置固定 IP 地址 一、前言 在一些场景下,我们需要将计算机或嵌入式设备(例如 NVIDIA Orin NX)转换为 Wi-Fi 热点,以便其他设备(如手机、笔记本等)能够连接并使用该设备…...
Qt控件的盒子模型,了解边距边线和内容区
这篇专门讲讲一个控件在绘制时的视觉样式。我们平常在对控件设置样式时,需要设置控件的一些外边距,内边距,边线,还有文字内容,贴上图片等。那么对于一个控件,到底怎么实现这些设置的呢? 先看下面…...
深度学习基础--将yolov5的backbone模块用于目标识别会出现怎么效果呢??
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 前言 yolov5网络结构比较复杂,上次我们简要介绍了yolov5网络模块,并且复现了C3模块,深度学习基础–yolov5网络结构简介&a…...
MySQL 根据 字段包含关键词进行分类
为了解决动态关键词匹配的需求,我们需要创建一个关键词表(keywords_table),其中存储关键词和对应的类别。以下是具体的步骤: 1. 创建关键词表 可以用以下 SQL 创建一个简单的关键词表: CREATE TABLE keyw…...
ssm-day04 mybatis
mybatis是一个持久层框架,针对的是JDBC的优化 简化数据库操作,能进行单表、多表操作,在这个框架下,需要我们自己写SQL语句 Mapper接口和MapperXML文件就相当于Dao和Dao层的实现 通常将xml文件放在resources包下 ,放在…...
soul大数据面试题及参考答案
如何看待数据仓库? 数据仓库是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合,用于支持管理决策。 从数据存储角度看,它整合了来自多个数据源的数据。这些数据源可能包括业务系统数据库、日志文件等各种结构化和非结构化数据。例如,在电商企业中,它会整合订…...
【SpringBoot中MySQL生成唯一ID的常见方法】
SpringBoot中MySQL生成唯一ID的常见方法 在Spring Boot中,为MySQL生成唯一ID有多种方式,每种方式都有其特定的概念、优越点和使用场景。以下是详细的说明和代码示例: UUID 概念: UUID(Universally Unique Identifier࿰…...
在 Windows 环境下将 Vue 项目打包并压缩为 .zip 文件的批处理脚本
以下是一个 Windows 批处理脚本,完成以下任务: 运行 npm run build 打包 Vue 项目。使用 7-Zip 将生成的 dist 目录压缩成 ZIP 文件。 脚本内容 echo off:: 切换命令行编码为 UTF-8 chcp 65001 >nul:: 设置环境变量 set PROJECT_DIRC:\path\to\you…...