行者无疆 始于足下 - 行走,思考,在路上

杀进百度三面!

早晨8点半,晨梦中接到了百度的面试通知……立马起床,打起精神,吃好早饭,回来啃书,看《编程之美》和《算法之道》。下午四点半面试,我就琢磨着还有7个小时左右,去掉2个小时吃饭、上网、发呆、上上厕所的时间,大概还有5个小时的时间,抱抱佛脚也够了。

下午3点换了身新行头,又去打印了几份简历,快四点在北门果断打上了出租,直奔者浙江百瑞大酒店。

面试官比较和蔼,还给我倒了杯水,贼感动……先是传统的自我介绍,我就开始耍无赖了:“简历上的东西我就不说了,我就单说说我的潜力和优势吧。您一边看简历我一边说。”然后就开始扯淡,还扯上了电影《The Pursuit of Happyness》的句子……一通胡扯后,感觉面试官有些被我震住了,好了,气场来了就好办了……

接下来就是问简历上的东西,先问实习做的东西,这个比较熟悉,又是一通胡扯,包括Shell、集群、Python、Nginx、负载均衡等等,反正就是有东西扯就行了,别停下来。

然后看我对linux比较熟,就让我写个Shell脚本,要求是输出下面的三角多维数列到一个文件中:

0
0 1
0 1 2
0 1 2 3
0 1 2 3 4
0 1 2 3 4 5

这个应该比较简单,两分钟完成,没什么大问题。注意下Shell Script中的数据类型就行啦。

然后又给我出了个小题目:给定一个数组A[n],给定一个数字m,求有多少对[i,j],使得A[i] + A[j] = m。这道题目最初的思路肯定是排序,然后大小配对。第二个思路也是数组先排序,然后对[1, m - 1], [2, m - 2]等进行二分查找……不过面试官还不算满意,又问我可不可以不经过排序。我左思右想,说了句那就用哈希表吧,直接线性查找就行了……貌似说对了,pass ……其实我对哈希表不太熟的。

然后就问我了解哪些排序算法,各种排序算法有什么特点,我就把我知道的各种排序算法都吹了一通,单独考了快速排序——其实要让我当场写,我还真不一定写得出来。还有一些小问题,比如linux常用的一些命令(df, free, du),还有OSI七层参考模型,tcp三次握手过程等等,剩下的我就想不起来了。

最后问我有没有什么要问的,我就问了三个问题:

  • 百度的中文搜索是全球第一、为啥英文搜索比不过google,这点百度自己怎么看;
  • 百度内部用什么开发语言和开发工具;
  • 我自己在这次面试中有哪些需要改进的部分。

就这样,然后在HR mm的房间里看了会儿喜羊羊和灰太郎,就进了二面。

二面并没有问太多技术性的问题,感觉主要是聊天为主了,又深入问了我实习期间做的一些东西,然后问我为什么会选择运维而不是搜索算法部门,我就说自己没有竞赛基础,比不过大牛,而且也只是个本科而已,相反自己对linux比较熟,也比较感兴趣。然后他就让我说说对运维的理解,我就balabala地吹了一通。又问我简历是用什么排版的……我说
用LaTeX。问我是不是一个心细的人,具体表现在哪里?我就自卖自夸地说自己是个“胆大如斗心细如针”的人……然后问我工作是否严谨,体现在哪些方面?我就说自己写代码都怎样加注释,为何简历用[tex]\LaTeXe[/tex]排版等等……

后来也给我出了一道题目,感觉有点小学生脑筋急转弯的意思,说甲方乙方做一个游戏,总共是100个球,两人轮流取球,每次只能取走1-5个球,甲方先取,拿到最后一个球的那一方为胜利者。问甲方应该采取的方案才能保证自己的胜利……这个比较简单了,2分钟就有思路了,简单叙述了下,pass。

然后就完了,告诉我回去等三面的通知,说在两天内就会结束,我说周三要去上交听一个会议,很多人应该都会去,他对我提供的这条信息表示了感谢。over。

大概就这样,感觉百度的面试官还是挺和蔼可亲的,不向有道那样,不看简历上来就把你整晕,那就挂了。

明天下午2点三面,希望我自己能早点定下来吧,我的心已经飘到东南亚啦。

百度、腾讯、vobile

血淋淋的两天……

这几天事情实在是很多,以至于三天前发生的事情我已无丝毫印象,说说这两天的笔试吧。

16日上午去听课了,数字电子技术基础,大二时挂掉的一门课,讲触发器和时序电路的,发现自己依然是听不懂,庆幸自己终于没有去读生仪那个博士,否则各种硬件电路、FPGA还不得把我搞死。

下午两点百度的笔试,人很多,大概有20多个教室,算起来应该有5、6百人了。我投的是运维部运维开发工程师,可是linux、script等却没有考,考的全部是算法和c++方面的东西。大概的题目有:

  1. 根据不同场景选择合适的排序算法,场景有:
    • 很少的元素
    • 几乎有序的元素
    • 关注最坏的情况
    • 关注平均性能
    • 元素是从一个密集的集合中取出
    • 实现尽可能简单,代码尽可能少
  2. 给你一段哈希表的c++代码:

    • 描述内存分布
    • 理解代码含义
    • 指出代码的逻辑错误和编程规范错误
  3. c中的malloc/free和c++中的new/delete有什么区别和联系【考虑到new/delete和构造函数、析构函数之间的联系,以及new/delete是c++关键字而非库函数,可以进行运算符重载等等】

  4. 单入口单出口的有向无环图,给出一个算法,在已有的节点中插入若干个节点,使得从入口节点到出口节点经过的任意路径的长度都一致【瞎蒙的,记得有个NP的求最长路径的算法,在此基础上胡吹了一通】

  5. 二重哥德巴赫猜想:每个不小于6的偶数都可以表示成两个奇素数之和,请用你熟悉的语言编写一个函数,输出6-100000内所有偶数可以表示成哪两个素数之和,如果有多种表示方式,输出任意一种即可。要求:给出完整代码,在达到目标的基础上尽量高效简洁【打表法,a[100000],a[i]=1表示i为素数,然后循环】

  6. 系统设计题(这道题目不同职位不一样,终于算考点运维了):关于系统日志的备份和分析,请你设计一个好的方案,综合考虑网络带宽,系统资源,负载均衡等等……【大概是这样,胡吹的,IO-bounded/CPU-bounded,ftp/ssh/rsync等,负载均衡,想到的都说上了】

百度笔完觉得如果幸运的话应该会给个一面吧,不过也没抱太大希望了,毕竟自己的斤两自己还是心知肚明的。然后去了吃了晚饭,去实验室,打算搞台电脑,装个Linux,架个服务器玩玩,也好亲身实践下DHTML,CMS等;还有一直牵挂的旅行者小网站;架设个ftp,存放一些历史资料;有空还可以挂个论坛模块上去——我太邪恶了。在实验室翻箱倒柜,搬来了一个主机,一个显示器,偷了根网线加上许久未用积满灰尘的键盘,花了一个多小时的时间擦掉电脑上的灰尘,开机启动,123456撞大运地破解了密码,进入系统,得到了系统原先主人的信息——一个已经毕业的女研究生学长,确认后就下载了ubuntu 10.04 amd64版本,刻盘安装。设置好软件源,架好ssh,回到寝室远程登录架好了vsftpd,ftp至此初步完成。呵呵。接下来研究vsftpd详细的参数配置,实现诸如带宽限制、权限限制等高级的功能。

17日上午腾讯的笔试,场面更为火爆,笔试名单上大概有1250+的人数。笔试题目很多,由于试卷上有保密协议,所以这里不方便透露,题目大概是20道选择+代码填空8个+附加题,考点很广,c++的除了语言还有网络和操作系统的一些知识(我觉得这些对通过考研打牢基础的人是很有利的……),考完了感觉还不错,结果晚上面试名单就出来了,悲剧了……版上也有很多人抱怨,说感觉不错为啥一个面试机会都没有。可能找工作有时也靠运气吧,比如我一个百度保底的学长,google笔试直接挂掉,连面试机会都没有;比如很多大牛投了网易号称说要bs网易一下的,结果网易连个笔试机会都不发;比如上个月我的有道机试,260/270的秒杀,如果不是论坛上抱怨下恐怕也因HR的失误变成分母了……

下午回来看了会书,看了看NTP协议,淘宝上买的《ANSI Common Lisp》到货了,简单看了看,再领略了c++的宏伟,Java的臃肿,Shell Script的便捷,Python的Dynamic Typing后,Lisp的functional programming,是我一直所渴望了解的。长期以来Emacs的配置都是在网上找然后copy&paste,搞的自己都不好意思拿出手,趁着有时间好好学一学。海鸥的镜头和包也到了,至此自己花了六百大洋左右搞了一套古董机的单反,Seagull DF2000 + 35mm标准头 + 28-80变焦头 + UV镜 + Seagull相机包,性价比应该还算挺高的吧,用来练手练技术好了。

晚上去vobile笔试打了桶酱油,笔试题目有七道吧,大概如下:

  • 写代码求N!中尾数中0的个数
  • 写代码求1-N中数字'1'总共出现了多少次
  • 估计一下全中国与你同名同姓的有多少人
  • 12个蚂蚁站在木棍上,左边6个一队,右边6个一队,一声令下,左队蚂蚁向右运动,右队蚂蚁向左运动,如果两只蚂蚁相撞,则改变运动方向,蚂蚁会从木棍的两边掉落。问经过多少次碰撞后所有12只蚂蚁会掉落?【我的答案是36】
  • 多关键字排序【多看看基数排序和字典排序】

还有一两道实在想不起来了……总之题目还是比较基础的吧,不算难。vobile笔试完又去听了IBM研发专场的宣讲会,据说每个人都有包包发——怪不得越到最后人越多,原来大家都是来拎包的啊……不过我不知道,听完招聘安排提前走了,亏了,呵呵。

晚上回到寝室看到88work版,就知道百度和腾讯都悲剧了。百度在意料之中,腾讯有点郁闷,不过算了。现在总结下,Google、百度、创新工厂、腾讯笔试被刷;网易有道止步一面;网易部门杀进面试,尚不知面试时间和地点;华数淘宝由于实习拿到工作保底offer,前景比较光明,正在犹豫当中,所以阿里系列的所有公司也不再投了——如果再受几个打击说不定就签了;微软不太喜欢,微策略虽然是米缸,看中绩点,为我所不耻,索性投也不投了;华为简历审核通过也不知道是啥意思;剩下的还有啥呢?自己的策略是不投游戏不搞硬件不投太小太没有名气的公司不投测试不投Java不投金融,好像也没有太多了。嗯。

其实想想人有时候真的是挺贪得无厌的,欲望是痛苦之源,我一直认为钱是一种手段,但绝不能成为一种目的。

差不多了,我也累了,忙完这阵,过了秋学期考试,争取定下工作,抽出一个月的时间出去兜一圈。加油吧。

What I Want

朋友来泉,浙大往事,美容柠檬茶一壶,谈到了这个问题。

  • 读懂《GEB》《皇帝新脑》,探寻数学基础和计算理论的和谐图景
  • 读读《史记》、《红楼梦》、三毛
  • 学学心理学
  • 赚够一千万
  • 有一辆越野,后备箱装上自己的两轮和背包
  • 创办一所私立学校,实施真正的素质教育,希望能得到开复的帮助,在中国开创一个模式
  • 单车穿越黑昌公路,在去西藏看看
  • 去东南亚走走,看看阿黎
  • 去学钢琴和吉他
  • 练练书法,自己一张大桌子,写几个字
  • 开一个吧,类似于浙大往事的那种
  • 有自己的窝,窝里面贴满自己旅行的照片
  • 带着自己的爱人去旅行,辞掉一切,无法无天,出去走一次
  • 带着自己的父母去中国各地转转,让他们也见识下外面的世界,享受下剩下的人生
  • 贡献几个开源软件,为开源运动贡献自己的微薄之力
  • 做出几个像样的产品,产生一定的社会价值
  • 做一些公益慈善
  • ……

仔细想想自己的胃口还真是大啊,如果一定要给个期限,我希望是十年吧。嗯。

回家几日

迟到的日志……暑期一直在实习,因此趁着十一长假,又请了8、9号的假期,加上10号周日的一天,整整十天,回家看看父母。

每次回家都比较纠结,首先是买不到到北京的T32坐票,校门口的代售点排队排3个小时,很多人提前十天买票还是连一张坐票都买不到。我买票的那天大概是左脑神经搭右脑上了,要买的是9月30号的票,却说成了10月1号。

30号晚上早早离开公司,回寝室收拾好行李,一个背包,带上笔记本,两本书——一本《鸟哥的Linux私房菜-服务器架设篇》、《数据结构-严蔚敏版》,洗漱,还有给爸妈买的两件小礼物。抱着碰碰运气的思想,我尝试着能不能拿着10月1号的火车票混上9月30号的列车——反正都是无座的。检票口很容易就混过去了,上车的时候碰到一个女检票员死活不让我上,后来我换个口,手指捂着日期检票,就混上去了。

火车上的人就甭说了,提前十天都买不到坐票,可以想象了。一夜无座,过了徐州,人总算少了一点,有了立脚之地,于是我腐败地坐在过道上,闭目休息。好景不长,车厢开始供应早餐,人群就随着餐车的流动起起伏伏。就这样咣当咣当到下午两点,16个小时,沙丁鱼罐头无座火车,说熬也不为过,但也没什么大不了的。

下了火车给父母打了个电话,商讨下一步方案。到承德的火车票只有晚上9点的,去承德的依维柯刚巧走了最后一般,于是我打车到北站,无果,又公交加地铁到六里桥长途客运站,幸运买到了18点20的加班车,然后赶紧找个小馆子吃了碗面,检票上车。由于走高速,原先需要走5个小时的路程走了3个小时不到就到承德了。晚上9点整,在承德火车站前的雕塑前,见到了我的老爸老妈。

上了车,老爸按了下Start按钮,车就发动起来了,缓缓而行——这一刻我真的感到由衷的幸福,自小到大,由于交通不便,每次回家都是无比的纠结;父母风风雨雨年近半百,也终于喘了口气,最起码经济上不再像以前那样紧张。

回家的路上电闪雷鸣,大雾却起,爸爸第一次开这么远的路,也颇有点“险象环生”的味道。凌晨,顺利到家,热粥一锅,葱拌豆腐。送爸一个光科剃须刀,妈一个化妆盒。老妈像一个小女孩似地问我这是干啥用的,我说给你买来装小东西用的,然后老妈收起来放在保鲜柜里了。饱腹而眠。不过家里气温低,棉被厚,还有些干燥,回家第一天,还是睡得不是特别香甜。呵呵。

家中几日主要都在养膘吧,带了两本书,可是一到家中,人立刻变得慵懒,折腾了下andlinuxbblean,体验了下kde for windows,看了下局域网架设的科普知识,弄明白了路由网关的概念。最重要的事情是我学会开车了,嘿。第一天下午跟老爸出去溜,老爸开到城外没多远,说你开吧。于是我们俩就换了位置,松了手刹,踩上脚刹,启动,挂档,轻踩油门,车就这样溜出去了耶!第一天在城外道路溜了50公里左右,紧接着又回到县城,在车堆里钻了两圈,说到底我还真是佩服我的勇气啊……第二天又在县城里转了七八圈,第三次再上街就是我带着老妈转了……自动挡的车还真是好开啊。不过小县城里开车颇不规范,路口没有红绿灯,行人左穿右突,司机没有几个系安全带的……总之是安全为大,切不可以无知者无畏的精神显摆得瑟,因小失大。

老妈说我穿的破破烂烂,一点也不像个“洋”学生样子,我寻思着我本来也不是个洋学生啊……还是被老妈拉着去买衣服了,总共就三条街,第一条街买了个外套,第二条街买了套保暖内衣,第三条街逛了一个上午买了套Lining运动装。其实这种逛街更多的是一种炫耀吧。农村人讲究个面子,带着一个浙大回来的洋学生,人高马大,神采奕奕,走在路上碰见人了就听人赞“啊,这是你大儿子啊,都这么高了,在哪里上学呐,搞对象了没,工作找的不错吧”,老妈就会满脸笑容“哪儿如你们家俩闺女儿呀,这大老远的,一年也不会来一趟,有啥用”。

第四件事情是我给老妈办了农行和建行的网银并教会了她使用方法并且成功的蹭到了几百块钱转账的小费。其实小费是小事,重要的是以后冬夏寒暑除了存钱,妈妈不用再去银行排队了。

第五件事情是爷爷的身体明显不行了,已经出现了大小便问题,这也让我开始担心他能否熬过这个冬天,82的人了。我给爷爷买了烤白薯,给他焐在被子下,和他聊聊天。人老了,开始变得糊涂,时而清醒,多数糊涂,说一些不着调的话。比如会把自己的大闺女叫大妹子,却把自己的老儿媳妇叫老妹子。倒还是认识我,跟我说自己命不久矣之类的话。我能说什么呢?我说什么他也听不懂,这让我想起了代沟这个字眼。仔细想想,这辈子再见父母面的时间,不太会超过200次了。100次算平均水平了。所以每次回家都尽量多呆几天,推掉同学聚会、推掉聚餐吃饭,只是多陪陪老妈逛逛街,多跟老爸侃侃工作吹吹牛,以防以后无话可说,呵呵。

第六件事情就是叔叔回来,我们早晨起床去爬山,然后我发现家乡的秋景还是很漂亮的。有时候想想自己花了怎样怎样的钱,到了多少多少的车,去了怎样怎样的地方,看了怎样怎样的风景,其实回到家来一看,哦,原来两者也没有太大太本质的差别,那么,我出去又是去干什么了呢?我常常想,也许我们这些在大城里“打拼”,“奋斗”的人,其幸福指数,或者生活品质并不一定比如我家乡一般的小县城人高。也许我们发现我们赚钱赚了一辈子,内心向往的却是一个家,一个小店,一个小房子,一个小胡同的生活,这就是我家乡的生活。

9号上午坐车返杭。又回家的一个包变成了三个包——多了一包衣服和一包家乡土特产——栗子、酸梨、大枣。先做了6个小时的车到天津通莎客运站,然后到叔叔家休息下,晚上火锅,之后送到天津滨海机场,告别叔婶,登上晚点的飞机,飞往上海,落虹桥机场。排队打车,45块钱10公里路——上海的交通还真是贵啊。松江九亭,国亭四期,一个身影在等我——那是你,衣裙漫飞;那是你,温柔如水。

我看到了你的脸像月饼一样圆,没有得到我批准自作主张的新头型,淘宝上18块钱的红色外套,妞,你知道吗,这种场景会让我感到很温馨。

10号下午回杭,留了妈妈带的“土特产”给妞,带走妞的抱怨——“蜻蜓点水似的到来,哼”。6点到玉泉,回到寝室,88 work版,又开始了新一轮的奋斗。

创新工厂笔试

慕开复之名,一个小时的笔试,十一道题目,不算多,时间还算充裕。

选择题/填空题

  1. 关于c union type,求下列程序的输出结果(具体程序既不清楚了,考点在于union type的内存分布):
    		#include <stdio.h>
    
    union u
    {
        int i;
        char x[2];
    }a;
    
    int main()
    {
        a.x[0] = '1';
        a.x[1] = '2';
        printf("%d\n", a.i);
        return 0;
    }
    
  2. 关于什么叫数据库主键。

  3. 关于路由器和交换机的区别,哪个用来连接不同网段、分隔子网或者是分隔不同网段、连接子网。

  4. 进程和线程的区别(调度、控制、共享内存、通讯方式)。

  5. 排序复杂度哪个不是[tex]O(n\lg n)[/tex](二分插入排序、快速排序、归并排序、堆排序)。

  6. kmp算法填空(略微记得一点原理,忘差不多了……)。

  7. 有5道工序,其中有一道工序不能放在最后,问有多少种排列方法([tex]5!-4! = 96[/tex])。

  8. 内存分页算法的缺页次数(先进先出、最近最少、理想页面置换算法,完全不会……)。

  9. tcp和udp的区别

  10. 递归函数:

    		int f(int n)
    {
        if (n == 0)
            return 3;
        else
            return f(n-2) + f(n-1);
    }

    求f(10)(我的答案是没结果,应该是唬人的题目)

编程题

给定一个字符串,字符串中可能含有包含'(', ')', '[', ']',判定条件如下:

  • '('和')'、'['和']'个数相等
  • '('和')','['和']'完全配对,不能出现嵌套情况。

如符合以上两条,则返回True,否则返回False。

Example:

a(ab)[aa(ba)[aa]b]为True,而a((a)、ab(a[bbb)]c为False。

解决方案:

如果熟悉stack表达式求值算法,这道题目应该不在话下。设定两个计数器m和n,m记录'('和')'的个数的差值,'n'记录'['和']'个数的差值,再设定一个STL stack<char> par。

每当读到'('或'[',就执行push操作par.push('('),par.push('['),同时m++, n++;每当读到')'或']',就判断下栈顶元素和当前元素是否配对,如果配对,则par.pop(),否则直接返回False,同时m--,n--。

最后判断m和n是否为零即可。代码略去。




Host by is-Programmer.com | Power by Chito 1.3.3 beta | © 2007 LinuxGem | Design by Matthew "Agent Spork" McGee