字节面试复盘

10.28 头条客户端一面凉经555

第一次面试,面试官很温柔也很帅~,人也特别好,虽然应该是凉了,但还是很感谢这位面试官

  1. 自我介绍

  2. 项目:关于优惠券,为什么不将优惠券领取表和优惠券使用表合成一个表?

  3. 三次握手、四次挥手

  4. TCP的所有知识点(流量控制、拥塞控制…)

    • ARQ(自动重传请求)协议

      • 停止等待ARQ
        • 发送窗口 = 1,接收窗口 = 1
        • 发送端收到ACK之后才发送下一个报文段
        • 信道利用率差
      • 回退N帧ARQ(GBN)
        • 发送窗口 > 1,接收窗口 = 1
        • 如果某个报文没有被正确接收,则该报文之后的所有报文都要重传
        • 累积确认(如果接收方确认了某一报文,说明在该报文之前的所有报文都被正确接收了)
        • 在GBN机制下,接收方一次只交付一个分组给上层,并且保证按序
        • 接收方不会对失序到达的分组进行缓存,而是丢弃
      • 选择重传ARQ(SR)
        • 发送窗口 > 1,接收窗口 > 1
        • 为每个报文段设置单独的计时器,若计时器超时,只重发这一个计时器
        • 不会累积确认
      • TCP所采用的机制
        • 累积确认(GBN)
        • 接收端有缓存(SR),存放正确接收但失序的分组 (SACK:选择性确认机制,接收端会返回最近收到的报文段的序列号范围,这样发送端就知道哪些数据包已到达,与ACK相结合就知道要重发哪些)
    • 滑动窗口
      在这里插入图片描述

      • 图中分为四个部分:窗口左侧(已发送已确认)、窗口(已发送未确认、即将要发送未确认)、窗口右侧(未发送未确认)
      • 滑动窗口的大小为 拥塞控制窗口 和 流量控制窗口 的最小值
      • 作用:保证次序、提高吞吐量
    • 流量控制

      • 如果发送方发送速率太快,可能会导致接收方来不及处理和接受数据,需要使用滑动窗口协议来控制发送方的传输速率
    • 拥塞控制

      • cwnd:拥塞窗口,ssthresh:慢开始门限值
      • 首先进行慢开始(cwnd指数增加),当cwnd达到ssthresh时,开始执行拥塞避免(cwnd每次增加1)
      • 当发送方的重传计时器超时时,说明网络可能出现了拥塞,①将ssthresh的值改为发生拥塞时cwnd的一半;②将cwnd的值减为1,重新开始慢开始
      • 当发送方连续收到三个重复确认时,说明某个报文丢失,
        - ① 执行快重传,即发送方立刻重传接收方未收到的报文段,不必等到重传计时器超时;
        - ② 当接收方收到失序的报文段后立即发出确认,不要等到自己发送数据时捎带确认;
        - ③ 执行快恢复,即将ssthresh减为发生拥塞时cwnd的一半;
        - ④ 继续执行拥塞避免,而不是执行慢开始
        在这里插入图片描述
  5. 七层协议

    • 物理层
      • 作用:利用传输介质为通信的两端建立、管理和释放物理链接,实现比特流的透明传输,保证比特流正确地传输到对端。
      • 传输媒体:双绞线、同轴电缆、光纤
      • PDU(协议数据单元):比特流
    • 数据链路层
      • MAC子层、LLC子层
      • 提供直连两个设备之间的通信功能
      • 向网络层提供透明可靠的数据传输服务
      • 数据链路管理、封装成帧、透明传输、差错控制
      • 交换机
      • PDU:帧(data frame)
    • 网络层
      • IP协议
        • 面向无连接(为了简化、提速)
        • IP地址:网络号 + 主机号
    • 传输层
    • 会话层
    • 表示层
    • 应用层
  6. 还知道哪些协议(我回的ARP协议)

  7. DNS协议是哪一层的,DNS的知识点

    • DNS是应用层!!(OMG当时我回的网络层,面试官还重复了一遍我的答案)
  8. UDP的所有知识点

  9. 进程、线程,编程过程中有没有使用过进程线程

  10. Python的特点

  11. 有一个1000行的代码,分别用Python、Java、C++运行有什么区别

  12. 面向对象的三个特点(封装、继承、多态)

  13. 重载和重写的区别

  • 重载:
    • 一个类中多态性的表现
    • 函数名相同
    • 参数个数或参数类型不同
    • 对返回值没有要求(不能通过返回值判断是不是重载)
  • 重写:
    • 父类与子类之间多态性的表现
    • 函数名、参数列表、返回值必须相同
    • 重写函数的访问修饰符一定要大于被重写函数的访问修饰符(public > protected > defult > private)
    • 重写方法一定不能抛出新的检查异常或声明比被重写方法更加宽泛的检查型异常
  1. C++的STL库(SOS我讲的HashMap)vector、queue、stack、map(应该是想问底层的)
  2. 算法题:求两个有序数组的中位数 (还要说出时间复杂度和空间复杂度)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值