zoukankan      html  css  js  c++  java
  • 面经总结:框架

    • 什么是Spring?

    答:spring的核心是一个轻量级的容器(Container),包含并管理应用程序对象的配置及生命周期。

    它是实现IoC(Inversion of Control)容器和非侵入性(No intrusive)的框架,

    并提供AOP(Aspect-oriented Programming)的实现方式,提供对持久层(Persistence)、事务(Transcation)的支持;

    提供MVC Web框架的实现,并对一些常用的企业服务API提供了一致的模型封装,是一个全方位的应用程序框架,除此之外,对现存的各种框架(Struts、JSF、hibernate、Ibatis、Webwork等),Spring也提供了与他们相整合的方案。 

    注:IOC(Inversion Of Control )控制反转;将对象的创建和依赖关系交给容器;简单说就是创建对象由以前的程序员自己new构造方法来调用,变成了交由Spring创建对象。

    • Spring核心功能?

    核心功能是IoC反转控制和AOP面向切面编程;
    AOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力。也就是说,OOP允许你定义从上到下的关系,但并不适合定义从左到右的关系。例如日志功能。日志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无关系。对于其他类型的代码,如安全性、异常处理和透明的持续性也是如此。这种散布在各处的无关的代码被称为横切(cross-cutting)代码,在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。
    而AOP技术则恰恰相反,它利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为“Aspect”,即方面。所谓“方面”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。
     
     
    • IoC介绍和优点?

    IoC(Inversion Of Control )控制反转;将对象的创建和依赖关系交给容器;简单说就是创建对象由以前的自己new构造方法来调用,变成了交由Spring创建对象。

    Spring IoC负责创建对象、管理对象(通过依赖注入)、整合对象、配置对象以及管理这些对象的生命周期。

    IOC的思想最核心的地方在于,资源不由使用资源的双方管理,而由不使用资源的第三方管理,这可以带来很多好处。第一,资源集中管理,实现资源的可配置和易管理。第二,降低了使用资源双方的依赖程度,也就是我们说的耦合度。

    • AOP介绍和优点?如何实现?

    AOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。
     
    OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力。也就是说,OOP允许你定义从上到下的关系,但并不适合定义从左到右的关系
     
    例如日志功能。日志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无关系。对于其他类型的代码,如安全性、异常处理和透明的持续性也是如此。这种散布在各处的无关的代码被称为横切(cross-cutting)代码,在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。
     
    而AOP技术则恰恰相反,它利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为“Aspect”,即方面。所谓“方面”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。
     
    AOP的实现:

    实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。

    • jdk代理和cglib代理的区别?

    JDK动态代理和CGLIB字节码生成的区别?
     * JDK动态代理只能对实现了接口的类生成代理,而不能针对类。(接口代理)
     * CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法。(类代理)

    Java动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。

    而cglib动态代理是利用asm开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。

    1、如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP 

    2、如果目标对象实现了接口,可以强制使用CGLIB实现AOP 

    3、如果目标对象没有实现了接口,必须采用CGLIB库,spring会自动在JDK动态代理和CGLIB之间转换

    如何强制使用CGLIB实现AOP?
     (1)添加CGLIB库,SPRING_HOME/cglib/*.jar
     (2)在spring配置文件中加入<aop:aspectj-autoproxy proxy-target-class="true"/>

    JDK代理是不需要以来第三方的库,只要要JDK环境就可以进行代理,它有几个要求
    * 实现InvocationHandler 
    * 使用Proxy.newProxyInstance产生代理对象
    * 被代理的对象必须要实现接口 

    • Spring的实例保存在哪?

    定义bean的方式?
    1)XML配置方式;2)注解方式;
    bean存储?
    利用java反射机制,生成bean实例,实例化的单例bean放入HashMap存储,id作为key;
     
    • Spring MVC工作流程

    以DispatcherServlet(前端控制器)为中心的工作:1.DispatcherServlet;  2.HandlerMapping;  3.HandlerAdapter  4.ViewReslover

    1)首先用户向服务器发送请求,被DS捕获;(用户->DS 请求

    2)DS收到请求,调用HandlerMapping(处理器映射器)获得Handler相关对象(处理器)(包括Handler及HandlerInterceptor),以HanderExecutionChain对象的形式返回;  (DS->HM  HM->DS H/HI/HEC

    3)DS根据获得的Handler找到合适的HandlerAdapter(处理器适配器),调用具体的Controller,Controller执行结果ModelAndView返回给DS; (DS->HA Controller;  HA->DS MAV

    4)DS将MAV传给ViewReslover(视图解析器),VR解析后返回View,DS根据Model和View渲染视图,渲染结果返回客户端; (DS->VR MAV; VR->DS View; DS->客户端 Model View

    • MyBatis的#和$的区别?

    1.属性; 2.性能;3.注入;4.表名;5.不变
    1.属性:#{para}是预编译,${para}是字符串替换;
    2.性能:预编译的sql可以重复利用;所以#{}性能较优;
    3.注入:${}是字符串替换,会存在sql注入问题;比如select * from table where name = ${smith or 1 = 1},这样无论是否匹配,都能查到结果;
    4.表名:表名必须使用${tablename},因为预编译的占位符进行变量替换后会带上单引号。而表名不能加单引号;
    5.不变:如果插入不改变的字符串,比如order by ${para} 那么就可以用${};
     
     
  • 相关阅读:
    JAVA BigDecimal 小数点处理
    对 Element UI table中数据进行二次处理
    Kettle-User Defined Java Class使用-大写转换
    多线程-同步函数
    多线程-银行分批存款
    多线程-并发卖票
    多线程-控制两个线程交替打印
    ztree-可拖拽可编辑的树
    ztree-编辑节点(树节点添加,删除,修改)
    ztree-拖拽(排序树)
  • 原文地址:https://www.cnblogs.com/buwenyuwu/p/7225445.html
Copyright © 2011-2022 走看看