岗位---研发工程师(C++方向)
结果:进入终面 被拒
流程:
8月29号在线笔试-->9月16号成都沃特酒店(一面、二面、终面)
在线笔试:
在线笔试,每个人的题目随机分配,大部门题目不相同。
可以参考以下网址中的资源
在线笔试的题目主要有选择题和三个附加题组成。
选择题目涵盖程序设计语言基础、操作系统、算法问题(排列组合、概率之类的问题也有)等,感觉选择题目基础部分难度适中,算法部分还是有一定难度的。
附加题主要有三道:
1.给定一个query和一个text,均由小写字母组成。要求在text中找出以同样的顺序连续出现在query中的最长连续字母序列的长度。例如, query为“acbac”,text为“acaccbabb”,那么text中的“cba”为最长的连续出现在query中的字母序列,因此,返回结果应该为其长度3。请注意程序效率。
该题的实质是求两个子串的最长公共子串。网上有很多地方都有该问题的讨论,可以参考,此处不再赘述。
2.写一个函数,输入一个二叉树,树中每个节点存放了一个整数值,函数返回这棵二叉树中相差最大的两个节点间的差值绝对值。请注意程序效率。
此题比较简单,改写二叉树的非递归遍历算法,设两个变量max,min分别为最大的数和最小的数,max和min的值为根节点的初始值,在遍历树的过程中不断进行比较,修改max和min的值,最后max-min即为该树中所有结点差值绝对值最大的值。
3.天猫魔盒的应用:要求魔盒写出下单的接口,实现下单逻辑。以及问需不需要加事务,如果不加要怎样保证数据的一致性。
因为对java不是太熟,此题放弃了。
总结:总的来说,阿里的笔试题目还是比较灵活的,不仅仅是考查基础,更看重一个人灵活运用所学知识解决实际问题的能力。
一面:
简单介绍参与的科研与项目的主要内容
淘宝购物时,搜索商品数量达到前10的关键字的主要算法思想(经典的Top-K问题)
hash表和平衡二叉树的插入、删除效率对比
hash函数的设计
hashmap的实现 及其采用的数据结构,如果没有看过STL中关于hashmap的实现源代码,面试官也会问你自己打算怎么实现
编写函数链表逆置,注意处理指针为空等异常处理,必要的地方给出代码注释
实现字符串逆置的主要算法思想
以下三个问题的主要算法思想,,时空复杂度要尽可能的低,每个问题最好有多种思路:
两个集合求交集:(集合数组数组元素分别进行预排序,设两个数组下标p和q分别指向两个集合数组A,B的首元素,比较A[p]和A[q]的值,分为小于,大于,相等三种情况,记录交集元素,增加对应的下标)
三个集合求交集:(三个集合的元素合并在一起进行排序,最后再去重,感觉应该不是最好的算法)
一长一短的两个集合求交集:(当时没想出来,后来想了一下,可以先对两个集合进行预排序,对短集合中的每个元素在长集合中进行折半查找,如果查找成功,则是两个的交集元素)
快排分区思想
基本有序采用的排序方式
char str[10] 能否往str中写入100个字节的数据 会产生什么样的后果,并举出具体的例子(比如:缓冲区溢出)
TCP C/S通信的基本流程
TCP多并发连接的处理 多线程,I/O多路复用
select epoll 的实现原理及其 对比分析
想问面试官的问题
总结:一面的问题主要是对基础和解决问题能力的考查,问了我很多数据结构和算法的问题和网络的一些重要问题,思维一定要活跃、敏捷,对不能回答的问题也要尽量讲讲自己想从哪个方面下手解决这个问题。一面总体回答的比较好,于是很轻松的进入了二面。
二面:
研究工作的主要步骤和模块 自己在项目中完成的步骤和模块
项目中有几个难点,自己对应的解决方法【非常重要】
希望从事什么样的工作(具体到某应用领域:如无线 终端 客户端 搜索应用 客户端)及其原因分析
想问面试官的问题
总结:二面主要问了些我在实验室从事的一些研究工作的问题,面试官很看重你对你所做工作的总结力度,要能从多个角度解决反映你的工作量和出色的解决你问题的能力。此外,对于你的研究和项目工作,你实验室的老师和同学基本都懂,如何在短时间内让可能不熟悉你这个研究领域的面试官能听懂你的描述也是一个很重要的问题。二面回答的不是很好,可能是之前对相关问题的准备不是很充分,但还是幸运的进入了终面,估计是想把我留作备胎。
终面(HR面):