###背景就是我投简历过去,然后收到了回复,如下:
###我复制一个文本在下面:
首先非常抱歉没能及时回复您的邮件,我们有一些紧急的事情耽误了。为了更全面考察候选人的能力,我们设计了一套贴近实际项目的题目,如果可以的话,请您完成之后把结果按照要求回复给我;如果您不认同这种方式或者有其它原因的话,也请您告知一下我们。题目如下:
附件中是一个带本地 git 仓库的项目,虽然是一个 demo,但是在此我们理解为实际的 Rest Api 服务。在开发协作的过程中遇到了如下的问题需要对这个服务进行多次升级:
- 开发对接过程中,前后端发现需要对接口传递的时间格式进行统一,讨论的结果是在这个项目中,不管是接口的输入还是输出凡是涉及到日期时间的地方,都采用 ISO 8601 compliant (例如 2010-01-01T12:00:00Z )的格式进行传递。于是你考虑用一种比较优雅的并且方便后期所有服务端开发同学的方式去实现,甚至都不去改动现有的接口实现( demo 中的
/now
)
- 产品需要增加一个新的需求,提供一个无需登录的建议意见提交接口,需要用户提交的数据包括:姓名、电话、类型(意见或者建议)、内容,并且从数据统计来看,需要统计访问接口的来源,可能是不同的页面地址(可以跨域)通过接口提交的,也需要通过接口的 Cookie 追踪以及用户的真实 IP 来进行数据分析;从安全性角度来讲,为了避免恶意数据提交,产品提出我们假设相同 IP 或者相同 Cookie 都视为同一个用户,同一个用户一分钟之内只能提交一次(实际情况可能是可疑情况要求验证码,但是这个 demo 中不太好实现)。因此,除了用户输入的字段,你还要记录下调用接口的页面地址、用户的 Cookie、用户的 IP 地址、通过 IP 地址获取到的省和市。同时,运维同学表示,部署的实际环境中可能有多层的反向代理或者网关,这些反向代理都会按照标准反向代理的方式去传递 HTTP 头信息。为了实现这个需求,你需要引入数据库表设计并进行数据库版本管理、在项目中配置和使用数据库连接并且设计好接口最终可以提供给前端调用。
- 项目进行过程中,前端同学觉得这样不行,后端需要提供一个接口文档。后端同学进行了调研并且讨论,觉得手动写文档并且每次变动都去更新太麻烦了,需要一个自动生成的方案,并且最终决定用 swagger-ui。你需要引入 swagger-ui,完成现有接口的文档,并且把文档的书写和使用方式反馈给整个团队。
- 项目中并没有写任何的日志,运维同学反应,其实上线之后都会有日志收集系统,虽然线上不能直接 debug,但是出问题的时候可以通过日志查询来定位到问题。后端小伙伴们进行了一次讨论,觉得很有必要做这个事情,于是需要你给出一份书写日志的注意事项,并且按照这个规则给当前项目完善日志输出。
- 为了提高质量,减少返工次数,团队决定必须有基本的测试,包括接口测试和业务逻辑测试,于是你开始在项目中增加单元测试的框架,实现现有代码的基本测试用例,并且告诉团队其他人在后续开发中怎样使用这个测试框架,往后的开发流程会做哪些优化。
题目存在不合理的地方请谅解,请按照你觉得最好的方式完成上述的迭代工作,最终需要的是一份基于 demo 的、已经提交过 commits (不需要 push )的 git 代码库压缩包,若干你觉得有必要的文档,以及其他你认为有必要反馈给我们的信息。我们收到了不少优秀的简历,但是因为远程团队的特殊性,我们会根据整个过程中的细节进行探讨和评分,因此尽可能考虑全面,最终选择最合适我们团队的候选人。
多谢!