Skip to content

Latest commit

 

History

History
63 lines (54 loc) · 3.23 KB

README.md

File metadata and controls

63 lines (54 loc) · 3.23 KB

MyBlockchain

This project was generated with Angular CLI version 10.0.5. 用rxjs6实现区块链:

Development server

Run npm i to install dependencies;

Run npm start for a dev server. Navigate to http://localhost:4200/. The app will automatically reload if you change any of the source files.

编程应用题

第一题:实现一个多任务调度器 01.1 定义任务的规范 与实现方式

现有两类任务,一种是预热任务,一种是执行任务。执行任务往往依赖于预热任务。 请定义一种规范,可以让其它开发者基于这种规范编写以上两种任务,最终可以在后续开发的“多任务调度器”中执行。 需求

  1. 任务都有自己的进度
  2. 任务可以中途结束执行,也可以中途启动参与执行
  3. 任务可以互相唤醒 1.2 编写可测试用例 以区块链同步为例,现在有四个任务:预下载区块头、验证重放区块头、预下载区块事件、验证重放区块事件。 请基于 1.1 定义的规范,分别实现以上四种任务。 需求
  4. 区块头与区块链事件都有指定高度
  5. 区块链事件并不是每一个高度都存在
  6. 区块链的重放逻辑是:先重放区块链事件,再重放区块头
  7. 重放区块链事件需要区块头数据
  8. 一个高度的区块中会有多个区块链事件
  9. 每一个任务都能以高度为单位进行数据保存 1.3 实现基础版的多任务调度器
  10. 启动区块链同步,预先准备好四个任务,并行调度执行。最终以验证重放最后一个区块头结束整个任务调度。
  11. 请基于 1.2 编写的测试用例,在尽可能少地使用内存的情况下,尽可能快地完成“一万高度”区块链同步 需求
  12. 不用考虑任务互相唤醒的情况
  13. 需要考虑任务中断的情况
  14. 有一个任务中断了(抛出异常),就中断整个调度器
  15. 调度器可以重启,并从各个任务的保存进度上恢复同步任务的调度 1.4 实现标准版的区块链同步 以现实中比较常见的区块链网络为例,完成标准版的测试用例。并基于此改进配套的多任务调度器 需求
  16. 网络可能中断
  17. 可能只是基站切换、WiFi 与蜂窝网络切换造成的小波动
  18. 可能是进入无网络的地区,网络长时间不响应
  19. 网络请求可能超时
  20. 在整个同步的过程中,区块链的高度也会持续地增加
  21. 组网区块可能以不正常的方式提供了来自未来的区块,对于未来的区块,我们不去同步
  22. 如果你在同步中,那么区块链的状态是“同步中”,否则是“空闲”状态 1.5 实现高级版的同步区块链的实现 考虑更多的异常情况,对它们做出合理的行为 需求
  23. 考虑区块链可能分叉回滚
  24. 虽然在区块链网络中,这个不是瞬发的过程,但区块链网络层对此做了封装,在确定> 的情况下,它会突然告知你要进行执行回滚
  25. 回滚的过程中,还有有可能再度发生回滚……
  26. 本地数据的存储可能发生异常
  27. 磁盘空间不足
  28. 读取权限被限制
  29. 数据被外部篡改而发生混乱,被区块链数据库自己的修复逻辑给回滚到某一个高度