聚沙成塔,集腋成裘。
前言
从笔者自己面试经历看,一名中/高级iOS开发面试过程主要会从以下四个方面考察。职级越高可能重心越偏向后面的部分。
1. 数据结构和算法
2. OC底层和iOS应用层
3. 项目经历
4. 设计思维和方法
一、数据结构和算法
题目难度主要在LeetCode easy 和 medium,大部分是变形后LeetCode题目,最好是能写出完整代码,其次比较关注面试者:
- a. 解题思路
- b. 对边界情况考虑
- c. 复杂度优化
题目:
- 字符串反转、插入操作
- 链表删除指定元素,逆序,k个分组逆序
- 二叉树查找公共父节点
- 去除重复元素
- 最大子序合
- 求集合的所有子集
- ...
二、OC底层和iOS应用层
- Runtime中消息发送,方法查找,method swizzling
- 类、分类的加载,区别
- 内存管理和优化,weak、autorelease、autoreleasepool
- block 深层理解
- 多线程中GCD应用,NSOperation等
- 启动优化、性能优化
- 事件链传递
- KVO原理和应用
- RunLoop
题目:
- 方法调用的流程?
- 分类加载的时机?分类作用?
- block 如何捕获外部变量?__block为什么可以修改外部变量值,底层结构?
- 5个任务需要被 3个、2个 分组执行,如何实现?
- autoreleasepool 结构和工作原理?
- 存在一个按钮的一半在view内,一半在view外,点击会有什么结果?详细介绍事件链的传递。
- 性能优化介绍,如何检测卡顿?
- 冷启动优化从哪些方面入手?
- 你们的项目是否实现组件化?常见的组件化方案有哪些?做对比
- 对于野指针的崩溃如何定位和解决?
三、项目经历
-
过往项目经历中有哪些考察点,比如:音视频,直播,IM, 组件化,性能优化,crash相关统计和防护,项目集成。其中会涉及到一些市面上已有方案的横向比较。
-
混合开发,其它语言或者大的框架,比如 swift开发、RN框架、flutter开发 等
这一趴更重要的是对自己过往项目的梳理和提炼,以及其中包含技术知识点的展开,也是==最重要、最可以展示自己优势==的环节。
四、设计思维和方法论
设计 设计思维的部分主要考察接口设计,闭环,扩展性
方法 分享过往的项目中自己比较满意的部分,是如何思考和完成的,是否有进一步的完善空间。 做事的方法论。
题目:
- 设计一个可以主动通知一些Native事件到H5的系统?比如切前后台、通知网络状态等功能,包括哪些接口?
- 最近一年内自己认为满意/比较有挑战的项目?挑战在哪?如何解决?满意标准?
Tips
- 简历上有的一定是自己特别熟悉且可以展开交流探讨的内容,如果仅仅听过的概念最好不要写上去。
- 介绍项目经历的环节一定把握机会,提前演练,引领面试官交流自己熟悉的部分。
- 节奏上要把握好,有思考的时间,不需要抢答。
写在最后
抱歉的是 笔者还未来得及整理答案,但是就我自己的感觉来说,单纯去看一下博客答案的意义并不是很大,更好的方式是自己试着探究一下从源码、知识点总结、应用实践几个方面,同时可以做一些输出来验证自己的掌握。