春招字节飞书一面面经|讲解|0226
继续挑选了一篇牛客上的热门面经给大家做讲解分析,参考回答和学习资料指引,期望对大家有所帮助~
本文也是 《热门面经讲解》 系列文章之一,大家可以点个赞关注,我会持续更新
面经主要考察点总结::操作系统+计算机网络+redis
1. OS的虚拟内存
解析: 如果只是让简单介绍一下虚拟内存,那面试官可能是想引入话题之后再细问,我们可以从虚拟内存是啥,解决什么问题,如何工作等来简单介绍下。
参考回答:
操作系统的虚拟内存是一种重要的内存管理技术,它的核心思想是利用硬盘空间来扩展物理内存的容量,从而让计算机能够运行更大或更多的程序。
具体来说,虚拟内存技术通过将物理内存中的一部分数据与硬盘上的交换文件进行交换,实现了内存的“扩充”。当程序需要访问的数据不在物理内存中时,操作系统会将这部分数据从硬盘的交换文件中读取到物理内存中,以供程序使用。同样地,当物理内存空间不足时,操作系统也会将一部分较少使用或暂时不需要使用的数据交换到硬盘的交换文件中,以释放物理内存空间给需要使用它的程序。
学习指引:
虚拟内存属于操作系统的重要知识点,属于内存管理的一部分。建议大家整体掌握内存管理。
1.博客:小林 coding|图解系统|虚拟内存
2.书籍:《现代操作系统原理与实现》|第四章 内存管理 | 虚拟内存
2. 直播用udp还是tcp,为什么?udp和tcp的区别:
解析: 计算机网络属于校招重要专项之一,tcp和udp属于面试重点,需要掌握。
参考回答:
直播:通常使用UDP(用户数据报协议)而非TCP(传输控制协议),因为UDP具有更低的延迟和更高的实时性,适合流媒体传输。UDP不保证数据包的顺序和可靠性,但减少了因重传和确认导致的延迟。TCP则提供可靠的数据传输服务,确保数据包的顺序和完整性,但可能增加传输延迟。UDP和TCP的主要区别在于可靠性、顺序性和连接性:UDP是无连接的、不可靠的协议,适用于对实时性要求较高的场景;TCP是面向连接的、可靠的协议,适用于需要确保数据完整性的场景。
UDP和TCP的区别:
1.连接方式:TCP是面向连接的协议,意味着在发送数据之前,需要在发送方和接收方之间建立一条连接。而UDP则是无连接的协议,发送数据之前不需要建立连接,因此可以减少一些额外的开销。
2.可靠性:TCP是可靠的协议,通过校验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现可靠性传输。而UDP则尽最大努力交付,不保证可靠交付,因此可能会出现数据丢失或重复的情况。
3.传输效率:由于TCP需要建立连接、保证数据可靠性和顺序性,所以相对于UDP来说,其传输效率较低。而UDP则由于其简单、无连接的特性,传输效率较高,适用于对高速传输和实时性有较高要求的场景。
4.应用场景:TCP协议适用于需要可靠传输的场景,如文件传输、网页浏览等。而UDP协议则更适用于对实时性要求较高的场景,如在线直播、视频会议、实时游戏等。
等等....
学习指引:
-
系统学习:推荐书籍《图解TCP/IP 第5版》|第六章 TCP与UDP;(我有电子版|赠)
3. 说出你知道的所有保证线程安全/同步的方法
解析:
这问题有点突兀,需要结合面试场景来看,或者跟面试官确认好是从语言层面,还是从操作系统层面来回答。这里因为没有提语言,那我们就从操作系统层面来说说。
参考回答
1.互斥锁(Mutex): 互斥锁是最基本的线程同步机制之一。当一个线程需要访问共享资源时,它会先尝试获取互斥锁。如果锁已经被其他线程占用,则该线程会被阻塞,直到锁被释放。只有持有锁的线程才能访问共享资源,从而保证了线程安全。
2.信号量(Semaphore): 信号量是一个用于控制多个线程对共享资源访问的计数器。与互斥锁不同,信号量允许一定数量的线程同时访问共享资源。当线程需要访问资源时,它会尝试获取信号量;如果信号量的值大于0,则允许访问并将信号量减1;如果信号量的值为0,则线程会被阻塞。
3.条件变量(Condition Variable): 条件变量常常与互斥锁一起使用,用于实现线程之间的等待-通知机制。线程可以在条件变量上等待,直到满足某个条件;其他线程可以在条件满足时通知等待的线程。条件变量用于解决生产者-消费者问题等多线程同步问题。
4.读写锁(Read-Write Lock): 读写锁是一种特殊的锁,它允许多个线程同时读取共享资源,但只允许一个线程写入共享资源。这提高了并发性能,因为读取操作通常不会修改数据,所以多个线程可以同时进行读取而不会相互干扰。
5.屏障(Barrier): 屏障是一种同步机制,用于让一组线程在继续执行之前等待彼此。它确保所有线程都达到某个点后,再一起继续执行。这常用于并行计算中,将任务划分为多个阶段,并确保每个阶段的所有线程都完成后才能进入下一个阶段。
6.事件(Event): 事件是一种同步机制,用于通知一个或多个线程某个事件已经发生。线程可以等待某个事件发生后再继续执行。事件通常用于实现跨线程的通信和协调。
等等
学习指引:
1.书籍:《现代操作系统原理与实现》|第8章 同步原语
4. Tcp为什么挥手是4次?
解析:
参考回答:
学习指引:
4. Tcp为什么挥手是4次?
解析: TCP三次握手四次挥手系列问题之一,简单且重点掌握。
参考回答:
需要先描述下:四次挥手双方发 FIN 包的过程,就能理解为什么需要四次了。
1.关闭连接时,客户端向服务端发送 FIN 时,仅仅表示客户端不再发送数据了但是还能接收数据。
2.服务端收到客户端的 FIN 报文时,先回一个 ACK 应答报文,而服务端可能还有数据需要处理和发送,等服务端不再发送数据时,才发送 FIN 报文给客户端来表示同意现在关闭连接。
从上面过程可知,服务端通常需要等待完成数据的发送和处理,所以服务端的 ACK 和 FIN 一般都会分开发送,因此是需要四次挥手。
学习指引: 先理解三握四挥的过程,然后推荐资料里的系列面试题全部掌握。
1.博客:小林coding|图解网络|TCP为什么挥手需要四次
5. Https对称加密还是非对称?
解析: 校招计算机网络又一重要考察点:http相关问题,必须掌握。回到问题本身:采用混合加密,两者相结合
参考回答:
HTTPS 采用的是对称加密和非对称加密结合的*「混合加密」*方式:
- 在通信建立前采用非对称加密的方式交换「会话秘钥」,后续就不再使用非对称加密。
- 在通信过程中全部使用对称加密的「会话秘钥」的方式加密明文数据。
采用「混合加密」的方式的原因:
1.对称加密只使用一个密钥,运算速度快,密 钥必须保密,无法做到安全的密钥交换。
2.非对称加密使用两个密钥:公钥和私钥,公钥可以任意分发而私钥保密,解决了密钥交换问题但速度慢。
学习指引:
1.博客:小林coding|HTTPS 解决了 HTTP 的哪些问题? 中的第1点有讲解混合加密
6. Https的证书讲一下?为什么要有证书?没有证书会怎么样?
解析: 正常流程:继续上面的Https的问题相关实现细节提问
参考回答:
数字证书是什么? : 一个数字证书通常包含了:公钥;持有者信息;证书认证机构(CA)的信息;CA 对这份文件的数字签名及使用的算法;证书有效期;还有一些其他额外信息;
数字证书的作用: 是用来认证公钥持有者的身份,以防止第三方进行冒充。说简单些,证书就是用来告诉客户端,该服务端是否是合法的,因为只有证书合法,才代表服务端身份是可信的。
没有证书会怎么样?:当然就是没办法认证公钥持有者的身份,容易第三方进行冒充。
学习指引: 更多细节包括:数字证书签发和验证流程等,看这篇够了
1。博客: Https RSA握手解析|客户端验证证书
7. redis的zset讲一下?
解析: redis的对象考察中,zset是一个设计上比较有特点的数据结。尤其是底层用到的跳表,是面试官喜欢考察的点。回答这个问题可以简单讲一下zset的特点,应用场景,底层数据结构就行。引入这个话题,其他的等面试官细问后再回答。
参考回答:
zset(有序集合)是一种特殊的数据结构,它将元素与分数相关联,并根据分数对元素进行排序. 具有:元素唯一,有序性,分数与元素关联,高效的成员查找,高效的范围查询等特点。
典型应用场景:
- 排行榜:zset常用于构建排行榜,其中分数可以表示用户的得分或其他权重值。
- 实时热门数据统计:可以将数据的热度、点击量等作为有序集合的分数,通过不断更新分数来实时统计热门数据。
- 带权重的任务调度:可以将任务的执行时间戳作为有序集合的分数,以实现带权重的任务调度。
- 数据过期策略:可以将数据的过期时间作为有序集合的分数,根据过期时间自动清理数据。
底层数据结构: Redis的zset底层通过(压缩列表)或者(hash表+跳跃列表)实现。跳跃列表是一种可以进行对数级别查找的数据结构,通过在每个节点上维护多个指向其他节点的指针,可以快速访问到其他节点。
学习指引: 除了ZSet本省,其他还需要重点掌握跳表的增删改查流程。包括获取某个元素排行等过程和复杂度分析;
-
博客:zset+跳表:详细分析 该系列教程也推荐作为redis面试的学习资料。
-
系统学习:书籍 《redis设计与实现》|第5章 跳跃表
本文也是 《热门面经讲解》 系列文章之一,大家可以点个赞和关注,我会持续更新。
如有其他问题,也可咨询我!
#面经##面试##25届实习##我发现了面试通关密码##牛客解忧铺#挑选近期热门真实后端面经进行讲解分析,给出:个人分析+参考回答+学习资料指引。