现在的位置: 首页 > 综合 > 正文

神州数码面试集合

2013年09月16日 ⁄ 综合 ⁄ 共 11579字 ⁄ 字号 评论关闭

 

问答题:

◆写一段Jdbc连Oracle的程序. 注意步骤什么地方抛出什么异常,最后关闭资源
Connection conn = null; 
String driver = "oracle.jdbc.driver.OracleDriver"; 
String url = "jdbc:oracle:thin:@myoracle:1521:test"; 
String user = "user"; 
String password = "123"; 
try 

Class.forName("oracle.jdbc.driver.OracleDriver"); 
conn = DriverManager.getConnection(url, user, password); 

catch (ClassNotFoundException e) 

System.err.print("ClassNotFoundException: Load jdbc-driver failure!"); 
System.err.println(e.getMessage()); 

catch (SQLException e) 

e.printStackTrace();

}
finally

if (conn != null) 

conn.close(); 
 

◆EJB规范规定EJB中禁止的操作有哪些?(15分) 

共有8点,答出下列3-4点得满分.

1.不能操作线程和线程API(线程API指非线程对象的方法如notify,wait等)
2.不能操作awt
3.不能实现服务器功能
4.不能对静态属性读取.
5.不能使用IO操作直接存取文件系统
6.不能加载本地库.
7.不能将this作为变量和返回.
8.不能循环调用.

◆简述逻辑操作(&,|,^)与条件操作(&&,||)的区别。(15分)
区别主要答两点:
a.条件操作只能操作布尔型的,而逻辑操作不仅可以操作布尔型,而且可以操作数值型
b.逻辑操作不会产生短路.如:
int a = 0;
int b = 0;

if( (a = 3) > 0 || (b = 3) > 0 ) //操后a =3,b=0.
if( (a = 3) > 0 | (b = 3) > 0 ) //操后a =3,b=3.
  
答对第一点得5分,答对第二点得10分.

◆下面程序运行会发生什么结果?如果有错误,如何改正? (15分)
interface  A{

  int x = 0;

 }

class B{

  int x =1;

 }

class C

extends B implements A {

  public void pX(){

    System.out.println(x);

  }

  public static void main(String[] args) {

    new C().pX();

  }

}

}

本题在编译时会发生错误(错误描述不同的JVM有不同的信息,意思就是未明确的x调用,
两个x都匹配,就象在同时import java.util和java.sql两个包时直接声明Date一样)

本题主要考察对接口和类的最最基本的结构的了解.对于父类的变量,可以用super.x来
明确,而接口的属性默认隐含为 public static final.所以可以通过A.x来明确.

◆ 简述 Java Server Page 和 Servlet 的联系和区别。(20分)

jsp和servlet的实质是一样的,JSP在处理客户请求前会被编译成servlet(对于不同服务器中间件被编译后的servlet文件存放的位置不同,tomcat在$catalina_home/work/Catalina/localhost/app-name/org/apache/jsp目录下), JSP declaration中定义的变量和方法在运行时成为对应servlet的 成员变量和方法; scripting会成为_jspService方法的语句。JSP的生命周期受到 _jspInit()、_jspService()、_jspDestroy()的控制,多数情况下Jsp适合前台页面显示,而Servlet用于控制页面逻辑或后台处理

本题不用多说,在答相同点时应该明确知道jsp编译后是"类servlet"而"不是Servlet",
答区别时应该回答出"侧重于(视图/控制逻辑)".其它可根据情况加减分值.知识很简单,
但从面试的角度看,被试者不仅要能知道它们的区别,而且要能比较准确地表达出来(以后写文档要能让别人看得懂,不产生歧义),回答"jsp编译后就是servlet"视为错误,回答"jsp用于视图,servlet用于控制逻辑"视为错误,应该用侧重于,主要(多数)用于等词语表达. 

◆ XML文档定义有几种形式?它们之间有何本质区别?
解析XML文档有哪几种方式?(20分)
本题三个答题点:
a: 两种形式 dtd,schema
b: 本质区别:schema本身是xml的, 不像DTD有其特有的语法

主要区别:

.XML Schema XML文档,不像DTD有其特有的语法。对开发人员来说,你不需要懂两种语法就能编写一个格式良好的XML文档。对开发XML分析器来说,XML Schema由于也是XML语法,实现及支持起来就更方便了。同时XML Schema 继承了XML可扩展的优点。

  二.定义数据类型。在一个DTD文件中只能把数据声明为字符串类型或字符串类型的子元素,如PCDATACDATAID等。而在XML Schema 中,可以定义跟编程语言同样丰富的数据类型,如整型,浮点型,布尔型,日期型等。这样的好处是显而易见的,在你编写程序使用一个整型数据时,如用DTD定义的,就必须将它从字符型转化为整型,而XML Schema 则可以直接定义为整型。

  三.XML Schema是一个开放的模型。如下面的一个XML文档:

<item>
 <name>TG/DTLatte</name>
 <quantity>1</quantity>
 <price>2.00</price>
</item>

下面是它的DTDSchema描述: 

  DTD:

<!ELEMENTname(#PCDATA)>
<!ELEMENTquantity(#PCDATA)>
<!ELEMENTprice(#PCDATA)>
<!ELEMENTitem(name,quantity,price)> 

  schema:

<ElementTypename="name"/>
<ElementTypename="quantity"dt:type="int"/>>
<ElementTypename="price"dt:type="fixed.14.4"/>
<ElementTypename="item"model="open">
 <elementtype="name"/>
 <elementtype="quantity"/>
 <elementtype="price"/>
</ElementType>

当上面的XML文档增加一条<myItem:time>10:21 PDT</myItem:time>元素变为:<itemxmlns:myItm="urn:myItems">
 <name>TG/DTLatte</name>
 <quantity>1</quantity>
 <price>2.00</price>
 <myItem:time>10:21PDT</myItem:time>
</item>以上的DTD将会引发一个验证错误,而Schema则不会。 

  四.命名空间的集成。一个XML文档只能由一个DTD文档来描述,而可以由多个XML Schema文档来描述。后者完全支持命名空间。

 c: 两种主要方式:dom,sax.答出两种得全分,如能答出saxt,或其它(在答出dom,sax的基础上,如果应试者认为其它方式也可以视为对xml的解析应该允许.但没有答出dom,sax把其它方式说成是对XML的解析不得分)应该加分.

SAX (Simple API for XML) 和 DOM (Document Object Model) 都是为了让程序员不用写一个解析器就可以访问他们的资料信息。通过利用XML 1.0格式保存信息,以及使用SAX或者DOM APIs你的程序可以使用任何解析器。这是因为使用他们所喜爱的语言开发解析器的开发者必须实现SAX和DOM APIs。 SAX和DOM APIs 对多种语言中都可以实现(Java, C++, Perl, Python, 其它...)。 

所以SAX 和 DOM都是为了同样的目的而存在,这就是使用户可以利用任何编程语言访问存入XML文档中的信息(要有一个那种编程语言的解析器)。虽然他们在提供给你访问信息的方法上大不相同

什么是DOM

DOM 可以让你以分层次对象模型来访问储存在XML文档中的信息。DOM生成一棵节点树(以XML文档的结构和信息为基础)你可以通过这棵树来访问你的信息。在XML文档中的文本信息转变成一组树的节点。
不管你的XML文档中的信息的类型 (不管是表格数据,或是一列items,或者只是文档), DOM在你创建一个XML文档的文档对象时创建一棵节点树。 DOM强迫你使用树状模型(就像 Swing TreeModel)去访问你的XML文档中的信息。这种模式确实不错因为XML原本就是分层次的。这也是DOM为什么可以把你的信息放到一棵树中的原因(即使信息是表格式的或者简单的列表。

因为在DOM中,每一个元素节点实际上都有一系列的其他节点作为它的孩子。这些孩子节点可以包含文本值或者是其他元素节点。乍看起来,通过遍历访问一个元素的所有孩子节点来访问这个节点的值是没有必要的(举例来说:节点 "<name> Nazmul </name>", Nazmul是值)。如果每个元素只有值的话,这确实是没有必要的。但是,元素可能含有文本数据或者其他元素;这是你要在DOM中做额外的工作来获取元素节点值的原因。 通常当你的文档中只有纯数据时,把所有的数据压成一个“块“放到字串中并让DOM把那个字串当成某个特定元素节点的值返回是适当的。这种方式并不适合如果在你的XML文档中的数据是个文档(比如像WORD文档或者FRAMEMAKER文档) 在文档中,元素的顺序是非常重要的。对于纯数据(像一个数据库表)元素的顺序是不要紧的。 之所以DOM保持从XML文档中读出的元素的顺序,因为它把所有的事物都当成文档来处理。 文档对像模型的叫法由此而来。

如果你计划用DOM做为JAVA对象模型用于你存储在XML文档中的信息,那么你不需要考虑SAX。可是如果你发现DOM不是一个可以用于处理XML文档信息的好的对象模式,那么你可能想看看SAX了。在一些必须使用自定义对象模型的案例中使用SAX是非常普遍的。说一句让事情看来有些糊涂的话,你也可以在DOM的基础之上创建自己的对象模式。面向对象真是个好东东。

什么是SAX

SAX让你访问储存在XML文档中的信息,不是通过节点树,而是一系列的事件。你会问,这有什么益处?回答是,SAX选择不在XML文档上创建JAVA对象模型(像DOM做的那样)。 这样使得SAX更快, 同时使下面所述成为必要:

创立你自己的自定义对像模型
创建一个监听SAX事件的类同时创建你自己的对象模型
注意这些步骤对DOM而言是不必要的,因为DOM已经为你创建了一个对象模型(将你的信息用一棵节点树表示)。

在使用DOM的情况下,解析器做了绝大多数事情, 读入XML文档, 在这基础之上创建JAVA对象模型,然后给你一个对这个对象的引用(一个 Document对象),因而你可以操作使用它。SAX被叫做Simple API for XML不是没有原因的, 她真的很简单。 SAX没有期待解析器去做这么多工作,所有SAX 要求的是解析器应该读入XML文档,同时根据所遇到的XML文档的标签发出一系列事件。你要自己写一个XML文档处理器类(XML document handler class)来处理这些事件,这意味着使所有标签事件有意义还有用你自己的对象模型创建对象。所以你要完成:

控制所有XML文档信息的自定义对象模型(或者源文档在这里的写法从来没有见过,或者怀疑源文档在这里有排版错误,先这么翻了)
一个监听SAX事件(事件由SAX解析器读取你的XML文档时产生)的文档处理器,还有解释这些事件创建你自定义对象模型中的对象
如果你的对象模型简单的话那么SAX在运行时会非常快。在这种情况下,它会比DOM快,因为它忽略了为你的信息创建一个树形对象模型的过程。从另一方面来说,你必须写一个SAX 文档处理器来解释所有的SAX事件(这会是一件很繁重的工作)。

什么类型的SAX事件被SAX解析器抛出了哪? 这些事件实际上是非常简单的。SAX会对每一个开始标签抛出事件,对每一个结束标签也是如此。它对#PCDATA和 CDATA 部分同样抛出事件。你的文档处理器 (对这些事件的监听器)要解释这些事件同时还要在他们基础之上创建你自定义的对象模型。 你的文档处理器必须对这些事件做出解释,同时这些事件发生的顺序是非常重要的。SAX同时也对processing instructions, DTDs, comments, 抛出事件. 但是它们在概念上是一样的, 你的解析器要解释这些事件(还有这些事件的发生顺序)以及使他们有意义。

什么时候使用DOM

如果你的XML文档包含文档数据(例如, Framemaker documents stored in XML format), 那么DOM就是你的解决方案的最自然选择。如果你要创建一些类似于文档信息管理的系统,那么你不得不处理大量的文档数据。Datachannel RIO 产品就是这么一个例子,它可以索引和组织各种类型文档资源中的信息(例如Word和Excel 文件)。在这种情况下,DOM是非常合适程序去访问存贮在这些文档中的信息的。

然而,如果你主要处理的是结构化的数据(在XML中的序列化的JAVA对象the equivalent of serialized Java objects in XML),DOM不是最好的选择。那就是SAX会比较合适的地方

什么时候使用SAX

如果在你XML文档中的信息是机器易读的(和机器生成的)数据,那么SAX是让你可以访问这些信息的合适的API。机器易读和生成的数据类型包含像下面这些东东:

存成XML格式的Java对象属性
用一些以文本为基础的查询语句(SQL, XQL, OQL)表示的查询
由查询生成的结果集(这也许包含关系型数据库表中的数据编码成XML).
这么看来机器生成的数据是你一般要在java中生成数据结构和类的信息。一个简单的例子是包含个人信息的地址簿,在上图所示。这个地址簿xml文件不像字处理器文档,它是一个包含已经被编码成文本的纯数据的XML文档。

当你的数据是这种样式,你要创建你自己的数据结构和类(对象模型)来管理操作以及持续保存这些数据。SAX容许你快速创建一个可以生成你的对象模型实例的处理器类。一个实例是:一个SAX文档处理器。它完成的工作有读入包含我的地址薄信息的XML文档,创建一个可以访问到这些信息的AddressBook类。SAX指南告诉你该怎么做到这些。这个地址薄XML文档包含person元素,person元素中有name和email元素。我的AddressBook对象模型包括下面的类:

AddressBook 类,Person对象的容器
Person 类,String 型的name和email的容器
这样我的“SAX 地址簿文档处理器”可以把person元素转变成Person对象了,然后把它们都存入AddressBook对象。这个文档处理器将name和email元素转变为String对象

结论

你写的SAX文档处理器(SAX document handler)做了将元素映射为对象的工作。如果你的信息被结构化成可以容易创建这样的映射,你应该使用SAX API。从另一方面来说,如果你的数据更适宜用树来表示那么你应该使用DOM

◆简述synchronized和java.util.concurrent.locks.Lock的异同 ?(15分)

主要相同点:
Lock能完成synchronized所实现的所有功能.(其它不重要)
主要不同点:
Lock有比synchronized更精确的线程语义和更好的性能(在相同点中回答此点也行)

synchronized会自动释放锁.而Lock一定要求程序员手工释放.并且必须在finally从句中释放,如果没有答出在finally中释放不得分.就如Connection没有在finally中关闭一样.连最基本的资源释放都做不好,还谈什么多线程编程.

◆ 什么是聚集索引,什么是非聚集索引,什么又是主键? 

表中经常有一个列或列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键.  

聚集索引确定表中数据的物理顺序。聚集索引类似于电话簿,后者按姓氏排列数据。由于聚集索引规定数据在表中的物理存储顺序,   
    因此一个表只能包含一个聚集索引。但该索引可以包含多个列(组合索引),就像电话簿按姓氏和名字进行组织一样。   
    非聚集索引与课本中的索引类似。数据存储在一个地方,索引存储在另一个地方,索引带有指针指向数据的存储位置。   
     索引中的项目按索引键值的顺序存储,而表中的信息按另一种顺序存储(这可以由聚集索引规定)。

如果在表中未创建聚集索引,则无法保证这些行具有任何特定的顺序。
◆软件开发过程,遵循什么规范
软件开发过程大的方面来讲包括需求分析、软件设计和实现(概要设计、详细设计、编码)、软件测试(单元测试、代码检查、功能测试、系统测试、验收测试)和交付

规范:1 命名规范 2代码规范 3 工程文件组织规范 4 类组织规范 5 用户界面规范 6 疑难解答和Bug调试方法

◆ 作用域public,protected,private,以及不写时的区别

public 可以被本身和其他的包中的类引用,protected可以被同一个包内的类以及不同包中的子类引用,private只有自己的类中可以使用。不写的时候只能被同一个包中的类引用。

◆char型变量能不能定义为一个中文?为什么? 

可以定义。因为java中的char是两个字节,可以存储中文。

◆ jsp有哪些内置对象?作用分别是什么? 
JSP共有以下9种基本内置组件(可与ASP的6种内部组件相对应): 
request 用户端请求,此请求会包含来自GET/POST请求的参数 
response 网页传回用户端的回应 
pageContext 网页的属性是在这里管理 
session 与请求有关的会话期 
application servlet 正在执行的内容 
out 用来传送回应的输出 
config servlet的构架部件 
page JSP网页本身 
exception 针对错误网页,未捕捉的例外 

◆jsp有哪些动作?作用分别是什么?
JSP共有以下6种基本动作 
jsp:include:在页面被请求的时候引入一个文件。 
jsp:useBean:寻找或者实例化一个JavaBean。 
jsp:setProperty:设置JavaBean的属性。 
jsp:getProperty:输出某个JavaBean的属性。 
jsp:forward:把请求转到一个新的页面。 
jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记

◆ ◆JSP中INCLUDE两种实现方式的区别?

动态、静态两种。
动态INCLUDE用jsp:include动作实现
<jsp:include page="included.jsp" flush="true" />它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数 
静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面 <%@ include file="included.htm" %> 

◆JSP中两种跳转方式是什么?区别是什么?
<jsp:include page="included.jsp" flush="true"> 
<jsp:forward page= "nextpage.jsp"/> 
前者页面不会转向include所指的页面,只是显示该页的结果,主页面还是原来的页面。执行完后还会回来,相当于函数调用。并且可以带参数.后者完全转向新页面,不会再回来。相当于go to 语句。
◆JSP有哪些中文问题,如何解决?
 1JSP的charset
 2JSP SERVER编译JSP是使用的字符集,默认和操作系统是一样的,可能需要进行修改
 3你的BEAN编译时候所采用的字符集,一般用JavaC编译,都是和操作系统一样的,但你可以通过带参数来改变。
 4和数据库连接时,大多数JDBC驱动程序都可以设置其字符集的,这样JDBC驱动会自己进行转换,也不会出现汉字问题。

◆说一说Servlet的生命周期?
servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。这个生存期由javax.servlet.Servlet接口的init,service和destroy方法表达。 
Servlet的生命周期是当服务器装载运行servlets,接收来自客户端的多个请求并且返回数据给客户端,然后再删除移开servlets的时间。

◆Class.forName的作用?为什么要用? 
Class.forName 是寻找并加载一个类。用它是为了load你指定名称的class。

◆MVC的各个部分都有那些技术来实现?如何实现? 
MVC是Model-View-Controller的简写。"Model" 代表的是应用的业务逻辑(通过JavaBean,EJB组件实现), "View" 是应用的表示面(由JSP页面产生),"Controller" 是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。

◆javascript如何校验数字型?
isNaN(parseFloat(xxx))如果为true,则不是数字。 
var v = document.all.Telephone.value; 
if(isNan(v)){ 
alert("全是数字"); 

◆html样式表作用,原理。
大量减少网页代码,原理就是在网页中自定义样式表的选择符,然后在网页中大量引用这些选择符。目前大部分网站都是使用class来引用的。

◆ 画出tcp/ip协议分层,解释arp协议的作用

应 用 层
(Application)

HTTP、Telnet、FTP、SMTP、SNMP

传 输 层
(Transport)

TCP、UDP

网 间 网层
(Internet)

IP【ARP、RARP、ICMP】

网络接口层
(Network)

Ethernet、X.25、SLIP、PPP

在以太网(Ethernet)中,一个网络设备要和另一个网络设备进行直接通信,除了知道目标设备的网络层逻辑地址(IP地址)外,还要知道目标设备的第二层物理地址(MAC地址)ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。 

当一个网络设备需要和另一个网络设备通信时,它首先把目标设备的IP地址与自己的子网掩码进行操作,以判断目标设备与自己是否位于同一网段内。如果目标设备在同一网段内,并且源设备没有获得与目标IP地址相对应的MAC地址信息,则源设备以第二层广播的形式(目标MAC地址为全1)发送ARP请求报文,在ARP请求报文中包含了源设备与目标设备的IP地址。同一网段中的所有其他设备都可以收到并分析这个ARP请求报文,如果某设备发现报文中的目标IP地址与自己的IP地址相同,则它向源设备发回ARP响应报文,通过该报文使源设备获得目标设备的MAC地址信息。 

如果目标设备与源设备不在同一网段,则源设备首先把IP分组发向自己的缺省网关(Default Gateway),由缺省网关对该分组进行转发。如果源设备没有关于缺省网关的MAC信息,则它同样通过ARP协议获取缺省网关的MAC地址信息。 

为了减少广播量,网络设备通过ARP表在缓存中保存IPMAC地址的映射信息。在一次ARP的请求与响应过程中,通信双方都把对方的MAC地址与IP地址的对应关系保存在各自的ARP表中,以在后续的通信中使用。ARP表使用老化机制,删除在一段时间内没有使用过的IPMAC地址的映射关系。

◆ 进程的那些状态(就绪,运行,阻塞,挂起)的转换图 以及转换的条件

编程题

◆找出两个字符串中最大子字符串,如"abractyeyt","dgdsaeactyey"的最大子串为"actyet" 

int main(int argc, char* argv[])

{

     char str1[] = "abractyeyt", str2[] = "dgdsaeactyey";

     char *strResult = MaxSubString(str1, str2);

     printf("str1=%s\nstr2=%s\nMaxSubString=%s\n", str1, str2, strResult);

     return getchar();

}

◆删除字符串中的数字并压缩字符串,如字符串”abc123de4fg56”处理后变为”abcdefg”。注意空间和效率。(下面的算法只需要一次遍历,不需要开辟新空间,时间复杂度为O(N))

#include "stdafx.h"

void delNum(char *str)

{

     int i, j=0;

     for(i=j=0; str[i] && (str[i]<'0' || str[i]>'9'); j=++i);// 找到串中第一个数字的位子

     for(; str[i]; i++)     // 从串中第一个数字的位置开始,逐个放入后面的非数字字符

          if(str[i]<'0' || str[i]>'9')

              str[j++] = str[i];

     str[j] = '\0';

}

int main(int argc, char* argv[])

{

     char str[] = "abc123ef4g4h5";

     printf("%s\n", str);

     delNum(str);

     printf("%s\n", str);

     return getchar();

}

◆ 有一百个整数,其中有负数,找出连续三个数之和最大的部分.  

C++ 部分

◆把字符串转化成整型,不能用系统函数  

#include <stdio.h>;

int _atoi(char *str)
{
    static int i;
    sscanf(str,"%d",&i);
    return i;
}

int main()
{
    printf("%d\n",_atoi("654321"));
    printf("%d\n",_atoi("12345abc"));
    return 0;
}

推理题:

◆24个人,要求5个人一排,排6排如何排?  
排成六边形

◆ 8个人跑步比赛结果,给出系列条件:那个排名在那个前面、有一个第4名…… ,让 你推测出实际的名次。(略)  

◆两根蜡烛,每根单独燃烧一个小时燃尽。如何通过两根蜡烛的燃烧判断45 分钟?

◆请估计北京有多少加油站?并简述理由。

◆北京有200万量机动车,加油站工作时间按每天18小时,假设每个油站能同时工作6个油泵,每次为车加油时间为3分钟,每天一个加油站工作车辆数:18*60*6/3=2160辆,所需加油站数量=2000000/2160=926个加油站。

◆给你一个非常困难的问题,你将如何解决它。
询问有解决能力的人该如何解决并在以后的工作之中将它也变成自己可以解决的问题

抱歉!评论已关闭.