《86、淘宝2011实习招聘笔试.doc》由会员分享,可在线阅读,更多相关《86、淘宝2011实习招聘笔试.doc(17页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、微信搜索关注超级HR联盟获取更多免费课程与资料记淘宝2011实习招聘笔试2011年03月27日 星期日选择题 第一题,两台电脑在局域网中,机器为千兆网卡,一台作服务器里面有一张网页为1K字节,问另一台下载这个网页的速度。我答:我不知道1K是指1024还是1000不过按我的算法没区别,1000 000000/8/1k我选了10 000张/秒 第二题,单链表插入一个节点的问题。在p指向的节
2、点后插入一个q指向的节点。 我答:q->next=p->next;p->next=q; 之后乱序,我记不清楚题号了。 有一题,地图染色问题,每个国家用矩形表示,让相邻国家颜色不同。离散里面有 &
3、#160; 有一题,问快速排序达到最坏情况时间复杂度n2的原数数组的具体情形。见数据结构 有一题,很扯的指针取址符号混乱,选项却很白痴。 有一题,入栈序列1,2,3,4,5,.,n,第一个出栈的是n,问第i个出栈的是多少。我答:n-i+1 最后一题
4、,给中缀和后缀表达式,求前缀表达式。 填空题 第一题:数组(a1,a2,a3,a4.,an),删除任意一个的概率相同,问平均删除一个要移动多少个。 我答:(n-1)/2第二题:一个程序填空,程序大意是在数组里面找第二大的数。注:不难 &
5、#160; 第三题:大致如下一个程序片段:void xxx(x) intcountx=0; while(x)
6、60; countx+; x=x&(x-1);
7、; cout<<countx<<endl;问xxx(9999)输出什么。我答:8,记得做ACM的时候碰到过那个式子,貌似关于排列的,具体意思忘记了,搞一下可以明白是x变成二进制,里面有多少个1就是答案。 第四题:大致如下一个代码 inta32=1,2,3,4,5,6; int*p3; p0=a1; 问*(p0+1)是个什么
8、东西 我答:4,蛮基础嗯。 简答题 第一题:7公斤米,50克砝码,200克砝码各一个,称1350克米问最少要多少次,并编程回答。我答,6次,可能一开始会想到 1350/250 + 2 = 7次,说明贪心无效。我不知道我的方法是不是很笨,用了递推,或者你可以看成是动态规划。转化一下题目的意思就是1克和4克砝码,问多少次称出27克大米,FN代表N克大米最少需要多少次。则有:FN=minFN-1,FN-4,FN-5+1代码如下:intfindmin(int weight)
9、160; int v= weight/50; int f150; f0=0;f1=1;f2=2;f3=3;f4=1; if (v<5) return fv; &
10、#160; int i; for (i=5;i<=v;i+) fi=min(fi-1+1,fi-4+1,fi-5+1);
11、return fv; 注:我一开始愣了很久,我在想,称好的大米可以作为砝码来用吗?这样就是另一种问题了吧。附加:如果天平能做为平衡工具的话,两次平分到1750克,然后两次量出200克,1750-400就是1350克了。四次。解答题第一题: 第一次:200+50,称出250g 第二次:200+250,称出450 第三次:200+450,称出650 共称出1350g 第二题,有N个蛋和M个篮子,把蛋放到M个篮子里,每个篮子都不能为空。另外,需要满足:任意一个小于N的正整数,都能由某几个篮子内蛋的数量相加的和得到。写出程
12、序,使得输入一个(N,M),输出所有可能的分配情况。 我答:不能想出算出所有摆放方法的方法,期待ACM大牛路过。(1. 先取M个蛋放入M个篮子(一个篮子一个蛋)2.剩下的(N-M)个蛋按照1,2,4,。方式依次维持各个篮子中蛋的数量(要有一个篮子保持只有一个蛋),若最后的蛋不是2的方次,有多少放入一个篮子3.取L(L<=N)个蛋时,应按二进制编码值考虑,如13个蛋:13的二进制码值是1101,则取有8个、4个和1个蛋的篮子即可。另外:题目不完整,N与M应该有数量关系:M<=N且N<2的M次方)解答1view plain
13、copy to clipboardprint?/* * 假设 n>m 并且 n小于100 public class Test private int m; private int n; private int eggs; private int numAnswer; Test() m=10; n=20; numAnswer=0; eggs = new intm; for(int i=0;i<m;i+) eggsi=0; private void fill(boolean state, int step, int sum) if(step>=m) statesum = true
14、; return ; fill(state,step+1,sum); fill(state,step+1,sum+eggsstep); /* * 判断是否满足:任意一个小于N的正整数,都能由某几个篮子内蛋的数量相加的和得到 * 算法:暴力枚举所有篮子的组合 * return */ private boolean judge() boolean state = new boolean n+1; for(int i=0;i<=n;i+) statei = false; fill(state,0,0); for(int i=1;i<=n;i+) if(!statei) return fa
15、lse; return true; /* * 给每个篮子分鸡蛋,升序(后一个篮子的鸡蛋必须不小于前一个篮子,避免重复计算) * param pre 前一个篮子鸡蛋数 * param already 前step个篮子 已使用的鸡蛋数 * param step 第step个篮子 */ public void solve(int pre,int already, int step) if(step=m-1) /最后一个篮子 eggsm-1=n-already; /不符合条件 if(eggsm-1<pre) return; /判断是否满足:任意一个小于N的正整数,都能由某几个篮子内蛋的数量相加的
16、和得到 if(judge() for(int i=0;i<m;i+) System.out.print(eggsi+" "); System.out.println(); numAnswer+; return ; / 给第step个篮子装鸡蛋,pre 到 n-already 种可能 for(int i=pre; i<=n-already; i+) eggsstep=i; /递归 solve(i,already+i,step+1); public static void main(String arg ) Test test = new Test(); test.
17、solve(1,0,0); System.out.println("可能情况的数量:"+test.numAnswer); 解答2using System;using System.Collections.Generic;using System.Text;namespace CmpSplitEgg class Program static void Main(string args) SplitEgg(); public static bool SplitEgg()
18、60; / 初始化变量,差额diffNum = 鸡蛋数eggNum - 篮子数basketNum int eggNum = 0, basketNum = 0, diffNum; / 输入鸡蛋数、篮子数 Input(ref eggNum, ref basketNum); / 排列结果,并初始化 int resultEggs = new intbasketNum; for(int i=0;i<basketNum;i+) resultEggsi = 1; / 差额 = 鸡
19、蛋数 - 篮子数 diffNum = eggNum - basketNum; if (diffNum < 0) Console.WriteLine("You can't make N < M"); return DoAgain() && SplitEgg(); else if (Math.Pow(2, basketNum) <= eggNum) Console.WriteLine("You can't
20、make N > 2M"); return DoAgain() && SplitEgg(); / 对任意一个小于N的数 总能使几个篮子里的鸡蛋总数等于它,则需要编号n的篮子放的鸡蛋数<=前面的鸡蛋数总和+1 / 基于2进制编码是能表示所有数字且位数最小的编码方式,上面条件由此推出 / 假设组合为升序排列,第一个篮子必然为1个鸡蛋 RandomLay(resultEggs, 1, eggNum); / 是否重新做一次 return DoAgain() &
21、& SplitEgg(); / <summary> / 重新选择 / </summary> public static bool DoAgain() Console.WriteLine(); Console.WriteLine("if you want to enter the N and M again?Yes(Note: if not enter 'Y' or 'y', the application will qui
22、t.)"); string choice = Console.ReadLine(); return choice.ToLower() = "y" / <summary> / 输入 / </summary> / <param name="eggNum">鸡蛋数量</param> / <param name="basketNum">篮子数量</param>
23、60; public static void Input(ref int eggNum, ref int basketNum) while (true) try Console.WriteLine("Please enter the egg number N:"); eggNum = Convert.ToInt32(Console.ReadLine(); Console.WriteLine("Please enter the basket number M:&qu
24、ot;); basketNum = Convert.ToInt32(Console.ReadLine(); break; catch (Exception) Console.WriteLine("Enter error: please input integer!"); Console.WriteLine(); continue; / <summary> / 随即放置鸡蛋 / </
25、summary> / <param name="result">结果</param> / <param name="beginIndex">开始索引</param> / <param name="total">鸡蛋数</param> public static void RandomLay(int result, int index, int total) / iMax为index对应
26、可取鸡蛋数上限 int iMax = 1, basketNum = result.Length; for (int j = 0; j < index; j+) iMax += resultj; / 复制 int copyResult = new intbasketNum; for (int i = 0; i < basketNum; i+) copyResulti = resulti; / 结束条件1:已为最后一个篮子
27、if (index = basketNum - 1) int mBasket = total - iMax + 1; if (mBasket <= iMax) copyResultindex = mBasket; Console.Write("Split solution: "); foreach (int res in copyResult) Console.Write(res + " "); Console.WriteLine();&
28、#160; return; for (int ii = copyResultindex - 1; ii <= iMax; ii+) / 结束条件2:当前至少需要鸡蛋数 int nowNum = ii * (basketNum - index) + iMax - 1; / 表示无法再按升序放置鸡蛋 if (nowNum > total) break; copyResultindex = ii; RandomLay(copyResult, index
29、 + 1, total); 解答3code=C/C+/code#include<iostream>#include<math.h>#include<malloc.h>#include<fstream>using namespace std;struct solutionint *ptr;struct solution *next;typedef struct solution solu;int* first(int n,int m); /计算出第一种组合solu* others(int n,in
30、t m,solu *head,solu *prior); /计算出其他组合int sum(int n,int *p); /计算前n-1个篮子里的蛋数和bool only(solu *head,int *p,int m); /检查组和是否满足要求int ways; /全局变量,保存组合的方法数void main()int n=0,m=0,i=0,k=0;solu *head=NULL;solu *temp=NULL;LABLE: cout<<"输入鸡蛋数N="cin>>n;cout<<"输入篮子数M="cin>&g
31、t;m;if(m<=0|n<=0|m>n|(double)n>=pow(2.0,m) /对m,n的约束cout<<"输入不合法!"<<endl;goto LABLE;cout<<"正在计算."<<endl;head=others(n,m,head,NULL); /调用others开始计算temp=head;ofstream file("D:egg.txt"); /结果保存着这个目录下cout<<"共有"<<ways<
32、;<"种组合方式:"<<endl;file<<"共有"<<ways<<"种组合方式:"<<endl;k=ways;while(temp!=NULL&&ways)cout<<"方式"<<k-ways+1<<":"<<endl;file<<"方式"<<k-ways+1<<":"<<en
33、dl;for(i=0;i<m;i+)cout<<*(temp->ptr+i)<<" "file<<*(temp->ptr+i)<<" "delete temp->ptr;temp=temp->next;cout<<endl;file<<endl;ways-;file.close();cout<<"操作结果保存在D:/egg.txt,您可以查看或删除之。"cin>>i;int sum(int n,int *p)
34、/计算前n-1个篮子里的总蛋数int total=0;for(int i=0;i<n;i+)total+=*(p+i);return total;int* first(int n,int m)int *p,i=0,temp1=0,temp2=0;p=(int *)malloc(m*sizeof(int); for(i=0;i<m;i+) /每个篮子里放一个蛋*(p+i)=1;/下面的分配满足的条件:/“总能找到几个篮子,使里面鸡蛋的和等于任意一个小于n的正整数”/下面的ifelse语句完成一种组合,升序排列,并使后面的篮里的蛋尽量多if(n-m>m-1) /剩下的
35、蛋数大于前面m-1个篮子里的蛋数和,*(p+m-1)+=m-1;while(sum(m,p)<n) /还有蛋剩余temp1=n-sum(m,p); /剩蛋数for(i=m;i>0;)temp2=sum(i-1,p); /第i个篮子前面的所有篮子里的蛋数的总和if(*(p+i-1)<=temp2) /第i个篮子里的蛋数小于等于前面篮子里蛋的总数,给这个篮里加蛋/否则,见elseif(temp1<=temp2-*(p+i-1)+1) /剩下的蛋可以全部放到第i个篮里,完毕*(p+i-1)+=temp1;break;else *(p+i-1)+=temp2-*(p
36、+i-1)+1;break; /在第i个篮子放可能达到的最多蛋数else i-; /检测前面那个篮子else *(p+m-1)+=n-m; /剩下的蛋数小于等于前面m-1个篮子里的蛋数和,/把所有的蛋都放到最后一个篮里,完成一种组合。return p;solu* others(int n,int m,solu* head,solu *prior)int i=0,j=0,k=0;if(head=NULL) /还没有任何组合solu *s=new(solu);s->ptr=first(n,m); /调用first()生成满足后面的值最大的升序序列head=s;head->
37、next=NULL;prior=head;ways=1;for(j=m-1;j>0;j-) /两重循环,开始计算其他组合/原理是从后面的篮子里取出鸡蛋放入前面的篮子中if(*(prior->ptr+j)=1) /后面的篮子里蛋数为1,跳出循环break;for(i=j-1;i>0;i-) /一个个往前挨if(*(prior->ptr+j)-1>*(prior->ptr+i) /后面的篮子减掉后不能比前面的少,保持升序排列int *p=(int *)malloc(m*sizeof(int);for(k=0;k<m;k+)(*(p+k)=(*(prior-
38、>ptr+k);(*(p+j)-;(*(p+i)+;if(only(head,p,m) /检查是否满足条件,满足则将结果添加到链表中solu *stemp=new(solu);stemp->ptr=p;stemp->next=head->next;head->next=stemp;head=others(n,m,head,stemp);ways+;else delete p;else if(*(prior->ptr+j)-1=*(prior->ptr+i)continue;else break;return head;bool only(s
39、olu *head,int *p,int m) /判断条件是否符合solu *s=head;int flag=0,i=0;for(int k=0;k<m-1;k+)if(*(p+k+1)<*(p+k)|*(p+k+1)>sum(k+1,p)+1) /两个条件:1、升序,2、后面的数必须小于等于前面的篮子总数和加1return false;while(s!=NULL) /判断是否有过相同的组合,有则返回falseflag=0;for(i=0;i<m;i+)if(*(s->ptr+i)!=*(p+i)flag=1;break;if(!flag)return false
40、;s=s->next;return true; /检查通过,返回true任意给定的M 和N, 假定鸡蛋已经全部按规定放好了,那么如果能取出X个鸡蛋(0<X< M)那么剩下的就是M-X个鸡蛋,也相当于取出了M-X个鸡蛋。所以只需要考虑能够取到1到M/2个鸡蛋即可。又如有的哥们讲的1,2,4,8.。2(k-1)这样数列比较特殊,有k位这样的数列,可从中取出若干个数相加得到任意小于2k-1的数(因为K位这样的数列相加的和为2k - 1),那么依照题意我们应该从这样的数列开始考虑。现在有N个篮子,先拿掉一个篮子。那么这N-1个篮子按上面的方法放鸡蛋的话可表示出所有小于2(N-1)-1
41、的数,如果2(N-1)-1 > M/2那么该题有解,否则无解。情况一 M > 2(N-1)-1 > M/2 给N-1个篮子中分别放1,2,4,8.2(N-2)个鸡蛋,剩下的鸡蛋全部放最后一个篮子里。 由于前N-1个篮子可表示任意小于M/2的数,所以这N个篮子可表示所有小于M的数。如果不考虑篮子的编号和顺序,此情况只有一种放法。情况二 2(N-1)-1 > M 按上面的方法还没放到第N-1个篮子鸡蛋就没了,那么这时的做法是,先按上面的方法放好所有鸡蛋。假设放到第x个篮子鸡蛋就没了,那么从x+1个篮子开始回头从x篮子里拿一个鸡蛋放入其中,
42、然后是x+2篮子同样的处理,依次类推。如果x篮子中只剩一个鸡蛋了还有篮子是空的,那么从x-1篮子中取鸡蛋。依次类推放满所有篮子。按这种方法如果N=M,则每个篮子放一个鸡蛋。如果不考虑篮子的编号和顺序则方法是很有限的,也就是将鸡蛋在几个篮子里倒来倒去。 可以看出此算法的复杂度只有N,根本不需要递归什么的。老太太按这种方法操作也能很快得出一个解。 也可以看出给定若干个鸡蛋,至少需要多少个篮子才能满足题目要求,比如100个鸡蛋就最少需要7个篮子 500个鸡蛋最少需要9个篮子,1000个鸡蛋最少需要10个篮子 第三题,大
43、意淘宝网的评论系统,原先只有一个评论表,对于现在大用户,大数据量,大访问量,请设计一个合理可行的架构来优化关于评论的数据库。 我答:哥蒙了,哥胡言乱语的。 附加题:前端设计师必答 第一题:图片默认为半透明,鼠标移上去变成不透明。 我注:img标签onfocus和onblur的应用,注意这个透明的属性在IE和FireFox下是不同的。而且用js控制的时候,属性名也要注意 第二题:一
44、个输入框,和一个列表框,列表框里面有很多字符串,在输入框里面输入字符串时,列表框中字符串前缀是该字符串的做高亮或者其他显著表示。最后回车选择或者鼠标双击列表框选择。 我注:看上去要写不少东西啊实在懒了。 总结:基础偏多,大题很算法,很偏实际应用,前面不会不应该了,后面看造化,毕竟时间也不多。 最后:如果有错,请指正,仅给路人或未来想进淘宝的孩子或八卦的朋友做些参考。淘宝2011校招南京东大宣讲笔试经验王思璇 2010-11-10 17:58:22 淘宝2011校招南京东大宣讲笔试经验昨天参加
45、淘宝的宣讲会,参加笔试。东大,六点半开始宣讲会,去得有点早,顺便熟悉了一下东大。开始宣讲会,宣讲人是淘宝的七公。淘宝是一家不错的公司,年轻活力,疯狂或者用宣讲会视频中的学长所说的是全力以赴,而不是尽力而为。年轻,朝气,给年轻人舞台。宣讲会中,淘宝好像特注重C+和Java工程师的招聘,居然在宣讲会的职位较少PPT中没有系统运维的介绍,让人很是揪心。笔试,分为几种试卷。C+和Java,系统运维、安全、前端设计是在一份试卷上。PHP、数据库是在另外的试卷上。感觉试卷分配的不是很合理,应该把系统运维和PHP数据库放在一起好一点。淘宝也许有淘宝的想法吧。考了系统运维,试卷结构是基础题40分、方向性试题4
46、0分、综合题20分。感觉前面的基础题像是杂烩,包括网络题、编码基础、IP主机子网划分、线性结构、还有一个C的运算题吧。前面感觉一般般,填空题的第五题C的执行,压根没做过,苦了我这个非计算机专业,又特想钻研网络的人了。下面是方向性试题了,毫无疑问,挥起豪笔(淘宝送的宣传笔是圆珠笔,用自己的考试笔舒服一点),直奔系统运维。两题,前面一题是一个A类网络的划分,好像是10.13.16.0/20,应该是这个,记不清了,反正是一个20位的submask,找出网号段,IP段,子网掩码。这些网络划分的知识,比较简单了,应该拿下了。下面一题,是对于搞安全的人是常识啦,举例4种DNS常见攻击方法。我的答案是DNS
47、缓存中毒,DDOS攻击,ARP欺骗,DNS重定向,域名攻击。反正方向性试题考的是方向基础吧,不是很难,重在基础。拿到题目时,还愣了一下,IP划分,好久没动过了,但想想全是基础,呵呵,easy,easy。第三部分,是综合题了,但我觉得更像是为C+和Java的人准备的,一道算法和数据处理的题目。技术类除前端的不用做,其他的都要做。无奈,作为经管院的我说这题不会。说说做前端的吧,题目没做,但看了一下,掌握好HTML语言,CSS,应该问题不大,而且,题目就是现在比较流行的图片缩放功能。购物网站上经常看到的鼠标放到宝贝上,Popup出一个图片层,这些代码,平时留意一下,应该没问题。总体上,淘宝是一家挺人
48、性化的公司,希望淘宝做大,实现大淘宝战略。葛优的话:“21世纪人才。”2011淘宝.net面试之马后炮王思璇 2010-11-10 17:55:27 首先,机会都是大家争取的,努力是自己奋斗的,谋事在人,成事在天,努力过就好。给自己的安慰,呵呵。今天去淘宝面试,在等待教室,看着宣传片,看见一个个硕士哥哥都好轻松,哈哈。有个在玩ipad。一个个都有书看看的。到了时间点,面试官叫我名字,然后跟着一个大哥哥一起进了个房间,面试官很和蔼,都是带笑容的,感觉让人很舒服,面试官说我们聊聊吧,好惬意的。反正给人的感觉就是很好。刚开始大哥哥都是对着简历问问,下面罗列分析下第一:关于g
49、oogle的HK站的访问不稳定,你是怎么解决的,怎么上国际站的。当时我蒙了,还真没去关注,我一般都是HK站不稳定,我就等等,然后可以用了,我就继续用的,还真没想到怎么上COM的站呵呵,回来看了下,原来下面可以点 in english。就可以直接上国际站了。分析:这点应该是考察你对一样事物的,刨根的能力,看你这个人是不是有专研的能力和思想,个人愚见。第二:数据库索引的状态第三:TCP/IP第四:设计模式你最擅长,实践,那几个原则第五:学习的方法,经常上的一些网站这个今天我就说。博客园和CSDN。忘记把codeplex说了。毕竟这个也是非常好的,好多开源组件。哎真是可惜第六:最
50、擅长的技术,这个今天我没有表达明确,直接来个webform就好了。还说了很多废话。现在想想真是不应该的哈。分析:这个大家要小心的,千万不要说不了解的,要不然会死的很惨,呵呵第七:数据库范式的理解,1,2,3第八:软件工程,开发模式瀑布、敏捷,必要了解的,瀑布的过程,CMM5层是哪五层,你具体的理解是什么。第九:oo思想的薄弱,(我目前的状态)这个还是很薄弱的,一些思想类的书都没看,都是工具书。面试官的感觉,有可能就是我这方面做的太少了。还是初级程序员做的,那种页面级别的工作。这个在以后还是要提升的。第十:string=a+b几个对象3个第十一:datatable里面的row有几种状态这个真没关
51、注过,第十二:开发用什么框架,有没有用其他的组件实习笔试题在进入我的淘宝页面时,此页面需要获取登录用户的相关信息,在访问量少的情况下,可以采用直接访问数据库的方式,但当访问量太高时,会导致数据库压力过高,因此通常采取的方法为将用户信息进行缓存,在用户数不多的情况下,这个方案还是提供了很多的帮助的,但用户数增多了一点后,出现的问题是缓存占了太多的内存,而经分析,原因是这些缓存中很多是不访问的用户信息。1.1请写一端存储用户信息的缓存实现代码,并实现当缓存到达一定大小后,如继续新增用户信息,则将最近不访问的用户信息从缓存中踢出;1.2由于我的淘宝是部署在多台机器上的,如用户每次访问不同的机器,以上
52、方案会造成每台机器都需要去数据库中加载此用户信息,请给出一个方案来避免此问题。4月12日,淘宝来玉泉曹西招实习生。首先介绍了下淘宝的发展和使用的技术,然后就开始进入正题了。文章来源:过来人求职论坛3 a0 x7 3 u- k8 _. t文章来源:过来人求职论坛4 g2 m) J3 e) z# y文章来源:过来人求职论坛; y$ R* f) g* m% 9 e笔试,分基础部分和分类部分文章来源:过来人求职论坛" H3 M h4 w" X; Q, B7 f文章来源:过来人求职论坛& U2 u0 x1 t, y& f8 _基础部分:雷打不动的数据结构和算法,选择题都是一些树、排序之类的题,都忘了,T_T。大题有三 文章来源:过来人求职论坛! z/ Q- y- ?! a- y, " D写一个mergeSort。递归和merge,基础,总算还记得 文章来源:过来人求职论坛; _2 o1 v2 x( V& n, N1 R* L找