一面(约50min)
问题
1.没有自我介绍,直接针对项目提问。问项目整体实现了什么,实现流程是什么样的,我所做的工作在哪个环节。目前你的项目所做的设备在一台pc上同时只使用一台,如果要同时支持多个设备怎么做。
2.算法题
如果有一个几个G的文件,存储了uint32的数据,在内存不够大不能一次性读入所有数据的情况下,怎么找出中位数。
3.算法题
给一个只有小写字母的字符串,找出不重复的字母中,第一个出现的位置。
4.C++传参方式有哪些?值传递会默认拷贝,如何避免?
5.常见的内存问题有哪些
解答
如果有一个几个G的文件,存储了uint32的数据,在内存不够大不能一次性读入所有数据的情况下,怎么找出中位数。
读入文件找出最大最小值,统计数据量,根据最值均分为多个区间,统计每个区间的数据量,然后根据个数确定中位数应该在的区间,排序。
面试官提出的改进: 可以直接将uint32的区间来划分区间而不找最值,数据量可以根据文件大小和uint32的大小计算
给一个只有小写字母的字符串,找出不重复的字母中,第一个出现的位置
用数组统计字母出现次数、第一次出现位置,找第一个(这题比较简单)
注:这里用了vector,面试官问了为什么用了vector而不用数组,我这里只考虑了代码写起来更方便
C++传参方式有哪些?值传递会默认拷贝,如何避免?
值传递,指针传递,引用传递。(没有查到如何避免值传递使用默认拷贝函数的方法,但重写拷贝函数应该可以)
二面
问题
1.三道笔试题
1)判断一个树是否是平衡二叉树
2)单链表归并排序
3)n*m螺旋矩阵
2.介绍一个自己的项目,项目相关提问
3.两道C++语法题
1)
void func(char ptr[100])
{
int ptrlen=sizeof(ptr);
printf("%d",ptrlen);
}
int main()
{
char chptr[100]<