字节跳动飞书一面0715

news2024/9/21 10:39:42

进程间通信方式有哪些

1、管道通信,分为匿名管道和有名管道,匿名管道只能在有亲缘关系如父子进程间使用。有名管道可以允许无亲缘关系进程间的通信。它们都是半双工的通信方式,数据只能单向流动。

2、消息队列,用内核中的链表实现,可以实现任意进程间的异步通信。但是涉及频繁的用户内核态切换。

3、共享内存,一个线程创建共享内存,多个线程可以访问,速度最快,但需要额外同步机制

4、信号量,用于进程同步的机制,可以防止多个进程访问共享内存数据不一致情况。

5、Socket,可用于跨主机不同进程间通信,支持TCP、UDP等,支持异步通信。

6、信号:对于异常的进程,可以用信号来处理,比如终止进程。

7、RPC:允许一个进程调用另一个网络进程的过程或函数,隐藏了复杂的网络编程。

 客户端和服务端通信,会用什么方式

WebSocket

WebSocket基于什么协议 

HTTP协议

 WebSocket和Socket是一样的吗,之间有什么区别和联系

不一样,WebSocket基于HTTP,是应用层协议,Socket基于TCP或UDP,是传输层协议。

WebSocket过程是先进行一次HTTP连接,再升级为WebSocket协议。

Socket一般基于TCP,建立三次握手后传输数据。

WebSocket有加密,Socket明文。

WebSocket一般用于聊天室、实时协作等,Socket用于传统客户端和服务器、P2P等。

HTTP的502和504分别代表什么,有什么区别

 502代表网关错误,504表示网关超时。

502一般是后端服务器出错或nginx配置出错,nginx无法从后端获得响应。

504表示nginx无法及时获得后端服务器响应,可能网络延迟或连接不稳定。

 HTTP的POST请求的报文内容

请求行

POST请求的报文内容通常包括请求行、请求头部(Headers)和请求体(Body)三个部分。

POST /resource HTTP/1.1

这里,/resource 表示请求的资源路径,而 HTTP/1.1 指的是HTTP协议的版本。

请求头部(Headers)

请求头部包含了若干键值对,用于提供关于请求或响应的附加信息。对于POST请求,常见的请求头部包括:

  • Content-Type:指示请求体的媒体类型(MIME类型)。对于表单数据,它通常是 application/x-www-form-urlencoded;对于JSON数据,它通常是 application/json;对于上传文件,则可能是 multipart/form-data
  • Content-Length:请求体的长度,以字节为单位。
  • Accept:告诉服务器客户端能够接收的内容类型。
  • Authorization:包含认证信息,如令牌(Token)等。

请求体(Body)

请求体是POST请求中真正携带的数据部分。根据Content-Type的不同,请求体的格式也会有所不同。

  • application/x-www-form-urlencoded:这是最常见的表单数据提交方式。数据被编码为类似key1=value1&key2=value2的形式。例如,如果表单中有两个字段,分别是nameage,则请求体可能看起来像这样:name=John+Doe&age=30。注意,空格被编码为+,特殊字符(如&=、空格等)被百分号编码。

  • application/json:在这种情况下,请求体是JSON格式的数据。例如:{"name": "John Doe", "age": 30}。这种方式常用于API调用,因为它易于阅读和解析。

  • multipart/form-data:这种类型用于文件上传。请求体被分为多个部分,每个部分都是表单的一个字段。文件内容会以二进制形式直接包含在请求体中,并带有适当的MIME类型和其他信息。

POST /api/user HTTP/1.1
Host: example.com
Content-Type: application/json
Content-Length: 44
{"name": "John Doe", "age": 30}

 HTTP协议和TCP协议的区别与联系

区别

  1. 层级不同
    • TCP(传输控制协议)是传输层协议,它负责在网络上可靠地传输数据。
    • HTTP(超文本传输协议)是应用层协议,用于在客户端和服务器之间传输超文本文档,如HTML页面、图片、视频等。
  2. 功能不同
    • TCP提供数据的可靠传输,包括数据分割、流量控制、拥塞控制和错误恢复等功能,确保数据能够按照正确的顺序、无损地传输到接收方。
    • HTTP则定义了客户端和服务器之间的通信规则,特别是如何发送请求和接收响应。HTTP使用请求-响应模型,客户端发送HTTP请求到服务器,服务器响应请求并返回相应的数据。
  3. 连接方式不同
    • TCP是面向连接的协议,在通信双方之间建立连接,并维护连接的状态,直到通信结束或连接被显式关闭。TCP连接的建立采用三次握手机制,释放连接采用四次挥手机制。
    • HTTP在HTTP 1.0中,客户端的每次请求都要求建立一次单独的连接,处理完请求后自动释放连接。在HTTP 1.1中,虽然可以在一次连接中处理多个请求,但每个请求-响应对仍然是独立的,HTTP本身并不维护连接的状态。
  4. 数据传输方式不同
    • TCP提供字节流的传输,即TCP将数据视为无结构的字节流,不关心数据的内容。
    • HTTP则以文本或二进制格式传输数据,HTTP请求和响应都包含特定的报文头和数据体,这些报文头和数据体按照一定的格式进行编码和解码。

联系

  1. 依赖关系:HTTP协议是建立在TCP协议之上的。HTTP使用TCP作为传输层协议,以提供可靠的数据传输。这意味着HTTP协议中的所有数据都是通过TCP连接来传输的。

  2. 协同工作:当HTTP客户端(如Web浏览器)想要从HTTP服务器获取资源时,它会首先与服务器建立TCP连接,然后通过这个连接发送HTTP请求。服务器在收到请求后,会处理请求并返回相应的HTTP响应,这个响应也是通过之前建立的TCP连接发送给客户端的。

HTTP基于TCP做了什么,变成了一种新的协议

1. 定义通信格式

HTTP协议在TCP提供的可靠传输服务基础上,定义了客户端和服务器之间的通信格式。这包括:

  • 请求格式:HTTP请求由请求行(如GET / HTTP/1.1)、请求头部(包含多个字段,如User-Agent、Accept等)和请求体(可选,用于POST和PUT请求)组成。
  • 响应格式:HTTP响应由状态行(如HTTP/1.1 200 OK)、响应头部(包含多个字段,如Content-Type、Content-Length等)和响应体(包含请求的资源内容)组成。

2. 引入应用层特性

HTTP协议在TCP之上引入了一系列应用层特性,以支持Web应用的运行,包括:

  • 超文本传输:HTTP最初的目的就是传输超文本(Hypertext),即包含链接的文本。这使得Web页面能够相互链接,形成复杂的网络结构。
  • 请求-响应模型:HTTP使用请求-响应模型进行通信。客户端发送HTTP请求到服务器,服务器处理请求并返回响应。这种模型简化了Web应用的开发和使用。
  • 资源标识:HTTP通过URL(统一资源定位符)来标识和定位互联网上的资源。这使得客户端能够精确地请求所需的资源。
  • 缓存机制:HTTP协议支持缓存机制,允许客户端和服务器缓存资源以减少网络传输的负载和提高访问速度。

描述一下HTTP请求报文长什么样,请求行、header、body,以及body之间有没有什么分隔符

1. 请求行(Request Line)

请求行位于请求报文的第一行,由三个字段组成:请求方法(如GET、POST)、请求的URL(统一资源定位符)和HTTP协议版本(如HTTP/1.1),这三个字段之间用空格分隔。例如:

GET /index.html HTTP/1.1

这里,GET是请求方法,/index.html是请求的URL,HTTP/1.1是HTTP协议版本。

2. 请求头部(Headers)

请求头部紧随请求行之后,由一系列的字段组成,每个字段由字段名和字段值构成,字段名和字段值之间用冒号(:)分隔,字段之间通过回车符(CR)和换行符(LF)分隔。请求头部包含了客户端发送给服务器的附加信息,如客户端类型(User-Agent)、可接受的响应内容类型(Accept)、请求的主机名(Host)等。例如:

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Host: www.example.com
Connection: keep-alive

3. 空行

在请求头部之后,有一个空行(即只包含回车符和换行符的行),用于分隔请求头部和请求体。这个空行是必需的,它告诉服务器请求头部已经结束,接下来的部分是请求体(如果有的话)。

4. 请求体(Body)

请求体位于空行之后,包含了客户端发送给服务器的实际数据。不是所有的HTTP请求都包含请求体,例如GET请求通常不包含请求体,因为GET请求的参数直接附加在URL后面。而POST、PUT等请求方法则经常包含请求体,用于提交表单数据、文件上传等。请求体的格式和内容类型由请求头部中的Content-Type字段指定。

 Header和Payload怎么隔开,如果不隔开,并不知道哪个是header,哪个是载荷

一个空行

HTTP协议报文的结尾有没有什么特殊的符号之类的

HTTP报文的结尾并没有一个显式的分隔符来标记报文的结束。相反,它依赖于内容长度、HTTP/2及更高版本的流和帧机制来隐式地表示报文的结束。

在HTTP/2及更高版本中,引入了流(Stream)和帧(Frame)的概念,以及流控制、多路复用等机制。这些机制允许在单个TCP连接上并发地传输多个HTTP消息,并且每个消息都有明确的边界。然而,这些边界是在HTTP/2的帧级别上定义的,而不是在HTTP报文的级别上。

TCP建立握手为什么需要三次,而不是两次或者四次

如果两次,可能出现历史报文连接问题,有可能出现第二次握手丢失服务端等待。

为什么不是四次:三次握手足够判断双方接送发送能力以及确认序列号,建立全双工连接。

TCP是全双工的协议吗,怎么理解全双工

全双工(Full Duplex)通信指的是在发送数据的同时也能够接收数据,两者的操作可以同时进行,即数据的传输可以在两个方向上同时进行,不需要进行方向的切换。这种通信方式要求通信双方都有发送和接收的能力,并且通信线路也支持双向传输。

提到全双工,那TCP三次握手来建立两个连接还是一个连接呢

单个连接,这个连接是全双工的,就是通信双方可以同时在这个连接上接收发送。

为什么Mysql推荐用自增ID而不是随机的UUID,请你从数据结构或者写入这块聊聊。

  • UUID是一个128位的标识符,通常表示为36个字符(包括4个连字符)。相比之下,自增ID通常是整数类型,如INT(4字节)或BIGINT(8字节)。因此,UUID在存储上占用更多的空间。
  • 由于自增ID的顺序性,插入操作可以快速地定位到B+树的末尾,并添加新记录。这种顺序插入的方式通常比随机插入要快。
  • 相反,UUID的随机性导致插入操作需要更多的时间来找到正确的位置,并可能触发页分裂。这增加了插入操作的延迟和开销。

 假设有一个应用用了UUID做了主键,在构建Innodb索引过程,就是从数据结构方面,b+树会怎么去调整

B+树是一种自平衡的树数据结构,它保持数据排序

UUID是一种128位的唯一标识符,通常表示为32个十六进制数字

由于UUID的随机性,新插入的UUID值几乎总是与现有值完全不同,这会导致B+树索引在插入新记录时频繁地进行页分裂。

当向B+树中插入一个新键值对,而该键值对无法放入当前叶子节点(页)时,会发生页分裂:

  1. 选择分裂点:通常选择页的中间位置作为分裂点,将页中的键值对分为两部分。
  2. 创建新页:分配一个新的页来存储分裂后的一部分键值对。
  3. 更新父节点:在父节点中插入一个新的目录项,该目录项包含分裂点的键值和新页的指针。
  4. 递归分裂:如果父节点也满了,则继续向上分裂,直到根节点。如果根节点分裂,则树的高度会增加。

 聊一下四种隔离级别

读未提交,不加任何锁,可能读到其他事务未提交的数据,即脏读。

读已提交可重复读。通过MVCC实现,不同的是读已提交每次使用快照读都产生新的readview,这可能导致一个事务内多次快照读的结果不一致,即不可重复读。可重复读则是一个事务只产生一个readview,事务内多次使用快照读结果一致。但可能出现幻读。

串行化,通过加锁串行,该级别下,会自动将所有普通select转化为select … lock in share mode执行,即针对同一数据的所有读写都变成互斥的,解决幻读,但效率低。

读已提交会不会存在幻读问题

会存在幻读问题

什么是幻读 

一个事务多次范围查询结果不一致

 事务A先开启,读了一次范围查询,读了100条,事务B删除其中一条,事务A再去读,是读到99条算幻读,还是读到100条算幻读。

读到99条算幻读

 mysql的索引长度有没有一些限制

innodb没开innodb_large_prefix时,如果字符最大字节为1,那么单列最大767字节,总列最大为其4倍。

开了innodb_large_prefix,则单列总列大小都是原来4倍。

Mysam则是单列总列都不超过1000字节,

 redis的key的过期策略

1、定时过期:给每个key设置定时器,过期直接删除,对内存友好。

2、定期删除:隔一段时间随机扫描key,把过期的删除,如果过期比例高就继续。

3、惰性删除:使用key前检查是否过期,过期删除。对CPU友好。

Redis采用定期+惰性策略。

 redis的zset的底层实现是怎样实现的,时间复杂度是多少

4. 寻找两个正序数组的中位数-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/weixin_61067952/article/details/141158722?spm=1001.2014.3001.5502

解题思路:

维护一个左指针和右指针,左指针表示一个区间的左端点,初始为排序后第一个左端点,右指针表示上一个区间的右端点,每次比较当前区间和右指针,包含则更新右指针,否则将左右指针放入答案,同时更新左右指针。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深入理解WAF(Web应用防火墙)及其安全防御策略

随着互联网的普及和发展,Web应用也面临着越来越多的安全威胁,如SQL注入、跨站脚本(XSS)、跨站请求伪造(CSRF)等。这些威胁不仅可能造成数据泄露,还可能导致业务中断和品牌受损。本文将以快快网络…

JavaEE 第9节 阻塞队列详解

一、概念 阻塞队列是在普通队列(先进先出的数据结构)的基础上增加了阻塞属性的特殊队列 1)当阻塞队列空的时候,如果继续出队元素会进入阻塞状态,直到其他线程入队元素。 2)当阻塞队列满的时候,…

瑞萨电子并购Altium 引领行业创新与发展

公开资料显示,2023 年 6 月,瑞萨电子曾宣布在 Altium 的 Altium 365 云平台上实现了所有 PCB 设计的标准化开发。瑞萨电子一直与 Altium 合作,将其所有产品的 ECAD 库发布到 Altium Public Vault。借助 Altium365 上的制造商零件搜索等功能&a…

ROW_NUMBER(), RANK(), DENSE_RANK() SQL排序函数图文详解

ROW_NUMBER(), RANK(), DENSE_RANK() ROW_NUMBER(): 为结果集中的每一行分配唯一的连续编号。即使有重复的值,ROW_NUMBER() 也会为它们分配不同的序号。 SELECT column_name, ROW_NUMBER() OVER (ORDER BY column_name) AS row_num FROM table_name;2. RANK(): 对结…

高可用集群keepalived从部署到实战一篇解决

目录 一.高可用集群 1.1 集群类型 1.2 系统可用性 1.3 系统故障 1.4 实现高可用 1.5.VRRP: 1.5.1 VRRP 相关术语 1.5.2 VRRP 相关技术 二.Keepalived 部署 2.1 keepalived 简介 2.2keepalived架构 2.3 Keepalived 环境准备 2.4 Keepalived 相关文件 2.…

java实现七牛云内容审核功能,文本、图片和视频的内容审核(鉴黄、鉴暴恐、敏感人物)

目录 1、七牛云内容审核介绍 2、查看内容审核官方文档 2.1、文本内容审核 2.1.1、文本内容审核的请求示例 2.1.2、文本内容审核的返回示例 2.2、图片内容审核 2.2.1、请求参数 2.2.2、返回参数 2.3、视频内容审核 3、代码实现 3.1、前期代码准备 3.2、文本内容审核…

基于Spring + Vue的旅游景区项目+源代码+文档说明

文章目录 源代码下载地址项目介绍项目功能界面预览 项目备注源代码下载地址 源代码下载地址 点击这里下载源码 项目介绍 基于Spring Vue的旅游景区项目 项目功能 民宿管理员:订单数量统计,订单交易额统计,客房统计饼图,酒店…

【STM32嵌入式系统设计与开发拓展】——14_定时器之输入捕获

参考哔站:链接: 铁头山羊 一、微控制器的高级定时与控制功能集合 1、时基单元 2、输入捕获 3、输出比较 4、从模式控制器 5、高级定时器的输出控制 二、问题集合 1、什么是定时器 定时器是一种专门负责定时功能的片上外设GPI0AFI0EXTIUSART RCC I2C) 2、定时器…

飞越现实:3D可视化引领飞行体验新纪元

在浩瀚的蓝天之下,飞机以优雅的姿态划破长空,每一次起降、每一次盘旋,都是对速度与科技的完美诠释。而今,随着科技的飞速发展,我们不再仅仅满足于仰望天际的壮丽景象,而是能够借助先进的3D可视化技术&#…

JavaEE 第10节 线程池(Thread Pool)介绍

目录 一、线程池是什么 二、为什么线程池中取线程会比直接向操作系统申请来的高效? 三、JAVA标准库中的线程池 (1)类:ThreadPoolExecutor 1、int corePoolSize与int maximumPoolSize 2、long keepAlive和TimeUnit unit 3、Blo…

MySQL第6讲--DQL(数据查询语言)的基本操作之基本和条件查询

文章目录 前言DQL(数据查询语言)基本操作查询操作基本查询示例1:查询表格的name,age,并返回;示例2:查询表格中的所有字段;示例3:查询所有员工的工号并返回,起别名;示例4&…

人工智能在新药研发领域中发挥着至关重要的作用

本综述主要介绍机器学习和深度学习方法在药物发现领域的应用进展以及相关企业。 声明:本文为火石创造原创文章,欢迎个人转发分享,网站、公众号等转载需经授权。 本文选自《药学进展》2021年第7期,作者黄芳 1,杨红飞 1…

武汉流星汇聚:中国卖家亚马逊显威,供应链创新引领全球电商潮

在全球电商的浩瀚星空中,亚马逊无疑是最耀眼的那颗星,其庞大的用户基础、广泛的销售网络以及强大的品牌影响力,为无数商家提供了通往成功的快车道。而在这片充满机遇的蓝海中,中国卖家以其独特的优势,正逐渐成为一股不…

钢铁百科:SA572Gr60应用领域、SA572Gr60热处理状态、SA572Gr60常用规格

一、SA572Gr60材质与执行标准 SA572Gr60钢板是一种美标高强度低合金铌-钒结构钢板,执行标准为ASTM A572/A572M。此外,该钢板也符合ASME标准SA-572/SA-572M。 二、SA572Gr60化学成分 SA572Gr60钢板的主要化学成分包括: 碳C:0.16-…

haproxy高级功能及配置

目录 1.基于cookie的会话保持: 2.HAProxy状态页: 3.IP透传 1.基于cookie的会话保持: cookie value:为当前server指定cookie值,实现基于cookie的会话黏性,相对于基于 source 地址 hash 调度算法对客户端…

msgqueue.hpp队列模块

一.MsgQueue相关类介绍 二.MsgQueue类的实现 成员变量 MsgQueue 结构体用于描述一个消息队列的基本属性。 std::string _name; // 队列名称 bool _durable; // 队列是否持久化 bool _exclusive; // 队列是否独占 bool _auto_del; // 队列是否自动删除 google::pro…

版本控制基础理论

一、本地版本控制 在本地记录文件每次的更新,可以对每个版本做一个快照,或是记录补丁文件,适合个人使用,如RCS. 二、集中式版本控制(代表SVN) 所有的版本数据都保存在服务器上,协同开发者从…

在HTML中固定表格表头的简单方法

在HTML中,表格元素自身无法提供滚动以及固定表头的配置。借助第三方工具(如jQuery的表头固定插件)或者结合JavaScrip,是可以实现表格的表头固定的,除此之外,本文还想讨论一种更简单的方式来实现。 从思路上…

【初阶数据结构】详解顺序表(下)(顺序表的代码实现)

文章目录 前言1. 项目文件的配置1.1 顺序表的项目的文件配置(仅供参考) 2. 顺序表的代码实现2.1 SeqList.h:2.2 SeqList.c:2.2.1 顺序表初始化的代码实现:2.2.2 顺序表销毁的代码实现:2.2.3 顺序表尾插数据的代码实现:2.2.4 顺序表…