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.类型转换
代码片段:
第4行编译错误,没有final修饰的变量相加后会被自动提升为int型,与目标类型byte不相容,需要强制转换(向下转型)。
表达式的数据类型自动提升, 关于类型的自动提升,注意下面的规则。
①所有的byte,short,char型的值将被提升为int型;
②如果有一个操作数是long型,计算结果是long型;
③如果有一个操作数是float型,计算结果是float型;
④如果有一个操作数是double型,计算结果是double型;
而声明为final的变量会被JVM优化,第6行相当于 b6 = 10
5. 异常检查语句
下面代码运行结果是()
而 finally块之后的return语句,因为程序在try块中已经return了,所以不再执行。
6.逻辑题
计算斐波那契数列第n项的函数定义如下:
若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变量
静态块:用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中根据不同的线程对该成员变量进行更改,那么在并发的时候就会引起错误。最好是在方法中,定义局部变量,而不是类变量或者对象的成员变量。由于方法中的局部变量是在栈中,彼此各自都拥有独立的运行空间而不会互相干扰,因此才做到线程安全。
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中根据不同的线程对该成员变量进行更改,那么在并发的时候就会引起错误。最好是在方法中,定义局部变量,而不是类变量或者对象的成员变量。由于方法中的局部变量是在栈中,彼此各自都拥有独立的运行空间而不会互相干扰,因此才做到线程安全。
相关文章推荐
- 优秀程序员的良好的学习方式
- 每个程序员1小时内必须解决的5个编程问题
- 架构师与程序员的区别
- 【.Net码农】 .NET中执行js脚本的方法
- 程序员开发学习利器篇(上)之百度搜索-你真的会用百度吗
- 黑马程序员——IO(概述、FileWriter、FileReader)
- 黑马程序员——IO流
- 【.Net码农】RDLC报表显示外部图片方法
- 黑马程序员——黑苹果的日记(4)——基础知识(2)
- 黑马程序员——其他对象
- 全面解读java虚拟机(面试考点大全)d
- 程序员的自我修养-读书笔记(1)
- 职场奇葩说:不得不了解的11个奇葩现象
- 剑指offer-第四章解决面试题思路(判断一个数组是否为二叉搜索树的后序遍历序列)
- 一个启发式程序员的思考
- 什么样的程序员最易涨薪?
- 100分程序员的8个习惯
- 某搜索公司面试 待续
- 常用网站(程序员必备)
- 创建SQL语句_面试