15K水平的Java程序员技术栈
目录
技术栈
学习目的
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程序员技术栈相关推荐
- JAVA程序员技术栈、业务栈、工具栈
JAVA程序员技术栈.业务栈.工具栈 目录: 1.技术栈 2.业务栈 3.工具栈 今天是实习期以来将近100天了,感谢公司给予的期望与同事们提供的帮助.好久没更新博客了,一是懒于写,二是文章写得不够深 ...
- 高级Java程序员技术栈
转自[菜鸟教程] 直接上脑图.
- 那些想不断提高自己技术水平的Java程序员们
对程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从.我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水平的Jav ...
- Java后端程序员技术栈
Java后端程序员技术栈 它可以是知识提纲,便于快速复习与查阅 它也可以是你的学习规划,帮助小白快速了解学Java要走的路(当然你也可以选择搭配我的学习路线一起享用!) 相关链接: <gitee ...
- java程序员技术_JAVA程序员需要懂得哪些技术
原标题:JAVA程序员需要懂得哪些技术 学习java,掌握java技术,成功找到一份满意的工作,这才是一个完美的学习过程和结果.那对于初学java的同学来说,想要成功找到一份工作需要掌握哪些java技 ...
- java程序员技术规划_Java程序员职业生涯规划
Java程序员职业生涯规划 发布时间:2018-09-28 14:10, 浏览次数:429 , 标签: Java <>一.规划 工作3年了,感觉自己的技术现在到了一个瓶颈,在做一些重复性的 ...
- 学习java 程序员技术练级攻略 作者:酷壳
好文章要转载:http://blog.csdn.net/androidmylove/article/details/8990828 文章结束给大家来个程序员笑话:[M] 月光博客6月12日宣布了< ...
- Java程序员的薪资取决于工作年限还是技术?
Java程序员的薪资取决于年限还是技术? 其实作为Java程序员技术是相当重要的,和年限没有必然的关系,如果自己技术不行再多的年限也没有意义而且很容易被淘汰,所以掌握更多的Java技能再加上年限便是锦 ...
- [置顶] Java程序员们读什么书决定了对未来职业方向的选择
学习Java最痛苦的事情莫过于对未来职业方向的选择.尤其是选择开发Java Application还是Java Web方向,在你先定好大类后还有数不尽的小类教你无从学起. 因此,作为初学者的你必须看完 ...
最新文章
- LabVIEW条形码识别(实战篇—5)
- GitHub重大好消息:私有仓库可无限制免费创建
- 3.1.3 awk命令用法
- Laravel框架学习 -- php artisan down/up
- R语言报错:Error in scan(file = file, what = what, sep = sep, quote = quote, dec = dec, : n行没有x元素
- 测试asp.net for Linux的环境搭建
- Bootstrap的role
- 关于android 图像格式问题
- Spring Boot引用本地jar包
- vue项目结构(未抽离成.vue文件前的结构)
- 为什么要重写hashCode()方法和equals()方法以及如何进行重写
- Linux RHEL6 x64 命令行静默安装 Oracle 12c - 2
- Redis 主从复制的几种方法
- 手把手gitlab最详细版安装教程centos7下安装(最新版),修复gitlab
- linq拼接where语句_C# 10. LINQ 的三种查询语句写法
- 十分钟走进大数据世界
- STM8S103之AD采样
- 单片机C语言步进电机实训报告,单片机实验报告步进电机.doc
- 高仙与吾尚联合打造“人+机+纳米材料”石材养护新模式 首批60落地上海环球港
- 用u盘安装win7系统教程
热门文章
- s5.CentOS、Ubuntu、Rocky Linux系统初始化脚本
- CVPR_2021_Fast-GANFIT: Generative Adversarial Networkfor High Fidelity 3D Face Reconstruction
- 虚幻引擎图文笔记:蓝图中二项切换节点(Flip Flop)的用法
- 解决ADB搜不到设备的问题
- 科普爱好者不可错过的11本科技简史
- 基本运维及协同开发 :Linux基本使用
- IC学习笔记——DRV8804
- 全宇宙第一编辑器VS Code搭配Markdown打造云端笔记(二:MD语法速成)
- 解析八核Cortex-A55+ 24路1080解码能力的AI模组
- JavaWeb-学生宿舍管理系统