Câu hỏi phỏng vấn Java Developer

276 Các câu hỏi phỏng vấn Java Developer được chia sẻ bởi các ứng viên

Bộ câu hỏi phỏng vấn về thông tin cá nhân

Hãy giới thiệu qua về bản thân bạn?

Đây là dạng câu hỏi phổ biến mà khi đi phỏng vấn xin việc bạn sẽ được hỏi. Bạn hoàn toàn có thể chuẩn bị và luyện tập trước ở nhà. Câu trả lời cần ngắn gọn, khoảng 2-3 phút. Bên cạnh đó, cũng cần phải đầy đủ với các thông tin cần thiết nhất cho nhà tuyển dụng, đặc biệt là kinh nghiệm liên quan đến vị trí Java Developer

Theo bạn, điểm mạnh điểm yếu của mình là gì?

Đây là phần mà các bạn sẽ tự đánh giá về bản thân mình để đưa điểm mạnh, điểm yếu. Dựa vào đó, nhà tuyển dụng sẽ có cái nhìn tổng quan nhất về con người, tính cách và có phù hợp với vị trí họ đang tuyển dụng cũng như văn hóa công ty hay không?  

Bạn biết gì về công ty chúng tôi?

Nhà tuyển dụng rất quan tâm đến việc bạn biết về công ty của họ như thế nào? Hơn hết họ biết được ứng viên có thực sự hiểu rõ về công ty và tìm hiểu trước khi tham gia phỏng vấn hay không. Bởi vậy, bạn nên tìm hiểu kỹ lưỡng về công ty và trình bày một số vấn đề liên quan như lĩnh vực hoạt động, văn hoá, quy mô hoạt động của công ty như thế nào?,..

Các câu hỏi phỏng vấn thường gặp

Bạn biết gì về Java?

Java là một ngôn ngữ lập trình bậc cao, hướng đối tượng, dựa trên class (lớp); được phát triển bởi Sun Microsystems từ những năm 1995, hiện nay thuộc sở hữu của Oracle. Đặc điểm nổi bật nhất của Java là khả năng cho phép các nhà phát triển ứng dụng viết code một lần và có thể chạy ở mọi nơi. Để làm được điều này thì các ứng dụng Java sẽ được biên dịch thành bytecode, sau đó chạy trên nền máy ảo JVM đã được cài sẵn trên nền tảng hệ điều hành.

Cú pháp của Java tương tự như C và C++; phiên bản mới nhất hiện nay là Java 19 phát hành tháng 9/2022. Java được sử dụng trong đa dạng các lĩnh vực:

  • Desktop Application

  • Web Application

  • Enterprise Application (phổ biến như các nghiệp vụ ngân hàng)

  • Mobile Application

  • Hệ thống nhúng

  • Robotic, Smarthome

  • Game

Các tính năng nổi trội của Java là gì? 

Những tính năng nổi trội của ngôn ngữ lập trình Java:

  • Hướng đối tượng: tất cả trong Java đều là Object nên có thể dễ dàng mở rộng

  • Nền tảng độc lập: Java biên dịch source code thành bytecode  chạy trên nền tảng máy ảo JVM và không phụ thuộc vào nền tảng hệ điều hành

  • Đa luồng: Java hỗ trợ đa luồng, tức là chương trình viết ra có thể thực hiện nhiều tác vụ cùng lúc

  • Dễ học, dễ hiểu: Java có cú pháp dựa trên C/C++, đồng thời loại bỏ các tính năng phức tạp và hiếm sử dụng; có tính năng tự động hủy cấp phát bộ nhớ,… giúp người học dễ đọc, dễ hiểu code.

  • Bảo mật cao: việc chạy bên trong một máy ảo JVM giúp các chương trình Java khó bị can thiệp tác động, ngoài ra Java có sẵn các lớp giúp chương trình của bạn bảo mật tốt hơn: Classloader, Bytecode Verifier, Security Manager

  • Tính phân tán: Java tạo điều kiện cho người dùng tạo những ứng dụng phân tán bằng RMI và EJB, nó giúp chúng ta có thể truy cập đến các tệp bằng cách gọi phương thức từ bất kỳ máy nào trên Internet

Phân biệt JVM, JDK, JRE

JVM: Java Virtual Machine là máy ảo để thực thi các Java bytecode. Để chạy chương trình Java thì bắt buộc bạn phải cài đặt JVM trên máy của bạn (mỗi hệ điều hành sẽ có phiên bản khác nhau); sau đó source code Java được biên dịch thành bytecode và chuyển vào chạy trên nền JVM

JRE: Java Runtime Environment là môi trường thực thi Java, nó chính là trình triển khai JVM cùng với các plugins, thư viện cần thiết để thực thi chương trình

JDK: Java Development Kit là bộ công cụ phát triển ứng dụng Java. Nó chứa JRE, trình biên dịch bytecode cùng các công cụ hỗ trợ khác về debug, doc. Để lập trình Java chúng ta cần cài đặt JDK

Lập trình hướng đối tượng là gì?

Lập trình hướng đối tượng (OOP – Object Oriented Programming) là một phương pháp lập trình dựa trên khái niệm về lớp và đối tượng. Đối tượng ở đây là thể hiện của 1 lớp, bao gồm các thuộc tính và phương thức. OOP bao gồm 4 tính chất:

  • Tính đóng gói: che giấu thông tin quan trọng của 1 lớp

  • Tính đa hình: 1 hành động có thể thực hiện theo nhiều cách khác nhau

  • Tính trừu tượng: ẩn các triển khai chi tiết và chỉ hiển thị tính năng với người dùng

  • Tính kế thừa: khả năng tái sử dụng thuộc tính và phương thức của lớp

Java là một ngôn ngữ lập trình hướng đối tượng, mọi thứ trong Java đều là một đối tượng; vì thế trong hầu hết các bài giảng, khóa học về OOP thì luôn dùng Java làm ngôn ngữ thực hành.

Phạm vi truy cập trong Java gồm những gì?

Trong Java, có 4 từ khóa xác định phạm vi truy cập (access specifiers) gồm:

  • Public (công khai): cho phép truy cập vào bất kỳ lớp nào hoặc thông qua bất kỳ phương thức nào thông qua tên của chúng

  • Private (riêng tư): chỉ cho phép truy cập trong chính lớp mà chúng chỉ định.

  • Protected (bảo vệ): cho phép truy cập từ trong lớp, từ một lớp con hoặc từ lớp chung gói

  • Default (mặc định): phạm vi tiêu chuẩn, chỉ cho phép truy cập từ cùng một gói

Có những kiểu dữ liệu nào trong Java. Autoboxing và Unboxing là gì?

Trong Java có 8 kiểu dữ liệu cơ bản (Primitive Type):

  • byte

  • short

  • int

  • long

  • float

  • double

  • boolean

  • char

Trong Java, tất cả đều là Object; vì thế trong quá trình biên dịch, Java sẽ tự động chuyển đổi giữa kiểu dữ liệu cơ bản (Primitive Type) về đối tượng tương ứng với lớp (Wrapper class) của kiểu dữ liệu đó. Chẳng hạn int chuyển sang lớp Integer, kiểu double chuyển sang Double, … Quá trình này gọi là Autoboxing. Và ngược lại để chuyển từ Integer về int, gọi là Unboxing.

Thread trong Java là gì?

Trong Java, quá trình thực thi một chương trình gọi là Process; một Process có thể có nhiều thực thi đơn bên trong gọi là Thread (luồng). 

Một Thread có thể có những trạng thái sau:

  • New: khi tạo 1 lớp instance của lớp Thread và chưa gọi phương thức start

  • Runnable: trạng thái Thread sẵn sàng thực thi

  • Running: đang xử lý code trong Thread

  • Non-Runable (Blocked): trạng thái khi Thread vẫn còn tồn tại nhưng không thể chạy do không đủ điều kiện. Nó bao gồm việc bị blocked trên I/O và blocked trên Synchronization.

  • Terminated: Thread kết thúc

Deadlock là gì? Làm sao để tránh nó.

Deadlock là một trạng thái xảy ra khi có 2 process A và B cùng thực hiện, trong đó A cần chờ B thực hiện xong để chạy tiếp và đồng thời B cũng chờ A thực hiện xong mới có thể chạy tiếp. Kết quả là cả 2 process A và B đều không thể chạy được, chờ nhau vô thời hạn.

Để tránh deadlock, có 1 số cách xử lý như sau:

  • Tránh Nested Locks: không cấp khóa cho nhiều thread

  • Tránh cấp khóa không cần thiết

  • Sử dụng Thread.join set timeout cho Thread

Các interface cơ bản của Collections là gì?

Java Collections framework sử dụng để thao tác dữ liệu dạng tập hợp các objects. Có gồm các interface sau:

  • Collection: lớp cơ bản nhất chứa các phương thức làm việc với tập hợp objects như duyệt qua các phần tử

  • Set: mỗi phần tử trong tập hợp chỉ xuất hiện một lần duy nhất

  • List: danh sách tuyến tính sắp xếp theo một thứ tự nhất định

  • Queue: hàng đợi, kiểu dữ liệu FIFO (first-in first-out) vào trước ra trước

  • Map: đồ thị, ánh xạ lưu trữ dạng key-value

Lưu ý là Set, List, Queue đều kế thừa Collection; riêng Map thì là một interface độc lập với chỉ những phương thức riêng nó.

Garbage Collectors là gì?

Bộ thu gom rác Garbage Collectors là một quá trình thụ động thực thi nhiệm vụ quản lý bộ nhớ trong Java. Trong quá trình chạy chương trình Java, các đối tượng được tạo ra ở vùng nhớ heap (một phần bộ nhớ dành cho chương trình), sau đó nếu đối tượng không được sử dụng đến nữa thì garbage collectors sẽ truy tìm và xóa bỏ để thu hồi dung lượng bộ nhớ.

Nếu một object được set reference null thì đối tượng đó sẽ được đánh dấu là sẵn sàng cho việc thu gom rác trong chu kỳ hoạt động tiếp theo của Garbage Collectors. Để khởi động việc dọn rác, chúng ta có thể sử dụng các methods System.gc hoặc Runtime.gc

Kinh nghiệm “đậu” phỏng vấn

Để buổi phỏng vấn diễn ra suôn sẻ và nắm chắc phần thành công, bạn cần chú trọng thêm các yếu tố:

  • Hiểu rõ vị trí bạn đang ứng tuyển: Trước khi tham gia phỏng vấn, hãy nắm rõ về yêu cầu và trách nhiệm của vị trí Java Developer mà bạn đang ứng tuyển. Điều này giúp bạn chuẩn bị cho các câu hỏi liên quan đến kiến thức kỹ thuật và khả năng làm việc thực tế.

  • Chia sẻ về dự án thực tế: Nếu có thể, hãy đề cập đến các dự án thực tế mà bạn đã tham gia hoặc tự tạo ra. Diễn giải cách bạn đã xử lý các thách thức, cách bạn thiết kế và triển khai các tính năng, và cách bạn làm việc trong nhóm.

  • Sự học hỏi và tư duy logic: Hãy thể hiện sự sẵn sàng học hỏi và tư duy logic. Mảng lập trình luôn phát triển và một Java Developer tốt cần phải có khả năng nắm bắt kiến thức mới và áp dụng nó trong thực tế.

  • Hỏi về công ty và dự án: Thể hiện sự quan tâm bằng cách đặt các câu hỏi liên quan đến công ty, dự án và quy trình làm việc. Điều này không chỉ cho thấy tâm huyết của bạn mà còn giúp bạn hiểu rõ hơn về môi trường làm việc.

  • Tự tin và trung thực: Đừng sợ thừa nhận nếu bạn không biết câu trả lời. Thay vào đó, thể hiện sự tự tin trong những kiến thức bạn đã biết và sẵn sàng học hỏi.

  • Dress code và thái độ: Mặc lịch sự và phù hợp với văn hóa của công ty và thể hiện thái độ tích cực, lịch sự và sẵn sàng làm việc trong môi trường đa dạng.

Câu hỏi phỏng vấn Java Developer & Cách trả lời

Dưới đây là 3 câu hỏi phỏng vấn Java Developer hàng đầu và cách trả lời chúng:

Câu hỏi #1: Bạn hiểu khái niệm Java như thế nào? Vì sao Java không phụ thuộc vào nền tảng?

Java là một trong những loại ngôn ngữ lập trình vẫn đang được sử dụng phổ biến hiện nay. Mục đích của Java là lập trình hướng đối tượng cao cấp và hầu như sẽ sử dụng ngôn ngữ C hoặc C ++.

Hiện tại, Java được sử dụng để thiết kế những chương trình, phần mềm hoặc các ứng dụng cho rất nhiều nền tảng khác nhau. Do đó, có thể thấy rằng, Java là ngôn ngữ không phụ thuộc vào bất kỳ nền tảng nào.

Câu hỏi #2: Hiện tại, Java đang được hỗ trợ trên những nền tảng nào?

Bạn có thể nêu một số ví dụ về những nền tảng có thể sử dụng được ngôn ngữ Java như Linux, Windows, Mac OS,… Hiện tại, Java có thể chạy ở nhiều nền tảng khác nhau.

Mặc dù đây là câu hỏi phỏng vấn Java căn bản nhưng khả năng xuất hiện là rất cao. 

Câu hỏi #3: Phạm vi truy cập trong Java gồm những gì?

Trong Java, có 4 từ khóa xác định phạm vi truy cập (access specifiers) gồm:

  • Public (công khai): cho phép truy cập vào bất kỳ lớp nào hoặc thông qua bất kỳ phương thức nào thông qua tên của chúng
  • Private (riêng tư): chỉ cho phép truy cập trong chính lớp mà chúng chỉ định.
  • Protected (bảo vệ): cho phép truy cập từ trong lớp, từ một lớp con hoặc từ lớp chung gói
  • Default (mặc định): phạm vi tiêu chuẩn, chỉ cho phep truy cập từ cùng một gói

Câu hỏi phỏng vấn

Java Developer được hỏi... 05/06/2023

Tại sao không sử dụng con trỏ trong Java?

1 câu trả lời

Con trỏ không được sử dụng trong Java vì con trỏ khá phức tạpkhông an toàn

Java Developer được hỏi... 07/06/2023

So sánh ArrayList và Vector trong Java

1 câu trả lời

Giống nhau:

  • Đều cài đặt interface list
  • Hashtable và HashMap duy trì theo thứ tự chèn các phần tử

Khác nhau:

Cơ sở so sánh Vector ArrayList
Căn bản Lớp Vector sẽ được đồng bộ hóa. Lớp ArrayList sẽ không được đồng bộ hóa.
Lớp kế thừa Vector là một lớp kế thừa, được thiết kế lại để hỗ trợ lớp Collection. ArrayList là một lớp Collection tiêu chuẩn.
Tuyên bố lớp Vector ArrayList
Tái phân bổ Khi không được chỉ định, Vector tăng lên gấp đôi kích thước Khi không được chỉ định, ArrayList tăng thêm một nửa kích thước
Tái phân bổ Khi không được chỉ định, Vector tăng lên gấp đôi kích thước Khi không được chỉ định, ArrayList tăng thêm một nửa kích thước
Hiệu suất Khi Vector được đồng bộ hóa,Vector hoạt động chậm hơn ArrayList. Vì ArrayList không được đồng bộ hóa, ArrayList hoạt động nhanh hơn Vector.
Bảng liệt kê / lặp Vector sử dụng Enumutions và giao diện Iterator để duyệt qua các đối tượng được lưu trữ trong Vector. ArrayList sử dụng giao diện Iterator để duyệt qua các đối tượng được lưu trữ trong ArrayList.
Java Developer được hỏi... 05/06/2023

Khác biệt giữa equals() và == trong Java

1 câu trả lời

  • Equals() là một phương thức so sánh 2 object tuy nhiên chỉ so sánh về mặt giá trị của chúng. Trong phép so sánh equals(), nếu đúng sẽ trả về true, sai sẽ trả về false.
  • == là phép so sánh 2 object có đang cùng trỏ vào một ô nhớ hay không. Trong phép ==, kết quả đúng sẽ trả về true, sai về false. 
Java Developer được hỏi... 05/06/2023

Package trong Java là gì? Liệt kê những ưu điểm của các package

1 câu trả lời

Package trong Java là một nhóm các lớp (class), giao diện (interface) và các package con tương tự. Package thường được chia thành 2 loại:

  • Package được dựng sẵn
  • Package do người dùng định nghĩa 

Ưu điểm của các package:

  • Tổ chức file (class, interface) theo một hệ thống để dễ dàng phân loại file.
  • Phân quyền truy cập giúp xem các class thuộc package nào khi được gọi ở phần access modifier.
  • Dễ dàng chọn lọc khi import. Dùng lệnh import java.sql khi import tất cả các class. Dùng lệnh import.util.regex khi sử dụng class nằm trong package regex.
Java Developer được hỏi... 05/06/2023

Khác biệt giữa bộ nhớ Stack và Heap

1 câu trả lời

Về kích thước vùng nhớ

  • Bộ nhớ Stack: có kích thước cố định tùy thuộc vào hệ điều hành
  • Bộ nhớ Heap: có kích thước không cố định, có thể tăng giảm tùy thuộc vào nhu cầu

Về đặc điểm vùng nhớ

  • Bộ nhớ Stack: Vùng nhớ được quản lý bằng hệ điều hành, dữ liệu được lưu sẽ tự động hủy sau khi hàm thực hiện xong nhiệm vụ của mình.
  • Bộ nhớ Heap: Vùng nhớ được quản lý bằng lập trình viên và các dữ liệu sẽ không bị hủy sau khi hàm thực hiện xong và lập trình viên phải tự hủy vùng nhớ. 

Lỗi xảy ra với vùng nhớ

  • Bộ nhớ Stack: Có khả năng vượt quá dung lượng lưu trữ vì dung lượng bộ nhớ Stack chỉ có hạn.
  • Bộ nhớ Heap: Cũng có khả năng tràn vùng nhớ nếu bạn liên tục cấp phát vùng nhớ mà không giải phóng thường xuyên. 
Java Developer được hỏi... 05/06/2023

Trình biên dịch JIT trong Java

1 câu trả lời

Trình biên dịch JIT trong Java hay còn được biết đến với tên gọi Just-In-Time – là một kỹ thuật biên dịch các phần mã byte có các chức năng tương tự trong cùng một thời gian, qua đó giảm thời gian biên dịch cần thiết. 

Java Developer được hỏi... 05/06/2023

Nêu định nghĩa một class

1 câu trả lời

Class đại diện cho các thuộc tính và phương thức chung cho các đối tượng của lớp. Trong Java, class là kiểu dữ liệu do lập trình viên tự tạo ra. 

Java Developer được hỏi... 06/06/2023

Hãy nêu sự khác biệt giữa biến local và biến instance

1 câu trả lời

Biến local:

  • Được khai báo trong hàm contructor, trong block hoặc trong các phương thức
  • Được tạo trong các phương thức, contructor và block. Bị phá hủy khi kết thúc phương thức, contructor và block.
  • Được lưu trên vùng nhớ stack
  • Không được sử dụng access modifier khi khai báo
  • Cần khởi tạo giá trị mặc định trước khi sử dụng 

Biến instance:

  • Được khai báo trong một lớp, ngoài phương thức, contructor và block
  • Được lưu trong bộ nhớ heap
  • Được tạo khi tạo đối tượng bằng nút “new” và bị phá hủy khi đối tượng bị phá hủy
  • Được sử dụng bởi phương thức, contructor, block, tuy nhiên phải được sử dụng qua một đối tượng cụ thể
  • Giá trị mặc định phụ thuộc vào kiểu dữ liệu
  • Có thể gọi trực tiếp bằng tên khi sử dụng trong class 
Java Developer được hỏi... 06/06/2023

Sự khác biệt giữa mảng và ArrayList

1 câu trả lời

Array (Mảng) là cấu trúc dữ liệu có kích thước cố định.

ArrayList là lớp collection có thể thay đổi kích thước.

Java Developer được hỏi... 06/06/2023

Từ khóa final trong Java là gì?

1 câu trả lời

Từ khóa final trong Java là từ khóa được dùng để hạn chế số lượng người dùng. Lập trình viên có thể sử dụng ở nhiều ngữ cảnh: phương thức, biến, lớp

Java Developer được hỏi... 06/06/2023

Từ khóa static trong Java là gì? Bạn có thể ghi đè (override) private hay static method trong Java không?

1 câu trả lời

Static trong Java là từ khóa dùng để quản lý bộ nhớ và truy cập trực tiếp thông qua lớp khi không cần khởi tạo. Chúng ta có thể áp dụng từ khóa static với các biến, các phương thức, các khối, các lớp lồng nhau(nested class). Từ khóa static thuộc về lớp chứ không thuộc về instance(thể hiện) của lớp.

Trong Java, Static có thể là:

  • Biến static: Khi bạn khai báo một biến là static, thì biến đó được gọi là biến tĩnh, hay biến static.
  • Phương thức static: Khi bạn khai báo một phương thức là static, thì phương thức đó gọi là phương thức static.
  • Khối static: Được sử dụng để khởi tạo thành viên dữ liệu static.

Bạn không thể ghi đè static method trong Java.

Java Developer được hỏi... 06/06/2023

Mô tả sự khác biệt giữa String, StringBuilder và StringBuffer

1 câu trả lời

  • String không thể thay đổi và không thể có class con
  • StringBufferStringBuilder có thể thay đổi được
  • StringBufferStringBuilder giống nhau, chỉ có điểm khác biệt khi sử dụng đa luồng
  • Về tốc độ xử lý: StringBuilder là tốt nhất sau đó đến StringBuffer và String. 
Java Developer được hỏi... 06/06/2023

Sự khác biệt giữa từ khóa break và continue

1 câu trả lời

Từ khóa break dùng để thoát ra khỏi vòng lặp ngay lập tức và chuyển sang câu lệnh tiếp theo, ở ngoài vòng lặp vừa kết thúc.

Từ khóa continue được dùng để chỉ việc vòng lặp kế tiếp sẽ được thực hiện. 

Java Developer được hỏi... 06/06/2023

Collection trong Java là gì, liệt kê các interface và class của nó

1 câu trả lời

Collection trong Java là khuôn khổ cung cấp kiến trúc lưu trữ và thao tác tới nhóm đối tượng. Bạn có thể thực hiện tất cả các hoạt động như tìm kiếm, chèn, phân loại, v.v, trên một dữ liệu nhờ Java Collection. 

Các interface của Java Collection: Set, List, Queue, Deque, v.v.

Các class của Java Collection: ArrayList, Vector, LinkedList, HashSet, PriorityQueue, v.v. 

Java Developer được hỏi... 06/06/2023

Có mấy loại access modifier? Phân biệt sự khác nhau giữa chúng?

1 câu trả lời

Có 4 loại access modifier là: private, default, protected, public. Trong đó:

  • Public: Có thể truy cập ở bất cứ đâu.
  • Private: Chỉ có thể truy cập trong cùng class.
  • Default: Có thể truy cập trong cùng class và cùng package.
  • Protected: Có thể truy cập trong cùng class, package và ngoài package bởi lớp con.
Java Developer được hỏi... 06/06/2023

Thế nào là final?

1 câu trả lời

Final là thuộc tính mà chúng sẽ không thể thay đổi giá trị. Các phương thức final không thể overide ở lớp con và các class final không thể kế thừa. 

Java Developer được hỏi... 06/06/2023

Có bắt buộc phải khai báo constructor trong lớp?

1 câu trả lời

Không bắt buộc phải khai báo constructor trong lớp. Nếu không khai báo, lớp sẽ dùng default constructor. 

Java Developer được hỏi... 06/06/2023

Các tính chất của hướng đối tượng là gì ?

1 câu trả lời

Lập trình hướng đối tượng bao gồm 4 tính chất:

  • Tính đóng gói
  • TÍnh kế thừa
  • Tính trừu tượng
  • Tính đa hình
Java Developer được hỏi... 06/06/2023

Thế nào là tính đóng gói?

1 câu trả lời

Đóng gói là việc che giấu các thông tin quan trọng của 1 lớp. Nó được thể hiển thông qua các access modifier như private, public, default, protected

Java Developer được hỏi... 06/06/2023

Thế nào là tính đa hình?

1 câu trả lời

Tính đa hình là khi một hành động có thể được thực hiện theo nhiều cách khác nhau. Nó được thể hiện thông qua override và overload.

Đang xem 21 - 40 trong 276 câu hỏi phỏng vấn