网站如何做视频教程,建设一个小游戏网站,网站开发方向行业现状,深圳商城网站设计制作目录 63.Spring中都应用了哪些设计模式#xff1f;
64.请举例说明如何在Spring中注入一个Java Collection#xff1f;
65.说一下都有哪些基本理念#xff1f;
67.Spring Bean的生命周期#xff1f;
68.说说Spring AOP的实现原理#xff1f;
69.Spring中事务的实现方…目录 63.Spring中都应用了哪些设计模式
64.请举例说明如何在Spring中注入一个Java Collection
65.说一下都有哪些基本理念
67.Spring Bean的生命周期
68.说说Spring AOP的实现原理
69.Spring中事务的实现方式
70.说说Spring事务的底层原理
71.Spring依赖注入有哪几种方式
72.如何防止表单重复提交
73.说一下Spring MVC的运行流程
74.SpringMVC启动流程
75.什么是ORM框架
76.mybatis中的#和${}的区别是什么
77.Mybatis是否支持延迟加载延迟加载的原理是什么
78.说一下mybatis的一级缓存和二级缓存
79.mybatis有哪些执行器Executor)?
80.Mybatis和hibernate的区别有哪些
81.Mybatis如何根据多个id进行查询 63.Spring中都应用了哪些设计模式 1.简单工厂模式简单工厂模式的本质就是一个工厂类根据传入的参数动态的决定实例化哪个类。Spring中的BeanFactory就是简单工厂模式的体现根据传入一个唯一的标识来获得bean对象。
2.工厂方法模式应用程序将对象的创建以及初始化职责交给工厂对象工厂Bean。定义工厂方法然后通过config.xml配置文件将其纳入Spring容器来管理需要通过factory menthod指定静态方法名称。
3.单例模式Spring用的是双重判断加锁的单例模式。
4.代理模式Spring的AOP中使用的Advice通知来增强被代理类的功能。Spring实现AOP功能的原理就是代理模式①JDK动态代理②CGlib字节码生成技术代理。对类进行方法级别的切面增强。
5.装饰器模式动态的给一个对象添加一些额外的功能。Spring的ApplicationContext中配置所有的DataSource。这些DataSource可能是不同的数据库然后SessionFactory根据用户的每次请求将DataSource设置成不同的数据源以达到切换数据源的目的。在Spring中有两种表现 一种是类名中含有Wrapper 另一种是类名中含有Decorator
6.观察者模式定义对象间的一对多的关系当一个对象的状态发生改变时所有依赖于他的对象都得到通知并自动更新。Spring中观察者模式一般用在listener的实现。
7.策略模式策略模式是行为性模式调用不同的方法适应行为的变化强调父类的调用子类的特性。getHandler是HandlerMapping接口中唯一方法用于根据请求找到匹配的处理器。
8.模板方法模式Spring JdbcTemplate的query方法总体结构是一个模板方法和回调函数query方法中调用的execute时一个模板方法而预期的回调doInStatement(Statement state)方法也是一个模板方法。
64.请举例说明如何在Spring中注入一个Java Collection 1.Spring注入有四种方式 set注入构造器注入基于注解的注入xml配置文件注入 2.可以注入的Java collection集合类如下 listsetmapprops:该标签支持注入键和值都是字符串类型的键值对。 list和set都使用value标签map使用entry标签props使用prop标签。
65.说一下都有哪些基本理念 1.横切关注点
对哪些方法进行拦截拦截后怎么处理这些关注点称为横切关注点
2.Aspect切面通常是一个类里面可以定义切入点和通知。
3.JointPoint连接点程序执行过程中明确的点一般是方法的调用被拦截到的点。因为Spring只支持方法类型的连接点所以在Spring中连接点指的就是被拦截到的方法实际上连接点还可以是字段或者构造器。
4.Advice通知AOP在特定的切入点上执行的增强处理有before前置after后置afterReturning(最终afterThrowing异常around环绕。
5.Pointcut(切入点带有通知的连接点在程序中主要体现在书写切入点表达式。
6.weave织入将切面应用到目标对象并导致代理对象创建的过程。
7.introduction引入在不修改代码的前提下引入可以在运行期为类动态地增加一些方法或者字段。
8.AOP代理AOP proxyAOP框架创建的对象代理就是目标对象的加强。Spring中的AOP代理可以是JDK动态代理也可以是CGlib代理前者基于接口后者基于子类。
9.目标对象Target Object包含连接点的对象也被称作被通知或者被代理对象POJO。
66.说一下AOP的使用场景
1.Authentication权限
2.Caching缓存
3.Context passing内容传递
4.Error handling 错误处理
5.Lazy loading懒加载
6.Debugging调试
7.loggingtracingprofiling and monitor记录跟踪优化校准
8.Performance optimization性能优化
9.Persistence持久化
10.Resource pooling资源池
11.Synchronization同步
12.Transaction事务
67.Spring Bean的生命周期
Spring bean的生命周期简单易懂。在一个bean实例被初始化时需要执行一系列的初始化操作以达到可用的状态。同样的当一个bean不在被调用时需要进行相关的析构操作并从bean容器中移除。
Spring Bean Factory负责管理在Spring容器中被创建的Bean的生命周期。
bean的生命周期由两组回调call back方法组成初始化之后调用的回调方法。
销毁之前调用的回调方法。
Spring框架提供了以下四种方式来管理bean的生命周期事件。
initializingBean和DisposableBean回调接口
针对特殊行为的其他Aware接口
Bean配置文件中的Custom init方法和destroy方法
PostConstruct和PreDestroy注解方式
68.说说Spring AOP的实现原理 Spring AOP中的动态代理主要有两种方式JDK动态代理和CGlib动态代理。JDK动态代理通过反射来接收被代理的类并且要求被代理的类必须实现一个接口。JDK动态代理的核心是InvocationHandler接口和Proxy类。 如果目标类没有实现接口那么Spring AOP会选择使用CGlib来动态代理目标类。CGlibCode Generation Library是一个代码生成的类库可以在运行时动态的生成某个类的子类注意CGlib是通过继承的方式做的动态代理因此如果某个类被标记为final那么他是无法使用CGlib做动态代理的。
69.Spring中事务的实现方式
1.编码方式 所谓编程式事务指的是通过编程方式实现事务即类似于JDBC编程实现事务管理。
2.声明式事务管理方式
声明式管理又有两种实现方式基于XML配置文件的方式另一个是在业务方法上进行Transaction注解将事务规则应用到业务逻辑中。
70.说说Spring事务的底层原理 1.划分处理单元
IOC由于Spring解决的问题是对单个数据库进行局部事务处理单元。并且将对事务的各种配置放到了IOC容器中设置事务处理管理器设置事务的传播特性以及隔离机制。
2.AOP拦截需要进行事务处理的类Spring事务处理模块是通过AOP功能来实现声明式事务处理的具体操作比如事务实行的配置和读取实物对象的抽象用TransactionProxyFactoryBean接口来使用AOP功能生成proxy代理对象通过TransactionInterceptor完成对代理方法的拦截将事务处理的功能编织到拦截的方法中。读取IOC容器事务配置属性转化为Spring事务处理需要的内部数据结构TransactionAttributeSourceAdvisor),转化为TransactionAttribute表示的数据对象。
3.对事物处理的实现事务的生成提交回滚挂起Spring委托给具体的事务处理器实现。实现了一个抽象和适配。适配的具体事务处理器DataSource数据源支持hibernate数据源事务处理支持JDO数据源事务处理支持JPAJTA数据源事务处理支持。这些支持都是通过设计PlatformTransactionManager,AbtractPlatforTransaction一系列事务处理的支持。为常用数据源支持提供了一系列的TransactionManager。
4.结合PlatformTransactionManager实现了TransactionInterception接口让其与TransactionProxyFactoryBean结合起来形成一个Spring声明式事务处理的设计体系。
71.Spring依赖注入有哪几种方式 1.构造器注入 2.setter方法注入 3.静态工厂注入 4.实例工厂注入
72.如何防止表单重复提交
1.通过JavaScript屏蔽提交按钮不推荐
2.给数据库添加唯一键约束
3.利用Session防止表单重复提交推荐
4.使用AOP自定义切入实现 73.说一下Spring MVC的运行流程 1.SpringMVC将所有的请求都提交给DispatcherServlet他会委托应用系统的其他模块负责对请求进行真正的处理工作。
2.DispatcherServlet查询到一个或者多个HandlerMapping找到处理请求的Controller。
3.DispatcherServlet请求提交到目标Controller
4.Controller进行业务逻辑处理后会返回一个ModelAndView;
5.Dispathcher查询一个或者多个ViewResolver视图解析器找到ModelAndView对象指定的视图对象。
6.视图对象负责渲染返回给客户端。
74.SpringMVC启动流程
1.web.xml文件中给Spring MVC的servlet配置了load on startup所以程序启动的时候会初始化SpringMVC
2.然后在HttpServletBean中配置的contextConfigLocation属性设置到Servlet中
3.接着在FrameworkServlet中创建了WebApplicationContext
4.DispatcherServlet根据contextConfigLocation配置的classpath下的xml文件初始化SpringMVC中的各组件。
75.什么是ORM框架 ORMobject relation mapping对象关系映射。是为了解决面向对象与关系型数据库存在的不匹配问题。
ORM框架的优点 1.开发效率跟高 2.数据访问更抽象轻便 3.支持面向对象封装
76.mybatis中的#和${}的区别是什么 1.#{}带引号${}不带引号 2.#{}可以防止SQL注入 3.${}常用于数据库表名order by子句 一般能用#{}就不要使用${}
77.Mybatis是否支持延迟加载延迟加载的原理是什么 mybatis是否支持延迟加载延迟加载其实就是讲数据加载时机推迟比如推迟嵌套查询的时机。延迟加载可以实现先查询主表按需实时做关联查询返回关联表结果集一定程度上提高了效率。mybatis仅支持关联对象association和关联集合对象collection的延迟加载associatation是一对一collection是一对多查询在mybatis配置文件中可以配置lazyloadingEnabletrue/false。 延迟加载的原理是什么使用CGlib为目标对象建立代理对象当调用目标对象的方法时进入拦截器方法。 比如调用a.getB().getName()拦截器方法invoke发现a.getB()为null会单独发送事先准备好的查询关联B对象的SQL语句把B查询出来然后调用a.setB(b),也是a的对象的属性b就有值了然后调用getName(),这就是延迟加载的原理。
78.说一下mybatis的一级缓存和二级缓存 一级缓存是session级别的缓存默认开启当查询一次数据库时对查询结果进行缓存如果之后的查询在一级缓存中存在则无需再访问数据库。 二级缓存是sessionFactory级别的缓存需要配置才会开启。当进行SQL语句查询时先查看一级缓存如果不存在访问二级缓存降低数据库访问压力。
79.mybatis有哪些执行器Executor)?
1.mybatis有三种基本的Excutor执行器 1.1SimpleExecutor,每执行一次update或者select就开启一个Statement对象用完立刻关闭Statement。 1.2PauseEcecutor,执行update或者select以sql作为key查找Statement对象存在就使用不存在就创建用完后不关闭Statement对象而且放置于Map内供下一次使用。简言之就是重复使用Statement对象。 1.3BatchExecutor,执行update将所有SQL通过addBatch()都添加到批处理中等待统一执行executeBatch().他缓存了多个Statement对象每个Statement对象都是addBatch完毕后等待逐一executeBatch()批处理。与JDBC批处理相同。 2.作用范围Executor的这些特点都严格限制在SqlSession生命周期范围内。 3.Mybatis中如何指定使用哪一种Excutor执行器在mybatis的配置文件中可以指定默认的ExcutorType执行器类型也可以手动给DefaultSqlSessionFactory的创建SqlSession的方法传递ExecutorType类型参数。
80.Mybatis和hibernate的区别有哪些
1.两者最大的区别
针对简单逻辑都有对应的代码生成工具可以生成简单基本的dao层方法针对高级查询Mybatis要手动编写SQL语句和resultMap而hibernate有良好的映射机制
2.开发难度对比
hibernatemybatis
3.日志统计
hibernate有自己的日志统计功能而Mybatis需要借助log4j来记录日志。
4.数据库扩展比较
hibernatemybatis
5.缓存机制比较因为hibernate对查询对象有良好的管理机制用户无需关心sql,所以使用二级缓存如果出现脏数据系统会报错。而Mybatis如果不能获取最新数据应该避免缓存的使用脏数据的出现会给系统的正常运行带来很大的隐患。
6.如何选择Mybatis需要编写SQL和映射规则工作量大于hibernateMybatis支持的工具也有限不能像hibernate那样有许多插件可以帮助生成映射代码和关联关系对于性能要求不太苛刻的系统比如管理系统ERP等推荐hibernate对于性能要求高响应快灵活的系统比如电商系统推荐使用Mybatis
81.Mybatis如何根据多个id进行查询 根据多个id进行查询的示例代码如下所示 Page getUserListByIds(Param(ids) List ids); select * from student where id in #{userid}