iOS开发如何面对疫情过后的面试高峰期 !
2020年本应该是一个 "爱你、爱你"的年份!却因为 黑天鹅
给我们带来非常大的影响!
一、2020年ios招聘数据分析
这里是 2020年3月份boss直聘
北京ios招聘前几页数据
薪资待遇 | 岗位个数 | 年限要求 | 公司规模 |
---|---|---|---|
15k左右 | 35份 | 1-3年 | 20-99 |
20k左右 | 78份 | 3-5年 | 100-499 |
30k左右 | 63份 | 3-5年 | 100-499-1000以上 |
30k以上 | 66份 | 5年以上 | 499-1000以上 |
下面是2019年10月份我统计的数据
薪资待遇 | 岗位个数 | 年限要求 | 公司规模 |
---|---|---|---|
15k左右 | 40份 | 1-3年 | 20-99 |
20k左右 | 63份 | 3-5年 | 100-499 |
30k左右 | 93份 | 3-5年 | 100-499-1000以上 |
30k以上 | 33份 | 3-5-以上 | 499-1000以上 |
我做了一个图标以供大家参考(查看直观)
-
15k左右
开发岗位的确有所下降; - 但是
20k左右
岗位却上升了不上; - 受
黑天鹅
影响30k左右
下降了不少; -
30k以上
这个岗位有所上升,这里数据不准确,因为我是知道的,在boss上面为提供知名度,肯定会有所假数据的,这一点我相信大家也心知肚明! - 毕竟行业在进步,以及物价在上升,大家工作也是必然要上涨的!
-
底层原理毫无疑问还是ios开发现在必备能力。
- 对象底层原理
- 指针与内存的一些相关面试
-
weak
弱引用 -
block
的原理 -
autoreleasepool
原理 -
runloop
的原理 -
runtime
相关、消息转发 - ....
-
性能优化以及架构能力相对比之前要求越来越多!
- ①性能优化方面:
tableview的优化
->界面卡顿原理
->app 性能分析
->项目优化
- ②架构方面: 设计模式、解耦手段、组件化....
- ①性能优化方面:
-
多线程、网络能力也是占有一个非常大的比例 !
- 多线程的原理
- 线程池
- gcd
- 锁相关原理
- 线程生命周期
- 网络设计
- 网络框架的一些理解
- 开发过程中一些需求结合多线程或者网络设计!
-
数据结构算法能力占比也比较大。通常一般大公司都会有一些笔试:虽然不在核心岗位对于数据结构算法要求不是非常严格,但是也会有一些常规的数据结构和算法的题
- 排序
- 数据结构设计
- 复杂度讨论
- 一些脑经急转弯的算法题
- .....
-
跨平台能力要求多了!比如腾讯很明显就要求
flutter
开发能力 (毕竟2019年flutter
太火了!)
估计大家看到这里,也是内心oa: 面试是造航母啊!哈哈哈...
二、现在ios都在问什么
下面我总结2020某些大厂以及小公司的面试题!
2.1、ios 基础题
1,分类和扩展有什么区别?可以分别用来做什么?分类有哪些局限性?分类的结构体里面有哪些成员? 2,讲一下atomic的实现机制;为什么不能保证绝对的线程安全(最好可以结合场景来说)? 3,被weak修饰的对象在被释放的时候会发生什么?是如何实现的?知道sidetable么?里面的结构可以画出来么? 4,autoreleasepool 所使用的数据结构是什么? autoreleasepoolpage 结构体了解么? 5,讲一下对象,类对象,元类,跟元类结构体的组成以及他们是如何相关联的?为什么对象方法没有保存的对象结构体里,而是保存在类对象的结构体里? 6,ios 中内省的几个方法? class 方法和 objc_getclass 方法有什么区别? 7,runloop的作用是什么?它的内部工作机制了解么?(最好结合线程和内存管理来说) 8,哪些场景可以触发离屏渲染?(知道多少说多少)
2.2、ios 实战题
1,有哪些场景是nsoperation比gcd更容易实现的?(或是nsoperation优于gcd的几点,知道多少说多少) 2,app 启动优化策略?最好结合启动流程来说(main()函数的执行前后都分别说一下,知道多少说多少) 3,app 无痕埋点的思路了解么?你认为理想的无痕埋点系统应该具备哪些特点?(知道多少说多少) 4,你知道有哪些情况会导致app崩溃,分别可以用什么方法拦截并化解?(知道多少说多少) 5,你知道有哪些情况会导致app卡顿,分别可以用什么方法来避免?(知道多少说多少) 复制代码
2.3、网络题
1,app 网络层有哪些优化策略? 2,tcp为什么要三次握手,四次挥手? 3,https的握手流程?为什么密钥的传递需要使用非对称加密?双向认证了解么? 4,https是如何实现验证身份和验证完整性的? 5,如何用charles抓https的包?其中原理和流程是什么?
2.4、计算机系统题
1,了解编译的过程么?分为哪几个步骤? 2,静态链接了解么?静态库和动态库的区别? 3,static和const有什么区别? 4,什么时候会出现死锁?如何避免? 5,有哪几种锁?各自的原理?它们之间的区别是什么?最好可以结合使用场景来说
2.5、设计模式题
1,除了单例,观察者设计模式以外,还知道哪些设计模式?分别介绍一下 2,ios sdk 里面有哪些设计模式的实践? 3,设计模式的成员构成以及工作机制是什么?
2.6、架构 & 设计题
1,mvc和mvvm的区别?mvvm和mvp的区别? 2,面向对象的几个设计原则了解么?最好可以结合场景来说。 3,可以说几个重构的技巧么?你觉得重构适合什么时候来做? 4,你觉得框架和设计模式的区别是什么? 5,看过哪些第三方框架的源码,它们是怎么设计的?设计好的地方在哪里,不好的地方在哪里,如何改进?(这道题的后三个问题的难度已经很高了,如果不是太n的公司不建议深究)
2.7、数据结构&算法题
1,链表和数组的区别是什么?插入和查询的时间复杂度分别是多少? 2,哈希表是如何实现的?如何解决地址冲突? 3,排序题:冒泡排序,选择排序,插入排序,快速排序(二路,三路)能写出那些? 4,链表题:如何检测链表中是否有环?如何删除链表中等于某个值的所有节点? 5,数组题:如何在有序数组中找出和等于给定值的两个元素?如何合并两个有序的数组之后保持有序? 6,二叉树题:如何反转二叉树?如何验证两个二叉树是完全相等的? 复制代码
三、ios开发者我们该如何破冰!
⚠️此时此刻,我只想强调一件事:⚠️ 多年的应用层开发经验不足以应付现在的ios市场! 多年的应用层开发经验不足以应付现在的ios市场! 多年的应用层开发经验不足以应付现在的ios市场! 复制代码
3.1 ios的囧状
在本人看来,现在最尴尬的就是ios开发 3-5年 甚至5年以上的开发人员,比上不足,比下有余!
- 开发这么多年经验了,薪资要求肯定不能满足现状,我相信大家都是极度渴望突破:20k 甚至 30k 坎~
- 想去大厂,发现不光学历不行,就连最拿得出手的技术也只能屡屡受挫!
- 自己平时工作,家庭都很忙,学习成了自己内心一闪而过的念头!
- 开始学习,发现自己方向不够清晰,不知道自己应该学习什么!
- 好不容易找到了方向,发现自己能难坚持下来!
- 就算坚持了一段时间,发现好多问题无法攻克!
- 终于学习了一段时间,发现还是面试被打击!
- ☹️☹️☹️
3.2 学习的必要性
希望保持初心,继续往前面走!毕竟我们所从事的行业:it行业
.技术与行业必然是不断更新变化!虽然it行业高薪,但是你也要看到这个行业内的淘汰率也是不容小觑的!
换句话说:人家面试题一天比一天难,难道你的技术要保持原地?
3.3 学习的方法
学习的方法千万条,进步第一条
- 博客学习 : 我觉得这应该是我们最喜欢的方式!建议大家平时上班下班路上休闲时间就可以看看大牛的博客,文章!毕竟这些都是来自人家的总结探索分享,很具学习性!同时如果有条件的,不妨针对你学习的东西都能有所学习总结
- 讲座-分享会:这个也是比较好的!能够第一时间吸取的技术的新潮流!
- 看书:我个人也是比较喜欢看书的,虽然有点慢,但是每天书本的输入也成我现在汲取养分的一个重要渠道
- 公司、团队分享会:能够满足现在公司业务技术拓展,还能看到自己周边人的学习状态!
- 知识付费:现在信息爆炸,知识付费学习是目前最为潮流的方式,学习方式简单,成效快,知识比较系统!可能很多人都知道我本人比较喜欢得到,在得到平台经常吸取一些自己技术乃至职业方面的知识!
3.4 推荐学习方向
3.4.1:底层探索能力
很多人会讽刺:面试造航母,上班拧螺丝! 其实不然,面试的高要求对于一家优秀的ios需求单位来说是必须的!
-
ios开发实现的确有很多的方式,但是一个真正懂得原理的开发人员在日后的开发工作中是非常重要。我见过一些开发人员:遇到bug都是直接面向百度,不知道为什么直接
command + c
/command + v
ok,解决了,打版走人,下次又遇到了还是要面向百度,其中浪费的时间和小伙伴之间的沟通成本可想而知! -
底层原理只是你在工作开发中偷懒而逃避选择使用而已(或者全然不太了解)
-
技术不断更新,底层原理是永恒根基
-
底层原理是非常重要的,只有真正掌握原理才能迎接未来无限可能。
下面是我推荐大家学习的内容:
oc 底层探索篇也是大家熟悉而又陌生的地方,平时处处用,就是不知道为什么!
3.4.2:性能优化以及架构能力
只要你面试要求 20-30k
必然要求性能优化能力!
-
怎么优化启动速度,应用包的瘦身!
-
界面优化(卡顿检测以及分析解决)
-
内存管理方面也是面试以及平时开发的重灾区!
-
架构并不属于性能优化,但是我要求每一个
3年以上开发
都要有一定的架构思维!
3.4.3:数据结构算法
数据结构算法应该是每一个程序员必备的根据。我记得我的导师跟我说过:一个程序员需要两样东西:智商和勤奋
-
英文能力体现你的勤奋度
-
数据结构算法反馈你的智商等级
数据结构与算法并不只是抽象的概念,掌握好的话可以写出更高效、运行得更快的代码,这对于如今盛行的网页和移动应用开发来说尤为重要。如果你最近一次使用算法是在大学课堂上或求职面试时,那你应该还没见识到它的真正威力!
这个主题的大多数资料都有一种通病——晦涩难懂。满纸的数学术语,我觉得一种有趣的学习方式也是非常重要的!
3.4.4:跨平台能力
跨平台的方案有很多:
如上表所示,rn
、weex
采用的技术方案大体相同,它们都使用javascript
作为编程语言,然后通过中间层转换为原生的组件后再利用native
渲染引擎执行渲染操作。而 flutter
直接使用 skia
来渲染视图,而flutter widget
则使用现代响应式框架来构建,和平台没有直接的关系。
从性能方面来说,flutter
的性能理论上是最好的,rn
和weex
次之,并且都好于传统的 webview方案
而从社群和社区的活跃来看,rn和flutter无疑是最活跃的
总结:我个人针对现在的行情比较推荐大家学习:flutter
-
同时现在很多人也开始着手学习了
-
如何存托你的优势,我个人还要推荐在平时入门到项目的过程,不妨花点时间探索了一下背后的原理:渲染的流程,
flutter
和原生的共存通讯优化 -
下面这张思维导图大家可以参考学习
3.4.5:技术储备以及加分项
现在的ios开发为什么会遇到瓶颈是因为:前面储备过少,坐吃山空! 技术不断更新的时代,我希望你沉下心来与时俱进,不断储备技能为自己加分
这里我推荐学习:视觉方向! 无论直播还是小视频,图形图像处理成为必然的技能,未来5g时代的来临,这一块技术必将成为你与其他开发人员差距的赛点!
同时也推荐大家学习:应用安全攻防方向 逆向安全这些年越来越被我们熟知并且需要!一个高质量安全的应用程序必将是你薪酬翻番的谈资!
五、总结
作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的ios交流群:1012951431 不管你是小白还是大牛欢迎入驻 ,分享bat,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!
另附上一份各好友收集的大厂面试题,进群可自行下载!
上一篇: 鲫鱼豆腐汤好喝吗?喝鲫鱼豆腐汤有什么禁忌