/interview-design-p2p-system

流利说面试题使用任意ruby框架实现一个p2p交易系统

Primary LanguageRuby

interview-design-p2p-system

流利说面试题使用任意ruby框架实现一个p2p交易系统

此项目由本人个人发布

由于本人没有在按时时间内完成,本项目不一定符合面试预期,仅供学习和交流。

考点

  • ruby 框架
  • ruby 编程风格(ruby基础的积累)
  • DCC (Data Concurrency Control) 数据方面的并发控制管理
  • RDBMS Schema Design (关系型数据库设计)
  • Api System Design (api系统设计)
    • Protocol Semantical (http语义化 => restful)
    • Error Handling (异常处理)
    • Naming (代码命名)
    • Framework (框架使用)
    • Boundary Check (边界检查)
    • Business Translate To Abstract Domain Model (业务抽象成领域模型)
  • Deploy (部署)
    • Basic Server Usage (服务器使用)
    • Error / Alert / Monitor (错误处理、监控等)
  • Working Ability Evaluation (工作能力评估)
    • Time (耗时)
    • Quality (质量)
实现一个简单 P2P 交易的 API

功能:

1. 每个用户有一个初始金额
2. 用户之间可以互相借钱
3. 用户之间可以相互还钱
4. 查询每个用户当前的余额、借出总额、借入总额以及任意两个用户之间当前的债务情况

需要提供的接口:

1. 创建用户接口,请求的参数支持设置初始金额、返回用户 ID
2. 创建一笔借款交易,参数是两个用户的 ID 和金额
3. 创建一笔还款交易,参数是两个用户的 ID 和金额
4. 查询一个用户的账户情况,参数是用户 ID,返回当前余额、借出总额和借入总额
5. 查询用户之间的债务情况,参数是两个用户的 ID,返回两者间当前的借入借出总额

提醒:

1. 在 README.md 中简单记录一下设计的思路
2. 请提供 API 文档,让我们知道如何请求你的服务
3. 还款相关功能如果没有时间可以不做,优先借款功能
4. 可以选择任意 Ruby 框架
5. 为节省时间,用户模块可以考虑使用成熟的 Gem 实现
6. 如果时间允许,最好部署一个演示地址,能够直接调用
7. 任何时候,用户的余额都一定是大于等于0,用户不能还款超过其借款

尽量实现所有的功能,我们会根据以下几点进行评价:

1. 你完成了多少功能,完成的好不好
2. 整个应用的设计、代码质量等方面
3. 一个 work 的解决方案比好看但不 work 的解决方案好得多

提交形式:

完成之后将代码 push 到 GitHub 上,然后邮件告诉我们 Repository 的地址和能够调用的 URL(如果有的话)。

时间要求:

我们对笔试的时间没有强制要求,但希望能在收到你回复确认之后的48小时内看到成果或收到开发进度的回复,你可以自己平衡完成的时间和效果。

如果很快就完成了,可以考虑对代码做一些优化。如果时间比较赶,把能完成的做好就可以了。