java面试2020及答案

记录下这几个月来java的面试题,都是去各个公司的笔试或面试总结。(第一弹)

  1. == 与 equals的区别
    ==:
    对于基本数据类型和引用类型 == 的作用是不同的,对于基本数据类型 == 比较的是值是否相等,对于引用类型比较的是引用是否相等。
    equals:
    equals在默认情况下是引用比较,只是很多类重写了equals方法,比如String、Integer等重写了equals方法,变成值比较。

  2. java中对象参数是传引用还是传值
    通常的说法是:对于基本数据类型(整型、浮点型等)是传值;对于引用类型(对象、数组)传引用。
    传值即把一个不可变的数据类型传给函数,调用函数结束后原来的值不会改变。
    传引用,对象类型的数据类型作为参数传递给函数,调用函数结束后,原来的值会发生改变。

  3. 在一个静态方法内调用一个非静态成员为什么是非法的
    因为非静态变量对每个对象而言都是不同的,而静态方法又可以直接类名调用,不进行实例化,所以不创建对象时非静态变量是空的,即便是调用方法之前有了实例化对象,直接通过类名调用方法依然不知道你要返回哪个对像的属性,因为非静态变量每个对象都是私有的,与众不同。

  4. Error和Exception有何区别
    Exception 和 Error都继承自Throwable类。Exception 是程序正常运行中,可预料的意外情况,可能并且应该被捕获,进行相应处理。Error 是指在正常情况下,不大可能出现的情况,绝大部分的 Error 都会导致程序处于非正常的、不可恢复状态。既然是非正常情况,所以不便于也不需要捕获。

  5. java的几种访问控制修饰符及作用域
    public修饰的成员没有限制,任何包中的任何类都能访问。
    private只能被同一个类中的方法访问。
    default 只能被同一个包中的类访问,包括同一个包中的子类。
    protected只能被同一个包中的类访问,或者不同包中的子类访问。

  6. final关键字可以用在哪些地方,有什么作用
    final关键字可以用于三个地方。用于修饰类、类属性和类方法。
    被final关键字修饰的类不能被继承。
    被final关键字修饰的类方法可以被继承,但继承后不能被重写。
    被final关键字修饰的类中的属性或者变量,无论属性是基本类型还是引用类型,final所起的作用都是变量里面存放的“值”不能变。

  7. 如何对List里面的对象进行排序
    一种是针对简单的包装类型进行排序,即list中存放的String或者Integer类型
    一种是针对自定义的对象类型进行排序,对象需要像包装类型一样去实现Comparable接口,然后重写CompareTo方法
    一种是使用泛型对任何属性进行排序

  8. Servlet的生命周期
    Servlet 加载—>实例化—>服务—>销毁。
    init():仅执行一次init()。负责初始化Servlet对象。
    service():负责响应客户的请求。每当一个客户请求一个HttpServlet对象,该对象的Service()方法就要调用。
    destroy():仅执行一次,在服务器端停止且卸载Servlet时执行该方法,负责释放占用的资源。

    流程:Web Client 向Servlet容器(Tomcat)发出Http请求,Servlet容器接收请求,创建一个HttpRequest对象,将Web Client请求信息封装到这个对象中并创建一个HttpResponse对象,调用HttpServlet对象的service方法,把HttpRequest对象与HttpResponse对象作为参数传给HttpServlet 对象。HttpServlet调用HttpRequest对象的有关方法,获取请求信息。HttpServlet调用HttpResponse对象的有关方法,响应数据。Servlet容器把HttpServlet的响应结果传给Web Client。

  9. ThreadLocal是什么?
    ThreadLocal提供线程局部变量。访问到某个变量的每一个线程都拥有自己的局部变量 。ThreadLocal类型的变量一般用private static加以修饰。

  10. 接口和抽象类有什么区别?
    接口可以多继承,抽象类只能单继承。
    接口只能做方法声明,抽象类既可以做方法声明也可以方法实现。
    接口速度慢,抽象类速度快。
    接口中添加方法,必须改变实现该接口的类。抽象类中添加新的方法,可以给它提供默认的实现。不需要改变你现在的代码。
    接口只能够有静态的不能被修改的数据成员,而且必须赋初值。抽象类可以有自己的数据成员变量,也可以有非抽象的成员方法,这些成员变量可以在子类中被重新定义,也可以被重新赋值。
    接口和抽象类都不能被实例化。
    接口的实现类或抽象类的子类都只有实现了接口或抽象类中的方法后才能被实例化。

  11. session是什么,session的实现过程是怎么样的?同一机器的两个不同浏览器是否共享同一个session?为什么?
    Seesion就是服务器端开辟的一块内存空间,存放着客户端浏览器窗口的编号,和cookie一样也是用来记录用户的状态,比cookies简单。当浏览器访问某个页面时,会在服务器端开辟一块内存,这个内存是和浏览器的窗口或者浏览器的子窗口关联在一起的,这块内存就是session。这个session只能由这个浏览器访问。同一台机器的其他浏览器不能访问此session。那么如果另外的浏览器访问时也想记录一个状态怎么办呢?那就需要在服务器端再建立一个session。并和刚刚那个session进行关联。

  12. 事务是什么,如何在Spring中实现事务,什么是事务传播属性?
    Spring的事务,也就是数据库的事务操作,符合ACID标准,也具有标准的事务隔离级别。
    事务的第一个方面是传播行为。当事务方法被另一个事务方法调用时,必须指定事务应该如何传播。方法可能继续在现有事务中运行,也可能开启一个新事务,并在自己的事务中运行。

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值