微软中国(Microsoft)面试
1天以内完成,一共5轮,5个工程师,职级不一样,顺序不定,全程英语。算法
一轮:架构
1. 先让我自我介绍。异步
2. 第一个问题:怎么优化应用启动时间。oop
3. whiteboard,给了第一个情景:一个email应用,简化版的outlook,只有message和contacts两个tab,须要设计一个架构,让API读的数据,能及时给到tabs里。学习
4. 要作启动速度的优化,要作下载的优化便于用户能够及时看到contacts的内容。优化
5. 给了第二个个情景:有个处理数据的for loop,当数据量在5000如下时,能够正常运行,可是一旦超过这个量,程序会crash。他给了几回提示:和对string的操做有关,和autorelease有关。spa
二轮:线程
1. 自我介绍设计
2. 在Xcode上运行了一个contacts页面:上方一个左右滚动的collectionView,下方一个上下滚动的tableView,这俩东西是联动的。他在代码里设置了不少能够改善的地方,都和TableView,CollectionView,ScrollView的操做相关。
3. 所有处理完后,时间也差很少了,他回答了我几个问题,结束。
三轮:
1. 互相作了自我介绍。
2. 而后whiteboard,给了一个情景:一个email应用,就是一个tableView,而后每一个cell是一个messages。他就不停的加follow up:怎么给cell添加数据;怎么下载数据;怎么异步下载,而后回主线程;怎么作caching;由于我用了一个dictionary,他问我怎么加快读写速度而且防止线程冲突;而后问我若是在第一次的API call里拿到一堆数据,怎么把这堆数据以array的形式加到第二个API call,而后把第二个API call回复的数据加到cells里。以后腼腆哥带我去了一个conference room,而后吃了个free lunch。以后开始下一轮。
四轮:
出了道算法: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,可能没有,全部人都认识celeb,celeb一我的都不认识。全部人以一个array来表示,每一个人是一个Person class,这个class有一个方法,know(person: Person) -> Bool。经过这个方法,来找出celeb。
若是你想一块儿进阶,不妨添加一下交流群1012951431
面试题资料或者相关学习资料都在群文件中 进群便可下载!