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

欢迎关注公众号(通过文章导读关注:【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.rhkb.cn/news/303692.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何注册midjourney账号

注册Midjourney账号比较简单,准备好上网工具,进入官网 Midjourney访问地址: https://www.midjourney.com/ 目前没有免费使用额度了,会员最低 10 美元/月,一般建议使用30美元/月的订阅方案。了解如何订阅可以查看订阅…

实战环境-Activiti7从入门到专家(4)

背景 对于activiti7 已经有了感性认知,并且已经获得了源代码,梳理了核心的API。后面还有大量的内容,包括BPMN规范的落地,但是我们不能只停留在理论层次,需要从实际罗德的内容展开,因此需要构建实战环境。 …

Ubuntu20.04配置Kinect 2.0驱动安装和ROS环境下配置以及录制bag包和制作ORB-SLAM数据集

目录 1. 安装libfreenect21.1 下载官方文件1.2 安装build工具1.3 安装libusb1.4 安装urboJPEG1.5 安装OpenGL1.6 安装OpenCL1.7 安装OpenNI1.8 进入libfreenect2 文件夹,编译安装1.9 设定udev rules1.10 测试 2. 配置ROS环境2.1 下载iai_kinect2包并安装2.2 相机上电…

十六进制前缀为Ox还是0x???

16进制的前缀是0x,数字零和英文字母X。 十六进制(英文名称:Hexadecimal),是计算机中数据的一种表示方法。同我们日常生活中的表示法不一样。它由0-9,A-F组成,字母不区分大小写。与10进制的对应…

网络安全---RSA公钥加密与签名

实验项目:RSA公钥加密与签名实验 1.实验目的 本实验的学习目标是让学生获得 RSA 算法的动手经验。 通过课堂学习,学生应该已经了解 RSA 算法的理论部分, 知道在数学上如何生成公钥、私钥以及如何执行加密、解密和签名生成、验证。 通过使用…

数字图像处理与交叉学科中名词的拧巴

特征提取 图像处理——对图像、目标或特征点进行定量描述的方法及过程。 模式识别——对原特征进行特征变换,从高维空间到低维空间映射。 特征向量 模式识别、图像处理——一个观测包括多个变量,样本的多个特征组成特征向量。 线性代数——特征值对应的…

构建强健身体的未来:健身管理平台微服务架构解析

在现代社会,人们越来越关注健康和身体素质的提升。健身管理平台应运而生,为用户提供个性化的健身计划、监测和管理工具。微服务架构作为一种灵活且可扩展的系统设计方法,为健身管理平台提供了高效、可靠的基础。 1. 概述健身管理平台微服务架…

python|sort_values()排序

sort_value()可以用来对值(比如说年龄)进行排序 根据 ‘Age’ 列进行升序排序,如果 ‘Age’ 相同则根据 ‘Name’ 列进行降序排序 df_sorted_multi df.sort_values(by[Age, Name], ascending[True, False]) print(df_sorted_multi)

正则表达式 速成

正则表达式的作用 正则表达式,又称规则表达式,(Regular Expression,在代码中常简写为regex、regexp或RE),是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字…

Tailwind 4.0 即将到来:前端开发的“速度与激情”

随着前端开发技术的不断进步,我们每天都在寻找更快、更简洁的解决方案来提升我们的开发效率和用户体验。今天,我要为大家介绍一项令人振奋的新技术进展——Tailwind 4.0的来临! 对于经常使用Tailwind的朋友们来说,这个消息无疑是激…

规则引擎之LiteFlow应用

官网地址&#xff1a;LiteFlow DEMO 整体结构 1.引入maven依赖 <dependency><groupId>com.yomahub</groupId><artifactId>liteflow-spring-boot-starter</artifactId><version>2.11.4.2</version> </dependency> 2. 配置yml …

mysql数据库备份脚本.sh

mysql数据库备份脚本.sh #!/bin/bash #备份路径 BAKDIR/home/peter/date %Y-%m-%d #要备份的数据库 MYSQLDBtest #使用哪个用户备份 MYSQLUSRroot #判断是否是root用户执行此脚本 if [ $UID -ne 0 ] then echo This scripts must use the root user!!! sleep 2 exit…

HDFS [MSST‘10] 论文阅读笔记

原论文:The Hadoop Distributed File System (MSST’10) HDFS关键技术要点概览 设计目标:HDFS旨在可靠地存储大型数据集,并以高带宽流式传输这些数据集到用户应用程序。它通过在大量服务器上分布存储和计算资源,使得资源可以随着需求的增长而扩展,同时保持经济高效。架构组…

24年权威数学建模报名通知汇总(含妈妈杯、国赛、美赛、电工杯、数维杯、五一数模、深圳杯......)

1、MathorCup比赛 报名时间&#xff1a;2024年4月11日中午12点&#xff08;周四&#xff09; 比赛开始时间&#xff1a;2024年4月12日上午8时&#xff08;周五&#xff09; 比赛结束时间&#xff1a;2024年4月16日上午9时&#xff08;周二&#xff09; 报名费用&#xff1a…

HarmonyOS 开发-Worker子线程中解压文件

介绍 本示例介绍在Worker 子线程使用ohos.zlib 提供的zlib.decompressfile接口对沙箱目录中的压缩文件进行解压操作&#xff0c;解压成功后将解压路径返回主线程&#xff0c;获取解压文件列表。 效果图预览 使用说明 点击解压按钮&#xff0c;解压test.zip文件&#xff0c;显…

基于springboot实现医院管理系统项目【项目源码+论文说明】

基于springboot实现医院管理系统演示 摘要 随着信息互联网信息的飞速发展&#xff0c;医院也在创建着属于自己的管理系统。本文介绍了医院管理系统的开发全过程。通过分析企业对于医院管理系统的需求&#xff0c;创建了一个计算机管理医院管理系统的方案。文章介绍了医院管理系…

RabbitMQ如何保证消息的幂等性???

在RabbitMQ中&#xff0c;保证消费者的幂等性主要依赖于业务设计和实现&#xff0c;而非RabbitMQ本身提供的一种直接功能。 在基于Spring Boot整合RabbitMQ的场景下&#xff0c;要保证消费者的幂等性&#xff0c;通常需要结合业务逻辑设计以及额外的技术手段来实现。以下是一个…

Redis的双写一致性问题

双写一致性问题 1.先删除缓存或者先删除数据库都可能出现脏数据。 2.删除两次缓存&#xff0c;可以在一定程度上降低脏数据的出现。 3.延时是因为数据库一般采用主从分离&#xff0c;读写分离。延迟一会是让主节点把数据同步到从节点。 1.读写锁保证数据的强一致性 因为一般放…

【CVE复现计划】CVE-2024-0195

CVE-2024-0195 简介&#xff1a; SpiderFlow是新一代开源爬虫平台&#xff0c;以图形化方式定义爬虫流程&#xff0c;不写代码即可完成爬虫。基于springbootlayui开发的前后端不分离,也可以进行二次开发。该系统/function/save接口存在RCE漏洞&#xff0c;攻击者可以构造恶意命…

蓝桥杯加训

1.两只塔姆沃斯牛&#xff08;模拟&#xff09; 思路&#xff1a;人和牛都记录三个数据&#xff0c;当前坐标和走的方向&#xff0c;如果人和牛的坐标和方向走重复了&#xff0c;那就说明一直在绕圈圈&#xff0c;无解 #include<iostream> using namespace std; const i…