微软中国ios岗社招面经
一面:
1、先让我自我介绍。
2、第一个问题:怎么优化应用启动时间。
3、whiteboard,给了第一个情景:一个email应用,简化版的outlook,只有message和contacts两个tab,需要设计一个架构,让API读的数据,能及时给到tabs里。
4、要做启动速度的优化,要做下载的优化便于用户可以及时看到contacts的内容。
5、给了第二个个情景:有个处理数据的for loop,当数据量在5000以下时,可以正常运行,但是一旦超过这个量,程序会crash。他给了几次提示:和对string的操作有关,和autorelease有关。
二面:
1、自我介绍
2、手撕代码。牛客题霸上的原题,可以去看看:NC24删除有序链表中重复出现的元素
3、在Xcode上运行了一个contacts页面:上方一个左右滚动的collectionView,下方一个上下滚动的tableView,这俩东西是联动的。他在代码里设置了很多可以改善的地方,都和TableView,CollectionView,ScrollView的操作相关。
三面:
1、做了自我介绍。
2、然后whiteboard,给了一个情景:一个email应用,就是一个tableView,然后每个cell是一个messages。他就不停的加follow up:
3、怎么给cell添加数据;怎么下载数据;
4、怎么异步下载,然后回主线程;怎么做caching;因为我用了一个dictionary,他问我怎么加快读写速度并且防止线程冲突;
5、然后问我如果在第一次的API call里拿到一堆数据,怎么把这堆数据以array的形式加到第二个API call,然后把第二个API call回复的数据加到cells里。
四面:
出了道算法:N * M的matrix,里面有为1的slot,有为0的slot。
找出所有为1的slot,并且把相邻的slots记为1块计算size(slots的数量)。
输出:给出array形式的slots sizes,因为会有很多块,块于块之间不相连,要分别计算他们的size。
由于是whiteboard,只写了pseudo code,15分钟不到,边说边写弄好了。然后又follow up了一个改进算法space complexity的方法,最后用了25分钟。
五面:
给了一道celecrity in the party的算法题:一个party,可能有celeb,可能没有。所有人以一个array来表示,每个人是一个Person class,这个class有一个方法,know(person: Person) -> Bool。通过这个方法,来找出celeb。
#微软##社招##iOS工程师##面经#