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。