“我是面小易,机智又聪明。面试不眨眼,Offer不手软。”我面小易又来啦,今天要和大家一起分享的是一位面试支付宝机器学习算法工程师的小伙伴的面试经历,虽然他的面试之路最终止步于二面,但是相信他两次面试的经验还是值得大家学习和借鉴的。对于阿里巴巴内部的数据类岗位,究竟会问哪些问题,有什么样的要求呢?一起来看看吧!
以下为正文
我投递的是蚂蚁金服的机器学习实习岗,但是无奈自身实在太菜,最终止步于技术二面,然而我觉得还是需要写下这段经历用来自我总结。
个人情况:华科某工科学院在读硕士,本科211,本硕都不是计算机相关专业。之前在牛客网上找人内推,方向是机器学习算法工程师。然而,一位同学直接给我推到支付宝去了。
第一轮面试
完成简历之后等待了大约四五天,面试官就约时间进行了第一轮面试。
第一轮面试问的基本上都是基础的数据结构。题目是假设有一个巨大的网页,里面有众多词汇,现在已经对网页的词汇进行了分词。求如何随机获得网页中的K个词。题目本身并不是很难,只不过我没有反应过来。刚开始我给出了个两次查找的方法,先遍历整个网页获得词数N,然后利用词数N生成K个词数0-N-1之间的随机数加入到集合中A,排序集合A,再次遍历这个网页,集合A中的元素对应词的Index,然后将对应索引的词取出来,返回。面试官说这个要两次遍历,且K可能很大,时间复杂度开销有些高,希望我一次遍历完成。我提出保存N个词,然后通过随机访问选择词汇,而面试官说这个方法的空间复杂度过大。
最后我提出,用Hash表保存N个词,其中共有P个不重复的词,统计这P个词的词频。然后遍历Hash表,累加词频,通过词频间隔来表示定位词汇。可以用二分查找树或者直接二分查找实现。然后就是写代码,在一个代码测试系统上。应该还有更好的算法,但是我就想不到了。
面小易说:和之前分享的面向Java或者C++研发岗位的经验不同,机器学习算法工程师更多地需要了解大数据的算法,而且这些算法的时间和空间复杂度都需要能够很好地考虑进来,因此我们如果想要投递这样的岗位,那么对于算法优化上必须要有较深入的了解。
第二轮面试
大概又过了四五天,面试官就约时间准备了第二轮面试。
这轮面试主要问的是项目。但是我这些还都没有准备,因为当时就是跟风投的简历,自己心里面还没B数,所以项目没什么技术含量,有两次天池大数据的比赛,基本上就是洗数据+XGBOOST,所以只能跟面试官尬聊…
最后问了一个问题,我还没有找到答案。问题大概是:对于一个图片检索引擎,有爬虫从网上获取图片,计算一个MD5码存储图片,然后该系统可以通过MD5码获取到存储的图片。面试官问我这个系统应该如何设计。我最后给出了用文件存储多个(10W个)图片的二进制码(按照图片加入顺序),然后散列保存图片MD5码和图片的加入顺序id,然后id找到文件,再从文件中找到图片的二进制数据,返回图片。最后我自己也觉得这样做挺不靠谱的,最后问问题的时候也就问了面试官,然后他跟我讲,这在Facebook图片检索系统和非关系数据库中经常用到,回头我查到了再补吧。
面小易说:对于想要投递机器学习方向的同学们而言,有一个亮眼的项目是非常重要的,这个项目可以是实际项目,也可以是在Kaggle或者天池等大数据相关的比赛上做的一些项目,这些项目都会成为面试时宝贵的话题和亮眼的经历。
总结
然后最让我伤心的是,下午三点面完了。晚上回来更新面试状态就变成了已回绝,这说明面试官挂了电话就把我挂了。
从这次面试中我认识到了:
- 第一,基础很重要,手写代码很正常。
- 第二,项目经历要准备好,不要因为项目太简单或者什么的就略过,要从细节上去谈,不要陷入尬聊的窘境。
- 第三,准备好机器学习的理论知识,很多东西背下来和真正理解还是不一样的。
面小易说:虽然这位同学没有进入第三轮技术面试,但是他前两轮的面试经验已经给我们很大启发了。也正如他总结的内容一样,对于算法工程师而言,编码能力也很重要,而项目上也需要有能够让面试官认可的内容,需要有自己的想法和思路。此外,对于目前火热的机器学习而言,不能只能够照本宣科,需要自己有更加深入的理解,这样才能在工作中更加灵活地应用。