近期论坛无法登录的解决方案


一亩三分地论坛

 找回密码
 获取更多干活,快来注册

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

bb onsite 4轮

[复制链接] |试试Instant~ |关注本帖
wangkeya0319 发表于 2016-10-7 11:44:57 | 显示全部楼层 |阅读模式

2016(7-9月) 码农类 硕士 全职@Bloomberg - 网上海投 - Onsite |Passfresh grad应届毕业生

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

您需要 登录 才可以下载或查看,没有帐号?获取更多干活,快来注册

x
八月底去bb家官网海投了简历,大概两三天就收到了电面邀请。九月初电面,面试官是工作四年的三哥大哥,题目是binary search类型,大概是给一个有序有重复数组和一个target,求这个target在数组中的index range。. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴


之后一周左右收到onsite邀请,约在了九月底。
面试当天先在一楼登记之后去六楼的接待区等待,自助小食和饮料,和一起坐电梯上楼的三哥和美国小哥聊聊天,看到大约20个candidate的时候还是很吃惊的,算下来bb家也是很花经历用来onsite的。
之后hr姐姐带着大家简单的参观一下,然后直接带队去十几层的地方。. 1point3acres.com/bbs
round 1的面试官们像家长等老师带队出校门接孩子一样在那里等候,拿了一盒简餐之后面试官会带你去你今天面试的会议室。之后的所有面试都会在这个房间进行。

第一轮 白人美国小哥和印度长相美国口音的美国小哥
上来先是聊一个简历项目。
第一题是写一个开方取整功能的方法,但是不能用自带sqrt功能。属于比较标准的二分法题目,在二分的时候边界判断不要出死循环就好。
第二题是设计题。大概题目就是设计一个数据结构,实现一个像chrome浏览器里那种显示你最常访问的八个网址的功能。说了想法之后,小哥让我code实现其中一两个方法,但是时间关系没有写完第一轮就结束了。

第二轮 美国小哥
感觉第二轮本来也应该是两个人的,但是好像其中一个人临时有事,所以全程只有一位面试官。
同样的先十分钟简历。
第一题是实现两个长数字的乘法,两个数字都是以字符串形式输入。刚开始有点懵,但是小哥人很好,基本算是有指导一步步写完。题目想法很直接,但是code写起来确实还是挺长的。.1point3acres缃
第二题设计题,跑马场记录赛马名次。这题应该是他家高频了。

第三轮 白人hr姐姐. 1point3acres.com/bbs
基本都是behavior问题,其中让我给她讲个我的项目经历,我个人觉得如果摊上这样的问题,最好不要讲技术层面的detail,感觉她可能是考察你以后对客户解释和表达产品能力够不够好。

第四轮 在bb工作了13年的白人欧洲manager
进门之后很随意。
同样十分钟简历。
然后出了一题。题目大概是给两个非排序数组,给一个target,两组数里各取一个求2sum。follow up了如果不让用hashmap的话,怎么自己实现一下hashmap的功能一类的。
.1point3acres缃
之后manager带出面试结束。. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
. visit 1point3acres.com for more.
之后一周收到口头offer。
目前湾区一些也在面和投,但是个人喜好原因倾向于大城市,所以基本就决定是他家了吧。
.鐣欏璁哄潧-涓浜-涓夊垎鍦
总体感觉他家面试并不重在算法,之前看了很多前辈的经验也说他家给offer很随机,没什么规律。
我个人经验上讲,感觉他家还是蛮注重和面试官的交流的,从简历的项目能不能说明白,言简意赅,对于面试官的追问能不能马上get到point,并且给出他们期待的反馈,到算法题或设计题你如何阐述你的想法,做题过程中遇到新问题和他们交流如何解决,到和他们瞎聊天,都是一种互动交流的考察。
总体上感觉,要看他们是不是愿意和你进行更多的交流,而并不是看他们是不是认可你的做题的能力(当然做题的能力也很重要)。. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
所以我臆测,那些大牛们onsite做了很多题但是没offer甚至两轮游的原因也许是面试官觉得交流不畅,毕竟以后都是同僚,闷头自己搞的人在bb这种产品导向、随时要和非码农交流的公司比较吃亏吧。. more info on 1point3acres.com

大概面经就是这样。听一些前辈说金融it的面试重在交流,这次深有体会。希望能给大家带来思考和帮助!
最后说下本人背景,国内非cs本科(bio类),来美国转cs硕士。资浅小码农。
希望大家找工作顺利!

评分

3

查看全部评分

本帖被以下淘专辑推荐:

zzgzzm 发表于 2016-10-17 09:43:49 | 显示全部楼层
关注一亩三分地公众号:
Warald_一亩三分地
pinocchio.chang 发表于 2016-10-17 04:43
不好意思,请问一下楼主,那个最常用网站访问,是用LRU, 还是LFU? 听题目是LFU, LFU感觉难很多啊!!
-google 1point3acres
这个按题意应该是LFU with max cache size = 8. 这时每个URL web的访问频率是不断增加的,所以在动态过程中每个URL都可能进入或调出前8名。我是用Hash map统计所有URL当前访问次数,用set<pair<string,int>>作为cache保存most visited top 8 URL (sorted by frequency). 这个思路和很多追踪高频股票更新是一个思路。
  1. // comparator for <url,freq> pair
  2. // sorted by freq in descending order
  3. struct Comp {
  4.   bool operator()(const pair<string,int>& a, const pair<string,int>& b) {
  5.     return a.second > b.second;  
  6.   }
  7. };. 1point3acres.com/bbs
  8. . 1point 3acres 璁哄潧
  9. class Top8Freq {
  10.   private:
  11.   // all url frquency
  12.   unordered_map<string, int> _freq;
  13.   // sorted cache: top 8 <url,frquency> pair
  14.   set<pair<string,int>, Comp> _top8freq;
  15.   
  16.   public:
  17.   // called when web "url" is visited
  18.   void visit(string url) {
  19.     _freq[url]++; // update frequency
  20.     // remove from sorted cache if found
  21.     for (auto& x:_top8freq) {
  22.       if (x.first == url) {
  23.         _top8freq.erase(x); break;   .1point3acres缃
  24.       }. From 1point 3acres bbs
  25.     }. 1point3acres.com/bbs
  26.     // insert into cache if necessary
  27.     if (_top8freq.size() < 8) _top8freq.emplace(url, _freq[url]);
  28.     else if (_top8freq.rbegin()->second < _freq[url]) {
  29.       _top8freq.erase(*_top8freq.rbegin()); 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
  30.       _top8freq.emplace(url, _freq[url]);
  31.     }. 鍥磋鎴戜滑@1point 3 acres
  32.   }
  33.   
  34.   // get top 8 visited url
  35.   vector<string> getTop8freqUrl() {
  36.     vector<string> top8;
  37.     for (auto& x:_top8freq) top8.push_back(x.first);
  38.     return top8;
  39.   }
  40.   
  41.   void clear() { _freq.clear(); _top8freq.clear(); }
  42. };
复制代码
回复 支持 1 反对 0

使用道具 举报

 楼主| wangkeya0319 发表于 2016-10-14 02:35:23 | 显示全部楼层
关注一亩三分地微博:
Warald
zzgzzm 发表于 2016-10-11 13:04
I see. 原来这个题的意思是要即时更新一场比赛的名次(我以为是很多比赛都已经结束了,只是存取比赛结果 ...

我现在还不太熟悉c++不好意思 但是大体上感觉是对的。 感觉这种题你思路对了、能理解面试官需求,基本上code部分伪代码就够了,主要是能体现你的数据结构是怎么work的。我当时面试官就让我按照我设计的数据结构口头走了几个test case,一定要多考虑edge case。 能感觉到你肯定准备很刻苦,我的建议是千万别上来就和面试官稍微说下思路就着急码。他们更喜欢听你思考的过程,毕竟coding不是这类题的重点。他想看你coding的话会直接考察算法题或者这种设计题的某一个他明确规定要实现的功能(其实就是觉得你设计的没问题然后follow up一个算法题)而不是完整的写出整个类,别太担心,加油!
回复 支持 1 反对 0

使用道具 举报

wtcupup 发表于 2016-10-7 12:01:52 | 显示全部楼层
跑马场记录赛马名次 思路是什么?
回复 支持 反对

使用道具 举报

 楼主| wangkeya0319 发表于 2016-10-8 08:33:17 | 显示全部楼层
wtcupup 发表于 2016-10-7 12:01
跑马场记录赛马名次 思路是什么?

我那天大概说的就是ArrayList和HashMap的结合吧,要看面试官要求的复杂度再决定你要用什么数据结构。
回复 支持 反对

使用道具 举报

zzgzzm 发表于 2016-10-11 04:04:33 | 显示全部楼层
wangkeya0319 发表于 2016-10-8 08:33 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
我那天大概说的就是ArrayList和HashMap的结合吧,要看面试官要求的复杂度再决定你要用什么数据结构。

就是用unordered_map<string, vector<int>>将比赛的ID map to 结果的排名吗?
这个设计题是不是还要展开其他的内容呢?
回复 支持 反对

使用道具 举报

 楼主| wangkeya0319 发表于 2016-10-11 10:48:42 | 显示全部楼层
zzgzzm 发表于 2016-10-11 04:04
就是用unordered_map将比赛的ID map to 结果的排名吗?
这个设计题是不是还要展开其他的内容呢?

不是的, 两个数据结构是分开用的,ArrayList是顺序存名词,hashmap是用来在确认每个entry的address,这样方便O(1)内更新名词
回复 支持 反对

使用道具 举报

zzgzzm 发表于 2016-10-11 13:04:43 | 显示全部楼层
wangkeya0319 发表于 2016-10-11 10:48
不是的, 两个数据结构是分开用的,ArrayList是顺序存名词,hashmap是用来在确认每个entry的address,这 ...
. 鍥磋鎴戜滑@1point 3 acres
I see. 原来这个题的意思是要即时更新一场比赛的名次(我以为是很多比赛都已经结束了,只是存取比赛结果)。多谢
C++: 那就是用这样的结构吧?  
list<string> _id; // horse id ordered by current position
unordered_map<string, list<string>::iterator> _pos; // position in list
  1. class Race {
  2.   private:
  3.   list<string> _id; // horse id ordered by current position
  4.   unordered_map<string, list<string>::iterator> _pos; // position in list  
  5.   是要求实现哪些方法呢?我就想到以下这些。
  6.   public:
  7.   void addToTail(string id) {
  8.     _id.push_back(id);. more info on 1point3acres.com
  9.     _pos[id] = --_id.end();
  10.   }
  11.   
  12.   void moveForward(string id) {
  13.     if (_pos.count(id) == 0) return;
  14.     auto pos = _pos[id];
  15.     if (pos == _id.begin()) return;
  16.     pos = _id.erase(pos);. Waral 鍗氬鏈夋洿澶氭枃绔,
  17.     _id.insert(--pos, id);.1point3acres缃
  18.     _pos[id] = pos;. visit 1point3acres.com for more.
  19.     pos++;. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
  20.     _pos[*pos] = pos;
  21.   }
  22.   
  23.    void moveBackward(string id) {
  24.     if (_pos.count(id) == 0) return;. more info on 1point3acres.com
  25.     auto pos = _pos[id];
  26.     if (pos == --_id.end()) return;. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
  27.     pos = _id.erase(pos);. more info on 1point3acres.com
  28.     _id.insert(++pos, id);. from: 1point3acres.com/bbs
  29.     _pos[id] = pos;
  30.     pos--;
  31.     _pos[*pos] = pos;
    . From 1point 3acres bbs
  32.   }
  33.   
  34.   vector<string> getRank() {
  35.     vector<string> rank;
  36.     for (auto& id : _id) rank.push_back(id);
  37.     return rank;
  38.   }
  39. };
复制代码
回复 支持 反对

使用道具 举报

zzgzzm 发表于 2016-10-14 10:33:41 | 显示全部楼层
wangkeya0319 发表于 2016-10-14 02:35
我现在还不太熟悉c++不好意思 但是大体上感觉是对的。 感觉这种题你思路对了、能理解面试官需求 ...

多谢提示!的确思路很重要。. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
PS:我现在已经离开学校多年,所以比较old school C++.
回复 支持 反对

使用道具 举报

pinocchio.chang 发表于 2016-10-17 04:43:46 | 显示全部楼层
不好意思,请问一下楼主,那个最常用网站访问,是用LRU, 还是LFU? 听题目是LFU, LFU感觉难很多啊!!
回复 支持 反对

使用道具 举报

pinocchio.chang 发表于 2016-10-17 04:54:14 | 显示全部楼层
zzgzzm 发表于 2016-10-11 13:04
I see. 原来这个题的意思是要即时更新一场比赛的名次(我以为是很多比赛都已经结束了,只是存取比赛结果 ...

不好意思,大神,想问一下,我之前没看过这题,他的意思是一直要一直以短的时间内update 赛马id的名次吗?还有,想问一下,在addToTail(string id)这个function里,_id.push_back(id);之后,_pos[id] = --_id.end();为什么要--_id.end()呢?_id.end()不是已经在push_back(id)的时候就已经更新了么?--vector.end()这个interator不就是空了吗?可能是我没看懂!求指教
回复 支持 反对

使用道具 举报

zzgzzm 发表于 2016-10-17 09:00:16 | 显示全部楼层
pinocchio.chang 发表于 2016-10-17 04:54
不好意思,大神,想问一下,我之前没看过这题,他的意思是一直要一直以短的时间内update 赛马id的名次吗 ...

是的,差不多就是这个意思。需要设计一个数据结构可以动态排序(更新名次变化)和快速访问(得到名次)。这就需要结合Hashmap和List两个Container(和LC的LRU设计是一个思路)。Hashmap支持快速访问,但没有顺序的概念;List有序并支持O(1)的插入和删除(假设给定位置)。结合起来就很强大。
C++所有支持Iterator的Container的end()都指向最后一个元素的下一个位置,Container.end()本身所指的位置实际是空的,所以--container.end()才真正指向最后一个元素。
C++这样设计是保持STL的iterator相关的自带函数作用范围都是“半开半闭区间” [a,b),所以[list.begin(),list.end())才代表整个范围。同理reverse iterator的rbegin()指向最后一个元素,而rend()指向第一个元素的前一个位置
回复 支持 反对

使用道具 举报

pinocchio.chang 发表于 2016-10-17 10:37:21 | 显示全部楼层
zzgzzm 发表于 2016-10-17 09:00
是的,差不多就是这个意思。需要设计一个数据结构可以动态排序(更新名次变化)和快速访问(得到名次)。 ...
. 1point 3acres 璁哄潧
谢谢谢谢~~看见层主你每次都可以瞬间写出别人面经的code,请教怎么可以练的这么强?
回复 支持 反对

使用道具 举报

pinocchio.chang 发表于 2016-10-17 10:40:15 | 显示全部楼层
zzgzzm 发表于 2016-10-17 09:00
是的,差不多就是这个意思。需要设计一个数据结构可以动态排序(更新名次变化)和快速访问(得到名次)。 ...

就是说,你这个 --container.end() 是可以用container.rbegin() 代替是吧?
回复 支持 反对

使用道具 举报

Neil_Acton 发表于 2016-10-18 02:24:25 | 显示全部楼层
看了一遍帖子,感觉bb招进去的反倒是野路子多。 不是歧视半路转的,我自己也转的。 第一次店面被放鸽子, 第二次面试官早打一小时电话。。。然后约了on-site ,  又给转成 on-campus     各种hiring过程的不靠谱就反应了这家公司的问题很多。 虽然条件很好,但是总觉鄙视又想进那种感觉。
回复 支持 反对

使用道具 举报

zzgzzm 发表于 2016-10-18 22:53:31 | 显示全部楼层
pinocchio.chang 发表于 2016-10-17 10:40
就是说,你这个 --container.end() 是可以用container.rbegin() 代替是吧?

是的,--c.end()是和c.rbegin()所指向的元素是一样的。但是c.rbegin()不能assign给_pos[id], 因为他们的iterator type不一样。_pos的类型是hashmap of <int, list<int>::iterator>, 而不是reverse_iterator.
回复 支持 反对

使用道具 举报

zzgzzm 发表于 2016-10-18 23:02:06 | 显示全部楼层
pinocchio.chang 发表于 2016-10-17 10:37
谢谢谢谢~~看见层主你每次都可以瞬间写出别人面经的code,请教怎么可以练的这么强?

这些多练一下就好了。我觉得这种数据结构设计的题目比算法来说还是有章可循的,毕竟C++ STL提供的就是sequential, node based containers和衍生出的几个adapter.关键是得熟悉每个container的优缺点和常用操作的时间复杂度。因为数据结构设计的题目往往都有很苛刻的performance要求(因为若没有要求的话任何container都无所谓了)。LC上那几个LRU, Randomized set (allow and not allow duplicates), min stack, use stacks to implement queue, etc都很好
回复 支持 反对

使用道具 举报

pinocchio.chang 发表于 2016-10-19 02:25:36 | 显示全部楼层
zzgzzm 发表于 2016-10-18 23:02
这些多练一下就好了。我觉得这种数据结构设计的题目比算法来说还是有章可循的,毕竟C++ STL提供的就是seq ...

感谢大神指导!!
回复 支持 反对

使用道具 举报

fangwei007 发表于 2016-10-19 02:46:28 | 显示全部楼层
zzgzzm 发表于 2016-10-17 09:43
这个按题意应该是LFU with max cache size = 8. 这时每个URL web的访问频率是不断增加的,所以在动态过程 ...

这个题目,我是不是也可以理解是要维护一个size为8的min-heap?
回复 支持 反对

使用道具 举报

zzgzzm 发表于 2016-10-19 04:37:17 | 显示全部楼层
fangwei007 发表于 2016-10-19 02:46
这个题目,我是不是也可以理解是要维护一个size为8的min-heap?

是的。我曾经也想过用C++ priority_queue<pair<string,int>,vector<pair<string,int>>,Comp>来解决,但有一个问题是C++ priority_queue所提供的API很有限,基本上只能push (to end), pop (the top)和访问top元素。不能更改已存的元素,甚至都不支持iterator遍历。所以任何和动态频率相关的设计就不好用priority_queue,因为下一个访问的url很有可能就是目前top 8里的,所以我就用了set,而且时间空间复杂度是一样的。
这个题就比经典的“find top K largest element from an array”复杂一点(直接用min heap解决),区别就在于经典题中每扫描一个元素时都是一个新的个体,不存在“更新”heap中元素的问题,所以用提供的push, pop, top就足够了。如果这道url问题简化成已经给你统计好的所有<url,freq>pair(不会再更新),然后再让你找出top 8,那么就完全和经典题一样了。. From 1point 3acres bbs

补充内容 (2016-10-19 04:38):
我不熟悉Java,不知道对应的Heap在Java API中是不是有更方便的方法。
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

手机版|小黑屋|一亩三分地论坛声明

custom counter

GMT+8, 2017-6-28 22:26

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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