首先声明不要再问LZ谁是林萧,林萧就是某著名程序员小说的主角名字
写这篇文章的目的其实很简单,算是对之前LZ一篇文章的补充和完善
之前LZ写过一篇《回答阿里社招面试如何准备,顺便谈谈对于Java程序猿学习当中各个阶段的建议》那篇文章LZ主要介绍了如何应对社招面试,以及如何进行Java学习
文章的反响还不错,不少猿友都感叹“如果早看到这篇文章,说不定我已经成大神了”
但是LZ只能很遗憾的告诉你,LZ那篇文章并不能让你成为夶神只能让你成为一个比大部分人优秀一点的程序猿。而且LZ自己现在都还没成为大神如何能让你成为大神?
但是LZ可以手把手的告诉伱,LZ作为一个非科班毕业出身于三流大学的草根,是如何凭借自己的努力进入到国内一流互联网公司的。
看到这个标题有的同学可能会说,“LZ你不是要告诉我们如何进入BAT吗?怎么一上来就写心态”
没错,LZ第一个要说的就是心态!
原因很简单,文章下面即将提到嘚学习内容如果你没有一个好的心态,是不可能进行下去的所以,先过了心态这一关再来谈别的吧,否则你肯定会死在半路上的
說起来,很多群里的新人都爱问LZ“你是怎么学习的?为什么我学不进去呢为什么我一看书就困呢?”
以上这种现象基本上就是两个原因,第一个原因是心态浮躁总觉得看书好像没啥用啊,看了好像还是觉得没学到什么过不了多久就忘了。第二个原因则是目标感不強不知道自己要达到什么程度才算可以,所以也就干脆“一瓶子不满半瓶子晃荡”了。
针对第一个原因说到底就是个心态问题。总想着看书能够立竿见影从菜鸟一下子蜕变为大神,如果你老是抱着这样的心态去看书你特么不瞌睡才是邪门了。
而第二个原因LZ觉得囿时候人要适当的激发内心的欲望,无欲无求这种高逼格的事等你七老八十了再说,现在趁着年轻心中有点欲望其实并不是什么坏处,只要你没被欲望懵逼了双眼就行
说起欲望这事儿,LZ觉得有必要给大家看一下LZ当初的欲望相信从这封邮件里,你就能感受出LZ当时的欲朢这种欲望,会激励着你前进但是你要切记,在前进的途中调整好自己的心态,戒骄戒躁
说完心态,咱们来谈谈学习这事儿还昰老规矩,由于LZ是Java后端出身所以接下来的内容,会与Java后端息息相关非Java后端的同学可以适当参考,但切勿照搬
本篇文章和《回答阿里社招面试如何准备,顺便谈谈对于Java程序猿学习当中各个阶段的建议》不同那篇文章更多的是从学习的角度去谈的如何学习,而本篇既然咱们是要谈如何进入BAT那么咱们就从面试的角度来谈学习这件事,LZ会谈谈一流互联网公司对于Java后端程序员的要求相应的,也会谈谈如何達到这样的要求
为了简单起见,LZ将这些要求分为三个层次分别为基本要求、可选要求以及加分要求,接下来咱们就一个一个的来谈┅谈。
基本要求就是指你必须要学会的知识,而且这里面大部分内容在面试里出现的概率都是极高的。因此这部分内容你没有选择,只能选择啃下它你可以花一年,也可以花十年或者带到棺材里学习也可以。
基本要求的第一个当然是语言的基础部分。基础部分其实就是语法以及一些关键字的作用像一些if/else、for循环这类基础的语法,以及一些new、class、public这类的基础关键字大部分情况下面试问的是比较少嘚,因为这部分内容只要你写过几年Java,基本上都没有什么问题
那么基础部分的重点,其实主要就是static、final、transient、volatile这一类的关键字以及内部類、泛型这一类的高阶语法。
说到static首先要记住的最重要的一点就是,类属性中被static所引用的变量会被作为GC的root根节点。作为根节点就意味著这一类变量是基本上不会被回收的。因此static很容易引入内存泄漏的风险。
如果一个面试官让你解释static关键字你告诉他static可以修饰属性、方法和内部类,以及修饰之后又有什么效果的话那么面试官基本上不会记住你这个回答,整个印象就是平庸
但是如果你说完以后,补充一下说道你曾经遇到过一个内存泄漏的问题,就是因为static修饰的一个Map类型的变量导致的最后排查了堆栈信息找到了问题的所在,并且解决了这个问题那么,面试官这个时候内心中对你的印象就会不自然的提升几分。
而且对于static,更深入的理解是static会将所引用的属性、方法以及内部类,与类直接产生引用关系而非与类的实例。这就是为什么你可以使用类名.属性、类名.方法以及类名.内部类名,来直接引用一个被static所修饰的属性、方法或者内部类
如果你没有用static修饰,那么你就必须使用实例才能引用这些方法、属性或者是内部类最典型的就是内部类。相信很多同学都好奇过为什么一个没有被static修饰的内部类,必须要这么声明
不过LZ看的还是不够全面和深入,如果你可鉯将操作系统研究透彻的话那么在面试的时候,你完全可以以此作为突破点展示你的亮点。
其实网络这一部分对于程序员来说还是仳较重要的。
LZ最近正在做的事情就经常会碰到一些网络上的问题,虽然很多时候这些问题其实可以找专门的网络人员去解决,但如果伱自己对此不够了解的话对于你的工作还是会造成很大的障碍。
而且要想精通TCP/IP协议,如果对计算机网络不了解的话还是很难真正理解的。
因此计算机网络部分如果你可以精通的话,这也绝对会成为你的一个加分项
4)熟练使用一种脚本语言
脚本语言在很多时候是很方便的,而且也非常实用
LZ最近就被迫正在使用Python做很多事情,其实用了以后你会发现虽然Java也可以实现同样的目的,但确实选择合适的语訁会帮你节省大量的精力。
因此如果你可以熟练使用一种脚本语言,比如Python、shell等等这也必定会成为你的加分项。
这点相信大部分人也嘟知道如果你拥有自己的github和博客,并且里面有不少有价值的内容的话那么一定会为你加不少分。而且说起github和博客这件事,LZ还有一个關于自己真实的故事在文章的最后给大家分享,这里就暂时不提了
此外,就不说面试这回事平时在github写写代码,在博客里写写文章總结总结自己的技术和职场,也是非常有好处的相信不少猿友都已经体会到了这其中的益处,LZ也就不再多说了
毕竟说多了也无益,最主要的还是自己要真真实实的去做如果你希望可以在这方面加分,那就从当前做起并且坚持下去。
到这里加分的要求就说的差不多叻。
其实能够加分的内容还有很多LZ只不过列出了比较常见的几种而已,比如你有其它一线互联网公司的背景这也是可以加分的。只不過这种加分项比较难达到而且,这里更多说的是草根程序员因此LZ这里就没多说。
总的来说加分要求和可选要求一样,都是你致胜的關键部分因此如果可能,还是要在加分要求上下一些功夫的
关于学习这部分,到这里就说的差不多了
就像上一篇《万能的林萧说:┅篇文章教会你,如何做到招聘要求中的“要有扎实的Java基础”》文章里说道的一样,其实大部分一线互联网公司对于招人的技术要求僦两个,扎实的Java基础和一个一技之长
扎实的Java基础,其实就是本文中基本要求的部分而一技之长,其实就是可选要求和加分要求中任意挑选一个就可以了
当然了,不可否认的是可选要求和加分要求中,你会的越多成功率就越高,这点是毋庸置疑的但是如果你一点優势都没有的话,就算你Java基础再扎实其实也很难进去,因为你这样的人太多了无法在众多面试者中脱颖而出。
虽然不排除你运气特别恏当时公司正好急缺人,而且没有其他更好的面试者导致你很幸运的拿到了offer,但毕竟这种概率实在是太小了一些
说来说去,知识是擺在那里的不会跑也不会动,就看你学或不学以及什么时候学。
有的人毕业后一两年就达到了有的人用了三五年才达到,而有的人则是一辈子都没有达到。要做什么样的程序员就全看你自己了。
说完了心态和学习咱们来谈谈一个程序员应该有的素养。这部分虽嘫看似对面试没什么帮助但其实LZ有时候觉得,这比技术更重要因为它们可能会影响到你程序员生涯的发展。
说到程序员的素养第一個就是代码风格。
虽然代码风格并没有绝对正确的风格但是在满足基本的Java代码风格的前提下,你应该逐渐形成自己的代码习惯而且必須是一个好习惯。
说个最简单的例子不管你多么厉害,如果你的变量命名是用拼音来命名的话那么别人对你的印象一定是,这是个非瑺low的程序员
其实程序员有时候和艺术家很像,一个专注于绘画的艺术家一般都会有自己的风格。说得夸张一点可能他的画只要拿出詓,就有人能认出来这其实就是一种风格。
作为一个程序员你也应该有你自己的代码风格,虽然在工作中为了大家更好的通过代码溝通,你或多或少的需要做一些妥协和大家保持一致的风格。
但是你自己的开源项目它应该是你的艺术品,你在雕琢它的同时其实吔是在形成你独特的代码风格。
而且有的时候,你的开源项目可能可以直接或间接的帮助你,获得一份不错的offer
看到这个或许有的人會很意外,但是LZ个人觉得写作能力是一个程序员应该有的素养。
代码风格只是你写代码的素养你还需要有写文字的能力和素养。一个程序员是否专业文档和注释也是一个很重要的衡量标准。
因为不管你的技术多么厉害别人看到的,除了你的代码以外就是你的文档囷注释。这部分能否写好在很多时候,直接决定了别人对你的印象
因此,写作能力其实也是一个程序员应该有的素养至少LZ一直是这麼认为的。因为不管这个人的技术多么厉害如果他的文档和注释写的一团糟,丝毫体现不出专业二字那么他的形象一定会在LZ心中大打折扣。
本文从心态、学习和素养三个方面简单谈了谈如何进入BAT但其实这也是一个程序员学习和提高自己的过程。
在提到github和博客时LZ说了偠在文章的最后,给大家讲一个关于LZ自己的真实故事其实这个故事就是LZ来杭州的真实经历。
LZ之所以能进入现在的公司其实很大一部分僦是因为LZ有一个经常更新的博客,和一个造了几个轮子的github说起来,LZ真的是运气非常好或者说是平时的努力,给LZ带来了好运气
两年多鉯前,LZ特别想进入中间件团队但是发简历制作教程老是没有回音,于是LZ就给中间件团队的leader写了一封求职邮件,表明自己非常想进入中間件团队做服务于技术人员的工作,希望能够得到面试机会
可惜的是,当时这个中间件的前辈并没有回复LZ的邮件原本LZ以为是自己的簡历制作教程没有打动对方。不过LZ后来才知道其实是因为当时这个前辈已经离开了中间件。
不过两年以后,也就是2016年过完年以后LZ的博客里无意间收到了一封短信,正是中间件团队的成员发给LZ的邀请
可以看到,这封短信正是今年过完年LZ收到的刚开始的时候,LZ还没注意到有这么一封短信直到过完年上了十来天班以后,差不多快三月份了LZ才注意到短信箱里的这个短信。
LZ清晰记得当时看到的时候是周四,LZ看到的时候很意外
虽然当时LZ并没有跳槽的打算,那段时间也从未投过一封简历制作教程不过出于不聊白不聊的原则,LZ还是当天僦把简历制作教程发给了这位前辈
出乎意料的是,周四和周五仅仅两天LZ接连不断的经过了四轮电话面试,就从前辈这里得知LZ非常顺利的通过了面试,就等着拿offer就可以了
当时听到这个消息的时候,说实话LZ真的觉得和做梦差不多。
原本一两天前LZ还处于刚过完年假的鈈适应期,同时还在纠结手里的需求怎么实现突然之间就要奔赴杭州,进入自己期待已久的公司期待已久的部门,展开另外一番职业苼涯了
LZ当时真心觉得,这世间的事情实在是太特么神奇了。当时LZ脑子里不自觉地冒出来的一句话就是功夫不负有心人啊!
LZ日积月累嘚写了这么多文章,终于没有白写给LZ换来了一个机会。
以前LZ觉得像什么“功夫不负有心人”这一类的话,都是给别人灌鸡汤打鸡血的話而已但真正自己遇到的时候,才会真切的体会到有的时候道理就是这么简单,区别就在于你做还是没做
就像这篇文章里LZ写的一样,今天你看到了你做了,那或许未来的某一天你会感谢今天努力的你。但如果你看到了没有做,或许你依旧还是那个整天抱怨工莋没劲,加班太累的人然后在碌碌无为和怨天尤人中度过。
LZ也不想给大家灌什么鸡汤打什么鸡血,但是LZ想告诉大家程序员这个职业佷公平,相信不少人当初踏上这条路的时候也是觉得程序员这个职业充满着奋斗的气息,可以依靠自己的努力改变自己的命运而不像某些职业一样需要拼爹。
在程序员这条路上努力,你就有很大希望成就自己的目标和梦想不努力,那你就基本上原地踏步下去直到被后浪拍死在沙滩上。
如何抉择其实完全看你自己,只要你不后悔你的决定所以,少点抱怨多点行动。
如果你能接受平庸下去那僦平庸下去,幸福的过完你的一生也没什么不好。否则你就坚持努力下去,直到达到你一个又一个目标
最怕的情况就是,心中充满叻欲望不甘于平庸,却又不愿意努力的人这样的人,如果做了程序员真的是一种悲哀。