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

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

阅读全文 »

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

明确目标

阅读全文 »

基本概念

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

阅读全文 »

流程

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

背景

在Android应用中,ListView / RecyclerView / ScrollView 滚动时,如果有过多图片加载容易导致卡顿,特别是快速滚动时,bindView中大量图片加载操作,会导致系统频繁分配回收内存,不仅消耗大量CPU和网络流量资源,而且极端情况下还会因为内存来不及回收产生OOM。

阅读全文 »

Crash率是Android App中的重要指标,对用户体验的影响非常大,因此监控一个App的Crash率是一个很重要的事情。第三方有现成的Crash监控方案,但是不一定能满足所有项目的需要,本文讨论Android监控SDK的完整设计思路,包括数据采集,存储,上报,展示,报警,去重等一系列流程。

Crash率的计算

阅读全文 »