腾讯技术面试

本人去面试的是腾讯的技术研发的后台开发方向。。。。。。不是这个方向的可以跳过哈,也可以参考下!

腾讯技术面主要问了以下的内容:

GDB如何进入进程空间,如何查找多线程的一个bug?

hadoop的结构?

hive是什么?用来做什么的?

zookeeper的作用,怎么实现数据的一致性的?

Nginx为什么高效?

然后是三个手动写程序的题目:

1、单链表的删除,请尽量写出多的情况;

2、1亿条数据,每个数据都是int型,数据的大小在0<N<1000000之间,求出其中最大的前20个;

3、还是接上面2的情况,如何找出出现频率最高的20个。

以上就是腾讯一面的所有问题:

第一个GDB怎么进入进程空间,不晓得,没有答上来,没这方面的经验。Orz!!!后面查看资料得知答案为:使用gdb attach $(PID)或者gdb --pid $(PID)可以进入进程空间!

第二个hadoop结构,俺倒腾过一段时间的hadoop,对这个生态环境很熟悉,hadoop呢,主要是由HDFS+Mapreduce组成基本的框架,基于此框架之上有Hbase半结构化的数据库、hive、pig、zookeeper。还有个日志监控Chuwka以及Flume。blalala。。。。

第三个,hive是hadoop上面一个数据仓库,需要特别注意的是hive不是一个数据库,是仓库,hive其实就是一个面向用户的接口,可以使得用户使用类SQL语言来查询HDFS或者Hbase(注意这个是一个数据库)上面的数据,可以使得SQL用户很快地转向hadoop的使用,hive的就是将用户写的这些类SQL语言转化成Mapreduce并行化任务,加速查找的速度以及效率。

第四个问题,zookeeper就是保证hadoop集群中数据的一致性,为什么有这个需求呢?因为HDFS存储数据的时候,一般会有两个备份,这样是为了提高系统的容错能力以及健壮性。实现数据一致性的时候,集群中运行zookeeper的机器,需要通过一个算法选择出一个server,使得其他的server的数据与这个server上的数据保持,然后如果有数据写入就按照前面的方法继续选择然后同步,其实这个选择算法使用的是paxos,这个算法的逻辑性还是比较强的,当时面试小哥没怎么问,我也没怎么搞搞懂,有时间我好好好研究下。

第五个问题,Nginx为何高效,就是使用了epoll模型,然后select与epoll有啥区别,select函数被调用的时候发生阻塞,然后又I/O事件的时候,返回所监控的句柄集合里面可读、可写或者异常的句柄个数,然而select并不知道到底是那个句柄,然后需要把所监控句柄集拷贝到内核空间,然后进行轮询,找出事件发生的I/O。关于其他的,本人在博客中多次提及,这里就不再赘述了。

然后三个编程题目:

1、单链表的删除,我主要写了两种情况,当前节点以及当前节点的下一个节点。具体怎么写就不说了很简单。

2、第二个题目,首先想到地思路就是快速排序,把大的数往前放,寻找位置为20的地方,找到就结束快排,然后前20个就是最大的20个。这种方法只是其中的一种,感觉效率不是很高,当时面试的时候,比较熟悉快速排序的代码,所以就写了快速排序,后面仔细想想这个方法有个问题!一亿条数据,都是int型,建立一个容量为1亿的数组,这样是可以的,但是每个数据为int性,这样下来全部读入内存,使用内排序算法,需要的内存空间要达到至少3.8GB,我天!鹅厂虽说这点不是事儿,但是一段时间内对服务器的负荷造成压力啊!

用啥算法好点儿呢?回到实验室,实验室一个师弟提醒了下前段时间研究者July来我边家村电子职业技术学院讲的算法。小顶堆,突然间豁然开朗啊,这样就可以避免这么大量占用内存,但是I/O开销又上去了,其实可以使用缓存区来缓解下,具体的方法就是创建一个20个大小的数组,从1亿条数据中读入20个,存入此数组,然后调整为小顶堆,那么数组首位元素也就是堆顶是这个数组中最小的元素,然后开始读入数据与堆顶元素比较,替换堆顶的数字,然后调整堆,然后就这样继续,直到遍历完整个数据文件。其实这个算法也不是很好,牺牲了I/O的效率换取内存,其实可以调整堆数组的大小以及添加缓存区来使得效率增加。

3、第三个相对于第二简单了些。算思想就是,我们发现这个文件中存储的数字的范围为0<n<1000000,我们发现这个数据元素的种类也就1000000个,所以创建一个大小为1000000的静态数组B用来存储相应的元素出现的频率。怎么算呢?这样做,我们初始化这个数组为0,然后一个循环读取我们的数据,把读入的数据的作为B的下标,然后这个下标每重复一次则累加一次,最后遍历完这个数据文件,则B数组中完全存储了每个元素出现的频率,然后再进行一次快速排序就能很快找到这出现频率最高的top20.

呵呵。。。以上就是本人2016腾讯校招问的问题,就一个问题不知道从何说起。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值