4月13日进行了蚂蚁金服2020年暑期实习生的一面,记录一下面试的经历,也给有需要的小伙伴们一些参考。今年蚂蚁金服实习生的面试有4面,一面是投递部门的技术leader面;二面是技术总监面,三面是其他部门的交叉面,四面是hr面,也可能有简历面或者其他情况。一面主要问了以下一些问题(回忆版):
1、请简单做一下自我介绍
我主要说了大学里面跟专业相关的经历,分三点:一是参加了跟编程和算法相关的竞赛,比如ICPC、天梯赛、蓝桥杯等;二是参与了一些偏科研向的项目,包括模糊自动机在不完全信息动态博弈中的应用研究、无线传感器网络等;三是做的一个课程项目,用购物车数据进行关联分析。
2、我看到你的简历里面有两个本科,你能简单介绍一下吗?
我是去年参加了研究生统考,报考的是p大,复试没过。当时也拿到了国科大微电子学院、中科院上海高等研究院计算机技术专业的调剂名额,但最终还是选择了p大的第二学士学位项目,所以现在是第二个本科。
3、你在p大已经有将近半年的时间了,学的课程内容主要是什么?
二学位主要是给非软件工程专业的同学,比如金融、统计等其他专业的同学一个跨专业学习的机会。我这半年里学了包括Hadoop、tensorflow、python等一些课程。
4、你刚刚说学了Hadoop,讲一下Hadoop的应用场景和优缺点
Hadoop主要用于大规模数据的离线批处理,是一个大数据存储和处理的分布式系统。它的优点在于它的可拓展性和可靠性,Hadoop可以用大量的普通PC机构成一个分布式处理系统,用于大数据的离线批处理,成本低廉且容易拓展;Hadoop的优点还在于它的高可靠,它把结点宕机看成是正常情况,通过zookeeper、yarn等组件对宕机结点进行处理,实现高可靠。Hadoop的缺点是不能够对大数据进行实时处理,只能进行离线批处理。
5、Hadoop编程跟平常用的Java、C++编程有什么不同?
平常的Java、C++编程一般是学习语法、算法、各种库的使用,比如C++的STL库、Java的集合类框架等,Hadoop用到了MapReduce的编程范式,虽然也是用Java语言,但还是要遵循MR的编程范式。
6、你的简历里写的语言还挺多,Java、C++、python、R,平常用那种语言比较多?
大学前三年主要用C++,因为打比赛的时候C++语言要比Java和python快一点。现在学习Hadoop主要用的是Java,购物车分析和学习tensorflow用的是python,R语言是数据分析工具实践课程上使用的语言。
7、一道简单的算法题,用代码实现:给你一个字符串,如何判定它是否是数字?数字可以包含正负号,用科学计数法表示的数字不算
三个思路:一是用Java包里面有判断是否是数字的函数,直接调包;面试官说Java包的判断数字的函数跟他的标准可能不太一样。二是用Java的正则表达式Pattern类;面试官说这是一个思路,问还有没有别的思路。三是用charAt函数把字符串里的字符逐个截取出来,然后判断是否以正负号或者数字开头,中间只能有0个或者1个字符是小数点等等,开始手撕代码。
8、讲讲HashMap的底层实现原理
HashMap可以看成是一个链表数组,通过哈希函数映射结果相同的元素用一个链表来存,在Java1.8以后,如果链表元素个数达到8个,会把链表换成红黑树以提升效率。所以HashMap底层主要是用数组、链表和红黑树来实现的。
9、在你打比赛的过程中哪道题让你影响最深刻?说一下你的解法
我:???接着说大二大三打的比赛,现在已经忘了。面试官笑着说他之前面试的时候有面试官问他这个问题,然后他当时也忘了,所以现在也来问我。(禁止套娃>_<)然后我就说了印象比较深刻的是动态规划之类的题目,因为一个问题背后往往是一类题目,然后举例说了完全背包、0-1背包的一些解法等等。
10、再来一道算法题:给你一个长度为n的整数无序数组,找出第m大的元素,返回其下标
我想了一下,说用Java中的HashMap结构,扫一遍数组,把元素的值存成key,把元素下标存成value,存好以后用迭代器遍历第m个元素即可,因为HashMap是按key有序排列的。然后面试官就纠正我,说HashMap不能保证按key排序,TreeMap才是保证按key排序的。
11、TreeMap为什么能保证按key排序?C++中的map是按键值排序的吗?上面的题如果用TreeMap时间复杂度是多少?
我说TreeMap应该是用了红黑树的数据结构,这是一种平衡二叉树,结点值的遍历是有序的。C++的STL的map是按键值排序的。上面的题如果用TreeMap,考虑到构建红黑树的过程,时间复杂度应该是O(nlogn)。
12、一个20阶的台阶,每次可以走1阶或者2阶,总共有多少种走法?
我说这应该是组合数学方面的内容,把20分成若干个1和2的和,比如1个2+18个1、2个2+16个1等,然后每种情况的1和2进行排列组合、去重,最后把每种情况的排列组合数加起来。
13、面试官开始和我聊天,说看到你的内推人是X,他是我同事,你和X是什么关系?
我说X教会了我很多实习和专业方面的知识,可以说是我的半个老师,我很尊敬他。然后说当时阿里标准化部有一个小程序标准化进校园的活动在p大举行,在活动中认识了X等等。
14、面试官问我有没有什么要问他的
我提了三个问题:一是面试结果什么时候出来,二是实习的地点在北京还是杭州,三是请他评价一下我今天的表现,方便我进行改进。
面试官回答面试结果一般1到2周出来,实习的地点在北京,东三环那边。然后说我是他面试的几个人中笔试分数比较高的;看我的简历有ACM的经历,对我的算法能力会有一点期待,面试以后觉得我算法能力还可以;面试中有一些脑筋急转弯的问题没有回答出来,但这个只是加分项,影响不大;对Java集合类框架的理解、工程能力还可以。然后说了他现在在做的一个项目的名字,面试官的部门主要是做基础研发的,问我能不能接受。
面试过程中还有其他的一些问题,记得不太清楚了。感谢给我内推的技术大佬,感谢面试官的耐心和提点,感谢阿里爸爸给的面试机会,不知道能不能进二面~