Mục lục
- 1 Tổng hợp 100 câu hỏi phỏng vấn
- 1.1 Câu 1: Sự khác nhau giữa Inner class và Sub-class
- 1.2 Câu 2: Phạm vi truy cập của các thành phần trong java hay access modifier là gì?
- 1.3 Câu 3: Mục đích của Static method và Static variables là gì?
- 1.4 Câu 4: Ý nghĩa của việc đóng gói dữ liệu?
- 1.5 Câu 5: Lớp singleton là gì? Cho một ví dụ thực tế về cách sử dụng của nó.
- 1.6 Câu 6. Vòng lặp trong Java là gì? kể tên các loại vòng lặp trong java?
- 1.7 Câu 7: Vòng lặp vô hạn là gì? Vòng lặp vô hạn được khai báo như thế nào?
- 1.8 Câu 8: Sự khác biệt giữa câu lệnh continue và break là gì?
- 1.9 Câu 9: Sự khác biệt giữa biến double và biến float trong Java là gì?
- 1.10 Câu 10: Từ Final trong Java là gì? Cho một ví dụ.
- 1.11 Câu 11: Toán tử ternary là gì? Cho một ví dụ
- 1.12 Câu 12: Làm cách nào bạn có thể tạo số ngẫu nhiên trong Java?
- 1.13 Câu 13: Default case trong switch-case là gì? Đưa ra ví dụ.
- 1.14 Câu 14: Lớp cơ sở trong Java mà tất cả các lớp được dẫn xuất từ đó là gì?
- 1.15 Câu 15: Phương thức main () trong Java có thể trả về bất kỳ dữ liệu nào không?
- 1.16 Câu 16: Package trong Java là gì? Ý nghĩa của các package là gì?
- 1.17 Câu 17: Chúng ta có thể khai báo một lớp là Abstract mà không có bất kỳ phương thức trừu tượng nào không?
- 1.18 Câu 18: Sự khác biệt giữa Abstract Class và Interface trong Java là gì?
- 1.19 Câu 19: Chúng ta có thể khai báo phương thức main() là private không?
- 1.20 Câu 20: Chúng ta có thể truyền các đối số vào hàm theo dạng pass-by-reference thay vì pass-by-value không?
- 1.21 Câu 21: Cách một đối tượng được tuần tự hóa trong java
- 1.22 Câu 22: Khi nào chúng ta nên sử dụng tuần tự hóa
- 1.23 Câu 23: Có bắt buộc Try Block phải được đi kèm Catch block trong Java để xử lý Ngoại lệ không?
- 1.24 Câu 24 – Khi nào hàm khởi tạo của một lớp được gọi?
- 1.25 Câu 25: Một lớp có thể có nhiều hàm khởi tạo không?
- 1.26 Câu 26: Chúng ta có thể ghi đè các phương thức tĩnh – static method của một lớp không?
- 1.27 Câu 27: Trong ví dụ dưới đây, đầu ra sẽ là gì?
- 1.28 Câu 28: Stribg có phải là một kiểu dữ liệu trong java không?
- 1.29 Câu 29: Trong ví dụ dưới đây, có bao nhiêu Đối tượng chuỗi được tạo?
- 1.30 Câu 30: Tại sao các String trong Java được gọi là Bất biến?
- 1.31 Câu 31: Sự khác biệt giữa array và Vector là gì?
- 1.32 Câu 32: Đa luồng là gì?
- 1.33 Câu 33: Hai cách triển khai đa luồng trong Java là gì?
- 1.34 Câu 34: Khi String có giá trị thay đổi liên tục, cái nào nên được ưu tiên sử dụng? String hay StringBuffer?
- 1.35 Câu 35: Mục đích của việc sử dụng Break trong mỗi trường hợp của Switch Statement là gì?
- 1.36 Câu 36: Thu gom rác được thực hiện như thế nào trong Java?
- 1.37 Câu 37: Một lớp có thể đồng thời là supper-class và là sub-class không? Đưa ra ví dụ
- 1.38 Câu 38: Làm thế nào các đối tượng của một lớp được tạo ra nếu không có hàm tạo nào được định nghĩa trong lớp?
- 1.39 Câu 38: Trong đa luồng làm thế nào chúng ta có thể đảm bảo rằng một tài nguyên không được nhiều luồng sử dụng đồng thời?
- 1.40 Câu 40: Chúng ta có thể gọi hàm tạo của một lớp nhiều hơn một lần cho một đối tượng không?
- 1.41 Câu 41: Chúng ta có thể có hai phương thức trong một lớp có cùng tên không?
- 1.42 Câu 42: Làm cách nào chúng ta có thể tạo bản sao của một đối tượng java?
- 1.43 Câu 43: Lợi ích của việc sử dụng kế thừa là gì?
- 1.44 Câu 44: Access modifier mặc định cho các biến và phương thức của một class là gì?
- 1.45 Câu 45: Cho một ví dụ về việc sử dụng Con trỏ trong Java.
- 1.46 Câu 46: Sự khác biệt giữa Stack và Queue là gì?
- 1.47 Câu 47: Trong Java, làm thế nào để loại bỏ một biến trong tuần tự hoá
- 1.48 Câu 48: Làm thế nào chúng ta có thể sử dụng các kiểu dữ liệu nguyên thủy làm đối tượng?
- 1.49 Câu 49: Những loại ngoại lệ nào được bắt tại thời điểm biên dịch?
- 1.50 Câu 50: Chúng ta có thể sử dụng hàm khởi tạo mặc định khi đã có ít nhất một hàm khởi tạo được định nghĩa.
- 1.51 Câu 51: Chúng ta có thể ghi đè một phương thức bằng cách sử dụng cùng một tên phương thức và các đối số nhưng kiểu trả về khác nhau không?
- 1.52 Câu 52: Đầu ra của đoạn mã sau là gì?
- 1.53 Câu 53: Một người nói rằng anh ta đã biên dịch thành công một lớp java mà không cần có phương thức main trong đó? Có khả thi không?
- 1.54 Câu 54: Chúng ta có thể gọi một phương thức không tĩnh từ bên trong một phương thức tĩnh không?
- 1.55 Câu 55: Hai biến môi trường phải được đặt để chạy bất kỳ chương trình Java nào?
- 1.56 Câu 63: Có thể định nghĩa một phương thức trong lớp Java nhưng cung cấp việc thực thi nó trong mã của một ngôn ngữ khác như C không?
- 1.57 Câu 64: Các hàm hủy được định nghĩa như thế nào trong Java?
- 1.58 Câu 65: Một biến có thể là cục bộ và tĩnh cùng một lúc không?
- 1.59 Câu 66: Trong interface có thể chứa static method được không?
- 1.60 Câu 67: Trong lập trình luồng Java, phương pháp nào là phải triển khai cho tất cả các luồng?
- 1.61 Câu 68: Làm cách nào để lập trình viên có thể ném một ngoại lệ theo cách thủ công?
- 1.62 Câu 69: Làm thế nào các đối tượng được lưu trữ trong Java?
- 1.63 Câu 70: Điều gì xảy ra nếu một ngoại lệ không được xử lý trong một chương trình?
- 1.64 Câu 71: Anonymous class nghĩa là gì?
- 1.65 Câu 72: Local class là gì?
- 1.66 Câu 73: Lớp cơ sở của tất cả các lớp ngoại lệ là gì?
- 1.67 Câu 74: Thứ tự gọi các hàm tạo trong kế thừa là gì?
- 1.68 Câu 75: Lớp nào sau đây sẽ được cấp phát nhiều bộ nhớ hơn?
Có lẽ Java là một ngôn ngữ lâu đời, mạnh mẽ, được nhiều nhà trường đưa vào giảng day. Vì thế nó có thể là một trong những điểm đến của việc làm cho các sinh viên vừa mới ra trường.
Ở việt nam hiện tại rất nhiều công việc về Java với đãi ngộ tốt. Tuy nhiên theo quan điểm cá nhân mình nghĩ thì nếu chỉ học các kiến thức ở trong trường là chưa đủ để chinh phục nhà trường tuyển dụng. Các bạn sinh viên phải nỗ lực hơn để tìm tòi các vấn đề khác trong Java.
Dưới đây là tổng hợp 100 câu hỏi để các bạn ôn luyện, nếu không trả lời được hoặc vẫn chưu hiểu rõ về nó thì hãy tìm hiểu thêm các bạn nhé. Và lưu ý rằng nhà tuyển dụng sẽ không hỏi các câu hỏi được liệt kê trong danh sách này, thông thường họ sẽ đưa ra vấn đề và nhiệm vụ của bạn là lật tung một đống câu hỏi đó để xem kiến thức nào là phù hợp để trả lời câu hỏi.
Và một điều nữa việc trả lời được 100 câu hỏi này vẫn là chưa đủ, vì thông thường ngoài các kiến thức này thì nhà tuyển dụng còn hỏi rất nhiều vấn đề khác như SQL, Cấu trúc dữ liệu và giải thuật, design pattern etc.
Tổng hợp 100 câu hỏi phỏng vấn
OK, cùng xem 100 câu nào. Lưu ý các phần bên dưới câu hỏi chỉ là gợi ý, các bạn có thể dựa vào đó để phân tích sâu hơn.
Câu 1: Sự khác nhau giữa Inner class và Sub-class
Inner class là một class được lồng trong 1 class khác. Inner class có thể truy cập các biến, hàm được định nghĩa bởi class bao bên ngoài nó.
Một sub-class là một class kế thừa từ một class khác (class này được gọi là supper-class). Sub-class có thể truy cập tất cả các biến, hàm được chỉ định public, protected access modifier.
Câu 2: Phạm vi truy cập của các thành phần trong java hay access modifier là gì?
Trong Java, access modifier là các từ khóa được sử dụng trước tên class, biến, hàm, etc để xác định phạm vi truy cập. Các loại chỉ định truy cập cho các lớp là:
- Public: Class, hàm, thuộc tính có thể truy cập ở bất cứ đâu.
- Protected: hàm, thuộc tính có thể được truy cập từ cùng một lớp mà chúng thuộc về hoặc từ các lớp con và từ lớp chung package.
- Default: hàm, thuộc tính, class chỉ có thể được truy cập từ các class cùng package.
- Private: hàm, thuộc tính, class chỉ có thể được truy cập trong cùng một class mà chúng thuộc về. Bên ngoài class này sẽ không thể truy cập được.
Câu 3: Mục đích của Static method và Static variables là gì?
Khi có yêu cầu chia sẻ các hàm hoặc biến giữa nhiều đối tượng của một lớp thay vì tạo các bản sao riêng biệt cho từng đối tượng, chúng ta sử dụng từ khóa static để tạo một phương thức hoặc biến được chia sẻ cho tất cả các đối tượng.
Câu 4: Ý nghĩa của việc đóng gói dữ liệu?
Đóng gói là một khái niệm trong Lập trình hướng đối tượng để kết hợp các thuộc tính và phương thức trong một đơn vị duy nhất.
Tính đóng gói giúp các lập trình viên tuân theo cách tiếp cận mô-đun để phát triển phần mềm vì mỗi đối tượng có một bộ phương thức và biến riêng và phục vụ các chức năng của nó độc lập với các đối tượng khác. Đóng gói cũng phục vụ mục đích ẩn dữ liệu.
Câu 5: Lớp singleton là gì? Cho một ví dụ thực tế về cách sử dụng của nó.
Một lớp singleton trong java chỉ có thể có một instance và do đó tất cả các phương thức và biến của nó chỉ thuộc về instance này.
Singleton class rất hữu ích cho các tình huống cần giới hạn số lượng đối tượng cho một lớp.
Ví dụ tốt nhất về kịch bản sử dụng singleton là khi có giới hạn chỉ có một kết nối với cơ sở dữ liệu do một số giới hạn của trình điều khiển hoặc do bất kỳ vấn đề cấp phép nào.
Câu 6. Vòng lặp trong Java là gì? kể tên các loại vòng lặp trong java?
Vòng lặp được sử dụng trong lập trình để thực thi một câu lệnh hoặc một khối câu lệnh lặp đi lặp lại. Có ba loại vòng lặp trong Java:
Câu 7: Vòng lặp vô hạn là gì? Vòng lặp vô hạn được khai báo như thế nào?
Một vòng lặp vô hạn chạy mà không có bất kỳ điều kiện nào và chạy vô hạn. Một vòng lặp vô hạn có thể dừng khi dùng lệnh break dựa trên các điều kiện cụ thể.
for (;;) { // block code // thêm các câu lệnh dừng khi thoả các điều kiện nhất định. }
Câu 8: Sự khác biệt giữa câu lệnh continue và break là gì?
break và continue là hai từ khóa quan trọng được sử dụng trong các vòng lặp. Khi một từ khóa break được sử dụng trong một vòng lặp, vòng lặp bị dừng ngay lập tức, trong khi từ khóa continue được sử dụng để chuyển đến lần lặp tiếp theo, các mã lệnh bên dưới continue sẽ bị bỏ qua.
Trong ví dụ dưới đây, Vòng lặp bị phá vỡ khi bộ đếm đạt đến 4.
for (counter = 0; counter & lt; 10; counter++) system.out.println(counter); if (counter == 4) { break; } }
Trong ví dụ dưới đây khi bộ đếm đạt đến 4, vòng lặp sẽ chuyển sang lần lặp tiếp theo và bất kỳ câu lệnh nào sau từ khóa continue sẽ bị bỏ qua cho lần lặp hiện tại
for (counter = 0; counter < 10; counter++) system.out.println(counter); if (counter == 4) { continue; } system.out.println("This will not get printed when counter is 4"); }
Câu 9: Sự khác biệt giữa biến double và biến float trong Java là gì?
Trong java, float chiếm 4 byte trong bộ nhớ trong khi double chiếm 8 byte trong bộ nhớ. Float là số thập phân dấu phẩy động có độ chính xác đơn trong khi Double là số thập phân có độ chính xác kép.
Câu 10: Từ Final trong Java là gì? Cho một ví dụ.
Trong java, một hằng được khai báo bằng từ khóa final. Giá trị chỉ có thể được gán một lần và sau khi gán, không thể thay đổi giá trị của một hằng số.
Trong ví dụ dưới đây, một hằng số có tên const_val được khai báo và gán giá trị:
private final int const_val = 100
Khi một phương thức được khai báo là final, nó KHÔNG thể bị các lớp con ghi đè. Phương thức này nhanh hơn bất kỳ phương thức nào khác vì chúng được giải quyết tại thời điểm tuân thủ.
Khi một class được khai báo là final, nó không thể được phân lớp, tất là sẽ không có các sub-class của các final class.. Ví dụ như các wrapper class: Double class, String class etc.
Câu 11: Toán tử ternary là gì? Cho một ví dụ
Toán tử ternary còn được gọi là toán tử điều kiện được sử dụng để quyết định giá trị nào sẽ gán cho một biến dựa trên đánh giá giá trị Boolean.
Ví dụ dưới đây nếu rank == 1 thì status là ‘DONE’ ngược lại thì ‘Pending’
public class conditionTest { public static void main(String args[]) { String status; int rank = 3; status = (rank == 1) ? "Done" : "Pending"; System.out.println(status); } }
Câu 12: Làm cách nào bạn có thể tạo số ngẫu nhiên trong Java?
ử dụng Math.random(), bạn có thể tạo các số ngẫu nhiên trong phạm vi lớn hơn hoặc bằng 0,1 và nhỏ hơn 1,0 Sử dụng lớp ngẫu nhiên trong gói java.util.
Câu 13: Default case trong switch-case là gì? Đưa ra ví dụ.
Trong câu lệnh switch-case, trường hợp mặc định được thực thi khi không có điều kiện switch nào khác phù hợp. Trường hợp mặc định là một trường hợp tùy chọn, có thể được khai báo hoặc không đều được
public class switchExample { int score = 4; public static void main(String args[]) { switch (score) { case 1: system.out.println("Score is 1"); break; case 2: system.out.println("Score is 2"); break; default: system.out.println("Default Case"); } } }
Câu 14: Lớp cơ sở trong Java mà tất cả các lớp được dẫn xuất từ đó là gì?
java.lang.object
Câu 15: Phương thức main () trong Java có thể trả về bất kỳ dữ liệu nào không?
Trong java, phương thức main () không thể trả về bất kỳ dữ liệu nào và do đó, nó luôn được khai báo với kiểu trả về void.
Câu 16: Package trong Java là gì? Ý nghĩa của các package là gì?
Trong Java, gói là một tập hợp các class và interface được gói lại với nhau vì chúng có liên quan với nhau. Việc sử dụng các gói giúp các nhà phát triển mô-đun hóa mã và nhóm mã để sử dụng lại thích hợp.
Câu 17: Chúng ta có thể khai báo một lớp là Abstract mà không có bất kỳ phương thức trừu tượng nào không?
Có, chúng ta có thể tạo một lớp trừu tượng bằng cách sử dụng từ khóa abstract Trước tên class, ngay cả khi nó không có bất kỳ phương thức trừu tượng nào. Tuy nhiên, nếu một class có ít nhất một phương thức trừu tượng thì nó phải được khai báo là abstract, nếu không nó sẽ báo lỗi.
Câu 18: Sự khác biệt giữa Abstract Class và Interface trong Java là gì?
Sự khác biệt cơ bản giữa abstract class và interfce là một interface chỉ có thể khai báo các public static method mà không có triển khai cụ thể trong khi một abstract class có thể có các hàm, biến với bất kỳ chỉ định truy cập nào (publuc, private, v.v.) hoặc các abstract method không có các triển khai cụ thể.
Một điểm khác biệt chính trong việc sử dụng các abstract class và interfce là một ;as triển khai một interface phải triển khai tất cả các phương thức của nó trong khi một lớp kế thừa từ một abstract class không phải thực hiện tất cả các phương thức của supper class.
Một lớp có thể triển khai nhiều interface nhưng nó chỉ có thể kế thừa từ một abstract class.
Câu 19: Chúng ta có thể khai báo phương thức main() là private không?
Trong java, phương thức main phải là public static để chạy bất kỳ ứng dụng nào một cách chính xác. Nếu phương thức main được khai báo là private, nhà phát triển sẽ không gặp bất kỳ lỗi biên dịch nào, tuy nhiên, nó sẽ không được thực thi và sẽ xuất hiện lỗi thời gian chạy.
Câu 20: Chúng ta có thể truyền các đối số vào hàm theo dạng pass-by-reference thay vì pass-by-value không?
Trong java, chúng ta có thể truyền đối số cho một hàm pass-by-value chứ không thể bằng pass-by-reference.
Câu 21: Cách một đối tượng được tuần tự hóa trong java
Trong java, để chuyển đổi một đối tượng thành byte stream bằng cách serialization, một interface với tên Serializable được thực hiện bởi lớp. Tất cả các class triển khai Serializable sẽ được tuần tự hoá và trạng thái của chúng sẽ được lưu trong byte stream.
Câu 22: Khi nào chúng ta nên sử dụng tuần tự hóa
Tuần tự hoá được sử dụng khi dữ liệu cần được truyền qua mạng. Sử dụng tuần tự hóa, trạng thái của đối tượng được lưu và chuyển đổi thành byte stream. Nó sẽ được chuyển qua mạng và sẽ được khôi phục lại khi đến nơi.
Câu 23: Có bắt buộc Try Block phải được đi kèm Catch block trong Java để xử lý Ngoại lệ không?
Khối Try cần được theo sau bởi khối Catch hoặc khối Finally hoặc cả hai. Bất kỳ ngoại lệ nào được ném ra từ khối try cần phải được bắt và xử lý trong khối catch. Cuối cùng nếu khối Finally được cung cấp thì nó sẽ luôn được thực thi bất kỳ tình huống nào.
Câu 24 – Khi nào hàm khởi tạo của một lớp được gọi?
Hàm khởi tạo của một lớp được gọi mỗi khi một đối tượng được tạo bằng từ khóa new.
Ví dụ, trong lớp sau, hai đối tượng được tạo bằng từ khóa new và do đó, hàm khởi tạo được gọi hai lần.
public class const_example { const_example() { system.out.println("Inside constructor"); } public static void main(String args[]) { const_example c1 = new const_example(); const_example c2 = new const_example(); } }
Câu 25: Một lớp có thể có nhiều hàm khởi tạo không?
Có, một lớp có thể có nhiều hàm khởi tạo với các tham số khác nhau. Hàm tạo nào được sử dụng để tạo đối tượng phụ thuộc vào các đối số được truyền trong khi tạo đối tượng.
Câu 26: Chúng ta có thể ghi đè các phương thức tĩnh – static method của một lớp không?
Chúng ta không thể ghi đè các phương thức tĩnh. Các phương thức tĩnh thuộc về một lớp chứ không phải các đối tượng riêng lẻ và được xử lý tại thời điểm biên dịch (không phải trong thời gian chạy). Nếu chúng ta vẫn cố gắng đi đè phương thức tĩnh thì sẽ không có lỗi nào xảy ra tuy nhiên sẽ thể ảnh hưởng đến các mã bên trong phương thức tĩnh, và chúng sẽ được chạy bình thường. Mã code bạn ghi đè là vô nghĩa.
Câu 27: Trong ví dụ dưới đây, đầu ra sẽ là gì?
public class superclass { public void displayResult() { system.out.println("Printing from superclass"); } } public class subclass extends superclass { public void displayResult() { system.out.println("Displaying from subClass"); super.displayResult(); } public static void main(String args[]) { subclass obj = new subclass(); obj.displayResult(); } }
Output:
Displaying from subclass
Displaying from superclass
Câu 28: Stribg có phải là một kiểu dữ liệu trong java không?
Chuỗi không phải là một kiểu dữ liệu nguyên thủy trong java. Khi một string được tạo trong java, nó thực sự là một đối tượng của lớp Java.Lang.String được tạo.
Câu 29: Trong ví dụ dưới đây, có bao nhiêu Đối tượng chuỗi được tạo?
tring s1="I am Java Expert"; String s2="I am C Expert"; String s3="I am Java Expert";
Trong ví dụ trên, hai đối tượng của lớp Java.Lang.String được tạo. s1 và s3 là các tham chiếu đến cùng một đối tượng.
Câu 30: Tại sao các String trong Java được gọi là Bất biến?
Trong java, các đối tượng String được gọi là bất biến vì giá trị đã được gán cho một chuỗi, nó không thể thay đổi và nếu thay đổi, một đối tượng mới sẽ được tạo.
Trong ví dụ dưới đây, tham chiếu str đề cập đến một đối tượng chuỗi có giá trị “Giá trị một”.
String str="Value One";
Khi một giá trị mới được gán cho nó, một đối tượng String mới sẽ được tạo và tham chiếu được chuyển đến đối tượng mới.
str="New Value";
Câu 31: Sự khác biệt giữa array và Vector là gì?
Một mảng nhóm dữ liệu có cùng kiểu nguyên thủy và có bản chất tĩnh trong khi vector có bản chất động và có thể chứa dữ liệu thuộc các kiểu dữ liệu khác nhau.
Câu 32: Đa luồng là gì?
Đa luồng là một khái niệm lập trình để chạy nhiều tác vụ đồng thời trong một chương trình duy nhất. Các luồng chia sẻ cùng một ngăn xếp quy trình và chạy song song. Nó giúp cải thiện hiệu suất của bất kỳ chương trình nào.
Câu 33: Hai cách triển khai đa luồng trong Java là gì?
Các ứng dụng đa luồng có thể được phát triển trong Java bằng cách sử dụng bất kỳ phương pháp nào trong hai phương pháp sau:
- Bằng cách sử dụng Java.Lang.Runnable Interface. Các lớp triển khai giao diện này để kích hoạt đa luồng. Có một phương thức Run () trong giao diện này được triển khai.
- Bằng cách viết một lớp mở rộng lớp Java.Lang.Thread.
Câu 34: Khi String có giá trị thay đổi liên tục, cái nào nên được ưu tiên sử dụng? String hay StringBuffer?
Vì StringBuffer có bản chất là động và chúng ta có thể thay đổi giá trị của các đối tượng StringBuffer không giống như String là bất biến, nên bạn luôn luôn là một lựa chọn tốt để sử dụng StringBuffer khi dữ liệu bị thay đổi quá nhiều. Nếu chúng ta sử dụng String trong trường hợp như vậy, đối với mỗi thay đổi dữ liệu, một đối tượng String mới sẽ được tạo ra, có thể dẫn đến cạn kiệt nguồn tài nguyên của ứng dụng.
Câu 35: Mục đích của việc sử dụng Break trong mỗi trường hợp của Switch Statement là gì?
Nếu không dùng lệnh break trong mỗi case của switch-case thì tất cả các case sau case hợp lệ sẽ được thực thi, trong khi mục đích của chúng ta ứng với mỗi lần so sánh thì chỉ có 1 case được thoả mãn. Chính vì vậy, sử dụng break để khi gặp case thoả mãn thực thi và thoát khởi mệnh đề switch-case.
Câu 36: Thu gom rác được thực hiện như thế nào trong Java?
Trong java, khi một đối tượng không được tham chiếu nữa, quá trình thu gom rác sẽ diễn ra và đối tượng đó sẽ tự động bị hủy. Để thu gom rác tự động, java gọi phương thức System.gc () hoặc phương thức Runtime.gc ().
Câu 37: Một lớp có thể đồng thời là supper-class và là sub-class không? Đưa ra ví dụ
Nếu có một hệ thống phân cấp kế thừa được sử dụng, một lớp có thể là siêu lớp cho một lớp khác và một lớp con cho một lớp khác cùng một lúc.
Trong ví dụ dưới đây, continent là một sub-class của world và là supper-class của country.
public class world { .......... } public class continenet extends world { ............ } public class country extends continent { ...................... }
Câu 38: Làm thế nào các đối tượng của một lớp được tạo ra nếu không có hàm tạo nào được định nghĩa trong lớp?
Ngay cả khi không có phương thức khởi tạo rõ ràng nào được định nghĩa trong một lớp java, các đối tượng được tạo thành công như một phương thức khởi tạo mặc định được sử dụng ngầm định để tạo đối tượng. Hàm tạo này không có tham số.
Câu 38: Trong đa luồng làm thế nào chúng ta có thể đảm bảo rằng một tài nguyên không được nhiều luồng sử dụng đồng thời?
Trong đa luồng, quyền truy cập vào các tài nguyên được chia sẻ giữa nhiều luồng có thể được kiểm soát bằng cách sử dụng khái niệm đồng bộ hóa. Bằng cách sử dụng từ khóa synchronized. Chúng ta có thể đảm bảo rằng chỉ một luồng có thể sử dụng tài nguyên được chia sẻ tại một thời điểm và những luồng khác chỉ có thể kiểm soát tài nguyên khi nó đã được luồng hiện tại đang nẵm giữ thả ra.
Câu 40: Chúng ta có thể gọi hàm tạo của một lớp nhiều hơn một lần cho một đối tượng không?
Hàm tạo được gọi tự động khi chúng ta tạo một đối tượng bằng từ khóa new. Nó chỉ được gọi một lần cho một đối tượng tại thời điểm tạo đối tượng và do đó, chúng ta không thể gọi lại hàm tạo cho một đối tượng sau khi tạo đối tượng.
Câu 41: Chúng ta có thể có hai phương thức trong một lớp có cùng tên không?
Chúng ta có thể định nghĩa hai phương thức trong một lớp có cùng tên nhưng có số lượng / kiểu tham số khác nhau. Phương thức nào được gọi sẽ phụ thuộc vào các tham số được truyền vào. Hay còn gọi là method overloading.
Ví dụ
public class methodExample { public void print() { system.out.println("Print method without parameters."); } public void print(String name) { system.out.println("Print method with parameter"); } public static void main(String args[]) { methodExample obj1 = new methodExample(); obj1.print(); obj1.print("xx"); } }
Câu 42: Làm cách nào chúng ta có thể tạo bản sao của một đối tượng java?
Trong Java, để sao chép một đối tượng thì class này phải triển khai Cloneable interface và triển khai clone() method. Như vậy chúng ta có thể dễ dàng tạo một bảng sao của nó thông qua clone().
Câu 43: Lợi ích của việc sử dụng kế thừa là gì?
Lợi ích chính của việc sử dụng kế thừa là khả năng tái sử dụng của mã vì kế thừa cho phép các lớp con sử dụng lại mã của siêu lớp của nó. Tính đa hình (Khả năng mở rộng) là một lợi ích tuyệt vời khác cho phép giới thiệu chức năng mới mà không ảnh hưởng đến các lớp dẫn xuất hiện có.
Câu 44: Access modifier mặc định cho các biến và phương thức của một class là gì?
Các hàm, thuộc tính của class chỉ có thể được truy cập từ các class cùng package.
Câu 45: Cho một ví dụ về việc sử dụng Con trỏ trong Java.
Không có con trỏ nào trong Java. Vì vậy, chúng ta không thể sử dụng khái niệm con trỏ trong Java.
Câu 46: Sự khác biệt giữa Stack và Queue là gì?
Stack và Queue là một trong những collection phổ biến của Java dùng để lưu trữ tập dữ liệu có cấu trúc. Sự khác biệt cơ bản giữa stack và queue là stack dựa trên nguyên tắc Last in First out (LIFO) trong khi queue dựa trên nguyên tắc FIFO (First In First Out).
Câu 47: Trong Java, làm thế nào để loại bỏ một biến trong tuần tự hoá
Nếu chúng ta muốn các biến nhất định của một lớp không được tuần tự hóa, chúng ta có thể sử dụng từ khóa transient trong khi khai báo chúng. Ví dụ: biến trans_var bên dưới là một biến tạm thời và không thể được tuần tự hóa:
public class transientExample { private transient trans_var; // rest of the code }
Câu 48: Làm thế nào chúng ta có thể sử dụng các kiểu dữ liệu nguyên thủy làm đối tượng?
Các kiểu dữ liệu nguyên thủy như int có thể được xử lý như các đối tượng bằng cách sử dụng các wrapper class tương ứng củachúng. Ví dụ, Integer là một wrapper class cho kiểu dữ liệu nguyên thủy int. Chúng ta có thể áp dụng các phương thức khác nhau cho một lớp wrapper, giống như bất kỳ đối tượng nào khác.
Câu 49: Những loại ngoại lệ nào được bắt tại thời điểm biên dịch?
Checked exceptions có thể được bắt gặp tại thời điểm biên dịch chương trình. Checked exceptions hải được xử lý bằng cách sử dụng khối try catch trong mã để biên dịch thành công.
Câu 50: Chúng ta có thể sử dụng hàm khởi tạo mặc định khi đã có ít nhất một hàm khởi tạo được định nghĩa.
Java cung cấp một phương thức khởi tạo không đối số mặc định nếu không có phương thức khởi tạo rõ ràng nào được định nghĩa trong một lớp Java. Nhưng nếu một hàm tạo đã được định nghĩa, thì chúng ta không thể gọi hàm tạo mặc định này và nhà phát triển chỉ có thể sử dụng những hàm tạo đã được định nghĩa trong lớp.
Câu 51: Chúng ta có thể ghi đè một phương thức bằng cách sử dụng cùng một tên phương thức và các đối số nhưng kiểu trả về khác nhau không?
Điều kiện cơ bản của việc ghi đè phương thức là tên phương thức, các đối số cũng như kiểu trả về phải hoàn toàn giống với tên phương thức được ghi đè. Do đó, việc sử dụng một kiểu trả về khác sẽ không ghi đè một phương thức.
Câu 52: Đầu ra của đoạn mã sau là gì?
public class operatorExample { public static void main(String args[]) { int x = 4; system.out.println(x++); } }
Trong trường hợp này, toán tử postfix ++ được sử dụng để trả về giá trị đầu tiên và sau đó tăng dần. Do đó, đầu ra của nó sẽ là 4.
Câu 53: Một người nói rằng anh ta đã biên dịch thành công một lớp java mà không cần có phương thức main trong đó? Có khả thi không?
Tuy nhiên, phương thức main là một điểm vào của lớp Java và được yêu cầu để thực thi chương trình; một lớp được biên dịch thành công ngay cả khi nó không có phương thức chính. Nhưng nó không thể chạy được.
Câu 54: Chúng ta có thể gọi một phương thức không tĩnh từ bên trong một phương thức tĩnh không?
Các phương thức Non-Static được sở hữu bởi các đối tượng của một lớp và có phạm vi mức đối tượng và để gọi các phương thức non-Static từ một khối tĩnh (giống như từ một phương thức chính tĩnh), một đối tượng của lớp cần được tạo trước. Sau đó, sử dụng tham chiếu đối tượng, các phương thức này có thể được gọi.
Câu 55: Hai biến môi trường phải được đặt để chạy bất kỳ chương trình Java nào?
public class equalsTest { public static void main(String args[]) { String str1 = new String("Hello World"); String str2 = new String("Hello World"); if (str1.equals(str2)) { // this condition is true System.out.println("str1 and str2 are equal in terms of values"); } if (str1 == str2) { //This condition is true System.out.println("Both strings are referencing same object"); } else { // This condition is NOT true System.out.println("Both strings are referencing different objects"); } } }
Câu 63: Có thể định nghĩa một phương thức trong lớp Java nhưng cung cấp việc thực thi nó trong mã của một ngôn ngữ khác như C không?
Có, chúng tôi có thể làm điều này bằng cách sử dụng native method. Trong trường hợp phát triển dựa trên native method, chúng ta xác định các phương thức tĩnh công khai trong lớp Java của chúng tôi mà không cần triển khai nó và sau đó việc triển khai được thực hiện bằng một ngôn ngữ khác như C riêng biệt.
Câu 64: Các hàm hủy được định nghĩa như thế nào trong Java?
Trong Java, không có hàm hủy nào được định nghĩa trong class vì không cần phải làm như vậy. Java có cơ chế thu gom rác của riêng nó, thực hiện công việc tự động bằng cách hủy các đối tượng khi không còn được tham chiếu.
Câu 65: Một biến có thể là cục bộ và tĩnh cùng một lúc không?
Không có biến nào không thể tĩnh cũng như cục bộ cùng một lúc. Việc xác định một biến cục bộ là tĩnh gây ra lỗi biên dịch.
Câu 66: Trong interface có thể chứa static method được không?
Static method trong interface giống như các method trong class nó có đầy đủ mã triển khai. Static method tương tự như default method điểm khác biệt lớn nhất là static method chúng ta không thể override ở các class implement từ nó.
Câu 67: Trong lập trình luồng Java, phương pháp nào là phải triển khai cho tất cả các luồng?
Run () là một phương thức Runnable phải được thực hiện bởi tất cả các luồng.
Câu 68: Làm cách nào để lập trình viên có thể ném một ngoại lệ theo cách thủ công?
Để đưa ra một ngoại lệ trong một khối mã theo cách thủ công, từ khóa throw được sử dụng. Sau đó, ngoại lệ này được bắt và xử lý trong khối bắt
public void topMethod() { try { excMethod(); } catch (ManualException e) {} } public void excMethod { String name = null; if (name == null) { throw (new ManualException("Exception thrown manually "); } }
Câu 69: Làm thế nào các đối tượng được lưu trữ trong Java?
Trong java, mỗi đối tượng khi được tạo sẽ nhận được một không gian bộ nhớ từ bộ nhớ heap. Khi một đối tượng bị trình thu gom rác dọn dẹp, vùng nhớ này sẽ được giải phóng và heap có thể dùng nó để lưu trữ các object khác.
Câu 70: Điều gì xảy ra nếu một ngoại lệ không được xử lý trong một chương trình?
Nếu một ngoại lệ không được xử lý trong một chương trình sử dụng khối try catch, chương trình sẽ bị hủy bỏ, và sẽ không có thêm một mã lệnh nào được thực thi sau đó nữa.
Câu 71: Anonymous class nghĩa là gì?
Lớp ẩn danh là lớp được định nghĩa không có tên trong một dòng mã sử dụng từ khóa new.
public java.util.Enumeration testMethod() { return new java.util.Enumeration() { @Override public boolean hasMoreElements() { // TODO Auto-generated method stub return false; } @Override public Object nextElement() { // TODO Auto-generated method stub return null; } }
Câu 72: Local class là gì?
Câu 73: Lớp cơ sở của tất cả các lớp ngoại lệ là gì?
Trong Java, Java.lang.Throwable là siêu lớp của tất cả các lớp ngoại lệ và tất cả các lớp ngoại lệ đều bắt nguồn từ lớp cơ sở này.
Câu 74: Thứ tự gọi các hàm tạo trong kế thừa là gì?
rong trường hợp kế thừa, khi một đối tượng mới của một lớp dẫn xuất được tạo, đầu tiên phương thức khởi tạo của supper-class được gọi và sau đó phương thức khởi tạo của sub-class sẽ được gọi.
Câu 75: Lớp nào sau đây sẽ được cấp phát nhiều bộ nhớ hơn?
Class A: 3 methods, 4 variables
Class B: 5 methods, 3 variables
Bộ nhớ không được cấp phát trước khi tạo đối tượng. Vì đối với cả hai lớp, không có đối tượng nào được tạo nên không có bộ nhớ nào được cấp phát trên heap cho bất kỳ class nào
Nguồn tham khảo
https://www.guru99.com/java-interview-questions-answers.html