一亩三分地论坛

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

扫码关注一亩三分地公众号
查看: 624|回复: 2
收起左侧

Bloomberg senior application 电面+onSite

[复制链接] |试试Instant~ |关注本帖
dg7743 发表于 2015-10-1 08:09:00 | 显示全部楼层 |阅读模式

2015(7-9月) 码农类 本科 全职@Bloomberg - 猎头 - 技术电面 Onsite |Fail在职跳槽

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

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

x
Bloomberg 电面+onSite
电面一
白人面试官
平台HackerRank
Bloomberg
简介我自己
问题一
n factorial, LintCode/LeetCode原题
我只是写了一个很粗糙的recursion的解法,就直接过了,算是热身吧
问题二
Implement C++ vector class
一上来要求写constructor,destructor, push_back
解决后,要求overloading[] operator
这个问题其中还会考到template
电面二
印度面试官
平台HackerRank
本来是约的9/11早上,面试官病了,又过了半个星期补上的。
问题一
Reverse Integer, LintCode/LeetCode原题
还是热身题,没有写完就moveon
问题二
String compression, 就是abbcccto a1b2c3的问题
onSite
两个印度面试官
先问我做过最有意思的project是什么
年轻的,应该算是shadowing的给的问题是
2 sum, 不过tagert等于8,且要返回first pair,给的inputarray没有duplicate
Follow up: 让我说些testcase
其中他问我题干告诉你noduplicate,那你的test case要不要测试包含duplicatearray
我说要,然后他问我怎么检测duplicate
之后又问了问runtime
岁数大一点的面试官,给我现出了一道系统设计题
有一个进程p0不停的往一个memory region 里写数据,这个memory region不大,每次写入的数据大小是不定的。
有三个进程p1,p2,p3,都从这个memory region里读取数据,p1把读取的数据写入数据库,p2把读取的数据进行转换,p3把数据显示出来。(这个条件说明,三个进程的读取速度是不同的)
我最终给的答案是首先把这个memoryregion视为一个circular buffer
然后我们有一个table来管理这个memory regiontable里每一个entry包含了startaddr, size, 还有一个counterStart addr就是某个frame的起始地址,size就是某个frame的大小,counter是用来syncp0, p1, p2, p3的。具体为p0每次写入时修改这个table,设定start addr, size, 并把counter设为3,每一个读取进程都通过这个table来读取memory region里的frame,读完了之后就--counter,并跳到下一个tableentry。当counter等于0时,这个entry所对应的frame已经没有用了,我们就可以覆盖了。
大概思路就是这样。但这个问题其中还包括很多小问题,包括multiprocessmulti threads的区别,IPC都有哪些方式等。
第一轮结束,感觉还不错,面试官走时还说hopeto see you soon
onSite
一个白人主面试官,一个印度shadowing
先问我做过最有意思的project是什么
印度面试官给的是Reversewordshello world to world hello
主面试官又是现想了一道题
有不断incoming的数据,数据格式如下
首先有一串string类似于foo/bar/baz......, 这段descriptionstringhierarchic, foo只要出现就肯定在bar的前面
然后又有一个map类似于
{
“field1”, “val1”
“field2”, “val2”
“field3”, “val3”
...
}
现在usersubscribe特定的incoming data
首先如果userpreferencefoo的话,这个user就会接收description stringfoo/bar/baz或者foo/bar或者foo的数据
如果userpreferencefoo/bar的话,这个user就会接收description stringfoo/bar/baz或者foo/bar的数据,但不接收foo的数据
换句话说如果userpreference incomingdescription string的子集的话,user就会接收相应的数据
在此之上user可以选择具体接收map里的那些数据,比如如果user只需要field1field2的话,那返回给usermap就只包括field1field2,有点儿类似于SQL
然后他让我design 一个class实现上述所有需求......
这道题确实有点儿绕,解释起来都有点儿费尽。这个class需要存储些什么,并提供什么样的interfacefunction我就不说我的当时的答案了,这里给我最后想到的逻辑方案来处理这个问题。
如果我这把每个userpreference都当作一个entry存储到一个table是可行的,但这样效率很低。如果user很多的话,table会很大,而且如果incoming description很长的话,我们每次都要跟每一个usersubscription比较,很费时。
因为descriptionstringhierarchic的,我最终想到可以用一个类似Trie的结构:
Foo
/
Bar
/
Baz
Foo的这层存储所有只subscript Foouser id
Baz 的这层存储所有subscript Foo/Bar/Bazuser id
这道题确实是很繁杂,如果我解释的不太清楚,大家自行体会一下吧
最后shadowing的印度小哥问了我singleton class的问题,从这道题开始,我就开始悲剧了...
这道题lintcode上是有原题的,我觉得这个太language specific了,就没有重视。
我给出的答案是类似
Singleton* Singleton::getInstance() {
    Lock lock;      // scope-based lock, releasedautomatically when the function returns
    if (m_instance ==NULL) {
        m_instance =new Singleton;
    }
    return m_instance;
}
每次都要lock, 这个方法在mulitthreading 中是很time consuming的。
真正正确的解法大家google一下吧。
然后真正的nightmare来了,主面试官问我new throwexception怎么办。
我说那就
Singleton* Singleton::getInstance() {
Locklock;      // scope-based lock, releasedautomatically when the function returns
try {
    if (m_instance == NULL) {
        m_instance = new Singleton;
}
} catch(...) {
...
}
    return m_instance;
}
他说那我们在catch中需要delete m_instance
我说new是先malloc一个地址,再call constructor,所以即便constructor throw exception了,我们还是要delete。他又问如果exceptionbadalloc? ......
午饭
到第二轮结束的时候,我还是挺自信的,除了一些C++specific的问题答得不好,我觉得别的问题都还是不错的。大家可以看出来,shadowing的面试官都是问的比较简单,而主面试官问的都是现想的.....还都喜欢问whyBloomberg
本来面试就两轮,但是HR说希望让更多的team member见见我,所以下午又加了一轮,中午让一个中国前辈带我去吃午饭。我当时心就慌了,我觉得这说明,他们喜欢我,但肯定觉得我有不足的地方,希望通过加试一轮再考考我。
吃饭时,中国前辈说我上午的feedbackproblem solvingsystem design都很强,但有些c++相关的地方可能理解的不对。
这里插一下我的背景,我本科方向是softwareengineering用的都是Java,毕业后干了2年半embedded developer,一般开发都是C/C++混用,所以C++有些OO的特性像是polymorphism平常并不会经常用到。面试的职位是R&Dsenior developer,而面试之前,我以为Bloomberg毕竟是个大公司,应该不会问特别languagespecific的问题,而且坊间传闻它的面试难度是第四等的,所以我也没有准备C++方面的问题。
其实,现在想想,午饭时,中国前辈有不停的问我,你平常搞开发其实更常用C吧,可能他也是好心的在暗示我,不要在C++方面那么自信。唉,现在醒悟为时已晚。
onSite
这一轮来了两个更senior的面试官,一个白人,一个印度人,两人都很严肃,氛围整个就跟上午不一样了。
还是先问我做过最有意思的project是什么
先说印度人的问题就是常看到的kmost recent stocks的问题。Hashtable+ doubly linked list解决。
白人面试官在问我问题之前,还特意问了我一句,你的主语言是C++吧。我还傻乎乎的说是。
然后就拿出一沓儿纸,从中抽了一张,让我手写出所有的output,我尽量还原一下这个问题:
class A {
string str;
public:
A(string s): str(s) {cout<< “A()::”<<str<<endl;}
~A() {cout<<”~A()::”<<str<<endl;}
void foo() {cout<<”A::foo()”<<endl;}
virtual void bar() {cout<<”A::bar()”<<endl;}
};
class B: public A {
string str;
public:
B(string s): A(s), str(s) {
A(string s): str(s) {cout<< “B()::”<<str<<endl;}
~B() {cout<<”~B()::”<<str<<endl;}
void foo() {cout<<”B::foo()”<<endl;}
void bar() {cout<<”B::bar()”<<endl;}
};
static void func(A param) {
A.foo();
A.bar();
{
auto_ptr<A>ptr(new B(auto_ptrB));
ptr->foo();
ptr->bar();
}
}
int main() {
B b(“mainB”);
A *a = &b
a->foo();
a->bar();
func(b);
}
其中还让我解释一下virtual的作用和原理。
原问题比这个还要复杂一些,大家体会一下我当时的心情吧......
第二天就告诉我结果了,悲剧了......

评分

2

查看全部评分

 楼主| dg7743 发表于 2015-10-1 08:13:26 | 显示全部楼层
直接粘贴的word文本,空行和空格都没了,大家凑合看吧
回复 支持 反对

使用道具 举报

rufa 发表于 2015-10-12 10:42:46 | 显示全部楼层
感谢LZ分享!我下周三要去onsite,虽然我是new grad而且主Java,但看了LZ帖子以及众多BB面经帖顿觉这公司要求不低啊。。不说了尽力准备去了,争取不留遗憾吧
回复 支持 反对

使用道具 举报

本版积分规则

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

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

关闭

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

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

custom counter

GMT+8, 2016-12-9 02:15

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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