首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐
2025年6月1日 星期日 9:47pm

假如那一天,我真的撂挑子不干了……

  • 24-03-05 03:04
  • 2759
  • 10702
blog.csdn.net

640?wx_fmt=gif

从高中开始接触编程,大学通过校招实习生进入腾讯,做过一线技术小兵,带过团队,做过产品——十年长路,从技术新人到资深大牛,作者大飞将在本文中分享他的程序员进阶之路。

640?wx_fmt=jpeg

作者 | 大飞

本文经授权转自大飞码字

2012 年的时候,我参与了一个项目,我觉得那个项目是我职业生涯的一个转折点。经过那个时间节点后,我在能力、视野、心理上都获得了巨大的成长,也为自己后面的发展奠定了基础。


640?wx_fmt=png


当时产品刚刚站稳了脚,市场总算攻下来了,后台技术上,面临的问题是稳定性和成本。

当时的技术总监找到我和我的 leader,说目前的业务发展越来越快,用户增长迅速,业务需求也多,而目前的存储存在三个问题:

1. 机器的性能没有充分发挥出来;

2. 运维不够自动化;

3. 灾备能力不够好。

希望我们能自己研发一个。性能上要有三倍的提升,而且运维便利性和灾备能力要有质的提升。

当时听完,既兴奋又觉得压力山大。

兴奋的是可以大干一场,做个分布式存储,还是很牛的。但对于老大提出的目标,自己心里没底,不知能不能达标。

之后团队就开始讨论,开始设计了。我们很快有了方案,来回跟技术总监过了几次,大家觉得方案没问题后,就开始搞了。这里,因为没有充足的时间做业务摸索和方案调研,也给后面留下了巨大的坑!

我用了一个月的时间,完成了编码的工作,再用了两个星期进行了各种线下测试。当时以为自己很牛,上面给的是三个月,自己一个多月就完成了。


640?wx_fmt=png


接下来,才是噩梦的开始。

第一天,线上验证的结果就狠狠地打了一把脸。bug 数量超出想象,而且有各种奇葩的 bug。后面又花了两个星期,加固各种测试,修复 bug,总用时两个月后,再次上线。

我小心翼翼地采用灰度的方式来进行再次验证。找了台机器,慢慢放量,经过一个星期的时间,终于在可见范围内没有 bug 了。

后面又灰度了几台机器,在灰度到一台访问量高的机器时,又出问题了。机器的磁盘性能顶不住了,晚上高峰期的时候,又发现网卡流量也撑不住了。

当然慌得不行,感觉完蛋了,时间期限也快到了,性能不但没有达标,还比原来的系统差了。

我 leader 知晓这个事情后,也一起加进来,想解决方案。我们又折腾了一周,终于搞清楚了性能问题,也想出了应对的方案。

后面我 leader 也加入进来,一起编码,一起 review 代码和测试。历经一个月后,再次上线。

那一个月,是我最难熬的时间。因为已经上线了几台机器,要回退回去,又要折腾好长时间,而且机器还要留着做性能试验。

所以我当时白天要写代码、测试,晚上高峰期又要盯着那一触即崩的系统,周六日也要看着。简直就是精神和体力的双重煎熬。

我记得有一个周六,我同学从深圳过来,吃完饭后,准备去唱 K。结果手机突然收到个报警,我只能杀回公司处理 。那时候感觉这简直就是一份非人的工作,有好几次想辞职不干了。

不过当时又想起毕业时,导师说的,离职都不怕了,工作还有什么好怕的。于是就继续干下去了。当然心里就一个念头,要搞定它,都没想什么 996 了,几乎是 7 *24 小时待命。

最后,总用时四个多月,终于发布了第一个稳定、性能达标的版本。

后面这个存储系统随着业务的扩大,不断升级改进,最终整个部门几乎百分之九十五的业务,都使用了这套存储系统。

虽然我最后离开了存储团队,但那段经历让我记忆犹新。现在回过头来看,有几点感悟:

没有规范的流程,只有先扛住再优化

规范的软件开发流程,在高速发展的互联网产品部门似乎并不存在。

回想起当时的团队,整体开发团队好像不超过 40 人,而且有大量的业务需求。

在当时要找个专家评审团,评审一番,再做个业务调研,做个详细架构的设计,再来排期,一步一步地实施,按正常流程下来,估计要耗费一年以上的时间,等到那个时候,业务都已经凉凉了。

事实证明,在当时的业务快速发展,人力资源受限的情况下,先搞上去顶住,再慢慢地做优化是对的,虽然不符合传统的软件开发流程。

业务访问模式和存储模型的匹配

这个感悟跟技术强相关。当时接到这个存储系统的任务时,对存储模型的理解,只停留在 MySQL B+ 树的层面。

直到后面,才深刻地理解到,存储模型的设计是跟业务访问模式强相关的。而业务访问模式的理解,来自对业务的深刻理解和对众多子业务的归总和抽象,还有一个是对未来业务发展的预判。

第一点是需要对已有的业务系统做深入的调研和探讨;第二点是对未来的预判,需要敏锐的业务洞察力和技术预判能力。

所以,业务跟技术不分家,是相辅相成的。

互联网技术有很多都是倒逼出来的

当时的第一个版本,你可以认为是摆不上台面的东西,只是经过各种折腾,它终于慢慢跑了起来。

一开始的时候,它只用在了一个业务系统上面。但因为当时的性能在我们特定的业务场景下已经超过了 MySQL 的性能,而且灾备能力也优于 MySQL,系统的口碑在团队内部就慢慢传开了。

一方面,我们不断在内部兜售我们的系统,希望业务接入,另一方面,业务团队也不断给我们提出新的需求和挑战。

虽然整个团队的人员一直都不多,最高峰时好像也不到20人,经过几年的发展,经过各种业务不断的锤炼、优化,系统却慢慢强大了起来。

去年基于这个系统写了一个 paper,还被顶级的存储会议 VLDB 收录。

虽然我那时已经离开了存储团队,去了业务部门。不过我仍感慨,当年那一坨仅仅可以跑起来的代码,如今竟成长为一个如此优异的系统,我内心也是倍感欣慰。

仔细想想,也因为有了这个伟大的产品,才倒逼出了这个优异的系统和优秀的技术。

能力、视野、心理素质

完成那一次艰难的任务后,我并没有马上被升职、被加薪。我还是一如往常地做着个小兵,写着我的代码。

但我明显地感觉到,我的技术深度、技术视野和心理素质有了一个质的变化。

在技术深度上。我在跟其他业务同事探讨技术方案的时候,有时会惊讶,“这个不是很简单吗?”,“这个不是常识吗?”,有一段时候,我有点困惑,怎么他们连这个也不懂。

后面我才意识到不是这些东西简单,而是因为自己一直在思考这些问题,权衡各种方案。在自己的脑海里,很多东西已经变成了一种“常识”,一种自然的逻辑。而有些同事,他没有做过基础架构的事情,所以他并不清楚。

在技术广度上,我看很多其他的系统设计,似乎可以一眼看透了。跟负责人聊聊他的业务痛点,自己脑子里就自然出现了最合适的方案。

因为发现无论业务怎么变化,在后台架构领域,业务会遇到的问题基本都是差不多的,虽然表现形态不同,但本质其实一样。你深入理解了本质,很多设计工作,其实就是在权衡成本和收益,剩下的就是体力活了。我相信这点在其他的技术领域也是相同的。

在心里层面,我觉得那次的成长非常巨大,好像经历那次之后,自己心理上再也没有遇到更加难熬时期。后面的工作任务中,其实也有很难的内容,但自己好像有了一种发自内心的自信,会有压力和紧张,但心里有底气——一定可以搞出来,只是时间问题。我觉得这种技术自信,也源自于那一次的历练。

结语

那是一次职业技能和心理素质双重考验并带来成长的一个经历。那个时期过后,我对技术工作突然有了很大的信心,感觉困难都是可以解决的,而且心理素质、抗压能力都获得了巨大的提升。

到现在,我也依然很感激那次经历给我带来的成长。突然想起了一个兔子拔萝卜的图片,当你觉得最艰难的时候,也可能是收获最大的时候。为处于困难,处于压力中的同学们共勉!

640?wx_fmt=jpeg

(图源网络)

声明:本文经作者授权转载,如需转载请联系原作者。

640?wx_fmt=png

640?wx_fmt=jpeg

作为码一代,想教码二代却无从下手:

听说少儿编程很火,可它有哪些好处呢?

孩子多大开始学习比较好呢?又该如何学习呢?

最新的编程教育政策又有哪些呢?

下面给大家介绍CSDN新成员:极客宝宝(ID:geek_baby)

戳他了解更多↓↓↓

640?wx_fmt=jpeg

 热 文 推 荐 

☞ 养生 996 的崛起:马云竟给他最痛恨的「兔子」站台?

☞ 技术头条

☞ 程序员的代码为什么永远写不完?

☞ 19 岁当老板,20 岁 ICO 失败,编程少年的创业辛酸史

☞ 人工智能先驱 Nils Nilsson 去世,吴恩达、Yann LeCun 悼念!

☞ 澳洲生活7年, 前阿里程序员谈我们的区块链差距究竟在哪?

☞ 关于谷歌云,你应该知道的一切!| 技术头条

☞ 打开阿兹海默之门:华裔张复伦利用RNN成功解码脑电波,合成语音 | Nature

☞ 她说:为啥程序员都特想要机械键盘?这答案我服!

 
 

System.out.println("点个在看吧!");
console.log("点个在看吧!");
print("点个在看吧!");
printf("点个在看吧!\n");
cout << "点个在看吧!" << endl;
Console.WriteLine("点个在看吧!");
Response.Write("点个在看吧!");
alert("点个在看吧!")
echo "点个在看吧!"

你点的每个“在看”,我都认真当成了喜欢

程序人生
微信公众号
笑谈开发轶事,品味程序人生。

更多内容请见: python3案例和总结-专栏介绍和目录

文章目录

    • 1. 数据结构示例
    • 2. 增(Add)
      • 2.1 在列表末尾添加一个字典
      • 2.2 在列表指定位置插入一个字典
    • 3. 删(Delete)
      • 3.1 删除指定索引的字典
      • 3.2 删除指定条件的字典
      • 3.3 删除最后一个字典
      • 3.4 清空列表
    • 4. 改(Update)
      • 4.1 修改指定索引的字典
      • 4.2 修改指定条件的字典
    • 5. 查(Query)
      • 5.1 查找指定索引的字典
      • 5.2 查找指定条件的字典
      • 5.3 查找指定字段的值
      • 5.4 查找字典中是否存在某个键
    • 6. 综合示例
    • 7. 输出结果
    • 8. 注意事项
          • 1. 列表里面嵌套字典,对字典中数据的删除
          • 2. 列表里面嵌套字典,对字典中数据的修改和添加

在 Python 中,列表里嵌套字典是一种常见的数据结构,通常用于存储复杂的数据(如 JSON 数据)。以下是对这种数据结构的增删改查操作的详细说明和示例代码。


1. 数据结构示例

假设有一个列表,其中嵌套了多个字典,例如:

data = [
    {
   "id": 1, "name"
  • 1
  • 2
数据知道的成长之路
微信公众号
成长进阶、技术分享、资源获取
注:本文转载自blog.csdn.net的CSDN 程序人生的文章"https://blog.csdn.net/csdnsevenn/article/details/89596858"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top