一点一点的更新吧,正好最近也在准备面试。
一、关于redis
1. redis数据结构
字符创 String、字典 Hash、列表 List、集合 Set、有序集合 SortSet
2. 关于redis分布式锁
先使用setnx来争抢锁,抢到之后再用expire给锁加一个过期时间防止忘记锁,为防止中间出现重启等意外,可以通过set将setnx与expire合成一条指令执行
3. 关于redis集群
Redis Sentinal 着眼于高可用,在master宕机时会自动将slave提升为master,继续提供服务
Redis Cluster 着眼于扩展性,在单个redis内存不足时,使用Cluster进行分片存储
4. redis同步机制
redis可以使用主从同步,从从同步。第一次同步时主节点做一次bgsave,并同事将后续操作记录到内存buffer中,待完成后将rdb文件全量同步到复制节点,复制节点接受完成后将rdb镜像加载到内存,加载完成后再通知主节点将期间修改的操作记录同步到复制节点进行重放就完成了同步过程
5. redis实现异步队列
redis一般使用list结构作为队列(双向队列),rpush生产消息,lpop消费消息。当lpop没有消息的时候,要适当sleep一会再重试。
6. redis持久化
bgsave做镜像全量持久化,aof增量持久化。因为bgsave会耗费较长的时间,不够实时,在停机的时候会导致大量数据丢失,所以需要aof配合使用,在redis实例重启时,会使用bgsave持久化文件重新构件内存,再使用aof重放近期操作指令来实现完整恢复重启之前的状态。
二、关于Spring
1. 什么是Spring
spring 是一个轻量级java企业级应用的开源开发框架。spring解决了开发中的基础性问题,使得开发者更关注与应用开发。主要用来简化应用开发。
2. Spring有什么优点
轻量:Spring是轻量的,基础的版本只有2M
控制反转:Spring通过控制反转实现了松耦合,对象们给出他们的依赖,而不好似创建或查找依赖他们的对象。
面向切面编程(AOP):Spring 支持面向切面的编程,并且把应用业务逻辑和系统服务分开。
容器:Spring 包含并管理应用中对象的生命周期和配置。
mvc框架:Spring的web框架是个精心设计的框架,是Web框架的一个很好的替代品
事务管理:Spring提供一个持续的事务管理接口,可以扩展到上至本地事务下至全局事务(JTA)
异常处理:Spring 提供方便的API把具体的技术相关的异常转换为一致的unchecked异常
3. Spring支持的事务类型
编程式事务管理:这意味着你通过编程的方式管理事务,给你带来极大的灵活性,但是难维护
声明式事务管理:这意味着你可以将业务代码和事务管理分离,只需要注解和XML配置来管理事务
4. Spring bean的生命周期
- 实例化一个bean,也就是new
- 按照Spring上下文对实例化的bean进行配置,也就是IOC注入
- 如果实现了BeanNameAware,会调用他实现的setBeanName方法,参数为Spring配置文件的Bean的ID
- 如果这个bean实现了BeanFactoryAware接口,会调用它实现的setBeanFactory方法,传值为Spring工厂本身
- 如果这个Bean实现了ApplicationContextAware,会调用setApplicationContext方法,参数为Spring上下文
- 如果这个bean关联了BeanPostProcesser接口会调用processBeforeInitialization方法,经常被用作bean内容的更改
- 如果bean配置了init-method属性,会自动调用其配置的初始化方法
- 如果这个bean关联了BeanPostProcesser,调用processAfterInitialization方法
- dangbean不再需要时,会经过清理阶段,如果bean实现了DisposableBean,会调用其实现的distory方法
- 最后如果这个bean的Spring配置中配置了destory-method属性,会自动调用其配置的销毁方法
5. Spring 基本模块
从Spring大的功能来分:AOP、DAO(JDBC,TRANSACTION)、WEB、CORE、ORM、CONTEXT
6. Spring 有几种配置方式
XML配置
基于注解的配置
基于java的配置
7.Spring框架中的单例bean是线程安全的么
不,Spring框架中的单例不是线程安全的
8. Bean Factory和 Application contexts 有什么区别
1.Bean Factory是Spring比较原始的Factory,如XMLFactory就是一种典型的BeanFactory,原始的BeanFactory无法支持Spring的许多插件,如AOP功能,Web应用等。
2.ApplicationContext接口,是由BeanFactory接口派生而来的,因而提供BeanFactory所有功能,ApplicationContext还提供了以下的功能:提供国际化的消息访问、资源访问(如url和文件)、事件传播、载入多个上下问,使得每个上下问都专注与一个特定的层次
3.BeanFactory采用的是延迟加载形式注入bean的,即只有在使用到某个Bean时才对该Bean进行加载实例化,这样我们就不能发现一些存在的Spring的配置问题,而Application则相反,是在容器启动时一次性创建了所有的Bean
4.BeanFactory和ApplicationContext都支持BeanPostProcessor、BeanFactoryPostProcesser的使用,但两者的区别是BeanFactory需要手动注册,而ApplicationContext则是自动注册
8.ApplicationContext通常的实现是什么? - FileSystemApplicationContext:此容器从一个xml文件中加载beans的定义,xml 配置文件的全路径名称必须提供它的构造函数。
- ClassPathXmlApplicationContext:此容器也从一个xml文件中加载beans的定义,这里需要正确设置classpath 因为这个容器将在classpath里找到bean配置。
- WebXmlApplicationContext:此容器加载一个XML文件,此文件定义了一个WEB应用的所有bean。
三、关于Spring MVC
- 简单的谈一下SpringMVC的工作流程
1.用户发送请求至前端控制器DispatcherServlet
2.DispatcherServlet收到请求调用HandlerMapping处理映射器
3.处理映射器根据url找到具体的处理器,生成处理器对象及处理拦截器(如果有则生成),一并返回给DispatcherServlet
4.DispatcherServlet通过HandlerAdapter处理器适配器调用处理器
5.执行处理器(Controller,也叫后端控制器)
6.Controller执行完成返回ModelAndView
7.HandlerAdapter将Controller执行结果ModelAndView返回给DispatcherServlet
8.DispatcherServlet将ModelAndView传给ViewReslover视图解析器
9.ViewReslover解析后返回具体的view
10.DispatcherServlet对view进行渲染视图(即将模型数据填充至视图中)
11.DispatcherServlet响应用户 - SpringMVC处理请求乱码的方式
1.web.xml中添加CharaterEncodingFilter设置字符集
2.通过服务器设置字符集