现在的位置: 首页 > 综合 > 正文

腾讯一面,死亡日记

2013年08月14日 ⁄ 综合 ⁄ 共 2226字 ⁄ 字号 评论关闭

因为和另一位计科的同学一起去,他是10点面试,我是11点。因为下雨的缘故,车不好找,大概8点半,我们打的从本部出发,去到神农大酒店的时候,还非常早。没有到时间,我们就在一楼的沙发坐着聊聊天,结果一位也是应聘腾讯的朋友,他在下面填一张表,估计听到了我们聊天内容,就跟我们说人来得很少,现在就可以去面试,于是我们就上去了。
然后填了一张表,就被叫去面试了。面试官是一个高高的英俊的青年,他并没有给我紧张的感觉,我首先开始自我介绍。
《错误一:
后来说着兴奋了,就把自己的编程历程也说上了,说长了,他打断了我的话:“我们时间并不多,你的自我介绍也太长了,这样,我问你几个问题吧。”
/错误一》
我点头示意,说好的。然后他看了我的简历,发现项目里都是网站,就首先问了一个与网站相关的SessionId,我就跟他说,自己用的是Session,并没用SessionId。然后他问我关于Session的机制,我对这种比较抽象的概念问题,都不太擅长回答,我大意就是说Session是用于在页与页之间传递数据,具体的机制我就不太了解了。然后,他问了我C++的虚表,我就把自己对虚表的理解说了一遍,并画了一些图表。我对虚表的实现细节,也确实不知道,我就跟他说,自己只是理解了一个框架,很具体的实现细节并不是很清楚,本人注重实用。他就不再纠缠这个问题了,然后出了一道程序题给我。
这下我来劲了,我心想,刚才都答得不是很完美,那程序题,总可以一展身手了。对于说一些概念,是我的弱项,但写程序,是我最有自信的事情。
《错误二:
但是,太自信了,自信的一个结果,就是太急切,就是不够冷静,就是有些随意。
他给我出了一道这样的字符串题:
有这样一种形式的字符串:"abc 1213 cedf 2568 efd",请写一个函数,把里面的数累加起来,并返回这个值。如对于这个字符串,应该返回(1213+2568)的和,我当时一看这道题,第一反应就是很简单啊,就想着立刻把程序写给他看,最不原谅的就是,我居然没有向他问清楚题意,至少我对题目的理解,与他的本意并不相符,后面我会解释。他可能怕我紧张,就叫我先到另一个房间在15分钟以内写好了再给他看。我当时就更开心了,就很不冷静,完全追求速度,也没细想,大概5分钟,刷刷刷,就写了如下一个函数:
int sumFromStr(const char * str)
{
   if (str == NULL)
       return 0;
  
   int sum = 0;
   int tmp = 0;
  
   while (*str != '/0')
   {
      //寻找数左边的第一个空格
      while (*str++ != ' ');
     
      while (*str != '_' && *str != '/0')//循环计数,直到遇到数右边的空格,或字符串结尾
      {
         tmp = tmp*10 + (*str - '0');
         str++;
      }

      sum += tmp;
      tmp = 0;
   }
  
   return sum;
}
写完的时候,其实还有挺多时间,我觉得这么简单,检查的心情都没有,我就去交卷,他那时正在给另一个人面试,我又回来了,他根本没有催我啊,其实我完全可以坐下来好好细细考虑,但我那时实在太不够冷静了,就想急着给他看程序。结果,大家说说看,这个函数有什么问题?
问题一:如果这个字符串的开头就是数字:“123 asfa 781 asfasf”怎么办?我上面的程序,没有考虑这种情况。
问题二:如果这个字符串的中间是这样:“adsf 12ff34 asf efdf”怎么办?这一点就是我没跟他协商清楚,当时写程序的时候,我也想过这种情况,但我饶幸地以为存储的时候,这道题的一个默认前提,就是会保证按一个字符串间隔着一个数的规律存放。

然后,他就指出了我的这两个问题,我现场就立刻改正。他后面就没多说什么,感觉已经对我失望了。对于第一个问题,我确实无话可说,完全是自己太急切,第二个问题就是属于误解了题意造成的,太遗憾了。后来他就叫我回去等通知了。和我去的那位计科同学,他还进行了交叉面试。我就知道自己挂了。

虽然不服气,但确实是裁在了自己手里。能怪谁呢。。。[em]e8[/em]

正确的程序如下:
int sumFromStr(const char * str)
{
   if (str == NULL)
       return 0;
  
   int sum = 0;
   int tmp = 0;
  
   while (*str != '/0')
   {
      if (*str<'0' || *str>'9') //解决问题一,处理字符串开头就是数的情况
      {
         //寻找数左边的第一个空格
         while (*str++ != ' ');
      }
      while (*str != '_' && *str != '/0')//循环计数,直到遇到数右边的空格,或字符串结尾
      {
         //解决问题二,处理12afd34以及数与字符串之间没有合理间隔的问题
         if (*str<'0' || *str>'9')
         {
             tmp = 0;
             break;
         }

         tmp = tmp*10 + (*str - '0');
         str++;
      }

      sum += tmp;
      tmp = 0;
   }
  
   return sum;
}  

抱歉!评论已关闭.