首页 > 虾皮 秋招面经攒人品
头像
字节跳动内推-
发布于 2021-09-24 10:51
+ 关注

虾皮 秋招面经攒人品

9.12 虾皮一面

  • 详细了解项目,主要有一个问题,问到 RocketMQ 保证有序性,如何保证的?

  • 问数据库,MySQL 对于B+树你有了解嘛,介绍一下它是什么样的

    • B+ 树是如何减少 IO次数的
  • 网络,为什么需要三次握手,老问题了,但是我就记得我自己的总结其他都忘了,不过面试官好像感觉还行

    • 问一个场景,如果是在服务端检测到有大量的 time-wait,是什么原因呢?

      • 当大量的连接处于 time-wait状态时,由于本地端口数是有限的(65535),可能会导致新建立的TCP连接出错

      • 可以使用netstat -n |awk '/^tcp/ {++S[$NF]} END {for (a in S) print a, S[a]}'进行查看

      • 我回答了可能是网络问题,导致客户端不断重发,保持连接,好像答错了,没注意到他说的是大量的

      • 原因:可能是由于大量的短连接存在,特别是 HTTP请求中,如果connection头部取值被设置为 close时,基本都由服务端发起主动关闭连接,而 TCP四次挥手关闭连接机制,为了保证 ACK重发和丢弃延迟数据,设置 TimeWait为 2MSL,也即4分钟

      • 解决办法:1. 客户端 HTTP请求头部Connection设置为keep-alive, 保证存活一段时间;2. 服务端允许 time_wait状态的socket被重用,缩减 time_wait时间,设置为1MSL,另外一般设置服务器不允许主动关闭连接

    • 半开连接

    • 在未告知另一端的情况下,通信的一段关闭或终止了连接,那么就认为该条TCP连接处于 半开状态

    • 这种情况一般发生在通信一方的 主机崩溃 或者 断电 的情况下(非正常关机)

    • 只要不尝试通过半开连接传输数据,正常工作的一端不会察觉出另一端已经崩溃!! 直到开始传输数据,会收到对端的 RST 报文

    • 如果服务器上有很多半开连接,会占用很多不必要的资源,可以通过设置 keepalive 选项来进行检测和关闭

  • 刷题:BST 删除一个元素,保持结构 https://leetcode-cn.com/problems/delete-node-in-a-bst/,说好的回溯呢~结果是递归

9.18 虾皮二面

  • 个人介绍

  • 详细问个人项目

    • 软负载均衡

      • 负载均衡常用算***询,加权,随机,最小响应时间,最小并发数策略,IP绑定 ip_hash,fair,一致性Hash

      • 服务端负载均衡,可以使用硬件来做,或者软件——Ngnix

        • Ngnix 的原理,Ngnix 的负载均衡是在IP层
      • 客户端负载均衡,Spring Cloud中可以使用Ribbon 完成

    • 常用的服务发现:Consul, Zookeeper, Etcd, Eureka,主要有两类

      • 分布式 CAP理论,一般只能保证 CP或者 AP

      • 1. 注重高可用

      • 2. 注重一致性——比如ZK

        • ZK是如何保证的一致性,ZAB一致性协议——消息广播阶段+ 崩溃恢复阶段(开始选举+选举完成数据同步),ZAB协议中的Zxid

        • 在项目中你是如何使用ZK:利用心跳机制+临时顺序子节点 —— 维持动态上下线,Client 使用事件监控机制(Watcher-CuratorUtils API)感知服务的变化

        • 场景:

          • 1. 对Server进行了扩容,Client是如何感知到的

            • 事件监控机制
          • 2. Server 中有少量出现问题,而Client与ZK网络连接也出现问题,在这种情况下Client并不能感知到Server的上下线

            • Server - Client 使用心跳机制维持长连接,复用连接

            • 如果当前的连接发送不成功,会去继续尝试下一个连接

          • 3. 但是这样子会出现一个问题,它必须尝试所有的可能才能找到一个正常的连接,有什么办法可以避免嘛?

            • Client端维护连接列表的状态,更新状态,软负载时可以挑选健康的连接
          • 4. 如果我们在Client维护了与Server连接的状态,但是这个时候Server又恢复正常了,Client 与注册中心还是中断的,如何感知

            • 利用后台线程,对目前已有的连接但是不正常的状态尝试间隔一定时间发送报文,如果成功则修改状态,否则尝试一定次数之后就将连接删除
    • 有了解过断路器嘛 —— Hystrix

    • 在分布式架构中为什么需要消息队列

      • 解耦

      • 削峰平谷

      • 利用重试机制,保证任务执行成功

      • 利用消息队列可以做重试,但是如何保证如何不重复消费消息

        • 给消息一个状态,消费成功返回ACK给消息队列。反问,如果消息队列没接收到

        • 维护消息的状态,落库,每次先去DB中查询状态

      • 全局唯一Id生成器

        • MySQL 利用自增主键

        • 单台不够,部署多台,每台从不同的起始点出发,步长相同,保证多台可以同时发号

        • 虽然可以使用连接池的方式,但是每次就取一个号还是比较浪费的,可以每次批量去取(实际上,MySQL只需要保存当前最大号码数)

        • Redis incr, incrby

        • UUID 有点小问题

        • 雪花算法:64位:41(时间戳)+ 10 (计算机ID)+ 12(每台机器毫秒内可以生成的ID序列号)

  • 算法题

    • 顺时针打印矩阵

    • 计算逆序数

9.23 HR面

  1. 自我介绍,确认个人情况
  2. 实习经历,实习期间有遇到什么困难嘛?如何解决的
  3. 你自己认为是一个什么样的人
  4. 你对岗位是如何选择的
  5. 你有没有职业规划
  6. 你目前有拿到那些Offer
  7. 反问环节

昨天刚HR面完,期待意向书呀~牛客很灵的,冲冲冲

更多模拟面试

全部评论

(5) 回帖
加载中...
话题 回帖