百度提前批一二三面 (许愿offer)
1、 自我介绍
2、 上来先问了半个小时项目
3、 然后二十多分钟c++基础,比如:
4、 讲一下网络io复用;
5、 讲一下三次握手和四次挥手过程,即状态转换;
6、 讲一下智能指针;
7、 什么时候用智能指针;
8、 栈溢出?什么情况下会出现栈溢出?
9、 拷贝的函数有哪些?
10、 客户端和服务端建立连接后,怎么知道可以发送多大长度的报文?(不知道,被讲解了一下,TCP连接时可以设置一个字段MTU什么的)。
11、 还有挥手时,服务器重启,但是端口还在怎么办?
还有很多其他奇奇怪怪的知识,问了挺多,很久记不清了。
编程题:给你一个文件,有很多行(1000行),有三列,其中中间那列是数字,如何按照这个数字将这个文件进行一个排序。
bool cmp(const pair<int,string>& a,const pair<int,string>& b){ return a.first < b.first; } int main(){ string filename = "F:\\workspace\\C++\\letcode\\test.txt"; string filename1 = "F:\\workspace\\C++\\letcode\\sort.txt"; fstream oss(filename, ios::in); ifstream infile(filename); ofstream outfile(filename1); if(!infile){ cout << "open file : "<< filename << " error !"<<endl; exit(1); } if(!outfile){ cout << "open file : "<< filename1 << " error !"<<endl; exit(1); } vector<pair<int,string>> index; string s1, s2; int key; while(infile>>s1>>key>>s2){ string ss; ss = s1 + " " + to_string(key) + " " + s2; index.push_back(pair<int,string>(key,ss)); } sort(index.begin(), index.end(), cmp); for(pair<int,string> val : index){ outfile << val.second << endl; } infile.close(); outfile.close(); system("pause"); return 0; }
最后反问环节
百度二面:(面试官设备有问题,晚了几分钟,说少问两个问题)(2020年8月7日 星期五 下午4:00 - 下午5:00 一小时)
1、 自我介绍;
2、 你面的是c++,那你说一下对c++的认识?
3、 你既然说C++运行快,那和Java,python相比为什么快?有哪些原因让c++快;
4、 接手一个项目,有内存泄漏,你应该如何快速定位?
5、 那你说一下你平时遇到的内存泄漏?
6、 你有哪些方法避免内存泄漏?检测内存泄漏?(我说到智能指针)
7、 智能指针weak_ptr怎么解决shared_ptr相互引用?可以直接得到shared_ptr吗?
8、 shared_ptr是线程安全的吗?以及原因?
9、 说一下重载和重写?
10、 重载可以使用返回值做判别吗?为什么?
11、 那如果我有两个函数,函数名和参数列表相同,返回值不同,就希望这两个函数重载怎么办?
12、 重写用到virtual,那是不是一定要加virtual?如果不加会怎么样?
13、 模板类有用过吗?有哪些?
应该还有一些其他问题,当时没记,暂时想不起了。
后面是两个算法题。
1、 有很对序列对比如A>F,S>J,……,返回一个有序的序列(序列对可能有重复的,但可以保证是一个完整序列,中间不会有断点)。当时时间不多了,面试官说可以说下思路,问应该用什么算法做,复杂度是多少?
2、 给你一个文件,有很多行,怎么打印出来?(你只有5分钟时间了)。写完跑出来后,还有时间又问,那你觉得这个代码实际在用的时候应该考虑注意哪些问题呢?
百度三面:(应该是个主管,面的时候还在很忙敲键盘)(2020/08/10 20:00 - 21:00一小时)
1、 自我介绍
2、 选择你的一个项目讲一下你其中是怎么做的,中间遇到啥,怎么解决的?
3、 进程和线程的区别?
4、 进程和线程同步的方法有哪些?
5、 Linux系统下查询资源使用情况的命令有哪些?
6、 Select和epoll的区别讲一下?
7、 有两个有序数组,如何找到交集?(一开始说用set,面试官说有重复的,后来又说用map,还让说一下时间和空间复杂度)。说有没有空间复杂度更低的方法?(从a选一个数,在B二分查找,不过时间复杂度O(nlogn)),又问有没有时间复杂度O(n),空间复杂度更低的方法?(因为有序,使用两个指针,相同加入结果集,谁小谁右移,直到有一个到达数组尾端)。后来面试官应该有事,突然说那我们写代码实现一下吧。
int main(){ vector<int> a = {1, 2, 3, 4,4, 5, 6, 7}; vector<int> b = {2, 3, 4,4, 5, 8}; vector<int> res; int i = 0, j = 0; int lena = a.size(), lenb = b.size(); while (i < lena && j < lenb){ if(a[i] == b[j]){ res.push_back(a[i]); ++i; ++j; } else if(a[i] < b[j]){ ++i; } else{ ++j; } } for(int val : res){ cout << val << endl; } system("pause"); return 0; }
8、 写完通过之后,问就这个程序,让你设计测试用例,应该怎么设计?
9、 有一批url,有几百亿个,可能有重复的,内存放不下,应该如何去重?(拆分,hash?)
可能还有一两个技术问题,暂时想不起来,感觉面试官有点忙,问的不多。
后面将近二十分钟就开始聊人生了:
1、 你觉得从项目中你收获成长最大的是什么?
2、 你能说一下觉得自己的优点和不足是什么吗?
3、 你最近有看什么书吗?能够分享讲解一下吗?
4、 你找工作的话,一般怎么选择公司,看重什么?
5、 三面完了,从之前面试中你对部门有什么了解吗?然后讲了一下部门具体做什么的?
#面经##校招##百度##C++工程师#