|
|
|
|
移动端

校招攻略:43份优质面经汇总(iOS开发)

我是一名普通本科的大四学生(软件工程专业),应聘方向是iOS开发,我在招聘中一共面试了30家左右的公司,每次面试后,都及时进行面经整理和解答扩展,现在筛选出优质面经,将它们汇总,分享给大家。

作者:nineteen来源:知乎|2018-05-08 14:32

技术沙龙 | 邀您于8月25日与国美/AWS/转转三位专家共同探讨小程序电商实战

我是一名普通本科的大四学生(软件工程专业),应聘方向是iOS开发,我在招聘中一共面试了30家左右的公司,每次面试后,都及时进行面经整理和解答扩展,现在筛选出优质面经,将它们汇总,分享给大家。

校招攻略:43份优质面经汇总(iOS开发)

目录

  • 实习面试
  • 百度
  • 今日头条
  • 饿了么
  • 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岗位,我得问问
  • 优点和缺点

结尾

看到这里的童鞋们,预祝你们秋招成功!

【编辑推荐】

  1. iOS开发3年只用5分钟搞定面试官
  2. 几次面试后,我的一些思考和总结
  3. iOS程序员这样面试,当场拿到offer的几率是80%?
  4. 美团iOS面试败北感悟
  5. 一份年薪30万的Android面试宝典,附答案
【责任编辑:未丽燕 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

SQL Server 2005数据库管理与应用高手修炼指南

全书分为基础篇、高级篇和应用篇3个部分,共18章,有重点、分层次地讲解SQL Server 2005的基础知识、高级使用技巧和项目应用方法。第1~10...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊