自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Agent AI智能体的崛起和未来社会角色

Agent AI智能体是一种拥有高度智能和自主性的人工智能系统。与传统的AI系统相比,Agent AI更加复杂和全面,能够通过感知、学习和决策来执行任务和处理复杂问题,减少对人类指导的需求。这种智能体通常拥有自我学习和自我优化的能力,能够在不断变化的环境中自适应和演化。

2024-04-29 10:22:40 446

原创 一条SQL语句执行的过程

出现的问题:全部使用长连接,有些时候MySQL占用内存涨得特别快,在执行过程中临时使用的内存是管理在连接对象里面的,这些资源会在连接断开的时候才释放。如果一个用户已经建立了连接,即使管理员中途修改了该用户的权限,也不会影响已经存在连接的权限。执行方法的逻辑结果是一样的,但是执行的效率会有不同,而优化器的作用就是决定选择使用哪一个方案。在完成经典的TCP握手后,连接器就要开始认证你的身份,这个时候用的就是你输入的用户名和密码。打开表的时候,执行器就会根据表的引擎定义,去使用这个引擎提供的接口。

2024-04-28 09:32:06 894

原创 在4GB物理内存上,申请8G内存会怎么样

你的主机的「物理内存」够不够大了,即使 malloc 申请的是虚拟内存,只要不去访问就不会映射到物理内存,但是申请虚拟内存的过程中,还是使用到了物理内存(比如内核保存虚拟内存的数据结构,也是占用物理内存的),如果你的主机是只有 2GB 的物理内存的话,大概率会触发 OOM。,我把上面的代码改成了申请 64GB 内存后,当进程申请完 64GB 虚拟内存后,使用到 56 GB (这个不要理解为占用的物理内存,理解为已被访问的虚拟内存大小,也就是在物理内存呆过的内存大小)的时候,进程就被系统 kill 掉了。

2024-04-27 11:36:10 1279

原创 MySql中char和varchar的区别

上看,varchar是变长的(Variable-length),char是定长的(Fixed-length)因为存储时,char会用空格填充至指定长度,所以取出时需要去除空格。如果char字段有唯一索引,如果最大长度超过255,就需要2字节,否则1字节。,则插入记录后就分配了100个字节,后续修改不会造成页分裂、页空隙等问题,而。:char是255,varchar是65535,单位是字符(而不是字节)。例子:某个字段的最大长度是100字节,但是会频繁修改。:char会将尾随空格去掉,而varchar不会。

2024-04-26 09:31:31 556

原创 AIGC技术:发展现状与未来趋势

近年来,人工智能生成内容(AIGC)技术迅速发展,成为人工智能领域的一个热门话题。AIGC技术在多个领域取得了显著的进展,包括文本生成、图像生成、音频和视频生成等。这些技术的应用范围广泛,从媒体和娱乐,到教育、医疗和商业领域。本文将探讨AIGC技术的发展现状和未来趋势。

2024-04-25 09:47:48 604 1

原创 count(*)和count(1)哪个性能更好

InnoDB 循环遍历聚簇索引(主键索引),将读取到的记录返回给 server 层,但是不会读取记录中的任何字段的值,因为 count 函数的参数是 1,不是字段,所以不需要读取记录中的字段值。如果表里只有主键索引,没有二级索引时,那么,InnoDB 循环遍历聚簇索引,将读取到的记录返回给 server 层,然后读取记录中的 id 值,就会 id 值判断是否为 NULL,如果不为 NULL,就将 count 变量加 1。该函数作用是统计符合查询条件的记录中,函数指定的参数不为 NULL 的记录有多少个。

2024-04-24 09:13:02 508

原创 程序员高效创新,健康有道:缓解工作压力的经验分享

对于这个话题,我想分享一下我个人的一些经验,如果大家有兴趣的,欢迎大家一起分享。

2024-04-23 09:21:44 116

原创 深入浅出索引知识

过程:非主键索引先在在对应的索引树上搜索到自己的值,这个值存放的是主键值,然后根据这个主键值到主键的索引树上搜索到指定的记录。例子:如果现在有一个高频请求,要根据市民的身份证号查询他的姓名,这样的索引就满足覆盖要查询的字段,这样就提高了效率。非主键索引的叶子节点内容是主键的值。如果删除,新建主键索引,会同时去修改普通索引对应的主键索引,性能消耗比较大。表都是根据主键顺序以索引的形式存放的,这种存储方式的表称为索引组织表。如果数据页满了,就还要进行新的数据页的申请,将多的数据移动过去,称为。

2024-04-23 09:18:38 578

原创 MySql为什么使用B+树作为索引

B+树更便于遍历:由于B+树的数据都存储在叶子结点中,分支结点均为索引,方便扫库,只需要扫一遍叶子结点即可,但是B树因为其分支结点同样存储着数据,我们要找到具体的数据,需要进行一次中序遍历按序来扫,所以B+树更加适合在区间查询的情况。树是存储在磁盘中的,访问每个节点,都对应一次磁盘 I/O 操作,树的高度就等于每次查询数据时磁盘 IO 操作的次数,极度的影响性能。B 树则不同,B 树没有冗余节点,删除节点的时候非常复杂,比如删除根节点中的数据,可能涉及复杂的树的变形。

2024-04-22 11:14:51 1038

原创 普通索引和唯一索引如何选择

因为merge的时候是真正进行数据更新的时刻,而change buffer的主要目的就是将记录的变更动作缓存下来,所以在一个数据页做merge之前,change buffer记录的变更越多(也就是这个页面上要更新的次数越多),收益就越大。因为引擎是按页读写的,按条件查询的话它所在的数据页就都在内存里了,即使普通索引还有其他的操作,但是我们计算平均性能差异时,仍可以认为这个操作成本对于现在的CPU来说可以忽略不计。对于唯一索引来说,找到3和5之间的位置,判断到没有冲突,插入这个值,语句执行结束;

2024-04-21 10:28:45 902

原创 undo log、redo log、binlog有什么用?

但是这样做的风险是,主机掉电的时候会丢数据。:把 XID 写入到 binlog,然后将 binlog 持久化到磁盘(sync_binlog = 1 的作用),接着调用引擎的提交事务接口,将 redo log 状态设置为 commit,此时该状态并不需要持久化到磁盘,只需要 write 到文件系统的 page cache 中就够了,因为只要 binlog 写磁盘成功,就算 redo log 的状态还是 prepare 也没有关系,一样会被认为事务已经执行成功;

2024-04-20 15:45:00 1409

原创 程序员副业探索:个人价值的最大化与创业梦想的探索

作为程序员,通过副业探索,不仅可以实现个人价值的最大化,增加收入,还可以探索创业梦想。然而,副业选择与挑战需要谨慎对待,合理规划与持续学习是取得成功的关键。希望本文能够为程序员副业探索提供一些参考与启示,让他们在职业生涯中取得更大的成就与满足感。

2024-04-19 16:24:25 346

原创 CPU执行过程

内核中,priority 的范围是 0~139,值越低,优先级越高,其中前面的 0~99 范围是提供给实时任务使用的,而 nice 值是映射到 100~139,这个范围是提供给普通任务用的,因此 nice 值调整的是普通任务的优先级。这个算法的理念是想让分配给每个任务的 CPU 时间是一样,于是它为每个任务安排一个虚拟运行时间 vruntime,如果一个任务在运行,其运行的越久,该任务的 vruntime 自然就会越大,而没有被运行的任务,vruntime 是不会变化的。

2024-04-19 16:19:25 990

原创 成为程序员:挑战与机遇的旅程

成为程序员是一种富有挑战性和充满机遇的职业选择。

2024-04-18 09:42:34 222

原创 Avi Wigderson:理论计算科学的先驱者与图灵奖得主

Avi Wigderson 是一位在理论计算机科学领域享有盛誉的学者,他的贡献不仅在学术界广受认可,而且对于计算机科学和数学领域的发展具有深远的影响。首先,随机性在算法设计中起着至关重要的作用。他的工作为随机化算法的发展提供了重要的理论基础,为解决各种计算问题提供了新的思路和方法。Avi Wigderson 的研究对于理解和构造高质量的伪随机数生成器提供了深入的洞察,为密码学的发展和应用提供了重要的支持。他的成就激励着更多的人投身于理论计算机科学的研究,为解决人类面临的复杂问题贡献自己的力量。

2024-04-17 11:15:04 319

原创 乐观锁和悲观锁的实现

有了 CAS,就可以实现一个乐观锁,允许多个线程同时读取(因为根本没有加锁操作),但是只有一个线程可以成功更新数据,并导致其他要更新数据的线程回滚重试。我们需要加上一个版本号(Version),在每次提交的时候将版本号+1 操作,那么下个线程去提交修改的时候,会带上版本号去判断,如果版本修改了,那么线程重试或者提示错误信息。乐观锁适用于写比较少的情况下,即冲突真的很少发生的时候,这样可以省去锁的开销,加大了系统的整个吞吐量。但是在效率方面,处理加锁的机制会产生额外的开销,还有增加产生死锁的机会。

2024-04-15 08:57:29 1346

原创 如何解决mysql死锁问题

一个事务获取的间隙锁不会阻止另一个事务获取同一个间隙范围的间隙锁,共享和排他的间隙锁是没有区别的,他们相互不冲突,且功能相同,即两个事务可以同时持有包含共同间隙的间隙锁。插入意向锁与间隙锁的另一个非常重要的差别是:尽管「插入意向锁」也属于间隙锁,但两个事务却不能在同一时间内,一个拥有间隙锁,另一个拥有该间隙区间内的插入意向锁(当然,插入意向锁如果不在间隙锁区间内则是可以的)。插入意向锁与间隙锁是冲突的,所以当其它事务持有该间隙的间隙锁时,需要等待其它事务释放间隙锁之后,才能获取到插入意向锁。

2024-04-12 08:09:13 829

原创 mysql中有哪些锁

next-key lock 是包含间隙锁+记录锁的,如果一个事务获取了 X 型的 next-key lock,那么另外一个事务在获取相同范围的 X 型的 next-key lock 时,是会被阻塞的。当一个事务对一条记录加了 X 型记录锁后,其他事务既不可以对该记录加 S 型记录锁(S 型与 X 锁不兼容),也不可以对该记录加 X 型记录锁(X 型与 X 锁不兼容)。虽然相同范围的间隙锁是多个事务相互兼容的,但对于记录锁,我们是要考虑 X 型与 S 型关系,X 型的记录锁与 X 型的记录锁是冲突的。

2024-04-11 17:18:21 623

原创 事务的隔离级别

隔离性(Isolation):数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致,因为多个事务同时使用相同的数据时,不会相互干扰,每个事务都有一个完整的数据空间,对其他并发事务是隔离的。针对快照读(普通 select 语句),是通过 MVCC 方式解决了幻读,因为可重复读隔离级别下,事务执行过程中看到的数据,一直跟这个事务启动时看到的数据是一致的,即使中途有其他事务插入了一条数据,是查询不出来这条数据的,所以就很好了避免幻读问题。

2024-04-10 07:54:40 481

原创 事务基础知识

失败的:当事务处在 活动的 或者 部分提交的 状态时,可能遇到了某些错误(数据库自身的错误、操作系统错误或者直接断电等)而无法继续执行,或者人为的停止当前事务的执行,我们就说该事务处在 失败的 状态。支持(NDB存储引擎不是我 们的重点),如果某个事务中包含了修改使用不支持事务的存储引擎的表,那么对该使用不支持事务的存储引擎的表所做的修改将无法进行回滚。部分提交的:当事务中的最后一个操作执行完成,但由于操作都在内存中执行,所造成的影响并没有刷新到磁盘时,我们就说该事务处在 部分提交的 状态。

2024-04-09 08:16:16 777

原创 索引知识详解

联合索引的最左匹配原则,在遇到范围查询(如 >、<)的时候,就会停止匹配,也就是范围查询的字段可以用到联合索引,但是在范围查询字段的后面的字段无法用到联合索引。经常更新的字段不用创建索引,比如不要对电商项目的用户余额建立索引,因为索引字段频繁修改,由于要维护 B+Tree的有序性,那么就需要频繁的重建索引,这个过程是会影响数据库性能的。里用不到的字段,索引的价值是快速定位,如果起不到定位的字段通常是不需要创建索引的,因为索引是会占用物理空间的。

2024-04-08 08:20:08 719

原创 35岁程序员:技术与经验的交汇点

在当今竞争激烈的技术行业,35岁并不是程序员职业生涯的终点,而是一个新的起点。经验丰富的程序员拥有独特的优势,可以通过深度学习和思考,不断提升自己的技术水平和专业能力,为企业创造更大的价值。因此,对于35岁的程序员来说,关键在于保持学习的态度和积极的心态,不断拓展自己的职业发展路径,迎接未来的挑战和机遇。

2024-04-07 16:05:14 265

原创 HTTPS中的TLS和TCP能同时握手吗

TCP 的第一次和第二次握手是不能够携带数据的,而 TCP 的第三次握手是可以携带数据的,因为这时候客户端的 TCP 连接状态已经是 ESTABLISHED,表明客户端这一方已经完成了 TCP 连接建立。常规的情况下,如果要使用 TCP 传输协议进行通信,则客户端和服务端通信之前,先要经过 TCP 三次握手后,建立完可靠的 TCP 连接后,客户端才能将数据发送给服务端。不是的,因为服务端只有在收到客户端的 TCP 的第三次握手后,才能和客户端进行后续 TLSv1.3 握手。

2024-04-07 08:21:03 968 1

原创 虚拟内存知识详解

知道了虚拟地址是通过段表与物理地址进行映射的,分段机制会把程序的虚拟地址分成 4 个段,每个段在段表中有一个项,在这一项找到段的基地址,再加上偏移量,于是就能找到物理内存中的地址。利用这一特性,把最常访问的几个页表项存储到访问速度更快的硬件。用于段页式地址变换的数据结构是每一个程序一张段表,每个段又建立一张页表,段表中的地址是页表的起始地址,而页表中的地址则为某页的物理页号。如果程序要访问虚拟地址的时候,由操作系统转换成不同的物理地址,这样不同的进程运行的时候,写入的是不同的物理地址,这样就不会冲突了。

2024-04-06 09:57:04 1392

原创 IP知识详解

在发送 IP 包时,首先要确定 IP 包首部中的目标地址,再从路由控制表中找到与该地址具有相同网络地址的记录,根据该记录将 IP 包转发给相应的下一个路由器。路由器还是主机解析到一个 IP 地址时候,我们判断其 IP 地址的首位是否为 0,为 0 则为 A 类地址,那么就能很快的找出网络地址和主机地址。组播地址,也就是 D 类地址,既然是组播,那就说明是只有一组的主机能收到数据包,不在一组的主机不能收到数组包,怎么管理是否是在一组呢?但是,一个 IP 地址中只允许出现一次两个连续的冒号。

2024-04-03 08:11:31 1211

原创 如果内存满了,会产生什么影响

使用 NUMA 架构的服务器,如果系统出现还有一半内存的时候,却发现系统频繁触发「直接内存回收」,导致了影响了系统性能,那么大概率是因为 zone_reclaim_mode 没有设置为 0 ,导致当本地内存不足的时候,只选择回收本地内存的方式,而不去使用其他 Node 的空闲内存。,因为程序运行符合局部性原理,CPU 访问内存会有很明显的重复访问的倾向性,对于那些没有被经常使用到的内存,我们可以把它换出到物理内存之外,比如硬盘上的 swap 区域。但是,访问远端 Node 的内存比访问本地内存要耗时很多。

2024-04-02 08:28:38 618

原创 计算机中0.1+0.2的结果是多少

并不是所有小数都可以用「完整」的二进制来表示的,比如十进制 0.1 在转换成二进制小数的时候,是一串无限循环的二进制数,计算机是无法表达无限循环的二进制数的,毕竟计算机的资源是有限。由于计算机的资源是有限的,所以是没办法用二进制精确的表示 0.1,只能用「近似值」来表示,就是在有限的精度情况下,最大化接近 0.1 的二进制数,于是就会造成精度缺失的情况。这种二进制小数是「定点数」形式,代表着小数点是定死的,不能移动,如果你移动了它的小数点,这个数就变了, 就不再是它原来的值了。

2024-04-01 08:21:28 724

原创 redis知识详解

避免通过查询数据库来判断数据是否存在:在写入数据库数据时,使用布隆过滤器做个标记,然后在用户请求到来时,业务线程确认缓存失效后,可以通过查询布隆过滤器快速判断数据是否存在,如果不存在,就不用通过查询数据库来判断数据是否存在,即使发生了缓存穿透,大量请求只会查询 Redis 和布隆过滤器,而不会查询数据库,保证了数据库能正常运行,Redis 自身也是支持布隆过滤器的。等网络恢复,旧主节点会降级为从节点,再与新主节点进行同步复制的时候,由于会从节点会清空自己的缓冲区,所以导致之前客户端写入的数据丢失了。

2024-03-31 08:44:40 1883

原创 TCP的keepalive与HTTP的keep-alive的区别

由于 HTTP 是基于 TCP 传输协议实现的,客户端与服务端要进行 HTTP 通信前,需要先建立 TCP 连接,然后客户端发送 HTTP 请求,服务端收到后就返回响应,至此「请求-应答」的模式就完成了,随后就会释放 TCP 连接。HTTP 的 Keep-Alive 就是实现了这个功能,可以使用同一个 TCP 连接来发送和接收多个 HTTP 请求/应答,避免了连接建立和释放的开销,这个方法称为 HTTP 长连接。HTTP 的 Keep-Alive,是由应用层(用户态) 实现的,称为 HTTP 长连接;

2024-03-30 08:37:19 589

原创 文件系统知识内容详解

软链接相当于重新创建一个文件,这个文件有独立的 inode,文件的内容是另外一个文件的路径,软链接是可以跨文件系统的,甚至目标文件被删除了,链接文件还是在的,只不过指向的文件找不到了而已。打开了一个文件后,操作系统会跟踪进程打开的所有文件,所谓的跟踪呢,就是操作系统为每个进程维护一个打开文件表,文件表里的每一项代表「文件描述符」,所以说文件描述符是打开文件的标识。目录也是文件,也是用索引节点唯一标识,和普通文件不同的是,普通文件在磁盘里面保存的是文件数据,而目录文件在磁盘里面保存子目录或文件。

2024-03-29 08:30:51 1423

原创 乐观锁、悲观锁知识详解

自旋锁开销少,在多核系统下一般不会主动产生线程切换,适合异步、协程等在用户态切换请求的编程方式,但如果被锁住的代码执行时间过长,自旋的线程会长时间占用 CPU 资源,所以自旋的时间和被锁住的代码执行的时间是成「正比」的关系。我们常见的 SVN 和 Git 也是用了乐观锁的思想,先让用户编辑代码,然后提交的时候,通过版本号来判断是否产生了冲突,发生了冲突的地方,需要我们自己修改后,再重新提交。但是,一旦「写锁」被线程持有后,读线程的获取读锁的操作会被阻塞,而且其他写线程的获取写锁的操作也会被阻塞。

2024-03-29 08:25:25 822

原创 如何避免死锁

线程 A 和 线程 B 获取资源的顺序要一样,当线程 A 是先尝试获取资源 A,然后尝试获取资源 B 的时候,线程 B 同样也是先尝试获取资源 A,然后尝试获取资源 B。也就是说,线程 A 和 线程 B 总是以相同的顺序申请自己想要的资源。,在没有外力的作用下,这些线程会一直相互等待,就没办法继续运行,这种情况就是发生了。线程 A 在等待资源 2 的同时并不会释放自己已经持有的资源 1。最常见的并且可行的就是使用资源有序分配法,来破环环路等待条件。两个线程获取资源的顺序构成了环形链。

2024-03-29 08:23:28 191

原创 已经建立了TCP连接,如果还接收到了SYN会如何处理

killcx 工具是主动发送一个 SYN 报文,对方收到后会回复一个携带了正确序列号和确认号的 ACK 报文,这个 ACK 被称之为 Challenge ACK,这时就可以拿到对方下一次期望收到的序列号,然后将序列号填充到伪造的 RST 报文,并将其发送给对方,达到关闭 TCP 连接的效果。tcpkill 工具是在双方进行 TCP 通信时,拿到对方下一次期望收到的序列号,然后将序列号填充到伪造的 RST 报文,并将其发送给对方,达到关闭 TCP 连接的效果。,只能用于关闭活跃的 TCP 连接。

2024-03-28 08:32:04 346

原创 SYN被丢弃的场景分析

net.ipv4.tcp_tw_reuse,如果开启该选项的话,客户端(连接发起方) 在调用 connect() 函数时,**如果内核选择到的端口,已经被相同四元组的连接占用的时候,就会判断该连接是否处于 TIME_WAIT 状态,如果该连接处于 TIME_WAIT 状态并且 TIME_WAIT 状态持续的时间超过了 1 秒,那么就会重用这个连接,然后就可以正常使用该端口了。防止具有相同四元组的旧数据包被收到,也就是防止历史连接中的数据,被后面的连接接受,否则就会导致后面的连接收到一个无效的数据,

2024-03-28 08:28:56 954

原创 TCP建立连接时,为什么每次的SYN都不一样

是 TCP 一个头部字段,标识了 TCP 发送端到 TCP 接收端的数据流的一个字节,因为 TCP 是面向字节流的可靠协议,为了保证消息的顺序性和可靠性,TCP 为每个传输方向上的每个字节都赋予了一个编号,以便于传输成功后确认、丢失后重传以及在接收端保证不会乱序。客户端和服务端建立一个 TCP 连接,在客户端发送数据包被网络阻塞了,然后超时重传了这个数据包,而此时服务端设备断电重启了,之前与客户端建立的连接就消失了,于是在收到客户端的数据包的时候就会发送 RST 报文。,就需要有 TCP 时间戳。

2024-03-28 08:26:22 988

原创 关于进程、线程相关知识详解

当一个线程开始运行后,除非它主动地交出 CPU 的使用权,否则它所在的进程当中的其他线程无法运行,因为用户态的线程没法打断当前运行中的线程,它没有这个特权,只有操作系统才有,但是用户线程不是由操作系统管理的。如果两个进程「要求的服务时间」相同时,「等待时间」越长,「响应比」就越高,这就兼顾到了长作业进程,因为进程的响应比可以随时间等待的增加而提高,当其等待时间足够长时,其响应比便可以升到很高,从而获得运行的机会;但在 1 秒钟期间,它可能会运行多个进程,这样就产生并行的错觉,实际上这是并发。

2024-03-27 08:45:12 1305

原创 进程间的通信方式详解

在发送数据时,会分成一个一个独立的数据单元,也就是消息体(数据块),消息体是用户自定义的数据类型,消息的发送方和接收方要约定好消息体的数据类型,所以每个消息体都是固定大小的存储块。消息队列生命周期随内核,如果没有释放消息队列或者没有关闭操作系统,消息队列会一直存在,而前面提到的匿名管道的生命周期,是随进程的创建而建立,随进程的结束而销毁。命令的时候,A 进程和 B 进程都是 shell 创建出来的子进程,A 和 B 之间不存在父子关系,它俩的父进程都是 shell。

2024-03-27 08:39:14 465

原创 线程崩了,进程会有影响吗?

假设现在调用了一个无限递归的函数,那就会持续分配栈帧,但 stack 的大小是有限的(Linux 中默认为 8 M,可以通过 ulimit -a 查看),如果无限递归很快栈就会分配完了,此时再调用函数试图分配超出栈的大小内存,就会发生段错误,也就是 stackoverflowError。发 kill 信号必须具有一定的权限,否则任意进程都可以通过发信号来终止其他进程,那显然是不合理的,实际上 kill 执行的是系统调用,将控制权转移给了内核(操作系统),由内核来给指定的进程发送信号。

2024-03-27 08:35:55 373

原创 TCP面向字节流协议分析

操作系统在收到 UDP 报文后,会将其插入到队列里,队列里的每一个元素就是一个 UDP 报文,这样当用户调用系统调用读数据的时候,就会从队列里取出一个数据,然后从内核里拷贝给用户缓冲区。每个用户消息都是固定长度的,比如规定一个消息的长度是 64 个字节,当接收方接满 64 个字节,就认为这个内容是一个完整且有效的消息。接收方的程序如果不知道发送方发送的消息的长度,也就是不知道消息的边界时,是无法读出一个有效的用户消息的。接收方在接收到 UDP 报文后,读一个 UDP 报文就能读取到完整的用户消息。

2024-03-26 09:50:00 542

原创 websocket相较于HTTP的优势分析

在使用 WebSocket 协议的网页游戏里,怪物移动以及攻击玩家的行为是服务器逻辑产生的,对玩家产生的伤害等数据,都需要由服务器主动发送给客户端,客户端获得数据后展示对应的效果。在用户不感知的情况下,服务器将数据推送给浏览器的技术,就是所谓的服务器推送技术,它还有个毫不沾边的英文名,comet 技术。HTTP 请求发出后,一般会给服务器留一定的时间做响应,比如 3 秒,规定时间内没返回,就认为是超时。,也是基于TCP协议的,同一时间里,客户端和服务器只能有一方主动发数据,这就是所谓的半双工。

2024-03-26 09:47:22 535

常见操作系统知识问题详解

这份资源涵盖了操作系统基础知识的全面概览,内容包括进程、线程、调度等诸多方面。我在总结这些知识时,不仅参考了相关资料,还结合了个人见解进行整合,力求为大家呈现一份全面而深入的学习资料。在整理过程中,我致力于以尽可能简明易懂的方式表达内容,但难免会有一些初学者可能难以理解的部分。因此,我欢迎大家积极提出问题,共同探讨学习,相互帮助,共同进步!通过本资源,你将了解操作系统的核心概念和原理,包括进程管理、内存管理、文件系统等重要内容。同时,我也会涉及到一些实际问题和案例分析,帮助大家更好地理解并应用所学知识。无论你是学生、工程师还是研究人员,这份资源都将成为你学习和工作中宝贵的参考资料。让我们共同努力,相互学习,共同进步,加油!

2024-03-22

常见计算机网络问题详解

这份资源是我对计算机网络中常见问题的学习总结,涵盖了HTTP协议、TCP协议、IP协议等相关知识,并包含了丰富的图解内容。在整理这些内容时,我尽可能地以简单明了的方式呈现,以便更多人可以轻松学习。虽然对初学者来说可能有一些困难,但我会尽力让内容更易理解。通过不懈的努力和进步,我们可以共同提高,一起加油!在这份资源中,你将会学到关于计算机网络的重要知识,包括HTTP协议的工作原理、TCP协议的连接管理和数据传输、以及IP协议的路由和数据包转发等内容。此外,还会涉及到网络安全、性能优化等方面的内容,帮助你全面理解计算机网络的运作机制。通过这些内容的学习,你将能够更深入地理解网络通信的原理和技术,为你的成长和发展打下坚实的基础。让我们一起探索计算机网络的奥秘,共同进步,期待你在这个领域取得更大的成就!

2024-03-22

空空如也

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

TA关注的人

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