经历了滴滴的幸福裁员潮,又迎来了人人车硬刚劳动法,出现了苏宁管培生巨婴,伴随著网易的大面积裁员,各大企业一波未平一波又起。

对于技术在手,说走就走的IT工程师而言,裁员不就是换个公司继续填坑吗?大家都习以为常了。为了进入更好的坑,IT工程师不断的提升技术,不断提升能力。

小编作为一名资(diao)深(si)级工程师,总结了5个经典面试题

一 redis分散式锁过期时间内没执行完 怎么解决?

分散式锁超时没有执行完,是没有办法避免的,因为锁过期不会通知客户端,只能尽量不在锁内执行长任务; 从业务上解决的话,需要为锁值加版本号。删除前判断版本号;

二 rocketmq 延迟消息怎么实现的?

RocketMQ提供了延迟消息类型,简单来说就是生产者在发送消息的时候指定一个延迟时间,当达到延迟时间之后消息才能被投送到消费者。

生产者将延迟消息发送到Broker,Broker区分普通消息与延迟消息

消息如何保证不被消费者拉取到的(RocketMQ将消息以SCHEDULE_TOPIC_XXXX为topic将延时消息持久化,等到达延时消息之后再以原有的topic重新保存)

对于延迟消息,常用方法是用时间堆来实现的消息队列保存消息事件,额外线程定时检查堆顶进行消息投放。

三 myisam 索引数据结构是什么?

MYISAM使用b+tree,索引文件和数据文件分离。索引文件仅保存记录所在页的指针(物理位置),通过这些地址来读取页,进而读取被索引的行。

四 消息队列的使用场景

消息队列主要用于业务非同步解耦,流量请求削峰,业务通信,广播组播等事务。

五 redis单线程为什么这么快?

redis数据操作基于内存操作,而不是基于磁碟IO操作的,所以不需要等待磁碟IO就绪。单线程不需要出现线程切换的代价,故redis能够采用单线程。与之相对的,mysql数据操作是基于磁碟IO的,单线程是绝不可能的。至于快,内存操作本来就快的,这与单线程和多线程没有关系的。

欢迎评论&关注


推荐阅读:
相关文章