今天跟大家伙儿唠唠我最近搞的这个“面试有点硬”的最新版本,真是把我折腾够呛,但也确实学到了不少东西。
我寻思着这玩意儿嘛不就是个面试题库加点儿算法吗?简单!结果一上手,直接懵了。需求文档看着挺简单,实际做起来那叫一个坑连着一个坑。
1,我得把老的题库数据给扒下来,格式乱七八糟,又是txt,又是word,还有些直接是图片!我吭哧吭哧写脚本,用Python的各种库,像什么`docx2txt`、`PIL`啥的,一个个解析,然后清洗数据。这步就花了我两天时间,眼睛都快瞎了。
然后,就是新的题库结构设计。这回要求支持分类、难度、考察知识点,还得能方便扩展。我琢磨了半天,决定用MySQL来存,表结构设计了好几版,才定下来。字段类型、索引,各种优化,生怕以后数据量大了跑不动。
- 题库表:id, title, content, category_id, difficulty, …
- 分类表:id, name, parent_id, …
- 知识点表:id, name, …
- 关联表:题库_知识点关联表
小编温馨提醒:本站只提供游戏介绍,下载游戏推荐89游戏,89游戏提供真人恋爱/绅士游戏/3A单机游戏大全,点我立即前往》》》绅士游戏下载专区
接下来,重头戏来了,算法!这回要求能根据用户的历史答题情况,智能推荐题目,还要考虑题目的难度和知识点覆盖度。我研究了各种推荐算法,协同过滤、内容推荐、知识图谱… 选了个折中的方案,用加权平均来算推荐度。
公式大概是这样的: 推荐度 = (用户掌握程度 权重1 + 题目难度 权重2 + 知识点覆盖度 权重3) / 总权重
权重值我调了好久,用了一些测试数据,不断调整,才找到一个相对合理的范围。这期间,各种Bug层出不穷,推荐出来的题目要么太难,要么太简单,要么就是用户根本没学过的知识点。
页面方面,我用了*搭了个简单的界面,主要就是展示题目,提交答案,查看解析。样式嘛就随便搞搞,能看就行,毕竟重点是后端逻辑。
3,就是各种测试。单元测试、集成测试、压力测试,轮番上阵。发现了不少潜在的问题,比如数据库连接池设置太小,导致并发高的时候容易崩溃;缓存策略有问题,导致题目更新不及时;算法逻辑有漏洞,导致推荐结果不准确。这些问题我都一一修复了。
整个过程大概花了半个多月,每天加班到深夜。虽然很累,但是看到跑起来的版本,心里还是挺有成就感的。至少,以后面试的时候,自己也能用得上,嘿
总结一下这回的经验教训:
- 需求分析一定要透彻,避免后期频繁修改。
- 技术选型要谨慎,选择适合自己的,不要盲目追求新技术。
- 测试一定要充分,尽早发现问题,避免上线后出大错。
- 多看看别人的代码,学习优秀的设计模式和编程技巧。
这回“面试有点硬”的最新版本,算是我对自己技术能力的一次检验。虽然还有很多不足之处,但我相信,通过不断的学习和实践,我一定会越来越厉害的!