职场中接手了老项目,如何做性能优化?
作为一名程序员,在工作中大概率都会遇到接手老项目的情况。
- 跳槽从一个坑跳到另一个坑,接手老项目
- 同事内部活水了,他手上的项目都交接给你
- 团队“核心”成员要上新项目or重点项目了,团队人力资源调整,“核心”成员的老项目交接给你维护。
老项目谁接谁知道,不是坑就是泪。
前人新做的项目,拿了绩效+晋升,完事了抹抹嘴,扔给你。
别人吃完肉了,到你这,你还能喝到汤吗?
别说喝汤了,项目里的坑你都不知道在哪里,搞不好哪天出个问题,责任全在你这。
兄弟,既然工作中避免不了接手老项目,那咱就得思考怎么做老项目这项工作。
1,老项目之性能优化
做老项目,一个常见的思路是做性能优化。
先聚焦到一个突破口,找到一个性能差强人意的接口,提出改进措施。
别小看只是优化了一个接口的耗时,这就是整个工作的突破口。
有了这个突破口,慢慢地捋顺流程,就可以以点带面,提出项目中某一个环节的优化方案。
如果说优化了一个接口看不出什么工作亮点,但是要是能优化某个环节,这在leader那里绝对可以说是你工作上的一个亮点了。
这其实也是量变引起质变的思路,一个接口优化不足挂齿,但是把若干个接口优化包装成某个环节的优化,就能引起质变。
2,单个项目性能优化的常见思路
2.1 兵马未动粮草先行——先做性能监控
你可能听到产品或其他下游业务抱怨,哪哪哪慢了什么的,然后你就开始埋头改代码。
兄弟,等一等,工作不是这么搞的。
任何工作开始前,都要思考两个问题:该怎么做?怎么能证明我做了这个工作,并且做的很好?
你要优化一个接口的性能,首先要做的就是加上性能监控,拿出数据来说明某某接口耗时太高。这就是你工作的背景和出发点。最后再拿出优化后的接口耗时,一对比,就体现出你工作的效果了。
2.2 sql优化
大部分系统都是操作缓存或DB,性能优化的第一步就是做DB SQL的优化。
常见的sql优化措施:
- explain后,给table加上index
- 取消join,改为内存组装
- 慢/大SQL拆解。比如 in查询带上了1000个元素,这个SQL语句就变得很庞大,光在日志里打出来就好几行,那可以把in分拆为多个in查询。
2.3 代码优化
常见的代码优化措施:
for 循环里查db,改为in查询
for element in list {// do somethingsql query (element)// do something
}// 优化后
sql query in (list)
递归里查db,改为一把查出所需数据后内存构建
func buildTree(tree) {if has child:buildTree(tree)// 递归里查dbsql query
}// 优化后
// 先一把查出所需的数据
alldata = sql query// 内存递归在数据上构建
func buildTree(alldata) {if has child:buildTree(alldata)
}
避免N*2 N*3的逻辑
避免二次方、三次方时间复杂度的代码逻辑。
- 剪枝,缩小计算范围。把不符合要求的数据先清理掉。
- 能提前返回的就提前返回,没必要再往下走。
- 空间换时间,使用Map Set等数据结构
2.4 2层cache大法
内存cache
一些几乎不变的数据,可以直接放在内存cache里,这样访问效率是最高的,比第三方cache如redis还要高。
第三方cache
如Redis。
对于变动较多的数据,则内存cache就不可用了,因为内存cache都是在各个实例内部,而请求往往是loadbalance到某一个实例,这就导致各个实例间内存cache数据不一致。
此时就得上第三方cache了。
职场中接手了老项目,如何做性能优化?相关推荐
- java 怎么从性能上优化代码_月薪上万做好这一步:程序员职场中必须掌握的的Java代码性能优化技巧...
尽量指定类.方法的final修饰符 Java编译器会寻找机会内联所有的final方法,内联对于提升Java运行效率作用重大,具体参见Java运行期优化.此举大概能够使性能平均提高50%. 尽量重用对象 ...
- 管理学习(2)——职场中最重要的四件事
职场中最重要的四件事 职场的核心精髓可以概括为职场中最重要的三件事,它们分别是:职场第一要务.职业化.职场的本质. 1.这三件事与身处职场的我们到底有什么关系呢? 就让我用三句话概括一下: 职场第一要 ...
- 35岁后最可怕的事,就是成为职场中的奢侈品
点击"技术领导力"关注∆ 每天早上8:30推送 来源 l 粥左罗(ID:fangdushe520) 01 35岁以后 你在职场中会贬值么? 前几天有一个截图被大家广泛传播,标题 ...
- 职场中典型的学生思维有哪些?
链接:https://www.zhihu.com/question/63569860 编辑:深度学习与计算机视觉 声明:仅做学术分享,侵删 作者:李嘉 https://www.zhihu.com/qu ...
- 关于职场中的面试,要是遇到这些问题时,应该怎么回
(点击即可收听) 关于职场中的面试,要是遇到这些问题时,应该怎么回 平常多学一点,面试入职时就少踩一点坑,无论是去面试还是换工作,怎么样去回答面试官,遇到此类的问题,能够应付自如 1. 你觉得这份工作 ...
- [原]职场中,要善于交换利益
现在,全球的每一个角落几乎都已经融入到市场经济环境中,到处充斥着交换(交易),这其中包括物物交换.货币交换.利益交换.权益交换等,职场中也不例外. 在企业里,职业从业者通过体力或脑力劳动来提供 ...
- IT职场中外企面试最爱提的问题TOP10
IT职场中外企面试最爱提的问题TOP10 1.请介绍一下你自己. 这是外企常问的问题.一般人回答这个问题过于平常,只说姓名.年龄.爱好.工作经验,这些在简历上都有,其实,外企最希望知道的是求职者能否胜 ...
- 职场中,要善于交换利益
现在,全球的每一个角落几乎都已经融入到市场经济环境中,到处充斥着交换(交易),这其中包括物物交换.货币交换.利益交换.权益交换等,职场中也不例外. 在企业里,职业从业者通过体力或脑力劳动来提供 ...
- 职场中最重要的情商,是管理情绪
我最近听到一句话:情绪稳定,是职场最基本的情商. 一听这话,我觉得很有道理.但是后来我发现,情绪稳定不是职场最基本的情商,而是最高级的情商. 如果你仔细观察就会知道,你身边情绪稳定的人,几乎都是在公司 ...
最新文章
- Python字符编码详解
- MATLAB支持向量机SVM代码实现
- 华为 connect大会2020_英诺森ProcessGo机器人亮相2019华为CONNECT大会
- 基于小波变换的图像边缘检测(matlab祖传代码注释)
- 【opencv学习】SIFT算法的基本使用以及特征匹配
- LeetCode 22. 括号生成(回溯+剪枝)
- 7-27 Codeforces Round #499 (Div. 2)
- 安装linux版qq,安装二进制包编译器,安装mysql-5.6.11,删除已安装或安装失败的mysql-5.6.11,简单mysql练习题...
- python中fg是什么意思_Python fg
- OPIE(火狐扩展)-导入导出firefox扩展的所有设置
- React仿写网易云音乐项目
- D-月之暗面(树形dp)
- 时间复杂度O(n)的理解
- html有哪些好玩的地方,武汉本地好玩的地方有哪些?盘点武汉十大必看景点
- MSCOCO数据集转VOC数据集训练目标检测模型
- Excel实用技巧——甘特图展示项目排期
- am335x linux内核烧写_am335x文件系统烧写问题
- Table '表名' doesn't exist
- linux查看服务器电源风扇,nagios监控vsphere ESXi主机硬件状态(CPU风扇、电源模块、硬盘、温度)...
- iOS 使用Zebra打印机打印标签
热门文章
- 刚刚,中国联通发布公告:曝云南混改发生重大变更
- blockly games玩后有感
- GIT、GITLAB、GITHUB、GITLIB
- IT人的附加价值 —— 怎么薪水高赚大钱!
- K-means和K-中心点算法
- AuAgSe量子点|Ag2Se量子点硒化银量子点|油酸修饰PbTe碲化铅量子点|硫铟铜量子点CulnS2|近红外量子点
- fedora 25 下安装 haroopad
- gps ins matlab,GPS和INS联合导航matlab程序(带数据有用的)
- HDOJ 5597 GTW likes function (欧拉函数)
- 【数论】HDU5597 GTW likes function 的详细证明