https://github.com/java-edge/zhihu
基于 SSM 框架搭建仿知乎问答平台
https://github.com/java-edge/zhihu
Last synced: 4 months ago
JSON representation
基于 SSM 框架搭建仿知乎问答平台
- Host: GitHub
- URL: https://github.com/java-edge/zhihu
- Owner: Java-Edge
- Created: 2017-08-04T12:09:23.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2024-03-12T13:06:01.000Z (over 1 year ago)
- Last Synced: 2025-02-02T04:51:13.390Z (5 months ago)
- Language: CSS
- Homepage:
- Size: 32.6 MB
- Stars: 20
- Watchers: 1
- Forks: 13
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# "柚知" 问答社交平台
基于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`,这里就是需要继承`InitializingBean`跟`ApplicationContextAware`.继承`InitializingBean`是可以定义bean的初始化方式,继承`InitializingBean`是为了可以通过这个上下文对象得到我们想获取的bean.然后在这个类里面使用多线程一直去Redis里面读取出事件,然后进行处理
* 6.再继承`EventHandler`在方法里面写自己的实现