企业常见笔试面试题
抽象类和接口的异同
相似点:
- 都是用于实现多态性:抽象类和接口都可以用于定义方法的规范,从而实现多态性,让不同的类根据需要提供自己的实现
- 都不能被实例化
- 都可以包含方法的声明(抽象的方法)
不同的:
- 方法的实现不同
- 抽象类可以包含抽象方法和具体方法
- 接口只能包含抽象方法(在java8之后也可以包含默认方法和静态方法)
- 继承与实现
- 类可以继承一个抽象类,但只能继承一个类
- 类可以实现多个接口,从而实现多重继承
- 字段
- 抽象类可以包含字段(成员变量),可以是普通字段或静态字段
- 接口中可以包含常量
- 构造方法
- 抽象类可以有构造方法,可以被子类调用
- 接口不能有构造方法
- 用途:
- 抽象类通常用于表示一种通用的概念,可以包含一些通用的属性和方法,子类可以继承并拓展
- 接口用于定义一组相关的方法规范,让不同的类实现相同的方法规范,以实现一种约定的行为
数据库连接池
数据库连接池是一种数据库连接资源管理工具,常见的Java应用程序中,通常会频繁地打开和关闭数据库连接,由于建立连接,需要耗费较多的时间和资源,所以,频繁地打开和关闭连接可能会降低系统性能
数据库连接池能够在初始化时创建一定数量的连接,当应用程序需要连接访问数据库时候,可以从连接池中获取已经创建的连接,使用后再将连接归还给连接池,这样可以提高资源利用率,降低系统开销
常见数据库连接池
- C3P0
- HikariCP
- Apache DBCP
静态多态和动态多态
- 静态多态是在编译时实现的多态性,主要体现在方法重载,当在同一个类中定义了多个相同名称但参数列表不同的方法时,就发生了方法重载,编译器在编译时根据方法名称和参数类型来决定调用哪个版本的方法
- 动态多态是在运行时实现的多态性,主要体现在方法重写上,当子类继承父类并重写父类的方法时,Java虚拟机会在运行时决定调用哪个版本的方法,即使子类对象是通过父类引用访问的,也会调用子类的方法,而不是父类的方法
Error和Exception有什么区别
在java中,Error和Exception都是Throwable类的子类,代表了程序中可能出现的不同类型的问题
- Error表示严重的系统级错误,不应由程序处理
- Exception表示可能由程序处理的错误或异常情况
- Error通常意味着不可恢复的情况,而Exception则可能是可恢复的,取决于异常的类型和情况
- 在编写程序的时候,应关注Exception的处理,不必担心Error