<p>最近帮人组建研发中心,面试了很多开发工程师,对“技术能力与工作年限是否匹配”的理解更深了,记录下来分享给大家。</p><p>为便于讨论,简单的依据工作年限,划分出 3 个阶段:</p><p>1 ~ 3 年</p><p>4 ~ 5 年</p><p>6 ~ 8 年</p><p>接下来,讨论面试官对每个阶段的开发者的要求,看看到底什么是“技术和年龄不匹配”。</p><p>面试官 VS 1 ~ 3 年经验的开发者</p><p>下图是我从一位 2 年 Android 应用开发经验的小伙伴的简历中截取的片段:</p><p>一,android</p><p>1,熟练掌握android各类控件及自定义控件</p><p>2,能熟练利用android布局实现各种复杂界面。</p><p>3,熟悉android文件存储管理</p><p>4,SQLITE数据库存取与共享</p><p>5,熟悉动画多媒体应用</p><p>6,熟悉android网络通信机制,多线程技术。</p><p>7,熟练掌握json数据的解析技术</p><p>8,熟练android开发中策略设计模式,mvc设计模式</p><p>9,熟悉android中picasso框架</p><p>10,了解高德地图,百度地图</p><p>11,熟悉android中mvp开发模式</p><p>12,熟悉运用第三方sdk</p><p>这位小伙伴说“熟练掌握自定义控件”,我问他,通过继承 View 来实现一个自动以控件需要重写哪些方法,他回答说,“onDraw”,我问他还有别的吗,他想了 10 秒钟没答上来。</p><p>实际上,要继承 View 来实现一个自定义控件,起码要重写“onMeasure、onDraw、onLayout”三个方法。</p><p>这就是我们对工作 1 ~ 3 年的开发者的能力要求:</p><p>了解用过的知识点、技能点本身,知道它们可以实现什么、怎么用,不要有错误的概念。</p><p>再举个例子,比如你用过 Qt 的 QTimer 类,面试官问你 QTimer 类能否用在非 GUI 线程中,你应该可以答得上来(答案是可以)。面试官再让你举例说明 QTimer 在非 GUI 线程中怎么用,你答不上来,那没关系,因为你没用过。</p><p>这就是这个阶段的要求:用过一个东西,知道它怎么用,能用在什么环境下,具体使用时的操作步骤。</p><p>面试官 VS 4 ~ 5 年经验的开发者</p><p>下图是我从一位工作了 4 年的 iOS 开发工程师的简历中截取的片段:</p><p>1,精通objectiv-C编程,熟悉C,C++,java</p><p>2,熟练使用ios sdk 及相关开发工具的使用,掌握storeboard</p><p>3,熟悉mvc,代理,通知,单列,block等设计模式</p><p>4,掌握ios屏幕适配,纯代码布局或者Auto layout,.</p><p>5,掌握网络处理,多线程,json/xml解析及数据存储</p><p>6,掌握远程推送和本地推送</p><p>7,熟悉主流sdk的使用:afnetworking ,sdwebImage,支付宝支付等</p><p>8,熟悉TCP,UDP协议和Socket编程,熟悉xmpp,.....</p><p>我们看到这位小伙伴提到熟悉多线程,在面试时就问他用的哪种方式,他说使用的 GCD ,然后我们问他是否了解其他的多线程方式,他说还有 pthread,但没用过,其他的不知道了。</p><p>实际上,有 4 年 iOS 开发经验并且在简历中说自己熟悉“多线程”的程序员,起码应该了解还有其它三种多线程的方式:</p><p>pthread</p><p>NSThread</p><p>NSOperation</p><p>并且还要知道 4 种常见的多线程编程方式有什么异同、什么场景下该用哪个。</p><p>这样,你的能力和工作年限才是匹配的。</p><p>假如你用过 GCD ,其它的都没听说过,那面试官就会认为你的能力配不上你的工作年限。</p><p>这就是面试时对这个工作年限的小伙伴的能力要求:</p><p>对用过的知识点、技能点,了解原理,知其然且知其所以然,能灵活应用。</p><p>同时,要能对实现相同功能的不同组件均有所了解并知其优劣,此时应该是能举一反三,触类旁通的。</p><p>这也是我对简历中“熟悉”一词的理解。</p><p>面试官 VS 6 ~ 8 年经验的开发者</p><p>公司对经验超过 5 年的开发者,要求会更高:</p><p>常用的技术框架,要理解原理、设计思想、实现细节,研究过内核、源码,可以定制、扩展、优化。</p><p>或者可以根据项目需要,参考已有框架,建造自己的框架。</p><p>这也是我对简历中“精通”一词的理解。</p><p>比如 iOS 的图片加载框架 SDWebImage ,支持从网络中下载且缓存图片,并设置图片到对应的 UIImageView 控件或者 UIButton 控件上,是我们开发 iOS App 必不可少的框架。</p><p>对于有 5+ 年 iOS 开发经验的小伙伴来讲,如果用过几次 SDWebImage ,公司可能就会要求你看过它的源码,了解它内在的实现,比如它内部是怎样下载的、怎样使用多线程的、怎样缓存的,然后可能会认为你应该能自己写出具备类似功能的组件。</p><p>你能做到这样,能力和年龄就是匹配的啦。如果你做了 5 年以上的开发工作,用过的框架,没有一个掌握到这种程度的,那不好意思,别人大概率会认为你的技术能力匹配不上你的工作年限。</p><p>你在哪里?</p><p>好啦,现在,观照一下自身,看看你的技术能力是否配得上你的工作年限?</p><p>配不上的话…… 本文还有续篇——“技术和年龄不匹配时怎么办”,敬请期待。</p>