云文档在线管理平台
项目介绍
项目背景
本项目是一个类似《飞书》或《语雀》的云文档管理平台,主要用于个人或企业用户创建知识库、发布文章、管理企业。平台提供创建知识库、发表文章、评论回复、点赞关注等基础功能,同时还提供企业管理、文章搜索、在线聊天等高级功能。请参考飞书、语雀、知乎等软件,完成一个云文档在线管理平台。
业务场景
- 用户注册登录个人账号,创建私有或公开知识库,在知识库中发表文章。
- 用户可以公开知识库,首页根据规则展示所有公开知识库的文章,可以邀请用户加入自己的知识库。
- 用户可以对文章进行点赞评论,用户间可以发送私信进行实时聊天,用户可以搜索公开的知识库、文章、用户等。
- 用户可以创建自己的企业,邀请成员加入企业,企业提供部门管理、文章读写权限管理等功能。
技术实现
- 使用Java语言进行开发,采用MVC架构。
- 使用MySQL数据库,使用JDBC操作数据库。
- 使用Servlet(JavaWeb)进行纯原生Web开发,使用Json进行网络数据传输。
- 使用Tomcat服务器、使用Maven进行依赖管理。
- 使用Git进行本版控制、项目管理。
- 禁止使用任何高级Java开发框架。(如MyBatis\Spring\SpringMVC\SpringBoot...)
项目需求
注意
初学者在有限时间内要完成所有需求十分困难。尽量实现基础需求。对于进阶需求、高级需求、升华需求、螺旋升天需求、得道成仙需求,量力而行。加油!
基础需求
- 注册登录:
- 注册:填写用户名、密码和邮箱,并发送邮箱验证码,验证通过后完成注册。
- 登录:输入用户名、密码和图片验证码完成登录。
- 忘记密码:忘记密码可以发送邮箱验证码重置密码。
- 验证码:分为图片验证码和邮箱验证码,登录注册使用图片验证码(点击可以更换验证码),完成注册和重置密码使用邮箱验证码。
- 知识库管理:
- 用户可以创建自己的知识库并设置访问权限(私有或公开)。
- 知识库信息包括但不限于名称、简介、创建者及管理员、创建时间、访问权限等。
- 用户可以修改知识库信息、删除自己的知识库。
- 用户可以邀请其他用户加入自己的知识库成为管理员,获取管理文章的权限、但不能获取管理知识库的权限。
- 文章管理:
- 用户可以在自己管理的知识库中发表文章。
- 文章信息包括但不限于标题、内容、作者、创建时间等
- 发表文章支持图片上传等附加功能。
- 页面信息:
- 登录后首页可以看到其他用户公开的知识库中发表的文章,点击可以进入文章页,展示文章内容。
- 登录后首页可以看到自己管理的所有知识库,点击可以进入知识库页,展示知识库所有的文章。
- 文章页和知识库页可以分开做也可以合并在一起。
- 个人信息页可以上传头像、修改用户信息等。
进阶需求
- 点赞评论:
- 用户可以对文章进行点赞,不能重复点赞,支持取消点赞,首页文章默认根据点赞数量进行排序。
- 用户可以评论自己或其他用户公开知识库下的文章,评论支持回复功能(多级评论)。
- 分页排序:
- 首页展示文章太多了,需要加入分页功能。
- 首页选择可以按照文章发表时间或者点赞数量等进行排序。
- 首页展示文章太多了,需要加入分页功能。
- 全局搜索:
- 可以搜索用户,并查看其他用户的个人主页,主页可以看到用户的公开知识库和文章等。
- 可以通过关键词搜索公开的知识库或文章。
- 可以搜索用户,并查看其他用户的个人主页,主页可以看到用户的公开知识库和文章等。
- 关注收藏:
- 用户可以关注其他用户,个人信息页展示关注列表。
- 用户可以查看其他用户的关注列表,并且可以查看共同关注列表。
- 首页可以选择只看关注用户的文章。
- 用户可以收藏知识库或文章。
- 用户可以关注其他用户,个人信息页展示关注列表。
- 浏览记录:
- 个人主页支持查看文章的浏览记录。
- 浏览记录必须不断更新但不能无限增加。
- 可以删除单条浏览记录或清空全部浏览记录。
- 个人主页支持查看文章的浏览记录。
高级需求
- 多人在线编辑
- 多人实时编辑
- 支持多名授权用户同时进入同一篇文章进行编辑。
- 所有编辑操作实时同步,无需手动刷新页面。
- 以不同颜色光标标识不同用户的编辑位置,直观展示协作状态。
- 内容实时同步与冲突避免
- 采用实时增量同步机制,确保文字、段落、格式修改即时生效。
- 自动处理多人同时编辑同一区域的冲突,保证内容一致性。
- 断网恢复后自动同步本地修改,不丢失编辑内容。
- 协作状态展示
- 实时显示当前正在编辑文章的用户列表与头像。
- 展示其他用户的输入状态、光标位置与选中区域。
- 支持用户间简单协作提示,提升协同体验。
- 权限控制
- 仅知识库管理员或被邀请的协作者可进入编辑。
- 支持区分可查看、可评论、可编辑三级协作权限。
- 确保文档安全,非授权用户无法进入编辑模式。
- 历史版本与恢复
- 自动保存编辑历史,支持查看历史版本。
- 支持版本对比、恢复至任意历史版本,防止误删与误改。
- 编辑体验优化
- 编辑延迟低,操作流畅无卡顿。
- 支持富文本格式、段落、标题、列表等基础编辑能力。
- 退出编辑时自动保存最终内容,确保内容不丢失。
- 多人实时编辑
- 企业管理:
- 用户可以创建企业,邀请其用户加入企业,并设置用户角色。
- 企业管理员可以创建多个不同的部门,选择部门负责人,负责人具有部门的所有权限。
- 企业具有多级权限管理,不同管理层管理企业的权限不同。(例如:高管、部门主管、项目主管、普通员工分别具有企业权限、部门权限、读写他人权限、读写自己权限。可基于RBAC设计权限系统)
- 企业员工每天可以进行上下班打卡,管理员可以看见企业成员的打卡记录。
- 企业管理员可发布通知,支持选择企业成员私发和批量发送。
- 实时聊天:
- 用户间可以互相发送私信进行实时聊天。
- 用户可以创建群聊,实现多人在线聊天功能,用户可以拉互相关注的用户加入群聊。
- 群主可以添加或取消管理员,群主和管理员具有禁言、踢出群聊等权限。
- 消息提醒:
- 有人私信自己时可以看到实时的消息提醒,可以象B站私信一样在图标上出现一个红色图标,阅读后图标消失。
- 其他用户对自己文章的点赞、评论、回复等都有实时的消息提醒,并展示未读消息的数量。
- 集成AI
- 自由发挥。
升华需求
- 数据库连接池:实现数据库连接池,统一管理数据库连接的生命周期。(并发安全、锁的粒度小,支持动态扩缩容、等待重连等扩展功能)
- SQL构建:封装JDBC,完成数据库SQL的统一构建和结果映射。(SQL构建器和自定义SQL都支持,兼容性好)
- 容器化管理:实现基于容器的Bean管理机制,以完成控制反转和依赖注入,从而极大降低系统各层的耦合度。
- 敏感词汇校验:发布文章或评论时,后台检测是否存在敏感词汇,如诋毁、色情等信息,若存在,则系统将自动驳回发布请求并提醒发布者。
螺旋升天需求
- 请求转发:实现请求的统一路由和转发,实现结果的统一响应,支持参数类型的自动转换。
- 事务管理:在业务层引入持久层事务管理器,以支持数据库事务的统一协调和管理。
- 切面编程:实现面向切面编程,以非侵入性的方式统一管理事务、日志、异常处理等。
得道成仙需求
- 爱说悄悄话:并实现一个的安全令牌授权认证模块,保证系统的安全访问。
- 小气的接口:
- 可以指定接口支持防压测功能。
- 支持对参数(长度、格式等)进行校验,拒绝不符合要求的请求和参数。(参考JSR-303)
- 支持对不安全数据进行过滤。
- 体育生的素质:设计缓存淘汰策略和系统高可用性,以提升系统的整体性能和稳定性。
- 学有余力的同学可以自行补充实现其他功能
考核要求
代码规范(非常重要)
- 该打注释的地方一定要打注释(类、方法、属性、接口...),注意区分不同位置的注释类型。 ⭐️⭐️⭐️
- 阅读《阿里巴巴Java开发手册》,IDEA安装阿里巴巴代码规范插件(Alibaba Java Coding Guidelines) ,不符合规范的代码会有黄色警告。⭐️⭐️
- 使用驼峰命名法,不要出现没有意义的变量命名,不要图方便。
- 尽量不要写重复代码,要运用封装的思想,可多封装工具类。
- 不要在代码中直接使用常量、魔法值,常量应该放到一个常量类里面,减少硬编码。
- 使用MVC架构,做好分包规范,系统纵向分层和横向区分清晰,做好分包规范,面向接口编程,降低各层耦合度。⭐️⭐️⭐️
- 养成练好的代码缩进习惯,可直接使用快捷键(Ctrl + Alt + L)
- 认真学习数据库表设计规范,维护清晰的库表关系,避免频繁修改库表结构和关系。⭐️⭐️⭐️
Git提交规范
提交命名按照以下规范:(type):
- type指提交类型,具体有:
- feat:新功能
- fix:修补bug
- docs:文档
- style:格式(不影响代码运行的变动)
- refactor:代码重构(即不是新增功能,也不是修改bug的代码变动)
- scope指影响范围,具体到包即可,也可以不写
- subject指具体修改内容
Git 提交的粒度要足够小,比如每完成一个功能或修复一个bug尽量都进行提交。自己的代码可以提交到dev分支,需要发布正式版时再合并到master分支。
注意事项
前端页面:
- 可以使用任意前端框架(Vue,Axios,Boostrap等),组件库随便使用(Element-UI),可以使用前端页面生成器或者直接使用现成的前端页面模板。
- 考核只看你后台代码,前端页面只要求能展示数据并进行简单交互,不要过分追求页面的可观性!否则6大量的时间都会浪费在前端页面上! ⭐️⭐️⭐
- 不要使用JSP等过时的非前后端分离框架。
- 建议直接速通Vue+Axios+ElementUI,熟练后效率高,容易定制页面效果。⭐️⭐️⭐
- 强烈建议前端代码使用AI,编写接口文档后再丢给AI生成可省去大部分时间。 ⭐️⭐️⭐
后台代码:
- 禁止使用任何高级Java开发框架(如MyBatis\Spring\SpringMVC\SpringBoot...),可以自己写代码实现框架的部分功能(量力而行)。
- 数据库表设计是重点。
- 需求能做多少做多少,不要求全部做完。 刚开始不用着急做需求,数据库表和基础模块可以花多点时间打磨。升华需求和螺旋升天需求做了的话,可以不做那么多高级需求。
- 注意数据的验证,该判断的一定要判断、正则匹配,异常处理尽量统一。
- 关于缓存,如果想提前了解的话,可以简单学习Redis的使用。(比较消耗时间,不推荐开始就进行使用,如果有想法可以先使用自己内存里边的缓存,有精力再换成Redis,注意考虑解决耦合关系)
- 避免联表查询、不要使用级联删除,尽量用业务代码实现。(sql语句尽量避免过多的连表操作)
- 独立完成项目,不能直接抄别人的代码,允许cv代码,但必须清楚每一句代码的作用和实现原理,并聊聊优化方案。
- 允许AI Coding,但要求大家对 AI 清晰描述需求、约束条件和技术规范,下达准确指令,而非盲目丢题生成。AI 生成的代码跑通后不能直接搁置不管,必须完成完整代码 Review,确保能清晰讲解每段代码的作用、存在的问题及可优化方案。答辩时会重点检查是否真正做到以上要求。
- 考核期间有两次机会提前找师兄看你的代码,师兄会给出修改建议。
- 允许使用的第三方工具:javax.mail包、websocket包、tomcat包、fastjson、jackson、dom4j、mysql驱动、redis包、cglib包、commons-io、commons-file、poi包、jwt包、lombok、logback、log4j2。如果要使用其他第三方工具,先询问师兄。
评分标准
- 代码质量高者优先考虑。(包括但不限于系统架构、资源损耗、系统性能等)
- 代码规范良好者优先考虑。
- 注释规范良好者优先考虑。
- 库表设计良好者优先考虑。
- 实现功能多者优先考虑。
- 能够对系统进行拓展者优先考虑。
考核提交
- 提交内容:
- 源项目代码
- 导出数据库的SQL文件(包括库和表的结构以及测试数据)
- 项目文档(内容包括配置方式、功能说明、测试数据以及测试情况的截图,没有字数要求但需要条例清晰)
- 项目完成过程的记录(类似日记、周记)
- 提交方式:强制采用Git管理项目,提交远程仓库,考核结束前记得拉师兄们进你的仓库。
项目计划(参考)
| 阶段 | 内容 |
|---|---|
| 需求分析和技术选型 | 完成需求分析和技术方案的确定。 |
| 框架搭建和数据库设计 | 搭建JavaWeb框架、设计数据库结构,并进行框架和数据库的搭建。 |
| 页面设计和功能实现 | 设计前端页面、实现后端相关业务功能。 |
| 单元测试和集成测试 | 对系统进行单元测试和集成测试,确保系统的稳定性和可用性。 |
| 性能优化和安全加固 | 对系统进行性能优化和安全加固,包括代码规范化、性能测试、漏洞修补等。 |
| 上线和维护 | 将系统上线并进行持续性维护和更新,以确保系统的可靠性和稳定性。 |
时间安排
时间为预计时间,最终时间请关注考核群。
| 时间 | 内容 |
|---|---|
| 3月31号 | 公布考核题目 |
| 4月14号 | 分享会 |
| 5月10号24:00前 | 提交代码到仓库 |
| 提交考核后一周内 | 答辩 |
考核总结
各位学弟学妹们,我们即将迎来的考核,这是一项非常有挑战性的任务,需要你们充分发挥自己的技能和创造力。通过这个项目,你们不仅能够深入学习JavaWeb相关知识,还能够实践如何打造出色的用户体验——这将是你们职业道路上的宝贵财富。同时,这个项目也会帮助你们更好地理解如何规划项目进度、提升对需求的理解和实现能力等等。这项任务将会是你们职业生涯中重要的一步。
我鼓励大家勇敢面对挑战,积极尝试并坚定实现目标的决心。在完成项目的过程中,你们可能会遇到各种困难和跳转,只有你们克服了这些困难和挑战,才能更好地提高自己的实战能力。考核时长长达一个月,请记住,最重要的是具有能够坚持到底的决心·。
通过这次经历,你们将获得更多的专业技能和经验,为成为卓越的软件工程师打下坚实基础。即便最终没有加入工作室,这段经历也将成为你们探索更广阔天地、寻找新机遇的强大助力。你们可以通过参与专业课程、参与开源项目、独立开发个人项目等方式,不断提升自己的技术实力。
最后,我期待每个人都能坚守自己的目标,不畏艰难,勇往直前。无论面对何种挑战,都要保持坚定和勇气,相信自己的潜力,加油!
请反复认真阅读并理解项目需求和考核要求,特别是代码规范和注意事项。