java高级工程师面试题及答案.docx
- 文档编号:7584615
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:8
- 大小:22.58KB
java高级工程师面试题及答案.docx
《java高级工程师面试题及答案.docx》由会员分享,可在线阅读,更多相关《java高级工程师面试题及答案.docx(8页珍藏版)》请在冰豆网上搜索。
java高级工程师面试题及答案
一:
选择题
1.关于以下程序代码的说明正确的是(D)
1.classHasStatic{
2.privatestaticintx=100;
3.publicstaticvoidmain(Stringargs[]){
4.HasStatichs1=newHasStatic();
5.hs1.x++;
6.HasStatichs2=newHasStatic();
7.hs2.x++;
8.hs1=newHasStatic();
9.hs1.x++;
10.HasStatic.x--;
11.System.out.println(“x=”+x);
12.}
13.}
A、5行不能通过编译,因为引用了私有静态变量
B、10行不能通过编译,因为x是私有静态变量
C、程序通过编译,输出结果为:
x=103
D、程序通过编译,输出结果为:
x=102
2.下列关于for循环和while循环的说法中哪个是正确的?
(B)
A.while循环能实现的操作,for循环也都能实现
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(“jis“+j);
}
C、intj=0;
for(intk=0;j+k!
=10;j++,k++)
{
System.out.println(“jis“+j+“kis”+k);
}
D、intj=0;
do{
System.out.println(“jis“+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){
case1:
result=result+i;
case2:
result=result+i*2;
case3:
result=result+i*3;
}
returnresult;
}
A0B2C4D10
二:
简述题
1、描述一下JVM加载class文件的原理机制?
JVM中类的装载是由ClassLoader和它的子类来实现的,JavaClassLoader是一个重要的
Java运行时系统组件。
它负责在运行时查找和装入类文件的类。
2、heap和stack有什么区别。
java的内存分为两类,一类是栈内存,一类是堆内存。
栈内存是指程序进入一个方法时,会为这个方法单独分配一块私属存储空间,用于存储这个方法内部的局部变量,当这个方法结束时,分配给这个方法的栈会释放,这个栈中的变量也将随之释放。
堆是与栈作用不同的内存,一般用于存放不放在当前方法栈中的那些数据,例如,使用new创建的对象都放在堆里,所以,它不会随方法的结束而消失。
方法中的局部变量使用final修饰后,放在堆中,而不是栈中。
3、GC是什么?
为什么要有GC?
GC是垃圾收集的意思(GabageCollection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。
4、列举出一些常用的类,包,接口,请各举5个
要让人家感觉你对javaee开发很熟,所以,不能仅仅只列corejava中的那些东西,要多列你在做ssh项目中涉及的那些东西。
就写你最近写的那些程序中涉及的那些类。
常用的类:
BufferedReaderBufferedWriterFileReaderFileWirterStringIntegerjava.util.Date,System,Class,List,HashMap
常用的包:
java.langjava.iojava.utiljava.sql,javax.servlet,org.apache.strtuts.action,org.hibernate常用的接口:
RemoteListMapDocument
NodeList,Servlet,HttpServletRequest,HttpServletResponse,Transaction(Hibernate)、
Session(Hibernate),HttpSession
5java中有几种类型的流?
JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?
字节流,字符流。
字节流继承于InputStreamOutputStream,字符流继承于InputStreamReader
OutputStreamWriter。
在java.io包中还有许多其他的流,主要是为了提高性能和使用方便。
6、多线程有几种实现方法?
同步有几种实现方法?
多线程有两种实现方法,分别是继承Thread类与实现Runnable接口
同步的实现方面有两种,分别是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服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。
客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙。
如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定。
当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。
实现方式,返回的Connection是原始Connection的代理,代理Connection的close方法不是真正关连接,而是把它代理的Connection对象还回到连接池中。
9、这段代码有什么不足之处?
try{
Connectionconn=...;Statementstmt=...;
ResultSetrs=stmt.executeQuery("select*fromtable1");
while(rs.next()){
}
}catch(Exceptionex){
}
答:
没有finally语句来关闭各个对象,另外,使用finally之后,要把变量的定义放在try语句块的外面,以便在try语句块之外的finally块中仍可以访问这些变量。
10、一个用户具有多个角色,请查询出该表中具有该用户的所有角色的其他用户。
selectcount(*)asnum,tb.idfrom
tb,
(selectrolefromtbwhereid=xxx)ast1where
tb.role=t1.roleandtb.id!
=t1.id
groupbytb.idhaving
num=selectcount(role)fromtbwhereid=xxx;
11、一个用户表中有一个积分字段,假如数据库中有100多万个用户,若要在每年第一天凌晨将积分清零,你将考虑什么,你将想什么办法解决?
altertabledropcolumnscore;
altertableaddcolunmscoreint;可能会很快,但是需要试验,试验不能拿真实的环境来操刀,并且要注意,这样的操作时无法回滚的,在我的印象中,只有inertupdatedelete等DML语句才能回滚,对于createtable,droptable,altertable等DDL语句是不能回滚。
解决方案一,updateusersetscore=0;解决方案二,假设上面的代码要执行好长时间,超出我们的容忍范围,那我就altertableuserdropcolumnscore;altertableuseraddcolumnscoreint。
下面代码实现每年的那个凌晨时刻进行清零。
Runnablerunnable=
newRunnable(){
publicvoidrun(){
clearDb();
schedule(this,newDate(newDate().getYear()+1,0,0));
}
};
schedule(runnable,
newDate(newDate().getYear()+1,0,1));
12、你对Spring的理解,什么是spring的IOCAOP。
1.Spring实现了工厂模式的工厂类(在这里有必要解释清楚什么是工厂模式),这个类名为BeanFactory(实际上是一个接口),在程序中通常BeanFactory的子类ApplicationContext。
Spring相当于一个大的工厂类,在其配置文件中通过
2.Spring提供了对IOC良好支持,IOC是一种编程思想,是一种架构艺术,利用这种思想
可以很好地实现模块之间的解耦。
IOC也称为D(I
DepencyInjection),什么叫依赖注入呢?
譬如,ClassProgrammer
{
Computercomputer=null;
publicvoidcode()
{
//Computercomputer=newIBMComputer();
//Computercomputer=beanfacotry.getComputer();
computer.write();
}
publicvoidsetComputer(Computercomputer)
{
puter=computer;
}
}另外两种方式都由依赖,第一个直接依赖于目标类,第二个把依赖转移到工厂上,第三个彻底与目标和工厂解耦了。
在spring的配置文件中配置片段如下:
3.Spring提供了对AOP技术的良好封装,AOP称为面向切面编程,就是系统中有很多各不相干的类的方法,在这些众多方法中要加入某种系统功能的代码,例如,加入日志,加入权限判断,加入异常处理,这种应用称为AOP。
实现AOP功能采用的是代理技术,客户端程序不再调用目标,而调用代理类,代理类与目标类对外具有相同的方法声明,有两种方式可以实现相同的方法声明,一是实现相同的接口,二是作为目标的子类在,JDK中采用Proxy类产生动态代理的方式为某个接口生成实现类,如果要为某个类生成子类,则可以用CGLIB。
在生成的代理类的方法中加入系统功能和调用目标类的相应方法,系统功能的代理以Advice对象进行提供,显然要创建出代理对象,至少需要目标类和Advice类。
spring提供了这种支持,只需要在spring配置文件中配置这两个元素即可实现代理和aop功能,例如,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 高级工程师 试题 答案