当前位置: 主页 > JAVA语言

java框架怎么精通-Java学到什么程度,才敢称为不单单指Java

发布时间:2023-06-17 11:10   浏览次数:次   作者:佚名

点击上图,查看图书详情

你好,我是yes。

之前看到群里发的一些截图,有些人的简历上写了精通Java。

并且也有人问我 Java学到什么程度,才敢称为精通。

对于精通 Java ,我个人理解为不单单指 Java 这门语言,而是指整个 Java 生态,一个项目的整体架构。

其实我个人对精通这个词有种畏惧感,像我这种偶尔喜欢杠的人,会假想别人从多个角度杠我。

如果我简历写了精通 Java ,那对方可能认为我 JVM 源码应该是熟悉的,万一对方让我为公司量身改造下 ZGC 咋办?

我至今生产环境才用过 Java8 呢,所以怕被人用各种角度杠,因此换个角度来说:

Java学到什么程度才能算比较厉害了?

这样我还能斗胆BB下。

第一趴

我认为:需要掌握Java基础、类库、JVM、Spring、MQ、RPC、Netty、SQL、NoSQL。

Java基础就不说了,语法和语言的特性肯定是要熟悉的,别 finally return 这种都搞不明白。

常用的类库肯定是要掌握的,一开始上网查查很正常,到后来还每次都查就说不过去了,熟悉的使用类库能极大的提升开发效率。

JVM是一定要掌握的,不会点这个面试都不敢张嘴,类是如何加载的?运行时的区域有哪些?垃圾回收机制?GC的调优?

理论知识掌握的情况下,如果你没经历过 GC 调优,我建议需要自己写个程序造点“垃圾”,调一调。

Spring 全家桶,我觉得 Java 之所以有今天这个成就,离不开 Spring 的发展,像 Java 为了推 Graal VM ,还主动拉拢了 Spring 共建了 Spring Graal Native 项目,由此可见 Spring 的地位。

关于 IOC 、AOP这种老生常谈的就不说了,对于 Spring、SpringMVC、SpringBoot、SpringCloud 等,我觉得需要有个源码级别的认识。

其实也不是很难,看看 Spring 容器是如何建立的,Bean 是如何加载和获取的,SpringMVC 是如何 handler 请求的,SpringBoot 启动做了什么?starter 是如何实现的?SpringCloud 服务如何发现、调用和路由等等。

对整体流程要有个大体的认识,看源码不是说需要记住每个类的类名叫什么,死记每个类有什么用,这不现实,你过几个月没接触必定会忘记,你只是需要厘清一些原理和流程,明白其间的数据流转和大致的处理,对很多实现有个具象的认识,例如 AOP 是如何实现的等等。

MQ,消息队列。我相信现在系统或多或少都得用到消息队列,常见的有 RabbitMQ、RocketMQ、Kafka。不说每样都精通,但是至少需要了解互相之间的特性和特点,能做到不同场景下正确的选型,比如偏业务请求量大用 RocketMQ,负载不是很高对时效性要求高的用 RabbitMQ,量大注重吞吐或流式领域用 kafka 等等。

当然,有能力我还是建议有个源码级别的认识,这样能深刻的了解为什么 kafka 的吞吐会比较高,RocketMQ是如何实现事务消息的等等。

RPC,前面已经提到了 SpringCloud ,还有挺多公司也有用 Dubbo 的,至少需要知道这两个是 RPC 框架,远程调用和本地调用的区别,为什么会有远程调用。

而远程调用又涉及到序列化、协议、网络传输,完善的框架还得有服务发现、负载均衡、重试、限流、熔断,再扩展开来还需要分布式链路追踪、统一日志、指标收集与监控预警,这样才算是一个完整的 RPC 域。

Netty,它其实只是一个 Java 实现的提供异步的、基于事件驱动的网络编程框架,用于快速开发可维护的高性能服务器和客户端。它很常见,很多中间件都是基于 Netty 实现的,所以单独拎出来,熟悉它能让我们更好的掌握网络通信,对网络 I/O 有更深地认识。

SQL,其实不仅指 SQL 语句,更是指关系型数据库,典型的有 Oracle 、MySQL 等。掌握 SQL 语法,编写能高效运行的 SQL 语句,正确的建立索引和合理的设计数据库,这就是对 SQL 的要求。

不同的数据库有不一样的实现,但是核心点其实都是差不多的,你需要抓住一个稍微深入一下,了解数据库的核心架构,记录是如何存储的,主键索引和辅助索引是如何分布的,还有索引的一些原则,最左匹配、索引下推等等。

需要明白联表查询会有什么问题,一个 order by 是如何在完成排序的,group by 是如何实现的,limit 是如何实现的等等。

这样你写 SQL 才会通透,会有一种预知 SQL 是如何执行的能力。是的听起来有点矛盾,数据库对于我们来说应该是黑盒使用才对,但是身为开发,不了解点内部机制,往往不能很好的用好数据库。当然我不是指源码级别的了解,这个没必要,量力而行。

NoSQL指文档型数据库(MongoDB)、键值对数据库(Redis)等。关系型数据库的地位还是不可动摇的,但是 NoSQL 也已经发展到不可或缺的地步了,我相信大多数系统肯定都用上了 Redis 和 MongoDB,这是因为关系型数据库不能很好的支持一些特点的查询,限制性太强,不具备动态能力,不能有很好的扩展性,无法支持超高的吞吐和超大的数据等等。

所以需要掌握它,这里也没必要源码级别,只要熟悉其特性,了解内部的一些处理流程,拿 Redis 举例:比如 Redis 是单线程执行命令,即使 Redis6.0 版本提出了多线程,但是命令的执行还是单线程的等等。还包括高级的特性,比如 Redis 的哨兵,cluster 的交互等。

至此,你对于常见的企业级项目拥有的大多数组件都有深入的了解,当然我不是仅指理论知识,你至少需要能独立上手,能成功的搭建整个项目,然后还得各组件由深入的了解,这才算是比较厉害了java框架怎么精通,更厉害的就是根据公司的特殊场景对组件做一些定制化开发了~

关于前面说的需要看一些源码,我写过一篇看源码的心得,可以看下:

关于消息队列的我也写过一些文章:

java 2从入门到精通_php开发框架和java开发框架_java框架怎么精通

这些文章我都汇总到我个人仓库上了,欢迎star:

第二趴

第二趴我个人认为精通需要了解架构演进,像为什么架构会从大型机->原始分布式->单体->SOA->微服务->服务网格->无服务,中间经历了什么?

然后通过架构的演进之路,再融合起来上面提到的这些组件,这样就更加清晰是由于什么原因导致架构的变更,促使需要引入不同特性的组件来弥补哪些短板,这样整个知识面就串联起来。

接着上面提到的 Spring Graal Native 来举例说一小点:比如现在容器崛起,云原生这个词不断地出现,了解微服务架构,那必然了解服务是不断启停的。

那精通 Java,必然是知道 Java 是需要热身才能达到最高性能的,然后你还会知道有 AOT(提前编译),然后你还会知道 AOT 其实会降低 Java 链接的动态性,也破坏了所谓的 “一次编写,到处运行”,但这又是大势所趋,所以你还会知道 Java 在搞 GraalVM,感觉不好推,又联合 Spring 一起来搞。

所以说很多东西的出现都有缘由的,从头弄明白了之后,就很容易接受所谓的新东西。

所以我认为,这两趴都吃下的人,才能叫精通Javajava框架怎么精通,是的我变卦了,这些都掌握了,必须称之为精通了。

鲁迅说的好:变秃了才能变强。

我估计只能等我头发掉完的那天,我才敢在简历上写精通Java吧~

java 2从入门到精通_php开发框架和java开发框架_java框架怎么精通

php开发框架和java开发框架_java 2从入门到精通_java框架怎么精通