redisStudy.zip
1.redis支持的数据结构
string list hash set zset(基本回答)
加分项:另外redis还对这几种数据结构做了扩展,如GEO对位置计算,hyperLogLog做统计,bitmaps:redis底层存储value值都是存储的二进制数据,redis提供bitmaps(位图)可以直接访问或修改底层存储的二进制数据
2.redis线程模型
redis是单线程实现。
3.redis 提供的持久机制
redis 支持rdb和aof两种持久机制,redis4.0后支持混合持久化。rdb是定时的持久机制,宕机有可能会丢失最后一次持久化之后存在数据丢失。aof是基于操作日志追加的持久机制。(基本回答)
加分项:
1.rdb持久化原理
原理是redis会单独创建(fork)一个与当前进程一模一样的子进程来进行持久化,
这个子线程的所有数据(变量。环境变量,程序程序计数器等)都和原进程一模一样,会先将数据写入到一个临时文件中,
待持久化结束了,再用这个临时文件替换上次持久化好的文件
2.他什么时候fork子进程,或者什么时候触发rdb持久化机制
shutdown时,如果没有开启aof,会触发
配置文件中默认的快照配置
执行命令save或者bgsave save是只管保存,其他不管,全部阻塞 bgsave: redis会在后台异步进行快照操作,同时可以响应客户端的请求,但是在调用fork函数时是阻塞的,很快,可以忽略不计
执行flushall命令 但是里面是空的,无意义
3.aof原理?
原理是将Reids的操作日志以追加的方式写入文件,读操作是不记录的
2.触发机制(根据配置文件配置项)
no:表示等操作系统进行数据缓存同步到磁盘(快,持久化没保证)
always:同步持久化,每次发生数据变更时,立即记录到磁盘(慢,安全)
everysec:表示每秒同步一次(默认值,很快,但可能会丢失一秒以内的数据)
以下问题都是基本回答:
4.redis支持事务吗
redis可以说是半支持事务(假事务),提供了一些在一定程度上支持线程安全和事务的命令。例如:multi/exec watch inc等。但是redis的事务并不支持回滚,即可以两个命令可以同时提交执行,但是如果有失败,成功的也不会回滚
5.你们公司使用的是什么集群模式
看你写的项目经验,如果你们公司数据量特别大,公司用缓存牛逼,就说Rediscluster,小公司可以说哨兵集群
1.哨兵模式
基本回答:哨兵主要就是启动哨兵(redis特殊)节点,对主节点进行监控,如果半数以上发现ping主节点不通了,认为主节点挂了,则进行故障转移,就是选出一个从节点代替主节点
2.Rediscluster集群模式
基本回答:Rediscluster是一个高可用集群,它基于分片(对key进行crc16,然后对16384取余)的原理,可以把他理解为是由多组哨兵集群组成,但是它不依赖哨兵
6.缓存穿透
缓存穿透指的是使用不存在的key进行大量的高并发查询,这导致缓存无法命中,每次请求都要穿透到后端数据库系统进行查询,数据库压力过大。
常用解决方案:将空值缓存起来。
其他解决方案:使用布隆过滤器(guava 19开始已支持布隆过滤器) 备注:如果你可以理解太白老师讲的基于redis位图自己实现的布隆过滤器,可以说说,更加分
7.缓存击穿
缓存击穿是指缓存中没有但数据库中有的数据(一般是缓存时间到期),这时由于并发用户特别多,同时读缓存没读到数据,又同时去数据库去取数据,引起数据库压力瞬间增大,造成过大压力
解决方案:1.互斥锁 如果项目不会多部署则可以使用jvm锁,如果会多部署则使用分布式锁
8.缓存雪崩
缓存雪崩指缓存服务器重启或者大量缓存集中在某一个时间段内失效
常用解决办法:
1.主要就是要搭建高可用集群,保证机器的高可用。
2.对不同的数据使用不同的失效时间,甚至对相同的数据、不同的请求使用不同的失效时间。
spring.doc
1 Spring基本特征 6
2 Spring的组成 6
2.1 Spring的jar包 6
2.2 Spring配置文件 7
2.3 Spring API 8
3 Spring基本功能详解 8
3.1 SpringIOC 8
3.2别名Alias 11
别名拓展: 11
3.3 Spring容器内部对象的创建 12
Spring容器内部对象创建拓展: 12
3.3.1使用类构造器实例化(默认无参数) 14
3.3.2使用静态工厂方法实例化(简单工厂模式) 14
3.3.3初始化(创建)bean时机 15
Lazy-init初始化bean的时机拓展: 15
3.4 Bean的作用域 16
Scope单例多例作用域拓展: 16
3.4.1 singleton(默认值) 16
3.4.2 prototype 17
3.4.3 Request 17
3.4.4 Session 18
3.4.5 Global session 18
3.4.6 指定Bean的初始化方法和销毁方法 18
Bean的初始化和销毁拓展: 18
Spring的IOC总结: 20
3.5 依赖注入(DI) 20
3.5.1 使用构造器注入 20
3.5.2 使用属性setting方法进行注入 21
3.5.3 装配list集合 22
3.5.4 装配set集合 22
3.5.5 装配map 22
3.5.6 装配Properties 23
3.6 注解注入 23
注解注入拓展: 23
3.6.1 @Autowired 26
3.6.2 @Qualifier 27
3.6.3 @Resource 27
3.6.4 @PostConstruct 28
3.6.5 @PreDestroy 28
注解注入拓展: 28
3.7扫描注入 30
注解扫描拓展: 32
Mvc用注解写: 34
Spring容器IOC和di的整个启动过程: 38
3.8 spring中的继承 38
拓展spring为类中的属性赋值: 40
小结: 47
面向接口编程: 47
4 面向切面编程 52
4.1 代理模式 52
代理模式拓展: 52
4.1.1 JDK动态代理 58
JDK动态代理拓展: 59
4.1.2 CGLIB做代理 66
CGLIB动态代理拓展: 68
4.1.3 Spring的动态代理 71
4.2 AOP编程 71
4.2.1概念: 71
SpringAOP概念拓展: 73
之前实现了目标方法的动态调用,现在来实现切面的动态调用。 74
4.2.2 AOP实现的两种模式 78
4.2.2.1 xml形式 78
XML形式拓展: 81
异常通知处理例子: 91
不用spring异常通知,另一种处理异常 96
4.2.2.2Aop注解形式(了解) 99
注解注入拓展: 103
5 Spring数据库 106
5.1 Spring+JDBC 106
5.1.1 Jdbc编程特点 106
5.1.2引入DataSource 106
5.1.3 核心类JdbcTemplate 106
5.1.4 使用JdbcTemplate 106
5.1.5 继承JdbcDaoSupport 107
5.1.6 使用properties文件 107
5.1.7 RowMapper的使用 107
拓展: 108
DataSource注入的三种方式: 108
5.1.8声明式事务管理 116
5.1.8.1Spring的事务管理器 117
5.1.8.2Spring事务的传播属性 117
5.1.8.3Spring事务的隔离级别 117
拓展: 118
5.1.8.4以XML配置的 形式 119
拓展: 120
5.1.8.5以注解方式配置 125
拓展: 127
5.1.9使用CGLIB以XML形式配置事务 130
5.2 Spring+Hibernate 131
5.2.1 HibernateTemplate模板 131
5.2.2 声明式事务 131
配置XML文件 131
拓展: 132
注解形式: 137
拓展: 138
6 Struts2+spring+hibernate 141
6.1 需要添加的jar包 141
6.2 Spring融合web服务器 141
6.3 struts.xml文件 143
6.4 OpenInSessionView 143
拓展: 144
实例: 146
Hibernate学习总结
学习成长路,Hibernate总结:
1.Hibernate入门优缺点、
2.Hibernate的操作CRUD、
3.主键生成机制、
4.持久化对象的状态、
5.映射一对多关联关系、
6.深入session、
7.懒加载、
8.Hibernate检索策略(fetch抓取策略)、
9.二级缓存、
10.Hbernate的检索方式(HQL语句)
ie chrome firefox 兼容
Javascript中如何处理浏览器兼容问题