鱼皮的打工日记
快来分享你的内容吧~
2023-02-14·后端查看全文#鱼皮的打工日记# 很久没写工作日记了,一方面是工作比较平淡、不会一直有值得分享的内容,另一方面是确实太忙了 hh。 但今天比较特殊,决定分享一下~不是因为今天是情人节(祝有情人终成眷属),而是因为今天我尝试了一种新的工作模式,也就是用最近很火的 chatgpt AI 辅助写代码,意外地发现效率...+6
鱼友0412:他已经成为鼠鼠我的私人老师了[害羞]154210分享- 2022-07-01·后端
【打工日记】用 ChatGPT 辅助写代码
#鱼皮的打工日记# 很久没写工作日记了,一方面是工作比较平淡、不会一直有值得分享的内容,另一方面是确实太忙了 hh。 但今天比较特殊,决定分享一下~不是因为今天是情人节(祝有情人终成眷属),而是因为今天我尝试了一种新的工作模式,也就是用最近很火的 chatgpt AI 辅助写代码,意外地发现效率提高了很多! 我今天的工作场景是这样的,要把一个老的 Python 系统用 Java 来重构。我们知道不同的编程语言写业务逻辑无非就是语法上的差异,人工去修改调整其实效率是很低的,所以我尝试使用 Chatgpt 来帮我做编程语言的翻译工作~ 结果它不仅翻译出来了,还提醒我要导什么包!(如图 1 - 3) 绝大多数语法都是正确的,我只需要略做修改即可。 你还可以让他帮你解释一下代码的作用哈哈(如图 4),他甚至同时解释了 Python 和 Java 版本的代码,感觉比我讲的都清晰! 通过尝试,我发现它翻译工具类函数的准确性还是很高的,如图 5,它还分析出了这玩意是请求头参数。 接下来,我需要根据一个 SQL 表的结构来生成 Java 对象,可以轻松生成 get set 版本和 lombok 版本的代码(如图 6 - 7 )。 有趣的事,你还可以问他刚刚发生了什么,对我这种记忆力差的人很有用!🐶(如图 8) 此外,它也可以自动生成 Mybatis 的 xml 文件(如图 9)。 感觉这比我的 SQL 之父项目智能多了!心里一万句妈卖批啊! 其实以前 chatgpt 刚火的时候我就去体验了,但当时感觉一般般。经过这一阵子的研究,我基本学会怎么用它了。而且因为它的确能辅助我的工作,我现在算是对它彻底改观了~ 当然,我看到也有同学觉得 chatgpt 很一般。因为它目前毕竟是一个工具,工具好不好用,要看你是否需要它、以及会不会利用它对吧。 比如不是什么东西都能依赖 Chatgpt 来生成,但是作为一个参考方案的提供者还是很不错的。 另外我发现,不同的提问方式 Chatgpt 的回答也是天差地别,我之前不会用的时候也觉得它比较一般,但现在回过头来看原来是自己当时不会用、不会提问。AI 和人一样,如果你连自己的问题都描述不清楚,那凭什么要求它给你准确的答案呢?AI 是训练出的智能,但不是神! 所以学会提问真的真的非常重要!!! 最近也有很多同学焦虑 AI 会不会替代人呀?说说我个人的观点吧。 我个人认为,无论国家再怎么管控,AI 注定会淘汰部分工种的人!但它不是突然说某个工作灭绝了,而是一点一点地减少用工成本和人数。 问大家一个问题:你觉得你自己的工作现在可以被 AI 替代么?如果不能的话,你能否用 AI 提高效率呢?试想一下,如果你一天搞完了原本两天的活,剩下多的那一天,老板不就可以让你干其他同学的活么,那么另外那个同学何去何从呢对吧? 真正到了 AI 时代,吃亏的是不会利用、不能驾驭 AI 的人(就像现在这个时代还不会用移动互联网的人一样)。也许我们之后都该顺应时代,除了提升自己之余学习下怎么利用好 AI 来更好地提升自己。
【鱼皮的打工日记】20220706
<html> <head></head> <body> <div class="content ql-editor"> <p>不知道为什么,这周感觉特别累,工作和学习效率都不是很高。</p> <p><br></p> <p>最近早上一天比一天起的晚,今天都快 10 点了才到公司,直接开始工作。上午主要是和其他团队的同学对接了一下昨天提到的问题,搞了半天果然是昨天他们的程序有问题。</p> <p><br></p> <p>本来以为他们改好后整个业务流程就能跑通了,结果谁知道他们中午的时候招呼都不打就手动触发了一个任务,和之前一个未执行完的任务冲突了,就导致了一些莫名其妙的 Bug,害得我只能从 0 开始完完整整地读了一遍代码,并且写文档梳理了一下业务流程,到最后也不确定 Bug 有没有修复,打算明天早上在试一下了。</p> <p><br></p> <p>唉,真的无力吐槽了,同事走之前就给我交接了一部分工作,谁知道这几天冒出来这么多烂摊子,各种问题找到我头上,得在短时间快速熟悉代码、理解业务,还得和之前完全没打过交道的人沟通协调,心累。所以一旦寒冬来临,被离职的人来说是不幸的,但还在职的人也许更不好过。。。如果每天都是这种状态的话,抗压能力如我估计也很难坚持半年,希望后面能好一些吧。</p> <p><br></p> <p>然后今天下午的时候还有一个特别离谱的事情,一个产品吧在群里 @老板和我说让我们在 8 号的时候给她跑一份数据。然后又给我打电话,她说希望我们在 8 号上午把数据给她准备好,我说不行,上午有其他任务在跑,资源紧张,只能下午或晚上。结果她来一句:“我靠,还有比我们这数据更重要的?” 然后她就开始自言自语起来,说什么提供数据太晚了她不好分析之类的。我真觉得莫名其妙:你们要的数据重要,别人的数据就不重要了?最让我反感的是她用那种几乎命令式的语气来要求我们,整的自己高高在上,我还是第一次见这么理直气壮的需求方,大写的服!</p> <p><br></p> <p>唉,好好的打工日记,变成吐槽大会了,真的是心累。。。今天也没什么知识给大家分享了,写完日记我也就直接休息,不学习了,大家晚安,明天又是充满希望的一天。</p> </div> </body> </html>
【鱼皮的打工日记】20220705
<html> <head></head> <body> <div class="content ql-editor"> <p>今天的工作让我感到非常头疼。</p> <p><br></p> <p>上午其实还好,完成了一个不需要怎么动脑的需求,确认业务细节后直接改一下数据库中的配置就可以了。我当时刚接手这块工作的时候还很好奇为什么没有人搞个工具来批量操作数据库,而是每次都要动手去修改库。于是当时我开发了一个自动修改配置的工具。结果后来等我熟悉了这块的配置流程后,我感觉用工具还不如直接改库要方便哈哈。所以有的时候前人这么做是有他的道理的,在没有对业务和操作足够了解的情况下,还是尽量不要动手去搞什么工具和重构之类的。</p> <p><br></p> <p>下午的工作就比较难受了,因为这次要做的需求是之前离职的同事负责的,系统、代码逻辑什么的都没有跟我交接过,让我感觉一头雾水。而且这次的需求还需要跨部门的合作,需要用户在另一个部门的系统操作,然后请求到我们的系统,再由我们的系统负责处理。</p> <p><br></p> <p>结果,我在他们系统执行操作之后,发现我们的系统没有任何的响应。于是出于职业道德,我先从自己的系统排查起,而不是怀疑隔壁的系统出了问题。但是又因为对这个系统不熟嘛,不知道它部署在哪里、不知道在哪里看它的日志、不知道它的代码是什么逻辑(还是 Python Flask 的后台代码,让我看得很难受),于是就只能在内网狂搜资料,并且向之前接触过这个系统的同学请教。看了服务器日志后,我发现里面有大量的 MySQL 数据库连接报错,于是我就推测是这个报错影响了系统,导致数据没有写入数据库。结果后来我自己测试接口时发现这个数据库的报错竟然并不影响程序的运行!可能只是由于偶发的连接过满。差点又让我陷入了误区。</p> <p><br></p> <p>最后通过一系列的排查和测试,终于确认了我们的系统并没有问题,归根结底是另一个部门的系统根本没向我们发送请求!</p> <p><br></p> <p>怎么会有这么低级的错误呢?我搞不懂了。</p> <p><br></p> <p>结果和他们那边的同学沟通后才知道,原来他们那边的同学也跟我一样,刚刚接手这段代码!</p> <p><br></p> <p><span class="ql-font-monospace"><img src="https://pic.code-nav.cn/planet_post_image/1601072287388278786/taaq374x.jpeg" style="" width="412"></span></p> <p><br></p> <p>两个第一次看系统代码的人在一起联调,真让我哭笑不得,看来明天有的忙了。</p> <p><br></p> <p>今天 5 点就下班回家了,原因是上海徐汇这边貌似又出现疫情了,说是 5 点就封园区,而我们是 4 点 50 分才得到这个消息。结果出现了特别 “壮观” 的一幕:大家争着抢着下楼,电梯挤不上了只能从 15 楼跑楼梯下去,颇有一种地震演习的感觉。。。</p> <p><br></p> <p><span class="ql-font-monospace"><img src="https://pic.code-nav.cn/planet_post_image/1601072287388278786/tatrs9nt.jpeg" style="" width="324"></span></p> <p>希望这次疫情不要再起来了,唉。。。</p> <p><br></p> <p>不过你以为 5 点回家就真的是下班了么?活干不完,在哪儿都一样。结果一直工作到 9 点半才下班,日常心累哈哈。</p> <p><br></p> <p>晚上剪辑了一下视频,回答了一下大家的问题,写日记的时候又到了 0 点 30 分了,打算再学一会儿习就睡觉了,大家晚安。</p> <p><br></p> <blockquote> 感到独木难支,但不想要去抱怨 </blockquote> <blockquote> 埋头做出好的成绩等着时间来校验 </blockquote> </div> </body> </html>
【鱼皮的打工日记】20220704
<html> <head></head> <body> <div class="content ql-editor"> <p>今天的日记没有太多好说的,主要就是接摊子 + 做需求。只能说压力太大了,我人都麻了。</p> <p><br></p> <p>本来今天想干完 3 - 4 个新需求的,结果上午一来就接了个摊子。事情是这样的,有个组的同学找过来说我们这有份每日更新的数据已经断更好几天了,那个组的组长还 @ 我们老板。我一看那个数据是我接手了一部分工作的同事负责的,于是我就主动在群里说,我帮忙排查一下吧(总得有人顶上来吧,与其被老板 @ 我去排查,不如自己主动一些)。这一看真的吓到我了,每天更新这份数据的代码的几个负责人全都离职了,还没写任何文档。。。于是我只能在内网各种搜索、问各个平台的小助手,请他们帮忙查一些蛛丝马迹、大浪淘沙,最后终于找到了线索,原来是 6 月底有一台机器裁撤了,上面的程序没有及时迁移,导致程序挂了,所以无法继续日更数据。</p> <p><br></p> <p>虽然花了几个小时去处理这个预期之外的工作,但好歹也算搞定了吧。心态崩的一批。</p> <p><br></p> <p>下午做新需求,本来以为很简单,就是支持用户对数据进行多条件的搜索。但是这个系统是我接盘过来的,看到系统的代码后,我发现比我想得麻烦很多。一个查询语句里面 6 - 7 个关联 JOIN 查询!而且最后返回的数据还是由几个查询拼接起来的,所以想搞分页也没那么容易,而全量查询性能又很低(一个请求要查 5 秒以上)。我也在纠结是直接在他代码的基础上补充查询条件,还是优化一下他查询的逻辑?最终秉着软件开发人的职业道德,我选择了后者,依次对每个 JOIN 查询的耗时进行了分析和实验,最后简单地做了一些优化。比如把几乎不会改变的数据直接拼接到原来的主表上,从而减少一次关联查询。</p> <p><br></p> <p>结果搞完这个需求后就已经 4 点半多了,剩下的时间就只能处理一个小需求了,结果这个小需求还需要申请一些系统的权限,只能等待别人审批了,又卡了不少时间。</p> <p><br></p> <p>晚上 8 :30 下班,回来后录制了一下视频、回答了一些大家的问题。疫情复工之后,我感觉自己身心俱疲,身体方面颈椎和腰都没有之前那么好了,心理方面我总是有种被绳子绑住的感觉,每天想做的事情很多,但事实上总是做不完。比如今晚计划 0 点前能自学一些知识,结果回答完问题、写完这篇日记,估计就要 0 点 15 分了,再学一会儿就睡觉吧。</p> <p><br></p> <p>所以朋友们,在你们看到别人的进步与收获的时候,也不要忽略掉别人背后的坚持和努力。我们都一样,都要日复一日地做一些自己没那么喜欢的事情,但也可以在这种生活中找到自己的坚持,为之努力,你就能成功,共勉。</p> </div> </body> </html>
【鱼皮的打工日记】20220701
<html> <head></head> <body> <div class="content ql-editor"> <p>今天的工作轻松又不轻松,听我娓娓道来。</p> <p><br></p> <p>早上 8 点半起床,起来自学了一会儿技术、补了下昨天忘发的打工日记,然后 9 点半左右到达公司。到了公司后依然是边吃早餐边学习技术,发现很多大学时学过的知识都忘得差不多了,非常难受。</p> <p><br></p> <p>举个例子:SSL / TLS 的连接建立过程,这是一道前后端经典面试题。以前秋招面试的时候我记得滚瓜烂熟的,今天看教程中提到的时候都想不起来了。所以又到网上看了几篇文章才找回了丢失的记忆。可以看下这篇文章来学习:<a href="https://blog.csdn.net/m0_37268841/article/details/81503882" target="_blank">https://blog.csdn.net/m0_37268841/article/details/81503882</a></p> <p><br></p> <p>上午的工作主要是优化后端邮件推送功能,之前有个问题就是我们内网的邮箱推送接口不支持推送超大文件,但是用户又想在邮件中直接下载大附件,怎么办呢?我采用了曲线救国的方式,因为邮件是支持 HTML 的 a 标签(超链接)的,所以我就在邮件中提供了每份数据的下载链接,用户点击之后直接弹出浏览器自动进行下载了。体验上和直接从邮箱提取附件几乎是一致的,而且这样还节省了服务器的占用、并且大幅减少了推送接口的耗时(不用生成文件再发送了)。还是比较顺利的,一会儿就上线了。</p> <p><br></p> <p>下午的工作就比较特殊了,从 2 点到 6 点开了一下午的会!</p> <p><br></p> <p>先是 3 个多小时的需求评审,本来开会还是挺轻松的,毕竟是不同项目的负责人交替着讨论。但是不知道为啥,开会过程中我收到了好几个用户的反馈,跟约好了似的,让我只能边开会边处理反馈(排查问题),一心二用,效率很低。最后会开完了,喜提 7 - 8 个新需求,压力瞬间就上来了,下周估计要忙的一批咯!</p> <p><br></p> <p>开完需求评审会后,就是小组周会,这个就没啥好说的了。有一说一,我还是挺喜欢开周会的,是个集中了解同事工作、和同事交流的好机会。</p> <p><br></p> <p>晚上下班后的时间依然是自学技术,希望下周日前能把 150 多集的 Nginx 教程看完,再给大家出一份学习路线。明天我计划写一下新视频的稿子,争取也能完成录制。明天晚上预计会在 B 站直播接着做上周直播的工作记录项目(争取上午把回放发到星球里),这周日晚上在星球里继续直播带大家做伙伴匹配系统,压力真的是挺大的了,但我就是不能闲着哈哈。</p> <p><br></p> <p>大家珍惜在学校无忧无虑自学的时光吧,抓紧时间提升自己,等以后工作了,面对的事情会更复杂、压力会更多。加油,共勉!</p> <p><br></p> <blockquote> 怎么证明自己的一天没有虚度?看看你今天的日记能写出什么东西。希望大家也能养成坚持写日记总结 + 做计划的好习惯吧。 </blockquote> </div> </body> </html>
【鱼皮的打工日记】20220630
<html> <head></head> <body> <div class="content ql-editor"> <p>今天的工作看似充实,实际上写日记的时候我才发现我自己都不知道自己今天在干嘛。</p> <p><br></p> <p>上午主要是处理 Bug 和系统反馈,并且从 HDFS 上导出几个 csv 文件给产品同学验证。HDFS 是一个分布式文件系统,是大数据底层最关键的存储技术。</p> <p><br></p> <p>下午开了需求评审会,成功领取了一个需求,于是开完会后就在熟悉这个需求。比较坑的一点是这个需求是已离职同事负责的,当时并没有完整地跟我交接,只是简单地写了个文档,文档中放了几个链接而已。所以我只能摸石头过河,自己从他的代码提交记录中找一些信息,比较浪费时间。还有就是有一位产品同学说我给他们搭的看板数不对,感觉她并不能把问题描述的很清楚,于是我主动拉了个会议,通过电话 + 屏幕演示很快就定位到了问题 —— 估计是上游提供的数据不对,而我只是把这部分数据取出来而已,所以跟我关系应该不大。然后这位产品同学想拉我帮他一起核对上游数据,但是这部分工作其实和我关系不大的,于是我给他分享了一下核对上游数据的工具和方法,让他自己来验证。最后他学会了,并且确认了果然是上游数据不对,那就跟我没有任何关系了,成功节省了我的时间。</p> <p><br></p> <p>这也是我们开发需要注意的事情,不能什么工作都堆到我们自己的头上,要学会划分问题边界。</p> <p><br></p> <p>晚上下班前自学了一会儿 Postgres SQL 调优,主要是逻辑优化和物理优化两部分,其实和 MySQL 的调优方法是很类似的,只不过优化器的处理逻辑有一点小区别,这几天还得再复习一下,要不然估计我会把不同数据库的优化器搞混。这也是学的技术多了后很头疼的一件事。</p> <p><br></p> <p>晚上下班后主要是在整理学习路线,并且自学 Nginx 进阶技术。虽然在我们工作中 Nginx 早都配置好了,不需要自己去改造。但是 Nginx 本身是一个非常核心的接入层中间件,他有很多值得学习的用法和设计,再来补一补课还是挺好的。等我修完,再给大家分享一下。</p> <p><br></p> <p>一起加油~</p> </div> </body> </html>
【鱼皮的打工日记】20220629
<html> <head></head> <body> <div class="content ql-editor"> <p>今天也是比较理想的工作状态,早上边吃早饭边看 PostgreSQL 数据库优化相关的文章,十点前准时开工。</p> <p><br></p> <p>上午主要是做新需求 + 改 Bug,下午则是一边等待脚本的执行一边思考系统的优化。</p> <p><br></p> <p>昨天和前天主要是针对接口性能的优化,今天我则是在研究同类 BI 系统的架构设计,比如国外的 Apache Superset(之前 B 站演示过如何搭建)以及我们公司内部其他团队自研的系统。对比下来,其实现在我负责的 BI 系统已经有了很多其他系统没有的定制化功能了(毕竟是内部系统),之前在开发这些功能的时候,我也有借鉴其他知名的 BI 产品,比如微软的 Power BI,并且在他们的基础上做了一些改造,使得更贴合我们的业务。建议大家在开发系统时也要这么做,哪怕你有想法,也可以多参考同类产品的功能和方案。</p> <p><br></p> <p>在看其他系统的架构设计文档时,每看到一个知识点,我都会把它记录下来,并且思考能否在自己的系统中进行应用、如何更好的运用。举个例子,缓存预热,就是说可以在用户打开系统查看数据前就把数据查询出来并进行缓存,而不是等到用户访问才缓存,从而大幅提高用户首次打开系统的速度。但是你不能直接把这个功能盲目上线,而是要进一步思考:可以把所有数据都进行预热么?Redis 缓存的容量足够么?如果不够,应该对哪些数据进行缓存预热呢?等等问题。</p> <p><br></p> <p>于是接下来我就去查看 Redis 的总容量、近期的平均空间占用,并且结合当前系统的用户数、数据量去进行综合评估,再去做进一步的方案设计。最后不出所料,果然没办法把所有数据都提前缓存(不确定的查询太多了),因此我决定先从高频访问的看板下手,通过分布式配置中心动态指定预刷缓存的看板范围以及缓存过期时间,而不是直接写死代码。之后只需要改配置就能对更多看板进行缓存预刷了。</p> <p><br></p> <p>知识就分享到这里。其实最近我也比较迷茫了,工位都堆了好几本书了,一直没时间认真研究。有 Linux 的、有高并发的、有数据库的、有 Go 语言的,其实我都想学,但时间不允许,再加上工作中都一般都不会直接用到这些进阶的东西,所以我比较纠结接下来先学哪个,感觉编程真的是一辈子都学不完。。。</p> <p><br></p> <p>最后我还是决定先去看一些系统设计方面的学习资源吧,打算到极客时间上学点儿大佬的方案。今天晚上就先学它一个小时,争取 0 点 30 睡觉,提前跟大家说晚安啦~</p> </div> </body> </html>
【鱼皮的打工日记】20220628
<html> <head></head> <body> <div class="content ql-editor"> <p>今天的工作也是相对轻松的,上午上线了一个脚本,并且和另外一个产品对了需求;其余的时间就是在优化之前开发的 BI 可视化系统。</p> <p><br></p> <p>之前这个系统存在一个偶现的问题,就是如果同时有多个用户查询数据量较大的图表时,JVM 内存就会打满。这个主要是因为 MyBatis 从数据库中每次查询出来的数据都是全量加载到内存中的,本来数据量就已经很大了,再加上用 HashMap 去存储,有很多对象本身的信息会占用额外的空间,所以一个查询的数据可能就由原本的 100 M 膨胀到 1 个 G。假如同时发起 6 个这样的查询,就会瞬间占用 6 个 G 的内存,而如果内存不够,JVM 就会发起 Full GC,导致程序暂时卡死(也叫 STW - stop the world)。</p> <p><br></p> <p>所以今天主要是在思考和调研解决这个问题的思路,有几种方式吧。第一种是想办法用其他数据结构代替 Map 来接受数据,比如用 List<?> + 数据索引表(用下标来取对应的数据库字段),但这种方法感觉比较难实现,毕竟底层的 JDBC 封装了太多东西了,数据库默认也是全量返回的数据。第二种方法是使用数据库的流式查询,即我们后台和数据库建立一个链接,后台分批去取数据库已经查询出来的数据,处理一波再取下一波,从而把本来的洪峰控制成了平稳的水流。之前直播带大家看过的 Easy Excel 表格处理库也有用到类似的思想,大家可以试着使用这种方法优化自己的程序。第三种方式就是自己把完整的查询拆分成多次分页查询,本质上也是分批,但是需要自己来编码实现分页(根据情况决定页面的大小、页面数、并发等),比较麻烦。目前我个人更倾向于第二种方案,但是还没有实施,等后面这个问题紧急程度比较高了,再去优化也来得及。</p> <p><br></p> <p>今天晚上下班后学习了一会儿 Nginx 进阶,然后就是剪视频,并且成功在 0 点的时候发布了出来,主要是分享我这段时间做大数据开发的一些心得感悟,应该也能帮助大家了解大数据开发的一些工作内容、选择方向。欢迎大家三连支持哈:<a href="https://www.bilibili.com/video/BV1Wv4y1u7fo" target="_blank">https://www.bilibili.com/video/BV1Wv4y1u7fo</a>,谢谢,大家晚安~</p> </div> </body> </html>
【鱼皮的打工日记】20220627
<html> <head></head> <body> <div class="content ql-editor"> <p>今天是全面复工第一天,也是近乎完美的一天!非常开心~</p> <p><br></p> <p>首先是之前反反复复改了两周的需求终于验证 OK 了。这个需求虽然早都做完了,但因为种种原因,总是有一点小 Bug 需要调来调去,一直卡在我的待完成需求中。工作之后最怕这种验证周期比较长的需求,当你以为完成的时候产品突然发现了问题,那你又要边做新需求边处理这些历史包袱。</p> <p><br></p> <p>其次是在产品的帮助下,口遁掉了一个新需求。本来我都排好时间准备去开发新需求了,但是今天跟产品讨论过后,发现其实不用开发新功能,让用户使用系统的现有功能也能满足需求(就是对用户来说稍微麻烦一点),于是我就省事儿了。因为最近产品同事也很忙,所以现在产品和我终于站到了同一艘船上,轻松了很多~</p> <p><br></p> <p>于是,我今天也终于有空去落实一下我之前想到的系统优化方案了,花了几个小时,把几个接口的平均响应时间缩短了 2 - 4 倍。这里简单分享几种我用到的后端接口的优化方式:</p> <p><br></p> <ol> <li>减少重复的数据库查询。比如接口处理过程中调用了方法 A 和方法 B,在方法 A 中已经查出用户 1 了,那么在方法 B 中就不用再查一遍用户 1,而是可以把已经查询出的用户 1 作为参数传递给方法 B,或者在 ThreadLocal 中临时缓存一下。</li> <li>并发处理。比如有 2 个数据库查询 A 和 B,分别耗时 3 秒。如果同步执行,先查完 A 再查 B,要花 6 秒;但如果让两个查询并发执行,3 秒钟就能处理完。</li> <li>非核心操作异步化。比如接口处理结束前需要往数据库中插入一条操作记录,这个步骤是非核心操作(少了这步会影响系统使用),因此可以开一个子线程异步执行(或者用消息队列等中间件实现异步),不用等待它结束就能立即响应了。</li> <li>减少数据量。无论是最后返回给前端的数据、还是对缓存进行读写的数据,一般都是越小越好,可以减少网络传输、数据处理的耗时。举个例子,原本我是用 JDK 自带的序列化库来对从数据库中查询出的数据进行序列化、并塞到缓存中,数据大小大概 5 M,700 ms 左右读写完成;但今天我尝试用专业的、开源的序列化库 Kryo 来替换掉 JDK 的序列化库,Kryo 的性能更高、数据压缩能力更强,实测同样的数据条数大概只用了 2 M 多的空间(缩小了 1 倍多),并且只用了 200 多 ms 就读写完成了。但是要注意替换序列化库后,要把原本缓存中的老序列化数据清理掉,否则会冲突。</li> <li>合并查询。比如要查询 id 为 1、2、3 的用户,你可以执行 3 次根据 id 查询用户,但这样查询时间会随着要查询的 id 数线性增长;所以可以直接合并为批量查询:id in (1, 2, 3),可以减少对数据库的请求次数,减少全表扫描的次数等,更快地查出数据。</li> </ol> <p><br></p> <p>有的时候,就是一些简单的操作和想法,就能提高应用的性能,大家也可以用上面提到的这些方法去优化自己的后端程序(前端也可以借鉴,比如合并请求),简历上能写的内容这不就来了么~</p> <p><br></p> <p>这两天加入星球的小伙伴比较多,今天没忙过来,直播回放也来不及发了。写完今天的打工日记也快 1 点了,明天再回答一下大家的问题吧,大家晚安,继续加油!</p> </div> </body> </html>
【鱼皮的打工日记】20220624
<html> <head></head> <body> <div class="content ql-editor"> <p>周五的工作一般还是比较轻松的,因为大家都不想周末加班,所以尽量不会选择在周五上线发布新版本。</p> <p><br></p> <p>我今天也没有给自己安排有风险的工作,上午调试了一下大数据脚本,验证了一下前两天做的代码优化的效果。结果喜出望外,在 Spark 中用 broadcast join 代替 sum over partition by 计算之后,原本要执行 2 个半小时的任务竟然只用了 30 分钟就执行完了,每次运行直接节约了几千块钱的计算成本!</p> <p><br></p> <p>果然知识就是金钱,于是下午我就开始翻公司内网数据平台团队的知识库,学习他们的大数据排错和优化技巧,除了有一部分和网上视频教程中讲的一样外(我整理到星球知识库 spark 学习笔记上了),还学到了很多团队内部积累的经验,感觉真是受益匪浅。感觉在大公司还是有这点好处吧,看来以后每周都要挤点时间去看别人的文档,走出自己的边界。</p> <p><br></p> <p>由于下周就要正式复工了,每天都要去公司上班,所以我今天 7 点就溜了,回家去写视频稿子,就是刚刚发出来的那个哈哈:<a href="https://b23.tv/UUUKUDa" target="_blank">https://b23.tv/UUUKUDa</a>(视频时间有限,更详细的学习路线和资源都在星球语雀知识库里),欢迎大家三连支持!</p> <p><br></p> <p>祝大家周末愉快,休息之余,也要适当学习哦,不要让自己丢掉学习的状态(像我每周一上午都会断片儿,得花时间复习下上周的工作)。继续加油!</p> </div> </body> </html>
