竹笋

首页 » 问答 » 灌水 » 一个iOS程序员的BAT面试经验
TUhjnbcbe - 2021/6/21 15:41:00

随着各大公司春招的开始,很多小伙伴都行动起来了,我有幸能够加入百度并和大家分享自己的经验心得。由于我面试的都是比较大的公司,所以自然也是做了这方面的准备,因此这篇总结并不一定适合想去创业公司的同学。另外,由于经验本来就是主观性极强的东西,加之笔者水平有限,所以如果有不认可的地方,万望诸君呵呵一笑,抛之脑后。

接下来,我就斗胆分享一下自己在准备和参加面试的过程中的收获、对面试的思考,以及一些可能对大家有用的建议。最后附赠一份大礼包,希望能帮助每位读者找到自己心仪的工作。

作为iOS开发者,虽然Swift已经发布了快两年,但是大公司转向Swift的动作还不明显,所以Objective-C几乎是必备项,Swift都不一定能算是加分项。iOS方面的知识也必不可少,虽然招聘信息上写着如果基础扎实,零iOS基础也可以,但是现实往往是比较残酷的。

我的面试经历

扯了这么多,终于进入正题了,分享一下我的面试经历。题目如下,破折线后面是简单的解决思路。

百度一面:约1.5小时

首先是四个算法题:

不用临时变量怎么实现swap(a,b)——用加法或者异或都可以

二维有序数组查找数字——剑指offer第题

亿级日志中,查找登陆次数最多的十个用户——(不确定对不对,我的思路是)先用哈希表保存登陆次数和ID,然后用红黑树保存最大的十个数。剑指offer第0题

简述排序算法——快排,partion函数的原理,堆排(不稳定),归并排序,基数排序。

然后有一个智力题,没完整的答出来,好像影响不是很大。

最后是iOS相关,面试官问的很开放,都是谈谈自己的理解:

说说你对OC中load方法和initialize方法的异同。——主要说一下执行时间,各自用途,没实现子类的方法会不会调用父类的?

说说你对block的理解。——三种block,栈上的自动复制到堆上,block的属性修饰符是copy,循环引用的原理和解决方案。

说说你对runtime的理解。——主要是方法调用时如何查找缓存,如何找到方法,找不到方法时怎么转发,对象的内存布局。

说说你对MVC和MVVM的理解。——MVC的C太臃肿,可以和V合并,变成MVVM中的V,而VM用来将M转化成V能用的数据。

说说UITableView的调优。——一方面是通过instruments检查影响性能的地方,另一方面是估算高度并在runloop空闲时缓存。

谈谈你对ARC的理解。ARC是编译器完成的,依靠引用计数,谈谈几个属性修饰符的内存管理策略,什么情况下会内存泄露。

一面的问题非常基础,主要是算法和Objective-C,因为准备比较充分,基本上答出来80%吧。大约一周后突然二面。

二面:约0.5小时

二面比较突然,显示简单的自我介绍,然后问了三个问题:

野指针是什么,iOS开发中什么情况下会有野指针?——野指针是不为nil,但是指向已经被释放的内存的指针,不知道什么时候会有,如果有知道的读者还望提醒。

介绍block。——(接第一问)我让面试官提示我一下什么时候会有野指针,他说用block时,我表示还是不知道,只知道block会有循环引用。于是就扯回了一面的问题。

说说你是怎么优化UITableView的。——还是一面的问题。。。。。。。。。。。

虽然通过了,但是几乎又问了一遍一面的问题让我感觉对方不太认真。

三面:北京onsite,约.5小时

首先是给一个小时,手写算法:

给一个字符串,如何判断它是否是合法的IP地址,比如“19..1.1”就是合法的。

说说大数相加的思路,动手写代码实现。

没能写完,主要是大数相加的时候需要考虑负数,耽搁了一点时间。

然后让我简述TCP建立和关闭连接时,握手的过程。还问了前者为什么是三次,后者需要四次?

接下来是设计了一个实际场景,为了简化问题,我们考虑这个问题:假设有10W条电话号码,如何通过输入电话号码的某一段内容,快速搜索出来。比如输入,以下两个号码都会显示在搜索结果中:

其实最简单的解决方案是遍历所有字符串,然后用KMP算法。但是这样的问题是需要遍历10W个元素,效率比较低。我想到的是办法是使用索引。建立个索引(00到99),比如输入时只需要在索引对应的区域查找即可,可以加快倍速度。但是缺点是插入数据时,需要更新多个索引,数据量会是原来的10倍。

目前还没有想到好的解决方案。有大神提醒说用字典树,有空研究一番。

最后问了OC的数组中,添加nil对象会有什么问题。当时没答上来,现在想想很不应该,因为数组是以nil结尾的,如果添加了nil,后续就不能添加对象了。

网易笔试

主要是计算机方面的大杂烩,涉及操作系统,网络,移动开发,算法等。难度不大,目测是为了淘汰浑水摸鱼的人,就不列出题目了,算法有三题,直接在线写(木有IDE表示很忧伤):

很长一道题,读了很久才读懂,目测是DFS,但是最后没时间了,写了个思路。

把“

1
查看完整版本: 一个iOS程序员的BAT面试经验