第一次java面试汇总

总结一下第一次甚不成功的面试(⊙︿⊙)

equals方法与”==”

  1. “==”用于基本数据类型时比较存储的值是否相等,用于引用类型的变量时比较所指向的地址是否相等
  2. equals方法只可用于引用类型变量,未重写情况下比较引用类型变量指向的地址(是否是一个对象),重写情况下可以比较所指向的对象的内容

String加号运算之后,原对象如何变化?

String加法的实现:

  1. 初始化StringBuilder
  2. StringBuilder.append()
  3. StringBuilder.toString()

static方法能否调用非static方法?

不能直接调用非static方法,但是可以将对象的引用传入static方法中再调用该对象的non-static方法。

原因

static成员在类加载的时候初始化(被JVM的class loader加载),非static成员在类加载之后,创建对象的时候初始化,所以不能直接访问。

gc相关问题

throw与throws区别

异常抛出的三种形式:

  1. 系统自动抛异常
    程序语句出现错误时系统主动抛出异常,比如
    1
    2
    3
    4
    public static void main(String[] args){
    int a=5,b=0;
    System.out.println(5/b);
    }
  2. throw 异常对象
    用于程序出现某种逻辑时程序员主动抛出某种特定类型的异常,如:
    1
    2
    3
    4
    5
    6
    7
    8
    public static void main(String[] args){
    String s='abc';
    if("abc".equals(s)) {
    throw new NumberFormatException();
    }else{
    System.out.println(s);
    }
    }
  3. throws
    方法可能抛出异常的声明(用于声明方法时,表示该方法可能要抛出异常)
    1
    2
    3
    4
    5
    6
    7
    8
    public static void main(String[] args){
    String s="abc";
    try{
    System.out.println(Double.parseDouble(s));
    }catch(NumberFormatException e){
    System.err.println("非数据类型");
    }
    }

好的编程习惯

  1. 可能出现的异常部分用try{…} catch{…}捕捉并进行处理
  2. 捕获异常后一定在catch块中进行处理
  3. 捕获到IO输入输出流中的异常,要用finally{…}关闭输入输出流
  4. 如果函数体中用throw抛出异常,最好在函数声明中加throws声明,然后交给上层处理。

dopost()方法与doget()方法

当发出客户端请求的时候,调用service方法并传递一个请求和响应对象。Servlet首先判断该请求时GET操作还是POST操作,然后调用下面的一个方法:

  1. doGet方法处理GET请求。GET请求只有一个流,参数附加在url后,大小个数有严格限制且只能是字符串。
  2. 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,面向切面编程。

设计模式