【项目】仿知乎网站项目梳理

news/2024/5/20 10:48:30/文章来源:https://blog.csdn.net/victorzzzz/article/details/96482935

GitHub地址:GitHub - vicotorz/zhangdizhihu: 仿“知乎”问答系统

开发流程:DataBase-->Model-->Dao-->Service-->Controller-->Test

SQL 建表语句:

评论:comment

id                    int(11),
content           text,
user_id           int(11),
entity_id         int(11),
entity_type     int(11),
created_date datetime,
status             int(1)

index 'entity-index' ('entity-id' ASC,'entity-type' ASC)

feed流:feed流

id                    int(11),
created_date  datetime,
user_id           int(11),
data                tinytext,
type                int(11)

index 'user_index' ('user_id' ASC)

登陆状态:login_ticket

id           int(11),
user_id  int(11),
ticket     varchar(45),
expired  datetime,
status    int(11)

消息:message

id                        int(11),
from_id               int(11),
to_id                   int(11),
content               text,
created_date      datetime,
has_read            int(11),
conversation_id  varchar(45)

index 'conversation_index' ('conversation_id' ASC)
index 'created_date' ('created_date' ASC)

问题:question

id                         int(11),
title                      varchar(255),
content                text,
user_id                int(11),
created_date      datetime,
comment_count  int(11)

index 'date_index' ('created_date' ASC)

用户: user

id               int(11),
name         varchar(64),
password  varchar(128),
salt            varchar(32),
head_url    varchar(56),

primary key('id')
unique key 'name' ('name')

MyBatis:

  • pom.xml引入my-spring-boot-starter、mysql-connector-java
  • application.properties增加数据库连接等配置
  • mybatis-config.xml新增mybatis使用规则
  • 复杂的sql写DAO.xml

Fastjson:
       jsonObject 传入到Ajax的js中,例如unfllow的json,传入到detail.js中


Redis:

数据结构指令
Listlpush(异步队列放入事件)、lpop、blpop、
lindex、lrange、lindex、lrem、linsert、
lset、rpush
Setsdiff、smembers(获取状态)、sinter、scard(点赞)
srem(消除踩)、sadd
SortedSetzadd(添加关注)、zscore、zrange(获取粉丝)
zcount、zrank、zrevrank、zrem(取消关注)
Hashhset、hget、hgetAll、hexists、hkeys、hvals

异步框架:

存入格式:EVENTQUEUE:

{actorId:12, entityId:6910,entityOwnerId:12,entityType:1,exts:{},type:FLLOW}

代码结构:

//fireEvent
public boolean fireEvent(EventModal eventModal){String json = JSONObject.toJSONString(eventModal);String key  = RedisKeyUtil.getEventQueuekey();jedisAdapter.lpush(key,json);return true;
}
EventModel{EventType type;//Event类型actorId;//执行用户identityType;//entity类型entityId;//entity identityOwnerId;//entity 拥有者id
}

Event Consumer方法:

afterPropertiesSet把一个Handler关心的事件放在config

Map<String,EventHandler> beans = applicationContext.getBeansOfType(EventHandler.class);
  • beans内容格式为:(”addHandler“,com.zhihu.async.handler.AddQuestionHandler)
  • 取beans.getValue().getSupportEventTypes()内容
  • 添加ADD_QUESTION,com.zhihu.async.handler.AddQuestionHandler

开启线程把优先队列的事件取出来,还原Event

  • Thread一直从JedisPool中取有EVENTQUEUE的事件,若没有EVENT_QUEUE字样,表明是新事件
  • 还原EVENT  JSON.parseobject(message,EventModel.class)
  • 若config中没有字样,不能识别
for(EventHandler handler = config.get(eventModel.getType())) {handler.dohandle(eventModel);
}

在config中找谁处理这个EventHandler

用户登陆流程:

  1. StringUtils.isBlank
  2. 生成用户token,加盐:UUID.randomUUID();
  3. 密码 + 盐 的MD5加密
  4. 设置有效期expired

记录登陆状态:

Cookie cookie = new Cookie("ticket",map.get("ticket"));
cookie.setPath("/");
response.addCookie(cookie);
return "redirect:/";

敏感词内部:{五={星={红={旗={isEnd=1},isEnd=0},isEnd=0},isEnd=0},isEnd=0}

拦截器:链路回调思想,拦截HttpServletRequest

@Component,implements HandlerInterceptor:preHandler、postHandler、afterCompletion
定义Hostholder(使用ThreadLocal)
extends WebMvcConfiguration:注册定义好的拦截器
WendaConfiguration extends WebMvcConfiguraAdapter{@Autowiredvoid addInterceptors(InterceptorRefistry registry){registry.addInterceptor(...).addPathPatterns(...);}
}

Timeline功能:(1)推-redis (2)拉-数据库
代码涉及:EventHandler、FeedDao、Service、Modal、Controller、Redis 队列存储

  • 触发事件后放入异步队列
  • 调用FeedDao存入
  • 把这个事件推给所有粉丝,并放入到RedisAdapter中
  • 显示:从Jedis中取feed(lrange),若feed在数据库中,则加入显示

邮件功能:

  1. 开启pop3 / STMP 服务
  2. 加入Java mail依赖
  3. 编写实现类:JavaMailSenderImpl(设置name,password,Host,Port,Protocal,encoding)
  4. 调用:mailSender,sendWithHTMLTemplate(model.getExt("email"),"...",模板)

Solr:

solr_url = "http://...";
HttpSolrClient client = new HttpSolrClient.Builder(solr_url).build();//查询
SolrQuery query = new SolrQuery(keywrod);
QueryResponse response = client.query(query);//建索引
SolrInputDocument doc = new SolrInputDocument();
doc.setField("","");
UpdateResponse response = client(doc,...);

七牛云SDK上传:

  1. 设置七牛keys
  2. 设置上传空间:buketname
  3. 秘钥配置:Auth auth = Auth.create(ACCESS_KEY,SECRET_KEY);
  4. 设置上传对象:UploadManager uploadManager = new UploadManager();
  5. 设置七牛域名
  6. 开始上传:auth.uploadToken(bucketname);
  7. 上传图片(使用到MultipartFile)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_820004.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

https协议 ppt 下载卷_超全的PPT制作辅助网站和工具

超全的PPT制作辅助网站和工具很多小伙伴在制作 PPT 的时候&#xff0c;常常会遇到不知道该如何入手的问题&#xff0c;特别是对于&#xff1a;图片该如何选用&#xff1f;渐变风格的背景图去哪找&#xff1f;炫光的背景是怎么生成的&#xff1f;手机可以下载高清图片么&#xf…

Nancy之给我们的网站添加自定义图标

Nancy之给我们的网站添加自定义图标 原文:Nancy之给我们的网站添加自定义图标当我们在做一个网站时&#xff0c;可能经常会有这样一个需求&#xff0c;要给我们做的网站添加一个自定义的图标。 在Nancy中&#xff0c;默认是的下面这样 一个妹子的头像&#xff0c;其实也是挺好看…

我的第一个javaweb学习----模仿社区网站(三)

写注册界面的后台 首先得建立一张数据库表&#xff0c;用于存储用户信息的userinfo表&#xff0c;包括注册时间&#xff0c;昵称&#xff0c;签名等 受理注册信息的servlet 然后在servlet包下建立一个注册的Regservlet的Servlet类&#xff0c;用于接收网页传来的信息&#xff0…

什么专业学html css,认识HTML、css的重要性-专业SEO技术教程(27)

认识HTML、css的重要性-专业SEO技术教程(27)通过之前的学习&#xff0c;相信大家已经对SEO有了一定的认识。今天起我们将正式开始SEO的学习。看到这里有些朋友或许有这样的疑问&#xff0c;我们不是要学习SEO吗&#xff1f;为什么要讲解HTML的一些知识呢&#xff1f;这个就要从…

史上最全最新IT网站——你收藏了吗?

快来看看你知道多少 IT网站 1.CSDN 中国专业IT社区CSDN (Chinese Software Developer Network) 创立于1999年&#xff0c;致力于为中国软件开发者提供知识传播、在线学习、职业发展等全生命周期服务。 2.太平洋电脑网 于1999年正式推出&#xff0c;是国内首家以专业电脑市场…

网站后台文章编辑器eWebEditor 7介绍 及破解版免费下载

做网站的朋友都知道&#xff0c;网站后台发布文章的时候需要用到网页编辑器。什么叫网页编辑器&#xff0c;就是输入文章内容的一个输入框&#xff0c;这个输入框是个多行的输入框&#xff0c;在输入框中&#xff0c;能对输入的文字进行编辑排版。一般我们使用开源程序做站的时…

金融界网站模拟白银大赛,盈利可以兑换现金

金融界网站模拟白银大赛&#xff0c;盈利可以兑换现金 首届领航中国杯白银帝国赛将于2014年5月12日正式拉开帷幕&#xff0c;本届大赛创下财经互联网领域两项纪录&#xff0c;一是成功打造了白银模拟交易网页版&#xff0c;再者是将模拟盈利部分兑换成真实的现金&#xff01;赛…

给大家分享网站源码有12.9G需要的自己去下载吧

给大家分享网站源码有12.9G需要的自己去下载吧 给大家分享网站源码有12.9G需要的自己去下载吧 给大家分享网站源码有12.9G需要的自己去下载吧&#xff0c;里面有asp php aspx等网站源码。 文件太大&#xff0c;我用旋风下载不下来&#xff0c;一共有2800个源码&#xff0c;旋风…

使用WebDeployment Project改善VS2005发布网站问题

VS2005真的让人很不习惯&#xff0c;搞个WEB真要把人给搞死了。写程序就不说了。发布吧&#xff0c;是个大问题。Namespac没有&#xff0c;还有GAC引用不会自动发布出去,生成的DLL N个&#xff0c;在程序中就没法用反射来调用。整个一个就是折腾人。 下面是引用的。 VS2005发…

IIS中启用CGI来托管PHP和Python网站

IS中如果要托管PHP和Python的web站点&#xff0c;需要用到CGI来处理HTTP请求&#xff0c;默认情况IIS中是没有CGI模块的&#xff0c;需要在Windows server的服务器管理器&#xff08;Server Manager&#xff09;中安装CGI模块&#xff0c;步骤如下&#xff1a; 首先打开Server …

图解IIS8上解决网站第一次访问慢的处理(转载)

本篇经验以IIS8&#xff0c;Windows Server 2012R2做为案例。IIS8 运行在 Windows Server 2012 and Windows 8 版本以上的平台上。IIS中应用程序池和网站是单独存在的&#xff0c;但是网站运行必须建立在对应的应用程序池启动的前提下。默认情况下&#xff0c;应用程序池在不活…

.NET Core实战项目之CMS 第十七章 CMS网站系统的部署

.NET Core实战项目之CMS 第十七章 CMS网站系统的部署 目前我们的.NET Core实战项目之CMS系列教程基本走到尾声了&#xff0c;通过这一系列的学习你应该能够轻松应对.NET Core的日常开发了&#xff01;当然这个CMS系统的一些逻辑处理还需要优化&#xff0c;如没有引入日志组件以…

asn1 pem pfx格式证书_在阿里云购买SSL证书,让网站支持HTTPS

SSL简介以下内容引用自&#xff1a;百度百科&#xff1a;SSLSSLSSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全&#xff08;Transport Layer Security&#xff0c;TLS&#xff09;是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层与应用层之间对…

php安装时提示dir,php网站安装出现dir

WIN2003IIS6FastCGIPHP5.4.30的安装配置原文:WIN2003IIS6FastCGIPHP5.4.30的安装配置说明&#xff1a;PHP5.5已不支持win2003了&#xff0c;Win2003最高能安装PHP5.4.30。安装好系统&#xff1b;并且安装好IIS6。具体安装方法可查看&#xff1a;http://down.chinaz.com/server/…

问卷调查网站制作-前后端开发

前端使用jQuery&#xff0c;后端使用servlet制作一个简单问卷调查网站&#xff0c;使用的开发工具为eclipse。实现的功能&#xff1a;能够将读取MySQL数据库中的基本信息&#xff0c;并显示在网页中&#xff0c;用户评价后将用户的基本信息和评价信息传回到数据库。具体步骤如下…

最全的静态网站生成器(开源项目)

将动态网页静态化&#xff0c;可以有效减轻服务器端的压力&#xff0c;并且静态网页的访问速度要快于动态网页。此外&#xff0c;使用静态网页还有利于搜索引擎的收录&#xff0c;从而提高网站的搜索排名。 下面是StaticSiteGenerators网站收集整理的开源的静态网站生成器&…

dw网页制作入学教程_个人建站指南:网页制作教程

随着各种网页制作工具的普及&#xff0c;现在不懂技术的个人也能顺利建站了。不过使用网页制作工具虽然简单&#xff0c;但仍有很多细节需要注意&#xff0c;并且要遵循一定流程。那么个人究竟该如何建站呢&#xff1f;下面就给大家详细科普下个人网页制作教程&#xff1a;第一…

使用Java开发高性能网站需要关注的那些事儿

期各家IT媒体举办的业内技术大会让很多网站都在披露自己的技术内幕与同行们分享&#xff0c;大到facebook&#xff0c;百度&#xff0c;小到刚起步的网站。facebook&#xff0c;百度之类的大型网站采用的技术和超凡的处理能力的确给人耳目一新的感觉&#xff0c;但并不是每个网…

一步步构建大型网站架构

之前我简单向大家介绍了各个知名大型网站的架构&#xff0c;亿万用户网站MySpace的成功秘密、Flickr架构、YouTube网站架构、PlentyOfFish 网站架构学习、WikiPedia技术架构学习笔记。这几个都很典型&#xff0c;我们可以从中获取很多有关网站架构方面的知识&#xff0c;看了之…

大型网站架构改进历程:存储的瓶颈(上)

前不久公司请来了位互联网界的技术大牛跟我们做了一次大型网站架构的培训&#xff0c;两天12个小时信息量非常大&#xff0c;知识的广度和难度也非常大&#xff0c;培训完后我很难完整理出全部听到的知识&#xff0c;今天我换了个思路是回味这次培训&#xff0c;这个思路就是通…