一年的 iOS
工作经验,在此分享一下此次面试 字节、阿里、腾讯、快手、美团、小米、猿辅导的经验
一、二、三面的面试题个大厂侧重点不一样,所以汇总在一起可以系统的进行学习
先推荐一个国内互联网大厂(百度、腾讯、阿里、字节、美团、滴滴、快手等)的内推群,任何职位皆可,内推会自己海投要靠谱,成功率偏高,可留言联系进群
所有面试题及答案汇总
一面
知识点:
一面的知识点主要考基础知识,由浅到深的问
网络相关:
- HTTP 与 HTTPS 的区别
- 三次握手,为什么需要三次,四次挥手,为什么需要四次
- DNS 协议
- 中间人攻击模式的流程
- 对称加密与非对称加密,具体如何体现
设计模式:
- 知道哪些设计模式,说出的越多越好
- 挑一个自己最熟悉的设计模式讲讲如何实现(最好不要讲观察者模式)
专业相关:
- 动/静态库的区别,该如何选择
- OC 中的属性修饰符的区别(weak 与 assign,copy 与 strong 以及 mutableCopy, atomic 与 nonatmoicd 以及线程安全问题)
- static 与 class 关键字 的区别
- 对 RunLoop 的理解,基本作用,与线程的关系,有哪些事件,其中包含哪些 Mode,各个 Mode 都有什么作用,在滑动屏幕的时候 Mode 是如何切换的
- Runtime 机制的理解,在 iOS 中有哪些具体的应用
- 消息转发的具体流程,对象(object)、类(class)、方法(method)这几个的结构体的具体组成,以及元类的特性
- KVO 与 KVC 的理解, KVC 中搜索成员名的顺序
- 关联对象的使用及原理
- 进程和线程的区别
- block 的实现原理,block 是不是一个对象,会结合具体代码考察 block 捕获变量、__block 的作用、存储等知识点
- OC 中 Category 的实现原理,以及重名方法的调用顺序及原因
- 类加载流程,父/子/分类中 load 方法的执行顺序,init 方法的执行顺序
- 视图圆角的实现,是否会造成离屏渲染,离屏渲染产生的原因,离屏渲染代价高的原因,还有哪些情况会造成离屏渲染,圆角实现的其他方法可以
- 如何实现一个三角形的 button
- 事件响应和手势识别,事件传递的顺序,优先级,响应者链的实现,hitTest方法理解及使用
- UIView 和 CALayer 的关系,各自的作用与区别
- 定时器有哪几种实现方式,各自的优缺点和使用场景
- JSON 序列化和反序列化
二面
- APP 的启动流程
- 异步绘制的实现远离
- Hook 与 Method Swizzling(方法交换)是否使用过,具体原理与过程
- 描述 ARC 的工作原理,使用的数据结构,做了哪些优化
- weak 的实现原理,为什么不会引用计数+1
- AutoreleasePool 的实现原理,需要结合具体的源码的方法解释,整个执行过程、数据结构等
- RunLoop 中哪些状态类型,各个类型如何切换及作用
- 对 iOS 中的多线程是否了解,具体有哪些多线程方案,GCD 与 Operation 对比以及优缺点,GCD 串/并行、同/异步 的执行顺序(会结合具体的代码考察),GCD 中的 barrier 的特性
- iOS 中的线程锁有哪些,对 DispatchSemaphore 的使用与理解
- 是否看过一些开源项目的源码,例如:AFNetWorking、Masonry、SDWebImage等,SDWebImage 会考察加载图片的流程,Masonry 会考察其中链式调用、不会造成内存泄漏的原因等,AFNetWorking 会考察各个版本之间的差异和优化点
三面
- iOS 中的卡顿检测,如何检测,检测到如何上报,各大厂都有哪些成熟的框架,以及实现原理
- 平时开发中是否有遇到过让自己影响特别深的问题,简单讲讲,最后是怎么解决的,对自己有什么启发
- 最近在看什么新技术么,进展如何
- 工作有没有遇到让自己觉得特别厉害的同事,让自己特别崇拜,觉得自己跟他的差距在哪儿,觉得他身上有哪些有点值得自己去学习
- 工作中、业余时间是怎么学习的,学习方式及时间分配
算法:
整个面试经历中,遇到的算法以及自己没有遇到的但是觉得很重要易考的算法都有整理出来,具体见文档:
Swift 相关的面试问题(重要)
如果自己简历有提到过会使用 Swift 语言进行开发,那么下面的知识点都很重要
- Swift 中的 Runtime 机制,与 OC 中的 Runtime机制的对比
- Class 和 Struct 的区别
- 理解 Swift 值类型的写时复制
- defer 的用法
- inout 输入输出参数
- 什么是高阶函数
- static 和 class 的区别
- 自定义模式匹配模式
- Swift 与 Objective-C 的联系与区别?
- Swift 比 Objective-C 有什么优势?
- Swift 是面向对象还是函数式的编程语言?
- 请说明并比较以下关键词:Open, Public, Internal, File-private, Private
- 请说明并比较以下关键词:strong, weak, unowned
- 说说 Swift 为什么将 String,Array,Dictionary 设计成值类型?
- Swift mutating 关键字的使用?
- OC 和 Swift 中的 enum 的区别