JavaRush /Java Blog /Random-TW /就業測試任務,讓我們來看看。
timurnav
等級 21

就業測試任務,讓我們來看看。

在 Random-TW 群組發布
朋友們,大家好。我想與大家分享我解決俄羅斯公司 Java 開發人員職位測試任務的經驗。我會立即說,實現作業的主要功能並不是特別困難,但一如既往,細節和小事情很重要,這使我無法按時提交;他們從未回答有關作業的任何信息 - 他們的空缺當我發送給他們時已經填滿了。我建議你調查一下任務,看看我是否完成了要求我做的一切。對於那些不知道如何製作的人,我會添加很多關於我如何處理它的水。如果有人對此感興趣,歡迎關注貓。 我馬上說我不會在這裡發布整個解決方案,但是會有很多針對初學者的解釋,如果有人沒有興趣閱讀我的傾訴,這裡是 github 上的項目 。我將從任務本身的文本。
測試任務1號
描述: API 伺服器(JSON HTTP API) 開發工具: Java 框架: Play Framework 2.4(或更高版本)或 Spring boot 1.2.3(或更高版本) 資料庫: MySQL 協定: HTTP,連接埠 80 功能(請求):
  1. 裝載機。
    • 我們將檔案(JPG頭像圖片)傳輸到伺服器。
    • 我們將圖像保存在伺服器上的目錄中。
    • 伺服器回應是影像的內部 URI。
  2. 新增用戶。
    • 我們將使用者的個人資料傳輸到伺服器(圖像的 URI、使用者名稱、電子郵件等)。
    • 我們將資訊保存在資料庫中。
    • 伺服器回應是新使用者的唯一 ID。
  3. 取得有關用戶的資訊。
    • 我們將唯一的用戶 ID 傳輸到伺服器。
    • 從資料庫中讀取資訊。
    • 伺服器的回應是使用者的個人資料(見上文)。
  4. 更改使用者狀態(線上、離線)。
    • 我們將唯一的使用者 ID 和新狀態(線上、離線)傳輸到伺服器。
    • 更改使用者狀態。
    • 伺服器回應 - 唯一的使用者 ID、新的和以前的狀態。
    注意:伺服器正在查詢外部 API/資料庫。由於這是一個簡化的測試任務,因此需要實作一個具有模擬存取和5-10秒時間延遲的「存根」。
  5. 伺服器統計。
    • 我們向伺服器傳輸參數:1.客戶端狀態(線上、離線或缺席),2.請求的唯一ID(時間戳記)(可能缺席)
    • 伺服器回應是包含狀態和圖片 URI 的使用者列表,以及請求的唯一 ID(時間戳記)。
    注意:如果請求包含參數,伺服器必須根據參數過濾其回應。如果請求包含該請求的唯一 ID(時間戳記)(較早收到),則伺服器應僅傳回其狀態在此唯一 ID(時間戳記)之後(及時)發生變更的使用者。
強制性要求:
- 安靜。- 所有資料均為 JSON 格式。- API 伺服器的設計應考慮到請求 3 和 5 具有最高優先權(相對於請求 1、2、4)並且必須盡快完成。- 處理錯誤。
可選要求(理想):
- 程式碼文檔。- API 伺服器架構必須針對高負載和可擴充性進行設計。- 測試。
測試結果:
- 測試任務的結果必須以存檔形式提供,並附有詳細的部署說明。建議附加 Dockerfile 來為測試任務建置 Docker 容器。可以到github.com下載。- 應包含所建立 API 的簡要文件(請求清單、請求參數、請求格式、回應格式等)。- 有關測試任務所花費時間的資訊:設計、程式設計、文件等。請注意,此測試任務僅旨在評估知識和技能,並非旨在創建成品(API 伺服器),因此允許進行簡化並提供解釋和原因。
細心且有經驗的程式設計師可以跳過下一節,這裡我將處理任務本身的文字。任務的「標題」不會造成任何理解上的困難,所以我只是說我的選擇落在了Spring Boot 上,但不是因為我已經用它做了一些事情,而是因為我已經使用它完成了一個真實的項目 Spring(但 Boot 不存在,據我所知,因為它簡單)。根據伺服器功能: 1)檔案下載器。這裡基本上沒有什麼複雜的,我只需要弄清楚圖片通常如何儲存在伺服器上,事實證明,最方便的方法就是簡單地將它們放在一些特殊的目錄中。下面我們來看看具體的實作。2)新增一個用戶,一個簡單的操作,如果你曾經做過CRUD應用,那麼他會支持我,如果沒有,你會看到下面的一切。3) 取得用戶資訊。沒有問題——一切都清楚了。4)改變使用者狀態。任務的前兩點已經很清楚了,但是外部請求呢???沒有100g是不可能弄清楚的,即使現在我也不能100%確定我是否理解正確。詳細資訊如下。5)伺服器統計。這也很有趣。第一點建議實作一個具有各種參數選項的方法,目前尚不清楚如何做到這一點,因為這應該是一個控制器方法。第二點詢問所有狀態在一段時間後發生變化的用戶,看起來很清楚,但也有微妙之處。
入門
哦,我在做這項任務時讀了多少遍這句話!如果您曾經嘗試過如何在 Spring 中建立一個項目,但由於某種原因您從未嘗試過 Spring Boot,那麼恭喜您,您會對我下面所寫的內容感到高興。我在某處讀到,程式設計師過去常常在專案之間傳輸大量程式碼,這是模板程式碼 - 用於連接資料庫、servlet 映射等的設置,這樣,例如,可以減少程式碼量使用的模板程式碼我們使用JPA /Hibernate 作為資料庫,它們隱藏了一些模板,但是要配置它們,您再次需要編寫xml 檔案或配置類別。如果你有一個小項目,那麼事實證明你寫的程式碼不少,但反之亦然。接下來我們結束在 Spring 中使用 JPA 的工作;有很多項目,但最方便的當然是 Spring Data。這是一個非常大的項目,可以與可能的一切一起工作,包括 JPA 和 NoSQL 以及一大堆不同的項目,它非常神奇,我們將在我們的項目中使用它。使用Spring我們幾乎擺脫了資料庫連接設置,Spring為我們做了一切,我們只需要在事務性、快取上添加必要的註釋,以及在特殊情況下google(看看其他人)上下文配置中的一些其他設置。但同時,大多數新手開發人員完全不知道如何在 Spring 中建立專案。沒有人完全知道如何配置它來運行專案並透過以下以 localhost:8080/* 開頭的連結在瀏覽器中取得結果。然後 Spring Boot 就登場了!還是用具體的例子來談談Spring Boot吧!我們先從空白開始。為了創建 Spring Boot 項目,Spring 開發人員想出了一個用於創建模板的「建構函數」。您可以在他們的網站上使用它,但在我們最喜歡的 IDE Intellij IDEA 中使用它要容易得多。所以:File->New->Project 在視窗中,前往Spring Initializr選項卡,應在其中設定jdk,URL https://start.spring.io,檢查網路連接,然後您將需要選擇名稱,然後選擇我們將使用的技術,在第一階段我們只需要WEB - 在它旁邊打勾,然後就創建了專案。為了讓Maven拉取所有依賴,我們需要在idea中開啟Maven選項卡,點擊更新按鈕。我們收到了一個現成的應用程式模板,其中包含客戶端-伺服器通訊的所有設定。為了獲得第一印象,讓我們創建一個控制器類別(我們可能都聽說過 MVC)。在所有Spring應用程式中,控制器都有一個相當簡單的設計-這是一個用@Controller註解標記的類別(可以有前綴,例如@RestController),這個類別負責處理傳入的請求。為了讓控制器識別對某個位址的請求,您需要將該位址對應到控制器方法。 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 + "!"; } } 讓我們弄清楚這裡發生了什麼。 @RestController。正是我上面寫的註釋。我們使用rest控制器是因為我們想立即看到結果並且不想編寫.jsp頁面(哇),我們會更容易在瀏覽器中立即以字串形式看到結果。 @RequestMapping只是一個位址的綁定。公共位址前綴為:localhost:8080。我們可以看到,整個類別掛在 /hello位址處,這表示該類別中的所有方法都有前綴 localhost:8080/hello。接下來是該類別的第一個方法,在它自己的映射中指示了 Http 協議方法 - GET 請求(自己閱讀 Http 協議方法)這一切意味著什麼?透過向位址 localhost:8080/hello 發出 GET 請求,我們將收到字串「Hello World!」形式的回應,讓我們檢查一下!在DemoApplication類別中,有一個很酷的註解,可以說是一手啟動了整個Spring上下文-@SpringBootApplication。這個類別的main方法變得很神奇,它只是啟動了SpringApplication中隱藏的所有神奇功能,如果你呼叫這個類別的上下文選單,選項將出現在運行行中,我建議儘早運行它並帶有綠色標記,這樣控制台看起來會更好,將來直接從她那裡讀取日誌會更容易。讓我們啟動該應用程式。當控制台輸出停止時,您應該在控制台中看到
2015-09-02 09:25:36.895 INFO 5844 --- [ main] sbcetTomcatEmbeddedServletContainer :Tomcat 在連接埠上啟動:8080 (http) 2015-09-02 09:25:36.9004 . DemoApplication :在**** 秒內啟動了DemoApplication(JVM 運行時間為15.501)
其中「****」是應用程式啟動的持續時間:)之後,在任何瀏覽器(或curl,或您使用的任何瀏覽器?)中,您需要鍵入控制器方法對應的位址
本地主機:8080/你好
瀏覽器應該顯示規範
你好世界!
這是適合您的網頁應用程式! 如果您注意到控制器中有另一個方法,它有自己的位址映射;佔位符被添加到目前位址。Spring 將其作為參數傳遞給該方法。不難猜測 @PathVariable 註解是造成這種情況的原因。所以根據要求
本地主機:8080/hello/你的名字
瀏覽器會顯示
你好,你的名字!
我們已經整理了 Spring Boot 的基礎。接下來,我們將附加資料庫,但這將在下一篇文章中進行。 謝謝大家。
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION