0nlineTek Web 2024 年度核心成员考核

下面的所有题目中,任选一道完成即可(不限制前后端),如有余力可以完成多道。

如有任何疑惑,可以在群里提问。

目录

前端题目

需要用到的后端的 API 文档可以点击这里查看。

题目 1. ITEMS CRUD: 办公室物资清单维护

难度评级:★★★★☆

涉及到的数据类型和说明:

// 物资分类
type ItemCategory = {
  // 分类 ID
  id: string;

  // 分类的名称,长度 [1, 64]
  name: string;
};
type Item = {
  // 物资 ID
  id: string;

  // 物资名称,长度 [1, 64]
  name: string;

  // 物资对应的分类的 ID
  categoryId: string;

  // 物资的数量,必须为非负数
  quantity: string;

  // 物资是否可以外借
  lendable: boolean;

  // 备注,长度 [0, 1024]
  notes: string;

  // 添加时间
  createdAt: Date;
};

初步要求

进阶 1

进阶 2

题目 2. AUTH: 用户鉴权和个人信息维护

难度评级:★★★☆☆

涉及到的数据类型和说明:

type User = {
  // 用户 ID
  id: string;

  // 用户名字,长度 [1, 32]
  name: string | undefined;

  // 用户邮箱,必须符合邮箱的格式
  email: string;

  // 手机号,长度 [11, 11]
  phone: string | undefined;

  // 头像的 URL
  avatarUrl: string | undefined;

  // 个人简介, 长度 [0, 1024]
  bio: string | undefined;

  // 生日
  birthday: Date | undefined;

  // 用户注册的时间
  createdAt: Date;
};

初步要求

进阶 1

进阶 2

题目 3. CANVAS: 使用 canvas 实现一个简单的画板

难度评级:★★★☆☆

初步要求

进阶

自行拓展

后端题目

基本需求

  1. 能根据实际业务,构建对应的API接口,接口的使用要符合直觉
  2. 尽可能使用RESTful的接口设计模式
  3. 有基本的安全性和隐私性考虑,接口尽可能不要返回多余“所需”的数据,并且尽可能不要存留不必要的数据
  4. 所有超级管理员都是账户Admin密码Passwd

1 物资台账管理系统接口

有一个仓库,里面有大量物资。一开始大家都在手动使用Excel,但是后来发现实在是麻烦,于是准备建立一个系统。

假设一个物品有包括但不限于以下属性

2 用户管理

众所周知,在世一大有一个统一认证,通过学号和密码可以登录。现在我们需要创建一个应用程序,通过这个方式认证登入,而管理用户。

注意,我们不允许存放用户密码,也不容易向学校申请接入那个系统!因此,需要想一个办法去调用能够外部的统一认证接口,从而确定输入的账户和密码是不是正确的;然后我们可以根据这个创建令牌放在Cookies里面,在我们自己的应用程序里面使用,这样就不需要总是调用那个接口了。

至于如何调用那个接口...感谢这个民间项目:https://github.com/Jenway/SDU_login_API

现在我们需要建立一个系统,允许如下操作:

我们还需要建立一个API让前端可以获得用户的个人信息(学号和姓名), 但是为了隐私的考虑我们不允许以任何方式缓存这个具体信息!

此外,我们虽然不缓存这个具体信息,但是我们需要保存每个用户在这个程序使用过程中产生的数据。以一个最简单的程序为例,我们允许用户提交字符串并保存在服务器内,后续可以根据字符串的ID重新获取自己此前提交的字符串内容。此外,如果用户愿意公开,这个字符串可以由其他的用户也读取到;但是如果不愿意公开,那么只有自己允许获取。此外,用户自己可以获取自己所有提交的字符串ID并且修改、删除其中的某一部分。

这个程序基本上就完工了,但是我们还需要在里面创建一个后门,所谓超级管理员,他有权限、有办法修改数据库里面的一切用户数据,比如说,把某个用户的字符串内容改掉或者删掉。这个管理员的登录也需要使用相同的登录API获取Token,但是这个token允许操作一切用户数据,不只是他自己的。

全栈题目

题目 1. CHAT BOX: 一个简单的网页聊天室

难度评级:★★★★☆

围绕题目,自由发挥即可。

基本要求

进阶 1