客观题 共十道选择题(原题是英文的,翻译过来可能会有很多问题,顺序也有可能乱,附上本人的一个粗略的解题思路)
1、 判断下列哪项可以退出循环
A. For(unsigned short i=0;i<0xFFFF;i++)
B. For(short i=0;i<0xFFFF;i++)
C. For(unsigned short i=0;i>-1;i++)
D. ……
分析:无论signed还是unsigned的short都是占用两个字节,所以这题主要是考查负数的被码问题。列出表格一看即可:
内存单元 | 无符号数 | 有符号数 |
0000-0000-0000-0000 | 0 | 0 |
…… | …… | …… |
0111-1111-1111-1111 | 215-1 | 215-1 |
1000-0000-0000-0000 | 215 | -215 |
…… | …… | …… |
1111-1111-1111-1111 | 216-1 | -1 |
2、 判断下列程序中哪个会报编译错误,其它的a值为多少?(初始a=4)。
A、a +=(a++)
B、a +=(++a)
C、(a++) += 3
D、(++a)+=4
分析:这道题应该是考察a++与++a到底哪个可以做为左值。查了一下资料,a++不能做为左值。分析一下原因: 如果是++a的话,先++a,返回的东西是a, 而a是一个变量,所以++a是一个左值,他可被程序寻址,可以改变它的值 。a++呢?a++是什么东西?a++是一个引用了临时对象的表达式,用户不能寻址该对象,也不能改变它的值,所以不能做为左值。注:此题在linux实验,A、B的a值分别是9、10,这个很好理解。C不可以做左值,编译报错。D按照理论应该可以,实验结果在VC6里没问题,Linux下报错,至于为何出错没有想清楚,望牛人解惑。
3、 把表达式由中缀表示变成后缀表示,如把(3+4)*6变成34+6*。
分析:此题方法很是常规。具体实现为:要先设置一个运算符的栈st,从左只有扫描中缀表达式
1、如果遇到数字,直接放到后缀表达式尾;
2、如果遇到遇到运算符
a:若此时站空,则直接入栈;
b:循环:若栈st不空且栈顶运算符的优先级大于等于当前的运算符,则栈顶运算符出栈,置于后缀表达式尾;
c:若栈st不空且栈顶运算符的优先级小于当前的运算符,则将此运算符直接入栈;
反复执行1,2,知道整个中缀表达式扫描完毕,若此时栈st不空,则将栈顶的运算符依次出栈,依次置于后缀表达式尾。
4、 一道数据库的题,只要考虑SQL语句
分析:数据库还没来的及复习,一看那么长SQL语句脑袋就晕了,所以建议SQL语句要复习一下,不管从事哪个方向。
5、 程序优化题,题目中给了若干种优化方法,比如a、删除无用变量 b、合并表达式 比如用 7代替 3+4 c、把循环内多余操作提到循环外 d、循环展开 e、……,然后给出一段代码,让指出下列代码可以采取如此优化方法。
分析:此题算是相对简单一点的。
6、 一道OOP(面向对象的程序设计)叙述题,判断哪个是叙述正确的,答案里的选项中提到了虚函数的概念。
分析:面向对象其实只是直观上理解意思,实践方面也只用过Java来做网络课的大作业,对于里面的很多概念相当不熟悉。心得是应该找机会把面向对象的思想了解清楚,即使我不会用面向对象的语言,至少答题没问题了。
7、 一道网络题,描述如下情景:机器A、机器B处于同一个局域网内,机器A攻击机器B,现象是机器A能够拦截到所有发给机器B的消息。问这是什么攻击?
分析:下面的选择,个人感觉应该是ARP(地址解析协议)攻击。这实验室了解一点片上网络知识,至于互联网络的知识完全是大学时候遗留下来的,所以只能一猜了,希望大牛指正。
8、 一道字符串的题,两次调用处理字符串的函数,特点是字符串处理函数参加是常量指针。然后问某一行打印的结果。个人感觉考察的应该是const指针的问题。
分析:常量指针、指针常量,当时就很晕。而MS这种专门考察细节的方式,必须了解相当清楚,所以抓紧查资料弄懂。
9、 定义若干变量,问这些变量中哪些是存在栈中,给出的变量有const、static和几个局部变量。
分析:函数调用是通过栈的,局部变量是存在栈中,随着函数的退出而退出,所以全局const和static应该是存在堆中。看资料说,malloc申请的都存放在堆中,其它存于栈。只是先如此记一下,到底如何,应该实际看一下汇编代码。
10、Test题,学生的成绩满足以下几点:A、整数 B、[1……100],然后让输入测试,问输入测试用例能分成多少等价类!
分析:浮点型、字符型、大、中、小于集合的,反正自己选了个最多的数5个。Test在软件工程里面会有讲,但当初软件工程课程基本都睡觉、看报纸了,所以也是很无奈呀。感叹,有些东西很重要,但要真是专门为此上个课还讲不出来什么东西,必须自己领悟!
主观题 共一题 50分钟。
题目1:给出一些元素,并给出某些元素的大小关系。然后让输出所有元素是否能严格按序排列,如果能输出Sort,不能输出No Sort。
输入1:A B C //表示A小于元素B、元素C,其中A称为主行元素,每个元素最多一次做 为主行元素
B C //表示B小于元素C
C //相当于空语句
输出1:Sort //排序完为A<B<C
输入2:A B //A小于B
C B //C小于B
输出2:No Sort //因为A与C的大小关系不能确定
分析:思想就是构建一个二维表,存储输入中各元素大小关系,比如T[i][j]=1,表示*i>*j,如果T[i][j]=0,表示*i<*j,如果T[i][j]=-1,则*i与*j大小关系不确定。然后用O(n2)时间扫描表中每一项,实现关系传递。具体做法:如果元素A大于元素B,那么A也大于B大于的所有元素;反之,如果A小于B,那么A也小于B小于的所有元素。处理完毕之后,把大小关系不确定的值确定。注意,如果在填表过程中出现冲突,比如T[i][j]=0,但按提到传递算法计算T[i][j]=1,则存在环,可直接返回No sort。关系处理完毕后,最后一步判断是否为Sort,如果为有序情况,则表中除了“/方向”主对角元素为-1外,其它应该或者为1或者为0,如果不是表示至少有某两个元素大小关系不定,返回No sort,反之返回Sort.
笔试感想
今年笔试题虽然用英文出题,但基本题意还是清楚的的,也算是对我这样英语不是很好同学的一个照顾。
感想1:就算英文再差,也要知道单选题与不定项选择怎么写。之前看别人感想写说是不定项选择,这次听出来人说是单选。无限崩溃中- -!
感想2:知识点一定要掌握牢靠,大概了解只能哄哄外行人。大家都说MS的题很好,不偏,但就是考一些深入的细节,让自己只能心服口服,承认是自己没掌握到位,而非人家出得题偏。
感想3:计算机的方向实在好多,但是无论从事哪个方向,OS、数据结构几个都是必须要掌握的,不要找理由说自己是体系结构方向,或是和自己研究方向不相关了。
感想4:虽然自己单选题答成了不定项,最后的主观题要求英文原码,而我只是汉语伪码,也就是说基本没有任何希望进入下一轮。不过倒没有像之前一些人说的受到严重打击,相反挺兴奋的,发现这么东西要学,可以学。很多牛人都自谦为菜鸟,这让我这样的菜鸟只能自谦为菜菜鸟或准菜鸟,本来就是去学习的,所以本着在挫折中长大的想法接受一次次的挫折吧!
感想5:微软这样的大公司对测试要求很高呀!听说它的测试人员是开发人员2倍,不晓得是真是假,总知每年都会有Test的题
总结:如果我今天找不到理想的工作,那么一年后、二年后会找到吗?存在可能,可是如果不去发现不足的话,只是明日复明日,那么估计今天和一年后、二年后找工作也没什么区别。想起一位高中老师送我的话“如果人这一生注定要承受挫折,那么早一点未必是件坏事!”让自己保持忙得像陀螺一样的状态,这样就没有时间去胡思乱想诸如“人生的意义”、“宇宙的起源”等高深问题(如果让普通百姓想明白了,那些哲学家还要不要活了,所以还是算了)!
棋 2010-4-24
题目2:设计测试用例
分析:当时考虑时间已经快到了,胡乱写了几句。
A、 输入中存在环的
B、 大小关系不确定的
C、 正确输入
D、 空输入
E、 超大规模输入
- -!有点像当年答马哲题,只要想到的全往上写,给不给分您看着办