虾皮 秋招面经攒人品
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面
- 自我介绍,确认个人情况
- 实习经历,实习期间有遇到什么困难嘛?如何解决的
- 你自己认为是一个什么样的人
- 你对岗位是如何选择的
- 你有没有职业规划
- 你目前有拿到那些Offer
- 反问环节
昨天刚HR面完,期待意向书呀~牛客很灵的,冲冲冲
#面经##Shopee##校招#