2021 互联网大厂 Java 面经合集,阿里面试官必问
1、为什么使用 redis
分析:博主觉得在项目中使用 redis,主要是从两个角度去考虑:性能和并发。当然,redis 还具备可以做分布式锁等其他功能,但是如果只是为了分布式锁这些其他功能,完全还有其他中间件(如 zookpeer 等)代替,并不是非要使用 redis。因此,这个问题主要从性能和并发两个角度去答。回答:如下所示,分为两点(一)性能如下图所示,我们在碰到需要执行耗时特别久,且结果不频繁变动的 SQL,就特别适合将运行结果放入缓存。这样,后面的请求就去缓存中读取,使得请求能够迅速响应。
![](https://static001.geekbang.org/infoq/37/37442b493c5ecfa7ef51c06fbb84a0c1.png)
题外话:忽然想聊一下这个迅速响应的标准。其实根据交互效果的不同,这个响应时间没有固定标准。不过曾经有人这么告诉我:"在理想状态下,我们的页面跳转需要在瞬间解决,对于页内操作则需要在刹那间解决。另外,超过一弹指的耗时操作要有进度提示,并且可以随时中止或取消,这样才能给用户最好的体验。"那么瞬间、刹那、一弹指具体是多少时间呢?根据《摩诃僧祗律》记载
那么,经过周密的计算,一瞬间为 0.36 秒,一刹那有 0.018 秒.一弹指长达 7.2 秒。(二)并发如下图所示,在大并发的情况下,所有的请求直接访问数据库,数据库会出现连接异常。这个时候,就需要使用 redis 做一个缓冲操作,让请求先访问到 redis,而不是直接访问数据库。
![](https://static001.geekbang.org/infoq/89/8967476e396b8e9dc85ea3cc7ccf0bf2.png)
2、使用 redis 有什么缺点
分析:大家用 redis 这么久,这个问题是必须要了解的,基本上使用 redis 都会碰到一些问题,常见的也就几个。回答:主要是四个问题(一)缓存和数据库双写一致性问题(二)缓存雪崩问题(三)缓存击穿问题(四)缓存的并发竞争问题
言尽于此,完结
无论是一个初级的 coder,高级的程序员,还是顶级的系统架构师,应该都有深刻的领会到设计模式的重要性。
第一,设计模式能让专业人之间交流方便,如下:
程序员 A:这里我用了 XXX 设计模式
程序员 B:那我大致了解你程序的设计思路了
第二,易维护
项目经理:今天客户有这样一个需求…
程序员:明白了,这里我使用了 XXX 设计模式,所以改起来很快
第三,设计模式是编程经验的总结
程序员 A:B,你怎么想到要这样去构建你的代码
程序员 B:在我学习了 XXX 设计模式之后,好像自然而然就感觉这样写能避免一些问题
第四,学习设计模式并不是必须的
程序员 A:B,你这段代码使用的是 XXX 设计模式对吗?
程序员 B:不好意思,我没有学习过设计模式,但是我的经验告诉我是这样写的
![](https://static001.geekbang.org/infoq/9b/9b55d7c13172a35e7b6e311ccd760308.png)
从设计思想解读开源框架,一步一步到 Spring、Spring5、SpringMVC、MyBatis 等源码解读,我都已收集整理全套,篇幅有限,这块只是详细的解说了 23 种设计模式,整理的文件如下图一览无余!
开源分享:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】
![](https://static001.geekbang.org/infoq/ae/aecc1432ec13a23f6e8b9d13a0449bfb.png)
搜集费时费力,能看到此处的都是真爱!
评论