首页 > 2019年5月至10月秋招iOS面经汇总
头像
千珏不是混子
编辑于 2019-10-30 19:59
+ 关注

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月开始逃课面试和跑宣讲会,宣讲会的笔试比较简单流程也快,本来春招想找暑假实习,可惜因为各种原因没准备好,有得就有失,希望大家都能上岸,回馈牛客。


在秋招过程中,认识了几个小伙伴,挺开心的哈哈


更多模拟面试

全部评论

(2) 回帖
加载中...
话题 回帖