20190807-阿里C++研发工程师-一面

1.自我介绍

2.介绍一下研究生的研究方向

3.一个智力问题

有无限多的水,如何用两个分别为5L和3L的容器量出4L的水?

4.如何解决哈希冲突?

链表法(链地址法)

开放地址法

再哈希法

公共溢出区法

5.进程间的几种通信方式?

进程间通信(IPCInterProcess Communication)是指在不同进程之间传播或交换信息。

IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、SocketStreams等。其中 SocketStreams支持不同主机上的两个进程IPC

6.进程和线程的区别?多线程如何进行同步?

7.对软件测试方法有什么了解?如单元测试,集成测试,接口测试

8.大数据集的统计:

一个数据集有1000万行数据,每行是一个字符串型的URL,每行的数据可能是重复的,让查找出出现次数最多的1000条URL,top-k问题

思路:由于记录是可重复的,所以可以用集合来存储最终要保存的1000条数据; 

可以使用hash函数对每条记录进行映射,用位向量来存储哈希值,并在每个位置记录一个计数器。逻辑上可行,但是复杂度太高,问如何用top-k算法实现?

top-k算法一般是用什么数据结构实现的?

9.编程题

给出一个单向链表,输出该链表的倒数第k个结点(未知链表长度)

 

 黄婷-0808阿里一面

1、 自我介绍

2、 项目介绍(面试官没太听明白)

3、 线程与进程的区别?线程间如何实现共享内存?

4、 智力题

1) 一个桃一毛钱,三个桃核能换一个桃,最多能吃多少个桃?

2) 燃烧一根不均匀的绳子需要一小时,问如何度量出半个小时?

从两头同时开始燃烧,燃完即为半小时。

5、 算法题

25个数,找出top 3个数,有一个机器能对至多五个数进行排序,问至少需要排序多少次能找出top 3个数。

1)Top-k算法可用堆排序。

先选择前三个数构建一个小顶堆,对全部元素遍历一遍,对每个元素如果大于堆顶元素,则替换堆顶元素,并维护堆的性质,最后堆中的元素就是top3.

2)可用锦标赛法

思路:先把25个元素分成五组,分别排序,然后再对五个每组中的最大元素进行排序,最大值就是整个元素集的最大值,移除该元素然后继续对五个组中的最大元素进行排序,找到第二大元素,继续该方法找到第三大元素,这样一共进行了5+1+1+1=8次排序。(是否六次就可以,剩下的每次只需要一次比较即可)

先把25个数分成ABCDE五组分别进行排序(5),得到:A1 A2 A3 A4 A5; B1 B2 B3 B4 B5; C1 C2 C3 C4 C5; D1 D2 D3 D4 D5; E1 E2 E3 E4 E5; 分别取出各组的最大元素进行排序(1),假设得到:A1 B1 C1 D1 E1,即A1为top 1;只需再对A2 A3 B1 B2 C1这五个数进行一次排序(1),即可得到top 2, top 3;一共需要排序5+1+1=7次。

6、 编程题

一个升序数组,找出给定数字在数组中出现的首末位置

思路:二分查找分别找到首尾出现的位置

 

 

 

 

posted @ 2019-08-07 18:42  妍妍fighting  阅读(1228)  评论(0编辑  收藏  举报