关于一套J2EE面试题的个人评价

  这是JAVAEYE论坛上我回复的一个帖子.刚才测试了一下将回复收入博客,不过似乎只能将回复本身给导进来,我觉得需求应该明朗一些,做一个原文框把原文也给引进来,或者是自动给加一个原文的超连接.不多说了,贴文章.反正就当给博客冲文章数量吧,今天开博大爆发,更新三篇文章,哈哈,值得纪念啊.

原文:

J2EE面试题<o:p></o:p>

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

答:区别如下:

作用域 当前类 同一package 子孙类 其他package

public √ √ √ √

protected √ √ √ ×

friendly √ √ × ×

private √ × × ×

不写时默认为friendly

 <o:p></o:p>

 <o:p></o:p>

ArrayListVector的区别

答:就ArrayListVector主要从二方面来说。

一.同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的

二.数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半

 <o:p></o:p>

 <o:p></o:p>

HashMapHashtable的区别

答:就HashMapHashTable主要从三方面来说。

一.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMapJava 1.2引进的Map接口的一个实现

二.同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的

三.值:只有HashMap可以让你将空值作为一个表的条目的keyvalue

 <o:p></o:p>

 <o:p></o:p>

char型变量中能不能存贮一个中文汉字?为什么?

答:是能够定义成为一个中文的,因为java中以unicode编码,一个char16个字节,所以放一个中文是没问题的

 <o:p></o:p>

 <o:p></o:p>

多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?

答:多线程有两种实现方法,分别是继承Thread类与实现Runnable接口

同步的实现方面有两种,分别是synchronized,waitnotify

 <o:p></o:p>

 <o:p></o:p>

floatfloat f=3.4是否正确?

答:正确。精度不准确,应该用强制类型转换,如下所示:float f=(float)3.4

 <o:p></o:p>

 <o:p></o:p>

介绍JAVA中的Collection FrameWork(包括如何写自己的数据结构)?

答:Collection FrameWork如下:

Collection

├List

│├LinkedList

│├ArrayList

│└Vector

 └Stack

└Set

Map

├Hashtable

├HashMap

└WeakHashMap

Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements

Map提供keyvalue的映射

 <o:p></o:p>

 <o:p></o:p>

STRINGSTRINGBUFFER的区别。

答:STRING的长度是不可变的,STRINGBUFFER的长度是可变的。如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffertoString()方法

 <o:p></o:p>

 <o:p></o:p>

jsp有哪些内置对象?作用分别是什么?

答:JSP共有以下9种基本内置组件(可与ASP6种内部组件相对应):

 request 用户端请求,此请求会包含来自GET/POST请求的参数

response 网页传回用户端的回应

pageContext 网页的属性是在这里管理

session 与请求有关的会话期

application servlet 正在执行的内容

out 用来传送回应的输出

config servlet的构架部件

page JSP网页本身

exception 针对错误网页,未捕捉的例外

 <o:p></o:p>

 <o:p></o:p>

jsp有哪些动作?作用分别是什么?

答:JSP共有以下6种基本动作

jspinclude:在页面被请求的时候引入一个文件。

jspuseBean:寻找或者实例化一个JavaBean

jspsetProperty:设置JavaBean的属性。

jspgetProperty:输出某个JavaBean的属性。

jspforward:把请求转到一个新的页面。

jspplugin:根据浏览器类型为Java插件生成OBJECTEMBED标记

 <o:p></o:p>

 <o:p></o:p>

 <o:p></o:p>

说一说Servlet的生命周期?

答:servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。这个生存期由javax.servlet.Servlet接口的init,servicedestroy方法表达。

 <o:p></o:p>

 <o:p></o:p>

JAVA SERVLET APIforward() redirect()的区别?

答:前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;后者则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。所以,前者更加高效,在前者可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐藏实际的链接。在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用sendRedirect()方法。

 <o:p></o:p>

 <o:p></o:p>

Servlet的基本架构

public class ServletName extends HttpServlet {

public void doPost(HttpServletRequest request, HttpServletResponse response) throws

ServletException, IOException { }

public void doGet(HttpServletRequest request, HttpServletResponse response) throws

ServletException, IOException {

}

}

 <o:p></o:p>

可能会让你写一段JdbcOracle的程序,并实现数据查询.

答:程序如下:

package hello.ant;

import java.sql.*;

public class jdbc

{

String dbUrl="jdbc:oracle:thin:@127.0.0.1:1521:orcl";

String theUser="admin";

String thePw="manager";

Connection c=null;

Statement conn;

ResultSet rs=null;

public jdbc()

{

try{

Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();

c = DriverManager.getConnection(dbUrl,theUser,thePw);

conn=c.createStatement();

}catch(Exception e){

e.printStackTrace();

}

}

public boolean executeUpdate(String sql)

{

try

{

conn.executeUpdate(sql);

return true;

}

catch (SQLException e)

{

e.printStackTrace();

return false;

}

}

public ResultSet executeQuery(String sql)

{

rs=null;

try

{

rs=conn.executeQuery(sql);

}

catch (SQLException e)

{

e.printStackTrace();

}

return rs;

}

public void close()

{

try

{

conn.close();

c.close();

}

catch (Exception e)

{

e.printStackTrace();

}

}

public static void main(String[] args)

{

ResultSet rs;

jdbc conn = new jdbc();

rs=conn.executeQuery("select * from test");

try{

while (rs.next())

{

System.out.println(rs.getString("id"));

System.out.println(rs.getString("name"));

}

}catch(Exception e)

{

e.printStackTrace();

}

}

}

 <o:p></o:p>

 <o:p></o:p>

Class.forName的作用?为什么要用?

答:调用该访问返回一个以字符串指定类名的类的对象。

说明:Class 类的实例表示正在运行的 Java 应用程序中的类和接口。枚举是一种类,注释是一种接口。每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象。基本的 Java 类型(booleanbytecharshortintlongfloat double)和关键字 void 也表示为 Class 对象。

Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的。

 <o:p></o:p>

 <o:p></o:p>

xml有哪些解析技术?区别是什么?

答:有DOM,SAX,STAX

DOM:处理大型文件时其性能下降的非常厉害。这个问题是由DOM的树结构所造成的,这种结构占用的内存较多,而且DOM必须在解析文件之前把整个文档装入内存,适合对XML的随机访问SAX:不现于DOM

SAX:是事件驱动型的XML解析方式。它顺序读取XML文件,不需要一次全部装载整个文件。当遇到像文件开头,文档结束,或者标签开头与标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来处理XML文件,适合对XML的顺序访问

STAXStreaming API for XML (StAX)

 <o:p></o:p>

 <o:p></o:p>

你在项目中用到了xml技术的哪些方面?如何实现的?

答:用到了数据存贮,信息配置两方面。

在做数据交换平台时,将数据源的数据组装成XML文件,然后将XML文件压缩打包加密后通过网络传送给接收者,接收解密与解压缩后再同XML文件中还原相关信息进行处理。在做软件配置时,利用XML可以很方便的进行,软件的各种配置参数都存贮在XML文件中。

 <o:p></o:p>

 <o:p></o:p>

EJB2.0有哪些内容?分别用在什么场合? EJB2.0EJB1.1的区别?

答:规范内容包括Bean提供者,应用程序装配者,EJB容器,EJB配置工具,EJB服务提供者,系统管理员。这里面,EJB容器是EJB之所以能够运行的核心。EJB容器管理着EJB的创建,撤消,激活,去活,与数据库的连接等等重要的核心工作。JSP,Servlet,EJB,JNDI,JDBC,JMS.....

个人回复:

对这些问题持保留意见...

...在J2EE中,难道不掌握这些内容就无法开发出东西吗?当然,如果掌握这些东西确实表面上对J2EE理解更深刻,但实际上
第一题,代码里只会写到private表明bean内的对象,protected正象默认所代表的一样,根本有时候写完一个项目都没看到过.
第二题,我觉得我开发项目中碰到的时候可能是搜索出一窜数据然后将所有数据排列成一队表.很可惜,我开发的时候,搜索的条件SQL或者DAO是一定的前提下,那么搜索的过程和PUSH的结果是采用其他同志写好的东西(不排除也是他们搜索来的),当然如果要改也可以,不过这样JSP的打印数据和这个搜索出对象的形式是绑定的,所以这里我只明白了需要一个队列一样的对象去将搜索出来的数据初始化,至于VECTOR或者ARRAYLIST我根本就没研究过.或许项目中有人知道,但是如果说VECTOR是安全的,但是其他同志都是写ARRAYLIST,那么我..坚持的会选择COPY其他人的ARRAYLIST,因为,代码的一致性比空虚的安全效率更重要,先实现才是重要的,至于要优化,可以等到最后来,因为这个不属于BUG,要依据项目来定夺这属于是否修改的东西..
第三个,我真的不知道HASHMAP是啥,因为我曾经看到过,但是是在其他人搜索到的工具类函数里,当然它在函数里有啥用,看的出来,不过即使不知道也不影响使用,因为这个东西在工具函数里,不需要显性的调用.或许复杂问题需要用,但是简单的开发也不需要用.
第四个问题,char能不能放中文有什么意义呢?至少平时我们都用String,难道用char会让效率更高?或许吧,但是如果因此要考虑到能不能放中文和小心计算长度问题,我宁愿不动脑筋的去用String,或许是程序员去头痛这个取舍吧,如果是项目经理(或许还是技术水平好的)我想他也会直接的说String,而不是让你猜char,再说了跑一个测试就能知道结果何苦计算字节呢,难道不记得一个汉字有多少字节就叫神棍了.
第五个问题,多线程,我从来没在J2EE里用到,这个是J2SE里的基本概念,我真的是该死啊,这个有啥命令也不知道,是的,我是不知道,但是我知道如果要让程序定时完成任务,有N种方法,一种是数据库运行加一个批处理之类的操作,另外就是在J2EE里跑线程当到时间就可以完成了.至于会不会用线程搜索一个示例然后再匹配我想不会有太大的工夫.当然,得承认我的水平确实很低.
第六个问题,float=3.4,我想请问这个问题在实际开发中有多大意义吗??我可能会选这是对的,因为感觉上应该是啊,但是如果这么问我,我还真拿不准,因为此题目的意义何在??
第七个问题,同第三个问题,我从来没仔细去看到底如何使用,因为都封装好了,虽然研究是个好习惯,但是根本无法改良的东西研究了也没意义,毕竟就是那么回事.
第八个,一直没觉得有什么区别,我只在写SQL语句比较长的时候才用,而且我一般简化只用String,只到一天一位技术牛的人告诉我写StringBUffer,因为效率更高!当然,是我错了,因为他的代码里都是StringBuffer,为什么我没有贯彻COPY思想呢..呵呵
第九个,我确实不知道,JSP开发,我都是COPY别人的代码,然后拿回来修改成我需要的东西,那些对象什么,我从来没研究过,request,session已经是比较常用的了,其他那些我真不知道..直到一天我翻到我大学一本买来的JSP教程里终于找到了答案.确实是,仔细想想,JSP效率多高,如果所有页面都用JSP的那些对象来完成,那么效率绝对至少和servlet差不多,比spring那些框架的代码运行效率要高多了.当然,我的一个同事写的一个系统他天天在修改中,因为他告诉我的他那个系统大部分是PHP..掌握多点JSP开发一个纯JSP系统也挺好的,锻炼人啊.
第十个,同第九个,没仔细读过JSP.事实上我刚写代码时觉得,JSP比后台代码容易,因为可视化,可以COPY别人的,可以用网页工具辅助修改...可事实上,后面的项目我发现,JSP是远比后台代码可怕的东西..实在是复杂.
第十一个,SERVLET的生命周期,原谅我,我开发的是轻量级所以我..没研究,但是还好我最后一个项目是一个纯SERVLET,帮助挺大..我发现,原来所谓STRUTS的效果在这个系统中已经被SERVLET实现了..当然,这个系统是修改系统,我看了一下修改的地方,当然,还是没仔细去研究它,这个我承认确实不应该,因为这个是基础的东西.当然,可能是我有些东西不太好表达,知道一点..可是说不上,反正不应该吧.
第十二个,foword和redirct区别,曾经看过,但是只记得一个在Struts中,一个在纯JSP里,不过转向的时候,真的没细分到要掌握区别才做的出,一般fowrd就可以了,当然,应该其他MVC框架都可以实现转向,反正无非是个STRING配合一些XML了,用fowrd怎么用这是框架的事了..
第十三个,servlet基本架构我没研究....
第十四个,JDBC连接数据库...不好意思,这部分都是同事搞的,当然我也知道,配合一下什么URL,JDBC名,写一个基础数据源类..当然可能要点什么关闭的异常操作..总之呢,与其掌握如何熟练的写,不如好好把几种不同写法搜集起来,偶尔归类那种写法最好..为问题钻研是好的,但是为了背一个JDBC..当然我的记忆力不好,我连关键词都背不下来..所以..呵呵..
第十五个,CLASS那个什么东西,不太清楚,可能..我用过一次,好象是那一次我命令我的同事写一个函数,好象是我觉得M发送过来的数据如果是NULL,则V(JSP)上显示为NULL,当然我们要的是"",当然解决方法是JSP下面多写段JAVA代码,如果为NULL则变为"",当然我年轻人想的多,直接让同事写了个把对象对应属性转化为STRING,如果为NULL则"",当然前提是属性是我们的基础类型,INTEGER,DATE等..函数里好象用了CLASS名这个东西吧..当然都是同事写的,我没动手..只是提了个意见,虽然其实效率并不一定适合项目也低什么,但也算尝试一把了.
第十六和十七个,XML没仔细用,我原来的项目,SPRING里的XML被他们搜索来了解决的函数.但我没仔细去读,后来的项目我自己写了个XML存储配置信息,但是加载信息的函数里也没用到这么多复杂的知识.毕竟我还菜了点,完成优先.
第十八个,不好意思,EJB我是没做过的,我的开发经验都是轻量级的开发.虽然我后续可以学习,但是放在面试里是不合适的,因为我这个人忘东西快,何况我确实没去研究过..

罗嗦了不少,其实我也面过这些问题,而且应该有至少五六道这么多吧?反正我是一个都没答上来.当然不排除我这人交流不是很好的原因,不过事实是,我想说一个我对代码员的分级观点,请不要攻击我什么,代码员分为低级,中级,高级人员,低级和中级的差别在与中级掌握了开发的技巧包括如何去使用别人的思想有效的使用IDE和搜索工具能够通过测试解决问题;高级和中级的差别在于高级有两类,一类是代码技术类,应该能够深入了解底层,我觉得至少应该是包括熟练掌握编译原理这样的东西,包括汇编,至于这上面的问题,自然是和高级代码员挂不上边的.另外一类高级,是所谓能够知道去做什么如何去通过什么样架构大致实现的人,可以说是架构师和LEADER了,至于高级的代码员,我认为是不属于LEADER级的,当然不排除两方面都精通的牛人.

至于这个题目,换成区分度来说,无法判断代码员的等级,因为这些问题回答出来并不能说明能够有效的进行工作,问题太过学院派了,但是呢,如果是学院派,又应该是选择题比较好.如果要一份好的题目,当然笔试还是需要一些基础题的,最基本的概念外并可以选择,最好是一些代码段能判断输出结果这样的题,可以判断对程序的阅读能力,当然最好不要涉及太多复杂的数据结构,数据结构是好的,但是在开发中确实很少碰到的,这是实话,我用过MD5,也搜索过MD5加密函数复制上去,但我并没去研究如何加密的.可能要说我的数据结构不好,数据结构不好所以才....至于这个,我想说如果考试的话,我数据结构考研(后来不想考了,反正一直没复习,数据结构是考试前一个月老师说了些知识点,当然是所有考试的人都听了),那次我应该是最高的分..事实上,考试完了以后我在听完知识点后翻书才第一次了解数据结构中逻辑结构代码和物理链表线性结构代码的区别,汗!所以我想,我的数据结构能力理论上也不能说是很低的的,当然现在我又早忘光了,前几天一道题目,请用选择法写出算法,我只记得经典的排列法了...还好,做那么久代码里居然都没碰上要数据结构知识的时候..有些偏题了,当然我想说,如果数据结构其实教育锻炼的成分比较多,面试搞这个也没必要.

再说最后一些吧,我一直认为,如果碰上这样招聘的,可能是代码员,而很少是HR或者LEADER...因为HR不懂这些,何况答案是主观的,HR很难分析是否对,LEADER本身的关注点也不在语法上,可能不少LEADER都不太记得差别了..当然,如果是代码员要去面别人而去问这个问题,应该做一下测试,找到你所在开发小组中那些你认为基础知识低级的代码员,当然他们至少要达到能跟上小组开发节奏的代码员,让他们去回答这些问题,看这些基础差的低级代码员能够掌握这些东西就知道实际项目中到底能掌握到什么样知识了.我记得,我被面的时候被这样说,你基础不好,如果进工资得**,如果过一年工资就不只**了...但是我一直在想一个问题,即使我一年后工资有**或者我开发的挺好成熟练工,我也一样不知道今天这些问题的答案...因为开发是另一回事,书背的好不如掌握住正确的开发方法.只靠这些基础问题去面的代码员会发现,越来越多的人回答不出这些东西,但是这些在新开发方式下基础相对薄弱却拥有搜索工具的开发人员,一样能够成为软件中的蓝领,软件不是一个金领工作,金领工作恐怕是六七十年代的时候,现在的软件是管理的建筑,当然还是需要代码员的脑力劳动的,否则根本不需要代码员就能写出软件,当然,我觉得发展的趋势是,六七十年代是金领,现在是蓝领普及年代,到未来如果能有更好抽象描述系统概念的时候,计算机必然能够通过需求描述自动形成通用的代码软件,除了高级复杂的软件需要高级人员的.这时候又是金领了..

打了这么久说的比较乱,最后...最后..最后,写一点,回答不出这些问题不要紧,不代表能力低下智商不行,不适合做开发什么..未来毕业的人士对API背诵熟悉程度的比例会不断下降,因为开发方式在变化,可以更容易的借鉴他人经验进行信息交互了,软件实际上在技术代码上没有什么不可想象的地方,实际上二十年代的软件天才一样有可能能明白今天的算法框架结构,软件的发展是靠开发方式的变革来驱动的,SPRING的代码确实有算法巧妙的地方,但实际上最核心的无非是如何解决系统集成的方法,这是需要从实践中总结的,软件不断进步的内在因素不是在与如何让技术更高深,而在与如何找到最佳的开发实践,最终的目的自然是仅从自然抽象语言直接得到实践结果代码,当然或许只是个人YY吧..

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值