Java-Edge / Zhihu

基于 SSM 框架搭建仿知乎问答平台

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

"柚知" 问答社交平台

基于SpringBoot框架搭建仿知乎问答平台


1 环境

  • 操作系统 : Mac OS 10.12.1
  • IDE :IntelliJ IDEA 2019.3.5
  • JDK Version : JDK1.8
  • 数据库 :MySQL 8.0
  • 依赖管理工具 : Maven 3.6.1
  • 版本控制: Git

2 运行

导入到 IDEA,使用IDEA创建的项目,配置好maven的相关配置,以及项目JDK版本,直接在主界面选择Open,然后找到项目所在路径,点击导入即可。


项目架构

用户:负责维护社区用户信息,注册,登录等; 关系:用户之间关注、好友、拉黑等关系的维护; 内容:社区发的内容,就像朋友圈或者微博的内容; 评论、赞:用户可能会有的两种常规互动操作; 搜索:用户的搜索,内容的搜索。

4 重点技术梳理

前缀树

正如大多数网站发表言论都是需要经过审查的,而在我们的局域网里面,更是是要经过无数次的审查,然后方案有一下几种:

  • 把敏感词删除
  • 把敏感词替换为指定的字符串

这里并不是使用replace()方法或者使用正则表达式进行逐个查找然后进行替换,而是采用更加优良的算法-前缀树

  • 根节点不包含字符,除根节点外每一个节点都只包含一个字符
  • 从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串
  • 每个节点的所有子节点包含的字符都不相同 

异步

在当今互联网这种上网人群多,访问量大的情况下,异步编程提供了一个非堵塞的,基于事件驱动的编程模型.这种编程方式可以充分利用计算机的多核来同时执行并行任务,提高资源的利用效率. 举个很简单的例子,我们在网站注册新的社交账号的话,严格一点的网站都是会有验证邮箱地址的邮件.这个就是一个异步的事件,你不可能说直接把邮件验证的流程嵌套在业务逻辑里面. 应该是把这个事件发送给一个队列里面,然后队列专门处理这种事件.在一个网站中有各种各样的事情需要进行处理 

简单设计流程:

  • 1.首先定义一个定义一个枚举类型的EventType类,这里面列举各种各样将会出现的事件
  • 2.再定义一个事件模型EventModel类,里面包含的是一个事件所应该具有的一些属性.例如事件类型,操作者的ID,操作的实体类型,操作的实体ID,操作的实体拥有者等等
  • 3.再定义一个接口EventHandler,里面写上几个抽象的方法,具体的实现由继承的类进行实现
  • 4.定义一个事件生产者EventProducer,这里就是用来生产各种各样的事件,如异常登录或者是注册邮件等等.本项目中这里就是把事件送到Redis中进行储存
  • 5.定义一个事件消费者EventConsumer,这里就是需要继承InitializingBeanApplicationContextAware.继承InitializingBean是可以定义bean的初始化方式,继承InitializingBean是为了可以通过这个上下文对象得到我们想获取的bean.然后在这个类里面使用多线程一直去Redis里面读取出事件,然后进行处理
  • 6.再继承EventHandler在方法里面写自己的实现

About

基于 SSM 框架搭建仿知乎问答平台


Languages

Language:CSS 90.1%Language:HTML 3.8%Language:Java 3.6%Language:JavaScript 2.6%