百度,挂了

百度,挂了,等了很久,还是挂了......

其实能够进面试已经是很幸运了,我至今都不曾知道为什么进面试?难道是笔试卷子没有看完?或者是我的第一题做得很好?不知道,反正是稀里糊涂的进了。

收到拒绝短信的时候,心里面有点点悲凉,仿佛是自己悬在半空中,一根线又断了。还有一点伤感,但是也有一点释怀。。。。

本来我就不是什么技术牛人,只怪自己平时的时间抓得不紧,没有多学点东西,还有就是自己不是技术狂人,不是那么热爱着技术,百度想要的是技术狂人,我不是,被拒了理所应当,就算是我的运气好上天了,真的进了,又能怎样?我不是技术牛人啊,名不副实,强装着自己是技术牛人,也是一件很辛苦的事情。

总算是没白去,GOOGLE,百度我都去了,都进了海选的一关,这样的明星公司,50进20时淘汰了,也算是一点成功了。

总结自己那一天的表现,我无法猜出是哪一点导致了自己被淘汰,不是说往往面试管就看到了一点,然后就刀起头落了么,但我还是要自己找找原因,自己评估一下为什么被淘汰了,也许本来就没有意义,但还是总结一下,找找毛病,算是为以后铺路了。

1。首先是介绍项目,面试官挑的深度包检测这个项目,我应该对这个项目很有感觉,做了很久,还有一些创新成果,软件学报的一篇文章,也许是两位面试官都不感兴趣吧。我自己的感觉是讲的有点混乱,重点不突出,就像一个presentation,没有条理,没有突出重点。

现在想想,这个项目介绍的时候,应该好好理一下思路
(1)是什么? 项目是一个针对于正则表达式的存储优化的算法,传统的正则表达式到DFA的状态空间消耗巨大。
(2)难点和克服的方法?难点是当前的系统为了利用DFA的快速匹配能力,牺牲了存储代价。解决的方法是研究正则表达式的形式和DFA之间的关系,发现了歧义匹配是祸首,通过隔离正则表达式的歧义匹配部分(包括了正则表达式前后和正则表达式之间的歧义问题)达到削减空间的目的
(3)项目的结论和缺陷?通过歧义的隔离,削减了空间,但采用的隔离方法(正则表达式的切片和分群)造成了匹配算法的复杂,切成2片导致需要扫描目标串两次,同时还有组合匹配结果(控制切片数量),算法的核心思想依然是时空代价的交换。

介绍完项目,面试官的第一个问题:百度的服务器遭遇DDOS攻击,该怎么办?
这个问题回答的有点乱,主要是对DDOS不了解,当时和缓冲区溢出说到了一起,可能这个概念不清楚,造成了第一次被被鄙视,毕竟项目上说的还是一个入侵检测的东西,虽然我做的其实是入侵检测中模式串的优化,对实际的攻击行为不是很了解。但是基本的常识应该有,面试官这么认为,现在我也这么认为。

印象中的第二个问题是Linux的rm命令,说是“rm *”在一个文件夹下面有很多文件的时候是删不掉的,有什么办法?
这个问题我没有遇见过,当时有点晕,我提了一个方法,就是SHELL脚本,把文件名全部列出来,然后用循环一个一个删,我认为这是理论上可行的,遗憾的是到现在现在也没有试,然后我又补充了可以用正则表达式匹配的方法,rm是支持正则表达式的,可以模糊删除,这样把文件夹下面的文件一组一组删除,当时这么说是为了和我的项目拉上关系,表示自己对正则表达式很熟悉,结果面试官问我怎么找出文件命名的规律,我就傻了,只好说只能人去看。

上面大概是一些项目的问题,下面就是算法了:
第一个是25匹马选前三名,一轮比赛可以有5匹马,一轮比赛可以得到5匹马的名次,问总共要几轮比赛?

当时我就知道这是锦标赛算法的变形,然后说5组马选出各自的前三名,然后三组在选出前三名,然后两组选出前三名,最后一组选出前三名。

需要的比赛次数5+3+2+1=10轮。
面试官不满意,说优化,我也知道这中间有冗余,可以改进。

我说最初5组马进行5轮,选出各组冠军,然后5个冠军一组选出总冠军(5+1),同时选出总冠军所在组的亚军和其他四组总冠军战胜的组冠军,在一轮选出总亚军(1),然后选择总季军,如果总亚军和总冠军所在同组,选择该组组季军和剩下的四组组冠军比较(1)选择出总季军。如果总冠军和总亚军处在不同组,选择这两组组亚军和剩下三组组冠军比较也是比较一次。
所以总的结果是:5+1+1+1=8
现在想想这个方案应该是最有效的?我记得锦标赛排序似乎不能有更好的优化了。

我想起了面试官的问题:说是如果总冠军和总亚军处在不同组的时候,那么会不会季军比其它组的冠军快。

我不知道这个问题是陷阱还是面试官也犯糊涂了,反正我当时是糊涂了,组亚军一定要比组季军有优先权选择成为总季军,当时没想清楚,还死皮赖脸的搅和了半天。

面试官让我继续优化。现在想想到了这一步应该是尽头了,不知道还有什么更好的办法了。当时应该据理力争,而不是在死缠了优化了,我记得当时很晕的提出第一轮选出各组前三,然后这15匹马分成3*5个队列,取对头选出组冠军,总亚军和总季军。

现在看来这种方法形式不同但结果是一样的?

如果上天有眼,百度的面试官上来看见了我的这番论述,不知会不会提供一个更好的思路,我可以迷途知返。

第一题不难,想来在面试中我也答出了所有的要点,但是我也说了一大堆错误的思路,严重的是思路不清。

当我还在纠缠着组季军的问题时,面试官说出了第二题。

大意是100G的硬盘数据,1G的内存空间(快速),怎么设计Cache的存储,达到系统优化。

这是一个典型的Cache调入问题,主要是关注一下调入调出策略,我说了一个最简单的:热度数据计数法,同时提了两种思路,一种是调出时所有数据热度清零,一种是保持未变动的数据热度。第一种用意是防止后调入的热度数据又被调出,第二种用意是防止之前的数据热度清零后被调出。这两种方案我当时就说了各有利弊,在不同的数据情况下出现不同的系统性能。面试官好心的问,解决方法,我说了一种关于热度计数可以不用线形函数,用一个坡度递减的函数,类似于Log函数,这样后调入的数据如果可以坚持一段时间的访问,热度很快就会追上来了,这样和其他原有数据相比在下次换出时不会出现劣势。到现在我都支持这个想法,不知道面试官有没有同感,当然这比一般线形技术要复杂,函数的选择很重要,但是我觉得这和加密的原理是一样的,我提的这个函数利用初期的复杂很大程度的降低Cache反复震荡,应该是个可行的思路。

然后面试官问了我如果热度数据为1%,Cache装不下,这样普通的算法必然引起Cache震荡,我的解决方案,我说,可以利用虚拟内存技术,总共有10G的热度数据,在硬盘数开辟9G,然后按照以前的算法,当Cache满地时候,将热度数据调出的时候进入虚存空间,同时保留热度计数,保证进入虚存的数据热度高,在以后的调用过程中,在虚存空间中的数据不能换入Cache,防止挤占Cache中的热度数据,出现Cache震荡。当然这中间有很多数据结构,算法方面的细节需要优化,才可以真正发挥虚拟内存的优势,防止Cache震荡。

我记得面试官让我写了一下这个数据结构和算法,我当时有点晕,这个东西写起来好复杂啊,所以我只是说明了一下换出算法,更新热度值的部分,数据结构只是设计了一个标志,计数和原数据指针的问题。

再后面的事情有些记不清了,好像是面试官问我怎么设计这些数据的存放方式,我大概理解了是数据调入Cache是一次存放,还是什么的,就是存储结构中的全互连对应和一一对应的情况,我还是说了两种极端的,一种依次存放,一种Hash值寻找安置槽,前一种每次查找命中数据需要顺序查找,但是调出的数据时全局中最应该调出的,后一种成了查找HAsh,以为了将硬盘分成了Cache大小的段,然后相同Index竞争同一个槽。

面试官说不好,第一种慢,第二种可能换出的结果不是最优的,我也知道。

所以我说可不可以将Cache分成区,一个区对应着一个Index这样可以扩大这个局部最优的范围。

面试官依然说不行,没找到全局最优的,我知道阿,但是我扩大了局部范围,这个已经能够缓解了。

我想保证查找速度和换出最优,只能浪费一点内存,将所有的数据块的一次存放,然后维护一个Hash链,链中拉的数据块的地址,这样的数据结构,只有在换出的时候需要遍历所有的数据块,查找命中时不需要,通过Hash表可以很快找到数据块。更新的时候可能需要更新两个Hash中的地址连,一个是换出的地址Hash值链,删除里面的Hash地址,另外一个是换入的。

我记得好像还要优化,换出的时候查找速度太慢,我说这样只能维护一个换出候选项,这个候选项可以用一个堆来维护,对中的元素包括热度和数据的地址,这样每次更新数据热度的时候,要进行堆的调整。
又是一个空间换时间

说到这里,面试官好像要仔细问,好像是压力测试,反正我已经手忙脚乱了,而且在当时那种情况下,很多细节想不清楚,说不清楚。也许是这一点让面试官不满意了。

时间大约1个半小时,总结整个的过程,我自己的评价是我能够把想到的优化措施都说出来了,但是也有很多言语不清,细节不明的地方,在面试官发问的时候,没时间想清楚,这和我是一个慢热的性格有关系巴。可以这么比喻把,我捧出了一堆珍珠,但是还有一堆沙子。面试官想要我,那么就是看见了珍珠,面试官不想要我就是看见了沙子。归根结底是自己太紧张,不镇静,但是说实在话,我认为自己的表现还算及格,也许Baidu有更合适的人选了。

最后说说自己的情况,我仅仅是一届学生,在找工作之前还有自信心,硕士期间我没有做什么工程项目,我知道那个很重要,但那个不是一个研究生所该为的,即使现在研究生江河日下,大家拼命的往履历上加各种各样的工程项目和各种各样的语言工具的“皮毛”熟悉,却忘了头顶上的“研究”二字,忘了自己应该针对一个问题有一点深入的认识。我不认同这种行为,我觉得研究生要名副其实,不是一个较本科生更熟练的熟练工而已,所以我研究生期间抓住了一个问题,深入研究,发了一篇《软件学报》的文章(不是那种凑数的,确实是发现了东西,提出了东西,试验了东西的),当然,我也付出了代价,实际工程经验不足,不会当前的那种最新最炫的工具,我做的东西虽然不是理论研究,说真的,硕士研究生出去千万别说自己搞偏理论研究的,扪心自问,你2,3年能搞出什么?我做的还是一个比较前沿的工程中的一个核心关键问题,我也在这上面得到了一个结果。这就是我自己的总结。

其实,今天收到百度据信真的很难过,倘若有哪位百度的达人看了这篇文章能不能指点一下,我虽然不自信自己可以一路过关斩将,其实第一关已经很紧张,但是不至于这么快吧,难道传说中的牛人真的这么多?写了这么长,主要是纪念自己在找工作到现在第一次真正意义的失败,SLB被鄙视实在是无头冤案,也许他们真的要找合适的人。在我人生的第一次转变过程中,必然要遭遇各种各样的风刀雪剑,愿自己快快成熟起来,快快被OFFER压死。真诚的祝福自己前行的路上一切顺利。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值