【讨论】腾讯2012笔试题 你有更好的办法吗?

标签: 腾讯 | 发表时间:2011-10-14 14:39 | 作者:地精工程师 Bloger
出处:http://www.cnblogs.com/

腾讯2012笔试题  你有更好的办法吗。                                                      

                                                                         

问题描述: 例如手机朋友网有n个服务器,为了方便用户的访问会在服务器上缓存数据,因此用户每次访问的时候最好能保持同一台服务器。已有的做法是根据ServerIPIndex[QQNUM % n]得到请求的服务器,这种方法很方便将用户分到不同的服务器上去。但是如果一台服务器死掉了,那么n就变为了n-1,那么ServerIPIndex[QQNUM % n]与ServerIPIndex[QQNUM %(n-1)]基本上都不一样了,所以大多数用户的请求都会转到其他服务器,这样会发生大量访问错误。

                                                                              

: 如何改进或者换一种方法,使得:(1)一台服务器死掉后,不会造成大面积的访问错误,(2)原有的访问基本还是停留在同一台服务器上;(3)尽量考虑负载均衡。

                                                                               

                                                                              

想了个算法,在将用户分配到服务器时,做一层映射,映射与服务器一对一对应,当服务器异常时,对应的映射表项执行顺序在其它服务器中选路,简单有效。呵呵。。。示例代码如下:

#include <iostream>
#include <time.h>

#define MAX_SERVER 200

int server_ip[MAX_SERVER] = {0};
typedef struct
{
int state; // 1-work
int server;

int index;
}SI_MAP;

SI_MAP si_map[MAX_SERVER] = {0};

void init()
{
// 初始化服务IP表
for(int i= 0;i< MAX_SERVER;i++)
{
server_ip[i] = i+1;

si_map[i].state = 1;
si_map[i].server = i;
si_map[i].index = 0;
}
}

int GetServer(int index)
{
if( si_map[index].state == 0 )
{
si_map[index].index = (si_map[index].index+1)%MAX_SERVER;
if( si_map[index].index == index )
si_map[index].index = (si_map[index].index+1)%MAX_SERVER;

return si_map[index].index;
}

return si_map[index].server;
}

int change(char c,int old)
{
// 恢复原有的坏服务器
si_map[old].state = 1;
// 选定个坏的服务器
int bad = rand()%MAX_SERVER;
si_map[bad].state = 0;

printf("\nthe server %d is bad~!\n", bad);

return bad;
}

void work()
{
int n = 0;
int index = 0;
int ip = 0;
char c = 0;
int bad = 0;
while(c != 'e' && c != 'E')
{
srand(time(NULL));
for(int i= 0;i< MAX_SERVER;i++)
{
n = rand()%MAX_SERVER;
ip = GetServer(n);

printf( "map:<%d,%d>", n, ip );
if( i%4 == 0 )
printf("\n");
else
printf("\t");
}
c=getchar();
// 随机改变坏的服务器
if( c == 's' || c == 'S' )
{
bad = change(c,bad);
for( int j= 0;j<100;j++ )
{
ip = GetServer(bad);
printf( "map:<%d,%d>", bad, ip );
if( j%4 == 0 )
printf("\n");
else
printf("\t");
}
}
}
}

void main()
{
init();
work();
}

                                                                                

      欢迎有更好的方法与大家分享!!

作者: 地精工程师 发表于 2011-10-14 14:39 原文链接

评论: 4 查看评论 发表评论


最新新闻:
· 小米手机生产线现万能充充电场景 质量遭质疑(2011-10-14 23:06)
· 淘宝风暴波及消费者 诚信才是硬道理(2011-10-14 23:01)
· 网游防沉迷实名验证被指漏洞颇多(2011-10-14 22:43)
· 消息称苹果iPad 3将上线生产 有望明年3月发布(2011-10-14 22:34)
· Google购买整版《纽约时报》Google+广告(2011-10-14 22:28)

编辑推荐:最老程序员创业札记:全文检索、数据挖掘、推荐引擎应用46

网站导航:博客园首页  我的园子  新闻  闪存  小组  博问  知识库

相关 [腾讯] 推荐:

腾讯的内涵图

- keeno - 阿禅日记
2011年5月31日10:33,腾讯QQ 浏览器首页的截图如下:. 内涵关键词:释放、aiww、64. 1小时后,腾讯将图片替换掉了. 对这位如此有内涵的经理或编辑或设计师致敬. © Jason Ng for 阿禅日记, |. 不要用中国手机号来找回Gmail密码.

腾讯电商帝国

- 以外 - 互联网的那点事...
腾讯宏伟的电子商务战略开始逐渐浮出水面. 5月30日,腾讯正式对电子商务业务的内部组织架构进行重组,机构更加复杂全面的电子商务业务线取代了原来的电子商务部,同时进行近十位中、高层管理人员的职位变动及内部人员的调整. 同时,腾讯一直在电商领域全面出击,通过投资进行战略布局. 从今年年初至今,腾讯以超乎想象的速度战略入股了数家电子商务企业,包括已经对外公 布的好乐买、易讯、F团以及数宗尚未对外公布的收购案.

腾讯CMEM的PHP扩展

- duyue - 平凡的世界
最近公司在做相关的业务,由于Memcached协议缺少返回码,为了保证业务数据的安全性,不得已只好自己写个扩展来实现需求. 基于memcache扩展的2.2.6的稳定版开发而来. 代码已经开源,有需要的朋友请拿走,License是PHP License,请自觉遵守. 项目主页:http://code.google.com/p/cmem/.

腾讯:变局前夜

- - 互联网的那点事
8条业务线,20座城市,20000名员工. 做为中国最大的互联网公司之一,腾讯正面临着前所未有的管理挑战. 2012年4月12日,网易发布的一则公告引起了业界的强烈反响. 网易称,旗下重要产品——新闻客户端遭到腾讯抄袭. 腾讯当天上架地新闻iPhone客户端2.0版本在产品整体布局、跟帖页面、图片浏览页面的设计几乎与网易新闻客户端的相关功能和设计完全一致.

抄袭,腾讯 和 产品

- - 黄小肆依旧在理性与感性里挣扎
作者:陈皓 很早就想写这篇文章了,只是想法比较零碎,所以一直没有成文,这两天觉得思考得比较成熟了一些,所以把我的这些想法整理下来,欢迎大家一起和我讨论. 首先,先表达我的立场,我对抄袭的立场持BS和痛恨的态度,尤其是 那些C2C的网站,痛恨这些国外有什么就山寨什么的做法,尤其是那些连界面都不改,像素级的抄袭,连CSS和img都是一样的,更甚者,连图片都链接到抄袭源的网站去了,连源代码都抄的行为,比如: 腾讯抄新浪的代码, 新浪抄twitter的源码.

腾讯的产业长征

- - 今日话题 - 雪球
腾讯的2B问题,最近引发了无数讨论. 把这些讨论总结一下,无外乎就是三个问题:B端市场的产业升级+技术革命,腾讯到底还要不要参与. 刚刚,腾讯时隔六年进行了重大战略升级与公司架构调整,调整后的腾讯,保留了原有的企业发展事业群(CDG)、互动娱乐事业群(IEG)、技术工程事业群(TEG)、微信事业群(WXG);新成立了云与智慧产业事业群(CSIG)和平台与内容事业群(PCG).

温州动车劫——媒体封面_腾讯新闻_腾讯网

- Robert Mao - 牛博山寨 编辑推荐

腾讯陈军:腾讯云平台与技术实践分享

- Sepher - 服务器运维与网站架构|Linux运维|互联网研究
[第三届中国云计算大会]2011年最受瞩目的IT业界盛会——第三届中国云计算大会于2011年5月18-20日在北京国家会议中心隆重举行. 本次大会由中国电子学会主办,中国电子学会云计算专家委员会、中国云计算技术与产业联盟承办,CSDN网站、《程序员》杂志和电子工业出版社协办. 5月20日,在第三节云计算大会分论坛二“云计算平台与应用实践”中,腾讯网络平台部技术总监陈军带来了主题为《腾讯云平台与技术实践》精彩演讲.

腾讯新软件“腾讯操盘手”公测

- 洞箫 - cnBeta.COM
送给所有股民朋友的礼物,腾讯操盘手于今日开始抢先公测,推出PC版及手机版双版本,QQ一号均可登录,随时随地掌握行情,抓住机会.