阿里笔试题战士传信问题

Q: 战报交流:战场上不同的位置有N个战士(n>4),每个战士知道当前的一些战况,现在需要这n个战士通过通话交流,互相传达自己知道的战况信息,每次通话,可以让通话的双方知道对方的所有情报,设计算法,使用最少的通话次数,使得战场上的n个士兵知道所有的战况信息,不需要写程序代码,得出最少的通话次数。

A:

  1. 分成两组:1) 2个node,2) n-2个node ;
  2. 2个node需要连接1次,使得2个node拥有2个节点信息;
  3. n-2个node至少需要n-3次连接,使得最后连接的2个node拥有这n-2个node的信息;
  4. 第一组的2个node与第n-2组的最后两个node(即获得该组全部信息的2个nodes)分别连接;于是4个节点得到全部信息,连接了2次。这里是为什么节约了一次连接的关键。
  5. 剩下的n-4个node都没有获得全部信息,每个node至少需要一次连接。因此至少需要n-4次连接。用拥有全部信息的其中一个node与剩下的n-4个node连接。则只需要n-4次。
  6. 得总过需要1+(n-3)+2+(n-4)= 2n-4.
    需要注意的是:每次连接有且仅有两个node,即使分成很多组,最终还是归结为两组的形式。

腾讯的加班文化与新存储技术需求

在腾讯的日子,每天都会加班,为的是那顿免费宵夜。但据观察,很多正式员工都会加班,甚至组长happy也是每天基本上晚上8点钟以后才离开公司。可见加班已经形成一种腾讯的企业文化,造成这种文化的原因就是工作一般都得再加上两个半小时的班弄到晚上8点左右才能完成,于是公司才把免费宵夜的时间定为晚上8:10开始。

根据在百度实习同学的说法以及刚从百度回来的实验室师姐的说法,百度加班似乎更严重,一般都弄到9点左右。在腾讯,周六也会有不少人加班。加班产生的原因倒不是员工开发效率低,而更多的是部门交涉导致的资源延迟,而项目工期时间已定,只能加班把等待的时间补上,可见大公司交流成本确实才是最大的问题。但是公司做法也是在鼓励加班,比如百度绩效考核,不考察完成项目数目而以工作时间来计算。腾讯虽然总说不提倡加班,但仍有大把人在加班。

现在腾讯更改了规定,只要加班到晚上8点就可以得到一张宵夜券,第二天在晚饭时间就可以使用。这么一来就不需要为了那餐宵夜而饿肚子加班了,算是有点人性化的改进吧。(2012-12-14 最新修改 new!)

然后说说大公司新存储技术需求,在存储方面,都开始使用大SSD加小硬盘的模式,所以如何使用SSD来优化存储架构是一大需求。腾讯很早就弄出了TFMS和TTC两个存储系统,都有用到SSD作大Cache,前者也需要研究kernal中的调度算法。百度自然也存在同样的需求,同时百度希望把存储设备的cpu充分利用起来,这就要求虚拟化的研发。百度内部采用两套自己封装的传输协议,一个基于RPC,一个基于TCP/IP,在传输包大小与协议栈层次的平衡上也存在可以优化的部分。同时百度新成立了研发内存文件系统的部门,可见这是以后的技术需求方向。

腾讯暑期实习--认识腾讯

本来的提测时间由于后端与无线业务协调的关系一拖再拖,这时才体会到饭席上主管们的话:大公司的成本在于沟通。终于后端与测试号码在最后期限当天搞定,而前端几个重大问题却在这时反馈过来。特别是和内部几个人和主管开会后,才知道一堆规矩,啥wording不按设计稿而是按需求文档来,啥好友克隆不用做了,又得重新改。到了提测当天,下午组里要出去活动,而第二天又是大运会开幕放假,总之是草草的写完提测邮件,自己都发现一堆错误没弄完。

但没管那么多,下午直接去活动,又是打羽毛球又是吃巴西烧烤。第二天背着个书包,直接奔赴香港。到了香港和关东汇合,已经是12点半了,找到房间吃完饭就去转商场。各种粤语听不懂,还好和关东交流没啥障碍。关东反复提及香港没啥玩的,就是来买东西的,可怜本人工资才发10天的,加上路费,没啥闲钱,倒是对不住香港同胞了。而且本人除了吃外,就只有动漫的爱好了,无奈动漫啥的无国界,似乎也不用特地跑香港去买,于是决定买些有趣的零食。香港三日游开始,第一日尽管只有一个下午却最充实。首先是超级牛逼的购物中心,然后是香港历史博物馆,这是一个决定错误,应该去旁边的科技馆估计有趣些。。。再是星光大道,晚上又跑去看维港,最后跑回旺角,各种汉正街的夜市,挂眼科都很爽。第二天跑去坐船,到香港岛上看建筑,然后爬山去看整个香港的风光,时间没安排好,但是让关东破费不少。第三天,跑到电脑城乱逛,接着去又一个便宜的购物中心,买了不少吃的,再次不好意思的让关东破费。欠一屁股人情债才回到深圳,感觉自己光着双手过去又没带足钱,真是失败到极点啊。还好关东铁哥们,以后慢慢补偿吧。关东一家真是够意思啦,对比下来,本人简直就是冷血动物啊。这次是真正感到人间还有温情在的,本人欠缺的就是这种社会知识!

回到腾讯,还得面临技术知识的不足,提测自然一堆问题,这种体验测试自然都体现在前端出问题,啥ie7样式兼容,按钮失效,错误反馈不正确,还好wording没有出错。最后决定把这次提测归类为产品体验。于是再次修改,啥样式,wording,当然还要客户端支持,无线短信下发,im消息同步,各个环节。这时才第一次发现本人加入的真不是个小项目,尽管需要本人制作的,只是个小页面。brad又反映说函数库使用错了,还有有问题要积极与产品反映。反正是各种批评,还好后端也是问题一堆,倒不影响大局。

总结教训后,得出几个经验

  1. 得多用ie hack,写js也不要太在意代码味道,更关键是完成需求;能不能完成需求才是真理,代码味道只是加快开发效率,要是为此思考反而得不尝失;代码结构不好,重构就是啦。
  2. 多和产品交互沟通,有些东西就无法实现,或是实现了效果也不好,这些都得提前说提前打好预防针。类似登陆问题,或是错误wording的问题,都得和产品与交互沟通。开始不知道交互谁负责,所以也存在交流不到位的现象,但关键是本人不够主动。
  3. 多为产品与交互思考。她们思考都比较感性化,很缺少逻辑细节,什么错误提示,跳转样式,等等都没有考虑,这些需要你自己主动提出问题。万不可自做主张,否则出错就得你背黑锅了。也得学会为产品拿主意,你提出意见了,她也就不会又提出新思路新需求啦。
  4. 开发效率较低,特别不能多线开发,这个有待提高。这个项目如此简单,应该可以和其他项目并行推进。在没有工作的时候应该学会去沟通要求,接些好活做。也无需每次有反馈就修改,可以等积累一点工作量后再修改,节约时间精力。
    总之是完成需求为第一要务,接着是学会讨价还价,找准最好的实现方式。这就要求不仅从技术方面考虑,还得从用户从产品从交互方面考虑,及时反馈,学会为自己要资源。

腾讯的这种开发模式感觉是仍然小作坊式的,与原来不同的在于交互,产品,测试有专人负责,虽然开发起来舒服,但效率有影响,测试覆盖率与正确性也很难保证。所以才有了多次迭代,这也就解释了腾讯这种开发模式却很少出错的原因,因为每次迭代后都有测试,出错后再修改再提测,用次数来保证质量。但是啥小步改进多次迭代,还称之为敏捷,感觉有点无语。。。倒是后端一些测试平台比较有敏捷的样子。
之后集中精力和产品确认流程wording,与交互确认样式,修改样式。好不容易全部弄完之后,考虑到重绑流程,又有流程修改的问题。还发现交互也有规范需要遵守,啥投影效果,啥弹窗出现的样式都得遵守。于是再次重新修改。组长一直强调本人沟通不主动,他总会关心是否有问题没有解决,无论什么问题,只要提出,他都会去安排解决。这点比实验室的环境就好太多了,研究生实验室导师从来不闻不问,提出问题也只有空头陈诺,有时甚至解决不如不解决。可能公司就是讲究效率吧。

香港回来后,公司又安排出去旅游,还是三日游。回来后第一天,体力都有点透支,但是很开心,可以说在腾讯实习的这个暑假是本人一生目前为止最快乐充实的一个暑假。腾讯的这些人性化服务让本人忘掉了实验室的一堆不愉快,让人确实感到腾讯确实是很有诚意的一个公司。

部门的前端方向还在发展中,目前没有什么大项目可以孵化,如果能把Q+弄到手,那自然会有很大的发展,但根据定位估计比较困难。个人觉得这个组在3-5年内很难有大的变化,组内也没啥沉淀,故而觉得还是实验室能学到更多东西,只希望实验室能对待本人好点,不过研究生就是得过苦逼的生活啊。

技术能突飞猛进,关键还是看导师。散伙饭上高管劝本人留下来别去读啥研究生啦,但是本人在公司的技术方向上没有导师没有好的项目,结果估计也够呛,但是人生的发展也不是光靠技术。进入公司的时间与机遇也是很重要的,腾讯的三年肯定能遇上很多项目,这三年内如果能碰上好的项目,在事业上或是技术上,那肯定比读研要有利的多。这就是一场博弈啊。

最终还是选择离职去读研,只是考虑这样会有更多选择的机会。离职前,提测了注册的页面,页面问题上没出啥问题了,倒是测试人员在用户体验细节上提出了些要求,什么选择框默认显示的条目项数,什么选择框出现的方向,确实让人印象深刻。腾讯对用户体验的要求是怎么深入到员工的工作中去的,以致产品,交互,测试都在思考用户体验的问题,这也确实是个有趣的值得学习的问题。

如何回答测试人员也是有讲究的,本人是直接回答“选择框默认显示的条目项数啥的是浏览器实现的,本人无法实现“;后来想来这种回答太直接,也抹杀测试人员的积极性,倒是后台同事一句”如果我们是乔布斯就能解决这些问题啦“,产品的一句”QQ浏览器可以考虑实现一下“比较幽默,既回答了问题又不得罪人。这些说话的技巧,永远是本人需要学习的。

离职前后,一直思考读研,工作还有出国,本人到底选什么,到底追求什么,有没有机会成功。整个思考的过程也希望以后能记录下来。最后一天,由于测试号码的问题,没有提测重绑功能;下午离开公司去火车站,tomas出了好主意,又帮了大忙弄行李,也让本人感触良多。结论是做人才是本人最应该学习的,学会做人前先学会主动交流。

腾讯暑期实习--初进腾讯

8月31日,预定下午四点离职,但内心却有些舍不得,这是本人很少会有的感情。老天也很给面子的下了10分钟的漂泊大雨,专等本人离开腾讯大厦,前脚踏出就开始哗啦的乱下,直至本人到达深大地铁站。比较喜欢深圳这座城市,周围都是类似移民过来找寻梦想的人,没有在北京皇城那种二等公民的感觉,而且作为一个吃货,粤式点心大爱啊。

腾讯实习的机会争取是一波三折,最后居然没有经过人事面就直接发offer了,到了深圳才知道一面的面试官就是我的组长happy,二面是同部门的另一位大牛组长,确实都是做后台的。可能本人简历中后台项目较主要,又选择深圳,故而就分到了即时通信部的web开发组,自然只能接受后台方向的面试。不过其实腾讯面试,智力题与专业题目各占一半,所以倒也还好。

到达深圳后,办理实习入职手续,领机器,接着就是一顿欢迎宴,接着入住;第二天,领工牌,网上学习腾讯企业文化,公司运作流程,找同事要了份组内的前端开发规范学习。学习结果就是组里没规范。这让我比较诧异,一个大公司,没有规范的开发,怎么能保证不出问题呢。这个问题在头一个星期都没有找到答案。组里有个happy坚持的好习惯,就是每天写报告,内容不用虚,就是记录今天做了哪些事情,进度如何;明天准备做哪些事情,还有哪些疑惑没有解决。本人就写了不熟悉腾讯的开发流程,于是立马第三天就吩咐给本人的任务得是能走开发到发布全程的任务。第三天正式项目开始,做了一天,发现进度和以前一样太慢。于是当天的问题就是如何加快开发进度,brad晚上就手把手教我dw,发现cs5版开发布局还是很给力,无奈没有zen coding,不太习惯。而js开发本人更是习惯了notepad++。第四天见了产品经理以及后台开发人员,算是项目正式启动,brad也给了我放号注册2.0的代码,收获良多。这时页面样式基本制作完毕,接下来是交互动作的实现。问brad我们组有啥前端库没有,果然答案是没有,逛oa的时候发现拍拍网前端既有规范又有库,后来又发现Qzone组才是腾讯前端库的首推组,很明显,我们组的前端还处于草创初级阶段,毕竟连组长都不是搞前端的,肯定在资源上跟不上。但是组里还是有个工具函数文件的,看里面的代码也很有意思。
周末肯定不能在旅馆闲着,几个广州的爽约没来,只好个人跑去找发哥耍耍。后来那个悔啊,原来当天深圳有动漫展,而且本人还路过,这样的机会都放弃了!当然和发哥谈谈也挺愉快,周日跑去找房子,在世界之窗那乱转,才知道深圳的城中村和武汉一样脏乱差。

第二周继续开发,开始思考库的组织方式,于是下了moontools,jquery以及towf对比研究,当然主要精力还是放在项目上,此时还不知道fiddler有啥用处。项目交互也没啥难度,只有一个tooltips效果和modalbox效果,前者很容易就实现了,后者也实现过,加上不需要动画效果,自然也没啥问题。但是我们组里没有规范,而modalbox是很讲规范的特效,问了bleany姐和brad,都说实现就行,brad说最好采用直接写在html的方法,我一听这种方法,每个页面都添加还不累死我,干脆用js生成好了,于是自作主张的做了。第二周周三,部门大佬们又请实习生吃饭,开车去了n远n高档的粤式饭馆,点了些便宜菜。本人EQ约等于0,不知道他们有多大佬,交谈起来无压力,只知道他们都是来公司5·6年,而且多从华为跳槽,很维护公司,强烈鄙视360,也透露些恐怖的360内幕及ponyma为啥要做一个艰难的决定。谈得很开心,也挺有乐趣,感觉他们就和本人一样,一样单纯,一样不善言谈,一样不怎么懂人情世故。尽管本人是真不懂,他们是在我们面前装不懂。 周四交互基本开发完毕,开始写向后端发出ajax请求。无奈后台人员也是cgi新手,都不知道分get和post方法,全是get方法,而在本人提醒之下又全改为post方法。反正随便他改,本人这边都是调用函数,但第一面的逻辑理顺就花了一天,很多问题以前都没有做过,写200行这么多js代码也是头一回。

周五例会是组里很有趣的时候,因为可以把组里所有人认一遍。开始每个人说说本周工作进度与下周工作计划,啥Q+人海ptlogin blablabla,一堆项目没听懂,于是又一个疑问诞生。接着是前端方面的讲座分享,brad讲解正则式,学了个以前没接触过的?=以及?:,算是小收获。后来就是后端代码review找茬,本人就不用参与了,倒是觉得这种方式不错,前端与实验室应该借鉴都一下。

周末跑到火车站那转了下,犹豫是否该一下跨境去香港转转。现在又是后悔,当时又正在举办动漫展,哎,错过两次大型漫展,无语啊。后来又跑到会展中心转了下,高楼林立,置身其中,确实感觉不同。周围各种气派无比的大门,豪华奢侈的酒店,又一次加深了本人奋斗的欲望。再下周就得搬出酒店找房子。还好找到一个华科人挺好,同意他找到房子后一起合租,于是放心大胆的到处玩耍。

搬到新房子后,本人还跑过海上世界,见过各种外国人,跑到东部华侨城,因特拉根小镇,见门票太贵就在外面转了下,各种豪宅酒店,再次受刺激。

工作当然也有条不紊的推进,离提测的日子越来越近,但后台总是出问题,只好学习用fiddler调试,结果一发不可收拾,发现这个真是好东西!学会用这个软件就是暑假最大的收获之一。其他收获也包括到香港的旅游和与产品交互的交流,这些留待下回再说。

本站总访问量