java软件开发工程师面试题宝典
Java软件开发的面试题目你又了解了吗?对于Java软件工程师来说,做好准备很重要,以下是小编帮你们整理的java软件开发工程师面试题,一起来学习啦。
java软件开发工程师面试题(一)
1)transient和volatile是java关键字吗?
如果用transient声明一个实例变量,当对象存储时,它的值不需要维持。例如: class T
{
transient int a; //不需要维持
int b; //需要维持
}
这里,如果T类的一个对象写入一个持久的存储区域,a的内容不被保存,但b的将被保存。
volatile修饰符告诉编译器被volatile修饰的变量可以被程序的其他部分改变。在多线程程序中,有时两个或更多的线程共享一个相同的实例变量。考虑效率问题,每个线程可以自己保存该共享变量的私有拷贝。实际的变量副本在不同的时候更新,如当进入synchronized方法时。 用strictfp修饰类或方法,可以确保浮点运算(以及所有切断)正如早期的Java版本那样准确。切断只影响某些操作的指数。当一个类被strictfp修饰,所有的方法自动被strictfp修饰。
strictfp的意思是FP-strict,也就是说精确浮点的意思。在Java虚拟机进行浮点运算时,如果没有指定strictfp关键字时,Java的编译器以及运行环境在对浮点运
算的表达式是采取一种近似于我行我素的行为来完成这些操作,以致于得到的结果往往无法令你满意。而一旦使用了strictfp来声明一个类、接口或者方法时,那么所声明的范围内Java的编译器以及运行环境会完全依照浮点规范IEEE-754来执行。因此如果你想让你的浮点运算更加精确,而且不会因为不同的硬件平台所执行的结果不一致的话,那就请用关键字strictfp。
你可以将一个类、接口以及方法声明为strictfp,但是不允许对接口中的方法以及构造函数声明strictfp关键字,例如下面的代码:
strictfp interface A {}
public strictfp class FpDemo1 {
strictfp void f() {}
}
2. 错误的使用方法
interface A {
strictfp void f();
}
public class FpDemo2 {
strictfp FpDemo2() {}
}
一旦使用了关键字strictfp来声明某个类、接口或者方法时,那么在这个关键字所声明的范围内所有浮点运算都是精确的,符合IEEE-754规范的。例如一个类被声明为strictfp,那么该类中所有的方法都是strictfp的。
2)抽象类和接口有什么区别?
1.abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。
2.在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在 interface中一般不定义数据成员),所有的成员方法都是abstract的。
3.abstract class和interface所反映出的设计理念不同。其实abstract class表示的是"is-a"关系,interface表示的是"like-a"关系。
4.实现抽象类和接口的类必须实现其中的所有方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。
5.接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。
6.抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。
7.接口中的方法默认都是 public,abstract 类型的。
3)能说一下java的反射(reflection)机制吗?
开放性和原因连接(causally-connected)是反射系统的两大基本要素
java软件开发工程师面试题(二)
1.j2ee是什么?它包含哪些技术?
从整体来讲,J2EE是使用java开发技术开发企业级应用的工业标准,它是java技术不断适应和醋精企业级应用过程的产物。适用于企业级应用的j2ee,提供一个平台独立的、可移植的、多用户的、安全的和基于标注呢企业级平台,从而简化企0业应用的开发、管理和部署。J2EE是一个标准,而不是一个现成的产品。
主要包括以下这些技术:
(1)Servlet servlet是java平台上的CGI技术。Servlet在服务器端运行,动态的生成web页面。与传统的CGI和其他类似CGI的技术相比,Java Servlet具有更高的效率并更容易使用。对于Servlet,从夫的请求不会导致同一程序的多次转载,它是依靠线程的方式来支持并访问的。
(2)JSP Jsp(java server page)是一种是实现普通静态HTML和动态页面输出混合编码的技术。从这一点看,非常类似Microsoft ASP、PHP等技术。借助形式上的内容和外观表现的分离,web页面制作的任务可以比较方便的话费给页面设计人员和程序员,并方便的通过JSP来合成。在运行时态,JSP将会被首先转换成Servlet,并以Servlet的形态编译运行,因此它的效率和功能与Servlet相比没有差别,一样具有很高的效率。
(3)EJB EJB定义了一组可充用的组件:Enterprise Beans。开发人员可以利用这些组件,像搭积木一样建立分布式应用。
(4)JDBC JDBC(Java DataBase Connectivity,java数据库连接)API是一个标准SQL(Structured Query Language,结构化查询语句)数据库访问接口,它使数据库开发人员能够使用标准Java API编写数据库应用程序。JDBC API主要用来连接数据库和调用SQL命令执行各种SQL语句。利用JDBC API可以执行一般的SQL语句、动态SQL语句及带IN和OUT参数的存储过程。JAVA中的JDBC 相当于Microsoft平台中的ODBC(open Database Connectivity)。
2.测试生命周期、测试过程分为几个阶段、以及各阶段的含义?
软件测试生命周期一般包括6个阶段:
(1)技术:产品定义阶段
(2)分析:外部文档阶段
(3)设计:文档架构阶段
(4)构建:单元测试阶段
(5)测试周期:错误修正,重复系统测试阶段
(6)最后测试和实施:代码冻结阶段
3.您做系统设计用各种工具?
Visio,Rational rose,power designer的
4.什么是web容器?
容器就是一种服务程序,在服务器一个端口就有一个提供相应服务的程度,而这个程序就是处理从客户端发出的请求,如java中的Tomat容器,ASP的IIS火舌PWS都是这样的容器。
java软件开发工程师面试题(三)
1.运行是异常与一般异常有何异同?
异常表示程序运行高城中可能会出现的非正常状态,运行时异常表示虚拟机的同城操作中可能遇到的异常,是一种常见运行异常。Java编译器要求方法必须声明抛出可能发生的非运行异常,但是并不要求必须声明抛出未被捕获的运行时异常。
2.Hibernate中:不看数据库,不看XML文件,不看查询语句,怎么能知道表结构?
可以看与xml文件对应的域模型。
3.目前集中主流数据库软件的应用特点,使用范围各是什么?
国际国内的主导关系型数据库管理系统由SQL Server、ORACLE、SYBASE、InFormix和DB2。本问题从性能、可伸缩性和并行性、安全性、操作简便、使用风险、开放性、易维护性和价格、数据库二次开发方面比较了SQL Server、ORACLE、SYBASE\DB2\INformix数据库。
(1)性能
SQLServer:老版本多用户时性能不佳,新版本的性能有了明显的改善,各项处理能力都有了明显的提高。保持了多项TPC-C(TPC-C值被广泛用于衡量C/S环境下,由服务器和客户端构筑的整体系统的性能,它由事务处理性能委员会(TPC,Transaction Processing Corp)制定,TPC为非盈利性国际组织)记录。
Oracle:性能最高,保持Windows NT下的TPC-C的世界纪录。
SYSBASE:性能较高,支持Sun,IBM,HP,Compaq和veritas的集群设备特性,实现高可用性。适应与安全性要求极高的系统。
DB2:适用于数据仓库和在线事务处理,性能较高。客户端支持及应用模式。
Informix:性能较高,支持集群,实现高可用性。适用于安全性要求极高的系统,尤其是银行,证券系统的应用。
(2)可伸缩性,并行性
SQLServer:以前版本SQLServer并行实施和共存模型并不成熟。很难处理大量的用户数和数据卷。伸缩性有限。新版本性能有了较大的改善,在Microsoft Advanced Server上由突出表现,查过了它的主要竞争对象。
ORACLE:平行服务器通过使一组结点贡献同一簇中的工作来扩展Window nt的能力,提供高可用性和高伸缩性的簇的解决方案。如果Window NT不能满足需要,用户可以吧数据库一道linux中,具有很好的伸缩性。
SYBASE:新版本具有较好的并行性,速度快,对巨量数据无明显影响,但是技术实现复杂,需要程序指导,伸缩性有限。
DB2:DB2具有很好的并行性。DB2把数据库管理扩充到了并行的、多节点的环境。数据库分区是数据库的一部分,包含自己的数据、索引、配置文件和事务日志。数据库分区又是被称之为节点或是数据库节点,伸缩性有限。
InFormix:采用单进程多线程的技术,具有较好的并行性。但是仅运行于unix平台,伸缩性优先。
(3)安全性
SQL Server:Microsoft Advanced Server获得最高安全认证,服务器平台的稳定性是数据库的稳定性的基础,新版本的SQL的安全性有了极大的提高。
ORACLE:获得最高认证级别的ISO标准认证。
SYBASE:通过sun公司J2EE认证测试,获得最高认证级别的ISO的标准认证。
DB2:获得最高认证级别的ISO标准认证。
inFormin:获得最高认证级别的ISO标准认证。
(4)操作简便
SQLServer:操作简单,采用图形界面。管理也很方便,而且编程接口特别友好(它的SQL-DMO让变成变得更方便),从易维护和价格上SQL Server明显占有优势。
Oracle:较复杂,同时提供GUI和命令行,在windowNT和Unix,linux下操作仙童。对数据库管理人员要求较高。
SYBASE:复杂,使用命令行操作,对数据库管理人员要求较高。
DB2:操作简单,同时提供GUI和命令行,在window NT和unix下操作相同。
Informix:使用和管理复杂,命令行操作,对数据库管理人员要求较高,
(5)使用风险
SQLServer:完全重写的代码,性能和兼容性有了较大的提高,与Oracle,DB2的性能差距明显减小。该产品的出台经历了长期的测试,为产品的安全和稳定进行了全面的测试,安全稳定性有了明显的提高。
ORACEL:长时间的开发经验,完全向下兼容,可以安全的进行数据库的升级,在企业,政府中的到广泛的应用。并且如果在Window NT上无法妈祖数据的妖气,可以安全的把数据转到unix上来。
SYBASE:开发时间长,升级较复杂,稳定性较好,数据安全有保障。风险小。在安全要求极高的银行,证券行业得到了广发的应用。
DB2:在巨型企业得到广泛的应用,向下兼容性好,风险小。
Informix:开放时间较长,升级较复杂,稳定性较好,数据安全有保障。风险小,在安全要求极高的银行,证券行业得到广泛应用。
(6)开放性
SQL Server:只能在Window上运行,C/S结果,只支持window客户,可以用
ADO,DAO,OLEDB,ODBC连接。Windows9X系列产品是偏重于桌面应用,NTserver使用各种大小大小型企业。操作系统的稳定对数据库是十分重要的。Window平台的可靠性,安全性警告了最高级别的C2认证的。在处理大数据量的关键业务时提供了较好的性能。
ORACLE:能在所有主流平台上运行。完全支持所有的工业标准。蚕蛹完全开放策略。多层次万罗计算,支持多种工业标准,可以用ODBC,JDBC,OCI等网络客户连接。可以使客户选择最适合的解决方案。对开发商全力支持。
SYBASE:能在所有主流平台上运行,在银行中得到广泛的应用。
DB2:有较好的开放性,最适合海量数据。跨平台,多层结构,支持ODBC、JDBC等客户。在大型的国际企业中得到最为广泛的应用,在全球的500家最大的企业中,大部分采用DB2数据库服务器。
Informix:仅运行在unix平台,包括SUBOS、HPUX、ALFAOSF/1。在银行中得到广泛应用。
(7)易维护性和价格
SQL Server:从易维护性和价格上SQL Server明显占优势,基于Microsoft的一贯风格,SQL Server的的图形管理界面带来了明显的易用性,微软的数据库管理员培训进行的比较充分,可以轻松的找到很好的数据库管理员,数据库管理价格也是很低的,SQL Server的价格也是很低的,但是在license的购买商会抬高价格。总体来说SQL Server的价格在商用数据库中是最低的。
Oracle:从易维护性和价格上来说Oracle的价格是比较高的,管理比较复杂,由于Oracle的应用广泛,经验丰富得问Oracle数据库管理员可以比较容易的找到,从而实现Oracle的良好管理。因此oracle的性能价格比在商用数据库中是最好的。
Sybase:sybase的价格是比较低,但是sybase在企业和政府中的应用是较少的,很难找到经验丰富的管理员,运行管理费用较高。
DB2:价格高,管理员少,在中国的应用少,运行管理费用高,适用于大兴企业的数据仓库应用。
Informix:价格在这些系统中居于中间,与sybase一样,在企业与政府中应用较少,仅在银行在得到了广范应用。经验丰富的管理人员较少,运行费用高。
(8)数据库的二次开发
SQLServer:数据库的二次开发工具很多,包括Visual C++,Visual Basic等开发工具,可以实现很好的Windows应用,开发容易。
Oracle:数据库的二次开发工具很多,涵盖了数据库开发的各个阶段,中国的经验丰富的人员很少。
Informin:在银行项目中广泛的应用,但是在中国的经验丰富的人很少。
看了“java软件开发工程师面试题”