校招攻略:43份优质面经汇总(iOS开发)
序
我是一名普通本科的大四学生(软件工程专业),应聘方向是iOS开发,我在招聘中一共面试了30家左右的公司,每次面试后,都及时进行面经整理和解答扩展,现在筛选出优质面经,将它们汇总,分享给大家。
目录
实习面试
- 百度
 - 今日头条
 - 饿了么
 - SAP
 
校招面试
- 阿里巴巴
 - 百度
 - 腾讯
 - 美团点评
 - 今日头条
 - 京东
 - 小米
 - 迅雷
 - 深信服
 - 商汤科技
 - 顺丰科技
 - 招银网络
 
实习面试
百度
百度一面
iOS
- iOS中有哪些设计模式,举出两个例子
 - property有什么作用
 - 事件传递和响应链
 - ARC下,有哪些对象被加入了自动释放池中
 - 子线程中如何管理对象的生命周期
 - 如果使用Category添加了和基类一样的方法名的方法后,调用该方法,执行的是Category中的代码而不是基类的代码
 
计算机网络
- HTTP报文格式
 - https的加密过程
 - 响应码有哪些
 - TCP和UDP的区别
 - TCP如何保证可靠传输,分别有哪些机制
 - 简要说明下用于交换网络的设备,从物理层往上进行叙述
 
算法
- 在数组中寻找第k大的数,要求时间复杂度为O(n)
 
百度二面
iOS
- 属性修饰符
- 有哪些属性修饰符
 - assign和weak区别
 - assign在MRC和ARC
 - copy的用法
 
 - autoReleasePool
- autoReleasePool在什么情况下使用
 - 什么对象会加入autoReleasePool
 - autoReleasePool在什么情况下释放
 
 - RunLoop
- RunLoop三种模式的区别
 - 在什么情况下使用RunLoop
 
 - Delegate、Block、Notification的区别
 
算法
- 如何判断一个链表是否有环
 - 如何判断一个环的入口
 - 如何用两个栈模拟一个队列
 
计算机网络
- TCP和UDP的区别
 - TCP三次握手的过程和为什么要三次握手
 
今日头条
今日头条一面
算法
- 验证一个字符串是否为合法的ipv4地址
 
iOS
- 一个被放入到@autuReleasePool的对象,当自动释放池调用drain方法时,一定会释放吗
 - @aotuReleasePool的嵌套使用,对象内存是如何被释放的
 - 关于block的
- 在Masonry的block中,使用self,会造成循环引用吗
 - 那如果是在普通的block中呢
 - 那在普通的block中只使用下划线属性去访问,会造成循环引用吗
 
 
计算机网路
- 状态码
 
今日头条二面
算法
- 给出两个有序数组,其中A数组的长度为另外B数组的两倍,并且有效数字个数都是B数组大小,合并两个数组,要求:时间复杂度为O(n),空间复杂度为O(1)
 
iOS
- 如何检查循环引用
 - 在delloc方法执行的时候,该对象已经会回收了吗
 
今日头条三面
计算机网络
- http和https的区别
 - https的加密过程
 - 有了解过中间人攻击吗
 - https能防止中间人攻击吗
 
iOS
- 横向比较C++、andriod和iOS的内存管理机制
 
饿了么
饿了么一面
热身
- iOS接触时间
 - 收获最多的地方
 - 看简历上写了sqlite,能简要说明下sqlite的实现原理吗
 - ORM如果要你来设计的话,你觉得有什么瓶颈问题
 
数据库
- 描述一下主键和索引的作用
 - 有了解数据库引擎吗
 - 描述一下普通的存储过程和事务性存储过程
 - 描述一下第三范式和BCNF范式
 
计算机网络
- session和cookie
 - https的加密过程
 - 如何防止https的证书被篡改
 - 有了解过对称加密和非对称加密吗
 
iOS
- 你了解哪些iOS底层知识
 - AFNetworking2.0和3.0的区别
 - automic一定是线程安全的吗
 - iOS中的消息传递是怎么一步一步实现的
 - category和extension有什么区别
 - iOS中的私有属性如何设置
 - 串行队列和同步锁两者在保护线程安全上的性能对比
 - 并行队列是同时执行的吗
 - iOS中有哪些锁,你了解多少
 - iOS中UIKit框架的架构
 - UIView和CALayer之间的关系
 - UIView、CoreAnimation和CoreGraphics的关系
 - 应该知道SegmentFault,这个在iOS中是什么错误,那StackOverFlow呢
 - GCD、NSThread、NSOperation性能上有何区别
 
算法
- 说说你觉得在学习过程遇到最难理解的东西
 - 网络缓存中涉及到什么算法思想有研究过吗
 
其他
- CSS全称和HTML全称是什么
 - 面向对象和面向过程的区别
 
饿了么二面
热身
- 关于参加过项目的一些问题
- 享问是个创业项目,如何和大家一起协作的
 - ...
 
 - 在大学里成绩如何(我会说我成绩不好吗,严肃脸)
 
设计
- 例如有这样一个场景,一个APP,有很多的横栏,每个横栏中都有很多标签,这些标签都能够被拖动
- 如何去设计
 - 如果一个横栏中的标签能够被拖到另一个横栏呢
 - 是选择采用重写拖动方法还是选择使用UICollectionView呢
 - 是将整体作为UICollectionView,还是整体使用UITableView,每个横栏中使用UICollectionView呢
 
 
SAP
SAP一面
计算机网络
- 数据链路层的帧的概念和作用
 - ARP路由协议
 - 传输层有哪些协议
 
iOS
- UIView是如何设计的
 - CALayer和UIView的区别
 
算法
- 一个链表,如何进行每两个交换一次的操作
 
SAP二面
计算机网络
- 简述计算机网络的五层,从底层说起
 - ARP协议如何工作
 - TCP和UDP区别
 - 状态码
 
算法
- 给一个int类型数字,判断这个数字是否是回文的
 
校招面试
阿里巴巴
阿里巴巴一面
自我介绍
...
数据库
- 提高增删改查的效率手段
 - 数据库同步
 
操作系统
- 进程之间通信步骤
 
计算机网络
- http和https有什么区别
 - 传输层的优化协议
 
设计模式
- 了解哪些设计模式(我:所有设计模式,面:哦?)
 - 讲一下工厂模式
 - 工厂模式和抽象工厂的区别
 
iOS
- 如何理解运行时
 - 运行时可以做什么
 - UIViewController的生命周期
 - loadView在什么时候执行,一定会执行吗
 - 如何解决死锁问题
 - 多个线程同时访问一个资源应该注意什么
 - 锁的原理是什么
 - 函数参数传入的一般是什么
 - 如果传入一个对象,函数中做一些改变操作,如果不想改变原对象,该如何
 - iOS有几种复制
 - 什么行为能够产生深复制
 - 复制的应用
 
java
- java中如何实现值传递和引用传递
 - java的内存管理和OC区别
 
算法
- my name is Z X变成Z X is name my
 - 并分析时间复杂度和空间复杂度
 
数据结构
- 用两个队列模仿一个栈
 
阿里巴巴二面
闲聊
面:哈哈,看你很多地方都是这个名字,nineteen,你是很喜欢这个吗?
我:.......
面:那我们就直接进入正题吧
项目
- 简单聊了几个项目的内容
 - 要求共享桌面看项目代码
 - 讲述项目的架构过程和细节
 - 如何进行项目瘦身
 
算法
- 写冒泡排序(写了三个版本)
 
结尾
面:稍微等一下,这边安排一个加面
面:你赶紧吃个饭吧
我:哦好的......
阿里巴巴加面一
自我介绍
...
算法
- 封装一个字符串逆序的API
 
编程
- A、B、C、D四个线程,A、B、C执行完毕之后,D执行,且A、B、C同时进行
 - A、B、C、D分别添加执行时间
 - A、B、C中都修改一个资源
 
问题
- 线程之间的通信步骤
 - 讲一下开源框架的源码
- 问:既然说到AF,那么说下基本的NSURLConnection和NSURLSession的区别
 
 - 用一件事说明你对iOS的热情
 - iphoneX推出,我们应该在哪些方法做改变
 - WWDC11上面说了什么改变
 
阿里HR面
自我介绍
面:这是我今天听过的最简单的自我介绍
我:严肃脸
项目相关
公司实习相关
对自己的认识
阿里加面二
闲聊
晚上7点一个电话响起,铃铃铃~
面:现在又把你叫过来面试,你今天应该面了5轮吧
我:恩......
项目
- 享问作为一个创业项目的细节
- 背景
 - 成员管理
 - 如何运营
 - 技术难点
 - 未来发展
 
 
实习
- 实习的具体经历
 - 为什么没有选择去大企业实习
 
技术
- 如何理解iOS系统
 - iOS和andriod在性能上又和区别,具体到实现呢
 - 设计模式是如何在iOS中体现的
 - 如何去优化项目
 
自我认知
- 用三个关键标签定位自己,并说出充分的依据
 
阿里补招一面
项目
- 分享一下之前做的项目,难点是什么
 - 刚刚说到你平时会研究的一些技术点,那么分享一两个
 
iOS
- 如何利用Runtime进行字典转模型
 - 有没有研究过开源框架,有哪些收获
 - 如何设计保证三方库变动对项目本身影响最小
 - 有什么辅助工具去检测内存泄露
 - 内存泄露有哪些方式
 - block如何导致引用计数增加的
 
阿里补招二面
热身
- 确认下是否有Offer了,已经签了三方了吗
 - 在美团的实习主要做了什么
 
iOS
- 怎么理解JSBridge工作的
 - 对这种工作原理有觉得有什么缺点吗
 - 有了解哪些开源项目
 - 为什么大家要用AFNetworking
 - AFNetworking做了什么性能方面的优化
 - Masonry有什么亮点
 - Block循环引用如何解决
 - Runloop和线程的关系
 - MVC有什么不好的地方
 - 有了解过MVP吗
 - 如果让你设计dispatch_once,你会如何设计
 
计算机基础
- 从浏览器查询一个关键字,从计算机原理到计算机网络,展示整个过程
 - 最后的响应报文如何解析到浏览器上有了解吗
 
算法
- 一个算法:A和B两个序列,经历最小次数的操作,使得序列从A变成B
 
项目
- 有参与过开源项目吗
 - 之前做的项目或者实习有比较具有挑战性的事情吗
 
百度
百度一面
自我介绍
......
算法
- 打印100到200之间的素数
 
项目
iOS
- UITableView如何调优
 - iOS内存管理模式
- ARC全称
 
 
计算机网络
- TCP和UDP的区别
 - 三次握手
 
数据库
- 一个场景,手写SQL查询
 
百度二面
自我介绍
面试官好像认识我的样子,并没有自我介绍环节
算法
- 反转链表
 - 三种方式遍历二叉树
 
iOS
- 介绍iOS内存管理
 
计算机网络
- TCP和UDP的区别
 - 手写TCP三次握手
 
设计模式
- 手写代理模式
 
百度三面
技术相关
- 花10分钟讲述一个技术点
 - JSPatch的原理以及苹果如何检测
 
其他
- 项目细节(享问)
- 如何带团队
 - 如何协调工作
 - 项目背景和目标
 - 成果
 
 - 对自己的规划
 - 有没有目标榜样
 - 来北京会不会压力过大
 - 对大公司和初创公司的选择
 - 同级别大公司如何选择
- 答:提高技术
 
 - 具体怎么个提高法:
- 答:三个方面......
 
 - 面试官介绍了百度如何能提高技术(大概10分钟)
 
腾讯
腾讯一面
自我介绍
......
闲聊
- 我看你面的是iOS岗位,目前成都是没有iOS的
 - 东北大学的为什么来成都呢
 
计算机网络
- 计算机网络一共有多少层
 - HTTP和HTTPS的区别
 - TCP三次握手
 
项目
- 介绍一个比较典型的项目
 
iOS
- MVC模式和MVVM模式区别
 - iOS内存管理方式
 - 如何解决iOS的内存管理出现的问题
 - iOS内存管理和andriod内存管理的区别
 
结尾
- 我觉得你作为本科生是很优秀的
 - 介绍了成都这边的情况,目前andriod居多,没有iOS岗位
 - 你介意进入的话转岗到andriod开发或者weex开发吗
 - 你等下,我把你引荐到二面
 
腾讯二面
自我介绍
项目
- 介绍一个比较好的项目
 
按照简历问
- MVC模式C的臃肿和单薄如何控制,自己是如何写的
 - M不应该和V交互吗,M不是要显示到V上嘛(钓鱼执法)
 - Unicode和UTF-8的区别
 - 数据库事务是什么
 - JS可以用来做什么
 - JS能用来开发服务器吗,开发服务器用的引擎是什么
 
美团点评
美团点评一面
自我介绍
......
iOS基础
- C++和OC有什么区别
 - 利用OC的动态特性能做什么
 - UITableView如何调优
 - 事件传递和事件响应
 - MVC和MVVM有什么区别
 - iOS的内存布局
 - 介绍ARC
 - 消息机制具体的步骤
 
iOS项目
- 瀑布流如何布局
 - 有多个样式的Cell,你会怎么设计
 
算法
- 两个有序数组,求第K大的数
 
计算机网络
- TCP和UDP的区别
 
美团点评二面
自我介绍
面:这边没有找到你的简历
我:啊?那会不会没有优势啊
面:不会的,讲的好就行
iOS
- iOS内存管理
 
操作系统
- 进程之间如何通信
 
计算机网络
- TCP三次握手具体流程(画出来)
 - TCP三次握手只允许用一个标志传递,如何控制
 - 为何要进行三次握手
 - TCP的拥塞控制
 
智力题
- 坐标系中存在一个不规则多边形,判断一个点是否在其中
 
算法
- 求二叉树中最大的距离
 
美团点评三面
自我介绍
面:没有我的简历
我:我用手机传一份吧
于是加了微信
项目
- 享问
- 背景
 - 团队协作
 - 如何设计产品
 - 运营成果
 
 
技术相关
- 有了解过认证的协议吗
 - SSL的详细通信过程(纸画)
 - JSPatch原理
 - 如何模拟热更新的过程
 
产品经理
- 如何设计一个首页
 - 产品经理应该具备哪些素质
 - 产品经理应该向程序猿交付哪些东西
 - 一般情况下,产品和程序猿配合出现问题,细节体现在哪里
 
个人
- 你觉得自己最大的优点是什么
 - 是完美主义者吗
 - 在团队协作中会有觉得很垃圾的人吗
 - 团队协作中会觉得别人写的代码很垃圾吗
 
美团点评HR面
闲聊
- 听面试官说特别想让你留在成都
 - 你是绵阳的吧,我是德阳的,大学在上海,就一直在上海工作了
 - 介绍了美团的餐饮事业群的详细信息(我并没有问...)
 
问题
- 对一个薪资的要求
 - 意愿城市
 - 将来的规划
 
项目
- 主要问了享问的细节
 
提问
- 请问下我的评分sp机会大吗
 - 请问sp的一个标准是top几大概
 - 后续的通知会什么时候发出
 
今日头条
今日头条一面
自我介绍
- 手里有你的简历,但是还是想听听你来自我介绍下
 
算法
- 合并两个有序数组
 - 二叉树的反转
 
操作系统
- 线程和进程的区别
 - 堆和栈的区别
 
iOS
- load和initialize区别以及它们有哪些应用
 - 代码写在load和initialize中会影响启动吗
 - 介绍下iOS中的多线程
 - GCD手动创建的线程和GCD提供的API线程有啥关系
 - 有读过GCD的源码吗
 
今日头条二面
算法
- 实现一个LUR Cache,包含读、写两个操作
 
iOS
- block相关
 - 发送网络请求
 - MVVM
 - KVO
 - 消息机制
 
今日头条三面
算法
- 查找两个节点的最近公共父节点
 
闲聊
- 相比上次来面试提高了什么
 - 来段英文介绍
 - 拿过哪些offer
 - 为什么选择去天天狼人杀
 
iOS
- AFNetworking的源码架构
 - 自己如何设计网络库
 - Masonry源码架构
 
计算机网络
- TCP的三次握手
 - TCP的四次挥手
 
京东
京东一面
自我介绍
......
项目
- 挑一个比较典型的项目进行分享
 
iOS
- iOS中开发有哪些调优策略
 - KVO和KVC是什么
 - 工厂模式是什么
 - 工厂模式和抽象工厂的区别
 - 单例模式如何设计
 - 多线程有哪些
 - GCD中信号量怎么使用
 - 一个队列负责插入数据操作,一个队列负责读取操作,同时操作一个存储的队列,如何保证顺利进行
 - 原型模式
 
小米
小米一面
自我介绍
......
问:面试官您是从事什么岗位的呢
面:我是后台开发的
我:......
算法
- 实现reHash方法细节
 
计算机网络
- 在浏览器中输入一个域名会执行哪些操作
 
项目
小米二面
闲聊
问: 面试官您是从事什么岗位的呢
面:Andriod系统层开发
我:......
算法
- 多个任务,具有起始时间和结束时间,任务是串行执行,规则如下:前一个任务结束时间和后一个任务开始时间不能相交,则计算最多的执行个数的路径为
 
java多线程
- 在一个方法中有一个内部类,声明一个内部类类型的临时对象,然后开辟一个子线程去访问这个临时对象,最后在main中调用这个方法,问程序能正常运行吗,会出现野指针异常吗?
 
java基础
- 弱引用和强引用的区别
 
项目
迅雷
迅雷一面
自我介绍
......
iOS
- MVC和MVVM的区别
 - MVVM哪些东西是可以重用的
 - 如何进行自动布局
 - storyboard和纯代码布局的优劣
 - SDWebImage的缓存策略
 
项目
- 享问细节
 
算法
- LRU算法
 
深信服
深信服一面
自我介绍
......
面前摆放着一台联想笔记本
我:面试官是做什么开发的
面:我是做Linux开发的
我:......
面试体验
- 拿着一份像是公司出的题,好几页,整个过程来回翻阅题,然后看到合适的就问
 
算法
- 模式串匹配(用牛客的某个后台付费平台出的题)
- 具体内容:普通字符+(通配符)?+(通配符)*
 
 - 二叉树的几种遍历方式
 
笔试题(可能测试是否作弊)
- iOS数据持久化的几种方式
 - 如果是自定义文件如何持久化
 - 写出相应代码
 
C语言
- 如何判断一个C语言结构体相等
 - 那如果是在Java中如何判断一个对象相等呢
 - C语言中static修饰符的作用
 
数据库
- 数据库事务的特点
 
深信服二面
自我介绍
......
我:面试官您是做什么的岗位的呢
面:哦,我不是iOS的,可能没法面iOS方面的,我们就问一些算法吧
我:......
面试体验
- 同样是不断翻面试题考
 - 基本是算法,以算法能力评估一个人的能力
 
算法
- 设计一个算法求圆周率
 - 只能遍历一次文本,需要找出多个关键字的次数,位置
 - 找出一个32位数二进制表示法中1的个数(需要达到最优解)
 
商汤科技
商汤科技一面
自我介绍
面:不好意思,我这边好像找不到你的简历了,所以你得比较详细地介绍一下你自己
我:......
算法
数羊,给定一个初始数N,第一次数的数为N,第二次为2N,依次类推,直到kN,那么求当0-9的数全部都出现的时候的k值
iOS
- 介绍property的修饰符
 - bounds和frame的区别
 - 在MRC中如何解决循环引用
 - 介绍多线程的实现方式
 - 介绍iOS中数据库,描述一下sqlite的表结构
 - KVO是什么,使用KVO需要注意哪些问题
 - GCD中的循环引用
 
商汤科技二面
自我介绍
我:接触iOS开发三年,上架的项目有5个...
面:哇,你比我开发还久,我上架项目也没有你多(见笑了大佬),不过我是做底层SDK开发的
算法
- 面试官没说清楚题
- 然后边讨论题应该怎么设计,边聊思路
 
 
设计模式
- 拿到一个项目,应该如何设计架构
 - MVC模式是怎么交互的
 - UITableViewCell如何实现代理模式的
 - 谈谈KVO模式如何实现
 
计算机网络
- 三次握手的细节
 - 状态码
 - 如何设计缓存策略
 
操作系统
- 谈谈多线程的底层原理
 
iOS
- 内存管理修饰符的区别
 - 介绍一下深复制和浅复制
 - 描述一下runtime
 - runtime可以做什么事情
 - 描述一下runLoop
 - runLoop又可以做什么事情
 - 介绍一下iOS中的多线程
 - GCD有哪些常用的API
 - 使用GCD应该注意什么问题
 - iOS内存管理方式
 - iOS的沙盒
 
商汤科技三面
自我介绍
我:开发过五个上架APP
面:哇,这么多
项目
- 动机
 - 过程
 - 扮演角色
 - 收获
 - 有哪些不足
 - 具体每个项目还聊了可行性(其中有创业项目)
 
技术
- git相关操作
 - 多线程底层原理
 
人生
- 职业规划
 - iOS工作想要从事前端UI还是高性能
 - 想要从事前端移动端还是愿意从事后台的工作
 
商汤科技HR面
- 有了解过相关工作内容吗,是否和预期一致
 - 对公司了解吗
 - 我给你介绍下吧
 - 工作城市选择
 - 目前有offer吗
 - 实习时间
 - 目标公司的特点
 
顺丰科技
顺丰科技一面
自我介绍
......
项目
- 享问的细节
 
计算机网络
- 三次握手过程
 
Java
- Java的引用和对象的区别
 
设计模式
- 解释单例设计模式
- 应用场景
 - 和静态方法的区别
 
 
算法
- 快速排序的原理
 - 线段树
 
iOS
- MVC模式
 - MVVM和MVC的区别
 
顺丰科技HR面
自我介绍
......
项目
- 讲一个最好的项目
 
闲聊
- 有面过其他哪些公司
 - 对于深圳压力大如何看待
 - 东北大学的学生为什么来成都面试
 - 介绍一下家庭情况
 - 家里人对于工作地点的建议
 - 自己对工作城市的选择
 - 优点和缺点
 
我的提问
- iOS岗位主要做什么
 - 薪资如何
 - 加班严重吗
 - 公司有食堂吗
 
招银网络
招银网络一面
自我介绍
......
项目
- 享问细节
 - 有做过日志管理吗
 - 更新版本的内容是通过什么方式获得的
 
iOS
- iOS内存管理方式
 - 项目架构图
 - iOS推送是什么
 - 浏览器可以分享东西到具体APP,这样是如何实现的
 - 有做分享吗
 
招银网络二面
自我介绍
面:你面试这么多了,自我介绍太累了,就省去吧
我:(中国好面试官!)
项目
- 享问细节
 - 如果保证团队顺利运行
 - 未来目标
 
招银网络HR面
自我介绍
.....
项目
- 享问细节
 
闲聊
- 成绩排名
 - 有奖学金吗
 - 有挂科吗
 - 意向城市是哪里,成都这边不确定有iOS岗位,我得问问
 - 优点和缺点
 
结尾
看到这里,预祝你校招成功~
点个赞吧!