JavaRush /Java 博客 /Random-ZH /就业测试任务,让我们来看看吧。
timurnav
第 21 级

就业测试任务,让我们来看看吧。

已在 Random-ZH 群组中发布
朋友们,大家好。我想与大家分享一下我解决俄罗斯公司 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.900 INFO 5844 --- [ main] demo.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