Skip to content

云文档在线管理平台

项目介绍

项目背景

本项目是一个类似《飞书》或《语雀》的云文档管理平台,主要用于个人或企业用户创建知识库、发布文章、管理企业。平台提供创建知识库、发表文章、评论回复、点赞关注等基础功能,同时还提供企业管理、文章搜索、在线聊天等高级功能。请参考飞书、语雀、知乎等软件,完成一个云文档在线管理平台。

业务场景

  • 用户注册登录个人账号,创建私有或公开知识库,在知识库中发表文章。
  • 用户可以公开知识库,首页根据规则展示所有公开知识库的文章,可以邀请用户加入自己的知识库。
  • 用户可以对文章进行点赞评论,用户间可以发送私信进行实时聊天,用户可以搜索公开的知识库、文章、用户等。
  • 用户可以创建自己的企业,邀请成员加入企业,企业提供部门管理、文章读写权限管理等功能。

技术实现

  • 使用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相关知识,还能够实践如何打造出色的用户体验——这将是你们职业道路上的宝贵财富。同时,这个项目也会帮助你们更好地理解如何规划项目进度、提升对需求的理解和实现能力等等。这项任务将会是你们职业生涯中重要的一步。

我鼓励大家勇敢面对挑战,积极尝试并坚定实现目标的决心。在完成项目的过程中,你们可能会遇到各种困难和跳转,只有你们克服了这些困难和挑战,才能更好地提高自己的实战能力。考核时长长达一个月,请记住,最重要的是具有能够坚持到底的决心·。

通过这次经历,你们将获得更多的专业技能和经验,为成为卓越的软件工程师打下坚实基础。即便最终没有加入工作室,这段经历也将成为你们探索更广阔天地、寻找新机遇的强大助力。你们可以通过参与专业课程、参与开源项目、独立开发个人项目等方式,不断提升自己的技术实力。

最后,我期待每个人都能坚守自己的目标,不畏艰难,勇往直前。无论面对何种挑战,都要保持坚定和勇气,相信自己的潜力,加油!

请反复认真阅读并理解项目需求和考核要求,特别是代码规范和注意事项。