Skip to main content

Command Palette

Search for a command to run...

Exceptions

Published
6 min readView as Markdown

Dưới đây là 20 câu hỏi phỏng vấn Java tập trung vào các chủ đề về Exceptions bao gồm Exceptions, Checked vs Unchecked, Catch Block, và More on Exceptions.

Exceptions

  1. Câu hỏi: Exception là gì trong Java và tại sao chúng ta cần sử dụng nó?

    • Trả lời: Exception là một cơ chế để xử lý các lỗi xảy ra trong chương trình một cách có kiểm soát. Sử dụng exceptions giúp tách biệt mã xử lý lỗi khỏi logic kinh doanh chính và cải thiện khả năng bảo trì và đọc hiểu mã.
  2. Câu hỏi: Hãy giải thích sự khác biệt giữa Exception và Error trong Java.

    • Trả lời: Exception là các vấn đề có thể dự đoán và xử lý được trong chương trình, ví dụ như lỗi I/O hoặc lỗi logic. Error là các vấn đề nghiêm trọng thường không thể xử lý được, như lỗi hệ thống hoặc thiếu bộ nhớ.
  3. Câu hỏi: Hãy cho ví dụ về việc ném và bắt một Exception trong Java.

    • Trả lời:

        try {
            int result = 10 / 0;
        } catch (ArithmeticException e) {
            System.out.println("Caught an exception: " + e.getMessage());
        }
      

Checked vs Unchecked

  1. Câu hỏi: Sự khác biệt giữa checked và unchecked exceptions là gì?

    • Trả lời: Checked exceptions là các ngoại lệ được kiểm tra tại thời điểm biên dịch, yêu cầu phải xử lý bằng cách sử dụng try-catch hoặc khai báo throws. Unchecked exceptions là các ngoại lệ xảy ra tại runtime và không bắt buộc phải xử lý.
  2. Câu hỏi: Hãy cho ví dụ về một checked exception và một unchecked exception.

    • Trả lời:

        // Checked exception
        try {
            throw new IOException("Checked exception");
        } catch (IOException e) {
            e.printStackTrace();
        }
      
        // Unchecked exception
        throw new NullPointerException("Unchecked exception");
      
  3. Câu hỏi: Tại sao nên sử dụng checked exceptions?

    • Trả lời: Checked exceptions buộc lập trình viên phải xử lý các lỗi tiềm tàng mà không dễ dàng phát hiện ra, giúp chương trình trở nên an toàn và đáng tin cậy hơn.

Catch Block

  1. Câu hỏi: Có thể có nhiều catch block cho một try block không? Hãy giải thích.

    • Trả lời: Có, có thể có nhiều catch block cho một try block để xử lý các loại exceptions khác nhau. Mỗi catch block sẽ bắt và xử lý một loại exception cụ thể.
  2. Câu hỏi: Điều gì xảy ra nếu có nhiều catch block và một exception xảy ra?

    • Trả lời: JVM sẽ kiểm tra từng catch block theo thứ tự từ trên xuống dưới và thực thi catch block đầu tiên khớp với exception xảy ra.
  3. Câu hỏi: Hãy cho ví dụ về việc sử dụng nhiều catch block.

    • Trả lời:

        try {
            int result = 10 / 0;
        } catch (ArithmeticException e) {
            System.out.println("ArithmeticException caught: " + e.getMessage());
        } catch (Exception e) {
            System.out.println("Exception caught: " + e.getMessage());
        }
      
  4. Câu hỏi: Sự khác biệt giữa catch (Exception e)catch (Throwable t) là gì?

    • Trả lời: catch (Exception e) chỉ bắt các đối tượng thuộc lớp Exception và các lớp con của nó. catch (Throwable t) bắt tất cả các đối tượng thuộc lớp Throwable, bao gồm cả ErrorException.

More on Exceptions

  1. Câu hỏi: Cuối cùng của một try-catch block có thể có một khối finally không? Hãy giải thích chức năng của nó.

    • Trả lời: Có, một try-catch block có thể có một khối finally. Khối finally chứa mã được thực thi sau khi try-catch block hoàn thành, bất kể exception có xảy ra hay không. Nó thường được sử dụng để giải phóng tài nguyên như đóng tệp hoặc kết nối cơ sở dữ liệu.
  2. Câu hỏi: Điều gì xảy ra nếu exception xảy ra trong khối finally?

    • Trả lời: Nếu exception xảy ra trong khối finally, nó sẽ thay thế exception ban đầu nếu có. Exception trong finally có thể gây ra mất dấu exception gốc.
  3. Câu hỏi: Hãy cho ví dụ về khối finally.

    • Trả lời:

        try {
            int result = 10 / 0;
        } catch (ArithmeticException e) {
            System.out.println("Caught an exception: " + e.getMessage());
        } finally {
            System.out.println("Finally block executed");
        }
      
  4. Câu hỏi: Có thể có một try block mà không có catch block không? Nếu có, hãy cho ví dụ.

    • Trả lời: Có, một try block có thể không có catch block nhưng phải có finally block. Ví dụ:

        try {
            int result = 10 / 0;
        } finally {
            System.out.println("Finally block executed");
        }
      
  5. Câu hỏi: Custom exceptions là gì và tại sao lại cần chúng?

    • Trả lời: Custom exceptions là các ngoại lệ do người dùng tự định nghĩa để đại diện cho các điều kiện lỗi cụ thể của ứng dụng. Chúng giúp làm cho mã trở nên rõ ràng hơn và dễ hiểu hơn khi xử lý các lỗi đặc biệt.
  6. Câu hỏi: Hãy cho ví dụ về cách tạo và ném một custom exception.

    • Trả lời:

        public class MyCustomException extends Exception {
            public MyCustomException(String message) {
                super(message);
            }
        }
      
        public class TestCustomException {
            public static void main(String[] args) {
                try {
                    throw new MyCustomException("This is a custom exception");
                } catch (MyCustomException e) {
                    System.out.println(e.getMessage());
                }
            }
        }
      
  7. Câu hỏi: Khi nào nên sử dụng khối lệnh try-with-resources?

    • Trả lời: Try-with-resources nên được sử dụng khi làm việc với các tài nguyên phải được đóng sau khi sử dụng, chẳng hạn như các luồng I/O hoặc kết nối cơ sở dữ liệu. Nó đảm bảo rằng các tài nguyên được đóng tự động khi kết thúc khối lệnh.
  8. Câu hỏi: Hãy cho ví dụ về việc sử dụng khối lệnh try-with-resources.

    • Trả lời:

        try (BufferedReader br = new BufferedReader(new FileReader("test.txt"))) {
            String line;
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
      
  9. Câu hỏi: Điều gì xảy ra nếu cả try và catch đều ném ra một exception? Exception nào sẽ được xử lý?

    • Trả lời: Nếu cả try và catch đều ném ra exception, exception trong catch sẽ ghi đè lên exception trong try và được xử lý.
  10. Câu hỏi: Có thể bắt nhiều exception cùng một lúc trong một catch block không? Hãy cho ví dụ.

    • Trả lời: Có, từ Java 7, có thể bắt nhiều exception trong một catch block bằng cách sử dụng ký tự |. Ví dụ:

        try {
            int result = Integer.parseInt("abc");
        } catch (NumberFormatException | NullPointerException e) {
            System.out.println("Exception caught: " + e.getMessage());
        }
      

Những câu hỏi này sẽ giúp đánh giá kiến thức của ứng viên về các khía cạnh quan trọng của exceptions trong Java.

More from this blog

hoangkim

366 posts