当前位置:955范文网 >专题范文 > 公文范文 > java开发面试题3篇

java开发面试题3篇

时间:2022-12-30 19:42:01 来源:网友投稿

java开发面试题1  1.hibernate中的java对象有几种状态,其相互关系如何(区别和相互转换)。  解答:在Hibernate中,对象有三种状态:临时状态、持久状态和游离状态。临时状态:下面是小编为大家整理的java开发面试题3篇,供大家参考。

java开发面试题3篇

java开发面试题1

  1.hibernate中的java对象有几种状态,其相互关系如何(区别和相互转换)。

  解答:在Hibernate中,对象有三种状态:临时状态、持久状态和游离状态。 临时状态:当new一个实体对象后,这个对象处于临时状态,即这个对象只是一个保存临时数据的内存区域,如果没有变量引用这个对象,则会被jre垃圾回收机制回收。这个对象所保存的数据与数据库没有任何关系,除非通过Session的save或者SaveOrUpdate把临时对象与数据库关联,并把数据插入或者更新到数据库,这个对象才转换为持久对象;

  持久状态:持久化对象的实例在数据库中有对应的记录,并拥有一个持久化表示(ID)。对持久化对象进行delete操作后,数据库中对应的记录将被删除,那么持久化对象与数据库记录不再存在对应关系,持久化对象变成临时状态。

  持久化对象被修改变更后,不会马上同步到数据库,直到数据库事务提交。在同步之前,持久化对象是脏的(Dirty)。

  游离状态:当Session进行了Close、Clear或者evict后,持久化对象虽然拥有持久化标识符和与数据库对应记录一致的值,但是因为会话已经消失,对象不在持久化管理之内,所以处于游离状态(也叫:脱管状态)。游离状态的对象与临时状态对象是十分相似的,只是它还含有持久化标识。

  2.对hibernate的延迟加载如何理解,在实际应用中,延迟加载与session关闭的矛盾是如何处理的?

  解答:延迟加载就是并不是在读取的时候就把数据加载进来,而是等到使用时再加载。那么Hibernate是怎么知识用户在什么时候使用数据了呢?又是如何加载数据呢?其实很简单,它使用了代理机制。返回给用户的并不是实体本身,而是实体对象的代理。代理对象在用户调用getter方法时就会去数据库加载数据。但加载数据就需要数据库连接。而当我们把会话关闭时,数据库连接就同时关闭了。这种情况就叫做未初始化的关系。

  延迟加载与session关闭的矛盾一般可以这样处理:

  1)、关闭延迟加载特性。

  操作起来比较简单,因为hibernate的延迟加载特性是在hbm配置里面可控制的"。默认lazy=”true”,具体配置可以查看一下相关文档,就不详细叙述了。

  但使用这个解决办法带来的隐患是十分大的。

  首先,出现no session or session was closed就证明了您已经在使用外键关联表,如果去掉延迟加载的话,则表示每次查询的开销都会变得十分的大,如果关联表越多,后果也可以想象得到。所以不建议使用这个方法解决。

  2)、在session关闭之前把我们想要查询的数据先获取了。

  首先需要了解一下session什么时候关闭,也就是它的生命周期。通常情况下hibernate会在

  查询数据关闭session,而使用getHibernateTemplate().get方法查询后会延迟关闭的时间。会在事务结束后才关闭。

  使用*(Interceptor)或过滤器(Filter)控制session。

  spring为解决hibernate这一特性提供的解决方案,可以有效的控制session生命周期。

  3.什么是AOP和OOP,IOC和DI有什么不同?

  解答:

  1)面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构。AOP是OOP的延续,是Aspect Oriented Programming的缩写,意思是面向方面编程。 将通用需求功能从不相关类之中分离出来;同时,能够使得很多类共享一个行为,一旦行为发生变化,不必修改很多类,只要修改这个行为就可以。AOP就是这种实现分散关注的编程方法,它将“关注”封装在“方面”中

  2)控制反转IOC(Inversion of Control) 控制指的就是程序相关类之间的依赖关系.传统观念设计中,通常由调用者来创建被调用者的实例, 在Spring里,创建被调用者的工作不再由调用者来完成,而是由Spring容器完成,依赖关系被反转了,称为控制反转,目的是为了获得更好的扩展性和良好的可维护性。依赖注入(Dependency injection)创建被调用者的工作由Spring容器完成,然后注入调用者,因此也称依赖注入。控制反转和依赖注入是同一个概念。

java开发面试题2

  1.Struts1中actionform和action属于MVC哪一层,为什么?

  解答:actionform和action属于MVC的Model层,Action用来处理业务逻辑,actionform保存用户表单数据以便于在不同页面间传递。而MVC中的model层就是业务逻辑层,该层用于实现具体的业务逻辑、状态维护及管理。

  2.error和exception有什么区别?

  解答:

  error表示系统级的错误和程序不必处理的异常,是恢复不是不可能但很困难的情况下的一种严重问题;比如内存溢出,不可能指望程序能处理这样的情况; exception表示需要捕捉或者需要程序进行处理的异常,是一种设计或实现问题;也就是说,它表示如果程序运行正常,从不会发生的情况。

  3.Log4J是Apache组织的开源一个开源项目,通过Log4J,可以指定日志信息输出的目的地,如console、file等。Log4J采用日志级别机制,请按照输出级别由低到高的顺序写出日志输出级别。

  解答:Log4J分 为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别,优先级从高到低分别是 ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别, 则应用程序中所有DEBUG级别的日志信息将不被打印出来。

  4.说出几个与spring同类型的开源框架,说出几个与hibernate同类型的开源框架,说出几个与struts同类型的开源框架

  解答:

  1)与spring同类型的开源框架:JUIDE、EJB3.0、picoContainer

  2)与hibernate同类型的开源框架 :ibatis,jdo,JPA

  3)几个与struts同类型的开源框架:webwork,tapestry,JSF


java开发面试题3篇扩展阅读


java开发面试题3篇(扩展1)

——java面试题3篇

java面试题1

  1、&和&&的区别?

  答:&运算符有两种用法:(1)按位与;(2)逻辑与。&&运算符是短路与运算。逻辑与跟短路与的差别是非常巨大的,虽然二者都要求运算符左右两端的布尔值都是true整个表达式的值才是true。&&之所以称为短路运算是因为,如果&&左边的表达式的值是false,右边的表达式会被直接短路掉,不会进行运算。很多时候我们可能都需要用&&而不是&,例如在验证用户登录时判定用户名不是null而且不是空字符串,应当写为:username != null &&!username.equals(""),二者的顺序不能交换,更不能用&运算符,因为第一个条件如果不成立,根本不能进行字符串的equals比较,否则会产生NullPointerException异常。注意:逻辑或运算符(|)和短路或运算符(||)的差别也是如此。

  补充:如果你熟悉JavaScript,那你可能更能感受到短路运算的强大,想成为JavaScript的高手就先从玩转短路运算开始吧。

  2、解释内存中的栈(stack)、堆(heap)和静态区(static area)的用法。

  答:通常我们定义一个基本数据类型的变量,一个对象的引用,还有就是函数调用的现场保存都使用内存中的栈空间;而通过new关键字和构造器创建的对象放在堆空间;程序中的字面量(literal)如直接书写的100、"hello"和常量都是放在静态区中。栈空间操作起来最快但是栈很小,通常大量的对象都是放在堆空间,理论上整个内存没有被其他进程使用的空间甚至硬盘上的虚拟内存都可以被当成堆空间来使用。

  String str = new String("hello");

  上面的语句中变量str放在栈上,用new创建出来的字符串对象放在堆上,而"hello"这个字面量放在静态区。

  补充:较新版本的Java(从Java 6的某个更新开始)中使用了一项叫"逃逸分析"的技术,可以将一些局部对象放在栈上以提升对象的操作性能。

  3、Math.round(11.5) 等于多少?Math.round(-11.5)等于多少?

  答:Math.round(11.5)的返回值是12,Math.round(-11.5)的返回值是-11。四舍五入的原理是在参数上加0.5然后进行下取整。

  4、swtich 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上?

  答:在Java 5以前,switch(expr)中,expr只能是byte、short、char、int。从Java 5开始,Java中引入了枚举类型,expr也可以是enum类型,从Java 7开始,expr还可以是字符串(String),但是长整型(long)在目前所有的版本中都是不可以的。

java面试题2

  1、数组有没有length()方法?String有没有length()方法?

  答:数组没有length()方法,有length 的属性。String 有length()方法。JavaScript中,获得字符串的长度是通过length属性得到的,这一点容易和Java混淆。

  2、在Java中,如何跳出当前的多重嵌套循环?

  答:在最外层循环前加一个标记如A,然后用break A;可以跳出多重循环。(Java中支持带标签的break和continue语句,作用有点类似于C和C++中的goto语句,但是就像要避免使用goto一样,应该避免使用带标签的break和continue,因为它不会让你的程序变得更优雅,很多时候甚至有相反的作用,所以这种语法其实不知道更好)

  3、构造器(constructor)是否可被重写(override)?

  答:构造器不能被继承,因此不能被重写,但可以被重载。

  4、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?

  答:不对,如果两个对象x和y满足x.equals(y) == true,它们的哈希码(hash code)应当相同。Java对于eqauls方法和hashCode方法是这样规定的:(1)如果两个对象相同(equals方法返回true),那么它们的.hashCode值一定要相同;(2)如果两个对象的hashCode相同,它们并不一定相同。当然,你未必要按照要求去做,但是如果你违背了上述原则就会发现在使用容器时,相同的对象可以出现在Set集合中,同时增加新元素的效率会大大下降(对于使用哈希存储的系统,如果哈希码频繁的冲突将会造成存取性能急剧下降)。

java面试题3

  问题1:GregorianCalendar类是什么东西?

  答案:GregorianCalendar提供了西方传统日历的支持。

  问题2:ResourceBundle类是什么?

  答案:ResourceBundle用来存储指定语言环境的资源,应用程序可以根据运行时的语言环境来加载这些资源,从而提供不同语言的展示。

  问题3:为什么Java里没有全局变量?

  答案:全局变量是全局可见的",Java不支持全局可见的变量,因为:全局变量破坏了引用透明性原则。全局变量导致了命名空间的冲突。

  问题4:SimpleTimeZone类是什么?

  答案:SimpleTimeZone提供公历日期支持。

  问题5:while循环和do循环有什么不同?

  答案:while结构在循环的开始判断下一个迭代是否应该继续。do/while结构在循环的结尾来判断是否将继续下一轮迭代。do结构至少会执行一次循环体。

  问题6:Locale类是什么?

  答案:Locale类用来根据语言环境来动态调整程序的输出。

  问题7:面向对象编程的原则是什么?

  答案:主要有三点,多态,继承和封装。

  问题8:介绍下继承的原则

  答案:继承使得一个对象可以获取另一个对象的属性。使用继承可以让已经测试完备的功能得以复用,并且可以一次修改,所有继承的地方都同时生效。


java开发面试题3篇(扩展2)

——java开发面试题及答案3篇

java开发面试题及答案1

  1.JSP页面之间传递参数的方法有哪些?

  解答:

  1)request

  2)session

  3)application

  4)提交表单

  5)超链接

  2.forward 和redirect的区别

  解答:forward是容器中控制权的转向,是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。

  redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,并且从浏览器的地址栏中可以看到跳转后的链接地址。前者更加高效,在前者可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐藏实际的链接;在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用sendRedirect()方法。

  3.Java反射机制的作用?

  解答:Java反射机制的作用是:

  1)在运行时判断任意一个对象所属的类。

  2)在运行时构造任意一个类的对象。

  3)在运行时判断任意一个类所具有的成员变量和方法。

  4)在运行时调用任意一个对象的方法

  4.你是怎么理解java的泛型的?

  解答: 在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患。

  泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。

  泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。

  5.JAVA源文件中是否可以包括多个类,有什么限制

  解答:一个java源文件中可以包含多个类,每个源文件中至多有一个public类,如果有的话,那么源文件的名字必须与之相同。如果源文件中没有public类,则源文件用什么名字都可以,但最好还是具有特定的意义,免得自己都不记得里面写的是什么了。

  6.在一个千万级的数据库查寻中,如何提高查询效率?分别说出在数据库设计、SQL语句、java等层面的解决方案。

  解答:

  1)数据库设计方面:

  a. 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。

  b. 应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id from t where num=0

  c. 并不是所有索引对查询都有效,SQL是根据表中数据来进行查询优化的,当索引列有大量数据重复时,查询可能不会去利用索引,如一表中有字段sex,male、female几乎各一半,那么即使在sex上建了索引也对查询效率起不了作用。

  d. 索引并不是越多越好,索引固然可以提高相应的 select 的效率,但同时也降低了 insert 及 update 的效率,因为 insert 或 update 时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。一个表的索引数最好不要超过6个,若太多则应考虑一些不常使用到的列上建的"索引是否有必要。

  e. 应尽可能的避免更新索引数据列,因为索引数据列的顺序就是表记录的物理存储顺序,一旦该列值改变将导致整个表记录的顺序的调整,会耗费相当大的资源。若应用系统需要频繁更新索引数据列,那么需要考虑是否应将该索引建为索引。

  f. 尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。

  g. 尽可能的使用 varchar/nvarchar 代替 char/nchar ,因为首先变长字段存储空间小,可以节省存储空间,其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些。

  h. 尽量使用表变量来代替临时表。如果表变量包含大量数据,请注意索引非常有限(只有主键索引)。

  i. 避免频繁创建和删除临时表,以减少系统表资源的消耗。

  j. 临时表并不是不可使用,适当地使用它们可以使某些例程更有效,例如,当需要重复引用大型表或常用表中的某个数据集时。但是,对于一次性事件,最好使用导出表。

  k. 在新建临时表时,如果一次*入数据量很大,那么可以使用 select into 代替 create table,避免造成大量 log ,以提高速度;如果数据量不大,为了缓和系统表的资源,应先create table,然后insert。

  l. 如果使用到了临时表,在存储过程的最后务必将所有的临时表显式删除,先 truncate table ,然后 drop table ,这样可以避免系统表的较长时间锁定。

  2)SQL语句方面:

  a. 应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。

  b. 应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num=10 or num=20 可以这样查询: select id from t where num=10 union all select id from t where num=20

  c. in 和 not in 也要慎用,否则会导致全表扫描,如: select id from t where num in(1,2,3) 对于连续的数值,能用 between 就不要用 in 了: select id from t where num between 1 and 3

  d. 下面的查询也将导致全表扫描: select id from t where name like ‘%abc%’

  e. 如果在 where 子句中使用参数,也会导致全表扫描。因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。然而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。如下面语句将进行全表扫描: select id from t where num=@num 可以改为强制查询使用索引: select id from t with(index(索引名)) where num=@num

  f. 应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如: select id from t where num/2=100 应改为: select id from t where num=100*2

  g. 应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。如: select id from t where substring(name,1,3)=’abc’–name以abc开头的id select id from t where datediff(day,createdate,’2005-11-30′)=0–‘2005-11-30’生成的id 应改为: select id from t where name like ‘abc%’ select id from t where createdate>=’2005-11-30′ and createdate<’2005-12-1′

  h. 不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。

  i. 不要写一些没有意义的查询,如需要生成一个空表结构: select col1,col2 into #t from t where 1=0 这类代码不会返回任何结果集,但是会消耗系统资源的,应改成这样: create table #t(„)

  j. 很多时候用 exists 代替 in 是一个好的选择: select num from a where num in(select num from b) 用下面的语句替换: select num from a where exists(select 1 from b where num=a.num)

  k. 任何地方都不要使用 select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。

  l. 尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该考虑改写。

  m. 尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理。

  n. 尽量避免大事务操作,提高系统并发能力。

  3)java方面:

  a.尽可能的少造对象。

  b.合理摆正系统设计的位置。大量数据操作,和少量数据操作一定是分开的。大量的数据操作,肯定不是ORM框架搞定的。,

  c.使用jDBC链接数据库操作数据

  d.控制好内存,让数据流起来,而不是全部读到内存再处理,而是边读取边处理;

  e.合理利用内存,有的数据要缓存

java开发面试题及答案2

  1.请解释分布式事务管理?

  解答:分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。为了实现分布式事务,需要使用下面将介绍的两阶段提交协议。

  阶段一:开始向事务涉及到的全部资源发送提交前信息。此时,事务涉及到的资源还有最后一次机会来异常结束事务。如果任意一个资源决定异常结束事务,则整个事务取消,不会进行资源的更新。否则,事务将正常执行,除非发生灾难性的失败。为了防止会发生灾难性的失败,所有资源的更新都会写入到日志中。这些日志是永久性的,因此,这些日志会幸免遇难并且在失败之后可以重新对所有资源进行更新。

  阶段二:只在阶段一没有异常结束的时候才会发生。此时,所有能被定位和单独控制的资源管理器都将开始执行真正的数据更新。 在分布式事务两阶段提交协议中,有一个主事务管理器负责充当分布式事务协调器的角色。事务协调器负责整个事务并使之与网络中的其他事务管理器协同工作。 为了实现分布式事务,必须使用一种协议在分布式事务的各个参与者之间传递事务上下文信息,IIOP便是这种协议。这就要求不同开发商开发的事务参与者必须支持一种标准协议,才能实现分布式的事务。

  2.请写出5种常见到的runtime exception。

  解答:

  NullPointerException:当操作一个空引用时会出现此错误。

  NumberFormatException:数据格式转换出现问题时出现此异常。

  ClassCastException:强制类型转换类型不匹配时出现此异常。

  ArrayIndexOutOfBoundsException:数组下标越界,当使用一个不存在的数组下标时出现此异常。

  ArithmeticException:数*行错误时出现此异常

  3.数组有没有length()这个方法?String有没有length()这个方法?

  解答:数组没有length()方法 它有length属性

  String有length()方法。

  4.请写出一个单例模式。

  解答:单例模式(Singleton pattern):确保一个类只有一个实例,并提供一个全局的访问点

  public class EagerSingleton { private static final EagerSingleton m_instance = new EagerSingleton(); /** * 私有的默认构造子 */ private EagerSingleton() { } /** * 静态工厂方法 */ public static EagerSingleton getInstance() { return m_instance; } }

  5.在java中,List是个接口,那实现List接口的类有哪些,有什么区别?

  解答: ArrayList是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,

  LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。

  6.char类型能否存储一个中文字符?为什么

  解答:可以。一个char是两个字节,而一个中文也是两个字节。


java开发面试题3篇(扩展3)

——java软件开发工程师面试题3篇

java软件开发工程师面试题1

  1.存储过程和函数的区别

  从参数的返回其情况来看:

  如果返回多个参数值最好使用存储过程,如果只有一个返回参数值的话可以使用函数。 从调用情况来看:

  如果在SQL语句(DML或者select)中调用的话一定是存储函数或者是存储的分装函数不可以是存储过程,但是调用存储函数的时候还有很多限制以及函数的纯度等级问题,如果实在过程化语句中调用的虎牙,就要看你是实现什么样的功能。函数一般情况先是用来计算并返回一个计算结果而存储过程一般是一用来完成特定的数据操作(比如修改、插入数据库表或执行某些dml语句),所有虽然他们的语法上很相似但用户在使用他们的时候所需要完成的功能大部分情况下是不同的。

  2.试述数据库完整保护的主要任务和措施

  数据库的完整性保护也就是数据库中正确性的维护。数据库的完整性包括三个内容:实体完整性规则、参照物完整性规则和用户定义完整性规则。前两个使用DBMS自动处理。

  实体完整性规则:是说针对基表中的关键字属性不能为空值,是数据库完整性的基本要求,主关键字和元组的唯一性对应。

  参照物完整性规则:是不允许引用不存在的元组:即基表中的外关键字要么为空,要么关联基表中必然存在元组。

  用户定义完整性规则:针对具体的数据环境由用户具体设置的规则,它反映了具体应用中的语义要求。一个完整性规则一般有下面三个部分组成:完整性约束条件设置,完整性约束条件的检验以及完整性约束条件的处理。后两部分在数据库中一般由相应的模块处理。另外触发器也可以做完整性的保护,但触发器大量用于主动性领域。

  3.请说明SQLServer中的delete from tablea & truncate table tablea的区别。

  两者都可以用来删除表中的所有记录。区别在于:truncate是DDL操作,它移动HWK,是HWK值为0,不需要rollback segment ,而Delete是DML操作需要rollback segment 且话费较长时间。

  4.Oracle安装完成后,如何使用命令行启动和关闭数据库?

  打开:STARTUP [RESTRICT] [PFILE=filename] [OPEN [RECOVER][database] ]| MOUNT |NOMOUNT

  STARTUP OPEN:STARTUP :缺省的参数是OPEN,打开数据库,允许数据库的访问。当前实力的控制文件中描述的所有文件都已打开。

  STARTUP MOUNT:MOUNT数据库,仅仅给DBA进行管理操作,不允许数据库用户的访问。仅仅只是当前实例的控制文件打开,数据文件未打开。

  STARTU NOMOUNT :仅仅通过初始化文件,分配出SGA区,启动数据库后台进程,没有打开控制文件和数据文件。不能访问任何数据库。

  STARTUP PFILE=filename :以filename为初始化文件启动数据库。不是采用缺省初始化文件。

  STARTUP FORCE:中止当前数据库的运行,并开始重新正常的启动数据库。

  STARTUP RESTRICT:只允许具有RESTRICTED SESSION权限的用户访问数据库。

  STARTUP RECOVER:数据库启动,并开始介质恢复。

  关闭:shutdown有四个参数:NOMAL、TRANSACTIONAL、IMMEDIATE、ABORT。缺省不带任何参数时表示NORMAL。

  SHUTDOWN NORMA:不允许新的连接、等待会话结束、等待事务结束、做一个检查点并关闭数据文件。启动时不需要实例恢复。

  SHUTDOWN TRANSACTIONAL:不允许新的连接、不等待会话结束、等待事务结束做一个检查点并关闭数据文件。启动时不需要实例恢复。

  SHUTDOWN IMMEDIATE:不允许新的连接,不等待会话结束、不等待事务结束、做一个检查点并关闭数据文件。没有结束的事务是自动rollback的。启动时不需要实例恢复。

  SHUTDOWN ABORT:不允许新的连接、不等待会话结束、不等待事务结束、不做检查点并且没有关闭数据文件。启动时自动进行实例恢复。

  另外,对于NORMAL、TRANSACTIONAL、IMMEDIATE,DE Buffer Cache的内容写入了数据文件,没有提交的事务被回滚,所有的资源被释放,数据库*净的关闭。对于ABORT,DB Buffer Cache的内容没有被写入数据文件,没有提交的事务也没有回滚。数据库没有dismount和关闭,数据文件也没有关闭。当数据库启东市,需要通过redo log恢复数据,通过回滚段对事物回滚,对资源进行释放。

java软件开发工程师面试题2

  1.类有哪三种基本特性?各特性的优点?

  类具有封装性、继承性、和多态性。

  封装性:类的封装性为类的成员提供公有、缺省、保护和私有等多级访问权限,目的是隐藏类中的私有变量和类中的方法的实现细节。

  继承性:类的继承性提供从已存在的类的创建新类的机制,继承(inheritance)使一个新类自动拥有被继承类(父类)的全部可继承的成员。

  多态性:类的多态性提供类中方法执行的多样性,多态性有两种表现形式:重载和覆盖。

  2.谈谈对XML的理解?说明web应用中web.xml文件的作用?

  XML(Extensible Markup Language)即可扩展标记语言,它与HTML一样,都是SGML(Standard Generalized Markup Language标砖通用标记语言)。XML是Internrt环境中跨*台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具。拓展标记语言XML是一种简单的实际存储语言,使用一系列简单的`标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML极其简单易于掌握和使用。

  Web.xml的作用是配置欢迎页,servlet 、filter、listenter等的。

  3.Jsp有哪些内置对象?作用分别是什么?

  1).request 表示HttpServlet Request对象。它包含了有关浏览器请求的信息,并且提供了几个获取cookie,header和session数据的有用的方法。

  2).response表示HttpServletResponse对象,并且提供了几个用于设置送回浏览器的响应的方法(如cookies,header信息等)

  3).out对象是javax.jsp.JspWriter的一个实例,并提供了几个方法能用于向浏览器回送输出结果

  4).pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间、servlet相关的对象API,并且包装了用用的servlet相关功能的方法。

  5).session表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信息。

  6).application表示一个javax.servlet.ServletContext对象,这有助于查找有关servlet引擎和servlet环境信息。

  7).config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数

  8).page表示从该页面产生的一个servlet实例

  9).exceptiom针对错误页面,未捕捉的例外

  4.事务是什么?有哪些属性,并且简要说明这些属性的含义。

  事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。 事务通常是由高级数据库操纵语言(如SQL,C++或java)书写的用户程序的执行所引起,并用刑辱begin transaction 和end transaction语句(或者函数调用)来界定。事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。

  事务具有4个属性:原子性、一致性、隔离性、持续性。这4个属性通常称之为ACID特性。

  原子性(atomicity):一个事务是一个不可分割的工作单位,事务中包括的著操作要么都做,要么都不做。

  一致性(consistency):事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。

  隔离性(isolation):一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。

  持久性(durability):持久性也称之为永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。


java开发面试题3篇(扩展4)

——java测试面试题3篇

java测试面试题1

  1. 运行时异常与一般异常有何异同?

  解答:异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。

  2. Hibernate中:不看数据库,不看XML文件,不看查询语句,怎么样能知道表结构?

  解答:可以看与XML文件对应的域模型。

  3.存储过程和函数的区别

  解答:

  从参数的返回情况来看:

  如果返回多个参数值最好使用存储过程,如果只有一个返回值的话可以使用函数。

  从调用情况来看:

  如果在SQL语句(DML或SELECT)中调用的话一定是存储函数或存储的封装函数不可以是存储过程,但调用存储函数的时候还有好多限制以及函数的纯度等级的问题,如果是在过程化语句中调用的话,就要看你要实现什么样的功能。函数一般情况下是用来计算并返回一个计算结果而存储过程一般是用来完成特定的数据操作(比如修改、插入数据库表或执行某些DDL语句等等),所以虽然他们的语法上很相似但用户在使用他们的时候所需要完成的功能大部分情况下是不同的。

  4.试述数据库完整保护的主要任务和措施。

  解答:数据库的完整性保护也就是数据库中数据正确性的维护。数据库完整性包括三个内容:实体完整性规则,参照物完整性规则以及用户定义完整性规则。 前两个是有DBMS自动处理。

  实体完整性规则是说针对于基表中的关键字中属性值不能为空值,是数据库完整性的基本要求,主关键字和元组的唯一性对应。

  参照物完整性规则是不允许引用不存在的元组:即基表中的外关键字要么为空,要么关联基表中必存在元组。

  用户定义完整性规则针对具体的数据环境由用户具体设置的规则,它反应了具体应用中的语义要求。 一个完整性规则一般由下面三部分组成:完整性约束条件设置,完整性约束条件的检查以及完整性约束条件的处理.后两部分在数据库中一般有相应的模块处理。另外触发器也可以做完整性的保护,但触发器大量用于主动性领域。

java测试面试题2

  1.请说明SQLServer中delete from tablea & truncate table tablea的区别

  解答:两者都可以用来删除表中所有的记录。区别在于:truncate是DDL操作,它移动HWK,使HWK值为0,不需要 rollback segment .而Delete是DML操作需要rollback segment 且花费较长时间.

  2. Oracle安装完成后,如何用命令行启动和关闭数据库?

  解答:

  打开:STARTUP [FORCE] [RESTRICT] [PFILE= filename] [OPEN [RECOVER][ database] | MOUNT | NOMOUNT] STARTUP OPEN:STARTUP缺省的参数就是OPEN,打开数据库,允许数据库的访问。当前实例的控制文件中所描述的所有文件都已经打开。 STARTUP MOUNT:MOUNT数据库,仅仅给DBA进行管理操作,不允许数据库的用户访问。仅仅只是当前实例的控制文件被打开,数据文件未打开。 STARTUP NOMOUNT:仅仅通过初始化文件,分配出SGA区,启动数据库后台进程,没有打开控制文件和数据文件。不能访问任何数据库。 STARTUP PFILE= filename:以filename为初始化文件启动数据库,不是采用缺省初始化文件。 STARTUP FORCE:中止当前数据库的运行,并开始重新正常的启动数据库。 STARTUP RESTRICT:只允许具有RESTRICTED SESSION权限的用户访问数据库。 STARTUP RECOVER:数据库启动,并开始介质恢复

  关闭

  SHUTDOWN有四个参数:NORMAL、TRANSACTIONAL、IMMEDIATE、ABORT。缺省不带任何参数时表示是NORMAL。

  命令SHUTDOWN NORMAL:不允许新的连接、等待会话结束、等待事务结束、做一个检查点并关闭数据文件。启动时不需要实例恢复。 SHUTDOWN TRANSACTIONAL:不允许新的连接、不等待会话结束、等待事务结束、做一个检查点并关闭数据文件。启动时不需要实例恢复。 SHUTDOWN IMMEDIATE:不允许新的连接、不等待会话结束、不等待事务结束、做一个检查点并关闭数据文件。没有结束的事务是自动rollback的。启动时不需要实例恢复。 SHUTDOWN ABORT:不允许新的连接、不等待会话结束、不等待事务结束、不做检查点且没有关闭数据文件。启动时自动进行实例恢复。 另外,对于NORMAL、TRANSACTIONAL、IMMEDIATE,DB Buffer Cache的内容写入了数据文件,没有提交的事务被回滚,所有的资源被释放,数据库被“干净”的关闭。 对于ABORT,DB Buffer Cache的内容没有写入数据文件,没有提交的事务也没有回滚。数据库没有dismount和关闭,数据文件也没有关闭。当数据库启动时,需要通过redo log恢复数据,通过回滚

  段对事务回滚,对资源进行释放。


java开发面试题3篇(扩展5)

——java面试题集3篇

java面试题集1

  1.Java的HashMap是如何工作的?

  HashMap是一个针对数据结构的键值,每个键都会有相应的值,关键是识别这样的值。

  HashMap 基于 hashing 原理,我们通过 put ()和 get ()方法储存和获取对象。当我们将键值对传递给 put ()方法时,它调用键对象的 hashCode ()方法来计算 hashcode,让后找到 bucket 位置来储存值对象。当获取对象时,通过键对象的 equals ()方法找到正确的键值对,然后返回值对象。HashMap 使用 LinkedList 来解决碰撞问题,当发生碰撞了,对象将会储存在 LinkedList 的下一个节点中。 HashMap 在每个 LinkedList 节点中储存键值对对象。

  2.什么是快速失败的故障安全迭代器?

  快速失败的Java迭代器可能会引发ConcurrentModifcationException在底层集合迭代过程中被修改。故障安全作为发生在实例中的一个副本迭代是不会抛出任何异常的。快速失败的故障安全范例定义了当遭遇故障时系统是如何反应的。例如,用于失败的快速迭代器ArrayList和用于故障安全的迭代器ConcurrentHashMap。

  3.Java BlockingQueue是什么?

  Java BlockingQueue是一个并发集合util包的一部分。BlockingQueue队列是一种支持操作,它等待元素变得可用时来检索,同样等待空间可用时来存储元素。

  4.什么时候使用ConcurrentHashMap?

  在问题2中我们看到ConcurrentHashMap被作为故障安全迭代器的一个实例,它允许完整的并发检索和更新。当有大量的并发更新时,ConcurrentHashMap此时可以被使用。这非常类似于Hashtable,但ConcurrentHashMap不锁定整个表来提供并发,所以从这点上ConcurrentHashMap的性能似乎更好一些。所以当有大量更新时ConcurrentHashMap应该被使用。

  5.哪一个List实现了最快插入?

  LinkedList和ArrayList是另个不同变量列表的实现。ArrayList的优势在于动态的增长数组,非常适合初始时总长度未知的情况下使用。LinkedList的优势在于在中间位置插入和删除操作,速度是最快的。

  LinkedList实现了List接口,允许null元素。此外LinkedList提供额外的get,remove,方法在LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)。

  ArrayList实现了可变大小的数组。它允许所有元素,包括null。 每个ArrayList实例都有一个容量(Capacity),即用于存储元素的数组的大小。这个容量可随着不断添加新元素而自动增加,但是增长算法并没有定义。当需要插入大量元素时,在插入前可以调用ensureCapacity方法来增加ArrayList的容量以提高插入效率。

java面试题集2

  1.Iterator和ListIterator的.区别

  ●ListIterator有add()方法,可以向List中添加对象,而Iterator不能。

  ●ListIterator和Iterator都有hasNext()和next()方法,可以实现顺序向后遍历,但是ListIterator有hasPrevious()和previous()方法,可以实现逆向(顺序向前)遍历。Iterator就不可以。

  ●ListIterator可以定位当前的索引位置,nextIndex()和previousIndex()可以实现。Iterator没有此功能。

  ●都可实现删除对象,但是ListIterator可以实现对象的修改,set()方法可以实现。Iierator仅能遍历,不能修改。

  2.什么是CopyOnWriteArrayList,它与ArrayList有何不同?

  CopyOnWriteArrayList是ArrayList的一个线程安全的变体,其中所有可变操作(add、set等等)都是通过对底层数组进行一次新的复制来实现的。相比较于ArrayList它的写操作要慢一些,因为它需要实例的快照。

  CopyOnWriteArrayList中写操作需要大面积复制数组,所以性能肯定很差,但是读操作因为操作的对象和写操作不是同一个对象,读之间也不需要加锁,读和写之间的同步处理只是在写完后通过一个简单的"="将引用指向新的数组对象上来,这个几乎不需要时间,这样读操作就很快很安全,适合在多线程里使用,绝对不会发生ConcurrentModificationException ,因此CopyOnWriteArrayList适合使用在读操作远远大于写操作的场景里,比如缓存。

  3.迭代器和枚举之间的区别

  如果面试官问这个问题,那么他的意图一定是让你区分Iterator不同于Enumeration的两个方面:

  ●Iterator允许移除从底层集合的元素。

  ●Iterator的方法名是标准化的。

  4.Hashmap如何同步?

  当我们需要一个同步的HashMap时,有两种选择:

  ●使用Collections.synchronizedMap(..)来同步HashMap。

  ●使用ConcurrentHashMap的

  这两个选项之间的首选是使用ConcurrentHashMap,这是因为我们不需要锁定整个对象,以及通过ConcurrentHashMap分区地图来获得锁。

  5.IdentityHashMap和HashMap的区别

  IdentityHashMap是Map接口的实现。不同于HashMap的,这里采用参考*等。

  ●在HashMap中如果两个元素是相等的,则key1.equals(key2)

  ●在IdentityHashMap中如果两个元素是相等的,则key1 == key2


java开发面试题3篇(扩展6)

——前端开发面试技巧3篇

前端开发面试技巧1

  1、面试技巧:如何回答问题

  (1) 把握重点,简捷明了,条理清楚,有理有据。一般情况下回答问题要结论在先,议论在后,先将自己的中心意思表达清晰,然后再做叙述和论证。否则,长篇大论,会让人不得要领。面试时间有限,如果多余的话太多,容易走题,反倒会将主题冲淡或漏掉。这一点在面试自我介绍的时候尤其需要注意。

  Web前端面试技巧:注意事项跟技巧

  (2) 讲清原委,避免抽象。用人单位提问总是想了解一些应试者的具体情况,切不可简单地仅以“是”和“否”作答。应针对所提问题的不同,有的需要解释原因,有的需要说明程度。不讲原委,过于抽象的回答,往往不会给主试者留下具体的印象。

  (3) 确认提问内容,切忌答非所问。面试中,如果对用人单位提出的问题,一时摸不到边际,以致不知从何答起或难以理解对方问题的含义时,可将问题复述一遍,并先谈自己对这一问题的理解,请教对方以确认内容。对不太明确的问题,一定要搞清楚,这样才会有的放矢,不致答非所问。

  (4) 有个人见解,有个人特色。用人单位有时接待应试者若干名,相同的问题问若干遍,类似的回答也要听若干遍。因此,用人单位会有乏味、枯燥之感。只有具有独到的个人见解和个人特色的回答,才会引起对方的兴趣和注意。

  (5) 知之为知之,不知为不知。面试遇到自己不知、不懂、不会的问题时,回避闪烁,默不作声,牵强附会,不懂装懂的做法均不足取,诚恳坦率地承认自己的不足之处,反倒会赢得主试者的信任和好感。

  2、面试技巧:如何消除紧张

  由于面试成功与否关系到求职者的前途,所以大学生面试时往往容易产生紧张情绪。有些大学生可能由于过度紧张而导致面试失败。因此必须设法消除过度的紧张情绪。这里介绍几种消除过度紧张的技巧,供同学们参考。

  (1) 面试前可翻阅一本轻松活泼、有趣的杂志书籍。这时阅读书刊可以转移注意力,调整情绪,克服面试时的怯场心理。避免等待时紧张、焦虑情绪的产生。

  (2) 面试过程中注意控制谈话节奏。进入试场致礼落座后,若感到紧张先不要急于讲话,而应集中精力听完提问,再从容应答。一般来说人们精神紧张的时候讲话速度会不自觉地加快,讲话速度过快,既不利于对方听清讲话内容,又会给人一种慌张的感觉。讲话速度过快,还往往容易出错,甚至张口结舌,进而强化自己的紧张情绪 ,导致思维混乱。当然,讲话速度过慢,缺乏激情,气氛沉闷,也会使人生厌。为了避免这一点,一般开始谈话时可以有意识地放慢讲话速度,等自己进入状态后再适当增加语气和语速。这样,既可以稳定自己的紧张情绪,又可以扭转面试的沉闷气氛。

  (3) 回答问题时,目光可以对准提问者的额头。有的人在回答问题时眼睛不知道往哪儿看。 经验证明,魂不守舍,目光不定的人,使人感到不诚实;眼睛下垂的人,给人一种缺乏自信的印象;两眼直盯着提问者,会被误解为向他挑战,给人以桀骜不驯的感觉。如果面试时把目光集中在对方的额头上,既可以给对方以诚恳、自信的印象,也可以鼓起自己的勇气,消除自己的紧张情绪。

  3、面试技巧:如何运用语言

  面试场上你的语言表达艺术标志着你的成熟程度和综合素养。对求职应试者来说,掌握语言表达的技巧无疑是重要的。那么,面试中怎样恰当地运用谈话的技巧呢?

  (1) 口齿清晰,语言流利,文雅大方。交谈时要注意发音准确,吐字清晰。还要注意控制说话的速度,以免磕磕绊绊,影响语言的流畅。忌用口头禅,更不能有不文明的语言。

  (2) 语气*和,语调恰当,音量适中。面试时要注意语言、语调、语气的正确运用。打招呼时宜用上语调,加重语气并带拖音,以引起对方的注意。自我介绍时,最好多用*缓的陈述语气,不宜使用感叹语气或祈使句。声音过大令人厌烦,声音过小则难以听清。以每个用人单位都能听清你的讲话为原则。

  (3)注意听者的反应。求职面试不同于演讲,而是更接近于一般的交谈。交谈中,应随时注意听者的反应。比如,听者心不在焉,可能表示他对自己这段话没有兴趣,你得设法转移话题;侧耳倾听,可能说明由于自己音量过小使对方难于听清;皱眉、摆头可能表示自己言语有不当之处。根据对方的这些反应,就要适时地调整自己的语言、语调、语气、音量、修辞,包括陈述内容。这样才能取得良好的面试效果。

推荐访问: