iOS 进阶开发Swift开发进阶

《iOS开发~仰望天空,脚踏实地!》

2020-03-23  本文已影响0人  Cooci_和谐学习_不急不躁

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以上

我做了一个图标以供大家参考(查看直观)

估计大家看到这里,也是内心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年以上的开发人员,比上不足,比下有余!

3.2 学习的必要性

希望保持初心,继续往前面走!毕竟我们所从事的行业:IT行业.技术与行业必然是不断更新变化!虽然IT行业高薪,但是你也要看到这个行业内的淘汰率也是不容小觑的!

换句话说:人家面试题一天比一天难,难道你的技术要保持原地?

3.3 学习的方法

学习的方法千万条,进步第一条

3.4 推荐学习方向

3.4.1:底层探索能力

很多人会讽刺:面试造航母,上班拧螺丝! 其实不然,面试的高要求对于一家优秀的iOS需求单位来说是必须的!

下面是我推荐大家学习的内容:

OC 底层探索篇也是大家熟悉而又陌生的地方,平时处处用,就是不知道为什么!

3.4.2:性能优化以及架构能力

只要你面试要求 20-30K 必然要求性能优化能力!

3.4.3:数据结构算法

数据结构算法应该是每一个程序员必备的根据。我记得我的导师跟我说过:一个程序员需要两样东西:智商和勤奋

数据结构与算法并不只是抽象的概念,掌握好的话可以写出更高效、运行得更快的代码,这对于如今盛行的网页和移动应用开发来说尤为重要。如果你最近一次使用算法是在大学课堂上或求职面试时,那你应该还没见识到它的真正威力!

这个主题的大多数资料都有一种通病——晦涩难懂。满纸的数学术语,我觉得一种有趣的学习方式也是非常重要的!

3.4.4:跨平台能力

跨平台的方案有很多:

如上表所示,RNWeex采用的技术方案大体相同,它们都使用JavaScript作为编程语言,然后通过中间层转换为原生的组件后再利用Native 渲染引擎执行渲染操作。而 Flutter 直接使用 skia 来渲染视图,而Flutter Widget则使用现代响应式框架来构建,和平台没有直接的关系。

从性能方面来说,Flutter 的性能理论上是最好的,RNWeex次之,并且都好于传统的 WebView方案

而从社群和社区的活跃来看,RN和Flutter无疑是最活跃的

总结:我个人针对现在的行情比较推荐大家学习:Flutter

3.4.5:技术储备以及加分项

现在的iOS开发为什么会遇到瓶颈是因为:前面储备过少,坐吃山空! 技术不断更新的时代,我希望你沉下心来与时俱进,不断储备技能为自己加分

这里我推荐学习:视觉方向! 无论直播还是小视频,图形图像处理成为必然的技能,未来5G时代的来临,这一块技术必将成为你与其他开发人员差距的赛点!

同时也推荐大家学习:应用安全攻防方向 逆向安全这些年越来越被我们熟知并且需要!一个高质量安全的应用程序必将是你薪酬翻番的谈资!

四、总结

没有无缘无故的幸运;
没有与生俱来的才华;
眼眸仰望天空;
身心脚踏实地;
不需90度的狂妄;
不要0度的闭塞;
45度仰望天空;
和谐学习,不急不躁;

上一篇下一篇

猜你喜欢

热点阅读