收集到的谷歌现场面试面经

1. 

给定四个API,move()turnLeft(),turnRight(),clean().

move():如果机器人可以往前一格,就会移到往前并回传true,否则false。

()即将机器人向左转,clean()就是清理所在位置

要求机器人扫除所有可走空间。

基本上就dfs做呗用相对出发点的座标记住扫过的区域即可。过程中要注意机器人面向哪个方向,然后dfs退回上一层时也需要加代码让机器人往回上一层的座标位置。建议还是亲自写一次,我就是没有完整写一次所以这些小细节有些卡住

 

2.  

21点游戏

牌只有1-10点,如果还没满17点就要再拿一张,问超过21点的机率是多少?

DP问题,但面试时太紧张,不知道怎么设定DP,尤其是被一直抽牌有好几轮迷惑了。最后面试官提示,只要用DP计算拿到我点的机率,然后1-(P(17 )+ P(18)+ P(19)+ P(20)+ P(21))就好,还是太浅了我

 

3. 

三哥。。生产一个最短的string来涵盖所有给你的string,比如给你aab, aabb, bc 应该生成aabbc (这题我说用trie做,他不让,说不用管performance要我brute force,我感觉这轮被黑了。。。)

 

4.

三哥加白人小姐姐,全程笑脸。。给你一个迷宫,里面有很多门,很多房间,房间里面有很多锁,求能不能到达终点。corner case是你现在到了一个门可能打不开,可是未来如果拿到了这个门的钥匙要回去那个门打开说不定能到终点。所以要dfs+2个map记录拿到的钥匙,和每个门需要什么钥匙(一个门可以有不同的钥匙)

 

 5.

第二题问了个design question。你有一个update,要发给远程的一堆机器,这些远程的机器在一起。问如何发过去。这里面有很多的假设和条件。比如,远程的机器很down了怎么办,发的update有data corruption怎么办,如果是bad update怎么办,server坏了怎么办,这些都是followup。

 

6. 

美国小哥

就一个design question。加入google要在每天进行search的人里随机选一个发一辆特斯拉,该如何选择。听着特容易,给个随机数不就好了,结果这题说了一个小时,因为要考虑到很多scalability和performance的问题,再加上谷歌有很多data center。

 

7.

有一堆任务需要完成,已知各个任务需要的不同的时间以及训练一个工人需要的时间,最初你只有一个工人,每次你可以选择训练一个工人或者做一个任务,不同的工人可以并行地处理任务,但是每个工人只能训练一个新工人或者做一项任务,不能中途放弃,问最快需要多长时间完成所有任务。

 

8. 

国人小姐姐 人灰常好 给了一道 LC 425 word square.

 

9.

白人小哥  给一堆长方形,随礼返回长方形内一个点,概率要跟长方形的大小成正比. Follow up1: 如果要多次调用生成随机点的函数怎么办. Follow up2:如果长方形有重叠怎么办?Follow up3:怎么检测有没有重叠?优化检测方式和考虑下多个重叠的问题. Follow up4:怎么检测这个函数是不是在正常工作?用significant test的时候在不同情况下怎么选p value?

 

10.

5. 中国人,系统设计问了怎么做设备的激活检测, 分布式系统。failover, nosql, replicaiton 然后再版上一堆画画,blabla。而且时间太紧,刚到时间就被人赶了。 面试官好像不太满意,情绪不高。有点郁闷。系统设计一点要狂说,千万别磨蹭。根本说不完。

 

11

设计一个voting system, 给一个getCurrentTime()API,实现两个function。 

1:给一个人名String,然后把该人的投票记录存下来 。. From 1point 3acres bbs

2:给一个timestamp, 求从当前时间到过去这个timestamp时间内,得票最高的人,返回人名String。

可以用Arraylist<String>存储

12

第三轮:欧洲白人哥,没想到是上午3轮下午1轮的搭配,早知道早饭多吃点了

设计一个公司员工管理系统,实现三个函数,在input stream里不断被调用(sequence is not guaranteed)

1. void manages(String m1, String e1) { // 代表m1是e1的direct manager,每个人都只能最多一个manager}

2. void peer(String e1, String e2) {// 代表e1和e2是同级关系}

3. boolean isManaging(String e1, String e2) {// 如果e1,e2有direct或者indirect的管理关系,返回true,otherwise false}

 

13.

第三轮:LC218 SKYLINE problem。高度是叠加而不是覆盖。直接用扫描的方法搞定。

 

 

14.

Choose a random point from one single rectangle.

Choose a random point from multiple rectangles, if there isno overlapping among them.

Choose a random point from multiple rectangles, if there isoverlapping among them.

 

[solution]

assume with a uniform distribution: each point in the final region has the same probability to be chosen. For a single rectangle this is straight forward: 

x = rectangle.left + random(rectangle.width);
y = rectangle.top + random(rectangle.height);

For multiple rectangles that don't overlap, we can say, we choose the rectangle proportionally to it's area and once the rectangle is chosen, pick a point in there.

 

long long are_sum = 0;
for(Rectangle& r : rectangles) {
	area_sum += r.width * r.height;
	if(random(area_sum) < r.width * r.height) {
		x = rectangle.left + random(rectangle.width);
		y = rectangle.top + random(rectangle.height);
	}
}

 

But if they overlap it's tricky. The easiest way I can think of is to union the new rectangle with the existing area and only consider the rectangles that are not already covered and apply method 2

 

posted @ 2018-02-11 09:58  jxr041100  阅读(710)  评论(0编辑  收藏  举报