sách gpt4 ăn đã đi

[Phỏng vấn] Địa điểm phỏng vấn mùa xuân nôn ra máu (nên thu thập)

In lại Tác giả: qq735679552 Thời gian cập nhật: 29-09-2022 22:32:09 26 4
mua khóa gpt4 giày nike

CFSDN nhấn mạnh vào giá trị tạo ra nguồn mở và chúng tôi cam kết xây dựng nền tảng chia sẻ tài nguyên để mọi nhân viên CNTT có thể tìm thấy thế giới tuyệt vời của bạn tại đây.

Bài viết trên blog CFSDN [Phỏng vấn] Tuyển tập trang web phỏng vấn các vấn đề mùa xuân (bộ sưu tập được đề xuất) được tác giả sưu tầm và biên soạn. Nếu bạn quan tâm đến bài viết này, hãy nhớ thích nó.

bắt đầu từ một câu chuyện cười 。

Câu hỏi: Nêu các bước để cho con voi vào tủ lạnh?

Trả lời: Ba bước, thứ nhất, mở cửa tủ lạnh, thứ hai, cho con voi vào, thứ ba, đóng cửa tủ lạnh lại.

Câu hỏi: Các bước thực hiện giao dịch mùa xuân là gì?

Trả lời: Ba bước, đầu tiên, tìm phương thức yêu cầu giao dịch, thứ hai, thêm giao dịch và thứ ba, thực hiện giao dịch.

bạn có thể thấy đây không phải là chuyện đùa mà là nghiêm túc.

cố gắng tìm lối vào 。

Khi đối mặt với một điều gì đó hoàn toàn xa lạ, bạn phải tìm cách tìm ra sự đột phá, rồi dần dần đi sâu hơn. Vậy đột phá cho những điều mùa xuân ở đâu? Rõ ràng là nó nằm trong chú thích @enabletransactionmanagement vì nó kích hoạt chức năng giao dịch.

Xin vui lòng nhìn vào hình ảnh dưới đây:

[Phỏng vấn] Địa điểm phỏng vấn mùa xuân nôn ra máu (nên thu thập)

Người ta thấy rằng chú thích cũng giới thiệu một bộ chọn cấu hình quản lý giao dịch lớp.

Chúng ta hãy nhìn vào lớp này một lần nữa, như được hiển thị bên dưới:

[Phỏng vấn] Địa điểm phỏng vấn mùa xuân nôn ra máu (nên thu thập)

Người ta nhận thấy rằng nếu sử dụng proxy thì cấu hình quản lý giao dịch proxy lớp sẽ được giới thiệu.

Sau đó nhìn vào lớp này (đây là điểm chính), như hiển thị bên dưới:

[Phỏng vấn] Địa điểm phỏng vấn mùa xuân nôn ra máu (nên thu thập)

Người ta thấy rằng lớp này đã đăng ký ba hạt đậu trong vùng chứa, hạt đầu tiên là Beanfactorytransactionattributesourceadvisor. Nó kết thúc bằng việc cố vấn chỉ ra rằng đó là thứ gì đó thuộc danh mục aop mùa xuân.

Trong aop, Advisor = pointcut + Advice, pointcut là điểm đầu vào, biểu thị phương thức cần chặn và lời khuyên là nâng cao, biểu thị chức năng của đối tượng cần thêm vào.

Chúng ta hãy xem hai loại đậu đã đăng ký khác có liên quan đến hai loại đậu này. Trong số đó, giao dịch chặn là một lời khuyên vì nó triển khai giao diện lời khuyên và chứa logic của việc thêm mọi thứ.

Mặc dù giao dịch thuộc tính nguồn không phải là một điểm cắt, nhưng nó được điểm cắt sử dụng để phát hiện xem có chú thích @transactional trên một phương thức lớp hay không để xác định xem phương thức đó có yêu cầu nâng cao giao dịch hay không.

Điều này cũng có thể được nhìn thấy trong hình ảnh dưới đây:

[Phỏng vấn] Địa điểm phỏng vấn mùa xuân nôn ra máu (nên thu thập)

Bạn có thể thấy rằng đậu này được thiết lập thông qua phương thức set bên dưới và sau đó được sử dụng trong lớp pointcut.

Nhìn chung, cấu trúc và phân chia chức năng của phần này vẫn rất rõ ràng. Hãy cùng nghiên cứu từng cái một dưới đây.

điểm cắt aop.

Lớp giao dịchattributesourcepointcut kết thúc bằng pointcut, chỉ ra rằng đó là một điểm vào, xác định phương thức bị chặn. Phần tiền tố của tên lớp cho biết nguyên tắc triển khai của điểm vào này.

Nhìn vào tiền tố: giao dịch thuộc tính nguồn. Nó kết thúc bằng nguồn, cho biết đó là một nguồn (tức là một nguồn, có nghĩa là cung cấp mọi thứ cho thế giới bên ngoài). Tiền tố của nó là thuộc tính giao dịch, là thuộc tính giao dịch.

Có thể thấy rằng nguồn này có thể cung cấp các thuộc tính giao dịch ra bên ngoài. Trên thực tế, nó là để xác định xem phương thức của một lớp có được đánh dấu bằng chú thích @transactional hay không. , thuộc tính giao dịch).

Nói chung, pointcut chặn phương thức, sau đó sử dụng "nguồn" này để lấy các thuộc tính giao dịch trên phương thức và lớp. Nếu có thể lấy được, điều đó có nghĩa là phương thức này cần tham gia vào giao dịch và giao dịch sẽ được nâng cao. . Nếu không, nó sẽ không được nâng cao.

Hình ảnh dưới đây có thể chứng minh ý tưởng của chúng tôi:

[Phỏng vấn] Địa điểm phỏng vấn mùa xuân nôn ra máu (nên thu thập)

Có thể thấy, 2 tham số của phương thứcmatch là một phương thức (method) và một lớp (class). Cuối cùng, lấy thuộc tính giao dịch từ phương thức và lớp, sau đó đánh giá xem nó có rỗng hay không.

Bây giờ “nguồn” này vẫn là hộp đen, hãy cùng bật mí bên dưới nhé. Lớp triển khai của nó là Annotationtransactionattributesource, bắt đầu bằng chú thích, cho biết rằng nó được triển khai dựa trên các chú thích.

Hình ảnh dưới đây là một phần mã nguồn của nó:

[Phỏng vấn] Địa điểm phỏng vấn mùa xuân nôn ra máu (nên thu thập)

Phương thức đầu tiên tìm các thuộc tính giao dịch từ lớp và phương thức thứ hai tìm các thuộc tính giao dịch từ phương thức. Cả hai đều gọi phương thức thứ ba để triển khai.

ps: Tất cả chúng ta đều biết rằng mức độ ưu tiên của các chú thích trên các phương thức cao hơn các chú thích trên các lớp. Điều này là do khi tìm kiếm các chú thích, hãy tìm chúng trên phương thức trước, sau đó tìm chúng trên lớp khi không tìm thấy chúng. Do đó, mức độ ưu tiên của phương pháp là cao. Phần logic mã này được viết trong lớp cha và sẽ không được hiển thị ở đây.

Phương pháp thứ ba sử dụng nhiều trình phân tích cú pháp chú thích giao dịch (trình phân tích cú pháp chú thích giao dịch) để phân tích các chú thích. Bởi vì các chú thích giao dịch không chỉ được cung cấp bởi spring mà còn bởi java sau này, đó là javax.transaction.transactional.

Lớp triển khai trình phân tích cú pháp mà mùa xuân tự chú thích là springtransactionannotationparser, như hiển thị bên dưới:

[Phỏng vấn] Địa điểm phỏng vấn mùa xuân nôn ra máu (nên thu thập)

Có thể thấy, lớp công cụ được sử dụng để đọc các thuộc tính được chú thích @transactional, sau đó phân tích từng giá trị thuộc tính và thực hiện chuyển đổi kiểu, sau đó gói gọn các thuộc tính này thành một lớp. Lớp này thực chất là thuộc tính giao dịch. , tức là thuộc tính giao dịch.

Thuộc tính giao dịch này kế thừa giao diện định nghĩa giao dịch mà tất cả chúng ta đều quen thuộc, như được hiển thị bên dưới:

[Phỏng vấn] Địa điểm phỏng vấn mùa xuân nôn ra máu (nên thu thập)

Điều này cũng chứng minh những gì đã nói trong bài viết trước. Chú thích @transactional có hai chức năng. Một là để cho biết rằng bạn muốn tham gia vào giao dịch, và hai là cho biết cách tham gia vào giao dịch. chỉ rõ cách tham gia.

Thuộc tính giao dịch thuộc tính giao dịch này là một giao diện và lớp triển khai của nó sẽ không được mô tả chi tiết ở đây.

tăng cường aop.

Lời khuyên là một cải tiến trong AOP. Transactioninterceptor triển khai giao diện tư vấn, vì vậy đây là một cải tiến về giao dịch.

Đầu tiên chúng ta hãy nhìn vào giao diện như hình dưới đây:

[Phỏng vấn] Địa điểm phỏng vấn mùa xuân nôn ra máu (nên thu thập)

Phát hiện ra nó chỉ là một giao diện đánh dấu trống. Và tên gói của nó là org.aopalliance, là một tổ chức liên minh AOP và nó xây dựng đặc tả AOP.

Đầu tiên chúng ta cùng tìm hiểu một số nội dung liên quan trong trường aop Pointcut là điểm vào, biểu thị phương thức cần chặn. Đó là một khái niệm tĩnh, nghĩa là nó tồn tại ngay cả khi chương trình không chạy.

Vậy khi nó thực sự đang chạy thì đã bị chặn lại. Làm thế nào để thể hiện tình trạng này vào lúc này? Nó được biểu thị bằng điểm nối, vì vậy điểm nối là một khái niệm thời gian chạy và chỉ tồn tại trong thời gian chạy.

Mời các bạn xem giao diện joinpoint như hình dưới đây:

[Phỏng vấn] Địa điểm phỏng vấn mùa xuân nôn ra máu (nên thu thập)

Phương thức đầu tiên tiến hành() có nghĩa là "tiếp tục". Gọi nó có nghĩa là thực thi chính phương thức bị chặn và trả về giá trị trả về của chính phương thức đó.

Phương thức thứ hai getthis() là lấy đối tượng this, đối tượng đích nơi phương thức đang chạy. Nếu nó là một phương thức tĩnh thì nó là null, vì các phương thức tĩnh thuộc về chính lớp đó và không yêu cầu một đối tượng khi chạy.

Phương thức thứ ba getstaticpart() thực sự đại diện cho phương thức bị chặn, tức là một phương thức. Phương thức thực sự được coi là "siêu dữ liệu", thuộc về chính loại đó và cũng có nghĩa là "tĩnh".

Chúng ta hãy xem một giao diện khác, lệnh gọi, kế thừa điểm tham gia, như hiển thị bên dưới:

[Phỏng vấn] Địa điểm phỏng vấn mùa xuân nôn ra máu (nên thu thập)

Phương thức getarguments() biểu thị các tham số được truyền cho phương thức bị chặn khi chạy.

Hãy xem xét một giao diện khác, phương thức gọi, kế thừa lời gọi, như dưới đây:

[Phỏng vấn] Địa điểm phỏng vấn mùa xuân nôn ra máu (nên thu thập)

Phương thức getmethod() trả về một phương thức, là phương thức hiện đang thực thi. Đây là một triển khai thân thiện của phương thức chặn này và trả về cùng một kết quả.

Có thể thấy rằng giao diện gọi phương thức đã chứa đầy đủ thông tin về lệnh gọi phương thức, các phương thức, tham số và đối tượng đích. Đây thực sự là những gì bị chặn trong thời gian chạy.

Nhìn vào giao diện bên dưới, bộ chặn phương thức, bộ chặn phương thức, như hiển thị bên dưới:

[Phỏng vấn] Địa điểm phỏng vấn mùa xuân nôn ra máu (nên thu thập)

Nó chỉ có một lệnh gọi phương thức và tham số của phương thức là lệnh gọi phương thức được giới thiệu ở trên. Vì vậy, bộ chặn có thể sử dụng tham số này để gọi phương thức đích. Tất nhiên, nó có thể thêm logic riêng của mình trước/sau cuộc gọi.

Lớp giao dịch chặn thực hiện giao diện này, do đó mã logic giao dịch có thể được chèn trước và sau khi gọi phương thức đích để nâng cao giao dịch.

Sau đây là cách thực hiện phương pháp này bởi bộ chặn giao dịch, như được hiển thị bên dưới:

[Phỏng vấn] Địa điểm phỏng vấn mùa xuân nôn ra máu (nên thu thập)

Phương thức Invovwithintransaction mà nó gọi nằm trong lớp cha, xem hình bên dưới:

[Phỏng vấn] Địa điểm phỏng vấn mùa xuân nôn ra máu (nên thu thập)

Có rất nhiều thứ để làm trong bức ảnh này, chúng ta hãy xem từng thứ một:

Hai dòng đầu tiên lấy thuộc tính giao dịch "nguồn", sau đó sử dụng "nguồn" này để lấy thuộc tính giao dịch. Này, hơi lạ một chút. Không phải bạn đã hiểu ở trên rồi sao? Có, thông tin trên thu được trong pointcut, nó chỉ được sử dụng để xác định xem phương thức đó có nên bị chặn hay không. Các tài sản thu được ở đây thực sự được sử dụng cho các giao dịch.

Dòng thứ ba xác định trình quản lý giao dịch dựa trên các thuộc tính giao dịch.

Bước tiếp theo là mở giao dịch bằng trình quản lý giao dịch.

Bước tiếp theo là gọi và thực thi phương thức đích bị chặn. Tất nhiên, hãy thử/bắt việc thực thi này.

Nếu một ngoại lệ được ném ra, quá trình xử lý giao dịch liên quan đến ngoại lệ đó sẽ được thực hiện và sau đó ngoại lệ đó sẽ được ném lên trên.

Nếu không có ngoại lệ nào được đưa ra thì giao dịch cam kết sẽ xảy ra.

Nhánh else cuối cùng là lệnh gọi đến một giao dịch có lập trình. Việc mở/gửi/khôi phục giao dịch được kiểm soát bởi mã riêng của nhà phát triển, do đó người quản lý giao dịch không cần phải lo lắng.

Vui lòng xem bên dưới quá trình xử lý giao dịch liên quan đến ngoại lệ, như được hiển thị bên dưới:

[Phỏng vấn] Địa điểm phỏng vấn mùa xuân nôn ra máu (nên thu thập)

Xác định xem loại ngoại lệ có yêu cầu khôi phục hay không. Nếu cần, hãy khôi phục giao dịch. Nếu không, hãy tiếp tục gửi giao dịch.

Cấu trúc tổng thể và luồng logic ở đây cũng tương đối rõ ràng, vì một mặt, nó được hưởng lợi từ khái niệm trường aop, mặt khác, người quản lý giao dịch che chắn mọi sự phức tạp của giao dịch.

ps: Nội dung của trình quản lý giao dịch thực sự khá phức tạp. Tôi sẽ giải thích chi tiết ở bài viết tiếp theo.

Được rồi, trên đây là bản tóm tắt phỏng vấn chuyện mùa xuân được biên tập viên giới thiệu, hy vọng nó sẽ hữu ích cho bạn. Nếu có thắc mắc vui lòng để lại tin nhắn cho tôi, biên tập viên sẽ trả lời bạn kịp thời! .

Liên kết gốc: https://www.cnblogs.com/lixinjie/archive/2019/04/16/a-enough-source-read-of-spring-tx-for-interview.html.

Cuối cùng, bài viết này về [Phỏng vấn] Trung tâm kiểm tra phỏng vấn doanh nghiệp mùa xuân Phân loại máu (nên thu thập) kết thúc tại đây. Nếu bạn muốn biết thêm về [Phỏng vấn] Trung tâm kiểm tra phỏng vấn doanh nghiệp mùa xuân Phân loại máu (nên thu thập), vui lòng tìm kiếm. Các bài viết của CFSDN hoặc tiếp tục duyệt các bài viết liên quan, mong các bạn sẽ ủng hộ blog của mình trong thời gian tới! .

26 4 0
qq735679552
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress