如何通过一个项目征服Java

news2024/11/16 12:31:27

Java早已经不是高大山的稀世珍品了,程序员也不再是高科技工作者,而被称为码农 ,为什么呢?因为Java后台的很多基础技术都已经固定了,也就是说主要你从头到尾学一遍就能会 ,淘宝双十一搞不定,但是做个普通的网站还是没问题的。而大部分公司的流量都没有那么大,大部分工作也都是简单的正删改查做需求而已,所以程序员就慢慢变成了代码搬运工,俗称码农。

虽然Java技术从几个人的小公司到阿里头条都用,但是高级程序员和低级码农的差距也是天上低下。如果要进阶我觉得有一件事是非常重要的:全面掌握Java技术栈的大部分技术,不一定每个都很精通,但是至少常见的技术都应该很清楚的。如果一起聊天时不知道redis如何缓存同步,不知道如何分库分表、不知道如何防止消息重复消费是很丢人的事。在全局掌握之后,我们可以更加深入的理解某个技术,例如JVM、多线程、Spring、分布式和微服务的相关技术等等。

那么该如何才能很好的掌握这么多的技术呢?我觉得从头到尾自己搭建一个完整的项目是个不错的主意。在公司中,很多时候我们都是在别人的基础上干活,虽然效率最高,但是经常会失去很多学习的机会,越大的公司这种情况越明显。例如经常看到线上的服务有很多配置,你知道他们都是做啥的吗?服务启动的时候加载了一堆的文件 ,你知道哪些可以去掉吗?别人建设了分布式调度中心,你用的时候只是增加了个配置,然后迁移自己的业务,活干了不少,但是你能说自己熟悉分布式调度中心吗?等等。

自己搭建项目的好处是自己要完全理解每个细节,从0开始清晰认识整个系统。坏处自然是这个项目不能涉及太多太复杂的业务内容,是个重复造轮子的过程。而在大部分工程里,业务代码占了80%甚至更高。因此我们只能说自己搭建的项目只能征服Java的高山,而不能涵盖Java的全部。

那什么项目适合自己搞一个呢?我觉得是一个简单的电商系统。四个原因,一个是谁都知道电商咋回事,但如果换成金融等系统,估计很多人名词都看不懂。第二个是几乎后台的技术,都是为了解决电商的问题而产生的,例如安全、高并发等等,而教育类,各种各样的管理系统,反而没那么高的访问量,因此对接口限流等等没有那么高的需求。第三,我们知道的网站几乎都是买东西的,电商系统在国内至少被建造过上万次了,因此很多问题都能快速找到解决方案。第四是,电商系统能搞定,其他系统几乎都不在话下,跑过一万米的人,应该不会害怕1000米吧。

所以从今天开始我们从0开始搭建一个完整的电商系统,我们会充分参考网上很多开源的、免费的系统、说明等等,不但消化吸收,不断迭代完善,融合到我们的系统中。

这个系统按照怎么样的主线来设计呢?我们的目的是为了掌握技术,而不是真正建设能买东西的网站,所以我们首要考虑的是如何合理地逐步引入各种各样的技术和解决方案。

我打算分为四个大阶段:单体篇、微服务篇和云原生篇。不过这三个阶段只是我们专门研究技术问题的类别,我们不一定将一阶段彻底写完再写下一个,而是会有很多交叉,最后我们将写好的文章在这里归类起来,就像我们之前整理算法一样。

第一阶段:单体篇

就是面向一台机器或者一个服务的技术,搭建一个单机完整的项目,我打算在这个篇梳理以下问题:JavaWeb、VUE前端技术、Angular前端技术、tomcat原理、数据库+JDBC+连接池、 spring、SpringMVC、ORM技术、SpringBoot、报表、文件处理、图片服务、maven,swagger并在整个过程中贯穿对项目设计的理解。

第二阶段:微服务篇

就是面向常规的微服务系统的设计,就是要构建一个如下一样的完整系统,设计的技术会非常多。

例如这里会使用分布式相关技术,例如消息队列、redis缓存、nginx、服务网关、分布式调度XXL-JOB,分布式检索ES、kafka消息等等,还有以SpringCloud为代表的微服务技术、阿里巴巴的这里会重点构建几个重要的解决方案,目前考虑的有如下这些:

  1. 微服务注册中心解决方案
  2. 微服务认证解决方案
  3. 微服务网关解决方案
  4. 微服务负载均衡解决方案
  5. 微服务集中配置解决方案
  6. 微服务熔断限流解决方案
  7. 微服务分布式事务解决方案
  8. 微服务消息中间件解决方案
  9. 微服务高性能缓存解决方案
  10. 微服务分库分表解决方案

第三阶段 云原生篇

虽然一提到云原生就想到K8s+Docker+KubeSphere+DevOps这些,但是云原生本身不是一个简单技术,而是一种行为方式和涉及理解。凡是能够提高云上资源利用率和应用交付效率的行为或方式都可以称之为云原生的。云原生由一系列技术支撑起来的,代表技术包括容器、服务网格、微服务、不可变基础设施和声明式 API。

云原生是大趋势,目前Java微服务开发越来越重,集成的功能越来越多,很多都与业务本身没有关系,而云原生的目标之一就是将那些固定的工作,例如接口限流等逐步固化到基础组件中,Java只负责业务就可以了,此外还有监控、日志、部署等很多基础功能。考虑到云原生更多是一种设计思想,我们还是做一个更具体的事情,目前考虑将以下内容归到云原生里。

  1. 微服务分布式日志解决方案
  2. 微服务持续集成解决方案
  3. 微服务链路追踪解决方案
  4. 微服务实时监控解决方案
  5. 微服务压力测试解决方案
  6. 微服务容器化部署解决方案

上面的任务每个拓展开都涵盖很多内容,而且做的时候会进行很多细化和调整,但是坚持做下去就可以了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/55788.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2022年12月深圳/珠海/佛山/东莞数据分析CPDA认证报名

2022年12月深圳/珠海/佛山/东莞数据分析CPDA认证报名 CPDA数据分析师认证是中国大数据领域有一定权威度的中高端人才认证,它不仅是中国较早大数据专业技术人才认证、更是中国大数据时代先行者,具有广泛的社会认知度和权威性。 无论是地方政府引进人才、…

HAL库(STM32CubeMX)之看门狗学习及实操(STM32F767IGTX)

系列文章目录 HAL库(STM32CubeMX)——ADC学习总结(包含单次/连续模式下的轮询/中断/DMA)(蓝桥杯STM32G431RBT6) HAL库(STM32CubeMX)——DAC学习(STM32G431RBT6) HAL库(STM32CubeM…

Innodb如何实现表--上篇

Innodb如何实现表--上篇数据是如何被管理起来的表空间段区页行行记录格式Compact记录行格式Redundant行记录格式行溢出数据Compressed和Dynamic行记录格式Char的行存储结构小结数据是如何被管理起来的 从InnoDB存储引擎的逻辑存储结构看,所有数据都被逻辑地存放在一…

[附源码]计算机毕业设计JAVA宿舍管理系统

[附源码]计算机毕业设计JAVA宿舍管理系统 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis M…

十万部冷知识:奥运会冠城市名,世界杯为什么冠国名?

不知道大家发现没有,凡是给奥运会、亚运会等很多比赛取名的时候,往往都是给它冠以城市的名字。比如,北京冬奥会、广州亚运会、北京奥运会等等,而称呼世界杯的时候,我们往往是冠以国家的名字称呼的,诸如&…

Day17-购物车页面-商品列表-实现滑动删除功能

提纲挈领: 官方文档: 博主文档: 我的操作: 1》改造 cart.vue 页面的 UI 结构,将商品列表区域的结构修改如下(可以使用 uSwipeAction 代码块快速生成基本的 UI 结构): 2》在 data 节…

学到生无可恋之 Redis

一把年纪了还是这么菜 1 Redis 是啥 Redis 是一个高性能的 Key-Value 数据库,key 的类型是字符串,value 的类型有:string 字符串类型、list 列表类型、set 集合类型、sortedset(zset) 有序集合类型、hash 类 型、bitmap 位图类型等。 上图…

Mybatis:Mybatis的各种查询功能(5)

Mybaits笔记框架:https://blog.csdn.net/qq_43751200/article/details/128154837 Mybatis的各种查询功能1. 查询一个实体类对象2. 查询一个List集合3. 查询单个数据4. 查询一条数据为map集合5. 查询多条数据为map集合方法一方法二1. 查询一个实体类对象 SelectMapp…

【图像融合】小波变换彩色图像融合(带面板)【含GUI Matlab源码 782期】

⛄一、小波变换彩色图像融合简介 0 引言 目前在各种图像采集与分析系统中已大量使用彩色CCD数码相机, 但是由于其视野有限, 常常获得的只是局部图像, 如果要保证一定的分辨率的前提下采集整体彩色图像, 只能先拍摄具有重叠部分的局部彩色图像, 随后对其进行手工或自动拼接的方…

29岁才转行软件测试,目前32了,我的一些经历跟感受

按惯例,先说下我基本情况。我是90年的,算是最早的90后,现在跟你介绍的时候还恬不知耻的说我是90后,哈哈,计算机专业普通本科毕业。在一个二线城市,毕业后因为自身能力问题、认知水平问题,再加上…

基于 Delphi 的前后端分离:之二

本系列文章之二 # 摘要 上一篇文章,我在页面里面,使用 JS 向服务器端获取数据,然后修改页面元素显示数据成功。接下来,真正的页面,是需要格式的,要好看。如何做到? # 开始 # 网页模板和 Del…

用于安装和维护光纤单模和多模的光纤网络测试套件

VIAVI 唯亚威OMK-3xV2 光纤测试套件是一系列小巧且坚固耐用的仪表,用于安装和维护单模 (SM) 和多模 (MM) 光纤网络。所有测试套件均配备光功率计,以及专用于光功率、插入损耗测量和连续性检查的双波长或四波长功率计光源。 优点 随时可用 - 超高可靠性和…

四大主流BI工具的对比分析!

一、简介 1.Tableau Tableau 是一个 BI 分析和可视化工具。它为分析数据和创建交互式可视化提供了强大的功能。Tableau 旨在支持复杂的数据科学和分析,让数据专家可以使用一系列可视化工具构建分析。 2.Power BI Power BI 是 Microsoft 的产品,因此它…

[附源码]Python计算机毕业设计SSM久宠宠物店管理系统(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Spring MVC中的拦截器

在之前学习JAVAWEB 的时候,我们学习了过滤器的知识。过滤器的作用是保护请求的服务器资源,在请求资源被执行之前,如果请求地址符合拦截范围,则会先执行过滤器。过滤器的执行时机,是在Servlet之前执行的。但是在使用了S…

Java项目导入IDEA的流程配置及常见问题解决(持续更新中...)

Java项目导入IDEA的流程配置及常见问题解决 本文主要演示一个普通 java 项目导入IDEA的流程步骤及可能出现的问题、原因及解决办法。 本文使用的部分软件版本如下: IDEA 2018.3 JDK 1.8 Windows 1.导入Java Priject 导入之后可能发出现大面积红色,这…

StringTable

文章目录1. String的基本特性2. String的内存分配3. String的基本操作4.字符串的拼接操作5. intern()的使用6. G1中的String去重操作1. String的基本特性 2. String的内存分配 使用String的intern方法可以把字符串加入到字符串常量池。同时可以使用该方法来证明JDK8中字符串常量…

PL7022/PL7022B原厂双节/两节锂电池串联充电IC和保护IC

双节锂电池串联管理系列选型表: 型号 封装 功能 PL7022B SOT23-6 双节4.2V锂电池串联保护电路 PL7022 SOT23-6 双节4.35V锂电池串联保护电路 PL7501C ESOP8 升压型双节锂电池串联充电电路(VIN:5V) PL7222 ESOP8 降压型双节锂电…

ABC 分析法(帕累托分析法、2/8分析法)

在任何特定群体中,重要的因子通常只占少数,而不重要的因子则占多数,因此只要能控制具有重要性的少数因子即能控制全局。例如,在企业中,通常认为它80%的利润来自于20%的项目或重要客户;全球最富有的 20% 人口…

帮公司面试了一个33岁的程序员,只因这一个细节,被我一眼看穿是培训班出来的,没啥工作经验...

首先,我说一句:培训出来的,优秀学员大有人在,我不希望因为带着培训的标签而无法达到用人单位和候选人的双向匹配,是非常遗憾的事情。 最近,在网上看到这样一个留言,引发了程序员这个圈子不少的…