您的位置:首页 > 职场人生

Java经典面试题

2015-08-18 14:45 525 查看
精选30到Java面试题

1. 函数参数传递的是值

2. IP地址及其子网掩码

前21位为网络地址,后12位为主机地址。

110 对应前8位,10对应第二个8位,因此200对应第3个8位

又200的二进制表示为1100 1000

前面已经有了16位,因此11001 是属于网络地址的。000是属于主机地址 那么,最大的地址为

【110(十进制)】【10(十进制)】【11001 111】【 11111111】转换为十进制为110.10.207.255

故网络的地址范围为

110.10.200.0~110.10.207.255
3.HashMap的key不能重复

C.HashMap是Map接口的实现类,并且不保证元素的顺序恒久不变,它的底层使用的是数组和链表,通过hashCode()方法和equals方法保证键的唯一性

HashMap允许null键和null值

使用put方法向HashMap中添加元素时,如果键不存在,则添加该元素,并返回null;如果键已经存在,则把该键对应的值进行覆盖,返回原来的键,由于键都是"name",所以第二次添加的会把第一次的值覆盖,并返回第一次的键,所以HashMap中还是只有一个元素
4.类型转换

代码片段:

byteb1=1,b2=2,b3,b6;
finalbyte b4=4,b5=6;
b6=b4+b5;
b3=(b1+b2);
System.out.println(b3+b6);
关于上面代码片段叙述正确的是()
第4行编译错误,没有final修饰的变量相加后会被自动提升为int型,与目标类型byte不相容,需要强制转换(向下转型)。

表达式的数据类型自动提升, 关于类型的自动提升,注意下面的规则。

①所有的byte,short,char型的值将被提升为int型;

②如果有一个操作数是long型,计算结果是long型;

③如果有一个操作数是float型,计算结果是float型;

④如果有一个操作数是double型,计算结果是double型;

而声明为final的变量会被JVM优化,第6行相当于 b6 = 10
5. 异常检查语句

下面代码运行结果是()

public class Test{
public int add(int a,int b){
try{
return a+b;
}
catch(Exception e) {
System.out.println("catch语句块");
}
finally{
System.out.println("finally语句块");
}
return 0;
}
public static void main(String argv[]){
Test test =new Test();
System.out.println("和是:"+test.add(9, 34));
}
}
程序先执行try块中return之前(包括return语句中的表达式运算)的代码; 再执行finally块,最后执行try块中的return;
而 finally块之后的return语句,因为程序在try块中已经return了,所以不再执行。

6.逻辑题

计算斐波那契数列第n项的函数定义如下:

intfib(intn){
if(n==0)
return1;
elseif(n==1)
return2;
else
returnfib(n-1)+fib(n-2);
}
若执行函数调用表达式fib(10),函数fib被调用的次数是:
若C(n) 表示计算次数,则

C(0) = 1;

C(1) = 1;

C(n) = C(n-1) + C(n-2) + 1; n>=2;

故:

C(0) = 1;

C(1) = 1;

C(2) = 1 + 1 + 1 = 3;

C(3) = 3 + 1 + 1 = 5;

C(4) = 5 + 3 + 1 = 9;

C(5) = 9 + 5 + 1 = 15;

……

7. Static变量

public class B
{
public static B t1 = new B();
public static B t2 = new B();
{
System.out.println("构造块");
}
static
{
System.out.println("静态块");
}
public static void main(String[] args)
{
B t = new B();
}
}


静态块:用static申明,JVM加载类时执行,仅执行一次

构造块:类中直接用{}定义,每一次创建对象时执行

执行顺序优先级:静态块>main()>构造块>构造方法

静态块按照申明顺序执行,所以先执行publicstaticB t1 = newB();该语句创建对象,则又会调用构造块,输出构造块

接着执行public static B t1 = new B();输出构造块

再执行

static

{

System.out.println("静态块");

}输出静态块
最后main方法执行,创建对象,输出构造块。

8. Servlet

init方法: 是在servlet实例创建时调用的方法,用于创建或打开任何与servlet相的资源和初始 化servlet的状态,Servlet规范保证调用init方法前不会处理任何请求

service方法:是servlet真正处理客户端传过来的请求的方法,由web容器调用, 根据HTTP请求方法(GET、POST等),将请求分发到doGet、doPost等方法

destory方法:是在servlet实例被销毁时由web容器调用。Servlet规范确保在destroy方法调用之 前所有请求的处理均完成,需要覆盖destroy方法的情况:释放任何在init方法中 打开的与servlet相关的资源存储servlet的状态

servlet在多线程下其本身并不是线程安全的。

如果在类中定义成员变量,而在service中根据不同的线程对该成员变量进行更改,那么在并发的时候就会引起错误。最好是在方法中,定义局部变量,而不是类变量或者对象的成员变量。由于方法中的局部变量是在栈中,彼此各自都拥有独立的运行空间而不会互相干扰,因此才做到线程安全。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: