Shopee后端开发面经

shopee后端开发面试题

一面:前提,我是java转go,所以基本上没有问和java相关的问题。

  1. TCP和UDP的不同?

  • 连接

    • TCP是面向连接的传输层协议,传输数据前先要建立连接。

    • UDP是不需要连接的,即刻传输数据。

  • 服务对象

    • TCP是一对一的两点服务,即一条连接只有两个端点。

    • UDP支持一对一、一对多、多对多的交互通信。

  • 可靠性

    • TCP是可靠交付数据的,数据可以无差错、不丢失、不重复、按需到达。

    • UDP是尽最大努力交付,不保证可靠交付数据。

  • 拥塞控制、流量控制

    • TCP有拥塞控制和流量控制机制,保证数据传输的安全性

    • UDP则没有,即使网络非常拥堵了,也不会影响UDP的发送速率。

  • 首部开销

    • TCP首部长度较长,会有一定的开销,首部在没有使用 选项 字段时是 20 个字节,如果使用了选项字段则会更长的。

    • UDP ⾸部只有 8 个字节,并且是固定不变的,开销较⼩。

  • 传输方式

    • TCP 是流式传输,没有边界,但保证顺序和可靠。

    • UDP 是⼀个包⼀个包的发送,是有边界的,但可能会丢包和乱序。

  • 分片不同

    • TCP的数据大小如果大于MSS大小,则会在传输层进行分片,目标主机收到后,也同样在传输层组装TCP数据包,如果中途丢失了一个分片,只需要传输丢失的这个分片。

    • UDP的数据大小如果大于MTU(Maximum Transmission Unit)大小,则会在IP层进行分片,目标主机收到后,在IP层组装完数据,接着再传输给传输层,但是如果中途丢了一个分片,在实现可靠传输的UDP时则就需要重传所有的数据包,这样传输效率非常差,所以通常UDP的报文应该小于MTU。

  1. TCP粘包原因和解决方法

TCP粘包是指:发送方发送的若干包数据到接收方接收时粘成一包

发送方原因:

TCP默认使用Nagle[ˈneɪgəl]算法(主要作用:减少网络中报文段的数量)。

收集多个小分组,在一个确认到来时一起发送、导致发送方可能会出现粘包问题

接收方原因:

TCP将接收到的数据包保存在接收缓存里,如果TCP接收数据包到缓存的速度大于应用程序从缓存中读取数据包的速度,多个包就会被缓存,应用程序就有可能读取到多个首尾相接粘到一起的包。

解决粘包问题:

最本质原因在于接收方无法分辨消息与消息之间的边界在哪,通过使用某种方案给出边界,例如:

  • 发送定长包。每个消息的大小都是一样的,接收方只要累计接收数据,直到数据等于一个定长的数值就将它作为一个消息。

  • 包尾加上\r\n标记。FTP协议正是这么做的。但问题在于如果数据正文中也含有\r\n,则会误判为消息的边界。

  • 包头加上包体长度。包头是定长的4个字节,说明了包体的长度。接收方先接收包体长度,依据包体长度来接收包体。

  1. TCP三次握手

⼀开始,客户端和服务端都处于 CLOSED 状态。先是服务端主动监听某个端⼝,处于 LISTEN 状态;

  • 客户端随机初始化序列号 client_isn ,将序列号置于TCP首部的 序列号 字段中,同时把 SYN 标制位置为 1,表示 SYN 报文。接着把第一个SYN报文发送给服务端,表示向服务端发起连接,该报文不包含应用层数据,之后客户端处于 SYN_SENT状态;

  • 服务端收到客户端的 SYN报文后,首先服务端也随机初始化自己的序列号 server_isn,并填入 TCP 首部的 序列号 字段中,其次把TCP首部的 确认应答号 字段填入 client_isn + 1,接着把 SYNACK 标制置为 1,最后把该报文发送给客户端,该报文也不包含应用层数据,之后服务端处于 SYN_RCVD 状态;

  • 客户端收到服务端报文后,还要向服务端回应最后一个应答报文,首先该应答报文TCP首部 ACK 标志位置为 1,其次 确认应答号 字段填入 server_isn + 1,最后把报文发送给服务端,这次报文可以携带客户到服务器的数据,之后客户端处于 ESTABLISHED 状态。

服务端收到客户端的应答报文后,也进入 ESTABLISHED 状态。

可通过 netstat -napt 命令查看TCP的连接状态

什么是TCP连接:用于保证可靠性和流量控制维护的某些状态信息,这信息的组合,包括 Socket、序列号和窗口大小称为连接。

  1. TCP握手为什么三次

  • 三次握手才可以避免历史连接(主要原因);

    我们来看看 RFC 793 指出的 TCP 连接使⽤三次握⼿的⾸要原因

    The principle reason for the three-way handshake is to prevent old duplicate connection initiations from causing confusion.

    简单来说,三次握⼿的⾸要原因是为了防⽌旧的重复连接初始化造成混乱。

    客户端连续发送多次 SYN 建⽴连接的报⽂,在⽹络拥堵情况下:

    • ⼀个「旧 SYN 报⽂」⽐「最新的 SYN 」 报⽂早到达了服务端;

    • 那么此时服务端就会回⼀个 SYN + ACK 报⽂给客户端;

    • 客户端收到后可以根据⾃身的上下⽂,判断这是⼀个历史连接(序列号过期或超时),那么客户端就会发送 RST 报⽂给服务端,表示中⽌这⼀次连接。

  • 三次握手才可以同步双方的初始序列号;

    TCP 协议的通信双⽅, 都必须维护⼀个「序列号」, 序列号是可靠传输的⼀个关键因素,它的作⽤:

    • 接收⽅可以去除重复的数据;

    • 接收⽅可以根据数据包的序列号按序接收;

    • 可以标识发送出去的数据包中, 哪些是已经被对⽅收到的;

  • 三次握手才可以避免资源浪费;

    如果只有「两次握⼿」,当客户端的 SYN 请求连接在⽹络中阻塞,客户端没有接收到 ACK 报⽂,就会重新发送 SYN ,由于没有第三次握⼿,服务器不清楚客户端是否收到了⾃⼰发送的建⽴连接的 ACK 确认信号,所以每收到⼀个 SYN 就只能先主动建⽴⼀个连接,这会造成什么情况呢?

    如果客户端的 SYN 阻塞了,重复发送多次 SYN 报⽂,那么服务器在收到请求后就会建⽴多个冗余的⽆效链接,造成不必要的资源浪费。

  1. 为什么需要 TIME_WAIT 状态?

首先,主动发起关闭连接的一方,才会有 TIME_WAIT 状态。

需要TIME_WAIT状态,主要有两个原因:

  • 防止具有相同 四元组 的旧数据包被收到;

    TCP 就设计出了这么⼀个机制,经过 2MSL 这个时间,⾜以让两个⽅向上的数据包都被丢弃,使得原来连接的数据包在⽹络中都⾃然消失,再出现的数据包⼀定都是新建⽴连接所产⽣的。

  • 保证 被动关闭连接的一方能被正确的关闭,即保证最后的 ACK 能让被动关闭方接收,从而帮助其正常关闭;

  1. TCP是如何实现数据的可靠传输的?

  1. http1.0、http1.1、https、http2、http3演变?

  1. Get与POST的区别?http除了常用的get和post还有什么方法?

  1. DNS 的寻址过程?

  2. 在浏览器中输入一个www.baidu.com后执行的全部过程?(尽可能的详细)

  3. A要用到B服务器的服务,开了多个连接,但是只有一小部分连接成功了,怎么排查原因?

  4. 死锁条件、解决方式?

  5. 非阻塞IO和阻塞IO的区别?

  6. IO多路复用:epoll和select和poll?

  7. 使用多路复用的话怎么做到快速响应一个连接上的事件?

  8. 进程通信方式?

  9. 虚拟地址的好处?

  10. mysql的存储引擎简单说下?

  11. 事务的特性? 原子性怎么实现?

  12. 和隔离级别分别对应的几个问题说一下?

  13. 隔离级别是怎么实现的?

  14. 最后mysql出了几个判断是否用上索引的题目?

  15. 大概说一下redis的物种基本数据结构?

  16. 详细讲下线程和进程?

  17. 讲下零拷贝?用到该技术的中间件知道的有哪些?什么条件下适合用零拷贝技术?

  18. 说下HashMap源码实现中你认为精妙的地方?

  19. 算法题:最长不重复字串 和 两个节点的最近公共祖先节点。

总结:一面大概面了一小时四十分钟,其中算法的时间是半小时。

二面

  1. 讲一下最近的项目,需要讲出端到端的整个实现流程,就是不同的组件和集群之间是如何进行通信的,穿插一些问题,比如为什么使用这个组件?

  2. 设计一个数据库缓存池?

  3. float类型底层是如何实现的?

  4. 挑了简历中的几个点让展开讲了下,比如mysql的数据迁移是如何实现的。。。

  5. 结束进程的几个命令间的区别(SIGNKILL、SIGNTERM)?

  6. 工作中常用的设计模式,以及如何使用的?

  7. 怎么看待不同的编程语言?

总结:需要熟悉简历中的项目和具体细节。

三面

hr面,没什么好说的。

结果
已入职!

shopee简介

shopee福利简介

无打卡制度,试用期三个月全薪,当月发薪,话费、通勤等补助,节日礼物(礼物非常频繁),不差于一线大厂的薪资待遇,每天40多种不间断零食供应,入职配置顶级配置的MacBook Pro,全薪10%的公积金缴纳,等等。

有什么问题可通过v留言:shenmeyu0204

#shopee社招##面试题目##Shopee#
全部评论
A要用到B服务器的服务,开了多个连接,但是只有一小部分连接成功了,怎么排查原因? 这个问题能提供一下回答吗?
1 回复 分享
发布于 2021-10-29 14:34
老哥面的sg吗 给意向了吗 什么时候hr面的
点赞 回复 分享
发布于 2021-10-26 16:57
老哥是校招还是社招
点赞 回复 分享
发布于 2021-10-28 09:45

相关推荐

7 119 评论
分享
牛客网
牛客企业服务