b********y 发帖数: 559 | 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了 |
M**a 发帖数: 848 | 2 请问是new grad么?
投了简历多久收到电面通知啊?
谢谢。 |
M**a 发帖数: 848 | |
h*d 发帖数: 19309 | 4 //sigh 我最怕概念了,上面c++ new的时候如果之前不是null需要delete指针释放空间?
【在 M**a 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 据我观察。B家电面不怎么问算法。概念的东西多。
|
M**a 发帖数: 848 | 5 考的也太宽了吧。
HMM
lz是senior的职位? |
w********s 发帖数: 1570 | 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 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 两轮电面,今天被拒,我也不知道这算典型还是非典型,写出来大家看看吧。 : 第一轮: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?
|
w********s 发帖数: 1570 | 7 resize的时候要delete原来的
【在 b********y 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 两轮电面,今天被拒,我也不知道这算典型还是非典型,写出来大家看看吧。 : 第一轮: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?
|
w********s 发帖数: 1570 | 8 integer overflow不会抛异常,那个new会抛bad_alloc
【在 b********y 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 两轮电面,今天被拒,我也不知道这算典型还是非典型,写出来大家看看吧。 : 第一轮: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?
|
j*******t 发帖数: 223 | 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有兴趣可以看看。 |
b********y 发帖数: 559 | 10 我当然delete了原来的啊,他是说就算delete原来的,也有Memory leak啊
【在 w********s 的大作中提到】![](/moin_static193/solenoid/img/up.png) : resize的时候要delete原来的
|
|
|
b********y 发帖数: 559 | 11 对的,如果constructor没有完成,destructor是不会被调用的,这就有memory leak了
,所以exception要定义在constructor里面
【在 w********s 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 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; : }
|
b********y 发帖数: 559 | 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 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 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有兴趣可以看看。
|
b********y 发帖数: 559 | 13 哦,我晓得了,他的意思是说,这里要加个catch exception以防bad_allo导致的
memory leak。面试要写那么robust的code啊。。哭了
【在 w********s 的大作中提到】![](/moin_static193/solenoid/img/up.png) : integer overflow不会抛异常,那个new会抛bad_alloc
|
b********y 发帖数: 559 | 14 我申请的是senior的没错,我也想申请junior来着,但是bb和machine learning相关的
职位就只有senior的,木有办法。。
【在 M**a 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 考的也太宽了吧。 : HMM : lz是senior的职位?
|
j*******t 发帖数: 223 | 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. |
b********y 发帖数: 559 | 16 paper我还没看,但是我感觉是不是算logistic regression PK naive bayes的特例?
可以expand到所有的discriminative 和generative model都有这样的特性么?
【在 j*******t 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 也许是我没说清楚,原话是 : 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.
|
b********y 发帖数: 559 | 17 我不是,简历是别人refer的,refer后不到1小时manager就直接联系我了。感觉他们那
个team很想招人啊,可惜自己学艺不精
【在 M**a 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 请问是new grad么? : 投了简历多久收到电面通知啊? : 谢谢。
|
j*******t 发帖数: 223 | 18 这种比较很难完全公正,因为据我所知似乎没有同一个模型既是discriminative 又是
generative model,所以没法用完全一样的模型比较,只能用两个代表性的模型来比较
。那个paper比较短,而且比较通俗,LZ可以看看。
【在 b********y 的大作中提到】![](/moin_static193/solenoid/img/up.png) : paper我还没看,但是我感觉是不是算logistic regression PK naive bayes的特例? : 可以expand到所有的discriminative 和generative model都有这样的特性么?
|
x****m 发帖数: 1084 | |
b********y 发帖数: 559 | 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 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 这种比较很难完全公正,因为据我所知似乎没有同一个模型既是discriminative 又是 : generative model,所以没法用完全一样的模型比较,只能用两个代表性的模型来比较 : 。那个paper比较短,而且比较通俗,LZ可以看看。
|
|
|
w********s 发帖数: 1570 | 21 很好奇你的vector是用template写的么?里面放指针的话你怎么处理?
【在 b********y 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 我当然delete了原来的啊,他是说就算delete原来的,也有Memory leak啊
|
b********y 发帖数: 559 | 22 是用template写的,什么叫放指针怎么处理。。?
【在 w********s 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 很好奇你的vector是用template写的么?里面放指针的话你怎么处理?
|
w********s 发帖数: 1570 | 23 typedef MyVector MyClassPtrVec;
【在 b********y 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 是用template写的,什么叫放指针怎么处理。。?
|
f******n 发帖数: 279 | 24 弱问哪三本啊?最怕基础题了
【在 x****m 的大作中提到】![](/moin_static193/solenoid/img/up.png) : bb要看那啥3本c++书,比较恶心
|
T******e 发帖数: 157 | 25 之前自以为c++水平还可以,看了lz的面经瞬间明白自己弱爆了。。。。。 |
w********s 发帖数: 1570 | 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 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 是用template写的,什么叫放指针怎么处理。。?
|
b********y 发帖数: 559 | 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 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 意思是,你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(); }
|
g*******1 发帖数: 103 | |
w********s 发帖数: 1570 | 29 nothrow也可以
【在 g*******1 的大作中提到】![](/moin_static193/solenoid/img/up.png) : new 得有try/catch。
|
w********s 发帖数: 1570 | 30 你要把你的push_back()代码贴出来才能判断到底哪里有问题。
不过为啥你用T*,而不是T的array存元素?
【在 b********y 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 我当时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里面吧。
|
|
|
b*******n 发帖数: 847 | 31 Btw: 应该是不允许explicitly call destructor的吧,用delete就好了
【在 w********s 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 意思是,你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(); }
|