二面面经

项目中的亮点 以及困难怎么去解决?

点赞接口使用了redis的分布式锁,set命令 将设置key 以及Key的expire time一起设置,保证了命令执行的原子性,不会出现被别的请求释放锁导致出问题;目前使用的Jedis操作redis,我建议使用Redission来操作redis,提供了很多分布式说的 解决方案;然后可以说一下 redis的底层数据结构(dicEntry 里面有 SDS 和 redisObject :SDS(String) 双向链表(List) 字典(哈希表 哈希冲突使用链地址法 哈希表里面存的是dictEntry) 跳表skip list是一个有序数据结构(sort set) 整数集合(set) 压缩列表(将数据按照相同的编码规则放 内存的连续空间 目的是为了节省内存开销))
说一下redis的list现在一般都被MQ给取代了,MQ消息可靠性以及高可用 以及多客户端的发布与订阅;Redis的集群与部署?说一下Sentinel哨兵机制,主从复制?主从数据一致性?我们使用Codis去搞的。。

事务,接口幂等性

幂等性见上,一段时间内用户多次请求只能保证成功一次,比如支付接口,默写接口请求的时候 因为弱网条件下,导致用户多次发送重复请求等等,比如我项目当中的一个生活缴费(物业费水费等)接口,怎么去保证高可用呢?比如遇到弱网条件? 万一用户在你的平台缴费成功了,然后你这边收到成功的code之后呢 你去调用第三方的接口告诉人家支付金额 以及相关支付信息 这个地方如果使用MQ的话?如何去保证消息的可靠性呢?以及消息被成功消费呢?

生产者这边 如何去保证消息的可靠性:消息有一个唯一的订单编号,
消费者这边 如保证消息的成功消费:

如果你这个地方是调用的第三方接口呢 ? 你用的那种HTTPUtil?说一说他们之间的区别?这个调接口的方式如果不成功 怎么去保证在用户花钱了之后一定调接口OK呢? 这个地方我用自旋 可以理解为while(true)或者for(;😉,直到成功之后 break,如果有任何异常的code那就继续循环调直到成功。
再比如我们做的一个我负责的功能模块的UV,独立用户访问次数,一天内多次访问需要去重,当然是用的是redis的set,如果数据量比较大用户量比较大 日活很高的话,这个就要求不是很精确了,就可以使用HLL hyperLogLog,大概12K的内存就能一亿个数据;

基本算法

  • 堆排序

Java的PriorityQueue堆

 /*
  * heap底层数据结构是数组 父节点和子节点的下标是有关系的 其中peek和remove方法时O(1)
  * add和poll和无参的remove以及offer()都是O(logN)
  * parentNo*2 + 1 = leftNo parentNo*2 + 2 = rightNo  parentNo = (index-1)/2
  * */
  • 手写堆排序

  • 二分法

  • 贪心

  • 二叉树遍历

  • 动态规划

  • 链表反转 以及链表合并

leetCode原题 两个有序链表的合并


关于分布式框架Dubbo、SpringCloud等

  • 服务的注册和发现
  • 路由负载均衡
  • 异步调用?
  • 限流降级,熔断
  • 失败重试?
  • 服务下线
  • 网关层

RabbitMQ和Kafka项目中怎么去选择

  • 说一下在生产者这边如何保证消息的可靠性?

    可以基于ACK机制,如果开始事务会很影响并发性是同步的;通常生成生成消息都会有一个唯一id,不管是数据主键id还是业务流水号,基于confirm的ACK机制,RabbitMQ收到消息后会回调一个callback,里面有ack代表是否成功接收处理,还有一个消息唯一标识的参数,如果说过一段时间连这个ACK也没收到怎么去处理,我们内部会维持一个Timeout?,ack机制不仅仅是在生产者消息没法出去会触发,进入MQ以后没找到对应的exchange也会返回false,结合这个confirm的ack确认机制,自己内部也可以维护每条消息的发送状态,true就存1,false就存一个字段0

  • 消费者的如何不重复消费?

    这个需要开发者这边去保证,利用唯一性id,存redis消费之前检查一下

  • 如何保证消息消费不被丢失?

    这个也是使用confirm的ack机制,可以关闭MQ自身的ack,程序里面自己处理,如果MQ没收到消费者的ack

  • Kafka和RabbitMQ如何去选择?
  • Kafka和RabbitMQ的工作原理大概说一下

关于网络IO

  • BIO
  • NIO
  • AIO
  • webSocket和HTTP的区别
  • TCP和UDP的区别
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值