avatar
bloomberg非典型面试# JobHunting - 待字闺中
b*y
1
两轮电面,今天被拒,我也不知道这算典型还是非典型,写出来大家看看吧。
第一轮:2个老美
先聊project,明显没有兴趣,于是直接开始问题目。
C++问题
1 map and hashmap difference
2 static variable 定义在member function里, is it thread safe
3 exception定义在constructor里会怎么样,定义在destructor 里会怎么样
4 能不能定义an array of smart pointers
machine learning 问题
1. difference between generative and discriminative model?
两种类型给个几个例子
什么情况用generative,什么情况用discriminative model,sample size大/小的话各
用什么
2. 我generative model给了naive bayes的例子,于是接着问我naive bayes的
assumption是啥,回答features are conditionally independent. 接着问现实生活
中assumption不可能hold,为什么还大量使用并且效果不错。到这里我就有点糊涂了,
我回答说A wrong but simple model can work better than a correct but
complicated model, this is the fact of life. 后面又拓展说明了一下这个观点,
但是明显感觉面试官不满。
3. Given a sentence, space全部去掉,挑一个machine learning algorithm 恢复所
有的space,输出likelihood最大的sentence,要求复杂度为O(n). 我平时完全没有接
触过NLP,对HMM和CRF的认识仅限于知道这个算法的存在。后来才知道这个用HMM或者
CRF可以达到O(n),( 这个是因为words的长度不会超过K吗?请有经验的人再具体分析
一下。)总之面试的时候没回答上来,被面试官赤裸裸的鄙视了一番,原话是,HMM都
不懂?那你懂个啥?我顿时无语。
最后问了个不难的概率问题就匆匆结束了
第一轮面完我以为自己肯定挂了,不想还是迎来了第二次面试,我当时就觉得凶多吉少
,估计他们只是想确认我是不是有那么的烂。
第二轮:还是2老美
一上来让我实现一个C++ vector
写完之后问问题
1)为什么我resize要选择*2,我说这是common sense啊。。至于为什么我不懂。。
2)我resize分配空间用 int *a=new int [2*size],他问说这句话有什么memory leak
,我怎么看都看不出来。。然后他提示说调用constructor 会由memory leak,我还是
看不出来。。然后。。就没然后了。。
3) 2*size的时候会有什么exception,我说integer overflow. 他问程序会crash么,
我记得刷leetcode的时候overflow都报错了。。就说会,其实答案是不会...只怪我平
时除了刷题就不怎么写code。。哎!
4)接下来又是各种exception如何处理的问题,而且还重新问了第一轮C++问题(3),到
这里总算能答上点东西了
接下来让我比较了matlab和c++的区别,问了几个操作系统问题,结束。
今早收到了拒信。
感觉我的面试和别人的面试很不一样啊,一道算法题都不问,我眼巴巴的等着他问我算
法题,结果就是一道一道的C++,感觉如果只是面试前突击,死的可能性很大,anyway
,move on了
avatar
M*a
2
请问是new grad么?
投了简历多久收到电面通知啊?
谢谢。
avatar
M*a
3
据我观察。B家电面不怎么问算法。概念的东西多。
avatar
h*d
4
//sigh 我最怕概念了,上面c++ new的时候如果之前不是null需要delete指针释放空间?

【在 M**a 的大作中提到】
: 据我观察。B家电面不怎么问算法。概念的东西多。
avatar
M*a
5
考的也太宽了吧。
HMM
lz是senior的职位?
avatar
w*s
6
1, map是用tree实现的,hashmap是hashmap, query, insert, delete都不一样
2,static不是thread safe的,记得string就是一个例子。
3,constructor抛exception,会导致memory leak,只有constructor完成的才会调用
destructor,否则可能一部分资源没有释放,
比如
A()
{
p = new int[1000];
throw p;
}
p不会被释放。

【在 b********y 的大作中提到】
: 两轮电面,今天被拒,我也不知道这算典型还是非典型,写出来大家看看吧。
: 第一轮:2个老美
: 先聊project,明显没有兴趣,于是直接开始问题目。
: C++问题
: 1 map and hashmap difference
: 2 static variable 定义在member function里, is it thread safe
: 3 exception定义在constructor里会怎么样,定义在destructor 里会怎么样
: 4 能不能定义an array of smart pointers
: machine learning 问题
: 1. difference between generative and discriminative model?

avatar
w*s
7
resize的时候要delete原来的

【在 b********y 的大作中提到】
: 两轮电面,今天被拒,我也不知道这算典型还是非典型,写出来大家看看吧。
: 第一轮:2个老美
: 先聊project,明显没有兴趣,于是直接开始问题目。
: C++问题
: 1 map and hashmap difference
: 2 static variable 定义在member function里, is it thread safe
: 3 exception定义在constructor里会怎么样,定义在destructor 里会怎么样
: 4 能不能定义an array of smart pointers
: machine learning 问题
: 1. difference between generative and discriminative model?

avatar
w*s
8
integer overflow不会抛异常,那个new会抛bad_alloc

【在 b********y 的大作中提到】
: 两轮电面,今天被拒,我也不知道这算典型还是非典型,写出来大家看看吧。
: 第一轮:2个老美
: 先聊project,明显没有兴趣,于是直接开始问题目。
: C++问题
: 1 map and hashmap difference
: 2 static variable 定义在member function里, is it thread safe
: 3 exception定义在constructor里会怎么样,定义在destructor 里会怎么样
: 4 能不能定义an array of smart pointers
: machine learning 问题
: 1. difference between generative and discriminative model?

avatar
j*t
9
machine learning 前两问正好对应两篇paper。
第一篇是On discriminative vs generative classifier: a comparison of logistic
regression and naive bayes.
讲述两种类型model的优劣的,基本结论是discriminative model的error更低但是学习
过程慢,generative model正相反。
第二篇是the optimality of naive bayes,主要讲解为什么很多数据即使不满足naive
bayes的conditional independence的假设学习结果仍然不错。一个主要原因为很多
dependence可能相互抵消。
LZ有兴趣可以看看。
avatar
b*y
10
我当然delete了原来的啊,他是说就算delete原来的,也有Memory leak啊

【在 w********s 的大作中提到】
: resize的时候要delete原来的
avatar
b*y
11
对的,如果constructor没有完成,destructor是不会被调用的,这就有memory leak了
,所以exception要定义在constructor里面

【在 w********s 的大作中提到】
: 1, map是用tree实现的,hashmap是hashmap, query, insert, delete都不一样
: 2,static不是thread safe的,记得string就是一个例子。
: 3,constructor抛exception,会导致memory leak,只有constructor完成的才会调用
: destructor,否则可能一部分资源没有释放,
: 比如
: A()
: {
: p = new int[1000];
: throw p;
: }

avatar
b*y
12
感觉反了吧?我倒是觉得generative model学习过程会更慢,因为你需要 X的
distribution,这个是很难learn出来的。需要data sample足够多,而且过程复杂,比
如HMM,Gaussian mixture model 都比较复杂,但是naive bayes是个特例,因为有
independent 的假设。
第二个问题我面试完也想到了 :P,比如text mining的时候classify text的时候words
independency就可以忽略不计。
他们主要是做NLP的,所以问的问题都往那里靠。

logistic
naive

【在 j*******t 的大作中提到】
: machine learning 前两问正好对应两篇paper。
: 第一篇是On discriminative vs generative classifier: a comparison of logistic
: regression and naive bayes.
: 讲述两种类型model的优劣的,基本结论是discriminative model的error更低但是学习
: 过程慢,generative model正相反。
: 第二篇是the optimality of naive bayes,主要讲解为什么很多数据即使不满足naive
: bayes的conditional independence的假设学习结果仍然不错。一个主要原因为很多
: dependence可能相互抵消。
: LZ有兴趣可以看看。

avatar
b*y
13
哦,我晓得了,他的意思是说,这里要加个catch exception以防bad_allo导致的
memory leak。面试要写那么robust的code啊。。哭了

【在 w********s 的大作中提到】
: integer overflow不会抛异常,那个new会抛bad_alloc
avatar
b*y
14
我申请的是senior的没错,我也想申请junior来着,但是bb和machine learning相关的
职位就只有senior的,木有办法。。

【在 M**a 的大作中提到】
: 考的也太宽了吧。
: HMM
: lz是senior的职位?

avatar
j*t
15
也许是我没说清楚,原话是
The results of the previous section imply that even through the
discriminative logistic regression has a lower asymptotic error, the
generative naive bayes classifier may also converge more quickly to its
higher asymptotic error.
avatar
b*y
16
paper我还没看,但是我感觉是不是算logistic regression PK naive bayes的特例?
可以expand到所有的discriminative 和generative model都有这样的特性么?

【在 j*******t 的大作中提到】
: 也许是我没说清楚,原话是
: The results of the previous section imply that even through the
: discriminative logistic regression has a lower asymptotic error, the
: generative naive bayes classifier may also converge more quickly to its
: higher asymptotic error.

avatar
b*y
17
我不是,简历是别人refer的,refer后不到1小时manager就直接联系我了。感觉他们那
个team很想招人啊,可惜自己学艺不精

【在 M**a 的大作中提到】
: 请问是new grad么?
: 投了简历多久收到电面通知啊?
: 谢谢。

avatar
j*t
18
这种比较很难完全公正,因为据我所知似乎没有同一个模型既是discriminative 又是
generative model,所以没法用完全一样的模型比较,只能用两个代表性的模型来比较
。那个paper比较短,而且比较通俗,LZ可以看看。

【在 b********y 的大作中提到】
: paper我还没看,但是我感觉是不是算logistic regression PK naive bayes的特例?
: 可以expand到所有的discriminative 和generative model都有这样的特性么?

avatar
x*m
19
bb要看那啥3本c++书,比较恶心
avatar
b*y
20
这2种model本身就是完全不同的分类,肯定是没有那个model同属于2类的。但是根据他
们的分类同种model有共性,我的理解是Generative model用的是joint distribution
要take care P(X,Y)所以一般比较复杂,需要数据量大,discriminative model只需要
考虑P(Y|X), 忽略X分布,所以是对问题的简化。并不能说discriminative 的error一
定小之类的收敛更快之类的。但是在数据量小的时候应该是prefer用discriminative的


【在 j*******t 的大作中提到】
: 这种比较很难完全公正,因为据我所知似乎没有同一个模型既是discriminative 又是
: generative model,所以没法用完全一样的模型比较,只能用两个代表性的模型来比较
: 。那个paper比较短,而且比较通俗,LZ可以看看。

avatar
w*s
21
很好奇你的vector是用template写的么?里面放指针的话你怎么处理?

【在 b********y 的大作中提到】
: 我当然delete了原来的啊,他是说就算delete原来的,也有Memory leak啊
avatar
b*y
22
是用template写的,什么叫放指针怎么处理。。?

【在 w********s 的大作中提到】
: 很好奇你的vector是用template写的么?里面放指针的话你怎么处理?
avatar
w*s
23
typedef MyVector MyClassPtrVec;

【在 b********y 的大作中提到】
: 是用template写的,什么叫放指针怎么处理。。?
avatar
f*n
24
弱问哪三本啊?最怕基础题了

【在 x****m 的大作中提到】
: bb要看那啥3本c++书,比较恶心
avatar
T*e
25
之前自以为c++水平还可以,看了lz的面经瞬间明白自己弱爆了。。。。。
avatar
w*s
26
意思是,你erase()或者clear()的时候,要call每一个element的destructor
stl的code:
82 /**
83 * Destroy the object pointed to by a pointer type.
84 */
85 template
86 inline void
87 _Destroy(_Tp* __pointer)
88 { __pointer->~_Tp(); }

【在 b********y 的大作中提到】
: 是用template写的,什么叫放指针怎么处理。。?
avatar
b*y
27
我当时push_back 这个function就写的是
template
1 T * newBuffer = new T [2*capacity];
2 for (unsigned int i = 0; i < l_Size; i++)
3 Newbuffer[i] = buffer[i];
4 delete[] buffer;
5 buffer = Newbuffer;
他说第1行有memory leak。我觉得就是你说如果new T的时候,call T的constructor
fail的话,会有memory leak吧,但是这个细节应该写在constructor里面吧。

【在 w********s 的大作中提到】
: 意思是,你erase()或者clear()的时候,要call每一个element的destructor
: stl的code:
: 82 /**
: 83 * Destroy the object pointed to by a pointer type.
: 84 */
: 85 template
: 86 inline void
: 87 _Destroy(_Tp* __pointer)
: 88 { __pointer->~_Tp(); }

avatar
g*1
28
new 得有try/catch。
avatar
w*s
29
nothrow也可以

【在 g*******1 的大作中提到】
: new 得有try/catch。
avatar
w*s
30
你要把你的push_back()代码贴出来才能判断到底哪里有问题。
不过为啥你用T*,而不是T的array存元素?

【在 b********y 的大作中提到】
: 我当时push_back 这个function就写的是
: template
: 1 T * newBuffer = new T [2*capacity];
: 2 for (unsigned int i = 0; i < l_Size; i++)
: 3 Newbuffer[i] = buffer[i];
: 4 delete[] buffer;
: 5 buffer = Newbuffer;
: 他说第1行有memory leak。我觉得就是你说如果new T的时候,call T的constructor
: fail的话,会有memory leak吧,但是这个细节应该写在constructor里面吧。

avatar
b*n
31
Btw: 应该是不允许explicitly call destructor的吧,用delete就好了

【在 w********s 的大作中提到】
: 意思是,你erase()或者clear()的时候,要call每一个element的destructor
: stl的code:
: 82 /**
: 83 * Destroy the object pointed to by a pointer type.
: 84 */
: 85 template
: 86 inline void
: 87 _Destroy(_Tp* __pointer)
: 88 { __pointer->~_Tp(); }

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。