【Java】Java 程序员最常用技术栈和工具集合(建议收藏)
2021Java 程序员最常用技术栈和工具集合(建议收藏)
老炮说Java发布于 今天 09:16
欢迎微信搜索公众号【java版web项目】获取资源:java学习视频/设计模式笔记/算法手册/java项目
作为一枚Java程序员,需要掌握哪些技术和工具才能完成一个JavaWeb项目呢?今天罗列一些常用技术和工具,这些技术都是我这10年工作中用的比较多的,我知道技术栈远不止这些,本人只列自己熟悉和用的最多的,完成一个项目绝对够用了。说这么多技术不是让大家都要熟悉,有些太老的现在也用的少了甚至不用了,本人主要结合我这10年开发经验告诉大家JavaWeb的常用技术栈。
下面这张是技术栈思维导图:
技术栈
什么是技术栈?
举个例子:
开发一个普通管理系统,会用到Sprin Boot+MyBatis+Spring+Mysql+Redis+RabbitMq+Nginx+Vue+Shiro+html+等等,这些技术合起来就可以称为技术栈。
我将技术栈大致分为5大块:前端、后端、中间件、数据库和工具。
前端
JSP
JSP全称Java Server Pages,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。
JSP本质上是一个servlet,主要用于实现Java web应用程序的用户界面部分。
<html><head>
<title>第一个 JSP 程序</title>
</head>
<body>
<%
out.println("Hello World!");
%>
</body>
</html>
JSP这种网页技术我猜5年以下的程序员基本没接触过,10年前我接触的项目前端基本都是采用的JSP技术,jsp配合各种html+jquery/JavaScript+css完成前端页面开发。
前端框架
DWZ、EasyUI、EXT、BootStrap、KendoUI 都是基于基于 HTML、CSS、JavaScript/jquery的一些富文本客户端UI框架,在当时简直是后端开发人员的福音。这些框架最大的特点就是官网上提供了各种组件的使用方法,后端人员只要套到JSP页面中,进行数据渲染即可。这些UI框架风格基本已经固定,更适合开发一些管理类系统,都包括:强大的数据源,通用的拖拉(Drag-and-Drop)功能,模板,和UI控件。
DWZ
是中国人自己开发的基于jQuery实现的Ajax RIA开源框架,设计目标是简单实用,快速开发,降低ajax开发成本。
官网:https://jui.org/
EasyUI
easyui是一种基于jQuery的用户界面插件集合,为创建现代化,互动,JavaScript应用程序,提供必要的功能。使用easyui你不需要写很多代码,你只需要通过编写一些简单HTML标记,就可以定义用户界面,为网页开发的时间和规模。
官网;http://www.jeasyui.com/
EXT
ExtJS是基于YUI(雅虎用户界面)的sencha的JavaScript框架和产品,它基本上是具有现代UI的桌面应用程序开发平台。
中文官网:http://extjs-doc-cn.github.io...
BootStrap
bootstrap是Twitter推出的一个用于前端开发的开源工具包
中文官网:https://www.bootcss.com/
KendoUI
是一套 JavaScript 函式库,提供抽象化、可自订主题的 GUI 控制项与动画效果。基于 jQuery JavaScript 函式库,可用来建构互动式的 Web 应用
官网:http://www.kendoui.io/
FreeMarker
FreeMarker是一个免费的模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写的,用来生成HTML Web页面,特别是基于MVC模式的应用程序。通常由Java程序准备要显示的数据,由FreeMarker生成页面,通过模板显示准备的数据(如下图)
FreeMarker不是一个Web应用框架,FreeMarker与容器无关,也可以在模板中使用JSP标记库。
<html><head>
<title>Welcome!</title>
</head>
<body>
<h1>Welcome ${user}!</h1>
<p>Our latest product:
<a href="https://segmentfault.com/a/1190000039154840/${latestProduct.url}">${latestProduct.name}</a>!
</body>
</html>
html
上面很多前端框架都是基于html的,需要你有js/jq、css基础,这是所有前端框架的基础。因为光框架有时并不能满足我们的需求,有时需要对框架无法实现的功能需要在框架基础上调整;还有这个飞速发展的互联网时代,对前端的要求越来越高,原生html得到了快速发展,基本所有前端效果使用原生时可以实现的。
VUE
vue.js 使用了基于 HTML 的模板语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据。所有 Vue.js 的模板都是合法的 HTML,所以能被遵循规范的浏览器和 HTML 解析器解析。
在底层的实现上,Vue 将模板编译成虚拟 DOM 渲染函数。结合响应系统,Vue 能够智能地计算出最少需要重新渲染多少组件,并把 DOM 操作次数减到最少。
VUE+elementUI目前使用最多的,尤其是开发一些后台管理系统还是比较简单便捷的。
后端
servlet
servlet是Server Applet的简称,翻译过来就是服务程序,简单的讲就是是运行在服务器上的一个小程序,用来处理服务器请求的。我们通过浏览器访问一个应用,在这个过程中,我们的浏览器发送访问请求,服务器接收请求,并对浏览器的请求作出相应的处理,这就是我们熟悉的B/S模型(浏览器-服务器模型).而servlet就是对请求作出处理的组件,运行于支持Java的应用服务器中。如图如是:
struts
struts主要是指struts1和struts2,是经典的MVC框架,除去一些老项目,现在用的越来越少了。但struts1和struts2还是有区别的,主要区别二者本质不一样。
struts1:通过采用Java Servlet/JSP技术,实现了基于Java EE Web应用的Model-View-Controller(MVC)设计模式的应用框架,是MVC经典设计模式中的一个经典产品。
struts2:以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。
最经典的组合strutsMVC+SPring+Hibernate,号称SSH,当年都是面试必问的技术。
Spring
Spring框架是一个开源Java应用框架,解决了开发者在开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及Web MVC等功能。Spring可以单独应用于应用程序,也可以和Struts、Webwork等众多Web框架组合使用。Spring框架主要由七部分组成,分别是 Spring Core、 Spring AOP、 Spring ORM、 Spring DAO、Spring Context、 Spring Web和 Spring Web MVC。
持久层框架
jdbc
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。
早期项目大部分都是通过对JDBC封装来操作数据库,实现增删改查,对性能考虑也不多,随时间推移不断衍生出很多框架,例如:mybatis,hibernate等。
ibatis
iBATIS一词来源于“internet”和“abatis”的组合,是一个由Clinton Begin在2001年发起的开放源代码项目。最初侧重于密码软件的开发,现在是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO),同时还提供一个利用这个框架开发的JPetStore实例。
iBATIS 目前提供了三种语言实现的版本,包括:Java、.NET以及Ruby。
mybatis
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。
MyBatis 是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
MyBatis-Plus
Mybatis 增强工具包 - 只做增强不做改变,简化CRUD操作
JPA
JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。
Sun引入新的JPA ORM规范出于两个原因:其一,简化现有Java EE和Java SE应用开发工作;其二,Sun希望整合ORM技术,实现天下归一。
Spring Boot
SpringBoot是由Pivotal团队在2013年开始研发、2014年4月发布第一个版本的全新开源的轻量级框架。它基于Spring4.0设计,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程。另外SpringBoot通过集成大量的框架使得依赖包的版本冲突,以及引用的不稳定性等问题得到了很好的解决。
分布式/微服务
Spring Cloud
Spring Cloud 为开发者提供了在分布式系统(如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性 Token、全局锁、决策竞选、分布式会话和集群状态)操作的开发工具。使用 Spring Cloud 开发者可以快速实现上述这些模式。
Spring Cloud 的 GitHub 主页:https://github.com/spring-cloud
dubbo
Dubbo 是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring 框架无缝集成。
主要核心部件:
Remoting: 网络通信框架,实现了 sync-over-async 和 request-response 消息机制
RPC: 一个远程过程调用的抽象,支持负载均衡、容灾和集群功能
Registry: 服务目录框架用于服务的注册和服务事件发布和订阅
Spring Cloud Alibaba
Spring Cloud Alibaba 致力于提供分布式应用服务开发的一站式解决方案。此项目包含开发分布式应用服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。
依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里分布式应用解决方案,通过阿里中间件来迅速搭建分布式应用系统。
安全框架
shiro
Apache Shiro 是 Java 的一个安全框架。目前,使用 Apache Shiro 的人越来越多,因为它相当简单,对比 Spring Security,可能没有 Spring Security 做的功能强大,但是在实际工作时可能并不需要那么复杂的东西,所以使用小而简单的 Shiro 就足够了。对于它俩到底哪个好,这个不必纠结,能更简单的解决项目问题就好了。
Spring Security
Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。
oauth2.0
OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。
OAuth 2.0 是目前比较流行的做法,它率先被Google, Yahoo, Microsoft, Facebook等使用。之所以标注为 2.0,是因为最初有一个1.0协议,但这个1.0协议被弄得太复杂,易用性差,所以没有得到普及。2.0是一个新的设计,协议简单清晰,但它并不兼容1.0,可以说与1.0没什么关系。
项目管理
maven
Maven 是 Apache 下的一个纯 Java 开发的开源项目。利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。
ant
ant 是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发。在实际软件开发中,有很多地方可以用到ant。
gradle
Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,目前也增加了基于Kotlin语言的kotlin-based DSL,抛弃了基于XML的各种繁琐配置。
服务器软件
tomcat
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选
Apache
Apache(阿帕奇)是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一
Jetty
Jetty 是一个开源的servlet容器,它为基于Java的web容器,例如JSP和servlet提供运行环境。
weblogic
WebLogic Server是专门为企业电子商务应用系统开发的。企业电子商务应用系统需要快速开发,并要求服务器端组件具有良好的灵活性和安全性,同时还要支持关键任务所必需的扩展、性能、和高可用性。WebLogic Server简化了可移植及可扩展的应用系统的开发,并为其它应用 系统和系统提供了丰富的互操作性。
nginx
Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强。
中间件
缓存
缓存是现在系统中必不可少的模块,并且已经成为了高并发高性能架构的一个关键组件。缓存的主要作用:提升性能和缓解数据库压力,
Redis
Redis是一个开源的内存数据结构存储,用作数据库、缓存和消息代理。提供诸如字符串、哈希、列表、集合、带范围查询的排序集合、位图、超日志、地理空间索引和流等数据结构。具有内置的复制、Lua脚本、LRU逐出、事务和不同级别的磁盘持久性,并通过Redis Sentinel和Redis Cluster的自动分区提供高可用性。
MongoDB
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
Memcached
Memcached是一个自由开源的,高性能,分布式内存对象缓存系统,用来提高Web应用扩展性的重要因素。是一个基于内存的key-value存储,用来存储小块的任意数据(字符串、对象)。简洁而强大,它的简洁设计便于快速开发,减轻开发难度,解决了大数据量缓存的很多问题。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。
差异性我就不多说了,简单说下他们的使用场景:
- Memcached:动态系统中减轻数据库负载,提升性能;做缓存,适合多读少写,大数据量的情况(如人人网大量查询用户信息、好友信息、文章信息等)。
- Redis:适用于对读写效率要求都很高,数据处理业务复杂和对安全性要求较高的系统(如新浪微博的计数和微博发布部分系统,对数据安全性、读写要求都很高)。
- MongoDB:主要解决海量数据的访问效率问题。
搜索
solr
Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。
Elasticsearch
Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口
二者主要区别
es基本是开箱即用,非常简单,Solr略微复杂。
Solr 支持更多格式的数据,比如JSON、XML、CSV,而 Elasticsearch 仅支持json文件格式。
Solr 查询快,但更新索引时慢(即插入删除慢),ES建立索引快(即查询慢),即实时性查询快。
ELK
之所以推荐ELK是因为面对分布式微服务情况下,会显示出他的威力,不管是数据收集、数据处理、还是数据分析可以节约很多时间。ELK是Elasticsearch + Logstash + Kibana三个开源软件的组合,但是通常为了提高性能需要借助kafka,利用Filebeat进行日志收集,下面这个架构图是我做过的一个日志服务平台。
定时任务
说定定时任务大家可能都接触过,例如Spring自带的定时任务SpringTask,但是SpringTask是存在很多问题的,例如:最致命的一个问题就是一旦定时抛出异常,生命就结束,下一次不会再执行。复杂业务中使用起来是不方便的,这里推荐两个定时任务框架Quartz和xx-job,第三方的功能比较强大,好用。
Quartz
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,完全由Java开发,可以用来执行定时任务,类似于java.util.Timer。但是相较于Timer, Quartz增加了很多功能:
- 持久性作业 - 就是保持调度定时的状态;
- 作业管理 - 对调度作业进行有效的管理;
xx-job
XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。
目前已有多家公司接入xxl-job,包括比较知名的大众点评,京东,优信二手车,北京尚德,360金融 (360),联想集团 (联想),易信 (网易)等等....
Quartz作为开源作业调度中的佼佼者,是作业调度的首选
Quartz在集群环境下只能通过API的方式对任务管理,同时,系统侵入性相当严重,而XX-JOB可以完美解决集群下任务额管理。所以,可以根据自己业务情况选择合适定时任务框架,
配置中心
什么是配置中心?
集中将应用系统中对配置信息的管理作为一个新的应用功能模块,区别与传统的配置信息分散到系统各个角落方式,进行集中统一管理,并且提供额外功能。尤其是在微服务架构中,是不可或缺组件,甚至是必要组件之一。
为什么要使用配置中心?
在微服务体系中,服务的数量以及配置信息的日益增多,比如各种服务器参数配置、各种数据库访问参数配置、各种环境下应用配置信息的不同、配置信息修改之后实时生效等等,传统的配置文件方式或者将配置信息存放于数据库中的方式已无法满足开发人员对配置管理的要求。常见的配置中心中间件有:SpringCloud Config ,Nacos,apollo等。
SpringCloud Config
2014年9月开源,Spring Cloud 生态组件,可以和Spring Cloud体系无缝整合,Spring Cloud Config支持通过/bus/refresh端点的destination参数来指定要更新配置的机器,不过整个流程不够自动化和体系化。相对于Apollo和Nacos还是比较弱的。
Nacos
2018年6月,阿里开源的配置中心,也可以做DNS和RPC的服务发现。Nacos使用起来相对比较简洁,在对性能要求比较高的大规模场景更适合。此外,Nacos除了提供配置中心的功能,还提供了动态服务发现、服务共享与管理的功能,降低了服务化改造过程中的难度。
apollo(阿波罗)
2016年5月,携程开源的配置管理中心,具备规范的权限、流程治理等特性,Apollo可以直接在控制台上点灰度发布指定发布机器的IP,接着再全量发布,做得比较体系化。
三者对比如何选择:
核心功能: Apollo和Nacos相对于Spring Cloud Config的生态支持更广
实时推送: Nacos和Apollo在配置实时推送链路上是比较简单高效的,Spring Cloud Config比较复杂。
高可用部署: Nacos的部署结构比较简单,运维成本较低。Apollo部署组件较多,运维成本比Nacos高。Spring Cloud Config生产高可用的成本最高。
监控
服务器监控是实时掌握服务器工作状态,并在需要时可以随时调用监控记录进行查看。
SpringBootAdmin
Spring Boot Admin用来管理和监控Spring Boot应用程序,通过UI来查看应用程序的状态,例如Spring Beans,系统属性,线程,http的调用情况等有限状态。
Druid
我知道Druid更多的用途就是连接池,其实他还有一个对SQL监控功能。
SkyWalking
Skywalking是由国内开源爱好者吴晟(原OneAPM工程师,目前在华为)开源并提交到Apache孵化器的产品,它同时吸收了Zipkin/Pinpoint/CAT的设计思路,支持非侵入式埋点。是一款基于分布式跟踪的应用程序性能监控系统。另外社区还发展出了一个叫OpenTracing的组织,旨在推进调用链监控的一些规范和标准工作。
存储
把涉及到数据库相关或者可以作为数据仓库的中间件都归到一起了。
MyCat
Mycat是一个开源数据库中间件,是一个实现了MySQL协议的的数据库中间件服务器,我们可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问Mycat,而Mycat再使用用MySQL原生(Native)协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,包括SQL Server、Oracle、DB2、PostgreSQL等主流数据库,也支持MongoDB这种新型NoSQL方式的存储,未来还会支持更多类型的存储;一般地,Mycat主要用于代理MySQL数据库,虽然它也支持去访问其他类型的数据库;
Mycat官网:http://www.mycat.io/
Canal
我们先看官网的介绍
这句介绍有几个关键字:增量日志,增量数据订阅和消费。
这里我们可以简单地把canal理解为一个用来同步增量数据的一个工具。
接下来我们看一张官网提供的示意图:
sharing-jdbc
定位为轻量级Java框架,在Java的JDBC层提供的额外服务。 它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架。
主要功能
- 分库 & 分表
- 读写分离
- 分布式主键
zookeeper
ZooKeeper是Hadoop的正式子项目,它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
事务
这个事务更多指的是分布式事务处理插件。
Apache ShardingSphere
Apache ShardingSphere(Incubator) 是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(规划中)这3款相互独立,却又能够混合部署配合使用的产品组成。它们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如Java同构、异构语言、容器、云原生等各种多样化的应用场景。
Seata
Seata 是 Simple Extensible Autonomous Transaction Architecture 的简写,由 feascar 改名而来。是阿里开源的分布式事务框架,属于二阶段提交模式。
消息队列
什么是消息队列
消息队列是一个存放消息的容器,当我们需要使用消息的时候可以取出消息供自己使用。消息队列是分布式系统中重要的组件,使用消息队列主要是为了通过异步处理提高系统性能和削峰、降低系统耦合性。目前使用较多的消息队列有ActiveMQ,RabbitMQ,Kafka,RocketMQ。
为什么需要消息队列
1.通过异步处理提高系统性能(削峰、减少响应所需时间);
2.降低系统耦合性;
Kafka
Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 对于像Hadoop一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息。
RabbitMQ
AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。
AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。
RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。
ActiveMQ
ActiveMQ是一种开源的基于JMS(Java Message Servie)规范的一种消息中间件的实现,ActiveMQ的设计目标是提供标准的,面向消息的,能够跨越多语言和多系统的应用集成消息通信中间件。
三者区别及其使用场景
特性 | ActiveMQ | RabbitMQ | kafka |
---|---|---|---|
开发语言 | java | erlang | scala |
单机吞吐量 | 万级 | 万级 | 10万级 |
时效性 | ms级 | us级 | ms级以内 |
可用性 | 高(主从架构) | 高(主从架构) | 非常高(分布式架构) |
功能特性 | 成熟的产品,在很多公司得到应用;有较多的文档;各种协议支持较好 | 基于erlang开发,所以并发能力很强,性能极其好,延时很低;管理界面较丰富 | 只支持主要的MQ功能,像一些消息查询,消息回溯等功能没有提供,毕竟是为大数据准备的,在大数据领域应用广。 |
数据库
该数据库主要是指关系型数据库,是按照数据结构来组织、存储和管理数据的仓库,数据库是存放数据的仓库,是一个系统或者软件必不可少的一部分。每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据。我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。
所以,现在我们使用关系型数据库管理系统来存储和管理大数据量。所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。
关系数据库管理系统的特点:
- 1.数据以表格的形式出现
- 2.每行为各种记录名称
- 3.每列为记录名称所对应的数据域
- 4.许多的行和列组成一张表单
- 5.若干的表单组成database
常见的数据管理系统主要有:oracle、mysql、SQL Server、access、TiDB。
oracle
Oracle Database,简称 Oracle。Oracle 数据库系统是美国 Oracle 公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(client/server)的数据库之一。Oracle 数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系型数据库,它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能,但它的所有知识,只要在一种机型上学习了Oracle知识,便能在各种类型的机器上使用它。
mysql
MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。目前也是Oracle 公司来托管。
SQL Server
美国Microsoft公司推出的一种关系型数据库系统。SQL Server是一个可扩展的、高性能的、为分布式客户机/服务器计算所设计的数据库管理系统,实现了与WindowsNT的有机结合,提供了基于事务的企业级信息管理系统方案。
access
Access是微软把数据库引擎的图形用户界面和软件开发工具结合在一起的一个数据库管理系统。它是微软OFFICE的一个成员, 在包括专业版和更高版本的office版本里面被单独出售。
TiDB
TiDB 是 PingCAP 公司自主设计、研发的开源分布式关系型数据库,是一款同时支持在线事务处理与在线分析处理 (Hybrid Transactional and Analytical Processing, HTAP)的融合型分布式数据库产品,具备水平扩容或者缩容、金融级高可用、实时 HTAP、云原生的分布式数据库、兼容 MySQL 5.7 协议和 MySQL 生态等重要特性。目标是为用户提供一站式 OLTP (Online Transactional Processing)、OLAP (Online Analytical Processing)、HTAP 解决方案。TiDB 适合高可用、强一致要求较高、数据规模较大等各种应用场景。
上面这几个数据库优缺点都比较明显,不在啰嗦了,大家在工作中可以根据自己实际情况选择合适的数据。
工具
开发
IntelliJ IDEA
IntelliJ在业界被公认为最好的java开发工具,尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能可以说是超常的。IDEA是JetBrains公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。它的旗舰版本还支持HTML,CSS,PHP,MySQL,Python等。免费版只支持Java,Kotlin等少数语言。
eclipse
Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台, 是 Java 的集成开发环境(IDE),当然 Eclipse 也可以作为其他开发语言的集成开发环境,如C,C++,PHP,和 Ruby 等。
MyEclipse
MyEclipse,是在Eclipse 基础上加上自己的插件开发而成的功能强大的企业级集成开发环境,主要用于Java、Java EE以及移动应用的开发。在最新版本的MyEclipse中,配合CodeMix使用支持也十分广泛,尤其是对各种开源产品和主流开发框架的支持相当不错。目前已支持PHP、Python、Vue、Angular、React、Java、Java EE等语言和框架开发。
这三款工具好坏我也不做任何评价,每个工具用户都不少,我周围IntelliJ IDEA和MyEclipse都有,我个人比较喜欢用IntelliJ IDEA。
客户端工具
版本控制
常见的版本空间工具svn和git
svn
TortoiseSVN 是 Subversion 版本控制系统的一个免费开源客户端,可以超越时间的管理文件和目录。文件保存在中央版本库,除了能记住文件和目录的每次修改以外,版本库非常像普通的文件服务器。你可以将文件恢复到过去的版本,并且可以通过检查历史知道数据做了哪些修改,谁做的修改。这就是为什么许多人将 Subversion 和版本控制系统看作一种“时间机器”。
git
Git 是用于Linux内核开发的版本控制工具。与常用的版本控制工具 Subversion 不同,它采用了分布式版本库的方式,不必服务器端软件支持,代码的发布和交流极其方便。 Git 的速度很快,这样的大项目来说自然很重要。 Git 最为出色的是它的合并跟踪(merge tracing)能力。
SVN的特点是简单,只是需要一个放代码的地方时用是OK的。
Git的特点版本控制可以不依赖网络做任何事情,对分支和合并有更好的支持(这应该算是开发者最关心的地方)。
数据库
Navicat
Navicat是一套快速、可靠并价格相当便宜的数据库管理工具,专为简化数据库的管理及降低系统管理成本而设。它的设计符合数据库管理员、开发人员及中小企业的需要。Navicat 是以直觉化的图形用户界面而建的,让你可以以安全并且简单的方式创建、组织、访问并共用信息。
PLSQL
PL/SQL Developer是一个集成开发环境,专门开发面向Oracle数据库的应用。PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL)。PL/SQL是Oracle数据库对SQL语句的扩展。在普通SQL语句的使用上增加了编程语言的特点,所以PL/SQL把数据操作和查询语句组织在PL/SQL代码的过程性单元中,通过逻辑判断、循环等操作实现复杂的功能或者计算,PL/SQL 只有 Oracle 数据库有。
Redis Desktop Manager
Redis Desktop Manager是一款windows平台下的可视化redis数据库桌面管理工具,使用它你可以查看、删除、修改你的redis数据库数据!
linux远程
XShell
XShell是一个强大的安全终端模拟软件,它支持SSH1,SSH2,以及Microsoft Windows平台的TELNET协议。
XShell可以在Windows界面下用来访问远端不同系统下的服务器,从而比较好的达到远程控制终端的目的。
WinSCP
宝塔
宝塔面板是一个可以安装在服务器上的集成环境,并配套了web管理面板,可以在浏览器上直接控制你的服务器,非常方便。 可以一键创建网站、FTP、数据库、SSL;安全管理,计划任务,文件管理,PHP多版本共存及切换;自带基础网站环境,支持windows系统(apache)和linux系统(apache或nginx)。
SecureCRT
Secure CRT 是一款SSH客户端软件,通过使用内含的VCP命令行程序可以进行加密文件的传输。
postMan
Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。
辅助
Typora+PicGo
Typora+PicGo,最好用的Markdown+最好用的图床工具!如果写博客的可以收藏起来。
notepad++
Notepad++中文版是程序员必备的文本编辑器,Notepad++中文版小巧高效,支持27种编程语言,通吃C,C++ ,Java ,C#, XML, HTML, PHP,JS 等,Notepad++中文版编辑器可完美地取代微软的记事本。
画图
visio
Office Visio 是Office软件系列中的负责绘制流程图和示意图的软件,是一款便于IT和商务人员就复杂信息、系统和流程进行可视化处理、分析和交流的软件。使用具有专业外观的 Office Visio 图表,可以促进对系统和流程的了解,深入了解复杂信息并利用这些知识做出更好的业务决策。常见软件架构、流程图都可以在里面完成。
processon
ProcessOn是一个在线作图工具的聚合平台, 它可以在线画流程图、思维导图、UI原型图、UML、网络拓扑图、组织结构图等等, 您无需担心下载和更新的问题,不管Mac还是Windows,一个浏览器就可以随时随地的发挥创意,规划工作。
官网:https://www.processon.com/
PowerDesigner
owerDesigner是一款非常全面的数据库设计工具。使用PowerDesigner可以快速创建表,支持表与表之间建立关系,界面简洁,功能强大。同时支持将sql脚本导出,多种导出类型任意挑选,简单实用。
Xmind
XMind 是一个全功能的思维导图和头脑风暴软件,为激发灵感和创意而生。作为一款有效提升工作和生活效率的生产力工具,受到全球百千万用户的青睐。
iReport
说到 iReport 不得不先介绍 Jasperreport,Jasperreport 是一个报表制作程序,用户需要按照它制定的规则编写一个 XML 文件,然后得到用户需要输出的格式文件。它支持输出的文件格式包括 PDF,HTML,XML,XLS,CVS 等等。而 iReport 就是一个制作 Jasperreport 的 XML 文件的可视化开发工具。
浏览器
Chrome
Google Chrome是一款由Google公司开发的网页浏览器,该浏览器基于其他开源软件撰写,包括WebKit,目标是提升稳定性、速度和安全性,并创造出简单且有效率的使用者界面。
搜狗
搜狗浏览器 由搜狗公司开发,基于谷歌chromium内核,力求为用户提供跨终端无缝使用体验,让上网更简单、网页阅读更流畅的浏览器。
火狐
Mozilla Firefox,中文俗称“火狐”,是一个由Mozilla开发的自由及开放源代码的网页浏览器。其使用Gecko排版引擎,支持多种操作系统,如Windows、macOS及GNU/Linux等
IE
Internet Explorer(简称:IE)是微软公司微软公司推出的一款网页浏览器。原称Microsoft Internet Explorer(6版本以前)和Windows Internet Explorer(7、8、9、10、11版本)。在IE7以前,中文直译为“网络探路者”,但在IE7以后官方便直接俗称"IE浏览器"。
如果做前端开发,这几款浏览器兼容性都得兼顾。很早之前IE浏览器市场是比较大,随着时间推移,谷歌浏览器占据了比较大的市场。我个人日常开发中谷歌用的比较多,特殊情况才会使用其它浏览器。
性能分析
jmeter
JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 服务程序、CGI 脚本、Java 对象、数据库, 等等。
ab
apache bench简称ab,它是apache自带的压力测试工具。ab非常实用,它不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试。
MAT
MAT是Java堆内存分析工具,可从http://www.eclipse.org/mat/中...。
你在成为大神的路上都学习了哪些技术,欢迎留言交流。
近期热文推荐:
SpringCloud微服务电商项目教程
java程序员工具软件技术栈
阅读 58更新于 今天 09:23
本作品系原创,采用《署名-非商业性使用-禁止演绎 4.0 国际》许可协议
老炮说Java
完整电商项目,包含视频教程,详细文档:https://www.laopaojava.com/posts/38510.html
10 声望
1 粉丝
老炮说Java
完整电商项目,包含视频教程,详细文档:https://www.laopaojava.com/posts/38510.html
10 声望
1 粉丝
宣传栏
目录
欢迎微信搜索公众号【java版web项目】获取资源:java学习视频/设计模式笔记/算法手册/java项目
作为一枚Java程序员,需要掌握哪些技术和工具才能完成一个JavaWeb项目呢?今天罗列一些常用技术和工具,这些技术都是我这10年工作中用的比较多的,我知道技术栈远不止这些,本人只列自己熟悉和用的最多的,完成一个项目绝对够用了。说这么多技术不是让大家都要熟悉,有些太老的现在也用的少了甚至不用了,本人主要结合我这10年开发经验告诉大家JavaWeb的常用技术栈。
下面这张是技术栈思维导图:
技术栈
什么是技术栈?
举个例子:
开发一个普通管理系统,会用到Sprin Boot+MyBatis+Spring+Mysql+Redis+RabbitMq+Nginx+Vue+Shiro+html+等等,这些技术合起来就可以称为技术栈。
我将技术栈大致分为5大块:前端、后端、中间件、数据库和工具。
前端
JSP
JSP全称Java Server Pages,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。
JSP本质上是一个servlet,主要用于实现Java web应用程序的用户界面部分。
<html><head>
<title>第一个 JSP 程序</title>
</head>
<body>
<%
out.println("Hello World!");
%>
</body>
</html>
JSP这种网页技术我猜5年以下的程序员基本没接触过,10年前我接触的项目前端基本都是采用的JSP技术,jsp配合各种html+jquery/JavaScript+css完成前端页面开发。
前端框架
DWZ、EasyUI、EXT、BootStrap、KendoUI 都是基于基于 HTML、CSS、JavaScript/jquery的一些富文本客户端UI框架,在当时简直是后端开发人员的福音。这些框架最大的特点就是官网上提供了各种组件的使用方法,后端人员只要套到JSP页面中,进行数据渲染即可。这些UI框架风格基本已经固定,更适合开发一些管理类系统,都包括:强大的数据源,通用的拖拉(Drag-and-Drop)功能,模板,和UI控件。
DWZ
是中国人自己开发的基于jQuery实现的Ajax RIA开源框架,设计目标是简单实用,快速开发,降低ajax开发成本。
官网:https://jui.org/
EasyUI
easyui是一种基于jQuery的用户界面插件集合,为创建现代化,互动,JavaScript应用程序,提供必要的功能。使用easyui你不需要写很多代码,你只需要通过编写一些简单HTML标记,就可以定义用户界面,为网页开发的时间和规模。
官网;http://www.jeasyui.com/
EXT
ExtJS是基于YUI(雅虎用户界面)的sencha的JavaScript框架和产品,它基本上是具有现代UI的桌面应用程序开发平台。
中文官网:http://extjs-doc-cn.github.io...
BootStrap
bootstrap是Twitter推出的一个用于前端开发的开源工具包
中文官网:https://www.bootcss.com/
KendoUI
是一套 JavaScript 函式库,提供抽象化、可自订主题的 GUI 控制项与动画效果。基于 jQuery JavaScript 函式库,可用来建构互动式的 Web 应用
官网:http://www.kendoui.io/
FreeMarker
FreeMarker是一个免费的模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写的,用来生成HTML Web页面,特别是基于MVC模式的应用程序。通常由Java程序准备要显示的数据,由FreeMarker生成页面,通过模板显示准备的数据(如下图)
FreeMarker不是一个Web应用框架,FreeMarker与容器无关,也可以在模板中使用JSP标记库。
<html><head>
<title>Welcome!</title>
</head>
<body>
<h1>Welcome ${user}!</h1>
<p>Our latest product:
<a href="https://segmentfault.com/a/1190000039154840/${latestProduct.url}">${latestProduct.name}</a>!
</body>
</html>
html
上面很多前端框架都是基于html的,需要你有js/jq、css基础,这是所有前端框架的基础。因为光框架有时并不能满足我们的需求,有时需要对框架无法实现的功能需要在框架基础上调整;还有这个飞速发展的互联网时代,对前端的要求越来越高,原生html得到了快速发展,基本所有前端效果使用原生时可以实现的。
VUE
vue.js 使用了基于 HTML 的模板语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据。所有 Vue.js 的模板都是合法的 HTML,所以能被遵循规范的浏览器和 HTML 解析器解析。
在底层的实现上,Vue 将模板编译成虚拟 DOM 渲染函数。结合响应系统,Vue 能够智能地计算出最少需要重新渲染多少组件,并把 DOM 操作次数减到最少。
VUE+elementUI目前使用最多的,尤其是开发一些后台管理系统还是比较简单便捷的。
后端
servlet
servlet是Server Applet的简称,翻译过来就是服务程序,简单的讲就是是运行在服务器上的一个小程序,用来处理服务器请求的。我们通过浏览器访问一个应用,在这个过程中,我们的浏览器发送访问请求,服务器接收请求,并对浏览器的请求作出相应的处理,这就是我们熟悉的B/S模型(浏览器-服务器模型).而servlet就是对请求作出处理的组件,运行于支持Java的应用服务器中。如图如是:
struts
struts主要是指struts1和struts2,是经典的MVC框架,除去一些老项目,现在用的越来越少了。但struts1和struts2还是有区别的,主要区别二者本质不一样。
struts1:通过采用Java Servlet/JSP技术,实现了基于Java EE Web应用的Model-View-Controller(MVC)设计模式的应用框架,是MVC经典设计模式中的一个经典产品。
struts2:以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。
最经典的组合strutsMVC+SPring+Hibernate,号称SSH,当年都是面试必问的技术。
Spring
Spring框架是一个开源Java应用框架,解决了开发者在开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及Web MVC等功能。Spring可以单独应用于应用程序,也可以和Struts、Webwork等众多Web框架组合使用。Spring框架主要由七部分组成,分别是 Spring Core、 Spring AOP、 Spring ORM、 Spring DAO、Spring Context、 Spring Web和 Spring Web MVC。
持久层框架
jdbc
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。
早期项目大部分都是通过对JDBC封装来操作数据库,实现增删改查,对性能考虑也不多,随时间推移不断衍生出很多框架,例如:mybatis,hibernate等。
ibatis
iBATIS一词来源于“internet”和“abatis”的组合,是一个由Clinton Begin在2001年发起的开放源代码项目。最初侧重于密码软件的开发,现在是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO),同时还提供一个利用这个框架开发的JPetStore实例。
iBATIS 目前提供了三种语言实现的版本,包括:Java、.NET以及Ruby。
mybatis
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。
MyBatis 是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
MyBatis-Plus
Mybatis 增强工具包 - 只做增强不做改变,简化CRUD操作
JPA
JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。
Sun引入新的JPA ORM规范出于两个原因:其一,简化现有Java EE和Java SE应用开发工作;其二,Sun希望整合ORM技术,实现天下归一。
Spring Boot
SpringBoot是由Pivotal团队在2013年开始研发、2014年4月发布第一个版本的全新开源的轻量级框架。它基于Spring4.0设计,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程。另外SpringBoot通过集成大量的框架使得依赖包的版本冲突,以及引用的不稳定性等问题得到了很好的解决。
分布式/微服务
Spring Cloud
Spring Cloud 为开发者提供了在分布式系统(如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性 Token、全局锁、决策竞选、分布式会话和集群状态)操作的开发工具。使用 Spring Cloud 开发者可以快速实现上述这些模式。
Spring Cloud 的 GitHub 主页:https://github.com/spring-cloud
dubbo
Dubbo 是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring 框架无缝集成。
主要核心部件:
Remoting: 网络通信框架,实现了 sync-over-async 和 request-response 消息机制
RPC: 一个远程过程调用的抽象,支持负载均衡、容灾和集群功能
Registry: 服务目录框架用于服务的注册和服务事件发布和订阅
Spring Cloud Alibaba
Spring Cloud Alibaba 致力于提供分布式应用服务开发的一站式解决方案。此项目包含开发分布式应用服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。
依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里分布式应用解决方案,通过阿里中间件来迅速搭建分布式应用系统。
安全框架
shiro
Apache Shiro 是 Java 的一个安全框架。目前,使用 Apache Shiro 的人越来越多,因为它相当简单,对比 Spring Security,可能没有 Spring Security 做的功能强大,但是在实际工作时可能并不需要那么复杂的东西,所以使用小而简单的 Shiro 就足够了。对于它俩到底哪个好,这个不必纠结,能更简单的解决项目问题就好了。
Spring Security
Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。
oauth2.0
OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。
OAuth 2.0 是目前比较流行的做法,它率先被Google, Yahoo, Microsoft, Facebook等使用。之所以标注为 2.0,是因为最初有一个1.0协议,但这个1.0协议被弄得太复杂,易用性差,所以没有得到普及。2.0是一个新的设计,协议简单清晰,但它并不兼容1.0,可以说与1.0没什么关系。
项目管理
maven
Maven 是 Apache 下的一个纯 Java 开发的开源项目。利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。
ant
ant 是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发。在实际软件开发中,有很多地方可以用到ant。
gradle
Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,目前也增加了基于Kotlin语言的kotlin-based DSL,抛弃了基于XML的各种繁琐配置。
服务器软件
tomcat
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选
Apache
Apache(阿帕奇)是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一
Jetty
Jetty 是一个开源的servlet容器,它为基于Java的web容器,例如JSP和servlet提供运行环境。
weblogic
WebLogic Server是专门为企业电子商务应用系统开发的。企业电子商务应用系统需要快速开发,并要求服务器端组件具有良好的灵活性和安全性,同时还要支持关键任务所必需的扩展、性能、和高可用性。WebLogic Server简化了可移植及可扩展的应用系统的开发,并为其它应用 系统和系统提供了丰富的互操作性。
nginx
Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强。
中间件
缓存
缓存是现在系统中必不可少的模块,并且已经成为了高并发高性能架构的一个关键组件。缓存的主要作用:提升性能和缓解数据库压力,
Redis
Redis是一个开源的内存数据结构存储,用作数据库、缓存和消息代理。提供诸如字符串、哈希、列表、集合、带范围查询的排序集合、位图、超日志、地理空间索引和流等数据结构。具有内置的复制、Lua脚本、LRU逐出、事务和不同级别的磁盘持久性,并通过Redis Sentinel和Redis Cluster的自动分区提供高可用性。
MongoDB
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
Memcached
Memcached是一个自由开源的,高性能,分布式内存对象缓存系统,用来提高Web应用扩展性的重要因素。是一个基于内存的key-value存储,用来存储小块的任意数据(字符串、对象)。简洁而强大,它的简洁设计便于快速开发,减轻开发难度,解决了大数据量缓存的很多问题。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。
差异性我就不多说了,简单说下他们的使用场景:
- Memcached:动态系统中减轻数据库负载,提升性能;做缓存,适合多读少写,大数据量的情况(如人人网大量查询用户信息、好友信息、文章信息等)。
- Redis:适用于对读写效率要求都很高,数据处理业务复杂和对安全性要求较高的系统(如新浪微博的计数和微博发布部分系统,对数据安全性、读写要求都很高)。
- MongoDB:主要解决海量数据的访问效率问题。
搜索
solr
Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。
Elasticsearch
Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口
二者主要区别
es基本是开箱即用,非常简单,Solr略微复杂。
Solr 支持更多格式的数据,比如JSON、XML、CSV,而 Elasticsearch 仅支持json文件格式。
Solr 查询快,但更新索引时慢(即插入删除慢),ES建立索引快(即查询慢),即实时性查询快。
ELK
之所以推荐ELK是因为面对分布式微服务情况下,会显示出他的威力,不管是数据收集、数据处理、还是数据分析可以节约很多时间。ELK是Elasticsearch + Logstash + Kibana三个开源软件的组合,但是通常为了提高性能需要借助kafka,利用Filebeat进行日志收集,下面这个架构图是我做过的一个日志服务平台。
定时任务
说定定时任务大家可能都接触过,例如Spring自带的定时任务SpringTask,但是SpringTask是存在很多问题的,例如:最致命的一个问题就是一旦定时抛出异常,生命就结束,下一次不会再执行。复杂业务中使用起来是不方便的,这里推荐两个定时任务框架Quartz和xx-job,第三方的功能比较强大,好用。
Quartz
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,完全由Java开发,可以用来执行定时任务,类似于java.util.Timer。但是相较于Timer, Quartz增加了很多功能:
- 持久性作业 - 就是保持调度定时的状态;
- 作业管理 - 对调度作业进行有效的管理;
xx-job
XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。
目前已有多家公司接入xxl-job,包括比较知名的大众点评,京东,优信二手车,北京尚德,360金融 (360),联想集团 (联想),易信 (网易)等等....
Quartz作为开源作业调度中的佼佼者,是作业调度的首选
Quartz在集群环境下只能通过API的方式对任务管理,同时,系统侵入性相当严重,而XX-JOB可以完美解决集群下任务额管理。所以,可以根据自己业务情况选择合适定时任务框架,
配置中心
什么是配置中心?
集中将应用系统中对配置信息的管理作为一个新的应用功能模块,区别与传统的配置信息分散到系统各个角落方式,进行集中统一管理,并且提供额外功能。尤其是在微服务架构中,是不可或缺组件,甚至是必要组件之一。
为什么要使用配置中心?
在微服务体系中,服务的数量以及配置信息的日益增多,比如各种服务器参数配置、各种数据库访问参数配置、各种环境下应用配置信息的不同、配置信息修改之后实时生效等等,传统的配置文件方式或者将配置信息存放于数据库中的方式已无法满足开发人员对配置管理的要求。常见的配置中心中间件有:SpringCloud Config ,Nacos,apollo等。
SpringCloud Config
2014年9月开源,Spring Cloud 生态组件,可以和Spring Cloud体系无缝整合,Spring Cloud Config支持通过/bus/refresh端点的destination参数来指定要更新配置的机器,不过整个流程不够自动化和体系化。相对于Apollo和Nacos还是比较弱的。
Nacos
2018年6月,阿里开源的配置中心,也可以做DNS和RPC的服务发现。Nacos使用起来相对比较简洁,在对性能要求比较高的大规模场景更适合。此外,Nacos除了提供配置中心的功能,还提供了动态服务发现、服务共享与管理的功能,降低了服务化改造过程中的难度。
apollo(阿波罗)
2016年5月,携程开源的配置管理中心,具备规范的权限、流程治理等特性,Apollo可以直接在控制台上点灰度发布指定发布机器的IP,接着再全量发布,做得比较体系化。
三者对比如何选择:
核心功能: Apollo和Nacos相对于Spring Cloud Config的生态支持更广
实时推送: Nacos和Apollo在配置实时推送链路上是比较简单高效的,Spring Cloud Config比较复杂。
高可用部署: Nacos的部署结构比较简单,运维成本较低。Apollo部署组件较多,运维成本比Nacos高。Spring Cloud Config生产高可用的成本最高。
监控
服务器监控是实时掌握服务器工作状态,并在需要时可以随时调用监控记录进行查看。
SpringBootAdmin
Spring Boot Admin用来管理和监控Spring Boot应用程序,通过UI来查看应用程序的状态,例如Spring Beans,系统属性,线程,http的调用情况等有限状态。
Druid
我知道Druid更多的用途就是连接池,其实他还有一个对SQL监控功能。
SkyWalking
Skywalking是由国内开源爱好者吴晟(原OneAPM工程师,目前在华为)开源并提交到Apache孵化器的产品,它同时吸收了Zipkin/Pinpoint/CAT的设计思路,支持非侵入式埋点。是一款基于分布式跟踪的应用程序性能监控系统。另外社区还发展出了一个叫OpenTracing的组织,旨在推进调用链监控的一些规范和标准工作。
存储
把涉及到数据库相关或者可以作为数据仓库的中间件都归到一起了。
MyCat
Mycat是一个开源数据库中间件,是一个实现了MySQL协议的的数据库中间件服务器,我们可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问Mycat,而Mycat再使用用MySQL原生(Native)协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,包括SQL Server、Oracle、DB2、PostgreSQL等主流数据库,也支持MongoDB这种新型NoSQL方式的存储,未来还会支持更多类型的存储;一般地,Mycat主要用于代理MySQL数据库,虽然它也支持去访问其他类型的数据库;
Mycat官网:http://www.mycat.io/
Canal
我们先看官网的介绍
这句介绍有几个关键字:增量日志,增量数据订阅和消费。
这里我们可以简单地把canal理解为一个用来同步增量数据的一个工具。
接下来我们看一张官网提供的示意图:
sharing-jdbc
定位为轻量级Java框架,在Java的JDBC层提供的额外服务。 它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架。
主要功能
- 分库 & 分表
- 读写分离
- 分布式主键
zookeeper
ZooKeeper是Hadoop的正式子项目,它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
事务
这个事务更多指的是分布式事务处理插件。
Apache ShardingSphere
Apache ShardingSphere(Incubator) 是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(规划中)这3款相互独立,却又能够混合部署配合使用的产品组成。它们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如Java同构、异构语言、容器、云原生等各种多样化的应用场景。
Seata
Seata 是 Simple Extensible Autonomous Transaction Architecture 的简写,由 feascar 改名而来。是阿里开源的分布式事务框架,属于二阶段提交模式。
消息队列
什么是消息队列
消息队列是一个存放消息的容器,当我们需要使用消息的时候可以取出消息供自己使用。消息队列是分布式系统中重要的组件,使用消息队列主要是为了通过异步处理提高系统性能和削峰、降低系统耦合性。目前使用较多的消息队列有ActiveMQ,RabbitMQ,Kafka,RocketMQ。
为什么需要消息队列
1.通过异步处理提高系统性能(削峰、减少响应所需时间);
2.降低系统耦合性;
Kafka
Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 对于像Hadoop一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息。
RabbitMQ
AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。
AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。
RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。
ActiveMQ
ActiveMQ是一种开源的基于JMS(Java Message Servie)规范的一种消息中间件的实现,ActiveMQ的设计目标是提供标准的,面向消息的,能够跨越多语言和多系统的应用集成消息通信中间件。
三者区别及其使用场景
特性 | ActiveMQ | RabbitMQ | kafka |
---|---|---|---|
开发语言 | java | erlang | scala |
单机吞吐量 | 万级 | 万级 | 10万级 |
时效性 | ms级 | us级 | ms级以内 |
可用性 | 高(主从架构) | 高(主从架构) | 非常高(分布式架构) |
功能特性 | 成熟的产品,在很多公司得到应用;有较多的文档;各种协议支持较好 | 基于erlang开发,所以并发能力很强,性能极其好,延时很低;管理界面较丰富 | 只支持主要的MQ功能,像一些消息查询,消息回溯等功能没有提供,毕竟是为大数据准备的,在大数据领域应用广。 |
数据库
该数据库主要是指关系型数据库,是按照数据结构来组织、存储和管理数据的仓库,数据库是存放数据的仓库,是一个系统或者软件必不可少的一部分。每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据。我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。
所以,现在我们使用关系型数据库管理系统来存储和管理大数据量。所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。
关系数据库管理系统的特点:
- 1.数据以表格的形式出现
- 2.每行为各种记录名称
- 3.每列为记录名称所对应的数据域
- 4.许多的行和列组成一张表单
- 5.若干的表单组成database
常见的数据管理系统主要有:oracle、mysql、SQL Server、access、TiDB。
oracle
Oracle Database,简称 Oracle。Oracle 数据库系统是美国 Oracle 公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(client/server)的数据库之一。Oracle 数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系型数据库,它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能,但它的所有知识,只要在一种机型上学习了Oracle知识,便能在各种类型的机器上使用它。
mysql
MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。目前也是Oracle 公司来托管。
SQL Server
美国Microsoft公司推出的一种关系型数据库系统。SQL Server是一个可扩展的、高性能的、为分布式客户机/服务器计算所设计的数据库管理系统,实现了与WindowsNT的有机结合,提供了基于事务的企业级信息管理系统方案。
access
Access是微软把数据库引擎的图形用户界面和软件开发工具结合在一起的一个数据库管理系统。它是微软OFFICE的一个成员, 在包括专业版和更高版本的office版本里面被单独出售。
TiDB
TiDB 是 PingCAP 公司自主设计、研发的开源分布式关系型数据库,是一款同时支持在线事务处理与在线分析处理 (Hybrid Transactional and Analytical Processing, HTAP)的融合型分布式数据库产品,具备水平扩容或者缩容、金融级高可用、实时 HTAP、云原生的分布式数据库、兼容 MySQL 5.7 协议和 MySQL 生态等重要特性。目标是为用户提供一站式 OLTP (Online Transactional Processing)、OLAP (Online Analytical Processing)、HTAP 解决方案。TiDB 适合高可用、强一致要求较高、数据规模较大等各种应用场景。
上面这几个数据库优缺点都比较明显,不在啰嗦了,大家在工作中可以根据自己实际情况选择合适的数据。
工具
开发
IntelliJ IDEA
IntelliJ在业界被公认为最好的java开发工具,尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能可以说是超常的。IDEA是JetBrains公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。它的旗舰版本还支持HTML,CSS,PHP,MySQL,Python等。免费版只支持Java,Kotlin等少数语言。
eclipse
Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台, 是 Java 的集成开发环境(IDE),当然 Eclipse 也可以作为其他开发语言的集成开发环境,如C,C++,PHP,和 Ruby 等。
MyEclipse
MyEclipse,是在Eclipse 基础上加上自己的插件开发而成的功能强大的企业级集成开发环境,主要用于Java、Java EE以及移动应用的开发。在最新版本的MyEclipse中,配合CodeMix使用支持也十分广泛,尤其是对各种开源产品和主流开发框架的支持相当不错。目前已支持PHP、Python、Vue、Angular、React、Java、Java EE等语言和框架开发。
这三款工具好坏我也不做任何评价,每个工具用户都不少,我周围IntelliJ IDEA和MyEclipse都有,我个人比较喜欢用IntelliJ IDEA。
客户端工具
版本控制
常见的版本空间工具svn和git
svn
TortoiseSVN 是 Subversion 版本控制系统的一个免费开源客户端,可以超越时间的管理文件和目录。文件保存在中央版本库,除了能记住文件和目录的每次修改以外,版本库非常像普通的文件服务器。你可以将文件恢复到过去的版本,并且可以通过检查历史知道数据做了哪些修改,谁做的修改。这就是为什么许多人将 Subversion 和版本控制系统看作一种“时间机器”。
git
Git 是用于Linux内核开发的版本控制工具。与常用的版本控制工具 Subversion 不同,它采用了分布式版本库的方式,不必服务器端软件支持,代码的发布和交流极其方便。 Git 的速度很快,这样的大项目来说自然很重要。 Git 最为出色的是它的合并跟踪(merge tracing)能力。
SVN的特点是简单,只是需要一个放代码的地方时用是OK的。
Git的特点版本控制可以不依赖网络做任何事情,对分支和合并有更好的支持(这应该算是开发者最关心的地方)。
数据库
Navicat
Navicat是一套快速、可靠并价格相当便宜的数据库管理工具,专为简化数据库的管理及降低系统管理成本而设。它的设计符合数据库管理员、开发人员及中小企业的需要。Navicat 是以直觉化的图形用户界面而建的,让你可以以安全并且简单的方式创建、组织、访问并共用信息。
PLSQL
PL/SQL Developer是一个集成开发环境,专门开发面向Oracle数据库的应用。PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL)。PL/SQL是Oracle数据库对SQL语句的扩展。在普通SQL语句的使用上增加了编程语言的特点,所以PL/SQL把数据操作和查询语句组织在PL/SQL代码的过程性单元中,通过逻辑判断、循环等操作实现复杂的功能或者计算,PL/SQL 只有 Oracle 数据库有。
Redis Desktop Manager
Redis Desktop Manager是一款windows平台下的可视化redis数据库桌面管理工具,使用它你可以查看、删除、修改你的redis数据库数据!
linux远程
XShell
XShell是一个强大的安全终端模拟软件,它支持SSH1,SSH2,以及Microsoft Windows平台的TELNET协议。
XShell可以在Windows界面下用来访问远端不同系统下的服务器,从而比较好的达到远程控制终端的目的。
WinSCP
宝塔
宝塔面板是一个可以安装在服务器上的集成环境,并配套了web管理面板,可以在浏览器上直接控制你的服务器,非常方便。 可以一键创建网站、FTP、数据库、SSL;安全管理,计划任务,文件管理,PHP多版本共存及切换;自带基础网站环境,支持windows系统(apache)和linux系统(apache或nginx)。
SecureCRT
Secure CRT 是一款SSH客户端软件,通过使用内含的VCP命令行程序可以进行加密文件的传输。
postMan
Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。
辅助
Typora+PicGo
Typora+PicGo,最好用的Markdown+最好用的图床工具!如果写博客的可以收藏起来。
notepad++
Notepad++中文版是程序员必备的文本编辑器,Notepad++中文版小巧高效,支持27种编程语言,通吃C,C++ ,Java ,C#, XML, HTML, PHP,JS 等,Notepad++中文版编辑器可完美地取代微软的记事本。
画图
visio
Office Visio 是Office软件系列中的负责绘制流程图和示意图的软件,是一款便于IT和商务人员就复杂信息、系统和流程进行可视化处理、分析和交流的软件。使用具有专业外观的 Office Visio 图表,可以促进对系统和流程的了解,深入了解复杂信息并利用这些知识做出更好的业务决策。常见软件架构、流程图都可以在里面完成。
processon
ProcessOn是一个在线作图工具的聚合平台, 它可以在线画流程图、思维导图、UI原型图、UML、网络拓扑图、组织结构图等等, 您无需担心下载和更新的问题,不管Mac还是Windows,一个浏览器就可以随时随地的发挥创意,规划工作。
官网:https://www.processon.com/
PowerDesigner
owerDesigner是一款非常全面的数据库设计工具。使用PowerDesigner可以快速创建表,支持表与表之间建立关系,界面简洁,功能强大。同时支持将sql脚本导出,多种导出类型任意挑选,简单实用。
Xmind
XMind 是一个全功能的思维导图和头脑风暴软件,为激发灵感和创意而生。作为一款有效提升工作和生活效率的生产力工具,受到全球百千万用户的青睐。
iReport
说到 iReport 不得不先介绍 Jasperreport,Jasperreport 是一个报表制作程序,用户需要按照它制定的规则编写一个 XML 文件,然后得到用户需要输出的格式文件。它支持输出的文件格式包括 PDF,HTML,XML,XLS,CVS 等等。而 iReport 就是一个制作 Jasperreport 的 XML 文件的可视化开发工具。
浏览器
Chrome
Google Chrome是一款由Google公司开发的网页浏览器,该浏览器基于其他开源软件撰写,包括WebKit,目标是提升稳定性、速度和安全性,并创造出简单且有效率的使用者界面。
搜狗
搜狗浏览器 由搜狗公司开发,基于谷歌chromium内核,力求为用户提供跨终端无缝使用体验,让上网更简单、网页阅读更流畅的浏览器。
火狐
Mozilla Firefox,中文俗称“火狐”,是一个由Mozilla开发的自由及开放源代码的网页浏览器。其使用Gecko排版引擎,支持多种操作系统,如Windows、macOS及GNU/Linux等
IE
Internet Explorer(简称:IE)是微软公司微软公司推出的一款网页浏览器。原称Microsoft Internet Explorer(6版本以前)和Windows Internet Explorer(7、8、9、10、11版本)。在IE7以前,中文直译为“网络探路者”,但在IE7以后官方便直接俗称"IE浏览器"。
如果做前端开发,这几款浏览器兼容性都得兼顾。很早之前IE浏览器市场是比较大,随着时间推移,谷歌浏览器占据了比较大的市场。我个人日常开发中谷歌用的比较多,特殊情况才会使用其它浏览器。
性能分析
jmeter
JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 服务程序、CGI 脚本、Java 对象、数据库, 等等。
ab
apache bench简称ab,它是apache自带的压力测试工具。ab非常实用,它不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试。
MAT
MAT是Java堆内存分析工具,可从http://www.eclipse.org/mat/中...。
你在成为大神的路上都学习了哪些技术,欢迎留言交流。
近期热文推荐:
SpringCloud微服务电商项目教程
以上是 【Java】Java 程序员最常用技术栈和工具集合(建议收藏) 的全部内容, 来源链接: utcz.com/a/112088.html
得票时间