从零开始了解java的技术线路

首先,我们可以使用JavaSE写一个main方法,输出一句话。

我们为了做更多的事,可以使用JavaSE的其他功能。

我们觉得所有的步骤全部写在main方法里实在是太不方便阅读了,于是,我们为每一个事件创造了一个方法,main方法负责按顺序执行这些方法

我们发现有一些方法都是属于一个东西的行为,所以我们将这个东西称为

而这个类具体的某一个,我们称为对象

我们觉得两个类都属于一种东西,他们有一些共性,我们把这种东西称为父类

父类中的方法,子类都有,但是他们执行方法时又有些区别,我们可以把方法的具体内容重新写一遍,这叫做方法重写

我们发现当同样的一件事,因为条件不同,可能发生的过程和结果也可能不同,于是我们可以将不同参数,同样方法名的方法具体内容重新写一遍,在执行这个方法名的方法时,我们可以根据条件的不同,也就是参数的不同,选择对应的方法执行,这就叫做方法重载

在方法的调用时,我们无法立即确定调用该方法的具体对象,于是我们用了他的父类进行调用,在真正执行的时候,程序会知道这个对象实际是谁,从而选择相应的具体方法,这叫做多态

 

 

软件开发的整体架构主要分为B/S架构与C/S架构

 

JavaSE程序都是通过main方法执行的,而我们浏览网页的时候,是无法调用Java的main方法的,于是我们有了JavaEE

我们浏览器访问网页就是B/S架构

我们访问网站首先得有网页,网页的编辑我们通常是使用Html。浏览器会根据Html中的标签进行解析,转化成页面。

Html太过单调,我们希望能增加一些效果(改变字体等),于是有了Css

而这些效果基本都是静态的,为了给Html增加一些动态效果(点击事件等),于是有了JavaScript

由于JavaScript写的内容太多了,很臃肿,于是有了JQuery,写的更少,做的更多。

由于页面都是规定的样式,不够精美,于是有了bootstraplayui等ui框架。

我们通过地址栏访问网页,叫做Web网络通信

Web网络通信通过超文本传送协议HTTP进行通信。

浏览器请求发送给服务器,服务器处理请求,响应给浏览器,服务器我们常用tomcat

存放在服务器中的资源叫做Web资源,如静态的Html,动态的Servlet

服务器中处理请求的程序,称为Servlet

Servlet相应数据到浏览器得输出成Html的格式,太麻烦,于是有了Jsp,在Jsp中可以直接按Html的格式书写页面,所以Jsp本质也是Servlet

Servlet接收到请求需要获取一些存放在数据库中的数据,我们常用的数据库有mysqloracle

不同数据库的操作语法都不同,通过Servlet(Java程序)去不同数据库中取数据,需要不同的语法,于是有JDBC,规范了数据库的语法。

可是JDBC的程序太多重复和代码,影响业务代码的编写,于是将表与对象联系起来,就是ORM思想。

根据ORM思想,有了MyBatis框架。

 

 

 

 

我们写出了一套CRM项目,但是有很多地方很繁琐和不完善。

我们所有的Service层都是通过Service接口直接new一个固定的ServiceImpl,这样的接口没有意义,如果需要更换一个Impl,需要修改源代码,这样很不好,所以我们应该将new一个对象的代码写进配置文件中,于是有了SpringIoC

之前的事务采用的是JDK动态代理,但我们也可以使用Spring的AOP进行功能增强,他采用的是效率更高的CGLib动态代理。

同时Spring还集成了MyBatis,MyBatis的主配置文件就不需要配置数据源了,只需要在Spring中配置数据源即可。

Spring在Web中按MVC架构的使用称为SpringMVC

SpringMVC自带监听器过滤器拦截器请求转发重定向异常处理

Web程序同时使用Spring,SpringMVC,以及MyBatis的架构称为SSM架构。

 

 

 

产品在实际应用中的服务器都是Linux系统的,因为Linux系统稳定,快捷。

产品上线以后,高并发,大数据的情况下,如果每次操作数据我们都去操作Sql数据库,查询效率会大大降低,所以我们有了NoSql数据库,这种数据库存放在内存中,无关系连接,查询速度快,例如Redis

产品上线以后,如果是一个大的项目,所有模块写在一个程序里,放在同一个服务器上,高并发访问时,服务器处理能力有限,导致速度变慢,且如果需要修改其中一个模块,所有程序都要重新部署,所以写在多个程序中,分别部署到不同的服务器上比较合理,通过消费者去调用提供者,这就是分布式,例如Dubbo

Dubbo使用时,为了方便对于提供者和消费者的管理,所以有了注册中心Zookeeper

为了解决高并发,我们可以在多个服务器中部署提供者这就叫集群

我们可以通过负载均衡随机调用提供者,降低服务器压力。

之前项目的jar包都需要自己上网下载,部署,太麻烦了,于是有了Maven

如果数据库中表太多,表中字段太多,每个表对应的Model都需要手动创建,太麻烦了,所以可以使用MyBatis逆向工程插件。

我们在项目中如果需要调用其他的项目,可以使用HTTPClient协议。

当我们的项目处于高并发的情况下,一个服务器无法满足太多用户的访问,于是我们将一个项目集群,对外提供的访问入口通常只有一个,所以我们需要使用Nginx负载均衡

Nginx是一种通过反向代理技术,反向代理意味着只需要访问代理地址,代理自己分配相应的服务器地址,用户不需要关心具体访问的服务器地址。

通过Nginx,我们还可以将静态资源交给Nginx管理,实现动静分离,这样也可以减少服务器压力。

通过Nginx,还可以配置虚拟主机,通过域名访问。

但是当我们使用Nginx访问时,因为每次实际访问的服务器都不懂,导致session每次都不同,于是我们有了SpringSession

之前使用Spring框架,有太多的xml文件,配置太麻烦,为了简化,有了SpringBoot

原来使用的是Jsp,每当首次访问都需要编译,速度太慢,所以我们有了Thymeleaf,静态页面html。

但我们的项目中有大量的文件时,如淘宝的图片,一个存储服务器无法完全存放,且一旦宕机,所有资料丢失,为了解决这个问题,有了FastDFS,可以配置多个存储服务器,每个存储服务器可以分配多个备份服务器,不够再加。

之前学过的Dubbo,HttpClient是一个系统去调用另一个系统,为了面向消息,提出了JMS规范,提倡异步获取消息,完全解耦合,也就是你提供完就行,不用管我用不用,而我需要用的时候再用。

ActiveMQ实现了JMS规范的一个消息服务器

对于Dubbo,ActiveMQ,zookeeper这些服务技术,我们为了防止单点故障,都可以采用集群的方式,部署多个。

         为了防止数据库服务器宕机,我们需要部署MySql主从复制

为了减缓数据库读写访问量,我们可以根据读写量选择一主多从双主双从

但我们只能在写操作时指定主服务器,读操作时指定从服务器,为了让系统自动选择主服务器写,从服务器读,所以有了MyCat,读写分离。

通过MyCat,我们还可以将数据库表进行分库分表,加快每张表的读写速度。

将一张表中的数据按照某种条件拆分到多台数据库服务器上面,水平切分,也称为横向切分。

将不同的业务的表来切分到不同的数据库服务器之上,垂直切分,也称为纵向切分。

 

 

高并发解决方案:

硬件

缓存:浏览器-> Nginx -> Redis -> 数据库

集群:负载均衡、数据库主从复制

拆分:应用拆分Dubbo,数据库拆分MyCat

静态化:Jsp->Thymeleaf

动静分离:Nginx

队列:异步处理/系统解耦/流量消峰ActiveMQ

池化:对象池、连接池、线程池

优化

 

 

 

 

 

权限管理,我们用到了zTree树状结构。

 

 

 

 

 

 

 

 

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页