还剩8页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
常用面试题总结JAVA
一、运行原理SpringMVC运行原理SpringMVC客户端恳求提交到
1.DispatcherServlet由限制器查询一个或多个找到处理恳求的
2.DispatcherServlet HandlerMapping,Controller将恳求提交到
3.DispatcherServlet Controller调用业务逻辑处理后,返回
4.Controller ModelAndView查询一个或多个视图解析器,找至【
5.DispatcherServlet ViewResolerJ ModelAndView指定的视图视图负责将结果显示到客户端
6.相关接口说明接口DispatcherServlet供应的前端限制器,全部的恳求都有经过它来统一分发在将Spring DispatcherServlet恳求分发给之前,须要借助于供应的定位Spring ControllerSpring HandlerMapping到具体的Controllero接口:HandlerMapping能够完成客户恳求到映射Controller接口Controller须要为并发用户处理上述恳求,因此实现接口时,必需保证线程平安并且可Controller重用将处理用户恳求,这和扮演的角色是一样的一旦处Controller StrutsAction Controller理完用户恳求,则返回对象给前端限制器,ModelAndView DispatcherServlet中包含了模型和视图ModelAndView Model Viewo从宏观角度考虑,是整个应用的限制器;从微观考虑,DispatcherServlet WebController是单个恳求处理过程中的限制器,而是恳求过程中返回的模Http ModelAndViewHttp型和视图ModelViewo接口ViewResolver供应的视图解析器在应用中查找对象,从而将相应结Spring ViewResolverWeb View果渲染给客户是整个的核心它负责接收恳求组织协调DispatcherServlet Spring MVC HTTPSpring的各个组成部分其主要工作有以下三项MVC截获符合特定格式的恳求
1.URL初始化上下文对应的并将其及业务层、长
2.DispatcherServlet WebApplicationContext,久化层的建立关联WebApplicationContext初始化的各个组成组件,并装配到中
3.Spring MVCDispatcherServlet
二、框架spring是应用程序框架,是轻量级的和的容器框架,主要是针对的spring J2EE loCAOP javaBean生命周期进行管理的轻量级容器,可以单独运用,也可以和框架,框架等组合运Struts ibatis用限制反转,对象创建责任的反转,在中是lloClnversion ofControl springBeanFacotory容器的核心接口,负责实例化,定位,配置loC:赳曲榜次报”贴应用程序中的对象及建立这些对象威志蹴%.W:e;W W雄中麻£冬蝌翅始能£松.痂眼病夕破冰府,僦雅的也谣;撤“跳桐如痴岫,Ca钻舐班阿,倒秘储加M例可行:加命力/你/的」勃,眄*臊触IV8ch.以”3,伽弓£;w然馀褊摊忧心湃%、\echo幽7a.^4M.2刀工--一….“〃做,小绿婚无棒现.加W4sMz切1伽修〃-马也秘,号以必C察4d4必叙赢欧嘏场圾勿,用傍仍〃力蜘伴姐以醒气战姆一-2便夕”■Z秘胸阕夕四奶而俗的♦山械-叫2,2I L”娜施无如上版协)呵羸彼妙心1M仇_£〃〃名人柒极”殴莪间的依靠实现接口,通过获得配置文件数据,组XmlBeanFacotory BeanFactoryxml成应用对象及对象间的依靠关系中有三种注入方式,一种是注入,一种是接口注入,另一种是构造方法注入spring set)面对切面编程2AOP就是纵向的编程,如下图所示,业务和业务都须要一个共同的操作,及其往每aop12个业务中都添加同样的代码,不如写一遍代码,让两个业务共同运用这段代码spring中面对切面变成的实现有两种方式,一种是动态代理,一种是动态代理必须要供CGLIB,应接口,而实现是有继承CGLIB框架优点轻量级的容器框架没有侵入性运用容器更加简洁组合对象干脆间关系,面对接口编程,降低耦合loC可以更加简洁的进行功能扩展,遵循开发原则Aop cp创建对象默认是单例的,不须要再运用单例模式进行处理缺点业务功能依靠特有的功能,依靠及环境5,spring spring
三、常用的设计模式单例模式(有的书上说叫单态模式其实都一样)L该模式主要目的是使内存中保持个对象
1.工厂模式2该模式主要功能是统一供应实例对象的引用.门面模式3这个模式个人感觉像是层的一个翻版比如我们定义了许多长久化方法,我们通Service Dao过层将的原子方法组成业务逻辑,再通过方法向上层供应服务门面模式道理其Service Dao实是一样的.策略模式4这个模式是将行为的抽象,即当有几个类有相像的方法,将其中通用的部分都提取出来,从而使扩展更简洁
四、及的对比总结Hibernate MyBatis两者相同点及都可以是通过由配置文件生成Hibernate MyBatis SessionFactoryBuider XMLSessionFactory,然后由生成最终由来开启执行事务和语句其中SessionFactory Session,Session SQL的生命周期都是差不多的和SessionFactoryBuider,SessionFactory,Session Hibernate MyBatis都支持和事务处理JDBC JTA优势Mybatis可以进行更为细致的优化,可以削减查询字段MyBatis SQL简洁驾驭,而门槛较高MyBatis Hibernate优势Hibernate的层开发比简洁,须要维护和结果映射Hibernate DAOMyBatis Mybatis SQL对对象的维护和缓存要比好,对增删改查的对象的维护要便利Hibernate MyBatisHibernate数据库移植性很好,的数据库移植性不好,不同的数据库须要写不同MyBatis SQL Hibernate有更好的二级缓存机制,可以运用第三方缓存本身供应的缓存机制不佳MyBatis以下为具体介绍是当前最流行的框架,它出身于现在已经成为的一部Hibernate0/R mappingsf.net,Jboss分是另外一种优秀的框架目前属于的一个子项目Mybatis O/R mappingapache对数据库结构供应了较为完整的封装,的实现了
1.Hibernate Hibernate0/R MappingPOJO和数据库表之间的映射,以及的自动生成和执行程序员往往只需定义好了到数据SQL POJO库表的映射关系,即可通过供应的方法完成长久层操作程序员甚至不须要对Hibernate SQL的娴熟驾驭,会依据制定的存储逻辑,自动生成对应的并调用接口加Hibernate/OJB SQLJDBC以执行的着力点,则在于及之间的映射关系然后通过映射配置文件,将2JBATIS P60SQL SQL所需的参数,以及返回的结果字段映射到指定〕相对而言,是一P0Hibernate“0/R”iBATIS种的实现“Sql Mapping**ORM.开发速度4的真正驾驭要比来得难些框架相对简洁很简洁上手,但也相对简Hibernate MybatisMybatis陋些个人觉得要用好还是首先要先理解好Mybatis Hibernate.开发社区5及都是流行的长久层开发框架,但开发社区相对多喧闹些,支Hibernate MybatisHibernate持的工具也多,更新也快,当前最高版本而相对安静,工具较少,当前最高版本Mybatis
3.
2.开发工作量6和都有相应的代码生成工具可以生成简洁基本的层方法HibernateMyBatisDAO针对高级查询,须要手动编写语句,以及而有良好的映射Mybatis SQLResultMap Hibernateo机制,开发者无需关切的生成及结果映射,可以更专注于业务流程SQL.系统调优对比7的调优方案Hibernate制定合理的缓存策略;尽量运用延迟加载特性;采纳合理的管理机制;Session运用批量抓取,设定合理的批处理参数batch.size;进行合理的映射设计O/R调优方案Mybatis在方面和的生命周期是一样的,同样须要合理的管MyBatisSessionHibernate SessionSession理机制同样具有二级缓存机制可以进行具体的优化设计MyBatis MyBatis SQL优化方面
8.SQL的查询会将表中的全部字段查询出来,这一点会有性能消耗也可以自己Hibernate Hibernate写来指定须要查询的字段,但这样就破坏了开发的简洁性而的SQL Hibernate MybatisSQL是手动编写的,所以可以按需求指定查询的字段语句的调优须要将打印出来,而的被许多人嫌弃因为太丑Hibernate HQLSQL Hibernate SQL了的是自己手动写的所以调整便利但具有自己的日志统计MyBatis SQL Hibernate Mybatis本身不带日志统计,运用进行日志记录Log4j.扩展性方面9及具体数据库的关联只需在文件中配置即可,全部的语句及具体运用的Hibernate XMLHQL数据库无关,移植性很好项目中全部的语句都是依靠所用的数据库的,所以不MyBatisSQL同数据库类型的支持不好.对象管理及抓取策略10是完整的对象/关系映射解决方案,它供应了对象状态管理的功Hibernate statemanagement能,使开发者不再须要理睬底层数据库系统的细微环节也就是说,相对于常见的JDBC/SQL长久层方案中须要管理语句,采纳了更自然的面对对象的视角来长久化应SQLHibernateJava用中的数据换句话说,运用的开发者应当总是关注对象的状态Hibernate不必考虑语句的执行这部分细微环节已经由掌管妥当,只有开发者state,SQLHibernate在进行系统性能调优的时候才须要进行了解而在这一块没有文档说明,用户须要对对象自己进行具体的管理MyBatis抓取策略对实体关联对象的抓取有着良好的机制对于每一个关联关系都可以具体地设置是Hibernate否延迟加载,并且供应关联抓取、查询抓取、子查询抓取、批量抓取四种模式它是具体配置和处理的而的延迟加载是全局配置的Mybatis缓存机制对比10缓存Hibernate一级缓存是缓存,利用好一级缓存就须要对的生命周期进行管理好Hibernate SessionSession建议在一个操作中运用一个一级缓存须要对进行严格管理Action SessionSession二级缓存是级的缓存的缓存分为内置缓存和外置Hibernate SessionFactorySessionFactory缓存内置缓存中存放的是对象的一些集合属性包含的数据映射元素据及预SessionFactory定语句等,对于应用程序来说,它是只读的外置缓存中存放的是数据库数据的副本,其SQL作用和一级缓存类似.二级缓存除了以内存作为存储介质外,还可以选用硬盘等外部存储设备二级缓存称为进程级缓存或级缓存,它可以被全部共享,它的生命周SessionFactory session期伴随着的生命周期存在和消亡SessionFactory缓存MyBatis包含一个特别强大的查询缓存特性,它可以特别便利地配置和定制中的缓MyBatis MyBatis3存实现的许多改进都已经实现了,使得它更加强大而且易于配置默认状况下是没有开启缓存的,除了局部的缓存可以增加变现而且处理循环依靠也是session必需的要开启二级缓存你须要在你的映射文件中添加一行相同点SQL cache/和的二级缓存除了采纳系统默认的缓存机制外,都可以通过实现你自己的HibernateMybatis缓存或为其他第三方缓存方案,创建适配器来完全覆盖缓存行为不同点的二级缓存配置在生成的配置文件中进行具体配置,然后再在具体Hibernate SessionFactory的表-对象映射中配置是哪种缓存的二级缓存配置都是在每个具体的表-对象映射中进行具体配置,这样针对不同的表可MyBatis以自定义不同的缓存机制并且可以在命名空间中共享相同的缓存配置和实例,通过Mybatis来实现Cache-ref两者比较因为对查询对象有着良好的管理机制,用户无需关切所以在运用二级缓存时HibernateSQL假如出现脏数据,系统会报出错误并提示而在这一方面,运用二级缓存时须要特殊当心假如不能完全确定数据更新操作的波MyBatis及范围,避开的盲目运用否则,脏数据的出现会给系统的正常运行带来很大的隐患Cache
五、的几种类型EJB会话实体消息驱动的Session Bean,Entity BeanMessage DrivenBean会话又可分为有状态和无状态两种Bean StatefulStateless实体可分为管理的持续性和容器管理的持续性两种Bean BeanBMP CMP的组成-Ejb标准的至少由三个部分组成:接口,接口以及Ejb LocalRemote Ejblnstanceo二接口Local接口,称为接口,继,承接基类.从起先出现的新的接口,本
1.Local HomeEjb
2.0质上是接口.Java RMI对于接口的运用,只能在本地运用它列出了全部定位/创建/删除实例
2.Local Ejb的方法定义接口的方法
3.local在文件中定义1Ejb@Localvalue={lnterface1,interface,..}在文件中定义2Ejb@Locallnte rface1,lnte rface2,..在文件中定义3Interface@Local三接口Remote接口列出类的业务逻辑方法集成基类本质上是
1.Remote Ejbjavax.ejb.Remote.接口.Java RMI定义接口的方法
2.local在文件中定义1Ejb@Remotevalue={lnterface1,interface,..}在文件中定义2Ejb@Remote Interf ace1,lnterface2,..在文件中定义3Interface@Remote
六、线程有几种状态java在中,线程通常有五种状态,创建,就绪,运行、堵塞和死亡状态java第一是创建状态在生成线程对象,并没有调用该对象的方法,这是线程处于创建start状态其次是就绪状态当调用了线程对象的方法之后,该线程就进入了就绪状态,但是start此时线程调度程序还没有把该线程设置为当前线程,此时处于就绪状态在线程运行之后,从等待或者睡眠中回来之后,也会处于就绪状态第三是运行状态线程调度程序将处于就绪状态的线程设置为当前线程,此时线程就进入了运行状态,起先运行函数当中的代码run第四是堵塞状态线程正在运行的时候,被暂停,通常是为了等待某个时间的发生比如说某项资源就绪之后再接着运行等方法都可以导致线程堵塞sleep,suspend,wait第五是死亡状态假如一个线程的方法执行结束或者调用方法后,该线程就会run stop死亡对于已经死亡的线程,无法再运用方法令其进入就绪start
七、进程和线程的区分定义、进程是什么?1是具有肯定独立功能的程序、它是系统进行资源安排和调度的一个独立单位,重点在系统调度和单独的单位,也就是说进程是可以独立运行的一段程序、线程又是什么?2线程进程的一个实体,是调度和分派的基本单位,他是比进程更小的能独立运行的基CPU本单位,线程自己基本上不拥有系统资源在运行时,只是暂用一些计数器、寄存器和栈关系、一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程通常说的主1线程、资源安排给进程,同一进程的全部线程共享该进程的全部资源
2、线程在执行过程中,须要协作同步不同进程的线程间要利用消息通信的方法实现同步
3、处理机分给线程,即真正在处理机上运行的是线程
4、线程是指进程内的一个执行单元,也是进程内的可调度实体5区分、调度线程作为调度和安排的基本单位,进程作为拥有资源的基本单位
1、并发性不仅进程之间可以并发执行,同一个进程的多个线程之间也可以并发执行
2、拥有资源进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进3程的资源
八、事物隔离级别Hibernate原子性事务必需是原子工作单元;对于其数据修改,要么全都执行,要么全都
1.atomic,不执行一样性事务在完成时,必需使全部的数据都保持一样状态
2.consistent,隔离性由并发事务所作的修改必需及任何其它并发事务所作的修改隔离
3.insulation,长久性事务完成之后,它对于系统的影响是永久性的
4.Duration,数据库事务隔离级别为了解决数据库事务并发运行时的各种问题数据库系统供应四种事务隔离级别串行化
1.Serializable可重复读
2.Repeatable Read可读已提交
3.Read Commited可读未提交
4.Read Uncommited
九、数据库树查询SQLselect distinctt.child_team_id teamjdfrom org_team_r tstartwith t.parent_team_id inteamldsconnect byprior t.child_teamjd=t.parent_team_id分组排序查询第一条记录select productjdproductjd,cost cost_price fromselectic.orgJd,ic.productJd,ic.cost,ic.start_time,ic.end_time,ic.purchase_time,row_numberoverpartition by ic.orgjd,ic.productjd orderbyic.start_time desc,ic.purchase_time descrnfrom inventory_cost icwherern=1
十、常用关键字SpringMVC事务@Transactionalpropagation=Propagation.NESTED,rollbackFor=Exception.class Controller//@RestController©Controller@RequestMappingvalue=/service/bpmControl publicclass BpmContorlextendsBpmBaseControl{@RequestMappingvalue=7myTaskDetail/{instanceldpublic@ResponseBody StringmyTaskDetail@PathVariable Stringinstanceld,RedirectAttributes redirectAttributes{return null;}@RequestMappingvalue={7addPurchaseData.htm},method={RequestMethod.POST}public@ResponseBody ObjectdataSaveApply@ModelAttribute Purchasepurchase{return null;}
十一、的个动作指令JSP
7、、、、forwards includeuseBean setPropertygetProperty pluginparamx
十二、脚本中的个内置对象JSP
9、、、、、、Application ConfigException Outpage pageContextRequest responsesessions x
十三、中和区分html postget是从服务器上获得数据,是向服务器传送数据
1.get post是把参数数据队列加到提交表单的属性所指的中,值和表单内各个字段一
2.get ACTION URL一对应,在中可以看到是通过机制,将表单内各个字段及其内容放置URL postHTTP post在内一起传送到属性所指的地址用户看不到这个过程HTML HEADERACTIONURL对于方式,服务器端用获得变量的直对于方式,服务器端
3.get Request.QueryString post用获得提交的数据Request.Form传送的数据量较小,不能大于传送的数据量较大,一般被默认为不受限制但
4.get2KB post理论上,中最大量为中为IIS480KB,IIS5100KB平安性特别低,平安性较高但是执行效率却比方法好建议
5.get postPost、方式的平安性较方式要差些,包含机密信息的话,建议用数据提交方式;、1get PostPost2在做数据查询时,建议用方式;而在做数据添加、修改或删除时,建议用方式;Get Post
十四、生命周期Servlet生命周期分为三个阶段Servlet.初始化阶段调用方法1init.响应客户恳求阶段调用方法2service.终止阶段调用方法3destroy工作原理Servlet首先简洁说明一下接收和响应客户恳求的过程,首先客户发送一个恳求,是调L Servlet Servlet用方法对恳求进行响应的,通过源代码可见,方法中对恳求的方式进行了匹service service配,选择调用等这些方法,然后再进入对应的方法中调用逻辑层的方法,实现对doGetdoPost客户的响应在接口和中是没有、等等这些方法的,Servlet GenericServletdoGet doPost中定义了这些方法,但是都是返回信息,所以,我们每次定义一个HttpServlet errorServlet的时候,都必需实现或等这些方法doGet doPost、每一个自定义的都必需实现的接口,接口中定义了五个方法,其中比2ServletServletServlet较重要的三个方法涉及到的生命周期,分别是上文提到的,方法Servlet init,service destroy是一个通用的,不特定于任何协议的它实现了接口而GenericServlet Servlet,Servlet继承于因此也实现了接口所以我们定义HttpServlet GenericServlet,HttpServlet Servlet的时候只须要继承即可Servlet HttpServlet、接口和是不特定于任何协议的,而是特定于协议3Servlet GenericServletHttpServlet HTTP的类,所以中实现了方法,并将恳求、HttpServlet serviceServletRequest ServletResponse强转为和HttpRequest HttpResponseo
十五、常用指令Linux。