【Java核心能力】美团优选后端一面:网络 操作系统

news2024/11/24 17:37:24

欢迎关注公众号(通过文章导读关注:【11来了】),及时收到 AI 前沿项目工具及新技术的推送!

在我后台回复 「资料」 可领取编程高频电子书
在我后台回复「面试」可领取硬核面试笔记

文章导读地址:点击查看文章导读!

感谢你的关注!

美团优选后端一面:网络 & 操作系统

TCP 报文的组成?有哪些标志位?

TCP 报文主要由头部和数据组成,头部放一些标志字段,其中比较重要的就是橙色部分的 标志位 ,总共有 6 位,代表不同的功能吗,TCP 报文的组成如下:

image-20240409213102907

橙色部分的 6 个标志位功能如下:

1、UGR: 紧急指针标志,用于传输紧急数据
2、ACK : 确认序号标志,用于确认收到数据
3、PSH: 提示接收方在接收到数据以后,应尽快的将这个报文交付到应用程序,而不是在缓冲区缓冲
4、RST : 用于重置错误的连接
5、SYN : 建立连接时使用
6、FIN : 用于释放连接

其中 seq 和 ack 功能如下:

seq :发送数据的第一个字节的序号,比如当前报文段的 seq 为 100,当前报文段有 100 个字节,那么下一个报文段的 seq 就是 200

ack :期待下一个收到的字节序号,比如收到了 seq 为 100 的 TCP 报文,该报文有 100 个字节,那么应该回复的 ack 就是 200

HTTP 和 HTTPS 的区别?

HTTP 是明文传输的,因此存在安全风险,而 HTTPS 则是在 HTTP 的基础上添加了 SSL/TLS 协议,来保证通信的安全的

那么双方如果需要建立 HTTP 通信的话,只需要通过 TCP 三次握手即可

但是若果需要建立 HTTPS 通信的话,除了 TCP 三次握手建立 TCP 连接,还需要进行 SSL/TLS 握手,之后双方才可以加密进行通信

扩展:HTTPS 通信流程

HTTPS 的通信流程为:

  • 客户端向服务器请求获取 公钥
  • 双方协商产生 对称密钥
  • 双方采用 对称密钥 进行加密通信

前两个步骤是建立 SSL/TLS 的过程,HTTPS 是基于 SSL 或 TLS 进行加密的,不过 SSL 已经退出历史舞台了,现在说的 HTTPS 其实就是 HTTP+TLS

那么 TLS 握手的过程总共包含了 4 次通信 ,在 4 次通信之后,TLS 协议也就建立成功了,可以进行 HTTPS 通信了,4 次通信如下:

  • 第一次通信 ClientHello:客户端向服务端发送加密请求,主要是协商 TLS 版本、随机数(生成后续的对称密钥)
  • 第二次通信 ServerHello:服务端向客户端回复,主要协商 TLS 版本、随机数(生成后续的对称密钥)、数字证书(包含公钥)
  • 第三次通信 客户端回应:取出数字证书的公钥,将用于通信的 对称密钥 通过公钥加密发送给服务端
  • 第四次通信 服务端最后回应:使用自己本地的密钥进行解密,得到用于通信的 对称密钥

之后双方就可以使用这个 对称密钥 进行加密通信了

说一说操作系统中的死锁,如何避免死锁呢?具体使用什么样的算法?

死锁需要 同时满足 四个条件才会发生:

1、互斥 :资源是互斥的,也就是一个资源只能被一个进程持有

2、持有并等待 :一个进程至少占有一个资源,并且正在等待获取额外的资源

3、不可剥夺 :进程持有的资源不可以被其他进程抢占

4、循环等待 :每个进程持有下一个进程所需要的至少一个资源

避免死锁的话,可以通过破坏四个条件中的一个或几个来避免死锁,对于 互斥 来说,一般无法避免,因为有些资源互斥的特性我们无法改变

避免死锁常用的方法是:资源分配图银行家算法

  • 资源分配图 是标识进程与资源之间分配状态的有向图,节点分为 进程节点(P)资源节点(R)

通过检查资源分配图中是否存在环,可以检测系统是否处于死锁状态。如果图中存在环,则系统处于死锁状态。

  • 银行家算法 是一种避免死锁的预分配策略,预分配流程如下:

1、当进程请求资源时,系统尝试分配,分配后判断系统是否处于安全状态

2、如果分配后系统处于安全状态,则允许分配,否则拒绝请求

什么是虚拟内存?为什么需要?优缺点

虚拟内存是现代系统提供的对主存储器的抽象,是用于内存管理的一种技术

虚拟内存的作用就是为每个进程提供了一个大的、统一的、私有的地址空间,让每个进程认为自己在独享内存

虚拟内存的意义是定义了一块连续的虚拟地址空间,并且将内存空间扩展到了磁盘空间,也就是说一块连续的虚拟内存在进程看来是连续的,但是其实是多个物理内存碎片,并且还有一部分暂存在磁盘上,如果需要用到磁盘上的数据的话,需要进行数据交换

为什么需要虚拟内存?

通过虚拟内存,程序可以拥有超过物理内存大小的可用内存空间,并且为每个进程提供了一个连续、独享的内存空间,一个进程的错误不会影响到其他进程,提升系统稳定性

并且操作系统可以更加灵活的管理内存资源,如按需加载页面、提供高效的缓存机制

虚拟内存的优点

使用虚拟内存优点如下:

1、程序可以不受物理内存大小的限制

2、不同进程之间的内存空间相互隔离,减少进程之间干扰和内存冲突

3、操作系统可以更灵活的管理内存资源

虚拟内存的缺点

使用虚拟内存缺点如下:

1、需要将虚拟地址转换到物理地址,增加额外的性能开销

2、管理虚拟内存增加了操作系统的复杂性

3、当内存和磁盘中需要数据交换时,速度是比较慢的

扩展:操作系统如何管理虚拟地址与物理地址之间的映射关系呢?

内存分段内存分页 两种方式

内存分段

内存分段 会根据进程实际需要使用内存大小进行分配,需要多少内存就分配多大内存的段,但是由于每个段的长度不固定,因此会在物理内存上出现内存碎片的问题,也称为 外部内存碎片 问题

举个例子:有 100MB 物理内存,程序 A 使用了 30MB,占据了 0-30MB 的区域,程序 B 使用了 40MB,占据了 30-70MB 的区域

此时程序 A 卸载了,于是腾出了 0-30MB 的内存区域,又进来一个程序 C 占用 35MB,但是此时只有 0-30MB 和 70-100MB 的物理内存区域是空闲的,并没有 35MB 的连续空间供程序 C 使用,这就是外部内存碎片问题

解决外部内存碎片问题的方法就是 内存交换 :也就是将程序 B 先写到磁盘,再读回内存,此时将程序 B 放在内存 0-30MB 的区域,那么就留出来了 70MB 的连续空闲内存可以供程序 C 使用

内存分段的缺点: 存在外部内存碎片问题,需要内存交换来解决,效率比较低,因此为了解决该问题,引入了 内存分页

内存分页

内存分页 会将虚拟和物理内存空间切分为一页一页的固定大小,这样就 不会存在内存碎片的问题了 ,通过 页表 来记录虚拟地址和物理地址之间的映射关系,如果物理内存不够的话,操作系统会根据置换策略,将一些页面给写入到磁盘上,释放这些页面占用的内存空间,当需要使用这些页面时,再去磁盘中加载对应页到内存中

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

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

相关文章

Vue2 —— 学习(五)

一、生命周期 &#xff08;一&#xff09;引入案例 我们想让一行文字按一定频率逐渐变得透明 1. Vue 实例外写法 函数写在 Vue 实例外面也能实现但是不推荐 <body><div id"root"><h2 :style"{opacity}">欢迎学习Vue</h2><…

服务器开发 Socket 相关基础

Socket 三要素 1.通信的目的地址&#xff1b; 2.使用的端口号&#xff1b; 3.使用的传输层协议&#xff08;如 TCP、UDP&#xff09; Socket 通信模型 服务端实现 #include <iostream> #include <unistd.h> #include <stdio.h> #include <sys/types.h&…

【QT】pro文件里添加又删除LIBS不影响运行的原因

我发现个问题啊&#xff0c;如果运行项目&#xff0c;发现报错&#xff0c;缺少某dll&#xff0c;接着你在pro文件里加上win32:LIBS -lOpengl32&#xff08;举个例子&#xff09;&#xff0c;接着可以运行了&#xff0c;接着把这行删掉&#xff0c;再运行&#xff0c;仍然可以…

hive 数据库表常用操作及相关函数讲解

创建数据库并指定hdfs存储位置 create database myhive2 location ‘/myhive2’; 使用location关键字&#xff0c;可以指定数据库在HDFS的存储路径。 Hive的库在HDFS上就是一个以.db结尾的目录 默认存储在&#xff1a; /user/hive/warehouse内 当你为Hive表指定一个LOCATION时…

数据库(mysql)-连接嵌套查询-2

子查询 MySQL中的子查询&#xff08;Subquery&#xff09;是嵌套在其他SQL查询中的查询。子查询可以出现在SELECT、FROM或WHERE子句中&#xff0c;并用于返回将被用于外部查询的数据。子查询的结果可以是一个单一的值、一行、一列或多行多列的数据集。 单行单列查询 实例 #查…

如何提高旋转花键运行稳定性?

现代化精密仪器设备中&#xff0c;精密仪器的稳定工作性能对于生产效率和产品质量至关重要&#xff0c;运行效率和精度是常见问题。旋转花键作为机械传动系统中的重要组成部分&#xff0c;其稳定性也是直接影响到机械装配的质量和使用寿命&#xff0c;那么我们应该如何提升旋转…

【汇编语言实战】已知10个整数求最大值

C语言描述该程序流程&#xff1a; #include <stdio.h> int main() {int a[]{11,33,23,54,12,51,2,4,34,45};int maxa[0];for(int i1;i<9;i){if(a[i]>max){maxa[i];}}printf("%d",max); }汇编语言&#xff1a; include irvine32.inc .data arr dword 11…

STM32G030F6P6 HSE时钟不能使用无源晶振,只能使用有源晶振!

STM32G030F6P6 HSE时钟不能使用无源晶振&#xff0c;只能使用有源晶振。 参见STM32CubeMX配置 使能RCC中 BYPASS CLOCK SOURCE后只有一个 PC14引脚。 查手册中 5.2.1 HSE clock章节 部分引脚少的封装&#xff0c;HSE时钟只有 OSC-IN&#xff0c;因此只能使用有源晶振 查Data…

经典机器学习模型(八)梯度提升树GBDT详解

经典机器学习模型(八)梯度提升树GBDT详解 Boosting、Bagging和Stacking是集成学习(Ensemble Learning)的三种主要方法。 Boosting是一族可将弱学习器提升为强学习器的算法&#xff0c;不同于Bagging、Stacking方法&#xff0c;Boosting训练过程为串联方式&#xff0c;弱学习器…

2024中国航空航天暨无人机展览会8月在重庆举办

2024中国航空航天暨无人机展览会8月在重庆举办 邀请函 主办单位&#xff1a; 中国航空学会 重庆市南岸区人民政府 招商执行单位&#xff1a; 重庆港华展览有限公司 展会背景&#xff1a; 为更好的培养航空航天产业人才&#xff0c;汇聚航空教育产业创新科技&#xff0c;…

IO流的基础详解

文件【1】File类&#xff1a; 封装文件/目录的各种信息&#xff0c;对目录/文件进行操作&#xff0c;但是我们不可以获取到文件/目录中的内容。 【2】引入&#xff1a;IO流&#xff1a; I/O &#xff1a; Input/Output的缩写&#xff0c;用于处理设备之间的数据的传输。 【3】…

Terraform 扩展

Terraform 扩展 Terraform Meta-Arguments 元参数 count 创建相似的资源for_each 创建相似的资源depends_on 定义资源或者模块的依赖provider 定义provider选项lifecycle 资源的生命周期行为 参数使用范围备注countresource module适用于创建多个相似的资源&#xff0c;使用…

Redis 缓存穿透、缓存击穿、缓存雪崩区别和解决方案

缓存穿透 什么是缓存穿透&#xff1f; 缓存穿透说简单点就是大量请求的 key 是不合理的&#xff0c;根本不存在于缓存中&#xff0c;也不存在于数据库中 。这就导致这些请求直接到了数据库上&#xff0c;根本没有经过缓存这一层&#xff0c;对数据库造成了巨大的压力&#xf…

读书笔记之人生算法(7)

孤独、爆仓与迷信 跨越出身和运气&#xff0c;实现富足与自由&#xff0c;用概率思维做好决策 13 孤独 孤独&#xff1a;获得好姻缘的算法 姻缘是奇妙的东西&#xff0c;体现了世界的随机性&#xff1a;即使是最理性的人&#xff0c;也可能需要靠运气寻找另一半。 中国有句古话…

Hot100【十一】:最大子数组和

// 定义dp&#xff1a;以i结尾的最大子数组和 dp[i] max(dp[i-1] nums[i],nums[i]) class Solution {public int maxSubArray(int[] nums) {// 1. 不需要特殊处理// 2. 定义dpint[] dp new int[nums.length];dp[0] nums[0];int maxResult nums[0];// 3. dp递推for (int i …

onSaveInstanceState()与onRestoreInstanceState()

目录 1.二者作用 2.onSaveInstanceState调用时机 2.1 五种情况 前4种情况Activity生命周期&#xff1a; 2.2 注意事项&#xff1a;确定会被系统回收并销毁&#xff0c;不会调用此方法 两个例子 3.onRestoreInstanceState调用时机 3.1实例——屏幕切换生命周期 3.2 极端…

https访问http的minio 图片展示不出来

问题描述&#xff1a;请求到的图片地址单独访问能显示&#xff0c;但是在网页中展示不出来 原因&#xff1a;https中直接访问http是不行的&#xff0c;需要用nginx再转发一下 nginx配置如下&#xff08;注意&#xff1a;9000是minio默认端口&#xff0c;已经占用&#xff0c;…

RobotFramework教程2——第一个例子(hello world)

前言&#xff1a;安装好RF框架后&#xff0c;我们现在开始创建并执行我们的第一个测试用例&#xff0c;第一个例子当然是用入门经典“hello world”啦&#xff01;运行也会有坑&#xff0c;注意避开&#xff0c;最新的东西不一定是现阶段最好的&#xff0c;稳定可运行才关键&am…

halcon缺陷检测-印刷品检测(差异化模型),键盘字符缺陷检测

前言 在实际项目中&#xff0c;印刷品缺陷检测是缺陷检测中的难点项目。通常印刷品检测往往具备缺陷小&#xff0c;缺陷所在位置不固定&#xff0c;出现少印或者多印的情况。并且由于产线原因&#xff0c;大量的印刷品在视野中的大小并不是完全一致的&#xff0c;可能出现细微…

《高通量测序技术》分享,生物信息学生信流程的性能验证,以肿瘤NGS基因检测为例。

这是这本书&#xff0c;第四章第五节的内容&#xff0c;这一部分是以NGS检测肿瘤基因突变为例&#xff0c;描述了其原理和大概流程&#xff0c;这和以前我分享的病原宏基因组高通量测序性能确认方案可以互相补充&#xff0c;大家可以都看一下&#xff0c;但是想要真正的弄懂&am…