前言
作为同时具备高性能、高可靠和高可扩展性的典型键值数据库,Redis不仅功能强大,而且稳定,理所当然地成为了大型互联网公司的首选。
众多大厂在招聘的时候,不仅会要求面试者能简单地使用Redis,还要能深入地理解底层实现原理,并且具备解决常见问题的能力。可以说,熟练掌握Redis已经成为了技术人的一个必备技能。
但是,在学习和使用Redis的过程中,总不可避免地遇见一些棘手的问题,比如:
- Redis的key和数据结构应该怎么设计?有什么最佳实践?
- Redis集群如何均衡数据?又如何横向扩展?
- 怎么保证数据的一致性?热点数据的问题怎么解决?
- RDB持久化生成的数据快照,每次更新是全量更新还是增量更新?
- 缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题怎么解决?
- 如何高效阅读Redis源代码?
我根据自己多年的从业经验,梳理了一套系统的Redis学习方法。将纷繁复杂的Redis知识和问题归纳在“两大维度,三大主线”这个框架之中,帮助读者建立起系统观和全局观,从而彻底搞懂底层实现原理。让我们来看看大体内容
四面阿里
面试岗位是研发工程师,直接找蚂蚁金服的大佬进行内推,参与了阿里巴巴中间件部门的提前批面试,一共经历了四次面试,拿到了口头offer。
一面:
- 自我介绍
- 项目中做了什么,难点呢。
- Java的线程池说一下,各个参数的作用,如何进行的。
- Redis讲一下
- 分布式系统的全局id如何实现。用zookeeper如何实现的呢,机器号+时间戳即可。
- 分布式锁的方案,redis和zookeeper那个好,如果是集群部署,高并发情况下哪个性能更好。
- kafka了解么,了解哪些消息队列。
- 想做业务还是研究。
- 然后出了一道题,linux的访问权限是rwx格式的。使用一个类支持访问权限的增删改查,并且注意使用的数据格式以及方法效率,规范。给了一个多小时写题。
耗时将近30分钟。
二面:
- 介绍你做的项目和其中的难点。
- 上次面试官问的问题,反射的作用是什么。
- 数据仓库,多线程和并发工具等。
- 私有云,docker和k8s等。
- 了解哪些中间件,dubbo,rocketmq,mycat等。
- dubbo中的rpc如何实现。
- 自己实现rpc应该怎么做
- dubbo的服务注册与发现。
- 听说我是非科班,于是问了些排序算法
耗时将近30分钟。
三面:
三面不是面试&