作为一名程序员,在工作中大概率都会遇到接手老项目的情况。

  • 跳槽从一个坑跳到另一个坑,接手老项目
  • 同事内部活水了,他手上的项目都交接给你
  • 团队“核心”成员要上新项目or重点项目了,团队人力资源调整,“核心”成员的老项目交接给你维护。

老项目谁接谁知道,不是坑就是泪。

前人新做的项目,拿了绩效+晋升,完事了抹抹嘴,扔给你。

别人吃完肉了,到你这,你还能喝到汤吗?

别说喝汤了,项目里的坑你都不知道在哪里,搞不好哪天出个问题,责任全在你这。

兄弟,既然工作中避免不了接手老项目,那咱就得思考怎么做老项目这项工作。

1,老项目之性能优化

做老项目,一个常见的思路是做性能优化。

先聚焦到一个突破口,找到一个性能差强人意的接口,提出改进措施。

别小看只是优化了一个接口的耗时,这就是整个工作的突破口。

有了这个突破口,慢慢地捋顺流程,就可以以点带面,提出项目中某一个环节的优化方案。

如果说优化了一个接口看不出什么工作亮点,但是要是能优化某个环节,这在leader那里绝对可以说是你工作上的一个亮点了。

这其实也是量变引起质变的思路,一个接口优化不足挂齿,但是把若干个接口优化包装成某个环节的优化,就能引起质变。

2,单个项目性能优化的常见思路

2.1 兵马未动粮草先行——先做性能监控

你可能听到产品或其他下游业务抱怨,哪哪哪慢了什么的,然后你就开始埋头改代码。

兄弟,等一等,工作不是这么搞的。

任何工作开始前,都要思考两个问题:该怎么做?怎么能证明我做了这个工作,并且做的很好?

你要优化一个接口的性能,首先要做的就是加上性能监控,拿出数据来说明某某接口耗时太高。这就是你工作的背景和出发点。最后再拿出优化后的接口耗时,一对比,就体现出你工作的效果了。

2.2 sql优化

大部分系统都是操作缓存或DB,性能优化的第一步就是做DB SQL的优化。

常见的sql优化措施:

  1. explain后,给table加上index
  2. 取消join,改为内存组装
  3. 慢/大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的逻辑

避免二次方、三次方时间复杂度的代码逻辑。

  1. 剪枝,缩小计算范围。把不符合要求的数据先清理掉。
  2. 能提前返回的就提前返回,没必要再往下走。
  3. 空间换时间,使用Map Set等数据结构

2.4 2层cache大法

内存cache

一些几乎不变的数据,可以直接放在内存cache里,这样访问效率是最高的,比第三方cache如redis还要高。

第三方cache

如Redis。

对于变动较多的数据,则内存cache就不可用了,因为内存cache都是在各个实例内部,而请求往往是loadbalance到某一个实例,这就导致各个实例间内存cache数据不一致。

此时就得上第三方cache了。

职场中接手了老项目,如何做性能优化?相关推荐

  1. java 怎么从性能上优化代码_月薪上万做好这一步:程序员职场中必须掌握的的Java代码性能优化技巧...

    尽量指定类.方法的final修饰符 Java编译器会寻找机会内联所有的final方法,内联对于提升Java运行效率作用重大,具体参见Java运行期优化.此举大概能够使性能平均提高50%. 尽量重用对象 ...

  2. 管理学习(2)——职场中最重要的四件事

    职场中最重要的四件事 职场的核心精髓可以概括为职场中最重要的三件事,它们分别是:职场第一要务.职业化.职场的本质. 1.这三件事与身处职场的我们到底有什么关系呢? 就让我用三句话概括一下: 职场第一要 ...

  3. 35岁后最可怕的事,就是成为职场中的奢侈品

    点击"技术领导力"关注∆  每天早上8:30推送 来源 l 粥左罗(ID:fangdushe520) 01 35岁以后  你在职场中会贬值么? 前几天有一个截图被大家广泛传播,标题 ...

  4. 职场中典型的学生思维有哪些?

    链接:https://www.zhihu.com/question/63569860 编辑:深度学习与计算机视觉 声明:仅做学术分享,侵删 作者:李嘉 https://www.zhihu.com/qu ...

  5. 关于职场中的面试,要是遇到这些问题时,应该怎么回

    (点击即可收听) 关于职场中的面试,要是遇到这些问题时,应该怎么回 平常多学一点,面试入职时就少踩一点坑,无论是去面试还是换工作,怎么样去回答面试官,遇到此类的问题,能够应付自如 1. 你觉得这份工作 ...

  6. [原]职场中,要善于交换利益

    现在,全球的每一个角落几乎都已经融入到市场经济环境中,到处充斥着交换(交易),这其中包括物物交换.货币交换.利益交换.权益交换等,职场中也不例外.     在企业里,职业从业者通过体力或脑力劳动来提供 ...

  7. IT职场中外企面试最爱提的问题TOP10

    IT职场中外企面试最爱提的问题TOP10 1.请介绍一下你自己. 这是外企常问的问题.一般人回答这个问题过于平常,只说姓名.年龄.爱好.工作经验,这些在简历上都有,其实,外企最希望知道的是求职者能否胜 ...

  8. 职场中,要善于交换利益

    现在,全球的每一个角落几乎都已经融入到市场经济环境中,到处充斥着交换(交易),这其中包括物物交换.货币交换.利益交换.权益交换等,职场中也不例外.     在企业里,职业从业者通过体力或脑力劳动来提供 ...

  9. 职场中最重要的情商,是管理情绪

    我最近听到一句话:情绪稳定,是职场最基本的情商. 一听这话,我觉得很有道理.但是后来我发现,情绪稳定不是职场最基本的情商,而是最高级的情商. 如果你仔细观察就会知道,你身边情绪稳定的人,几乎都是在公司 ...

最新文章

  1. Python字符编码详解
  2. MATLAB支持向量机SVM代码实现
  3. 华为 connect大会2020_英诺森ProcessGo机器人亮相2019华为CONNECT大会
  4. 基于小波变换的图像边缘检测(matlab祖传代码注释)
  5. 【opencv学习】SIFT算法的基本使用以及特征匹配
  6. LeetCode 22. 括号生成(回溯+剪枝)
  7. 7-27 Codeforces Round #499 (Div. 2)
  8. 安装linux版qq,安装二进制包编译器,安装mysql-5.6.11,删除已安装或安装失败的mysql-5.6.11,简单mysql练习题...
  9. python中fg是什么意思_Python fg
  10. OPIE(火狐扩展)-导入导出firefox扩展的所有设置
  11. React仿写网易云音乐项目
  12. D-月之暗面(树形dp)
  13. 时间复杂度O(n)的理解
  14. html有哪些好玩的地方,武汉本地好玩的地方有哪些?盘点武汉十大必看景点
  15. MSCOCO数据集转VOC数据集训练目标检测模型
  16. Excel实用技巧——甘特图展示项目排期
  17. am335x linux内核烧写_am335x文件系统烧写问题
  18. Table '表名' doesn't exist
  19. linux查看服务器电源风扇,nagios监控vsphere ESXi主机硬件状态(CPU风扇、电源模块、硬盘、温度)...
  20. iOS 使用Zebra打印机打印标签

热门文章

  1. 刚刚,中国联通发布公告:曝云南混改发生重大变更
  2. blockly games玩后有感
  3. GIT、GITLAB、GITHUB、GITLIB
  4. IT人的附加价值 —— 怎么薪水高赚大钱!
  5. K-means和K-中心点算法
  6. AuAgSe量子点|Ag2Se量子点硒化银量子点|油酸修饰PbTe碲化铅量子点|硫铟铜量子点CulnS2|近红外量子点
  7. fedora 25 下安装 haroopad
  8. gps ins matlab,GPS和INS联合导航matlab程序(带数据有用的)
  9. HDOJ 5597 GTW likes function (欧拉函数)
  10. 【数论】HDU5597 GTW likes function 的详细证明