想了解java技术教程中级篇吗?想了解Java工程师学习指南(中级篇),中级Java程序员如何进阶(小册)?? 吗?......本文带你一探究竟。
1.Java工程师学习指南(中级篇)
Java工程师学习指南中级篇最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好。原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我写的文章都是站在Java后端的全局上进行思考和总结的,忽略了很多小白们的感受,而很多朋友都需要更加基础,更加详细的学习路线。所以,今天我们重新开一个新的专题,分别按照四个部分讲述Java的学习路线,笔者也打算趁此机会,回忆一下自己的Java学习历程。今天我们要讲的是第三部分,Java工程师学习指南(中级篇)。先声明一点,文章里面不会详细到每一步怎么操作,只会提供大致的思路和方向,给大家以启发,如果真的要一步一步指导操作的话,那至少需要一本书的厚度啦。当然,本文提到的大部分内容都能在我的博客中找到对应的一些文章。所以也欢迎大家去我博客找到你们需要的资源。本文中的方法不一定适合所有人,如有错误还请谅解。上期回顾在上一篇文章中,我们主要讨论的是如何做一个Java Web项目,以及前期需要哪些方面的基础。*,我还推荐了几个比较不错的视频课程,以便给大家参考。当然,跟着视频课程做完一个项目,你只是照葫芦画瓢又练习了一遍,可能其中有很多东西你并不太理解,比如你可能不知道为什么代码要分层,为什么要用maven进行线上编译,为什么Tomcat启动时会输出那么多的日志。有疑问很正常,因为一个Java Web项目涉及的技术还是很多的,如果要理解这些技术的原理,光靠一个项目课程是远远不够的。所以,在你体验了Java Web项目的开发流程以后,你应该花些时间去了解相关技术原理了,今天我们要讲的也是这部分内容。对于即将参加校招的同学来说,最重要的也是这部分内容,你需要了解JVM虚拟机原理,Java并发原理,并且熟悉JDK的部分源码,了解这些API的底层实现。除此之外,还有很多,下面我们分别来谈一谈。01计算机基础知识计算机基础课程(非科班)如果你不是计算机专业的同学,那你可能要注意一下了。在学习下面这些内容之前,你*要学习一下计算机基础课程。这里我们说的计算机课程是:数据结构,操作系统,计算机网络。数据结构:这门课应该算是三门课程比较简单的一门了,推荐《数据结构与算法(Java语言描述)》,看书结合代码实践,把基本的数据结构算法写一写就可以了。操作系统:关于操作系统我看了很多本书,但是没有感觉特别好的,所以如果有时间的话可以先看另外一本书《深入理解计算机系统》,这本书讲了很多计算机的基本概念,不局限于操作系统。然后可以看一看汤小丹写的《操作系统》,或者你们学校的教材。计算机网络:网络方面的书也非常多,推荐看一下《计算机网络:自顶向下方法》,另外还有一本《TCP/IP 详解:卷一》也是备受推崇的书。除此之外,我还要推荐一下刘欣老师的书《码农翻身》,书中用一些有趣的故事来讲解操作系统和计算网络的一些复杂概念,有助于大家理解这部分内容。02JVM虚拟机JVM虚拟机为什么把JVM放在*位,因为它是最基础也最重要的一块内容。所有的Java代码都运行在JVM上,事实上,JVM在操作系统中只是一个进程。为了了解Java代码的运行方式,底层引擎的执行原理,以及内存的分配情况,我们必须要学习JVM虚拟机。推荐资源:《深入理解JVM虚拟机》很高兴地告诉你们,学习JVM你只需要把这本书吃透即可,当然,看一遍可不够,笔者前后至少看了三遍,有条件的话*把书中的实例都跑一跑。另外,JVM也是面试必考的内容,所以,相应地去准备一些面试题也是很有必要的,如果你基本掌握了这本书的内容,相信你不会惧怕任何JVM面试题。03设计模式与源码阅读设计模式为什么在这里提到设计模式呢,因为设计模式是Java编程规范的经典总结,并且在JDK源码中经常使用,由于我们后面会讲到JDK源码方面的学习,所以对于设计模式,建议大家先学习一下,*的学习方式就是看书结合实践,把一些常用的设计模式自己实现一下。推荐资源:《head first 设计模式》JDK源码(主要指集合类源码)接下来下场的选手是:JDK源码。不过对于大部分人来说,只要能够掌握集合类,字符串这些源码就可以了,其他部分的源码主要集中在JUC并发包里,而这些内容我们会放在Java并发技术里来讲。为什么我们需要掌握集合类源码呢,其一是因为面试喜欢考,其二是因为集合类的源码实现都比较经典,难度也不算太大,并且运用了很多优化方法,所以了解它对于学习Java的同学来说大有裨益。推荐资源市面上并没有哪本书专门来讲JDK源码的,所以这部分内容的学习资源主要是两个部分,一是JDK源码本身,而是一些技术博客。1 对于JDK源码,直接看可能比较有难度,不推荐新手这么做。 2 讲解源码的文章质量参差不齐,所以我只推荐几个我自己比较熟悉的,一个是importnew。一个是我的博客。另外,我之前分享的一篇文章《你不可错过的Java学习资源》中也推荐了很多大牛和博客,大家也可以去看看。Spring源码说实话,Spring源码的复杂度远高于集合类的源码,这也是因为Spring运用了很多的设计模式,并且有着非常繁杂的类关系。所以,我不建议大家直接去读Spring源码,因为即使是看Spring源码解析的书籍,你也会感到很吃力。所以,我推荐的方式是,看书+看一些比较好的源码解析文章。另外要告诉大家的是,Spring的源码很多,并不是所有内容都需要你掌握的,大家都知道Spring最常用的特性就是IOC和AOP,所以看源码解析时,最重要的也是这两个部分了。另外,看完Spring的源码解析以后,别忘了看SpringMVC的源码解析,学习方法也是一样的,找重点内容看即可。推荐资源:《Spring源码深度》,我的博客专栏04Java并发技术Java并发技术相信你为了搞定集合类源码和Spring源码花了不少功夫了,接下来轮到Java并发技术出场了。我们在入门篇其实已经谈到了多线程,但是也仅仅停留在使用Thread或者Runnable实现简单的多线程demo。实际上,为了理解Java并发技术的底层实现,我们还需要知道JMM模型,了解和volatile的底层实现,同时还要明白Java中的多线程和操作系统的多线程和什么联系和区别。除此之外,我们经常谈到的线程安全,有哪些实现方法,也是这部分内容的要点。学习并发技术,我建议分为三个步骤1 首先熟悉Java的多线程基础知识,比如Thread的使用,线程的状态转换,以及一些api的使用方式。 2 了解一些理论基础,比如JMM,操作系统的多线程实现。这部分内容推荐通过看书和看博客来学习。 3 了解并使用JUC的一些API,然后开始看JUC的一些源代码。这个阶段是最重要也是最困难的。 推荐资源: 书籍:《Java并发编程艺术》,《Java并发编程实战》 网站:我的博客专栏,并发编程网,importnew,《你不可错过的Java学习资源》05Java网络编程Java网络编程在搞懂Java并发编程技术之后,相信这部分内容也难不倒你。当然,前提是你对计算机网络有一定了解,因为网络编程涉及到TCP和HTTP相关的知识点。在学习这部分内容的时候,你首先要了解socket的使用以及原理,然后再去了解NIO的相关API,多写一些客户端和服务端通讯的demo,以便熟悉这些内容。为了更好地理解网络编程,你还要去了解UNIX网络编程模型。除此之外,如果你想要更好地理解Java网络编程,你还需要去了解Tomcat的实现原理。同时,Netty也是值得你去学习的一部分内容,*有机会去用一用这一网络编程框架,学有余力的同学还可以考虑看看它的源码(笔者没有看)。推荐资源:我的技术博客,《Java网络编程》,《你不可错过的Java学习资源》的版本一直在更新,但目前在用的主要还是Java8和Java7,等再过几年可能这部分的内容就过时了。但是目前看来,对Java8的学习和了解还是很重要的,毕竟面试也喜欢考。对这部分内容学习的*方式就是:看文章+代码实践推荐资源:《Java8实战》06总结今天的内容貌似有点多,大家会不会感觉有点吃不消呢。没关系,因为这部分内容确实需要花很多时间去学习。对于一个在校的Java学习者来说,可能没有机会接触到多么高大上的项目,所以对内功的修炼显得格外重要。看书,写demo,读源码,看似简单的事情实际上需要花费大量时间和精力,这个过程是需要你静下心来,慢慢沉淀的,在学习的过程中你也可以和笔者一样,写一些总结和博客,以便更好地回顾自己的学习历程。总结以下今天所讲的内容吧:1 计算机基础课程:数据结构,网络和操作系统 2 JVM基本原理 3 设计模式,JDK源码,Spring源码 4 Java并发技术,JUC源码 5 Java网络编程 6 Java8
2.中级Java程序员如何进阶(小册)
2021-05-23更新:感谢大家支持,上线半年销量突破1500份,特别新增《生产故事与事故》章节,记录日常开发遇到的实际开发问题,与大家分享交流~2021-11-09更新:工作1~2年的转行Java如何准备面试 2021-11-08_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili----------------- 以下正文 -----------------愤怒我真的喜欢写东西你们可能有的一些疑问定价如何得到小册愤怒随着离三十岁越来越近,我发现自己不仅没有要立起来的意思,反而变得越发地愤怒。我一直有个习惯,每次面试结束我一定会问:想知道您对我的评价。得到的回答永远是那一句:我觉得就非科班转行而言,还是不错的。老实说,我真的很烦这句话。强就是强,弱就是弱,为什么一定要强调是否科班?转行的是不是做得再好也只能排在科班生的后面呢?但,你跟谁理论去呢?转行开发两年多,我*的感受是,专业、公司背书、年龄等因素远比你实际水平重要得多得多。生活毕竟不是童话,千里马常有,伯乐不常有。其实也不能怪伯乐,因为连你自己都不知道怎么证明自己是一匹黑马。我记得刚入行时,我还想着有机会去阿里巴巴看看啥的,现在回头想想,好像瞎忙活了几年后各方面都不合适了,年纪大了,身体也不行了,甚至晚上经常颈椎疼得睡不着。有什么办法呢,时不我与。我也常常想,要是*就是计算机专业,我可能早就去了阿里。不过这两年心态也在慢慢变化,尤其外甥女出生后,我会更加明白个人的短暂与传承的意义。人生有限,有些地方未必都要用自己这双脚踏足,让别人替我去看看也好。我很难说自己水平有多么多么厉害,但分享总结的能力真的很强,对于问题能直击痛点深入浅出,善于发现别人没有注意到的细节,同理心也不错,简直天生的教师。如果注定我只能是个最强辅助,那么我能做的就是别浪费这点天赋。大家都能感受到,现在互联网越来越难,已经不是当初那个会SSM就能拿10k的时代了:社会人听说程序员高薪,砸了2w培训出来做了外包,天天加班到9点,拿6、7k非科班的应届生在校自学编程,出来处处碰壁,觉得用人单位不给机会科班生不懂得利用自己的优势,把时间都浪费在游戏上,毕业即失业,一脸颓废我想发挥点余热,帮助那些年纪比我小、勤奋好学的后辈,给他们一个比我当初好一些的起点,然后走得比我更远一些。说得俗一点,就是希望他们面试表现能好一点,*家公司能正规一点,然后争取进独角兽。这样大概人生的规划都会不一样吧,买房、娶妻生子都会可预期一些。有些知友可能觉得:你是大佬啊,怎么老说这种丧气话。是不是大佬不知道,但我很清楚自己是个普通人,我经历着和每个普通人一样的生活。我刚转行时*份工作试用期1900(包住),现在的年轻人没几个愿意吃这种苦吧。虽然我知道自己的价值不止于此,但却必须忍受当下的不匹配。同年10月,我已经涨到9k,再过三个月又涨到12k。我知道少数知友可能靠包装简历等方式刚入行就10+k,但我的12k,写的是一年。去年这个时候,我辅导*室友入行,同期有两位知友问的比较频繁,于是我拉他们组了一个小队,最终都找到了工作。看着他们入行就8k,我还是蛮欣慰的,他们不用经历1900的尴尬。当别人还在开公众号引流、各种标题博关注时,我常常想急流勇退。我真的喜欢写东西正如大家所见,当前这篇文章所在的专栏叫“闷骚的程序员”。名字不是重点,重点是它下面那句专栏简介:书写是对思维的缓存。过去两年多,我断断续续地在专栏写了90篇文章,比如:点赞数150+,但同样的内容搬到知乎回答上是这样的:又比如:搬到知乎回答是这样的:其他的就不一一例举了。点赞数并不是衡量一篇文章好坏的*标准,我只是更喜欢偏于一隅安安静静地写作,不想到处复制粘贴污染大家的时间线。很多和我关系比较好的知友常常劝我,应该学学其他博主开公众号,把一篇文章往多个平台投稿。但我有个习惯,三年了一直没变:随着自己的不断学习,我会经常发现以前写的文章有部分观点是明显错误的,此时我会去修正它们。如果你问我:你一个日语专业的,写这些东西专业不专业啊?我必须谦虚地告诉你,我太TM专业了。我把过去两年写得较好并且公开的文章都收集起来,按自己的理解整理了目录,按顺序学完相信会有很大的长进:初级Java程序员如何进阶技术好的人挺多的,文笔好的也不少,但两者能结合起来并且做得不错的,真不太多。如果你看我的每一篇博客,就会发现无论多难的技术,你总是能坚持看完并且觉得不太累,甚至觉得跟看小说一样有趣...不要小看这种讲故事的能力,这太重要了。现在,我又着手开始写新的小册。为什么写新的小册?初衷还是出于愤怒。为什么老有人顶着BATJ的名头恰烂钱,各种复制粘贴,却能不断涨粉名利双收?为什么所有平台的文章都是标题党,点进去给我推荐动辄上万元的架构师课程?为什么没有人关注非科班程序员的后续提升?告诉我该怎么进一步学习,学什么?大概从2021年开始,我陆陆续续收到很多知友的私信,说自己平日工作全是CRUD,接触不到很多新技术,自己又是非科班转行,基础也不扎实,面临着“想飞飞不高,想潜潜不下去”的尴尬局面。其实我在2021年也是这个状态,作为同样转行搞开发的,太懂这种感觉了。只会在同事的项目框架下改改代码,不会从零开始设计项目,不会搭建项目,各种报错解决不了,也不能独立分析需求转为表结构和代码,甚至连工具类都不会封装,都是一坨代码复制来复制去。至于性能优化、SQL索引就更别提了,一开始连Excel导入导出都不知道怎么搞。我相信,这是很多转行程序员的困境。而市面上,真的太缺转行后持续提升的教程了。我也不知道小册到底能帮到多少人,权当抛砖引玉吧。首先,小册内容创作全部由我一手操办(有些只是大纲,还没动手写,但肯定会写):我的文章插画:甚至学会了使用gif图:还有思维导图总结:小册会从细节出发尝试讨论每一个小小的困惑并尝试给出一些方案作参考:你知道为什么需要统一返回结果吗?你知道怎么封装Result吗?泛型是什么?当我设计一个通用类时,我是怎么考虑的,为什么我会在这个地方用泛型?工作中你会去做参数校验吗?手动校验?工具类校验?@Validated?实际开发怎么处理异常呢?如何处理事务呢?什么时候事务会失效?事务隔离级别我听过,实际开发好像从来没遇到过,面试官问我隔离级别,我只能背诵...SQL优化我不会啊,我写SQL只关心能否符合需求,根本不知道自己写的SQL性能如何...怎么把代码写得更优雅些呢?性能问题?枚举是什么啊,怎么用的呢?你会在DO和VO里使用枚举吗?自定义注解的原理是什么? 你们公司都在哪些地方用AOP呀?工作中Lambda和Stream用的多吗?Optional呢?我觉得好抽象,不会用啊...怎么把代码写快一点啊,我和朋友聊天打字很快,敲代码老是敲错,删了敲、敲了再删...怎么提高代码封装技巧呢?反射、泛型、注解我好像一个都没实际使用过...前后端数据格式的对应关系是什么啊?前端让我返回[{},{}...],我应该用Map还是List还是?面对一个比较复杂的表单,我分析不出后端应该怎么去接收...前端老说我Date时间格式不符合要求,百度说要加注解,但是DTO好多,要一个个改吗?GET请求我能用DTO接收,POST请求我该用什么接收呢?如果前端传来多个值呢?什么时候加@呢?Excel导入导出怎么做呀,我不会封装POI,公司现在用的POI工具类好复杂啊...多线程和线程池我一脸蒙蔽,我只会用同事配置的线程池。是啥?定时任务、异步任务、事件监听机制了解吗?底层机制呢?Redis怎么做缓存,需要注意什么问题?BIO、NIO、AIO是啥?和我一个码农有什么关系?产品拉我开会,他们的讨论让我一脸懵逼,因为我完全不知道如何把需求转化为代码和表结构...好痛苦啊,跟不上如何设计多级目录?发送组队申请的消息?队长踢人?Spring源码?哎,别说了,我连几个注解都玩不转......仔细观察上面的列表,你会发现小册要研究的不是高并发、不是烂大街的电商, 也不是JUC、AQS和红黑树,而是微不足道却和实际编程息息相关的问题。如果你不去解决这些问题,永远会觉得自己“地基不牢固”,想学新的技术却学不进去,回头研究这些问题又没有答案。不断地自我挣扎,蹉跎岁月。这就是小册的意义所在,我们希望能直击新手菜鸟的痛点,让工作一到两年的朋友迅速认清自己的不足并快速吸收必要的知识点。它未必尽善尽美,但搞懂它再去学其他资料就会快很多,甚至不知不觉已经培养出自己的技术思维。我盲目地相信着:这是一份能解答所有疑问的答案,很多转行程序员会需要它。所以它的名字叫:你们可能有的一些疑问为什么不开公众号,非要写小册其实很重要的原因是,如果真开了公众号,即使我再清高,也会不知不觉地为了保证更新频率,把一篇拆成两篇,两篇拆成四篇,而且会在各个平台宣传它。然后每一篇的标题会变成“震惊!你还在用吗?内存泄漏了解一下?”你们也不希望为了省这几十块钱被我恶心大半年吧...而且公众号太零散了,大家*得到的不是小册子,无法经常翻阅,排版也不尽人意,很难受。网上教程那么多,小册的亮点在哪?一句话:任何复杂的概念我都能站在非科班的角度,以最简单的语言给你解释清楚,并且有独特的见解,而且学完你也能保持独立思考。我买过太多课程,看过太多专栏,以科班自居沾沾自喜,内容则写得实在一般,读起来味同嚼蜡。好的文章,应当深入浅出,让别人懂。尤其是如果本身是出于教学目的,应该*限度保证读者易吸收。我相信很多人应该和我一样,已经买过很多形形色色的小册了,有6、70+元的,也有99-129的。我知道这些对你们来说都是小钱,但花了钱买了文章,翻了几篇就索然无味放弃了,那么就不是小钱,而是浪费时间。钱没了可以再赚,时间没了就真找不回了。为了验证我上面所说,这里抛出一个问题:Thread、Runnable、Callable的异同点是什么?是什么、怎么用大家可以先去百度,看看网上的博客能不能给你讲明白,他切入的视角是什么。小册适合人群培训班出身一年以内 or 水平一般的应届生 惊喜度80%培训班出身两年以内 or 水平较优秀的应届生 惊喜度50%总的来说,我最推荐工作一年以内的朋友参加,因为这样你的提升是最快的,而且会膨胀。至于两三年经验的朋友,其实可以不看,除非你觉得自己学得很不系统,而小册*的特色是通俗易懂且系统。定价市面上各个平台的专栏,基本都是深入一个点去讲一些问题,比如MySQL优化,Netty源码等,基本定价在70-90之间,还有129的,篇幅大概在30~40篇。我的小册,已经更新100+篇,价格却更便宜,从编程的犄角旮旯写到项目设计,只要我会。文章的价值不需要靠价格来体现,只是单纯感谢一直以来支持我的读者朋友们,体恤野生程序员的不易而已。老实说,我们不在乎小册最终卖多少,反正我自己喜欢写博客,顶多就是没人看罢了。只是真的希望大家能有收获,然后不要觉得我在割韭菜,你总要相信有人是清流吧。如何得到小册见个人简介或评论区翻一下...(知乎这样我要生气了,改好多次了)Java小册大部分文章之前都写完了,但时间过去半年了,部分文章现在看来写得不是很好,所以会重新润色后放上来。大家现在进去暂时只能看到十几篇文章,但我争取每周更新一两篇,咱一篇一篇来,争取都搞懂。小册的很重要的一点是:很系统、很系统、很系统。它能帮你养成熟练的一套工作流程,帮你脱离日常CRUD的困境,留出更多时间给自己,从996的牢笼里解脱出来。只在知乎靠路人缘,上线半年销量破1400+*,也不贩卖焦虑啥的了,都挺不容易的,反正就希望大家能尽早搞懂一些技术,它们真没你想的那么难,大家最缺的其实是勇气。
上述文章了解到关于Java工程师学习指南(中级篇),中级Java程序员如何进阶(小册)?? ,让我们对java技术教程中级篇 有一个直观的认知。我们发现,作为一个优秀的Java程序员是多么的自豪。