声明一:本文是作者在《开发进阶》圈子内的分享文章。转载前请先联系本人。
声明二:本人没有接受过面试官相关培训,以下内容仅为个人观点。
假如我是 iOS 面试官,我一定会问你 “weak 是如何实现的?”
有些人会很反感、不屑,“大公司病,这个面试官真能装”;有些人会感到不解,“研究这个有什么用?和我的业务没有关联啊”。
本文将会从我个人的体会,谈谈什么叫做技术面试?希望读完本文,能够让你理解面试官出面试题的思路,不再对这类问题感到反感。
对于技术团队,具有以下特质的人会让人喜欢:
- 富有探索精神
作为大公司或者作为互联网行业的一员,如果一个人只会死守着之前的那点儿知识不放,只会着眼于眼前,只会按时完成公司分配的任务,那么,他的适应力往往会很差,在充满未知和挑战的互联网行业,一旦项目发生了变化,在新的任务、新的职位、新的挑战面前,他很容易成为团队中最不稳定的因素,可能工作效率下降,可能工作质量下降,也可能会积极性降低,最终或主动或被动地离开团队。
越是大公司,培养新人的成本也越高,即使是社招,也会出现因为无法适应新的项目导致离职的存在。尤其是一些大型的项目或者复杂的项目,因为历史的原因,新人接手的过程会很长,可能需要2~4周才能真正的有产出,为公司产生效益。公司花了这么大的力气组织招聘和培养人才,从公司角度来讲,新人主动离职或者被动离职都是非常不划算的。
所以,我非常认可面试官招募富有探索精神的人。
对于团队来说,这类人适合当做团队的急先锋。比如有新的技术需要攻破时,他可以负责进行快速突破,一个经常阅读源码的人,他的能力应该也不会差。
如果我是面试官,我一定会招比我富有探索精神的人,招能适应各种新技术、新行业、接受新挑战的人。
- 技术深度
对于团队来说,很容易就可以招聘一个会做业务的人,但是却很难招到一个精通底层的人。
为了知道应聘者的技术深度,面试官会尽可能地追问,直到应聘者无法作答。比如,你面试 工程师的职位,面试官可能会问一些高级工程师的问题,以此来判断你离高级工程师还有多远,也许,在面试官的眼中,你已经是高级工程师的级别了。
本质上,这也是一个供需的问题。比如,遇到一个非常棘手的系统bug,不可能只是提醒用户进行升级,而是替换系统的实现。
聊聊苹果的Bug - iOS 10 nano_free Crash。或者,iOS 开发者经常遇到的热补丁、动态化等问题,这些都需要对底层知识足够熟悉才能够实现。
对于团队来说,能够招到一个有技术深度的人才也是非常值得的事情。
- 沟通
程序员的沟通能力可能无法和 PM 相比,但是,大部分的团队都需要大家一起努力,一起朝着同一个方向用力才行,如果一个人的沟通能力很差,他是无法长期的和同事相处的。面试时,如果遇到了没有思路的情况,不妨问问面试官,相信他会很乐意地帮助你理清思路的。
- 架构
待续 - 代码
待续 - 视野
待续
回到本文的标题,“weak 是如何实现的?” 如果,你知道原理,很好,把自己“富有探索精神”的特质表现出来。
最好先花上一分钟整理思路,如果仅仅是知道,但是无法有条不紊地表达出来,“沟通”这一项是会扣分的 :-D
如果不知道原理,也没有关系,体现“聪明”特质的时刻到了。
作为 iOS 开发者,你一定用过这个关键字。遇到这道题时,先告诉面试官“我没有看过这一部分的内容,但是我看过......(autorelease或者其它),能不能让我整理一下思路,讲讲‘如果我是设计者,我会怎么实现它’”,接下来,你便可以开动自己的大脑,想想它都有哪些特性,这些特性分别靠什么可以实现。
正规公司的面试官的每一个问题都是它的出发点的,想想它的出发点,再想想,自己能够通过它,体现出什么特质,你便再也不会有任何的抱怨了。