一亩三分地论坛

 找回密码
 获取更多干货,去instant注册!

一亩三分地官方iOS手机应用下载
查看: 3657|回复: 23
收起左侧

Dropbox Onsite和电面和OA

[复制链接] |试试Instant~ |关注本帖
autumnhu 发表于 2015-1-23 03:42:17 | 显示全部楼层 |阅读模式

2015(1-3月) 码农类 硕士 全职@Dropbox - 网上海投 - 技术电面 Onsite 在线笔试 |Fail

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?获取更多干货,去instant注册!

x

. Waral 鍗氬鏈夋洿澶氭枃绔,
OA:
一个90分钟的练习:
实现一个学生选课系统,要自己设计数据结构。
string addClass(int id, int capacity, int time) {
}. 1point 3acres 璁哄潧
string removeClass(int id) {. 1point 3acres 璁哄潧
}
string infoClass(int id) {
}
string addStudent(int id, int capacity, int start, int end) {
}
string removeStudent(int id) {
}
string infoStudent(int id) {. 1point 3acres 璁哄潧
}
string enrollStudent(int studentId, int classId) {
}
string unenrollStudent(int studentId, int classId) {
}

代码量挺大的,从而导致时间其实蛮紧的。我用的是C++的map来存数据。写完之后可以run testcase。有18个testcases,都过了就应该没问题了。
. 1point3acres.com/bbs
电面1:
实现两个函数:
void hit()
int getlog() //返回过去5分钟内hit被call了多少次。. from: 1point3acres.com/bbs

我的做法是用一个数组pair<int, int> last[300]。pair的第一个值是具体时间第t秒,第二个值是在第t秒被hit了多少次。然后每次call hit的时候,update一下last[time%300]的值就好了。
每次call getlog就扫一遍last[300]里面的所有值,把属于过去300秒的次数累加起来就好了。.鏈枃鍘熷垱鑷1point3acres璁哄潧

电面2:
电话本问题:.鐣欏璁哄潧-涓浜-涓夊垎鍦

Given a digit string with length 7 and a dictionary, return all possible letter combinations that in the dictionary the number could represent.

Follow up:

如果可以拼出multiple words的组合。那也输出这些组合。面试官说单词的长度至少为3,然后电话号码长度为7。所以其实只有3种组合方法。改一改就好了。

Follow up 2:

如果你可以有full access of the dictionary你要怎么做可以加快你程序的速度。答曰用字典树。然后就改改改。但最终也没有完全写完。不过面试官说已经可以了。两天后收到Onsite。

Onsite:

因为之前看了知乎上这个很火的回答所以拿到Onsite非常高兴。http://www.zhihu.com/question/24168100

第一轮:

给你一个文件夹的路径,返回一个list of list。就是把重复的文件的路径放进同一个list里面,然后再把所有list返回。

先用DFS把所有文件夹下所有文件的目录找出来。然后先按文件的size分类,相同size的文件按照文件4K个bytes分类,然后接着按照接下来的4k个bytes分类……一直分类到某个类只有一个文件或者,文件被读完为止。

第二轮:

生命游戏。

给你一个初始01矩阵。接下来的每一秒,如果当前格子是alive的,那么如果邻居里有2或3个alive,那么这格stay alive。如果是dead的,那么如果邻居有3个alive,那就变成alive。要求输出下一个状态。就是直接按照他的要求做就好了,不难。

follow up:

如果矩阵很大内存装不下怎么办。

我的回答是每次读三行,然后处理,然后再三行,写code然后搞定。

第三轮:

多线程。

给你一个资源池:每秒钟资源池会产生一定的资源,然后实现一个函数get(int num), 每次调用会取num那么多的资源。

我答得比较差。。。连condition variable都没用上。。。

中午吃饭:最期待的吃饭环节终于到了。。。Tuck Shop还是比其他湾区的食堂高大上一点点。但我去的那天貌似没有看到特别高端的食物。。。个人觉得在Twitter吃的比在Dropbox要好。。。

吃完饭有个demo环节,两个工程师给我展示了一些新的功能,包括Project Harmony:https://dropboxatwork.com/tag/project-harmony/。还有一个不让说的很炫酷的新功能。

第四轮:

给你一个URL然后visit所有这个URL链出去的URL。我用DFS来找的。然后follow up:因为http request的latency比较大,所以要求用多线程来提高效率。这一块我也做的不好,但欢迎大家讨论。

最后是wrap up:找了个工程师陪我逛了逛,然后回答我的一些问题。

关于多线程两道题,大家不清楚细节可以回复,我也想讨论讨论。



评分

5

查看全部评分

liuzhe1218 发表于 2015-1-23 05:13:52 | 显示全部楼层
关注一亩三分地公众号:
Warald_一亩三分地
他家题目重复率太高了,我刚刚电面问了电话号码那题。。用了预处理+word break但是没用trie。。
回复 支持 反对

使用道具 举报

 楼主| autumnhu 发表于 2015-1-23 15:13:43 | 显示全部楼层
关注一亩三分地微博:
Warald
liuzhe1218 发表于 2015-1-23 05:13
他家题目重复率太高了,我刚刚电面问了电话号码那题。。用了预处理+word break但是没用trie。。
. From 1point 3acres bbs
对啊。我也觉得。但onsite第二第三轮的题我之前是没有见过的。
回复 支持 反对

使用道具 举报

liuzhe1218 发表于 2015-1-23 15:40:24 | 显示全部楼层
autumnhu 发表于 2015-1-23 15:13
对啊。我也觉得。但onsite第二第三轮的题我之前是没有见过的。

希望可以过~感觉dropbox家bar不低。。
回复 支持 反对

使用道具 举报

NdrZmansN 发表于 2015-1-23 16:37:10 | 显示全部楼层
这个含金量高.
为什么楼主标题上写fail了?
回复 支持 反对

使用道具 举报

 楼主| autumnhu 发表于 2015-1-23 16:50:27 | 显示全部楼层
NdrZmansN 发表于 2015-1-23 16:37
这个含金量高.
为什么楼主标题上写fail了?

额,因为面完onsite之后还是收到一封含有子串unfortunately的邮件。
回复 支持 反对

使用道具 举报

NdrZmansN 发表于 2015-1-23 16:52:15 | 显示全部楼层
autumnhu 发表于 2015-1-23 16:50.鐣欏璁哄潧-涓浜-涓夊垎鍦
额,因为面完onsite之后还是收到一封含有子串unfortunately的邮件。

他家确实挺tough的. 我之前挂在电面第二轮了.
你比我牛.
回复 支持 反对

使用道具 举报

 楼主| autumnhu 发表于 2015-1-28 02:14:29 | 显示全部楼层
NdrZmansN 发表于 2015-1-23 16:52
他家确实挺tough的. 我之前挂在电面第二轮了.
你比我牛.

没有没有,我只是运气好电面都碰上见过的题
回复 支持 反对

使用道具 举报

liuzhe1218 发表于 2015-2-18 10:55:37 | 显示全部楼层
lz你好,第三轮是他们要的是模拟blockingqueue嘛??
回复 支持 反对

使用道具 举报

 楼主| autumnhu 发表于 2015-2-18 13:15:38 | 显示全部楼层
liuzhe1218 发表于 2015-2-18 10:55
lz你好,第三轮是他们要的是模拟blockingqueue嘛??

有点像。给你一个资源池:每秒钟资源池会产生一定的资源 r,然后实现一个函数get(int num), 每次调用会取num那么多的资源。如果当前的资源量不足的话就是把这个调用先block着。
. 1point 3acres 璁哄潧. 鍥磋鎴戜滑@1point 3 acres
然后让我写代码。。。
回复 支持 反对

使用道具 举报

liuzhe1218 发表于 2015-2-18 13:28:25 | 显示全部楼层
autumnhu 发表于 2015-2-18 13:15
.鏈枃鍘熷垱鑷1point3acres璁哄潧有点像。给你一个资源池:每秒钟资源池会产生一定的资源 r,然后实现一个函数get(int num), 每次调用会取 ...

那实现起来就是lock+condition variable就可以了吧??假设变量就是存在一个int里面,然后你的get函数就是access那个数据结构,如果目前没有这么多,就让他await好了,否则就唤醒自己取资源。。求指点
回复 支持 反对

使用道具 举报

 楼主| autumnhu 发表于 2015-2-18 13:43:42 | 显示全部楼层
liuzhe1218 发表于 2015-2-18 13:28
那实现起来就是lock+condition variable就可以了吧??假设变量就是存在一个int里面,然后你的get函数就 ...

"然后你的get函数就是access那个数据结构",是access那个int吗?. 1point3acres.com/bbs

怎么signal唤醒自己取资源这件事呢?
回复 支持 反对

使用道具 举报

liuzhe1218 发表于 2015-2-19 12:48:36 | 显示全部楼层
autumnhu 发表于 2015-2-18 13:43
"然后你的get函数就是access那个数据结构",是access那个int吗?
.鐣欏璁哄潧-涓浜-涓夊垎鍦
怎么signal唤醒自己取资源这件事呢?

这是我写的code,然后如果资源没有设置上限的话,可以把setResource condition撤掉。。。
  1. class Business{
  2.         private Lock lock = new ReentrantLock();
  3.         private Condition getResource = lock.newCondition();. 1point 3acres 璁哄潧
  4.         private Condition setResource = lock.newCondition();
  5.         private int resource;
  6.         private final int input;
    . more info on 1point3acres.com
  7.         private final int threshold;
  8.        
  9.         public Business(int size, int input){
  10.                 this.resource = 0;
  11.                 threshold = size;
  12.                 this.input = input;
  13.         }
  14.         . 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
  15.         public void put() throws InterruptedException{
  16.                 lock.lock();
  17.                 try{
  18.                         while (resource + input > threshold){
  19.                                 setResource.await();
  20.                         }
  21.                         //
  22.                         resource += input;. more info on 1point3acres.com
  23.                         System.out.println("after put, the current resource is: "+ resource);.鏈枃鍘熷垱鑷1point3acres璁哄潧
  24.                         getResource.signal();
  25.                 }
  26.                 finally{
  27.                         lock.unlock();
  28.                 }
  29.         }. from: 1point3acres.com/bbs
  30.        
  31. . From 1point 3acres bbs
  32.         public void get(int num) throws InterruptedException{
  33.                 if (num <= 0 || num > this.threshold){
  34.                         throw new IllegalArgumentException();. visit 1point3acres.com for more.
  35.                 }
  36.                 lock.lock();
  37.                 try{
  38.                         if (num > this.resource){
  39.                                 getResource.await();
  40.                         }
  41.                         // get data. 1point3acres.com/bbs
  42.                         resource -= num;
  43.                         System.out.println("after get, the current resource is: "+ resource);
  44.                         setResource.signal();
  45.                 }
  46.                 finally{-google 1point3acres
  47.                         lock.unlock();
  48.                 }. 鍥磋鎴戜滑@1point 3 acres
  49.         }
  50. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| autumnhu 发表于 2015-2-20 02:42:38 | 显示全部楼层
liuzhe1218 发表于 2015-2-19 12:48
这是我写的code,然后如果资源没有设置上限的话,可以把setResource condition撤掉。。。

所以这个put函数是每秒钟执行一次,然后每次加进去input数量的资源咯?

然后他跟我说,可不可以不要这个每秒钟执行一次的put函数。只实现一个get来完成这个任务。然后我就思密达了。
回复 支持 反对

使用道具 举报

liuzhe1218 发表于 2015-2-20 02:56:08 | 显示全部楼层
autumnhu 发表于 2015-2-20 02:42
所以这个put函数是每秒钟执行一次,然后每次加进去input数量的资源咯?
-google 1point3acres
然后他跟我说,可不可以不要这 ...
. 鍥磋鎴戜滑@1point 3 acres
是啊。。那个取数据的condition需要put端每次放进数据之后才能唤醒。。。按照你这么说,他们的要求是get函数自己唤醒自己??
回复 支持 反对

使用道具 举报

 楼主| autumnhu 发表于 2015-2-20 03:08:53 | 显示全部楼层
liuzhe1218 发表于 2015-2-20 02:56. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
是啊。。那个取数据的condition需要put端每次放进数据之后才能唤醒。。。按照你这么说,他们的要求是get ...

我感觉应该是吧。。。我当时应该多提问的。不要硬着头皮写。
回复 支持 反对

使用道具 举报

liuzhe1218 发表于 2015-2-20 03:57:52 | 显示全部楼层
autumnhu 发表于 2015-2-20 03:08
我感觉应该是吧。。。我当时应该多提问的。不要硬着头皮写。

那我觉得就应该这么设计:
写一个resource的类专门封装resource和speed,在里面用读写锁控制set和get函数。。实现读并发,写顺序。。

. more info on 1point3acres.com然后把get函数封装在线程里面,因为这样可以用notify唤醒自己。。。put函数也需要用一个单独的线程来封装。其实
回复 支持 反对

使用道具 举报

dsq704136 发表于 2015-5-9 08:07:13 | 显示全部楼层
想请问一下楼主,最后爬虫的题要求的输出是a list of urls 就行了么?还有多线程实现楼主的思路是什么样的。多谢了!!
回复 支持 反对

使用道具 举报

 楼主| autumnhu 发表于 2015-5-9 12:37:02 | 显示全部楼层
dsq704136 发表于 2015-5-9 08:07
想请问一下楼主,最后爬虫的题要求的输出是a list of urls 就行了么?还有多线程实现楼主的思路是什么样的。 ...
. visit 1point3acres.com for more.
对的。找出来a list of URL. 思路大概就是浏览到一个网页的时候,开多个线程来对该网页里的url发起http request的
回复 支持 反对

使用道具 举报

dsq704136 发表于 2015-5-10 00:30:11 | 显示全部楼层
autumnhu 发表于 2015-5-9 12:37
对的。找出来a list of URL. 思路大概就是浏览到一个网页的时候,开多个线程来对该网页里的url发起http r ...

还需要实现request么?还是只 "# request URL" 就行了..
回复 支持 反对

使用道具 举报

本版积分规则

请点这里访问我们的新网站:一亩三分地Instant.

Instant搜索更强大,不扣积分,内容组织的更好更整洁!目前仍在beta版本,努力完善中!反馈请点这里

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明 ( 沪ICP备11015994号 )

custom counter

GMT+8, 2017-4-26 01:42

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

快速回复 返回顶部 返回列表