JavaEE
关于面试中问到的SSM框架的工作原理:
Spring
Spring就像是整个项目中装配bean的大工厂,在配置文件中可以指定使用特定的参数去调用实体类的构造方法来实例化对象。
Spring的核心思想是IOC(控制反转),即不再需要程序员去显式地new
一个对象,而是让Spring框架帮你来完成这一切。
SpringMVC
SpringMVC在项目中拦截用户请求,它的核心Servlet即DispatcherServlet承担中介或是前台这样的职责,将用户请求通过HandlerMapping去匹配Controller,Controller就是具体对应请求所执行的操作。SpringMVC相当于SSH框架中Struts。
Mybatis
Mybatis是对JDBC的封装,它让数据库底层操作变的透明。Mybatis的操作都是围绕一个SqlSessionFactory实例展开的。Mybatis通过配置文件关联到各实体类的Mapper文件,Mapper文件中配置了每个类对数据库所需进行的sql语句映射。在每次与数据库交互时,通过SqlSessionFactory拿到一个SqlSession,再执行sql命令。
SSM框架的Web程序主要用到了三个技术:
Spring:用到了注解和自动装配,就是Spring的两个精髓IOC(反向控制)和 AOP(面向切面编程)。
SpringMVC:用到了MVC模型,将逻辑代码放到Controller层处理。
Mybatis:用到了与数据库打交道的层面,放在所有的逻辑之后,处理与数据库的CRUD相关的操作。
要完成一个功能:
1、先写实体类entity,定义对象的属性,(可以参照数据库中表的字段来设置,数据库的设计应该在所有编码开始之前)。
2、写Mapper.xml(Mybatis),其中定义你的功能,对应要对数据库进行的那些操作,比如 insert、selectAll、selectByKey、delete、update等。
3、写Mapper.java,将Mapper.xml中的操作按照id映射成Java函数。
4、写Service.java,为控制层提供服务,接受控制层的参数,完成相应的功能,并返回给控制层。
5、写Controller.java,连接页面请求和服务层,获取页面请求的参数,通过自动装配,映射不同的URL到相应的处理函数,并获取参数,对参数进行处理,之后传给服务层。
6、写JSP页面调用,请求哪些参数,需要获取什么数据。
Spring的AOP和IOC理解与实际使用
springmvc的流程 一个请求来了之后如何处理(handler链)
注解、反射、IOC理解
mybatis说一说
Springmvc 注解 流程
线程池,数据库连接池 druid
有struts2和SpringMVC的区别
Cookie和Session的区别
(1):Cookie存放在客户端,Session存放在服务端;
(2):因为Cookie存在客户端,因为造成了他不安全的特性,很容易通过分析存放在本地的Cookie来进行Cookie欺骗;
(3):Session会在一定时间保存在服务器上,因此当访问增多的时候,会占用服务器的资源;
(4):单个Cookie保存的数据不能超过4k,很多浏览器限制一个站点最多保存20个Cookie;
servlet:生命周期
aop切面的功能 和继承的关系
说说servlet中的过滤器的使用
①了解SpringMVC与Struct2区别,两者分别是多线程还是单线程的
②了解Spring IOC、AOP等。
什么是IOC机制?
依赖注入(Dependecy Injection)和控制反转(Inversion of Control)是同一个概念,具体的讲:当某个角色需要另外一个角色协助的时候,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在spring中创建被调用者的工作不再由调用者来完成,因此称为控制反转。创建被调用者的工作由spring来完成,然后注入调用者,因此也称为依赖注入。
spring以动态灵活的方式来管理对象 , 注入的两种方式,设置注入和构造注入。
设置注入的优点:直观,自然
构造注入的优点:可以在构造器中决定依赖关系的顺序。
什么是AOP?
面向切面编程(AOP)完善spring的依赖注入(DI),面向切面编程在spring中主要表现为两个方面
1.面向切面编程提供声明式事务管理
2.spring支持用户自定义的切面
面向切面编程(aop)是对面向对象编程(oop)的补充,
面向对象编程将程序分解成各个层次的对象,面向切面编程将程序运行过程分解成各个切面。
AOP从程序运行角度考虑程序的结构,提取业务处理过程的切面,oop是静态的抽象,aop是动态的抽象,
是对应用执行过程中的步骤进行抽象,,从而获得步骤之间的逻辑划分。
AOP主要功能
日志记录,性能统计,安全控制,事务处理,异常处理等等wn及扩展
AOP主要意图
将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导业务逻辑的方法中,进而改变这些行为的时候不影响业务逻辑的代码。
aop框架具有的两个特征:
1.各个步骤之间的良好隔离性
2.源代码无关性
③了解SpringMVC请求流程
SpringMVC运行原理
- 客户端请求提交到DispatcherServlet
- 由DispatcherServlet控制器查询HandlerMapping,找到并分发到指定的Controller中。
- DispatcherServlet将请求提交到Controller
- Controller调用业务逻辑处理后,返回ModelAndView
- DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图
- 视图负责将结果显示到客户端
mybatis是怎么实现映射的,它的映射原理是什么
④Hibernate与Mybatis区别
⑤Hibernate、Mybatis与JDBC区别
Spring拦截器怎么使用,Controller是单例吗
Hibernate和JDBC的优缺点
- 如何设计一个高并发的系统
① 数据库的优化,包括合理的事务隔离级别、SQL语句优化、索引的优化
② 使用缓存,尽量减少数据库 IO
③ 分布式数据库、分布式缓存
④ 服务器的负载均衡 - 你能说一下hibernate里面的inverse标签是的作用吗?
Spring中bean是单例的还是多例的?
默认是单例的,可以申明注解为多例的
数据源和连接池区别呢?
注入一个UserDaoImpl时,UserDaoImpl有几个实例,一个还是多个?
简单说一下对Redis的了解 ,Redis数据结构
Redis散列是如何实现的
Redis持久化机制
项目中Redis如何使用
什么时候适合用Redis作为主要的数据库?
redis两种持久化方式 ?
1:snapshotting 快照方式(默认)
快照方式是默认的持久化方式,这种方式将内存中的数据已快照的方式写入到二进制文件中,默认的文件名为dump.rdb。
我们可以通过修改配置文件的方式配置Redis在N秒内如果超过M个key修改就自动做快照。
2:append-only file aof方式
aof比快照方式有更好的持久化性,是由于aof时,Redis会将每一个收到的写命令通过write函数追加到文件中,当Redis重启时,会通过重新执行文件中保存的命令在内存中重建整个数据库的内容。
redis的操作是不是原子操作
用过消息队列吗?
Bean的生命周期,mybatis和hibernate对比
NIO和BIO的比较,对netty的了解
NIO的DirectByteBuffer和HeapByteBuffer,同步和异步,阻塞和非阻塞
Spring IOC,AOP,项目中怎么体现的,RestFul API的理解,框架源码中用到的设计模式
了解web应用服务器(Apache、Tomcat、Jetty等)至少了解一个基本流程与原理
了解服务器环境配置与部署(在Linux环境下)
了解数据库连接池(druid)、线程池作用等等
了解输入网址之后到服务器整个过程
了解常见加密方式(MD5、SHA-1等)
Lucene底层实现原理,它的索引结构
多终端的session问题怎么处理?cookie的安全问题怎么解决?
如何防止session被别人伪造cookie得到 ?
spring事务的传播性及级别、事务的隔离性及级别、默认隔离级别
mysql数据库连接池的驱动参数
数据库连接池如何防止失效
部署项目时tomcat 的参数
spring的几个特性
spring 的优点?
1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦
2.可以使用容易提供的众多服务,如事务管理,消息服务等
3.容器提供单例模式支持
4.容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能
5.容器提供了众多的辅助类,能加快应用的开发
6.spring对于主流的应用框架提供了集成支持,如hibernate,JPA,Struts等
7.spring属于低侵入式设计,代码的污染极低
8.独立于各种应用服务器
9.spring的DI机制降低了业务对象替换的复杂性
10.Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可以自由选择spring的部分或全部
aop事务的隔离级别和传播特性
默认隔离级别: ISOLATION_DEFAULT