第二届“科协之星”软件设计大赛比赛赛题

“科协之星”软件设计大赛 赛题

一、整体说明

1.题目介绍

  为了照顾不同年级的学生,本次竞赛选取了三个当下热点软件工程题目。赛题 A 鼓励 学生使用自己所学的Web技术编写、搭建自己的博客;赛题 B 从选课的角度入手让学生理 解高并发场景的后端开发及部署考量;赛题 C 鼓励学生尝试将精力投入基础软件工程,了解数据库相关基础知识,动手实现拥有一定并发考量的键/值数据存储。
  三个赛题难度依次增加,我们期望高年级学生尝试后两个赛题。值得注意的是,选取难度高的赛题更有可能有更少的竞争对手和更高的分数,但也会面临更大的挑战。
  每个赛题都对基本需求、加分项及附加规则做了详细说明。基本需求被视为必须完成的部分,若选手的项目不满足基本需求将可能导致无法通过初赛;加分项是复赛评定的关键,选手可以酌情选择其中的一项到几项完成,以提高项目价值;附加规则可能指出了选手不应违反的条目,不满足规则的选手可能将被取消参赛资格

2.基本要求

  任何被发现抄袭或未加说明地直接使用开源代码的选手将被取消评奖资格。我们希望选手明确地指出自己的项目使用了哪些依赖项及开源代码。我们将酌情采用查重技术以反作弊。当然,我们也希望选手能够借助现有的开源框架、技术完成自己的项目。
  我们希望参赛选手能够重视对于版本控制系统的使用,能够使用版本控制系统(Git)正常的进行团队协作,并利用代码托管服务(Gitea)的项目管理功能将是一项重要的要求以及 团队协作方面的加分点。
  赛题均不限制语言、框架、技术架构,但应充分考虑计算资源与用户使用体验。禁止任何参赛选手以大赛名义对其他生产环境系统实行非法操作。

3.评定规则

  我们邀请了当前在业界大厂、高校读研及大四的众多学长学姐参与平定,每个赛题都给出了特定的评定分项及占比,选手可以参考。
  我们希望参赛选手能够主动将项目的完成度及亮点在项目说明中表述出来,以方便评定。当然,评定人员将会实际审查、测试被列举出的亮点

二、赛题 A:个人博客

1. 赛题背景

  个人博客能够把自己的想法和知识公开在互联网上分享给他人,比起微博、微信朋友圈等平台,博客能够更整体化、专业化地表述自己的观点。程序员尤其喜欢编写一个自己的博客平台以分享编程知识,传播灵感。所以,你是程序员吗?

2. 基本需求

  1. 文章展示:前端能够展示文章,游客能够评论文章
  2. 后台管理:提供登录功能,登录后能够管理文章,如增加、编辑、删除文章

3. 加分项

  1. 更好的后台:能够管理游客的评论,如删除评论、禁止再次评论等;在编辑文章时能够给出更好的环境,如拥有可视化编辑器,或是支持 markdown 格式的文章;能够提供用户注册功能,并提供对注册用户的权限分配
  2. 更好的前端:在前台给出搜索功能,能够根据文章的内容搜索文章;或是提供对文章进行分类查看的功能。
  3. 安全:保障网站不容易被攻击,如不能被 sql 注入等
  4. 并发:有一定的并发能力,可以同时接受多个游客的访问
  5. 恶意用户:能够防止恶意注册请求;能够防止恶意评论,如不断刷评论等
  6. 现代化前端:能够使用现代化的前端框架,如React/Vue进行前端设计
  7. 前后端分离:能够分离前后端的逻辑

4. 评分规则

  项目完成度、可用性 30%
  代码规范性、开发流程规范性 20%
  功能丰富度与实现难度、亮点 30%
  前端整体观感及易用性 10%
  其他能体现技术价值的内容 10%

三、赛题B:选课系统

1. 赛题背景

  你是否遇到过线上选课系统卡顿,请求失败或种种原因无法正常参与的情况?是否想亲手设计并编写一套选课系统来体会一下高并发的险恶?是否原意看到自己亲手写的系统能扛住大量的并发请求?来吧,给你时间和资源,和你的队友一起亲手创造一个奇迹。

2. 基本需求

  1. 用户管理:能够提供用户注册、登录等功能,并酌情提供用户级别划分
  2. 选课逻辑:学生用户能够选课、退课、查看可选课程及课程详情等;管理员能够添加、删除课程、编辑课程详情等
  3. 并发能力:在多个用户在同一时间段参与选课时,系统能够正常处理
  4. 规则校验:例如学生用户选课个数限制,分专业限制门类,总学分限制,管理员能够限制课程总可选人数等

3. 加分项

  1. 优秀的反作弊,反恶意请求方案
  2. 优秀的降级、限流、熔断方案
  3. 优秀的风控方案
  4. 恰当的缓存使用
  5. 其他缓解系统压力的方案

4. 附加规定

  本赛题将限制基础计算资源环境,计算资源要求如下,建议团队自主测试阶段使用如下要求:

实例名称:阿里云ECS抢占式/按量计费/包年包月实例
实例规格:ecs.g5.large
vCPU:2vCPU
内存:8GiB
处理器主频/睿聘:2.5 GHz/2.7 GHz
内网带宽:1Gbps
内网收发包:30 万PPS
处理器型号:Intel Xeon(Skylake) Platinum 8163 / Intel Xeon(Cascade Lake) Platinum 8269CY

5. 评分规则

  项目完成度、可用性 30%
  代码规范性、开发流程规范性 20%
  压力测试结果 15%
  功能丰富度与实现难度,亮点 30%
  其他能体现技术价值的内容 5%

四、赛题C:键/值数据存储

1. 赛题背景

  数据库可能是最复杂的应用程序之一。实现一个数据库过程中,几乎需要用到我们大学期间所学的所有知识点。虽然听起来非常恐怖,但实际上,要实现一个简单的demo并不复杂。从招聘的角度来讲,面试官也更喜欢有动手实现一些复杂项目经历的同学。
  现在,让我们整合一下头脑中的知识,来实现一个基于内存的简单Key-Value存储系统。

2. 基本需求

实现一个缓存服务,具有以下能力:

  1. 提供基本的key-value存储能力
  2. 实现get/set/del接口,提供对数据进行查找/赋值/删除的基本能力
  3. 具有良好的并发能力,可以正确地同时处理多个请求

3. 加分项

  1. 实现find接口,提供对key按前缀进行搜索的能力
  2. 支持储存除字符串外的更复杂的数据结构
  3. 支持数据写入时配置超时时间,cache可自动清理超时数据
  4. 支持数据淘汰能力,当数据总量超过配置的数量时,可按LRU规则进行淘汰
  5. 支持数据落地,落地方案自选,建议通过MySQL/文件进行落地
  6. 支持热备份能力,主备机数据同步,故障时主备支持热切换
  7. 支持分布式部署,节点数量可动态调整
  8. 其他能够体现技术能力的内容

4. 附加规定

  1. 为降低实现难度,附加题中各功能均不要求实时落盘和强一致性,仅要求保证最终一致性。
  2. 本题目中所要求实现的的所有接口,以及附加功能,均要求提供HTTP协议封装,以符合附录中要求的形式进行暴露,供标准测试工具调用。

5. 评分规则

  项目完成度、可用性 30%
  代码规范性、开发流程规范性 20%
  压力测试结果[1] 15%
  功能丰富度与实现难度,亮点 30%
  其他能体现技术价值的内容 5%

[1] 压力测试结果:评委会提供标准测试程序以及标准例程一份,以标准例程性能为基准
● 在标准配置(1C1G)下,性能达到标准例程80%以上的,得满分;
● 80%以下,但高于基准性能的,按(分数/标准分数)×满分的公式进行计算,结果取整;
● 无法达到基准性能的,得0分

6. 附录

  1. 接口文档要求
  2. 标准程序
  3. 跑分程序

比赛官方群

QQ群
文章作者: QUST-Coder
文章链接: http://qustkx.com/2020/08/16/kxstar/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 青岛科技大学信息学院科技创新协会