软件开发面试题及答案.docx
- 文档编号:17802705
- 上传时间:2023-04-24
- 格式:DOCX
- 页数:13
- 大小:24.96KB
软件开发面试题及答案.docx
《软件开发面试题及答案.docx》由会员分享,可在线阅读,更多相关《软件开发面试题及答案.docx(13页珍藏版)》请在冰豆网上搜索。
软件开发面试题及答案
本页仅作为文档页封面,使用时可以删除
Thisdocumentisforreferenceonly-rar21year.March
软件开发面试题及答案
1、请讲一下struts的流程
答:
用户提交表单
Struts根据表单的请求路径,在web.xml中指定servlet,并根据
ActionServlet或者扩展的ActionServlet接收请求,并根据请求的路径来判断调用哪一个action,即action元素中的path路径,再根据action元素中的type属性,用来指定处理请求的逻辑action(属于控制器部分),再根据其name属性来绑定form-bean,即创建一个HelloForm对象,并把用户提交的表单数据传给ActionForm对象,这个对象保存在scope设置的范围内。
如果action的validate属性设置为true,则ActonServlet就调用HelloForm对象的validate()方法,对表单进行验证。
ActionServlet查找action是否存在,如果不存在就创建一个实例,然后调用HelloAction的execute()方法。
通过execute()方法中的逻辑验证后,执行相关的业务逻辑,最后调用ActionMapping.findForward(“SayHello”)方法。
其中的参数SayHello与struts-config.xml文件中的action元素的forword属性值对应,则就将请求转发到“hello.jsp”页面,结束。
2、一条SQL语句的执行顺序是怎么样的?
答:
1、from子句组装来自不同数据源的数据;
2、where子句基于指定的条件对记录行进行筛选;
3、groupby子句将数据划分为多个分组;
4、使用聚集函数进行计算;
5、使用having子句筛选分组;
6、计算所有的表达式;
7、使用orderby对结果集进行排序。
3、CMM是什么?
CMM是指“能力成熟度模型”,其英文全称为CapabilityMaturityModelforSoftware,英文缩写为SW-CMM,简称CMM。
它是对于软件组织在定义、实施、度量、控制和改善其软件过程的实践中各个发展阶段的描述。
CMM的核心是把软件开发视为一个过程,并根据这一原则对软件开发和维护进行过程监控和研究,以使其更加科学化、标准化、使企业能够更好地实现商业目标。
4、XML有几种解析方式?
答:
DOM:
处理大型文件时其性能下降的非常厉害。
这个问题是由DOM的树结构所造成的,这种结构占用的内存较多,而且DOM必须在解析文件之前把整个文档装入内存,适合对XML的随机访问SAX:
不现于DOM,SAX是事件驱动型的XML解析方式。
它顺序读取XML文件,不需要一次全部装载整个文件。
当遇到像文件开头,文档结束,或者标签开头与标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来处理XML文件,适合对XML的顺序访问
5、EJB分为几种BEAN?
答:
EJB依照特性的不同,目前区分为三种,分别是SessionBean,EntityBean,以及MessageDrivenBean。
6、什么是UML?
答:
统一建模语言(UML是UnifiedModelingLanguage的缩写)是用来对软件密集系统进行可视化建模的一种语言。
UML为面向对象开发系统的产品进行说明、可视化、和编制文档的一种标准语言。
7、你使用过UML哪些?
答:
UML中包括九种图:
用例图、类图、对象图、状态图、时序图、协作图、活动图、组件图、配置图。
1)用例图(UseCaseDiagram)
它是UML中最简单也是最复杂的一种图。
说它简单是因为它采用了面向对象的思想,又是基于用户视角的,绘制非常容易,简单的图形表示让人一看就懂。
说它复杂是因为用例图往往不容易控制,要么过于复杂,要么过于简单。
用例图表示了角色和用例以及它们之间的关系。
2)类图(ClassDiagram)
是最常用的一种图,类图可以帮助我们更直观的了解一个系统的体系结构。
通过关系和类表示的类图,可以图形化的方式描述一个系统的设计部分。
3)对象图()
对象图是类图的实例,几乎使用与类图完全相同的标识。
它们的不同点在于对象图显示类的多个对象实例,而不是实例的类。
一个对象图是类图的一个实例。
由于对象存在生命周期,因此对象图只能在系统某一时间段存在。
4)状态图
描述一个实体基于事件反应的动态行为,显示了该实体如何根据当前所处的状态对不同的时间做出反应的。
通常创建一个UML状态图是为了以下的研究目的:
研究类、角色、子系统、或组件的复杂行为。
5)时序图
又称顺序图,描述了对象之间动态的交互关系,着重体现对象间消息传递的时间顺序。
顺序图由一组对象构成,每个对象分别带有一条竖线,称作对象的生命线,它代表时间轴,时间沿竖线向下延伸。
顺序图描述了这些对象随着时间的推移相互之间交换消息的过程。
消息用从一务垂直的对象生命线指向另一个对象的生命线的水平箭头表示。
图中还可以根据需要增加有关时间的说明和其他注释。
6)协作图
协作图用于显示组件及其交互关系的空间组织结构,它并不侧重于交互的顺序。
协作图显示了交互中各个对象之间的组织交互关系以及对象彼此之间的链接。
与序列图不同,协作图显示的是对象之间的关系。
另一方面,协作图没有将时间作为一个单独的维度,因此序列号就决定了消息及并发线程的顺序。
协作图是一个介于符号图和序列图之间的交叉产物,它用带有编号的箭头来描述特定的方案,以显示在整个方案过程中消息的移动情况。
协作图用途:
通过描绘对象之间消息的移动情况来反映具体的方案。
显示对象及其交互关系的空间组织结构,而非交互的顺序。
7)活动图(ActivityDiagram)
UML活动图记录了单个操作或方法的逻辑,单个用户案例,或者单个业务流程的逻辑。
描述系统中各种活动的执行顺序,通常用于描述一个操作中所要进行的各项活动的执行流程。
同时,它也常被用来描述一个用例的处理流程,或者某种交互流程。
活动图由一些活动组成,图中同时包括了对这些活动的说明。
当一个活动执行完毕之后,控制将沿着控制转移箭头转向下一个活动。
活动图中还可以方便地描述控制转移的条件以及并行执行等要求。
8)组件图(ComponentDiagram)
组件图是用来反映代码的物理结构。
从组件图中,可以了解各软件组件(如源代码文件或动态链接库)之间的编译器和运行时依赖关系。
使用组件图可以将系统划分为内聚组件并显示代码自身的结构。
组件图的主要目的是显示系统组件间的结构关系。
9)配置图
配置图描述系统中硬件和软件的物理配置情况和系统体系结构。
在配置图中,用结点表示实际的物理设备,如计算机和各种外部设备等,并根据它们之间的连接关系,将相应的结点连接起来,并说明其连接方式。
在结点里面,说明分配给该结点上运行的可执行构件或对象,从而说明哪些软件单元被分配在哪些结点上运行
8、存储过程和函数的区别?
答:
存储过程是用户定义的一系列sql语句的集合,涉及特定表或其它对象的任务,用户可以调用存储过程,而函数通常是数据库已定义的方法,它接收参数并返回某种类型的值并且不涉及特定用户表。
9、事务是什么?
答:
事务是作为一个逻辑单元执行的一系列操作,一个逻辑工作单元必须有四个属性,称为ACID(原子性、一致性、隔离性和持久性)属性,只有这样才能成为一个事务:
原子性:
事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。
一致性:
事务在完成时,必须使所有的数据都保持一致状态。
在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。
事务结束时,所有的内部数据结构(如B树索引或双向链表)都必须是正确的。
隔离性:
由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。
事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。
这称为可串行性,因为它能够重新装载起始数据,并且重播一系列事务,以使数据结束时的状态与原始事务执行的状态相同。
持久性:
事务完成之后,它对于系统的影响是永久性的。
该修改即使出现系统故障也将一直保持。
10、游标的作用如何知道游标已经到了最后
11、
答:
游标用于定位结果集的行,通过判断全局变量@@FETCH_STATUS可以判断是否到了最后,通常此变量不等于0表示出错或到了最后。
12、触发器分为事前触发和事后触发,这两种触发有和区别。
语句级触发和行级触发有何区别。
答:
事前触发器运行于触发事件发生之前,而事后触发器运行于触发事件发生之后。
通常事前触发器可以获取事件之前和新的字段值。
语句级触发器可以在语句执行前或后执行,而行级触发在触发器所影响的每一行触发一次。
13、&和&&的区别
答:
&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)
14、Collection和Collections的区别
答:
Collection是集合类的上级接口,继承于他的接口主要有Set 和List.
Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。
15、Overload和Override的区别。
Overloaded的方法是否可以改变返回值的类型?
16、
答:
方法的重写Overriding和重载Overloading是Java多态性的不同表现。
重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。
如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。
子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。
如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。
Overloaded的方法是可以改变返回值的类型。
17、error和exception有什么区别
答:
error 表示恢复不是不可能但很困难的情况下的一种严重问题。
比如说内存溢出。
不可能指望程序能处理这样的情况。
exception 表示一种设计或实现问题。
也就是说,它表示如果程序运行正常,从不会发生的情况。
18、ArrayList和Vector的区别,HashMap和Hashtable的区别
答:
就ArrayList与Vector主要从二方面来说.
一.同步性:
Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的
二.数据增长:
当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半
就HashMap与HashTable主要从三方面来说。
一.历史原因:
Hashtable是基于陈旧的Dictionary类的,HashMap是Java1.2引进的Map接口的一个实现
二.同步性:
Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的
三.值:
只有HashMap可以让你将空值作为一个表的条目的key或value。
19、谈谈final,finally,finalize的区别
答:
final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。
因此一个类不能既被声明为abstract的,又被声明为final的。
将变量或方法声明为final,可以保证它们在使用中不被改变。
被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。
被声明为final的方法也同样只能使用,不能重载
finally—再异常处理时提供finally块来执行任何清除操作。
如果抛出一个异常,那么相匹配的catch子句就会执行,然后控制就会进入finally块(如果有的话)
finalize—方法名。
Java技术允许使用finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。
这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。
它是在Object类中定义的,因此所有的类都继承了它。
子类覆盖finalize()方法以整理系统资源或者执行其他清理工作。
finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。
20、面向对象的特征有哪些方面
答:
1.抽象:
抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。
抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。
抽象包括两个方面,一是过程抽象,二是数据抽象。
2.继承:
继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。
对象的一个新类可以从现有的类中派生,这个过程称为类继承。
新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。
派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。
3.封装:
封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。
面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。
4. 多态性:
多态性是指允许不同类的对象对同一消息作出响应。
多态性包括参数化多态性和包含多态性。
多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。
21、int 和 Integer 有什么区别
答:
Java 提供两种不同的类型:
引用类型和原始类型(或内置类型)。
Int是java的原始数据类型,Integer是java为int提供的封装类。
Java为每个原始类型提供了封装类。
原始类型封装类,booleanBoolean,charCharacter,byteByte,shortShort,intInteger,longLong,floatFloat,doubleDouble
引用类型和原始类型的行为完全不同,并且它们具有不同的语义。
引用类型和原始类型具有不同的特征和用法,它们包括:
大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。
对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关
22、什么是JDK,举出几个公司开发的JDK。
答:
JDK(JavaDevelopmentKit)是整个Java的核心,包括了Java运行环境(JavaRuntimeEnvirnment),一堆Java工具和Java基础的类库(rt.jar)。
不论什么Java应用服务器实质都是内置了某个版本的JDK。
因此掌握JDK是学好Java的第一步。
最主流的JDK是Sun公司发布的JDK,除了Sun之外,还有很多公司和组织都开发了自己的JDK,例如IBM公司开发的JDK,BEA公司的Jrocket,还有GNU组织开发的JDK等等。
23、什么是应用服务器(AppServer)简要介绍几种常用的AppServer。
答:
AppServer是运行Java企业组件的平台,构成了应用软件的主要运行环境。
当前主流的AppServer是BEA公司的WeblogicServer和IBM公司的Websphere以及免费的Jboss。
24、说出Servlet的生命周期。
答:
Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。
25、说出ArrayList,Vector,LinkedList的存储性能和特性
答:
ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
26、forward和redirect的区别
答:
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。
redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。
27、EJB与JAVABEAN的区别?
答:
JavaBean是可复用的组件,对JavaBean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean。
但通常情况下,由于JavaBean是被容器所创建(如Tomcat)的,所以JavaBean应具有一个无参的构造器,另外,通常JavaBean还要实现Serializable接口用于实现Bean的持久性。
JavaBean实际上相当于微软COM模型中的本地进程内COM组件,它是不能被跨进程访问的。
EnterpriseJavaBean相当于DCOM,即分布式组件。
它是基于Java的远程方法调用(RMI)技术的,所以EJB可以被远程访问(跨进程、跨计算机)。
但EJB必须被布署在诸如Webspere、WebLogic这样的容器中,EJB客户从不直接访问真正的EJB组件,而是通过其容器访问。
EJB容器是EJB组件的代理,EJB组件由容器所创建和管理。
客户通过容器来访问真正的EJB组件。
28、JSP中动态INCLUDE与静态INCLUDE的区别?
答:
动态INCLUDE用jsp:
include动作实现 includepage="included.jsp"flush="true"/>它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。 静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面<%@includefile="included.htm"%> 29、Java中的异常处理机制的简单原理和应用 答: 当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常。 违反语义规则包括2种情况。 一种是JAVA类库内置的语义检查。 例如数组下标越界,会引发IndexOutOfBoundsException;访问null的对象时会引发NullPointerException。 另一种情况就是JAVA允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用throw关键字引发异常。 所有的异常都是java.lang.Thowable的子类。 30、请说出你所知道的线程同步的方法 答: wait(): 使一个线程处于等待状态,并且释放所持有的对象的lock。 sleep(): 使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常。 notify(): 唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。 Allnotity(): 唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。 31、JSP的内置对象及方法 答: request表示HttpServletRequest对象。 它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie,header,和session数据的有用的方法。 response表示HttpServletResponse对象,并提供了几个用于设置送回浏览器的响应的方法(如cookies,头信息等) out对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。 pageContext表示一个javax.servlet.jsp.PageContext对象。 它是用于方便存取各种范围的名字空间、servlet相关的对象的API,并且包装了通用的servlet相关功能的方法。 session表示一个请求的javax.servlet.http.HttpSession对象。 Session可以存贮用户的状态信息 applicaton表示一个javax.servle.ServletContext对象。 这有助于查找有关servlet引擎和servlet环境的信息 config表示一个javax.servlet.ServletConfig对象。 该对象用于存取servlet实例的初始化参数。 page表示从该页面产生的一个servlet实例 32、四种会话跟踪技术 答: 会话作用域ServletsJSP页面描述 page否是代表与一个页面相关的对象和属性。 一个页面由一个编译好的Javaservlet类(可以带有任何的include指令,但是没有include动作)表示。 这既包括servlet又包括被编译成servlet的JSP页面 request是是代表与Web客户机发出的一个请求相关的对象和属性。 一个请求可能跨越多个页面,涉及多个Web组件(由于forward指令和include动作的关系) session是是代表与用于某个Web客户机的一个用户体验相关的对象和属性。 一个Web会话可以也经常会跨越多个客户机请求 application是是代表与整个Web应用程序相关的对象和属性。 这实质上是跨越整个Web应用程序,包括多个页面、请求和会话的一个全局作用域
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件 开发 试题 答案