面试题目汇总Java.docx
- 文档编号:23028788
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:21
- 大小:28.26KB
面试题目汇总Java.docx
《面试题目汇总Java.docx》由会员分享,可在线阅读,更多相关《面试题目汇总Java.docx(21页珍藏版)》请在冰豆网上搜索。
面试题目汇总Java
1.谈谈hibernate的延迟加载
延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作。
A.实体对象的延迟加载B.集合类型的延迟加载
2.session.load()和session.get()的区别
二者的区别:
1.session.get()如果找不到符合条件的记录,则返回NULL,
session.load()如果找不到符合条件的记录,返回ObjectNotFoundException.
2.session.load()方法可返回代理类实例,
而session.get()方法永远返回实例类.
3.session.load()方法可以充分利用内部缓存和二级缓存,
而session.get()方法只在内部缓存中进行查找,如果没有找到,则跳过二级缓存,直接调用SQL进行数据读取.
3.spring的事务管理。
它有一个统一的抽象是由实现接口完成的,不管是声明式的还是编程式的事务管理都需要此抽象来完成.
11.事务的四大特性。
事务四大特性(简称ACID)
1、原子性(Atomicity):
事务中的全部操作在数据库中是不可分割的,要么全部完成,要么均不执行。
2、一致性(Consistency):
几个并行执行的事务,其执行结果必须与按某一顺序串行执行的结果相一致。
3、隔离性(Isolation):
事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的。
4、持久性(Durability):
对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障。
4.struts2的iterator能否遍历一个list,Map?
怎样遍历?
5.struts2怎样遍历hibernate级联查询的结果?
(除了封装VO)
一般做法是查询产生的数据封装到map中,放到request或session,由struts2在前台输出结果,具体做法:
例如一个item表下有一对多关系的subitem
生成的pojo里面就包含了set的这些关系
在hibernate取数据的时候:
Listitemall=this.itemService.findAll();
session=(Map)ActionContext.getContext().getSession();//get("request");
session.put("itemall",itemall);//把这个list放到session里
//取出所有数据,这样,这个itemall的结构是:
itemall
itemid
itemname
subitems
返回returnSUCCESS后,会跳转到指定的jsp页面
页面使用struts2输出:
6.谈谈对Struts2的流程的理解。
7.谈谈ThreadLocal在spring框架中的作用
8.spring的AOP?
具体用来做什么?
比如一个注册登录系统,当然需要注册的地方有很多,你可能要做一个防止用户名重复注册的模块,这个时候就可以用到Spring的aop了!
在你开发大型的应用时,aop可以发挥很大的功能,对于你模块的耦合,以后的管理,功能升级……!
都有很大的帮助
12.Spring的IOC和AOP。
ioc就是控制翻转或是依赖注入。
通俗的讲就是如果在什么地方需要一个对象,你自己不用去通过new生成你需要的对象,而是通过spring的bean工厂为你长生这样一个对象。
aop就是面向切面的编程。
比如说你每做一次对数据库操作,都要生成一句日志。
如果,你对数据库的操作有很多类,那你每一类中都要写关于日志的方法。
但是如果你用aop,那么你可以写一个方法,在这个方法中有关于数据库操作的方法,每一次调用这个方法的时候,就加上生成日志的操作。
9.Hibernate的主键生成机制increment,native,identity,assigned,sequence
10.谈谈对struts2的MVC的理解。
MVC是一种设计模式将应用程序分成了视图、模型、控制器三部分,使代码逻辑清晰,同时提高移植性M与V之间--观察者模式V与C之间--策略模式。
MVC的工作流程请求----控制器调用模型处理,返回数据-----控制器用相应的视图格式化模型返回的数据完成相应请求。
1、spring的配置的主要标签是什么?
2、如何在spring中实现国际化?
在applicationContext.xml加载一个bean
class=”org.springframework.context.support.ResourceBundleMessageSource”> ? 在src目录下建多个properties文件 ? 对于非英文的要用native2ascii-encodinggb2312源目转化文件相关内容 ? 其命名格式是message_语言_国家。 ? 页面中的中显示提示信息,键名取键值。 ? 当给定国家,系统会自动加载对应的国家的properties信息。 ? 通过applictionContext.getMessage(“键名”,”参数”,”区域”)取出相关的信息。 3、spring如何实现资源管理? spring如何访问jar包中的文件? 使用 applicationContext.getResource(“classpath: 文件名”): 在src根目录下,在类路径下 applicationContext.getResource(“classpath: /chap01/文件名”): 以src根目录下的基准往下走。 applicationContext.getResource(“file: c: /a.properties”): 在系统文件目录下。 4、介绍下spring中Bean的作用? 1、singleton作用域 当一个bean的作用域设置为singleton,那么SpringIOC容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回bean的同一实例。 换言之,当把一个bean定义设置为singleton作用域时,SpringIOC容器只会创建该bean定义的唯一实例。 这个单一实例会被存储到单例缓存(singletoncache)中,并且所有针对该bean的后续请求和引用都将返回被缓存的对象实例,这里要注意的是singleton作用域和GOF设计模式中的单例是完全不同的,单例设计模式表示一个ClassLoader中只有一个class存在,而这里的singleton则表示一个容器对应一个bean,也就是说当一个bean被标识为singleton时候,spring的IOC容器中只会存在一个该bean。 配置实例: 或者 2、prototype prototype作用域部署的bean,每一次请求(将其注入到另一个bean中,或者以程序的方式调用容器的getBean()方法)都会产生一个新的bean实例,相当于一个new的操作,对于prototype作用域的bean,有一点非常重要,那就是Spring不能对一个prototypebean的整个生命周期负责,容器在初始化、配置、装饰或者是装配完一个prototype实例后,将它交给客户端,随后就对该prototype实例不闻不问了。 不管何种作用域,容器都会调用所有对象的初始化生命周期回调方法,而对prototype而言,任何配置好的析构生命周期回调方法都将不会被调用。 清除prototype作用域的对象并释放任何prototypebean所持有的昂贵资源,都是客户端代码的职责。 (让Spring容器释放被singleton作用域bean占用资源的一种可行方式是,通过使用bean的后置处理器,该处理器持有要被清除的bean的引用。 ) 配置实例: 或者 3、request request表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTPrequest内有效,配置实例: request、session、globalsession使用的时候,首先要在初始化web的web.xml中做如下配置: 如果你使用的是Servlet2.4及以上的web容器,那么你仅需要在web应用的XML声明文件web.xml中增加下述ContextListener即可: … … 如果是Servlet2.4以前的web容器,那么你要使用一个javax.servlet.Filter的实现: .. … 接着既可以配置bean的作用域了: 4、session session作用域表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTPsession内有效,配置实例: 配置实例: 和request配置实例的前提一样,配置好web启动文件就可以如下配置: 5、globalsession globalsession作用域类似于标准的HTTPSession作用域,不过它仅仅在基于portlet的web应用中才有意义。 Portlet规范定义了全局Session的概念,它被所有构成某个portletweb应用的各种不同的portlet所共享。 在globalsession作用域中定义的bean被限定于全局portletSession的生命周期范围内。 如果你在web中使用globalsession作用域来标识bean,那么,web会自动当成session类型来使用。 配置实例: 和request配置实例的前提一样,配置好web启动文件就可以如下配置: 6、自定义bean装配作用域 在spring2.0中作用域是可以任意扩展的,你可以自定义作用域,甚至你也可以重新定义已有的作用域(但是你不能覆盖singleton和prototype),spring的作用域由接口org.springframework.beans.factory.config.Scope来定义,自定义自己的作用域只要实现该接口即可,下面给个实例: 我们建立一个线程的scope,该scope在表示一个线程中有效,代码如下: publicclassMyScopeimplementsScope…{ privatefinalThreadLocalthreadScope=newThreadLocal()…{ protectedObjectinitialValue()…{ returnnewHashMap(); } }; publicObjectget(Stringname,ObjectFactoryobjectFactory)…{ Mapscope=(Map)threadScope.get(); Objectobject=scope.get(name); if(object==null)…{ object=objectFactory.getObject(); scope.put(name,object); } returnobject; } publicObjectremove(Stringname)…{ Mapscope=(Map)threadScope.get(); returnscope.remove(name); } publicvoidregisterDestructionCallback(Stringname,Runnablecallback)…{ } publicStringgetConversationId()…{ //TODOAuto-generatedmethodstub returnnull; } } 5、编写JDBC访问MySql数据库表中一条记录的代码? StatementstatamentMySQL=connectMySQL.createStatement(); 6、介绍下数据库事物隔离级别? Oracle数据库支持READCOMMITTED和SERIALIZABLE这两种事务隔离级别。 所以Oracle不支持脏读,即Oracle中不允许一个会话读取其他事务未提交的数据修改结果,从而防止了由于事务回滚发生的读取不正确。 Oracle回滚段,在修改数据记录时,会把这些记录被修改之前的结果存入回滚段或撤销段中。 Oracle读取操作不会阻碍更新操作,更新操作也不会阻碍读取操作,这样在Oracle中的各种隔离级别下,读取操作都不会等待更新事务结束,更新操作也不会因为另一个事务中的读取操作而发生等待,这也是Oracle事务处理的一个优势所在。 Oracle缺省的配置是ReadCommitted隔离级别(也称为语句级别的隔离),在这种隔离级别下,如果一个事务正在对某个表执行DML操作,而这时另外一个会话对这个表的记录执行读取操作,则Oracle会去读取回滚段或撤销段中存放的更新之前的记录,而不会象SQLServer一样等待更新事务的结束。 Oracle的Serializable隔离级别(也称为事务级别的隔离),事务中的读取操作只能读取这个事务开始之前已经提交的数据结果。 如果在读取时,其他事务正在对记录执行修改,则Oracle就会在回滚段或撤销段中去寻找对应的原来未经修改的记录(而且是在读取操作所在的事务开始之前存放于回滚段或撤销段的记录),这时读取操作也不会因为相应记录被更新而等待。 7、什么是数据库连接池? 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。 对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。 数据库连接池正是针对这个问题提出来的。 数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而再不是重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。 这项技术能明显提高对数据库操作的性能 8、编写sql语句示例like的用法? Select*fromuserwherenamelike‘王%’ 9、游标的作用,如何知道游标已经到了最后? 是什么? 游标是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果 每个游标区都有一个名字 用户可以用SQL语句逐一从游标中获取记录,并赋给主变量,交由主语言进一步处理 主语言是面向记录的,一组主变量一次只能存放一条记录 仅使用主变量并不能完全满足SQL语句向应用程序输出数据的要求 嵌入式SQL引入了游标的概念,用来协调这两种不同的处理方式 对于Oracle,使用游标名字%NOTFOUND 对于SQLServer,使用@@fetch_status来判断 第六部分: 多线程的问题 1、介绍下进程和线程的概念 进程是系统进行资源分配和调度的单位;线程是CPU调度和分派的单位,一个进程可以有多个线程,这些线程共享这个进程的资源。 2、编写简单的线程启动和运行的程序 启动: 在线程的Thread对象上调用start()方法,而不是run()或者别的方法 运行: 在线程的Thread对象上调用run()方法, 3、线程间通信机制的描述? 1).可以通过启动线程前传递的object对象传递数据(线程启动的时候可以接收一个object对象)。 2).通过委托传递数据(大多是子线程操作主线程的时候用到)。 3).通过静态的通用变量或属性传递(建个静态的变量或属性,将要传递的数据写在它上面,然后另一个线程在去这个变量或属性中读取这个值)。 4、介绍线程间同步技术以及如何防止死锁? 使用volatile字段与Interlocked类实现同步 使用Win32对象同步 死锁: 摒弃“请求和保持”条件(一次预先分配法) 摒弃”环路等待“条件(资源有序使用法) 第五部分: 1、使用javasocket编写一个server_client模型的程序 见图: 2、介绍下apachemina框架 当客户首次访问采用MINA编写的程序时,IoAcceptor作为线程运行,负责接受来自客户的请求。 当有客户请求连接时,创建一个Session,该Session与IoProcessor、SocketChannel以及IOService联系起来。 IoProcessor也作为另外一个线程运行,定时检查客户是否有数据到来,并对客户请求进行处理,依次调用在IOService注册的各个IoFilter,最后调用IoHandler进行最终的逻辑处理,再将处理后的结果Filter后返回给客户端 第四部分: 6、触发器分为事前触发和事后触发,这两种触发有和区别、语句级触发和行级触发的区别 事前触发器运行于触发事件发生之前,而事后触发器运行于触发事件发生之后。 通常事前触发器可以获取事件之前和新的字段值。 语句级触发器可以在语句执行前或后执行,而行级触发在触发器所影响的每一行触发一次。 7、你使用过什么数据库开发框架并简单介绍 oracle, 8、xml包括哪些解释技术,区别是什么? 有DOM,SAX,STAX等DOM: 处理大型文件时其性能下降的非常厉害。 这个问题是由DOM的树结 构所造成的,这种结构占用的内存较多,而且DOM必须在解析文件之前把整个文 档装入内存,适合对XML的随机访问SAX: 不现于DOM,SAX是事件驱动型的XML解析方式。 它顺序读取XML文件,不需要一次全部装载整个文件。 当遇到像文件开头,文档结束,或者标签开头与标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来处理XML文件,适合对XML的顺序访问STAX: StreamingAPIforXML(StAX) =================================================== 1、三大框架的了解 答: ORM对象关系映射,它的实现思想就是将关系数据库中表的数据映射成为对象,以对象的形式展现,这样开发人员就可以把对数据库的操作转化为对这些对象的操作。 因此它的目的是为了方便开发人员以面向对象的思想来实现对数据库的操作。 1.2详细说说Spring的工作原理? 答: 动态注入IOC,让一个对象的创建不用new了,可以自动的生成,这其实就是利用java里的反射,反射其实就是在运行时动态的去创建、调用对象,Spring就是在运行时,跟xmlSpring的配置文件来动态的创建对象,和调用对象里的方法的。 Spring目的: 就是让对象与对象(模块与模块)之间的关系没有通过代码来关联,都是通过配置类说明管理的(Spring根据这些配置内部通过反射去动态的组装对象)。 A.Struts: Struts只是一个MVC框架(Framework),用于快速开发JavaWeb应用。 Struts实现的重点在C(Controller),包括ActionServlet/RequestProcessor和我们定制的Action,也为V(View)提供了一系列定制标签(CustomTag)。 但Struts几乎没有涉及M(Model),所以Struts可以采用JAVA实现的任何形式的商业逻辑。 Spring: Spring是一个轻型容器(light-weightcontainer),其核心是Bean工厂(BeanFactory),用以构造我们所需要的M(Model)。 在此基础之上,Spring提供了AOP(Aspect-OrientedProgramming,面向层面的编程)的实现,用它来提供非管理环境下申明方式的事务、安全等服务;对Bean工厂的扩展ApplicationContext更加方便我们实现J2EE的应用;DAO/ORM的实现方便我们进行数据库的开发;WebMVC和SpringWeb提供了JavaWeb应用的框架或与其他流行的Web框架进行集成。 就是说可将两者一起使用,达到将两者自身的特点进行互补。 Hibernate: Hibernate是一个免费的开源Java包,它使得与关系数据库打交道变得十分轻松,就像您的数据库中包含每天使用的普通Java对象一样,同时不必考虑如何把它们从神秘的数据库表中取出(或放回到数据库表中)。 它解放了您,使您可以专注于应用程序的对象和功能,而不必担心如何保存它们或稍
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面试 题目 汇总 Java