java工程师面试题

一:选择题
1. 关于以下程序代码的说明正确的是( D )
1.class HasStatic{
2. private static int x=100;
3.public static void main(String args[ ]){
4.HasStatic hs1=new HasStatic( );
5.hs1.x++;
6.HasStatic hs2=new HasStatic( );
7.hs2.x++;
8.hs1=new HasStatic( );
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

考点: java变量 ++ 在前和在后的区别
在前:先自增后赋值
在后:先复制后自增
例子:
int a = 5, b = 5;
System.out.println(a++); // a是先输出5,然后再对a进行累加
System.out.println(++b); // b是先进行累加,然后再输出,输出值为6

  1. 下列关于for循环和while循环的说法中哪个是正确的?( B )
    A.while循环能实现的操作,for循环也都能实现
    B.while循环判断条件一般是程序结果,for循环判断条件一般是非程序结果
    C.两种循环任何时候都可替换
    D.两种循环结构中都必须有循环体,循环体不能为空

    3.以下选项中循环结构合法的是( C )
    A、while (int i<7) { i++; System.out.println(“i is “+i); }
    B、int j=3; while(j) { System.out.println(“ j is “+j); }
    C、int j=0; for(int k=0; j + k !=10; j++,k++) { System.out.println(“ j is “+ j + “k is”+ k); }
    D、int j=0; do{ System.out.println( “j is “+j++); if (j = = 3) {continue loop;} }while (j<10);

考点:
A:while的循环体是boolean类型的
B:同A
D:loop无定义

  1. 给出下面代码段, 哪行将引起一个编译时错误?( D )
    1) public class Test {
    2) int n = 0;
    3) int m = 0;
    4) public Test(int a) { m=a; }
    5) public static void main(String arg[]) {
    6) Test t1,t2;
    7) intj,k;
    8) j=3; k=5;
    9) t1=new Test();
    10) t2=new Test(k);
    11) }
    12) }
    A. 行1 B. 行4 C. 行6 D. 行9

考点:
构造函数的问题,默认构造函数是无参的,当定义一个有参的构造函数时,需要重新定义无参的构造函数

  1. 下面的方法,当输入为2的时候返回值是多少?( D )
    publicintgetValue(int i) { int result = 0; switch (i) { case 1: result = result + i; case 2: result = result + i * 2; case 3: result = result + i * 3; } return result; }
    A0 B2 C4 D10

考点:
return语句的重要性

二:简述题
1、描述一下 JVM 加载 class 文件的原理机制?
JVM中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoader是一个重要的 Java运行时系统组件。它负责在运行时查找和装入类文件的类。
2、heap和stack有什么区别。 java的内存分为两类,一类是栈内存,一类是堆内存。栈内存是指程序进入一个方法时,会为这个方法单独分配一块私属存储空间,用于存储这个方法内部的局部变量,当这个方法结束时,分配给这个方法的栈会释放,这个栈中的变量也将随之释放。 堆是与栈作用不同的内存,一般用于存放不放在当前方法栈中的那些数据,例如,使用new 创建的对象都放在堆里,所以,它不会随方法的结束而消失。方法中的局部变量使用final 修饰后,放在堆中,而不是栈中。
3、GC 是什么?为什么要有 GC? GC是垃圾收集的意思(GabageCollection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。
4、列举出一些常用的类,包,接口,请各举 5 个 要让人家感觉你对java ee开发很熟,所以,不能仅仅只列core java中的那些东西,要多列你在做ssh项目中涉及的那些东西。就写你最近写的那些程序中涉及的那些类。 常用的类:BufferedReaderBufferedWriter FileReaderFileWirter StringIntegerjava.util.Date,System, Class,List,HashMap 常用的包:java.lang java.io java.utiljava.sql,javax.servlet,org.apache.strtuts.action,org.hibernate常用的接口:RemoteListMap Document NodeList,Servlet,HttpServletRequest,HttpServletResponse,Transaction(Hibernate)、 Session(Hibernate),HttpSession
5 java 中有几种类型的流?JDK 为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类? 字节流,字符流。字节流继承于InputStreamOutputStream,字符流继承于InputStreamReader OutputStreamWriter。在java.io包中还有许多其他的流,主要是为了提高性能和使用方便。
6、多线程有几种实现方法?同步有几种实现方法? 多线程有两种实现方法,分别是继承Thread类与实现Runnable接口 同步的实现方面有两种,分别是synchronized,wait与notify wait():使一个线程处于等待状态,并且释放所持有的对象的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()方法。

你可能感兴趣的:(面试题库,面试题)