spring框架:应用于全栈的轻量级开源框架
以ioc和aop为核心
本质是管理软件中的对象,即创建对象和维护对象之间的关系
spring优势:1,方便解耦,简化开发
2,轻量的
3,通过控制反转实现松耦合
4,支持面向切面编程,把业务逻辑和系统服务分开
5,集成各种优秀的框架
6,spring包含并管理应用中的对象的生命周期和方法.
ioc;是spring中提供的一种控制反转机制,目的是将我们项目中的对象的依赖管理交给spring去实现,这样很好的是实现对象关系的解耦,提高程序的可扩展性.
aop:是一种设计思想,是面向切面编程,是面向对象编程的一种补充和完善,通过预编译方式和运行时的动态代理方法,实现不修改源代码情况下给程序统一添加额外功能的技术.
aop底层实现:jdk动态代理,只支持接口注入
cglib 可支持普通类注入 默认为cglib代理
spring aop五种通知:
前置通知(before): 在方法执行之前通知。
后置通知(afterretuming): 在方法执行之后通知。
异常通知(AfterThrowing): 在方法出现异常时通知。
环绕通知(Around): 全方位控制,可以在其中实现前三种通知。
返回通知(AfterReturning): 是在方法正常结束之后执行的通知,可以访问方法返回值.
spring di:是spring中依赖注入机制.
ioc的实现需要这种机制
spring bean容器中ioc思想是一种目标,di是是实现手段
spring中引用的设计模式:1,代理模式 aop较多
2,单例模式
3工厂模式
spring bean容器:创建 管理bean对象的容器
spring bean容器和spring ioc容器:spring ioc本质就是spring bean容器
spring bean容器最核心的一个机制是ioc机制,又称ioc容器
作用域:@scope
延迟加载(懒加载):@lazy
spring 工厂底层构建bean对象借助反射机制,当对象不使用了要释放资源,目的是为了防止内存泄漏.
内存泄漏:对象已经不使用了,但占着内存,不是内存溢出,是内存溢出的导火索,直接导致系统崩溃.
spring 的事务管理:事务就是对一系列的数据库操作进行统一的提交和回滚,要成功都成功,要失败都失败,防止出现脏数据.
spring 有自己的事务管理:使用事务管理Transaction Manager
1,编程式事务管理
2,声明式事务管理(和应用程序关联少)
mybatis: 优秀的持久层框架
对jdbc操作数据库的过程进行封装
简化jdbc代码,解决jdbc对结果集封装为Java对象的麻烦.
mybatis优势:对jdbc封装,简化jdbc代码
自身支持连接池,提高程序效率
将sql配置在mapper文件中 ,修改sql 值修改配置文件类不需要重新编译
#{} ${}:#{} 预编译处理
${} 字符串替换
#{} 预编译处理 相当于jdbc中的问号,会进行转义,参数值进行站位
${} 字符串替换 为sql片段进行占位,不会进行转义,会引发sql注
spring mvc: 是基于一个mvc的web框架
是spring的一个模块,是sprig的子容器
前端控制器:disatcherservlet 用于分发请求 ,简单方便.
三大组件:处理器映射器
处理器适配器
视图解析器
处理流程:1,客户端发出一个http请求交给web服务器,web服务器对http请求进行解析.如匹配前端控制器的请求映射路径web容器将请求交给前端控制器 dispacherservlet
2,收到请求后根据请求的信息即处理映器的配置找到处理请求的处理器
3,由处理器适配器对其仅从集体的调用
4,对数据处理完返回一个对象给前端控制器.
5,通过视图解析器将对象转化为视图
6,dispather通过model解析出参数完整的返回给客户端
shiro框架:是apache旗下开源安全框架,将软件系统的安全认证相关功能抽取出来,实现用户身份认证,权限授权,加密,会话管理等功能,组成一个通用的安全认证框架.
三个主要理念:subiect 主体对象
securitmanager 安全管理器
realm 领域对象
认证流程:系统调用subject的login方法将用户信息提交给安全管理器,安全管理器将认证操作委托给认证器对象,认证器对象将用户输入的身份信息传递给realm,realm访问数据库获取用户信息对其封装返回,认证器对象对realm返回的信息进行身份认证.
不使用shiro完成认证: filter intercetor
授权: 不使用shiro完成授权:intercetor aop
授权流程:1,系统调用subject相关方法将用户信息递交给securitymanager
2,securitymanager将权限检测委托给authorizer对象
3,authorizer将用户信息委托给人realm
4,realm当问数据库获取用户信息权限的封装
5,authorizer对用户授权信息进行判定.
redis:开源的内存中的数据结构存储系统,可以用作数据库,缓存和消息中间件.
基于c语言开发,运行时在内存中,运行速度很快.
五种数据类型:字符串 strings 散列:hashes 列表: lists 集合 : sets 有序集合:sortedsets
两种持久化:rdb aof
如果使用时允许丢失部分主句(少量的)则使用rdb. rdb效率高,redis默认策略
如果不允许丢失数据,则采用aof,安全性高 效率低
六种淘汰策略:1. volatile-lru:从设置过期时间的数据集(server.db[i].expires)中挑选出最近最少使用的数据淘汰。
没有设置过期时间的key不会被淘汰,这样就可以在增加内存空间的同时保证需要持久化的数据不
会丢失。
2. volatile-ttl:除了淘汰机制采用LRU,策略基本上与volatile-lru相似,从设置过期时间的数据集
(server.db[i].expires)中挑选将要过期的数据淘汰,ttl值越大越优先被淘汰。
3. volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰。当内存
达到限制无法写入非过期时间的数据集时,可以通过该淘汰策略在主键空间中随机移除某个key。
4. allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰,该策略要淘汰的key面
向的是全体key集合,而非过期的key集合。
5. allkeys-random:从数据集(server.db[i].dict)中选择任意数据淘汰。
6. no-enviction(默认):禁止驱逐数据,也就是当内存不足以容纳新入数据时,新写入操作就会报错,请
求可以继续进行,线上任务也不能持续进行,采用no-enviction策略可以保证数据不被丢失,这也
是系统默认的一种淘汰策略。
redis为什么速度快?
1,完全基于内存,绝大部分请求是纯粹的内存操作
2,数据结构简单
3,采用单线程
4,使用i/o复用模型,非阻塞zo
5,使用底层模型不同,redis直接自己构建vm机制.
jdk1.8新特性:lambda表达式:允许把函数作为一个方法的参数
函数式接口
方法引用:将已存在的方法作为变量来传递使用
接口默认方法和静态方法
optional Optional 类主要解决的问题是臭名昭著的空指针异常(NullPointerException)
streams Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。 Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。
这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。
元素流在管道中经过中间操作(intermediate operation)的处理,最后由最终操作(terminal operation)得到前面处理的结果。
并行数组
线程创建的4种方式:1,继承thread类
2,实现runable接口
3,使用callable接口实现
4,使用线程池
jdbc连接数据库的步骤:1,注册驱动
2,获取数据库连接
3,获取传输器
4,发送sql到服务器执行并返回执行结果
5,处理结果
6,释放资源
jsp四大域:request
page context page域
session session域
application context域
集合:collection 分为 list集合和set集合
list集合包含:arraylist 和 linkedlist
set集合包含:hashset(底层维护哈希表 散列表) 和 treeset
list:元素都有索引 重复的 有序的
set: 没有小标 不能重复,无需 通常给元素去重
arraylist:查询快 增删效率低 初容为10
特点:底层是数组,适和查询,不适合增删
底层为数组自动扩容, 1.5倍扩容
linkedlist:查询慢 增删数据效率快
特点:底层维护链表结构,首位两节点操作高
map分为hashmap和treemap 无序 k v 键值对 有映射关系
hashmap的数据结构:数组+链表+红黑树
集合里哪些线程是安全的?
vector statck hashtable enumeration
集合里哪些线程是不安全的?
hashmap treemap arraylist linkedlist hashset treeset