post-image

120 câu hỏi Java mà nhà tuyển dụng hay hỏi + đáp án

1. Tổng quan

Dưới đây là những câu hỏi mà nhà tuyển dụng hay hỏi khi đi phỏng vấn java, hãy ôn lại những câu hỏi này để có buổi phỏng vấn tốt nhất nhé.

1. Bạn hiểu gì về Đối tượng?

Đối tượng là một thực thể tại runtime, trạng thái của nó được lưu trữ trong các trường và hành vi được thể hiện thông qua các phương thức. Các phương thức vận hành trên trạng thái nội tại của đối tượng và đóng vai trò như là cơ chế chính để giao tiếp giữa các đối tượng với nhau.

2. Định nghĩa Lớp (class)?

Một lớp là một thiết kế (blueprint) từ đó các đối tượng riêng lẻ được tạo. Một lớp có thể chứa các trường và các phương thức để miêu tả hành vi của một đối tượng.

3. Class có thể chứa những kiểu biến nào?

Một lớp có thể gồm biến local, biến instance, và biến lớp.

4. Biến local hay biến cục bộ là gì?

Các biến được định nghĩa bên trong phương thức, constructor hoặc các khối được gọi là biến local. Biến này sẽ được khai báo và khởi tạo bên trong phương thức và nó sẽ bị hủy khi phương thức kết thúc.

5. Biến instance là gì?

Biến instance là các biến bên trong một lớp nhưng bên ngoài bất cứ phương thức nào. Những biến này được khởi tạo khi lớp được tải.

6. Biến lớp là gì?

Đây là các biến được khai báo với một lớp, bên ngoài bất cứ phương thức nào, với từ khóa static.

7. Lớp Singleton là gì?

Lớp Singleton trong Java kiểm soát việc tạo đối tượng, giới hạn số đối tượng là một nhưng nó cũng linh động khi cho phép bạn tạo nhiều đối tượng hơn nếu tình huống thay đổi.

8. Bạn hiểu gì về Contructor?

Contructor được gọi khi một đối tượng mới được tạo. Mỗi lớp có một Constructor. Nếu chúng ta không viết constructor cho lớp một cách tường minh, thì trình biên dịch Java sẽ xây dựng một Constructor mặc định cho lớp đó.

9. Giá trị mặc định của kiểu dữ liệu byte trong Java?

Giá trị mặc định của kiểu dữ liệu byte là 0.

10. Giá trị mặc định của kiểu dữ liệu float và double trong Java?

Giá trị mặc định của kiểu dữ liệu float và double trong Python khác với trong C/C++. Mặc định của float là 0.0f và của double là 0.0d.

11. Kiểu dữ liệu byte được sử dụng khi nào?

Kiểu dữ liệu này được sử dụng để lưu trữ không gian trong các mảng rộng, chủ yếu để thay thế cho các số nguyên, vì một byte nhỏ hơn 4 lần so với một int.

12. Biến static (biến tĩnh) là gì?

Các biến lớp cũng còn được biết đến với tên gọi là biến tĩnh (biến static) được khai báo với từ khóa static trong một lớp, nhưng nằm ngoài một phương thức, constructor hoặc một khối.

13. Bạn hiểu gì về Access Modifier?

Java cung cấp một số Access Modifier để thiết lập mức độ truy cập cho các lớp, các biến, phương thức và constructor. Một thành viên có khả năng truy cập mặc định khi không có Access Modifier nào được xác định.

14. Protected Access Modifier là gì?

Các biến, phương thức và constructor, mà được khai báo protected trong một lớp cha (superclass), chỉ được truy cập bởi các lớp cha trong package khác hoặc bất kỳ lớp nào bên trong package đó của lớp được protected.

15. Synchronized Non Access Modifier là gì?

Java cung cấp Synchronized Non Access Modifier để mang tới những tính năng khác ngoài Access Modifier, từ Synchronized chỉ ra rằng một phương thức chỉ được truy cập bởi một luồng tại một thời điểm.

16. Theo quyền ưu tiên của các toán tử trong Java, toán tử nào có quyền ưu tiên cao nhất?

Các toán tử postfix như (), [], . là có quyền ưu tiên cao nhất.

17. Các biến được sử dụng trong lệnh switch có thể được sử dụng với kiểu dữ liệu nào?

Các biến được sử dụng trong một lệnh switch chỉ có thể là một byte, string, enum, short, int hoặc char.

18. Khi nào phương thức parseInt() có thể được sử dụng?

Phương thức này được sử dụng để lấy kiểu dữ liệu gốc của một chuỗi nhất định.

19. Tại sao lớp String được coi như là bất biến (Immutable)?

Lớp String là bất biến hay không thể thay đổi, và khi nó đã được tạo, một đối tượng String không thể bị biến đổi. Do String là bất biến, nên nó có thể được chia sẻ an toàn giữa nhiều luồng. Điều này là một phần rất quan trọng cho lập trình đa luồng.

20. Tại sao StringBuffer được gọi là khả biến?

Các đối tượng StringBuffer có thể sửa đổi. Nếu có một tình huống bạn cần tạo nhiều sửa đổi đến các chuỗi ký tự thì nên sử dụng StringBuffer.

21. Sự khác nhau giữa hai lớp StringBuffer và StringBuilder?

Sử dụng StringBuilder bất cứ khi nào có thể bởi vì nó nhanh hơn StringBuffer. Nhưng, nếu an toàn luồng (Thread Safety) là cần thiết, thì bạn nên sử dụng các đối tượng StringBuffer.

22. Package nào được sử dụng để so khớp mẫu (Pattern Matching) với Regular Expression trong Java?

Để sử dụng cho mục đích này, bạn dùng package java.util.regex.

23. java.util.regex gồm các lớp nào?

java.util.regex gồm ba lớp: lớp Pattern, lớp Matcher và lớp PatternSyntaxException.

24. Phương thức finalize() làm gì?

Có thể định nghĩa một phương thức mà sẽ được gọi ngay trước khi hủy đối tượng bởi Garbage Collector (Trình dọn rác). Phương thức này được gọi là finalize(), và nó có thể được sử dụng để bảo đảm rằng đã hoàn toàn kết thúc một đối tượng.

25. Exception (Ngoại lệ) là gì?

Một Exception là một vấn đề được tạo ra trong khi thực thi một chương trình. Các Exception được bắt bởi Handler được xác định cùng với lời gọi phương thức của Thread.

26. Bạn biết gì về Checked Exception?

Đặc trưng của loại Exception này là một lỗi người dùng hoặc một vấn đề không thể biết trước bởi lập trình viên. Ví dụ, nếu một file đã được mở, nhưng không tìm thấy file đó, thì một Exception xuất hiện. Những Exception này không thể được bỏ qua một cách đơn giản tại thời điểm biên dịch.

27. Giải thích Runtime Exception?

Nó là một Exception mà có thể được tránh bởi lập trình viên. Trái ngược với Checked Exception, các Runtime Exception bị bỏ qua tại thời điểm biên dịch.

28. Lớp Exception có hai lớp con nào?

Lớp Exception có hai lớp con chính là: lớp IOException và lớp RuntimeException.

29. Khi nào từ kháo throws được sử dụng?

Nếu một phương thức không xử lý một Checked Exception, phương thức phải được khai báo với từ khóa throws. Từ khóa throws xuất hiện ở phần cuối một phương thức.

30. Khi nào từ khóa throw được sử dụng?

Một Exception có thể được ném, hoặc bởi được khởi tạo hoặc một Exception mà bạn vừa bắt, bởi sử dụng từ khóa throw.

31. Cách finally được sử dụng dưới Exception Handling?

Từ khóa finally được sử dụng để tạo một khối code mà theo sau một khối try. Một khối finally luôn luôn thực thi, dù có xuất hiện một Exception hay không.

32. Bạn nên ghi nhớ điều gì trong khi tạo Exception cho riêng mình trong Java?

Trong khi tạo riêng cho mình các Exception:

  • Tất cả Exception phải là con của Throwable.
  • Nếu bạn muốn viết một Checked Exception mà tự động được tuân theo bởi Handler hoặc Declare Rule (Qui tắc khai báo và xử lý ngoại lệ), thì bạn cần kế thừa lớp Exception.
  • Nếu bạn muốn viết một Runtime Exception, bạn cần kế thừa lớp RuntimeException.

33. Tính kế thừa (Inheritance) là gì?

Nó là một tiến trình mà một đối tượng thu được các thuộc tính của đối tượng khác. Sử dụng tính kế thừa, bạn có thể quản lý dễ dàng hơn với thông tin được tạo ra trong một cấu trúc có thứ bậc.

34. Sử dụng từ khóa super khi nào?

Nếu phương thức ghi đè một trong các phương thức của lớp cha, thì phương thức bị ghi đè có thể được triệu hồi thông qua việc sử dụng từ khóa super. Nó cũng có thể được sử dụng để tham chiếu một trường bị ẩn.

35. Định nghĩa tính đa hình (Polymorphism)?

Tính đa hình là khả năng giúp cho một đối tượng có nhiều hình thái. Trong OOP, sự sử dụng phổ biến nhất của tính đa hình là khi một tham chiếu lớp cha được sử dụng để tham chiếu tới một đối tượng lớp con.

36. Tính trừu tượng (Abstraction) là gì?

Nó liên quan tới khả năng tạo một lớp trừu tượng (lớp abstract) trong OOP. Nó giúp giảm thiểu sự phức tạp và cũng cải thiện khả năng duy trì của hệ thống.

37. Lớp Abstract là gì?

Những lớp này không thể được khởi tạo và được triển khai hoặc một phần hoặc không. Lớp này chứa một hoặc nhiều phương thức abstract, mà phần khai báo phương thức được đơn giản hóa với việc không có phần thân.

38. Khi nào phương thức abstract được sử dụng?

Nếu bạn muốn một lớp chứa một phương thức cụ thể nhưng bạn muốn trình triển khai thực sự của phương thức đó được quyết định bởi các lớp con, bạn có thể khai báo phương thức trong lớp cha ở dạng abstract.

39. Tính bao đóng (Encapsulation) là gì?

Nó là một kỹ thuật tạo các trường trong một lớp private và cung cấp truy cập tới các trường thông qua các phương thức public. Nếu một trường được khai báo là private,, nó không thể được truy cập bởi bất cứ phương thức nào bên ngoài lớp đó, từ đó ẩn các trường bên trong lớp. Vì thế, tính bao đóng cũng được xem như là Data hiding (ẩn dữ liệu).

40. Lợi ích chính của tính bao đóng?

Lợi thế chủ yếu của tính bao đóng là khả năng để sửa đổi các code đã được triển khai của bạn mà không phá hủy phần code của ai đó. Nó như là tấm bảo vệ code và tránh code và dữ liệu của bạn bị truy cập một cách ngẫu nhiên từ code bên ngoài. Tính bao đóng cung cấp cho code tính duy trì, tính linh động, và mở rộng.

41. Interface là gì?

Một Interface là một tập hợp các phương thức abstract. Một lớp triển khai một Interface, từ đó kế thừa các phương thức abstract của Interface đó.

42. Một số đặc điểm của Interface?

Bao gồm:

  • Interface không thể được khởi tạo.
  • Một Interface không chứa bất cứ Constructor nào.
  • Tất cả phương thức trong một Interface là Abtract.

43. Trong Java, Package là gì?

Một Package có thể được định nghĩa như là một nhóm các kiểu (lớp, interface, kiểu liệt kê) có liên quan với nhau, cung cấp bảo vệ truy cập và trình quản lý namespace.

44. Tại sao Package được sử dụng?

Package được sử dụng trong Java để ngăn ngừa các xung đột khi đặt tên, để điều khiển truy cập, để tìm kiếm và xác định vị trí, và để sử dụng các lớp, Interface, kiểu liệt kê … dễ dàng hơn.

45. Bạn hiểu gì về Đa luồng (Multi-Thread)?

Một chương trình đa luồng bao gồm hai hoặc nhiều phần mà có thể chạy đồng thời. Mỗi phần của chương trình đó được gọi là một Thread, và một Thread xác định một trình thực thi khác nhau.

46. Thread có thể được tạo bằng hai cách nào?

Thread có thể được tạo bởi: triển khai Runable Interface, kế thừa lớp Thread.

47. Applet là gì?

Một Applet (vi mã) là một chương trình Java mà chạy trong một trình duyệt Web. Một Applet có thể là một ứng dụng Java đầy đủ tính năng bởi vì nó có toàn bộ Java API trong bố trí của nó.

48. Một Applet kế thừa lớp nào?

Một Applet kế thừa lớp java.applet.Applet.

49. Giải thích trình dọn rác (Garbage Collector) trong Java?

Java sử dụng trình dọn rác để giải phóng bộ nhớ. Bằng việc xóa bỏ các đối tượng mà không còn được sử dụng bởi bất cứ chương trình nào.

50. Định nghĩa đối tượng không thể biến đổi?

Một đối tượng không thể biến đổi (immutable object) là không thể bị thay đổi từ khi nó được tạo.

51. Giải thích sự sử dụng của this() với các Constructor?

Nó được sử dụng với các biến hoặc phương thức và được sử dụng để gọi Constructor của cùng lớp đó.

52. Bạn biết gì về Set Interface?

Nó là một tập hợp phần tử mà không thể chứa bản sao các phần tử. Set Interface chỉ bao gồm các phương thức được kế thừa từ Collection và bổ sung thêm các giới hạn về ngăn cấm bản sao phần tử xuất hiện.

53. Trình bày TreeSet?

Nó là một Set được triển khai khi chúng ta muốn các phần tử trong một thứ tự được sắp xếp.

54. Comparable Interface là gì?

Nó được sử dụng để sắp xếp các Collection và các mảng đối tượng bởi sử dụng phương thức collection.sort() và java.utils. Các đối tượng của lớp triển khai Comparable Interface có thể được sắp xếp.

55. Điểm khác nhau giữa throws và throw?

Bao gồm:

  • Throw được sử dụng để kích hoạt một Exception trong khi throws được sử dụng trong khai báo của Exception.
  • Không có throw, Checked Exception không thể được xử lý, trong khi throws được sử dụng để biểu thị những Exception không được xử lý bởi hàm.

56. Giải thích dòng code sau bằng ngôn ngữ Java?

public static void main (String args[ ])

Dưới đây là phần giải tích chi tiết:

  • public − nó là Access Specifier.
  • static − nó cho phép main() để được gọi mà không cần khởi tạo một Instance cụ thể của một lớp.
  • void − nó thông báo cho Compiler rằng không có giá trị nào được trả về bởi main().
  • main() − phương thức này được gọi ở phần đầu chương trình Java.
  • String args[ ] − tham số args là một mảng thể hiện của lớp String.

57. JRE (Java Runtime Environment) là gì?

JRE là một trình triển khai của Java Virtual Machine mà thực thi các chương trình Java. Nó cung cấp các điều kiện tối thiểu để thực thi một ứng dụng Java.

58. JAR file là gì?

JAR là viết tắt của Java Archive và nó kết hợp nhiều file lại thành một. Nó giữ các lớp Java trong một thư viện. JAR file được xây dựng trên định dạng ZIP file và có đuôi là .jar.

59. WAR file là gì?

Đây là Web Archive File và được sử dụng để lưu trữ XML, các lớp Java, và JavaServer pages, mà được sử dụng để phân phối một tập hợp các JavaServer Page, Java Servlet, các lớp Java, XML file, Webpage tĩnh, …

60. Định nghĩa JIT Compiler?

Nó cải thiện hiệu suất runtime của các chương trình máy tính dựa trên Bytecode.

62. Có cần thiết phải nhập java.lang package không?

Không. Nó được tải theo mặc định bởi JVM.

63. Lớp cao nhất được lồng là gì?

Nếu một lớp được khai báo bên trong một lớp và xác định Static Modifier, bộ biên dịch xem lớp đó giống như bất cứ lớp cao nhất nào khác. Lớp cao nhất bị lồng là một lớp Inner.

64. Trình bày Externalizable Interface?

Externalizable là một Interface chứa hai phương thức readExternal và writeExternal. Hai phương thức này cung cấp cho bạn một điều khiển thông qua kỹ thuật Serialization.

65. Khối finally sẽ vẫn thực thi nếu như có System.exit(0); được viết ở cuối khối try?

Trong trường hợp này, khối finaaly sẽ không thực thi, bởi vì khi bạn cung cấp System.exit(0); thì điều khiển ngay lập tức thoát khỏi chương trình đó, và vì thế khối finally này sẽ không bao giờ thực thi.

66. Bạn hiểu gì về Daemon Thread?

Daemon Thread là một Thread có quyền ưu tiên thấp, chạy không liên tục trong Background thực hiện hoạt động của trình dọn rác cho Java Runtime System.

67. Phương thức được sử dụng để tạo Daemon Thread?

Phương thức setDaemon được sử dụng để tạo một Daemon Thread.

68. Tất cả Thread phải triển khai phương thức nào?

Tất cả tác vụ phải triển khai phương thức run().

69. Lớp GregorianCalendar là gì?

Lớp GregorianCalendar cung cấp sự hỗ trợ Western Calendar truyền thống.

70. Bạn hiểu gì về lớp SimpleTimeZone?

Lớp SimpleTimeZone cung cấp sự hỗ trợ cho một Gregorian Calendar.

71. Điểm khác nhau giữa hai tham số size và capacity của một Vector?

Tham số size là số phần tử thực sự được lưu giữ trong Vector đó, trong khi capacity là số phần tử tối đa nó có thể lưu giữ tại một thời điểm nào đó.

73. Một Vector có thể chứa các đối tượng hỗn tạp không?

Có, một Vector có thể chứa các đối tượng hỗn tạp. Bởi vì một Vector lưu trữ mọi thứ theo khái niệm Đối tượng.

74. Trình bày Enumeration?

Một Enumeration là một Interface chứa các phương thức để truy cập cấu trúc dữ liệu lớp dưới mà từ đó Enumeration được thu nhận. Nó cho phép sự truy cập liên tiếp tới tất cả phần tử được lưu trữ trong Collection đó.

75. Path và Classpath khác nhau ở điểm nào?

Cả Path và Classpath đều là các biến môi trường của hệ điều hành. Path là các định nghĩa từ đó hệ thống có thể tìm thấy các file có thể thực thi (với đuôi .exe) và Classpath được sử dụng để xác định vị trí của .class file.

76. Một lớp được khai báo là private có thể được truy cập từ bên ngoài package của nó không?

Không.

77. Ràng buộc nào phải được tuân theo trên một phương thức static hoặc một khối static?

Một phương thức static không nên tham chiếu tới các biến instance mà không tạo một instance và không thể sử dụng toán tử this để tham chiếu Instance đó.

78. Một Interface có thể kế thừa Interface khác không?

Có. Một Interface có thể kế thừa Interface khác, từ đó một Interface có thể kế thừa nhiều hơn một Interface.

79. Ghi đè và nạp chồng là dựa trên khái niệm hướng đối tượng nào?

Đó là tính đa hình (Polymorphism)

80. Constructor có thể được kế thừa không?

Không, Constructor không thể bị kế thừa.

81. Lợi thế của ArrayList so với các mảng?

ArrayList có thể tự động tăng kích cỡ và cung cấp một kỹ thuật chèn và tìm kiếm mạnh mẽ hơn khi so sánh với mảng thông thường.

82. Hoạt động xóa trong LinkedList là nhanh hơn trong ArrayList, tại sao?

Hoạt động xóa trong LinkedList là nhanh hơn bởi vì nó chỉ bao gồm việc cập nhật con trỏ kế tiếp trong node trước node bị xóa và cập nhật con trỏ đằng trước trong node sau node bị xóa.

83. Bạn quyết định khi nào sử dụng ArrayList và LinkedList?

Nếu bạn cần thường xuyên thêm và xóa các phần tử từ giữa danh sách và chỉ truy cập các phần tử theo dãy, thì LinkedList nên được sử dụng. Nếu bạn cần hỗ trợ truy cập ngẫu nhiên, mà không chèn hoặc xóa các phần tử từ bất kỳ vị trí nào khác ngoài vị trí cuối, thì nên sử dụng ArrayList.

84. Một Values Collection View là gì?

Nó là một Collection được trả về bởi phương thức values() của Map Interface. Nó bao gồm tất cả đối tượng hiện diện như là các value trong Map đó.

85. Dot Operator (Toán tử .) là gì?

Dot Operator được sử dụng để truy cập các biến và phương thức instance của các đối tượng lớp. Nó cũng được sử dụng để truy cập các lớp, các package con từ một Package.

86. Bạn có thể sử dụng Private Constructor ở đâu và như thế nào?

Constructor dạng private được sử dụng nếu bạn không muốn các lớp khác khởi tạo đối tượng và để ngăn cản việc xuất hiện các lớp con.

87. Type Casting (Ép kiểu) là gì?

Type Casting (Ép kiểu) nghĩa là xem một biến ở một kiểu này như thể nó là kiểu khác.

88. Miêu tả vòng đời (Life Cycle) của Thread?

Một Thread là một sự thực thi trong một chương trình. Vòng đời của Thread bao gồm:

  • Trạng thái Newborn
  • Trạng thái Runnable
  • Trạng thái Running
  • Trạng thái Blocked
  • Trạng thái Dead

89. Điểm khác nhau giữa lệnh break và lệnh continue?

Lệnh break chấm dứt một lệnh mà nó áp dụng (switch, for, do, hoặc while). Một lệnh continue được sử dụng để kết thúc vòng lặp hiện tại và trả về điều khiển cho lệnh vòng lặp.

90. Nếu một biến được khai báo là private, thì nó có thể được truy cập trong phạm vi nào?

Biến private chỉ có thể được truy cập bên trong lớp mà nó được khai báo.

91. Mục đích của lớp System?

Mục đích của lớp System là cung cấp truy cập tới nguồn hệ thống.

92. Liệt kê các kiểu gốc trong Java?

Có 8 kiểu dữ liệu gốc trong Java là byte, char, short, int, long, float, double và Boolean.

93. Mối quan hệ giữa Clipping và Repainting dưới AWT?

Khi một cửa sổ được repaint bởi AWT Thread, nó thiết lập các khu vực Clipping thành khu vực của cửa sổ mà cần Repainting.

94. Lớp nào là lớp cha gần nhất (trực tiếp) của lớp Container?

Lớp Component là lớp cha gần nhất.

95. Lớp Exception nào được tạo bởi Java runtime?

Java runtime tạo các RuntimeException và Error.

96. Dưới các điều kiện nào thì một phương thức finalize() của đối tượng được triệu hồi bởi trình dọn rác (Garbage Collector)?

Trình dọn rác triệu hồi một phương thức finalize() của đối tượng khi nó phát hiện rằng đối tượng đã thất bại.

97. Một Thread đã chết có thể được restart lại như thế nào?

Một Thread đã chết không thể restart lại được.

98. Các toán tử số học nào có thể gây ra sự kiện ném một ArithmeticException?

Phép chia / và lấy phần dư % số nguyên có thể gây ra sự kiện ném một ArithmeticException.

99. Biến kiểu Boolean được tự động khởi tạo với giá trị?

Giá trị mặc định của kiểu Boolean là false.

100. Các lệnh try có thể lồng nhau không?

Có.

101. ClassLoader là gì?

ClassLoader là một đối tượng mà đảm nhiệm việc tải các lớp. Lớp ClassLoader là một lớp abstract.

102. Điểm khác nhau giữa một Interface và một lớp Abstract?

Một lớp Abstract là một lớp có thể có các phương thức instance mà triển khai một hành vi mặc định. Một Interface chỉ có thể khai báo các hằng và các phương thức instance, nhưng không thể triển khai hành vi mặc định và tất cả phương thức là abstract ngầm định. Một Interface có tất cả thành viên public và không có trình triển khai.

103. Điều gì xảy ra nếu Static Modifier bị gỡ bỏ từ phương thức main?

Chương trình ném lỗi NoSuchMethodError tại runtime.

104. Giá trị mặc định của một tham chiếu đối tượng được khai báo như là một biến instance?

Giá trị Null, trừ khi nó được khai báo tường minh.

105. Lớp cao nhất có thể là private hoặc protected không?

Không, một lớp cao nhất không thể là private hoặc protected. Nó chỉ có thể là public hoặc không có modifier nào.

106. Tại sao chúng ta cần các lớp wrapper?

Chúng ta có thể truyền chúng ở dạng các tham số phương thức khi một phương thức chờ đợi một đối tượng. Nó cũng cung cấp các phương thức tiện ích.

107. Điểm khác nhau giữa Error và Exception?

Một Error là một điều kiện không thể cứu chữa xuất hiện tại runtime, ví dụ OutOfMemory error. Các Exception là các điều kiện mà xuất hiện là do input không phù hợp, hoặc sai, … ví dụ FileNotFoundException sẽ bị ném nếu file đã cho không tồn tại.

108. Có cần thiết để mỗi khối try phải được theo sau bởi một khối catch không?

Không cần thiết để mỗi khối try phải được theo sau bởi một khối catch. Mỗi khối try nên được theo sau bởi hoặc một khối catch hoặc một khối finally.

109. Khi một Thread được tạo và bắt đầu, trạng thái ban đầu (initial state) của nó là gì?

Một Thread sau khi được tạo và được bắt đầu, nó trong trạng thái sẵn sàng (ready state).

110. Lớp Locale là gì?

Lớp Locale được sử dụng để thiết kế đầu ra output của chương trình theo các qui ước của một khu vực địa lý, chính trị, hoặc văn hóa cụ thể.

111. Phương thức synchronized và lệnh synchronized là gì?

Các phương thức synchronized là các phương thức được sử dụng để điều khiển truy cập tới một đối tượng. Một lệnh synchronized có thể chỉ được thực thi sau khi một Thread đã thu được lock cho đối tượng hoặc lớp được tham chiếu trong lệnh synchronized đó.

112. Điểm khác nhau giữa Constructor và các phương thức khác?

Constructor phải có cùng tên với tên lớp và không thể trả về một giá trị. Chúng chỉ được gọi trong khi các phương thức thông thường có thể được gọi nhiều lần.

113. Có bất kỳ giới hạn nào khi sử dụng Tính kế thừa (Inheritance)?

Có, khi tính kế thừa là kế thừa mọi thứ từ lớp cha và cả Interface, nhưng đôi khi nó có thể tạo ra đột biến (error-prone) với việc ghi đè động và nạp chồng động trong một số tình huống.

114. Khi nào ArrayStoreException được ném?

Khi sao chép các phần tử giữa các mảng khác nhau, nếu tham số source hoặc tham số đích đến không là các mảng hoặc kiểu của chúng là không tương thích, thì khi đó một ArrayStoreException sẽ được ném.

115. Bạn có thể gọi một Constructor này từ Constructor khác nến một lớp có nhiều Constructor không?

Có, sử dụng cú pháp this().

116. Phương thức sleep() và wait() khác nhau ở điểm nào?

Ví dụ, sleep(2000); làm Thread đợi đúng 2 giây. Trong khi wait(2000); làm thời gian Thread chờ có thể lên tới 2 giây. Một Thread có thể dừng việc chờ đợi sớm hơn nếu nó nhận một lời gọi notify() hoặc notifyAll(). Phương thức wait() được định nghĩa trong lớp Object và phương thức sleep() được định nghĩa trong lớp Thread.

117. ArithmeticException được ném khi nào?

ArithmeticException được ném khi chia số nguyên cho số 0 hoặc lấy phần dư của phép chia cho số 0. Nó không bao giờ được ném trong các phép toán về số thực.

118. Một biến là transient (tạm thời) là gì?

Một biến transient là một biến mà không thể được xếp theo thứ tự trong Serialization và nó được khởi tạo bởi giá trị mặc định của nó trong Deserialization.

119. Synchronization (Đồng bộ hóa) là gì?

Synchronization là khả năng điều khiển truy cập của nhiều Thread tới nguồn đã chia sẻ. Từ khóa synchronized trong Java cung cấp locking để đảm bảo sự truy cập tương hỗ mang tính loại trừ của nguồn đã chia sẻ và ngăn cản Data Race (Tranh đoạt dữ liệu).

120. Biến static và biến non-static khác nhau ở điểm nào?

Biến static (biến tĩnh) được gắn kết với toàn bộ lớp chứ không phải là instance của một lớp. Các biến non-static nhận các giá trị duy nhất với một sự thể hiện đối tượng.

Leave a Reply

Your email address will not be published. Required fields are marked *