人行开发五部面试题

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1.架构原理1.1.Struts2工作原理Struts2请求响应流程:在struts2的应用中,从用户请求到服务器返回相应响应给用户端的过程中,包含了许多组件如:Controller、ActionProxy、ActionMapping、ConfigurationManager、ActionInvocation、Inerceptor、Action、Result等。下面我们来具体看看这些组件有什么联系,它们之间是怎样在一起工作的。(1)客户端(Client)向Action发用一个请求(Request)(2)Container通过web.xml映射请求,并获得控制器(Controller)的名字(3)容器(Container)调用控制器(StrutsPrepareAndExecuteFilter或FilterDispatcher)。在Struts2.1以前调用FilterDispatcher,Struts2.1以后调用StrutsPrepareAndExecuteFilter(4)控制器(Controller)通过ActionMapper获得Action的信息(5)控制器(Controller)调用ActionProxy(6)ActionProxy读取struts.xml文件获取action和interceptorstack的信息。(7)ActionProxy把request请求传递给ActionInvocation(8)ActionInvocation依次调用action和interceptor(9)根据action的配置信息,产生result(10)Result信息返回给ActionInvocation(11)产生一个HttpServletResponse响应(12)产生的响应行为发送给客服端。1.2.Spring工作原理内部最核心的就是IOC了,动态注入,让一个对象的创建不用new了,可以自动的生产,这其实就是利用java里的反射。反射其实就是在运行时动态的去创建、调用对象,Spring就是在运行时,跟xmlSpring的配置文件来动态的创建对象,和调用对象里的方法的。Spring还有一个核心就是AOP这个就是面向切面编程,可以为某一类对象进行监督和控制(也就是在调用这类对象的具体方法的前后去调用你指定的模块)从而达到对一个模块扩充的功能。这些都是通过配置类达到的。Spring目的:就是让对象与对象(模块与模块)之间的关系没有通过代码来关联,都是通过配置类说明管理的(Spring根据这些配置内部通过反射去动态的组装对象)要记住:Spring是一个容器,凡是在容器里的对象才会有Spring所提供的这些服务和功能。Spring里用的最经典的一个设计模式就是:模板方法模式。(这里我都不介绍了,是一个很常用的设计模式)Spring里的配置是很多的,很难都记住,但是Spring里的精华也无非就是以上的两点,把以上两点跟理解了也就基本上掌握了Spring.1.3.SpringMVC工作原理上面的是springMVC的工作原理图:1、客户端发出一个http请求给web服务器,web服务器对http请求进行解析,如果匹配DispatcherServlet的请求映射路径(在web.xml中指定),web容器将请求转交给DispatcherServlet.2、DipatcherServlet接收到这个请求之后将根据请求的信息(包括URL、Http方法、请求报文头和请求参数Cookie等)以及HandlerMapping的配置找到处理请求的处理器(Handler)。3-4、DispatcherServlet根据HandlerMapping找到对应的Handler,将处理权交给Handler(Handler将具体的处理进行封装),再由具体的HandlerAdapter对Handler进行具体的调用。5、Handler对数据处理完成以后将返回一个ModelAndView()对象给DispatcherServlet。6、Handler返回的ModelAndView()只是一个逻辑视图并不是一个正式的视图,DispatcherSevlet通过ViewResolver将逻辑视图转化为真正的视图View。7、Dispatcher通过model解析出ModelAndView()中的参数进行解析最终展现出完整的view并返回给客户端。1.4.SpringMVC与Spring的区别Spring的两大核心AOP与IOC,可以单独用于任何应用,包括与Struts等MVC框架与Hibernate等ORM框架的集成,目前很多公司所谓的轻量级开发就是用Spring+Struts(2)+Hibernate。SpringMVC类似于struts的一个MVC开框架。个人觉得SpringMVC开发比Struts2方便,可以直接代替上面的Struts(当然Struts的做为一个非常成熟的MVC,功能上感觉还是比Spring强一点,不过SpringMVC已经足够用了)。当然SpringMVC的执行效率比struts高,是因为struts的值栈影响效率。1.5.Mybatis工作原理MyBatis是一个基于Java的持久层框架。它提供的持久层框架包括SQLMaps和DataAccessObjects(DAO)。MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(PlainOldJavaObjects,普通的Java对象)映射成数据库中的记录每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得。SqlSessionFactoryBuilder从一个xml配置文件或者一个预定义的配置类的实例获得配置信息。1.6.hibernate的工作原理Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了轻量级的对象封装,使Java程序员可以随心所欲的使用对象编程思维来操纵数据库。它不仅提供了从Java类到数据表之间的映射,也提供了数据查询和恢复机制。相对于使用JDBC和SQL来手工操作数据库,Hibernate可以大大减少操作数据库的工作量。另外Hibernate可以利用代理模式来简化载入类的过程,这将大大减少利用HibernateQL从数据库提取数据的代码的编写量,从而节约开发时间和开发成本Hibernate可以和多种Web服务器或者应用服务器良好集成,如今已经支持几乎所有的流行的数据库服务器。1.7.hibernate的使用1.配置好hibernate的配置文件和与类对应的配置文件后,启动服务器2.服务器通过实例化Configeration对象,读取hibernate.cfg.xml文件的配置内容,并根据相关的需求建好表或者和表建立好映射关系3.通过实例化的Configeration对象就可以建立sessionFactory实例,进一步,通过sessionFactory实例可以创建session对象4.得到session之后,便可以对数据库进行增删改查操作了,除了比较复杂的全文搜索外,简单的操作都可以通过hibernate封装好的session内置方法来实现5.此外,还可以通过事物管理,表的关联来实现较为复杂的数据库设计优点:hibernate相当于java类和数据库表之间沟通的桥梁,通过这座桥我们就可以做很多事情了.(1)hibernate如何连接数据库?配置文件Hibernate.cfg.xml文件中定义了和数据库进行连接的信息,包括数据库方言.jdbc驱动.用户名.密码和URL等。Configuration类借助dom4j的xml解析器进行xml的解析设置环境,然后使用这些环境属性来生成sessionfactory。这样sessionfactory生成的session就能够成功获得数据库的连接。(2)hibernate如何进行数据库写操作?当保存一个pojo持久化对象时,触发Hibernate保存事件监听器进行处理。Hibernate通过映射文件获得对象对应的数据库表名以及属性对应的数据库列名,然后通过反射机制获得持久化对象的各个属性,最终组织向数据库插入新对象的SQL的insert语句。调用session.save()保存数据后这个对象会被标识为持久化状态放在session,当事物进行提交时才真正执行insert语句。(3)hibernate如何从数据中载入对象?当需要读取读取文件时,Hibernate先尝试从session缓存中读取,如果session缓存数据不存在或是脏数据并且配置了二级缓存,Hibernate尝试从二级缓存中检索数据;否则Hibernate会根据对象类型·主键等信息组织select语句到数据库中读取,再把select结果组织成对象返回。(4)hibernate如何进行数据库查询操作?Hibernate提供SQLHQLCriteria查询方式。HQL是其中运用最广泛的查询方式。用户使用session.createQuery()函数以一条HQL语句为参数创建Query查询对象后,Hibernate会使用Anltr库把HQL语句解析成jdbc可以识别的sql语句。如果设置了查询缓存,那么执行Query.list()时,Hibernate会先对查询缓存进行查询,如果查询缓存不存在,在使用select语句查询数据库。2.SQL问题2.1.SQL基础2.1.1.SQLSELECTDISTINCT语句在表中,可能会包含重复值。这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值。关键词DISTINCT用于返回唯一不同的值。SELECTCompanyFROMOrders2.1.2.SQLLIKE操作符语法SELECTcolumn_name(s)FROMtable_name2.1.3.SQL通配符通配符描述%替代一个或多个字符_仅替代一个字符[charlist]字符列中的任何单一字符[^charlist]或者[!charlist]不在字符列中的任何单一字符SQL通配符必须与LIKE运算符一起使用。SELECT*FROMPersonsWHERECityLIKE'Ne%'2.1.4.SQLINSELECTcolumn_name(s)FROMtable_nameWHEREcolumn_nameIN(value1,value2,...)2.1.5.SQLBETWEENANDSELECTcolumn_name(s)FROMtable_nameWHEREcolumn_nameBETWEENvalue1ANDvalue22.1.6.SQLINNERJOIN关键字SELECTcolumn_name(s)FROMtable_name1INNERJOINtable_name2ONtable_name1.column_name=table_name2.column_name2.1.7.SQLLEFTJOIN关键字SELECTcolumn_name(s)FROMtable_name1LEFTJOINtable_name2ONtable_name1.column_name=table_name2.column_name2.1.8.SQLRIGHTJOIN关键字SELECTcolumn_name(s)FROMtable_name1RIGHTJOINtable_name2ONtable_name1.column_name=table_name2.column_name2.1.9.SQLFULLJOIN关键字SELECTcolumn_name(s)FROMtable_name1FULLJOINtable_name2ONtable_name1.column_nam

1 / 20
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功