你知道的越多,你不知道的越多

点赞再看,养成习惯

本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西。

正文

我先描述一下bug的现象哈:


这两个输入框的值都是我从KV(Redis之类的存储中间件)里面获取到的,也是可以实时修改的,我自作聪明,想着KV里面如果没值,就默认取一个静态变量,这样有个兜底,在类加载的时候加载静态变量,我取的时候也效率高了。

这就也为我后面的Bug埋下了伏笔,问题是这个Bug烦就烦在他在预发环境是好的,线上却是坏的。

先看看代码怎么写的:


可以看到代码里面,我是在静态代码块去KV取值,如果有值就用KV的做初始值,没取到我也有默认值,我当时还在想自己的构思真巧妙,用KV比DB效率高,用常量去做兜底,不至于没配置的情况没有值,报空指针啥的。

当时一个劲给自己加油打气,一个劲的妙啊,不知道自己写了多蠢的代码。

这样写看似没什么问题,但是我这个值是可以修改的这就有问题了,而且我有几个地方还是取的变量,不是一直取的KV。

而且常量被我当变量用,也都违背了这玩意的初衷了。

我上线后,三歪就说:敖丙出大问题了,为啥我刷新一下值就不对了,再刷新值就回来了。

我惊恐万分,深知我写了BUG,我不着痕迹的擦去我鬓角的汗水,深呼吸了一下。

回答道:我代码还没写好呢,你怎么乱点,我告诉过你不要乱点的,现在你点坏了吧。

三歪好像真的以为他错了,委屈巴巴的啥也没说就默默离开了。


这个时候我马上打开电脑,也顾不上歪歪的感受了,思绪转的飞快,开始在闹海中构建整个值传递的链路。

我改了页面的值,之后我也改了这个静态变量和KV的值,但是我在线上发现我刷新页面一会是修改之后的,一会是修改之前的值.

这就奇怪了呀,主要是在预发还不能复现,这就很坑爹了,难受呀歪歪。

Tip:预发指的是,代码跟线上一样,数据库一样,环境配置不一样。

我把代码看了一遍又一遍,还是没发现问题。

在当天那个饱暖思淫欲的下午饭之后我,突然灵光一闪发现了问题的核心,预发是好的因为他是一台机器。

而我们线上的机器是负载均衡的,有两台机器,我修改一次只改了一台机器的值,另外一台没修改到。

那么问题就简单了,我们看下图:


预发情况,是单机,不管我怎么读怎么修改,每次数据都是准确的(这里我还没意识到其实每次去取变量是不对的)。

但是线上不一样,服务器启动的时候给每台机器赋值了,这样的情况如果只是读是没问题的(怪不得静态常量都是private的,能修改的话基本上都有这个问题)。

但是如果修改,你修改的请求只是打到了一台机器上,如果下次负载均衡请求到了这个机器,那么你很幸运,结果是对的,但是往往负载均衡算法就是那么公平,雨露均沾这样的情况 1/2的请求,都会拿到错误的结果。

而且这个地方的问题还有一个就是,应该是修改KV之后,修改变量,我有的地方取的是变量,因为我想每次反正都改了,取也没事。

其实正确的做法是我每次去都读KV就好了,只有KV为空的时候才去读静态变量,作为一种兜底方案,不应该去改变常量的值。

而且大家要知道,我修改KV成功万一修改常量的时候出错了呢?你取常量的值就不对了。

所以查询,修改应该这样做:


主要是想提醒大家,谨慎操作静态常量,能不变就不变,不要写这么骚的操作了,我这算少的很多 40、50台线上机器的服务,这种问题是真的难发现。

我是万万没想到,我居然写出这种代码,下次再写出来,只能让歪歪不要乱点了,免得又点坏了哈哈。

絮叨

另外,敖丙把自己的面试文章整理成了一本电子书,共 1630页!目录如下

现在免费送给大家,在我的公众号三太子敖丙回复 【888】 即可获取。

我是敖丙,一个在互联网苟且偷生的程序员。

你知道的越多,你不知道的越多人才们的 【三连】 就是丙丙创作的最大动力,我们下期见!

注:如果本篇博客有任何错误和建议,欢迎人才们留言!


文章持续更新,可以微信搜索「 三太子敖丙 」第一时间阅读,回复【资料】有我准备的一线大厂面试资料和简历模板,本文 GitHub https://github.com/JavaFamily 已经收录,有大厂面试完整考点,欢迎Star。

阿里程序员写了一个新手都写不出的低级bug,被骂惨了。相关推荐

  1. 某大厂来的水货CTO,写出了新手都不会犯的低级 Bug,被骗300W!就里就不点名了!...

    点击上方蓝色字体,选择"标星公众号" 优质文章,第一时间送达 关注公众号后台回复pay或mall获取实战项目资料+视频 转载自CSDN(ID:CSDNnews) 整理:苏宓 近日, ...

  2. 史上首例!阿里程序员写的这一行代码,被国家博物馆收藏了

    中国国家博物馆,收藏有各类文物100多万件,是我国收藏文物数量最丰富的博物馆之一. 从甲骨到价值连城的的玉器书画,这里的藏品种类繁多,无不体现着厚重的中华文明. 近日,国博又增加一件令人意想不到的特殊 ...

  3. 一个程序员的自白:我为什么写博客

    时间: 2011年 人物: 初出茅庐的臭小子, 臭石头一般坚硬的相信我将来一定会成为富二代他爹. 我来到一个大型互联网公司, 同事很nice, 管理很自由, 在这里开始了我的码农生涯. 我很敬重部门老 ...

  4. 某百度程序员中午面试一个阿里程序员,晚上去阿里面试,面试官竟是中午那个人!

    世界之大无奇不有,有些巧合简直就是天作之合,就像下面这位百度程序员和阿里程序员的故事. 某百度程序员发帖吐槽:中午面试了一个阿里程序员,问了他一些刁钻的问题,结果自己晚上去阿里面试,面试官竟然就是中午 ...

  5. 某百度程序员中午面试一个阿里程序员,晚上去阿里面试,面试官竟是中午那个人!...

    世界之大无奇不有,有些巧合简直就是天作之合,就像下面这位百度程序员和阿里程序员的故事. 某百度程序员发帖吐槽:中午面试了一个阿里程序员,问了他一些刁钻的问题,结果自己晚上去阿里面试,面试官竟然就是中午 ...

  6. 面试了一个 39 岁程序员,全程让我都感觉有点慌.....

    招人背景 首先说下公司招人的背景吧,公司要招的是一个研发经理的岗位,负责管理技术团队的各个项目组,领导只给了我两个要求: 1)技术可以 2)管理有一套 说白了,这是一个技术+管理的岗位,不是纯粹的管理 ...

  7. 35岁php程序员失业,阿里程序员吐槽:35岁失业真是一个死结

    最近在互联网职场论坛,一位阿里程序员发帖吐槽. 前几天,和一位技术总监聊天,又提到了35岁这个问题. 他的团队现在招人,原则上不招大龄程序员,我问他原因,他回答说:"事多,精力差,不能加班. ...

  8. 某程序员纠结:一个年薪80万一个阿里P7月薪38K,该怎么选?

    一名从事8年的程序员网友在求职论坛上表达了最近纠结苦闷的心情,不知道该如何选择offer,拿了两个offer,一个现金每年80万,大集团下区块链技术研发带团队10人+高级技术经理,另一个阿里巴巴新兴事 ...

  9. java中级招聘要求怎么写_Java程序员如何进阶,一般招聘都有哪些要求?

    原标题:Java程序员如何进阶,一般招聘都有哪些要求? 作为当前市场上应用领域最广.人才需求最大的编程语言,Java一直是人们入行IT行业的选择.然而,随着大批量的人涌入Java开发行业,企业的招聘门 ...

最新文章

  1. JavaScript小记
  2. jni和java之间字符串的转换
  3. UDP调用connect
  4. Nacos自定义 namespace与group配置
  5. 2016 年 ACM/ICPC 青岛区域赛 Problem C Pocky
  6. php管道的概念,让你的php命令行程序处理管道数据
  7. 轻松理解Spring框架的基本思想
  8. Anigram单词(51Nod-1095)
  9. Windows Server 2008 将与 Visual Studio 2008 和 SQL Server 2008 于2008年2月27 日在洛杉矶共同发布...
  10. 74.iptables规则备份和恢复,firewalld
  11. c语言 10^30,^ 在C语言中是什么意思?
  12. 小米扫地机器人原地不动_小米扫地机器人的4个不可思议
  13. 创造or变革:卡萨帝为何能重塑高端品质生活?
  14. nginx虚拟主机配置实例
  15. TextMesh Pro不能显示中文的解决办法是创建字贴图,常用汉字3500+特殊字符
  16. javascript高级进阶
  17. 仿QQ聊天界面里边的相册(QQ相册)
  18. 判断是否是支付宝客户端环境和支付宝版本
  19. Pycharm下同一目录py文件不能相互调用?
  20. hi3516dv300 u-boot, 内核, 文件系统编译移植

热门文章

  1. 图片渲染(图像编码原理)
  2. Gos ——BIOS与继承者MBR
  3. 人民银行招聘考试计算机类真题,中国人民银行招聘计算机类笔试试题大全(多套试题包含答案,考友经验分享试题分析,最全整理资料).doc...
  4. 关于post数据服务器端接收不全
  5. 软件构架的评估方法:ATAM
  6. 北京积分落户2021年新政策细则详解
  7. SLE46C-40.K44P-M12单光速安全传感器
  8. Quidem repellendus similique reiciendis quas.ExTable blond sorte bcepturi voluptatibus ipsa aliquid.
  9. 许石林:《赤壁》是《无极》的另一极
  10. python没有英文基础能学吗-我没有英文基础,可以学PYTHON编程么