我是0基础,在北京找号网如何找个好机构学hadoop开发?

  很尴尬的是这个类型的文嶂其实之前笔者就写过,原文章里笔者自称LZ(也就是楼主,有人说是老子的简写笔者只想说,这位同学你站出来保证不打死你,-_-)原文章名称叫做,首发于笔者的博客园博客这里也郑重声明一下,所有内容类似文章均属转载或抄袭   

  之前看过的朋友可能會有疑问,为什么要再次捡起这篇文章还把称谓改成了笔者这么高端的词汇。   

  简单的解释一下原因有三个,第一个原因是說不得的原因,请各位看官自行YY第二个原因,是两年过去了笔者在阿里也呆了700+天的时间,所以对这篇文章又有了一些新的理解和想法,想回过头来再完善一下。最后一个原因是因为最近笔者经常刷某音,根据玩某音的经验发两次会火,哈哈-_-。   

  所以這篇文章,可以说是之前那篇文章的进阶版为了方便大家观看,本文会引入很多原文章的内容避免没看过上一篇文章的同学,还需要囙过头去翻看(好吧,我承认是为了偷懒-_-)

阿里社招面试都问什么?      

  和之前一样文章一上来,我们先来谈谈阿里的社招面试都问什么其实这个话题并不是什么秘密,所有来阿里面试过的同学都能回答一二。

  两年前的时候笔者在文章里是这么回答的。

  这个是让LZ最头疼的一个问题也是群里的猿友们问的最多的一个问题。

  说实话LZ只能隐约想起并发、JVM、分布式、TCP/IP协议这些個关键字,具体的问题真的是几乎都没记住而且就算LZ记住了,也告诉你了你也背会了,但LZ觉得在面试中,你被问到一模一样问题的鈳能性依然很小

  甚至,就算你运气好被问到了你也照着背下来了,也不一定就能对你的面试起到正面的作用因为面试官万一多問一句,你可能就露馅了那还不如干脆点说不会更好。

  LZ参加的是阿里的社招面试而社招不同于校招,问题的范围其实是很随机的因为能参加一些比较知名的互联网公司社招的人,70%以上都会有个3-5年的经验这倒不是说一两年经验的同学没有机会进这些公司,而是因為这种公司大部分情况下只招一些比较资深的开发和应届生,而不招那些处于中间阶段的人而1-2年经验的同学,往往就刚好处于这个尴尬的阶段

  对于能有3-5年经验的这部分人中,每个人的经历又都不同所擅长的点也不一样,因此这就会导致每个人的问题和范围都不呔一样

  很少说有哪个知名的互联网公司,比如BAT、京东、360、搜狐、网易等这些公司其社招面试还有固定的问题和模式,让你可以像應届生面试一样在面试前靠临时抱佛脚度过这一关。

  大部分公司在社招的时候不光是阿里,其它公司也都一样(因为LZ在一年多前吔参加过很多其它知名互联网公司的面试详情见《》),基本上都分为两个阶段的提问

  第一个阶段是主语言本身以及它的高级特性,第二个阶段是讲述自己的项目并在中间穿插着问题。

  所以LZ不妨就这两个阶段,谈谈社招面试的准备而不是去把阿里面试的過程背一遍。说实话LZ也确实记不住,所以不要再问LZ阿里面试都会问哪些问题了你看看上面那个连接里的文章,也会发现LZ里面也基本仩没有写具体的问题,原因是一样的真的记不住啊。(就是因为记忆力的问题导致LZ从小偏科,文科成绩一直堪忧-_-)

  看到当时自巳的回答,笔者有种在review几年前代码的错觉不过好在,哪怕是现在来看当时写的虽然多了些废话,但整体思路应该还是没错的

  只鈈过在这里,笔者想要再补充下如果把以上两个阶段再概括化一下,其实得到的答案就基本适用于所有面试,而并非只是阿里的社招媔试

  那就是,第一阶段是主语言第二阶段是项目。

  这点相信不少人在面试的过程中已经深有体会,大部分面试就是分这么兩个阶段去问的只不过针对不同的公司和职位,每个阶段面试的难易程度会不同所问的问题范围,自然也会有所不同

  说到面试嘚难易程度,不得不八卦一下据之前笔者在网上某地方看到的评论中说,就面试的技术难度而言BAT之间的排列顺序是这样的,阿里>百度>騰讯

  对此,笔者实际的感受倒是和上面一致因为笔者参加过百度和阿里的面试,就个人的感觉而言阿里的难度是高于百度的。

  不过笔者说阿里的难度比百度高其实也仅限于笔者那一次具体的面试,实际上两家公司面试的具体难度,是不能这么简单对比的

  面试的难度,根据职位的不同(比如低级工程师还是高级)部门的不同(比如业务部门还是纯研发部门),用人需求的不同(比洳是急需还是人才储备)面试官的喜好(比如是装逼型还是温和型)等等因素,就算是在同一家公司难度也是会有差异的,所以不能簡单的对比两家公司的面试难度

  到底难不难,只有来试了才知道!

  所以阿里中间件团队欢迎你!(咳咳,不要问我为啥加这呴话说不得,0-0)

阿里社招面试如何准备   

  这个话题相信是大家比较关心的话题,之前笔者其实已经详细谈论过了就这一部分內容来说,之前写的还是比较详细的所以索性偷个懒,把原文搬上来了

  LZ会分为四个部分来谈论这个问题,由于LZ本身是Java出身因此關于主语言的问题,都是与Java相关其它语言的同学可以选择性忽略。此外面试的时候一般面试官的问题都是环环相扣,逐渐深入的这點在下面大家可以更明显的感受出来。

  1、主语言本身以及它的高级特性

  主语言当然就是你平日里拿来赚钱的家伙。不要告诉LZ你沒有主语言你会N多种语言,或者是你精通N多种语言你要非这么说的话,你可以来杭州试试LZ保证不打死你,最多打残

  LZ的主语言佷显然是Java,那么对于Java来说它的语言本身以及它的高级特性,都有哪些比较容易在面试中问到呢

  一般情况下,主要有以下知识点很嫆易被问到(PS:以下所列举的,都是一些Java相对而言比较高级一点的知识点因为这里谈的是社招,而不是校招)

  1)Java的数据结构相关嘚类实现原理比如LinkedList,ArrayListHashMap,TreeMap这一类的以下简单模拟一个数据结构的连环炮。

  比如面试官先问你HashMap是不是有序的?

  你肯定回答说不是有序的。那面试官就会继续问你有没有有顺序的Map实现类?

  你如果这个时候说不知道的话那这个问题就到此结束了。如果你說有TreeMap和LinkedHashMap

  那么面试官接下来就可能会问你,TreeMap和LinkedHashMap是如何保证它的顺序的

  如果你回答不上来,那么到此为止如果你依然回答上来叻,那么面试官还会继续问你你觉得它们两个哪个的有序实现比较好?

  如果你依然可以回答的话那么面试官会继续问你,你觉得還有没有比它更好或者更高效的实现方式

  如果你还能说出来的话,那么就你所说的实现方式肯定依然可以问你很多问题

  以上僦是一个面试官一步一步提问的例子。所以如果你了解的不多,千万不要敷衍因为可能下一个问题你就暴露了,还不如直接说不会紦这个问题结束掉,赶紧切换到你熟悉的领域

  2)Java并发包当中的类,它们都有哪些作用以及它们的实现原理,这些类就是java.concurrent包下面的与上面一样,咱们也简单的模拟一个并发包的连环炮

  比如面试官可能会先问你,如果想实现所有的线程一起等待某个事件的发生当某个事件发生时,所有线程一起开始往下执行的话有什么好的办法吗?

  这个时候你可能会说可以用栅栏(Java的并发包中的CyclicBarrier)那麼面试官就会继续问你,你知道它的实现原理吗

  如果你继续回答的话,面试官可能会继续问你你还知道其它的实现方式吗?

  洳果你还能说出很多种实现方式的话那么继续问你,你觉得这些方式里哪个方式更好

  如果你说出来某一个方式比较好的话,面试官依然可以继续问你那如果让你来写的话,你觉得还有比它更好的实现方式吗

  如果你这个时候依然可以说出来你自己更好的实现方式,那么面试官肯定还会揪着这个继续问你

  为什么说面试的时候要引导面试官,原因就在这了因为面试官的提问很多时候都是囿迹可循的,你如果抓住了他的轨迹能够猜到他下面很可能会问什么,那你在回答的时候就可以往你想要谈的方向去说这样面试时就會显得更加从容,更加的游刃有余

  3)IO包和NIO包中的内容。这部分里面NIO会是重点IO包大部分都会比较熟悉,因此可能会直接略过直接問你NIO的内容。

  IO包和NIO包的内容相对来说不是很多首先NIO模型要熟悉,特别是其中的selector一定要非常清楚它的职责和实现原理其实NIO的核心是IO線程池,一定要记住这个关键点有的时候,面试官可能也会问你IO包的设计模式(装饰器模式)为什么要这样设计?

  有的面试官还會问你有没有更好的设计这个时候如果你不知道请果断说自己现在的水平有限,想不出来更好的设计千万不要信口开河,随意YY

  4)Java的虚拟机的内容。这部分主要包括三部分GC、类加载机制,以及内存

  一个GC部分简单的连环炮。

  面试官可以先问你什么时候一個对象会被GC

  接着继续问你为什么要在这种时候对象才会被GC?

  接着继续问你GC策略都有哪些分类

  你如果说出来了,继续问你這些策略分别都有什么优劣势都适用于什么场景?

  你继续说出来了以后给你举个实际的场景,让你选择一个GC策略

  你如果选絀来了,继续问你为什么要选择这个策略?

  下面是关于类加载机制的简单连环炮

  首先肯定是先问你Java的类加载器都有哪些?

  回答了这些以后可能会问你每个类加载器都加载哪些类?

  说完以后可能会问你这些类加载之间的父子关系是怎样的?

  你在囙答的时候可能会提到双亲委派模型那么可以继续问你什么是双亲委派模型?

  你解释完了以后可能会继续问你,为什么Java的类加载器要使用双亲委派模型

  你回答完以后,可能会继续问你如何自定义自己的类加载器自己的类加载器和Java自带的类加载器关系如何处悝?

  再来一个关于内存的连环炮

  首先肯定就是问你内存分为哪几部分,这些部分分别都存储哪些数据

  然后继续问你一个對象从创建到销毁都是怎么在这些部分里存活和转移的?

  接着可能会问你内存的哪些部分会参与GC的回收?

  完事以后可能还会問你Java的内存模型是怎么设计的?

  你回答了以后还会继续问你为什么要这么设计?

  问完以后还可能会让你结合内存模型的设计談谈volatile关键字的作用?

  你在谈的时候肯定会提到可见性,那么接着可见性这三个字还可以继续问你并发的内容。

  基本上Java语言本身以及语言稍微高级点的内容就是以上部分如果你能把以上四部分了解的非常透彻,那基本上Java这部分就没啥问题了因为光以上的内容僦够你跟面试官聊很久了。你聊这些聊得久了自然问你其它问题的时间就会短点。

  你从LZ写这些问题的过程也应该能感受出来很多時候,面试官都是顺着一条线一路问下去的如果你觉得这条线你不熟悉的话,就要及时拐弯引导面试官去问其它方面的问题。千万不偠一直往下深入直到自己跳不出来为止,那就尴了个尬了

  2、讲述自己的项目,并在中间穿插着问题

  这一部分是面试过程中必問也是聊得最久的一个阶段。除非你前面的语言部分非常扎实扎实到面试官问了一两个小时,依旧没有探出你对语言本身的了解到底囿多深否则的话,你一定逃不过自己的项目这一关而且一般情况下聊得时间不会太短。

  这一部分内容一般的模式就是你自己去講你做过的项目,然后面试官会冷不丁的让你去解释其中某一部分比如让你解释当时为什么要这么做,或者问你现在觉得有没有更好的辦法而这些穿插的问题,大部分与你的项目所用到的技术有关而你需要做的,就是充分、再充分的去总结自己做过的项目(尤其是最菦的一两个项目)挖掘出一个甚至N个亮点,以备于到时候可以让面试官产生眼前一亮的感觉如果你能达到这种效果的话,基本上离你荿功就不远了

  这部分内容由于和每个人自己的经历息息相关,因此这里也没法列举可能问到的问题这篇文章《》是LZ之前写的,里媔大概讨论了下如何在面试前总结有兴趣的可以去了解一下。

  上面两个阶段基本上是必问的还有一些加分项。这些加分项中有些内容面试官也会问你(比如TCP/IP协议、算法),但更多的是会先问你了解不了解你了解的话再继续聊,不了解的话就直接略过了不至于洇为这种问题而直接把你打入地狱。

  下面LZ列举一下这些加分项如果可以的话,这些加分项还是要争取一下的

  1、计算机系统原悝。

  2、网络通信协议(TCP/IPHTTP等)。

  3、数据结构与算法

  4、著名开源项目的源码。

  5、你自己有很棒的开源项目

  6、你的個人博客。

  7、待评论区补充

  这几项当中,对于前1-3项如果你之前就比较了解,只是由于时间问题忘记了的话还是可以临时抱佛脚一下的。至于后面4-6项就需要你日常的积累了,不是一时半会儿能做到的如果你平日里没有积累,那么后面这三个加分项只能抛弃叻

  4、与你职位相关的内容

  其实这最后一项是对前面三项的补充,你应该尽量去主攻和你面试的职位相关的内容比如你面试一個实时计算的职位,那么你的算法最好要厉害对于著名的实时计算开源项目要熟悉,最好阅读过源码而且还要对分布式系统有一定的見解。

  因此这个第4部分没有具体的内容,只是提醒你如果你很明确自己的面试职位,最好在面试前准备的时候尽量朝职位的需求方向靠拢,这样成功的可能性更大

  看完以后,关于连环炮的部分笔者这里还是想简单再补充几句,上面之所以举了那么多连环炮的例子其实并不是想让大家背下来,而是想让各位看官体会一下社招面试的套路

  说到底,这些连环炮的例子就是在考验你对某一个知识点理解的有多深。就笔者的亲身经历而言其实上面所提到的这些连环炮,你并不需要每个都理解的很深只需要有那么一两個点比较深,甚至超过面试官的理解就可以达到要求了。

  很多时候面试官并不需要你对每一个知识点都很深入,他只是在考察你嘚理解能力以及平时有没有一些技术积累。

  如果一个面试官只因为一两个技术知识点而否决你的话,那么只有两种可能第一种昰这个点,可能确实是你所面试的职位中非常重要的知识点,比如面试算法类岗位的话算法不好是不行的,或者是面试偏运维类的技術岗位Linux玩不好也是不行的。

  第二种可能就是——他在装逼-_-。

“野生”Java程序猿学习的道路

  这一部分笔者上篇文章谈了很多不過这一次,笔者在Java程序猿前面加了个限定词——野生

  笔者一向自称是“野生”程序员,所谓的“野生”笔者这里先简单下一个定義,就是在大学之前从来没想过会走程序猿这条路,而是在进入社会之后才逐渐走上程序猿这条路的人,笔者称之为“野生”程序猿

  “野生”程序猿有不少程序猿“正规军”所不具备的共性,其中最典型的一个共性就是“野生”程序猿在进入社会之后,都会经曆一个学习入门的阶段

  也正是因此,社会上出现了大量的培训机构所以往往“野生”程序猿在入行初期,所面临的第一个问题就昰到底是自学,还是选择培训机构

  笔者就收到过无数这类的问题,其实这个问题没办法一概而论要具体情况具体分析,但如果簡单粗暴一些来说的话假设你家里不缺那个培训费,就去培训机构反之就别去。

  毕竟花了钱总会多一些学习上的资源,最起码聊胜于无

  所以,这个问题通俗点说就是有钱就去,没钱就自学

  就像那个经典的笑话一样,说自己买东西有选择恐惧症的同學不是真的有选择恐惧症,唯一的原因就是——穷呵呵哒。

  除了上述的共性之外“野生”程序员还有一个共性,就是学习曲线囷程序员“正规军”会有所不同前者是从实践到理论,后者是从理论到实践这就会导致“野生”程序员的基本功一般不怎么扎实,比洳算法、计算机系统原理、计算机网络等

  私底下,无数同学问过笔者同样的一个问题到底算法重不重要?阿里面试考不考算法

  其实第一个问题,关于算法到底重不重要笔者这里是有两个答案的,如果来问的同学互相对质一下的话可能会发现笔者给每个人嘚答案会略有不同。

  如果是一个学生来问的话笔者会告诉他,算法非常重要一定要全力学习。

  而如果是一个已经踏入职场多姩的人来问的话笔者一般会告诉他,按需学习即可如果你做的工作和算法关系很大,那自然要好好学比如你做算法工程师,你告诉峩算法重不重要 当然重要!

  而如果你每天写的是增删改查,更注重业务那还是别花那个精力了,省省吧有学算法这个精力,多研究研究业务多思考思考技术与业务结合这种问题,可能比你学习算法收效更高

  至于第二个问题,阿里面试考不考算法笔者清晰记得,面试官问了这样一个问题的“你对算法的了解多不?”

  而笔者当时的回答是“不好意思,这个我不会”

  看到这里,可能有的同学会有疑问了“作者啊,你这样做不太好你这不等于告诉大家,算法不重要不学算法一样可以进阿里吗?”

  有这種疑问的同学是没有想明白这么一件事,算法是否重要和是否一定要花精力学习它,并没有什么直接的卵关系

  更何况,不会算法能进阿里也很正常难道你觉得阿里万千工程师,都是熟悉算法的吗我敢说,你敢信吗

  还有不少人有一个误区,那就是“算法好的人,工资都高了不少”

  关于这个,笔者只想说如果这个人本身就是搞算法类工作的,那无可厚非但是如果他是搞增删改查的,笔者可以很确定的说他学算法这个时间去学点别的,工资可能会更高

  所以,不要被这个表象迷惑了他高工资本质是因为怹业余时间学习了才高,而不是因为学习了算法才高

  俗话说学以致用,不光花钱要花到刀刃上学习也是要学到刀刃上的,因为时間比金钱更珍贵

  当然,以上所说对于算法要按需学习的论调仅适合于毕业多年,已经进入职场的同学如果你是一个在校生,那麼对于算法这个东西就只有一个字——学!往死里学!

“野生”Java程序员如何学习

  扯完了家常,咱们聊点正事“野生”程序员,如哬度过自己的学习和职场生涯

  关于这个话题,笔者会引用一下上一篇文章中的内容但是两年过去了,笔者会对其中再做一些补充

  接下来,我们首先看一下之前笔者所写的前奏

  这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过的問题那就是LZ你是如何学习Java的,能不能给点建议

  今天LZ是打算来点干货,因此咱们就不说一些学习方法和技巧了直接来谈每个阶段偠学习的内容甚至是一些书籍。这一部分的内容同样适用于一些希望转行到Java的同学。

  在大家看之前LZ要先声明两点。

  1、由于LZ本囚是Java后端开发出身因此所推荐的学习内容是Java Web和Java后端开发的路线,非Java Web和Java后端开发的同学请适当参考其学习思想即可切勿照搬。

  2、下媔对于【第一部分】的推荐内容目的是让你尽快成为一个可以参加工作的Java开发者,更适用于处于待业状态准备转行Java的同学。如果你是茬校学生务必要在学好基础(比如计算机系统、算法、编译原理等等)的前提下,再考虑去进行下面的学习

  其实这段前奏中,笔鍺第2点中所说的“处于待业状态准备转行Java的同学”,就是今天一直提到的“野生”程序员

  笔者这里专门提到这点,也是希望看官們可以明白本文所有内容,都是围绕着“野生”程序员展开的如果你不属于其中的一员,那么一定要对文中提到的学习道路自行取舍

  哪怕是“野生”程序员,也不一定就非要完全照搬文中的学习也要有自己的思考。

第一阶段——未参加工作的同学

  这个阶段其实就是上面笔者提到过的,是“野生”程序员学习入门的阶段大部分人在这个阶段学习的时候,都是非常痛苦的所谓万事开头难,是有一定道理的

  不过没关系,谁让你运气好看到了这篇文章呢(吹逼会不会遭雷劈?)你只需要保持学习的信念,然后按照丅面的思路去学习就可以了

  强调一下,对于程序员来说心中那股信念很重要,你要问笔者这股信念是什么笔者只能说只可意会鈈可言传,自己在职场生涯中慢慢体会吧

  首先去找一个Java的基础教程学一下,这里可以推荐一个地址或者你也可以参照这个地址上詓找相应的视频,地址为

  学习Java基础的时候,应该尽量多动手很多时候,你想当然的事情等你写出来运行一下,你就会发现不是這么回事儿不信你就试试。

  学完以上内容以后你应该对Java有一个基本的了解了,你可以用Java语言写出一些简单的程序并且你用的是朂简单的编辑器,比如记事本

  这个时候,不要急于进入下一部分留下几天好好写一些程序,尽可能熟悉这些基础内容

  等你寫上几天程序以后,你往往会比较迷茫因为你写的东西似乎看起来毫无用处,比如实现一个简单的计算器读取一个文件等。这个时候伱就应该去学着写一些让你觉得有意思的东西了所以你应该学习更多的知识。

  这些内容主要是Web开发相关的内容包括HTML/CSS/JS(前端页面)、Servlet/JSP(J2EE)以及Mysql(数据库)相关的知识。

  它们的学习顺序应该是从前到后因此最先学习的应该是HTML/CSS/JS(前端页面),这部分内容你可以去上媔的那个runoob网站上找你可以试着自己写一些页面,当然你可以尽你最大的努力让它变得最漂亮。这部分内容对于后端Java来说理论上不是特别重要,但至少要达到可以自己写出一些简单页面的水平

  接下来,你需要学习的是Servlet/JSP(J2EE)部分这部分是Java后端开发必须非常精通的蔀分,因此这部分是这三部分中最需要花精力的而且这个时候,你要学会使用开发工具而不能再使用记事本了,可以选择eclipse

  当你丅载安装好eclipse以后,请视频中的教程一步一步去学习一定要多动手。关于Servlet/Jsp部分视频的选择业界比较认可马士兵的视频,因此推荐给大家当然了,LZ本人并没有看过他的视频所以不好说的太绝对,如果大家自己有更好的选择可以坚持自己的,不要被LZ干扰

  原本LZ也是咑算出教学视频的,但是由于时间问题还是决定放弃了。但是如果你看视频的过程中遇到了问题欢迎来LZ的交流群提问,或者去斗鱼观看LZ的直播提出你的问题直播地址和群号都在LZ的个人博客左侧。

  最后一步你需要学会使用数据库,mysql是个不错的入门选择而且Java领域裏主流的关系型数据库就是mysql。这部分一般在你学习Servlet/Jsp的时候就会接触到的,其中的JDBC部分就是数据库相关的部分你不仅要学会使用JDBC操作数據库,还要学会使用数据库客户端工具比如navicat,sqlyog二选一即可。

  当你学会以上内容以后这个时候你还不足以参加工作,你还需要继續深造公司里为了提高开发的效率,会使用一些Java Web框架因此你还需要学习一些开发框架。

  目前比较主流的是SSM框架即spring、springmvc、mybatis。你需要學会这三个框架的搭建并用它们做出一个简单的增删改查的Web项目。你可以不理解那些配置都是什么含义以及为什么要这么做,这些留著后面你去了解但你一定要可以快速的利用它们三个搭建出一个Web框架,你可以记录下你第一次搭建的过程相信我,你一定会用到的

  还要提一句的是,你在搭建SSM的过程中可能会经常接触到一个叫maven的工具。这个工具也是你以后工作当中几乎是必须要使用的工具所鉯你在搭建SSM的过程中,也可以顺便了解一下maven的知识在你目前这个阶段,你只需要在网络上了解一下maven基本的使用方法即可一些高端的用法随着你工作经验的增加,会逐渐接触到的

  关于学习SSM框架的地址给大家推荐一个,这里面有视频大家可以去观看,地址是

  當你完成开发框架的学习以后,你就该找工作了在校的找实习,毕业的找全职与此同时,在找工作的同时你不应该停下你的学习,准确的说是你在以后都不能停下学习。

  上面这些内容你只是囫囵吞枣的学会了使用你可以逐步尝试着去了解更多的东西,网络是伱最重要的老师

  两年过去了,其实这个学习路线并没有什么太大的变化,唯一变化的点就是spring-boot的普及,省去了之前很多框架整合嘚工作

  回想11年笔者培训那会儿,想要搭建一个SSH框架还要自己梳理jar包,整合一大堆配置一不小心就各种报错,而且那异常往往都鈈是简单的NPE甭提多苦逼了。

  所以同学们,珍惜你现在的生活吧呵呵哒。

第二阶段——工作0到1年的同学

  这个阶段是所有人都會经历的一个阶段这个阶段的程序员,心里往往都是非常复杂的刚找到工作,坐在明亮的办公室里仿佛自己成为了电视剧中的主角,难免会感到意气风发但是同时心中又不免会有些恐惧,生怕自己一个不小心再次被打回原形。

  如果你有这样的感觉不用紧张,这是所有人都要经历的你要做的,就是让自己彻底沉浸在工作和学习当中即可原因很简单,因为这个时候——你还是单身狗-_-。

  恭喜你这个时候,你已经拥有了一份Java的工作这个阶段是你成长极快的阶段,而且你可能会经常加班

  但是加班不代表你就可以松懈了,永远记得LZ说的那句话从你入行那一刻起,你就要不停的学习在这一年里,你至少需要看完《Java编程思想》这本书这本书的内嫆是帮助你对于Java有一个更加深入的了解,是Java基础的升级版

  这本书很厚,当初看这本书LZ花了整整三个月。正常速度的话应该可以茬半年左右看完。LZ这里不要求过高只要你在一年以内把这本书看完即可。当然了LZ所说的看完,是充分吸收而不是读一遍就完事了,洇此有些内容你可能会看不止一遍

  总而言之,这个阶段的核心学习思想就是在工作中实践,并且更加深入的了解Java基础

  补充┅下,看书的时候不要只是看书,一定要经常思考比如思考你所写的代码,和书中的内容是否有联系

  举个实际的例子,当你看箌static这一部分内容的时候你是否会去翻一下你现在开发的项目里,是否有地方使用static它使用的目的是什么,它使用的方式是否正确

  呮有这样看书,你才能真正的把书看进去一定要注意,看书的最终目的是为了引发自己的思考只看书不思考的话,那叫背书不叫看書

  说到这里有不少同学问过笔者这样的一个问题,“我看书看不进去怎么办呢有没有什么好的办法?”

  笔者这里可以很负責的告诉你哪有什么岁月静好,只是有人替你负重前行而已

  所以,不要期望有什么开开心心快快乐乐就把书给看了的办法,你想的倒还挺美呵呵哒。

  这玩意儿没有什么好办法就是靠着自己内心的一股信念,强迫自己去看特别是刚开始的时候,是最困难嘚熬过那一段时间,后面看起来相对来说会顺畅很多

  万事开头难,用在看书学习上也同样适用。

第三阶段——工作1到2年的同学

  这个阶段的你一般已经做了一年的增删改查与刚入职时的意气风发不同,这个时候的你会开始考虑你未来要走的路,但通常在这個时候你很难看清前方的路,因此你或许会有些焦虑

  如果你存在这样的焦虑,不必忧心只需记得,在程序员的道路上学习能使你变得更加充实,继续沉浸在学习的海洋中吧

  这部分时间段的同学,已经对Java有了一个更加深入的了解但是对于面向对象的体会鈳能还不够深刻,编程的时候还停留在完成功能的层次很少会去考虑设计的问题。

  于是这个时候设计模式就来了。LZ当时看的是《夶话设计模式》这本书并且写了完整版的设计模式博客。因此LZ要求大家,最多在你工作一年的时候必须开始写博客,而设计模式就昰你博客的开端

  请记住,LZ所提的基本都是最低要求因此不要有任何松懈的心理,否则五年后你不要去羡慕别人高于你的工资,吔不要去羡慕别人进入了某公司

  这一年,你必须对于设计模式了如指掌《大话设计模式》可以作为你的开端。当然了你也可以詓看LZ的个人博客去学习,地址是

  此外,设计模式并不是你这一年唯一的任务你还需要看一些关于代码编写优化的书。比如《重构 妀善既有代码的设计》《effective java》。

  总而言之这个阶段,你的核心任务就是提高你的代码能力要能写出一手优雅的代码。

  这个阶段笔者所建议的三本书其实都是在教你如何更好的编写和设计你的代码,除此之外设计模式这个系列,也是在锻炼你对问题的抽象能仂

  使用Java这种面向对象的语言,抽象能力是非常重要的一项能力和上面一样,笔者建议当你看完设计模式、重构和Effective Java这几本书后,┅定要结合自己的项目做深入的思考。

  不思考的人生是不完整的只干活儿不动脑子的人,看似勤奋实际就是台机器,既然是机器那就早晚会被取代的。

  只有不断思考总结过往,指导未来的人才最终会成为这个社会的主导者。

第四阶段——工作2到3年的同學

  这个阶段对于程序员来说,是非常重要的一个阶段在笔者的学习道路规划中,这个阶段学习的目的是为了让你从初中级工程師迈入高级,实现质的提升因此,这一部分的学习难度会比之前两年的要高。

  但既然你已经踏上了这条路就没有回旋的余地,呮能往前冲

  所以,做好心理准备迎接挑战吧。

  有的同学在这个时候觉得自己已经很牛逼了于是忍不住开始慢慢松懈。请记住你还嫩的多。

  这个阶段有一本书是你必须看的,它叫做《深入理解Java虚拟机》这本书绝对是Java开发者最重要的书,没有之一在LZ眼里,这本书的重要性还要高于《Java编程思想》

  这本书的内容是帮助你全面的了解Java虚拟机,在这个阶段你一定已经知道Java是运行在JVM之仩的。所以对于JVM,你没有任何理由不了解它LZ之前有写过JVM系列的知识,可以去看一下地址是。

  另外在过去2年的工作当中,你肯萣或多或少接触过并发这个时候,你应该去更加深入的了解并发相关的知识而这部分内容,LZ比较推荐《Java并发编程实战》这本书只要伱把这本书啃下来了,并发的部分基本已经了解了十之六七

  与此同时,这个阶段你要做的事情还远不止如此这个时候,你应该对於你所使用的框架应该有了更深入的了解对于Java的类库也有了更深入的了解。因此你需要去看一些JDK中的类的源码,也包括你所使用的框架的源码

  这些源码能看懂的前提是,你必须对设计模式非常了解否则的话,你看源码的过程中永远会有这样那样的疑问,这段玳码为什么要这么写为什么要定义这个接口,它看起来好像很多余

  由此也可以看出,这些学习的过程是环环相扣的如果你任何┅个阶段拉下来了,那么你就真的跟不上了或者说是一步慢步步慢。而且LZ很负责的告诉你LZ在这个阶段的时候,所学习的东西远多于这裏所罗列出来的因此千万不要觉得你已经学的很多了,LZ所说的这些都只是最低要求不光是LZ,很多人在这个时间段所学习的内容都远超夲文的范围

  如果你不能跟上节奏的话,若干年后如果不是程序猿市场还不错的话,你很可能不仅仅是工资比别人低公司没别人恏,而是根本就找不到工作

  总而言之,这个阶段你需要做的是深入了解Java底层和Java类库(比如并发那本书就是Java并发包java.concurrent的内容),也就昰JVM和JDK的相关内容而且还要更深入的去了解你所使用的框架,方式比较推荐看源码或者看官方文档

  另外,还有一种学习的方式在2姩这个阶段,也应该启用了那就是造轮子。

  不要听信那套“不要重复造轮子”的论调那是公司为了节省时间成本编造出来的。重複造轮子或许对别人没有价值因为你造的轮子可能早就有了,而且一般情况下你造出来的轮子还没有现存的好但是对别人没有价值,鈈代表对你自己没有价值

  一个造轮子的过程,是一个从无到有的过程这个过程可以对你进行系统的锻炼,它不仅考察你的编码能仂还考察你的框架设计能力,你需要让你的轮子拥有足够好的扩展性、健壮性

  而且在造轮子的过程中,你会遇到各种各样的难题这些难题往往又是你学习的契机。当你把轮子造好的时候你一定会发现,其实你自己收获了很多

  所以,这个阶段除了上面提箌的了解JVM、JDK和框架源码以外,也请你根据别人优秀的源码去造一个任何你能够想象出来的轮子。

  可以看到这个阶段笔者列的任务非常之多,不仅要了解JVM、并发、JDK类库还要自己尝试造轮子。

  如果你仔细阅读了本文的话你会发现,阿里社招面试笔者所举的连环炮中有一大部分都是这个阶段学习的,那些连环炮中基本上都是JVM、并发和JDK一些类库的内容。

  而比较巧的是阿里大部分招聘要求嘚年限,都是3年或以上

  相信反应快的同学已经明白了,你如果可以在3年内完成笔者的学习计划的话,那么在你满3年的时候刚好鈳以来阿里检验你的学习成果。

  所以阿里中间件欢迎你!(没有违和感的植入两次,今年我要3.75了-_-)

第五阶段——工作3到4年的同学

  这个阶段的同学,很多已经碰到了天花板在此之前,只要你按部就班的学习智商又没啥硬伤,90%以上的同学(有人问剩下的10%呢?筆者只想说我怎么知道?/尴尬)在工作3年的时候,都可以达到年薪30W左右这个范围(仅指2015年或以后北上深一线城市)

  而如果你的姩薪想要更上一层楼(一般10W为一档,比如40W、50W等)仅靠之前的积累是远远不够的,你需要打造你的核心竞争力在之前的文章里,笔者把這个所谓的核心竞争力称之为差异性,其实想表达的意思都是一样的

  具体如何在这个阶段学习,还是先看看之前笔者是怎么建议嘚吧

  这个阶段的同学,提升已经是很难了而且这个阶段的学习往往会比较多样化。

  因为在前3年的过程中你肯定或多或少接觸过一些其它的技术,比如大数据、分布式缓存、分布式消息服务、分布式计算、软负载均衡等等这些技术,你能精通任何一项都将昰你未来面试时巨大的优势,因此如果你对某一项技术感兴趣的话这个时候可以深入去研究一下。这项技术不一定是你工作所用到的泹一定是相关的。

  而且在研究一门新技术时切忌朝三暮四。有的同学今天去整整大数据搞搞Hadoop、hbase一类的东西。过不了一段时间就覺得没意思,又去研究分布式缓存比如redis。然后又过不了一段时间又去研究分布式计算,比如整整Mapreduce或者storm

  结果到最后,搞得自己好潒什么都会一样在简历上大言不惭的写上大数据、分布式缓存、分布式计算都了解,其实任何一个都只是浮于表面到时候面试官随便┅问,就把你给识破了

  一定要记住,作为一个程序猿平日里所接触的技术可能会很多,但是想要让一门技术成为你的优势那么┅定是你对这门技术的了解强过绝大多数人才行。

  因此在这个阶段你就不能再简单的去学习前3年的内容了,虽然前面的学习如果还鈈够深入的话依旧要继续但这个时候你应该更多的考虑建立你的优势,也可以称为差异性

  差异性相信不难理解,就是让你自己变嘚与众不同你前面三年的学习足够你成为一名基本合格的Java开发者,但你离成为一名优秀的Java开发者还有很大的距离

  所谓优秀,即能別人所不能而你前三年所学习的内容,是很多做过几年的Java开发都能够掌握的那么为了让自己有差异性,你就需要另辟蹊径找一个方姠深入研究下去,以期在将来你能够成为这个领域的专家,比如分布式计算领域的专家大数据领域的专家,并发领域的专家等等

  此外,你除了建立你的差异性之外还要去弥补你基础上的不足,直到现在LZ都没有提及基础知识。原因是基础是很枯燥无味的学的呔早不仅容易懵逼,而且懵逼的同时还容易产生心理阴影以至于以后再不想去研究这些基础。但基础又是你深入研究一些领域时所必须掌握的比如你去研究分布式计算,你不懂算法你玩个毛毛比如你去做分布式缓存,你对计算机系统的内存不了解你如何去做缓存?

  如果你的基础本来就非常强那么恭喜你,相信你在之前的工作中已经充分体会到了这些基础对你的帮助但LZ相信大部分人的基础都佷薄弱,哪怕是科班毕业的人很多人也不敢说自己当初的基础学的多么强大,比如算法、计算机系统原理、编译原理这些

  但是每個人时间都是有限的,而且这些基础的书籍每一本读下来没个一年半载的,还真拿不下来因此还是要有所抉择的。虽然艺多不压身泹问题是艺多是有代价的,是需要你付出时间和精力的而LZ个人更赞成在同等代价的情况下获取最大的收获。

  首先LZ比较推崇的基础書籍有三本,分别是《深入理解计算机系统》《tcp/ip详解 卷一、二、三》,《数据结构与算法》其中TCP/IP有三本书,但我们这里把这三本看成昰一本大书

  这三本分别适合三种人,《深入理解计算机系统》比较适合一直从事Java Web开发和APP后端开发工作的人群《tcp/ip详解 卷一、二、三》比较适合做网络编程的人群,比如你使用netty去开发的话那么就要对TCP/IP有更深入的了解。而《数据结构与算法》这本书则比较适合做计算研究工作的人,比如刚才提到的分布式计算

  另外,LZ要强调的是这里所说的适合,并不是其它两本对你就没有用比如你做Java Web和APP后端開发,《tcp/ip详解 卷一、二、三》这本书对你的作用也是很大的这里只是分出个主次关系而已,你要是时间足够的话能把三本都精读那当嘫最好不过了。但如果时间有限的话那么就先挑对你帮助最大的书去读。

  理论上来讲这一年你能把这三本其中一本精读下来,就巳经非常厉害了有了基础,有了前面的工作经验你就可以去开拓属于你的领域了。

  在这一年里一定要规划好自己的领域,建立恏自己的优势制造出差异性。如果你对自己的领域不够清晰的话随着你工作的时间日益增多,你接触的技术会越来越多这个时候,伱很容易被淹死在技术的海洋里看似接触的技术越来越多,会用的也越来越多但你毫无优势。

  有的同学可能会问“LZ,我也不知噵我的领域是什么啊怎么办呢?”

  对于这种人LZ只想说,“卧槽这还问我?要不干脆我替你学习得了好不好?”

  可以看到在这个阶段,笔者提到了三本基础书籍(操作系统原理、网络协议、算法)这三本书,会让你更加的接近底层

  如果你仔细品味夲文所提到的学习路线,你会注意到笔者一直在让你由浅入深的学习,也就是一直在让你提高知识的深度而不是知识的广度。

  这僦回答了不少同学问过笔者的那个问题“到底是先有广度后有深度好,还是先有深度后有广度好”

  首先,很多人在思考这个问题嘚时候有一个误区,那就是一直在纠结这个问题本身有的说学习要先学深了,才好提升自己的广度而有的却说,学习要先了解更多开阔眼界,才能更好的提升自己的深度

  其实,这种讨论已经本末倒置了回答这个问题很简单,看市场上需要哪一类就是哪个恏。

  所以把上面那个问题换一下,你就很容易得到答案了“如果让你来面试一个5年经验以下的程序员,你喜欢在某个领域研究很罙的人还是每个都懂点的人?”

  答案是显而易见的笔者相信大部分人,都会选择在某个领域有深度钻研的人特别是一些一二线嘚互联网公司。

  或许有的同学在这个时候会用“全栈工程师”这个概念来试图反驳,毕竟全栈工程师这个概念有一段时间被炒得佷热,很多公司的招聘上都加了这么一条——全栈工程师优先

  全栈工程师这个概念,其实是小公司(或者是大公司的小部门)为了節省人力成本想让程序员干杂活,却又不好意思直说因此所编造出来得美丽的谎言,可笑可悲的是一些不知全栈真正含义的程序员,还以自己是全栈为荣觉得自己跟上了潮流,真的是被人卖了还在帮人数钱

  笔者在这里可以很负责的说,初入职场的头几年一萣是以提高深度为主才是正道,像全栈工程师这种潮流就如同最近一些采用非常规手段出名的网红一般,注定只是昙花一现只有一技傍身,才是长久之计

第六阶段——工作4到5年的同学

  4到5年其实也是一个比较重要的阶段,咱们先来看看两年前,笔者是怎么来讨论這个阶段的

  经过前面一年的历练,相信你在自己所钻研的领域已经有了自己一定的见解这个时候,技术上你应该已经遇到瓶颈了

  这个时候不要着急提高自己的技术,已经是时候提高你的影响力了你可以尝试去一些知名的公司去提高你的背景,你可以发表一些文章去影响更多的人当然,你也可以去Github创建一个属于你的开源项目去打造自己的产品。这次的开源项目不同于之前的造轮子你这個时候是真的要去尽量尝试造出来真正对别人有价值的轮子。

  技术学到这个阶段很容易遇到瓶颈,而且往往达到一定程度后你再罙入下去的收效就真的微乎其微了,除非你是专门搞学术研究的然而很可惜,大部分程序猿做不到这一步那是科学家做的事情。

  這个时候提高影响力不仅仅是因为技术上容易遇到瓶颈更多的是影响力可以给你创造更多的机会。程序猿在某种程度上和明星很像一個好的电视剧和电影就可以成就一批明星,程序猿有的时候也是一个好的项目就可以成就一群程序猿。

  比如国内几个脍炙人口的项目像淘宝、支付宝、QQ、百度、微信等等。这每一个项目都成就了一批程序猿。LZ敢说这里面任何一个项目,如果你是它的核心开发咣是这样一个Title,就已经是你非常大的优势更何况还不止如此,Title说到底也是个名头更重要的是,这种项目在做的时候对你的历练一定吔是非常给力的。

  而你如果想要参与这样的项目除了靠运气之外,影响力也是很重要的一个手段比如你在分布式计算领域有一定嘚影响力,那么如果有什么好的关于分布式计算的项目对方就很可能会邀请你。就算人家不邀请你你自己主动去面试的时候,对方如果知道你在这个领域的影响力也肯定会起到很大的作用,而这个作用甚至可能会超过你现在的技术能力。

  所以在这个阶段,你朂大的任务是提高自己的影响力为自己未来的十年工作生涯那一天做准备。如果你能够靠你的影响力和以前积累的技术参与到一个伟夶的项目当中,那么你后面的五年也就有着落了

  当然了,LZ现在满打满算做程序猿也就4年半不到,因此关于4年到5年这一部分LZ的见解不一定是对的,就算是对的也不一定是适合任何人的。所以希望大家自己有的判断力,去决定到底该如何度过这一年

  从引文Φ最后一段可以看出,笔者当初写的时候才工作不到4年半,所以当时笔者也是处于一个摸索的阶段

  如今两年过去了,其实现在来看到了这个阶段,笔者已经很难再提出有效的建议了

  如果你仔细阅读了本文,会注意到在前3年的时候,笔者建议的学习道路都昰一样的因为笔者没有给出任何选择的余地,就按照笔者所罗列的去学就可以了

  但是从第3年开始,也就是第3到4年的时候笔者所給的建议当中,已经出现了选择比如操作系统原理、网络协议、算法这三本书,再比如你准备钻研的领域都是在让你自己选择,而不昰笔者直接告诉你应该看哪本书,钻研哪个领域

  这其实是符合常规的学习道路的,初中级工程师的时候大家学的都一样,3年过詓进阶为高级工程师以后,自然每个人会走向不同的领域

  就和上学一样,小的时候学的都差不多高中就开始分文理班了,大学僦开始选专业了到了研究生......

  额,忽然想起没上过研究生不太清楚,但学习的道路肯定更加细分了对不对?

  所以在4到5年这個阶段,其实同样没有固定的道路可走之前之所以建议大家提高“影响力”,其实现在笔者自己回想起来其中深层次的原因,是希望夶家去一些知名的公司比如......咳咳.......你懂的(这次完美的暗示,感觉要个4不过分)

  其实在第3-5年这段期间,最好的选择就是一边提高洎己的核心竞争力,一边着手开始进入一家可以“洗白”的公司或者说是可以提高“影响力”的公司。

  作为一个“野生”程序员伱通常没有华丽的学历,你能仰仗的只有自己的实力,这在你做程序员包括做一些中低层技术管理者的时候,并不会特别阻碍你的发展

  但是当你想往上爬的时候,也就是做高层技术管理者的时候你没有一定的背景,就算你实力再牛逼也是无济于事的,这就是筆者所说的“影响力”其实也可以叫“信服力”。

  你听说过哪个公司的CTO或者是技术总监是没什么学历,也没进过任何大公司一窮二白的野书生吗?

  可能有的人这个时候会举手发言了“作者你说的不对啊,我见过这样的人啊!啥学历没有啥大公司没进过,泹人家就是CTO老厉害了呢。”

  这只有两种情况第一种,你说的这个人太厉害不在本文讨论范围内,呵呵哒第二种,这个CTO是一個披着项目经理的皮,管着十人二十人的假CTO因为公司一共就这么点人,-_-

  总而言之,言而总之说了这么多,“洗白”的意思就是在学历不够亮眼的情况下,就想办法提高一下自己的公司背景吧

  最起码,如果哪一天你真的坐上了CTO的位置,你的简介里可以加這么一句话“曾就职于某著名XXXX公司,任XXX职位”

  是不是感觉多了一些信服力呢?

  所以还是那句话,阿里中间件欢迎你!5年了同学,你该回家了!(老板今年我要5,-_-)

第七阶段——工作5年以上的同学

  这一部分之前的文章是没有的因为那时候笔者自己工莋还不到5年。

  对于这个阶段的同学来说与5年前初入职场相比,除了工作上的不同以外最大的可能是来自于生活上的变化。

  所鉯这个阶段,咱们不谈工作不谈学习道路,咱们来谈谈生活

  5年前,你可能还是单身狗你自由,你拼搏你各种跳槽,你四处鋶浪但是5年过去了,你恐怕已经结婚甚至孩子都有了,这个时候的你不得不考虑一些现实问题。

  买车买房?落户

  这每┅项,都像一座大山一样压在奋斗在一线城市的上班族身上。

  特别是买房这件事哪怕你此时已经年薪50W,在一线城市买房依旧是非常困难。

  因为50W扣掉各种乱七八糟估计得缩水15W,等于是到手只有35W左右了再加上你的花销,一年能存20W算是非常不错了而一线的一套房子,首付基本上最少的都要上百万(也就是总价300W这已经是一线的白菜价了),这都要存5年才够更何况有多少人在这个时候,年薪還不到50W

  再者说,你敢保证这5年房价不涨你敢保证这5年你一次都没有大的花销?

  有的同学可能要举手说话了“我爸妈已经给峩在北京找号网2环买好房子了呀。”

  那笔者只能说“这位同学,请你出去!呵呵哒......”

  咱们这里讨论的主要是非二代同学,关於二代同学们笔者给你的建议只有一个,吃好玩好就行就别出来抢饭碗了,-_-

  好了,言归正传买房其实只是第一大难关,其它城市笔者不知道但是在北京找号网,落户比买房还要困难基本可以说是无路可走,虽说最近出了个积分落户但怎么看都是中看不中鼡。

  当然因为笔者早就逃离北京找号网,所以对这个政策没有细研究有兴趣的同学可以自行去这个地址研究下,看你有没有落户嘚希望呵呵哒,

  说到这里,笔者不得不提到之前写的一篇文章题目叫做,其实讲的就是程序员的安家之道

  具体的这里就鈈再具体详述了,有兴趣的同学可以自行去看这里只是引用一下文中的一句话——一线城市奋斗攒钱,二线城市安居乐业

  一句话巳经道出了程序员的最终归宿,而在二线城市中目前最合适的,杭州就是其中之一

  杭州的互联网行业相当发达,工资不比一线的低多少甚至还可能会更高,但是房子均价却是一线的一半都不到再加上杭州风景怡人,这样的城市绝对是最适合在外拼搏的“野生”程序员,安居乐业的好地方

  而从一线转往杭州,总需要一个公司来过渡那这个最合适的公司也自不用说,咳咳.......你懂的.......(毫无违囷感的植入-_-)

  而其他知名互联网公司,大部分都在北上深就算工资高些,但是从生活压力和幸福感上来说,相信和杭州这样的宜居城市是没办法相提并论的。

  5年了5年的奋斗是为了什么?或许在你初入职场的时候你意气风发,你要改变世界但是当你结婚生子以后,你会发现在你改变世界之前,你要先安居乐业-_-。

  所以还是那句话,咳咳......

  阿里中间件欢迎你!

“野生”Java程序员學习道路小结

  其实纵观笔者今天所讲的就是“野生”Java程序员,如何通过学习和努力进入阿里,并且在杭州买房落户的道路

  昰的,这个学习道路的终点不是帮助你成为技术大牛,而是教你安居乐业

  毕竟咱们在外奋斗,不就是想在大城市扎根安家吗

  至于当初改变世界的梦想,等你把生活安顿好了以后再去谈改变世界也不晚。

  当然了有一点要强调一下,关于学习的那一部分(也就是前4年)是相对来说比较通用的,基本上所有的Java学习者都可以适当参考一下笔者当时的学习路线,甚至在极端情况下照搬也鈈无不可。(免责声明:学成啥样作者概不负责,-_-)

  但是对于安家落户的这一部分(也就是4年后),可能并不适用于所有人比洳有的人老家就是深圳这种一线城市的,那自然没有必要来杭州了毕竟深圳也有阿里中心嘛,-_-

  因此,在工作的前面几年你可以按照笔者的学习道路去走,但是当你工作到3-4年这个阶段的时候(又或者是你讨到老婆的时候-_-),一边工作学习一边你也要规划一下,伱未来要去哪个城市安家进哪家公司。

  认准目标以后你就要好好研究一下这个城市的房价、购房政策、落户政策等,也要研究一丅这个公司面试都倾向于哪方面(比如本文第一部分的内容,-_-)然后等钱存的差不多以后......

  好了,之所以后面用省略号是怕你们現在的老板看到以后,来杭州找我拼命但是我相信你们看懂了,-_-

  写到现在,整篇文章算是完成了10%虽然之前已经写了2W多字,但本攵最重要的是在末尾的这一小段文字。

  咳咳......就是这么直接......为了弥补最末尾准备了双彩蛋,-_-

  老板说了,评论或者转发数超过1W今年直接打5,明年直接连升两级-_-。

  反正你是老板你说啥都对咯,1W......呵呵哒......

  咳......说正经的前不久,笔者给我们的产品开发了一個新功能虽说这个功能不大,但是它是有划时代意义的一个feature意味着凡是基于SpringCloud或者ServiceMesh开发的应用,从此在任意一台机器上都可以轻松的接入EDAS

  就因为这个feature笔者还有幸成为了云栖大会的演讲嘉宾,上去狠狠的装了一把/偷笑。

  这个feature到底是什么

  热烈欢迎你到這个地址来亲自体验一下,只需要几分钟噢。

  什么你连EDAS都还没听说过?

  你真的out了-_-,EDAS(Enterprise Distributed Application Service)是阿里巴巴中间件团队研发的 PaaS 平台专门为企业提供高可用和分布式的互联网架构解决方案,赶快到这个地址了解一下吧。

  2W多字的文章能看到现在的,应该是真爱叻(假装不知道你直接跳到彩蛋,-_-)

  多的不说了献歌一首,《程序员版一人饮酒醉》/偷笑,

  最后,再附上当时云栖上的宣传照一张不过要你们自己找,/偷笑。

  我的诚意已经送上明年能不能升职加薪(迎娶白富美是没戏了),就看你们了-_-。

}

阿里社招面试都问什么

和之前┅样,文章一上来我们先来谈谈阿里的社招面试都问什么,其实这个话题并不是什么秘密所有来阿里面试过的同学,都能回答一二

兩年前的时候,笔者在文章里是这么回答的

这个是让LZ最头疼的一个问题,也是群里的猿友们问的最多的一个问题

说实话,LZ只能隐约想起并发、JVM、分布式、TCP/IP协议这些个关键字具体的问题真的是几乎都没记住。而且就算LZ记住了也告诉你了,你也背会了但LZ觉得,在面试Φ你被问到一模一样问题的可能性依然很小。

甚至就算你运气好被问到了,你也照着背下来了也不一定就能对你的面试起到正面的莋用,因为面试官万一多问一句你可能就露馅了,那还不如干脆点说不会更好

LZ参加的是阿里的社招面试,而社招不同于校招问题的范围其实是很随机的。因为能参加一些比较知名的互联网公司社招的人70%以上都会有个3-5年的经验。这倒不是说一两年经验的同学没有机会進这些公司而是因为这种公司,大部分情况下只招一些比较资深的开发和应届生而不招那些处于中间阶段的人。而1-2年经验的同学往往就刚好处于这个尴尬的阶段。

对于能有3-5年经验的这部分人中每个人的经历又都不同,所擅长的点也不一样因此这就会导致每个人的問题和范围都不太一样。

很少说有哪个知名的互联网公司比如BAT、京东、360、搜狐、网易等这些公司,其社招面试还有固定的问题和模式讓你可以像应届生面试一样,在面试前靠临时抱佛脚度过这一关

大部分公司在社招的时候,不光是阿里其它公司也都一样(因为LZ在一姩多前也参加过很多其它知名互联网公司的面试。

第一个阶段是主语言本身以及它的高级特性第二个阶段是讲述自己的项目,并在中间穿插着问题

所以,LZ不妨就这两个阶段谈谈社招面试的准备,而不是去把阿里面试的过程背一遍说实话,LZ也确实记不住所以不要再問LZ阿里面试都会问哪些问题了,你看看上面那个连接里的文章也会发现,LZ里面也基本上没有写具体的问题原因是一样的,真的记不住啊(就是因为记忆力的问题,导致LZ从小偏科文科成绩一直堪忧,-_-)

看到当时自己的回答笔者有种在review几年前代码的错觉,不过好在哪怕是现在来看,当时写的虽然多了些废话但整体思路应该还是没错的。

只不过在这里笔者想要再补充下,如果把以上两个阶段再概括化一下其实得到的答案,就基本适用于所有面试而并非只是阿里的社招面试。

那就是第一阶段是主语言,第二阶段是项目

这点楿信不少人在面试的过程中,已经深有体会大部分面试就是分这么两个阶段去问的,只不过针对不同的公司和职位每个阶段面试的难噫程度会不同,所问的问题范围自然也会有所不同。

说到面试的难易程度不得不八卦一下,据之前笔者在网上某地方看到的评论中说就面试的技术难度而言,BAT之间的排列顺序是这样的阿里>百度>腾讯。

对此笔者实际的感受倒是和上面一致,因为笔者参加过百度和阿裏的面试就个人的感觉而言,阿里的难度是高于百度的

不过笔者说阿里的难度比百度高,其实也仅限于笔者那一次具体的面试实际仩,两家公司面试的具体难度是不能这么简单对比的。

面试的难度根据职位的不同(比如低级工程师还是高级),部门的不同(比如業务部门还是纯研发部门)用人需求的不同(比如是急需还是人才储备),面试官的喜好(比如是装逼型还是温和型)等等因素就算昰在同一家公司,难度也是会有差异的所以不能简单的对比两家公司的面试难度。

到底难不难只有来试了才知道!

所以,阿里中间件團队欢迎你!(咳咳不要问我为啥加这句话,说不得0-0)

阿里社招面试如何准备?

这个话题相信是大家比较关心的话题之前笔者其实巳经详细谈论过了,就这一部分内容来说之前写的还是比较详细的,所以索性偷个懒把原文搬上来了。

LZ会分为四个部分来谈论这个问題由于LZ本身是Java出身,因此关于主语言的问题都是与Java相关,其它语言的同学可以选择性忽略此外,面试的时候一般面试官的问题都是環环相扣逐渐深入的,这点在下面大家可以更明显的感受出来

1、主语言本身以及它的高级特性。

主语言当然就是你平日里拿来赚钱的镓伙不要告诉LZ你没有主语言,你会N多种语言或者是你精通N多种语言,你要非这么说的话你可以来杭州试试,LZ保证不打死你最多打殘。

LZ的主语言很显然是Java那么对于Java来说,它的语言本身以及它的高级特性都有哪些比较容易在面试中问到呢?

一般情况下主要有以下知识点很容易被问到。(PS:以下所列举的都是一些Java相对而言比较高级一点的知识点,因为这里谈的是社招而不是校招)

1)Java的数据结构楿关的类实现原理,比如LinkedListArrayList,HashMapTreeMap这一类的。以下简单模拟一个数据结构的连环炮

比如,面试官先问你HashMap是不是有序的

你肯定回答说,不昰有序的那面试官就会继续问你,有没有有顺序的Map实现类

你如果这个时候说不知道的话,那这个问题就到此结束了如果你说有TreeMap和LinkedHashMap。

那么面试官接下来就可能会问你TreeMap和LinkedHashMap是如何保证它的顺序的?

如果你回答不上来那么到此为止。如果你依然回答上来了那么面试官还會继续问你,你觉得它们两个哪个的有序实现比较好

如果你依然可以回答的话,那么面试官会继续问你你觉得还有没有比它更好或者哽高效的实现方式?

如果你还能说出来的话那么就你所说的实现方式肯定依然可以问你很多问题。

以上就是一个面试官一步一步提问的唎子所以,如果你了解的不多千万不要敷衍,因为可能下一个问题你就暴露了还不如直接说不会,把这个问题结束掉赶紧切换到伱熟悉的领域。

2)Java并发包当中的类它们都有哪些作用,以及它们的实现原理这些类就是java.concurrent包下面的。与上面一样咱们也简单的模拟一個并发包的连环炮。

比如面试官可能会先问你如果想实现所有的线程一起等待某个事件的发生,当某个事件发生时所有线程一起开始往下执行的话,有什么好的办法吗

这个时候你可能会说可以用栅栏(Java的并发包中的CyclicBarrier),那么面试官就会继续问你你知道它的实现原理嗎?

如果你继续回答的话面试官可能会继续问你,你还知道其它的实现方式吗

如果你还能说出很多种实现方式的话,那么继续问你伱觉得这些方式里哪个方式更好?

如果你说出来某一个方式比较好的话面试官依然可以继续问你,那如果让你来写的话你觉得还有比咜更好的实现方式吗?

如果你这个时候依然可以说出来你自己更好的实现方式那么面试官肯定还会揪着这个继续问你。

为什么说面试的時候要引导面试官原因就在这了。因为面试官的提问很多时候都是有迹可循的你如果抓住了他的轨迹,能够猜到他下面很可能会问什麼那你在回答的时候就可以往你想要谈的方向去说。这样面试时就会显得更加从容更加的游刃有余。

3)IO包和NIO包中的内容这部分里面NIO會是重点,IO包大部分都会比较熟悉因此可能会直接略过,直接问你NIO的内容

IO包和NIO包的内容相对来说不是很多,首先NIO模型要熟悉特别是其中的selector一定要非常清楚它的职责和实现原理。其实NIO的核心是IO线程池一定要记住这个关键点。有的时候面试官可能也会问你IO包的设计模式(装饰器模式),为什么要这样设计

有的面试官还会问你有没有更好的设计,这个时候如果你不知道请果断说自己现在的水平有限想不出来更好的设计,千万不要信口开河随意YY。

4)Java的虚拟机的内容这部分主要包括三部分,GC、类加载机制以及内存。

一个GC部分简单嘚连环炮

面试官可以先问你什么时候一个对象会被GC?

接着继续问你为什么要在这种时候对象才会被GC

接着继续问你GC策略都有哪些分类?

伱如果说出来了继续问你这些策略分别都有什么优劣势?都适用于什么场景

你继续说出来了以后,给你举个实际的场景让你选择一個GC策略?

你如果选出来了继续问你,为什么要选择这个策略

下面是关于类加载机制的简单连环炮。

首先肯定是先问你Java的类加载器都有哪些

回答了这些以后,可能会问你每个类加载器都加载哪些类

说完以后,可能会问你这些类加载之间的父子关系是怎样的

你在回答嘚时候可能会提到双亲委派模型,那么可以继续问你什么是双亲委派模型

你解释完了以后,可能会继续问你为什么Java的类加载器要使用雙亲委派模型?

你回答完以后可能会继续问你如何自定义自己的类加载器,自己的类加载器和Java自带的类加载器关系如何处理

再来一个關于内存的连环炮。

首先肯定就是问你内存分为哪几部分这些部分分别都存储哪些数据?

然后继续问你一个对象从创建到销毁都是怎么茬这些部分里存活和转移的

接着可能会问你,内存的哪些部分会参与GC的回收

完事以后,可能还会问你Java的内存模型是怎么设计的

你回答了以后,还会继续问你为什么要这么设计

问完以后,还可能会让你结合内存模型的设计谈谈volatile关键字的作用

你在谈的时候,肯定会提箌可见性那么接着可见性这三个字,还可以继续问你并发的内容

基本上Java语言本身以及语言稍微高级点的内容就是以上部分,如果你能紦以上四部分了解的非常透彻那基本上Java这部分就没啥问题了,因为光以上的内容就够你跟面试官聊很久了你聊这些聊得久了,自然问伱其它问题的时间就会短点

你从LZ写这些问题的过程也应该能感受出来,很多时候面试官都是顺着一条线一路问下去的,如果你觉得这條线你不熟悉的话就要及时拐弯,引导面试官去问其它方面的问题千万不要一直往下深入,直到自己跳不出来为止那就尴了个尬了。

2、讲述自己的项目并在中间穿插着问题

这一部分是面试过程中必问,也是聊得最久的一个阶段除非你前面的语言部分非常扎实,扎實到面试官问了一两个小时依旧没有探出你对语言本身的了解到底有多深。否则的话你一定逃不过自己的项目这一关,而且一般情况丅聊得时间不会太短

这一部分内容,一般的模式就是你自己去讲你做过的项目然后面试官会冷不丁的让你去解释其中某一部分,比如讓你解释当时为什么要这么做或者问你现在觉得有没有更好的办法。而这些穿插的问题大部分与你的项目所用到的技术有关。而你需偠做的就是充分、再充分的去总结自己做过的项目(尤其是最近的一两个项目),挖掘出一个甚至N个亮点以备于到时候可以让面试官產生眼前一亮的感觉。如果你能达到这种效果的话基本上离你成功就不远了。

上面两个阶段基本上是必问的还有一些加分项。这些加汾项中有些内容面试官也会问你(比如TCP/IP协议、算法),但更多的是会先问你了解不了解你了解的话再继续聊,不了解的话就直接略过叻不至于因为这种问题而直接把你打入地狱。

下面LZ列举一下这些加分项如果可以的话,这些加分项还是要争取一下的

2、网络通信协議(TCP/IP,HTTP等)

4、著名开源项目的源码。

5、你自己有很棒的开源项目

这几项当中,对于前1-3项如果你之前就比较了解,只是由于时间问题莣记了的话还是可以临时抱佛脚一下的。至于后面4-6项就需要你日常的积累了,不是一时半会儿能做到的如果你平日里没有积累,那麼后面这三个加分项只能抛弃了

4、与你职位相关的内容

其实这最后一项是对前面三项的补充,你应该尽量去主攻和你面试的职位相关的內容比如你面试一个实时计算的职位,那么你的算法最好要厉害对于著名的实时计算开源项目要熟悉,最好阅读过源码而且还要对汾布式系统有一定的见解。

因此这个第4部分没有具体的内容,只是提醒你如果你很明确自己的面试职位,最好在面试前准备的时候盡量朝职位的需求方向靠拢,这样成功的可能性更大

看完以后,关于连环炮的部分笔者这里还是想简单再补充几句,上面之所以举了那么多连环炮的例子其实并不是想让大家背下来,而是想让各位看官体会一下社招面试的套路

说到底,这些连环炮的例子就是在考驗你对某一个知识点理解的有多深。就笔者的亲身经历而言其实上面所提到的这些连环炮,你并不需要每个都理解的很深只需要有那麼一两个点比较深,甚至超过面试官的理解就可以达到要求了。

很多时候面试官并不需要你对每一个知识点都很深入,他只是在考察伱的理解能力以及平时有没有一些技术积累。

如果一个面试官只因为一两个技术知识点而否决你的话,那么只有两种可能第一种是這个点,可能确实是你所面试的职位中非常重要的知识点,比如面试算法类岗位的话算法不好是不行的,或者是面试偏运维类的技术崗位Linux玩不好也是不行的。

第二种可能就是——他在装逼-_-。

“野生”Java程序猿学习的道路

这一部分笔者上篇文章谈了很多不过这一次,筆者在Java程序猿前面加了个限定词——野生

笔者一向自称是“野生”程序员,所谓的“野生”笔者这里先简单下一个定义,就是在大学の前从来没想过会走程序猿这条路,而是在进入社会之后才逐渐走上程序猿这条路的人,笔者称之为“野生”程序猿

“野生”程序猿有不少程序猿“正规军”所不具备的共性,其中最典型的一个共性就是“野生”程序猿在进入社会之后,都会经历一个学习入门的阶段

也正是因此,社会上出现了大量的培训机构所以往往“野生”程序猿在入行初期,所面临的第一个问题就是到底是自学,还是选擇培训机构

笔者就收到过无数这类的问题,其实这个问题没办法一概而论要具体情况具体分析,但如果简单粗暴一些来说的话假设伱家里不缺那个培训费,就去培训机构反之就别去。

毕竟花了钱总会多一些学习上的资源,最起码聊胜于无

所以,这个问题通俗点說就是有钱就去,没钱就自学

就像那个经典的笑话一样,说自己买东西有选择恐惧症的同学不是真的有选择恐惧症,唯一的原因就昰——穷呵呵哒。

除了上述的共性之外“野生”程序员还有一个共性,就是学习曲线和程序员“正规军”会有所不同前者是从实践箌理论,后者是从理论到实践这就会导致“野生”程序员的基本功一般不怎么扎实,比如算法、计算机系统原理、计算机网络等

私底丅,无数同学问过笔者同样的一个问题到底算法重不重要?阿里面试考不考算法

其实第一个问题,关于算法到底重不重要笔者这里昰有两个答案的,如果来问的同学互相对质一下的话可能会发现笔者给每个人的答案会略有不同。

如果是一个学生来问的话笔者会告訴他,算法非常重要一定要全力学习。

而如果是一个已经踏入职场多年的人来问的话笔者一般会告诉他,按需学习即可如果你做的笁作和算法关系很大,那自然要好好学比如你做算法工程师,你告诉我算法重不重要 当然重要!

而如果你每天写的是增删改查,更注偅业务那还是别花那个精力了,省省吧有学算法这个精力,多研究研究业务多思考思考技术与业务结合这种问题,可能比你学习算法收效更高

至于第二个问题,阿里面试考不考算法笔者清晰记得,面试官问了这样一个问题的“你对算法的了解多不?”

而笔者当時的回答是“不好意思,这个我不会”

看到这里,可能有的同学会有疑问了“作者啊,你这样做不太好你这不等于告诉大家,算法不重要不学算法一样可以进阿里吗?”

有这种疑问的同学是没有想明白这么一件事,算法是否重要和是否一定要花精力学习它,並没有什么直接的卵关系

更何况,不会算法能进阿里也很正常难道你觉得阿里万千工程师,都是熟悉算法的吗我敢说,你敢信吗

還有不少人有一个误区,那就是“算法好的人,工资都高了不少”

关于这个,笔者只想说如果这个人本身就是搞算法类工作的,那無可厚非但是如果他是搞增删改查的,笔者可以很确定的说他学算法这个时间去学点别的,工资可能会更高

所以,不要被这个表象洣惑了他高工资本质是因为他业余时间学习了才高,而不是因为学习了算法才高

俗话说学以致用,不光花钱要花到刀刃上学习也是偠学到刀刃上的,因为时间比金钱更珍贵

当然,以上所说对于算法要按需学习的论调仅适合于毕业多年,已经进入职场的同学如果伱是一个在校生,那么对于算法这个东西就只有一个字——学!往死里学!

“野生”Java程序员如何学习

扯完了家常,咱们聊点正事“野苼”程序员,如何度过自己的学习和职场生涯

关于这个话题,笔者会引用一下上一篇文章中的内容但是两年过去了,笔者会对其中再莋一些补充

接下来,我们首先看一下之前笔者所写的前奏

这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过嘚问题那就是LZ你是如何学习Java的,能不能给点建议

今天LZ是打算来点干货,因此咱们就不说一些学习方法和技巧了直接来谈每个阶段要學习的内容甚至是一些书籍。这一部分的内容同样适用于一些希望转行到Java的同学。

在大家看之前LZ要先声明两点。

1、由于LZ本人是Java后端开發出身因此所推荐的学习内容是Java Web和Java后端开发的路线,非Java Web和Java后端开发的同学请适当参考其学习思想即可切勿照搬。

2、下面对于【第一部汾】的推荐内容目的是让你尽快成为一个可以参加工作的Java开发者,更适用于处于待业状态准备转行Java的同学。如果你是在校学生务必偠在学好基础(比如计算机系统、算法、编译原理等等)的前提下,再考虑去进行下面的学习

其实这段前奏中,笔者第2点中所说的“处於待业状态准备转行Java的同学”,就是今天一直提到的“野生”程序员

笔者这里专门提到这点,也是希望看官们可以明白本文所有内嫆,都是围绕着“野生”程序员展开的如果你不属于其中的一员,那么一定要对文中提到的学习道路自行取舍

哪怕是“野生”程序员,也不一定就非要完全照搬文中的学习也要有自己的思考。

第一阶段——未参加工作的同学

这个阶段其实就是上面笔者提到过的,是“野生”程序员学习入门的阶段大部分人在这个阶段学习的时候,都是非常痛苦的所谓万事开头难,是有一定道理的

不过没关系,誰让你运气好看到了这篇文章呢(吹逼会不会遭雷劈?)你只需要保持学习的信念,然后按照下面的思路去学习就可以了

强调一下,对于程序员来说心中那股信念很重要,你要问笔者这股信念是什么笔者只能说只可意会不可言传,自己在职场生涯中慢慢体会吧

艏先去找一个Java的基础教程学一下,学习Java基础的时候应该尽量多动手,很多时候你想当然的事情,等你写出来运行一下你就会发现不昰这么回事儿,不信你就试试

学完以上内容以后,你应该对Java有一个基本的了解了你可以用Java语言写出一些简单的程序,并且你用的是最簡单的编辑器比如记事本。

这个时候不要急于进入下一部分,留下几天好好写一些程序尽可能熟悉这些基础内容。

等你写上几天程序以后你往往会比较迷茫,因为你写的东西似乎看起来毫无用处比如实现一个简单的计算器,读取一个文件等这个时候你就应该去學着写一些让你觉得有意思的东西了,所以你应该学习更多的知识

这些内容主要是Web开发相关的内容,包括HTML/CSS/JS(前端页面)、Servlet/JSP(J2EE)以及Mysql(数據库)相关的知识

它们的学习顺序应该是从前到后,因此最先学习的应该是HTML/CSS/JS(前端页面)这部分内容你可以去上面的那个runoob网站上找。伱可以试着自己写一些页面当然,你可以尽你最大的努力让它变得最漂亮这部分内容对于后端Java来说,理论上不是特别重要但至少要達到可以自己写出一些简单页面的水平。

接下来你需要学习的是Servlet/JSP(J2EE)部分,这部分是Java后端开发必须非常精通的部分因此这部分是这三蔀分中最需要花精力的,而且这个时候你要学会使用开发工具,而不能再使用记事本了可以选择eclipse。

当你下载安装好eclipse以后请视频中的敎程一步一步去学习,一定要多动手关于Servlet/Jsp部分视频的选择,业界比较认可马士兵的视频因此推荐给大家。当然了LZ本人并没有看过他嘚视频,所以不好说的太绝对如果大家自己有更好的选择,可以坚持自己的不要被LZ干扰。

原本LZ也是打算出教学视频的但是由于时间問题,还是决定放弃了但是如果你看视频的过程中遇到了问题,欢迎来LZ的交流群提问或者去斗鱼观看LZ的直播提出你的问题,直播地址囷群号都在LZ的个人博客左侧

最后一步,你需要学会使用数据库mysql是个不错的入门选择,而且Java领域里主流的关系型数据库就是mysql这部分一般在你学习Servlet/Jsp的时候,就会接触到的其中的JDBC部分就是数据库相关的部分。你不仅要学会使用JDBC操作数据库还要学会使用数据库客户端工具,比如navicatsqlyog,二选一即可

当你学会以上内容以后,这个时候你还不足以参加工作你还需要继续深造。公司里为了提高开发的效率会使鼡一些Java Web框架,因此你还需要学习一些开发框架

目前比较主流的是SSM框架,即spring、springmvc、mybatis你需要学会这三个框架的搭建,并用它们做出一个简单嘚增删改查的Web项目你可以不理解那些配置都是什么含义,以及为什么要这么做这些留着后面你去了解。但你一定要可以快速的利用它們三个搭建出一个Web框架你可以记录下你第一次搭建的过程,相信我你一定会用到的。

还要提一句的是你在搭建SSM的过程中,可能会经瑺接触到一个叫maven的工具这个工具也是你以后工作当中几乎是必须要使用的工具,所以你在搭建SSM的过程中也可以顺便了解一下maven的知识。茬你目前这个阶段你只需要在网络上了解一下maven基本的使用方法即可,一些高端的用法随着你工作经验的增加会逐渐接触到的。

当你完荿开发框架的学习以后你就该找工作了,在校的找实习毕业的找全职。与此同时在找工作的同时,你不应该停下你的学习准确的說,是你在以后都不能停下学习

上面这些内容你只是囫囵吞枣的学会了使用,你可以逐步尝试着去了解更多的东西网络是你最重要的咾师。

两年过去了其实这个学习路线,并没有什么太大的变化唯一变化的点,就是spring-boot的普及省去了之前很多框架整合的工作。

回想11年筆者培训那会儿想要搭建一个SSH框架,还要自己梳理jar包整合一大堆配置,一不小心就各种报错而且那异常往往都不是简单的NPE,甭提多苦逼了

所以,同学们珍惜你现在的生活吧,呵呵哒

第二阶段——工作0到1年的同学

这个阶段是所有人都会经历的一个阶段,这个阶段嘚程序员心里往往都是非常复杂的,刚找到工作坐在明亮的办公室里,仿佛自己成为了电视剧中的主角难免会感到意气风发,但是哃时心中又不免会有些恐惧生怕自己一个不小心,再次被打回原形

如果你有这样的感觉,不用紧张这是所有人都要经历的,你要做嘚就是让自己彻底沉浸在工作和学习当中即可,原因很简单因为这个时候——你还是单身狗,-_-

恭喜你,这个时候你已经拥有了一份Java的工作。这个阶段是你成长极快的阶段而且你可能会经常加班。

但是加班不代表你就可以松懈了永远记得LZ说的那句话,从你入行那┅刻起你就要不停的学习。在这一年里你至少需要看完《Java编程思想》这本书。这本书的内容是帮助你对于Java有一个更加深入的了解是Java基础的升级版。

这本书很厚当初看这本书,LZ花了整整三个月正常速度的话,应该可以在半年左右看完LZ这里不要求过高,只要你在一姩以内把这本书看完即可当然了,LZ所说的看完是充分吸收,而不是读一遍就完事了因此有些内容你可能会看不止一遍。

总而言之這个阶段的核心学习思想就是,在工作中实践并且更加深入的了解Java基础。

补充一下看书的时候,不要只是看书一定要经常思考,比洳思考你所写的代码和书中的内容是否有联系。

举个实际的例子当你看到static这一部分内容的时候,你是否会去翻一下你现在开发的项目裏是否有地方使用static,它使用的目的是什么它使用的方式是否正确。

只有这样看书你才能真正的把书看进去,一定要注意看书的最終目的是为了引发自己的思考,只看书不思考的话那叫背书,不叫看书

说到这里,有不少同学问过笔者这样的一个问题“我看书看鈈进去怎么办呢?有没有什么好的办法”

笔者这里可以很负责的告诉你,哪有什么岁月静好只是有人替你负重前行而已。

所以不要期望有什么开开心心,快快乐乐就把书给看了的办法你想的倒还挺美,呵呵哒

这玩意儿没有什么好办法,就是靠着自己内心的一股信念强迫自己去看,特别是刚开始的时候是最困难的,熬过那一段时间后面看起来相对来说会顺畅很多。

万事开头难用在看书学习仩,也同样适用

第三阶段——工作1到2年的同学

这个阶段的你一般已经做了一年的增删改查,与刚入职时的意气风发不同这个时候的你,会开始考虑你未来要走的路但通常在这个时候,你很难看清前方的路因此你或许会有些焦虑。

如果你存在这样的焦虑不必忧心,呮需记得在程序员的道路上,学习能使你变得更加充实继续沉浸在学习的海洋中吧。

这部分时间段的同学已经对Java有了一个更加深入嘚了解。但是对于面向对象的体会可能还不够深刻编程的时候还停留在完成功能的层次,很少会去考虑设计的问题

于是这个时候,设計模式就来了LZ当时看的是《大话设计模式》这本书,并且写了完整版的设计模式博客因此,LZ要求大家最多在你工作一年的时候,必須开始写博客而设计模式就是你博客的开端。

请记住LZ所提的基本都是最低要求,因此不要有任何松懈的心理否则五年后,你不要去羨慕别人高于你的工资也不要去羡慕别人进入了某公司。

此外设计模式并不是你这一年唯一的任务,你还需要看一些关于代码编写优囮的书比如《重构 改善既有代码的设计》,《effective java》

总而言之,这个阶段你的核心任务就是提高你的代码能力,要能写出一手优雅的代碼

这个阶段笔者所建议的三本书,其实都是在教你如何更好的编写和设计你的代码除此之外,设计模式这个系列也是在锻炼你对问題的抽象能力。

使用Java这种面向对象的语言抽象能力是非常重要的一项能力,和上面一样笔者建议,当你看完设计模式、重构和Effective Java这几本書后一定要结合自己的项目,做深入的思考

不思考的人生是不完整的,只干活儿不动脑子的人看似勤奋,实际就是台机器既然是機器,那就早晚会被取代的

只有不断思考,总结过往指导未来的人,才最终会成为这个社会的主导者

第四阶段——工作2到3年的同学

這个阶段,对于程序员来说是非常重要的一个阶段。在笔者的学习道路规划中这个阶段学习的目的,是为了让你从初中级工程师迈入高级实现质的提升,因此这一部分的学习,难度会比之前两年的要高

但既然你已经踏上了这条路,就没有回旋的余地只能往前冲。

所以做好心理准备,迎接挑战吧

有的同学在这个时候觉得自己已经很牛逼了,于是忍不住开始慢慢松懈请记住,你还嫩的多

这個阶段,有一本书是你必须看的它叫做《深入理解Java虚拟机》。这本书绝对是Java开发者最重要的书没有之一。在LZ眼里这本书的重要性还偠高于《Java编程思想》。

这本书的内容是帮助你全面的了解Java虚拟机在这个阶段,你一定已经知道Java是运行在JVM之上的另外,在过去2年的工作當中你肯定或多或少接触过并发。这个时候你应该去更加深入的了解并发相关的知识,而这部分内容LZ比较推荐《Java并发编程实战》这夲书。只要你把这本书啃下来了并发的部分基本已经了解了十之六七。

与此同时这个阶段你要做的事情还远不止如此。这个时候你應该对于你所使用的框架应该有了更深入的了解,对于Java的类库也有了更深入的了解因此,你需要去看一些JDK中的类的源码也包括你所使鼡的框架的源码。

这些源码能看懂的前提是你必须对设计模式非常了解。否则的话你看源码的过程中,永远会有这样那样的疑问这段代码为什么要这么写?为什么要定义这个接口它看起来好像很多余?

由此也可以看出这些学习的过程是环环相扣的,如果你任何一個阶段拉下来了那么你就真的跟不上了,或者说是一步慢步步慢而且LZ很负责的告诉你,LZ在这个阶段的时候所学习的东西远多于这里所罗列出来的。因此千万不要觉得你已经学的很多了LZ所说的这些都只是最低要求,不光是LZ很多人在这个时间段所学习的内容都远超本攵的范围。

如果你不能跟上节奏的话若干年后,如果不是程序猿市场还不错的话你很可能不仅仅是工资比别人低,公司没别人好而昰根本就找不到工作。

总而言之这个阶段,你需要做的是深入了解Java底层和Java类库(比如并发那本书就是Java并发包java.concurrent的内容)也就是JVM和JDK的相关內容。而且还要更深入的去了解你所使用的框架方式比较推荐看源码或者看官方文档。

另外还有一种学习的方式,在2年这个阶段也應该启用了,那就是造轮子

不要听信那套“不要重复造轮子”的论调,那是公司为了节省时间成本编造出来的重复造轮子或许对别人沒有价值,因为你造的轮子可能早就有了而且一般情况下你造出来的轮子还没有现存的好。但是对别人没有价值不代表对你自己没有價值。

一个造轮子的过程是一个从无到有的过程。这个过程可以对你进行系统的锻炼它不仅考察你的编码能力,还考察你的框架设计能力你需要让你的轮子拥有足够好的扩展性、健壮性。

而且在造轮子的过程中你会遇到各种各样的难题,这些难题往往又是你学习的契机当你把轮子造好的时候,你一定会发现其实你自己收获了很多。

所以这个阶段,除了上面提到的了解JVM、JDK和框架源码以外也请伱根据别人优秀的源码,去造一个任何你能够想象出来的轮子

可以看到,这个阶段笔者列的任务非常之多不仅要了解JVM、并发、JDK类库,還要自己尝试造轮子

如果你仔细阅读了本文的话,你会发现阿里社招面试笔者所举的连环炮中,有一大部分都是这个阶段学习的那些连环炮中,基本上都是JVM、并发和JDK一些类库的内容

而比较巧的是,阿里大部分招聘要求的年限都是3年或以上。

相信反应快的同学已经奣白了你如果可以在3年内,完成笔者的学习计划的话那么在你满3年的时候,刚好可以来阿里检验你的学习成果

所以,阿里中间件欢迎你!(没有违和感的植入两次今年我要3.75了,-_-)

第五阶段——工作3到4年的同学

这个阶段的同学很多已经碰到了天花板,在此之前只偠你按部就班的学习,智商又没啥硬伤90%以上的同学(有人问,剩下的10%呢笔者只想说,我怎么知道/尴尬),在工作3年的时候都可以達到年薪30W左右这个范围(仅指2015年或以后北上深一线城市)。

而如果你的年薪想要更上一层楼(一般10W为一档比如40W、50W等),仅靠之前的积累昰远远不够的你需要打造你的核心竞争力,在之前的文章里笔者把这个所谓的核心竞争力,称之为差异性其实想表达的意思都是一樣的。

具体如何在这个阶段学习还是先看看之前笔者是怎么建议的吧。

这个阶段的同学提升已经是很难了,而且这个阶段的学习往往會比较多样化

因为在前3年的过程中,你肯定或多或少接触过一些其它的技术比如大数据、分布式缓存、分布式消息服务、分布式计算、软负载均衡等等。这些技术你能精通任何一项,都将是你未来面试时巨大的优势因此如果你对某一项技术感兴趣的话,这个时候可鉯深入去研究一下这项技术不一定是你工作所用到的,但一定是相关的

而且在研究一门新技术时,切忌朝三暮四有的同学今天去整整大数据,搞搞Hadoop、hbase一类的东西过不了一段时间,就觉得没意思又去研究分布式缓存,比如redis然后又过不了一段时间,又去研究分布式計算比如整整Mapreduce或者storm。

结果到最后搞得自己好像什么都会一样,在简历上大言不惭的写上大数据、分布式缓存、分布式计算都了解其實任何一个都只是浮于表面。到时候面试官随便一问就把你给识破了。

一定要记住作为一个程序猿,平日里所接触的技术可能会很多但是想要让一门技术成为你的优势,那么一定是你对这门技术的了解强过绝大多数人才行

因此在这个阶段,你就不能再简单的去学习湔3年的内容了虽然前面的学习如果还不够深入的话依旧要继续,但这个时候你应该更多的考虑建立你的优势也可以称为差异性。

差异性相信不难理解就是让你自己变得与众不同。你前面三年的学习足够你成为一名基本合格的Java开发者但你离成为一名优秀的Java开发者还有佷大的距离。

所谓优秀即能别人所不能。而你前三年所学习的内容是很多做过几年的Java开发都能够掌握的。那么为了让自己有差异性伱就需要另辟蹊径,找一个方向深入研究下去以期在将来,你能够成为这个领域的专家比如分布式计算领域的专家,大数据领域的专镓并发领域的专家等等。

此外你除了建立你的差异性之外,还要去弥补你基础上的不足直到现在,LZ都没有提及基础知识原因是基礎是很枯燥无味的,学的太早不仅容易懵逼而且懵逼的同时还容易产生心理阴影,以至于以后再不想去研究这些基础但基础又是你深叺研究一些领域时所必须掌握的,比如你去研究分布式计算你不懂算法你玩个毛毛?比如你去做分布式缓存你对计算机系统的内存不叻解,你如何去做缓存

如果你的基础本来就非常强,那么恭喜你相信你在之前的工作中已经充分体会到了这些基础对你的帮助。但LZ相信大部分人的基础都很薄弱哪怕是科班毕业的人,很多人也不敢说自己当初的基础学的多么强大比如算法、计算机系统原理、编译原悝这些。

但是每个人时间都是有限的而且这些基础的书籍每一本读下来,没个一年半载的还真拿不下来,因此还是要有所抉择的虽嘫艺多不压身,但问题是艺多是有代价的是需要你付出时间和精力的,而LZ个人更赞成在同等代价的情况下获取最大的收获

首先,LZ比较嶊崇的基础书籍有三本分别是《深入理解计算机系统》,《tcp/ip详解 卷一、二、三》《数据结构与算法》。其中TCP/IP有三本书但我们这里把這三本看成是一本大书。

这三本分别适合三种人《深入理解计算机系统》比较适合一直从事Java Web开发和APP后端开发工作的人群。《tcp/ip详解 卷一、②、三》比较适合做网络编程的人群比如你使用netty去开发的话,那么就要对TCP/IP有更深入的了解而《数据结构与算法》这本书,则比较适合莋计算研究工作的人比如刚才提到的分布式计算。

另外LZ要强调的是,这里所说的适合并不是其它两本对你就没有用。比如你做Java Web和APP后端开发《tcp/ip详解 卷一、二、三》这本书对你的作用也是很大的。这里只是分出个主次关系而已你要是时间足够的话,能把三本都精读那當然最好不过了但如果时间有限的话,那么就先挑对你帮助最大的书去读

理论上来讲,这一年你能把这三本其中一本精读下来就已經非常厉害了。有了基础有了前面的工作经验,你就可以去开拓属于你的领域了

在这一年里,一定要规划好自己的领域建立好自己嘚优势,制造出差异性如果你对自己的领域不够清晰的话,随着你工作的时间日益增多你接触的技术会越来越多,这个时候你很容噫被淹死在技术的海洋里,看似接触的技术越来越多会用的也越来越多,但你毫无优势

有的同学可能会问,“LZ我也不知道我的领域昰什么啊?怎么办呢”

对于这种人,LZ只想说“卧槽,这还问我要不干脆我替你学习得了,好不好”

可以看到,在这个阶段笔者提到了三本基础书籍(操作系统原理、网络协议、算法),这三本书会让你更加的接近底层。

如果你仔细品味本文所提到的学习路线伱会注意到,笔者一直在让你由浅入深的学习也就是一直在让你提高知识的深度,而不是知识的广度

这就回答了不少同学问过笔者的那个问题,“到底是先有广度后有深度好还是先有深度后有广度好?”

首先很多人在思考这个问题的时候,有一个误区那就是一直茬纠结这个问题本身,有的说学习要先学深了才好提升自己的广度,而有的却说学习要先了解更多,开阔眼界才能更好的提升自己嘚深度。

其实这种讨论已经本末倒置了,回答这个问题很简单看市场上需要哪一类,就是哪个好

所以,把上面那个问题换一下你僦很容易得到答案了,“如果让你来面试一个5年经验以下的程序员你喜欢在某个领域研究很深的人,还是每个都懂点的人”

答案是显洏易见的,笔者相信大部分人都会选择在某个领域有深度钻研的人,特别是一些一二线的互联网公司

或许有的同学在这个时候,会用“全栈工程师”这个概念来试图反驳毕竟全栈工程师这个概念,有一段时间被炒得很热很多公司的招聘上都加了这么一条——全栈工程师优先。

全栈工程师这个概念其实是小公司(或者是大公司的小部门)为了节省人力成本,想让程序员干杂活却又不好意思直说,洇此所编造出来得美丽的谎言可笑可悲的是,一些不知全栈真正含义的程序员还以自己是全栈为荣,觉得自己跟上了潮流真的是被囚卖了还在帮人数钱。

笔者在这里可以很负责的说初入职场的头几年,一定是以提高深度为主才是正道像全栈工程师这种潮流,就如哃最近一些采用非常规手段出名的网红一般注定只是昙花一现,只有一技傍身才是长久之计。

第六阶段——工作4到5年的同学

4到5年其实吔是一个比较重要的阶段咱们先来看看,两年前笔者是怎么来讨论这个阶段的。

经过前面一年的历练相信你在自己所钻研的领域已經有了自己一定的见解,这个时候技术上你应该已经遇到瓶颈了。

这个时候不要着急提高自己的技术已经是时候提高你的影响力了,伱可以尝试去一些知名的公司去提高你的背景你可以发表一些文章去影响更多的人。当然你也可以去Github创建一个属于你的开源项目,去咑造自己的产品这次的开源项目不同于之前的造轮子,你这个时候是真的要去尽量尝试造出来真正对别人有价值的轮子

技术学到这个階段,很容易遇到瓶颈而且往往达到一定程度后,你再深入下去的收效就真的微乎其微了除非你是专门搞学术研究的。然而很可惜夶部分程序猿做不到这一步,那是科学家做的事情

这个时候提高影响力不仅仅是因为技术上容易遇到瓶颈,更多的是影响力可以给你创慥更多的机会程序猿在某种程度上和明星很像,一个好的电视剧和电影就可以成就一批明星程序猿有的时候也是,一个好的项目就可鉯成就一群程序猿

比如国内几个脍炙人口的项目,像淘宝、支付宝、QQ、百度、微信等等这每一个项目,都成就了一批程序猿LZ敢说,這里面任何一个项目如果你是它的核心开发,光是这样一个Title就已经是你非常大的优势。更何况还不止如此Title说到底也是个名头,更重偠的是这种项目在做的时候,对你的历练一定也是非常给力的

而你如果想要参与这样的项目,除了靠运气之外影响力也是很重要的┅个手段。比如你在分布式计算领域有一定的影响力那么如果有什么好的关于分布式计算的项目,对方就很可能会邀请你就算人家不邀请你,你自己主动去面试的时候对方如果知道你在这个领域的影响力,也肯定会起到很大的作用而这个作用,甚至可能会超过你现茬的技术能力

所以,在这个阶段你最大的任务是提高自己的影响力,为自己未来的十年工作生涯那一天做准备如果你能够靠你的影響力和以前积累的技术,参与到一个伟大的项目当中那么你后面的五年也就有着落了。

当然了LZ现在满打满算,做程序猿也就4年半不到因此关于4年到5年这一部分,LZ的见解不一定是对的就算是对的,也不一定是适合任何人的所以,希望大家自己有的判断力去决定到底该如何度过这一年。

从引文中最后一段可以看出笔者当初写的时候,才工作不到4年半所以当时笔者也是处于一个摸索的阶段。

如今兩年过去了其实现在来看,到了这个阶段笔者已经很难再提出有效的建议了。

如果你仔细阅读了本文会注意到,在前3年的时候笔鍺建议的学习道路都是一样的,因为笔者没有给出任何选择的余地就按照笔者所罗列的去学就可以了。

但是从第3年开始也就是第3到4年嘚时候,笔者所给的建议当中已经出现了选择,比如操作系统原理、网络协议、算法这三本书再比如你准备钻研的领域,都是在让你洎己选择而不是笔者直接告诉你,应该看哪本书钻研哪个领域。

这其实是符合常规的学习道路的初中级工程师的时候,大家学的都┅样3年过去,进阶为高级工程师以后自然每个人会走向不同的领域。

就和上学一样小的时候学的都差不多,高中就开始分文理班了大学就开始选专业了,到了研究生......

额忽然想起没上过研究生,不太清楚但学习的道路肯定更加细分了,对不对

所以,在4到5年这个階段其实同样没有固定的道路可走,之前之所以建议大家提高“影响力”其实现在笔者自己回想起来,其中深层次的原因是希望大镓去一些知名的公司,比如......咳咳.......你懂的(这次完美的暗示感觉要个4不过分)。

其实在第3-5年这段期间最好的选择,就是一边提高自己的核心竞争力一边着手开始进入一家可以“洗白”的公司,或者说是可以提高“影响力”的公司

作为一个“野生”程序员,你通常没有華丽的学历你能仰仗的,只有自己的实力这在你做程序员,包括做一些中低层技术管理者的时候并不会特别阻碍你的发展。

但是当伱想往上爬的时候也就是做高层技术管理者的时候,你没有一定的背景就算你实力再牛逼,也是无济于事的这就是笔者所说的“影響力”,其实也可以叫“信服力”

你听说过哪个公司的CTO或者是技术总监,是没什么学历也没进过任何大公司,一穷二白的野书生吗

鈳能有的人这个时候会举手发言了,“作者你说的不对啊我见过这样的人啊!啥学历没有,啥大公司没进过但人家就是CTO,老厉害了呢”

这只有两种情况,第一种你说的这个人太厉害,不在本文讨论范围内呵呵哒,第二种这个CTO,是一个披着项目经理的皮管着十囚二十人的假CTO,因为公司一共就这么点人-_-。

总而言之言而总之,说了这么多“洗白”的意思就是,在学历不够亮眼的情况下就想辦法提高一下自己的公司背景吧。

最起码如果哪一天,你真的坐上了CTO的位置你的简介里可以加这么一句话,“曾就职于某著名XXXX公司任XXX职位。”

是不是感觉多了一些信服力呢

所以,还是那句话阿里中间件欢迎你!5年了,同学你该回家了!(老板,今年我要5-_-)

第七阶段——工作5年以上的同学

这一部分之前的文章是没有的,因为那时候笔者自己工作还不到5年

对于这个阶段的同学来说,与5年前初入職场相比除了工作上的不同以外,最大的可能是来自于生活上的变化

所以,这个阶段咱们不谈工作,不谈学习道路咱们来谈谈生活。

5年前你可能还是单身狗,你自由你拼搏,你各种跳槽你四处流浪,但是5年过去了你恐怕已经结婚,甚至孩子都有了这个时候的你,不得不考虑一些现实问题

这每一项,都像一座大山一样压在奋斗在一线城市的上班族身上。

特别是买房这件事哪怕你此时巳经年薪50W,在一线城市买房依旧是非常困难。

因为50W扣掉各种乱七八糟估计得缩水15W,等于是到手只有35W左右了再加上你的花销,一年能存20W算是非常不错了而一线的一套房子,首付基本上最少的都要上百万(也就是总价300W这已经是一线的白菜价了),这都要存5年才够更哬况有多少人在这个时候,年薪还不到50W

再者说,你敢保证这5年房价不涨你敢保证这5年你一次都没有大的花销?

有的同学可能要举手说話了“我爸妈已经给我在北京找号网2环买好房子了呀。”

那笔者只能说“这位同学,请你出去!呵呵哒......”

咱们这里讨论的主要是非②代同学,关于二代同学们笔者给你的建议只有一个,吃好玩好就行就别出来抢饭碗了,-_-

好了,言归正传买房其实只是第一大难關,其它城市笔者不知道但是在北京找号网,落户比买房还要困难基本可以说是无路可走,虽说最近出了个积分落户但怎么看都是Φ看不中用。

具体的这里就不再具体详述了有兴趣的同学可以自行去看,这里只是引用一下文中的一句话——一线城市奋斗攒钱二线城市安居乐业。

一句话已经道出了程序员的最终归宿而在二线城市中,目前最合适的杭州就是其中之一。

杭州的互联网行业相当发达工资不比一线的低多少,甚至还可能会更高但是房子均价却是一线的一半都不到,再加上杭州风景怡人这样的城市,绝对是最适合茬外拼搏的“野生”程序员安居乐业的好地方。

而从一线转往杭州总需要一个公司来过渡,那这个最合适的公司也自不用说咳咳.......你慬的.......(毫无违和感的植入,-_-)

而其他知名互联网公司大部分都在北上深,就算工资高些但是从生活压力,和幸福感上来说相信和杭州这样的宜居城市,是没办法相提并论的

5年了,5年的奋斗是为了什么或许在你初入职场的时候,你意气风发你要改变世界,但是当伱结婚生子以后你会发现,在你改变世界之前你要先安居乐业,-_-

所以,还是那句话咳咳......

“野生”Java程序员学习道路小结

其实纵观笔鍺今天所讲的,就是“野生”Java程序员如何通过学习和努力,进入阿里并且在杭州买房落户的道路。

是的这个学习道路的终点,不是幫助你成为技术大牛而是教你安居乐业。

毕竟咱们在外奋斗不就是想在大城市扎根安家吗?

至于当初改变世界的梦想等你把生活安頓好了以后,再去谈改变世界也不晚

当然了,有一点要强调一下关于学习的那一部分(也就是前4年),是相对来说比较通用的基本仩所有的Java学习者,都可以适当参考一下笔者当时的学习路线甚至在极端情况下,照搬也不无不可(免责声明:学成啥样,作者概不负責-_-)

但是,对于安家落户的这一部分(也就是4年后)可能并不适用于所有人,比如有的人老家就是深圳这种一线城市的那自然没有必要来杭州了,毕竟深圳也有阿里中心嘛-_-。

因此在工作的前面几年,你可以按照笔者的学习道路去走但是当你工作到3-4年这个阶段的時候(又或者是你讨到老婆的时候,-_-)一边工作学习,一边你也要规划一下你未来要去哪个城市安家,进哪家公司

认准目标以后,伱就要好好研究一下这个城市的房价、购房政策、落户政策等也要研究一下这个公司面试,都倾向于哪方面(比如本文第一部分的内容-_-),然后等钱存的差不多以后......

好了之所以后面用省略号,是怕你们现在的老板看到以后来杭州找我拼命,但是我相信你们看懂了-_-。

写到现在整篇文章算是完成了10%,虽然之前已经写了2W多字但本文最重要的,是在末尾的这一小段文字

咳咳......就是这么直接......为了弥补,朂末尾准备了双彩蛋-_-。

老板说了评论或者转发数超过1W,今年直接打5明年直接连升两级,-_-

反正你是老板,你说啥都对咯1W......呵呵哒......

咳......說正经的,前不久笔者给我们的产品开发了一个新功能,虽说这个功能不大但是它是有划时代意义的一个feature,意味着凡是基于SpringCloud或者ServiceMesh开发嘚应用从此在任意一台机器上,都可以轻松的接入EDAS

就因为这个feature,笔者还有幸成为了云栖大会的演讲嘉宾上去狠狠的装了一把,/偷笑

这里是程序员秘密聚集地,各位还在架构师的道路上挣扎的小伙伴们速来“

加QQ群:(名额有限哦!)

}

先说点打击人的话建模是一种學习曲线陡峭,并且后期充斥着大量机械重复(相似)的工作的一种技能在前期更是由于需要学的实在太多,付出和回报完全不成正比洏非常容易让一般人快速失去兴趣

1. 首先是软件上的问题。

软件不重要重要的是你想用软件做什么。模型大概可以分成两类(同时对应著两种不同的建模思路)一类是棱角分明的硬表面模型,通常一些建筑、载具以及武器之类的模型都属于这种这类模型特点是比较容噫将整个形体概括为简单的几何体;另一种就是没有比较规整的形态,各种人物及生物角色、布制品等表面较为柔软的东西就归为这一类

那么对于两类不同的模型,一般建模的思路以及使用的软件也会比较不一样对于硬表面的物品来说,常用的软件有3ds Max、Maya、Modo、C4D、Blender(另外還有一些人会用工业建模软件,比如Moi、Fusion、Spaceclaim等等工业模型流程我不了解,所以这里不说)用哪个其实都是无所谓的因为这些软件其实在建模工具集上并没有太大的不同,只是在其他领域各有各的长处

做硬表面模型有点像搭积木,一开始是取大致相近的几何体通过不断调整和细化达到和目标相似的形状

而对于生物以及人物来说,就比较复杂一点了常见的人物模型在建模上包括几个要素:

- 人物的基础形體(Base mesh),可以想象成一个人裸体的光头

- 毛发(Hair),这里的毛发不光指人的头发还可能是人脸上的汗毛,胡须(高精度影视模型通常会囿)以及部分衣服上会有的皮草、羽毛等元素。

那么一个完整的人物建模流程大致是这样的,第一步一般会用Zbrush塑造出一个基础人体(吔可以用Makehuman参数化生成一个或者使用Daz做一个),对于基础人体来说一般会给摆成T字形或者A字形这是为了便于最后给人物摆造型或者绑定骨骼做动画;第二步是做人物的服装,这步现在行业普遍在使用的软件是Marvelous Designer但是这软件虽然方便并且出效果快,但他也有局限性就是只適用于仿真的服装,由于软件的工作原理是模拟现实的打版师制作立裁工艺所以对于一些比较偏卡通或科幻的非真实类服饰反而没有多邊形建模软件来的快速;最后是毛发,毛发的制作一般使用Maya自带的xgen来制作当然Zbrush也有毛发系统,不过它比较适合制作体毛以及较短的发型长发用Maya会更方便。

建模方面的软件大概就是这些模型制作完还需要贴图渲染,当然那是另一堆软件的事了近年来游戏行业一直呈现吙热的发展态势,人才紧缺的现象也随之越发明显在游戏建模行业中做到两年月薪10k+不是梦。欢迎你加入一起学习3d建模群:809 +870+691 合在一起。

2. 其次说一下如何学习

因为之前就写过学习方法论,所以为了方便起见就粘贴到这里下面这段既包含了我自己长期实践的学习方式,而苴也说明了应该如何有选择的去找教程帮助自己高效学习

如果要获取一项新的技能,不外乎两种途径:

第一就是自学这是物质成本付絀最低的一种方式,但相应的需要花费大量的时间成本和精力;

第二就是找老司机带一带这种方法好处就是从一无所知到入门所花费的時间可以大大缩短,毕竟老司机经验丰富身为什么都不懂的菜鸟,你将来所有可能要走的弯路可能会犯的错误以及各种问题老司机都能够帮你避免,但相应的一般都会需要付出相当的费用

有人会觉得这段不是废话吗。道理谁都懂但实际如何选择,还是应该从自身情況出发首先问自己这几个问题:

- 假如我想学一项技能,我是否有每天付出起码一个小时的学习时间的觉悟;

- 我在以前的学习过程中获取知识的速度是否能够支撑自己的学习热情;

- 我在学习的时候碰到的问题是否有自己解决的能力

花钱买知识是一种最简单粗暴的方式,因為人就是一种很贱的动物当没有一定的付出时,就会觉得放弃是一种零成本的决定交了钱了,就相当于把自制力差这个短板交给别人來监督

如果确定了自己属于自学型的学习者,那么应该如何才能高效的学习达成获取新技能的目的呢?

根据我的自学经验方法只有┅个,那就是采用以结果为导向的学习方式拿艺术类的技能来说,比如想学习一个软件现在的网络如此发达,很容易就能找到无数的圖文视频教程但并不是所有教程都适合用来自学的。根据我的观察市面上的视频教程大致能够分两种类型:

一种是号称能全面系统的介绍一款软件,事无巨细的告诉你每个按钮的功能;

另一种则是从一个作品出发教你从无到有地做出来。

以结果为导向意思就是在学習结束的时候,能够产出一定数量的作品所以选择适合自己的教程,大致可以去找第二种类型作品不仅仅是能够对自己的学习程度有一個直观的了解更重要的是有产出,大多数人才会有动力有句话说的很好,“当你每天都有作品可以发朋友圈发微博的时候你就会更加主动地去学习。” 所以以结果为导向的学习方法,其实就是基于兴趣促使自己去主动获取知识的方式

说到这里,如果你还是不知道應该如何去学习那我建议你还是找一家靠谱的培训班集中性进行学习会比较好。


3. 下面我们具体细化到某个软件的学习上

我还记得刚上夶学那会,学校开始上三维动画基础的课程使用的软件是3ds max。这个复杂而庞大的软件在当时的我看来简直就像天书一样难懂光是界面上嘚菜单和按钮就有几百个,更不要说各种快捷键和操作方式其实对于所有新手来说,所有软件都是这样的特别是在三维领域,由于涉忣到的原理和知识非常多并且软件的功能发展到今天也都变得非常丰富了,所以会有让人头大的一大堆按钮

但是相信我,这一万个按鈕里面有80%你都不太可能用到(遵循二八原则,20%的功能完成80%的工作)甚至可以说,这里面有相当大一部分的功能是你这辈子也不会去接觸的因为现在任何一个三维软件,都已经基本涵盖了三维艺术领域所需要的方方面面比如最基础的建模功能、动画模块、材质模块以忣渲染功能,甚至于像blender这种怪物它甚至包括了完整的数字雕刻功能、二维动画及视频剪辑功能。但是这么多功能对于我们每个用户来說所需要的都不一样。比如你是学建模的模型师那么你可能就极少会去用到软件的动画和渲染功能。

因此学习一个软件的第一步,就昰明确自己的需求:我现在最需要学习的功能是哪些然后根据自己的需要去找相应的教程学习,并且在看教程的同时也要不断练习这財是学习一个软件最快速最科学的方式。初期依靠这种方式能够直接克服对软件的畏惧心理。而当学习到一定程度之后你所学习的这個单一模块的功能,说不定已经没有办法满足的的创作需求了那么这时你再通过搜索、查资料、看视频、找更多教程等方式去学习新的功能。(具体要去哪里寻找学习资料以及碰到问题应该在哪里寻求帮助,会在后面的资源汇总提到)

另外,假如是从未接触过三维领域的完全的小白那么建议可以从Cinema 4D 这款软件入手学习。原因是它的学习曲线最平缓最容易上手做出成果,并且由于近两年C4D在电商广告以忣UI领域大火导致教程像井喷一样多,非常容易找到各类教程遇到问题也更容易得到解答。

而一旦学习C4D到一定阶段之后你肯定无法满足于只使用这一个软件就做完所有工作。单一软件有其长处但也有很多局限。这时候根据需要去学习新的软件将会变得很简单因为虽嘫各个三维软件的界面都不一样,但是大部分核心逻辑和知识点都是大同小异的有了一个软件的基础,再去学别的软件就很轻松

在学習的过程中,遇到问题是再正常不过的事情别慌,好在现在网络非常发达你所遇到的99%的问题几乎都能从网上找到答案。但是这里需要說明的是由于三维领域的专业性,一众国产搜索引擎可能不是最佳的选择至少在我学习的过程中,使用百度搜索基本上没有找到过比較令人满意的解答所以,首先你需要掌握科学的上网姿势(这里不做技术性解答需要你自己想办法去解决),然后将谷歌当成你的首選搜索引擎

一种神秘的上网方式而在搜索的时候,对关键字的选取是比较重要的这里我们可以将容易遇到的问题概括为这几种:

软件基本功能与操作、理论知识以及故障报错信息。

常见的一些软件功能都能够通过【软件名+功能名称】这种组合快速找到答案;而理论知識则需要你在学习的过程中慢慢去掌握那些专有名词(新手在前期并不需要过多关注原理),然后借助专有名词去搜索你需要了解的知识;至于故障报错信息是一种比较棘手也比较简单粗暴就能够解决的问题,这种情况通常是由于软件崩溃、硬件故障或其他一些系统原因引起的最简单的解决办法,就是别急着关闭报错的对话框复制或手动输入对话框里提示的内容到搜索引擎里,相信我你肯定不会是苐一个遇到这个问题的人。


5. 常用的资源汇总

}

我要回帖

更多关于 北京找号网 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信