JavaRush /Blog Java /Random-VI /Nhiệm vụ kiểm tra việc làm, chúng ta hãy tìm ra nó..
timurnav
Mức độ

Nhiệm vụ kiểm tra việc làm, chúng ta hãy tìm ra nó..

Xuất bản trong nhóm
Các bạn, xin chào mọi người. Tôi muốn chia sẻ với các bạn kinh nghiệm giải quyết một nhiệm vụ thử nghiệm cho vị trí nhà phát triển Java trong một công ty của Nga. Tôi sẽ nói ngay rằng việc thực hiện chức năng chính của nhiệm vụ không đặc biệt khó khăn, nhưng như mọi khi, các chi tiết và những điều nhỏ nhặt rất quan trọng, khiến tôi không thể nộp kịp thời; họ không bao giờ trả lời bất cứ điều gì về nhiệm vụ - vị trí tuyển dụng của họ đã được lấp đầy khi tôi gửi nó cho họ. Tôi khuyên bạn nên xem xét nhiệm vụ để xem liệu tôi đã làm mọi thứ được yêu cầu hay chưa. Và đối với những người không biết cách làm nó, tôi sẽ bổ sung thêm rất nhiều điều về cách tôi xử lý nó. Nếu có ai quan tâm đến điều này, chào mừng bạn đến với con mèo. Tôi sẽ nói ngay rằng tôi sẽ không đăng toàn bộ giải pháp ở đây, nhưng sẽ có rất nhiều lời giải thích cho người mới bắt đầu, nếu ai đó không quan tâm đến việc đọc các bài chia sẻ của tôi thì đây là dự án trên github . văn bản của chính nhiệm vụ đó.
Nhiệm vụ kiểm tra số 1
Mô tả: Máy chủ API (API JSON HTTP) Công cụ phát triển: Java Framework: Play Framework 2.4 (hoặc cao hơn) hoặc Spring boot 1.2.3 (hoặc cao hơn) Cơ sở dữ liệu: Giao thức MySQL : HTTP, cổng 80 Chức năng (yêu cầu):
  1. Trình tải.
    • Chúng ta chuyển file (ảnh avatar JPG) về server.
    • Chúng tôi lưu hình ảnh vào một thư mục trên máy chủ.
    • Phản hồi của máy chủ là URI nội bộ của hình ảnh.
  2. Thêm người dùng mới.
    • Chúng tôi chuyển dữ liệu cá nhân của người dùng đến máy chủ (URI của hình ảnh, tên người dùng, email, v.v.).
    • Chúng tôi lưu thông tin trong cơ sở dữ liệu.
    • Phản hồi của máy chủ là ID duy nhất của người dùng mới.
  3. Thu thập thông tin về người dùng.
    • Chúng tôi truyền một ID người dùng duy nhất đến máy chủ.
    • Đọc thông tin từ cơ sở dữ liệu.
    • Phản hồi của máy chủ là dữ liệu cá nhân của người dùng (xem ở trên).
  4. Thay đổi trạng thái người dùng (Trực tuyến, Ngoại tuyến).
    • Chúng tôi chuyển ID người dùng duy nhất và trạng thái mới (Trực tuyến, Ngoại tuyến) sang máy chủ.
    • Thay đổi trạng thái người dùng.
    • Phản hồi của máy chủ - ID người dùng duy nhất, trạng thái mới và trước đó.
    Lưu ý: Máy chủ đang truy vấn API/cơ sở dữ liệu bên ngoài. Vì đây là một nhiệm vụ thử nghiệm được đơn giản hóa nên cần phải triển khai một “sơ khai” với quyền truy cập mô phỏng và thời gian trễ là 5-10 giây.
  5. Thống kê máy chủ.
    • Chúng tôi chuyển các tham số đến máy chủ: 1. trạng thái máy khách (Trực tuyến, Ngoại tuyến hoặc vắng mặt), 2. ID duy nhất (dấu thời gian) của yêu cầu (có thể vắng mặt)
    • Phản hồi của máy chủ là danh sách người dùng có trạng thái và URI hình ảnh, cũng như ID duy nhất (dấu thời gian) của yêu cầu.
    Lưu ý: Nếu yêu cầu chứa các tham số, máy chủ phải lọc phản hồi theo chúng. Nếu yêu cầu chứa ID duy nhất (dấu thời gian) của yêu cầu (đã nhận trước đó), thì máy chủ sẽ chỉ trả về những người dùng có trạng thái đã thay đổi sau (đúng lúc) ID duy nhất này (dấu thời gian).
Những yêu cầu bắt buộc:
- Yên nghỉ. - Tất cả dữ liệu ở định dạng JSON. - Máy chủ API phải được thiết kế có tính đến yêu cầu 3 và 5 có mức độ ưu tiên cao nhất (so với yêu cầu 1, 2, 4) và phải được hoàn thành càng nhanh càng tốt. - Xử lý lỗi.
Yêu cầu tùy chọn (mong muốn):
- Tài liệu về mã. - Kiến trúc API Server phải được thiết kế để chịu tải và mở rộng quy mô cao. - Kiểm tra.
Kết quả kiểm tra:
- Kết quả của nhiệm vụ thử nghiệm phải được cung cấp trong kho lưu trữ và có hướng dẫn chi tiết để triển khai. Nên đính kèm Dockerfile để xây dựng vùng chứa Docker cho tác vụ thử nghiệm. Có thể tải xuống github.com. - Phải chứa tài liệu ngắn gọn về API đã tạo (danh sách yêu cầu, tham số yêu cầu, định dạng yêu cầu, định dạng phản hồi, v.v.). - Thông tin về thời gian dành cho nhiệm vụ kiểm thử trong bối cảnh: thiết kế, lập trình, tài liệu, v.v. Xin lưu ý rằng nhiệm vụ kiểm tra này chỉ nhằm mục đích đánh giá kiến ​​thức và kỹ năng chứ không nhằm mục đích tạo ra một sản phẩm hoàn chỉnh (máy chủ API), do đó cho phép đơn giản hóa bằng cách giải thích và lý do.
Những lập trình viên chu đáo và có kinh nghiệm có thể bỏ qua phần tiếp theo, ở đây tôi sẽ giải quyết nội dung của nhiệm vụ. “Tiêu đề” của nhiệm vụ không gây khó khăn gì trong việc hiểu, vì vậy tôi sẽ chỉ nói rằng lựa chọn của tôi rơi vào Spring Boot, nhưng không phải vì tôi đã làm gì đó với nó mà vì tôi đã hoàn thành một dự án thực sự bằng cách sử dụng Spring (nhưng Boot không có ở đó, theo tôi hiểu vì tính đơn giản của nó). Theo chức năng của máy chủ: 1) Trình tải xuống tệp. Về cơ bản không có gì phức tạp ở đây, tôi chỉ cần tìm hiểu cách các bức ảnh thường được lưu trữ trên máy chủ, hóa ra cách thuận tiện nhất là chỉ cần đặt chúng vào một thư mục đặc biệt nào đó. Chúng ta sẽ xem cách thực hiện cụ thể dưới đây. 2) Thêm người dùng mới, thao tác đơn giản, bạn nào đã từng làm ứng dụng CRUD thì sẽ hỗ trợ mình, nếu chưa thì bạn sẽ thấy mọi thứ bên dưới. 3) Thu thập thông tin về người dùng. không có câu hỏi - mọi thứ đều rõ ràng. 4) Thay đổi trạng thái người dùng. Hai điểm đầu tiên của nhiệm vụ đã rõ như ban ngày, nhưng yêu cầu bên ngoài thì sao??? Không thể tìm ra nó nếu không có 100g, ngay cả bây giờ tôi cũng không chắc chắn 100% liệu mình có hiểu đúng hay không. Chi tiết bên dưới. 5) Thống kê máy chủ. Điều này cũng thú vị. Điểm đầu tiên đề xuất triển khai một phương thức với nhiều tùy chọn khác nhau cho các tham số, vẫn chưa rõ cách thực hiện điều này, vì đây phải là một phương thức điều khiển. điểm thứ hai hỏi tất cả những người dùng có trạng thái đã thay đổi sau một thời điểm, điều này có vẻ rõ ràng nhưng có một số chi tiết.
Bắt đầu
ôi, tôi đã đọc cụm từ này bao nhiêu lần khi đang thực hiện nhiệm vụ này! Nếu bạn đã từng cố gắng tìm cách thiết lập một dự án trong Spring, nhưng vì lý do nào đó mà bạn chưa bao giờ thử Spring Boot, xin chúc mừng, bạn sẽ rất vui với những gì tôi sẽ viết dưới đây. Tôi đọc ở đâu đó rằng các lập trình viên thường chuyển một lượng mã rất lớn từ dự án này sang dự án khác, đây là mã mẫu - cài đặt để kết nối với cơ sở dữ liệu, ánh xạ servlet, v.v., chẳng hạn, để giảm số lượng mã mẫu để làm việc với Chúng tôi sử dụng JPA/Hibernate cho cơ sở dữ liệu, chúng ẩn một số mẫu, nhưng để định cấu hình chúng, bạn lại cần phải viết tệp xml hoặc các lớp cấu hình. và nếu bạn có một dự án nhỏ, thì hóa ra bạn viết mã không kém, thậm chí ngược lại. Tiếp theo chúng ta kết thúc việc làm việc với JPA trong Spring; có rất nhiều dự án, nhưng tiện lợi nhất tất nhiên là Spring Data. Đây là một dự án rất lớn có thể hoạt động với mọi thứ có thể, bao gồm JPA và NoSQL cũng như nhiều dự án khác nhau, nó vô cùng kỳ diệu, chúng tôi sẽ sử dụng nó trong dự án của mình. Sử dụng Spring chúng ta gần như loại bỏ các cài đặt kết nối cơ sở dữ liệu, Spring làm mọi thứ cho chúng ta, chúng ta chỉ cần dán các chú thích cần thiết về giao dịch, bộ nhớ đệm và trong trường hợp đặc biệt google (xem phần khác) một số cài đặt khác trong cấu hình ngữ cảnh. Nhưng đồng thời, hầu hết các nhà phát triển mới làm quen hoàn toàn không biết cách tạo một dự án trong Spring. Không ai biết hoàn toàn cách cấu hình nó để chạy dự án và nhận kết quả trên trình duyệt bằng cách nhấp vào liên kết bắt đầu bằng localhost:8080/*. Và sau đó Spring Boot xuất hiện! Sẽ tốt hơn nếu nói về Spring Boot bằng một ví dụ cụ thể! Hãy bắt đầu với chỗ trống. Để tạo một dự án Spring Boot, các nhà phát triển Spring đã nghĩ ra một “hàm tạo” để tạo các mẫu. Bạn có thể sử dụng nó trên trang web của họ, nhưng thực hiện điều đó dễ dàng hơn nhiều trong IDE yêu thích của chúng tôi, Intellij IDEA. Và vì vậy: Tệp->Mới->Dự án Trong cửa sổ, hãy chuyển đến tab Spring Khởi tạo, jdk sẽ được đặt trong đó và URL https://start.spring.io, kiểm tra kết nối Internet, sau đó bạn sẽ cần để chọn tên và sau đó là các công nghệ mà chúng tôi sẽ sử dụng, ở giai đoạn đầu tiên, chúng tôi chỉ cần WEB - đánh dấu vào bên cạnh và sau đó dự án sẽ được tạo. Để Maven xem tất cả các phần phụ thuộc, chúng ta cần mở tab Maven trong ý tưởng và nhấp vào nút cập nhật. Chúng tôi đã nhận được một mẫu ứng dụng làm sẵn, chứa tất cả các cài đặt cho giao tiếp máy khách-máy chủ. Để có ấn tượng đầu tiên, hãy tạo một lớp trình điều khiển (có lẽ tất cả chúng ta đều đã nghe nói về MVC). Trong tất cả các ứng dụng Spring, các Controller có thiết kế khá đơn giản - đây là lớp được đánh dấu bằng chú thích @Controller (có thể có tiền tố, ví dụ @RestController), lớp này chịu trách nhiệm xử lý các yêu cầu gửi đến. Để bộ điều khiển nhận ra yêu cầu về một số địa chỉ, bạn cần ánh xạ địa chỉ này tới phương thức của bộ điều khiển. import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping(value = "/hello") public class DemoController { @RequestMapping(method = RequestMethod.GET) public String halloWorld() { return "Hello World!"; } @RequestMapping(value = "/{name}", method = RequestMethod.GET) public String halloName(@PathVariable("name") String name) { return "Hello, " + name + "!"; } } Chúng ta hãy tìm hiểu những gì đang xảy ra ở đây. @RestController . chính xác là chú thích mà tôi đã viết ở trên. Chúng tôi sử dụng bộ điều khiển phần còn lại vì chúng tôi muốn xem ngay kết quả và không muốn viết các trang .jsp (wow), chúng tôi sẽ dễ dàng xem ngay kết quả trong trình duyệt dưới dạng chuỗi hơn. @RequestMapping chỉ là một ràng buộc với một địa chỉ. Tiền tố địa chỉ công cộng sẽ là: localhost:8080. Như chúng ta có thể thấy, toàn bộ lớp treo tại địa chỉ /hello , điều này có nghĩa là tất cả các phương thức bên trong lớp này đều có tiền tố localhost:8080/hello. Tiếp theo là phương thức đầu tiên của lớp, trong ánh xạ riêng của nó, phương thức giao thức Http được chỉ định - một yêu cầu GET (đọc về các phương thức giao thức Http cho chính bạn) Tất cả điều này có nghĩa là gì? bằng cách thực hiện GET request tới địa chỉ localhost:8080/hello, chúng ta sẽ nhận được phản hồi dưới dạng chuỗi “Hello World!”, cùng kiểm tra nhé! Trong lớp DemoApplication, có một chú thích thú vị có thể nói là có thể tự mình khởi chạy toàn bộ bối cảnh Spring - @SpringBootApplication. Phương thức chính của lớp này trở nên kỳ diệu, nó chỉ khởi chạy tất cả các phép thuật ẩn trong SpringApplication, nếu bạn gọi menu ngữ cảnh trên lớp này, các tùy chọn sẽ xuất hiện ở dòng Run, tôi khuyên bạn nên chạy sớm với dấu màu xanh, cách này bảng điều khiển sẽ trông đẹp hơn và trong tương lai việc đọc nhật ký trực tiếp từ cô ấy sẽ dễ dàng hơn. Hãy khởi chạy ứng dụng. khi đầu ra của bàn điều khiển dừng, bạn sẽ thấy trong bảng điều khiển
2015-09-02 09:25:36.895 INFO 5844 --- [ main] sbcetTomcatEmbeddedServletContainer : Tomcat đã khởi động trên (các) cổng: 8080 (http) 2015-09-02 09:25:36.900 INFO 5844 --- [ main] demo.DemoApplication : Bắt đầu DemoApplication sau **** giây (JVM chạy trong 15.501)
trong đó "****" là thời lượng khởi chạy ứng dụng :) sau đó, trong bất kỳ trình duyệt nào (hoặc cuộn tròn, hoặc bất cứ thứ gì bạn sử dụng?), bạn cần nhập địa chỉ mà phương thức điều khiển được ánh xạ tới
localhost:8080/xin chào
Trình duyệt sẽ hiển thị chuẩn
Chào thế giới!
Đây là một ứng dụng web dành cho bạn! Nếu bạn nhận thấy có một phương thức khác trong bộ điều khiển thì nó có ánh xạ địa chỉ riêng; một phần giữ chỗ sẽ được thêm vào địa chỉ hiện tại. Được truyền cho phương thức dưới dạng tham số bởi Spring. Không khó để đoán rằng chú thích @PathVariable chịu trách nhiệm cho việc này. Vì vậy theo yêu cầu
localhost:8080/xin chào/Tên của bạn
trình duyệt sẽ hiển thị
Xin chào, tên của bạn!
Chúng tôi đã sắp xếp những điều cơ bản về Spring Boot. Tiếp theo, chúng tôi sẽ đính kèm cơ sở dữ liệu, nhưng điều đó sẽ có trong bài đăng tiếp theo. Cảm ơn tất cả.
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION