21xrx.com
2024-12-22 23:12:53 Sunday
登录
文章检索 我的文章 写文章
Java开发必备经典面试题及详解
2023-06-12 05:12:52 深夜i     --     --
Java面试题 常见问题 代码案例

作为Java开发人员,面试时经常会遇到一些常见的问题,这些问题不仅考察了应聘者的基础知识,同时也是考察其实际操作能力和解决问题的能力。下面列举了一些常见的Java面试题,同时提供了详细的解答和代码案例。

一、Java基础知识

1. Java中final关键字的作用是什么?

final关键字可以修饰类、方法和变量,具体作用如下:

- final修饰类,则该类不能被继承;

- final修饰方法,则该方法不能被重写;

- final修饰变量,则该变量被赋值后不可改变。

代码案例:

public final class FinalClass // final修饰类

  // some code here ...

public class FinalMethod {

  public final void printInfo() // final修饰方法

    // some code here ...

}

public class FinalVariable

  public final String MY_NAME = "Tom"; // final修饰变量

  // some code here ...

2. Java中的四种访问权限修饰符分别是什么?

Java中的四种访问权限修饰符分别是public、protected、default、private,具体作用如下:

- public修饰符:可以被当前类、当前包和其他所有类访问。

- protected修饰符:可以被当前类、当前包和子类访问。

- default修饰符:即不加任何修饰符,这种方式也被称为“包访问权限”,可以被当前类及其同一包中的类访问。

- private修饰符:只能被当前类访问。

代码案例:

public class AccessModifierExample

  public String pubString; // public修饰符

  protected String proString; // protected修饰符

  String defaultString; // default修饰符

  private String priString; // private修饰符

  // some code here ...

二、Java高级特性

1. Java中的反射机制是什么?有什么作用?

Java中的反射机制是指程序在运行时可以动态获取类的信息并且调用类的方法和属性。它的作用不仅可以在运行时动态地生成对象,还可以使用类的信息动态地获取或调用属性和方法,极大地提升了Java程序的灵活性和扩展性。

代码案例:

public class ReflectionExample {

  public static void main(String[] args) throws Exception {

    Class clazz = Class.forName("java.lang.String");

    Method[] methods = clazz.getDeclaredMethods();

    for (Method method : methods) {

      System.out.println(method.getName());

    }

  }

}

2. Java中的多线程是如何实现的?可以通过哪些方式实现多线程?

Java中的多线程实现可以通过Thread类和Runnable接口来实现。一般来说,应该优先使用Runnable接口实现多线程,因为Java只支持单继承,如果使用Thread类来实现线程,就会影响继承其他类的可行性。

代码案例:

public class ThreadExample implements Runnable {

  public void run()

    // some code here ...

  public static void main(String[] args) {

    Thread thread = new Thread(new ThreadExample());

    thread.start();

  }

}

三、Java常用框架及技术

1. Java中常用的数据库连接池有哪些?

Java中常用的数据库连接池有C3P0、Druid、HikariCP等。这些连接池都具有线程池、连接生命周期管理、连接池性能统计等特性,可以有效地提升数据库查询效率和性能。

代码案例:

// 使用Druid连接池连接MySQL数据库

public class DruidExample {

  public static void main(String[] args) throws Exception {

    DruidDataSource dataSource = new DruidDataSource();

    dataSource.setDriverClassName("com.mysql.jdbc.Driver");

    dataSource.setUrl("jdbc:mysql://localhost:3306/my_database");

    dataSource.setUsername("root");

    dataSource.setPassword("");

    Connection connection = dataSource.getConnection();

    Statement statement = connection.createStatement();

    ResultSet resultSet = statement.executeQuery("SELECT * FROM my_table");

    while (resultSet.next()) {

      System.out.println(resultSet.getString(1));

      System.out.println(resultSet.getString(2));

    }

    resultSet.close();

    statement.close();

    connection.close();

  }

}

2. Java中常用的ORM框架有哪些?它们有什么优缺点?

Java中常用的ORM框架有Hibernate、MyBatis、Spring Data JPA等。其中,Hibernate是最早的ORM框架之一,它提供了完整的ORM解决方案,并且具有较高的自动化特性,但是性能相对较低;MyBatis是与JDBC密切结合的ORM框架,具有可读性和灵活性较高的SQL查询语言,但是开发过程中需要手动书写SQL语句;Spring Data JPA基于JPA规范,具有大量自动化特性和高级查询功能,但是对于复杂查询和性能较高的应用可能会受到限制。

代码案例:

// 使用Hibernate框架操作MySQL数据库

public class HibernateExample {

  public static void main(String[] args) {

    Configuration configuration = new Configuration().configure();

    SessionFactory sessionFactory = configuration.buildSessionFactory();

    Session session = sessionFactory.openSession();

    Transaction transaction = session.beginTransaction();

    List users = session.createQuery("FROM User").list();

    for (User user : users) {

      System.out.println(user);

    }

    transaction.commit();

    session.close();

  }

  @Entity(name = "users")

  public static class User {

    @Id

    @GeneratedValue(strategy = GenerationType.IDENTITY)

    private Integer id;

    private String name;

    private Integer age;

    // 其他属性和getter、setter方法

  }

}

三个

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复