校园招聘 - 比较容易的面试题

又到校园招聘的季节了, 自从和一些同事出版了《编程之美》一书之后, 我经常收到一些关于面试, 编程,  和“题库”的询问。 其实我自己对算法没有什么研究, 有些问题都答不上,  研究院最近搬了一次家, 原来的 “题库”也不知道搬到那一层楼去了。  不过, 常在河边走, 哪能不湿鞋?  在微软亚洲研究院这个水很深的地方混,  一些题目还是打湿了我的脚。  今天新的校园招聘 正式开始了,  我准备了几个比较容易的题目, 作为 “献礼”。这些题目不是一上来就刷刷刷写代码的那种, 我自己都不知道最佳解法是什么, 如果你有好的想法, 可以讨论一下. 

1. 只考数据结构的题目

不少同学觉得《编程之美》上面的题目太难了, 还要写那么多程序… 好, 其实也有很简单的问题, 例如这一个 - 只考数据结构的知识:

 

《编程之美》 中提到 “求数组最大子数组的和”这一题目,

 

image (图1)

 

脑快手快的同学写一个 10 行的程序就把这个问题搞定了。 

 

我们还把这个问题扩展到二维, 例如:

 

 

image (图2)

 

我还问过一些同学, 如果数组首尾相连, 像一个轮胎一样, 又怎么办呢? 这些同学也给出了漂亮的答案, 并且用 SilverLight/WPF 给画了出来:

image(图3)

 

好,设想我们有一张纸带,两面都写满了像 [图2] 那样的数字, 我们把纸带的一端扭转, 和另一端接起来, 构成一个莫比乌斯环 (Möbius Strip). 

 

image (图4 – wikipedia)

 

我想尽管这个纸带扭了一下,  但是上面还是有数组, 还是有最大子数组的和, 对么? 在求最大子数组的和之前, 我们用什么样的数据结构来表示这些数字呢? 你可以用 Java, C, C#, 或其他语言的数据结构来描述这个莫比乌斯环上的数组。数据结构搞好了, 算法自然就有了。 

 

 

 

2. 举一反一的问题

《编程之美》的第一题是让Windows 任务管理器的CPU 使用率曲线画出一个正弦波。我一直在想, 能不能把CPU 使用率边上的网络使用率也如法炮制一下呢?  比如, 也来一个正弦曲线?

 

image 

 

3. 人月的问题

如果你没看过, 也至少听说<人月神话>  (The Mythical Man-month) 这本在软件工程领域很有影响的书.  当你在微软学术搜索中输入 “manmonth” 这个词的时候, 你会意外地碰到下面这个错误:

image 

 

经过几次试验之后, 你发现必须要输入 “man-month” 才能得到希望的结果。 这不就是只差一个  ‘-’ 符号么?  为什么这个搜索引擎不能做得聪明一些, 给一些提示 (Query Suggestion)? 或者自动把用户想搜的结果展现出来 (Query Alteration)?   我们在输入比较长的英文单词的时候, 也难免会敲错一两个字母, 网站应该帮助用户, 而不是冷冰冰地拒绝用户啊。

 

微软的学术搜索 (Microsoft Academic Search) 索引了超过 3千万的文献,  2 千万的人名, 怎么能以比较小的代价, 对经常出现的输入错误提供提示? 或直接显示相关结果, 避免用户反复尝试输入的烦恼?  

 

你可能会说, 这很难吧,   但是另一家搜索引擎似乎轻易地解决了这个问题 (例子)。 所以, 还是有办法的。

 

这个题目要求你:

1) 试验不同的输入, 反推出目前微软的学术搜索是如何实现搜索建议 (Query Suggestion)的。

2) 提出自己的改进建议,  并论证这个解决方案在千万级数据规模上能达到 “足够好” 的时间 (speed) 和空间 (memory usage)效率。

3) 估计这事需要几个 人·月 (man-month) 才能做完?

 

 

----

有人问, 把题目都公开出去, 大家都知道答案了, 我们还怎么面试啊? 

回答: 这就看面试官的功夫了.

 

三个题目都做好的应届毕业生, 请直接找我。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/500439.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

现代软件工程讲义 2 工程师的能力评估和发展

Advanced Software Engineering 现代软件工程 讲义 软件工程师的能力评估和职业发展 介绍: 个人软件流程, 职业发展&#xff0c; 个人绩效的衡量和提高, 软件开发是科学, 工程, 手艺, 或是艺术? 我们刚讲了软件工程, 它包括了什么呢? 软件工程包括了开发&#xff0c;…

现代软件工程讲义 7 设计阶段 典型用户 - 故事 - 任务 - 具体工作

当我们写一个软件的时候, 都知道要为用户考虑, 但是用户在哪里? 有同学写 “图书馆管理系统” - 说来图书馆的同学都是我的用户, 但是他们有没有区别呢? 有同学写“自动柜员机系统”, 那到底有多少类型的用户来到柜员机前呢? 这些都是团队成员在需求分析和设计阶段要反复…

现代软件工程讲义 7 开发 开发阶段的日常管理

[移山之道 14 章] 14.6 开发阶段的日常管理14.6.1 闭门造车&#xff08;leave me alone&#xff09; 荔荔&#xff1a;我今天真失败&#xff01;在办公室里坐了10个小时&#xff0c;但是真正能花在开发工作上的可能只有3个小时&#xff0c;然后我的工作进展大概只有两个小时…

现代软件工程讲义 7 用户界面和用户体验

说到用户界面 (User Interface)&#xff0c;我们先看一个图: [来源] 有些同学认为UI 设计是充满创意和非常潇洒的工作&#xff0c; 另一些同学 (特别是有一定实际项目经验的) 也许会抱怨, UI 的工作就是在衣服后面夹夹子, 让前面好看一些。 其实&#xff0c;计算机软件的用户…

现代软件工程讲义 5 项目经理 Program Manager

在一个软件团队里, 不同的人有不同的投入, 我们在 猪,鸡和鹦鹉 的故事里已经说明了. 不同的人还要在团队中担负不同的任务, 我们也要讲一下. 开发人员 &#xff08;大部分内容在: 现代软件工程讲义 2 工程师的能力评估和发展&#xff09; 项目经理 ( 这篇博客 ) 测试人员 …

现代软件工程讲义 5.1 软件的质量保证 (QA) 和测试 (Test)

在一个软件团队里, 不同的人有不同程度的投入, 我们在 猪,鸡和鹦鹉 的故事里已经说明了. 不同的人还要在团队中担负不同的任务: 开发人员 &#xff08;大部分内容在: 现代软件工程讲义 2 工程师的能力评估和发展&#xff09; 项目经理 ( 内容在这里) 测试人员 ( 本篇博客 ) 团…

现代软件工程讲义 8 稳定阶段 (测试的计划和执行)

[来自 移山之道 第 13 章] 13.8 测试计划 测试不是在所有的开发工作完成之后才进行&#xff0c;而是与开发几乎同步进行的。一个软件项目的各个功能都可以有自己的测试计划&#xff0c;它们可以在不同的阶段发挥作用。但是针对整个项目的总测试计划&#xff08;又叫测试总纲&a…

现代软件工程讲义 2 开发技术 - 效能分析

[移山之道 第九章] 9.4 VSTS 效能分析工具 啊&#xff0c;效能分析&#xff0c;Performance&#xff01;这是每一个程序员都梦想的事儿&#xff0c;让自己的程序跑得又快又好&#xff0c;最好是比别的同学快一个数量级&#xff0c;别人的程序是O(N^2)&#xff0c;而我的程序是…

现代软件工程讲义 2 开发技术 - 单元测试 amp; 回归测试

[移山之道 第11章] 1单元测试 你的RP是由你的程序质量决定的。 ——阿超 这一章讲的是两人合作&#xff0c;既然程序是两个人写的&#xff0c;那就会出现一个人写的模块被另一个人写的模块调用的情况。很多误解、疏忽都发生在两个模块之间。如何能让自己写的模块尽量无懈可击…

现代软件工程讲义 11 项目管理 - 事后诸葛亮会议

介绍 一个里程碑结束了, 下面怎么办? 团队有什么经验教训? 产品怎么才能做得更好? 我们常说 “软件的生命周期”- 这个软件开发的周期结束了, 生命也结束了。 我们能不能像医学的尸体解剖一样, 把这个软件开发的流程解剖一下? 解剖的过程可以叫: Postmortem, Retrospec…

现代软件工程讲义 4 方法论 - MSF

[内容来自 移山之道]白话MSF方法论 2.1 果冻的预习果冻&#xff1a;超总&#xff0c;听说你要讲MSF&#xff0c;我就先预习了一下&#xff0c;但是MSF的名词太多了&#xff0c;我真是头大&#xff0c;能不能解释一下这两句&#xff1a; “MSF的一个基础原理是学习所有的经验。…

现代软件工程 作业 1 个人项目

这是现代软件工程课的个人项目作业 个人项目 Individual Project: 一个人独立完成. 时间: 可以考虑在第一周就给同学们这个项目; 也可以考虑在团队项目Alpha 阶段之后进行, 作为一个缓冲。 考核内容基本源代码控制的用法 程序的测&#xff0c;回归测试 效能测试 网络编程 C/C/…

现代软件工程 作业 2 结对项目

这是现代软件工程课的作业 结对项目 Pair Project: 一对同学用结对编程的方法完成 结对编程课件: 现代软件工程讲义 3 结对编程和两人合作 软件工程讲义 3 两人合作(2) 要会做汉堡包 Pair Project http://academic.research.microsoft.com/academicmap tasks for each …

现代软件工程 作业 3 团队作业

这是现代软件工程课的作业列表, 老师可以根据情况选用, 建议要保证每周都有作业。 团队作业 Team Homework: 适合团队完成的作业 这些作业都要团队的成员互相配合才能完成, 团队可以选出一位同学完成作业的具体写作和发博客部分, 大家可以轮流完成。 一个团队通常由 5-7名…

现代软件工程 作业 4 个人作业

这是现代软件工程课的作业 个人作业 Individual Homework: 个人完成的作业 (读书报告等), 着不同于 “个人项目 Individual Project”. Individual Homework #1 a good question is 50% of a good solution, now let’s share your questions about the text book(s), and …

现代软件工程讲义 9 测试 关于闰年的测试

我们谈了不少测试的名词, 规范和原则 (link1, link2). 软件是人写的, 测试计划和测试用例也是人写的, 人总会犯错误。错误发生之后, 总有人问: 为什么这个bug 没有测出来啊?! 我们看看一类简单的bug是如何发生的&#xff0c;以及如何预防它们再度发生: 闰年 软件少不了和…

对大学 IT 专业教育的反馈

[这是2009 年 写的文章, 一部分收集到 <IT 小小鸟> 这本书里了。 这两天看到软件学院同学对教学的反馈, 看来好些问题都没有得到解决。 教育部门时不时会开教学研讨会, 去世界有名的大学, 公司参观, 他们还要参观多少年? 他们会请已经毕业的学生来提意见么? 学生要年…

现代软件工程 来自卓越大学教师的建议 (读书笔记)

教师教学有培训和参考书么? 我从来没想到过我会在大学里教书, 而且还教了好几年, 四个学校。 当时接到任务的时候, 我把它当作实习生培训和新员工培训的”学院版”, 还是继续强调实践, 反馈, 合作, 就这么开讲了。 在微软公司, 做大部分和人相关的事情, 都得先有一个培训, …

软件工程讲义 9 创新的出路 走进作坊

我第一次注意到 “作坊”这个词和软件行业联系起来大概是这个 2004 年 11 月的报道: 标题: 信产部副部长娄勤俭&#xff1a;中国软件业还在手工作坊阶段 日前&#xff0c;信息产业部副部长娄勤俭在出席中国软件产业生态链高层论坛时表示&#xff0c;中国软件产业的规模还比较小…

现代软件工程 习而学的软件工程教育

茅于轼先生写了一篇博客 ( http://blog.sina.com.cn/s/blog_49a3971d0102dufj.html ) 纪念茅以升先生提出的 习而学的工程教育: 把颠倒了的工程教育顺序恢复过来&#xff0c;即他称之谓“习而学的工程教育”。 以桥梁建筑专业为例&#xff0c;大学一年级先学施工条例&#xff0…