post-image

Câu hỏi phỏng vấn lập trình viên Java (phần 2)

1. Tổng quan

Nhà tuyển dụng: Bạn hãy liệt kê 5 tính chất (bất kỳ) của Java?
Ứng viên:
Một số tính chất tiêu biểu của Java là:
+ Hướng đối tượng (Object-oriented)
+ Độc lập nền tảng (Không phụ thuộc vào hệ điều hành mà ứng dụng chạy, chạy được trên cả Windows, Linux, Unix)
+ Hỗ trợ lập trình đa luồng (multi-thread)
+ Chạy thông dịch (sau khi biên dịch, Java byte-code chạy thông dịch trên JVM)
+ Độ tin cậy cao (robust). Thể hiện ở khả năng tự động quản lý và thu hồi bộ nhớ (garbage collection), xử lý ngoại lệ, kiểm tra lỗi trong tiến trình thực thi nghiêm ngặt, kiểu dữ liệu strong type (Java không thể chuyển đổi kiểu dữ liệu ngầm định, PHP không phải là ngôn ngữ có kiểu dữ liệu strong type).</dd>

Nhà tuyển dụng:  Tại sao Java có thể xây dựng ứng dụng hiệu suất cao (high performance)?
Ứng viên: Java sử dụng trình biên dịch Just-In-Time (JIT) cho phép thúc đẩy hiệu năng (hiệu suất của ứng dụng). Just-In-Time chuyển mã nguồn Java mà lập trình viên soạn ra thành byte-code, đó là các chỉ thị/lệnh mà chúng có thể đến bộ vi xử lý, hạn chế các bước trung gian.

Nhà tuyển dụng: Tại sao Java có kiến trúc trung lập (architecture neutral)?
Ứng viên: Sau khi biên dịch mã nguồn Java từ các tập tin *.java, byte-code có thể thực thi trên JVM, JVM có thể chạy trên hầu hết các kiến trúc vi xử lý, hầu hết các hệ điều hành.

Nhà tuyển dụng: Kể tên 2 IDE Java mà bạn biết?
Ứng viên: Eclipse, Netbeans

Nhà tuyển dụng: Liệt kê 3 từ khóa bất kỳ dùng trong Java mà không có trong C/C++?
Ứng viên: import, super, finally.

Nhà tuyển dụng: Thế nào là một Java applet?
Ứng viên: Java applet là ứng dụng Java chạy trong trình duyệt web. Một ứng dụng Java applet vận hành tương tự như một chương trình Java thông thường, bởi vì nó có thể gọi rất nhiều các class, phương thức mà thư viện hỗ trợ. Tuy nhiên hiện nay công nghệ này hầu như không được sử dụng, được thay thể bởi Adobe flash, sau nữa là HTML5, Javascript.

Nhà tuyển dụng: Cấu trúc của một class Java?
Ứng viên: Class mô tả chi tiết các đặc điểm, hành vi của đối tượng. Một class chứa các fields (trường, thể hiện tính chất/đặc điểm của đối tượng) và các phương thức (method) mô tả hành vi của đối tượng.

Nhà tuyển dụng: Để biểu diễn nhiệt độ ngoài trời, chúng tôi dùng biến có tên outdoorTemperature. Do sơ suất, lập trình viên quên chưa gán giá trị nhiệt độ ngoài trời. Chương trình dưới đây có biên dịch được không? Nếu biên dịch được thì khi chạy sẽ trả về kết quả gì?

<span style="color: #333333;"><code class="java">package com.smartJob.demo;

public class DefaultValue {

    public float outdoorTemperature;

    public static void main(String[] args) {

        System.out.println(String.valueOf((new DefaultValue()).outdoorTemperature));

    }

}

</code></span>

Nhà tuyển dụng: Vẫn liên quan đến chương trình trên, nếu thay kiểu dữ liệu float (viết thường) thành Float (viết hoa)? Chương trình có biên dịch được không? Nếu biên dịch được thì khi chạy sẽ trả về kết quả gì?

<span style="color: #333333;"><code class="java">package com.smartJob.demo;

public class DefaultValue {

    public Float outdoorTemperature;

    public static void main(String[] args) {

        System.out.println(String.valueOf((new DefaultValue()).outdoorTemperature));

    }

}

</code></span>

Nhà tuyển dụng: Dưới đây là một ứng dụng đa luồng (multi-thread), có 2 class đặt trong package com.smartJob.demo

File SmartJobThread.java

<span style="color: #333333;"><code class="java">package com.smartJob.demo;

class SmartJobThread extends Thread {

    SmartJobThread() {

        System.out.print(" SmartJob");

    }

    public void run() {

        System.out.print(" bar");

    }

    public void run(String s) {

        System.out.println(" foo");

    }

}

</code></span>

File FunnyThreads.java

<span style="color: #333333;"><code class="java">package com.smartJob.demo;

public class FunnyThreads {

    public static void main(String[] args) {

        Thread t = new SmartJobThread() {

            public void run() {

                System.out.println(" foo");

            }

        };

        t.start();

    }

}</code></span>

Ứng dụng trên có biên dịch được không? Nếu biên dịch được, kết quả trả về khi chạy method main trong class FunnyThreads là gì? Luồng đi của ứng dụng như thế nào?

Ứng viên: Chương trình trên biên dịch được. Chương trình thực sự bắt đầu khi gọi đến t.start(); Khi đó khởi tạo Thread dẫn đến gọi constructor của SmartJobThread, do đó in ra ký tự SmartJob, sau đó gọi đến method run() trong nội tại, dẫn đến in ra ký tự foo. Kết quả chúng ta có ký tự in ra là: SmartJob foo.

Tham khảo:Câu hỏi phỏng vấn lập trình viên Java (phần 1).

Tham gia KHOÁ HỌC CGC JAVA TRỞ THÀNH LẬP TRÌNH VIÊN JAVA FULL-STACK TRONG 6 THÁNG

Leave a Reply

Your email address will not be published. Required fields are marked *