-
Notifications
You must be signed in to change notification settings - Fork 1
erik-chen/leetcode_mock_test_project
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
一、说明 名称:设计文档 作者:陈志豪 作用:开发“模拟面试”功能 记录时间:2020年1月14日到1月20日 二、基本功能: 1.按照公司生成模拟面试。同一名用户每次打开同一家公司应该能看到不同的题目; 2.用户可以开始一场模拟面试,有规定时间; 3.用户可以根据公司回看自己的模拟面试记录。 三、项目目标 1.实现“模拟面试”基本功能 2.完成设计文档和配置文档 3.学习Django、Mysql、Redis等工具 四、需求分析和思路(以scrum形式书写) Scrum分为2个sprint。第一个sprint实现部分功能,第二个sprint实现全部功能。 该项目将以sprint的方式管理,分为两个sprint管理用户故事与项目进度。第一个sprint实现用户登录与做题的功能,第二个sprint实现用户回看做题记录,以sprint迭代的方式实现持续交付。 小明是一名大四的学生,正在为即将到来的校招做积极准备。小明知道算法是拿到理想offer的核心竞争力。但是,不管是看《算法导论》还是自己找题,都觉得效率好低,也坚持不下去,为此很苦恼…… Sprint 1 周期:1/14-1/17 (一)用户故事— 小明感到看算法书效率太低了,自己找题做又总是坚持不下去,如果有一个网站,可以刷题就好了! 用户需求:有个网站可以做算法题 (二)用户故事二 小明希望,在网站上做题尽可能模拟真实的面试环境。真实的面试环境最重要的是有时间限制。这样可以更专注、更投入,到了真正面试的时候也不会太紧张。另外,真实的面试环境也不会提醒难度等级。 用户需求:有个模拟做题的产品(功能),可以倒计时。 (三)工作内容 1.搭建一个网站 2.设计题目subject表、user表、user和题目subject的关系表 3.完成模拟面试功能 4.完成用户注册、登录功能 (四)内容细化(按时间顺序排列) 1.画主页、模拟面试功能的UI和跳转关系; 2.设计面试功能,明确出题逻辑(见sprint 1附件); 3.设计和建立题目subject表(所有表设计见后文); 4.设计和建立用户user表; 5.设计和建立user和subject的关系表,一条记录表示user做过这道subject; 6.实现模拟面试功能(从题目表调取title和description,放上1.5小时的倒计时,实现手动结束面试和到时间被动结束面试); 7.实现注册、登录功能。 (五)Sprint 1 附件:面试规则和出题逻辑 1.面试规则 一场面试1小时30分钟,3道题(时间和题数都是变量,可以改变)。 2.结束面试的两种方法 面试结束有两种方式:主动结束和到时结束。只有结束才会跳转到主页,不放“返回”之类的按钮。 3.出题逻辑 (1)一场面试会出现三道题,三道题各不相同。当下一次再考,这三题不会再出现。除非题库中所有的题目被刷完,那么之前的题目会再次出现; (2)三道题均从没有做过的题中随机抽取; (3)当所有题都做过时,开始新的一轮,所有题会被标记成未做过; (4)如果题库中只剩1题或2题,那么这1题或2题必出,同时在所有题中抽取新的题目(会检查是否跟这1题或2题重复,如果重复就去掉再抽)。新的题目会标记为已做过,其他所有题目标记为没做过。 Sprint 2 周期:1/18-1/21 (一)用户故事三 小明的dream company是腾讯,所以想主攻腾讯会出的题。小明想熟悉腾讯的出题风格和出题方式,为进入腾讯做努力,不想做腾讯从来没考过的题。 用户需求:根据公司做模拟面试 (二)用户故事四 小明现在可以只做腾讯的题了,但看不到已完成几次面试,每次做题花多少时间,当时提交了几道题,哪天做的,还是觉得不大方便。 用户需求:根据公司查看自己的做题记录(次数,用时,提交数,结束时间)。 (三)工作内容 1.设计company表、company和subject关系表 2.完成根据公司生成模拟面试的功能 3.设计面试quiz表、quiz和subject关系表 4.完成根据公司查看做题记录的功能 (四)内容细化(按时间顺序排列) 1.画出有company的主页UI和相关跳转; 2.在原先没有公司的出题逻辑的基础上加上公司的维度,明确出题逻辑(见sprint 2 附件); 3.设计和建立company表(字段包括id, name, status); 4.设计和建立company和subject关系表(字段包括id, company id, subject id); 5.实现选择公司模式的模拟面试功能; 6.画出回看面试记录的UI和相关跳转; 7.设计和建立面试quiz表(start time, finish time, status, company id外键, user id外键); 8.设计和建立quiz和subject关系表(submit time, status, quiz id外键, subject id外键); 9.实现回看面试记录(次数,用时,提交数,结束时间)的模拟面试功能。 (五)Sprint 2附件:有公司分类的出题逻辑 1.题目和公司是多对多的关系 以两家公司为例:百度和腾讯(可以添加任意多的公司) 题库中的题目和公司是多对多的关系,一道题目可能是:a.只有百度会考;b.只有腾讯会考;c.百度和腾讯都会考;d.百度和腾讯都不考(注:如果只有百度和腾讯这两家公司,那么情况d的题目永远不会被抽到)。 2.不同公司的互相影响 如果在刷百度面试题目时做了共有的题目,那么在腾讯面试时则不会碰到这道题,因为此时user和subject的关系是已经做过的关系。换言之,我们看的还是user和题目的关系。 如果把腾讯的题目都做完了,那么腾讯所有的题目和用户的关系都会重置,包括独属于腾讯的题和(不同公司)共有的题。 五、建议配置环境 Python==3.7.3 MySQL==8.0 asgiref==3.2.3 Django==3.0.2 PyMySQL==0.9.3 pytz==2019.3 redis==3.3.11 sqlparse==0.3.0
About
No description, website, or topics provided.
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published