Java面试题大全

本文整理了Java面试中常见的基础、集合、锁机制、JVM、设计模式、网络/IO等方面的问题,涵盖从Java基础到分布式、微服务等多个层面,帮助读者全方位准备Java面试。
摘要由CSDN通过智能技术生成

一、基础篇 未完待续ing。。。

1.1、Java基础 

  • 面向对象的特征:继承、封装和多态
    封装:
    继承:
    多态:

  • final, finally, finalize 的区别
    final:表示常量,修饰属性、方法、类。表示属性不可变、方法不可重写、类不可被继承。
    finally:在异常处理语句中,表示总是被执行的。
    finalize:Object类的一个方法,在垃圾回收器执行的时候被调用,但是JVM不保证此方法一定被调用。

  • Exception、Error、运行时异常与一般异常有何异同
    Error和Exception都继承自Throwable类。
    Error:表示系统级别的错误和程序不必处理的异常,是java运行环境中内部错误或者硬件问题。比如:内存资源不足等。这种错误,程序基本无能为力。是由Java虚拟机抛出的。
    Exception:分为运行时异常和受检查异常。
    运行时异常:表示无法让程序恢复的异常,导致的原因通常是执行了错误的操作,建议终止程序,因此,编译器不检查这些异常。
    受检查异常:表示程序可以处理的异常,也表示程序可以修复(由程序自己接收异常并且处理),所以称为受检查异常。

  • 请写出5种常见到的runtime exception
    NullPointerException 空指针异常
    ClassCastException 类型强制转换异常
    IllegalArgumentException 传递非法参数异常
    IndexOutOfBoundsException 下标越界异常
    SecurityException 存在安全问题

  • int 和 Integer 有什么区别,Integer的值缓存范围
    Integer是包装类,int是基本数据类型;Integer默认值未null,int默认值为0;Integer实际是对象的引用,指向new的Integer对象,int直接存储数据值;Integer变量必须实例化后使用,int变量不需要。
    Integer对象的缓存值范围是-128到127之间,两个通过new生成的Integer对象永远是不相等的,因为实际上比较的是两个对象的引用,其内存地址不同;Integer变量与int变量比较时,只要值相等结果就为true,Integer会自动拆箱为int值进行比较;非new生成的Integer对象和new生成的Integer对象比较时结果为false,非new生成的Integer对象指向常量池中的对象,new指向堆中新建的对象,两者内存地址不同;两个非new生成的Integer对象,进行比较,变量值在-128到127之间结果为true,不在这之间为false。

  • 包装类,装箱和拆箱
    基本数据类型:byte,int,short,long,double,float,char,boolean
    包装类型:       Byte,Integer,Short,Long,Double,Float,Character,Boolean
    装箱指基本数据类型转换为包装类型,反之则为拆箱。

  • String、StringBuilder、StringBuffer
    String:字符串常量,一旦改改变就会创建新的对象。一般要经常改变的情况,最好不要使用它,会对系统性能产生影响。
    StringBuffer:是线程安全的字符串变量。经常改变的情况下用它速度比String快。
    StringBuilder:是非线程安全的字符串变量。比StringBuffer速度更快。

  • 重载和重写的区别
    重载:方法名相同;参数列表类型不同、个数不同、顺序不同都可以构成重载;不以返回值类型做为区分标准,是一个类中多态性的一种表现。
    重写:子类重写父类的方法,参数列表、返回值类型必须与被重写的方法一致;访问修饰符限制一定要大于被重写的方法;抛出的异常只能是父类方法异常或是其子类异常,可以抛出非检查异常。

  • 抽象类和接口有什么区别
    1、抽象类和接口都不能够实例化。
    2、一个类如果继承了某个抽象类或实现了某个接口,都需要对其中的抽象方法全部进行实现,否则该类仍然需要被声明为抽象类。
    3、抽象类中可以定义构造器,可以有抽象方法和具体方法。而接口中不能定义构造器,且其中的方法全部都是抽象方法。
    4、抽象类中的成员可以是private、默认、protected、public的。而接口中的成员全部都是public的。
    5、抽象类中可以定义成员变量,而接口中定义的成员变量实际都是常量。
    6、有抽象方法的类必须被声明为抽象类,而抽象类未必要有抽象方法。

  • 说说反射的用途及实现

  • 说说自定义注解的场景及实现

  • HTTP请求的GET与POST方式的区别
    get传参会在地址栏显示,不安全,传输的长度有限。
    post不会在地址栏显示(在请求实体内部),安全性比较好,传输的长度理论无限。

  • Session与Cookie区别

  • 列出自己常用的JDK包
    java.lang:包含一些Java语言的核心类,如String、Math、Integer、System和Thread,提供常用功能。
    java.io:包含能提供多种输入/输出功能的类。
    java.util:包含一些实用工具类,如定义系统特性、使用与日期日历相关的函数。
    java.net:包含执行与网络相关的操作的类。
    java.awt:包含用于创建用户界面和绘制图形图像的所有类。

  • MVC设计思想

  • equals与==的区别
    == 经常用于基本类型的比较,比较对象时则是比较的对象的引用地址。
    equals方法Object类中也是通过==实现的,但在很多不同的类中会被重写,用于判断对象之间值的相等性。比如:String类重写equals方法,实际上是比较每个字符是否相等,而不是单纯的比较地址。

  • hashCode和equals方法的区别与联系
    hashCode和equals都是Object类中的方法。hashCode()返回的是一个int类型,equals()是用来比较两个对象是否相同的。由于equals()在比较对象时比较的比较全面复杂,所以如果数据量大的情况下就会影响效率。而用hashCode()来比较的话只是生成一个int类型的hash码来比较,这样就会节省消耗。
    一般在做对象的比较时,会重写类的equals()与hashCode(),比较时,先对比两个对象的hash码是否相同,如果不相同,则两个对象就不同,不用继续比较了。如果hash码相同(两个不同的对象hash码有可能会相同),则继续用equals()比较,如果返回false则不同,如果返回true则相同。

  • 什么是Java序列化和反序列化,如何实现Java序列化?或者请解释Serializable 接口的作用

  • Object类中常见的方法,为什么wait  notify会放在Object里边?

  • Java的平台无关性如何体现出来的

  • JDK和JRE的区别
    JDK:Java Development Kit 。java开发工具包,支持java 的程序开发,包括编译器(javac.exe)、开发工具(javadoc.exe\jar.exe\keytool.exe\jconsole.exe)和更多类库(如tools.jar)等。
    JRE:Java Runtime Enviroment 。java运行时环境,可以支持java程序的运行,包括JVM虚拟机(java.exe)和基本类库(rt.jar)等。

  • Java 8有哪些新特性

1.2、Java常见集合

  • List 和 Set 和 Map 的区别
    List和Set都实现了单值存储的容器Collection接口,而Map是一个存储键值对的接口;
    List允许重复的对象,可以插入多个null元素,是一个有序容器,输出的顺序就是插入顺序;
    Set不允许重复对象,无序容器,无法保证每个元素的顺序。只允许一个null元素;
    Map存储的内容是键值对,可能会有相同的值,但键对象必须是唯一的。

  • Set和hashCode以及equals方法的联系

  • Arraylist 与 LinkedList 区别
    LinkedList和ArrayList都实现了List接口,并实现了其中的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值