之前参与了一次BAT中A的面试, 前前后后倒腾了差不多一个月,因为在异地参与了1次电话,3次视频,总共面了5轮, 因为在异地,A又在我的老家。想回家的我,满心欢喜的我已经开始准备打包回家了。没想到挂在了倒数第二轮的总监面上,艹艹艹, 你是在逗我吗? 心里有点愤愤不平, 所以有了这篇记录。后面我会详细说明是怎么挂了。
先听我絮叨絮叨, 本人在IT行业,摸爬滚打已经历经了十一年。前前后后也是呆过不少公司。BAT 也经历了两家。我属于不太善于讲故事的人 , 每每到了啥面试,晋升答辩的时候都挺吃亏的。世界往往是这么奇妙,同样一样事情通过两种人说出来, 可能是截然不同的效果。
常见的问题:
> 你这个东西技术难点在哪里啊
> 你觉得你做过最难的事情是啥
> 有啥让你印象深刻的事情
what fuck。。。等等这个东西也做了,技术也已经了然于胸了,还难吗。。。好吧, 面试过程往往短短30分支到1个小时, 面试官想通过这样的问题,来让他自己相信招你进来不是个祸害。。。所以准备去面试的同学,要常问自己这几个问题。
面试过程一般都很短,你跟面试官又没有过交集, 要凭这些分辨出一个人的水平其实是挺不容易的事情。在BAT中高手如云,有的一手漂亮简历的人到处都是。但是面的好,就真的水平很高吗?
有几个工作中印象比较深的事情
> 在A的时候, 有一次一个部门组长很自豪(想象一下他傲娇的表情, 他现在已经是A里面一个很大事业部的老总了)向我们说明了他部门的业绩。将xxx的性能翻了几翻,然后他讲了里面的优化点,居然是因为把数据进行了压缩......what fuck.....今时今日这个不是常识吗
> 还有一次, 我们在进行一次后端的分享, 由一个很高级别的后端同学讲其中的架构和实现。该同学讲的眉飞色舞的时候, 因为其中有几个组件要交互数据, 有个看过其中代码的同学问了个问题。为啥这两个进程在读写共享数据的时候没看到有任何的进程同步保护。演讲的同学又说了让人掉眼镜的话,没必要加, 我们在测试中没发现任何问题。不用加保护。。。那就只能呵呵了。
因为我不是很擅长和人打交道(搞技术的好像很多都有这个毛病),年纪又大了,记忆力逐年衰退。 以前总结出了一些面试的方法,但是自己也忘记用了。
> 正式开始面试想要去的公司之前, 先面三五个其他公司, 在面试过程中你能发现出你的简历里面的各种问题,以及面试中暴露出来的问题
> fixed掉发现的问题
> 再去投心仪的公司。这样机率会高一些
(总的来说就是不打无准备之仗)
好吧,我们言归正传, 来谈谈这次失败的面经,讲讲最后那致命的总监面。在十几年IT经验里面,我大概搞了有5年的浏览器研发,虽然这次投的不是浏览器的岗位,但是产品底层基于浏览器技术,所以说还算对口。
在这5年里面我也是为了项目呕心呖血, 虽然进B时承诺让我专注的搞内核,但是进来了就是两回事,为了项目一直在整浏览器业务层的特性,但是浏览器的代码我也是看的不少,内核也算是略懂。整体来说花费了大量的精力在里面。因为这次失败,我也打算后面专门写一个专题来介绍,浏览器怎么玩。 算是对自己的一点沉淀吧。
可能我们国人有个特点就是看不起那些做业务的, 而更看中某些搞核心的。so大家一想起浏览器,就问你搞的是哪块业务,搞不搞内核(webkit,V8什么的)。什么整shell层,脸色就不好看了。(让我想起来在A的时候, 我们当时接一个安全组的模块,里面的人都是精英啊精英。但是接入那个模块就是各种的问题,当时有人还拿了代码来看,诶。。。乱七八糟啊,健壮性有很大的问题,虽然里面的人技术很精专,但是做起产品来,唉)
总监面的时候,他问了我如下几个问题:
> 你觉得chrome好在哪里
> 如何超越chrome,怎么做 (总监站的高度就是高啊)
> chrome是开源的, 为何ie 还会被chrome超越
问到第二个问题的时候, 我当时就有点懵了,虽然长期搞过浏览器,但是一直只是想站在chromium的肩膀之上,搞出更好的产品,用户体验啥的。这个问题还真没想过。为了不体现自己弱势就瞎鸡巴乱答了,然后就悲剧了。
其实事后冷静想想这些问题, 也不是不好答, 就算这个问题你可能答不了,但是也是能分析一下的,分析的这个过程是比较重要的。主要也是让面试官看到你有这个分析能力,有些东西可能要长时间思考才能想明白。其次那个总监也不懂技术, 吹大一点,其实也什么。。。技术男的悲剧啊
我们就先简单分析分析为啥ie会被chrome超越:
1. 改革
ie作为一款先存在的浏览器, 随着it业的不断发展,其实自身是有很多问题和局限性,但是ie一直走老路子,没有从根本上改进它。chrome也是分析了目前浏览器存在的问题( 比如ie一崩溃就整个程序没有了, 网页的安全性问题 , js性能慢)进行了改革(也是我们常说的创新,微创新),由此chrome 08年出道的时候,自带其他所有浏览器没有的特性(多进程 , 沙盒, v8), 也是重新搅了浏览器的市场。
2. 持久力
当时chrome 08年刚出的时候,其实实现的还是有各种问题, 记得我第一次用的时候,chrome各种崩溃,卡死。然后我还嘲笑它,什么鬼东西。然后就把它卸载了。 等10年再用的时候,chrome的产品体验已经做好很高了。果断抛弃了原来的旧爱(人就是这么见异思迁)
从代码层面上来看, google 对chrome的投入很大, 我11年的时候曾经统计过当时chrome的研发人数,从svn日志上统计(带谷歌官方后缀的,一个月里面累计提交代码测试超过一定数量的)大概有3,4百人。相对于国内厂商的几十号人的团队。规模不是一个级别。
其他也是我认为比较可怕的地方,老外一直在重构,改进整个项目的代码。整个代码,大概过几个版本,虽然总体原理是那样,但是整个代码可谓是翻天覆地。曾经我们有个同事想优化我们的浏览器性能,思来想去不得,然后去翻了一翻最近chromium的svn日志。。。跟踪了chromium里面有个优化人员的记录。。。最后有了,重大突破,妥妥的升级加薪
我们还停留在,不用修改的代码是最好的代码。。。能少改代码就少改代码的阶段。印象比较深的是有一次,跟踪一个匪夷所思的线上崩溃问题,那块代码前前后后的逻辑翻了个遍,觉得实在不可能崩溃,QA也无法复现这个问题。 然后就加日志,放到线上去收集,再跟踪,前后跟了一周多。领导下了死命令,改完才能回家的情况下,半夜4点还是5点,找到原因了。因为对那块已经很熟了, 我整了一个修改方案,可以彻底搞定其中的问题。然后领导过来一看, 艹,改了这么多,我跟他讲了详细的方案,他还是觉得不行风险太大,问了我其他解决办法没有。 我想了下,最后加了一行判断代码了事,虽然问题是没了,但是只是避过了而已。
所以虽然我们可以拿到它的源码,但是当你搞懂了其中的原理,人家已经进入了下个阶段了。空中飘来了那句话“实话说,在座的各位都是垃圾“
3. 升级
ie 产品升级很麻烦,想装个新版,这失败那失败的。一会要装.net库,一会受系统版本限制。所以一般很少会去做升级。不是有个说法自从360自带ie8内核,终于把中国的ie6给消灭掉了(FE同学流下了感动的泪水)
或者换句话说,软件更新升级一直是各个产品很头大的一样事情,常见做法是弹个框告诉用户,产品升级啦,需要安装新版本啦,让用户自己去选。而chrome是怎么做的呢, 后台自动升级, 用户不需要进行任何操作, 就可以实时的保持最新版本。这个虽然不起眼,但是很了不起的。他也因为这个特性,重新设计了自己的安装目录(但是就算是今天,也很少有产品,能做到它这样)
一个产品要是停止维护了,不更新了,即使现在产品再好,也迟早完蛋。
好吧就简单说到这里, 再说下超越的话题, 超越其实也不是无法做到,单从某些方面来说我们的有些特性是超过chrome的。但是国内的厂商们,基本上都很心浮气躁,动不动就想着赚钱。也不肯放大人力来投入,基本上是一群刚入行的pm,领着一群rd,qa每天瞎忙活,最后看不到效果,上面领导一看,砍了吧。看过一篇chrome开发人员的采访,里面说了谷歌从打算做chrome,到真的产品上线花了5年时间,chrome部门也是汇集了各种浏览器的专家和行业精英。。。就这个时间试问在国内哪个公司受的了。
还是分析一下超越:
1. 我也不知道咋全面超越chrome, 单就他现在处于领跑者的地位,实际的标准制定实施者,超越。。。
2. 但就分析而言,首先超越的话, 你要分析出这个东西现有的短板在哪里,然后再针对其考虑解决方案,未来的发展趋势。 然后对目前现有的方案,要有个全面的了解,不然做出个东西解决了前面,屁股着火就不好了。
比如说就下载而言, chrome就是单线程的, 下载文件他只会线性的去下载。所以只要把下载整成并发的,再做个云加速或者p2p加速啥的,就下载功能而言是大大超越了chrome. 再比如网页加载,受网络环境的印象,我们单就加一个CDN, 整体的速度也能提高很多。
就写到这里吧。也是发发牢骚,今天外面天气也不错,出去爬个山,散散面试郁闷的心情。