最近准备面试阿里的macOS开发岗位,目前为止收到了2个阿里mac岗位的电话面试,时长分别是一个小时和半小时。现在我凭记忆罗列下电话面试题,也给广大小伙伴做个参考,便于查漏补缺~
整个面试过程会很长,所以面试题我也会持续更新,有什么问题大家也及时发问哈,一起学习讨论~
基于以下几个原因:
1、mac开发市面上非常少
2、macOS开发和iOS开发使用的框架十分相似,只是部分设计理念有所不同
3、Swift还未普及开,主要的开发语言还是OC
因此面试官的提问主要还是围绕一些基本的iOS开发来展开的,OC的runtime、内存管理、多线程、网络通信、第三方库、基本的算法知识等其实不论在iOS和macOS开发上,都是相通的,所以即使你是iOS开发的小伙伴,也可以作为参考,看看阿里会怎么问题,针对自己的空白来查漏补缺。
先罗列今早收到的阿里安全部门的面试题,趁我的记忆还热乎着~说实话这个电面很突然,因为我并没有主动投他们简历,他们的招聘信息确实也没在各大招聘平台挂出,是他们的HR不知怎么弄到了我的简历,觉得我看着比较符合他们的要求所以就来面我了,当时早上10点多我还在睡觉,迷迷糊糊地答题。。。
面试官语气非常和善,以下是他的问题:
1、OC的内存管理?讲了一下内存管理语义的一些关键字retain\release\copy\autorelease等,然后讲了下ARC和MRC的区别,因为ARC我说编译器会自动将retain、release等关键字在合适的地方帮我们插入到代码中,然后他问了下会插入到哪些地方,我说想new、alloc、对象见赋值等地方,其实如果用过MRC,答这问题就很容易了,我当时其实是凭经验猜的。。
2、有没有用过SQLite?我说没有,简述了下我之前项目里用到的一些数据本地化方案,就是简单的userdefault、archive、plist等,但是我自己的开源demo中有用到CoreData。然后面试官说SQLite其实就是CoreData的一种封装,问我CoreData以什么格式来存储数据,我没答上来
3、离职的原因?
4、在前公司负责的主要内容?
5、有没有做过界面性能优化?我说在mac开发上比较少,相关的文章也很少,但是可以借鉴iOS上边关于tableview的性能优化,大体讲了这几点吧:
1 cell中视图尽可能简单,减少绘制压力
2 cell的高度计算在model中算好,并在runloop空闲的时候缓存起来
3 减少视图的光栅化、离屏渲染等
4 如果有图片,尽量减少图片的缩放,以及图片颜色格式都能够被GPU支持
具体可以参考这几篇文章:
http://blog.sunnyxx.com/2015/05/17/cell-height-calculation/
https://bestswifter.com/uikitxing-neng-diao-you-shi-zhan-jiang-jie/
6、有没有用过多线程(我不能说没有啊,虽然我确实很少用),说说OperationQueue和GCD异同点?我当时答的不好很片面,我说OperationQueue我们可以自定义它来进行我们想要的扩展,对线程任务的操作更为便捷可以start\cancel\suspend\等,GCD的话封装的更加好,任务都以block的形式存入,功能很完善,给我们提供了同步异步、group、barrier、信号量等等的接口,使用方便,逻辑也更加集中清晰。然后他问我知道barrier怎么用吗,我说这个在并行队列里能够保证在执行barrier时,必须等到barrier的任务执行完了,再执行其他任务,起到一个栅栏作用,使用场景举例就是文件读写将写文件的任务使用barrier可以保证数据的正确性。
7、如何统计一篇文章中各个字符出现的次数?这个我当时有点蒙,我说听起来是个算法题,首先承认了自己在算法方面的薄弱,然后给出了自己很挫的方案:遍历整篇文章的字符,维护一个可变字典,以文章中的字符为key,出现的次数为value,若碰到字典中出现过的字符就计数+1,若没有则加入字典。然后我简单分析说这种方式很挫,很暴力的穷举,性能和时间复杂度都不好,还耗内存。然后我猜测能否用哈希算法、红黑树之类(这两个我只听过概念,不知道具体细节,所以只是猜猜)的去优化。
由于这是最后一个问题,所以当时面试官没有和我继续讨论下去,直接问我有什么想问他的,我就问:
1、阿里面试周期是不是很长一个月?
答:是的,一般是3~4轮面试,间隔一周左右不定期
2、面试官负责的产品是什么类型的
答:一款安全类的app,比如可以检测到可疑文件、文件的变化等,然后我打趣说有点像360啊,他说哈哈是的
3、对我的感觉如何
答:还不错,非科班出身能懂这么多已经很不错了
然后我说了下我对阿里的向往和决心,希望还能有下一轮的面试机会,不好意思占用面试官太多时间,就互相道别了。看了下总共时长27min。
时间有点晚了,明天继续更新另一轮电面题目吧~
============================
上面介绍了最近的一次电面A,接下来讲下另外一次电面B。
电面B呢我也没有主动投简历,因为当时我的macOS开发知识是非常匮乏的,自己的简历也没什么东西可写,没什么底气,所以之前对投简历这事也比较谨慎,怕简历过去给面试了发挥不好而直接错失了一次宝贵的机会,因为有些企业是会把不合格的面试者放入人才库的,这无疑于打入了冷宫,我好怕怕呀。。
那么这次面试机会是怎么来的呢?其实我和面试官有过几次邮件交流。这次的面试岗位招聘信息早就挂在了拉勾上,而且面试官很友好得给出了邮箱地址,方便大家投简历。邮件里我很坦诚得说明了下我的情况,并表示很希望又一次面试机会。其实当时觉得希望很渺茫,但是面试机会还是在一周前不期而至了。
以下是面试问题:
1、简单做下自我介绍
我觉得这个环节非常关键,用心准备的话可以让面试官对你迅速建立起好感,并且自己的信心也会大大提升,对接下来的答题很有帮助。所以大家务必好好准备,可以讲下自己的求职经历,在各个公司所做的事情并产出了什么价值,自己的学习状态,感兴趣的技术等。当时面试官就觉得我的经历很特别,因为我是学生物的,但是先后做过C++、Delphi、iOS和macOS的工作,他认为我比较能吃苦,学习能力好。
2、在之前公司的产品怎么样?负责哪块内容?
3、开发过程中遇到过什么的问题?怎么解决的?
4、Socket了解吗?Http的握手知道吗?会抓包看报文吗?用什么抓包软件?GET和POST的区别?
5、怎样保证账号密码在网路请求时的安全性?如何让Http请求不会被Charles抓到?
6、GCD会用吗?如何保证文件的读写安全?
7、CoreData的线程安全
8、OC如何调用一个方法?以及因为找不到方法实现而崩溃,应该怎么处理?
9、用过哪些调试手段?Instruments平时怎么用的?
10、block会用吗?怎么避免循环引用?
11、weakSelf和strongSelf有什么区别,分别在什么场景下适用?
12、有没有遇到过版本兼容的问题?
13、使用CF对象和NS对象有什么区别,有没有要注意的地方?
14、有一个动画库,现在有一个view,他会有动画效果,点击后也会有另外的效果,但是现在想添加自己的点击事件去做一些事,可以怎么实现?
这是最后一问,这个问题我一开始理解错他的意思了,我理解成:怎么把动画给禁掉,由于从来没用到过动画库,当时没想出来,他说我可以再好好想想,用邮件回复他。
回头我研究了3个比较常见的动画库,按照我开始的错误理解,将这些动画库的使用方式和禁用动画的方式给罗列了下,写了很长的一个邮件。后来他回复我说了他的做法:用一个透明的view盖在动画view上并添加点击事件。估计是他当时没有好的方案来试探问我下有没有更好的方案吧,但是很遗憾我也会用他的方式去做,这个之后可以研究一下。