姜一郎二战三跨(本科管理)到西南大学,如何拿到腾讯微信offer-王道在线
姜一郎风华注:作者anboqing本科学公共事业管理,2014年二战三跨考上西南大学计算机,编程0基础,经过在王道训练营收获编程入门、及读研期间持续不断地努力,于2016年校园招聘签了腾讯微信。此人性格非常踏实,作为文科出身,编程0基础,且硕士学校也很普通,最后拿到腾讯微信的offer,希望其学习经历能给有相似背景的你带来一些启发。
————
三年前,我从某二本院校经管专业毕业,出于对编程的兴趣跨考了计算机的研究生,第一次准备不充分失败了,第二次考完研后,为了提高自己的编程能力,我参加了王道训练营第三期,在王道收获了很多,其中最重要的是学习的态度和方法。训练营结束后,怀着对未来的憧憬开始了研究生生活。时光荏苒,三年的研究生生活转瞬即逝,虽然现在水平还是比较弱,但相比三年前的自己还是有明显的进步,在校招时拿到了几个批发价的offer(新美大、cvte、ctrip、zte、滴滴、360、腾讯)。在王道一定还有一些像我一样基础薄弱的非科班同学,为了提高自己的编程能力努力奋斗着,应风华哥的邀请,写这篇帖子给后来的道友分享一下我读研期间的学习经历,跟大家交流一下学习方法。我主要是通过看书,看公开课并做课后实验,读源码来学习。下面分别介绍一下:
0.程序设计
《c++primer》这本经典书是c++入门的最好选择。
《The C programming language》这本书是c语言作者写的,书上的练习题做完很有收获,而且它的附录我觉得非常好,从c语言设计的角度讲解了很多内容,举个例子,一些笔试题里经常出现的一些复杂的声明,都在附录里有详细的解释。
《effective c++》《more effective c++》《c++沉思录》,这几本书也很经典,一些面试题都可以在这里找到答案,看起来也很快,几天就能看一遍。
《深度探索c++对象模型》,这本书也是非常重要的一本书,看完对c++的底层机制理解更深刻了,看懂这本书校招很多分析代码的c++笔试题都迎刃而解。
《STL源码剖析》,我觉得这本书也很重要,面试的时候常见的c++问题都能从这本书找到答案,比如vector底层原理,map和set底层的红黑树,迭代器,容器的内存分配等等。看这本书的时候在网上下载了侯捷的SGI STL源码注释版,配合着书看效果更好。
《设计模式--可复用面向对象软件的基础》这本书是设计模式的经典之作,里面的例子都是c++代码,很容易看懂。
《设计模式之禅》这本书相比上一本更偏重实践,里面有很多具体的实现方式。
在实习的时候看了《mysql必知必会》《高性能mysql》,因为开发业务代码需要熟练掌握sql,还要对数据库性能优化有一定了解。除了关系型数据库,还要掌握一些诸如Memcache、Redis等Nosql数据库,我看了《Redis设计与实现》,结合源码学习redis的底层机制,对工作有很大帮助。
1. 操作系统
操作系统阅读了《操作系统--精髓与设计原理》,结合清华大学的公开课()学习。这门公开课的配套实验非常好,要实现一个名为ucore的linux系统,作业更多时候是读很多代码,自己填写部分函数,所以也相对比较容易,通过动手实践有很大收获。还可以通过实验掌握gdb、valgrind等一些调试工具、提高c语言的编程能力,加深对操作系统的理解。在做作业实现ucore的过程中,我还参考了《深入LINUX内核架构》。
还有《深入理解计算机系统》,同样看华盛顿大学的公开课CSE 351 《The hardware/Software interface》(并完成实验作业,这门公开课的实验就是《深入理解计算机系统》前面讲到的8个实验,我觉得很有挑战性,印象最深的第二个实验二进制炸弹,需要反编译二进制代码并找到秘钥,为了做这些实验,又学习了很多知识,比如看了王爽《汇编语言》、《程序员自我修养--链接装载与库》,阅读intel IA32手册学习函数调用、保护模式、用户态和系统态的切换等。总之,通过这些实验,能掌握很多系统底层的知识,并且也能提高自己的编程能力。还有《UNIX环境高级编程》,这本书是风华哥给发的,这本书我是编程遇到问题查阅相关部分看的,带着问题看书理解的比较深刻。
2.计算机网络
看完了《TCP/IP详解,卷一》,阅读这部书使我对计算机网络有了更深入细致的理解。看书的过程中,自己也通过参考网上的资料实现了一个抓包分析的小程序,把数据包一层一层按照书上讲的协议分解出来,加深了对网络原理的理解。还有《UNIX网络编程》,看这本书的时候阅读了一个简单的web服务器代码(读代码的时候遇到不懂的地方就看书上相关部分。然后读了《深入理解Ngnix-模块开发与架构解析》这本书,结合nginx源码看,了解了Nginx的原理,对高并发的理解很有帮助。
3.编译原理
学习了公开课(),做作业实现一个叫Cool的编译器。
阅读《自制编程语言》,这本书实现了2个编译器,一个是无类型的crowbar,一个是静态类型语言Diksam,通过阅读这些源码,对编程语言底层的机制有了更深入的理解。还有《编译器设计》以及龙书,都是在做公开课作业和看《自制编程语言》时参考其中的原理讲解。
4.算法
看了coursera上的算法课(还有个part2),配套教材是《算法》作者是sedgewick(这本书还有个配套网站上面有很多资源,还有内容勘误,书上的错误会对理解造成障碍,我觉得看书的时候尽量找到勘误把错误修改了再看),这门课的作业也设计的非常好,做完了之后收获很大。而且《算法》这本书是用java实现的算法,api很清晰,尤其是讲排序时编写代码用动画展示排序过程,对理解算法很有帮助。这本书我觉得比《算法导论》更容易读。
5.读源码
侯捷在《STL源码剖析》序言中写道:“追踪一流作品并于其中吸收养分,远比自己关起们来写个三流作品,价值高得多”。我深受这句话影响,看了一些优秀的源码。除了上面讲过的那些源码,还有网上看到别人推荐的好源码,比如学习网络编程时看了linux2.6内核中的select,epoll的代码实现,再比如google的轻量级数据库leveldb的代码(还有深度学习库Caffe源码(),以及mxnet源码(推荐一个源码阅读工具Understand,这个软件可以画出函数调用关系图。遇到不懂的代码就自己写写调试一下,在网上找别人读源码的笔记看,可以用xmind画思维导图把源码的架构画出来,可以帮助理解。我觉得读源码对提高自己编程能力有很大帮助,读源码过程中经常会学习到很精妙的设计。
看书的过程中会遇到不懂的,我觉得不懂是因为有些背景知识没有掌握,我会先跳过继续看后面,有时候把后面的知识看了就懂了前面的,或者在看其他书的时候会突然明白了之前看不懂的地方,所以我看书的时候遇到不懂的先放下,以后再反过来看之前看不懂的地方,很多书都看了不止一遍。看书自学需要大块的自由时间,看视频效率比较低,我逃了研一的大部分课加上导师管的松才完成上面那些内容。其实那些公开课最大的帮助还是在于做课后实验,如果时间不充裕可以把课件看看只做实验。学习总结很重要,《暗时间》里有句话“书写是最好的思考”,我深以为然。我有个喜欢交流的同学,我们经常会把学到的给对方讲,有的时候会遇到自己理解的盲区或者有偏差的地方,讲着讲着就卡壳了,这时候再去看资料,直到给别人讲懂了才算自己真的懂了。
最后我再分享一下校招的准备,校招要求低,应该比社招简单很多。校招前先把基础知识梳理一遍,我用的是《王道程序员求职宝典》,多做几遍上面的题,校招笔试很多选择题都能找到类似的题。多刷leetcode和《剑指offer》《编程之美》《编程珠玑》上的算法题,牛客网上有很多题库,尽量多刷,见得多了遇到题目就有思路了。面试时很多面试官会出一些开放性的系统设计题,我看了《大型网站技术架构-核心原理与案例分析》《淘宝技术这十年》等,面试时可以参考里面的内容讲。关于面试网上面筋很多,我就不再赘述了。校招面试官考察的基础知识很多,其实只要心态好,跟面试官有效沟通,把自己平常积累的知识展现出来,每次面试完总结自己的不足,通过校招面试还是很简单的。
以上就是我学习的经历,读研后大家的研究方向不同,专业课程的学习就不再赘述了。我很多时间花在打基础上了。各位道友还是要根据自己的实际情况有的放矢的制定适合自己的学习计划,只要态度认真,坚持不懈的按计划学习,一定能取得很大的进步。
最后,祝各位道友在求知和求职的道路上一帆风顺!祝王道越办越好!
————
其在3年前写的“王道生活回忆”:
初识王道是在京东上搜索计算机考研的书,排名第一的就是王道单科书,从此就和王道结下了不解之缘,我本科是公共事业管理,跟计算机八竿子打不着,由于对计算机的兴趣选择了考计算机的研究生,第一次由于各种原因没考上,又不甘心做那些不喜欢的工作,于是决定二战,考研之前就在王道论坛上看到了训练营的消息,尤其是看到慧彬的那篇经验贴(太励志了),感觉很受鼓舞。1月5日,考完研,感觉很不好,当时感觉很失落,不知道自己何去何从,甚至觉得自己要转行学计算机本身就是个错误,又找不到计算机方面的工作,想到自己之前的努力全白费了,但我依然还想学计算机,就想到了王道训练营,想去王道增长见识,接触一下真正的程序员(因为一直没机会接触到,根本不知道程序员的工作到底是怎样的,到底怎样学才能成为一名合格的程序员),于是6号就报了名,风华哥嘱咐我要认真准备,不然去了跟不上大家的进度,我很担心自己跟不上,于是就开始认真学c语言,做课后题(当然这些准备跟后面几期的道友比起来真是弱爆了),学的很慢,犯的错误也很多,但时间都被编程占着,心里也就踏实了,也不胡思乱想了,后来成绩出来了,因为我报的学校也不好,所以感觉应该没问题,于是就安心的等着去深圳了。
过完年就来到了深圳,出了地铁站,照着地图导航走到了港之龙大厦,门口已经有hwq同学先到了,领了被褥,等一会儿昭哥和春阳带我们去了宿舍,安顿好之后,就去教室,在楼下遇到了一个瘦瘦小小的小伙和我们打招呼,他自我介绍说我是赵霖,见我们俩都没反应过来,又说我是风华我们才反应过来,没想到他居然就是风华哥,来之前我一直以为风华哥是个高大魁梧的壮汉或者是个中年发福的男人,O(∩_∩)O~,万万没想到,风华哥看起来很精干很儒雅,说话语气很轻柔,但有种不怒自威的感觉,这就是和风华哥的相遇。
就这样我开始了第三期王道训练营的生活。第一件事是摸底面试,我应该是基础最差的几个人之一,这也在我意料之中。然后就开始上课,写代码,刚开始很不习惯,感觉很吃力,昭哥总是讲一会儿,就让大家练习,然后昭哥就转着问:怎么样,写出来没有?我总是拉住昭哥问问题,昭哥也总是很耐心的讲解,还帮我调试bug(真的很感谢昭哥,在王道的三个月不厌其烦的帮了我很多很多)。后来就是春阳讲c++,春阳给我们分享了很多技巧,还有从他那里知道了很多牛人的博客,也从里面获益良多。慢慢的就习惯了这样的生活,每天除了吃饭就是写代码,生活单纯到了极致,我现在还能回想起来当时第一次写出1k行的小程序调试成功时那种I can make things!的成就感。渐渐的我喜欢上了王道这种单纯的生活,周围的同学都很努力,从他们身上我学会了很多,不仅是知识,更多的是学习的态度和方法,比如一个很安静的同学,每天睡的最晚,起的最早,我经常是睡前看着他在码代码,早上起床时他已经去教室学习了,时至今日,还清晰记得他那专注的神情;再比如辉哥,我们常常一起在去吃饭的路上讨论问题,他的思路总是很清晰,我想不出的问题他总能想到解决办法。慧彬和远东等前两期的道友经常来分享他们工作中的经验,鹰哥也常来,跟大家打成一片,鹰哥很随和,完全没有架子,鹰哥和风华哥就像大家的好大哥,经常给大家鼓舞士气,有同学浮躁了,也会诚恳的指出他们的问题,帮他们端正态度,其间风华哥和鹰哥多次鼓励我,让我更加有动力,从风华哥和鹰哥那里学到了很多人生的道理和经验,他们为我指明了方向,也让我知道自己的研究生生活应该怎样过。如果我不来王道,我可能一辈子也接触不到那些,王道为我打开了一扇通往程序员世界的大门。时光过得好快,不知不觉三个月就过去了,这三个月我胖了好多(由于睡得晚,12点还会去再吃一顿饭),我也从一个门外汉变得能写一些像迷你搜索引擎之类的小程序了,这时第四期的同学已经来了,他们都很优秀,让我看到了自己和他们巨大的差距。吃散伙饭那天,大家喝了很多酒,风华哥都喝醉了,虽然只相识短短三个月,但因为有相似的经历,志同道合,大家的感情很深,不亚于大学四年的同学。渐渐的送走了很多同学,依依不舍的和小柏在火车站分别后,我也踏上了归家的路,离开了深圳,我想我有机会一定会再回去的!
转眼离开王道半年了,研究生生活像一潭死水,很多同学依旧开启着学渣模式,寝室打dota,上课玩游戏,实验室里读读论文打打杂,根本没有在王道那种大家一起编程,一起讨论问题的气氛。不过我没有受这种气氛的影响,现在的我,目标明确,看书,编码,锻炼身体。有时看王道群里说某某同学找到了好工作,我自己也更相信努力就会有收获,更加意识到我还差的很远,要学的还很多。有时候累了,就想到王道那些比我优秀的多的道友们正在奋斗,想象着我也在那间教室里,自己不是一个人在战斗,也就充满了斗志。
常常和辉哥一起想念那段时光,很怀念在王道的日子,那湿热的空气,停不了的大雨,快餐店里炸的焦黄的秋刀鱼....更怀念王道的同学,常常想起白净的辉哥,睡得最晚起的最早的lzh专注的神情,还有bjs爽朗的笑声.....怀念昭哥和春阳的悉心指导,鹰哥和风华哥的鼓励与鞭策,慧彬、冰伟哥、远东分享的经验....此刻,凌晨1点,舍友们已经鼾声四起,我想,1300多公里之外的深圳,港之龙大厦里,很多道友一定还在勤奋的写着代码、调着bug、查着资料、做着笔记....闭上眼睛,仿佛能听到那间明亮的教室里啪啪啪的键盘声,仿佛能看到昭哥在月光下的奔跑(估计昭哥已经瘦的认不出来了)......想想这些,心里就充满了力量。
王道的生活是我生命中最重要的一段时光,是我进步最快的时光....王道不仅仅是“训练营”或者“培训班”,王道对我来说更是一项公益事业,它帮助了很多像我一样迷途的人走出困境,重新认识自己,在我对自己失望透顶,梦想的火种即将熄灭的时候,我来到了王道,它为我拨开眼前的迷雾,给我指明了前进的方向,让我学会了在程序员世界的基本生存技能,使我重新燃起了斗志,眼前又出现了希望的曙光,王道,我的启航之地,无论以后走到哪里,都不会忘了当初在王道的点点滴滴,愿王道这个大家庭越来越好!愿王道的每一位道友在人生的航程里一帆风顺!