百度测试一面

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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值