7次面试5个offer,我的大厂秋招求职记录(含详细面试内容和心得)

来自:牛客网

本人的iOS秋招旅程从8月中旬开始一直到9月末,从网易被拒一直到收到头条offer,这之间也算是一段辛苦的旅程吧,现在打算整理一些面经,供大家参考。

先说一下本人的面试的情况:

  • 网易云音乐内推二面跪

  • 贝壳找房内推拿到offer

  • 美团内推拿到offer

  • 携程正式批拿到offer

  • 百度正式批拿到offer

  • 头条内推拿到offer

  • 腾讯正式批HR面被刷


网易云音乐


网易云音乐(提前批,二面挂)

网易的校招挺莫名其妙的,周围有同学简历筛选阶段被刷,我的情况是跟二面面试官聊得挺好被刷,搞不懂猪场……

笔试

笔试的分为选择,4道编程题和2道简答题,选择和编程已经记不清了,都很简单的。编程真的没有考算法,全是暴力就可以做出来的题目,因此心态要放平,尤其我这种算法慌看什么笔试题都不自觉联想什么DP, 贪心那一套,没有必要,能暴力就暴力,不通过全部测试用例也可以拿分。

2道简答题,笔者投的是iOS工程师,因此问的问题都是和iOS相关的。

第一道问的是AutoReleasePool相关的问题。第一问是问在main.m文件里面@autoreleasepool {}这个东西的作用是什么,其实这段语法在iOS工程里是可以去掉的,因为runloop会自己创建AutoReleasePool,详情参见:iOS autoreleasepool in main, and ARC alloc, release ,但是答的时候可不要作死去答这段语法是没有帮助的,我当时答的是这段语法是创建一个AutoReleasePool,来使内部的对象能自动释放;第二问问的是AutoReleasePool的原理,它的内部是采用AutoReleasePoolPage(一个双向链表)来进行管理的,详情参见:黑幕背后的Autorelease,答的时候就答一些主要的点就好了。

第二道问的是和runtime有关的。第一问问的是在Objective-C里面重写一个方法的实现可以有哪几种方式,我答的是:继承,Category和method swizzling;第二问是问用runtime大致实现方法替换的过程,这个我不知道标准答案是什么,我就大致写了一下语法;第三问问的是假如一个类有三个实例A, B, C,怎么只重写A实例的方法,B、C不变,这个也很简单,我们在用runtime实行method swizzling的时候先保存一下原来方法的IMP,当运行到我们替换的函数的时候,判断当前实例是A, B还是C,如果是A, 那就执行下面的逻辑,如果是B或者C就执行原来的IMP就可以了。

总体来说笔试是很简单,而且诚意满满,但是接下来的面试就不同了……

现场面试

笔试之后的一个星期就接到了网易的面试通知,不知道为什么一定要去现场,之前美团的面试官还问我是去现场还是电话面试,现场面试真的是太烦了,昂贵的路费不说,关键是我这种身体奔波一趟是真的累。

一面

一面是比较基础的,面试官也很nice,问的问题主要是根据项目来问的,下面罗列出他问的问题:

  • 做一个自我介绍。

  • 看你做的工作有一个是相册导入,拿哪个库来实现的。

  • SDWebImage的工作流程,图片缓存的过程和解压缩的过程。

  • iOS中多线程的几种编码方式。

  • 多线程的锁有几种实现方式。

  • 有碰到过多线程带来的问题么,怎么解决的。

  • 死锁的概念,检测,预防。

  • GCD队列的类型,如果在一个serial队列用dispatch_sync会造成什么问题。

  • 开发过程中用的什么抓包工具。

  • 在开发过程中怎么mock数据。

  • MVC和MVP的区别。

  • Block带来的问题,和delegate相比有什么好处。

  • 常见的造成循环引用的场景。

  • NSTimer怎么规避循环引用的问题。

NSNotificationCenter为什么要在最后remove掉注册的Observer,它的通知发送是同步还是异步的,注册通知的线程和发送通知的线程必须是一个线程么。

这些问题都是比较基础的,最多准备一天就ok了(SDWebImage还是昨晚在宾馆花俩小时看的)。需要注意的是基础的runtime,多线程一定要滚瓜烂熟,常见的设计模式要知道,内存泄漏的场景要知道,以及SDWebImage和AFNetworking几乎是必考,源码一定要看。

二面

二面就让我挺摸不到头脑了,感觉答的挺好不过还是跪了,问的问题也比较奇怪。

  • 在UITableView/UICollectionView中加载图片需要注意哪些问题。

  • 在工作过程中是怎么对UITableView进行性能调优的。

  • 对于KVO,重复add相同的Observer会怎么样,看没看过KVOController提供的解决方案。

  • SDWebImage存到disk的文件名是根据什么来命名的,假如遇到CDN的问题该怎么办。

  • 对于一个超出父View范围的子View,如何保证其响应事件。

  • NSArray,NSMutableArray保存的是强引用,怎么设计一个保存弱引用的容器。

  • TCP为什么要四次挥手而不是三次。

  • 有没有设计过数据库,五大范式记得几个,索引设计的准则。

二面当中的TCP,数据库索引答的还是卡的,可能面试官想要一个基础知识牢固的学生吧,像我这种只知道做工程的还是回去学学理论再去面试吧。

此次去杭州损失是真的惨重,刚下飞机我这个北方人就感到身体有明显的不适,面完之后手机还摔了……可能终究和杭州无缘吧。


美团


美团(提前批,拿到offer)

美团分为三次技术面和一次hr面,前两次技术面是电面,最后一次技术面和hr面是现场面,感觉问的也是挺基础的,答的比较顺。最后hr告诉我要10月中旬出结果,是我面过的几家中出结果最慢的。

一面

一面,电面,问的问题不能再基础了。

  • 项目中的难点,怎么解决的。怎么学习iOS的。

  • UIView的继承链。

  • frame和bounds的区别。

  • 多线程的几种使用方式。

  • atomic是否保证了线程安全,为什么。

  • 哈希冲突的解决方案。

  • 最后出了一个多线程的问题,大意为两个线程对同一个变量进行100次++***作,问最后输出结果是多少。

  • 大概问了半个小时,挺简单的。

二面

二面也是采用了电面的形式,问的问题比较广泛。

怎么学习iOS的。

  • @property里面常见的属性修饰符以及含义,还问了unsafe_unretained。

  • weak指针的实现原理。

  • 引用计数的原理,除了在SideTable外还能在哪里存放引用计数(TaggedPointer, 优化的isa指针)。

  • 常见的内存泄漏的情况。

  • 哈希表的优缺点,时间复杂度,哈希冲突的解决方案。

  • 几种排序算法的时间复杂度,为什么快排是实际表现最好的。

  • TCP为什么要四次挥手。

  • https的原理。

  • 数据库设计5大范式。

  • 死锁的概念和解决方案。

一道智力题,大意是两个人在一个盘里放球,最后一个放不下的人输,自己先放,问有没有必胜的策略。

答的大概还好,面试官总是说“好,下一个”,给人一种绝望的感觉,不过晚上就接到了三面通知。

三面

由于我拒绝了去北京现场面试的邀请,所以三面被安排到了西安,中间等的时间有点长。感觉三面没太多涉及到技术细节。

  • 怎么学习iOS的。

  • 为什么从安卓转到iOS。

  • 为什么不考研。

  • 成绩怎么样。

  • 对未来的规划。

  • 有没有开源过什么项目。

这些开放性问题不作死应该就没啥太大的问题……10分钟后接到了hr面的通知。

hr面不具备参考价值,所以这里我就不写了。


贝壳找房


贝壳找房(内推,已拿offer)

贝壳找房的面试分为笔试,两次技术面和一次HR面,在酒店一天就面试完毕,效率较高,感觉还是挺友好的~

笔试的内容我已经忘得差不多了,印象当中还是挺难的,是除了BAT之外笔过的最难的一家。

一面

一面的面试官是搞C++开发的,因此没有问关于iOS的相关知识,只问了一些基础。

  • C++里面const的相关用法。

  • C++里面构造函数,析构函数执行顺序。

  • 删除链表的下一个节点。

  • 找出链表的倒数第K个节点。

内容就是这些,面试官比较看重手写代码对于特殊情况的判断,侧重于基础。

二面

二面问的问题有开放题,也有很多关于iOS的,比较基础。

  • 项目中的难点,怎么解决的。

  • 关于runtime的理解。

  • KVO的原理,怎么实现自己的KVO。

  • 关于ARC的理解。

  • weak指针的原理。

  • Block和delegate的对比。

  • 多线程使用方式。

  • 如何控制最大并发量(信号量)。

  • 给出五角星的五个坐标点,判断一个数组中有多少个五角星。

也不是很难,感觉也是挺友好的。

百度


  • 百度(正式批,已拿offer)

  • 百度除了二面出了一点小插曲,其余的问的也是比较简单的,三次现场技术面。其实面到百度我已经有了身经百战的感觉了,所以不怎么慌。

一面

  • 一面问的全是iOS基础,比较友好。

  • 自我介绍。

  • 项目难点,怎么解决的,在项目中干了什么。

  • @property常见的修饰符。

  • Block原理,为什么会造成内存泄漏。

  • ARC原理。

  • 引用计数原理。

  • weak指针是怎么实现的。

  • atomic的含义,是否保证了线程安全。

  • 找出数组中第K大的数。

  • 统计数组中指定数出现的次数。

  • 简单吧,面试过程也是比较快的,可能人比较多吧。

二面

  • 二面出了点小插曲,感觉面试官没有把问题表达清楚,其实他问的还是蛮简单的,可能是为了测试沟通能力?

  • 在上次实习中自己的工作。

  • 关于runtime的理解。

  • 谈一下内存管理。

  • AutoreleasePool的原理。

  • runloop的原理,怎么实现一个runloop。

  • 多线程的几种使用方式。

  • 消息转发的流程。

  • 怎么用GCD实现一个读写锁。

  • 为什么用一个全局的NSURLSession,而不是多个NSURLSession。

  • SDWebImage的原理。

  • 一个关于多线程的解决方案,大意已经不能描述了,大概是一个生产者消费者模型。

  • 数组(面试官说的是队列,感觉是不是对队列有点误会?)和链表的区别。

  • 写一个循环链表删除的代码。

  • 写一个循环Buffer的代码,问了一下什么是循环Buffer,面试官说就是一个数组写满了再从开头写,是覆盖***作。

  • 有没有进行过性能优化,性能优化有哪些优化点。

  • 拿到了哪些offer。

三面

  • 三面也是类似美团那种,随便聊聊。

  • 怎么学iOS的。

  • 为什么从Android转iOS。

  • 为什么不考研。

  • 拿到了哪些offer。

  • 常见的设计模式,MVC和MVVM比较。

  • 最后是一个关于设计模式的设计问题,很简单,记不起来了。

  • 三面完毕一周后收到签约通知,度秘部门,因为还在等腾讯和头条,所以没签。

携程

携程(正式批,收到offer)

携程的面试流程相对比较随意,我的情况是只有技术一面,面试的是酒旅的移动端开发总监,聊得不错。面试完毕之后hr告诉我有的面试官是可以直接决定去留的,没有二面,有的需要二面,就让我回去等通知了。9月底顺利收到offer。

下面说一下面试的内容,基本就是随便聊聊吧。

  • 为什么转iOS开发。

  • 怎么学习iOS开发的。

  • 作品可以展示一下么。

  • 社区页面的请求流程,返回的JSON格式。

  • 谈一下加载大图的优化算法。

  • 谈一下对网络库的封装。

最后面试官和我握了握手,笑着说我真像个做技术的。


腾讯

腾讯(正式批,HR面被刷)

腾讯包括两轮技术面和一轮hr面,早就听说过鹅厂的面试有很多坑,今天总算见识到了,万万没想到居然被hr刷了。

一面

一面问的基础,简单,面试官也很nice。

自我介绍。

  • weak指针的原理。

  • MVC和MVP的区别。

  • 几种常见的设计模式。

  • 快速排序,手写代码,时间复杂度,几种实现方式。

  • 之前公司中git的协作模式。

  • 拿了哪些offer。

  • 腾讯和头条选哪个。

感觉面试官挺友好,边问技术边聊天。

二面

第二天开始二面,二面面试官是做C++后台开发的,这也是我第一次(希望也是最后一次,两个专业不同的人真的没啥聊)被不是移动开发领域的人面试。面试官上来问我了不了解后台开发,因为我之前做过Java Spring,所以就说了解……下面是二面中的问题。

  • C++中const的使用场景。

  • 多态在C++, oc, Java中的表现形式。

  • 出了一道关于Java的题,写出输出的结果,幸亏我Java底子好……

  • 讲一下虚函数表。

  • 3sum closest问题,没做出来。

  • TCP用什么机制保证可靠性。

  • 如何优化http连接的速度。

  • ***作系统内存管理有几种方式,这几种方式的区别。

  • 1000桶酒,其中一桶有毒,酒可以混合,问最少用多少只老鼠能试出哪一桶有毒。

  • 512MB内存,统计一个10G文件中Top10关键字,文件当中存放的记录是搜索记录,有重复。

  • 怎么学习iOS的,看过哪些书,看过哪些博客。

二面体验极差,基本开放问题我都没有让面试官满意,面试官问我拿了哪些offer,我就说百度,头条和美团……然后面试官就让我去见hr了,多拿几个offer还是有加成的。

之后hr就随便聊了几个问题,回去之后第二天就被刷了,之后就安心等待头条的offer了。

今日头条


今日头条(内推,拿到offer)

宇宙条的面试果然是专业啊,一个下午完成了三场面试,面完之后气喘吁吁。

一面

  • 自我介绍。

  • 合并K个有序链表。

  • 数组中连续最大和。

  • 关于runtime的认识。

  • 内存管理机制,引用计数原理。

  • AutoReleasePool的原理。

  • 消息转发原理。

  • AFNetworking源码看过没,原理。

  • SDWebImage源码看过没,原理。

  • 死锁怎么检测,怎么解决。

  • 多线程常见的使用方式。

  • KVC用过没,讲一下。

  • 一个实例对象的内存布局

  • Block底层原理,本质是什么,struct类型在内存上是怎么分配的,__block原理。

  • https原理。

一面过后感觉凉凉,因为我的算法真的是硬伤,感觉二个算法都没答好,第一个还是在面试官提示下做出来的,晕。

很快接收到了二面通知,HR说反馈不错……受宠若惊!

二面

二面感觉才是一面啊……问的很基础。

  • 自我介绍。

  • 在实习中的工作。

  • 浏览器敲一个网址,回车,经历了什么。

  • DNS原理。

  • LRU算法怎么实现。

  • 一道算法,关于栈的,很简单。

  • 二面还是有点慌,因为面试时间很短。

10分钟后三面通知……

三面

感觉也是和技术leader随便聊聊。

  • 自我介绍。

  • 怎么学习iOS的。

  • TCP怎么保证可靠性的。

  • 问了关于项目的一个解决方案的问题,导入一个长视频怎么办。

接下来面试官开始谈自己所在的部门,问我最想去哪里。然后说已经过了,等通知吧。

之后接收到hr电话通知,二周内有结果,感觉宇宙条挺注重基础的……。

一周后顺利收到offer,提着的心也放了下来,秋招旅程到此结束。

心得体会


下面总结一下自己这一个月来的心得体会,只有最后成功了才敢回首啊……

1、心态最重要

在秋招面试中,总会遇到各种奇葩的问题,像是猪场莫名其妙的回拒,百度二面双方对“队列”的理解差异,腾讯二面面对不同领域面试官等等……遇到这些问题难免心里会沮丧,但是最重要的是别崩溃,不要去怀疑自己,调整心态准备下一场,不要让一时的沮丧影响到自己全局的决策。好的心态比过硬的专业能力更为重要!

2、关于笔试和刷题

《剑指offer》这本书是一定要刷完的,面试过程中遇到了好多里面的原题。关于笔试,我周围有很多同学都被笔试刷掉了,这种情况要狂刷leetcode或者牛客网。笔试成绩不如意也不用太过担心,有的公司对笔试成绩要求不是那么高的,像百度,笔试非常难,后面的编程一道也没有ac,照样得到了面试机会。

3、关于简历

如何准备精美的简历这种问题网上一搜一大堆,在这里我只说几样能加分的:

github 附上github地址,面试之前多提交点东西,面试官会去看的。

4、个人技术博客

这也是展示自己学习能力的好东西,最好带个目录,整个人技术栈一目了然。

5、实习经历

如果有比较好的实习经历的话,一定要写到简历里,并突出自己在实习中做了什么!

推荐↓↓↓
iOS开发