1、sleep() 和 wait() 有什么区别?
sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。
2、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。
3、常见的异常类有哪些?
NullPointerException:空指针异常;
SQLException:数据库相关的异常;
IndexOutOfBoundsException:数组下角标越界异常;
FileNotFoundException:打开文件失败时抛出;
IOException:当发生某种IO异常时抛出;
ClassCastException:当试图将对象强制转换为不是实例的子类时,抛出此异常;
NoSuchMethodException:无法找到某一方法时,抛出;
ArrayStoreException:试图将错误类型的对象存储到一个对象数组时抛出的异常;
NumberFormatException:当试图将字符串转换成数字时,失败了,抛出;
IllegalArgumentException 抛出的异常表明向方法传递了一个不合法或不正确的参数。
ArithmeticException当出现异常的运算条件时,抛出此异常。例如,一个整数“除以零”时,抛出此类的一个实例。
4、GC是什么? 为什么要有GC?
GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。
5、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?
接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。
6、常用的设计模式?
Java中的23种设计模式:Factory(工厂模式),Builder(建造模式), Factory Method(工厂方法模式),Prototype(原始模型模式),Singleton(单例模式), Facade(门面模式),Adapter(适配器模式), Bridge(桥梁模式), Composite(合成模式),Decorator(装饰模式), Flyweight(享元模式), Proxy(代理模式),Command(命令模式), Interpreter(解释器模式), Visitor(访问者模式),Iterator(迭代子模式), Mediator(调停者模式), Memento(备忘录模式),Observer(观察者模式),State(状态模式),Strategy(策略模式),Template Method(模板方法模式), Chain Of Responsibleity(责任链模式)。
7、常用的数据结构?
数组,链表,二叉树,红黑树,b树,b+树
8、排序都有哪几种方法?请列举。
排序的方法有:插入排序(直接插入排序、希尔排序),交换排序(冒泡排序、快速排序),选择排序(直接选择排序、堆排序),归并排序,分配排序(箱排序、基数排序)
9、Java 创建对象有几种方式
使用new关键字,这是最常见的创建对象的方式。通过调用类的构造方法(构造器)来创建对象。
使用反射,通过Java的反射API可以动态地创建对象。反射允许在运行时获取类的信息,并可以调用类的构造器来创建对象。
使用克隆,如果一个类实现了Cloneable接口并重写了Object类的clone()方法,那么可以通过调用对象的clone()方法来创建该对象的一个副本。
使用序列化与反序列化,如果一个类实现了Serializable接口,那么可以通过序列化(将对象转换为字节流)和反序列化(将字节流转换回对象)来创建对象。这种方式常用于对象的持久化存储和传输。
使用依赖注入,在依赖注入框架(如Spring)中,对象的创建和管理通常由框架负责。通过配置或注解,框架会自动创建所需的对象,并将其注入到需要的地方。
使用工厂模式,工厂模式是一种创建对象的设计模式,它隐藏了对象创建的具体逻辑,并通过一个统一的接口来创建对象。工厂模式可以分为简单工厂、工厂方法和抽象工厂等。
使用构建器模式,构建器模式(Builder Pattern)是一种对象构建的设计模式,它允许你以更加灵活的方式创建复杂对象。构建器模式通常用于构造具有多个可选参数的类
10、说说Java中多态的实现原理
多态机制包括静态多态(编译时多态)和动态多态(运行时多态)。
静态多态比如说重载,动态多态一般指在运行时才能确定调用哪个方法。
我们通常所说的多态一般指运行时多态,也就编译时不确定究竟调用哪个具体方法,一直等到运行时才能确定。
多态实现方式:继承extends和实现implements。
多态的核心在于子类对父类方法的改写或对接口方法的实现,以取得在运行时不同的执行效果。
当调用对象的某个方法时,JVM查找该对象类的方法表,以确定该方法的直接引用地址,有了地址后才真正调用该方法。