`

Java面试汇总(二)之三大框架

 
阅读更多

1.Hibernate工作原理及为什么要用?

原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Session 4.创建事务Transation 5.持久化操作 6.提交事务 7.关闭Session 8.关闭SesstionFactory 

为什么要用: 1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。 2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作 3. hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。 4. hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。 

 

2.Hibernate是如何延迟加载? 

1. Hibernate2延迟加载实现:a)实体对象 b)集合(Collection) 

2. Hibernate3 提供了属性的延迟加载功能 当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。  

 

3.Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系) 

类与类之间的关系主要体现在表与表之间的关系进行操作,它们都市对对象进行操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的many-to-one、one-to-many、many-to-many 

 

4.Struts1流程:

1、客户端浏览器发出HTTP请求。2、根据web.xml配置,该请求被ActionServlet接收。3、根据struts-config.xml配置, ActionServlet先将请求中的参数填充到ActionForm中,然后ActionServlet再将请求发送到Action 进行处理。4、是否验证,需要验证则调用ActionForm的validate方法,验证失败则跳转到input,成功则继续。5、Action从ActionForm获得数据,调用javabean 中的业务方法处理数据。6、Action返回ActionForward对象,跳转到相应JSP页面或Action。7、返回HTTP响应到客户端浏览器。

 

MVC设计模式:modal:“模型” 也称业务逻辑,是正真完成任务的代码,相当与JavaBeanview:视图,其实就是显示界面,相当于JSPcontroller:控制器,他控制模型和视图的交互过程,相当于servletstruts1是基于MVC设计模式hibernate是基于ORM对象关系映射 

 

5.struts是什么?

struts1是基于JSP和servlet的一个开源的Web应用框架,使用的是MVC的设计模式struts2是基于webwork技术的框架,是sun和webwork公司联手开发的一个功能非常齐全的框架,struts2和struts1没有任何关系,是一个全新的框架 

 

6.spring是什么?

spring是一个集成了许多第三方框架的大杂烩,其核心技术是IOC(控制反转,也称依赖注入)和AOP(面向切面编程) 

 

7.hibernate是什么?

hibernate是基于ORM对象关系映射(完成对象数据到关系数据映射的机制)实现的,做数据持久化的工具 

 

8.JSF是什么?

JavaServer Face是基于组件的web开发框架,跟sturts差不多的框架 

 

9.数据库里面的索引和约束是什么?

索引是为了提高数据的检索速度,索引是建立在数据表上,根据一个或多个字段建立的约束是为了保持数据的完整性,约束有非空约束,主键约束,外键约束等等。

 

10.spring是什么

这个问题,往往可以通过我们为什么要使用spring这个问题来切入:AOP 让开发人员可以创建非行为性的关注点,称为横切关注点,并将它们插入到应用程序代码中。使用 AOP 后,公共服务 (比 如日志、持久性、事务等)就可以分解成方面并应用到域对象上,同时不会增加域对象的对象模型的复杂性。 IOC 允许创建一个可以构造对象的应用环境,然后向这些对象传递它们的协作对象。正如单词 倒置 所表明的,IOC 就像反 过来的 JNDI。没有使用一堆抽象工厂、服务定位器、单元素(singleton)和直接构造(straight

construction),每一个对象都是用其协作对象构造的。因此是由容器管理协作对象(collaborator)。 Spring即使一个AOP框架,也是一IOC容器。 Spring 最好的地方是它有助于您替换对象。有了 Spring,只要用 JavaBean 属性和配置文件加入依赖性(协作对象)。然后可以很容易地在需要时替换具有类似接口的协作对象。 

 

11.用自己的话简要阐述struts2的执行流程。

Struts 2框架本身大致可以分为3个部分:核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。核心控制器FilterDispatcher是Struts 2框架的基础,包含了框架内部的控制流程和处理机制。业务控制器Action和业务逻辑组件是需要用户来自己实现的。用户在开发Action和业务逻辑组件的同时,还需要编写相关的配置文件,供核心控制器FilterDispatcher来使用。 

 

Struts 2的工作流程相对于Struts 1要简单,与WebWork框架基本相同,所以说Struts 2是WebWork的升级版本。基本简要流程如下:1、客户端浏览器发出HTTP请求。2、根据web.xml配置,该请求被FilterDispatcher接收。3、根据struts.xml配置,找到需要调用的Action类和方法, 并通过IoC方式,将值注入给Aciton。4、Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。5、Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面。6、返回HTTP响应到客户端浏览器。 

 

11、

Spring的事物有几种方式?谈谈spring事物的隔离级别和传播行为?

声明式事务    使用spring声明式事务,spring使用AOP来支持声明式事务,会根据事务属性,自动在方法调用之前决定是否开启一个事务,并在方法执行之后决定事务提交或回滚事务。

事务的隔离级别:

数据库系统提供了4种事务隔离级别,在这4种隔离级别中,Serializable的隔离级别最高,Read Uncommitted的隔离级别最低;

· Read Uncommitted   读未提交数据;(会出现脏读)

· Read Committed      读已提交数据;

· Repeatable Read       可重复读;

· Serializable              串行化

 
事务的传播属性包括:

· Required   业务方法需要在一个事务中运行,如果一个方法运行时已经处在一个事务中,那么加入到该事务,否则为自己创建一个新事务,80%的方法用到该传播属性;

· Not-Supported  · Requiresnew  · Mandatoky   · Supports

· Never  · Nested

 

12、

为什么使用Spring

1:降低组件之间的耦合度,实现各层之间的解耦 
2:可以使用容器提供的众多服务。如: 
–事务管理服务 
–JMS 
–Spring core核心服务 
–持久化服务 
–其他 
3:提供了单例模式支持。开发人员不需要自己编写实现代码 
4:提供了AOP技术。实现如:权限拦截,运行监控等功能 
5:提供了众多的辅助类。如JDBC Template,HIbernate Template 
6:对主流的应用框架提供了集成支持。集成Struts,JPA,Hibernate

 

13、Ibatis中使用like ‘%#filedName#%’ 时,有什么问题?

在xml映射文件中,如果直接按如上写法,会报异常:java.sql.SQLException: Invalid argument in JDBC call: parameter index out of range: 1。
所以一般会采用如下两种方式:
1) 将#换成$,如like ‘%$ filedName $%’,这样就没有问题了..
2) 采用字符串联接符||,如:like ‘%’||# filedName #||’%’

 

14、

iBatis与Hibernate区别?

1. iBatis 需要手写sql语句,也可以生成一部分,Hibernate则基本上可以自动生成,偶尔会写一些Hql。同样的需求,iBATIS的工作量比 Hibernate要大很多。类似的,如果涉及到数据库字段的修改,Hibernate修改的地方很少,而iBATIS要把那些sql mapping的地方一一修改。
2. iBatis 可以进行细粒度的优化
比如说我有一个表,这个表有几个或者几十个字段,我需要更新其中的一个字段,iBatis 很简单,执行一个sql UPDATE TABLE_A SET column_1=#column_1# WHERE id=#id# 但是用 Hibernate 的话就比较麻烦了,缺省的情况下 hibernate 会更新所有字段。 当然我记得 hibernate 有一个选项可以控制只保存修改过的字段,但是我不太确定这个功能的负面效果。
例如:我需要列出一个表的部分内容,用 iBatis 的时候,这里面的好处是可以少从数据库读很多数据,节省流量SELECT ID, NAME FROM TABLE_WITH_A_LOT_OF_COLUMN WHERE …一般情况下Hibernate 会把所有的字段都选出来。比如说有一个上面表有8个字段,其中有一两个比较大的字段,varchar(255)/text。上面的场景中我为什么要把他们 也选出来呢?用hibernate 的话,你又不能把这两个不需要的字段设置为lazy load,因为还有很多地方需要一次把整个 domain object 加载出来。这个时候就能显现出ibatis 的好处了。如果我需要更新一条记录(一个对象),如果使用 hibernate,需要现把对象 select 出来,然后再做 update。这对数据库来说就是两条sql。而iBatis只需要一条update的sql就可以了。减少一次与数据库的交互,对于性能的提升是非常重 要。
3. 开发方面:
开发效率上,我觉得两者应该差不多。可维护性方面,我觉得 iBatis 更好一些。因为 iBatis 的 sql 都保存到单独的文件中。而 Hibernate 在有些情况下可能会在 java 代码中保sql/hql。相对Hibernate“O/R”而言,iBATIS 是一种“Sql Mapping”的ORM实现。 而iBATIS 的着力点,则在于POJO 与SQL之间的映射关系。也就是说,iBATIS并不会为程序员在运行期自动生成SQL 执行。具体的SQL 需要程序员编写,然后通过映射配置文件,将SQL所需的参数,以及返回的结果字段映射到指定POJO。使用iBATIS 提供的ORM机制,对业务逻辑实现人员而言,面对的是纯粹的Java对象,这一层与通过Hibernate 实现ORM 而言基本一致,而对于具体的数据操作,Hibernate会自动生成SQL 语句,而iBATIS 则要求开发者编写具体的SQL 语句。相对Hibernate而言,iBATIS 以SQL开发的工作量和数据库移植性上的让步,为系统设计提供了更大的自由空间。
4. 运行效率
在不考虑 cache 的情况下,iBatis 应该会比hibernate 快一些或者很多。

 

15、Ibatis中#与$的区别?

1 #是把传入的数据当作字符串,如#field#传入的是id,则生成sql语句:order by “id”;
2 $传入的数据直接生成在sql里,如#field#传入的是id,则sql语句生成是这样,order by id ;
3 #方式能够很大程度防止sql注入, 但$方式无法防止sql注入;
4 $方式一般用于传入数据库对象.例如传入表名;
5 一般能用#的就别用$ ;

 

16、AOP有几种植入切面的方法

其一是编译期织入,这要求使用特殊的Java编译器,AspectJ是其中的代表者;

其二 是类装载期织入,而这要求使用特殊的类装载器,AspectJ和AspectWerkz是其中的代表者;

其三为动态代理织入,在运行期为目标类添加增强生 成子类的方式,Spring AOP采用动态代理织入切面。

Spring AOP使用了两种代理机制,一种是基于JDK的动态代理,另一种是基于CGLib的动态代理,之所以需要两种代理机制,很大程度上是因为JDK本身只提供基于接口的代理,不支持类的代理。

 

17、介绍一下Spring的事务管理

事务就是对一系列的数据库操作(比如插入多条数据)进行统一的提交或回滚操作,如果插入成功,那么一起成功,如果中间有一条出现异常,那么回滚之前的所有操作。
这样可以防止出现脏数据,防止数据库数据出现问题。
开发中为了避免这种情况一般都会进行事务管理。Spring中也有自己的事务管理机制,一般是使用TransactionMananger进行管理,可以通过Spring的注入来完成此功能。

spring提供了几个关于事务处理的类:
TransactionDefinition //事务属性定义
TranscationStatus //代表了当前的事务,可以提交,回滚。
PlatformTransactionManager 这个是spring提供的用于管理事务的基础接口,其下有一个实现的抽象类AbstractPlatformTransactionManager,我们 使用的事务管理类例如DataSourceTransactionManager等都是这个类的子类。

一般事务定义步骤:

TransactionDefinition td = new TransactionDefinition();
TransactionStatus ts = transactionManager.getTransaction(td);
try
{ //do sth
transactionManager.commit(ts);
}
catch(Exception e){transactionManager.rollback(ts);}

spring提供的事务管理可以分为两类:编程式的和声明式的。编程式的,比较灵活,但是代码量大,存在重复的代码比较多;声明式的比编程式的更灵活。

编程式主要使用transactionTemplate。省略了部分的提交,回滚,一系列的事务对象定义,需注入事务管理对象.
void add(){
transactionTemplate.execute( new TransactionCallback(){
pulic Object doInTransaction(TransactionStatus ts)
{ //do sth}
}
}

声明式:

使用TransactionProxyFactoryBean:

 

围绕Poxy的动态代理 能够自动的提交和回滚事务
org.springframework.transaction.interceptor.TransactionProxyFactoryBean

PROPAGATION_REQUIRED–支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。

PROPAGATION_SUPPORTS–支持当前事务,如果当前没有事务,就以非事务方式执行。

PROPAGATION_MANDATORY–支持当前事务,如果当前没有事务,就抛出异常。

PROPAGATION_REQUIRES_NEW–新建事务,如果当前存在事务,把当前事务挂起。

PROPAGATION_NOT_SUPPORTED–以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

PROPAGATION_NEVER–以非事务方式执行,如果当前存在事务,则抛出异常。

PROPAGATION_NESTED–如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。

 

18、为什么要用spring

AOP 让开发人员可以创建非行为性的关注点,称为横切关注点,并将它们插入到应用程序代码中。使用 AOP 后,公共服务   (比 如日志、持久性、事务等)就可以分解成方面并应用到域对象上,同时不会增加域对象的对象模型的复杂性。

IOC 允许创建一个可以构造对象的应用环境,然后向这些对象传递它们的协作对象。正如单词 倒置 所表明的,IOC 就像反      过来的 JNDI。没有使用一堆抽象工厂、服务定位器、单元素(singleton)和直接构造(straight construction),每一个对象都是用     其协作对象构造的。因此是由容器管理协作对象(collaborator)。

Spring即使一个AOP框架,也是一IOC容器。 Spring 最好的地方是它有助于您替换对象。有了 Spring,只要用 JavaBean 属性和配置文件加入依赖性(协作对象)。然后可以很容易地在需要时替换具有类似接口的协作对象。

 

19、cookie与session的区别

1、cookie数据存放在客户的浏览器上,session数据放在服务器上
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
考虑到安全应当使用session
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
考虑到减轻服务器性能方面,应当使用COOKIE

 

20、

 

分享到:
评论

相关推荐

    android和java面试大全集

    史上最全的android和java面试文档集。包括有: java程序员面试宝典.txt Java面试宝典2011版-1C,Java基础部分.doc 三大框架面试题.zip 技术面试题.zip Android笔试题库 C语言终极面试宝典.doc Java笔试题目汇总.pdf ...

    2024 Java面试宝典合集

    这份"2024 Java面试宝典合集"无疑是准备Java求职面试者的宝贵资源。它涵盖了多个关键领域,包括Spring框架、并发编程、Java核心知识以及面试策略等。下面我们将详细探讨这些知识点。 1. **Spring Boot面试题**:...

    2023最新JAVA面试题集

    最新JAVA面试题总结之基础/框架/数据库/JavaWeb/Redis BIO,NIO,AIO,Netty面试题 35道 BTA 常问的 Java基础39道常见面试题及详细答案 Dubbo面试题 47道 ElasticSearch面试题 30道 Git常用命令面试题 60道 Java并发...

    2017java面试题

    为了在激烈的求职竞争中脱颖而出,理解和掌握Java面试中的常见问题至关重要。"2017java面试题"这个压缩包文件提供了丰富的资源,帮助Java开发者准备面试,深化对Java开发的理解。 文档"Java面试宝典2017.doc"可能...

    5年java面试题汇总.docx

    Java工程师面试题汇总涵盖了广泛的IT领域知识,包括基础的Java语法、数据库原理、多线程概念、ORM框架MyBatis、缓存系统Redis、微服务框架Spring Cloud以及全文搜索引擎Elasticsearch。这些知识点是Java开发者在职业...

    java 面试题大全 各大公司面试题总汇

    这份"java面试题大全"集合了各大公司的面试题目,对于准备Java开发者面试的求职者来说是一份宝贵的资源。下面,我们将深入探讨Java面试中常见的知识点,以及如何通过这些题目来提升自己的技能。 1. **基础语法**:...

    Java面试宝典 100家大公司java笔试题汇总 等

    【Java面试宝典】是为Java开发者准备的重要学习资源,主要涵盖了各大公司Java笔试题的汇总,旨在帮助求职者在面试前进行全面的复习和技能提升。这份资料的重要性不言而喻,因为它集成了多方面的Java知识,包括但不...

    java面试题总汇

    本资料"java面试题总汇"正是为此目的而准备,它包含了众多公司在笔试和面试中常问的Java题目,帮助求职者在面试前进行充分的准备。 首先,Java的基础部分包括语法、数据类型、运算符和流程控制。你需要熟悉基本的...

    Java面试题大汇总宝典

    "Java面试题大汇总宝典"是一个精心整理的资源集合,旨在帮助求职者充分准备面试,增加成功获得理想职位的机会。 1. **Java核心基础**: - **数据类型与变量**:Java分为基本数据类型(如int、float)和引用数据...

    Java面试笔试题大汇总(最全+详细答案)

    "Java面试笔试题大汇总(最全+详细答案)"这份资料提供了全面的Java面试题及解答,旨在帮助求职者充分准备,提高面试成功率。 首先,Java的基础知识是任何面试的基础。这包括Java语言的基本语法,如变量、数据类型、...

    java面试笔试题大汇总

    Java是一种广泛使用的面向对象的编程语言,以其平台...以上只是Java面试笔试中可能涉及的部分核心知识点,实际题目会根据应聘者的经验和岗位需求进行深入或扩展。熟练掌握这些知识,能帮助Java开发者在面试中脱颖而出。

    java面试笔试资料java笔试题大集合及答案题库java笔试题汇总资料188个合集.zip

    java面试笔试资料java笔试题大集合及答案题库java笔试题汇总资料188个合集 100家大公司java笔试题汇总.doc 125条常见的java 面试笔试题大汇总.pdf 2011最新整理java经典代码.doc 25个经典的Spring面试问答.docx ...

    张孝祥等八份JAVA面试资料总汇

    【JAVA面试】相关的知识点涵盖了Java语言...以上内容是基于"张孝祥等八份JAVA面试资料总汇"中的主要知识点,涵盖了Java程序员面试的大部分领域。通过深入学习和实践,能够为面试者提供坚实的技术基础和应对面试的自信。

    java 面试大全面试笔试题大汇总

    Java面试大全涵盖了许多核心知识点,是准备Java程序员面试的重要资源。以下是一些主要的Java面试笔试题相关的知识点,包括但不限于: 1. **基础语法**:理解基本数据类型、变量、运算符、流程控制(if、switch、for...

    java面试笔试资料Java经典项目集锦java笔试题大集合及答案题库java笔试题汇总资料个合集(188).zip

    java面试笔试资料Java经典项目集锦java笔试题大集合及答案题库java笔试题汇总资料个合集(188) 100家大公司java笔试题汇总.doc 125条常见的java 面试笔试题大汇总.pdf 2011最新整理java经典代码.doc 25个经典的Spring...

    最终JAVA面试题目汇总 Java面试题集锦 Java面试题大全 java面试100题目.pdf

    本资料集合了多个面试题库,涵盖了Java的基础、进阶及热门技术,是准备Java面试的宝贵资源。 一、Java基础 1. Java语言特性:了解Java的面向对象特性,如封装、继承、多态,以及异常处理、垃圾回收机制等。 2. ...

    java面试题大汇总

    Java面试题涵盖了许多核心概念,这里我们...以上内容仅是Java面试中涉及的一部分知识点,实际面试中还可能包括设计模式、JSP、SSH框架等相关问题。理解并熟练掌握这些核心技术是成为一名优秀的Java开发者的必备条件。

    java面试笔试题库java学习笔记开发教程互联网公司面试资料大全合集.zip

    大公司的Java面试题集.doc 就业相关java 广州传智播客JavaEE工程师测试题.doc 广州传智播客JavaEE工程师测试题(带答案的).doc 应聘时最漂亮的回答.docx 当面试官问「你有什么要问我的吗」时,应该问什么?.docx ...

    各大公司java面试大汇总3

    《各大公司Java面试大汇总3》是一份涵盖了众多知名公司Java面试题目的宝贵资源,旨在帮助求职者深入了解和准备Java技术面试。这份压缩包包含了多种格式的文件,如CHM、DOC、PDF和RAR,提供了丰富的学习材料。下面将...

    java面试题汇总java笔试题大集合及答案题库java笔试题汇总资料超过100个合集

    这份“java面试题汇总”合集包含超过100个题目,涵盖了Java的基础知识、进阶概念以及实战经验,旨在帮助求职者准备Java相关的面试和笔试。 首先,基础部分包括了对Java语法的理解,如变量、数据类型、运算符、流程...

Global site tag (gtag.js) - Google Analytics