JavaRush /Blog Java /Random-VI /Nghỉ giải lao #60. Cách hoạt động của bộ sưu tập rác tron...

Nghỉ giải lao #60. Cách hoạt động của bộ sưu tập rác trong Java (JVM). 15 câu hỏi quan trọng về Spring trong cuộc phỏng vấn kỹ thuật

Xuất bản trong nhóm

Cách hoạt động của bộ sưu tập rác trong Java (JVM)

Nguồn: DZone

Quá trình thu gom rác trong Java

Bộ sưu tập rác Java tự động phân bổ và giải phóng bộ nhớ, do đó các nhà phát triển không phải viết một chương trình riêng để quản lý bộ nhớ, đây là một trong những lợi ích chính của việc lập trình trong Java. Mỗi khi một chương trình Java chạy trên JVM, các đối tượng sẽ được tạo trên heap và biểu thị một phần bộ nhớ được phân bổ cho chương trình. Theo thời gian, một số mặt hàng sẽ không còn cần thiết nữa. Trình thu gom rác tìm thấy những đối tượng không sử dụng này và loại bỏ chúng để giải phóng bộ nhớ. Nghỉ giải lao #61.  Cách hoạt động của bộ sưu tập rác trong Java (JVM).  15 câu hỏi quan trọng về Spring trong cuộc phỏng vấn kỹ thuật - 1Trình thu gom rác sau khi đánh giá vùng nhớ sẽ xác định đối tượng nào đang được sử dụng và đối tượng nào không và loại bỏ các đối tượng không sử dụng. Một đối tượng được sử dụng hoặc được tham chiếu có nghĩa là một phần nào đó trong chương trình của bạn vẫn duy trì một con trỏ tới đối tượng đó. Nếu một đối tượng không còn được sử dụng hoặc không còn được tham chiếu nữa thì nó sẽ không còn được tham chiếu bởi bất kỳ phần nào của chương trình. Do đó, bộ nhớ được sử dụng bởi một đối tượng không được tham chiếu có thể được giải phóng bằng cách thực hiện thu gom rác. Nghỉ giải lao #61.  Cách hoạt động của bộ sưu tập rác trong Java (JVM).  15 câu hỏi quan trọng về Spring trong cuộc phỏng vấn kỹ thuật - 2Giải phóng bộ nhớ có thể được mô tả bằng ba quá trình chính:
  1. Đánh dấu.
  2. Loại bỏ bình thường.
  3. Loại bỏ bằng cách nén chặt.
Đánh dấu là quá trình xác định các phần của bộ nhớ được và không được bộ thu gom rác sử dụng. Ghi nhãn thường là bước đầu tiên. Xóa thông thường là quá trình xóa các đối tượng không được tham chiếu, để lại các đối tượng và con trỏ được tham chiếu trong không gian trống. Xóa nén - Ngoài việc xóa các đối tượng không được tham chiếu, nó còn nén các đối tượng được tham chiếu còn lại, di chuyển các đối tượng lại với nhau để phân bổ bộ nhớ mới dễ dàng và nhanh hơn nhiều.

Bộ nhớ heap JVM

Nghỉ giải lao #61.  Cách hoạt động của bộ sưu tập rác trong Java (JVM).  15 câu hỏi quan trọng về Spring trong cuộc phỏng vấn kỹ thuật - 3

Thế hệ trẻ

Các đối tượng mới được tạo bắt đầu ở Thế hệ trẻ. Nó còn được gọi là vườn ươm vì những đồ vật mới bắt đầu sinh sống ở đây. Thế hệ trẻ được chia thành Không gian Eden, nơi tất cả các vật thể mới bắt đầu và hai Không gian sống sót, nơi các vật thể được chuyển ra khỏi Eden sau khi sống sót trong một chu kỳ thu gom rác. Chúng gây ra tình trạng thu gom rác lại khi người thu gom rác Thế hệ trẻ thu gom các đồ vật. Không gian Eden Tất cả các vật thể mới lần đầu tiên được tạo ra trong Không gian Eden. Bộ sưu tập rác nhỏ sẽ kích hoạt khi đạt đến ngưỡng do JVM xác định. Các đối tượng được đề cập sẽ được di chuyển từ Không gian Eden sang không gian lưu đầu tiên ('Eden' và 'from' -> 'to'). Các đối tượng không được tham chiếu sẽ bị xóa khi Không gian Eden bị xóa. Survivor 0 (S0) và Survivor 1 (S1) Cả hai trường Survivor (Từ và đến) đều bắt đầu trống. Khi quá trình thu gom rác xảy ra lần nữa, tất cả các đối tượng được tham chiếu sẽ được chuyển vào không gian còn lại. Khi việc thu gom rác kết thúc, địa điểm (tên) của người sống sót "từ" và "đến" sẽ được hoán đổi. Nếu trong quá trình thu gom rác trước đây, S1 đóng vai trò “đến” thì bây giờ S1 đã đầy và trở thành “từ”. Theo đó, nếu S0 trống thì nó sẽ trở thành “to”.

Thế hệ cũ

Sau khi thu gom rác nhỏ, khi các đối tượng lỗi thời đạt đến ngưỡng tuổi nhất định (ngưỡng mặc định cho các JVM hiện đại được đặt thành 15 chu kỳ thu gom rác), chúng cùng với các đối tượng tồn tại lâu dài sẽ chuyển từ thế hệ trẻ sang thế hệ cũ. Khi những người thu gom rác nhỏ tiếp tục phát sinh, các đồ vật tiếp tục di chuyển vào không gian Thế hệ cũ, nó sẽ bắt đầu lấp đầy và việc thu gom rác lớn sẽ diễn ra. Việc thu gom rác cơ bản xảy ra khi các đối tượng được thu thập bởi trình thu gom rác thế hệ cũ. Nghỉ giải lao #61.  Cách hoạt động của bộ sưu tập rác trong Java (JVM).  15 câu hỏi quan trọng về Spring trong cuộc phỏng vấn kỹ thuật - 4

Thế hệ vĩnh viễn

Siêu dữ liệu như các lớp và phương thức được lưu trữ trong Thế hệ vĩnh viễn. Các lớp không còn được sử dụng có thể được bộ thu gom rác loại bỏ khỏi nó. Trong quá trình thu gom rác đầy đủ, các đối tượng không sử dụng từ tất cả các thế hệ sẽ được thu thập.Nghỉ giải lao #61.  Cách hoạt động của bộ sưu tập rác trong Java (JVM).  15 câu hỏi quan trọng về Spring trong cuộc phỏng vấn kỹ thuật - 5

Các loại thu gom rác

Các bộ sưu tập rác dọn sạch các phần khác nhau trong vùng heap thường được gọi là các bộ sưu tập rác Nhỏ, Chính và Đầy đủ. Nhưng vì các thuật ngữ Minor, Major và Full được sử dụng rộng rãi mà không có định nghĩa chính xác nên chúng ta sẽ xem xét phần giải thích về tất cả các kiểu thu gom rác này.

Thu gom rác nhỏ

Việc thu gom rác từ không gian Thế hệ trẻ được gọi là Bộ sưu tập rác nhỏ. Kiểu xây dựng này luôn được kích hoạt khi JVM không thể phân bổ không gian cho một đối tượng mới, tức là khi Eden Space đã đầy. Do đó, tỷ lệ lựa chọn càng cao thì việc thu gom rác nhỏ càng xảy ra thường xuyên hơn.

Bộ sưu tập rác lớn

Bộ sưu tập rác chính sẽ dọn sạch Tenured (không gian cũ). Bởi vì Thế hệ Cũ lớn hơn nên việc tập hợp diễn ra ít thường xuyên hơn Thế hệ Trẻ. Khi các đối tượng biến mất khỏi Thế hệ cũ, chúng tôi nói rằng đã xảy ra "việc thu gom rác lớn". Nhà sưu tập Thế hệ Cũ sẽ cố gắng dự đoán khi nào mình cần bắt đầu thu thập để tránh thất bại trong việc quảng bá từ Thế hệ Trẻ. Người thu thập theo dõi ngưỡng lấp đầy của Thế hệ cũ và bắt đầu thu thập khi vượt quá ngưỡng đó. Nếu ngưỡng này không đủ để đáp ứng yêu cầu khuyến mãi, "Thu gom rác đầy đủ" sẽ được triển khai.

Thu gom rác đầy đủ

Bộ sưu tập rác đầy đủ sẽ dọn sạch toàn bộ không gian cả không gian trẻ và cũ. Nhiều người nhầm lẫn giữa Major (chỉ thế hệ OLD) và Full GC (Young + OLD (Heap)). Full Garbage Collection bao gồm việc quảng bá tất cả các sinh vật sống từ thế hệ trẻ đến thế hệ già sau khi tập hợp và nén thế hệ cũ. Việc thu gom rác hoàn chỉnh sẽ là điểm dừng của Stop-the-World. Nó đảm bảo rằng các đối tượng mới không được phân bổ và các đối tượng đó không trở nên không khả dụng khi bộ sưu tập đang chạy.

15 câu hỏi quan trọng về Spring trong cuộc phỏng vấn kỹ thuật

Nguồn: Dev.to Spring Framework là một framework phổ quát cho nền tảng Java. Chức năng cốt lõi của nó có thể được sử dụng bởi bất kỳ ứng dụng Java nào và có các tiện ích mở rộng để tạo các ứng dụng web dựa trên Java EE. Dưới đây là danh sách các câu hỏi và câu trả lời phỏng vấn liên quan đến mã hóa Spring. Chúng tôi hy vọng chúng sẽ giúp bạn chuẩn bị cho cuộc phỏng vấn kỹ thuật vào năm 2021.Nghỉ giải lao #61.  Cách hoạt động của bộ sưu tập rác trong Java (JVM).  15 câu hỏi quan trọng về Spring trong cuộc phỏng vấn kỹ thuật - 6

1. Mùa xuân là gì?

Trả lời: Spring là một framework mã nguồn mở để phát triển các ứng dụng Java. Các tính năng cốt lõi của Spring Framework có thể được sử dụng để phát triển bất kỳ ứng dụng Java nào và có các tiện ích mở rộng để tạo các ứng dụng web dựa trên nền tảng Java EE. Khung công tác Spring nhằm mục đích làm cho J2EE dễ sử dụng hơn trong quá trình phát triển và cải thiện thực tiễn lập trình bằng cách kết hợp mô hình dựa trên POJO (Plain Old Java Object).

2. Phạm vi mặc định của Bean trong Spring framework là gì?

Trả lời: Phạm vi mặc định của Bean là Singleton (mẫu thiết kế).

3. Bean wire là gì?

Trả lời: Bean Wireing là hành động tạo liên kết giữa các thành phần ứng dụng (bean) trong Spring container.

4. Bảo mật mùa xuân là gì?

Trả lời: Spring Security là một module riêng biệt của Spring framework tập trung vào việc cung cấp các phương thức xác thực và ủy quyền cho các ứng dụng Java. Nó cũng sửa hầu hết các lỗ hổng bảo mật phổ biến như tấn công CSRF. Để sử dụng Spring Security trong các ứng dụng web, bạn có thể bắt đầu bằng một chú thích đơn giản: @EnableWebSecurity.

5. Định nghĩa về Bean chứa đựng những gì?

Trả lời: Định nghĩa Bean chứa thông tin gọi là siêu dữ liệu cấu hình mà vùng chứa cần biết những thông tin sau:
  • Cách tạo hạt đậu;
  • Chi tiết vòng đời của Bean;
  • sự phụ thuộc của đậu.

6. Spring Boot là gì?

Trả lời: Spring Boot là một dự án cung cấp một bộ khung được cấu hình sẵn để giảm cấu hình soạn sẵn để bạn có thể thiết lập và chạy ứng dụng Spring với mã tối thiểu.

7. DispatcherServlet là gì và dùng để làm gì?

Trả lời: DispatcherServlet là một triển khai mẫu thiết kế Front Controller xử lý tất cả các yêu cầu web đến ứng dụng Spring MVC. Mẫu Bộ điều khiển phía trước (Mẫu thiết kế ứng dụng doanh nghiệp) là một mẫu phổ biến trong các ứng dụng web có nhiệm vụ lấy toàn bộ yêu cầu và định tuyến nó đến các thành phần khác nhau của ứng dụng để xử lý thực tế. Trong Spring MVC DispatcherServlet được sử dụng để tìm bộ điều khiển chính xác để xử lý yêu cầu. Điều này được thực hiện bằng cách sử dụng ánh xạ trình xử lý: ví dụ: chú thích @RequestMapping.

8. Spring-mvc.jar có cần thiết trên đường dẫn lớp hay nó là một phần của spring-core?

Trả lời: Spring-mvc.jar là một phần của spring-core, có nghĩa là nếu bạn muốn sử dụng khung công tác Spring MVC trong dự án Java của mình thì bạn phải đưa spring-mvc.jar vào đường dẫn lớp của ứng dụng. Trong ứng dụng web Java, spring-mvc.jar thường được đặt trong thư mục /WEB-INF/lib.

9. Lợi ích của việc sử dụng Spring là gì?

Trả lời: Dưới đây là danh sách một số lợi ích khi sử dụng Spring Framework:
  • Nhẹ – Lò xo tương đối nhẹ khi nói đến kích thước và độ trong suốt. Phiên bản cơ bản của Spring Framework có dung lượng khoảng 2 MB.
  • Đảo ngược điều khiển (IOC) - Khớp nối lỏng đạt được trong Mùa xuân bằng cách sử dụng kỹ thuật đảo ngược điều khiển. Các đối tượng cung cấp các phần phụ thuộc của chúng thay vì tạo hoặc tìm kiếm các đối tượng phụ thuộc.
  • Hướng theo khía cạnh - Spring hỗ trợ lập trình hướng theo khía cạnh và đảm bảo sự phát triển nhất quán bằng cách tách logic nghiệp vụ ứng dụng khỏi các dịch vụ hệ thống.
  • Bộ chứa - Spring Container tạo các đối tượng, liên kết chúng lại với nhau, định cấu hình và quản lý chúng từ khi tạo đến khi hủy.
  • MVC Framework - Spring web framework là một khung web MVC được thiết kế tốt, cung cấp giải pháp thay thế cho các khung web như Struts hoặc các khung web được thiết kế quá mức hoặc ít phổ biến hơn.
  • Quản lý giao dịch - Spring có giao diện quản lý giao dịch nhất quán có thể mở rộng sang các giao dịch cục bộ (ví dụ: sử dụng một cơ sở dữ liệu) hoặc giao dịch toàn cầu (ví dụ: sử dụng JTA).
  • Xử lý ngoại lệ - Spring cung cấp một API thuận tiện để chuyển đổi các ngoại lệ dành riêng cho công nghệ (chẳng hạn như các ngoại lệ do JDBC, Hibernate hoặc JDO đưa ra) thành các ngoại lệ nhất quán, không được kiểm tra.

10. Đậu Xuân là gì?

Trả lời: Spring Bean là thể hiện của các đối tượng được Spring Container quản lý. Chúng được tạo và kết nối bởi khung và được đặt trong một “túi đựng đồ vật” (hộp đựng) để sau này bạn có thể lấy chúng ra. Hệ thống dây điện là những gì cấu thành nên sự phụ thuộc. Điều này có nghĩa là bạn chỉ cần nói: “Tôi cần thứ này” và khuôn khổ sẽ tuân theo các quy tắc nhất định để có được đối tượng đó.

11. Mục đích của mô-đun Core Container là gì?

Trả lời: Vùng chứa kernel cung cấp chức năng cốt lõi của Spring framework. Thành phần chính của vùng chứa chính là BeanFactory, một triển khai của mẫu Factory. BeanFactory sử dụng điều khiển Đảo ngược để tách biệt các phần phụ thuộc của cấu hình và đặc tả ứng dụng khỏi mã ứng dụng thực tế.

12. Bối cảnh ứng dụng là gì?

Trả lời: Thoạt nhìn, bối cảnh ứng dụng giống như nhà máy sản xuất đậu. Cả hai đều tải các định nghĩa về đậu, gộp các đậu lại với nhau và phân phối chúng theo yêu cầu. Nhưng nó cũng cung cấp:
  • Một công cụ để giải quyết tin nhắn văn bản, bao gồm hỗ trợ quốc tế hóa.
  • Một cách phổ biến để tải tài nguyên tập tin.
  • Sự kiện dành cho đậu được đăng ký làm người nghe.

13. Làm cách nào để tích hợp Java Server Faces (JSF) với Spring?

Trả lời: JSF và Spring có chung một số tính năng, đặc biệt là trong lĩnh vực dịch vụ Inversion of Control. Bằng cách khai báo các Bean được quản lý JSF trong tệp cấu hình Faces-config.xml, bạn cho phép FacesServlet khởi tạo Bean đó khi khởi động. Các trang JSF của bạn có quyền truy cập vào các hạt này và tất cả các thuộc tính của chúng. JSF và Spring có thể được tích hợp theo hai cách: DelegatingVariableResolver : Spring đi kèm với một trình phân giải biến JSF cho phép bạn sử dụng JSF và Spring cùng nhau. DelegatingVariableResolver trước tiên ủy quyền việc tra cứu các giá trị cho trình thông dịch mặc định của quá trình triển khai JSF cơ bản, sau đó cho "ngữ cảnh nghiệp vụ" của Spring WebApplicationContext. Điều này giúp dễ dàng đưa các phần phụ thuộc vào các Bean do JSF quản lý. FacesContextUtils : VariableResolver tùy chỉnh hoạt động tốt khi ánh xạ các thuộc tính của nó tới các Beans trong Faces-config.xml. Nhưng nếu bạn cần chụp một hạt đậu, lớp FacesContextUtils sẽ giúp việc đó trở nên dễ dàng. Nó tương tự như WebApplicationContextUtils ngoại trừ việc nó chấp nhận tham số FacesContext thay vì tham số ServletContext.
ApplicationContext ctx = FacesContextUtils.getWebApplicationContext (FacesContext.getCurrentInstance ());

14. Spring MVC framework là gì?

Trả lời: Spring Web MVC framework cung cấp kiến ​​trúc model-view-controller và các thành phần dựng sẵn có thể được sử dụng để phát triển các ứng dụng web linh hoạt và được liên kết lỏng lẻo. Mẫu MVC dẫn đến việc tách các khía cạnh khác nhau của ứng dụng (logic đầu vào, logic nghiệp vụ và logic giao diện người dùng) trong khi cho phép ghép nối lỏng lẻo giữa các thành phần này.

15. Xử lý sự kiện trong Spring như thế nào?

Trả lời: Việc xử lý trong ApplicationContext được cung cấp thông qua lớp ApplicationEvent và giao diện ApplicationListener . Nghĩa là, nếu một Bean triển khai ApplicationListener thì mỗi khi một ApplicationEvent được xuất bản lên ApplicationContext thì Bean đó sẽ được đăng ký. Cảm ơn bạn đã đọc và chúc may mắn với cuộc phỏng vấn kỹ thuật của bạn!
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION