自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 阻塞socket 和非阻塞socket的区别(浅显易懂版)

对于这个问题,我们要先弄清什么是阻塞/非阻塞。阻塞与非阻塞是对一个文件描述符指定的文件或设备的两种工作方式。阻塞的意思是指,当试图对该文件描述符进行读写时,如果当时没有东西可读或者暂时不可写,程序就进入等待状态,直到有东西可读或者可写为止。非阻塞的意思是,当没有东西可读或者不可写时,读写函数就马上返回,而不会等待。现在来理解什么是阻塞socket,什么是非阻塞socket。

2024-10-11 15:16:10 430

原创 Reactor和Proactor的区别(通俗易懂版)

线程池:复用线程以处理多个连接,减少资源消耗。非阻塞 I/O:避免线程阻塞,但效率低下。I/O 多路复用:高效地监控多个连接,只在必要时处理 I/O 操作。select/poll/epoll 是如何获取网络事件的呢?如果没有事件发生,线程只需阻塞在这个系统调用,而无需像前面的线程池方案那样轮训调用 read 操作来判断是否有数据。如果有事件发生,内核会返回产生了事件的连接,线程就会从阻塞状态返回,然后在用户态中再处理这些连接对应的业务即可。

2024-09-30 15:52:07 1081

原创 socket是什么?套接字是什么?

Socket的原意是“插座”。在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。我们把插头插到插座上就能从电网获得电力供应,同样,为了与远程计算机进行数据传输,需要连接到因特网,而 socket 就是用来连接到因特网的工具。

2024-09-26 17:29:28 390

原创 deque、queue 和 priority_queue 的区别

访问方式std::deque支持两端和中间的随机访问,std::queue和只允许访问队首元素。元素顺序std::queue按照先进先出的顺序处理元素,根据元素的优先级处理元素,而std::deque不维护元素的特定顺序。底层实现std::deque通常由多个数组块组成,std::queue和通常使用std::deque或std::list作为底层容器,但这些底层容器对用户是隐藏的。适用场景:根据需要的数据结构特性选择合适的容器或容器适配器。

2024-09-14 14:29:49 744

原创 HTTP请求⽅法

与强制缓存不同,协商缓存依赖于客户端和服务器之间的交互,在协商缓存中,服务器在响应中提供了资源的⼀些标识信息,客户端在后续请求中通过这些信息来判断资源是否发⽣了变化,进⽽判断是否需要重新传输资源。强缓存:浏览器判断请求的⽬标资源是否有效命中强缓存,如果命中,则可以直接从内存中读取⽬标资源,⽆需与服务器做任何通讯。为安全幂等的,因为它为只读操作,⽆论操作多少次,服务器上的数据都是安全的,且每次的结果都是相同的。,如果下⼀次传输的数据相同,那么就返回缓存中的内容,以求更快的展示数据,⽽ POST。

2024-09-09 19:13:34 506

原创 什么是TCP粘包问题?如何解决TCP粘包问题?

算法做了这样⼀件事,当来了⼀个很⼩的数据包,我不急于发送这个包,⽽是等来了更多的包,将这些⼩包组合成⼤包之后⼀并发送,不就提⾼了⽹络传输的效率的嘛。这个想法收到了很好的效果,但是我们想⼀下,如果是分属于两个不同⻚⾯的包,被合并在了⼀起,那客户那边如何区分它们呢?格式化数据:每条数据有固定的格式(开始符,结束符),这种⽅法简单易⾏,但是选择开始符和结束符时⼀定要确保每条数据的内部不包含开始符和结束符。算法,⽤途是这样的:通信两端有很多⼩的数据包要发送,虽然传送的数据很少,但是流程⼀点没少,也需要tcp。

2024-09-06 18:41:48 413

原创 Linux是如何收发网络包的

⽐如,当有⽹络包到达时,⽹卡发起硬件中断,于是会执⾏⽹卡硬件中断处理函数,中断处理函数处理完需要「暂时屏蔽中断」,然后唤醒「软中断」来轮询处理数据,直到没有新数据时才恢复中断,这样⼀次中断处理多个⽹络包,于是就可以降低⽹卡中断带来的性能开销。机制,它是混合「中断和轮询」的⽅式来接收⽹络包,它的核⼼概念就是不采⽤中断的⽅式读取数据,⽽是⾸先采⽤中断唤醒数据接收的服务程序,然后poll 的⽅法来轮询数据。⽹卡是计算机⾥的⼀个硬件,专⻔负责接收和发送⽹络包,当⽹卡接收到⼀个⽹络包后,会通过。

2024-09-06 17:33:47 641

原创 TCP的传输速度

如果系统的空闲内存很多,就可以⾃动把缓冲区增⼤⼀些,这样传给对⽅的接收窗⼝也会变⼤,因⽽提升发 送⽅发送的传输数据数。反之,如果系统的内存很紧张,就会减少缓冲区,这虽然会降低传输效率,可以保证更多的并发连接正常⼯作发送缓冲区的调节功能是⾃动开启的,⽽接收缓冲区则需要配置 tcp_moderate_rcvbuf。如果发送缓冲区「超过」带宽时延积,超出的部分就没办法有效的⽹络传输,同时导致⽹络过载,容易丢包;发送缓冲区⼤⼩可⾃⾏调节,三个数值分别为:动态范围的最⼩值,初始默认值,动态范围的最⼤值。

2024-09-05 20:19:53 560

原创 TCP如何关闭连接(详细版)

函数关闭的孤⼉连接,由于⽆法再发送和接收数据,所以这个状态不可以持续太久,⽽tcp_fin_timeout 控制了这个状态下连接的持续时⻓,默认值是。,⾜以让两个⽅向上的数据包都被丢弃,使得原来连接的数据包在⽹络中都⾃然消失,再出现的数据包⼀定都是新建⽴连接所产⽣的。状态,就表示主动⽅的发送通道已经关闭,接下来将等待对⽅发送FIN 报⽂,关闭对⽅的发送通道。,如果接收缓冲区有已接收的数据,则将会被丢弃,并且后续再收到新的数据,会对数据进⾏ ACK。函数的⼀⽅的连接叫做「孤⼉连接」,如果你⽤。

2024-09-04 18:26:03 1137

原创 什么是抓包(详细版)

抓包(packet capture)就是将网络传输发送与接收的数据包进行截获、重发、编辑、转存等操作,也用来检查网络安全。抓包也经常被用来进行数据截取等。

2024-08-25 13:29:48 401

原创 ICMP互联网控制报文协议

⽹络包在复杂的⽹络传输环境⾥,常常会遇到各种问题。当遇到问题的时候,总不能死个不明不⽩,没头没脑的作⻛不是计算机⽹络的⻛格。所以需要传出消息,报告遇到了什么问题,这样才可以调整传输策略,以此来控制整个局⾯。包因为某种原因未能达到⽬标地址,那么这个具体的原因将由。⼀类是通知出错原因的错误消息,也就是「差错报⽂类型」⼀类是⽤于诊断的查询消息,也就是「查询报⽂类型」的⾸部和数据域以后得知具体发⽣问题的原因。包被废弃的原因和改善⽹络设置等。,也就是互联⽹控制报⽂协议)。的主要功能包括:确认。的这种通知消息会使⽤。

2024-08-19 15:02:19 124

原创 IPV6基本知识

IPV4⾸部与IPV6⾸部。

2024-08-14 15:29:46 946

原创 IP基础(通俗易懂版)

如果路由控制表中存在多条相同⽹络地址的记录,就选择相同位数最多的⽹络地址,也就是最⻓匹配。还有另⼀种划分⽹络号与主机号形式,那就是⼦⽹掩码,掩码的意思就是掩盖掉主机号,剩余的就是⽹络号。环回地址是在同⼀台计算机上的程序之间进⾏⽹络通信时所使⽤的⼀个默认地址。路由器寻址⼯作中,也就是通过这样的⽅式来找到对应的⽹络号的,进⽽把数据包转发给对应的⽹络内。通过⼦⽹掩码划分出⽹络号和主机号,那实际上⼦⽹掩码还有⼀个作⽤,那就是划分⼦⽹。⼦⽹划分实际上是将主机地址分为两个部分:⼦⽹⽹络地址和⼦⽹主机地址。

2024-08-13 17:46:54 1865

原创 什么是网关?网关有什么作用?

如果网络A中的主机发现数据包的目的主机不在本地网络中,就把数据包转发给它自己的网关,再由网关转发给网络B的网关,网络B的网关再转发给网络B的某个主机(如附图所示)。假如你想找你的同学小明聊天,小明家住在很远的另外一个院子里,他家的院子里也有一个看门的王大爷(小明的网关)。假设你的名字叫小不点,你住在一个大院子里,你的邻居有很多小伙伴,在门口传达室还有个看大门的李大爷,李大爷就是你的网关。李大爷:好,你等着。简单来说,网关是设备与路由器之间的桥梁,由它将不同的网络间进行访问的控制,转换,交接等等。

2024-08-10 17:15:37 1694 3

原创 TCP的重传机制和滑动窗口介绍(详细讲解版)

TCP每发送⼀个数据,都需要⼀次应答,然后继续发送,这样为每个数据包都进⾏确认应答,缺点是:数据往返时间越⻓,⽹络吞吐量越低。为了解决这个问题,TCP引⼊了窗。

2024-08-10 16:55:39 1302

原创 为什么需要 TIME_WAIT 状态

两倍:⽹络中可能存在发送⽅的数据包,当这些发送⽅的数据包被接收⽅处理后⼜会向对⽅发送响应,所以⼀来⼀回需要等待 2。状态,这些滞留的数据包可能会被传递给新连接,导致新连接的数据 被旧连接的数据⼲扰。,报⽂最⼤⽣存时间,它是任何报⽂在⽹络上存在的最⻓时间,超过这 个时间报⽂将被丢弃。报⽂的序列号值,表明已经收到客户端的报⽂了,此时服务端处于 CLOSE_WAIT。⾜以让两个⽅向上的数据包都被丢弃,使得原来连接的数据包在⽹络中都⾃然消失,再出现。,服务端⼀直在等待 ACK状态,⼀直没有等到,就会重发。

2024-08-09 18:24:51 533

原创 Springboot(快速入门)

Spring Boot 并不是用来替代 Spring 的解决方案,而是和 Spring 框架紧密结合用于提升 Spring 开发者体验的工具。它集成了大量常用的第三方库配置,Spring Boot应用中这些第三方库几乎可以是零配置的开箱即用(out-of-the-box),大部分的 Spring Boot 应用都只需要非常少量的配置代码(基于 Java 的配置),开发者能够更加专注于业务逻辑。

2024-08-08 10:30:56 824

原创 请求转发和重定向的区别(通俗易懂版)

可见,在sendRedirect()里面是两个请求,两个响应。1、请求次数:重定向是浏览器向服务器发送一个请求并收到响应后再次向一个新地址发出请求,转发是服务器收到请求后为了完成响应跳转到一个新的地址;重定向至少请求两次,转发请求一次;4、因为转发只能访问当前WEB的应用程序,所以不同WEB应用程序之间的访问,特别是要访问到另外一个WEB站点上的资源的情况,这个时候就只能使用重定向了。3、重定向的速度比转发慢,因为浏览器还得发出一个新的请求,所以如果在使用转发和重定向都无所谓的时候建议使用转发;

2024-08-08 09:51:30 584

原创 HTTPS是怎么建⽴连接的(通俗易懂版)

首先了解HTTPS的构造,如下图所示:SSL/TLS协议基本流程:客户端向服务器索要并验证服务器的公钥。双⽅协商⽣产「会话秘钥」。双⽅采⽤「会话秘钥」进⾏加密通信。

2024-08-07 21:02:33 702

原创 HTTP/1.0 和HTTP/1.1以及HTTP/2.0 HTTP/3.0的区别

HTTP/1.0是HTTTP协议的第⼀个正式版本主要具有以下特性:引⼊了请求头和响应头,⽀持多种请求⽅法和状态码不⽀持持久连接,每次请求都需要建⽴新的连接。

2024-08-06 20:31:18 1454

原创 servlet、service和WebService三者之间的关系(详细版)

servlet 是运行在 Web 服务器的小型 Java 程序(即:服务器端的小应用程序)。servlet 通常通过 HTTP (超文本传输协议) 接收和响应来自 Web 客户端的请求。用Java编写的服务端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。客户端发送请求至服务器端;服务器将请求信息发送至 Servlet;Servlet 生成响应内容并将其传给服务器。响应内容动态生成,通常取决于客户端的请求;服务器将响应返回给客户端。

2024-08-06 17:04:02 1218

原创 HTTP缓存

因为⽂件修改时间记录的最⼩单位是秒,所以,如果 ⽂件在⼏百毫秒内完成修改的话,⽂件修改时间不会改变,这样,即使⽂件内容修改了,依然响应 HTTP 304 ⾛缓存,不会返回新的 ⽂件。如果存在有效的缓存,就直接读取本地的数据,不必在通过⽹络获取服务器的响应 了,这就是 HTTP缓存。显然,ETag在这样的场景下就不是很适合。因为是根据⽂件修改时间来判断的,所以,在⽂件内容本身不修改的情况下,依然有可能更新⽂件修改时间 (⽐如修改⽂件名再改回来),这样,就有可能⽂件内容明明没有修改,但是缓存依然失效了。

2024-08-06 15:22:58 683

原创 DNS是什么,有什么用(详细介绍版)

DNS(Domain Name System) 是⼀种⽤于将域名(例如www.baidu.com)转换为IP地址(例如 220.181.111.188 )的分布式系统。在互联⽹上,计算机和其他⽹络设备使⽤IP地址来相互识别和通信。然⽽, IP地址是⼀串数字,不太⽅便⼈们使⽤和记忆,所以就使⽤了域名来代替复杂的IP地址。对于DNS服务器若采⽤集中式的设计有以下问题如果 DNS 服务器崩溃,那么整个⽹络随之瘫痪。

2024-08-04 20:06:34 1194

原创 在浏览器中输入URL并按下回车之后会发生什么

输⼊ URL 后,浏览器会解析出协议、主机、端⼝、路径等信息,并构造⼀个HTTP请求(浏览器会根据请求头判断 是否有 HTTP缓存 ,并根据是否有缓存决定是从服务器获取资源还是使⽤缓存资源)服务器会接受请求并将其传递给请求处理程序并发送HTTP响应,⼀般响应报⽂包含:请求的⽹⻚以及状态码,压 缩类型,如何缓存的⻚⾯,设置的cookie;客户端和服务器之间进⾏HTTP请求和HTTP响应的过程中,需要建⽴起TCP连接,TCP连接需要进⾏三次握⼿。

2024-08-04 19:54:55 211

原创 C++搭建HTTP服务器(详细版)

此项目实现的是一个HTTP服务器,项目中将会通过基本的网络套接字读取客户端发来的HTTP请求并进行分析,最终构建HTTP响应并返回给客户端。HTTP在网络应用层中的地位是不可撼动的,无论是移动端还是PC端浏览器,HTTP无疑是打开互联网应用窗口的重要协议。该项目将会把HTTP中最核心的模块抽取出来,采用CS模型实现一个小型的HTTP服务器,目的在于理解HTTP协议的处理过程。该项目主要涉及C/C++、HTTP协议、网络套接字编程、CGI、单例模式、多线程、线程池等方面的技术。协议分层。

2024-08-02 16:42:57 2310

原创 size()和sizeof()的区别(C++八股文)

为了兼容,这两个函数一样。length()是因为沿用C语言的习惯而保留下来的,string类最初只有length(),引入STL之后,为了兼容又加入了size(),它是作为STL容器的属性存在的,便于符合STL的接口规则,以便用于STL的算法。string类的size()/length()方法返回的是字节数,不管是否有汉字。sizeof(ss)为4,ss是指向字符串常量的字符指针,sizeof 获得的是指针所占的空间,

2024-08-01 20:44:53 296

原创 算法题的时间复杂度和空间复杂度计算(超详细通俗易懂版)

时间复杂度的定义:在计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。请注意:时间复杂度不是在算它的执行时间,因为执行时间是没有标准的,这个和我们的硬件设备和机器环境有关系。一个算法所花费的时间与其中语句的执行次数成正比例,算法中的基本操作的执行次数,为算法 的时间复杂度。找到某条基本语句与问题规模N之间的数学表达式,就是算出了该算法的时间复杂度。举一个例子:// 请计算一下Func1中++count语句总共执行了多少次?i < N;++ i)

2024-08-01 18:51:07 735

原创 使用消息队列还是直接使用线程池异步处理?各自适合什么场景?

redis: 轻量级,低延迟,高并发,低可靠性;rabbitmq:重量级,高可靠,异步,不保证实时;rabbitmq是一个专门的AMQP协议队列,他的优势就在于提供可靠的队列服务,并且可做到异步,而redis主要是用于缓存的,redis的发布订阅模块,可用于实现及时性,且可靠性低的功能。

2024-07-31 17:40:37 941

原创 Intel深度摄像头RealSense D435(实感双目摄像头)调用代码

【代码】Intel深度摄像头RealSense D435(实感双目摄像头)调用代码。

2024-07-31 13:53:36 538

原创 单例模式(总结版)

非多线程安全优点:第一次调用才初始化,避免内存浪费。缺点:必须加锁(在“线程安全”部分分享如何加锁)才能保证单例,但加锁会影响效率。

2024-07-30 22:09:18 321

原创 IO多路复用select/poll/epoll介绍(通俗易懂版)

fd_set 使用数组实现1.fd_size 有限制 1024 bitmap fd[i] = accept()2.fdset不可重用,新的fd进来,重新创建3.用户态和内核态拷贝产生开销4.O(n)时间复杂度的轮询 成功调用返回结果大于 0,出错返回结果为 -1,超时返回结果为 0具有超时时间基于结构体存储{ int fd;//可重用解决了select的1,2两点缺点。

2024-07-29 22:42:44 259

原创 IO多路复用原理(超详细版)

计算机视角理解IO:对于计算机而言,任何涉及到计算机核心(CPU和内存)与其他设备间的数据转移的过程就是IO。IO对于计算机而言有两层意思:IO 设备:比如我们最常见的打印机、鼠标、键盘。对IO设备的数据读写。程序视角理解IO:现代操作系统将空间划分为用户空间和内核空间。用户空间:非内核应用程序则运行在用户空间。用户空间中的代码运行在较低的特权级别上,不能直接访问内核空间和硬件设备。

2024-07-29 16:33:13 777

原创 TCP与UDP的区别,以及TCP和HTTP的区别(超详细)

总结TCP是面向连接的,UDP是无连接的TCP是可靠的,UDP是不可靠的TCP是面向字节流的,UDP是面向数据报文的TCP只支持点对点通信,UDP支持一对一,一对多,多对多TCP报文首部20个字节,UDP首部8个字节TCP有拥塞控制机制,UDP没有TCP协议下双方发送接受缓冲区都有,UDP并无实际意义上的发送缓冲区,但是存在接受缓冲区TCP是面向连接的,UDP是无连接的。

2024-07-28 21:02:12 1204

原创 尚硅谷日程管理

<a href="regist.html">去注册</a>

2024-07-25 18:19:04 739

原创 理解各种协议和通信层的区别

Websocket:同HTTP一样也是应用层的协议,但是它是一种双向通信协议,是建立在TCP之上的,解决了服务器与客户端全双工通信的问题,包含两部分:一部分是“握手”,一部分是“数据传输”。HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。Socket是对TCP/IP协议的封装,像创建Socket连接时,可以指定使用的传输层协议,Socket可以支持不同的传输层协议(TCP或UDP),当使用TCP协议进行连接时,该Socket连接就是一个TCP连接。

2024-07-18 17:28:11 1003

原创 菜鸟程序员自学记录1

用户线程:在用户空间实现的线程机制,它不依赖于操作系统的内核,由一组用户级的线程库函数来完成线程的管理,包括进程的创建,终止,同步和调度等。内核线程:是指在操作系统的内核当中实现的一种线程机制,由操作系统的内核来完成线程的创建,终止和管理。-由于同一进程的各线程间共享内存和文件资源,可直接进行不通过内核的通信;进程拥有一个完整的资源平台,而线程只独享必不可少的资源,如寄存器和栈。线程同样具有就绪,阻塞,运行三种基本状态,同样具有状态之间的转换关系。用户线程在用户空间实现,内核线程在内核中实现。

2024-05-31 10:49:28 151 1

原创 菜鸟程序员自学记录

堆:是由new分配的内存块,由程序员释放(编译器不管),一般一个new与一个delete对应,一个new[]与一个delete[]对应。全局/静态存储区:全局变量和静态变量被分配到同一块内存中(在C语言中,全局变量又分为初始化的和未初始化的,C++中没有这一区分)。通常存放局部变量、函数参数等。在C++中,内存分为5个区:堆、占、自由存储区、全局/静态存储区、常量存储区。自由存储区:是由malloc等分配的内存块,和堆十分相似,用free来释放。常量存储区:这是一块特殊存储区,里边存放常量,不允许修改。

2024-05-31 10:17:19 209 1

空空如也

空空如也

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

TA关注的人

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