2019年5月至10月秋招iOS面经汇总
本人:广东某二本学校,科班类专业,学习iOS一年,无实习经验参加秋招(本人在学校有个英语社团,跟面试官聊天的时候还是可以聊一下,各位同学不要以为社团那些事情跟学习无关可以不用说)
注意下面只是说了一部分回答,真正答案不是这么短,正常一轮面试40分钟,OC方面的资料还是比较多的,极客时间的iOS高手课,那几本iOS内存管理和多线程书籍,一些团队的技术博客,能学到就行,不管用什么办法
4月春招实习岗
美团
一面,一个半小时
1,property有哪些属性(OC中使用的属性修饰符)
2,iOS的变量什么时候释放,把你了解的都说出来
3,刚刚你提到runloop,说一下你了解的runloop。
4,多线程
5,各种锁
6,消息转发
7,说一下计算机网络五层,以及各层的作用
8,现在我们来做两个算法题,先说一下nlogn的时间复杂度的排序,并调一种实现。
9,给定两个数组,第一个数组是无序的数长为n,第二个数组每个元素是一对下标[(1,3),(2,4)],表示第一个数组中下标1-3的和和2-4的和,长度为m,我们要把其相对于第一个数组和求出来,选择一个比较优的算法,并分析其时间复杂度。
比如1-3和2-4 ,2-3这里出现了重复计算,我们可以用一个额外的数组去保存这些重复运算,这个数组长度为
n,存储的值是,比如下标是1的时候相对于第一个数组下标0的值加下标1的值,下标是2的时候0+1+2,当我们要取数组的(2,5)范围的值,可以用新创建存储重复运算的数组,取其下标5减去其下标2就可以得出3+4+5的值。这题花了15分钟吧,问了三次面试官才知道题目的意思,一开始想用动态规划,后面得出这种用数组存储重复运算,想递归优化那种思路吧,面试官觉得这个答案正确,叫我说一下时间复杂度,最坏是(0,n)即0+1+2...n(这里是第一个数组的下标,这时候已经把所有可以重用的数据求出来了,即后面我们的运算只需要1的复杂度(2,5)->缓存数组[5]-缓存数组[2],所以时间复杂度是n+m。这题差点想放弃,大家碰到算法题听不懂的时候不要太快放弃,面试官会很耐心的重复几次。
这时候跟面试官聊一下这次面试的缺点:消息转发,锁和数字证书有问题。
二面问了些swift的问题,大致跟一面一样,凉
蘑菇街
一面:
1,如何用实现微信两人之间发送消息?
2,git是如何判断两个文件直接有什么不同的
不会,说了用线段树
3,面向函数和面向对象编程有什么不同
4,项目中有什么难点
5,fps
6,KVO
7,iOS内存管理
8,多线程以及OperationQueue和GCD的区别
9,如何发布自己制作的框架
10,Swift和iOS的不同
11,第三方库的了解
二面
有没有音视频基础,10分钟就挂了
春招主要是练胆子和试一下面试流程,现在想起来春招很多回答都是错误的哈哈
秋招历程:
一:提前批
7月份 字节跳动提前批(凉,后面秋招被锁简历,各位不要相信提前批不锁简历,hr当时口口声声说不会锁结果。。。)
- 1面
1,线程卡死问题,同步队列进行一个异步操作,异步操作里面再执行一个同步操作,卡死。
2,写个单例(写错了有点尴尬,不过跟面试官说清楚思路后没问题,大家要积极沟通)
3,两个字符串相同的地方
建一个128的数组,用于保存重复值数值。
4.oc基础
- 2面
1.介绍项目
2.同步队列和并行队列的区别
3.block的源码以及如何实现__block捕获变量
4.看过哪些框架源码说一下
5.会c和c++吗
6.学过安卓吗
面试官说我们需要音视频基础的同学,其实我知道是我基础问题答得不好,吓得我赶紧去学习了一下音视频,为后面面试加分,感谢这个面试官!
八月份 网易提前批(笔试,凉)
- 一面
1.swift的optional如何实现
2.swift的map和flatmap有什么区别
3.swift的reduce
4.RxSwift如何combine几个信号量然后进行再onNext,实现几个异步请求后统一进行一个请求
5.new和malloc有什么区别
6.数据库索引
7.二维数组,怎么判断里面的数字能组成一个加号,及样子看上去是个加号
转化为1维数组,除了竖着那一列会有很多个数,其他都为1个数,结束后才想出来
这次考量了比较多swift,没怎么准备就挂了……
二,9月14 - 20号:杭州有赞(凉)
- 一面
1.oc基础
2.有序数组找和为target的数
3.树上两个节点的公共父节点
4.3sum
5.快排
- 二面
1.多线程
2.各种锁
3.项目难点以及第三方库
4.10亿数据找topk
5.什么时候来实习
一星期后收到感谢信,面试官还加了我微信,以为通过了,聊的还很开心
9月14 - 20号:拼多多(凉)
1.SDWebImage的设计以及其优点
2.NSCache的内存淘汰原则
3.项目遇到什么多线程问题
4.viewController在退出的时候,dispatch任务还在执行会怎么样
5.Http的post一定会引起数据库查找吗
6.token是什么流程,为什么要请求令牌,告诉服务器用户的app信息
6.alloc分配对象在哪里
7.判断括号是否匹配
8.括号匹配不足,求要补的括号数。
算法题都撕出来,网络方面打得不好,面试官评价也是这样说
三,9.23号 广州宣讲会 + 现场面 :珍爱网(凉)
- 一面
1.轮播图如何实现,无限轮播不抢手势
2.分类
3.block
4.mac os了解过吗
5.property
6.音视频
7.swift和oc的特性
8.堆栈
9.SDWebImage
10.AFNetworking
看了Alamofire,没看af
11.有使用抓包解决网络问题吗
12.卡顿监测
mac os和抓包那个没答出来,一面挂,貌似只有一面
四:9月24 号 - 9 月 28号 广州现场:百度(凉)
一面
1.数据库三范式,怎么增加列,手写
2.什么是B树
3.网络五层
4.http和https的区别
5.什么是死锁
6.线程与进程的区别
7.五种任务调度算法
8.进程间怎么通信
9.SDWebImage
10.什么是runtime和runloop
11.滑动优化
12.iOS内存管理
13.property的各种属性
14.堆栈区别
15.合并两个有序数组(写的很烂- -)
16.数组中唯一出现的数字
17.大学有什么项目或经历,不限于学习方面(说了我的英语社团)
二面
1.网络五层
2.DNS劫持
3.ARP协议怎么工作
4.ios13有什么新特性
5.几个异步操作怎么设置一个同步接口
6.几个同步操作怎么变成异步进行
7.遍历view,stack和非stack
三面
1.指针和引用的区别
2.虚函数表怎么实现
3.swift和oc的区别
4.topk 用类似快排的思路
5.链表环开始的地方
6.大学获得什么奖项
7.大学有什么社团
8.成绩排名
9.一些为人处事的问题
估计排序排掉了,问题问的比较基础百度这边。
五:10月1号后 :蘑菇街
- 一面小姐姐,春招投实习就面试过我,有点尴尬哈哈 30分钟
1.项目中音视频怎么实现
2.遇到什么AVPlayer的坑吗
3.多个AVPlayer播放会怎么样?
3.项目难点(表情键盘,富文本)
4.ffmpeg有结合iOS去使用吗,为什么需要学习ffmpeg这些视频库(占时没有)
5.暑假没去实习去干嘛了(直击痛点)
6.为什么分类不能添加属性(class_ro_t *为只读属性)
7.双栈实现队列
- 二面 40分钟
1.cocoapods怎么实现的(多个第三方库链接成一个pod的.a文件,主项目跟这个.a文件链接)
2.github连不上,cocoapods怎么办(网速问题开VPN;还是连不上就git分布式,拷贝同事电脑文件)
3.拷贝什么(没答上)
4.http和https的区别(非对称加密)
5.iOS怎么能发起http(配置info)
6.配置了一定能生效吗?叫我回去查一下
需要注意的是,即使写了上述配置,在 HTTPS 页面中,HTTP 的 javascript 或 css 不会被加载,因为苹果认为这降低了页面的安全性。
7.SDWebImage缓存清除策略
一个NSMapTabel<key,value>的weaktable去管理封装缓存,在接收到内存警告的时候清除table。为什么要自己建个key,value的table呢,我们知道NSCache对key是不会拷贝的,这边SDWebImage进行了key的copy,手动管理key的生命周期,曾经有个issue是因为key没有被copy,导致key被释放,table查询缓存崩溃。
//源码
// Do the real copy of the key and only let NSMapTable manage the key's lifetime
// Fixes issue #2507 https://github.com/SDWebImage/SDWebImage/issues/2507
[self.weakCache setObject:obj forKey:[[key mutableCopy] copy]];
8.YYCache怎么实现
9.block的内存捕获
10.分类能添加属性吗
11.使用过Flutter和React Native吗(说了他们的好处)
12.什么是热更新,如何进行
13.你确定现在还能热更新吗?
14.组件化和容器了解过吗
15.你有什么问题问我吗(对我有什么评价)
去模仿社交媒体类app的实现的确是个学习方法,但是可能接触不到现实中遇到的更多问题(没有实习。。),比如性能测试方面,可能会因为你机器配置太高无法测出,这种需要在企业中学习,顺便介绍了一下蘑菇街技术栈。
16.平时有刷算法题吗,最长回文。
感觉蘑菇街很不错,面试内容比较偏向实际应用,深度和广度都有考虑到,以及面试者对于一些特殊情况有没有去了解,每次都能被问到不会的点。。。
- 三面
1.项目
2.kvo底层
3.rn和flutter
4.删除倒数第k元素
只说出来遍历两次的算法,那时候知道有个k-1什么的,没说出来
5.有序数组找到两个下标和为
双指针
6.有序变成无序怎么办
hash表,当时也没答出来
六:10月1号后 快手(凉)
- 一面
1.iOS反射机制
2.iOS的timer和CADisplay的区别
2.二叉树,二叉平衡树,AVL,红黑树,B树的区别
3.二叉树公共节点
4.随机数生成,真随机数和伪随机数
5.不用第三者,怎么交换两个数
6.1000个瓶子,里面有1瓶毒药,只有10只老鼠,老鼠吃了之后一星期会死亡,怎么测试。2^10 = 1024
其他问题为计算机网络问题
- 二面
1.UI的渲染步骤,视图打包流程,cpu和gpu工作,为什么要双缓冲区
2.图片怎么显示的,以及图片缓冲区
3.NSObject结构体里面有什么,大小为什么是16字节
4.KVO怎么实现,_会不会触发,成员变量会不会触发,kvc+成员变量会不会触发,不用setter怎么触发kvo
5.操作系统内存布局,有什么区
6.一个OC对象的内存布局
7.滑动优化怎么搞
8.什么是runtime,什么是runloop,有几种mode
9.NSObject的内存布局
10.isa指针和super指针
11.元类是什么
12.所有OC对象都继承与NSObject吗,id是什么
13.SDWebImage的清除缓存策略(我说了YYCache。。)
14.block是什么
15.LRU算法怎么实现
16.Swift和OC的方法调用(静态派发和动态派发)
17.两个链表的公共结点
18.链表中环开始的地方,原理说出来
19.项目里面最体现你技术的点。
- 三面
1.什么是hash
2.hash的具体实现,程h序里面一个对象怎么通过hash定位到具体的内存区。
3.hash数组扩容(说了数组到某阀值扩容并且拷贝)
4.一个天平,4个砝码,能秤出多少种重量。我没了解清楚面试官说的四个砝码重量是不是一样?一样的情况下不是就四种吗😥 这题真不会。
七:10月8号 成都京东现场(凉)
- 一面
1.项目介绍
2.SDWebImage
3.分类
4.用户从版本1.0升级到3.0,其中直接跳过了2.0,其中的数据库怎么维护
用plist文件记录每个版本的变迁,升级把途中所有版本的sql执行一遍。
5.一个播放器要有哪些功能模块(五个)
网络,缓存,解码,控制,歌词
6.滑动优化及其检测
- 二面
1.为什么学iOS
2.UILabel如何高亮其中URL
3.SDWebImage
4.http和https
5.函数栈,以及其返回参数如何保存(这里答错了,后面回去)
6.iOS13新特性
7.排序算法
8.那些地方会有循环引用和内存泄漏
八:10月10号 微博(通过)
- 一面 + hr
常见OC问题,貌似很多人一面通过后就oc
九:10月13号 五八同城(offer)
一面
1.Block
2.分类实现
3.SDWebImage
4.项目如何滑动优化(tableView行高计算原理,注意版本新特性)
5.http和https
6.runtime
7.runloop的使用以及工作原理
8.rn和flutter
9.数据库索引以及一些数据库问题
二面 面试官是做测试的,对网络知识比较看重
1.项目介绍
2.http的头部
3.http1.0和1.1
4.http的keepAlive和tcp的keepAlive有什么区别
5.如何实现keepAlive
6.http和https
7.ipv4地址不够用怎么办,不能用ipv6的情况
dhcp和子网掩码(没答全,面试官叫我回去查一下nap表?)
8.rn和flutter
hr面
十:10月15号后 酷狗(通过)
- 一面
1.分类和继承
横行和纵向的区别,以及分类的源码
2.block
3.copy属性修饰的NSMutableString进行拼接字符串会怎么样(正常使用,copy是作用于对象赋值,而不是作用于对象本身)
4.关联属性的几种修饰符
5.SDWebImage
6.项目中滑动优化(1.图片异步编解码;2.设置estimateRowHeight并进行行高缓存;3.动图滑动状态下不动;4.非交互式UI使用CALayer而不是UIView)
7.平时如何检测内存泄漏,leaks是怎么实现的(瞎扯。。。)
8.项目遇到的难点
9.OC多线程
10.Operation的block调用和加入队列调用有什么区别吗
11.最近写了什么其他组件吗,为什么要写这个组件(网上看了一个UILabel可以使里面url文字高亮的组件,跟他说了一下textKit渲染流程)
- 二面
1.iOS里面的设计模式
MVC,工厂模式,NSArray等类族的抽象工厂模式等等 加以具体类说明
2.最近在写什么代码
一些可重用组件和看源码,说了一下轮播图,跑马灯以及JXTheme
3.看了哪些源码
Alamofire,sdwebimage和rxswift
4.isa指针里面有什么
说了一下方法缓存列表的hash重定向操作,其他正常叙述
5.什么是运行时
6.app怎么打包整个流程
预处理,编译,链接静态库,抽象语法树,生成app文件,打包成ipa上传appstore
7.怎么进行图像内存优化
说了一下wwdc2018图像向下采样
8.各种锁的性能以及spinlock的优先级反转问题
9.dispatch once的实现
说了一下怎么考虑设置这个东西,频繁访问的性能方面,互斥方面以及如何达到只执行一次
10.分类和block的源码
11.RxSwift的优点
12.音视频怎么学,学到什么程度
主要在mac端进行音视频处理
13.什么是gop
说了一下i帧p帧和b帧,还有pts和dts
音视频和RxSwift这些你写了才会问
- 总监面
1.项目演示
没有适配iOS13,在演示的时候直接崩溃,比较尴尬,因为iOS13禁用了kvc,后面排查出来
2.像你这种bug,怎么定位
首先看报错信息看是不是数组越界这些,然后分析语言更新问题,然后第三方库的有没有更新到对应版本,查百度等社区
3.app内存随着使用一直上升怎么办
使用类似YYCache这种进行LRU内存分配,可惜SDWebImage没有提供内存的清除方法,只是提供了磁盘清理方法。
4.清除了前面的图片内存,往回滑动会怎么样
进入磁盘查找图片,再次放入内存
5.项目难点
6.swift和OC的区别
安全性,函数派发特性等
7.OC和c++
8.你觉得OC是个好用的语言吗
***习规划以及平时怎么学习
- 技术加面(很多没答出,那时候很久没复习,这次面试直击痛点)
1.一张图像内存大小以及几个系统图片方法
2.内存不够怎么办
3.lru清除图片后,内存又不够怎么办,频繁把图片移出内存好吗
跟服务端沟通用缩略图,或者提供图片尺寸我们在客户端向下重采用
4.重采样算法,怎么把9*9变成4*4
没想出,使用公约数
5.http各版本的区别
6.https如何认证公钥
7.ssl为什么要有两套加密
8.讲一下图的遍历算法,广度,深度和贪心,以及贪心的终止条件
9.为什么tcp四次挥手
10.数字证书的hash,以及xcode编译优化,第二次编译为什么比第一次快
hr面
十一:10月15号后 虎牙(offer)
- 一面
1.项目架构,项目是自己写的吗
微博项目哈哈
2.fps是怎么计算的
视图渲染线,gpu双缓冲区通过垂直同步同步屏幕帧率等....可以用cadisplay写个fpslable实时查看
3.除了用cadisplay,还有什么方法吗
runloop
4.kvo怎么实现
isa混写
5.leaks怎么实现,这是我自己补充的问题
对于unreferenced和unreachable内存区可以认为内存泄露,对于单利强持有vc则不能检测出来,因为它被认为被引用着,可以用Allocations的引用计数表排查
6.如何代码实现监听僵尸对象,面试官引导我到kvo才解出...
dealloc的时候把对象isa指针指向一个僵尸管理的对象,在那个类里面进行消息转发,这时候调用方法就不会崩溃并且知道哪些对象是僵尸指针
7.imageWithName什么时候发生编解码,在什么线程
在要显示的时候,主线程
8.isa指针里面有什么
说了一下类对象的成员变量
9.消息发送和消息转发流程
10.函数里面的参数怎么存储
寄存器
11.oc一个空函数里面有参数吗
_cmd和self这些隐式参数
12.他们存在栈还是寄存器
栈,蒙的
13.红黑树等查找时间复杂度
14.nsdictionary的实现
cfdictionary维护的hash表,根据不同对象使用拉链法和重地址法防止hash冲突
15.ios的各种锁
16.如何实现dispatch once,考虑什么问题要
互斥,一次性问题和频繁访问的性能问题
17.同一线程里面使用两个@synconize会怎么样,是递归锁还是非递归锁
18.如何增加按钮点击范围
一面面试官比较年轻,像大学生一样,问题会一步一步深入,整体交流比较流畅,每次答错方向面试官会立刻质疑,即使纠错,给我打了杯咖啡,然后二面。
- 二面
1.说一下arc
debug的时候可以看到llvm帮我们插入retain和release操作,还有runtime管理autoreleasepool
2.autoreleasepool可以用来干嘛
释放临时变量缓解内存高涨
3.里面的对象什么时候释放,是出来就释放吗
这里差点翻车,需要pool去pop一下,顺便说了一下autoreleasepool的数据结构
4.消息转发可以用来干什么
僵尸对象检测,统一处理消息和动态添加方法
5.runloop是干什么,你用来干什么了
说了一下监听vc生命周期函数在runloop中所处的状态,提了跳转界面优化的思路
6.平时有写代码吗
有...
7.说一下c++多态和虚函数表
8.tcp如何保证数据传输完整性
说了一下超时重传机制
9.tcp为什么三次握手
10.http和https,全程都是非对称加密吗
11.开放性问题,很多乱序数据过来,你要怎么考虑排序方法的设计
说了一下内存容量问题,排序算法的稳定性,是否为原地排序,是否需要额外空间,以及多台电脑归并汇总
12.有什么offer吗
0(想哭)
13.对rxswift的看法,用的多吗
代码更容易维护,毕竟代码是给人看的,链式编程等...
聊天的时候,说了一下自己为什么没有找到实习(太菜),缺点。
- 总监三面 + hr
1.iOS对象指针大小
2.对象分配到堆还是栈
顺便说了一下栈block这种特殊情况
3.http怎么区分header和body
get和post,还有点没答出来。
4.多线程可以访问同一个对象吗,多进程呢
可以,音乐线程,系统推送对象,共享内存等,这些问题最好举比较实际的例子,让面试过程活跃一点吧。
5.视频pts和dts
6.视频丢帧丢哪个好点
b帧,b帧需要前后参考,丢i帧的话会画面撕裂,或者整个gop丢失
7.iOS各种锁的性能,琐是毫秒级别还是微妙级别
8.http请求是异步还是同步
说了一下afnetworking2.0到3.0那个变化,还有URLSession为什么推荐使用单例
9.怎么看待rn和flutter
从上手难度,打包大小,苹果审核,流畅性这几方面去分析
10.用什么app看S9
B站(然后补了一句舍友喜欢用虎牙看)
现在回顾起来,面试挂都是自己的原因,最好能每次面试结束复盘自己面试错误的地方,而不是去怪公司那边什么的,这样更利于自己的提升吧;还有面试结束的时候问一下面试官哪里说得不好,记录一下或者期间没答出的问题直接去问面试官答案是什么。期间经历了很多次终面,挂了是比较难受,期间也是一直有之前通过笔试获得的面试机会去续航,提醒着我不要放弃,同学们一定要多做笔试啊,否则没有这么多面试机会!秋招还是还是有运气成分的,如果我前面获得offer,可能就会松懈,后面也可能会没拿到虎牙offer;也许就是因为前面都凉了,一直在复盘,10月底才开始拿到几个不错的offer,总之秋招一直学习查漏补缺是没错的。
上面面经的答案不一定对,有错请指出,主要是给各位准备从事iOS看一下19年公司会通过哪方面考察学习iOS的应届生,给大家一个参考方向,可以看到大公司还是比较注重基础,小公司则希望你进去能直接干活那种,iOS岗位招的人不多比如某公司招聘5个iOS,而Java则会招30个人这样,但是iOS学的人比较少,所以面试机会一般都会给到,大概投了50家左右吧,8月和9月每天都在做笔试,9月和10月开始逃课面试和跑宣讲会,宣讲会的笔试比较简单流程也快,本来春招想找暑假实习,可惜因为各种原因没准备好,有得就有失,希望大家都能上岸,回馈牛客。
在秋招过程中,认识了几个小伙伴,挺开心的哈哈
#面经##校招##有赞##快手##珍爱网##网易##iOS工程师#