我说一下我刚毕业找工作时候遇到的面试题。

在我博士毕业前1年,我花了大量时间,准备各种面试题,以及面试题的知识。

在准备的过程中,我觉得我自己的逻辑推理能力,和解决问题的能力也在提高。

所以,不能简单得把面试题,当做应试技巧。而是在准备面试题的过程中,逐渐提高自己解决问题的能力。

如果你准备3道面试题,并且是死记硬背,那么你可能准备完了,一无所获。

但是如果你是,系统性对各个面试方向的题目都进行了准备,认真做题,而不是死记硬背。那么准备这些题目本身,你的能力也是在提高的。

我做了系统的准备之后,去一家纽约的头部高频对冲基金面试,面试官问了我12道数学,编程,智力,算法题。我都流利得答出来了。

后来又面试了几家对冲基金,面试时候遇到的智力题,概率题,基本都是快速答出来。还在一家头部对冲基金,做了C++测试,测试成绩,在候选人里面排前7%。

我也找过IT方向的工作。现在千亿美元市值,万亿美元市值的互联网公司,都去面试过。刚毕业那会,也拿过一家,现在千亿美元市值的互联网公司,算是entry level里挺高级别的offer。

去互联网公司面试前,我是Leetcode初始的100道题目,用C++ bugfree了两遍。面试的时候,有些树结构的算法题,确实挺复杂的,我答得不是很流利。但是,一般的算法题,我都是流利回答出来,并且当场code做到bug free。

当时找工作之前,平时也会看各种算法题,算法导论,所以解决算法问题的经验多。面试时候,对方不需要我写代码,但是要我讲算法的,除非是树结构的,一般的我都能流利的给出最优的解答方案。

逻辑推理题



1.你有2个玻璃球,你住在100层的大楼里。玻璃球从某一层开始,扔下去会炸开。比如从28层或者28层以上扔玻璃球,玻璃球会炸。你设计一个方法,可以用最少的扔球次数,就可以找到玻璃球炸裂的临界层。2个玻璃球都可以被你扔炸裂开。



延伸问题,如果是m个球,n层大楼,n远大于m,怎么设计算法?





2.一个大院子里住了50户人家,每家都养了一条狗,有一天他们接到通知说院子里有狗生病了,并要求所有主人在发现自己家狗生病的当天就要把狗枪杀掉。然而所有主人和他们的狗都不能够离开自己的房子,主人与主人之间也不能通过任何方式进行沟通,他们能做的只是通过窗户观察别人家的狗是否生病从而判断自己的狗病否。(就是说,每个主人只能看出来其他49家的狗是不是生病,看不出来自己家的狗是不是生病)

第一天没有枪声,第2-7天还是没有枪声,第8天传出一阵枪声,问有多少条狗被枪杀。



3.已知上海有2000万人口,根据常识估算一下上海大概有多少加油站。



4.经济学上有个“海盗分金”模型,是说5个海盗抢得100枚金币,他们按抽签的顺序依次提方案:首先由1号提出分配方案,然后5人表决,超过半数同意方案才被通过,否则他将被扔入大海喂鲨鱼,依此类推。假定“每人海盗都是绝顶聪明且很理智”,那么“第一个海盗提出怎样的分配方案才能够使自己的收益最大化?”

5.有64个球队,每个球队的能力值都不一样,而且打比赛一定是强队战胜弱队,结果不随机。现在问你,如何用最少的比赛场次,找到能力最强的那个球队。

延伸问题,如何用最少的比赛场次,找到能力最强和第二强的那两个球队。

延伸问题,如何用最少的比赛场次,找到能力最强,第2强,第3强,... 一直到第m强的m个球队。

补充说明:这些球队的名次,是需要给出,而不是简单找到前k个球队。

概率统计题



1.阐述一下T分布,正态分布,柯西分布的特点,这三个分布之间的关系。



2.y是某个房子的房价,x是房子距离市中心的距离。你现在有大量的房子数据,每个房子的房价和距离都是有的,(x,y)。现在你用线性回归模型y=ax+b来拟合拟合数据。

你发现距离市中心越近,数据越多。这对你做线性回归有什么影响?



3.你有2个预测器,每个预测器在晚上会显示“涨”或者“跌”,来预测明天股市是涨还是跌。根据历史统计,每个预测器预测对的概率都是0.7,并且预测器之间的预测结果是独立的。今天晚上,2个预测器,都显示“涨”,明天股市涨的概率是多少?

延伸问题:如果是100个预测器,概率怎么计算?如果是无穷个预测器,概率是多少?N个预测器,概率是多少?

提示:答案不是(1-p的n次方)这样子的。也不是(1-(1-p)的n次方)。



4.一个醉汉在X轴上的0点,每一秒他都会向左走一步,或者向右走一步,向左或者向右的概率都是0.5,肯定不会停留在原地。左边的悬崖在-20,右边的悬崖在+75。醉汉最终从悬崖摔下去,问是从右边悬崖,而不是从左边悬崖摔下去的概率是多少?

延伸问题,如果醉汉每秒向左的概率是p,向右的概率是1-p,那么上个问题的答案是多少?



5.你有一个硬币,这个硬币可能有问题,两面都是head,但是你不能检查。你只能扔硬币,看扔出的结果。现在你扔了20次,每次都是head。问你如何估计第21次扔硬币,扔出来是tail的概率?



6.你有一个硬币,一面是head,一面是tail。你每秒钟扔一次硬币,得到H或者T。当出现HHHTTTHHTTTTTT这个pattern的时候,你就停止扔硬币。问你停止扔硬币的期望时间是多少秒?给不出答案,可以给出解题思路。

解释一下扔硬币的过程,比如从第一秒开始扔硬币,TTHTHHHTTTHHTTTTTT,从第5秒开始出现上面这个pattern,等pattern完整出来的时候,停止扔硬币。如果差一个,立刻重新开始。

要求:不可以用markov chain这种比较brute force的解法

7.你有一个硬币,一面是head,一面是tail。你每秒钟扔一次硬币,得到H或者T。当出现HHHTTTHHTTTTTT,或者THTTHTHHTTHHH这2个pattern任意一种的时候,你就停止扔硬币。问你停止的时候,是第1个pattern让你停止的概率?给不出答案,可以给出解题思路。

要求:不可以用markov chain这种比较brute force的解法

8.一个小虫在二维平面上随机游走,这个二维平面用x轴和y轴来刻度。它现在的位置是(130,130)。X轴是吸收壁,小虫撞到吸收壁就会停止运动。问题是,当小虫被吸收壁吸收的时候,它被负x轴吸收,而不是正x轴,的概率是多少?



9.你只知道如下信息:有100个钻石,每个钻石都不一样大。

吸收游戏如下现在把100个钻石依次拿给你看,你可以用天平秤出重量,比如第一个钻石,天平会显示60克拉。这100个钻石给你看的顺序是随机的。每次看完,你必须做出判断,是不是选这个钻石。选了这个钻石,游戏就结束,这个钻石就是你选中的钻石了,你也不能看以后的钻石了。现在让你设计一个方法,尽可能拿到最大的钻石。



10.你是售票员,手上没有现金,每张票是5元钱。假设有1000个买票的顾客,排成一个长队,依次买票。每个顾客手上只有一张钞票。有的顾客手上是5元,有的顾客手上是10元。遇到10元的顾客,你得给他找零5元钱。当你没钱找零的时候,就停止卖票。问你最后能够把1000张票卖完的概率是多少?





编程算法题





1.你有100个时刻的股票价格数据。0,1,2,3...99.



问题1. 编写函数,输出两个位置,第一个位置买,第二个位置卖。这样你得到的损益是最大的。只能先买再卖。

问题2. 编写函数,输出两个位置,第一个位置买,第二个位置卖,第3个位置买,第4个位置卖。经过2次买卖操作,你得到的损益是最大的。只能先买再卖。



要求计算复杂度尽可能最优。



2.给你一个整数数组,给你一个目标数字N,你找出数组中的两个元素,两个元素加一起等于N。输出两个元素的位置,如果不存在,输出(NaN, NaN)。用c++或者python写出代码。



3.有两个字符串,长度分别是M和N,写算法找到这两个字符串的最大公共子串。要求算法复杂度尽量最优。



4.如何用2个queue实现一个stack



5.一个矩阵每个元素,M行N列,右边的元素比左边大,下面的元素比上面大,先给你一个数字x,让你设计一个复杂度最优的算法。假设这个x在矩阵里,输出x的位置(i, j)。假设x不在矩阵里,输出nan,nan



6.你有一个矩阵,M行N列,每一行都是右边比左边的元素大,设计一个算法,把数组里面把矩阵的元素,按照大小依次打印出来

作者:华尔街老兵



点赞(0)
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部