开发职位经典面试题

    过去两个月,面了几乎所有的上点规模的IT公司,包括google,微软,甲骨文,百度,搜狐,QQ,360,小米科技,人民搜索,百分点,云壤,美丽说,京东,轩辕互动(现happy latte)。结果怎么样,就不吐槽了。只是想把一些经典的面试题与大家分享下。面试岗位:c++开发工程师(初级)。

语言部分:

  1. 虚函数,多态。这个概念几乎是必问。
  2. STL的使用和背后数据结构,vector string map set 和hash_map,hash_set
  3. 实现一个栈类,类似STL中的栈。这个题目初看非常简单,当时我还有点不屑,怎么出这么简单的题。但写过c++和没有写过c++的人写出的代码是一眼就能看出差别的。譬如三大函数有没有写,引用的使用,都非常的关键。如果这方面没有经验,建议阅读下http://book.douban.com/subject/1971825/ 这本书中简单数据结构的实现,细节很关键
  4. c部分:函数指针的声明
  5. c++中的多线程

算法部分:

  1. 判断一个单链表是否存在循环(快慢指针的方法)
  2. 如何判断一副麻将牌胡了(回朔法)
  3. 二叉搜索树,节点上已经标有数字,如何找两个节点的最小公共节点(查找第一个在两个节点值中间的节点,如两个节点分别是3,8,查找在3,8之间的值的节点,如没找到,则3,8其中一个是另一个父节点)
  4. 二叉树,如何找两个节点的最小公共节点(比较笨的方法是,找到从root到两个节点的路径,然后两条路径的从root开始的最后一个相同节点就是所求节点。精妙点的参考lca算法)
  5. 最短摘要生成,有一个数组,还有一个集合,在数组中寻找包含集合中全部元素的最短子串。详细可以参见编程之美3.5
  6. 寻找最大的K个数,编程之美2.5
  7. 如何判断两个网页的相关性(如果说面试搜索相关的只是,看下吴军的数学之美大有裨益,其中的向量空间模型非常优美,TF和IDF这些术语也必须知道)
  8. Hash的平均查找长度和装填因子的关系(好好回味下数据结构书吧)
  9. 一致性hash原理
  10. rehash的时候可能导致插入的元素响应时间特别长,有无更好的方法?可以参考redis的rehash实现,当到了rehash的时候,不是一次性把所有的数据迁移到另一个更大的hash表中,而是每次迁移一个bucket,这样可以平摊时间
  11. 如何对全是01的文件进行压缩,一直没有好的答案。

系统设计部分:

  1. 当系统的处理请求时间一定的时候,如何可以加快响应速度。(cache的使用),当时很傻,竟然没想到这个,我给的答案是增加系统规模,这样只能减少请求等待时间。有时候面试人就会短路,google的题,想了半天才想出来
  2. 两块虚拟网卡进行通讯,但是需要数据加密,如何实现数据加密。感觉跟ssl很像

编程部分:

  1. 二分查找(频率超高)
  2. 建堆,顺便说下建堆的时间复杂度是O(n),不是log,证明可以看算法导论
  3. 写一个函数,将字符串反转,反转方式如下:“I am a student”反转成“student a am I”,不借助任何库函数 (频率超高的一题,先反转整个字符串,然后反转每个词)

项目部分:

  1. 因人而异

posted on 2012-05-17 09:09  zhangjing230  阅读(9853)  评论(18编辑  收藏  举报