自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(102)
  • 收藏
  • 关注

原创 抽奖项目-接口自动化测试

本文详细介绍了抽奖系统接口自动化测试项目的落地实施过程。项目采用Python技术栈(requests+pytest+Allure),分阶段完成了10个核心接口的自动化测试,包括用户管理、奖品管理、活动管理和抽奖业务等模块。测试覆盖了正向流程、异常场景和安全校验,通过参数化测试和数据驱动提高了用例覆盖率。项目搭建了标准化的测试框架结构,实现了全局鉴权、数据清理等关键功能。测试过程中发现了价格校验、用户名一致性等业务逻辑缺陷,并提出了优化建议。最终测试通过率100%,验证了系统核心功能的完备性和安全性,同时也指

2026-02-15 20:31:23 781

原创 消息存储格式设计

新增和删除,对应内存中来说,好办,但是在文件操作中就麻烦了,新增消息还好说,可以把新消息直接追加到文件的末尾,删除消息,不好搞,文件可以视为是一个"顺序表这样的结构",如果直接删除中间元素,就需要涉及到类似于"顺序表搬运"这样的操作,效率是非常低的,因此,使用这样的搬运方式是非常不合理的。消息是依附于队里的,因此存储的时候,就把消息按照 队列 维度展开,此处已经有个 data 目录(meta.db 就在这个目录中),在 data 中创建一些子目录,每个队列有一个子目录,子目录的名字,就是队列名。

2026-02-01 13:18:44 677

原创 MemoryDataCenter

为了保证消息进出队列的先后顺序,以及操作数据的方便性,这里选择了不同于前面的ConcurrentHashMap,哈希表不能保证消息进出链表的先后顺序,使用 ArrrayList,在删除消息的时候需要进行搬运操作,而且进行头删操作更加耗时,这里选择 LinkedList,用来存储数据是更加方便的,这里存在的问题在于,我们没有选择 线程安全的ConcurrentHashMap,然而 LinkedList 是线程不安全的,这个需要我们在后续的编写中要注意。通过交换机的名称来查询交换机的对象,获取交换机。

2026-01-31 13:43:06 350

原创 深入解析 MQ 核心源码:MemoryDataCenter —— 内存数据的“高速枢纽”

高性能:全内存操作,极大减少 IO 延迟。数据结构清晰:利用多层Map结构清晰地管理了 MQ 的核心概念(Exchange/Queue/Binding)。线程安全:巧妙结合(分段锁思想)和(细粒度对象锁),在保证安全的前提下最大化了并发性能。持久化桥梁:提供了recovery接口,配合硬盘管理类实现了数据的持久性保障/*** 使用这个类来统一管理内存中的所有数据* 该类后续提供的一些方法,可能会在多线程的情况下使用,因此需要注意线程安全问题*/

2026-01-30 22:47:58 829

原创 MessageFileManage 类详解

这里使用 RondomAccessFile的原因在于 允许我们通过 seek(offset) 像访问数据下标一样,直接通过移动光标的方式,快速的定位到待删除文件的开头位置,然后根据长度进行读取,当我们把相关的关键字修改完毕之后,由于光标移动的原因,我们需要再次从新定位光标位置,对 Message 对象进行反序列化之后再次写入文件中。写入方式采用追加写的方式,按照前面规定的文件写入格式的要求,前四个字节写入的数待写入文件的主体内容字节数,写入四个字节之后再写入消息的本体。

2026-01-29 20:59:27 799

原创 SpringBoot 项目学习内容详解(二)

按照以往的操作是先把数据库表直接创建好,在启动服务器,这些操作都是在部署阶段完成的,之前的操作部署一次即可,不会反复的进行操作,但是后续接触到的更多的程序可能会反复部署多次,能够简化部署的步骤,也是很关键的,在这个项目中,我们通过代码的方式来完成自动的建表操作。本次项目采用的是相比于 MySQL更加轻量的数据库 SQLite,SQLite的是用也是非常的广泛,在一些性能不高的产品中的使用频率是非常高的,嵌入式设备,比如 Andioid系统,就是内置的 SQLite。

2026-01-27 21:13:42 654

原创 Spring Boot 项目学习内容详解(一)

3.在这个类中是不需要单独创建durable来判读是否需要进行持久话存储的,binding的持久化存储是取决于 queue 和 Exchange 是否都进行了持久化存储,如果都进行了持久化存储binding就自然进行了持久化存储,反之有一方没有进行持久化存储,binding自然也就不会进行持久化存储。1.使用 name 作为交换机中的唯一标识的原因是,本次的消息队列主要是通过去模仿RabbitMQ来进行创作的,在RabbitMQ中的交换机就是通过 String name 作为交换机的唯一标识。

2026-01-26 22:12:41 401

原创 消息队列项目基础知识总结

自定义的应用层协议:这里的工作是,让客户端可以通过网络,调用 BrokerServer 提供的编程接口,因此,在客户端这边,也需要提供对应的上述这些方法,只不过服务器版本的上述方法,效果是真正的干实事,把管理数据进行调整,客户端这边上述的方法,则只是发送请求/接受响应。生产者发送消息的时候,就会指定一个"目标队列的名字",交换机收到之后,就会看看绑定的队列里,有没匹配的队列,如果有,转发过去(把消息队列塞进对应的队列中),如果没有,消息就直接丢弃。

2026-01-25 21:03:55 302

原创 文件操作指南

变量把数据保存到内存中,如果程序重启/主机重启,内存中的数据就会丢失,要像让数据能被持久化存储,就就可以把数据存储在硬盘中,也就是 文件 中保存。要使用文件,主要通过文件来保存数据,并并且在后续把保存的数据读取出来,但是要想读写,需要先"打开文件",读写完毕之后还要"关闭文件"第二个参数字符串,表示打开的方式,其中 r 表示按照 读 的方式打开, w 表示按照写的方式打开, a 表示追加写方式打开。使用 'a' 实现"追加写",此时原有的文件内容是不变,写入的内容会存在于文件内容的末尾。

2025-12-05 22:35:04 286

原创 列表,元组,字典

像,读操作,比如访问下标,切片,遍历,in,index,+等操作元组也是一样支持的,但是像写操作,比如修改元素,增加,删除,extend等,元组不能支持。元组的设定和列表是非常相似的,只是列表中存放的元素是可以进行增加删除和修改的,而元组中的元素是在元组创建的时候就设定好的,不能进行修改调整。如果需要放初始值,可以直接写在[]中, 列表中存放的元素是允许是不同类型的数据, 也是可以通过下标进行访问的。在Python中如果切片中的数字填写的越界的,是不会有负面效果的,只是会尽可能的把满足条件的元素切片。

2025-12-05 21:34:00 425

原创 变量作用域

在这个代码中,函数内部存在x,y 函数的外部也有x,y.但是这两组x,y不是相同的变量,而只是恰好有一样的名字。如果此处没有global,则函数内部的x = 10就会被视为是创建一个局部变量x,这样就和全局变量x不相关了。在函数getPoint()内部定义的x,y只是在函数的内部生效,一旦出了函数的范围这两个变量就不在生效。如果函数内部尝试访问不到的变量在局部不存在,就会去尝试去全局作用域中查找。在函数内部的变量叫"局部变量", 不在任何函数内部的变量叫"全局变量"在不同的作用域中,允许出现相同的变量名。

2025-12-05 19:34:04 193

原创 cookie和session在客户端与服务端交互过程中的作用

但是cookie—sessionId这种模式,更加适合单线程场景,对于多线程集群场景实用性就不高,在集群的环境下,一个大的功能会被分成许多个小的模块,每一个机器只会负责其中的一个小模块,各各小模块之间的信息交互是有滞后性的。比如我们进行登录时A机器负责完成,我们要去完成功能B可能就在B机器上,A和B是两个不同的服务端,由于信息交互的滞后性,我们在进行B操作的时候,可能就会因为B中没有对应的sessionId而导致的请求不通过等问题。

2025-11-10 16:50:52 153

原创 反射&枚举&以及lambda表达式

反射可以知道这个类中有哪些属性(名字),此时,就可以比较容易的通过一套代码,就能够兼容多种不同类型的类,只要告诉我这个类的 Class 对象是什么,按照 Class 对象里面该类的属性名,就可以知道这个字符串如何解析,如何构造还原出一个一样的对象出来。完全可以让用户输入,这个东西,可能来自于代码事先写好的,也可能 来自用户在控制台输入,还可能从文件读取,还可能通过一系列计数得出来的,还可能从网络读取的,程序跑起来之后/过程中获取到的"动态"=> 代码的"通用性",写一份代码,支持各种不同的情况。

2025-06-27 21:12:55 441

原创 Cookie 在 HTTP 中的作用&HTTP 中的状态码

有的重定向使临时的,过一段时间就不需要,有的重定向是永久性的,很多地方都会涉及到"重定向",呼叫转移,我换一个手机号,开通呼叫转移之后,此时有人打旧号码,自动被转移到新的号码上,访问一个就地址,重定向到新的地址上。这个就诊卡中就包含了患者的身份标识,在医院的系统中就会记录患者的详细信息(姓名,性别,年龄,电话,住址,既往病史,账户余额..)如果上述的详细信息,只是存储到就诊卡中,是不太合理的,万一丢了怎么办?点击广告,先产生请求,访问搜狗的计费服务器(搜狗已经被腾讯收购了,搜狗现在是腾讯的一个部门)

2025-06-25 19:27:18 1010

原创 HTTP协议

一个广告主,投放广告的时候通常会投放多个平台,这些广告平台,都会给这个广告主的网站引流(引流的过程是需要"花钱"的,按点击收费),这个赚钱的能力是非常强的,商业价值高的广告,点击一下就几百块(付出的广告费用都可以赚回来)在十年前是有这样的情况的,事情非常多,广告主自己是不会改的,点击次数是一定的他要付的费用是一定的,只不过是付给谁多谁少的事情罢了,总金额不变。,多少次是来自 x 搜索引擎?一般正常的广告平台,有一系列的"反作弊"算法,识别出"无效点击"有效点击才计费,无效点击不会计费。

2025-06-23 21:33:49 1009

原创 Map&Set

理想情况下,如果二叉搜索树,左右子树的个数都差不多,这个时候,此时的时间复杂度O(logN),二叉搜索树查找,关键的操作就是比较次数,比较次数和树的高度有关系, 如果二叉树左右子树比较均衡,高度就是 logn,如果出现不理想的极端情况,单枝树的情况,此时的查找就和链表的遍历差不多了,因此此时的时间复杂度是O(n)数组的二分查找,分出来的是两个部分,是"均匀"对于二叉搜索树来说,就不一定了.(二叉搜索树的左右子树包含的节点数可能不同,而且可能存在比较大的差异)有两个 Set: {1,2,3};

2025-06-16 21:19:36 765

原创 Map&Set

此处存在"空间不对等"问题.如果要存储的是任意整数,范围 42亿个.此时要创建的保存的数据的数组,范围 1w 个,此时,一定存在重复,两个不同的数据,映射到同一个数组下标上了(哈希冲突)哈希表,本质上是利用了数组下标操作比较高效的特点,实现的一个数据结构.通过哈希表,把要保存的内容,映射到数组下标上.如果出现冲突,在开散列的方式,来解决冲突(哈希表的设定是一个数学问题)会确保哈希函数计算的下标是准确位置, 使用一个链表,保存"冲突"的元素, 此时,这个数组的每个元素,都是"链表节点"

2025-06-15 21:12:12 1016

原创 网络原理:网段划分

每个国家/地区,都会架设自己的 DNS 服务器(里面的映射关系数据,都是从主 DNS 服务器同步来的,这样的服务器也称为"镜像服务器"),国内,各种运营商就会在各个地区,架设镜像服务器,用户访问的时候,直接就在就近的 DNS 服务器即可,不只是运营商,知名的互联网公司,也会维护 DNS 服务器。思路一:访问某个网站的时候,不是每次访问都需要进行 DNS 访问,相邻的几次访问,域名和 IP 的映射关系是不会改变的,浏览器会对 域名解析的结果 进行缓存,引入的缓存,大幅度降低访问 DNS 服务器的频率。

2025-06-13 21:02:34 838

原创 网络层 IP协议(第二部分)

国内大力推展 IPv6 ,差不多 18 - 19年左右,川普,开启了中美贸易战,IPv4分配权在美国人手里面,据说是非盈利组织(背后的资方,其中就有美国军方),这样就变成了一张牌,成为美国人制裁咱们得手段,IPv4 的整个体系,都是美国人搭建的,美国人的话语权是非常大的,毁灭性打击。地址的范围扩大的倍数是,天文数字,哪怕数给地球上的每一粒沙子分配一个 IP 地址,都有多的,只要是人类文明没有走向星辰大海,只是在地球上,IPv6肯定是够用的(未必当时的IPv4也是这么想的)

2025-06-12 13:05:24 305

原创 网络层 IP协议(第一部分)

这样的替换,本质上是让一个局域网内部的所有设备,公用同一个 外网 IP(本来是一个外网 IP 代表一个设备,现在是一个外网设备代表数以千计个设备(和真实世界的地址类似))CSDN 的服务器,如果区分,收到的数据,是我电脑这边的客户端数据,还是我的平板的客户端数据,返回响应的时候,运营商路由器,怎么区分,把正确的包转发给正确的设备?进行 IP 数据报转发的时候,必须要根据目的 IP,进行转发,万一数据报中的目的 IP 是错误的,此时这个数据包是不可能到达对方的,也不应该在网络中被“无限的转发”

2025-06-11 20:58:56 857

原创 核心机制:面向字节流

URG :表示"紧急指针"有效,正常情况下,TCP 的数据都是"顺序传输" 1- 1000, 1001- 2000,...., 紧急指针意味着后面有一些数据要先传输(插队),紧急指针的值表示,从当前位置往后多少个字节位置的部分,要进行插队的(使用比较少)包的数据里面,不能包含分隔符,需要找到合适的符号,确保这个符号在正文中不会重复出现,即使 ascil 码表中,也有不少的字符,可以用来作为分隔符的,有一下特殊的"不可见字符"历史遗留问题。

2025-06-10 20:38:22 577

原创 核心机制:延时应答,捎带应答,面向字节流

包的数据里面,不能包含分隔符,需要找到合适的符号,确保这个符号在正文中不会重复出现,即使 ascil 码表中,也有不少的字符,可以用来作为分隔符的,有一下特殊的"不可见字符"历史遗留问题。=> 读到空白符就结束了,空白符是统称,包括但是不限于:空格,换行,回车,制表符,分页符,垂直制表符。普通的响应报文,ack 这一位是 0 确认序号是无效的,确认序号都是无效的,窗口大小这一位 无效,基于延时应答的基础上,提高传输效率的方案。接受方的应用程序,read 的时候,就有很多种 read 的可能性。

2025-06-05 22:42:33 392

原创 核心机制:拥塞控制

5.2)出现丢包,重新计算阈值(丢包窗口大小的 / 2),重阈值开始作为新的拥塞控制的窗口大小,继续线性增长(相比于旧版本,省略了指数增长的过程),使 tcp 的传输效率更加稳定,避免大起大落。2)慢启动之后如果不丢包,就会按照指数方式进行增长,短时间,快速的把窗口的大小给顶上去(刚开始的时候太小了)发生方的速率,不光要考虑接收方的速率,还要考虑传输路径,整个过程中所有的中间节点的情况。1)初始状态下,窗口的大小是非常小的,刚开始,网络的畅通情况是未知的。流量控制,已经接受方的处理能力,进行限制。

2025-06-04 22:18:59 384

原创 核心机制:流量控制

TCP 在设计的时候,充分的吸取了以前 UDP 的教训,选项中有一个"窗口扩展因子"发送方收到 ack 之后,设置滑动窗口大小 16位窗口大小 << 窗口扩展因子,左移一位相当于 * 2,是指数增长的,这样的窗口大小的取值范围是非常非常大的。所谓的"接收方的处理能力"就是接收方应用程序调用 read 的速度(调用 read 有多快,每次 read 多少) 调用 read 的速度和应用程序,代码咋写的 是直接相关的,想要直接衡量 read,还不太容易得。连接 connection 链接 link。

2025-06-03 21:12:47 429

原创 核心机制:滑动窗口

等待的一份时间中,就是在等待 4 组 ack 的到达,肯定不能完全不等(可靠性形同虚设了),就把批量发送多少数据不需要等待 称为"窗口大小"ack 的确认序号,表示序号之前的所有数据都已经收到了,ack => 1001, 1001 之前的数据都收到了。每次收到一个 ack,窗口都会往后平移一个格子,如果收到 ack 的速度很快,平移的过程就好像"滑动"的过程。滑动窗口的效率提高,本质是"亡羊补牢""止损",再怎么提高,也不会超过 UDP 无可靠传输机制的协议的。三次握手,建立连接(必须是 三次)

2025-06-02 13:09:31 364

原创 核心机制:TCP 断开连接(四次挥手)

收到对方发来的 FIN 的时候,就会返回 ACK,同时进入 CLOSE_WAIT 状态(可以理解成 wait close, 等待关闭,等待应用程序代码,调用 close),正常情况下,存在的时间比较少。实际上,三次握手,四次挥手,大部分工作都是内核来完成的,其实和实际代码关系不是很大存在的意义,更多的是让我们理解/调试程序。四次挥手之所以叫四次挥手,是因为中间的两次交互,是不一定触发合并的(有的时候会合并,有的时候不会)合并相比于不合并来说,更好,合并提高效率,一系列的封装和分用,都是需要有开销的。

2025-06-01 19:53:07 1152

原创 核心机制三:连接管理(三次握手)

TCP 中的握手,传输一个"打招呼"的数据包,这个数据包不携带任何"业务数据"(没有应用层的载荷),TCP 这个数据包自有报头,没有正文,也就是这个操作是不携带任何业务数据的。在数据进行多次交换传输的时候,可能会出现 其中的某个数据"迷路了"因为网络的一些延迟导致绕了很长的路经过了很长的时间才到达服务器。当 TCP 建立好了之后,传输的第一个数据包的第一个字节的编号,不是从 1 / 0 开始编排的。三次握手,建立连接的过程中,客户端和服务器要经过三次这样的"打招呼",连接才能在双方这边都建立好。

2025-05-31 22:41:01 775

原创 核心机制:确认应答和超时重传

通过重传之后,大幅度提升数据到达对方的概率,但是重传之后,还是没有收到 ack,只能说明,当前网络的丢包概率,远远不止 10%了,此时,网络大概率出现了非常严重的故障了,再次频繁重传,非但不会解决问题,甚至可能会加重网络的故障程度~~重传次数 / 总的重传时间是有上限的,到达上限,重传还没成功, tcp 连接就会被"重置"(重置涉及到"复位报文") => 单方面的断开连接了.发送方发送了数据之后,接受方,一旦接收到了,就会给发送方返回一个"应答报文"告诉发送方"我已经收到了数据"

2025-05-30 20:09:06 765

原创 TCP协议

报头的长度,报头中包含了“选项” optional =>可选择的,0 - 15 ,4个字节,TCP 报头的最大长度是 60 字节。发送方发送了数据之后,接受方,一旦接收到了,就会给发送方返回一个"应答报文"告诉发送方"我已经收到了数据"同一个 TCP 连接,序号会连续累加,下一个数据报的序号在上一个数据报的最后一个的序号基础上继续递增。编号是连续递增的,要知道 TCP 载荷的第一个字节的编号是多少,后面的每一个字节的编号就都知道了。确认序号根据收到的数据的最后一个字节的序号进行加一来进行填充。

2025-05-29 23:21:21 832

原创 UDP数据报

发送方,构造 UDP 数据报,构造完成之后,把数据报的每个字节的数据,都进行累加,结果累加到一个 16 位的整数上,溢出,就溢出此时得到的结果,就是校验和(check1),填充到 UDP 报头和字段。恰好是两个 比特位 发生翻转,导致翻转后算出来的校验和和翻转前的算出来的校验和碰巧是一样的呢?协议标准升级好,协议的具体实现,是在各个操作系统厂商手中的,需要这些厂商的配合你升级。如果发送的数据和接受的数据,每一个字节都是一致的,计算得到的校验和就一定是一致的。拆成多个之后,如果其中一部分丢包了怎么办?

2025-05-28 22:10:05 586

原创 Java多线程

正常情况下,一个线程,需要把入口方法执行完(需要通过"打断线程"的操作也需要线程本身,代码做出配合),才能使线程结束,有的时候,希望能够让这个线程提前结束(尤其是,线程在sleep 过程中)如果为 true 说明有人终止这个线程。上述的几种方式,本质上,都是 让线程 t 自己,决定自己是否要终止,相当于 main 只是给 t 提供了一个"提醒","建议" 不是"强制执行的"线程,执行了 start 之后,就是就绪状态/阻塞状态,对于 就绪状态/阻塞状态下的线程,不能再次 start。

2025-05-25 22:45:17 807

原创 JVM 的垃圾回收机制 GC

可达性分析中,JVM 会不停地使用线程扫描这些对象是否是垃圾,每隔一定的时间,就会扫描一次,如果一个对象扫描一次,不是垃圾,年龄就 + 1,一般来说年龄超过 15(可以配)的就进入老年代。这种方法,不需要引入额外的内存空间,但是需要消耗较多的时间,进行上述的扫描过程,这些扫描过程中也是容易触发 STW 的(时间换了空间),这里也不会涉及到"循环引用"比如 C 语言,已经存在了50年了,还可以预见这个 C 语言还有很大的希望在活50年,和 C 语言同时期的语言,都死的差不多了。

2025-05-24 19:03:45 1314

原创 JVM 双亲委派模型

比如自己写一个类,和标准库恰好重复了,java.lang.String 此时 JVM 保证加载的仍然是标准库的 String 而不是自己写的。ExtensionClassLoader 负责在 Java 的扩展库中进行查找(JDK 自己带的,但是不是标准约定的库)程序员在特定场景下,也可以实现自己的类加载器,自己实现的类加载器可以让他遵守,也可以不遵守。类加载第一个环节中,根据类的全限定类名(包名+类名)找到对应的.class 文件的过程。假设要加载一个,com.baidu.Test(自己项目中的类)

2025-05-23 18:33:39 595

原创 JVM类加载

给类对象,分配内存空间,此处申请的内存空间,是一个"未初始化" 的内存空间,空间上的每个字节全都是 0 (新申请的内存,自动设置为 0(消耗时间,换来的是程序不容易出错) )假设拿图片二进制文件,后缀改成 .class,如果验证的过程中,发现某个地方的格式存在问题,就需要及时报错,告知程序员。.class文件中,也会涉及到一些常量,常量也是要放到内存中的,需要把 .class 文件的常量加载到内存中。1)根据代码中编写的"全限定类名",找到 .class 文件(找的过程,叫做"双亲委派模型"(面试重点))

2025-05-22 23:00:18 453

原创 HTTP相关内容

直接把原始数据进行传输,比较大,消耗的网络带宽就多了,可以把数据进行压缩,压缩之后数据就变少了,通过网络传输的内容就少了,数据到达对端在通过 cpu 来继续解压缩,(压缩和解压缩是通过一系列算法来进行的)第一次访问搜狗,会把上述的所有资源都加载(CSS,JS,图片..保存到浏览器所在的机器的硬盘上),后面在访问搜狗的时候,只从服务器获取 html 即可,CSS,JS 直接用上次获取过的。关心 HTTP 交换过程的时候,需要关系 HTTP 请求是什么样子的,HTTP 响应是什么样子的(HTTP 的协议格式)

2025-05-21 21:51:02 929

原创 JVM的面试相关问题

3.通过 java 这样的命令行工具,运行对应的.class文件 java 命令行工具,对应到一个 java 进程,这个 java 进程就可以理解成一个 Java 虚拟机了(也可以叫 JVM 的进程),JVM 的进程,就会对,class 文件中的内容解释执行了。JVM 更准确额说是 Java语言的"运行时环境",核心功能就是把 Java 代码,翻译成计算机可以识别的机器指令(低效的,更高效的,像C/C++/Go,编译出来的程序就是标准的 CPU 构成的指令程序)

2025-05-20 23:27:39 1277

原创 HTTP协议

body 中是完全可以放 二进制 数据的(压缩的结果),之所以用 base64 转成文本,主要还是因为图片本身比较小,按照文本的方式,服务器代码处理起来好实现,(把二进制数据,用文本(ascil字符)进行从新编码,通过 4 个ascil字符,表示原来的 3 个字节的二进制数据)比如登录场景中,GET 的话,就会把用户名和密码显示到 URL 中,如果别人看一眼你的屏幕,就知道你的密码是啥.POST 的用户名和密码是放在 body 中的,别人看了你的屏幕也看不到。(这里还有其他情况)

2025-05-19 22:48:38 773

原创 HTTPS的工作过程

比如密钥是 key,使用另一个密钥 key2 针对 key 进行加密,把 key 密文传输给对端,但是如果不把 key2 告诉服务器,服务器也完成不了解密这个过程,拿不到 key,如果把 key2 传输给对方,这样黑客也就获取到了,成功完成套娃,脱裤子放屁,多此一举。有可能,但是是存在门槛的(nb的黑客都在公安机关备过的,不入流的也黑不进去),入侵运营商的设备,大概率是比入侵一个企业的机房要更加容易一些的,直接入侵了,不需要监听任何数据了,直接拖数据库。有一个数字 int a;随便拿一个数字 int k;

2025-05-18 18:30:29 798 2

原创 Thread类的基本用法

2.实现Runnable类,并重写run()方法。1.继承Thread类,并重写run()方法。Java创建线程时有,5中代码的编写方式。4.Runnable匿名内部类。3.Thread匿名内部类。

2025-03-27 12:07:37 213

原创 线程的状态

3)其他阻塞:调用线程的sleep()或者join()后,线程会进入到阻塞状态,当sleep超时或者join终止或者超时,线程重新转入就绪状态。2)同步阻塞:线程在获得synchronized同步锁失败,JVM会把线程放到锁池中,线程进入同步阻塞.1)等待阻塞:运行状态的线程执行wait方法,JVM会把线程放在等待队列中,使本线程进入阻塞状态.线程run(),main()方法执行结束,或者因为异常退出了run()方法,则该线程结束生命周期。与等待不同的是,不是无限制的等待,超时后自动返回。

2025-03-27 11:56:57 322

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除