阿里云面经

昨天上午投了简历,面试官下午给打电话说确立时间,然后定在了今天下午三点。

1.第一阶段:

介绍自己的项目情况,然后就自己的项目进行介绍和说明。
这一步主要是讲自己做的项目,一个分布式集群,一个文本匹配器,一个源码阅读和命令实现,还有一个轻量级测试框架。然后在数据结构这块用红黑树实现过两个容器,一个set, 一个map.
这属于自由发挥阶段,简要介绍就过去了。

2. 第二阶段:

a. 接下来对是问我set和map实现,然后set和map的区别是什么,以及我的map会不会在使用的时候产生插入错误,以及和系统内的map插入的时间空间效率比,因为是之前测过(vim里面配置好了输出的时候输出运行时间,所占内存等信息)的,然后回答了为什么我的会慢一点。

b. 然后是问我的文本匹配器(二叉字典树 + Ac自动机)我简要介绍中文字符在utf-8下是三个无符号整形数,然后线索化的等操作,面试官提问我为什么不用其他树形结构,然后我解释了我为什么用二叉字典树,不用26叉和256叉的原因(26叉主要是处理英文,二叉还能处理中英文,256叉来处理英文的话,那可真是神仙,不过256叉可以直接处理ascii的字符,但是二叉也可以啊!并且更省空间)。然后我拓展提出了只要是符合一定规则对称的数据,只要能以01字符串存,那么就能插入到二叉字典树存储和处理,并且线索化二叉字典树是最优的(因为没有空的分支,都被01占用了)。

c. 然后面试官问了源码阅读中和我自己实现的项目中,对于内存区块是这么分配(对可变分区的内存管理)处理的。然后我回答了linux中的malloc的分块实现和我自己的分块实现的一些区别,我实现的时候为什么要用metadata分配方法,为什么用metadata能回收空间,链表能合理伸缩自如。然后面试官问我知不知道其他的分配框架,我说不知道,然后面试官科普推荐了一个TCmalloc。

3.第三阶段:

笔试:
1.给4G的空间,给定很多的数,然后出现的数都是int32_t的,那么要立刻查找是否存在某个数,不能排序,还得一次查找。
答案:结果用bitset,直接懵逼,我不会。
2.给一个文件内容指针,要求是,每次输出不能超过100个字符, 每个单词不能拆开输出,那么按照这么输出的方式来输出。
答案:这个就简单了,查找文件指针的第101位是不是空格字符,是的话输出前100,不是的话,101往前走,走到第一次遇到空格,那么输出前面的那段,因为是知道输出的最后位置的(那就是文件内容指针下一次操作起始的地方)。

然后就是所谓的等消息了。。。

————————时间 分割线 3.17——————————

真的是傻了,所谓bitset就是特沙雕的哈希我去。
int32存一位数太浪费(有这么多位:1024 * 1024 * 1024 * 4)

那么他有32B可以存32个数,那么只要(1024 * 1024 * 1024 * 4/32)
真的是……

你可能感兴趣的:(阿里云面经)