📜  基于spring boot场景的面试题——Java(1)

📅  最后修改于: 2023-12-03 15:23:39.565000             🧑  作者: Mango

基于Spring Boot场景的面试题——Java

简介

Spring Boot是一种基于Spring框架的快速应用开发框架,它提供了一种快速、简单的方式来创建Spring应用,并且允许开发者专注于业务逻辑而不是框架配置。

在Spring Boot的开发中会涉及到很多Java的基础知识以及Spring框架相关的概念和理解。本文将介绍一些可能会在Spring Boot面试中被提及的Java基础和Spring框架相关的知识点及其程序示例。

Java基础题
1. Java中的多线程和线程安全

Java中多线程在开发中经常用到,而线程安全则为开发者所必须了解的概念。请简述Java中线程安全的概念并提供示例程序。

线程安全的概念:当多个线程访问同一个对象时,如果不用考虑这些线程在运行时环境下的调度方式或者交替执行,以及不需要使用任何额外的同步或协调机制,也能不出错的执行,则此对象就是线程安全的。

示例程序:

public class Counter {
    private int count;

    //线程安全,使用synchronized关键字
    public synchronized void increment() {
        count++;
    }

    public int getCount() {
        return count;
    }
}

public class CounterThread extends Thread {
    private Counter counter;

    public CounterThread(Counter counter) {
        this.counter = counter;
    }

    @Override
    public void run() {
        for (int i = 0; i < 1000; i++) {
            counter.increment();
        }
    }
}

public class Main {
    public static void main(String[] args) throws InterruptedException {
        Counter counter = new Counter();
        Thread t1 = new CounterThread(counter);
        Thread t2 = new CounterThread(counter);
        t1.start();
        t2.start();
        t1.join();
        t2.join();
        System.out.println(counter.getCount());
    }
}
2. Java中的反射机制

请简述Java中反射编程的作用,以及如何使用反射机制获取类的引用并创建对象。

反射编程的作用:在运行时获取一个类的构造器、方法、属性等结构信息,可以动态创建对象、动态调用方法或属性,开发者可以在运行时动态地完成自己的业务逻辑。

获取类的引用并创建对象的示例程序:

public class Main {
    public static void main(String[] args) throws Exception {
        // 获取类对象的三种方式
        Class aClass1 = Person.class;
        Class aClass2 = Class.forName("com.example.demo.Person");
        Person p = new Person();
        Class aClass3 = p.getClass();

        // 动态创建对象
        Person person1 = (Person) aClass1.newInstance();
        Person person2 = (Person) aClass2.newInstance();
        Person person3 = (Person) aClass3.newInstance();
    }
}
3. Java中的异常处理机制

请简述Java中异常处理机制的特点,并提供自定义异常的示例程序。

异常处理机制的特点:Java的异常处理机制是以try-catch语句块的形式来实现的,当程序发生异常时,异常被抛出并由catch块捕获处理,在处理时可以根据不同的异常类型做出不同的响应。这种异常处理机制避免了程序的中断和崩溃。

自定义异常的示例程序:

public class MyException extends RuntimeException {
    public MyException(String message) {
        super(message);
    }
}

public class Main {
    public static void main(String[] args) {
        try {
            throw new MyException("自定义异常信息");
        } catch (MyException e) {
            e.printStackTrace();
        }
    }
}
Spring Boot相关题
1. Spring Boot的模板引擎

请简述Spring Boot中常用的模板引擎,并提供一个使用Thymeleaf模板引擎的示例程序。

Spring Boot中常用的模板引擎:Thymeleaf、FreeMarker、Velocity、Groovy等。

使用Thymeleaf模板引擎的示例程序:

@Controller
public class UserController {
    @RequestMapping("/")
    public String index(Model model) {
        model.addAttribute("name", "Shaw");
        return "index";
    }
}

<!-- src/main/resources/templates/index.html -->
<!DOCTYPE html>
<html>
<head>
    <title>Thymeleaf</title>
</head>
<body>
    <h1>Hello, ${name}!</h1>
</body>
</html>
2. Spring Boot的注解

请简述Spring Boot中常用的注解,并使用@Controller和@RequestMapping注解构建一个简单的web程序。

Spring Boot中常用的注解:@Controller、@RestController、@Service、@Repository、@Component、@Autowired、@Resource、@Value、@RequestMapping、@PathVariable、@RequestParam等。

使用@Controller和@RequestMapping注解构建一个简单的web程序:

@Controller
public class UserController {
    @RequestMapping("/")
    @ResponseBody
    public String index() {
        return "Hello, Spring Boot!";
    }
}
3. Spring Boot的JPA

请简述Spring Boot中的JPA及其概念,并提供一个使用Spring Data JPA的示例程序。

Spring Boot中的JPA:Java Persistence API,是JavaEE中用于对象关系映射(ORM)的一套API,可简化数据库操作。

使用Spring Data JPA的示例程序:

@Entity
@Table(name = "user")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private Integer age;

    // 省略getter和setter
}

public interface UserRepository extends JpaRepository<User, Long> {
}

@RestController
public class UserController {
    private final UserRepository userRepository;

    public UserController(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    @PostMapping("/users")
    public User addUser(@RequestBody User user) {
        return userRepository.save(user);
    }

    @GetMapping("/users")
    public List<User> findAllUsers() {
        return userRepository.findAll();
    }
}
总结

本文介绍的Java基础和Spring Boot相关的知识点较为基础,是开发中必须掌握的知识,希望对读者在Spring Boot面试前的复习有所帮助。