Bạn đang tìm câu hỏi phỏng vấn java. Bạn cần tìm công việc liên quan đến lập trình. Cùng Chợ Việc tốt tìm hiểu câu hỏi phỏng vấn java chất nhé .
1) Java là gì?
Java là ngôn ngữ lập trình cấp cao, hướng đối tượng, mạnh mẽ, bảo mật, độc lập với nền tảng, hiệu suất cao, đa luồng và ngôn ngữ lập trình di động. Nó được phát triển bởi James Gosling vào tháng 6 năm 1991. Nó cũng có thể được gọi là một nền tảng vì nó cung cấp JRE và API của riêng nó.
2) Danh sách Liệt kê các đặc điểm của ngôn ngữ lập trình Java.
có các tính năng sau trong ngôn ngữ lập trình Java.
Đơn giản: Java rất dễ học. Cú pháp của Java dựa trên C ++, giúp viết chương trình dễ dàng hơn.
Hướng đối tượng: Java tuân theo mô hình hướng đối tượng cho phép chúng ta duy trì mã như một thành phần của các loại đối tượng khác nhau kết hợp dữ liệu và dữ liệu, dữ liệu và hành vi.
Portable: Java hỗ trợ phương thức đọc-một lần-ghi-ở mọi nơi. Chúng ta có thể thực thi các chương trình Java trên bất kỳ máy nào. Các chương trình Java (.java) được chuyển đổi thành bytecode (.Class), có thể dễ dàng chạy trên bất kỳ máy nào.
Tính độc lập của nền tảng: Java là một ngôn ngữ lập trình độc lập với nền tảng. Nó khác với các ngôn ngữ lập trình khác như C và C ++ yêu cầu thực thi nền tảng. Java đi kèm với một nền tảng thực thi mã của nó. Java không phụ thuộc vào hệ điều hành đang được thực thi.
An toàn: Java an toàn vì nó không sử dụng con trỏ rõ ràng. Java cũng cung cấp khái niệm mã bytecode và xử lý ngoại lệ để làm cho nó an toàn hơn.
Mạnh mẽ: Java là một ngôn ngữ lập trình mạnh mẽ vì nó sử dụng khả năng quản lý bộ nhớ mạnh mẽ. Các khái niệm như thu gom rác tự động, xử lý ngoại lệ, v.v. làm cho nó trở nên mạnh mẽ hơn.
Kiến trúc trung lập: Java là trung lập về kiến trúc vì nó độc lập về kiến trúc. Trong C, kích thước của các kiểu dữ liệu có thể thay đổi tùy thuộc vào kiến trúc (32-bit hoặc 64-bit), không tồn tại trong Java.
Giải thích: Java sử dụng trình thông dịch và biên dịch đúng lúc (JIT) để thực thi các chương trình.
Hiệu suất cao: Java nhanh hơn các ngôn ngữ lập trình truyền thống khác vì bytecode của Java “gần” hơn với mã gốc. Nó vẫn chậm hơn một chút so với các ngôn ngữ biên dịch như C ++.
Đa luồng: Chúng ta có thể viết các chương trình Java xử lý nhiều tác vụ cùng lúc bằng cách xác định nhiều luồng. Ưu điểm chính của đa luồng là nó không chiếm bộ nhớ cho mỗi luồng. Nó chia sẻ một vùng bộ nhớ chung. Chủ đề rất quan trọng đối với đa phương tiện, ứng dụng web và hơn thế nữa.
Distributed: Java được phân phối vì nó giúp người dùng dễ dàng tạo các ứng dụng phân tán trong Java. RMI và EJB được sử dụng để tạo các ứng dụng phân tán. Tính năng này của Java giúp bạn có thể truy cập tệp bằng các phương thức gọi từ bất kỳ máy nào trên Internet.
Dynamic: Java là một ngôn ngữ động. Nó hỗ trợ tải động các lớp. Điều này có nghĩa là các lớp được tải theo yêu cầu. Nó cũng hỗ trợ các chức năng từ ngôn ngữ mẹ đẻ của nó (tức là C và C ++).
3) Bạn biết bao nhiêu về Java Virtual Cỗ máy?
Máy ảo Java là một máy ảo cho phép máy tính chạy các chương trình Java. JVM hoạt động như công cụ thời gian chạy, gọi phương thức chính có trong mã Java. JVM được thực hiện trong một hệ thống máy tính. Mã Java được JVM biên dịch thành Bytecode độc lập với máy và gần như nguyên bản.
4) sự khác biệt Mối quan hệ giữa JDK, JRE và JVM?
a) JVM
JVM là từ viết tắt của Java Virtual Machine, là một máy trừu tượng cung cấp môi trường chạy trong đó Java bytecode có thể thực thi. Đây là đặc điểm kỹ thuật hoạt động của Máy ảo Java. Việc triển khai nó được cung cấp bởi Oracle và các công ty khác. Việc thực hiện nó được gọi là JRE.
JVM có sẵn cho nhiều nền tảng phần cứng và phần mềm (vì vậy JVM phụ thuộc vào nền tảng). Nó là cá thể thời gian chạy được tạo khi chúng ta chạy lớp java. Ba khái niệm của JVM: đặc tả, thực hiện, phiên bản.
b) JRE
JRE là viết tắt của Java Runtime Environment. Đây là triển khai JVM. Java Runtime Environment là một bộ công cụ phần mềm để phát triển các ứng dụng Java. Nó được sử dụng để cung cấp môi trường thời gian chạy. Đây là triển khai JVM. Nó tồn tại về mặt vật chất. Nó chứa một bộ thư viện và các tệp khác được JVM sử dụng trong thời gian chạy.
c) JDK
JDK là viết tắt của Java Development Kit. Đây là một môi trường phát triển phần mềm để phát triển các ứng dụng Java. Nó tồn tại về mặt vật chất. Nó chứa các công cụ phát triển JRE +. JDK.
5) Có bao nhiêu loại vùng nhớ được phân bổ bởi JVM?
Nhiều loại:
Class(Method) Area : Vùng lưu trữ các cấu trúc trên mỗi lớp như nhóm hằng số thời gian chạy, trường, dữ liệu phương thức và mã cho các phương thức.
Heap: Đây là vùng dữ liệu thời gian chạy trong đó bộ nhớ được phân bổ cho các đối tượng
Stack: Java Stack lưu trữ các khung. Nó chứa các biến cục bộ và kết quả một phần, và đóng một phần trong việc gọi và trả về phương thức. Mỗi luồng có một ngăn xếp JVM riêng, được tạo cùng lúc với luồng. Một khung mới được tạo ra mỗi khi một phương thức được gọi. Một khung bị phá hủy khi việc gọi phương thức của nó hoàn thành.
Thanh ghi bộ đếm chương trình: Thanh ghi PC (bộ đếm chương trình) chứa địa chỉ của lệnh máy ảo Java hiện đang được thực thi.
Ngăn xếp phương thức gốc: Nó chứa tất cả các phương thức riêng được sử dụng trong ứng dụng.
6) Trình biên dịch JIT là gì?
Trình biên dịch Just-In-Time (JIT): Nó được sử dụng để cải thiện hiệu suất. JIT biên dịch các phần của mã byte có chức năng tương tự cùng một lúc và do đó làm giảm lượng thời gian cần thiết để biên dịch. Ở đây, thuật ngữ của trình biên dịch mã số Viking dùng để chỉ một trình dịch từ tập lệnh của máy ảo Java (JVM) sang tập lệnh của một CPU cụ thể.
7) Platform là gì?
Platform là môi trường phần cứng hoặc phần mềm trong đó một phần mềm được thực thi. Có hai loại platform, dựa trên phần mềm và dựa trên phần cứng. Java cung cấp platform dựa trên phần mềm.
8) Sự khác biệt chính giữa nền tảng Java và các nền tảng khác là gì?
Có những khác biệt sau đây giữa nền tảng Java và các nền tảng khác.
Java là nền tảng dựa trên phần mềm trong khi các nền tảng khác có thể là nền tảng phần cứng hoặc nền tảng dựa trên phần mềm.
Java được thực thi trên đỉnh của các nền tảng phần cứng khác trong khi các nền tảng khác chỉ có thể có các thành phần phần cứng.
9) Điều gì mang lại cho Java bản chất ‘viết một lần và chạy mọi nơi’?
Mã byte. Trình biên dịch Java chuyển đổi các chương trình Java thành tệp class (Mã Byte) là ngôn ngữ trung gian giữa mã nguồn và mã máy. Mã byte này không phải là nền tảng cụ thể và có thể được thực thi trên bất kỳ máy tính nào.
10) Trình nạp lớp ( Classloader ) là gì?
Classloader là một hệ thống con của JVM, được sử dụng để tải các tệp lớp. Bất cứ khi nào chúng ta chạy chương trình java, nó sẽ được tải trước bởi trình nạp lớp. Có ba trình nạp lớp tích hợp trong Java.
Bootstrap ClassLoader: Đây là trình nạp lớp đầu tiên là superclass của trình nạp lớp mở rộng. Nó tải tệp rt.jar chứa tất cả các tệp lớp của Java Standard Edition như các lớp gói java.lang, các lớp gói java.net, các lớp gói java.util, các lớp gói java.io, các lớp gói java.sql, v.v.
Trình mở rộng lớp tải: Đây là trình nạp lớp con của Bootstrap và trình nạp lớp cha của trình nạp lớp hệ thống. Nó tải các tệp jar nằm trong thư mục $ JAVA_HOME / jre / lib / ext.
Trình tải lớp hệ thống / ứng dụng: Đây là trình nạp lớp con của trình nạp lớp mở rộng. Nó tải các tệp lớp từ đường dẫn lớp. Theo mặc định, classpath được đặt thành thư mục hiện tại. Bạn có thể thay đổi đường dẫn lớp bằng cách sử dụng chuyển đổi “-cp” hoặc “-classpath”. Nó còn được gọi là trình nạp lớp ứng dụng.
Các câu hỏi phỏng vấn Java Spring Boot
1. Giải thích về thuật ngữ “Spring Boot”.
Nó là 1 module Spring cung cấp Rapid Application Development cho Spring Framework. Spring module được sử dụng để tạo ứng dụng dựa trên Spring Framework cái mà yêu cầu cấu hình 1 vài file Spring.
2. Ưu điểm của Spring Boot.
Dưới đây là 1 số ưu điểm của Spring Boot:
- Giúp bạn tạo ứng dụng độc lập, có thể bắt đầu bằng java.jar.
- Nó cung cấp cấu hình POM được xác định chính xác cho Maven.
- Cho phép bạn nhúng trực tiếp Undertow, Tomcat hoặc Jetty.
- Giúp bạn tự động cấu hình bất cứ khi nào có thể.
3. Làm thế nào để tạo 1 ứng dụng Spring Boot bằng Spring Initializer?
Nó là một công cụ web được cung cấp bởi Spring trên trang web chính thức của nó. Tuy nhiên, bạn cũng có thể tạo dự án Spring Boot bằng cách nhập chi tiết dự án.
4. Các tính năng.
- Starter dependency
- Auto-configuration
- Spring initializer
5. Giải thích sự khác nhau các giai đoạn của RAD model.
Đây là một câu hỏi phỏng vấn xin việc thường gặp. Các giai đoạn khác nhau của chế độ RAD là:
- Business Modeling: dựa trên luồng thông tin và sự phân phối các kênh kinh doanh khác nhau, sản phẩm được thiết kế.
- Data Modeling: thông tin thu thập từ Business Modeling được tinh chỉnh thành 1 tập hợp các đối tượng dữ liệu có ý nghĩa đối với doanh nghiệp.
- Application Generation: Các công cụ tự động được sử dụng để xây dựng phần mềm, để chuyển đổi mô hình quy trình và dữ liệu thành prototypes.
6. RAD model là gì?
RAD hoặc Rapid Application Development process là việc áp dụng model warterfall (mô hình thác nước); nó nhằm mục tiêu phát triển phần mềm trong 1 thời gian ngắn.
SDLC RAD model gồm các giai đoạn sau:
- Business Modeling
- Data Modeling
- Process Modeling
- Application Generation
- Testing and Turnover
7. Các câu lệnh để chạy và dừng file JAR trong Spring Boot?
Bạn cần mở cmd hoặc shell window và sử dụng câu lệnh sau:
java -jar
Ví dụ:
$ java -jar myproject-0.0.1-SNAPSHOT.jar
Để dừng sử dụng tổ hợp phím Ctrl + C.
8. Để thay đổi phiên bản JDK trong Spring Boot, bạn có thể ghi đè nó bằng cách thêm mới version của java.
1.8
Code language: CSS (css)
9. Quá trình bạn cần làm theo để chạy ứng dụng Spring Boot trên cổng tùy chỉnh là gì?
Để chạy ứng dụng, bạn cần đặt thuộc tính server.port trong application.properties.
Ví dụ: server.port = 8050.
10. Spring Boot starter là gì? Nó có hữu ích như thế nào?
Spring Boot có nhiều starters. Chúng là tập hợp tất cả các convenient dependency descriptors. Starter cho phép bạn include nhiều descriptors trong file pom.xml (Maven) hoặc build.gradle (Gradle).
Ví dụ: Nếu bạn muốn làm việc với Spring MVC, bạn có thể include “spring–boot–starter–web” giống như dependency trong pom.xml.
11. Bạn có thể sử dụng ứng dụng Spring Boot cái mà không sử dụng Sping?
Không, không thể thực hiện được vì Spring Boot chỉ giới hạn ở ứng dụng Spring.
12. Tên file configuration cái mà bạn có thể sử dụng trong Spring Boot?
File configuration được sử dụng trong dự án Spring Boot được gọi là application.properties. Nó là 1 file quan trọng cái mà cho phép bạn ghi đè các cấu hình mặc định của bạn.
13. DevTools trong Spring Boot là gì?
Spring Boot DevTools giúp bạn tăng năng xuất của developer. Vì vậy, bạn không cần phải redeploy (triển khai lại) ứng dụng của mình mỗi khi thực hiện thay đổi. Nó cho phép developer reload lại các thay đổi mà không cần khởi động lại server.
14. Các thành phần thiết yếu của Spring Boot.
- Spring Boot Starter
- Spring Boot autoconfiguration
- Spring Boot Actuator
- Spring Boot CLI
15. Các properties được định nghĩa như thế nào? Ở đâu?
Bạn có thể định nghĩa properties trong application.properties trong classpath.
Ví dụ: configure default DataSource bean
database.host=localhost
16. spring-boot-starter-parent là gì?
Nó là 1 starter đặc biệt cái mà làm cho Gradle và Maven dependency-management đơn giản bằng thêm các jars vào classpath.
17. Cách enable HTTP/2 supports trong Spring Boot?
server.http2.enabled configuration property.
Code language: CSS (css)
18. Spring Boot Actuator là gì?
Spring Boot Actuator cho phép bạn theo dõi và quản lý ứng dụng của mình khi bạn muốn đưa nó vào sản xuất. Nó giúp bạn kiểm soát ứng dụng của mình bằng cách sử dụng các điểm cuối HTTP.
Bạn có thể tham khảo bài viết của mình tại link này
19. Lệnh chạy ứng dụng Spring Boot đến cổng tùy chỉnh là gì?
Trong application.properties, hãy thêm thuộc tính sau.
server.port = 8181
20. Làm thế nào bạn có thể truy cập một giá trị được xác định trong ứng dụng? File properties trong Spring Boot là gì?
Sử dụng annotation @Value để truy cập các properties được xác định trong file application – properties.
@Value("${custom.value}")
private String customVal;
Code language: CSS (css)
21. Sự khác biệt chính giữa Spring và Spring Boot là gì?
Spring Framework.
Spring là một mã nguồn mở được phát triển bởi Framework dựa trên Java , giúp đơn giản hóa việc xây dựng và phát triển các doanh nghiệp ứng dụng Java. Nó cung cấp một mô hình lập trình và cấu hình toàn diện cho các ứng dụng doanh nghiệp dựa trên Java hiện đại – trên bất kỳ loại nền tảng triển khai nào. Chức năng của Spring được chia thành nhiều mô-đun độc lập, ứng dụng của bạn có thể chọn sử dụng bất kỳ mô-đun nào tùy theo nhu cầu của nó, Spring Boot ,
Spring MVC cũng là một mô-đun nằm trong vùng chứa Spring Framework. Các tính năng chính và nổi bật của Spring Framework là Dependency Injection và Inversion of Control (IoC) để giúp bạn phát triển các ứng dụng có khả năng khớp nối lỏng .
Khởi động mùa xuân.
Như bạn đã biết, Spring Boot là một mô-đun trong Spring Framework cung cấp giao diện và khả năng phát triển các ứng dụng độc lập với vài bước cấu hình. Rắc rối hoặc gần như bằng không. N ó chứa nhiều thư viện phụ thuộc vào các mô-đun nền tảng của Spring Framework , nhưng được rút gọn thành mã nguồn dài, đủ phức tạp để cung cấp khi phát triển ứng dụng Thuận tiện và phù hợp cho các mục đích khác nhau.
<thân> Mùa xuân Ra mắt mùa xuân Spring Framework là một khung Java EE được sử dụng rộng rãi để xây dựng các ứng dụng. Spring Boot framework được sử dụng rộng rãi để phát triển REST API. Nó được thiết kế để đơn giản hóa việc phát triển Java EE và tăng năng suất của nhà phát triển.được thiết kế để giảm độ dài mã và cung cấp cách dễ nhất để phát triển ứng dụng web. Tính năng chính của Spring Framework là Dependency Injection .Tính năng chính của Spring Boot là tự động định cấu hình . Nó tự động cấu hình các lớp khi cần thiết.Nó làm cho mọi thứ dễ dàng hơn bằng cách cho phép chúng tôi phát triển các ứng dụng được kết hợp lỏng lẻo .giúp tạo các ứng dụng độc lập với cấu hình ít hơn.Lập trình viên cần viết nhiều mã (mã viết sẵn) để thực hiện ít tác vụ nhất.Nó làm giảm mã được viết trước.Để kiểm tra dự án Spring, chúng ta cần đặt máy chủ một cách rõ ràng. Spring Boot cung cấp các máy chủ nhúng như Jetty và Tomcat.Các nhà phát triển xác định thủ công các phụ thuộc cho các dự án Spring trong pom.xml. Spring Boot đi kèm với khái niệm khởi động trong tệp pom.xml xử lý nội bộ việc tải xuống các JAR có liên quan theo yêu cầu của Spring Boot. 22. Giải thích về Spring Boot Admin.
Spring Boot Admin là một dự án cộng đồng giúp bạn quản lý và giám sát các ứng dụng Spring Boot của mình.
23. Làm cách nào để kết nối Spring Boot với cơ sở dữ liệu bằng JPA?
Spring Boot hỗ trợ bootstrap spring-boot-data-JPA, giúp bạn kết nối ứng dụng của mình Spring với cơ sở dữ liệu quan hệ.
Có sẵn từ liên kết:
24. Giải thích chú thích @RestController trong Spring Boot.
Chú thích @RestController giúp bạn thêm chú thích @ResponseBody và @Controller vào các lớp của mình.
Bạn cũng có thể nhập gói org.springframework.web.bind.annotation trong tệp.
25. Xác định thuật ngữ Spring Initializer.
Spring Initializer là một ứng dụng web tạo cấu trúc dự án ban đầu cho bạn.
26. Giải thích CLI mùa xuân .
Spring CLI để viết ứng dụng Groovy Spring Boot giúp bạn viết mã sạch.
27. Các thuộc tính có thể được xác định ở đâu trong ứng dụng Spring Boot?
Bạn có thể xác định các thuộc tính cho Spring Boot thành một tệp có tên application.properties. Nó có thể giúp bạn tạo tệp này theo cách thủ công hoặc bạn có thể sử dụng Spring Initializer để tạo tệp này.
28. Spring hỗ trợ gì cho các vùng chứa nhúng?
Spring Boot hỗ trợ ba vùng chứa nhúng chính:
- Tomcat.
- Bến tàu.
- Chìm.
Theo mặc định, nó sử dụng Tomcat làm vùng chứa nhúng của nó.
29. Giải thích thymeleaf trong Spring Boot.
Thymeleaf là một mẫu Java trang web máy chủ cho các ứng dụng web. Nó giúp bạn đưa các mẫu tự nhiên thanh lịch vào các ứng dụng web của mình.
Bạn có thể tham khảo từ mã nguồn:
30. Thuộc tính Spring Boot là gì?
Spring Boot cung cấp các thuộc tính khác nhau có thể được chỉ định trong tệp application.properties của dự án. Nó giúp bạn thiết lập các giá trị như số cổng máy chủ, cấu hình kết nối cơ sở dữ liệu, v.v.
31. Sự khác biệt chính giữa JPA và Hibernate là gì?
Sự khác biệt chính giữa cả hai là JPA là một đặc điểm kỹ thuật / giao diện trong khi Hibernate chỉ là một triển khai JPA.
32. Tắt máy trong thiết bị truyền động là gì?
Shutdown là một điểm cuối giúp các ứng dụng tắt đúng cách. Tính năng này không được bật theo mặc định.
Tuy nhiên, bạn có thể sử dụng nó bằng cách nhập lệnh vào tệp application.properties: management.endpoint.shutdown.enabled = true.
33. Có thể thay thế hoặc ghi đè máy chủ Embedded Tomcat trong Spring Boot không?
Có, có thể thay thế Embedded Tomcat bằng bất kỳ máy chủ nào khác bằng cách sử dụng các starter dependencies. Để làm được điều đó, bạn có thể sử dụng spring-boot-starter-jetty hoặc như một dependency tùy theo nhu cầu của bạn.
34. Bạn có thể tắt web server mặc định trong ứng dụng Spring Boot không?
Có, chúng tôi có thể tắt web server mặc định bằng cách sử dụng application.properties để cấu hình loại ứng dụng web.
35. Làm cách nào để bạn Add, Filter vào một ứng dụng? Có ba phương pháp để thêm bộ lọc vào ứng dụng Spring Boot:
- Triển khai Filter interface.
- Sử dụng FilterRegistrationBean.
- Sử dụng MVC controller.
36. Spring Boot Starter Projects là gì?
Starters trong Spring Boot là một tập hợp các bộ mô tả tiện lợi được bao gồm trong các ứng dụng Spring Boot. Nó đi kèm với nhiều công nghệ liên quan đến Spring điều này làm cho toàn bộ quá trình phát triển ứng dụng dễ dàng hơn nhiều.
37. @pathVariable là gì?
Annotation @PathVariable giúp bạn trích xuất thông tin trực tiếp từ URL.
38. Swagger2 là gì?
Swagger được sử dụng để mô tả cấu trúc của các API. Swagger 2 là một dịch vụ mã nguồn mở được cung cấp trong Spring Boot, giúp máy tìm ra cấu trúc của các API như dịch vụ Web RESTful dễ dàng hơn.
Có thể tham khảo từ nguồn: NGUỒN.
39. Các environments(môi trường) khác nhau để phát triển ứng dụng doanh nghiệp là gì?
- Dev
- QA
- Stage
- Production
40. Sự khác biệt chính giữa RequestMapping và GetMapping là gì?
RequestMapping có thể được sử dụng với GET, POST, PUT và nhiều phương thức yêu cầu khác bằng cách sử dụng thuộc tính phương thức tại annotation. Trong khi GetMapping chỉ là một phần mở rộng của RequestMapping, giúp bạn cải thiện độ rõ ràng của các yêu cầu.
41. Làm thế nào để tạo một dự án Spring Boot bằng Maven?
Sử dụng bất kỳ phương pháp nào sau đây để tạo một dự án.
- Spring Initializer.
- Spring Boot CLI.
- Spring Starter Project Wizard.
42. Làm cách nào để thay đổi cổng HTTP tomcat?
Để thay đổi cổng HTTP tomcat, bạn phải thay đổi thuộc tính HTTP mặc định trong file application.properties.
43. LiveReload trong Spring Boot là gì?
LiveReload là 1 module spring-boot-devtools bao gồm máy chủ LiveReload để kích hoạt làm mới trình duyệt khi tài nguyên bị thay đổi. Tiện ích mở rộng máy chủ LiveReload là phần mềm miễn phí có sẵn cho Firefox, Chrome và Safari
44. Những lợi ích chính của spring Externalized Configuration?
Cấu hình bên ngoài giúp làm việc với cùng một mã trong các môi trường khác nhau. Developers có thể sử dụng file YAML, file properties file, ommand-line arguments, và environment variables để cấu hình bên ngoài.
45. Bạn nghĩ sao về việc hot-swapping trong Spring Boot?
Đó là một cách để tải lại các thay đổi mà không cần khởi động lại máy chủ Tomcat hoặc Jetty. Eclipse và nhiều IDE khác hỗ trợ bytecode hot swapping. Nếu bạn thực hiện bất kỳ thay đổi nào không ảnh hưởng đến chữ ký của phương thức, nó sẽ tải lại mà không có tác dụng phụ.
46. Giải thích về Auto-Configuration trong Spring Boot.
Auto-configuration được sử dụng để cấu hình Spring application automatically dựa trên dependencies tham số của classpath. Nó làm cho sự phát triển nhanh hơn và dễ dàng hơn.
47. Ý nghĩa của Aspect-Oriented Programming (AOP) là gì?
Aspect-Oriented Programming (AOP) bổ sung Object-Oriented Programming (OOP) nhằm mục đích tăng tính modularity. AOP chia logic chương trình thành nhiều phần khác nhau, được gọi là concerns(mối quan tâm).
48. Làm cáh nào để kích hoạt logging trong Spring Boot?
Để bật enable debug logging, bạn có thể specify –debug trong khi khởi động ứng dụng từ dấu nhắc lệnh.
49. Giải thích việc ghi đè các properties mặc định trong ứng dụng Spring Boot.
Spring Boot có rất nhiều thuộc tính có thể dễ dàng bị ghi đè bằng cách chỉ định chúng trong application.properties.
50. Docker trong Spring Boot.
Nó là một công cụ được thiết kế để tạo, triển khai và chạy một dự án bằng cách sử dụng containers.
Bạn có thể tham khảo từ link:
51. Định nghĩa ELK stack(ngăn xếp).
- Elasticsearch: Đây là một cơ sở dữ liệu NoSQL dựa trên công cụ tìm kiếm mã nguồn mở có tên là Lucene.
- Logstash: Nó là một công cụ đường ống xử lý dữ liệu chấp nhận đầu vào từ các nguồn, thực hiện các phép biến đổi khác nhau và xuất dữ liệu sang các mục tiêu.
- Kibana: Kibana giúp người dùng trực quan hóa dữ liệu bằng đồ thị và biểu đồ trong Elasticsearch.
52. Handle exception trong Spring Boot như thế nào?
Spring Boot cung cấp một cách rất hữu ích để xử lý các ngoại lệ bằng cách sử dụng annotation @ControllerAdvice.
Bạn có thể tham khảo từ link mình đã viết tại đây
53. Giải thích về caching.
Caching là bộ nhớ lưu trữ tạm thời dữ liệu được truy cập thường xuyên mà nếu lấy hoặc tính toán thì rất tốn kém.
54. Cross-Site Request Forgery attack là gì?
Cross-Site Request Forgery attack hoặc one-click attack là một cuộc tấn công buộc người dùng khác thực hiện các lệnh độc hại trên ứng dụng. CSRF attack nhắm mục tiêu state-changing requests.
Bạn có thể tham khảo tại link này.
55. Định nghĩa apache freemarker.
Freemarker là một template Java-based được sử dụng để tạo plain text, emails, HTML file, etc.
56. Spring batch có nghĩa là gì?
Spring Boot Batch cung cấp khả năng tái sử dụng mã rất quan trọng khi làm việc với số lượng lớn bản ghi, bao gồm quản lý giao dịch, logging, skipping, thống kê xử lý công việc và khởi động lại công việc.
57. Apache Kafka.
Apache Kafka là một open-source messaging platform. LinkedIn phát triển nó. Apache Kafka cho phép người dùng xây dựng các ứng dụng phân tán và xử lý các nguồn cấp dữ liệu thời gian thực. Kafka thích hợp cho cả nhắn tin ngoại tuyến và trực tuyến.
58. CORS trong Spring Boot.
CORS là viết tắt của Cross-Origin Resource Sharing là một cơ chế được thực hiện bởi các trình duyệt và giúp người dùng cho phép các yêu cầu giữa các miền. Cơ chế này đóng vai trò là một giải pháp thay thế cho các loại hack kém an toàn và kém mạnh mẽ hơn của các loại IFrame hoặc JSONP.
59. Giải thích các kiểu dependency injection.
Có 2 kiểu dependency injection trong Spring Boot:
- Constructor based dependency injection: nó là một kỹ thuật trong đó một đối tượng lớp cung cấp sự dependency của một đối tượng khác.
- Setter-based dependency injection: nó là 1 dependency injection cái mà framework tiêm các giá trị nguyên thủy và chuỗi bằng cách sử dụng phương thức setter.
60. Ưu điểm của micro service?
- Nó làm cho sự phát triển nhanh chóng và dễ dàng.
- Tương thích với tất cả các container.
- Giảm thời gian sản xuất.
- Đây là một mô hình nhẹ hỗ trợ một ứng dụng kinh doanh lớn.
61. Default package in Spring Boot là gì?
Một clas không có bất kỳ khai báo package nào được coi là một default package.
62. Giải thích sự khác biệt giữa embedded container nhúng và WAR?
Sự khác biệt chính giữa hai điều này là:
Embedded containers giúp bạn chạy ứng dụng Spring Boot dưới dạng JAR từ dấu nhắc lệnh mà không cần thiết lập bất kỳ máy chủ web nào, trong khi để chạy WAR, trước tiên bạn cần thiết lập Tomcat.
63. Giải thích về Spring MVC.
Nó là một web application framework truyền thống giúp bạn xây dựng một ứng dụng web. Framework này tương tự như framework Struts.
64. Việc sử dụng thẻ <set> là gì?
Thẻ này được sử dụng để ghi vào tập hợp java bằng cách sử dụng XML.
65. Bạn hiểu gì về ý nghĩa của aspect(khía cạnh)?
Nó là một tập hợp các API cung cấp các yêu cầu xuyên suốt.
66. Join point trong Spring Boot là gì?
Nó là một điểm thực thi chương trình giống như việc xử lý một ngoại lệ hoặc thực thi một phương thức. Trong AOP, một điểm nối được gọi là một phương thức thực thi.
67. Làm cách nào bạn có thể đặt cấu hình hoạt động trong Spring Boot?
Làm theo các phương pháp sau để đặt cấu hình hoạt động trong Spring Boot.
- Chuyển hồ sơ này làm đối số khi bạn khởi chạy ứng dụng Spring Boot.
- Đặt kích hoạt cấu hình hoạt động trong file application.properties.
68. Có thể loại trừ gói mà không sử dụng bộ lọc basePackages không? Làm như nào?
Đúng. Có thể loại trừ gói mà không cần sử dụng bộ lọc basePackages bằng cách chỉ cần sử dụng thuộc tính loại trừ trong khi sử dụng annotation @SpringBootApplication.
69. Liệt kê những lợi ích của việc sử dụng phương thức JavaConfig.
Sau đây là những lợi ích của phương thức JavaConfig.
- Người dùng có thể tận dụng lợi ích của cấu hình hướng đối tượng.
- Cấu hình Spring Boot cải thiện hiệu quả của ứng dụng dựa trên web bằng cách loại bỏ cấu hình XML phức tạp.
70. Giải thích các bước để triển khai một ứng dụng trên máy ảo.
Dưới đây là các bước để triển khai ứng dụng trên máy ảo.
Install Java.
Install the Application Server.
Deploy the application war file.
71. Liệt kê 1 số Spring Boot Starters.
Spring Boot Starters khác nhau bao gồm:
Security
Parent
web
Thymeleaf
Freemarker
Tìm kiếm việc làm ở vị trí lập trình viên Java không phải là quá khó. Tuy nhiên, nếu không có sự chuẩn bị tốt dù bạn là người mới vào nghề hay là một lập trình viên có nhiều kinh nghiệm, việc vượt qua vòng phỏng vấn về lập trình Java cũng không hề dễ dàng.
Dưới đây là danh sách hơn 100 câu hỏi phòng vấn Java bạn nên tham khảo trước khi các cuộc phỏng vấn để chắc chắn bạn không bị bỏ lại phía sau so với những ứng viên khác.
Trong phần 1 này, chúng ta hãy bắt đầu bằng cách xem qua một số câu hỏi phỏng vấn Java thường gặp nhất
1, JDK, JRE và JVM là gì?
JDK | JRE | JVM |
---|---|---|
Java Development Kit | Java Runtime Environment | Java Virtual Machine |
Là công cụ cần thiết để compile (biên dịch), document và đóng gói các chương trình Java | JRE đề cập đến môi trường runtime trong đó Java bytecode có thể được thực thi | Là một cỗ máy trừu tượng. Nó cung cấp môi trường trong đó Java bytevode có thể thực thi |
Nó chứa JRE | Nó là một triển khai của JVM tồn tại trên thực tế | JVM tuân theo 3 quy ước: Đặc tả, Triển khai và runtime instace |
2, Giải thích phương thức main() trong chương trình Java
main()
trong java là điểm đầu vào cho bất kỳ chương trình Java nào. Nó luôn được viết làpublic static void main()
.public
: là phạm vi truy cập, được sử dụng để chỉ định ai có thể truy cập vào phương thức này.public
có nghĩa là phương thức này có thể được truy cập bởi bất kỳ class nào.static
: một phương thức được khai báo làstatic
thì phương thức đó được gọi là phương thức tĩnh,phương thức đó có thể được truy cập mà không cần tạo đối tượng. Trong trường hợp,main()
không được khai báo vớistatic
thì trình biên dịch sẽ ném ra một lỗi vì hàmmain()
được gọi bởi JVM trước khi bất kỳ đối tượng nào được thực hiện.void
: Là kiểu trả về của phương thức. Voi định nghĩa phương thức sẽ không trả về bất kỳ giá trị nào.main
: Là tên của phương thức được JVM tìm kiếm như một điểm khởi đầu cho ứng dụng.String args[]
: Là tham số truyền cho phương thứcmain()
3, Tại sao Java lại độc lập nền tảng?
Java được gọi là độc lập nền tảng vì các bytecode của nó có thể chạy trên bất kỳ hệ thống nào bất kể hệ điều hành cơ bản của nó
4, Tại sao Java Không phải là hướng đối tượng 100%?
Java không phải hướng đối tượng 100% vì nó sử dụng 8 kiểu dữ liệu nguyên thủy là byte, short, int, long, float, double, char, boolean không phải là object
5, Các lớp wrapper trong Java là gì?
Các lớp wrapper trong Java cung cấp cơ chế chuyển đổi kiểu dữ liệu nguyên thủy thành kiểu đối tượng và ngược lại.
6, Constructors trong Java là gì?
Trong Java, constructor đề cập đến khối lệnh được sử dụng để khởi tạo đối tượng. Nó phải có cùng tên với tên lớp. Ngoài ra, nó không có kiểu trả về và nó được tự động gọi khi một đối tượng được tạo.
Có hai loại constructor:
- Constructor mặc định: Trong Java, một constructor mặc định là constructor không có tham số nào. Mục đích chính của nó là khởi taon biến instance với giá trị mặc định. Ngoài ra nó được sử dụng chủ yếu để tạo đối tượng.
- Constructor có tham số: constructor được tham số hóa có khả năng khởi tạo các biến instance với các giá trị được cung cấp.
7, Lớp Singleton trong Java là gì? Làm thế nào để một lớp Singleton
Singleton là 1 trong 6 Design Pattern của nhóm Creational Design Pattern, đảm bảo chỉ duy nhất một thể hiện (instance) được tạo ra và nó sẽ cung cấp cho bạn một method để có thể truy xuất được thể hiện duy nhất đó mọi lúc mọi nơi trong chương trình.
Một lớp có thể được tạo singleton bằng cách đặt constructor của nó là private.
8, So sánh ArrayList và Vector trong Java
ArrayList | Vector |
---|---|
ArrayList không được đồng bộ hóa | Vector được đồng bộ hóa |
ArrayList nhanh hơn do không phải đồng bộ hóa | Vector chậm hơn nhưng với luồng an toàn |
Nếu một phần tử được chèn vào ArrayList, nó sẽ tăng kích thước Array lên 50% | Vector mặc định tăng gấp đôi kích thước mảng |
ArrayList không xác định kích thước gia tăng | vector xác định kích thước gia tăng |
ArrayList chỉ sử dụng Iterator để duyệt | Vector sử dụng cả Enumeration và Iterator để duyệt |
9, Khác biệt giữa equals()
và ==
trong Java
equals()
là phương thức được định nghĩa trong classObject
, được sử dụng giá trị của hai đối tượng==
là một toán tử được sử dụng để so sánh kiểu nguyên thuy hoặc địa chỉ của hai đối tượng
package vn.techmaster;
public class Main {
public static void main(String[] args) {
String str1 = "Java";
String str2 = new String("Java");
System.out.println(str1.equals(str2));
System.out.println(str1 == str2);
}
}```
Kết quả trả về:
true
false“`
10, Khác biệt giữa bộ nhớ Stack và Heap
Đặc điểm | Stack | Heap |
---|---|---|
Memory | Bộ nhớ stack chỉ được sử dụng bởi một luồng thực thi | Bộ nhớ Heap được sử dụng bởi tất cả các phần của ứng dụng |
Access | các luồng khác không thể truy cập vào bộ nhớ stack | các đối tượng được lưu trữ trong heap có thể được truy cập ở mọi nơi |
Memory Management | Sử dụng LIFO để giải phóng bộ nhớ | Phải giải phóng thông qua lập trình viên |
Lifetime | Tồn tại cho đến khi kết thúc quá trình thực thi luồng | Tồn tại từ khi bắt đầu cho đến khi kết thúc quá trình thực thi ứng dụng |
Usage | Stack chỉ chứa các biến local primitive và tham chiếu đến các đối tượng trong heap space | Bất cứ khi nào đối tượng được tạo, nó luôn được lưu trữ trong heap space |
11, Package trong Java là gì? Liệt kê các các ưu điểm của các package
Package trong Java tương tự như thư mục, nó tập hợp các class, interface liên quan với nhau. Bằng cách sử dụng package, developers có thể dễ dàng tái sử dụng nó. Ngoài ra, package còn có thể được import bởi các class khác và sử dụng lại.
Một số cưu điểm của package:
- Tránh đụng độ tên
- Cung cấp khả năng truy cập dễ dàng
- Có thể chứa các lớp ẩn, không hiển thị đối với lớp bên ngoài và chỉ sử dụng trong package
- Tạo cấu trúc phân cấp thích hợp giúp xác định vị trí các lớp liên quan dễ dàng hơn.
12, Tại sao không sử dụng con trỏ trong Java
Java không sử dụng con trổ vì chúng không an toàn và làm tăng độ phức tạp của chương trình. Hơn nữa, vì JVM chịu trách nhiệm cấp phát bộ nhớ ngầm, do đó để tránh người dùng truy cập trực tiếp vào bộ nhớ, con trở không được khuyến khích sử dụng trong Java
13, Trình biên dịch JIT trong Java
JIT là viết tắt của từ Just-In-Time. Nó là một chương trình giúp chuyển đổi mã bytecode của Java thành cách lệnh được gửi trực tiếp đến bộ xử lý. Thông thường, trình biên dịch JIT được kích hoạt bất cứ khi nào một phương thức được gọi. Sau đó, trình biên dịch mã bytecode của phương thức được gọi thành mã máy, biên dịch nó đúng lúc để thực thi. Khi phương thức đã được biên dịch, JVM triệu hồi mã đã biên dịch của phương thức đó trực tiếp thay vì diễn giải nó. Đây là lý do vì sao nó thường chịu trách nhiệm cho việc tối ưu hóa hiệu suất của các ứng dụng Java lúc runtime.
14, Các loại phạm vi truy cập trong Java
Trong Java, phạm vi truy cập là các từ khóa đặc biệt được sử dụng để hạn chế quyền truy cập của một lớp, constructor, thành viên dữ liệu và phương thức trong một lớp khác. Có 4 loại phạm vi truy cập là: public
, default
, protected
và private
- Đối tượng sử dụng:
- Phạm vi truy cập
15, Định nghĩa một class
Một class trong Java giống như nột bản thỉết kế bao gồm các dữ liệu của bạn. Một class chứa các biến và các phương thức để mô tả hành vi của một đối tượng. Cú pháp tạo một class:
<Phạm vi truy cập> class <Tên class>{
//member variables
//methods
}```
## 16, Đối tượng trong Java là gì, làm thế nào để tạo ra nó?
Đối tượng là một thực thể trong thế giới thực, nó có trạng thái, hành vi. Một đối tượng có 3 đặc điểm:
- Danh tính
- Trạng thái
- Hành vi
Đối tượng được tạo bằng cách sử dụng từ khóa `new`:
```java
<Tên class> <Tên biến tham chiếu> = new <Tên class>();```
## 17, 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 trong đó các chương trình được tổ chức xoay quanh các đối tượng hơn là logic và các chức năng.
Khi viết chương trình theo phương pháp OOP ta cần phải trả lời cho các câu hỏi:
- Chương trình liên quan đến các đối tượng nào?
- Một đối tượng cần có những dữ liệu và thao tác nào?
- Các đối tượng quan hệ với nhau như thế nào trong một chương trình?
## 18, Các nguyên lý cơ bản của lập trình hướng đối tượng
Có 4 nguyên lý cơ bản trong OOP là:
- Tính kế thừa
- Tính đóng gói
- Tính trừu tượng
- Tính đa hình
## 19, Khác biệt giữa biến local và biên instance
Trong Java, một biến cục bộ thường được sử dụng bên trong một phương thức, constructor hoặc một khối và chỉ có phạm vi cục bộ.
Biên instance trong Java là một biến được liên kết với chính đối tượng của nó. các biến này được khia báo bên trong một class, nhưng bên ngoài phương thức. Mọi đối tượng của lớp đó sẽ tạo ra bản sao của biến đó trong khi sử dụng nó. Do đó, bất kỳ thay đổi nào được thực hiện đối với biến sẽ không phản ánh trong bất kỳ trường hợp khác của lớp đó và sẽ chỉ bị ràng buộc với trường hợp cụ thể đó
## 20, Khác biệt giữa constructor và phương thức trong Java
| Methods | Constructor |
| --- | --- |
| Sử dụng để thể hiện hành vi của một đối tượng | Sử dụng để khởi tạo trạng thái của một đối tượng |
| cần phải có kiểu dữ liệu trả về | Không cần kiểu trả về |
| Cần được gọi một cách rõ ràng | Được gọi ngay khi đối tượng được khởi tạo (Gọi ngầm) |
| Không có phương thức mặc định nào được cung cấp bởi trình biên dịch | Constructor mặc định được cung cấp bởi trình biên dịch nếu lớp không có |
| Tên phương thức có thể giống hoặc không giống với tên class | Tên constructor luôn có cùng tên với tên class |
## 21, Từ khóa final trong Java
`final` được sử dụng để hạn chế thao tác người dùng. Nó có thể được sử dụng trong nhiều ngữ cảnh khác nhau như:
- Biến final: Để tạo biến có giá trị không đổi (Hằng số)
- Phương thức final: Ngăn chặn ghi đè phương thức
- Lớp final: Ngăn chặn sự kế thừa
## 22, Sự khác biệt giữa từ khóa `break` và `continue`
| break | continue |
| --- | --- |
| Có thể sử dụng trong switch và vòng lặp (for, while, do while) | Chỉ có thể sử dụng trong vòng lặp |
| Làm cho câu kệnh chuyển đổi hoặc kết thúc vòng lặp tại thời điểm nó được thực thi | Nó không kết thúc vòng lặp nhưng làm cho vòng lặp chuyển sang lần lặp tiếp theo |
Ví dụ về `break`:
```java
for (int i = 0; i < 5; i++)
{
if (i == 3) break;
System.out.println(i);
}```
Ví dụ về `continue`:
```java
for (int i = 0; i < 5; i++)
{
if (i == 2) continue;
System.out.println(i);
}```
## 23, Sự khác biệt giữa mảng vả ArrayList
| Array | ArrayList |
| --- | --- |
| Không thể chứa các giá trị của các kiểu dữ liêu khác nhau | Có thể chứa các giá trị của các kiểu dữ liệu khác nhau |
| Kích thước phải xác định tại thời điểm khai báo | Kích thước có thể thay đổi |
| Cần chỉ định chỉ mục để thêm phần tử | Không cần chỉ định chỉ mục khi thêm phần tử |
| Mảng không phải là type parameter | ArrayList là type parameter |
| Mảng có thể chứa các kiểu dữ liệu nguyên thủy cũng như các đối tượng | AratList có thể chứa đối tượng, nhưng không hỗ trợ kiểu dữ liệu nguyên nguyên thủy |
## 24, Từ khóa `super` trong Java
Từ khóa `super` trong java là một biến tham chiếu được sử dụng để tham chiếu
trực tiếp đến đối tượng của lớp cha gần nhất. Có thể sử dụng `super` để:
- Tham chiếu đến biến instance của lớp cha
- Gọi các phương thức của lớp cha
- Gọi các constructor của lớp cha
## 25, Từ khóa `static` trong Java
Từ khóa `static` được sử dụng để quản lý bộ nhớ. Chúng ta có thể áp dụng từ khóa với biến, phương thức, các khối hoặc các lớp lồng nhau. Từ khóa static thuộc về lớp chứ không thuộc về instance của lớp
- Biến static: một biến được khai báo là static biến đó được gọi là biến static hoặc biến static. Biến này được sử dụng để tham chiếu các thuộc tính chung của tất cả các đối tượng
- Phương thức static: một phương thức được khai báo là static thì phương thức đó được gọi là phương thức static. Nó là phương thức thuộc lớp chứ không thuộc đối tượng của lớp và có thể truy cập mà không cần tạo đối tượng. Ta có thể sử dụng phương thức static để truy cập biến static và thay đổi giá trị của biến đó.
- Khối static: Được sử dụng để khởi tạo thành viên dữ liệu static. Nó được thực thi trước phương thức main tại lúc tải lớp
## 26, Khác biệt giữa String, StringBuilder và StringBuffer
| Factor | String | StringBuilder | StringBuffer |
| --- | --- | --- | --- |
| Storage Area | Pool | Bộ nhớ Heap | Bộ nhớ Heap |
| Mutability | Bất biến | Có thể thay đổi | Có thể thay đổi |
| Thread safety | Có | Không | Có |
| Performance | Nhanh | Hiệu quả hơn | Kém hiệu quả |
Câu hỏi phỏng vấn Java nâng cao
Câu 1: Java là gì?
Đây là câu hỏi lý thuyết khá đơn giản, ứng viên chỉ cần trả lời rõ ràng và thẳng thắn là được.
Java là ngôn ngữ lập trình cao cấp, hướng đối tượng và độc lập với nền tảng, là ngôn ngữ lập trình di động, hiệu suất cao. Nó được sáng tạo và phát triển bởi James Gosling vào năm 1991 với Slogan “Một lần viết, chạy ở bất cứ nơi nào”.
Câu 2: Java có hoàn toàn hướng đối tượng không?
Tiếp tục là một câu hỏi phỏng vấn lập trình viên Java khá lý thuyết. Thực tế Java không hướng đối tượng hoàn toàn. Thay vào đó nó có sử dụng các loại dữ liệu như char, byte, float,.. đều không phải là đối tượng.
Câu 3: Tính năng nổi bật của Java là gì?
Ở câu hỏi này, ứng viên cần nếu được ít nhất 3 tính năng nổi bật của ngôn ngữ lập trình này. Đó là sự đơn giản, an toàn và tính di động.
Về sự đơn giản, có thể nói Java là ngôn ngữ lập trình dễ tiếp cận và học tập nhất so với các ngôn ngữ lập trình khác hiện nay. Vì vậy các lập trình viên, nhà phát triển ứng dụng đều có thể sử dụng nó để xây dựng phần mềm.
Java an toàn và bảo mật nhờ có trình thông dịch JVM. Sau khi được cài đặt chung với Java, JVM sẽ liên tục cập nhật chương trình bảo mật mới nhất từ Internet.
Cuối cùng, Java có tính di động bởi nó được sáng tạo dựa trên nguyên tắc “Viết một lần, chạy được ở bất cứ đâu”. Lập trình viên có thể sử dụng Java để code ở bất cứ máy tính nào theo ý thích.
Câu 4: Đặc điểm nổi bật của Java 8 là gì?
Đây là câu hỏi phỏng vấn lập trình viên Java kiểu so sánh. Loại câu hỏi này giúp nhà tuyển dụng đánh giá mức độ cập nhật thông tin và kiến thức của ứng viên. Với câu hỏi này bạn cần trả lời được một số tính năng mới của bản cập nhật Java 8 như sau:
- Phần hỗ trợ ngôn ngữ cho Atring
- Cải tiến tính năng cung cấp API Ngày/ Giờ
- Phát triển và cập nhật hệ thống JVM
Nhìn chung, bản cập nhật Java 8 mang lại sự cải tiến lớn về hiệu năng và tính bảo mật cho ngôn ngữ lập trình này. Java 8 cũng giúp ngôn ngữ lập trình trở nên hiện đại và dễ tiếp cận hơn.
Câu 5: “ Access Specifiers” gồm những gì?
Access Specifiers là xác định phạm vi truy cập. Trong Java tổng cộng có 4 Access Specifiers là: public (công khai), private (riêng tư), protected (bảo vệ), default (mặc định).
Với mỗi trạng thái, quyền truy cập được xác định như sau:
- Public specifier: bất cứ truy cập vào bất cứ lớp nào và bằng phương thức gì cũng được cho phép.
- Private specifier: chỉ được truy cập vào lớp chỉ định bằng phương thức chỉ định.
- Protected specifier: cho phép truy cập bằng các lớp tương quan hoặc từ trong một lớp, một lớp con hoặc trong cùng một gói.
- Default specifier: chỉ được truy cập trong phạm vi mặc định cho phép và trong cùng một gói.
Câu 6: Sự khác nhau giữa JDK, JVM và JRE là gì?
JDK (Java Development Kit) là công cụ được sử dụng trong Java để biên dịch các chương trình. Bộ công cụ này chứa tất cả các công cụ cần thiết để phục vụ cho quá trình trên.
JVM (Java Virtual Machine) là máy ảo Java được dùng để tạo ra môi trường lý tưởng cho Java bytecode hoạt động chính xác nhất.
JRE (Java Runtime Environment) là môi trường do JVM tạo ra, nơi mà Java bytecode có thể hoạt động hiệu quả nhất.
Câu 7: Phân biệt lớp trừu tượng với giao diện bằng cách nào?
Đây là câu hỏi phỏng vấn lập trình viên Java khá đơn giản. Sự khác biệt giữa lớp trừu tượng và giao diện gồm các điểm chính sau:
- Lớp trừu tượng có thể triển khai bằng các phương thức khác nhau còn giao diện thì không.
- Một lớp con chỉ có thể mở rộng một lớp trừu tượng hoặc cụ thể duy nhất. Còn một giao diện thì có thể mở rộng hoặc thực hiện nhiều giao diện khác.
- Lớp trừu tượng gồm các thành phần hằng số, thành viên, sơ khai phương thức, phương thức được xác định. Còn giao diện chỉ có thể chứa hằng số và sơ đồ phương thức.
- Ở lớp trừu tượng, phương thức và thành viên được định nghĩa với bất cứ mức độ hiển thị nào. Còn ở giao diện, phương thức được định nghĩa là công khai theo mặc định.
Câu 8: Sự khác nhau giữa Path và Classpath Variables
Path là là một biến được dùng để định vị các tệp thực thi. Vì vậy khi cài đặt Java ta cần thêm vị trí thư mục vào Path variable. Điều này cũng giúp hệ điều hành kiểm soát bất cứ thực thi nào.
Classpath Variables được dùng để định vị vị trí của các tệp lớn trong thư mục. Nó có thể là một thư mục, tệp Zip hoặc Jar được cài đặt trong ứng dụng Java.
Câu 9: “Garbage Collection” được dùng để làm gì?
Câu hỏi phỏng vấn lập trình viên Java này khá đơn giản. Công dụng chính của tính năng Garbage Collection là xác định và loại bỏ các đối tượng (rác) không cần thiết để giải phóng bộ nhớ, tạo không gian để các tính năng khác hoạt động.
Câu 10: Cách đạt được Luồng an toàn trong Java
Để đạt được điều này bằng các cách sau:
- Triển khai giao diện khóa đồng thời
- Sử dụng một từ khóa dễ biến mất
- Sử dụng các lớp bất biến
- Các lớp an toàn luồng
- Câu hỏi phỏng vấn lập trình viên Java nâng cao
Sau các câu hỏi cơ bản thì bạn nên tham khảo thêm các câu hỏi phỏng vấn lập trình viên Java nâng cao để gia tăng sự ấn tượng đối với nhà tuyển dụng. Dưới đây là hướng dẫn trả lời 10 câu hỏi phỏng vấn nâng cao thường gặp ở vị trí lập trình viên Java.
Câu 1: Sự khác biệt giữa ‘method overloading’ và ‘method overriding’?
Với phương thức nạp chồng Method Overloading, các phương thức trong một lớp sẽ có cùng tên nhưng khác biệt về tham số. Còn với phương thức ghi đè Method Overriding, các lớp con sẽ có cùng cả tên và tham số.
Câu 2: “Inheritance” là gì?
Khi một đối tượng có được các thuộc tính của một đối tượng thuộc lớp khác thì đó chính là Inheritance – Tính kế thừa. Có 5 loại kế thừa, tuy nhiên Java chỉ hỗ trợ 4 loại (trừ tính đa kế thừa). Nguyên nhân chủ yếu là để đơn giản hóa các chương trình. Đây là mục đích chính khi tạo lập ra ngôn ngữ lập trình Java.
Câu 3: “Super” là gì?
Super được sử dụng như một biến tham chiếu dùng để tham chiếu trực tiếp tới đối tượng của một lớp cha liền kề. Bất cứ một Instance của một lớp con cũng có một Instance tương ứng của lớp ta ngầm định, tức là được tham chiếu bởi biến Super.
Câu 4: “Object Cloning” là gì?
Object Cloning là nhân bản đối tượng, lệnh này được sử dụng để tạo các bản sao giống hệt với đối tượng gốc. Bạn thực hiện lệnh này bằng cách sử dụng phương thức Clone().
Câu 5: “Association’ trong Java là gì?
Đây là câu hỏi phỏng vấn lập trình viên Java khá thông dụng nên nhiều người sẽ không nghĩ đây là một câu hỏi nâng cao. Tuy nhiên vì association là khởi nguồn của các thuật ngữ phức tạp như aggregation (tập hợp) và composition (thành phần). Vì vậy việc hiểu và nắm rõ thuật ngữ này rất quan trọng.
Cụ thể, Association (sự liên kết) hình thành khi tất cả các đối tượng có vòng đời và không được sở hữu bởi bất cứ chủ thế nào.
Câu 6: Sự khác biệt giữa Jar và WAR là gì?
Đây là câu hỏi phỏng vấn lập trình viên Java khá độc đáo và hiếm gặp. Bạn có thể tham khảo câu trả lời như sau:
JAR gần giống như là cái hũ bao gồm:
- Bản đầy đủ của các file Java
- Nhiều file Java được lưu trữ trong một JAR
- JAR dùng để lưu trữ Library.
- Còn về WAR:
- Bản đầy đủ của WAR là Web Archive Files
- WAR chứa nhiều thứ: XML, Java Servlet page,..
- Dùng cho các ứng dụng web.
Câu 7: Từ khóa Volatile là gì? Tại sao cần sử dụng từ khóa này?
Nếu câu hỏi phỏng vấn lập trình viên Java này được đặt ra, nghĩa là bạn đã đạt tới cấp độ Senior. Với câu hỏi này, bạn cần hiểu từ khóa Volatile sẽ được sử dụng trong trường hợp nào.
Trong Java, mỗi Thread sẽ có các Stack riêng chứa bản sao của các biến. Khi khởi tạo Thread, tất cả các biến được cấp quyền truy cập vào luồng này sẽ được sao chép. Lúc này sẽ cần sử dụng tới từ khóa Volatile. Từ khóa này sẽ đảm bảo rằng giá trị của biến được cập nhật mới nhất và là global ở mỗi lần đọc và ghi biến.
Câu 8: Method reference là gì? Sự tiện lợi của nó?
Đây là câu hỏi phỏng vấn lập trình viên Java khá hay sau khi phiên bản Java 8 được phát hành. Có thể tính năng này đã được nhiều người sử dụng nhưng nếu chưa chắc bạn đã trả lời được câu hỏi này.
Tính năng method reference cho phép người dùng khởi tạo Constructors và các Methods. Điều đặc biệt là chúng có thể được sử dụng như là lambdas.
Câu 9: Kể tên Superclass dành cho tất cả các lớp trong Java
Câu hỏi phỏng vấn lập trình viên Java thoạt nhìn khá dễ nhưng bạn cần hiểu về cốt lõi của ngôn ngữ lập trình này. Superclass trong Java chính là lớp đối tượng (Object Class).
Câu 10: Các câu hỏi về một chương trình cụ thể
Dạng câu hỏi phỏng vấn lập trình viên Java này bạn sẽ phải ứng biến linh hoạt theo yêu cầu đề bài. Các dạng câu hỏi thường gặp sẽ là tìm đầu ra, tìm lỗi trong chương trình hoặc thậm chí là một bài test. Để trả lời suôn sẻ các câu hỏi này không có cách nào khác ngoài việc bạn phải lập trình nhiều bằng ngôn ngữ Java để quen thuộc với nó.