Java架构师教你如何突破瓶颈,3面直接拿到offer
Posted Java范德萨
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java架构师教你如何突破瓶颈,3面直接拿到offer相关的知识,希望对你有一定的参考价值。
前言
都知道MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
所以作为一名开发人员,掌握好MyBatis的使用是非常有必要的,特别是像阿里、腾讯等大厂都使用广泛,那么如何能够达到“精通”MyBatis的程度?今天就来好好谈谈。
下面简单介绍一下这份MyBatis源码笔记,每个章节都是深入解析了源码底层在PDF里边有。为了让大家更好的学习MyBatis技术,我也是第一时间展示给大家了!
事故背景
公司最近安排了一波商品抢购活动,由于后台小哥操作失误最终导致活动效果差,被用户和代理商投诉了。经理让我带同事们一起复盘这次线上事故。
什么原因造成的?
抢购活动计划是零点准时开始,
22:00 运营人员通过后台将商品上线
23:00后台小哥已经将商品导入缓存中,提前预热
抢购开始的瞬间流量非常大,按计划是通过Redis承担大部分用户查询请求,避免请求全部落在数据库上。
如上图预期大部分请求会命中缓存,但是由于后台小哥预热缓存的时候将所有商品的缓存时间都设置为2小时过期,所有的商品在同一个时间点全部失效,瞬间所有的请求都落在数据库上,导致数据库扛不住压力崩溃,用户所有的请求都超时报错。
实际上所有的请求都直接落到数据库,如下图:
什么时候发现的?
凌晨01:02 SRE 收到系统告警,登录运维管理系统发现数据库节点 CPU和内存飙升超过阈值,迅速联系后台开发人员定位排查。
为什么没有早点发现?
由于缓存设置过期时间是2小时,凌晨1点前缓存可以命中大部分请求,数据库服务处于正常状态。
发现时采取了什么措施?
后台小哥通过日志定位排查发现问题后,进行了一系列操作:
首先通过API Gateway(网关)限制大部分流量进来
接着将宕机的数据库服务重启
再重新预热缓存
确认缓存和数据库服务正常后将网关流量正常放开,大约01:30 抢购活动恢复正常。
如何避免下次出现?
这次事故的原因其实就是出现了缓存雪崩,查询数据量巨大,请求直接落到数据库上,引起数据库压力过大宕机。
在业界解决缓存雪崩的方法其实比较成熟了,比如有:
- 均匀过期
- 加互斥锁
- 缓存永不过期
(1)均匀过期
设置不同的过期时间,让缓存失效的时间点尽量均匀。通常可以为有效期增加随机值或者统一规划有效期。
(2)加互斥锁
跟缓存击穿解决思路一致,同一时间只让一个线程构建缓存,其他线程阻塞排队。
(3)缓存永不过期
跟缓存击穿解决思路一致,缓存在物理上永远不过期,用一个异步的线程更新缓存。
总结
面试建议是,一定要自信,敢于表达,面试的时候我们对知识的掌握有时候很难面面俱到,把自己的思路说出来,而不是直接告诉面试官自己不懂,这也是可以加分的。
以上就是蚂蚁技术四面和HR面试题目,以下最新总结的最全,范围包含最全mysql、Spring、Redis、JVM等最全面试题和答案,仅用于参考
围包含最全MySQL、Spring、Redis、JVM等最全面试题和答案,仅用于参考
[外链图片转存中…(img-c8t8FQKU-1623304980382)]
以上是关于Java架构师教你如何突破瓶颈,3面直接拿到offer的主要内容,如果未能解决你的问题,请参考以下文章
七年iOS架构师教你如何一举拿下35K的Offer,(附面试技巧)