框架知识点总结

自我总结框架知识点

1.1.实现单点登录
SSO英文全称Single Sign On,单点登录。SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。它包括可以将这次主要的登录映射到其他应用中用于同一个用户的登录的机制。它是目前比较流行的企业业务整合的解决方案之一。

1.1.1业务需求

因为jt-web采用集群的方式进行部署.如果将用户的数据保存到Session中.由于多个服务器之间Session不能共享.导致用户频繁的登陆.如何解决??
策略:
1.Nginx IP_HASH 根据IP地址动态的绑定到一台服务器中 不安全/分配不均
2.url重写技术 动态拼接SessionId 负载过高
3.新单点登录实现 利用redis缓存实现单点登录

1.1.2单点登录实现
电商系统比较庞杂,包括后台子系统、商品的管理、CMS内容管理、订单子系统、购物车子系统、前台子系统。这样就会造成一个问题,我们系统之间访问时候就产生了一个session共享问题。
分布部署时,有多个tomcat,假设用户从tomcat1登录,那它的登录信息是记录在tomcat1上的。如果用户请求业务,有可能就被分发到tomcat2上,这时tomcat2上并未登录,这时应该如何处理呢?我们要做到,不管用户在哪个tomcat上登录。
京东就是用了很多二级域名和不同的ip 的web服务器来部署不同的服务,他就是做到了一次登录不同的域名和ip下可以不用再登录。
如何保证两次访问拿到的是同一个session呢?
用户登录时将用户的信息保存到radis缓存中,这样各个子系统就不需要将用户信息放到session中,而是统一到radis缓存中获取。
我们的单点登录服务提供接口,外界是通过RESTFul来请求服务的,登录服务的接口就是一个用户名一个密码。
在用户登录时候,我们会先经过验证,如果验证通过,我们将User对象 ,用用户ID加上时间的毫秒值作为key:ticket存入radis缓存,并返回ticket,同时登录端将ticket值写入cookie,为了防止ticket被恶意获取,我们对他进行了MD5Hash进行加密
然后会有一个拦截器,会对url进行过滤,如果有需要登录操作的url,通过cookie中的值,以此作为key值去缓存中查找,这样就完成了多个web服务器的免登录,当然可以通过对缓存设置,来设置ticket的失效时间
因为cookie跟浏览器相关,cookie信息是保存在本地的。跟后台访问到哪个tomcat是没有关系的。就形成了一个单点登录系统。

1.当用户输入用户名和密码时,将数据发送给JT-SSO单点登录系统.
2.JT-SSO接收前台数据后,进行用户名和密码的校验.如果用户名和密码错误则告知用户用户名或密码错误;.
如果用户名和密码正确,则为用户生成唯一的一个秘钥TOKEN,将用户对象转化USERJSON数据.之后将token和userJSON保存到redis集群中.token充当key,userJSON充当value.
3.将token信息返回给JT-WEB.JT-WEB将token数据保存到客户端的Cookie中.
4.当用户访问需要权限的系统时,通过request对象获取Cookie信息.之后校验token数据是否正确.如果正确则放行.如果不正确则跳转到用户登陆页面重新登陆.
该业务的实现需要借助拦截器实现.

0.1购物车管理

1,构建项目JT-cart
2,添加依赖
3,添加tomcat插件
4,修改nginx
5,配置web.xml
6,配置spring配置文件
7,配置mabatis文件
8,编辑pojo
9,编辑mapper接口
10,编写业务逻辑 controller service serviceImpl

redis缓存:

说明:
当点击商品分类列表时,应该使用redis缓冲,parentId充当redis中的Key,获取当前节点的全部子节点信息充当value(JSON串)
实现思路:
1.根据parentID先查询redis缓存
2.如果redis中有数据,则JSON串转化为java对象之后返回.
3.如果redis中没有数据.则查询数据库,需要将javaList集合转化为JSON串.之后保存到redis中.之后返回用户.

1.2.消息队列介绍
作用:缓解服务器压力.实现了用户请求和入库操作的异步.
消息被发送到队列中。“消息队列”是在消息的传输过程中保存消息的容器。消息队列管理器在将消息从它的源中继到它的目标时充当中间人。队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用,消息队列会保留消息,直到可以成功地传递它。

直接调用通常是用于诸如远程过程调用的技术

一.ssm框架搭建流程
1,springMVC
1.1配置前端控制器

<servlet>
	<servlet-name>springmvc</servlet-name>
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	<init-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:/spring/applicationContext-mvc.xml</param-value>
	</init-param>
	<!--表示容器启动第一个加载该servlet  -->
	<load-on-startup>1</load-on-startup>
</servlet>

1.2配置MVC注解
mvc:annotation-driven/

1.3配置视图解析器



2.Spring
2.1开启包扫描

<context:component-scan base-package="com.jt"/>

2.2管理数据源






2.3开启事务控制

  <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  		<property name="dataSource" ref="dataSource"></property>
  </bean>

2.4spring整合mybatis
3.Mybatis
3.1设定别名标签

	<setting name="mapUnderscoreToCamelCase" value="true" />

3.2添加mybatis插件
通用mapper插件
3.3编辑映射文件sql
EasyUI
1,easyui是一种基于jQuery的用户界面插件集合。

$符号和#的区别
#号有预编译的效果,可以防止sql注入攻击
#号为参数添加“”号,当字符串
符 如 果 需 要 以 字 段 名 称 为 参 数 时 , 使 用 符 如果需要以字段名称为参数时,使用 使
如果以字段为参数时添加#号,会导致业务异常

@ResponseBody 解析说明
* 如果解析的是对象 则默认使用UTF-8编码格式
* 如果解析的是String字符串,则默认使用ISO-8859-1编码
* 源码:
@RequestMapping(value="/cat/queryItemName",produces=“html/text;charset=utf-8”)
Nginx
Nginx 是一个高性能的HTTP和反响代理服务器
特点:占用内存少,并发能力强。
调用原理:
1,当用户通过网络地址访问资源时,如果访问的地址刚好时Nginx反向代理的地址,则该请求访问nginx
2,nginx 接受到请求后,通过内部的配置文件做路径的转换,将访问的路径动态的转化为nginx代理的路径,之后请求真是的磁盘资源
3,当获取到真实的资源后,将数据再次返回给客户端,
4,最终用户的到的真实的数据,用户数据回显。
Nginx启动方式:
如果是第一次启动.则使用超级管理员的权限启动.
Nginx状态检测:
说明:Nginx启动一次会开启2个进程.
一个是主进程 (占用空间大的)
主要负责反向代理. 一个是守护进程
防止主进程意外关闭.如果意外关闭了则再次开启.
如果没有域名时:需要修改自己电脑的HOSTS文件
Nginx 心跳检测
参数介绍:
max_fails=1 Nginx健康检测的失败的次数
fail_timeout=60s 表示在60秒内 不会再将请求发往故障机. 时间不宜过小 否则Nginx内部负载太高了.
proxy_connect_timeout 1; 请求超时时间 1秒
proxy_read_timeout 1; 读取资源的超时
proxy_send_timeout 1; 发送数据的超时
Xshell
说明:xshell是远程连接Linux系统的工具,可以进行文件的传输。命令的编辑等。
Linux 安装jdk 命令:
解压文件:tar -xvf 文件名
编辑文件:vim /etc/profile 需要修改的jdk的路径
查看版本:Java -version
关闭防火墙:service iptables stop
Service iptables start
永久关闭防火墙
开启: chkconfig iptables on
关闭: chkconfig iptables off

数据库的优化策略:
1.优化sql语句where左链接 右连接 内链接
原则:尽可能根据主键查询,尽可能少用关联查询
2.创建索引
3.添加缓存
Redis缓存
RDB模式是redis中默认的持久化策略redis中的set操作,在规定的周期内执行了指定的次数时,redis会自动将内存中的说句持久化到硬盘中并且后缀名为.RDB
List和Map 接口及实现类

List 其元素以线性方式储存(有序可重复)
元素可以重复 元素有序 可以对元素的位置精确控制
实现类:
Array List Linked List
List接口常用的方法
Boolean add()向列表尾部添加指定元素;
Void add(int index,E element)在列表指定位置插入指定元素
Boolean addAll(Collection c) 添加指定的collection中的所有元素到此列表的结尾;
1.ArrayList是基于动态数组的数据结构,LinkedList是基于双向链表的数据结构。 
 2.需要频繁的查询数据,ArrayList优于LinkedList,因为LinkedList要逐个遍历。
 3.需要频繁的增加或删除数据,LinedList优于ArrayList,因为ArrayList要移动数据位置。
Map(无序,key-value形式存储,key不可重复,value可以重复)
hashMap:(链表散列”的数据结构,可理解为数组和链表的结合体)线程不安全
HashTable 线程安全 (不允许key和value为null)
Get/put所有的相关操作都是同步进行,性能较差

2、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)
答:匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现
ArrayList和linkedList的区别
Array List数组实现,查询快增删慢,由于是用数组实现 再增删是会牵扯到数组的增容
以及拷贝元素等,所有比较慢,数组可以直接按进行查找,所以比较快,
LInked List 链表实现增删快,查找慢,由于链表实现,增加时只要前一个元素记住自己就可以。删除时:让前一个元素记住后一个元素,后一个记住前一个。这样删除的效率高。查询时:需要一个一个遍历,所以效率低。
Collection 我们需要保存若干个对象的时候使用集合。
 
List
 
  如果我们需要保留存储顺序, 并且保留重复元素, 使用List.
如果查询较多, 那么使用ArrayList
如果存取较多, 那么使用LinkedList
如果需要线程安全, 那么使用Vector
 
 
Set
  如果我们不需要保留存储顺序, 并且需要去掉重复元素, 使用Set.
如果我们需要将元素排序, 那么使用TreeSet
如果我们不需要排序, 使用HashSet, HashSet比
TreeSet效率高.
如果我们需要保留存储顺序, 又要过滤重复元素, 那么使用LinkedHashSet
1.集合类
2.Conllection 有两个接口
3.List
4.Set 特点
Conllection 集合共有的功能(CRUD)
Lsit 可以放重复元素,元素的存取是有序的,
Set不可存放重复元素,元素存取时无序的。
ArrayList:实现原理:
数组实现, 查找快, 增删慢
数组为什么是查询快?因为数组的内存空间地址是连续的.
ArrayList底层维护了一个Object[] 用于存储对象,默认数组的长度是10。可以通过 new ArrayList(20)显式的指定用于存储对象的数组的长度。
当默认的或者指定的容量不够存储对象的时候,容量自动增长为原来的容量的1.5倍。
由于ArrayList是数组实现, 在增和删的时候会牵扯到数组增容, 以及拷贝元素. 所以慢。数组是可以直接按索引查找, 所以查找时较快
可以考虑,假设向数组的0角标未知添加元素,那么原来的角标位置的元素需要整体往后移,并且数组可能还要增容,一旦增容,就需要要将老数组的内容拷贝到新数组中.所以数组的增删的效率是很低的.
LinkedList:链表实现, 增删快, 查找慢
由于LinkedList:在内存中的地址不连续,需要让上一个元素记住下一个元素.所以每个元素中保存的有下一个元素的位置.虽然也有角标,但是查找的时候,需要从头往下找,显然是没有数组查找快的.但是,链表在插入新元素的时候,只需要让前一个元素记住新元素,让新元素记住下一个元素就可以了.所以插入很快.
由于链表实现, 增加时只要让前一个元素记住自己就可以, 删除时让前一个元素记住后一个元素, 后一个元素记住前一个元素. 这样的增删效率较高。
但查询时需要一个一个的遍历, 所以效率较低。
Set
Set:注重独一无二的性质,该体系集合可以知道某物是否已近存在于集合中,不会存储重复的元素
用于存储无序(存入和取出的顺序不一定相同)元素,值不能重复。
元素的哈希值是通过元素的hashcode方法 来获取的, HashSet首先判断两个元素的哈希值,如果哈希值一样,接着会比较equals方法 如果 equls结果为true ,HashSet就视为同一个元素。如果equals 为false就不是同一个元素。
List,Set,Map存取元素各有什么特点

一丶存放
List存放元素是有序,可重复
Set存放元素无序,不可重复
Map元素键值对形式存放,键无序不可重复,值可重复
二丶取出
List取出元素for循环,foreach循环,Iterator迭代器迭代
Set取出元素foreach循环,Iterator迭代器迭代
Map取出元素需转换为Set,然后进行Iterator迭代器迭代,或转换为Entry对象进行Iterator迭代器迭代
Shiro框架
Shiro是apache旗下一个开源安全框架。使用shiro就可以非常快速的完成认证、授权等功能的开发,降低系统成本。

1.3.Shiro 认证流程
1)系统调用subject的login方法将用户信息提交给SecurityManager
2)SecurityManager将认证操作委托给认证器对象Authenticator
3)Authenticator将身份信息传递给Realm。
4)Realm访问数据库获取用户信息然后对信息进行封装并返回。
5)Authenticator 对realm返回的信息进行身份认证。

Shiro授权流程
1)系统调用subject相关方法将用户信息(例如isPermitted)递交给SecurityManager
2)SecurityManager将权限检测操作委托给Authorizer对象
3)Authorizer将用户信息委托给realm.
4)Realm访问数据库获取用户权限信息并封装。
5) Authorizer对用户授权信息进行判定。

Nginx 搭建步骤
1,先找到需要安装的nginx的版本
2,复制到linux系统指定的文件夹下并解压
3,解压完后要惊醒安装,安装时可能需要依赖的jar包
4,Gzip zlib库
5,Rewrite pcre库
6,Ssl openssl库
7,安装完成后需要自己创建一个配置文件,
8,接下来可以启动 停止,重启nginx,
1.4.Nginx 调用原理
调用原理:
1.当用户通过网络地址访问资源时,如果访问的地址刚好是Nginx反向代理的地址.则该请求访问Nginx.
2.Nginx接收到用户请求后,通过内部的配置文件做路径的转换.将image.jt.com动态的转化为e:jt-upload路径.之后请求真实的磁盘资源.
3.当获取到真实的资源后,将数据再次返回给客户端.
4.最终用户得到真实的数据,用户数据回显.
数据库的索引
1,唯一索引:索引列的所有值都只能出现一次,即必须唯一。UNIQUE优尼科 (unique)唯一的
2,主键索引:PRIMARY KEY 主键(派莫瑞)
3,普通索引:这是最基本的索引类型,而且它没有唯一性之类的限制 INDEX
4,全文索引:FULLTEXT

SpringMVC 搭建流程图

Dubbo框架介绍
Dubbo是 [1]  阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 [2]  Spring框架无缝集成。
组件介绍:
消费者:获取调用接口的方法,实现其业务功能。
注册中心:负责服务协调调度。管理服务的
提供者: 负责将接口最终实现。完成业务逻辑操作。
监控: 检测程序的调用过程。哪些是消费者、提供者、IP:端口
1.1.3Dubbo调用流程

调用原理:
1.dubbo调用原理实质将微服务的思想和SOA思想进行融合。
2.当提供者启动时,将自身的信息(服务名称/IP:端口(20880))写入到注册中心。
3.当消费者启动时,首先通过注册中获取全部的服务列表信息。之后保存到本地。
4.当消费者(客户端)需要完成业务时,调用第三方中立接口中的方法即可。如果有参数则直接传参。(RPC协议)
5.提供者接收到请求时,调用接口方法的最终实现类完成业务操作。之后将结果通过RPC返回给消费者即可。
6.当消费者接收到返回数据后。进行后续业务操作。
1.5.Zookeeper
总结:Zookeeper是一个分布式的调度服务器

ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

RPC
RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。
总结:RPC名为远程过程调用协议。底层通过二进制流形成通信。通信时RPC会自动的加密。可以实现远程对象传输。 要求:对象必须序列化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值