版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JAVA常用面试题总结一、SpringMVC运行原理SpringMVC运行原理.客户端恳求提交到DispatcherServlet.由DispatcherServlet限制器查询一个或多个HandlerMapping,找到处理恳求的Controller.DispatcherServlet将恳求提交到Controller.Controller调用业务逻辑处理后,返回ModelAndView.DispatcherServlet查询一个或多个ViewResoler视图解析器,找至【JModelAndView指定的视图.视图负责将结果显示到客户端相关接口说明DispatcherServlet接口:Spring供应的前端限制器,全部的恳求都有经过它来统一分发。在DispatcherServlet将恳求分发给SpringController之前,须要借助于Spring供应的HandlerMapping定位到具体的ControlleroHandlerMapping接口:能够完成客户恳求到Controller映射。Controller接口:须要为并发用户处理上述恳求,因此实现Controller接口时,必需保证线程平安并且可重用。Controller将处理用户恳求,这和StrutsAction扮演的角色是一样的。一旦Controller处理完用户恳求,则返回ModelAndView对象给DispatcherServlet前端限制器,ModelAndView中包含了模型(Model)和视图(View)o从宏观角度考虑,DispatcherServlet是整个Web应用的限制器;从微观考虑,Controller是单个Http恳求处理过程中的限制器,而ModelAndView是Http恳求过程中返回的模型(Model)和视图(View)oViewResolver接口:Spring供应的视图解析器(ViewResolver)在Web应用中查找View对象,从而将相应结果渲染给客户。DispatcherServlet是整个SpringMVC的核心。它负责接收HTTP恳求组织协调SpringMVC的各个组成部分。其主要工作有以下三项:.截获符合特定格式的URL恳求。.初始化DispatcherServlet上下文对应的WebApplicationContext,并将其及业务层、长久化层的WebApplicationContext建立关联。.初始化SpringMVC的各个组成组件,并装配到DispatcherServlet中。二、spring框架spring是J2EE应用程序框架,是轻量级的loC和AOP的容器框架,主要是针对javaBean的生命周期进行管理的轻量级容器,可以单独运用,也可以和Struts框架,ibatis框架等组合运用。l)loC(lnversionofControl)限制反转,对象创建责任的反转,在spring中BeanFacotory是loC容器的核心接口,负责实例化,定位,配置应用程序中的对象及建立这些对象":赳曲榜次报”贴雄中e;麻£冬“跳,Ca(桐:如痴岫舐班阿&,倒秘储加可行:加命力/你/的」勃,以”3,伽弓£;眄*臊触":赳曲榜次报”贴雄中e;麻£冬“跳,Ca(桐:如痴岫舐班阿&,倒秘储加可行:加命力/你/的」勃,以”3,伽弓£;眄*臊触例MIV8ch.。然馀褊w摊心湃%、\echo"幽"7a.忧m^4.2刀工- -一….“〃做,小绿W婚无棒现切.加1伽修〃4sMz-马C也秘,号以必察必叙赢欧嘏4d场&圾勿4傍仍〃力蜘&伴姐以,用醒气战姆一-2便夕”■秘胸阕夕♦四奶Z而俗的I山L”娜械-叫施无2,如上2版协)呵羸1M彼妙心 ""仇_£〃〃名人"柒极”殴莪间的依靠。XmlBeanFacotory实现BeanFactory接口,通过获得xml配置文件数据,组成应用对象及对象间的依靠关系。spring中有三种注入方式,一种是set注入,一种是接口注入,另一种是构造方法注入。2)AOP面对切面编程aop就是纵向的编程,如下图所示,业务1和业务2都须要一个共同的操作,及其往每个业务中都添加同样的代码,不如写一遍代码,让两个业务共同运用这段代码。spring中面对切面变成的实现有两种方式,一种是动态代理,一种是CGLIB,动态代理必须要供应接口,而CGLIB实现是有继承。框架优点轻量级的容器框架没有侵入性运用loC容器更加简洁组合对象干脆间关系,面对接口编程,降低耦合Aop可以更加简洁的进行功能扩展,遵循。cp开发原则创建对象默认是单例的,不须要再运用单例模式进行处理5,缺点:业务功能依靠spring特有的功能,依靠及spring环境。三、常用的设计模式L单例模式(有的书上说叫单态模式其实都一样)该模式主要目的是使内存中保持1个对象。.工厂模式该模式主要功能是统一供应实例对象的引用。.门面模式这个模式个人感觉像是Service层的一个翻版。比如Dao我们定义了许多长久化方法,我们通过Service层将Dao的原子方法组成业务逻辑,再通过方法向上层供应服务。门面模式道理其实是一样的。.策略模式这个模式是将行为的抽象,即当有几个类有相像的方法,将其中通用的部分都提取出来,从而使扩展更简洁。四、Hibernate及MyBatis的对比总结两者相同点Hibernate及MyBatis都可以是通过SessionFactoryBuider由XML配置文件生成SessionFactory,然后由SessionFactory生成Session,最终由Session来开启执行事务和SQL语句。其中SessionFactoryBuider,SessionFactory,Session的生命周期都是差不多的。Hibernate和MyBatis都支持JDBC和JTA事务处理。Mybatis优势MyBatis可以进行更为细致的SQL优化,可以削减查询字段。MyBatis简洁驾驭,而Hibernate门槛较高。Hibernate优势Hibernate的DAO层开发比MyBatis简洁,Mybatis须要维护SQL和结果映射。Hibernate对对象的维护和缓存要比MyBatis好,对增删改查的对象的维护要便利。Hibernate数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库须要写不同SQL。Hibernate有更好的二级缓存机制,可以运用第三方缓存。MyBatis本身供应的缓存机制不佳。以下为具体介绍:Hibernate是当前最流行的0/Rmapping框架,它出身于,现在已经成为Jboss的一部分。Mybatis是另外一种优秀的O/Rmapping框架。目前属于apache的一个子项目。.Hibernate对数据库结构供应了较为完整的封装,Hibernate的0/RMapping实现了POJO和数据库表之间的映射,以及SQL的自动生成和执行。程序员往往只需定义好了POJO到数据库表的映射关系,即可通过Hibernate供应的方法完成长久层操作。程序员甚至不须要对SQL的娴熟驾驭,Hibernate/OJB会依据制定的存储逻辑,自动生成对应的SQL并调用JDBC接口加以执行。2JBATIS的着力点,则在于P60及SQL之间的映射关系。然后通过映射配置文件,将SQL所需的参数,以及返回的结果字段映射到指定P0〕。。相对Hibernate“0/R”而言,iBATIS是一种“SqlMapping**的ORM实现。.开发速度Hibernate的真正驾驭要比Mybatis来得难些。Mybatis框架相对简洁很简洁上手,但也相对简陋些。个人觉得要用好Mybatis还是首先要先理解好Hibernate。.开发社区Hibernate及Mybatis都是流行的长久层开发框架,但Hibernate开发社区相对多喧闹些,支持的工具也多,更新也快,当前最高版本。而Mybatis相对安静,工具较少,当前最高版本3.2。.开发工作量Hibernate和MyBatis都有相应的代码生成工具。可以生成简洁基本的DAO层方法。针对高级查询,Mybatis须要手动编写SQL语句,以及ResultMapo而Hibernate有良好的映射机制,开发者无需关切SQL的生成及结果映射,可以更专注于业务流程。.系统调优对比Hibernate的调优方案制定合理的缓存策略;尽量运用延迟加载特性;采纳合理的Session管理机制;运用批量抓取,设定合理的批处理参数(batch.size);进行合理的O/R映射设计Mybatis调优方案MyBatis在Session方面和Hibernate的Session生命周期是一样的,同样须要合理的Session管理机制。MyBatis同样具有二级缓存机制。MyBatis可以进行具体的SQL优化设计。.SQL优化方面Hibernate的查询会将表中的全部字段查询出来,这一点会有性能消耗。Hibernate也可以自己写SQL来指定须要查询的字段,但这样就破坏了Hibernate开发的简洁性。而Mybatis的SQL是手动编写的,所以可以按需求指定查询的字段。HibernateHQL语句的调优须要将SQL打印出来,而Hibernate的SQL被许多人嫌弃因为太丑了。MyBatis的SQL是自己手动写的所以调整便利。但Hibernate具有自己的日志统计。Mybatis本身不带日志统计,运用Log4j进行日志记录。.扩展性方面Hibernate及具体数据库的关联只需在XML文件中配置即可,全部的HQL语句及具体运用的数据库无关,移植性很好。MyBatis项目中全部的SQL语句都是依靠所用的数据库的,所以不同数据库类型的支持不好。.对象管理及抓取策略Hibernate是完整的对象/关系映射解决方案,它供应了对象状态管理(statemanagement)的功能,使开发者不再须要理睬底层数据库系统的细微环节。也就是说,相对于常见的JDBC/SQL长久层方案中须要管理SQL语句,Hibernate采纳了更自然的面对对象的视角来长久化Java应用中的数据。换句话说,运用Hibernate的开发者应当总是关注对象的状态(state),不必考虑SQL语句的执行。这部分细微环节已经由Hibernate掌管妥当,只有开发者在进行系统性能调优的时候才须要进行了解。而MyBatis在这一块没有文档说明,用户须要对对象自己进行具体的管理。抓取策略Hibernate对实体关联对象的抓取有着良好的机制。对于每一个关联关系都可以具体地设置是否延迟加载,并且供应关联抓取、查询抓取、子查询抓取、批量抓取四种模式。它是具体配置和处理的。而Mybatis的延迟加载是全局配置的。10缓存机制对比Hibernate缓存Hibernate一级缓存是Session缓存,利用好一级缓存就须要对Session的生命周期进行管理好。建议在一个Action操作中运用一个Session。一级缓存须要对Session进行严格管理。Hibernate二级缓存是SessionFactory级的缓存。SessionFactory的缓存分为内置缓存和外置缓存。内置缓存中存放的是SessionFactory对象的一些集合属性包含的数据(映射元素据及预定SQL语句等),对于应用程序来说,它是只读的。外置缓存中存放的是数据库数据的副本,其作用和一级缓存类似.二级缓存除了以内存作为存储介质外,还可以选用硬盘等外部存储设备。二级缓存称为进程级缓存或SessionFactory级缓存,它可以被全部session共享,它的生命周期伴随着SessionFactory的生命周期存在和消亡。MyBatis缓存MyBatis包含一个特别强大的查询缓存特性,它可以特别便利地配置和定制。MyBatis3中的缓存实现的许多改进都已经实现了,使得它更加强大而且易于配置。默认状况下是没有开启缓存的,除了局部的session缓存可以增加变现而且处理循环依靠也是必需的。要开启二级缓存你须要在你的SQL映射文件中添加一行:<cache/>相同点Hibernate和Mybatis的二级缓存除了采纳系统默认的缓存机制外,都可以通过实现你自己的缓存或为其他第三方缓存方案,创建适配器来完全覆盖缓存行为。不同点Hibernate的二级缓存配置在SessionFactory生成的配置文件中进行具体配置,然后再在具体的表-对象映射中配置是哪种缓存。MyBatis的二级缓存配置都是在每个具体的表-对象映射中进行具体配置,这样针对不同的表可以自定义不同的缓存机制。并且Mybatis可以在命名空间中共享相同的缓存配置和实例,通过Cache-ref来实现。两者比较因为Hibernate对查询对象有着良好的管理机制,用户无需关切SQL。所以在运用二级缓存时假如出现脏数据,系统会报出错误并提示。而MyBatis在这一方面,运用二级缓存时须要特殊当心。假如不能完全确定数据更新操作的波及范围,避开Cache的盲目运用。否则,脏数据的出现会给系统的正常运行带来很大的隐患。五、EJB的几种类型会话(Session)Bean,实体(Entity)Bean消息驱动的(MessageDriven)Bean会话Bean又可分为有状态(Stateful)和无状态(Stateless)两种实体Bean可分为Bean管理的持续性(BMP)和容器管理的持续性(CMP)两种-Ejb的组成标准的Ejb至少由三个部分组成:Local接口,Remote接口以及Ejblnstanceo二Local接口.Local接口,称为Home接口,继,承接基类.从Ejb2.0起先出现的新的接口,本质上是JavaRMI接口..对于Local接口的运用,只能在本地运用。它列出了全部定位/创建/删除Ejb实例的方法。.定义local接口的方法:1)在Ejb文件中定义:@Local(value={lnterface1,interface?,..})2)在Ejb文件中定义:@Local(lnterface1,lnterface2,..)3)在Interface文件中定义@Local三Remote接口.Remote接口列出Ejb类的业务逻辑方法。集成基类javax.ejb.Remote.本质上是JavaRMI接口..定义local接口的方法:1)在Ejb文件中定义:@Remote(value={lnterface1,interface?,..})2)在Ejb文件中定义:@Remote(Interface1,lnterface2,..)3)在Interface文件中定义@Remote六、java线程有几种状态在java中,线程通常有五种状态,创建,就绪,运行、堵塞和死亡状态。第一是创建状态。在生成线程对象,并没有调用该对象的start方法,这是线程处于创建状态。其次是就绪状态。当调用了线程对象的start方法之后,该线程就进入了就绪状态,但是此时线程调度程序还没有把该线程设置为当前线程,此时处于就绪状态。在线程运行之后,从等待或者睡眠中回来之后,也会处于就绪状态。第三是运行状态。线程调度程序将处于就绪状态的线程设置为当前线程,此时线程就进入了运行状态,起先运行run函数当中的代码。第四是堵塞状态。线程正在运行的时候,被暂停,通常是为了等待某个时间的发生(比如说某项资源就绪)之后再接着运行。sleep,suspend,wait等方法都可以导致线程堵塞。第五是死亡状态。假如一个线程的run方法执行结束或者调用stop方法后,该线程就会死亡。对于已经死亡的线程,无法再运用start方法令其进入就绪。七、进程和线程的区分定义1、进程是什么?是具有肯定独立功能的程序、它是系统进行资源安排和调度的一个独立单位,重点在系统调度和单独的单位,也就是说进程是可以独立运行的一段程序。2、线程又是什么?线程进程的一个实体,是CPU调度和分派的基本单位,他是比进程更小的能独立运行的基本单位,线程自己基本上不拥有系统资源。在运行时,只是暂用一些计数器、寄存器和栈。关系1、一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程(通常说的主线程)。2、资源安排给进程,同一进程的全部线程共享该进程的全部资源。3、线程在执行过程中,须要协作同步。不同进程的线程间要利用消息通信的方法实现同步。4、处理机分给线程,即真正在处理机上运行的是线程。5、线程是指进程内的一个执行单元,也是进程内的可调度实体。区分1、调度:线程作为调度和安排的基本单位,进程作为拥有资源的基本单位。2、并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可以并发执行。3、拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源。八、Hibernate事物隔离级别.原子性(atomic),事务必需是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行.一样性(consistent),事务在完成时,必需使全部的数据都保持一样状态。.隔离性(insulation),由并发事务所作的修改必需及任何其它并发事务所作的修改隔离。.长久性(Duration),事务完成之后,它对于系统的影响是永久性的。数据库事务隔离级别为了解决数据库事务并发运行时的各种问题数据库系统供应四种事务隔离级别:Serializable串行化RepeatableRead可重复读ReadCommited可读已提交ReadUncommited可读未提交九、数据库树查询SQLselectdistinctt.child_team_idteamjdfromorg_team_rtstartwitht.parent_team_idinteamldsconnectbypriort.child_teamjd=t.parent_team_id分组排序查询第一条记录selectproductjdproductjd,costcost_pricefrom(selectJd,ductJd,ic.cost,ic.start_time,ic.end_time,ic.purchase_time,row_number()over(partitionbyjd,ductjdorderbyic.start_timedesc,ic.purchase_timedesc)rnfrominventory_costic)wherern=1十、SpringMVC常用关键字事务@Transactional(propagation=Propagation.NESTED,rollbackFor=Exception.class)Controller//@RestController©Controller@RequestMapping(value="/service/bpmControl")publicclassBpmContorlextendsBpmBaseControl{@RequestMapping(value='7myTaskDetail/{instanceld)")public@ResponseBodyStringmyTaskDetail(@PathVariableStringinstanceld,RedirectAttributesredirectAttributes){returnnull;}@RequestMapping(value={7addPurchaseData.htm"},method={RequestMethod.POST})public@ResponseBodyObjectdataSaveApply(@ModelAttributePurchasepurchase){returnnull;)}十一、JSP的7个动作指令forwardsinclude、useBean、setProperty、getPropertyxplugin、param十二、JSP脚本中的9个内置对象Application、Config、ExceptionsOut、page、pageContext、Request、responsexsession十三、html中post和get区分get是从服务器上获得数据,post是向服务器传送数据。get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTPpost机制,将表单内各个字段及其内容放置在HTMLHEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。对于get方式,服务器端用Request.QueryString获得变量的直对于post方式,服务器端用Request.Form获得提交的数据。get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 心理咨询员报考条件
- 二零二四年度股权投资合同标的投资额度3篇
- 二零二四年文化艺术交流与推广合同
- 二零二四年度出版合同
- 2024存量住宅装修设计合同
- 二零二四年度环保产业技术合作合同
- 二零二四年度数据中心装修工程安全标准合同
- 二零二四年智能电网用特种电缆订购合同
- 二零二四年度新能源汽车采购代理合同
- 存量航空器材租赁合同04年专用
- 胸腰椎骨折的微创手术治疗优选ppt资料
- 初三毕业班语文家长会
- 包覆产品工艺课件
- 初一班会课课件
- 货物采购验收单
- 等比数列的前n项和-(完美版)课件
- 心电图理论知识考核试题与答案
- 中医护理创新项目:耳穴刮痧课件
- 非洲安哥拉项目计划书以及运营模式简介5.30
- 环三亚甲基三硝胺(黑索金、旋风炸药)的理化性质及危险特性表
- 广东省义务教育阶段学生学籍卡表格
评论
0/150
提交评论