小弟近日面试了文思微软项目的SDET职位,在面试中遇到一些问题, 向各位大虾求教, 第一个面试由HR MM 来面的, MM待人非常亲切, 第二个面试由两个技术人员来面技术, 先考了算法, 在一个字符串中找出一个重复次数最多的字符, 我问可以用C#来写吗, 一个技术人员说可以, 又补了一句, 用汇编也没问题(可能是开玩笑吧), 花了点时间, 写了个利用冒泡方法来查找, 最后返回重复次数最多那个字符的方法, 其中一个技术人员开始没有看懂, 说我是只对相邻的字符串进行比较, 程序有BUG, 我当时晕了, 这个冒泡算法很normal的, 我当时就是怕用了复杂的算法写错了就得不偿失了, 然后这个问题就skip了, 下面一个考了C#中的new和override的用法区别, 这个简单, 没有问题通过, 然后我觉得第一个考题, 我写得没有错, 我向他们解释了一下, 搞了几分钟的样子, 终于承认我的程序是对的, 然后说我写得太复杂了, 我只好顺着他的意思往下说, 说我的代码考虑得复杂了点.他说这个字符串只有0~9这个范围的字符, 只需对这十个数进行计数, 一个循环就可以了, 我想这样写代码, 通用性也太弱了点, 将来需求变了, 代码还不要重构呀, 当时没敢说, 最后考了数据库的第一范式和第二范式及事务, 我作开发都快三年了, 大学书本上的概念都记不全了,只好联系experiences, 说了一下,其中一个说这只是如何用, 我只好说十再想不起来, 技术人员也笑了笑说没关系, 看过书之后, 你肯定就知道了, 我想没关系才怪了,面试结束, 过后数日没联系, 估计被out了, 但是小弟不清楚自已失误在哪里, 如果是技术不行, 那是自已技不如人, 死也无怨的, 但小弟总结不出这次面试自身的技术哪里有问题, 希望各位大虾能多多帮忙, 这里先谢了.(补充一点, 小弟不是来抱怨文思如何不好, 只是想通过一次面试能看到自身的不足)

解决方案 »

  1.   

    仅探讨技术问题的话,"在一个字符串中找出一个重复次数最多的字符",这个用HashTable的效率比冒泡排序的效率高,也就是两个单循环,第一个循环计数,第二个循环找计数最大的那个“数据库的第一范式和第二范式及事务”,如果就是知道会怎么用,但没有自己的理解(这个理解可不是指书本上的概念),那么这个概念不能算是掌握,最起码不是有头脑的程序员,对于大公司而言,不像小公司,会用就行。最后,就面试而言,问到的这些问题都蛮基础的,蛮适合这些公司的风格。
      

  2.   

    小弟去文思时路比较远, 换了三四部车, 还换错了车, 所以到了那脑子还有点晕乎乎的, 所以没有考虑到最优的算法, HashTable也想到过,不过用哈希表的话, 好像一个单循环就可以了, 因为哈希表的KEY是唯一的, 所以只需要对用一个临时变量保存前一个字符, 然后根据这个字符为KEY得到的value, 与当前的字符的value相比较, 取最大value的字符, 返回时就用临时变量返回就行了. 数据库的第一范式和第二范式及事务, 8楼的朋友能否用你所理解的含义来讲一下, 谢谢!