java高级工程师面试题及答案doc.docx

上传人:b****3 文档编号:4009337 上传时间:2022-11-27 格式:DOCX 页数:13 大小:20.52KB
下载 相关 举报
java高级工程师面试题及答案doc.docx_第1页
第1页 / 共13页
java高级工程师面试题及答案doc.docx_第2页
第2页 / 共13页
java高级工程师面试题及答案doc.docx_第3页
第3页 / 共13页
java高级工程师面试题及答案doc.docx_第4页
第4页 / 共13页
java高级工程师面试题及答案doc.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

java高级工程师面试题及答案doc.docx

《java高级工程师面试题及答案doc.docx》由会员分享,可在线阅读,更多相关《java高级工程师面试题及答案doc.docx(13页珍藏版)》请在冰豆网上搜索。

java高级工程师面试题及答案doc.docx

java高级工程师面试题及答案doc

 

一:

选择题

 

1.关于以下程序代码的说明正确的是(D)

 

1.classHasStatic{

 

2.

privatestaticintx=100;

3.

publicstaticvoidmain(Stringargs[]){

4.

HasStatic

hs1=new

HasStatic(

);

5.

hs1.x++;

6.

HasStatic

hs2=new

HasStatic(

);

7.

hs2.x++;

8.

hs1=new

HasStatic();

9.

hs1.x++;

0.

HasStatic.x--;

1.

System.out.println(

“x=”+x);

2.

}

3.}

A、5行不能通过编译,因为引用了私有静态变量

B、10行不能通过编译,因为x是私有静态变量

C、程序通过编译,输出结果为:

x=103

D、程序通过编译,输出结果为:

x=102

2.下列关于for循环和while循环的说法中哪个是正确的?

B)

A.while循环能实现的操作,for循环也都能实现

 

1/10

 

B.while循环判断条件一般是程序结果,for循环判断条件一般是非程序结

 

C.两种循环任何时候都可替换

 

D.两种循环结构中都必须有循环体,循环体不能为空

 

3.以下选项中循环结构合法的是(C)

 

A、while(inti<7)

 

{i++;

 

System.out.println(“iis“+i);

 

}

 

B、intj=3;

 

while(j)

 

{

 

System.out.println(is““j+j);

 

}

 

C、intj=0;

 

for(intk=0;j+k!

=10;j++,k++)

 

{

 

System.out.println(is““j+j+is“”k+k);

 

}

 

D、intj=0;

 

do{

 

2/10

 

System.out.println(is““j+j++);

 

if(j==3){continueloop;}

 

}while(j<10);

 

4.给出下面代码段,哪行将引起一个编译时错误?

(D)

 

1)publicclassTest{

 

2)intn=0;

 

3)intm=0;

 

4)publicTest(inta){m=a;}

 

5)publicstaticvoidmain(Stringarg[]){

 

6)Testt1,t2;

 

7)intj,k;

 

8)j=3;k=5;

 

9)t1=newTest();

 

10)t2=newTest(k);

 

11)}

 

12)}

 

A.行1B.行4C.行6D.行9

 

5.下面的方法,当输入为2的时候返回值是多少?

(D)

 

publicintgetValue(inti){

 

intresult=0;

 

switch(i){

 

3/10

 

case1:

 

result=result+i;

 

case2:

 

result=result+i*2;

 

case3:

 

result=result+i*3;

 

}

 

returnresult;

 

}

A0

B2

C4

D10

二:

简述题

 

1、描述一下JVM加载class文件的原理机制?

 

JVM中类的装载是由ClassLoader和它的子类来实现的,JavaClassLoader是一个重要的

 

Java运行时系统组件。

它负责在运行时查找和装入类文件的类。

 

2、heap和stack有什么区别。

 

java的内存分为两类,一类是栈内存,一类是堆内存。

栈内存是指程序进入一个方法时,会为这个方法单独分配一块私属存储空间,用于存储这个方法内部的局部变量,当这个方法结束时,分配给这个方法的栈会释放,这个栈中的变量也将随之释放。

 

堆是与栈作用不同的内存,一般用于存放不放在当前方法栈中的那些数

据,例如,使用new创建的对象都放在堆里,所以,它不会随方法的结束而消失。

方法中的局部变量使用final修饰后,放在堆中,而不是栈中。

 

4/10

 

3、GC是什么?

为什么要有GC?

 

GC是垃圾收集的意思(GabageCollection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,

Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。

 

4、列举出一些常用的类,包,接口,请各举5个

 

要让人家感觉你对javaee开发很熟,所以,不能仅仅只列corejava中的那些东西,要多列你在做ssh项目中涉及的那些东西。

就写你最近写的那些程序中涉及的那些类。

 

常用的类:

BufferedReaderBufferedWriterFileReaderFileWirter

StringIntegerjava.util.Date,System,Class,List,HashMap常用的包:

java.langjava.iojava.util

java.sql,javax.servlet,org.apache.strtuts.action,org.hibernate常用的接口:

RemoteListMapDocument

 

NodeList,Servlet,HttpServletRequest,HttpServletResponse,Transaction(Hibernat

e)、

 

Session(Hibernate),HttpSession

 

5java中有几种类型的流?

JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?

 

字节流,字符流。

字节流继承于InputStreamOutputStream,字符流继承于InputStreamReader

 

OutputStreamWriter。

在java.io包中还有许多其他的流,主要是为了提高性能和使用方便。

 

6、多线程有几种实现方法?

同步有几种实现方法?

 

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

 

5/10

 

同步的实现方面有两种,分别是synchronized,wait与notifywait():

使一个

线程处于等待状态,并且释放所持有的对象的lock。

 

sleep():

使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉

 

InterruptedException(中断异常)异常。

 

notify():

唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。

Allnotity():

唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是

 

让它们竞争。

 

7、说一说Servlet的生命周期?

 

答:

servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。

这个生存期由javax.servlet.Servlet接口的init,service和

destroy方法表达。

 

Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。

 

web容器加载servlet,生命周期开始。

通过调用servlet的init()方法进行servlet的初始化。

通过调用service()方法实现,根据请求的不同调用不同的do***()方法。

结束服务,web容器调用servlet的destroy()方法。

 

8、说出数据连接池的工作机制是什么?

 

J2EE服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。

客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙。

如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定。

当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。

 

6/10

 

实现方式,返回的Connection是原始Connection的代理,代理

Connection的close方法不是真正关连接,而是把它代理的Connection对象

还回到连接池中。

 

9、这段代码有什么不足之处?

 

try{

 

Connectionconn=...;Statementstmt=...;

 

ResultSetrs=stmt.executeQuery("select*fromtable1");

 

while(rs.next()){

 

}

 

}catch(Exceptionex){

 

}

 

答:

没有finally语句来关闭各个对象,另外,使用finally之后,要把变量的定义放在try语句块的外面,以便在try语句块之外的finally块中仍可以访问这些变量。

 

0、一个用户具有多个角色,请查询出该表中具有该用户的所有角色的其他用户。

 

selectcount(*)asnum,tb.idfrom

 

tb,

 

(selectrolefromtbwhereid=xxx)ast1wheretb.role=t1.roleandtb.id!

=t1.idgroupbytb.idhaving

num=selectcount(role)fromtbwhereid=xxx;

 

7/10

 

1、一个用户表中有一个积分字段,假如数据库中有100多万个用户,若

要在每年第一天凌晨将积分清零,你将考虑什么,你将想什么办法解决?

 

altertabledropcolumnscore;

 

altertableaddcolunmscoreint;可能会很快,但是需要试验,试验不能拿真

实的环境来操刀,并且要注意,这样的操作时无法回滚的,在我的印象中,只

有inertupdatedelete等DML语句才能回滚,对于createtable,drop

table,altertable等DDL语句是不能回滚。

 

解决方案一,updateusersetscore=0;解决方案二,假设上面的代码要执行

好长时间,超出我们的容忍范围,那我就altertableuserdropcolumnscore;alter

tableuseraddcolumnscoreint。

 

下面代码实现每年的那个凌晨时刻进行清零。

 

Runnablerunnable=

 

newRunnable(){

 

publicvoidrun(){

 

clearDb();

 

schedule(this,newDate(newDate().getYear()+1,0,0));

 

}

 

};

 

schedule(runnable,

 

newDate(newDate().getYear()+1,0,1));

 

2、你对Spring的理解,什么是spring的IOCAOP。

 

1.Spring实现了工厂模式的工厂类(在这里有必要解释清楚什么是工厂模式),这个类名为BeanFactory(实际上是一个接口),在程序中通常

 

8/10

 

BeanFactory的子类ApplicationContext。

Spring相当于一个大的工厂类,在其配置文件中通过元素配置用于创建实例对象的类名和实例对象的属性。

 

2.Spring提供了对IOC良好支持,IOC是一种编程思想,是一种架构艺术,利用这种思想

 

可以很好地实现模块之间的解耦。

IOC也称为D(I

 

DepencyInjection),什么叫依赖注入呢?

 

譬如,ClassProgrammer

 

{

 

publicvoidcode()

 

{

 

}

 

{

 

}

 

}另外两种方式都由依赖,第一个直接依赖于目标类,第二个把依赖转移到工厂上,第三个彻底与目标和工厂解耦了。

在spring的配置文件中配置片段如下:

 

 

 

 

3.Spring提供了对AOP技术的良好封装,AOP称为面向切面编程,就是系统中有很多各不相干的类的方法,在这些众多方法中要加入某种系统功能的

代码,例如,加入日志,加入权限判断,加入异常处理,这种应用称为AOP。

实现AOP功能采用的是代理技术,客户端程序不再调用目标,而调用代理

类,代理类与目标类对外具有相同的方法声明,有两种方式可以实现相同的方

 

9/10

 

法声明,一是实现相同的接口,二是作为目标的子类在,JDK中采用Proxy类

产生动态代理的方式为某个接口生成实现类,如果要为某个类生成子类,则可以用CGLIB。

在生成的代理类的方法中加入系统功能和调用目标类的相应方

法,系统功能的代理以Advice对象进行提供,显然要创建出代理对象,至少需要目标类和Advice类。

spring提供了这种支持,只需要在spring配置文件中配置这两个元素即可实现代理和aop功能,例如,

 

 

 

 

 

10/10

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1