If many people develop a large project (e.g. Chromium), many changes can be created all the time. If we update the code, we need to rebuild all the changed files which may take a lot of time.

Let us assume the name of the major develop branch is master. To speed up our build, we can checkout and update master branch everyday and then start a build before we get off work (or before the meal time). The build will be finished when we get back to work next morning. We can call it daily build.

阅读全文 »

很多公司技术岗面试都会考编程题来了解面试者的代码编写能力。毕竟如果只是单纯的口述,很难判断一个人的真实水平。编程题不可避免的会涉及到一些算法。

算法作为一项偏基础和理论的技能,对于程序员而言很重要。如果想要在技术方向深入发展,算法能力往往决定了你能走多远。但是前文已经提到,国内很多企业缺乏基础技术的研发能力,往往都是在做应用层,初阶程序员在工作过程中常常只是调用API,接触算法较少(尤其是前端开发),有点“面试造火箭,入职拧螺丝”的意思。

阅读全文 »

这篇文章是我在面试微软、头条并成功拿到Offer的过程中,准备简历时做的一些思考和总结,并提供我使用的简历模板下载。主要针对技术岗位。

明确目标

阅读全文 »

基本概念

图 (Graph) 是由若干给定的顶点及连接两顶点的边所构成的图形,这种图形通常用来描述某些事物之间的某种特定关系。顶点用于代表事物,连接两顶点的边则用于表示两个事物间具有这种关系。

阅读全文 »

流程

  1. 确定指标:明确要优化哪些指标,指标如何定义和计算。
  2. 测试工具:定位问题使用到的工具,第三方工具,或者自行开发。
  3. 定位问题:使用工具定位问题,例如页面滚动卡顿,要定位到具体哪些代码逻辑耗时较多。
  4. 需求文档:编写技术需求文档。
  5. 任务分配、版本排期:如果是多个人负责,需要根据实际情况分配任务,并进行版本排期。
  6. 技术优化:具体进行优化。
  7. 成果验收:优化完成后,使用测试工具再次测试,对比分析优化前后的效果。
  8. 规范制定:如果优化过程中,发现了一些业务代码的写法容易导致性能问题(例如在BindView过程中打Log而且线上包没有删掉,容易引起卡顿),可以针对性的制定一些代码规范。还可以封装基础工具类解决这类问题(封装Log工具类,统一控制Log输出),借助静态代码检查工具进行约束(例如可参考 美团外卖Android Lint代码检查实践 )。
  9. 持续监测:借助监控SDK、CI工具等,持续监控性能指标,避免之后性能持续下降。
阅读全文 »