[杂学笔记]HTTP1.0和HTTP1.1区别、socket系列接口与TCP协议、传输长数据的时候考虑网络问题、慢查询如何优化、C++的垃圾回收机制

目录

1.HTTP1.0和HTTP1.1区别

2.socket系列接口与TCP协议

3.传输长数据的时候考虑网络问题

4.慢查询如何优化

5.C++的垃圾回收机制


1.HTTP1.0和HTTP1.1区别

  • 在连接方式上,HTTP1.0默认采用的是短链接的方式,就建立一次通信,也就是说即使在TCP协议下,完成了一个HTTP报文的请求和响应之后,也会关闭连接。这种频繁的建立和关闭连接会增加服务器的负担。虽然说HTTP1.0版本不支持长连接,但是可以通过设置Connection: Keep-Alive字段来启动类似长连接的功能,但是是不标准的方式。而HTTP1.1引入了长连接机制,在一个TCP连接上可以传递多个HTTP请求与响应报文。
  • 缓存机制上,HTTP1.0采用的是通过字段的方式指定缓存的内容有效时间,客户端在这段时间内可以使用缓存的副本而无需向服务器重新请求。但是这样的话也无法验证数据的实时性,可能服务端更新了呢?而HTTP1.1版本的话,增加了缓存控制能力,提供了字段来规定客户端在使用缓存内容的时候,需要先向服务端验证数据的有效性。

2.socket系列接口与TCP协议

  • socket建立网络通信套接字、bind进行ip地址和端口号绑定、服务端进行listen监听操作是在通信之间进行的。
  • connect接口:操作客户端向服务器发起连接请求,在TCP协议层的操作就是相当于发起三次握手,直到客户端收到第二次握手的SYN+ACK响应报文,connect函数才会返回,期间会一直阻塞住。
  • accept接口:服务端在接收到第三次握手的ACK报文之后,会和客户端真正的建立连接,之后accept就是将全连接队列中的连接对象与文件描述符建立连接。
  • listen接口的第二个参数:就是全连接队列的最大长度。

3.传输长数据的时候考虑网络问题

        当网络出现问题的时候导致的数据丢包的问题,并非是TCP协议能够解决的问题了,因为TCP协议是在网络通畅,双方连接没有断开的情况下,维护发送但没有收到应答的时候,但是一旦网络出问题了,就相当于连接断开了,那么在销毁这个连接的时候,TCP缓存的数据也就跟着销毁了。但是我们想做到的是,当网络出现问题之后,在重新建立连接,数据会从上一次断开连接的位置之后发送数据。

        那么首先就需要在应用层协议的报头上加入类似于TCP协议的32位序号和确认序号了,但是这里一个负责发送一个负责响应,所以只用一个序号就可以了。服务端报文的序号代表发送的数据序号,客户端报文的序号代表接收到的数据块序号。

        之后再服务端的应用层,维护一个指针指向整体数据的已经发送并且得到确认的位置,那么就分成了两个区域,指针左边就是已发送已确认区域,右边是没发送或者发送了没有确认的区域,这样的话,该指针指向的位置,就是客户端收到数据的位置。如果说网络出现问题的话,再重新连接之后,会根据客户端发来的序号,更新指针的位置,继续发送数据。

        对于客户端来说,也需要再应用层将这些数据保存起来,并记录收到的最后一个数据的序号,在网络问题断开连接后,重新连接,会将该序号放进报头中,告诉服务端该从哪里发送了。

        因为是分块发送的,所以服务端最后需要告诉客户端数据发送完毕了,所以就会出现很多类型报文,所以还需要再报头添加报文类型字段:客户端请求响应报文,服务端发送数据块报文、客户端接收到数据块的响应报文、服务端发送完所有数据的报文。

        

4.慢查询如何优化

        慢查询是数据库的一个概念,指的是执行时间过长超过了long_query_time设定的值的擦汗寻语句,就属于慢查询语句。慢查询会对数据库的性能产生严重影响,当数据库中有大量的慢查询的时候,会导致数据库服务器的CPU使用了过高。还可能导致数据库连接池被沾满,新的请求无法及时获取到。

  • 优化查询语句本身:第一:索引优化;第二:子查询优化,尽量减少嵌套查询的使用,例如,有一个查询需要获取购买了某一商品的用户信息,一种不好的做法是先通过子查询找到购买了该商品的用户 ID,然后再在另一个查询中根据这些用户 ID 获取用户信息。这种嵌套子查询可以通过使用连接(JOIN)操作来优化;第三:尽量不要使用select *语句。
  • 优化数据库架构:第一:采用合理的数据类型定义字段;第二:对于大型数据表,可以考虑使用分区结构
  • 优化服务器配置:第一:调整缓存大小,第二:硬件的升级

5.C++的垃圾回收机制

        C++没有配套的垃圾回收机制,需要程序员使用new、delete去手动的管理内存资源,也可以使用C++11的智能指针,配合析构函数来实现对资源的自动管理。或者使用第三方库来实现资源的回收工作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/981329.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

VSCode 移除EmmyLua插件的红色波浪线提示

VSCode 中安装插件EmmyLua,然后打开lua文件的时候,如果lua代码引用了C#脚本的变量,经常出现 “undefined global variable: UnityEngineEmmyLua(undefined-global)” 的红色波浪线提示,这个提示看着比较烦人,我们可以通…

MWC 2025 | 紫光展锐联合移远通信推出全面支持R16特性的5G模组RG620UA-EU

2025年世界移动通信大会(MWC 2025)期间,紫光展锐联合移远通信,正式发布了全面支持5G R16特性的模组RG620UA-EU,以强大的灵活性和便捷性赋能产业。 展锐芯加持,关键性能优异 RG620UA-EU模组基于紫光展锐V62…

springboot425-基于SpringBoot的BUG管理系统(源码+数据库+纯前后端分离+部署讲解等)

💕💕作者: 爱笑学姐 💕💕个人简介:十年Java,Python美女程序员一枚,精通计算机专业前后端各类框架。 💕💕各类成品Java毕设 。javaweb,ssm&#xf…

机器人“照镜子”:开启智能新时代

机器人也爱 “照镜子”? 在科技飞速发展的今天,机器人的身影越来越频繁地出现在我们的生活和工作中。它们承担着各种各样的任务,从工业生产线上的精密操作,到家庭中的清洁服务,再到危险环境下的救援工作。然而&#xf…

让 LabVIEW 程序更稳定

LabVIEW 开发的系统,尤其是工业级应用,往往需要长时间稳定运行,容不得崩溃、卡顿或数据丢失。然而,许多系统在实际运行中会遭遇内存泄漏、通信中断、界面卡顿等问题,导致生产中断甚至设备损坏。如何设计一个既稳定又易…

基于CURL命令封装的JAVA通用HTTP工具

文章目录 一、简要概述二、封装过程1. 引入依赖2. 定义脚本执行类 三、单元测试四、其他资源 一、简要概述 在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。它支持文件的上传和下载,是综合传输工具&…

npm ERR! code 128 npm ERR! An unknown git error occurred

【问题描述】 【问题解决】 管理员运行cmd(右键window --> 选择终端管理员) 执行命令 git config --global url.“https://”.insteadOf ssh://git cd 到项目目录 重新执行npm install 个人原因,这里执行npm install --registryhttps:…

汽车视频智能包装创作解决方案,让旅途记忆一键升级为影视级大片

在智能汽车时代,行车记录已不再是简单的影像留存,而是承载情感与创意的载体。美摄科技依托20余年视音频领域技术积累,推出汽车视频智能包装创作解决方案,以AI驱动影像处理与艺术创作,重新定义车载视频体验,…

Qt中txt文件输出为PDF格式

main.cpp PdfReportGenerator pdfReportGenerator;// 加载中文字体if (QFontDatabase::addApplicationFont(":/new/prefix1/simsun.ttf") -1) {QMessageBox::warning(nullptr, "警告", "无法加载中文字体");}// 解析日志文件QVector<LogEntr…

nlp进阶

1 Rnn RNN(Recurrent Neural Network),中文称作循环神经网络,它一般以序列数据为输入,通过网络内部的结构段计有效捕捉序列之间的关系特征,一般也是以序列形式进行输出. 单层网络结构 在循环 rnn处理的过程 rnn类别 n - n n - 1 使用sigmoid 或者softmax处理 应用在分类中…

2024 JAVA面试题

第一章-Java基础篇 1、你是怎样理解OOP面向对象 面向对象是利于语言对现实事物进行抽象。面向对象具有以下特征&#xff1a; 继承****&#xff1a;****继承是从已有类得到继承信息创建新类的过程 封装&#xff1a;封装是把数据和操作数据的方法绑定起来&#xff0c;对数据的…

浅色系可视化大屏看起来确实很漂亮,但用到的地方确实很少

在数字化信息飞速发展的时代&#xff0c;可视化大屏作为信息展示的重要载体&#xff0c;广泛应用于各类场景。其中&#xff0c;浅色系可视化大屏以其独特的视觉风格&#xff0c;在众多展示方案中脱颖而出&#xff0c;给人以清新、舒适的视觉感受。然而&#xff0c;尽管浅色系可…

蓝桥杯备考:动态规划线性dp之下楼梯问题进阶版

老规矩&#xff0c;按照dp题的顺序 step1 定义状态表达 f[i]表示到第i个台阶的方案数 step2:推导状态方程 step3:初始化 初始化要保证 1.数组不越界 2.推导结果正确 如图这种情况就越界了&#xff0c;我们如果把1到k的值全初始化也不现实&#xff0c;会增加程序的时间复杂度…

LLM 大模型基础认知篇

目录 1、基本概述 2、大模型工作原理 3、关键知识点 &#xff08;1&#xff09;RAG 知识库 &#xff08;2&#xff09;蒸馏 &#xff08;3&#xff09;微调 &#xff08;4&#xff09;智能体 1、基本概述 大型语言模型&#xff08;Large Language Model, LLM&#xff09…

物业管理系统源码 物业小程序源码

物业管理系统源码 物业小程序源码 一、基础信息管理 1. 房产信息管理 记录楼栋、单元、房间的详细信息&#xff08;面积、户型、产权等&#xff09;。 管理业主/租户的档案&#xff0c;包括联系方式、合同信息等。 2. 公共资源管理 管理停车场、电梯、绿化带、公…

Delphi连接MySql数据库房

在看Delpih6数据库开发实例导航这本书时&#xff0c;里面的数据库管理系统用的InterBase&#xff0c;但是Delphi11中已经没有这个东西了&#xff0c;我就想到利用MS的access但是里面有很多的SQL语句不支持&#xff0c;比如设置字段的默认值等&#xff0c;后来我想到连接到MySQL…

[51 单片机] --串口编程

1&#xff0c;通讯方式基本概念 1&#xff0c;按照 --> 数据传送方式串行通讯&#xff1a;使用一条数据线&#xff0c;将数据一位一位地依次传输&#xff0c;每一位数据占据一个固定的时间长度&#xff0c;串行通信的特点&#xff1a;传输线少&#xff0c;长距离传送时成本…

基础算法——模拟

模拟&#xff0c;顾名思义&#xff0c;就是题⽬让你做什么你就做什么&#xff0c;考察的是将思路转化成代码的代码能⼒。 这类题⼀般较为简单&#xff0c;属于竞赛⾥⾯的签到题&#xff08;但是&#xff0c;万事⽆绝对&#xff0c;也有可能会出现让⼈⾮常难受的 模拟题&#xf…

SparkStreaming之04:调优

SparkStreaming调优 一 、要点 4.1 SparkStreaming运行原理 深入理解 4.2 调优策略 4.2.1 调整BlockReceiver的数量 案例演示&#xff1a; object MultiReceiverNetworkWordCount {def main(args: Array[String]) {val sparkConf new SparkConf().setAppName("Networ…

Jenkins 删除历史构建记录

中文:系统管理 > 脚本命令行: 英文:Manage Jenkins > Script Console def jobName "Wens-Web" //删除的项目名称 def maxNumber 105 // 保留的最小编号&#xff0c;意味着小于该编号的构建都将被删除 Jenkins.instance.getItemByFullName(jobName).build…