百度测试一面

来源:互联网 发布:java中offset 编辑:程序博客网 时间:2024/05/16 10:23

1.Socket通讯。写一个简单的多线程socket通讯。

2.c++中虚函数底层的实现。

3.输出一个字符串的全排序和组合。

4.linux基本命令--如何用一条命令查找到一个字符串中出现次数最多的n个字符(这个命令我一直没找到)。

5.一个网络爬虫,每天可以抓取20亿条url。其中有些url重复出现。

 (1)如何去重复url。

 (2)数据库每天只能入库500万条url。如何在20亿条url中找出重要的500万条url?

6.“brokenpipe”是什么异常?


1,2,4,6都是可以再网上找到。这里不再叙述了

3.字符组合

/*程序员面试题精选100题(59)-字符串的组合[算法]   题目:输入一个字符串,输出该字符串中字符的所有组合。举个例子, 如果输入abc,它的组合有a、b、c、ab、ac、bc、abc。*/vector<char> vec;typedef vector<char>::iterator Iter;void PrintCom(char *str,int low,int high,int m){if(high-low+1<m)return;if(m==0){for(Iter iter=vec.begin();iter!=vec.end();iter++){cout<<*iter;}cout<<endl;return;}vec.push_back(str[low]);PrintCom(str,low+1,high,m-1);vec.pop_back();PrintCom(str,low+1,high,m);}void PrintCom(char *str){int len=strlen(str);int low=0;int high=len-1;for(int i=1;i<=len;i++){PrintCom(str,low,high,i);}}void PrintComTest(){char str[]="abcdef";PrintCom(str);}

字符全排列

/*3、给出一个函数来输出一个字符串的所有排列。*/void GetAllArrange(char *str,int low,int high){if(low==high){cout<<str<<endl;return;}for(int i=low;i<=high;i++){swap(str[low],str[i]);GetAllArrange(str,low+1,high);swap(str[low],str[i]);}}void GetAllArrangeTest(){char str[]="abcde";GetAllArrange(str,0,strlen(str)-1);}

第三题主要是考察了递归和栈的使用。


5.这是一道开放性试题。

我这里写出自己的解答。希望大家有好的想法可以提出来

1.分治。这个大的数据量分块处理。逐段的去重复。最后再俩段俩段的合并。合并后在去重复。

2.找到最重要的500万条。应该是出现次数最多的500万条。这个我觉得要用堆。类似于top n问题,取前n。

原创粉丝点击