JAVA |日常开发中Websocket详解
JAVA |日常开发中Websocket详解
- 前言
- 一、Websocket 概述
- 1.1 定义
- 1.2 优势
- 二、Websocket 协议基础
- 2.1 握手过程
- 2.2 消息格式
- 2.3 数据传输方式
- 三、Java 中使用 Websocket
- 3.1 Java WebSocket API(JSR - 356)
- 3.2 第三方库(如 Tyrus)
- 四、应用场景
- 4.1 实时聊天应用
- 4.2 实时数据推送(如股票行情、体育赛事比分)
- 4.3 在线游戏
- 结束语
- 优质源码分享
JAVA |日常开发中Websocket详解
,WebSocket是一种在单个TCP连接上进行全双工通信的协议,它在Web应用中实现了客户端与服务器之间的实时数据传输。与HTTP不同,WebSocket在建立连接后,客户端和服务器都可以随时向对方发送数据,而无需像HTTP那样每次请求都需要建立新的连接。这使得WebSocket非常适合需要实时通信的场景,如在线聊天、实时通知、股票行情推送等。本文将详细介绍Java开发中WebSocket的使用,包括基本概念、Java API、使用示例以及注意事项。
前言
在数字浪潮汹涌澎湃的时代,程序开发宛如一座神秘而宏伟的魔法城堡,矗立在科技的浩瀚星空中。代码的字符,似那闪烁的星辰,按照特定的轨迹与节奏,组合、交织、碰撞,即将开启一场奇妙且充满无限可能的创造之旅。当空白的文档界面如同深邃的宇宙等待探索,程序员们则化身无畏的星辰开拓者,指尖在键盘上轻舞,准备用智慧与逻辑编织出足以改变世界运行规则的程序画卷,在 0 和 1 的二进制世界里,镌刻下属于人类创新与突破的不朽印记。
一、Websocket 概述
1.1 定义
Websocket 是一种在单个 TCP 连接上进行全双工通信的协议。它允许客户端和服务器之间进行实时的、双向的数据传输,与传统的 HTTP 请求 - 响应模式不同,HTTP 是单向的,客户端请求,服务器响应后连接就关闭,而 Websocket 保持连接打开,以便随时交换数据。
例如,在一个实时聊天应用中,Websocket 可以让客户端(如浏览器)和服务器之间实时地发送和接收聊天消息,而不需要像传统的 HTTP 轮询那样频繁地发送请求来检查是否有新消息。
1.2 优势
实时性高:能够实现服务器和客户端之间的实时通信,数据可以即时地在双方之间传递,减少了延迟。这对于需要实时更新数据的应用场景,如股票交易平台、在线游戏等非常关键。
高效节能:相较于传统的 HTTP 轮询(客户端定时向服务器发送请求来获取最新信息),Websocket 避免了频繁建立和断开连接的开销,从而节省了网络资源和服务器资源,提高了效率。
跨平台支持:Websocket 协议是基于 TCP 协议的,并且在现代浏览器和大多数服务器环境中都有良好的支持,这使得它可以方便地用于开发跨平台的实时应用。
二、Websocket 协议基础
2.1 握手过程
Websocket 协议在建立连接时需要进行握手。客户端首先向服务器发送一个 HTTP 请求,这个请求中包含一些特殊的头部信息,用于表明这是一个 Websocket 请求。例如,请求头中包含Upgrade: websocket和Connection: Upgrade字段,用于请求将协议从 HTTP 升级到 Websocket。
服务器收到请求后,如果支持 Websocket 协议并且同意升级,会返回一个响应,其中包含101 Switching Protocols状态码,表示协议切换成功,之后双方就建立了 Websocket 连接。
2.2 消息格式
Websocket 消息主要有两种格式:文本格式和二进制格式。消息以帧(frame)为单位进行传输,一个完整的消息可以由一个或多个帧组成。
文本消息以 UTF - 8 编码进行传输,方便处理文本数据,如聊天消息等。二进制格式则适用于传输图像、音频、视频等二进制数据。
2.3 数据传输方式
全双工通信意味着客户端和服务器都可以主动发送消息。在连接建立后,任何一方都可以随时发送数据,并且不需要等待对方的请求。例如,服务器可以主动向客户端推送实时的股票价格变化,同时客户端也可以向服务器发送交易指令。
三、Java 中使用 Websocket
3.1 Java WebSocket API(JSR - 356)
简介:Java 提供了 WebSocket API 来方便地在 Java 应用中实现 Websocket 功能。这个 API 定义了客户端和服务器端的接口,使得开发者可以轻松地构建 Websocket 应用。
服务器端实现示例:
首先,创建一个@ServerEndpoint注解的类来表示 Websocket 服务器端点。
import javax.websocket.OnMessage;
import javax.websocket.server.ServerEndpoint;
@ServerEndpoint("/chat")
public class ChatServer {@OnMessagepublic String onMessage(String message) {// 简单的消息处理,例如将消息转换为大写return message.toUpperCase();}
}
在上述示例中,@ServerEndpoint("/chat")注解定义了 Websocket 服务器端点的路径为/chat。@OnMessage注解标记的方法会在收到消息时被调用,这里只是简单地将收到的消息转换为大写并返回。
客户端实现示例:
客户端需要创建一个WebSocketContainer来建立连接并发送和接收消息。
import javax.websocket.ContainerProvider;
import javax.websocket.WebSocketContainer;
import java.net.URI;
public class ChatClient {public static void main(String[] args) {try {WebSocketContainer container = ContainerProvider.getWebSocketContainer();String uri = "ws://localhost:8080/chat";javax.websocket.Session session = container.connectToServer(ChatClientEndpoint.class, new URI(uri));// 发送消息session.getBasicRemote().sendText("Hello");// 接收消息String response = session.getBasicRemote().receiveText();System.out.println("收到回复: " + response);} catch (Exception e) {e.printStackTrace();}}
}
在这个客户端示例中,首先获取WebSocketContainer,然后通过connectToServer方法连接到服务器端点。之后可以使用sendText发送消息,使用receiveText接收消息。
3.2 第三方库(如 Tyrus)
简介:Tyrus 是一个流行的 Websocket 实现库,它提供了丰富的功能和更好的性能。它是 Java EE 规范的参考实现,支持 JSR - 356 标准。
示例代码(服务器端):
添加 Tyrus 依赖到项目(以 Maven 为例)。
<dependency><groupId>org.glassfish.tyrus - servlet</groupId><artifactId>tyrus - servlet</artifactId><version>1.15</version>
</dependency>
创建服务器端点类。
import org.glassfish.tyrus.server.Server;
public class TyrusChatServer {public static void main(String[] args) {Server server = new Server("localhost", 8080, "/", null, ChatServerEndpoint.class);try {server.start();System.out.println("服务器已启动");// 保持服务器运行Thread.sleep(Long.MAX_VALUE);} catch (Exception e) {e.printStackTrace();} finally {server.stop();}}
}
其中ChatServerEndpoint类可以类似于前面 JSR - 356 中的服务器端点类定义,用于处理消息。
示例代码(客户端):
同样需要添加 Tyrus 客户端依赖。
<dependency><groupId>org.glassfish.tyrus - client</groupId><artifactId>tyrus - client</artifactId><version>1.15</version>
</dependency>
客户端连接和消息发送接收示例。
import org.glassfish.tyrus.client.ClientManager;
import javax.websocket.Session;
import java.io.IOException;
import java.net.URI;
public class TyrusChatClient {public static void main(String[] args) {try {ClientManager clientManager = new ClientManager();String uri = "ws://localhost:8080/chat";Session session = clientManager.connectToServer(ChatClientEndpoint.class, new URI(uri));// 发送消息session.getBasicRemote().sendText("Hello");// 接收消息String response = session.getBasicRemote().receiveText();System.out.println("收到回复: " + response);} catch (Exception e) {e.printStackTrace();}}
}
四、应用场景
4.1 实时聊天应用
这是 Websocket 最典型的应用场景之一。用户在浏览器中打开聊天界面,通过 Websocket 与服务器建立连接。当用户发送聊天消息时,消息通过 Websocket 即时传输到服务器,服务器再将消息转发给其他相关用户的客户端,实现实时聊天功能。
4.2 实时数据推送(如股票行情、体育赛事比分)
对于需要实时更新数据的应用,如金融领域的股票行情监控应用,Websocket 可以让服务器在股票价格发生变化时,立即将最新价格推送给客户端。体育赛事比分更新也是类似的,观众可以在浏览器中实时看到比分的变化,而不需要手动刷新页面。
4.3 在线游戏
在多人在线游戏中,Websocket 用于实时同步玩家的操作和游戏状态。例如,在一个多人竞技游戏中,玩家的移动、攻击等操作可以通过 Websocket 即时传输到服务器,服务器再将这些信息广播给其他玩家,确保游戏的实时性和公平性。
结束语
亲爱的朋友,无论前路如何漫长与崎岖,都请怀揣梦想的火种,因为在生活的广袤星空中,总有一颗属于你的璀璨星辰在熠熠生辉,静候你抵达。
愿你在这纷繁世间,能时常收获微小而确定的幸福,如春日微风轻拂面庞,所有的疲惫与烦恼都能被温柔以待,内心永远充盈着安宁与慰藉。
至此,文章已至尾声,而您的故事仍在续写,不知您对文中所叙有何独特见解?期待您在心中与我对话,开启思想的新交流。
优质源码分享
-
【百篇源码模板】html5各行各业官网模板源码下载
-
【模板源码】html实现酷炫美观的可视化大屏(十种风格示例,附源码)
-
【VUE系列】VUE3实现个人网站模板源码
-
【HTML源码】HTML5小游戏源码
-
【C#实战案例】C# Winform贪吃蛇小游戏源码
💞 关注博主 带你实现畅游前后端
🏰 大屏可视化 带你体验酷炫大屏
💯 神秘个人简介 带你体验不一样得介绍
🎀 酷炫邀请函 带你体验高大上得邀请
① 🉑提供云服务部署(有自己的阿里云);
② 🉑提供前端、后端、应用程序、H5、小程序、公众号等相关业务;
如🈶合作请联系我,期待您的联系。
注:本文撰写于CSDN平台,作者:xcLeigh(所有权归作者所有) ,https://blog.csdn.net/weixin_43151418,如果相关下载没有跳转,请查看这个地址,相关链接没有跳转,皆是抄袭本文,转载请备注本文原地址。
亲,码字不易,动动小手,欢迎 点赞 ➕ 收藏,如 🈶 问题请留言(评论),博主看见后一定及时给您答复,💌💌💌
原文地址:https://blog.csdn.net/weixin_43151418/article/details/144187452(防止抄袭,原文地址不可删除)
相关文章:
JAVA |日常开发中Websocket详解
JAVA |日常开发中Websocket详解 前言一、Websocket 概述1.1 定义1.2 优势 二、Websocket 协议基础2.1 握手过程2.2 消息格式2.3 数据传输方式 三、Java 中使用 Websocket3.1 Java WebSocket API(JSR - 356)3.2 第三方库(如 Tyrus&…...
30.攻防世界unserialize3
进入场景 解读一下 这个类 xctf 中有一个公共属性 $flag ,其值为 111 ,并且定义了一个 __wakeup 魔术方法,当对象被反序列化时会自动调用该方法,该方法会输出 bad requests 并终止程序的执行。 ?code提示了参数 <?php clas…...
IS-IS协议
IS-IS协议介绍 IS-IS(Intermediate System to Intermediate System)协议是一种链路状态的内部网关协议(IGP),用于在同一个自治系统(Autonomous System, AS)内部的路由器之间交换路由信息。IS-I…...
接口文档之swagger、kinife4j的基本使用
1.swagger3的使用: 1.1pom.xml中加入依赖: <dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version> </dependency> <!--swagger的…...
Oracle plsqldev1106 安装及TNS配置
Oracle plsqldev1106 安装及TNS配置 下载好安装包,直接双击安装 点击 I Agree 默认是C盘的,我改了D盘,根据自己实际情况修改 这里用默认的for current user 也可以,我选了for all user 点Finish,等待安装完成即可 …...
[数据结构]无向图的深度优先非递归遍历
采用邻接表存储实现无向图的深度优先非递归遍历。 输入格式: 先输入两个整数(m,n)(分别表示待创建的图顶点数和边数),之后是m个顶点的信息,再之后是n 条边。 输出格式: 对每一组输入,在一行…...
Android后端签到flask迁移到rust的axum的过程-签到性能和便携
本次变更了以下内容: 为了使用之前ip2sta的ip到端点名的python,dic变量,将其存入redis hashset.使用地址/api/ip2dic 手动执行之.并且定义在/station/init,这个每天初始化redis的路径下.在rust axum使用redis 连接池在test中 ip2dic,IP转端点名,转本日此端网址.在前端的人名下…...
Android13开机向导
文章目录 前言需求-场景第三方资料说明需求思路按照平台 思路 从配置上去 feature换个思路,去feature。SimMissingActivity 判断跳过逻辑SetupWizardUtils 判断SIM 、 hasSystemFeature FEATURE_TELEPHONYPackageManager.FEATURE_TELEPHONYApplicationPackageManage…...
泷羽sec学习打卡-brupsuite6暴力破解与验证码识别绕过
声明 学习视频来自B站UP主 泷羽sec,如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都 与本人无关,切莫逾越法律红线,否则后果自负 关于brupsuite的那些事儿-验证码绕过以及字典爆破 如何利用brpsuite进行验证码绕过呢?1、下…...
vue季度选择器(antd2.0 版本无此控件,单独写一个)
vue季度选择器 效果显示 效果显示 <template><div><a-popoverplacement"bottom"overlayClassName"season-picker"trigger"click"v-model"showSeason"><template #content><div class"season-picker-b…...
Microsemi Libero使用技巧11——CoreUARTAPB RX管脚分配时不显示
调用串口IP核CoreUARTAPB,并例化到顶层设计,发现UART_RX管脚在进行管脚分配时没有显示出来,最后发现是CoreAPB3总线IP核配置不对导致,改为如下配置后正常。...
回归预测 | MATLAB实现SVM-Adaboost集成学习结合支持向量机多输入单输出回归预测
回归预测 | MATLAB实现SVM-Adaboost集成学习结合支持向量机多输入单输出回归预测 目录 回归预测 | MATLAB实现SVM-Adaboost集成学习结合支持向量机多输入单输出回归预测基本介绍程序设计基本介绍 SVM-Adaboost集成学习是一种将支持向量机(SVM)与AdaBoost算法相结合的集成学习…...
Keil-MDK开发环境编译后axf自动转换bin格式文件
编译选项添加如下,调用fromelf工具自动完成转换: fromelf --bin -o "$LL.bin" "#L"...
计算机组成原理(五):程序装载
在计算机组成原理中,程序装载(Program Loading)是指将程序从外存(如磁盘)加载到内存中,并为其运行做好准备的过程。程序装载是实现程序从静态存储状态到动态运行状态的关键环节,涉及地址映射、内…...
开发EDA工具常用的三方开源
EDA软件是制造芯片重要工具,是现在举国的大难题。这个工具难在哪里,几句话说不清,但它确实也有一些非常通用的功能,这些功能依赖一些成熟的轮子,这些轮子,就是三方的开源项目,下面列举一些常用的…...
微信小程序中 crypto-js 加解密全攻略
一、引言 在微信小程序开发中,数据的安全至关重要。加解密技术在保护用户数据和应用程序的安全性方面起着关键作用。小程序在与服务器进行数据交互时,面临着数据泄露、篡改等安全风险。为了确保用户信息的安全,选择合适的加解密算法变得尤为…...
Vue2 - 最新实现将多个文件批量导出为ZIP压缩包格式并下载功能,纯前端下载多个文件打包输出成zip格式,vue2将文件批量下载打包成ZIP下载保存本地(后端二进制文件流/base64图片/url
前言 Vue3 版本,请访问 这篇文章。 在 vue2 | nuxt2 项目开发中,详解实现把多个文件组合成一个ZIP压缩包格式下载到用户本地,将文件批量下载打包成zip格式并自定义压缩包命名名称,vue批量下载文件并导出为压缩包的功能,如何将后端返回的二进制文件流打包成zip格式,支持任…...
The Rise and Potential of Large Language ModelBased Agents:A Survey---摘要、背景、引言
题目 基于大语言模型的Agent的兴起与发展前景 论文地址:https://arxiv.org/pdf/2309.07864.pdf 项目地址:https:/github.com/WooooDyy./LLM-Agent–Paper-List 摘要 长期以来,人类一直在追求等同于或超越人类水平的人工智能(A),…...
【unity】从零开始制作平台跳跃游戏--界面的认识,添加第一个角色!
在上一篇文章中,我们已经完成了unity的环境配置与安装⬇️ 【Unity】环境配置与安装-CSDN博客 接下来,让我们开始新建一个项目吧! 新建项目 首先进入unityHub的项目页面,点击“新项目”: 我们这个系列将会以2D平台…...
Java中的Stream
1. 什么是 Stream? Stream 是 Java 8 引入的一种新方式,目的是帮助我们更简洁、更高效地处理集合(如 List、Set、Map 等)。你可以把 Stream 想象成一条“流水线”,数据就像是流水线上的原材料,经过流水线的…...
ARM学习(36)静态扫描规则学习以及工具使用
笔者来学习了解一下静态扫描以及其规则,并且亲身是实践一下对arm 架构的代码进行扫描。 1、静态扫描认识 静态扫描:对代码源文件按照一定的规则进行扫描,来发现一些潜在的问题或者风险,因为不涉及代码运行,所以其一般只是发现一些规范或则一些质量问题,当然这些可能存在潜…...
前端将base64转pdf页面预览
前端将base64转pdf页面预览 <embed :src"pdfList" width"100%" height"100%" type"application/pdf" />pdfList.value data:application/pdf;base64,${res}//后端传jpg或pdf格式可直接 :src“返回内容”显示...
Java-26 深入浅出 Spring - 实现简易Ioc-02 无IoC与AOP场景下实现业务
点一下关注吧!!!非常感谢!!持续更新!!! 大数据篇正在更新!https://blog.csdn.net/w776341482/category_12713819.html 目前已经更新到了: MyBatisÿ…...
能不能用一句话或者简洁地凝练深度学习的本质和精髓?
深度学习就是学习输入与输出之间的映射关系。 深度学习模型本质上只是个参数量很大的函数,其中函数的参数可以通过训练样本进行调整。 根据训练样本的不同,进一步可以分为以下几类: 一、给定输入以及对应的输出,其中输出是唯一的…...
我的宝贵经验
在技术的浩瀚海洋中,一份优秀的技术文档宛如精准的航海图。它是知识传承的载体,是团队协作的桥梁,更是产品成功的幕后英雄。然而,打造这样一份出色的技术文档并非易事。你是否在为如何清晰阐释复杂技术而苦恼?是否纠结…...
发现一个对话框中的按钮,全部失效,点击都没有任何反应,已经解决
前端问题,技术vue2,ts。 发现一个对话框中的按钮,全部失效,点击都没有任何反应。 因为我只在template标签中加入下面这个代码,并没有注册。 只要有一个子组件没有注册,就会影响所有的按钮,使当前…...
深度学习中损失函数(loss function)介绍
深度学习中损失函数(loss function)介绍 在深度学习的宏伟城堡中,损失函数扮演着国王的角色,它决定了模型训练的方向和目标。损失函数,也被称为代价函数,是衡量模型预测与实际结果之间差异的函数。在深度学习的训练过程中&…...
【渗透测试】信息收集二
其他信息收集 在渗透测试中,历史漏洞信息收集是一项重要的工作,以下是相关介绍: 历史漏洞信息收集的重要性 提高效率:通过收集目标系统或应用程序的历史漏洞信息,可以快速定位可能存在的安全问题,避免重复…...
前端三大框架 Vue、React 和 Angular 的市场占比分析
一、引言 ?? 随着前端技术的迅速发展,Vue.js、React 和 Angular 已成为全球最受欢迎的三大前端框架。在国内外,不同的框架在市场中的占比和流行程度存在显著差异。本文将从全球和中国市场的角度,对这三大框架的市场占比进行分析࿰…...
Gitlab服务管理和仓库项目权限管理
Gitlab服务管理 gitlab-ctl start # 启动所有 gitlab 组件; gitlab-ctl stop # 停止所有 gitlab 组件; gitlab-ctl restart # 重启所有 gitlab 组件; gitlab-ctl status …...
MySQL ON DUPLICATE KEY UPDATE影响行数
目录 分析为什么Updates返回7 总结 数据库更新日志如下 insertOrUpdateList|> Preparing: INSERT INTO clue_user_tag (vuid, tag_id, tag_type, content) VALUES (?, ?, ?, ?) , (?, ?, ?, ?) , (?, ?, ?, ?) , (?, ?, ?, ?) ON DUPLICATE KEY UPDATE …...
美团2024年秋招第一场笔试【前端移动端】
美团2024年秋招第一场笔试【前端&移动端】 2024/12/12 1.在一个长度为28的数组中删除第5个元素时(元素序号:1~28),需要向前移动(23)个元素。 2.如下图一个树型结构,其结点E在树的中序遍历…...
【EXCEL】 获取多列中 不为空的那一个数据
从多个表格筛选出来的上班时间是下表这样的 我要把他们放在同一列,这样方便后续处理,合并列输入下面这个公式即可 日期不加 TEXT() 函数 转日期格式;将得到是一串数字 TEXT(TEXTJOIN(", ",TRUE,B2:F2),&qu…...
Qt 开发笔记2
1> 样式表加载 一定要在Ui 初始化之前调用, 之后调用会不生效。 2> 设置QlineEdit输入框 具体四周的间距: setTextMargins(m_nLeftTextMargin, m_nTopTextMargin, m_nRightTextMargin, m_nBottomTextMargin);3> 设置背景图(平滑不…...
R学习——数据框
目录 1数据框的合并 2数据框的访问 2.1 通过索引[] 2.2符号$访问 2.3 attach访问 2.4 with访问 1数据框的合并 当每个内容存储为单独的向量,data.frame可以进行这些内容单独数据框合并。 2数据框的访问 2.1 通过索引[] [i]输出对应的列 [i,]输出对应的行 …...
深入详解人工智能机器学习常见算法中的K-means聚类
目录 引言 1. K-means聚类的基本概念 1.1 K-means聚类的定义 1.2 K-means聚类的核心思想 1.3 K-means聚类的目标函数 2. K-means聚类的核心原理 2.1 初始化 2.2 分配 2.3 更新 2.4 迭代 3. K-means聚类的具体实现 3.1 K-means聚类的算法流程 3.2 K-means聚类的Pyt…...
TDengine SpringBoot操作
TDengine与Spring Boot的结合可以为开发者提供一个高性能、分布式的物联网、工业大数据处理平台,同时利用Spring Boot的简化配置和快速开发特性。以下是对TDengine与Spring Boot集成的详细解析: 一、TDengine简介 TDengine是由涛思数据开发的一款高性能…...
【sgFileLink】自定义组件:基于el-link、el-icon标签构建文件超链接组件,支持垃圾桶删除、点击预览视频/音频/图片/PDF格式文件
sgFileLink源代码 <template><div :class"$options.name"><el-link click.stop"clickFile(data)"><img :src"getSrc(data)" /><span>{{ getFileNameAndSize(data) }}</span></el-link><el-linkcl…...
C语言实验 函数一
时间:2024.12.14 6-1 弹球距离 double dist (double h,double p) {double sum = h,height;height = h*p;while(height>=TOL){sum += height * 2; //上行下行都算,所以是两倍的距离。height *=p;}return sum; } 6-2 使用函数输出一个整数的逆序数 错误代码:运行超…...
惠普Laser Jet MFP M437nda复印机成像装置严重不足及更换传输卷故障解决方法
惠普Laser Jet MFP M437nda复印机成像装置严重不足及更换传输卷故障解决方法,记录维修那点事儿,普通维修工的日常维修点滴; 惠普Laser Jet MFP M437nda复印机成像装置严重不足维修方法 如果复印及打印的效果没有问题的情况下我们也可以不更换套鼓及显影剂,那么不更换套鼓及…...
委托(Delegate)和事件(Event)-(下篇)
委托(Delegate)与事件(Event)-(上篇)-CSDN博客 上一篇内容! 一、创建非静态委托 在C#中,使用非静态委托意味着将委托绑定到类的实例方法上,而不是静态方法。这允许你通过委托调用特定对象上的方法&am…...
ios 开发配置蓝牙
如果使用了蓝牙功能, 又没有配置, 会出现以下错误: This app has crashed because it attempted to access privacy-sensitive data without a usage description. The apps Info.plist must contain an NSBluetoothAlwaysUsageDescription key with a string value explaini…...
JVM 栈帧结构详解
在 Java 虚拟机(JVM)中,栈帧(Stack Frame)是用于支持方法调用和方法执行的关键数据结构。每个方法从调用开始到执行完成,都对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。本文将详细介绍 JVM 栈帧的结构及…...
HTML和JavaScript实现商品购物系统
下面是一个更全面的商品购物系统示例,包含新增商品、商品的增加删除以及结算找零的功能。这个系统使用HTML和JavaScript实现。 1.功能说明: 这个应用程序使用纯HTML和JavaScript实现。 包含一个商品列表和一个购物车区域。商品列表中有几个示例商品&a…...
(长期更新)《零基础入门 ArcGIS(ArcMap) 》实验三----学校选址与路径规划(超超超详细!!!)
目录 实验三 学校选址与道路规划 3.1 实验内容及目的 3.1.1 实验内容 3.1.2 实验目的 3.2 实验方案 3.3 操作流程 3.3.1 环境设置 3.3.2 地势分析 (1)提取坡度: (2)重分类: 3.3.3 学校点分析 (1)欧氏距离: (2)重分类: 3.3.4 娱乐场所点分析 (1)欧氏距离…...
ip_done
文章目录 路由结论 IP分片 数据链路层重谈Mac地址MAC帧报头局域网的通信原理MSS,以及MAC帧对上层的影响ARP协议 1.公司是不是这样呢? 类似的要给运营商交钱,构建公司的子网,具有公司级别的入口路由器 2.为什么要这样呢?? IP地…...
Mysql体系架构剖析——岁月云实战笔记
1 体系架构 理论内容阅读了mysql体系架构剖析,其他的根据岁月云的实战进行记录。 1.1 连接层 mysql最上层为连接服务,引入线程池,允许多台客户端连接,主要工作:连接处理、授权认证、安全防护、管理连接等。 连接处理&a…...
【卷积神经网络】AlexNet实践
构建模型 模版搭建 # 定义一个AlexNet模型类def __init__(self):# 调用父类的构造函数(如果继承自nn.Module的话)super(AlexNet, self).__init__()# ReLU激活函数self.ReLU nn.ReLU()# 卷积层1:输入1个通道(灰度图)&a…...
LF CRLF
这个提示的含义是:Git 检测到你当前的 file3.txt 文件中使用了 LF(换行符,Line Feed,\n) 作为换行符,但在你系统的 Git 配置中,指定要将其转换为 CRLF(回车换行,Carriage…...
Python学习(二)—— 基础语法(上)
目录 一,表达式和常量和变量 1.1 表达式 1.2 变量 1.3 动态类型特性 1.4 输入 二,运算符 2.1 算术运算符 2.2 关系运算符 2.3 逻辑运算符 2.4 赋值运算符 2.5 练习 三,语句 3.1 条件语句 3.2 while循环 3.3 for循环 四&#…...