UDN-企业互联网技术人气社区

板块导航

浏览  : 827
回复  : 3

[Google] 快十年前的面经-Google实习面经分享

[复制链接]
巡山霉少女的头像 楼主
发表于 2015-10-30 12:12:14 | 显示全部楼层 |阅读模式
  看大家这么用心的分享面经,我找了下自己的博客,原来十年前我也写过面经-。- 当时还分了上下两段。

  (上)

  Google在我的眼里是神话,是天才程序员的乐园,它扁平式的管理方式,20%的自由支配时间,加上百步之内必有食物的工作环境,一切的一切绝对是程序员梦寐以求的.我是凡人,所以我也追求.

  早就听说Google今年暑假要招实习生,而且bbs上的公告也很早就看到了,而我以前软件工程的TA也成了Google的工作人员,TA何许人也,Google中国编程挑战赛冠军,无限仰慕.看看Google招的人,纵使对自己是有千般信心,也片刻之间缥缈而去,所以在很长的一段时间内我都没有给Google发自己的简历(当然那个时候我的简历还没有-,-).

  公元2006年5月25日Google来浙大做宣讲会,我依旧没有投简历,不过5月份招实习的单位真的很少,所以就打算过去随便看看,然后做做Google的笔试,了解一下大公司是如何来衡量人才的,同时也看看自己的水平到底如何.我和室友yy大概提早10分钟到了宣讲会现场,进入现场之后,发现那个人是多啊.即使是提早了10分钟,还是只能拣到最后的位置,后来估计了一下有200-300人.在宣讲会上,Google的工程师讲了Google的一些产品,文化,发展历程,招聘的细节等.宣讲会结束,直接笔试.

  笔试试卷6个选择题,3个编程题.选择题由浅入深,不过都是数据结构的常用知识,选择题是:2个简单题,2个计算复杂度的题,1个垃圾回收题,1个排序相关题.编程题:1矩阵乘法,2非递规遍历tree,3算法设计题.题目总体来说都不是很难,但是数据结构学了都一年了,多少有些生疏,不过最终还算基本完成了试卷.在笔试结束后,感觉还不错,回紫金港后模仿wpc的简历做了一个电子简历发过去,而Google是要求同时英文简历的,从来没写过简历,何况还是英文的,难啊.到work版ftp下了模板过来改,发现还是不行.请高中同学帮忙,又联系不上.你可以想象,当时的无奈,由于Google要求那天晚上就要交简历,没办法了,出绝招,直接把中文的那个简历翻译过来,格式一摸一样-,-,然后还有很多翻译错误.寒死.简历忙完以后,bbs上就有人讨论题目了,然后对了一下答案,似乎不妙啊-_-!

  第二天Google就开始面试,我以为自己的答卷被bs了,估计是没有面试机会了.结果却在第二天的夜里,哦应该是第三的早上半点收到了面试通知,世贸酒店,9点开始,提早15分钟到,寒死,离面试只有8个多小时了,赶紧睡了!兴奋过度导致根本难以入睡,第二天7点起床,查了一下世贸酒店的地址,然后就乘89过去了,碰上早高峰了,公交开开停停,真是急死我了,颠颠簸簸的8.25终于到了玉泉,可怜那天夜里居然冻坏了肚子,早上过去,肚子痛死,还要打印成绩单,找到打印店,打印了成绩单,我知道世贸酒店就附近,但是却不知道是哪个方向,只好打的了,摸摸口袋居然只有5快钱了,幸好打印店附件有ATM机,然后出去打的直接到面试地点,终于在8.37的时候到了酒店,进了面试房间资料一放,先杀到厕所,(....),出来了,那个房间内有已经有另外的三位gg了,大家寒暄了几句,hrjj让我签一份合同,说是以后如果录取了就不用签了,合同全英文的,大体扫了一下,找到最后几个字National Card ID, 恩直接填了身份证号码,然后问了毕业是否读研之类的问题,真正面试开始.我被某胖胖工程师带到了隔壁的隔壁的隔壁的房间. A-工程师, B-我;

  A. 讲线程和进程吧

  B. balabala.

  A. (看我的简历)保证多线程同步有那些策略

  B. 临界区,信号量,MUTEX;

  A. 有什么不同吗?

  B. balabala

  A. 正则表达式你知道的吧,写个c语言中变量的表达式吧.

  B. (写到简历背后)

  A. "*"表示什么?

  B. 简单的讲就是可有可无吧,术语好像是闭包,克林star,(讲完这个以后我的心情开始放的很轻松,因为简历上的project我都是自己做过的,我开始主动把他往我自己做的project的技术点上带,讲解了论坛自动贴图,http协议,ftp协议,p2p实现方案,还把自己携带的SRTP结题表给他看,讲解SRTP的要点,自己做的一些程序的心得等)

  A. (听的似乎很满意)我们做一个算法题吧,比如说有5,10,100等面值的rmb,给你一个数,如何用最少数量的纸币构造出来,比如200块可以用2张100也可以用4张50,这里2就是最小的数量.(然后在纸上大体定义了几个变量,叫我写函数)

  B. (大一的时候有一个题目是给你一个数,写出所有和为该数的加法表达式,当时不会做,然后看过别人的代码学会了,他是用递规做的,和rmb问题很相识!)把所有的可能构造出来,然后找出最少的, 如何构造所有的可能只有递规回溯了(这个和大一那个方法一样,仅仅是多记录了数量用于最后的比较),然后就把那个递规思路讲给他听,balabala

  A. 你这样的时间复杂度是多少,递归又可以到多少层.

  B. 可以对这个方法进行如下优化balabala(依旧是用递归,同时提到stack会crash)

  A. 好, 我对你的问题结束了,现在你对Google有什么问题需要了解么?

  B. (我根本不知道面试还有这环节的)Google让实习生做什么?

  A. 和我讲解了Google的70,20,10原则,还有Google的project诞生过程等.结束后他叫我在房间等着, 等会还有另外一个工程师再来面试, 我就呆呆的做在,回忆刚刚结束的处女面试,自己还算满意,后来想想最后一个问题应该问他自己今天的面试表现如何,哪些地方需要提高的?这样面对下个工程师的时候也好处理.我在房间里闲走着,看看窗外的风景,欣赏酒店的布局,打开电视看,就这样无聊着.期间我也有想rmb问题是否应该有更好的解法,我知道一切递归都是可以动态的,我开始往动态规划的方向解决问题,居然让我想到了,然后整理了一下思路觉得没问题了,跑出房间去找那个胖胖的工程师,我要把这个解法告诉他,在走廊上碰到hrjj, 她帮我找到了那个工程师,然后我就根他说了用动态规划的解法,他听后笑着点头.说就是这样的.

  到此我的上半场面试可以说是很满意的结束了. 在房间里等待下半场的来临!

  总结一下上半场面试过程: 主要考察了os的基本概念以及常用的一些专业知识.而面试过程中自己的心情从开始紧张,到后来慢慢的放松,最后完全放开,有种和工程师闲聊的感觉, 期间的问题也不是太难,只要学过专业课基本也会知道, 而且工程师给人的态度很好. 很像是一场普通的对话, 而不是Google的面试.

  (下)

  第二场的面试工程师姗姗来迟, 一上来就叫我做平衡树的右转, 而树节点的结构就是笔试时候的结构,带父节点指针. 平衡树转的问题比较麻烦, 而我也忘记的差不多了,再加上具有父节点指针,这东西很容易出错. 然后我先将转后的结果让他看看是否有错,可怜的我居然记错了,然后在他的帮助下改了回来. 犯错让我开始紧张, 而工程师却一直乐呵呵的, 还说这个没什么,主要考察你code的细心程序. 我开始根据转后的结构写转换代码, 我一直小心翼翼, 每次写好一行代码以后观察一下当前树的结构, 生怕引起指针错误, 作好以后我还检查了一遍, 然后就交给工程师审核.在整个逻辑的处理上我没有发生任何错误, 但是在异常处理上我忘记判断有时候儿子指针可能是空的情况.-,-. 好吧这个题目算是勉强过去了.然后他也问了我多线程的问题,还问线程间局部变量如何访问,修改,这个题目我一直没有理解,然后提供了比如通过全局变量,静态变量之类的途径来解决,都不是他要的结果, 他需要的是直接在栈上对局部变量直接访问,而最后他给的结果却是只有把局部变量的指针传过来就好. 我寒死...(这个问题我回去后自己写了一个代码测试了一下,的确可以直接改变值), 我一直陷在如何获取这个局部变量地址以及访问是否有权限的漩涡里, 艾. 脑袋居然转不过来了-,-! 后来又问了一个智力题,给你一把13刻度的尺子, 在尺子上最少打几个点就可以把13个刻度全部标出来.这个题目我有所耳闻过,却从未尝试做过,然后很自然的先通过组合来预测总共6个点可以构造6*5/2=15种可能,大于13个刻度,所以中间应该打4个点.我将思路和工程师说后,他承认的确是4个点,然后我说我要把它实际构造出来, 从此陷入无尽的深渊, 一直到面试结束,我还没有构造出来. -,- . 最后被工程师说了, 他提示我应该从后面开始构造. 算了反正都结束.我也根本不想想了.回去以后我写了一个穷举的程序找到了答案, 代码在最后.

  下半场面试总结: 下半场转tree主要考察思维的严密性,而尺子的构造应该是考察了思维的灵敏性把. 而自己的面试心情由于处理问题的不完整性而逐渐下滑, 期间还由于紧张导致耳朵通红-,-.

  面试小插曲: 在最开始签合同以后, hrjj将那只带有Google的logo的笔送给了我,然后在上半场面试结束以后,胖胖工程师居然不小心把我的笔没收了.而在下半场开始的时候找不到笔,第二个工程玩笑到胖胖工程师真是小气, 连个笔都不给, 然后给我找了一只新的过来,结果在下半场面试结束的时候他也不小心把笔也没收了.-,- 难道这暗示我以后还会来Google拿回属于我的笔. ^o^

  面试结束以后我步行到玉泉,姐姐BG了我一顿.虽然下半场面试的不是很满意,不过也还过的去, 在回紫金港后才发现我居然阴差阳错的把成绩单带回来了,汗死. 不久就接到hrjj打来的电话说找不到我的成绩单, 我说第二天要把成绩单送过去, 她回复到"不用了,需要的时候再通知吧", 啊啊啊.我的心拔凉拔凉掉,居然说不用了, -,-

  成绩单请求被拒绝以后我一直觉得情况不好啊, 以后一直期待hrjj能够向我要成绩单, 然后天天去检查邮箱有没有hrjj的信, 在以后的几天内我还参加了网新的毕设笔试,面试.等到确认被网新录取以后, 就开始盼着Google的消息, 终于有一天hrjj打来电话, 问我是要intern还是fulltime, hrjj讲英文我没反应过来然后又重复了一下是要实习还是全职, 我觉得自己的实力太弱, 就选择了实习, 其实那个时候实习和全职有什么区别我根本不知道,电话里没有提到成绩单的事情. 接到这个电话以后我觉得应该还有希望. 以后的几天内每天继续检测gmail,每天去水木,未名看Google在别的学校的招聘情况. 发现几乎所有的人都接到这要选择intern还是fulltime的电话, 看来希望和原来还是一样的. 过了几天以后88.work版居然有人发贴说收到Google offer的mail, 不过是发错了, 这里先对那位同学表示一下同情, 难道已经开始发offer,但是那个时候水木上还没有人收到offer. 在等待期间参加了计算机学院的一个活动,主将人是MSTC的某人主席,他已经在Google工作,问了一下Google招聘的事情,他说自己也不知道. 汗.5.8的时候hrjj又打来电话说工程师在review我的数据,要我把成绩单发过去,同时把GPA也发过去.心情不免好转,希望就在眼前.我拷贝了成绩单,计算了一下GPA,就发过去了,GPA实在不敢恭维,才3.1多一些,然后就把政治类的课程取消又计算了一下,也才3.2多,我很怕Google对GPA看的太重,所以就在信内把自己的大学三年一直在进步的概念向hrjj表达了一下,希望他们能够看到我的进步.信发了以后的第二天,同学请客去K歌,在K歌的时候收到hrjj的电话,在没有接电话前,我觉得这个电话应该是录取的电话,因为如果拒绝的话应该是发信,而且那个时候,清华已经有人收到offer,然后我很开心的跑到某个角落,hrjj却告诉我她没有收到我的成绩单,一下子把我寒死,然后她要我把我的GPA报给她,我就报了3.2-,-!(把政治去掉了).然后k歌的兴趣也没了,成绩单事件一直影响我自己的信心,而且总觉得自己做事情很不完整,拖三落四的.k歌结束回来以后,我查看了一下信箱内有hrjj已经收到的回信,看来是她搞错了,然后发了一封信说明了一下,又把自己很想到Google实习的意愿表达了一遍(感觉自己好罗嗦啊,可能是第一次吧,我自己也真的太想得到这个offer)在以后的两天内,水木上的都陆续收到了offer或者据信,而我的邮箱去一直没有消息,室友的说no news is good news. 周一晚上我洗完衣服发现有三个未接电话,都是hrjj打来的,我想这次好远总要降临了,于是打电话过去,座机已经没有人接了,在邮件里找到hrjj的手机,直接打过去,果然是好消息,我通过了他们的review,我被Google收了.昨天hrjj又讲了一些具体事情,然后说会有pan同学再联系我,商谈更加具体的. 至此我的Google实习招聘完美结束 ^o^ . ps:pan同学到现在还没联系我, -,- 不会又有什么差池吧.

  那天夜宵回来的路上,抬头遥望星空时居然有种要哭的冲动!自嘲:一直在努力,今天终于拣到面包了. o(^_^)o

  以下是尺子问题的穷举代码:
  1. #include  < algorithm >
  2. #include  < iostream >
  3. using   namespace  std;
  4. void  f( int   *  x )
  5. {
  6.     int rule[14] = { 0 };
  7.     for ( int i = 0; i < 5; ++i )
  8.     {
  9.         for ( int j = i + 1; j < 6; ++j )
  10.         {
  11.             rule[x[j] - x[i]] = 1;
  12.         }
  13.     }
  14.     for ( int k = 1; k < 14; ++k )
  15.     {
  16.         if ( rule[k] == 0 )
  17.             return;
  18.     }
  19.     for ( int k = 0; k < 5; ++k )
  20.     {
  21.         cout << x[k + 1] - x[k] << "   ";
  22.     }
  23.     cout << endl;
  24. }

  25. int  main()
  26. {
  27.     int tag[12] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1 };
  28.     int m[6]    = { 0, 0, 0, 0, 0, 13 };
  29.     while ( next_permutation( tag, tag + 12 ) )
  30.     {
  31.         for ( int i = 0, j = 1; i < 12; ++i )
  32.         {
  33.             if ( tag[i] == 1 )
  34.                 m[j++] = i + 1;
  35.         }
  36.         f( m );
  37.     }
  38. }
复制代码


  输出结果:

3 4 4 1 1
2 6 1 3 1
2 2 3 5 1
1 5 3 2 2
1 3 1 6 2
1 1 4 4 3

  所以结果应该有三组

相关帖子

发表于 2015-11-12 11:34:11 | 显示全部楼层
论坛收集了很多好东西啊,赞!
使用道具 举报

回复

发表于 2015-11-12 13:57:26 | 显示全部楼层
对于我们这些学生来说,帮助很大
使用道具 举报

回复

发表于 2015-12-2 23:01:36 | 显示全部楼层
感谢楼主分享经验
使用道具 举报

回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们
联系我们
  • 电话:010-86393388
  • 邮件:udn@yonyou.com
  • 地址:北京市海淀区北清路68号
移动客户端下载
关注我们
  • 微信公众号:yonyouudn
  • 扫描右侧二维码关注我们
  • 专注企业互联网的技术社区
版权所有:用友网络科技股份有限公司82041 京ICP备05007539号-11 京公网网备安1101080209224 Powered by Discuz!
快速回复 返回列表 返回顶部