想学Java,有没有知道光环Java怎么样的?网上的口碑挺不错,有人真正去过么?

我就用我自己从大学到技术专家嘚路线告诉你需要学啥。

你们都知道的帅丙我本身肯定是达不到技术专家的地步的。

呸敖丙你个渣男,又标题党 !

我不是但是我身边佷多人是呀字节跳动,PDD阿里等等的大佬我认识很多,所以以下是我问了他们的成长路径的总结还是具有一定的代表性。

身边这些朋伖都是在互联网领域多年的大牛了因为生活和个人习惯的原因,很多都没有写博客的习惯或者没有公开出来,但是他们却遇到了帅丙我骚啊,我可以帮他们整理出来啊

目的是为了让很多跟我一样的新人,对一条完整的职业规划之路有一个清晰的认知青铜到王者要經历些什么

《计算机基础》这是所有读者大学最开始都会上的课吧,我问了群里的仔他们都说是的,我想大家也是

在计算机基础Φ我们会学到计算机的历史、计算机的特点、进制转换、内存管理、线性数据结构、网络请求协议等等。

计算机基础真心很重要无比重偠,究极重要为啥我这么说呢,里面涉及的计算机知识还有很多网络协议的知识大家以后一定会用到,我可以负责的告诉你面试也┅定会问,什么Http、Https、Tcp/Ip、三次握手、四次挥手面试不要太常问

Tip:这里有个小插曲就是我身边那个架构师团队Leader这周面试阿里p8岗位的时候,我鉯为问的都是什么源码中间件的究极操作,我想大家跟我想的一样但是大家错了,反而问的很多计算机的基础知识

? 我聊天大概问叻一下面试内容,有什么求二叉树的镜像内核态和用户态的理解,计算机的缓存页等

? 大家是不是惊了,这他*不是我校招的题目么怎么P8级别的大佬还问这个?其实很好理解大家想一下到了一定的工作年限技术的广度深度都有一定的造诣了,你写代码就这样了没办法優化了机器配置也是最好的了,那还能优化啥

? 底层,我们都知道所有语言到最后要运行都是变成机器语言的最后归根究底都是要詓跟机器交互的,那计算机的底层是不是最后还是要关注的东西了

学完计算机基础你基本上对计算机的整个知识体系都一知半解了,对於编程或许还是很懵懂但是你现在已经要踏入编程的门了。

计算机基础学了后面就要编程的入门课程了。

想必看我这篇文章有99%的小伙伴都是以下面这段代码开始的自己的程序人生的吧:

我还记得帅丙我就是大一开始学习的C语言《C语言程序设计》谭浩强老师的课本,在苐27页就是第一章HelloWord,现在回忆起来还历历在目老师在黑板上写下这两个庄严的单词,同桌的她和我露出无限的求知欲……

我想所有的语訁都是语法基础开始的而且编程语言的基础语法也都是大同小异的。

If、For、While等关键字List、Set、Map等集合,Int、float、Double等基础类型大家第一次学的时候我想也不会知道,这些关键字将会陪伴我们走完各自的程序生涯吧

接下去就难一点比如JDBC、IO、文件流啊什么的,帅丙依稀的记得当时还昰代码里面写SQL然后查询也不知道记错没有。

学到这里你可能觉得你JavaSE无敌,出去可以找工作了反正当时的帅丙,觉得自己可以闯出一爿天了不知天高地厚,四处炫技

但是幼稚的我根本不知道,未知的前方还有什么等着我我也不知道自己其实才刚入门,但是如果要往WEB方向发展这些倒是基本足够了。

但是你到现在为止学的东西都是服务端的东西呀怎么让你的服务端东西展示给别人看呢?

这个时候峩们就应该去做个丑不拉几的页面进行简单的交互了,你这个时候要学HTMLServletMySQLJavaScriptTomcatCSS

目标呢就是写出第一个动态网站,也许只是个登陸功能只能展示下个人资料,但这是很重要的一步你要弄清楚的是,一个用户的点击产生的请求是从哪里发起,哪里接收哪里处悝,哪里返回你得理解浏览器和服务器的关系和分工,CookieSessionRequestResponse

Tip:我记得我刚出来面试就有面试题是这样的一个Http请求从网页发起到服務端产生数据返回中间经历了些什么,或者Spring做了什么大家可以思考一下

? 还有有一个自己的项目真心很重要,敖丙我就是在大学期间做叻项目至今在校园内网上稳定运行着,出来实习面试的时候基本上也是一路披荆斩棘吊打了同行面试的仔,反正大学有个项目贼加分是读者的大学生记住了么?

上面的只是WEB开发的学习初级阶段这都是些JAVA诞生以来最原始的最官方的WEB开发技术,当然现在真正的项目很少矗接采用这些技术了现在都是前后端分离了,Vue、Node.js、React等前端的语言更新迭代速度非常快帅丙我学了一点刚用舒服,前端的朋友告诉我又迭代了……我他*不学了!

为了不断提高技术的易用性、开发效率和可维护性、可扩展性无数开源项目都是在这些原始技术的基础上封装、改进。

所以这个阶段不要盲目乐观地跑去找工作或者对实习挑三拣四你会被打击到的,又或者找个小公司浑浑噩噩几年过去感觉跟新嘚技术栈脱节

有人跟你说小公司学的东西多,他害你的刚开始能去多大的去多大的,越大越好你想你去了大的你想去小的分分钟的倳情,但是你小的要去大的就相对难了

好,初始阶段完成开始进入WEB开发的正题,首先是传说中的框架SSM(Spring SpringMVC Mybatis)成为熟练的增删改查程序員是必须的,在这个阶段你还要理解为什么要用这仨而不是那些Jsp、Servlet、Jdbc你要体会到写MVC、三层架构的好处。

这个阶段不要轻易质疑框架的价徝也许刚开始你会觉得麻烦,觉得他们有时候是多此一举我最开始这么写的时候发现,真的恶心什么dao,serviceController等等,分这么多干嘛

等過一两年后回过头来你会觉得少了这些框架你已经很难干活了,没有分层清晰的系统你反而开口大骂项目的架构师的。

不过要提醒大家嘚是这个阶段还要避免的心态是,能熟练地增删改查了就自认为写程序不过如此,然后往简历上填个精通这也是新手面试被批得体無完肤的原因之一。

浅尝即止是新手的大忌,为啥这么写这么写有啥好处,有啥坏处多问几个为什么,你多年后会感谢敖丙

如果你学得好,这会应该能熟练地写个博客啊小论坛啊之类的WEB项目了,也就是达到了就业的基本要求

Tip:而且说一下作为一个应届生,你除了基础知识如果你有自己的技术博客,还有像样的项目能展示给面试官看是真的很加分,搭建个简单的项目项目流程你也知道了,技术栈也熟悉了还可以手机访问网页给面试官现场演示,很加分的

像我身边的朋友Java3yJavaGuide我没有三颗心脏等,就是在这个阶段就已经開始写了自己的博客并且各自都做出了成绩,这些以后都是你面试的议价能力的一部分也是你的加分项,和你自身的财富

我问了一丅他们,都是靠博客就已经得到不少大公司的面试邀约了反正有项目,有不错的履历有不错的博客,都会给你加分如果你什么都没囿,现在动手去多学点少打两局LOL等你到我这个年纪就会发现,索然无味

这会是程序员生涯的一个转折点,把握好了人生起飞把握不恏全盘皆输,所以我用在我老家遵义举办的遵义会议作为这阶段的标题,我觉得妙啊

慢慢的你会发现数据库性能实在不行,出于不咁现状或者赶时髦,你该去了解NoSQLMemcachedRedisMongodb等非关系型数据库眼花缭乱,没关系试着用用,能很好地缓解MySQLOracle之类关系数据库的压力

出於公司某些业务需要,你可能会钻研一个特定技术领域比如全文搜索技术ElasticSearch(以下简称Es),那你了解了Es你又要想到数据库的数据怎么同步进Es呢?

你可能会接触到LogstashCanal等中间件,然后发现可视化也是个问题那Kibana就应运而生,用的时候发现欧洲人的分词习惯跟我们不一样那Ik中攵分词器又得了解啦。

使用之后你还会发现他底层的Lucene有很多坑要怎避免时间多你还可以了解Solr等等。

总之知识就是一个体系我经常跟群裏的仔说,形成知识体系你面试说了Es那相关的技术栈你一样要了解的,我题目取了叫《吊打面试官》就是噱头你去面试如果面试官技術深度真的很深,我想被吊打的100%是你

你甚至会开始对系统中一些比较特殊的存在感兴趣,比如权限系统单点登陆之类的,又或者某些特定业务领域的算法研究这些是你的加分项。

你还发现服务拆分后Http通信有诸多弊端就开始接触优秀的Rpc框架还有消息队列中间件了,如DubboRocketMQ

再再后来你发现呀,数据量大得一批表顶不住了,几亿数据查出来要好几秒那分库分表就出来,什么水平拆分垂直拆分,还學习了TDDLSharding-JDBCDRDS等这样的分库分表中间件

但是你用了发现全局的唯一id生成又是一个问题,或许中间件有自带的但是你还是要了解原理,什麼雪花算法uuid等等也得学。

再再再后来呀你发现分库分表也顶不住了,业务体量爆炸式增长了你可能就需要了解动态分库分表的解决思路和解决方案了,特别是FaceBook开源的一些方案

再再再再后来呀,你发现动态分库分表也不行啊很多离线的数据也很多啊,每天几个T公司都要被败光了,那你就要了解大数据场景的离线分析啊数据缓存啊,数据清洗数据可视化等等啊什么的。

那就需要学什么ODPSHadoopHiveHbase等等中间件或者工具了。

再再再再再后来你开始发现你的代码很乱久了以后自己都看不懂,重复的难以重用的代码堆积如山,不想维護BUG百出。

于是你要开始重视设计模式合理地改造下自己的代码习惯,不再被僵化的SSH、MVC三层架构束缚住

再再再再再再…..(敖丙你是不昰没玩了?哈哈其实还真有我就不列举了)

到这里不知道你有没有体会到我每篇文章开头那句话的意思敖丙就是工作之后发现自己越来樾无知了,你再品一下下面这句话

你知道的越多,你不知道的越多

Google和各种资料是你进步的动力极少再遇到必须请教别人才能解决的问題,如果你这个阶段还老是问别人你的技术生涯也就快到头了。

这个阶段如果你技术卓越跟敖丙一样能吹,你的收入将是白领水平至少接近了,或者大幅领先同龄人了

我觉得多数程序员在工作多年之后都能达到这个水平,有的人只需要一两年有的人却要用上五陸年,在这个阶段落伍的人有的是出于天赋和思维所限,有的是出于对技术缺乏热情有的是出于工作内容的制约。

等到年近中年再吔拼不过年轻人,被淘汰出局只能在自嘲为屌丝和码农的无奈中黯然转行。

这是个很重要的分水龄你能不能继续进步,能不能在30岁以後继续从事技术工作能不能在公司里独当一面,我觉得就看你能不能超越这个阶段了

很多烂公司里工作数年的项目经理,连这个层次嘟还没达到…

为了30岁的自己听到裁员完全不虚为了家里的老母亲不再为了省电费不舍得开灯,为了让自己……

我想这个阶段你应该要做恏准备这也是我大篇幅介绍这个阶段的原因。

你要读读优秀开源项目的源码你要搞懂一些当年不懂的基础知识,你开始理解《thinking in java》的精髓你能写一些底层的代码,有时还会觉得自己封装的比某些开源工具更好用更简单

当年看不懂的《深入分析JVM虚拟机》现在你已经可以對里面的知识点如数家珍张口就来并且能够将大量知识点带入到项目中优化,并且能够看到实质性的变化(暗示KPI

WEB的难点和重点永遠都在于性能、负载能力上,而现在网络的发达造成了数据量和操作密度的大大上升硬件却没有相应的进步。

你得试着更好地运用更多嘚服务器来协同工作从WEB端到服务端到数据库,全都需要集群需要分布式,需要合理的控制数据的流向掌握好网站上下,一大堆机器嘚平衡找出性能的瓶颈,找出稳定性和安全性的瓶颈硬件出现故障,第三方技术出现错误将被当成家常便饭融入到你的系统和代码裏仔细考虑。

你会开始觉得方案无比地重要一将无能累死千军将不断应验,一个不好的设计一个不好的方案,会让一群优秀的程序员笁作成果大打折扣

你要关注架构知识,不能再满足于SSH三层架构到底

领域驱动设计,面向事件开发敏捷开发等等一系列的思想在关键時刻能决定你项目的生死,这个阶段不再有标准范例让你照抄你只知道思想和原理,实践却需要自己不断尝试和改进

多关注各种杂七雜八的开源技术,有些你可能前面已经接触过了和通信有关的,和集成开发环境有关的和架构有关的,各个领域你都应该能信口说上幾个主流技术虽然你可能只是听说过,了解

但关键时刻你得知道如何去选择技术,并快速掌握它

你还会去考虑尝试下别的语言,这裏不是说转向什么C++ C#之类的那和JAVA程序员不相干,我说的是一些运行于JVM之上的语言比如scala和groovy,初识他们时你会觉得Java真的老了

但当你回到一個综合性的大型项目中,又会觉得Java积累下来的整个体系技术是如此完善就像一个工业化标准一样,你可能发现光是Spring家族的东西你都受用終身无法完全通读。

你能把这个阶段实践好胜任项目经理,乃至中小公司的技术总监大厂的小团队Leader都是可以的。

其实写到上面这个階段的时候我觉得这是很多人满足的地方了,都是小公司技术总监了那我图啥?

但是未知的人生还在那等着你呢我问了身边顶级的夶神,为啥要走出舒适区去像字节、阿里等这些压力大很多的地方呢?

他们给的回答都不太一样但是一样的就是挑战自我吧,谁也不知道哪里是自己的终点那为啥不多做点尝试,新的环境新的技术栈,新业务场景挑战新的自我

这个阶段你的一举一动可能都关系一個项目的生死存亡,一个错误或者正确的决策就可能改变整个项目的命运水能载舟亦能覆舟,我想用在这里也恰到好处

我身边这样级別的大佬凤毛麟角,但不是没有他们在公司都是核心人物,大型项目或者项目紧要关头都是他们带领团队冲冲冲除了问题也是能最快給出解决思路和方案的。

Tip:我现在的老大就是这样的人双十一大家还手忙脚乱去追数据的时候,他上来一套操作写了几个脚本就搞定叻,卧*我们当时周围一群人从头到尾的知识盲区,结束了还没反应过来只能拍手叫666。

这就是强者的世界我所向往的世界,当然我知噵这样的世界只有一步一个脚印才能涉足。

最后王者其实我不会写任何内容能到这个领域的人本身就是屈指可数了,敖丙身边有但昰我觉得大家自己体会吧,一般就是人脉交际,能力都到了一定的高度了这个阶段的事情我也体会不到。

能想到的就只有先祖的诗句:指点江山挥斥方遒。

算是给大家留下无限遐想的空间吧未来或许你就是你所在领域的王者也说不定的呢对吧。

不知不觉写了这么多叻以上是我个人眼里的一般向JAVA 程序员的发展线路,限于篇辐也不全面实际个人成长路线可能因为工作内容的不同差异会很大,有的人偏向了底层研究有的人偏向了业务需求设计,有的带有浓重的行业色彩而且技术之外,还有很多知识也很重要做JAVA没有轻松的方向,泹一个对技术抱有兴趣的人走到这一步时,仍然会对开发抱有热情想要写出好的项目。

纯为了生计而工作的程序猿是走不到这一步的这一行来都来了,大家一天都是24小时为啥有差距,我想你我都明白的知道为啥那就干出点名堂吧。


我整理了几本自己在学习和使用 Java 時用过的参考书把它们分享与你。在专栏里有不少同学留言让我推荐一些参考书。另外我认为,书是个好的系统化知识来源但更哆提高还是来源于实践、阅读源码、技术交流等,毕竟书籍也很难完全跟上技术和架构的变革另外我也尽量缩减了书单的长度。

关于夯實 Java 编程基础我推荐 Bruce Eckel 的《Java 编程思想》(Thinking in Java),非常有名的经典书籍这本书的特点是,不仅仅介绍 Java 编程的基础知识点也会思考编程中的各種选择与判断,包括穿插设计模式的使用作者从理论到实践意义从不同的角度进行探讨,构建稳固的 Java

当然这本书也有不足之处毕竟每個人的基础不太一样,如果你完全没有 Java 编程基础也可以考虑其他的参考书,例如 《Java 核心技术》

另外,这两本书的部分内容已经多少有點过时了尤其是《Java 编程思想》。例如目前很少会需要学习 Java 桌面图形类库等,较新的语法和 API 当然也没有包含我的建议是尽管忽略过时內容,适当补充 Java 新技术的学习

提到经典,自然也少不了 《Effective Java》这本书的英文第三版已经在国内上市,涵盖了 Java 7 到 Java 9 的各种新特性严格来说,这本书不算是一本基础书籍但当你有一定基础后,还是非常建议通读一下的关于这本书的阅读,我的建议是边学习边回顾在吸收書中的经验时,多去想想自己在实际应用中是如何处理的虽然《Effective Java》的具体章节可能是从某个点出发,但可以说都是对 Java、JVM、面向对象等各種知识的综合运用对于设计和实现高质量的代码很有帮助。

《Head First 设计模式》 这本书就不用我再费笔墨去介绍了吧能把设计模式用这种轻松的形式展现本身已经十分不易了,章节之间的联系让你可以反复加深印象加上生动的表达方式和丰富的习题更容易沉浸其中。

这本书非常适合对面向对象和设计模式基础有限的同学设计模式不是银弹,实践中也莫要为了模式而模式掌握典型模式,能够举一反三就很恏了就当作是程序员之间沟通的“方言”。

谈过了 Java 基础接下来聊聊并发和虚拟机的参考书。

《Java 并发编程实战》作者全是响当当的人粅,比如 Brian Goetz我多次在专栏里引用他的观点,众多强力作者也保证了书的质量抛开作者光环,这本书的内容全部建立在理论之上先讲清噵理再谈实践,可以真正让你知其然也知其所以然这本书更加侧重并发编程中有哪些问题,如何来深刻地理解和定义问题如何利用可靠的手段指导工程实践,并没有过分纠结于并发类库的源码层面

这本书的我的学习建议是,尽量充分利用其中提供的样例代码结合自巳的业务实践去深入学习,毕竟这本书的内容有些偏理论可能并不适合你快速掌握所谓并发“核心”技术。

关于 JVM 的学习不用我多说了吧,看过专栏的同学肯定都知道我经常推荐周志明的《深入理解 Java 虚拟机》,可以说是国内最好的 JVM 书籍之一

我这里并没有单独推荐类似 GC 算法等书籍,它们对于大多数 Java 工程师的价值也许有限

但这本书也存在着不足,里面过于偏重 Solaris 等商业操作系统和相关工具我建议你在阅讀的时候,尽量体会其思路和原理更加侧重于 Linux 等主流开放平台。


还有一些如开源软件和互联网架构相关的图书可以作为扩展阅读你可鉯参考下面这几本。

可以说 Spring 等相关框架已经成为业务开发的事实标准系统性地掌握 Spring 框架的设计和实践,是必需的技能之一

Netty 在性能、可擴展性等方面的突出表现,已经得到充分验证作为基础的通信框架,已经广泛应用在各种互联网架构、游戏等领域甚至可以说,如果沒有仔细分析过 Netty对 NIO 等方面的理解很可能还在很肤浅的阶段。

Java 应用程序架构处于飞快的演进之中微服务等新的架构应用越来越广泛,即使未必是使用 Spring Boot、Spring Cloud 等框架但是系统的学习其设计思想和实践技术,绝对是有必要的当然如果你在实践中使用 Dubbo 等框架,也可以选择相关书籍

前沿领域的变化非常快,很多风靡一时的开源软件在实践中逐渐被证明存在各种弊端,或者厂商停止维护所以这部分的学习,我建议不要盲目追新最好是关注于分布式设计中的问题和解决的思路,做到触类旁通并且注重书籍之外的学习渠道。

下面两本并不算是 Java 書籍但 Java 程序员进阶少不了对互联网主流架构的学习,了解分布式架构、缓存、消息中间件等令人眼花缭乱的技术对于有志于成为架构師的 Java 工程师来说非常有帮助。

  • 《大型分布式网站架构设计与实践》

这本书总结了作者在构建安全、可稳定性、高扩展性、高并发的分布式網站方面的心得

  • 《深入分布式缓存:从原理到实践》

这本书融合了原理、架构和一线互联网公司的案例实践,值得参考

我要回帖

 

随机推荐