如何应对缓存穿透和缓存雪崩问题?讲的明明白白!
Posted 努力编程进阶中
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何应对缓存穿透和缓存雪崩问题?讲的明明白白!相关的知识,希望对你有一定的参考价值。
开头
最近一个哥们去面试某当红大厂了,其中几个他印象深刻的面试题你们品品:
1、介绍下如何对mysql SQL语句进行分析和优化?
2、Redis 怎样实现的分布式锁?
3、如何实现本地缓存和分布式缓存?
4、说一下 JVM 的内存布局和运行原理?
5、RocketMQ 是怎么存储消息的?源码中有哪些高可用、高性能的设计?
面试官不愧是大佬,一层接一层的问过来,问完**“Redis 怎样实现的分布式锁”又问“单机锁有哪些?它为什么不能在分布式环境下使用?”**
由于平时只是改改以前的框架代码,哥们当场懵逼!面完瞬间觉得自己的技术弱爆了!结果当然是挂!
京东一面凉经
- object的方法,7大方法
- synchronized方法讲解
- synchronized方法实现原理
- volatile关键字的原理
- 锁的分类
- 偏向锁讲解
- NoClassDefFoundError和ClassNotFoundException的区别
- 追问,ClassNotFoundException是不是只发生在编译时,运行时可不可以
- 类加载机 制
- redis过期策略及内存淘汰机制
- mysql的索引种类4种
- Innodb和myIsam的区别
- Innodb的索引结构
- B+树的优缺点
- 海量数据的索引有什么影响
- 选择联合索引还是多索引,最左前缀的规则
- CAP理论的关系
- 见过哪些系统,保证两个牺牲一个的
- 一致性Hash
算法题:
给一个正数N,求这个N的所有的因子分解;
N = 12;
Ans = {12},{6,2},{3,4},{3,2,2}
解法:递归
京东二面凉经
- 自我介绍+项目
- 项目中的异步怎么做的?具体说说
- 用户密码的安全性怎么保证的?
- mybatis底层怎么实现的?(不会)
- tcp中拥塞控制和流量控制有什么区别?
- 流量控制具体怎么控制的?
- 拥塞控制具体的算法怎么样的?
- Java中的锁有用到哪些?
- 说说syn、re和cas的区别?
- cas具体怎么现实的?
- 进程和线程的区别?具体讲下什么情况下是多进程,什么情况下是多线程?
- java中的map有哪些?各个简单介绍下
- hashmap的底层数据结构是怎么样的?
- 有没有map是按key的值排序的?底层怎么现实的?
- 类的加载流程?具体每一步做了什么?
- Spring Bean 的作用域。
两道算法题
1、有序二维数组找target,找到返回坐标,找不到返回[-1, -1];
2、树的根节点到叶子节点的所有路径和。
失败乃成功之母
以上就是第一次京东面试的全部内容了,一面二面是接着面的,时长2个小时,经历下来,就一个感受:京东的面试太硬核了,就是会一直问到底,看你到底掌握到什么程度,如果掌握的不深刻很容易就被问出来了。二面完之后就让粉丝回家了,PASS的也是很含蓄了。
但是你以为这样就结束了?当然没有!
据我所知京东跳动投递简历是有三个月的锁定时间
,所以这次失败了不代表没有下次。
然后就总结了经验并为下次面试作准备并开始了三个月的闭关之旅。
1. 恶补JAVA并发底层的知识,尤其是synchronized,volatile和hashmap的
2. 刷算法题,需要详细复习下数据结构与算法的知识
3. 了解高并发下的问题解决方案与性能调优
4. 阅读是spring框架的源码,提升自己的竞争优势
重整旗鼓再战京东
这次面试官果然上来就直接问:看你6月份也来面过京东但没有通过,你觉得你现在的优势在哪里呢??
回答:因为上次来贵公司面试没有准备充分,同时在之后认识到自己有些技术方面确实明显不足,所以回去经过系统的学习,我觉得这次能够胜任这份工作!
然后面试官看着他笑了笑(应该是欣赏的意思吧),然后第二次面试就正式开始了!
因为第二次面试与第一次相差不大,第二次面试内容通过知识点的分类给大家分享出来。
JVM
- 什么样的垃圾才被回收?
- 如何利用JFR和JMC监控Java程序?
- 解释下Java虚拟机内存模型
- JVM垃圾收集机制
- 什么样的对象会进入老年代
- 讲一下OOM与调优
MySQL
- 说说自己对于 MySQL 常见的两种存储引擎:MyISAM与InnoDB的理解?
- 数据库索引了解吗?
- 为什么索引能提高查询速度?
- Mysql如何为表字段添加索引?
- 对于大表的常见优化手段说一下?
spring
可能是简历上专门写了阅读过源码,所以这次问spring的比较多
- Spring 框架中都用到了哪些设计模式?
- Spring事务的实现方式和实现原理
- Bean Factory和ApplicationContext有什么区别?
- 什么是Spring中的依赖注入?
- IOC(依赖注入)有哪些不同类型?
- 解释Spring Bean的生命周期?
- 有哪些重要的bean生命周期方法?你能重写它们吗?
分布式
- 为什么要用 redis缓存?
- 为什么要用 redis 而不用 map/guava 做缓存?
- redis 和 memcached 的区别?
- redis 常见数据结构以及使用场景分析?(String,Hash,List,Set,Sorted Set)
- redis 设置过期时间。
- redis 内存淘汰机制(MySQL里有2000w数据,Redis中只存20w的数据,如何保证Redis中的数据都是热点数据?)
- redis 持久化机制(怎么保证 redis 挂掉之后再重启数据可以进行恢复)?
- redis 事务。
- 缓存雪崩和缓存穿透问题解决方案。
- 如何解决 Redis 的并发竞争 Key 问题。
- 如何保证缓存与数据库双写时的数据一致性?
- 什么是消息队列?为什么要用消息队列?
第二次面试总结
第二次去京东面试因为准备的时间比较长,所以面试问题基本都在意料之中,最终也成功拿下了京东的offer,可喜可贺!
总结:心得体会
既然选择这个行业,选择了做一个程序员,也就明白只有不断学习,积累实战经验才有资格往上走,拿高薪,为自己,为父母,为以后的家能有一定的经济保障。
学习时间都是自己挤出来的,短时间或许很难看到效果,一旦坚持下来了,必然会有所改变。不如好好想想自己为什么想进入这个行业,给自己内心一个答案。
面试大厂,最基本的就是夯实的基础,不然面试官随便一问你就凉了;其次会问一些技术原理,还会看你对知识掌握的广度,最重要的还是你的思路,这是面试官比较看重的。
最后,上面这些大厂面试真题都是非常好的学习资料,通过这些面试真题能够看看自己对技术知识掌握的大概情况,从而能够给自己定一个学习方向。包括上面分享到的学习指南,你都可以从学习指南里理顺学习路线,避免低效学习。
大厂Java架构核心笔记(适合中高级程序员阅读):
握的大概情况,从而能够给自己定一个学习方向。包括上面分享到的学习指南,你都可以从学习指南里理顺学习路线,避免低效学习。
大厂Java架构核心笔记(适合中高级程序员阅读):
以上是关于如何应对缓存穿透和缓存雪崩问题?讲的明明白白!的主要内容,如果未能解决你的问题,请参考以下文章