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