我这有几道微软笔试题,你看看吧
微软笔试题:写程序找出二叉树的深度
一个树的深度等于max(左子树深度,右子树深度)+1。可以使用递归实现。
假设节点为定义为
struct Node { Node* left; Node* right; }; int GetDepth(Node* root) { if (NULL == root) { return 0; } int left_depth = GetDepth(root->left); int right_depth = GetDepth(root->right); return left_depth > right_depth ? left_depth + 1 : right_depth + 1; }
不利用浮点运算,在屏幕上画一个圆 (x**2 + y**2 = r**2,其中 r 为正整数)。
考虑到圆的对称性,我们只需考虑第一象限即可。
等价于找到一条连接点(0,r)到点(r,0)的一条曲线,曲线上的点距圆心(0,0)的距离最接近 r。
我们可以从点(0,r)开始,搜索右(1,r),下(0,r-1),右下(1,r-1)三个点到圆心的距离,选择距圆心距离最接近 r 的点作为下一个点。反复进行这种运算,直至到达点(r,0)。
由于不能利用浮点运算,所以距离的比较只能在距离平方的基础上进行。也就是比较 x**2 + y**2 和 r**2之间的差值。
编一个程序求质数的和,例如F(7) = 2+3+5+7+11+13+17=58。
方法1:
对于从2开始的递增整数n进行如下操作:
用 [2,n-1] 中的数依次去除n,如果余数为0,则说明n不是质数;如果所有余数都不是0,则说明n是质数,对其进行加和。
空间复杂度为O(1),时间复杂度为O(n^2),其中n为需要找到的最大质数值(例子对应的值为17)。
方法2:
可以维护一个质数序列,这样当需要判断一个数是否是质数时,只需判断是否能被比自己小的质数整除即可。
对于从2开始的递增整数n进行如下操作:
用 [2,n-1] 中的质数(2,3,5,7,开始时此序列为空)依次去除n,如果余数为0,则说明n不是质数;如果所有余数都不是0,则说明n是质数,将此质数加入质数序列,并对其进行加和。
空间复杂度为O(m),时间复杂度为O(mn),其中m为质数的个数(例子对应的值为7),n为需要找到的最大质数值(例子对应的值为17)。
方法3:
也可以不用除法,而用加法。
申请一个足够大的空间,每个bit对应一个整数,开始将所有的bit都初始化为0。
对于已知的质数(开始时只有2),将此质数所有的倍数对应的bit都改为1,那么最小的值为0的bit对应的数就是一个质数。对新获得的质数的倍数也进行标注。
对这样获得的质数序列累加就可以获得质数和。
空间复杂度为O(n),时间负责度为O(n),其中n为需要找到的最大质数值(例子对应的值为17)。
我感觉这个结论可能还得看微软的招聘要求,再就是还要看去微软干什么工作,你说呢?
3.3 微软招聘程序
微软的某个工作岗位空缺后,前来求职的人一般分为两大类:内部申请者和外部申请者。面试官对这两类人提出的面试问题基本上没什么区别。
在微软美国公司,对大学应届毕业生和业界已在职人员的招聘流程是不同的,对技术人员和其他专业人士的流程也不尽相同。在这里先谈一下对技术类专业应届生的招聘过程。
1.简历收集与初筛
微软的网站常年都有工作招聘的广告并接受简历。但对于应届毕业生来说,在校园招聘活动中投递简历会更有效。
对美国计算机相关专业排名比较好的学校,微软人力资源部门都有专人负责追踪。微软的招聘人员(recruiter)会常年和这些学校的求职中心(career center)保持联系。每年招聘季节(学生毕业前半年左右),招聘人员都会到这些学校开招聘会(job affair)并直接收集简历。除了学生直接递交的简历外,招聘人员会格外看重教授推荐的学生。
对于那些微软不去开招聘会的学校,学生可以参加附近城市的招聘活动或直接向网上发送简历。
拿到简历后,招聘人员会进行初筛,初筛后的学生将进入第一轮面试:校园面试或电话面试。
2.校园面试
对于那些计算机名校的学生来说,微软的第一轮面试往往是校园面试 (campus interview)。在招聘季节微软公司会在这些学校举行招聘活动(recruiting event),其间微软会派几名面试官进驻学校来面试通过初筛的学生。这种面试通常采用一对一的形式,每个学生要分别和3到5名面试官进行1小时左右的面试。每个面试官在面试后要做记录和评语,每天结束后面试官们综合意见,决定哪名学生可以进入下一轮面试。
对于那些微软公司不去举行招聘活动的学校的学生,第一轮面试一般是通过电话进行的。
3.微软总部园区面试
通过第一轮面试的学生将获得到微软总部园区进行面试的机会。通常学生会飞到位于华盛顿州莱特蒙德市(Redmond)的微软总部进行为时一天的面试。非学生的应聘者也要先通过电话或远程通信等方式的第一轮筛选后,才会有机会被请到总部园区面试。面试当天中一名应聘者通常要和3到7名微软员工分别作一小时左右的面试,其中包括一个小时的午饭时间。通常在面试结束的2周以内,微软的人力资源部门会通知应聘者面试的最终结果。如果被录用,应聘者就可以和人力资源部门讨论工资待遇等问题了。
微软招聘程序包括面试,整个聘用流程由八个环节组成,下面是流程图,从红色"获批职位空缺"开始,直到黄色"录取决定"告一段落。而对已录取者来说,绿色"报到上班"才告结束。
获批职位空缺 当微软某部门/团队有业务上的需要时,可以设立新职位,这种职位必须与公司核心业务有关,是长期性的,并有经费保障。另外现有职位也可能出现空缺(比如员工调走,退职)
确定聘用要求 用人经理然后要为空缺职位确定要求(Job Description),列出工作职责,资格和技能要求等
寻找人才来源 微软人事部门会在微软招聘网站登广告并开展其他招聘活动
应聘者筛选 收到简历后,人事部与用人经理要挑选合格应聘者来面试,挑选方式可能包括电话或Email提问等
面试时间安排 人事部门与考官们沟通,安排面试
面试日 面试日一般是一整天,也可能需要两天,约有五到八场面试
录取决定 在考官的建议下,用人经理和把关做出录取决定,并与人事部门一起确定待遇,由人事部门发出录取通知
报到上班 用人经理为新员工设立账号,安排办公室,人事部门为新员工开情况介绍会
经常有人想知道关于微软招聘的一些问题,这里是我们的一些总结:
应聘微软是学历越高越好吗?
微软的录用决定取决于工作岗位的需求和应聘者的素质,和学历没有直接关系。如果工作职位不要求研究经验,博士并不比硕士或本科生更具天然优势。
微软的工作要求多少年C++的经验,多少年SQL的经验?
前面说过,微软的招聘原则是潜力比经验更重要。尤其对于应届毕业生来说,招聘中更看重对计算机软件基本概念的理解,不会对某项具体的技术有要求。当然,有某些专长势必对招聘有加分作用。
微软招人看重学习成绩吗?
学习成绩高说明一个人聪明,但不能说明他是否胜任实际工作。学习成绩在简历初筛的阶段有参考价值,但不会是录用的决定因素。对于在校生来说,除了提高学习成绩外,多动手编程,参加实际软件项目也很重要。
微软怎么决定把我分配到哪个部门进行面试?
微软的原则是:招聘是为了整个公司而不是某一个部门。对于应届毕业生尤其如此,如果应聘者本人没有特殊要求的话,人事部门往往会根据学生的简历选择两个部门,面试当天由两个部门的人分别面试,如果面试成功,微软会根据学生的兴趣和部门之间的协调来决定把应聘者雇佣到哪个部门。
实习经验对应聘有帮助吗?
在微软做过实习的学生在每年微软雇佣的应届毕业生里占非常高的比例。原因是实习期间已经对学生进行了很全面的考察和一定的培训。只要一个学生实习做得好,拿到全职工作会容易得多。
说了这么多关于微软面试的事情,这里小结一下。
面试的手段可以是多种多样,但目的只有一个:寻找合适的人选。人员的素质是构成一切的关键。
从面试官的角度上看,就是要回答,我愿不愿意和这个人以后一起共事?有许多因素会影响这个问题的答案,面试者的技术能力,工作热情,协作精神等等。
从面试者的角度上看,就是要展示自己的能力。就像考试一样,除了过硬的专业素质,拥有良好的心理素质也很重要。否则空有满腹经纶,无法让人了解,也是一件无奈的事。
不可否认,面试中永远有各种各样的偶然因素。所以如果你成功过关,祝贺你!如果没有成功,也没关系,永远都有下一个机会。
详情登陆一节一节慢慢看吧http://book.51cto.com/art/200810/93086.htm