面试准备指导大纲 💯
**首先我们需要明确一点,那就是面试官问的问题,一定大部分都是围绕你简历上的内容来的**,你写了啥,面试官就问啥,所以对于自己没有准备好的内容,那就别写在简历上就好了,比如你对于消息队列这块还没有完全掌握,那消息队列相关的内容就别写可以了。
**针对这个项目,围绕这个项目的简历内容,需要准备的内容我大概罗列了下**,大部分在教程中都已经有了,对于没有的部分,大家可以按照关键字去搜索相关的文章或者博客来学习:
1. 短链系统的基本工作原理,也就是 HTTP 的 301 和 302 重定向状态码
2. 生成压缩码的算法,本项目使用的**雪花算法**和 **MurmurHash 算法**,这两个算法的原理需要搞清楚,雪花算法网络上有很多相关文章,MurmurHash 需要了解的就是为什么这里用 MurmurHash 而不用别的 Hash 算法?需要搞清楚 MurmurHash 相比于其他 Hash 算法的优势在哪
3. 项目使用了基于 Redission 的**分布式锁**防止生成压缩码时发生并发冲突,首先肯定要了解 Redission 分布式锁的原理,除此之外,还需要了解下,除了这种方式,还有其他的实现分布式锁的方式吗?
4. 项目使用了使用 TransmittableThreadLocal 来存储重定向任务,需要了解下 **ThreadLocal**,**InheritableThreadLocal**、**TransmittableThreadLocal** 的区别以及各自的原理,为什么项目中要用 TransmittableThreadLocal 而不是 ThreadLocal?
5. 项目使用了 **Dubbo** 暴露 RPC 接口,需要去了解下 Dubbo 的架构和原理,Dubbo 使用 **Zookeeper** 作为注册中心,所以也需要去了解下 Zookeeper,包括分布式理论等相关知识。
6. 项目使用了 Kafka 异步处理存储短链转换记录,需要去了解下 Kafka 的架构和原理,当然如果你对于 RocketMQ 或者其他**消息队列**比较熟悉,那么直接把简历上的 Kafka 换成你熟悉的消息队列就好,没必要再多去学习 Kafka 了
7. 项目使用了 Spring Schedule **定时任务**统计分析短链访问次数,需要了解下 Spring Schedule 的原理,同理,如果你对于其他的定时任务框架比如 xxlJob,那么直接把简历上的 Schedule 换成你熟悉的定时任务框架就好
8. 项目使用了 **BloomFilter** 解决伪造压缩码攻击造成**缓存穿透**的问题,首先需要了解下缓存穿透问题是什么,包括顺带的要去了解**缓存击穿**、**缓存雪崩**问题(性能优化中也提到了使用缓存预热防止服务重启导致的雪崩),然后需要去了解 BloomFilter 的原理是什么
9. 项目使用 Redis 和 Lua 脚本实现接口**限流**,需要了解下这种方法的实现方式,然后还需要了解限流的其他实现方案
10. 项目使用了 **Spring WebFlux** 而不是 **Spring WebMVC** 来处理并发请求,需要了解这俩的区别以及各自的工作原理,另外,WebFlux 的底层模型是 **Reactor**,需要了解 Reactor 模型的原理,这些在我们的题库中都有相应的答案
11. 项目基于 **DDD 架构**,关于这一点,如果各位觉得自己还没有掌握 DDD 架构,那就不要在简历中写这是 DDD 架构了
