一:常见八股文
api的实用,原理,底层数据结构,查找算法
二:mysql优化
原理,数据结构等
三:redis
原理,数据结构, 集群模式等
四:kafka
运作原理,一致性,幂等性,不丢失等解决方案;
五:场景题
面试官会拿现有的一些场景 考察灵活应变能力(在于平常积累和思考)
六:难点,亮点
1. 平常生产中遇到的一些事故,怎么定位,解决的;
拿顺丰的路由回调去 按照我们的业务并发提高 ,一步步 从多线程(配置等) ,
到 kafka 自己生产,自己消费,削峰;
2. 大数据导入: 多线程的 future 解决方案,并发请求下游,这样的,利用了一些
JUC的一些特性,提高业务处理性能;
3. 可以很多说的,总结下 你们自己系统的问题,然后 从 定位 到 解决 到优化 解决方案;
七: 解决方案 & 思想:
1. 分片思想:
redis 哨兵,集群模式(hashslot机制),es的分片思想;
2. 故障转移 & 负载均衡:nginx 的故障转移 等等;
3. 日志记录:
mdc日志追踪,现有的一些解决插件 : zipkin等;
4. 流量控制:
漏斗算法,令牌桶等 常见的:google的rateLimiter , Sentinel断路由;
5. k8s的伸缩控制;
6. 问题查找和定位:
各种监控,包括上面的一些日志追踪也算方案之一;
mysql的druid 监控,一些 接口的性能健康,mysql 的慢sql 查询等等
7. 性能优化解决方案;
1. 从上到下: 业务处理,CPU密集型,io密集型 ,考虑实用多线程;
或者更优的算法处理减少时间复杂度和空间复杂度,降低执行的时间;
2. sql优化;
3. sdk的升级;
4. 硬件,网络的升级;
8. 性能优化之查询性能:
1. 考虑mysql的查询数据上限;
2. 适当冗余字段机制 减少关联查询,分库分表,多数据源处理方案(如果仅mysql);
3. 引入缓存,nosql机制 如mongo,es 等等(采用双写方案);
9. 安全方面:
1. 数据的入参简单校验 和 复杂的业务校验;
2. 安全要求比较高的数据查询权限控制; 这个需要业务统一处理,或者单个判断;
3. 软删除,持久化删除前的日志;
4. 加密、脱敏(顺丰是这样做的),全链路保护 客户的隐私;
5. 备份,持久化 删改机制;
10. 安全之数据一致性保证:
CAP 的 AP 最终一致性解决方案: 定时任务,手动重试补偿;
11. 拓展性
采用合理的 设计模式 于 spring 的实用结合起来,提升 代码结构性和 可读性;
八: 最重要的是要有自己的方法论,总结和思考问题以及解决方案;
1. 看一些书籍,比如 《凤凰架构》-- 周志明 (他的书应该都挺好的,评分超高);
2. 脚手架:
尝试摸透一些开源架构:gitee 上 搜索 Lamp (https://tangyh.top/);
3. 实操:自己用这个做个项目,然后进行总结后,学习精髓;
4. 总结: 实现属于自己的脚手架,写文档 总结技术;
九: 算法方面:
对自己的一些逻辑思考和优化有很大提升,特别是在写 方法的时候 会考虑到复用性和可用性;
总之,代码往简单的写,往深处去思考,看评论(当然算法我很菜)