写在前面:
这个文章核心并不是程序优化的具体技巧,而是拿到一个问题如何思考和利用工具的通用方法。比如即使我们不知道 profiler 这个东西,通过搜索”代码 每一行 时间”也可以很快知道有这样的工具叫做 profiler,并且学会怎么使用。即使不知道 rand 这个函数怎么加速,通过搜索引擎也可以找到别人写好的现成代码。另一方面是发现瓶颈之后也不要着急自己修复,如果不是特别一目了然的话,先看看别人是怎么做的。站在巨人的肩膀上,事半功倍。
1.多看看「官方文档」
我们很多的问题和技术细节,其实,只要我们认真将官方文档过一遍,会发觉大部分的问题和认识模糊的地方都消失了。甚至,你还能发现自己之前通过搜索获得的到一些资料,可能是不准确或者已经过时的。官方文档是真正的好东西,因为编写文档的人群,通常就是这些技术或者软件的开发者,他们才是对这些东西最了解的人,因此,他们写的文档质量是很高的,通常也是最新的。
官方文档的不足的地方,大概是中文版本不多,看起来可能会比较吃力。不过,请相信我,下载一个翻译辅助软件,慢慢看还是可以的。另一方面,就是这些文档编写者,通常是技术界大牛,他们编写文档有时候是基于他们自己的技术认知水平,跳过了很多基础概念,也增加了阅读难度。不过,这个我们也可以通过多查资料,慢慢看来解决,并且通常会带来额外的学习收获。
2.比官方文档更重要的是源代码
看源代码 1)意味着你可以看到以及学习优秀的代码;2)意味着即使源代码有坑,你也会提前在大脑有回路更容易找到问题所在。
看不懂源码意味着不同的几点:
1)你对这个库或者代码的功能不熟悉 (知道某段源码的功能及特点)
2)你不会用 Debug
3)你的算法基础薄弱
4)源码太过混乱
你需要反思自己属于哪一项。针对其中某一类下药上来直接从头看源码学东西一般是不可行的。你需要从上层入侵到下层。先用这段代码才能看懂源码。而不是在上层都不熟悉的基础上开始。任何重复的代码/重复的类似代码。意味着你框架设计有问题,或者开发语言的表达能力不够。
Java 的固定设计模式就是 Java 本身表达能力不够的表现。流程意味着生命周期,即你不仅需要抽象已知的流程。还需要在未提及的点留下一个坑 (函数/接口/钩子)。往往这些坑在以后的需求变更和项目扩展和维护中是救命的点。日志非常重要,日志环境也非常重要,debug 是基础技能,对应的是开发状态。日志则对应稳定的线上状态。而不能重现的 bug 占整个开发的非常多的时间。所以错误日志记录详细的环境意味着你可以更快的重现这个错误。
more >>