Bạn ghé thăm SmartJob.vn, có thể bạn đang tìm một công việc liên quan đến lập trình Java. Sau khi ứng tuyển, một vòng phỏng vấn đã ở phía trước. Việc học tủ những câu hỏi phỏng vấn thường gặp là một sự chuẩn bị rất hữu ích.
Nhà tuyển dụng: Java là tên một loại cafe được trồng trên đảo Java của Indonesia đúng không?
Ứng viên: Không anh ạ. Java là ngôn ngữ lập trình bậc cao, được sáng lập và phát triển bởi Sun Microsystems và phát hành vào năm 1995. Java chạy được trên hầu hết các nền tảng máy tính phổ biến Windows, Linux, Unix (Ví dụ như MacOS hay Solaris).
Nhà tuyển dụng: Thế nào là biến tĩnh (static variable)?
Ứng viên: Biến trong class được coi là biến tĩnh (static) nếu nó được khai báo với từ khóa “static” ở phía trước, bên ngoài phương thức (method), hàm tạo (constructor) hoặc khối lệnh.
Nhà tuyển dụng: Tại sao StringBuffer được gọi là “khả biến” (mutable: có khả năng biến đổi, khả biến)?
Ứng viên: Class java.lang.String là bất biến (immutable). Một khi đối tượng (object) thuộc kiểu String thì bất biến. Nếu cần thao tác trên xâu ký tự (xóa, thêm, sửa, v.v..) chúng ta sẽ dùng đối tượng xâu ký tự “khả biến” (immutable), đó là java.lang.StringBuffer .
Nhà tuyển dụng: Bốn tính chất cơ bản của lập trình hướng đối tượng là gì?
Ứng viên: Kế thừa (Inheritance) – Trừu tượng (Abstract) – Đa hình (Polymorphism) – Bao đóng (Encapsulation ).
Nhà tuyển dụng: Có các đối tượng trong thực tế được thể hiện trong các class Java là: Xe máy nói chúng —> Motorbike.java , Xe máy Honda Wave –> WaveMotor.java, Xe máy Suzuki Viva –> VivaMotor.java . Để tận dụng sức mạnh của Lập trình hướng đối tượng, bạn sử dụng 1 trong 4 tính chất kể trên. Đó là tính chất nào?
Ứng viên: Sử dụng tính chất “Kế thừa”. Mọi xe máy đều có 2 bánh, có 2 phanh, có 1 bình acquy, có 4 đèn xi-nhan.
Xe máy Honda (class WaveMotor) được “extend” từ class Motorbike, có thêm thuộc tính (properties) nhà sản xuất (manufacture) là Honda. Xe máy Suzuki (class VivaMotor) được “extend” từ class Motorbike, có thêm thuộc tính (properties) nhà sản xuất (manufacture) là Suzuki.
Nhà tuyển dụng: Thế nào là Wrapper class?
Ứng viên: Là các class cho phép các kiểu dữ liệu nguyên thủy (primitive type) có thể được truy cập như đối tượng (object). Ví dụ: java.lang.Integer, java.lang.Character, java.lang.Double, java.lang.Boolean v.v.. Tất cả các class wrapper là bất biến (không có khả năng biến đổi: immutable).
Nhà tuyển dụng: Sự khác nhau của throw và throws ?
Ứng viên: throw được sử dụng để cảnh báo một ngoại lệ/lỗi có thể kiểm soát (checked exception). “throws” được dùng để cảnh báo những lỗi/ngoại lệ không có khả năng kiểm soát (unchecked exception).
Nhà tuyển dụng: Cho biết sự khác nhau của 4 loại tầm vực (visible/ access modifer): public, default, private, protected tác động lên một phương thức?
Ứng viên: Phạm vi truy cập của phương thức được mô tả trong ma trận sau
Giải thích tiêu đề hàng đầu tiên:
class: trong cùng 1 class
package: trong cùng 1 gói (package)
subclass: gọi trong class kế thừa (class con)
world: toàn cục (nơi bất kỳ trong ứng dụng)
Giải thích tiêu đề cột đầu tiên:
public: toàn cục
protected: chỉ các class con, kế thừa từ class con mới được truy cập method của class cha
no modifier*: ta hiểu là mặc định, tức không có từ khóa tầm vực đứng phía trước
private: chỉ trong nội bộ class mới gọi được.
v.v..
Nhà tuyển dụng: So sánh checked và unchecked exception?
Ứng viên: Checked exception: là các lỗi được phát hiện ngay trong khi biên dịch. Nếu đoạn mã nào đó trong phương thức đẩy ra một “checked exception”, để xử lý các lỗi này, dùng từ khóa “throws”. Ví dụ sau sẽ minh họa trực quan hơn.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
<span style=“color: #333333;”><code class=“java”>package com.smartjob.demo;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class DemoCheckedEx {
public static void main(String[] args) throws FileNotFoundException, IOException {
FileReader file = new FileReader(“C:\hr\listJobs.txt”);
// In 5 dòng đầu tiên của file “C:hrlistJobs.txt”
try (BufferedReader fileInput = new BufferedReader(file)) {
// In 5 dòng đầu tiên của file “C:hrlistJobs.txt”
for (int counter = 0; counter < 5; counter++) {
System.out.println(fileInput.readLine());
}
}
}
}</code></span>
|
Nếu tập tin listJobs.txt không tìm thấy sẽ gây ra exception.
Unchekced exception: Các lỗi xảy ra trong quá trình vận hành, dù chương trình đã biên dịch thành công. Ví dụ chương trình có unchecked exception dưới đây vẫn biên dịch được (compile), nhưng khi thực hiện sẽ đẩy ra lỗi ArithmeticException:
1
2
3
4
5
6
7
8
9
10
11
|
<span style=“color: #333333;”><code class=“java”>package com.smartjob.demo;
class DemoUncheckedEx {
public static void main(String args[]) {
int x = 0;
int y = 10;
int z = y / x;
}
}</code></span>
|
Lỗi đẩy ra:
Exception in thread “main” java.lang.ArithmeticException: / by zero
Và còn nhiều câu hỏi được bỏ ngỏ hoặc chúng tôi sẽ viết tiếp trong các phần tiếp theo. Rất nhiều gợi mở sau là những câu hỏi mang tính chất kinh điển:
– Hỏi: Tại sao Java không hỗ trợ đa kế thừa (Java programming language does not permit you to extend more than one class)?
– Hỏi: Cho ví dụ minh họa sự khác nhau giữa nạp chồng (override) và quá tải (overload) phương thức (method)?
– Hỏi: So sánh sự giống và khác nhau giữa ArrayList và Vector?
– Hỏi: Kỹ thuật design pattern nổi bật nhất được sử dụng trong Struts2 framework là gì?
– Hỏi: Bạn có thể override một static method trong Java không? Trong ví dụ dưới đây, chúng tôi đã cố viết lại phương thức getBonusMultiplier(), còn nó có phát sinh lỗi gì hay không? nó trả về kết quả phụ thuộc vào class cha hay class con sẽ chờ câu trả lời của bạn.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
<span style=“color: #333333;”><code class=“java”>package com.smartjob.demo;
import java.math.BigDecimal;
public class RegularEmployee {
private BigDecimal salary;
public void setSalary(BigDecimal salary) {
this.salary = salary;
}
public static BigDecimal getBonusMultiplier() {
return new BigDecimal(“.02”);
}
public BigDecimal calculateBonus() {
return salary.multiply(getBonusMultiplier());
}
/* … presumably lots of other code … */
}</code></span>
|
1
2
3
4
5
6
7
8
9
10
|
<span style=“color: #333333;”><code class=“java”>package com.smartjob.demo;
import java.math.BigDecimal;
public class SpecialEmployee extends RegularEmployee {
public static BigDecimal getBonusMultiplier() {
return new BigDecimal(“.03”);
}
}</code></span>
|
– Hỏi: Nếu tôi tạo một phương thức giống hệt trong subclass (class con được extends từ class cha), liệu rằng khi biên dịch nó có báo lỗi không?
– Hỏi: Java là ngôn ngữ lập trình biên dịch (compile) hay thông dịch (scripting language)?
– Hỏi: Sự khác nhau giữa JDK và JRE?
– Hỏi: Thế nào là JIT compiler (Just In Time)?
– Hỏi: Thế nào là classloader?
– Hỏi: Tầm vực của class/biến/phương thức và tính bao đóng (encapsulation, một tính chất của lập trình hướng đối tượng) có liên quan gì với nhau không?
– Hỏi: Thế nào là constructor, constructor có phải là một phương thức không?
– Hỏi: Thế nào là phương thức tĩnh (static method)?
– Hỏi: Phương thức void là gì?
– Hỏi: Có thể lập trình ứng dụng sử dụng công nghệ EJB (Enterprise Java Bean) sau đó đóng gói rồi chạy trên máy chủ Apache Tomcat 8 không?
– Hỏi: Để mapping giữa cơ sở dữ liệu quan hệ (SQL database) và đối tượng (Entity) bằng công nghệ Hibernate, có 2 cách: Mapping dùng các tập tin XML và dùng annotation (tính năng được hỗ trợ từ Java 5). Ưu, nhược điểm của mỗi phương pháp là gì?
– Hỏi: Tại sao phương thức main là static?
– Hỏi: Java có hỗ trợ con trỏ (pointer) như C++ không?
– Hỏi: Có thể overload phương thức main không?
– Hỏi: Thế nào là final method?
v.v..
Nếu bạn có bất kỳ vướng mắc hay sự chia sẻ nào liên quan đến nội dung bài viết, hãy comment phía dưới.
Đỗ Như Vý – developer tại SmartJob
Mời các bạn đọc tiếp phần 2
câu hỏi phỏng vấn,
java,
Phỏng vấn,
tuyển dụng,