微软外包笔试有感

微软一共出了三道笔试题:

1.反转单词 (hello -> olleh)
2.反转句子 (hello world -> world hello)
3.给一字符串模式替换函数,找BUG


刚看到这三道题,心中暗喜,因为这三道题思路已经很清楚了,剩下的就是把思路实现出来.

不得不承认,我范了大多数新程序员眼高手低的问题.

第一题 : 反转单词,我的实现很简单,在对输入进行NULL值检验后,就开始循环将单词中的字母前后对调,我使用最简单的数组下标法. 并且在进行字母对调时调用了自己写的 swap 函数,第一题没有什么问题. 后来回去后进行上机检验时,也验证了我的解是正确的了,也许值得优化的就是使用指针能够提高一些速度.


第二题 :
   反转句子,此题有点意思,我的实现思路很清楚,首先将句子中的单词抽取出来放入一个字符串数组,然后对生成的字符串数组,逆序写到新的字符串 Buffer 即可.
    思路虽然清楚,可是在实现中范了几个小错误:
    1.在分配字符串数组方面,我的代码里分配了一个足够大的数组,很浪费内存,其实应该写一个计算单词数量的子函数,来决定字符串数组的大小.
    2.在扫描原串的过程中,如果发现空格,即将单词写入字符串数组,可是这样就会漏掉最后一个单词.
    3.在将字符串数组拼接为新字符串时,我又范了,忽略空格位置的问题.
    4.实现过程中,我调用了自己的函数 strcpy(char* src,char* target,int len),可是却没有去实现.
 
    虽然也能够完成反转的功能,可是浪费了很多内存,在网上查找比较优秀的解决办法是从后向前反转,这样就不用额外浪费 Buffer 内存块.


第三题:找BUG
      因为找不到原搞,我无法确定是否找全了BUG,不过我相信我找的BUG,确实是个BUG.



总结:
   微软的面试题总体不难,可是要把他做好,充分考虑运行效率和内存等因素,想写好,还是不容易的.由于在经常在企业里做应用开发,当大量的快速应用开发大量铺面而来时,为了快速响应用户需求,我们常常会忽略将软件做精的要求,微软一直秉乘,严谨,务实,精细的态度,着实让人佩服.面试没有通过,心服口服.但我相信我会在未来的机会中用精细,务实的心态要求自己.

posted on 2009-01-15 20:05  gogogo  阅读(364)  评论(0编辑  收藏  举报

导航