牛逼!蚂蚁金服面试Java后端经历!详细的Java学习指南

news/2024/7/8 1:35:17

前言

我朋友也是个写了四年Java代码的程序员,跟女友已经恋爱多年,最近突然结婚了。

他结婚以前,换了一家公司,咱俩就好久没见过面了。刚好今天出门办事碰上了,找了一家店坐一起喝酒聊天。

我聊天时打趣他:“亏得你小子运气好,还能娶到老婆。咱们这一行,不是加班就是加班,天天就是和代码过日子。”

朋友说:“做这一行也就工资看着高点,确实是每天都累死累活。我还不是一样的加班,都没时间陪老婆!”

跟着又聊到了工作,朋友听到我还在写业务代码非常意外:“你还在原来的公司做?我跳槽后就开始学习分布式架构、微服务、JVM调优、并发编程、SpringCloud等,虽然过程很是艰辛;但是后面接手做了几个大项目后就升职了,薪水也涨了不少、不然就凭以前那点工资,哪敢结婚买房。”

我于是问了问他的月薪税后28K,不由得心底一凉…瞬间觉得最该同情的是自己。同时我也有点心动了,谁不想升职加薪呢?

我和朋友倒起了苦水:自己在公司干了这么久了,工资也没有提升,每天都是写业务代码,技术也得不到提高,很焦虑。我也想自己去学点东西,增加自己的价值,就是遇到瓶颈,不知道从哪入手。

他一听就说:“现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技术),要是你上对车,自身能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的Coder而已!

你现在就是缺少进阶Java中高级的机会,去深入去学习下数据结构算法、JVM调优、分布式架构设计等等;不然你在市场上没有核心竞争力,根本拿不到高薪!时间就是金钱,我向你推荐一套免费精品Java高级教程,保证你学了以后保证薪资上升一个台阶。”

事故背景

公司最近安排了一波商品抢购活动,由于后台小哥操作失误最终导致活动效果差,被用户和代理商投诉了。经理让我带同事们一起复盘这次线上事故。

什么原因造成的?

抢购活动计划是零点准时开始,

22:00 运营人员通过后台将商品上线

23:00后台小哥已经将商品导入缓存中,提前预热

抢购开始的瞬间流量非常大,按计划是通过Redis承担大部分用户查询请求,避免请求全部落在数据库上。

缓存命中

如上图预期大部分请求会命中缓存,但是由于后台小哥预热缓存的时候将所有商品的缓存时间都设置为2小时过期,所有的商品在同一个时间点全部失效,瞬间所有的请求都落在数据库上,导致数据库扛不住压力崩溃,用户所有的请求都超时报错。

实际上所有的请求都直接落到数据库,如下图:

缓存雪崩

什么时候发现的?

凌晨01:02 SRE 收到系统告警,登录运维管理系统发现数据库节点 CPU和内存飙升超过阈值,迅速联系后台开发人员定位排查。

为什么没有早点发现?

由于缓存设置过期时间是2小时,凌晨1点前缓存可以命中大部分请求,数据库服务处于正常状态。

发现时采取了什么措施?

后台小哥通过日志定位排查发现问题后,进行了一系列操作:

首先通过API Gateway(网关)限制大部分流量进来

接着将宕机的数据库服务重启

再重新预热缓存

确认缓存和数据库服务正常后将网关流量正常放开,大约01:30 抢购活动恢复正常。

如何避免下次出现?

这次事故的原因其实就是出现了缓存雪崩,查询数据量巨大,请求直接落到数据库上,引起数据库压力过大宕机。

在业界解决缓存雪崩的方法其实比较成熟了,比如有:

  • 均匀过期
  • 加互斥锁
  • 缓存永不过期

(1)均匀过期

设置不同的过期时间,让缓存失效的时间点尽量均匀。通常可以为有效期增加随机值或者统一规划有效期。

缓存key过期时间均匀分布

(2)加互斥锁

跟缓存击穿解决思路一致,同一时间只让一个线程构建缓存,其他线程阻塞排队。

互斥访问

(3)缓存永不过期

跟缓存击穿解决思路一致,缓存在物理上永远不过期,用一个异步的线程更新缓存。

异步更新缓存

最后

针对最近很多人都在面试,我这边也整理了相当多的面试专题资料,也有其他大厂的面经。希望可以帮助到大家。

image

上述的面试题答案都整理成文档笔记。 也还整理了一些面试资料&最新2021收集的一些大厂的面试真题(都整理成文档,小部分截图)

资料领取方式:点击这里免费获取

image

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
doc/DSmxTbFJ1cmN1R2dB)**

[外链图片转存中…(img-F4jwVX2v-1618888672032)]

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


http://www.niftyadmin.cn/n/3647644.html

相关文章

用遗传算法加强足球游戏的人工智能

终于等够了三个月,杂志的约定已经到期,可以把这篇文章发表到网络跟大家分享。本文原发表于《游戏创造》杂志www.chinagcn.com,如蒙转载,请保留原文和本声明完整,并注明转载自恋花蝶的博客:http://blog.csdn…

[python]一行搞定字符串排序

[python]一行搞定字符串排序本文最初发表于恋花蝶的博客(http://blog.csdn.net/lanphaday),欢迎转载,但请保留本声明。一般情况下,python中对一个字符串排序相当麻烦: 一、python中的字符串类型是不允许直接…

白嫖党最爱!5面蚂蚁3面拼夕夕2面字节,从理论到实践!

前言 消息中间件作为分布式系统的重要成员,各大公司及开源均有许多解决方案。目前主流的开源解决方案包括RabbitMQ、RocketMQ、Kafka、ActiveMQ等。消息这个东西说简单也简单,说难也难。简单之处在于好用方便,接入简单使用简单,异…

程序员必知必会之Email篇

本文最初由恋花蝶发表于http://blog.csdn.net/lanphaday,可以随意转载,但未经同意不得增删修改,转载应保留本声明,否则追究责任。常在河边走,哪能不湿鞋;常上网上留Email,哪能不收别人邮件&…

白嫖党最爱!这位阿里P7大牛分析总结的属实到位,含面试题+答案

分布式事务 随着互联网快速发展,微服务,SOA 等服务架构模式正在被大规模的使用,现在分布式系统一般由多个独立的子系统组成,多个子系统通过网络通信互相协作配合完成各个功能。 有很多用例会跨多个子系统才能完成,比…

·python·用生成器和迭代器实现自己的xrange

python用生成器和迭代器实现自己的xrange声明:本文由恋花蝶发表于http://blog.csdn.net/lanphaday,版权所有,欢迎转载。转载时应保留声明。谢谢。用过python的朋友一定很熟悉下面这两行代码:>>> for i in xrange(0,10,1)…

直面春招!最全MyBatis中XML映射文件标签分析+示例!感悟分享

前言 关于为什么要有分布式锁这个东西,欢迎阅读我的zk分布式锁的实现,介绍了单机高并发、分布式高并发的解决方案: 用ZooKeeper实现分布式锁 这里再切入本例将使用的场景模拟:商品秒杀,或者说高并发下,对…

栈的弹出函数pop()实现方案探讨

我想就上面的你说的3、4两条谈谈。STL的确是没有返回两个参数,甚至没有返回参数。std::stack::pop方法的声明形式是void pop()。也许各个版本有所不同,但SGI STL和STLport是这样的。作为使用最广泛的两种STL实现,我们完全可以认为这是业界认为…