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... 06/06/2023

Bạn hãy giải thích ngắn gọn các trạng thái có thể có của một luồng

1 câu trả lời

Trong quá trình thực thi, một thread có thể có các trạng thái sau:

  • New: Thread ở trạng thái new nếu bạn tạo một instance của lớp Thread nhưng trước khi gọi phương thức start()
  • Runnable: thread sẵn sang để thực thi nhưng không nhất thiết phải bắt đầu thực thi ngay
  • Running: vi xử lý bắt đầu thực thi thread code
  • Non-Runnable (Blocked): bao gồm blocked on I/O và blocked on Synchronization. Đây là trạng thái khi luồng vẫn còn tồn tại, nhưng hiện tại không đủ điều kiện để chạy.
  • Terminated: kết thúc thực thi.
Java Developer được hỏi... 06/06/2023

Bạn hãy giải thích sự khác nhau giữa phương thức đồng bộ (synchronized method) và đồng bộ khối (synchronized block)

1 câu trả lời

Trong lập trình Java, mỗi đối tượng (object) có một khóa (lock). Một luồng có thể nhận được khóa cho một đối tượng bằng cách dùng từ khóa đồng bộ (synchronized keyword). Từ khóa synchronized có thể áp dụng ở cấp độ method (coarse grained lock) hoặc cấp độ block (fine grained lock).

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

Làm thế nào để việc đồng bộ phương thức xảy ra bên trong một monitor? Các cấp độ nào của việc đồng bộ bạn có thể áp dụng?

1 câu trả lời

JVM sử dụng khóa kết hợp với monitor. Monitor về cơ bản là công cụ giám sát theo dõi một chuỗi mã được đồng bộ hóa và đảm bảo rằng mỗi lần chỉ có một thread thực thi. Mỗi monitor được liên kết với một đối tượng tham chiếu. Thread không được phép thực cho đến khi nó nhận được khóa.

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

Bạn hãy giải thích tại sao Collection không mở rộng Cloneable và Serializable interfaces?

1 câu trả lời

Do Collection là interface gốc của tất cả các lớp collection (như ArrayList, LinkedList). Nếu collection interface mở rộng Cloneable/Serializable interfaces thì nó bắt buộc tất cả các triển khai cụ thể của interface này để triển khai các cloneable and serializable interfaces. Để mang lại sự tự do cho các lớp triển khai cụ thể, giao diện Collection interface không mở rộng Cloneable hay Serializable interfaces.

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

Bạn hãy cho biết sự khác nhau giữa fail-fast và fail-safe?

1 câu trả lời

Thuộc tính fail-safe của Iterator hoạt động với bản sao của collection bên dưới và do đó, nó không bị ảnh hưởng bởi bất kỳ sửa đổi nào trong collection.

Tất cả các collection classes trong gói java.util package là fail-fast, trong khi các collection classes trong java.util.concurrent là fail-safe. Fail-fast iterators Fail-fast iterators cho ra một ConcurrentModificationException, trong khi fail-safe iterator không bao giờ cho ra một ngoại lệ (exception ) như vậy.

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

Hãy cho biết sự quan trọng của các phương thức hashCode() và equals()

1 câu trả lời

Một Hashmap trong Java dùng hashCode và equals method để xác định chỉ mục của cặp key-value. Các phương thức này cũng được dùng để yêu cầu giá trị của một key nào đó. Nếu hai phương thức này không được triển khai đúng, hai key khác nhau có thể tạo ra hai giá trị hash giống nhau và như vậy sẽ được collection xem là bằng nhau. Ngoài ra, hai phương thức này còn được dùng để dò tìm các trùng lắp. Như vậy việc triển khai hai phương thức này là rất quan trọng cho tính chính xác và đúng đắn của HashMap

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

Java Priority Queue là gì?

1 câu trả lời

PriorityQueue là một hàng đợi không bị ràng buộc, dựa trên một heap ưu tiên và các phần tử của nó được sắp xếp theo thứ tự tự nhiên. Tại thời điểm tạo, bạn có thể cung cấp Comparator để chịu trách nhiệm sắp xếp thứ tự các phần tử của PriorityQueue. PriorityQueue không cho phép giá trị rỗng (null), những đối tượng không cung cấp thứ tự tự nhiên hoặc những đối tượng không có bất kỳ comparator nào được liên kết với chúng. Java PriorityQueue cũng không phải là thread-safe và yêu cầu thời gian O (log (n)) cho các hoạt động sắp xếp và xếp hàng của nó.

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

Bạn biết gì về big-O notation (độ phức tạp của thuật toán)?

1 câu trả lời

Big-O notation (ký hiệu Big-O) chỉ đơn giản mô tả một thuật toán mở rộng quy mô hoặc hoạt động tốt như thế nào trong trường hợp xấu nhất khi số lượng phần tử trong cấu trúc dữ liệu tăng lên. Big-O notation cũng có thể được sử dụng để mô tả các hành vi khác như tiêu thụ bộ nhớ. Vì các collection classes cũng là cấu trúc dữ liệu, chúng ta thường sử dụng Big-O notation để chọn cách triển khai tốt nhất dựa trên thời gian, bộ nhớ và hiệu suất. Big-O notation có thể cung cấp một dấu hiệu tốt về hiệu suất cho một lượng lớn dữ liệu.

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

Khi nào thì nên dùng dãy không thứ tự (unordered array) khi nào dùng dãy có thứ tự (ordered array)?

1 câu trả lời

Lợi ích chính giữa việc dùng dãy có thứ tự là thời gian tìm kiếm có độ phức tạp là O(log n) trong khi với dãy không thứ tự, độ phức tạp là O (n). Tuy nhiên, dãy có thứ tự cũng có hạn chế là các tác vụ insert lại có độ phức tạp O(n). Lý do là các phần tử với giá trị cao hơn phải được di chuyển để tạo khoản trống có các phần tử mới. Trong khi đó, tác vụ insert cho một dãy không có thứ tự cần thời gian cố định là O(1).

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

Bạn hãy kể ra một số best practices liên quan đến Java Collection framework

1 câu trả lời

Một số best practices liên quan đến Java Collection framework có thể kể đến:

  • Chọn đúng kiểu collection để sử dụng căn cứ vào yêu cầu của ứng dụng sẽ giúp cải thiện hiệu suất. Ví dụ nếu bạn biết được kích thước của các phần tử là cố định và biết được thứ tự, bạn sẽ dùng Array thay vì ArrayList
  • Một số lớp collection cho phép bạn đặc tả sức chứa ban đầu. Như vậy nếu bạn ước tính được số phần tử sẽ được chứa, bạn có thể dùng nó để tránh rehashing hoặc là resizing.
  • Luôn dùng Generics cho type-safety, dễ đọc và mạnh mẽ. Bên cạnh đó, bằng cách dùng Genetics bạn cũng tránh được ClassCastException  trong thời gian thực thi.
  • Dùng immutable classes trong Java Development Kit (JDK) để tránh việc triển khai phương thức hashCode và equals cho các custom class.
  • Trả về các tập hợp hoặc mảng có độ dài bằng 0 thay vì trả về giá trị null trong trường hợp underlying collection thực sự trống
Java Developer được hỏi... 06/06/2023

Mục đích của finalization là gì? Khi nào thì phương thức finalize() được gọi?

1 câu trả lời

Phương thức finalize() là một phương thức đặc biệt được cài đặt sẵn cho các lớp. Garbage Collector sẽ gọi phương thức này trước khi hủy một đối tượng. Vì vậy việc cài đặt một số thao tác giải phóng, dọn dẹp vùng nhớ đã cấp phát cho các đối tượng dữ liệu trong phương thức finalize() sẽ giúp cho người lập trình chủ động kiểm soát tốt quá trình hủy đối tượng thay vị giao cho trình dọn dẹp hệ thống tự động. Đồng thời việc cài đặt trong phương thức finalize() sẽ giúp cho bộ nhớ được giải phóng tốt hơn, góp phần cải tiến tốc độ chương trình.

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

Mục đích của Garbage Collector là gì trong Java và khi nào nó được sử dụng

1 câu trả lời

Mục đích của garbage collection là để xác định và loại bỏ những đối tượng không còn cần thiết của ứng dụng, để các tài nguyên được thu hồi và tái sử dụng.

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

Các System.gc() và Runtime.gc() methods dùng để làm gì?

1 câu trả lời

Các methods này có thể dùng như một dấu hiệu để JVM khởi động việc dọn rác. Tùy nhiên, tùy thuộc vào JVM mà garbage collection được khởi động ngay hoặc sau đó.

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

Nếu một object reference được set là null thì Garbage Collector có ngay lập tức giải phóng bộ nhớ bị chiếm giữ bởi đối tượng đó?

1 câu trả lời

Không, đối tượng sẽ sẵn sang cho việc thu gom rác trong chu kỳ tiếp theo chứ không phải ngay lập tức.

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

Cấu trúc của Java Heap là gì? Không gian PermGen trong Heap là gì?

1 câu trả lời

JVM có một vùng nhớ trong bộ nhớ (heap) là vùng runtime data mà trong đó bộ nhớ dành cho class instances và array được cấp phát. Nó được tạo ra khi JVM khởi động. Vùng nhớ heap cho các đối tượng được trả lại bởi hệ thống quản lý bộ nhớ tự động (garbage collector). Vùng nhớ heap chứa các đối tượng đang còn sử dụng (live objects) hoặc không (dead objects). Các đối tượng đang hoạt động có thể được truy cập bởi các ứng dụng và sẽ không là đối tượng của garbage collection. Các dead objects là các đối tượng sẽ không bao giờ được các ứng dụng truy cập nhưng chưa được thu dọn bởi garbage collector. Các đối tượng này chiếm giữ bộ nhớ cho đến khi được thu dọn.

PermGen là viết tắt của Permanent Generation và nó là vùng không gian heap đặc biệt được tách biệt với heap Java chính nơi JVM theo dõi metadata của các lớp đã được tải. 

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

Bạn hãy cho biết sự khác nhau giữa Serial và Throughput Garbage collector

1 câu trả lời

Throughput Garbage Collector sử dụng một phiên bản song song của young generation collector (young generation là nơi chứa toàn bộ object mới được khởi tạo) và được sử dụng với các ứng dụng có tập dữ liệu trung bình đến lớn. Trong khi đó Serial Collector thường đủ cho hầu hết các ứng dụng nhỏ (những ứng dụng yêu cầu vùng nhớ heap lên đến xấp xỉ 100MB trên bộ xử lý hiện đại).

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

Garbage collection có xảy ra trong không gian permanent generation trong JVM không?

1 câu trả lời

Permanent generation hay còn gọi là vùng nhớ Perm là vùng nhớ không chứa Object, nó chứa metadata của JVM như các thư viện Java SE, mô tả các class và các method của ứng dụng. Do đó, khi phải “dọn” các class, method không cần thiết, garbage collector sẽ tìm kiếm trong nhóm này. Nhưng hầu như garbage collector sẽ không “chạm” tới vùng nhớ này.

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

Khi nào thì một objects đủ điều kiện để thu gom trong Java?

1 câu trả lời

Một object trong Java có thể bị thu gom rác khi nó không thể truy cập được vào chương trình mà nó hiện đang được sử dụng.

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

Bạn hãy cho biết hai kiểu Xử lý ngoại lệ (Exceptions) trong Java và sự khác nhau giữa chúng là gì?

1 câu trả lời

Java có 2 kiểu xử lý ngoại lệ: checked exceptionsunchecked exceptions

  • Checked Exceptions: Là một ngoại lệ được kiểm tra và thông báo bởi trình biên dịch tại thời điểm biên dịch, chúng cũng có thể được gọi là ngoại lệ thời gian biên dịch (Compile-time Exceptions). Và lập trình viên không thể lường trước.

Ví dụ: Bạn muốn mở một file để đọc nhưng tệp được chỉ định lại không tồn tại. Thì FileNotFoundExeption sẻ xảy ra và trình biên dịch sẽ thông báo tới lập trình viên nhằm xử lý ngoại lệ đó.

  • Unchecked Exceptions: Là một ngoại lệ không được kiểm tra trong quá trình biên dịch. Chúng cũng được gọi là ngoại lệ thời gian chạy (Runtime Exceptions). Là ngoại lệ có thể tránh được bởi lập trình viên. Unchecked Exceptions kế thừa từ Runtime Exception.

Ví dụ: ArithmaticException, ArrayIndexOutOfBoundsException, NullPointerException,…chúng được kiểm tra tại Runtime.

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

Sự khác nhau giữa Exception và Error trong Java là gì?

1 câu trả lời

  • Trong Java, Exception là một sự kiện mà phá vỡ luồng chuẩn của chương trình. Nó là một đối tượng mà được ném tại Runtime. Một exception (ngoại lệ) trong Java là một vấn đề xảy ra trong quá trình thực hiện của chương trình. Một ngoại lệ có thể xảy ra với nhiều lý do khác nhau, như dưới đây:
  • Người dùng nhập dữ liệu không hợp lệ.
  • Một file cần được mở nhưng không thể tìm thấy.
  • Kết nối mạng bị ngắt trong quá trình thực hiện giao tiếp hoặc JVM hết bộ nhớ.
  • Lớp Error định nghĩa các ngoại lệ mà chương trình không chấp nhật bắt (hay bẫy). Vấn đề xảy ra vượt quá tầm kiểm soát của lập trình viên hay người dùng. Error được bỏ qua trong code của bạn vì bạn hiếm khi có thể làm gì đó khi chương trình bị error. Ví dụ như OutOfMemoryError, VirtualMachineError, AssertionError, … Nó được bỏ qua trong quá trình Java biên dịch.
Đang xem 61 - 80 trong 276 câu hỏi phỏng vấn