掌握后端开发核心技术——入门教程

发表时间: 2024-06-21 10:01

Java后端开发学习教程

如何学习Java后端开发技术,掌握Java基础,熟悉一些分布式框架?这里详细介绍了Java后端开发的核心知识点,包括框架,数据库,Linux,阅读一段底层代码等,一起来学习吧。

框架很重要,但不要让人觉得你只能抄袭别人的代码

目前,SSM 是一个热门职位。但从业 5 年或以下的候选人通常只能“复制”别人的代码,即在现有的框架和别人写好的流程的基础上扩展新的功能模块。比如要写一个股票下单的功能模块,就会模仿现有的下单流程,然后从前端复制到后端再复制到数据库,最多改一下功能相关的代码点。

其实我们每个人都经历过这样的情况,如果你只表现出这种能力,你的水平就和大多数人差不多,无法体现出你在这方面的优势。

我们知道如果单纯使用 SSM 框架,大部分项目都会有痛点,比如数据库性能差,或者业务模块复杂,并发量高,Spring MVC 中的 Controller 无法满足跳转需求。所以我一般会主动问:除了按照现有的框架写业务代码,你还做了哪些其他的改变?

我听到的答案有:增加Redis的缓存,避免对一些不变的数据进行频繁的调用。或者在MyBitas的XML中,如果select语句在where条件中有isnull,也就是这个值存在的话,就会增加一个where条件。为此,会在任意where中添加一个不带isnull的查询条件,避免语句在传入的参数全部为null的情况下进行全表扫描。或者简单来说,后端异步返回的数据量很大,耗时很长,所以我在项目中增加了异步返回时间,或者对返回的信息进行压缩,增加网络传输性能。

对于这个问题,我不在乎听到的是什么答案,我只关心答案是否合乎逻辑。一般如果答案正确,我会给出“我在框架层面有自己的经验,有一定的了解”,否则,我只会给出“我只能在项目经理的指导下编写框架代码,对框架本身了解不多”。

其实总结框架里的重点并不难,我不相信大家做项目的时候没有积累,只要你说出来,可以说你在这方面碾压了近70%的竞争对手。

不要只看框架的独立版本,了解一些分布式

另外在项目中描述框架技术的时候还可以带上一些分布式技术,下面我列举了一些你可以准备的分布式技术。

1、反向代理方面,nginx的基本配置,比如如何通过lua语言设置规则,如何设置session stickiness等。有条件的话,学习一下nginx的一些底层知识,比如协议,集群设置,failover等。

2、对于dubbo的远程调用,可以看看dubbo与zookeeper整合的知识点,更进一步了解dubbo底层的传输协议和序列化方式。

3.消息队列可以看看Kafka或者哪个组件怎么用,简单点可以看看配置,组设置,深入点可以看看Kafka集群,持久化方式,发消息是使用长连接还是短拦截。

上面只是三个组件作为例子,还可以看看Redis缓存,日志框架,MyCAT分库分表等等。准备主要分两种,第一种是懂得怎么用,比较简单,通过配置文件就可以搭建出功能模块;第二种就是看一些底层代码,了解协议,集群,failover等高级知识点。

如果你能流利的讲一讲分布式组件的底层,你会得到更好的评价,比如“深入理解底层框架”或者“有丰富的框架经验”,这样你甚至可以成为一名架构师,更不用说高级开发人员了。

数据库方面,不仅要懂得增删改查,还要懂性能优化

在实际项目中,大部分程序员可能只会用到增删改查,我们在使用Mybatis的时候,这种情况是比较常见的。不过如果你也表现得如此,那估计你的能力跟其他竞争对手差不多了。

对此,可以准备以下几种技能。

1. SQL的高级方面,例如group by,having,left join,子查询(with in),行到列的转换等高级用法。

2. 关于表的创建,你可以考虑一下你的项目是否应该使用三范式或者反范式,以及你的理由是什么?

3.特别是针对优化,可以准备如何通过执行计划来查看SQL语句的改进点,或者其他提升SQL性能的方法(比如建索引等)。

4、如果觉得自己有能力,还可以准备一些MySQL集群和MyCAT分库分表的技能,比如使用LVS+Keepalived实现MySQL的负载均衡,MyCAT的配置等。同样,如果可以的话,也阅读一些相关的底层代码。

Java核心知识点,重点关注数据结构与性能优化

我们知道,Java开发目前都是以Web框架为主,那为什么还要问Java的核心知识点呢?这一点我有切身的体会。

我之前在团队里就见过两个人,一个只知道干活,具体就是会用基本的Java核心API,根本没有想学更多东西的意图(可能根本就不知道怎么学),另一个平时会看一些Java并发、虚拟机等高级知识。半年之后,后者的能力就迅速升级到高级开发了,由于对JAVA核心知识点理解透彻,所以看一些分布式组件的底层实现也没多大问题。而前者,一直在做重复性的工作,能力只停留在“知道干活”的层面。

现实中,如果不熟悉Java核心知识点,那么很难晋升到高级开发,更别说胜任架构师级别的职位了。

对于 Linux,至少知道如何阅读日志来解决问题

如果应聘者能证明自己有“排除故障”和“解决问题”的能力,这肯定是一个加分项,但如何证明呢?

目前互联网项目大部分都是部署在Linux上,也就是说日志都在Linux中,下面总结一些实用的Linux操作。

1.可以用less命令打开文件,然后使用Shift+G到达文件底部,然后使用?+keyword根据关键字搜索信息。

2.可以通过grep来搜索关键字,具体用法是,grep 关键字 文件名,如果要在结果中搜索两次,则使用grep 关键字1 文件名 | 关键字2 --color,最后--color是高亮显示的关键字。

3. 能够通过 vi 编辑文件。

4.可以通过chmod设置文件权限。

当然,还有更多更实用的 Linux 命令,许多候选人甚至不知道一条 Linux 命令。再说一遍,即使你知道基础知识,你也比普通人要好。

阅读一段底层代码作为奖励

如何证明自己非常了解某个知识点?最好的方式就是通过底层代码来讲解。我和很多经验不足5年的程序员交流的时候,很多人觉得这个很难?确实,如果想通过阅读底层代码来理解分布式组件,并不难,但如果看懂下面部分的底层代码,就不难了。

1、ArrayList和LinkedList的底层代码里都有基于数组和链表的实现方法,如果你能用这个来解释扩容和“通过枚举器遍历”,那你绝对可以证明自己了。

2、HashMap直接对应的是Hash表数据结构,HashMap底层代码中包含了hashcode的put、get等操作,甚至在ConcurrentHashMap中还包含了Lock逻辑。

3.可以看一下静态代理、动态代理的实现方法,如果想深入一点可以看看Spring AOP中的实现代码。

4.也许Spirng IOC和MVC的底层实现代码比较难懂,但是可以讲一下一些关键的类,并根据关键流程解释它们是如何实现的。

其实你不需要准备很多底层代码,也不局限于某个方面,比如基于红黑树的 TreeSet,基于 NIO 的开源框架,甚至分布式组件 Dubbo 都可以准备。而且准备的时候也不需要把所有的底层代码都背下来(其实也很难做到),只需要把一些重要的类和方法组合起来,并把思路讲清楚就行了(比如讲解 HashMap 如何通过 hashCode 快速定位)。

如何找个好机会讲讲自己编写的底层代码?面试官总会问到集合、Spring MVC框架等相关知识点,顺便说一句“这块底层实现我也懂”。千万不要小看这会给应聘者的帮助。一旦讲出来,只要意思表达到位,至少能得到“愿意积极、专业”的评价。如果描述的很清楚,那么评价就会升级为“熟悉Java核心技能(或Spring MVC),基本功扎实”。

要知道能把底层代码讲清楚的人少之又少,所以就算你提出这个话题,没有达到预期的效果,你的评价也不会被拉低,所以备考这个绝对是一门“百利而无一害”的赚钱生意。