第一次java面试汇总
总结一下第一次甚不成功的面试(⊙︿⊙)
equals方法与”==”
- “==”用于基本数据类型时比较存储的值是否相等,用于引用类型的变量时比较所指向的地址是否相等
- equals方法只可用于引用类型变量,未重写情况下比较引用类型变量指向的地址(是否是一个对象),重写情况下可以比较所指向的对象的内容
String加号运算之后,原对象如何变化?
String加法的实现:
- 初始化StringBuilder
- StringBuilder.append()
- StringBuilder.toString()
static方法能否调用非static方法?
不能直接调用非static方法,但是可以将对象的引用传入static方法中再调用该对象的non-static方法。
原因
static成员在类加载的时候初始化(被JVM的class loader加载),非static成员在类加载之后,创建对象的时候初始化,所以不能直接访问。
gc相关问题
throw与throws区别
异常抛出的三种形式:
- 系统自动抛异常
程序语句出现错误时系统主动抛出异常,比如1
2
3
4public static void main(String[] args){
int a=5,b=0;
System.out.println(5/b);
} - throw 异常对象
用于程序出现某种逻辑时程序员主动抛出某种特定类型的异常,如:1
2
3
4
5
6
7
8public static void main(String[] args){
String s='abc';
if("abc".equals(s)) {
throw new NumberFormatException();
}else{
System.out.println(s);
}
} - throws
方法可能抛出异常的声明(用于声明方法时,表示该方法可能要抛出异常)1
2
3
4
5
6
7
8public static void main(String[] args){
String s="abc";
try{
System.out.println(Double.parseDouble(s));
}catch(NumberFormatException e){
System.err.println("非数据类型");
}
}
好的编程习惯
- 可能出现的异常部分用try{…} catch{…}捕捉并进行处理
- 捕获异常后一定在catch块中进行处理
- 捕获到IO输入输出流中的异常,要用finally{…}关闭输入输出流
- 如果函数体中用throw抛出异常,最好在函数声明中加throws声明,然后交给上层处理。
dopost()方法与doget()方法
当发出客户端请求的时候,调用service方法并传递一个请求和响应对象。Servlet首先判断该请求时GET操作还是POST操作,然后调用下面的一个方法:
- doGet方法处理GET请求。GET请求只有一个流,参数附加在url后,大小个数有严格限制且只能是字符串。
- doPost方法处理POST请求。POST请求参数通过另外的流传递的,不通过url,可以很大也可传递二进制数据。
TODO
添加底层实现的解释
HTTP响应码
状态码 | 含义 | 说明 |
---|---|---|
200 | OK | 请求已成功 |
300 | Multiple Choices | |
301 | Moved Permanently | |
302 | Move Temporially | |
404 | Not Found | 请求资源未被发现 |
500 | Internal Server Error | 服务器遇到未预料的状况 |
501 | Not Implemented | 不支持当前情况的功能 |
502 | Bad Gateway | |
503 | Service Unavailable | |
504 | Gateway Timeout |
AOP与IOC
IOC
Inversion of Control,控制反转,也叫依赖注入。不再是业务逻辑层调用工厂类去获取,而是通过Spring容器 自动设置,之前是业务层获取所需对象,现在是对象主动被设置到业务逻辑层中。
AOP
Aspect Oriented Programming,面向切面编程。