Soundhound Onsite interview面经



  • 面经一:

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

    0_1469484424309_sound.png

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

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

    0_1469484434671_sound2.png

    面经二:

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

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

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

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

    本文作者:Yuhong

    更多精彩内容,欢迎访问官网 Click Here
    或关注 “论码农的自我修养” 微信公众号:bit_tiger
    0_1469484607395_bittiger qr code.jpg


登录后回复
 

与 BitTiger Community 的连接断开,我们正在尝试重连,请耐心等待