iOS 面试指南

444 阅读3分钟

聚沙成塔,集腋成裘。

前言

从笔者自己面试经历看,一名中/高级iOS开发面试过程主要会从以下四个方面考察。职级越高可能重心越偏向后面的部分。

1. 数据结构和算法

2. OC底层和iOS应用层

3. 项目经历

4. 设计思维和方法

一、数据结构和算法

题目难度主要在LeetCode easy 和 medium,大部分是变形后LeetCode题目,最好是能写出完整代码,其次比较关注面试者:

  • a. 解题思路
  • b. 对边界情况考虑
  • c. 复杂度优化

题目:

  1. 字符串反转、插入操作
  2. 链表删除指定元素,逆序,k个分组逆序
  3. 二叉树查找公共父节点
  4. 去除重复元素
  5. 最大子序合
  6. 求集合的所有子集
  7. ...

二、OC底层和iOS应用层

  1. Runtime中消息发送,方法查找,method swizzling
  2. 类、分类的加载,区别
  3. 内存管理和优化,weak、autorelease、autoreleasepool
  4. block 深层理解
  5. 多线程中GCD应用,NSOperation等
  6. 启动优化、性能优化
  7. 事件链传递
  8. KVO原理和应用
  9. RunLoop

题目:

  1. 方法调用的流程?
  2. 分类加载的时机?分类作用?
  3. block 如何捕获外部变量?__block为什么可以修改外部变量值,底层结构?
  4. 5个任务需要被 3个、2个 分组执行,如何实现?
  5. autoreleasepool 结构和工作原理?
  6. 存在一个按钮的一半在view内,一半在view外,点击会有什么结果?详细介绍事件链的传递。
  7. 性能优化介绍,如何检测卡顿?
  8. 冷启动优化从哪些方面入手?
  9. 你们的项目是否实现组件化?常见的组件化方案有哪些?做对比
  10. 对于野指针的崩溃如何定位和解决?

三、项目经历

  1. 过往项目经历中有哪些考察点,比如:音视频,直播,IM, 组件化,性能优化,crash相关统计和防护,项目集成。其中会涉及到一些市面上已有方案的横向比较。

  2. 混合开发,其它语言或者大的框架,比如 swift开发、RN框架、flutter开发 等

这一趴更重要的是对自己过往项目的梳理和提炼,以及其中包含技术知识点的展开,也是==最重要、最可以展示自己优势==的环节。

四、设计思维和方法论

设计 设计思维的部分主要考察接口设计,闭环,扩展性

方法 分享过往的项目中自己比较满意的部分,是如何思考和完成的,是否有进一步的完善空间。 做事的方法论。

题目:

  1. 设计一个可以主动通知一些Native事件到H5的系统?比如切前后台、通知网络状态等功能,包括哪些接口?
  2. 最近一年内自己认为满意/比较有挑战的项目?挑战在哪?如何解决?满意标准?

Tips

  1. 简历上有的一定是自己特别熟悉且可以展开交流探讨的内容,如果仅仅听过的概念最好不要写上去。
  2. 介绍项目经历的环节一定把握机会,提前演练,引领面试官交流自己熟悉的部分。
  3. 节奏上要把握好,有思考的时间,不需要抢答。

写在最后

抱歉的是 笔者还未来得及整理答案,但是就我自己的感觉来说,单纯去看一下博客答案的意义并不是很大,更好的方式是自己试着探究一下从源码、知识点总结、应用实践几个方面,同时可以做一些输出来验证自己的掌握。