在tianya上看到一兄弟的面试经历,很有趣,当然回帖更有意思,哈哈
前段时间,也就是6月12日我去三星面试了一次,经历很有趣。
事情是这样的,我是个在多媒体方面有专长的人,具体的说,在视频编解码和计算机视觉这两个方面算是有点心得。4月份我的简历被猎头搜到然后给了3星。于是5.12参加了dtv和mobile的面试。面试过程很简单,谈谈自己做过的项目,我估计正常的面试都是这样。但是我主要谈的是我在项目中表现出的创新能力和效果,我在面试的时候告诉这两个老大,我喜欢做些带有研究性质的东西,而且我也很为自己的创造性以及善于运用理论来化解难题的能力自豪。那两个人很坦率的告诉我他们这边不可能让我做什么研究的,按期完成项目才是王道,并且建议真的有想法有能力就去高校做研究吧。我也很坦率的说,反正我在南京也找不到研究性质的工作,而且是老员工了,看得开,所以只要给我20万,让我做什么都可以。然后我就闪了。
但是后来3星又通知我5月28日来参加第二次面试。不过那天只有人事科长还没下班。他告诉我来早了一天,我为我记错了面试日期道歉,其实我并不确定。然后他告诉我数字电视(或者iptv,我记不太清楚了)的老总对我的简历感兴趣,正在考虑能让我做什么研究,因为我虽然表现出了这方面的能力,但是与他们的方向不吻合,因为他们需要做机器翻译之类的研究,所以他要好好考虑一下如何才能与我长期合作。并且说他们的研究机构叫中央研究院或者中心研究院,具体我忘了。让我回去等电话,并说明天李洋就会通知我下次面试的时间。
谁知等到6月11日也没消息,于是就打个电话给李洋,问她为什么没有在上上个周四联系我,是不是有什么变故了?李洋说,那就安排在6月12日的5点吧。我当时就想,这个hr应该不会忘了给我打电话的,还是他们自己觉得不好安排,无法给我打电话,所以我去了也是死多活少。再说自己也不适合做纯粹的理论研究,一来学历低,知识上还是有不完备的地方。二来自己的长处还是在做项目的时候发现问题,然后再针对这个特定问题建立数学模型,最后推导出结论的。这与纯粹的研究差别不小。但是又一想,好歹也能见到iptv的头头,算是高层对话了,上档次,能长经验值的;再说在现在的公司也实在呆不下去,出去溜达一圈也好。
6月12日我见到了李洋,笑嘻嘻的很漂亮的姑娘,穿着一身黑裙子。她向我道歉,说我上次来了结果人家下班了,害我白跑。还说面试我的人是什么什么的,大概类似于技术总监这样的吧,反正没听清。因为我本来就没预计过好的结果,所以就板着个脸,现在连高层对话都没了,都不知道自己干吗要来,脸就更加黑了。不过李洋倒是一直笑嘻嘻的,把我领了进去。于是就开始了这场很有趣的面试。现在想,前一天如果直接打给人事科长是不是会有不同呢?
他,你工作了再去读研,不成功的人才会重新设计自己,对吧?
我,是是是。
他:你都做过些什么?
我:blabla。。。
他:stop,我问你的技术专长是什么,编解码,dsp优化,图像分析。。。?
我:编解码(dsp优化,计算机视觉)。打括号是因为此人非常善于打断别人的话头,所以括号里都我要说但还来不及说的话,下同。
他:你小心点,你说哪个是你的专长,我就会从这个问下去。
我:那你就问吧。
他:是编码还是解码?
我:编码。
他:熟悉哪几个标准?
我:jpeg,mpeg-4都做过实现,h。264看过白皮书。
他:只看过白皮书也算吗?
我:无语,他这样说也算有道理。
他:mpeg-4做过哪些优化?
我:DCT,ME,写码流。
他:那你谈谈码率控制吧。
我:我没做过码率控制啊,我说的是写码流,就是说我写码流的速度比较快。
他:怎么才能快呢?
我:思索了一下,想告诉他在DSP的8个执行单元上,如何排列指令和数据的打包和对齐方式才能最大限度的提高速度,结果还在幸福的回忆我最终达到的优化效果的时候,就被stop了。
他:stop,谈谈你做过的其他优化。
我:剩下的就是dct和me了。dct的优化在于找到那些不用计算的0系数,(me的优化在于减少sad计算次数,但是效果不变)。
他:stop,你是如何优化dct的?
我:如果sad值很小的话,变换后的系数量化后就全是0了。但是符合这种情况的dct很少,所以我的主要工作就是找到按zigzag排序后,从哪个位置开始,dct系数几乎全为0,(以及如何利用这一特点简化计算)。
他:stop,就是说你的方法是全0块判决?
我:也不是全0块吧,这种情况是很少的。我是判决出部分0系数的起始位置(以及如何只计算排在前面的几个非0系数)。
他:stop,不就是全0块判决嘛。
我:无语,尴尬的笑笑(唉,你说什么就是什么吧。)
他:你觉得me最花时间的部分在哪里?
我:sad
他:还有呢?
我:me不就是在做sad吗?(结果他后面问分数像素插值,看来这是他看中的答案)
他:谈谈你的插值是怎么做的。
我:mepg-4用的是6抽头插出1/2像素,再用4抽头插出1/4像素。
他:你用的是6阶滤波插出1/2像素的?
我:嗯,标准就这么规定的。
他:6阶滤波为什么好于4阶滤波?
我:。。。,我以前也想过这个问题,在网上找过,但是记不得了。(实际上是那个答案不让我信服,所以我忘记了,回家后我想起来了,是说6抽头更平滑了,但是这不等于更模糊了吗?为什么就能匹配的更好呢?后来我在网上找到了正确的的答案:6抽头的低通效果优于4抽头的,也就是能减少信号混叠现象)
他:插出来的图像是如何存放的?
我:我看得开源代码是分四块存放的,原始图像,插出的右边,插出的下面,还有个斜下,我还比划了一下。他好像对这个答案不满意,又问了一遍,我又重复了一遍,于是他放弃了。
他:分数像素搜索为什么优于整像素搜索?
我:因为整个sad的分布像个开口向上的锅,而最低点很可能在分数像素处。
他:似乎对这个答案不满意。
我:于是换个角度说:“因为这等于作了一次滤波,更平滑了,降低了噪声。”
他:你用的me算法是什么?
我:嗯。。。,菱形算法,一边用手指头比划一边回忆,对了,是大小钻石算法。(就是说先搜索大钻石,找到最优点后,再用小钻石再搜索一遍)
他:stop,是菱形?那你说说起始点是顶点还是中心?
我:说实话我没听清楚题目,不知道他问的是mv对应的像素点还是钻石算法的搜索步骤,这两个都有顶点和中心。但是我有挫折感,觉得和他交流很难,不想再问他,就含糊的说,这个无所谓吧,反正一一对应就好。
他:所以我认为你对视频编码的理论一知半解,但是在实际工作中利用开源代码做了点研究?所以你看我尽量避免问你理论问题。
我:为什么这么认为?
他:你要我证明吗?
我:嗯。
他:好的,为什么视频编码用DCT而不用kl变换也不用付立叶变换?
我:因为kl虽然效果最好,但是很复杂;而dct是效果仅次于kl的。付立叶变换有正弦也有余弦,而图像总是平滑的,只需要是偶函数就余弦可以了,正弦不适合。说完我还用手比划了几个正弦波形,示意它们与图像的偶函数波形是有区别的。
他:所以说你一知半解,每个问题你都答对一半。kl效果最好,但是无法应用在图像编码里。(但是我明明记得8年前老师花了一节课介绍2维图像怎样计算kl变换,还计算对角阵什么的,后来我看书也有kl变换曲线最优的图表)付立叶变换有正弦,会带来噪音,图像只要偶函数就行了。至于为什么正弦在图像变换里会带来噪音,你自己回去查书,其实付立叶变换速度是最快的。
。。。后面那段忘记了,然后就扯到我做的快速yuv2rgb算法,我说我的快速算法针对没有饱和指令,要自己去用if
else把数据限制在0~255的情况,我可以把两端作的饱和变成只做一端的饱和。
他:你在什么机器上实现的?
我:arm9
他:开始扯risc处理器的特点,以及为什么要把浮点运算换成整数运算,在上面做个除法会有多辛苦,应该怎么优化等等。
我:我心里想自己简历上都写了我做过编码器,也说过DSP优化是我强项,这些基本知识我当然都知道。不过为了表现出我比他有教养,我没打断他。
他:内存有多大?
我:几百k吧。
他:都有几百k了还要考虑这个问题?
我:你是说查表?
他:对。
我一下懵了,对啊,为什么不查表呢?不就一下子搞定啦?但是我认为我不可能这么笨,我3年前花了1个月想出来的办法不可能被他5秒钟就识破,而且还是个这么简单的办法。
我:因为表太大了,可能是2的16次方,或者24次方,放不下。
他:怎么可能放不下,你自己回去想。
我:如果你把表缩小,在你算出来的数和你要查的表之间不能一一对应,那你还是需要做判断,再去查表。
他:怎么可能?你自己回去想。
我:不可能的,我的方法是最快的。
他:你自己回去想!
我真的还回去想了一下,真的想起来3年前的思路了。实际上当初做了很多试验,最后发现内存速度才是最大瓶颈,所以尽可能的减少内存访问,以及尽可能的造小表,以便可以放在16k的cache中。因为一旦cache
miss,花费是惊人的,就是不miss,也要花4个周期读入,差不多一次跳转操作了。所以最后只有中间那段乘法加法什么的变成了表,尽可能的把数据打包做成小表,好放在cache里,饱和就想别的办法解决。当时的效果是在moto的一款烂手机上把qcif的yuv2rgb从30ms缩到6ms。然后又在网上搜了一下,还真有把饱和操作也用表来解决的,但是他针对的是rgb666格式,可以缩小输入,而不是我用的rgb888,但是就算那样,他的表也很大。
不知怎么的又扯到了我在me上做的优化。
我:mpeg-4有可能把一个16*16的宏块单独做运动估计,也有可能用4个8*8的子宏块做运动估计,具体用哪个,就看哪个更划算。我在实际的项目中发现用16*16宏块做运动估计的不在少数,所以我做了如何事先发现16*16宏块更有效的优化。
他:不会吧?在嘴唇这样的地方效果就差了吧?
我:你是说运动的边界处?
他:对
我:在边界处当然还是会用4mv来计算的。
他:哦,就是说这也是个判决算法。
我:对。
然后又开始扯别的,我忽然想到,他不会以为我所有的优化都是比比sad值就这么糊弄一下吧?于是又把话题引到这个上面。
我:前后帧之间的关系也提供了当前宏块是否是边界宏块的信息。(比如前一帧对应位置的宏块,以及当前帧的上和左宏块是使用一个16*16的mv还是4个8*8的mv?)
他:stop,你刚才不是这样说的。
我:(哥哥呀,我是没机会说啊)不过我的这个算法主要还是根据高斯分布来判别使用一个16*16宏块的mv是否更优。
他:这个可以用高斯分布来做?怎么做?
我:(他果然不明白我是怎么做的,于是叹口气,重头开始说)mpeg-4有可能把一个16*16的宏块单独做运动估计,也有可能用4个8*8的子宏块做运动估计,(因为16*16的sad是必须计算的,而4个8*8的sad在计算之前是随机变量,所以它们的和也是个随机变量,所以问题就成了在sad16已经确定的情况下,4个sad8是否会超过sad16的概率问题,也就是一个条件概率。而要解这个条件概率问题,应该。。。)
他:stop,我已经知道了。
我:(哥哥呀,就算你知道了,你也要想个办法让我知道你是真的知道了。)一股很强的挫折感再次袭来,觉得做他的小弟迟早会跳楼的,于是再次苦笑。
他:他好像也疲倦了,就叫我写个程序计算一个32位的二进制数有多少个1。
我:写了个最简单的。然后告诉他还可以造个小表查4遍。
他:表示同意,问我还能想到什么。
我:想不出来了。但我认为这个方法可能是最快的方法。
他:未必吧。
回家我一查,还有几种方法,思路比较巧妙,一时可以想到的人应该去google,ms了,但搜集者也认为造表应该是最快的方法。
又出现了个状况,怎么就扯到我在做的物体跟踪。
他:你是做运动物体的跟踪?
我:(这不是废话嘛,如果知道是静止物体,还要跟踪个啥。)对。
他:怎么做?
我:有好多算法,我用的是均值漂移+卡尔曼滤波。
他:不置可否,就这样结束了。
这次面试很失败,主要是我的原因,1来因为别人都说不适合了,我还是主动要求面试;2来因为没什么头绪,不知道这次要面试些什么,所以之前也没准备。最主要还是我不是太适合做理论研究,平时也没注意这方面的积累。我适合面对实际的问题的时候,再去寻找理论支持,可能和3星的要求不一样。但是我认为这个3星的面试官也不算合格,首先很不礼貌,不断的快速打断别人说话,好像是李咏的徒弟;其次很自大,好像我还一开口,他就知道我的方法多傻一样,比如他认为应该造个表来解决饱和计算,殊不知造个小表就要面对额外的计算,造个大表就算放得下也要面对大概率的cache
miss;第三好像研究做得不够多,比如图像问题总可以看成一个概率问题,用高斯分布来解决是最基本的想法,但是他显得吃惊。我个人认为,为了客观公正,面试官应该2人以上。其实他要是真的很牛,有本事在一开始就对我说:“我很忙,所以为了不耽误大家的时间,请你用3分钟来证明自己不适合这里。”在这样的人手下做小弟,应该很痛苦吧,起码整天面对他的讽刺挖苦。有这样的人做领导,还不如有个不懂技术,对你不闻不问的人做领导。
原贴地址:
部分回帖:
作者: 回复日期:2008-6-30 10:55:24 |
|
兄弟,你千万别去给那个小烂国家的企业打工,会被鄙视的.
作者: 回复日期:2008-6-30 20:38:01 |
|
知音啊!!!!你一说我就知道是某人了!!亏好你没来!来了,就跟我一样可怜!鄙人不才就是他下面的小弟。惨啊!这个人其实就是个本科毕业,他懂个屁研究啊!他也就会没事翻翻C语言的书,跟你吹吹书上某个角落他头一天看到的冷僻的知识点,第二天来拽一下。其实什么都不懂!在飞利浦比较能吹,那时候居然被当作苗子培养。后来跳槽到这里来做GL。这种人能接来什么项目啊!你去绝对会被荒废的!还是不要来了!
|
作者: 回复日期:2008-7-2 21:07:44 |
|
楼主真猛,这么多内容是怎么记下来得?我是学计算机的大二学生,不过师兄说的这些东西,除了傅立叶变换外,其它都不知道是什么东西。。。很慌啊,难道自己什么都没学到?不禁再次佩服师兄了!!
|
作者: 回复日期:2008-7-5 13:38:15 |
|
好记性也是智力的一部分吧。wesley2004,如果我们说的是同一个人,那你还是早作打算吧,呵呵。或者你没什么牵挂的话,就去上海北京吧。
|
作者: 回复日期:2008-7-5 13:39:12 |
|
比方说我到现在还记得李洋的黑丝袜,算不算记性好呢?呵呵。