2018秋招面试问题(七、C++基础问题)

这篇博客汇总了C++面试中常见的海量数据处理问题,如海量URL去重、海量订单查询、大文件共同URL查找等,并探讨了哈希、二叉树等数据结构在解决这些问题中的应用。此外,还涉及C++的基础知识,如关键字voatile、数据类型、异常处理等,适合C++开发者复习和准备面试。
摘要由CSDN通过智能技术生成

注:面试过程中整理的学习资料,如有侵权联系我即刻删除。

目录

上亿万数量级的海量查询,比如十亿订单中,找出前一百个销量最好的产品

对于一个海量的文件中存储着不同的URL,用最小的时间复杂度去除重复的URL

给定a、b两个文件,各存放50亿个ur,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?

有10个文件,每个文件1G,每个文件的每一行存放的都是用户的query,每个文件的query都可能重复。要求你按照query的频度排序。

对于海量数据,用什么数据结构存储用户搜索的高频关键词比较合适?比如,当用户输入“黄”字,输入框要自动显 示“黄晓明”,“黄蓉”,“黄山”,“黄鹤楼”等提示,但是能存储的量很有限,所以需要选择恰当的数据结构。

哈夫曼树

用#define声明一个常数,表明1年中有多少秒(忽略闰年问题)?

c++关键字voatile

C++中下列数据类型所占的字节数以及数值表示范围

编译语言和解释语言

系统函数和库函数的比较

如何判断一个整数是否是某个数的平方

C++异常处理机制

析构函数能不能抛出异常?为什么

C++中对象的生命周期

函数指针、指针函数分别是什么?

x&(-x)返回是是什么?比如若x = 2^31-4

二叉排序树查找一个数的时间复杂度

不用if,switch,三目运算符来输出较大的数或者较小的数?

用C++程序写代码来判断一个操作系统是16位还是32位的?

如何判断一段程序是C编译的还是C++编译的?

char a[]和char *a的区别

结构体中末尾定义一个char data[0];或者int data[0]

如何用O(1)的时间复杂度来删除一个单链表结点

不申请新的内存空间来交换两个变量的值


上亿万数量级的海量查询,比如十亿订单中,找出前一百个销量最好的产品

首先,利用哈希算法,将订单分为1000组(相同产品的订单要分入一个组)。

其次,用哈希map统计每个组里产品出现的频率(也就是销量),

堆排序构造出一个100个元素的小顶堆,存入文件,这样就有1000个文件存放小顶堆。

最后再将这1000个文件归并排序,找出频率最高的前一百个。

对于一个海量的文件中存储着不同的URL,用最小的时间复杂度去除重复的URL

将海量数据分组,比如分为1000个组,那就是hash(url)%1000,来分组,相同的url一定进了相同的组,然后用hash_map来统计频度,重复出现的就删除掉。

给定a、b两个文件,各存放50亿个ur,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?

可以估计每个文件的大小为50G×64=320G,远远大于内存限制的4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。

  1. 遍历文件a,对每个url算出对应的哈希值,再求取,然后根据所取得的值将url分别存储到1000个小文件中。这样每个小文件的大约为300M。
  2. 遍历文件b,采取和a相同的方式将url分别存储到1000小文件中(记为)。这样处理后,所有可能相同的url都在对应的小文件()中,不对应的小文件不可能有相同的url。然后我们只要求出1000对小文件中相同的url即可。

求每对小文件中相同的url时,可以把其中一个小文件的url存储到hash_set中。然后遍历另一个小文件的每个url,看其是否在刚才构建的hash_set中,如果是,那么就是共同的url,存到文件里面就可以了。

有10个文件,每个文件1G,每个文件的每一行存放的都是用户的query,每个文件的query都可能重复。要求你按照query的频度排序。

  1. 顺序读取10个文件,按照hash(query)%10的结果将query写入到另外10个文件(记为)中。这样新生成的文件每个的大小大约也1G(假设hash函数是随机的)。
  2. 找一台内存在2G左右的机器,依次对用hash_map(query, query_count)来统计每个query出现的次数。利用快速/堆/归并排序按照出现次数进行排序。将排序好的query和对应的query_cout输出到文件中。这样得到了10个排好序的文件(,此处有误,更正为b0,b1,b2,b9)。

这10个文件进行归并排序(内排序与外排序相结合)。

对于海量数据,用什么数据结构存储用户搜索的高频关键词比较合适?比如,当用户输入“黄”字,输入框要自动显 示“黄晓明”,“黄蓉”,“黄山”,“黄鹤楼”等提示,但是能存储的量很有限,所以需要选择恰当的数据结构。

这个需要进行存储,应该用字典树或者是状态机

哈夫曼树

给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。

树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的 路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数。< 如果两个数的和比接下来两个数都大,那就要并列生长 >

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值