JAVA框架面试题汇总.pdf
JAVAJAVA框架面试题汇总(总1 11 1页)-CAL-FENGHAI.-(YICAI)-Company One 1 CAL本页仅作为文档封面,使用请直接删除1. Spr ingMVC Framework的理解:1、它是基于组件技术的.全部的应用对象,无论控制器和视图,还是业务对象之 类的都是 java 组件。并且和 Spr i ng 提供的其他基础结构紧密集成2、不依赖于 Servlet API (标虽是如此,但是在实现的时候确实是依赖于Serv I et 的)3、可以任意使用各种视图技术,而不仅仅局限于 JSP4、支持各种请求资源的映射策略5、它应是易于扩展的2.简单的谈一下Spr i ngMVC的工作流程?Dispute he r$ervletDispute he r$ervlet中央处sasa a a返回H3fWlerH3fWlerecvttcnChainecvttcnChainiuiu响应用戶9.9.返回viewviewMidledmceptef(it3?ST=1ft3)Midledmceptef(it3?ST=1ft3)俺qftLqftL理銀对棗)1 18 8、视凰H Hj j4 過赢瀬适配器HandierHandier(CnControlkr)(CnControlkr)6.6.返!3 3NtoddArxViewNtoddArxViewviewviewviewResolverviewResolvernst?nst?析备ModolAndvvModolAndvvHandterAdapterHandterAdapterl&SSlliKS)l&SSlliKS)流程1、用户发送请求至前端控制器 Di spatcherServlet2、 Di spatcherServlet 收到请求调用 Hand I erMapp i ng 处理器映射器。3、处理器映射器找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给 Di spatcherServ leto4、D i spatcherServ I et 调用 Hand I erAdapter 处理器适配器5、Hand I erAdapter 经过适配调用具体的处理器(Control I er,也叫后端控制器)。6 Contro I I er 执行完成返回 Model AndView7 Hand I erAdapter 将 contro I I er 执行结果 Mode I AndV i ew 返回给D i spatcherServIet8、Di spatcherServ let 将 Mode I AndV i ew 传给 V i ewRes I over 视图解析器9、 ViewReslover解析后返回具体 View10、 Di spatcherServlet 根据 View进行渲染视图(即将模型数据填充至视图 中)。11 v DispatcherServlet 响应用户3. 如何解决 POST 请求中文乱码问题,GET 的又如何处理呢?在 web. xml中加入:. CharacterEncodingFi1ter. orgspringframework web filter CharacterEncodingFi11erinit-parampdrain - nameencoding/pai?am - nameutf-8.CharacterEncodingFi1terurl-patte:rn/*/url - pattern/filter-mapping以上可以解决 post请求乱码问题。对于 get 请求中文参数出现乱码解决方法有 两个:修改 tomcat 配置文件添加编码与工程编码一致,如下:ConnectorURIEncoding 二utf-8 connectionTimeout二20000 port 二8080 protocol 二HTTP/1. 1 r edirectPort二84437另外一种方法对参数进行重新编码:String userName= new Stringrequest getParamteruserName)getBytes1IS08839-IS08859-1是 tomcat 默认编码,需要将 tomcat编码后的内容按 utf-8 编码4. SpringMVC 与 Struts2 的主要区别?1、springmvc的入口是一个 servlet 即前端控制器,而 struts2入口是一个 filter 过虑器。2、springmvc是基于方法开发,传递参数是通过方法形参,可以设讣为单例或多例(建议单例),struts2 是垄于类开发,传递参数是通过类的属性,只能设 计为多例。3、Struts采用值栈存储请求和响应的数据,通过 OGNL存取数据,springmvc 通过参数解析器是将 request 对象内容进行解析成方法形参,将响应数据和页 面封装成 ModelAndView 对象,最后乂将模型数据通过 request 对象传输到页 面。Jsp视图解析器默认使用 JStlo5. SpringMVC接受 Form表单参数的几种形式?1、使用 HttpServletRequest 获取2、Spring会自动将表单参数注入到方法参数,和表单的 name属性保持一致。3、自动注入 Bean属性6. SpringMVC的 Controller 向页面传值的几种方式?1、使用 HttpServletRequest 和 HttpSession 调用 setAttribute (),就和Servlet 中一样2、使用 ModelAndView 对象3、使用 ModelMap对象4、使用 Model At tribute 注解7. Spring MVC contorller 跳转到另一个 controller 并传值1、forward 请求转发2、redirect 重定向 RedirectAttributes类似于超链接传参1、讲下 SpringMvc的核心入口类是什么,Strutsl, Struts2 的分别是什么SpringMvc 的是 DispatchServletStrutsl 的是 ActionServletStruts2 的是 StrutsPrepareAndExecuteFilter2、SpringMvc的控制器是不是单例模式,如果是,有什么问题,怎么解决 是单例模式,所以在多线程访问的时候有线程安全问题,不要用同步,会影响性能 的,1.不要在 controller中龙义成员变量。2.万一必须要左义一个非静态成员变疑时候,则通过注解Scope(prototype),将其设宜为多例模式。参考:3、SpingMvc中的控制器的注解一般用那个,有没有别的注解可以替代 一般用SConntroller 注解,表示是表现层,不能用用别的注解代替。4、0RequestMapping 注解用在类上面有什么作用用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。5、怎么样把某个请求映射到特定的方法上面直接在方法上面加上注解RequestMapping,并且在这个注解里面写上要拦截的 路径6、如果在拦截请求中,我想拦截 get 方式提交的方法,怎么配置可以在RequestMapping 注解里面加上 method 二 RequestMethod. GET7、如果在拦截请求中,我想拦截提交参数中包含” type 二 test”字符串,怎么配置可以在 Re que st Mapping 注解里面加上 params 二” type 二 test8、我想在拦截的方法里面得到从前台传入的参数,怎么得到直接在形参里面声明这个参数就可以,但必须名字和传过来的参数一样9、如果前台有很多个参数传入,并且这些参数都是一个对象的,那么怎么样快 速得到这个对象直接在方法中声明这个对象,SpringMvc 就自动会把属性赋值到这个对象里面10、 怎么样在方法里面得到 Request,或者 Session直接在方法的形参中声明 request, SpringMvc就自动把 request对象传入11、 SpringMvc 中函数的返回值是什么.返回值可以有很多类型,有 String, ModelAndView, |般用 String 比较好12、SpringMvc 怎么处理返回值的SpringMvc根据配置文件中 Interna 1 ResourceViewResolver 的前缀和后缀,用 前缀+返回值+后缀组成完整的返回值13、SpringMVC怎么样设定重定向和转发的在返回值前面加” forward:w就可以让结果转发,譬如”forward: user. do?name=method4n在返回值前面加redirect:” 就可以让返 回值重定向,譬如” redirect:”14、SpringMvc 用什么对象从后台向前台传递数据的通过 ModelMap对象,可以在这个对象里面用 put 方法,把对象加到里面,前台就可以通过 el 表达式拿到15、SpringMvc 中有个类把视图和数据都合并的一起的,叫什么叫 ModelAndView16、怎么样把 ModelMap 里面的数据放入 Session里面可以在类上面加上SessionAttributes 注解,里面包含的字符笊就是要放入 session里面的 key17、SpringMvc 怎么和 AJAX相互调用的通过 Jackson 框架就可以把 Java 里面的对象直接转化成 Js可以识别的 Json对 象,具体步骤如下1. 加 1 入 Jackson, jar2. 在配置文件中配置 json 的映射3. 在接受 Ajax 方法里面可以直接返回 Object, List等,但方法前面要加上ResponseBody 注解18、当一个方法向 AJAX返回特殊对象,譬如 Object, List 等,需要做什么处理 要加上ResponseBody 注解 -Spring-1 1、SpringFramworkSpringFramwork的理解?Spring主要专注于如何利用 classes对象和服务去组成一个企业级应用, 通过规范的方式,将各种不同的控件整合成一个完整的应用。Spring 中使用了 很多被实践证明的最佳实践和设计模式,并且进行了编码实现。在 Spring Framework之上可以构建出优秀的、可维护的应用。Spring框架包括许多特性,六个模块可以概括 Spring的功能:DAODAO1 1RMRM WebWeb1 1JEEJEEJU*JU*JUSJUS 心SJAMVSJAMV 氏 1 1二 1 1卜壬 1 1益 冒A0A0J JCoreCorehatoCMforwhatoCMforwCom封装包是框架的最呈础部分,提供 IoC和依赖注入特性。这里的基础 概念是 BeanFactory,它提供对 Factory 模式的经典实现来消除对程序性单例模 式的需要,并真正地允许你从程序逻辑中分离岀依赖关系和配置。DAO提供了 JDBC 的抽象层,它可消除冗长的 JDBC编码和解析数据库厂 商特有的错误代码。并且,JDBC 封装包还提供了一种比编程性更好的声明性 事务管理方法,不仅仅是实现了特定接口,而且对所有的 POJOs (plain old Java objects )都适用。ORM封装包提供了常用的“对象/关系”映射 APIs的集成层。其中包括JPA、JDO、Hibernate MvBatis o利用 ORM封装包,可以混合使用所有 Spring提供的特性进行“对象/关系”映射,如前边提到的简单声明性事务管 理。Spring的 AOP 封装包提供了符合 AOP Alliance 规范的面向方面的编程(aspect-oriented programming)实现,让你可以定义,例如方法拦截器(method-interceptors)和切点(pointcuts) 从逻辑上讲,从而减弱代码的功 能耦合,清晰的被分离开。而且,利用 source-level的元数据功能,还可以将各 种行为信息合并到你的代码中,这有点象Net 的 attribute 的概念。Spring中的 Web包提供了基础的针对 Web 开发的集成特性,例如多方文件 上传,利用 Servlet listeners 进行 IoC容器初始化和针对 Web的 application context与Web Work或 Struts 一起使用 Spring时,这个包使 Spring可与其他 框架结合。Spring 中的 MVC 封装包提供了 Web 应用的 Model-View-Controller(MVC)实现。Spring 的 MVC框架并不是仅仅提供一种传统的实现,它提供 了一种清晰的分离模型,在领域模型代码和 web form之间。并且,还可以借 助 Spring框架的其他特性。G2.控制反转 IOC的理解?IoC即 Inverse of Control控制反转,是指一个系统中的类的实例化是山类 自身来控制的,而不是编程者通过代码来控制的。也就是说不创建对象,但是描 述创建它们的方式。在代码中不直接与对彖和服务连接,但在配置文件中描述哪一个组件 需要哪一项服务。容器(在 Spring框架中是 IOC容器) 负责将这些联系在一起。通常我们在代码中使用一个类(例如 Student类)的时候,需要自己在代码 中实例化它,如下:Student stu = new Student();这样导致这段代码对这个类的依赖是硬编码依赖,也就是说类的名称的改变必 然导致该源代码的修改,如果一个系统中这样的代码非常多,那么这个系统的 可维护性和可移植性都会大打折扣。要想改变类的实现或名称后,源代码不改 变就必须使用接口来实现多态,而 IOC的核心就是接口编程和反射机制。3. 依赖注入DIDI的理解?DI即 Dependency Injection,依赖注入,对象之间的依赖关系山 bean 对象自 己来处理,这样可以使得类之间达到更高层次的松耦合。DI注入方式:Setter 注入、构造子注入、接口注入。4.Spring AOPSpring AOP的理解?AOP即 Aspect Oriant Programming,面向切面编程,弥补了面向对象编程的 不足。在面向对象的编程中,我们研究的是类之间的纵向联系,继承就是纵向 联系的代表,但是要想实现横向联系就很困难,比如要求系统中每个类的某些 方法调用之前,都要执行一段公用代码,这个要求在面向对象的编程体系中很 难优雅的实现,而实际程序设计中这样的要求很普遍,例如事务处理和权限检 查,都是在执行某些方法时需要特别执行的公共代码。这段公共代码或方法就 是我们所说的切面(Aspect),它是一组特定的功能集合,需要触发切面功能 执行的那些方法的声明就称为切入点(Pointcut),切面功能在这些方法调用之 前、调用之后或前后都有或方法抛出异常的时候得到执行,这些执行时刻就称 为通知(Advice),需要执行的这些方法可以称为连接点(Joinpoint)。 通知类型按切面功能调用的不同时刻,可以分为:1 前置通知(Before advice):在某连接点之前执行的通知,但这个通知不能阻 止连接点之前的执行流程(除非它抛出一个异常)。2后置通知(After retuming advice ):在某连接点正常完成后执行的通知:例 如,一个方法没有抛出任何异常,正常返回。3 .异常通知(After throwing advice):在方法抛出异常退出时执行的通知。4 最终通知(Af 血(finally) advice):当某连接点退出的时候执行的通知(不 论是正常返回还是异常退出)。5. 环绕通知(Around Advice):包围一个连接点的通知,如方法调用。这是最 强大的一种5 5、SpringSpring中支持的beanbean作用域Spring框架支持如下五种不同的作用域:singleton:在 Spring IOC容器中仅存在一个 Bean 实例,Bean以单实例的方式存在。prototype: 一个 bean 可以定义多个实例。request:每次 HTTP请求都会创建一个新的 Beano 该作用域仅适用于WebApplicationContext 环境。session:个 HTTP Session 定义一个 Bean。该作用域仅适用于WebApplicationContext 环境.globalSession:同一个全局 HTTP Session 定义一个 Bean。该作用域同样仅适用 于WebApplicationContext 环境.bean 默认的 scope属性是 singleton6. Spring6. Spring框架中单例beansbeans是线程安全的吗?不是,Spring框架中的单例 beans 不是线程安全的。7. Spring7. Spring有几种配置方式?将 Spring配置到应用开发中有以下三种方式:基于 XML的配置基于注解的配置基于 Java 的配置8 8、S Springpring框架的事务管理有哪些优点?1 .为不同的事务 API(如 JTA, JDBC. Hibernate, JPA,和 JDO)提供了统一的编程模型。2 为编程式事务管理提供了一个简单的 API而非一系列复杂的事务 API(如JTA).3. 支持声明式事务管理。4 .可以和 Spring的多种数据访问技术很好的融合。9、Spring对事务支持的方式?spring支持编程式事务管理和声明式事务管理两种方式。编程式爭务管理使用 TransactionTemplate 或者直接使用底层的PlatformTransactionManagero 对于编程式事务管理,spring 推荐使用TransactionTemplate o声明式事务管理建立在 AOP 之上的。其本质是对方法前后进行拦截,然后在 U标方法开始之前创建或者加入一个事务,在执行完 U标方法之后根据执行情 况提交或者回滚事务。声明式事务最大的优点就是不需要通过编程的方式管理 事务,这样就不需要在业务逻辑代码中掺杂事务管理的代码,只需在配置文件 中做相关的事务规则声明(或通过基于Transactional 注解的方式),便可以将事 务规则应用到业务逻辑中。显然声明式事务管理要优编程式半务管理这正是 spring 倡导的 IF侵入 式的开发方式。声明式事务管理使业务代码不受污染,一个普通的 POJO对 象,只要加上注解就可以获得完全的事务支持。和编程式事务相比,声明式事 务唯一不足地方是,后者的最细粒度只能作用到方法级别,无法做到像编程式 事务那样可以作用到代码块级别。但是即便有这样的需求,也存在很多变通的 方法,比如,可以将需要进行事务管理的代码块独立为方法等等。声明式事务管理也有两种常用的方式,一种是基于 tx 和 aop 名字空间的 xml配置文件,另一种就是基于Transactional 注解。显然基于注解的方式更简 单易用,更清爽。10、你更推荐那种类型的事务管理?许多 Spring框架的用户选择声明式事务管理,因为这种方式和应用程序的关联 较少,因此更加符合轻量级容器的概念。声明式事务管理要优于编程式事务管 理,尽管在灵活性方面它弱于编程式事务管理(这种方式允许你通过代码控制业务)。11、Spring框架中的注解?12、Spring框架中常用设计模式?