面经 汇总

来源:互联网 发布:鑫众棋牌源码 编辑:程序博客网 时间:2024/06/05 02:30

这里归总一下我最近小伙伴遇见的面经:

古哥的Elementum Onsite:

第一轮:coding test,给你一部mac,里面有eclipse。
在一个2d字符数组里面找是否存在一个字符串,lc原题,不过能跑8个方向。
第二轮    
找一个字符串的permutation,要求实现有无duplicate的两种,也是lc原题。
第二题比较trick,假设我们有一堆螺丝和一堆螺母,他们是一一对应的,且size各不相同,问有什么方法可以为他们一一匹配。要求是,螺母不能和螺母比较,螺丝不能和螺丝比较。
第三轮
不能用size函数,在一个sorted数组里面找是否存在某个值
第四轮
在一个rotate sorted数组里面,只给定最小值的index,问如何查找一个数是否在里面。
第五轮

在一个String里面,找出所有的palindrome.

yyh的soundhound面经:

周三的面试,

第一轮是组长的面试,第一题是问怎么用两个stack来实现一个queue,当然我用算法的可视化给他展示了一下数据进队列出队列的过程,大概给他模拟了一下整个的过程,他说不错,可以写代码了,写完了之后,他问我这种操作线程安全吗,我就把能够实现线程的方法都给他说了一遍,synchronizedreentranlockconcurrent包下的方法,他就说行了,做下一题,就是dp中最基础的题,爬楼梯,说可以爬1,2,3,4楼,问爬一百楼有多少种方法,我给他先解释了recursive的办法,然后我说其实用dp更加节省空间,不用开那么多的stack空间。第三题就是我画了图的这个题,就是一开始给出个正方形,然后每一个正方形就能被分成四个正方形,然后能够被无限的分下去,其中每个正方形能被标记上黑色B或者白色W,然后现在的任务要把两个正方形的染色进行合并,只要两个颜色中有一个是黑色,那合并之后就会变黑色,这个题目就是要设计一个数据结构,保存颜色的节点也要方便后面的合并。


当然这个大家可以琢磨琢磨,有一种特殊的结构可以解决这个问题。最后一个题目是写collection里面的comparator,看我会不会写,知不知道里面的原理。

第二轮的面试是个华裔的seniorresearch scientist,一上来就问了一下我感兴趣的方向,我把研究生时候做的事情都给他说了一趟,他说懂了,然后上来就考我数据结构什么的,其实他是个不错的面试官,知道要把一个面试者从一个较为简单的问题引入深入思考,但是他引入个方式太怪了,我一开始没有get到,后来明白他是想让我实现一个bitinteger的类,然后我就开始写,写完之后他就说我白板写得好,表扬了我一下,然后他又再问我两个biginteger比大小,我就说写compareto的方法就行了,然后他就了解了,然后就聊了很久公司发展的方向什么的。

 

第一轮 CTO面试,上来吧啦吧啦聊了他自己的工作经历然后让我介绍了一下我自己,然后第一道题就是给出一个字符串,比如说ABCD,这个字符串里都是大写的字母,然后没有重复的字符,然后就要给出这个字符串的所有的可能的子串,比如说AB的输出就是””,A,B,AB输出这四个结果,他先问我的这个字符串的长度。这样结果集有几个字符串,答出来后他说那现在写个程序,把所有的可能子串输出出来,然后就问了一道leetcode上的一道hard题。是 149. Max Points on a Line.

 

第二轮是和各种engineer聊天,聊平时的生活,聊工作上的ownership的事情。

 

第三轮是一个印度撒屌,以上来就抓着简历问,问的很细,看到我写了machine learning就问我的项目里的PCA问,问这个算法的实现原理是什么,我就大概解释了一下我自己的理解,然后就问我java怎么实现跨平台的,我就说了jvm,然后他就开始问我关于编译的问题,问泛型在编译期有没有编译到class文件中,这个首先会难了我一下,然后给我两个表,让我写sql,说一个表是歌曲的,一个表是歌手的,歌手表盒歌曲表是一对多的关系,然后他让我写找出没有歌曲的歌手的名单,我就写了个rightjoin来实现表的链接,然后他就问我怎么优化这个query,我说我要改个数据结构来做,他没有多说,他说就在query上的优化,我说我不太知道,然后他让我写binary search,查看这个数据在数列中有没有,返回index,我写了之后,他说怎么test,我就把可能的test case说给他,然后他就让我用binary search来算一个数的squareroot,然后我写完了以后,他说有点不对,我写的我就觉得我的是对的,然后讨论了一下,我当然觉得他做的是对的,只是不同的方法,然后他又问我个linux的命令,我说我不太懂这个命令,后面问了大神,大神说是awk,貌似是的。

 

第四轮是一个英国人上来给我面试的,他由于只有半个小时的时间,所以一上来也没有做自我介绍什么,就问平时用什么数据库啊,我说mysql,mongodb都用过,然后他说他对mongodb不太了解,就问我sql熟不熟,我说还不错,他貌似不太熟。然后他说希望我尽量还是用sql语法来写来回答,如果不知道可以用mongo的语法,他先问我知不知道原子操作,我说我知道啊,就把我知道原子操作给他说了一遍,当然讨论这个事情的源头就是因为当用分布式的时候,怎么保证数据的一致性,我又说了mysql里面是如何实现的,是用了乐观锁,然后每个数据其实带了一个版本号去保证一致性,然后他貌似不太懂,但觉得我说的有道理,然后他就让我设计数据库结构,表结构,就设了三张表,音乐,艺人,和播放表,他跟我说关系在音乐和艺人中都有,所以不如把一整张表来描述关系,我说ok,没问题,明显体现了我有一点设计经验缺乏,然后他就要我写各种sql,在这个playlist里面哪首歌放的最多,哪个歌手的歌最多,等等,最后他说有个bonus的题目,就是问你怎么预测美国大选,我说就从facebook和twitter上搜集数据,然后给数据结果分类,支持或不支持,然后通过数据的概率计算来看谁的支持率高,他就很可能当。


cxy的google面经:

11月6日西雅图谷歌面经整个面试准备了大概两个半月 8月下旬recruiter跟我联系,10月2号电面(面经:http://www.1point3acres.com/bbs/thread-143272-1-1.html) 11月6号onsite.问了两个简单的问题. more info on 1point3acres.com1. Merge Two sorted LinkedList.很快的写完了2. Sort  a Linked List.我提出用Merge Sort, 先举了个例子 过了一遍思路, 然后开始写代码。最开始面试官给我把函数名给写出来了, 把我思路打断了, 卡了一下。后来自己重新写了一个函数名,写完了。写完大概还有20分钟,大叔他没有问题了,让我问他问题。我问了一下如何才能在Google这样的公司做一个优秀的员工。他讲了好多,没怎么听清楚,大概这么几点:1. 要会写代码2. 要会Design3. 碰到难题,要知道怎么解决。 然后顺便说了下, 很多人吐槽说, 面试问这些问题有什么用,平常又不会用到。他说其实是考察一个人解决问题的思路,是不是碰到难题就素手无策。大叔讲完了,让我介绍一下我自己,然后我大概讲了几句。。他说结束了会整理下feedback,recruiter会再跟我联系。Onsite一共5轮:第一轮:1. Wildcard Match: 唯一一道Leetcode原题, 用DP解决就好2. 一道偏设计题,要设计一个IP端口分配/查找的函数。给定IP,掩码,以及指定的端口,需要实现 两个函数:   void addRule(int32 IP, int32 mask, int port) 用于添加IP -> 端口的映射   int lookUp(int32 IP) 用于查找给定IP在哪个端口。   只需要对子网掩码范围内的IP进行Hash 就好,查找的时候从最小的子网开始对IP进行查找。第二轮:从一个很大的文件(TB级)随机找出k个record, 要求每个record被选中的几率相同解决方法: 对文件一行一行的读取,同时记下读过的count,当count小于k时,直接加入result; 当count大于k时,生成一个小于count的随机数,如果随机数小于k,就将index为k的值替换为当前值,否则直接跳过。第三轮:Pancake Sort (http://www.geeksforgeeks.org/pancake-sorting/)我在取最大值时 用了个max heap, 其实没有必要。 面试官后来给feedback说效率差别不大时,代码简单点更好。第四轮:设计 Candy Crash 的初始状态,要满足三个条件:1. 有三种糖果, 10*10的board。2. 不能出现连续三个为同一种糖果3. 保证玩家至少可以走一步解决方法:建一个class在存储candy,candy记录了种类,上方以及左方连续相同类型糖果的个数。          然后遍历整个board,在每个坐标都随机生成一个糖果类型,如果连续相同糖果个数超过2,则重新生成,直到不同为止。          生成之后,再去validate是不是有可能的走法,如果没有的话,再重新生成一个board。因为board是10*10,算了一下没有可以走动的几率很低,所以方案是可行的。          讲完思路后写了代码。Follow Up: 如何测试,如何按照难度分类,如何提升游戏初始化的速度等等第五轮:1. 上来先问了一道Open Ended 的问题,问了下 一个公司 做了很多软件,用户比较满意,但是唯一的问题是所有的代码都没有test,code base很大。问我如果是我的话,会怎么去完善这个测试系统。我说要先加一些Functional Test, 保证核心的功能是工作的。然后每个组再去按照重要性添加unit test, 提升code coverage。最后新提交的代码一定要有测试,提交代码之前一定要先跑测试。面试官问问了测试要怎么跑,我说要在Distributed Test Farm里面跑,他问了为什么。2. 然后问了一道没听说的算法题。给定两个string,要求出最少通过几次操作可以把一个转换为另一个。两个string字符的种类和个数都相同。 只能通过一种操作,就是把字符串中的某个字符移到最前面。比如 abcde 要变成 bcdea 就需要4次操作。 abcde -> eabcd -> deabc -> cdeab -> bcdea.我想出来一个方法是从最后一个字符开始比较,如果不想同,就把第一个字符串的最后一个字符移到前面,如果相同,就两个字符串一起向前移动。 面试官说这样可以,让我写了代码。后来再说有更好的方法,不用改变字符串,就一直引导我把最优解写了出来。最优解是如果遇到不想同的字符,不改变原来的字符串,而是直接向前移,直到找到相同的字符串,然后再从那个位置开始比较。写完了以后面试官还给我论证了一下为什么这个方法是可行的。还讲了讲这道题的来历。



0 0
原创粉丝点击