ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:21.04KB ,
资源ID:4467034      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4467034.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(微软的面试题.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

微软的面试题.docx

1、微软的面试题(说明:这些题就不是什么花样了,考的是你的基础知识怎么样。再聪明而没有实学的人都将会被这些题所淘汰。)1.链表和数组的区别在哪里?2.编写实现链表排序的一种算法。说明为什么你会选择用这样的方法?3.编写实现数组排序的一种算法。说明为什么你会选择用这样的方法?4.请编写能直接实现strstr()函数功能的代码。5.编写反转字符串的程序,要求优化速度、优化空间。6.在链表里如何发现循环链接?7.给出洗牌的一个算法,并将洗好的牌存储在一个整形数组里。8.写一个函数,检查字符是否是整数,如果是,返回其整数值。(或者:怎样只用4行代码编写出一个从字符串到长整形的函数?)9.给出一个函数来输出

2、一个字符串的所有排列。10.请编写实现malloc()内存分配函数功能一样的代码。11.给出一个函数来复制两个字符串A和B。字符串A的后几个字节和字符串B的前几个字节重叠。12.怎样编写一个程序,把一个有序整数数组放到二叉树中?13.怎样从顶部开始逐层打印二叉树结点数据?请编程。14.怎样把一个链表掉个顺序(也就是反序,注意链表的边界条件并考虑空链表)?26、用一种算法使通用字符串相匹配。27、颠倒一个字符串。优化速度。优化空间。28、颠倒一个句子中的词的顺序,比如将“我叫克丽丝”转换为“克丽丝叫我”,实现速度最快,移动最少。29、找到一个子字符串。优化速度。优化空间。30、比较两个字符串,用

3、o(n)时间和恒量空间。31、假设你有一个用1001个整数组成的数组,这些整数是任意排列的,但是你知道所有的整数都在1到1000(包括1000)之间。此外,除一个数字出现两次外,其他所有数字只出现一次。假设你只能对这个数组做一次处理,用一种算法找出重复的那个数字。如果你在运算中使用了辅助的存储方式,那么你能找到不用这种方式的算法吗?32、如何将计算机技术应用于一幢100层高的办公大楼的电梯系统上?你怎样优化这种应用?工作日时的交通、楼层或时间等因素会对此产生怎样的影响?33、你如何对一种可以随时存在文件中或从因特网上拷贝下来的操作系统实施保护措施,防止被非法复制?34、你如何重新设计自动取款机

4、?35、假设我们想通过电脑来操作一台微波炉,你会开发什么样的软件来完成这个任务? 36、你如何为一辆汽车设计一台咖啡机?37、如果你想给微软的word系统增加点内容,你会增加什么样的内容?38、你会给只有一只手的用户设计什么样的键盘?39、你会给失聪的人设计什么样的闹钟?40、如果你有一个许多部件可以拆卸的时钟,你将它一块块拆开,但是没有记住是怎样拆的。然后你将各个零件重新组装起来,最后发现有三个重要零件没有放进去。这时你如何重新组装这个时钟?41、如果你需要学习一门新的计算机语言,你会怎样做?42、假设由你负责设计比尔盖茨的卫生间。当然,钱不成问题,但是你不可以和比尔谈。你会怎样做?43、到

5、目前为止,你遇到的最难回答的问题是什么?44、如果微软公司说,我们愿意投资500万美元用来开发你提出的方案。那么你会做什么?为什么?45、如果你将世界上所有的计算机制造商召集起来,告诉他们必须要做一件事,你会让他们做什么事?46、如果你在五年内会得到一笔奖金,你认为会是因为什么?关注你的成绩的人会是谁?47、你如何教自己的奶奶使用微软excel表格系统?48、为什么当我们在任何一家宾馆打开热水龙头时,热水会马上流出来?49.你为什么想在微软工作?50.1.如果只想让程序有一个实例运行,不能运行两个。象winnamp一样,只能开一个窗口,怎么作? 2.如何截取键盘的响应,让所有的a变成b? 3.

6、apartment在com中有什么用?为什么要引入这个? 4.存储过程是什么,有什么用,什么优点? 5.template有什么特点,什么时候用?做一个链接表,你为什么要选择这样的方法?选择一种算法来整理出一个链接表。你为什么要选择这种方法?现在用O(n)时间来做。说说各种股票分类算法的优点和缺点。用一种算法来颠倒一个链接表的顺序。现在在不用递归式的情况下做一遍。用一种算法在一个循环的链接表里插入一个节点,但不得穿越链接表。用一种算法整理一个数组。你为什么选择这种方法?用一种算法使通用字符串相匹配。颠倒一个字符串。优化速度。优化空间。颠倒一个句子中的词的顺序,比如将“我叫克丽丝”转换为“克丽丝叫

7、我”,实现速度最快,移动最少。找到一个子字符串。优化速度。优化空间。比较两个字符串,用O(n)时间和恒量空间。假设你有一个用1001个整数组成的数组,这些整数是任意排列的,但是你知道所有的整数都在1到1000(包括1000)之间。此外,除一个数字出现两次外,其他所有数字只出现一次。假设你只能对这个数组做一次处理,用一种算法找出重复的那个数字。如果你在运算中使用了辅助的存储方式,那么你能找到不用这种方式的算法吗?不用乘法或加法增加8倍。现在用同样的方法增加7倍。算法题 1.链表和数组的区别在哪里? ANSWER 主要在基本概念上的理解。但是最好能考虑的全面一点,现在公司招人的竞争可能就在细节上产

8、生,谁比较仔细,谁获胜的机会就大。1)数组在内存中是逐个存放的,也就是说倘若数组的第一个元素在地址A,则数组第二个元素就在地址A+1。而链表则不是,链表每个节点没有相对固定的位置关系。某个节点在地址A其后的节点不一定是A+1,而在内存的其他空闲区域,呈现一种随机的状态。2)数组一旦显式的被申明后,其大小就固定了,不能动态进行扩充。而链表则可以,可以动态生成节点并且添加到已有的链表后面。3) (大家一起想想)2.编写实现链表排序的一种算法。说明为什么你会选择用这样的方法?ANSWER 链表通常是插入排序,为什么呢?在数组中插入排序实现时会大量的移动数据从而删除位置不正确的元素,这是顺序表删除操作

9、的低效性。从数学的角度,顺序表(即数组)的删除操作是O(n).链表就不同,由于其存储位置的不固定性,其删除固定位置的元素只需要O(1)的时间,所以整体性能上获得比较大的提高。3.编写实现数组排序的一种算法。说明为什么你会选择用这样的方法? ANSWER 排序算法非常成熟了,实际上排序是研究算法的很有效例子。回答的时候尽量找一些比较有技术性的算法,比如堆排序或者快速排序,如果写冒泡什么的,别人都会写,也就显示不出你的优秀了。当然一定要注意给定的条件。不至于三个数让你排序,你搞个快排,这就有点“宰牛刀杀鸡”了。4.请编写能直接实现strstr()函数功能的代码。 ANSWER 首先要知道strst

10、r()这个函数是干什么的,自己去查查C语言的书,一般附录后面会给出C语言标准库的。这个题目实际上也是一类重要的算法门类,叫做“字符串的模式匹配”。它有很多的现成算法,其中最简单的要数朴素的匹配算法,还有KMP,BM这些高级算法,笔试估计是来不及写的。下面给出朴素的匹配算法。int stringMatching(char* pattern,char* text) int pLen = strlen(pattern),tLen = strlen(text); for(int i = 0;i = tLen - pLen;i+) for(int j = 0; patternj = texti + j;

11、j+); if(j = pLen) return i; return -1; / Not found5.编写反转字符串的程序,要求优化速度、优化空间。 ANSWER:循环当然是最简单的。void reverseString(char* str) int n = strlen(str); for(int i = 0;i n/2;i+) int t = stri;stri = strn - i - 1;strn - i - 1 = t;6.在链表里如何发现循环链接? ANSWER: 显然只需要判断是否存在回溯指针就行了。判断,是否存在某个节点的后继指向其前面位置的指针。具体实现的时候可以模仿DFS

12、中的访问标志数组的方法,我们可以在struct node中设计该节点的一个访问标志位,设为visited 。每访问一个节点就将其visited域置为1。这样的话,一次遍历下来,如果发现某个后续节点的visited域已经是1,那么就可以判定其存在循环链接。具体的代码就不写了,太简单了。7.写一个函数,检查字符是否是整数,如果是,返回其整数值。(或者:怎样只用4行代码编写出一个从字符串到长整形的函数?)分析 :简单!扫描一遍,每次生成对应整数的最高位。一行也就搞定了!long convert(char* s_string,long s_integer)for(int sLen = strlen(s

13、_string), i = 0; i sLen;s_integer += (s_stringi+ - 0)*pow(10,sLen - i - 1); return s_integer;8.给出一个函数来输出一个字符串的所有排列。ANSWER 简单的回溯就可以实现了。当然排列的产生也有很多种算法,去看看组合数学,还有逆序生成排列和一些不需要递归生成排列的方法。印象中Knuth的第一卷里面深入讲了排列的生成。这些算法的理解需要一定的数学功底,也需要一定的灵感,有兴趣最好看看。void permStr(char* str,int i) if(i = strlen(str) - 1) printf(

14、%sn,str); else for(int j = i;j aLen | n bLen) return NULL; / Error for(int i = 0;i aLen + bLen - n;i+) if(i data = val; newNode-lChild = NULL; newNode-rChild = NULL; if(!(*root) *root = newNode; else if(newNode-data data) insertNode(&(*root)-lChild,val); else insertNode(&(*root)-rChild,val); 11.怎样从顶

15、部开始逐层打印二叉树结点数据?请编程。 ANSWER 二叉树的层次遍历没什么好说的,如果你不会还是早点把基础复习一下。一个劲的往后学,才会发现原来最最重要的还是以前最基础最简单的。typedef struct myBinaryTree int data; struct myBinaryTree* lChild; struct myBinaryTree* rChild; bTree;struct myQueen bTree* queQSIZE; int front; int rear; binQueue; / Global varvoid initQueue() / front = real m

16、akes the queue empty binQueue.rear = QSIZE - 1; binQueue.front = binQueue.rear; for(int i = 0;i = 1) binQueue.quebinQueue.front- = newNode; else return 0; return 1;bTree* deQueue() int t; if(binQueue.front != binQueue.rear) t = binQueue.rear; binQueue.rear-; return binQueue.quet; else return NULL;in

17、t levelTraversal(bTree* root) initQueue(); bTree* lc = (bTree* ) malloc(sizeof(bTree); bTree* rc = (bTree* ) malloc(sizeof(bTree); bTree* p = (bTree* ) malloc(sizeof(bTree); if(!lc) | (!rc) | (!p) printf(OVERFLOWn); exit(OVERFLOW); / Allocation Error p = *root; if(!p) printf(Empty Tree,build it firs

18、t !n); return 0; enQueue(p); / enqueue the root of the tree while (binQueue.front != binQueue.rear) p = deQueue(); printf(%d ,p-data); lc = p-lChild; rc = p-rChild; if(lc != NULL) enQueue(lc); if(rc != NULL) enQueue(rc); printf(n); return 1;12.怎样把一个链表掉个顺序(也就是反序,注意链表的边界条件并考虑空链表)?ANSWER 前面说了,最基本的是最重要的

19、。线性数据结构是学习数据结构的入门,一定要掌握好。微软的题目还是跟国内的公司不一样。国内的一上来就是些概念,跟考历史一样。typedef struct listNode struct listNode* link; int data;node;node* getNode(node* newNode,int val) if(!newNode) exit(OVERFLOW); newNode-link = NULL; newNode-data = val; return newNode;/* Insert a new node after p */int insertNode(node* prev

20、,node* newNode) if(!prev) return 0; newNode-link = prev-link; prev-link = newNode; return 1;/*delete the node after the node prev*/int eraseNode(node*prev,node* p) if(p = NULL) return 0; prev-link = p-link; free(p); return 1;void buildList(node* head) int value; node* newNode = (node* ) malloc(sizeo

21、f(node); node* p = head; scanf(%d,&value); while(value != -1) newNode = getNode(newNode,value); insertNode(p,newNode); p = p-link; newNode = (node* ) malloc(sizeof(node); scanf(%d,&value); int reverseList(node* head) node* p = head-link; node* q = p-link; if(p = NULL) printf(The list is empty!n); return 0; while(q != NULL) node* newNode = (node* ) malloc(sizeof(node); newNode = getNode(newNode,q-data); insertNode(head,newNode); eraseNode(p,q); q = (node* ) malloc(sizeof(node); / Allocate again q = p-link; p-link = NULL; return 1;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1