post-image

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

1. Tổng quan

Nhà tuyển dụng: JDBC là gì?

Ứng viên: JDBC là viết tắt của Java Database Connectivity, cung cấp các API (Application Programming Interface: Giao diện lập trình ứng dụng) để truy cập, tương tác (Ghi, xóa, sửa, thêm, tìm kiếm) trên cơ sở dữ liệu quan hệ. JDBC hỗ trợ cơ sở dữ liệu quan hệ (Cơ sở dữ liệu tuân thủ SQL – Structed Query Language: Ngôn ngữ truy vấn có cấu trúc).

Nhà tuyển dụng: ORM là gì?

Ứng viên: ORM là viết tắt của Object-Relation Mapping. Tạm dịch là Ánh xạ Đối tượng-Quan hệ. Một cơ chế móc nối đối tượng (Object) trong mã nguồn Java với các bảng, bản ghi, trường dữ liệu trong Hệ quản trị cơ sở dữ liệu quan hệ.
Em được biết trong công nghệ PHP có Doctrine. Trong Java có EclipseLink, MyBatis, Hibernate. Trong C# có NHibernate. Trong Python có SQLAlchemy. Đó là các ví dụ về framework hỗ trợ cơ chế ORM.

Nhà tuyển dụng: HQL là gì?

Ứng viên: HQL là viết tắt của Hibernate Query Language (Ngôn ngữ truy vấn dùng trong framework Hibernate), có nhiều điểm tương đồng với SQL (Structed Query Language: Ngôn ngữ truy vấn có cấu trúc). HQL không phụ thuộc vào Hệ quản trị cơ sở dữ liệu (DBMS: Database Management System) sử dụng, dù là MySQL, Oracle, hay Microsoft SQLServer. HQL dùng trong lập trình lập trình hướng đối tượng, nằm bên trong mã nguồn ứng dụng Java.

Nhà tuyển dụng: Kể tên một số framework ORM trong Java?
Ứng viên: Hibernate, TopLink, MyBatis.

Nhà tuyển dụng: Sự khác nhau giữa JDK và JRE?

Ứng viên: JDK là viết tắt của  Java Development Kit (Bộ công cụ phát triển ứng dụng Java). JRE là viết tắt của Java Runtime Environment (Môi trường thực thi Java). JDK dành cho nhà phát triển, JRE dành cho người dùng cuối (người sử dụng sản phẩm do nhà phát triển tạo ra). JDK đã bao gồm cả JRE, bởi vì rất hiển nhiên, Nhà phát triển sau khi tạo ra ứng dụng với công cụ trợ giúp là JDK thì phải chạy được nó để thử nghiệm. Sau khi cài đặt JDK thì trong thư mục cài đặt (JAVA_HOME) có thư mục chứa JRE. Các tính năng JDK có mà JRE không có là: Biên dịch mã nguồn *.java thành *.class, xuất ra javadoc, đóng gói ứng dụng, gỡ lỗi (debug) v.v..

Nhà tuyển dụng: Đối tượng trong Java mang giá trị là kết quả việc gán giá trị. Việc gán giá trị là “truyền giá trị tham chiếu” (pass-by-reference) hay “truyền giá trị tham trị” (pass-by-value), hay áp dụng cả 2 cách?

Ứng viên: Về mặt ngữ nghĩa, “trị” là “giá trị” (value), “tham chiếu” là reference. Java chỉ truyền giá trị theo một kiểu là tham trị. Java không dùng con trỏ (pointer) như C++ (C++ cho phép truyền giá trị theo cách tham chiếu).

Giả sử Java truyền giá trị theo kiểu tham chiếu (pass-by-reference) thì chương trình trền sẽ in ra kết quả là “SmartJob”, bởi vì phương thức gán giá trị foo() được gọi ra. Sự thật chương trình in ra chuỗi “Hello”, nghĩa là phương thức foo() không tác động đến biến baz trong phương thức main của chương trình. Java gán giá trị theo kiểu tham trị (pass-by-value), và luôn luôn là như vậy.

Nhà tuyển dụng: Phần mềm quản lý nhân sự của SmartJob tính lương cho nhân viên theo công thức phức tạp dựa trên số ngày công, năng lực, số năm kinh nghiệm, v.v.. của mỗi người. Trong phần mềm, Lương tháng của mỗi nhân viên được tính và ghi vào biến salary. Kiểu dữ liệu của biến salary nên là gì sẽ tốt nhất (best practice)?

Ứng viên: Việc tính toán với tiền bạc (tiền tệ) luôn cần sự chính xác cao, đảm bảo sai số (nếu có) ở mức ổn định và kiểm soát được. Lương của nhân viên là biến salary, tốt nhất để kiểu BigDecimal (java.math.BigDecimal).

Không sử dụng kiểu dữ liệu số nguyên không dấu: Tiền lương có thể liên quan đến nhiều loại tiền tệ như Việt Nam Đồng, Đô la Mỹ. Tính toán trên tiền lương không chỉ có các phép cộng, có thể phát sinh các phép trừ (do vi phạm, bị phạt), tạm ứng, dẫn đến có thể phát sinh giá trị âm.

Tính lương liên quan đến các phép tính lấy % (% giảm trừ gia cảnh theo phần trăm thu nhập, % đóng phí bảo hiểm v.v..), phép chia, do đó có phần lẻ thập phân.  Kiểu dữ liệu số nguyên không lưu giữ được phần thập phân sau khi của các phép chia. Nếu sử dụng kiểu số thực float, sai số tích lũy tăng dần theo số phép tính nhân/chia. Và BigDecimal là kiểu dữ liệu tốt nhất cho các đối tượng liên quan đến tiền tệ.

Nhà tuyển dụng: Sự khác nhau giữa Array và ArrayList? Khi nào thì bạn sử dụng Array thay cho ArrayList?

Ứng viên: Những điểm khác nhau cơ bản giữa Array và ArrayList là:
* Array có thể chứa kiểu dữ liệu nguyên thủy (primitive) hoặc đối tượng (object), trong khi ArrayList chỉ có thể chứa đối tượng (object).
* Array có kích thước cố định, ArrayList có kích thước động.
* ArrayList cung cấp nhiều phương thức (cũng là các tính năng) như addAll, removeAll, iterator, v.v..

Nhà tuyển dụng: Trong Java có bao nhiêu kiểu dữ liệu nguyên thủy? Liệt kê các kiểu dữ liệu này.

Ứng viên: Trong Java có 8 kiểu dữ liệu nguyên thủy là: byte, short, int, long, float, double, boolean, char.

Nhà tuyển dụng: Để xử lý exception, dùng các khối try… catch… finally. Có tồn tại các khối lệnh try lồng nhau không?

Ứng viên: Có.

Nhà tuyển dụng: class java.util.Locale dùng để làm gì?

Ứng viên: Dùng để xử lý các vấn đề liên quan đến địa lý, chính trị, vùng miền, đa ngôn ngữ v.v..

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 *