Nếu bạn đã từng chuẩn bị cho một cuộc phỏng vấn cho vị trí lập trình viên Java hoặc tham gia bất kỳ kỳ thi nào (không nhất thiết là về lập trình) để lấy chứng chỉ, thì rất có thể bạn đã nhận thấy rằng các câu hỏi họ hỏi rất cụ thể. Nhiều trong số chúng khiến bạn phải suy nghĩ về cấu trúc của ngôn ngữ, một số được thiết kế cho kiến thức sâu. Ngoài ra còn có những thứ giống như câu đố hoặc liên quan đến các sắc thái rất khó cảm nhận nếu không thực hành. Trong bài viết này, nhà phát triển Saraans Singh cung cấp một số câu hỏi Java như vậy. Tất nhiên là có câu trả lời. 1. Điều gì xảy ra nếu bạn đặt câu lệnh return hoặc System.exit() trong khối try/catch? Đây là một câu hỏi "bắt kịp" rất phổ biến trong Java. Bí quyết là nhiều lập trình viên tin rằng khối này
finally
sẽ được thực thi trong mọi trường hợp. Câu hỏi này thách thức khái niệm này bằng cách đặt một câu lệnh return
trong một khối try/catch
hoặc gọi từ một khối try/catch
câu lệnh System.exit ()
. Câu trả lời cho câu hỏi khó này: khối finally
sẽ được thực thi khi một câu lệnh được đặt return
trong một khối try/catch
và sẽ không được thực thi khi được gọi từ một khối try/catch
câu lệnh System.exit ()
. 2. Java có hỗ trợ đa kế thừa không? Đây là một câu hỏi rất khó khăn. Người phỏng vấn thường nói: nếu C++ có thể hỗ trợ đa kế thừa trực tiếp thì tại sao Java lại không? Câu trả lời phức tạp hơn một chút so với vẻ ngoài của nó, vì Java hỗ trợ kế thừa nhiều kiểu, bởi vì một giao diện trong đó có thể mở rộng các giao diện khác. Nhưng ngôn ngữ Java không hỗ trợ đa kế thừa các triển khai. 3. Trong trường hợp một phương thức ném ngoại lệ NullPointerException
vào lớp cha, liệu phương thức đó có thể ghi đè nó bằng phương thức ném ngoại lệ đó không RuntimeException
? Một câu hỏi phức tạp khác liên quan đến khái niệm quá tải và ghi đè. Trả lời: Bạn có thể ném một ngoại lệ của lớp cha một cách an toàn vào một phương thức được ghi đè NullPointerException – RuntimeException
, nhưng bạn không thể làm điều tương tự với một ngoại lệ được kiểm tra thuộc loại Exception
. 4. Làm thế nào để đảm bảo rằng các luồng có thể truy cập tài nguyên mà không bị bế tắc? N
N
Nếu bạn không giỏi viết mã đa luồng thì câu hỏi này sẽ thực sự khó đối với bạn. Nó có thể là thách thức ngay cả đối với một lập trình viên giàu kinh nghiệm, người chưa từng giải quyết các bế tắc và điều kiện đua. Bí quyết ở đây là ở thứ tự: bế tắc có thể được ngăn chặn bằng cách giải phóng tài nguyên theo thứ tự ngược lại với thứ tự chúng được mua. 5. Sự khác biệt giữa các lớp StringBuffer
và StringBuilder
trong ngôn ngữ Java là gì? Một câu hỏi kinh điển về ngôn ngữ Java, được một số nhà phát triển cho là khó nhưng một số khác lại cho là rất đơn giản. Lớp này StringBuilder
được giới thiệu trong JDK 1.5 và điểm khác biệt duy nhất giữa chúng là các phương thức của lớp StringBuffer
, chẳng hạn như length()
hoặc capacity()
, append()
được đồng bộ hóa, trong khi các phương thức tương ứng của lớp StringBuilder
thì không. Vì sự khác biệt cơ bản này nên việc nối chuỗi StringBuilder
sẽ nhanh hơn với StringBuffer
. Trên thực tế, StringBuffer
điều này không được khuyến khích sử dụng vì trong 99% trường hợp sử dụng, việc nối chuỗi được thực hiện trên cùng một luồng. 6. Biểu thức 1.0/0.0 trả về kết quả gì? Liệu nó có đưa ra một ngoại lệ hoặc gây ra lỗi biên dịch không? Một câu hỏi khó khác về lớp học Double
. Mặc dù các nhà phát triển Java biết đến kiểu dữ liệu đơn giản double và lớp Double
, nhưng khi thực hiện các phép toán dấu phẩy động, họ không chú ý đầy đủ đến Double.INFINITY
, NaN
, -0.0
và các quy tắc chi phối các phép tính số học liên quan đến chúng. Câu trả lời cho câu hỏi này rất đơn giản: không có ngoại lệ nào ArithmeticException
được đưa ra, giá trị sẽ được trả về Double.INFINITY
. 7. Điều gì xảy ra nếu bạn cố gắng chèn HashMap
một đối tượng khóa vào một đối tượng khóa đã tồn tại trong đó? Câu hỏi khó này là một phần của một câu hỏi thường gặp khác: chúng hoạt động như thế nào HashMap
trong Java? HashMap
là một chủ đề phổ biến dành cho những câu hỏi khó hiểu và phức tạp về ngôn ngữ Java. Câu trả lời là nếu bạn cố lắp lại một khóa vào HashMap
, nó sẽ thay thế khóa cũ vì lớp HashMap
không cho phép các khóa trùng lặp. Và cùng một khóa có nghĩa là cùng một mã băm, vì vậy nó sẽ kết thúc ở cùng một vị trí trong phân đoạn băm. Dựa trên tài liệu từ Quora
GO TO FULL VERSION