序
我是一名普通本科的大四学生(软件工程专业),应聘方向是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岗位,我得问问
- 优点和缺点
结尾
看到这里,预祝你校招成功~
点个赞吧!