├── README.md └── interview ├── java-jvm.md ├── java-lang.md ├── jdbc.md └── spring.md /README.md: -------------------------------------------------------------------------------- 1 | ## Java 面试题合集 2 | 3 | 欢迎提交 Issue 补充~ 4 | 5 | - [Java 语言](interview/java-lang.md) 6 | - [JVM](interview/java-jvm.md) 7 | - [Spring](interview/spring.md) 8 | - [JDBC](interview/jdbc.md) -------------------------------------------------------------------------------- /interview/java-jvm.md: -------------------------------------------------------------------------------- 1 | ### 1. Java类加载器包括几种?它们之间的关系是怎么样的? 2 | Java 类加载器有: 3 | 4 | - 引导类加载器(bootstrap class loader):只加载 JVM 自身需要的类,包名为 java、javax、sun 等开头。 5 | - 扩展类加载器(extensions class loader):加载 JAVA_HOME/lib/ext 目录下或者由系统变量 -Djava.ext.dir 指定位路径中的类库。 6 | - 应用程序类加载器(application class loader):加载系统类路径 java -classpath 或 -Djava.class.path 下的类库。 7 | - 自定义类加载器(java.lang.classloder):继承 java.lang.ClassLoader 的自定义类加载器。 8 | 9 | **注意:** `-Djava.ext.dirs` 会覆盖 Java 本身的 ext 设置,造成 JDK 内建功能无法使用。可以像下面这样指定参数: 10 | 11 | ```shell 12 | -Djava.ext.dirs=./plugin:$JAVA_HOME/jre/lib/ext。 13 | ``` 14 | 15 | 它们的关系如下: 16 | 17 | - 启动类加载器,C++实现,没有父类。 18 | - 扩展类加载器(ExtClassLoader),Java 实现,父类加载器为 null。 19 | - 应用程序类加载器(AppClassLoader),Java 实现,父类加载器为 ExtClassLoader 。 20 | - 自定义类加载器,父类加载器为AppClassLoader。 21 | 22 | -------------------------------------------------------------------------------- /interview/java-lang.md: -------------------------------------------------------------------------------- 1 | 2 | ### 1. 为什么说Java是一门平台无关语言? 3 | 平台无关实际的含义是“一次编写到处运行”。Java 能够做到是因为它的字节码(byte code)可以运行在任何操作系统上,与底层系统无关。 4 | 5 | ### 2. 为什么 Java 不是100%面向对象? 6 | Java 不是100%面向对象,因为它包含8个原始数据类型,例如 boolean、byte、char、int、float、double、long、short。它们不是对象。 7 | 8 | ### 3. 什么是 singleton class,如何创建一个 singleton class? 9 | Singleton class 在任何时间同一个 JVM 中只有一个实例。可以把构造函数加 private 修饰符创建 singleton。 10 | 11 | ### 4. 什么是多态?什么是运行时多态,也称动态方法分配? 12 | 多态简单地说“一个接口,多种实现”。多态的出现使得在不同的场合同一个接口能够提供不同功能,具体地说可以让变量、函数或者对象能够提供多种功能。下面是多态的两种类型: 13 | 14 | - 编译时多态。 15 | - 运行时多态。 16 | - 编译时多态主要是对方法进行重载(overload),而运行时多态主要通过使用继承或者实现接口。 17 | 18 | 在 Java 中,运行时多态或动态方法分配是一种在运行过程中的方法重载。在这个过程中,通过调用父类的变量引用被重载的方法。下面是一个例子: 19 | 20 | ```java 21 | class Car { 22 | void run() 23 | { 24 | System.out.println(“car is running”); 25 | } 26 | } 27 | 28 | class Audi extends Car { 29 | void run() 30 | { 31 | System.out.prinltn(“Audi is running safely with 100km”); 32 | } 33 | public static void main(String args[]) 34 | { 35 | Car b= new Audi(); //向上转型 36 | b.run(); 37 | } 38 | } 39 | ``` -------------------------------------------------------------------------------- /interview/jdbc.md: -------------------------------------------------------------------------------- 1 | ### 1. 什么是JDBC驱动? 2 | JDBC Driver 是一种实现 Java 应用与数据库交互的软件。JDBC 驱动有下面4种: 3 | 4 | - JDBC-ODBC bridge 驱动 5 | - Native-API 驱动(部分是 Java 驱动) 6 | - 网络协议驱动(全部是 Java 驱动) 7 | - Thin driver(全部是 Java 驱动) 8 | 9 | ### 2. 使用 Java 连接数据库有哪几步? 10 | - 注册驱动类 11 | - 新建数据库连接 12 | - 新建语句(statement) 13 | - 查询 14 | - 关闭连接 15 | 16 | -------------------------------------------------------------------------------- /interview/spring.md: -------------------------------------------------------------------------------- 1 | ### 1. 列举Spring配置中常用的重要注解。 2 | 下面是一些重要的注解: 3 | 4 | - @Required 5 | - @Autowired 6 | - @Qualifier 7 | - @Resource 8 | - @PostConstruct 9 | - @PreDestroy 10 | 11 | ### 2. Spring中的Bean是什么?列举Spring Bean的不同作用域。 12 | Bean 是 Spring 应用的骨架。它们由 Spring IoC 容器管理。换句话说,Bean 是一个由 Spring IoC 容器初始化、装配和管理的对象。 13 | 下面是 Spring Bean 的5种作用域: 14 | 15 | - Singleton:每个容器只创建一个实例,也是 Spring Bean 的默认配置。由于非线程安全,因此确保使用时不要在 Bean 中共享实例变量,一面出现数据不一致。 16 | - Prototype:每次请求时创建一个新实例。 17 | - Request:与 prototype 相同,区别在于只针对 Web 应用。每次 HTTP 请求时创建一个新实例。 18 | - Session:每次收到 HTTP 会话请求时由容器创建一个新实例。 19 | - 全局 Session:为每个门户应用(Portlet App)创建一个全局 Session Bean。 20 | --------------------------------------------------------------------------------