目录

技术栈

学习目的

1.原始系统——数据库 + 前端 + 后端

2.系统优化——本地缓存(Caffine Cache)

3.系统升级——分布式微服务(Dubbo + Nacos + Redis)

4.系统通信——消息队列(RabbitMQ)

其他

总结


技术栈

数据库:MySQL(索引、分库分表)

后端:Spring、SpringMVC、Mybatis、多线程编程、网络编程、设计模式、算法设计、JVM

前端:JavaScript、CSS、HTML、Vue(起码要懂一些前端甚至熟悉)

分布式微服务RPC框架:Dubbo或spring cloud(或其他)

注册中心:Nacos或Zookeeper(或其他)

缓存中间件:Redis(或其他)

消息中间件:RabbitMQ(或其他)

本地缓存:Caffine Cache或Guava Cache(或其他)

其他:linux、操作系统、JVM调优

学习目的

为什么要如此设计学习内容?分析学习这些技术的目的,需要从系统出发。

1.原始系统——数据库 + 前端 + 后端

2.系统优化——本地缓存(Caffine Cache)

系统运行的所有操作基本都是围绕着增删查改,需要频繁访问数据库,就是要频繁IO。IO是操作系统发送读写指令到磁盘操作数据的过程,首先需要进行磁盘寻道,磁盘在当前扇区开始扫描数据,经过不断切换磁道和盘面,找到数据所在位置,然后将磁盘的磁性材料的磁极信息转换为电信号,返回给操作系统转化为机器语言0/1这个过程非常耗时,假设我们一个查询操作是一秒钟,这部分耗时可能要消耗0.9秒,即IO操作占了90%的时间。

缓存技术就是使用内存c减少IO操作,极大提高系统性能(起码快100倍以上)

DDR4内存读写速度大概50G每秒(50000M)

固态硬盘速度是300M每秒,是内存的1/200

机械硬盘的速度是100M每秒,是内存的1/500

Ps:使用缓存要注意数据入库处理,例如用一条线程设计定时入库策略

3.系统升级——分布式微服务(Dubbo + Nacos + Redis)

解决互联网三高(高并发、高可用、高性能)有效途径

当我们的系统过于复杂和庞大的时候,想要进行部分功能升级改造的时候,就比较麻烦了。牵一发而动全身,出一点问题都会是比较大的损失。这个时候就需要用到微服务把系统拆分成多个小系统,独立开发升级优化,升级的时候也只需要关闭某些部分服务的系统,而不需要整个系统关闭。

与单体应用程序相比,微服务组织更好、更小、更松耦合,并且是独立开发、测试和部署的。由于微服务可以独立发布,因此修复错误或添加新功能所需的时间要短得多,并且可以更有效地将更改部署到生产中。此外,由于微服务很小且无状态,因此更容易扩展。

微服务系统一定是分布式系统;分布式系统不一定是微服务系统。

那么除了微服务还有什么其余的系统也是分布式的呢?举个比较简单的例子——集群。例如我们系统不大,但是用户量非常庞大,单体机器CPU、内存等硬件资源不足怎么办?一是提升硬件条件,但硬件有上限,不是长久之计,那么就要用到集群了。集群就是系统复制粘贴到多个机器上面单独运行,在客户端访问的时候进行分流,理论上可以无限拓展。集群可以访问同一个数据库,也可以每个系统单独运行数据库保存数据然后用RPC通信联系。

4.系统通信——消息队列(RabbitMQ)

主要作用表现为解耦、异步、削峰。

由于分布式微服务已经实现了系统间的高内聚低耦合、并且Dubbo也可以实现异步通信,所以这里侧重说明一下削峰。

削峰就是客户端大量请求进行排队操作。例如秒杀活动,假如系统极限只能同时承担1000 QPS(每秒查询率),那么在一秒内进入10W个请求,如果没有消息队列进行排队削峰处理,则有可能造成网络错误,甚至宕机。

其他

linux部署项目、操作系统是如何运行系统的(线程、进场、用户态、内核态、内存、硬盘、IO)

总结

使用前端+后端+数据库写一个商城系统

使用Caffine Cache在内存操作数据

使用Dubbo + Nacos +Redis把每个功能点进行微服务拆分分别维护开发

使用RabbitMQ + Redis开发商品秒杀活动

一个固若金汤的系统就完成了!

学习路径是根据一整个系统的架构来安排的。掌握以上全部技术,基本可以保证你一个人完成从开发、优化、升级、部署到上线一个健壮系统的整个流程了。有完整搭建一个健壮系统的能力,每一部分的部署、优化和升级都掌握,就是一个及格的高级程序员了(我猜。还有个Netty,有空再学了

15K水平的Java程序员技术栈相关推荐

  1. JAVA程序员技术栈、业务栈、工具栈

    JAVA程序员技术栈.业务栈.工具栈 目录: 1.技术栈 2.业务栈 3.工具栈 今天是实习期以来将近100天了,感谢公司给予的期望与同事们提供的帮助.好久没更新博客了,一是懒于写,二是文章写得不够深 ...

  2. 高级Java程序员技术栈

    转自[菜鸟教程] 直接上脑图.  

  3. 那些想不断提高自己技术水平的Java程序员们

    对程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从.我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水平的Jav ...

  4. Java后端程序员技术栈

    Java后端程序员技术栈 它可以是知识提纲,便于快速复习与查阅 它也可以是你的学习规划,帮助小白快速了解学Java要走的路(当然你也可以选择搭配我的学习路线一起享用!) 相关链接: <gitee ...

  5. java程序员技术_JAVA程序员需要懂得哪些技术

    原标题:JAVA程序员需要懂得哪些技术 学习java,掌握java技术,成功找到一份满意的工作,这才是一个完美的学习过程和结果.那对于初学java的同学来说,想要成功找到一份工作需要掌握哪些java技 ...

  6. java程序员技术规划_Java程序员职业生涯规划

    Java程序员职业生涯规划 发布时间:2018-09-28 14:10, 浏览次数:429 , 标签: Java <>一.规划 工作3年了,感觉自己的技术现在到了一个瓶颈,在做一些重复性的 ...

  7. 学习java 程序员技术练级攻略 作者:酷壳

    好文章要转载:http://blog.csdn.net/androidmylove/article/details/8990828 文章结束给大家来个程序员笑话:[M] 月光博客6月12日宣布了< ...

  8. Java程序员的薪资取决于工作年限还是技术?

    Java程序员的薪资取决于年限还是技术? 其实作为Java程序员技术是相当重要的,和年限没有必然的关系,如果自己技术不行再多的年限也没有意义而且很容易被淘汰,所以掌握更多的Java技能再加上年限便是锦 ...

  9. [置顶] Java程序员们读什么书决定了对未来职业方向的选择

    学习Java最痛苦的事情莫过于对未来职业方向的选择.尤其是选择开发Java Application还是Java Web方向,在你先定好大类后还有数不尽的小类教你无从学起. 因此,作为初学者的你必须看完 ...

最新文章

  1. LabVIEW条形码识别(实战篇—5)
  2. GitHub重大好消息:私有仓库可无限制免费创建
  3. 3.1.3 awk命令用法
  4. Laravel框架学习 -- php artisan down/up
  5. R语言报错:Error in scan(file = file, what = what, sep = sep, quote = quote, dec = dec, : n行没有x元素
  6. 测试asp.net for Linux的环境搭建
  7. Bootstrap的role
  8. 关于android 图像格式问题
  9. Spring Boot引用本地jar包
  10. vue项目结构(未抽离成.vue文件前的结构)
  11. 为什么要重写hashCode()方法和equals()方法以及如何进行重写
  12. Linux RHEL6 x64 命令行静默安装 Oracle 12c - 2
  13. Redis 主从复制的几种方法
  14. 手把手gitlab最详细版安装教程centos7下安装(最新版),修复gitlab
  15. linq拼接where语句_C# 10. LINQ 的三种查询语句写法
  16. 十分钟走进大数据世界
  17. STM8S103之AD采样
  18. 单片机C语言步进电机实训报告,单片机实验报告步进电机.doc
  19. 高仙与吾尚联合打造“人+机+纳米材料”石材养护新模式 首批60落地上海环球港
  20. 用u盘安装win7系统教程

热门文章

  1. s5.CentOS、Ubuntu、Rocky Linux系统初始化脚本
  2. CVPR_2021_Fast-GANFIT: Generative Adversarial Networkfor High Fidelity 3D Face Reconstruction
  3. 虚幻引擎图文笔记:蓝图中二项切换节点(Flip Flop)的用法
  4. 解决ADB搜不到设备的问题
  5. 科普爱好者不可错过的11本科技简史
  6. 基本运维及协同开发 :Linux基本使用
  7. IC学习笔记——DRV8804
  8. 全宇宙第一编辑器VS Code搭配Markdown打造云端笔记(二:MD语法速成)
  9. 解析八核Cortex-A55+ 24路1080解码能力的AI模组
  10. JavaWeb-学生宿舍管理系统