文章起源
最近出现了不少讲述面试问题的日记,正巧这段时间也接连面试了不少家公司,最终顺利拿到心仪的offer
,于是记录下整体的面试感受。本文不会以过多的文笔讲述面试题目,主要是谈谈对iOS
就业市场的看法
******重要信息****
各位认识我的大大手下留情,就别在评论区泄露面试的公司了
行情
即便是度过了最为寒冷
的2016
年,iOS
的就业市场也不见得回暖了多少,这说明了iOS
开发市场在趋向于成熟。其实即便是在热火朝天的O2O元年
也不代表着移动端市场就是遍地黄金,因为从头到尾就业市场并没有太大变化。2015
年大量的创业公司本质上以2VC
的商业模式创造了大量的伪就业
,当资本热褪去,供远大于求的市场才会让众多开发者产生一种寒冬的感觉。总结一句就是:
真实的就业市场增长速度远低于
iOS
开发者的增长速度
对于创业型、小型公司而言,如何快速实现业务的迭代是生存下去的根本,所以对于iOS
开发人员的技术要求相对较低。也因为这样,大部分的小公司并不会过多的关心应用的性能是否足够好
、代码结构是否合理
等体现开发者软实力
的技术点。而中型以上的公司在用户量达到一定量级的时候,就不得不去考虑每一次的业务改动是否会造成体验的不适等造成用户流失的原因,因此中型以上的公司对开发者的软实力
更加看重
就业
就业不易。在更早之前为了测试找工作的难度,笔者海投了一批中小型公司,但是结果很遗憾,没有一家回应。(ps: 多谢各位推荐笔者的朋友们,感激)
很明显的一点是在iOS
开发者鱼目混杂的现状下,学历
以及工作背景
两大因素成了最简单粗暴的筛选方式。所以我经常和朋友说的一点是:如果我自己去投简历找工作,还不如转行找工作来得快
在这种环境下,就业更好的途径就是推荐
或者找人自荐
,但是存在的前提是如果技术达不到对方的标准,找再多人也是白搭。所幸的是,有那么一堆愿意帮助我的朋友,在这段时间内,面试的公司除了上述两者之外还有面邀
。这种情况就可遇不可求了,起码要有人对你感兴趣
培训
大概是这两年来培训
出来不少开发者,很多人认为被抢了饭碗,于是对这种现象颇有意见。对于笔者来说,一份形似培训的简历如果能有自己的博客与Github
,并不介意给对方一次机会,这也只是笔者的看法。
不过有部分开发者确实对培训
这个词刻意的去贬低,例如前几天有个总结自己面试别人出的题目,对于题目分为低中高
三个层次的,理论知识题巨多,下面的回复有这么一句:
培训出来的才能全部答上来
很明显对于理论知识题答者抱着一种轻视的态度,并且在回答中扯上培训
一词,满满的讽刺。我不想去解读答者的想法,但是假如连培训都能背出来的东西你面试回答不上来,怪培训
抢了你的工作还是你自己不给力呢?假如你以前背过,为什么后来没有尝试去深究原理而是选择遗忘呢?
面试
到这里该总结一下面试题,由于私人原因具体的面试题不能公开,但是笔者总结了一下类型:
runtime
即便runtime
已经烂大街了,但是这是OC
语言特有的机制,起码要对动态时有了解过,才能了解属性修饰的差异在什么地方runloop
这个属于去年下半年开始热起来的面试题目,为什么应用能够一直运行到我们关掉或者闪退为止?runloop
做了什么工作?如何去利用runloop
等等多线程
性能优化是一个权衡的过程,同样算法的条件下,代码执行的时间几乎是恒定的,使用多线程可以将任务分割分批执行,有效的提高应用性能。但是多线程存在使用的陷阱,如何设计良好的异步方案,是进阶的必备技术要求APM
应用性能管理,并不是人人都要弄个APM
系统,但是对于整个系统的单个功能业务是否了解过怎么实现?APM
本身是为了优化应用和收集数据制作的,又有什么思路响应链
经典问题,略过算法
中型以上的公司基本会考核这点。比如你喜欢什么排序算法、使用合适的算法解题。一般来说非算法岗位只要LeetCode
能刷过Medium
的题目就比较容易了设计模式
设计模式实际上涉及到代码的整体结构设计上,由于高级语言封装了大量的基础算法以及使用了大量的设计模式,开发者接触使用的设计模式相对而言比较少,但是这是程序猿必备知识之一计算机基础
除了算法以外,还包括计算机系统、网络协议、数据结构等,鉴于笔者基础薄弱,不多阐述