美团中间件C++一面-面经总结

news2024/9/25 4:47:01

1、TCP和UDP 的区别?

速记标识符:连靠刘墉宿营
解释:
面向连接vs无连接
可靠传输vs不保证可靠
字节流vs报文传输
拥塞控制流量控制vs无
速度慢vs速度快
应用场景自己描述

2、服务端处于close wait是什么情况,是由什么造成的?

close_wait是一种状态,是收到了关闭请求,并且返回了ACK确认之后的状态。

1.客户端发起关闭请求(FIN):客户端主动关闭连接,发送 FIN 报文给服务端。
2.服务端接收到 FIN,进入 CLOSE_WAIT 状态:服务端收到客户端的 FIN 报文后,向客户端发送一个 ACK 报文,确认收到了关闭请求。此时,服务端的状态变为 CLOSE_WAIT
3.等待服务端关闭连接:服务端的应用程序此时应该执行关闭操作(通常调用 close() 函数),发送 FIN 报文给客户端,并完成整个连接的关闭过程。

原因如下:
为什么会wait主要是因为:
1.服务端没有调用close() 没有及时关闭
2.资源泄漏或者代码缺陷
3.server的业务逻辑太复杂了

解决close_wait问题:
1.保证正确调用close
2.检查资源泄露
3.优化服务器逻辑
4.netstat和ss看看连接状态 可以看长时间是close_wait

3、讲讲三次握手和四次挥手?

第一次握手:client向server发送一个SYN 携带自己的初始化序列号。
第二次握手:server收到,以自己的SYN为应答,把自己的初始化序列号发送回client,并且把client的初始化序列号+1作为ACK返回。
第三次握手:client收到,把server的初始化序列号+1作为ACK发回server。

第一次挥手:client发送FIN给server来请求关闭连接
第二次挥手:server收到发回一个ACK 表示接收客户端关闭请求。
第三次挥手:server也发送一个FIN给client来请求关闭
第四次挥手:client收到,发送一个ACK作为应答,已经接收到了服务器的关闭请求。

4、讲讲慢启动?

探测网络的负载或者承受能力。

算法思路:由小到大逐渐增大拥塞窗口,当自己主机刚连进网络时如果一下注入太多资源可能造成网络拥塞,因此循序渐进的探测网络的拥塞程度。每收到一个确认报文拥塞窗口就增加一个报文段。

慢启动门限ssthresh(状态变量)防止拥塞窗口cwnd增长过大引起网络拥塞。

当cwnd<ssthresh,使用慢启动算法。
当cwnd>sshresh,停止使用慢启动算法而使用拥塞避免方法。
当cwnd = sshresh时既可以使用慢启动算法也可以使用拥塞避免算法。

5、ARP是哪层?

Address:数据链路层
处理IP-----MAC映射
作用:局域网内,通过IP地址查找MAC地址,在网络中进行数据帧传输。

6、TCP和UDP是哪层的?

传输层

7、分页置换算法你知道有啥?

FIFO-容易belady
LRU-最近最久
OPT-理论最优
CLOCK
LFU-最近最少使用
NRU
MFU

8、听说过page cache吗?

它通过将文件的数据缓存到内存中,减少对磁盘的直接访问,提高读写速度。

工作原理:

缓存文件内容:当应用程序从文件中读取数据时,操作系统会将这些数据存储到 Page Cache 中。下次读取相同的数据时,操作系统可以直接从内存中的 Page Cache 提供数据,而无需访问磁盘,减少 I/O 操作的延迟。
写入时缓存:对于写操作,操作系统通常不会立即将数据写入磁盘,而是先将数据写入 Page Cache。Page Cache 中的数据会在适当的时机(如内存压力大或文件关闭时)通过刷回机制写入磁盘,确保数据持久性。这种机制被称为 write-back 策略。
内存管理与回收:Page Cache 会占用系统内存,如果内存不足,操作系统会根据需求淘汰部分缓存页面,释放内存用于其他用途。

优点:

减少磁盘 I/O:通过缓存文件数据,可以大大减少对磁盘的访问,提升文件读写性能。
提高系统性能:由于内存的访问速度远快于磁盘,Page Cache 能显著减少文件操作的延迟。
Write-back 提高效率:对于写操作,Page Cache 可以减少频繁的磁盘写操作,等到适合的时机再批量写入,优化了写入性能。

运作过程:

读操作:
    当文件被读取时,操作系统首先会检查 Page Cache 是否已有相应数据。如果缓存命中,直接从 Page Cache 中返回数据。
    如果缓存未命中,则从磁盘加载页面到 Page Cache 中,并将数据返回给请求进程。
写操作:
    写操作也会被暂时存储在 Page Cache 中,数据不会立即写入磁盘。
    当内存压力增大或者文件关闭时,操作系统会将这些脏页(已被修改但尚未写回磁盘的页面)刷回磁盘,确保数据的一致性。

Page Cache 和虚拟内存:

Page Cache
是虚拟内存管理的一部分。操作系统将文件系统的页面和内存管理结合起来,通过文件映射将文件数据加载到虚拟地址空间。实际上,Page Cache
与应用程序的内存页(如进程的代码、堆栈等)共享相同的物理内存池,因此 Page Cache 的大小会根据系统内存的可用性进行动态调整。

9、满二叉树有多少个点 ?

深度为d 总数为2^d-1

10、怎么找链表上的环(快慢指针)?

这个很经典 快指针两步 慢指针一步
如果有环一定相遇 (想跑道)
没有环的话 快指针就回到nullptr

11、说说为啥用B+树,比较一下红黑树?

1.b+树只有数据存储在叶子节点,每次IO操作读取的内容更大,减少访问磁盘的次数
2.叶子节点之间还有链表连接,方便范围查询。
3.b+树多路查找,更加的矮胖,访问的节点数少。
4.查找时所有路径长度相同,查找时间更加稳定。
5.适合在磁盘或者外存,而不是红黑树的RAM

12、LSM树听说过吗?

Log-Structured Merge-tree
特别适用于需要大量写操作的场景,比如日志系统、数据库和文件系统。
LSM树的主要思想是将写操作批量化,并延迟写入磁盘,从而提高写入效率。它通过将数据分布到不同的存储层来实现高效的写入和读取。

写入操作(MemTable):当数据写入 LSM 树时,首先会写入到内存中的一个数据结构,通常是一个跳表或平衡二叉搜索树,称为 MemTable。MemTable 是一个内存中树结构的实现,提供了快速的插入和查找操作。

数据刷新(SSTable):当 MemTable 达到一定的大小时,它会被转换为一个不可变的数据结构,称为 Immutable MemTable。此时,MemTable 被写入到磁盘中,生成一个 SSTable(Sorted String Table) 文件。SSTable 是一种有序的数据文件,适合于高效的顺序读写。

合并操作(Merge):随着时间的推移,多个 SSTable 文件可能会积累在磁盘中。为了保持读取性能,LSM 树会定期执行合并操作,将多个 SSTable 文件合并成更大的 SSTable 文件。这个过程称为 Compaction。

合并操作会将数据重新排序、删除重复或过时的数据,并优化存储结构,以减少后续的查询开销。

读取操作:在查询数据时,LSM 树首先会查询 MemTable,如果数据不在 MemTable 中,则会在 SSTable 文件中查找。读取操作通常会涉及到多个 SSTable 文件,但合并操作会优化查询路径,使得查询效率较高。

优势

高效的写入性能:
    写操作主要在内存中的 MemTable 进行,内存写入速度快,减少了直接对磁盘的频繁写入。
    数据写入磁盘时是批量操作,合并过程也能优化写入效率。
顺序写入优化:LSM 树的写操作是顺序写入到磁盘上的 SSTable 文件中,这对于现代存储设备(如 SSD)来说是非常高效的,因为顺序写入比随机写入性能更好。
减少磁盘碎片:合并操作可以减少磁盘碎片,优化存储布局,减少后续的读取开销。
高效的范围查询:SSTable 文件是有序的,这使得范围查询非常高效,尤其是在合并操作优化之后。

劣势

读取性能的复杂性:查询操作可能需要遍历多个 SSTable 文件,虽然合并操作能够优化查询路径,但在某些情况下,读取操作可能会比较复杂和耗时。
合并操作的开销:合并操作是一个资源密集型的过程,可能会影响系统的 I/O 性能和响应时间。

应用场景

数据库系统:如 Apache Cassandra、HBase 和 LevelDB 都使用了 LSM 树来优化写入性能和范围查询能力。
日志系统:适用于需要高效写入和读取日志数据的系统。
文件系统:用于优化文件的写入和读取操作。

13、讲讲mysql 的锁?

在这里插入图片描述全局锁用于:全库逻辑备份(直接全局只读)
这个是针对MyISAM这种不支持事务的引擎。

表锁:粒度较大,但操作简单
元数据锁:用于保护对数据库对象的元数据的访问,例如表结构、索引等。
意向锁:用于协调不同粒度的锁(例如行锁和表锁)之间的冲突。

行级锁:仅锁定需要操作的具体行
在这里插入图片描述

14、讲一下innoDB?

innoDB是默认的引擎
1.支持ACID
2.支持牛逼的行锁,减少锁冲突
3.支持外键约束
4.有redo log崩溃后可以回复
5.支持数据压缩
6.支持四种事务隔离离别

talk is cheap,show me the code:

LC 76–最小覆盖子串

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

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

相关文章

【算法】模拟:(leetcode)495.提莫攻击(easy)

目录 题目链接 题目介绍 解法 代码 题目链接 495. 提莫攻击 - 力扣&#xff08;LeetCode&#xff09; 题目介绍 解法 模拟 分情况讨论。 当寒冰再次中毒时&#xff0c;上次「中毒」是否已经结束。 ​ 当上次中毒已经结束了&#xff0c;那么上次「中毒」维持的时间就是 …

C++【类和对象】(构造函数与析构函数)

文章目录 1. 类的默认成员函数2. 构造函数析构函数的特点3. 析构函数析构函数的特点 结语 1. 类的默认成员函数 默认成员对象就是我们没有显示的写&#xff0c;但是编译器会自动生成的成员函数。一个类&#xff0c;我们不写的情况下编译器会默认生成以下6个成员函数&#xff0…

【JVM】一篇文章彻底理解JVM的组成,各组件的底层实现逻辑

文章目录 JVM 的主要组成部分类加载器&#xff08;Class Loader&#xff09;1. 加载&#xff08;Loading&#xff09;2. 链接&#xff08;Linking&#xff09;3. 初始化&#xff08;Initialization&#xff09; Execution Engine&#xff08;执行引擎&#xff09;1. 解释器&…

微服务--Docker

Docker是一个开源的应用容器引擎&#xff0c;它基于Go语言并遵从Apache2.0协议开源。Docker提供了一种轻量级、可移植和自包含的容器化环境&#xff0c;使开发人员能够在不同的计算机上以一致的方式构建、打包和分发应用程序。 一、Docker的基本概念 容器&#xff08;Contain…

828华为云征文|使用Flexus X实例创建FDS+Nginx服务实现图片上传功能

一、Flexus X实例 什么是Flexus X实例呢&#xff0c;这是华为云最新推出的云服务器产品&#xff0c;如下图&#xff1a; 华为云推出的Flexus云服务器X系列&#xff0c;是在华为顶尖技术团队&#xff0c;特别是荣获国家科技进步奖的领军人物顾炯炯博士及其团队的主导下精心研发…

AWS注册时常见错误处理

引言 创建AWS账号是使用AWS云服务的第一步&#xff0c;但在注册过程中可能会遇到一些常见的问题。本文中九河云将帮助您排查和解决在创建AWS账户时可能遇到的一些常见问题&#xff0c;包括未接到验证电话、最大失败尝试次数错误以及账户激活延迟等。 常见问题及解决方法 1. …

记一次Mac 匪夷所思终端常用网络命令恢复记录

一天莫名奇妙发现ping dig 等基础命令都无法正常使用。还好能浏览器能正常访问&#xff0c;&#xff0c;&#xff0c;&#xff0c; 赶紧拿baidu试试^-^ ; <<>> DiG 9.10.6 <<>> baidu.com ;; global options: cmd ;; connection timed out; no serve…

leetcode24. 两两交换链表中的节点,递归

leetcode24. 两两交换链表中的节点 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 示例 1&#xff1a; 输入&#xff1a;he…

[译] K8s和云原生

本篇内容是根据2019年8月份Kubernetes and Cloud Native音频录制内容的整理与翻译, Johnny 和 Mat 与 Kris Nova 和 Joe Beda 一起探讨了 Kubernetes 和云原生。他们讨论了 Kubernetes 推动的“云原生”应用的兴起、使用 Kubernetes 的合适场合、运行如此大型的开源项目所面临…

【Java】虚拟机(JVM)内存模型全解析

目录 一、运行时数据区域划分 版本的差异&#xff1a; 二、程序计数器 程序计数器主要作用 三、Java虚拟机 1. 虚拟机运行原理 2. 活动栈被弹出的方式 3. 虚拟机栈可能产生的错误 4. 虚拟机栈的大小 四、本地方法栈 五、堆 1. 堆区的组成&#xff1a;新生代老生代 …

叶国富学得会胖东来吗?

“大家都看不懂就对了&#xff0c;如果都看得懂我就没有机会了。”昨晚&#xff0c;实体零售迎来一则重磅消息&#xff0c;名创优品获得了全国第二大连锁超市永辉超市的大股东身份。在资本市场负反馈的压力下&#xff0c;名创优品创始人叶国富有了上述回应。 消息公布后&#x…

云服务器是干什么的?

随着云计算的发展&#xff0c;云服务器的功能逐步完善。但是还有不少用户不清楚云服务器是干什么的&#xff1f;云服务器提供了一种灵活、可扩展的计算解决方案&#xff0c;适用于各种在线业务和项目。提供虚拟化的计算资源是云服务器最基本也是最重要的功能。 云服务器是干什…

vue项目npm run serve 报错,Error: read ECONNRESET at TCP.onStreamRead

背景&#xff1a;vue2的项目&#xff0c;之前npm run serve一直可以正常使用&#xff0c;突然每次启动都会报错了&#xff0c;报错信息如下&#xff1a; node:events:492 throw er; // Unhandled error event ^ Error: read ECONNRESET at TCP.onStreamRead (n…

Android开发okhttp下载图片带进度

Android开发okhttp下载图片带进度 下载网络图片的方法有很多&#xff0c;这次介绍写用okhttp来下载网络图片&#xff0c;主要我看中的是用okhttp下载有进度返回&#xff0c;提示下用户 一、思路&#xff1a; 用OkHttpClient().newCall(request) 二、效果图&#xff1a; 三、…

“加密自由”受到威胁?Telegram已被“收编”?成立审核团队,提供用户数据!

近年来&#xff0c;随着加密货币和区块链技术的迅猛发展&#xff0c;Telegram作为一个重要的社交平台&#xff0c;因其对用户隐私的承诺和自由交流的环境&#xff0c;吸引了大量的用户。目前&#xff0c;Telegram已经成为加密货币市场最爱使用的全球通讯软件。 然而&#xff0c…

成都睿明智科技有限公司抖音开店怎么样?

在当今这个短视频与直播带货风靡的时代&#xff0c;抖音电商以其独特的魅力迅速崛起&#xff0c;成为众多品牌和企业竞相追逐的新蓝海。而在这场电商盛宴中&#xff0c;成都睿明智科技有限公司凭借其专业的服务、创新的策略以及深厚的行业洞察力&#xff0c;成为了众多商家信赖…

828华为云征文 | 云服务器Flexus X实例,Docker集成搭建斗地主

828华为云征文 | 云服务器Flexus X实例&#xff0c;Docker集成搭建斗地主 华为云端口放行 服务器放行对应端口8078 Docker安装并配置镜像加速 1、购买华为云 Flexus X 实例 Flexus云服务器X实例-华为云 (huaweicloud.com) 2、docker安装 yum install -y docker-ce3、验证 Dock…

第52课 Scratch游戏入门:五子棋

五子棋 故事背景: 会下五子棋么?五个颜色一样的棋子,横竖斜向有五个连在一起,就胜利,让我们一起来绘制一个五子棋的棋盘,同时一起开始下棋吧! 开始编程 1、删除预设的猫咪角色,使用绘制工具绘制白色和黑色的棋子。(使用圆形和圆形渐变色填充棋子) 新绘制棋盘等其他角…

刷题日记_DAY1

前言 这里记录每日随机刷的错题 两个数组的交集&#xff08;模拟&#xff09; 题目描述 题目解析 题目要求返回指定的两个字符串之间的距离&#xff0c;容易想到的一种解法就是暴力遍历&#xff0c;来个双循环&#xff0c;但时间复杂度就为N^2&#xff0c;不符合题意 for(…

20240925 每日AI必读资讯

重磅&#xff01;字节跳动发布豆包音乐模型和同声传译模型 - 包括音乐模型&#xff0c;同声传译模型、文生图2.0模型、新的基于DIT的视频生成模型S2.0、豆包通用模型pro、语音合成模型。 - 还发布了图像转视频口型同步模型和文本、音频驱动的数字人模型。 - 这些功能将全部集…