知乎问答项目

说明:楼主某985小硕一枚,本科和研究生期间未能认真学习,导致研二实习未能找到一二三线互联网公司。于是,秋招痛定思痛,花了几千元钱买了牛客网算法、java面试等相关课程,潜心修炼!截止目前,已经拿到了华为、携程、科大讯飞、猫眼、浦发、银联、京东等正式Offer,目前暂定京东。最近几天将之前购买的和自己整理收集的算法课程,整理好了,有需要的同学可以加我q2897782560。收集的课程包括:

《牛客网 左程云 (初级、进阶)算法》
《牛客网 算法高频题目精讲(左程云)》
《牛客网-直通BAT算法精讲(左程云)》
《牛客网 初中高级项目(叶神)》
《九章《动态规划》系列》——强烈推荐,有“套路”地讲解常考的动态规划题目
《算法面试通关40讲》——强烈推荐,把面试和机试常考的题目都讲了一遍
《剑指Java面试-Offer直通车》——强烈推荐,面试“java后端工程师”的必备神器
《九章算法强化班课程》、《九章算法基础班课程》
《面试算法10月份推荐》、《编程算法基础(JAVA版)》、《邓俊辉-算法训练营(第二期)》
《Java秒杀系统方案优化 高性能高并发实战》、《Java从零到企业级电商项目实战》、《Spring Boot带前后端 渐进式开发企业级博客系统》、《Java并发编程与高并发解决方案(完整无密)》
一、总的概括

   这个项目是以现在的知乎、牛客网这类问答平台为原型,基于springboot的SSM框架的问答系统。数据库使用了redis和mysql,同时通过一个异步消息框架来实现事件的异步处理,并使用爬虫对网站进行数据填充。

二、源码下载

https://github.com/hzcforever/nowcoder-project

三、项目中涉及的技术点讲解

1)发表问题+敏感词过滤

发布问题时检查标题和内容,防止xss注入,并且过滤敏感词。防止xss注入直接使用HTMLutils的方法即可实现。过滤敏感词首先需要建立一个字典树,并且读取一份保存敏感词的文本文件,然后初始化字典树。最后将过滤器作为一个服务,让需要过滤敏感词的服务进行调用即可。

2)发表评论和站内信

 首先建立表comment和message分别代表评论和站内信。评论的逻辑是每一个问题下面都有评论,显示评论数量,具体内容,评论人等信息。消息的逻辑是,两个用户之间发送一条消息,有一个唯一的会话id,这个会话里可以有多条这两个用户的交互信息。通过一个用户id获取该用户的会话列表,再根据会话id再获取具体的会话内的多条消息。逻辑清楚之后,再加上一些附加功能,比如显示未读消息数量,根据时间顺序排列会话和消息。本节内容基本就是业务逻辑的开发,没有新增什么技术点,主要是前后端交互的逻辑比较复杂,前端的开发量也比较大。

3)Redis实现点赞和点踩功能

首先了解一下redis的基础知识,数据结构,jedis使用等。编写list,string,hashmap,set,sortset的测试用例,熟悉jedis api。开发点踩和点赞功能,在此之前根据业务封装好jedis的增删改查操作,放在util包中。根据需求确定key字段,格式是 like:实体类型:实体id 和 dislike:实体类型:实体id 这样可以将喜欢一条新闻的人存在一个集合,不喜欢的存在另一个集合。通过统计数量可以获得点赞和点踩数。一般点赞点踩操作是先修改redis的值并获取返回值,然后再异步修改mysql数据库的likecount数值。这样既可以保证点赞操作快速完成,也可保证数据一致性。

4)异步消息机制

在之前的功能中有一些不需要实时执行的操作或者任务,我们可以把它们改造成异步消息来进行发送。具体操作就是使用redis来实现异步消息队列。代码中使用事件event来包装一个事件,事件需要记录事件实体的各种信息:一个异步工具类(事件生产者+事件消费者+eventHandler接口),让以后各种事件的实现类来实现这个接口。事件生产者一般作为一个服务,由Controller中的业务逻辑调用并产生一个事件,将事件序列化存入redis队列中,事件消费者则通过一个线程循环获取队列里的事件,并且寻找对应的handler进行处理。整个异步事件的框架开发完成,后面新加入的登录,点赞等事件都可以这么实现。

5)关注+粉丝列表的实现

新增关注功能,使用redis实现每一个关注对象的粉丝列表以及每一个用户的关注对象列表。通过该列表的crud操作可以对应获取粉丝列表和关注列表,并且实现关注和取关功能。由于关注成功和添加粉丝成功时同一个事务里的两个操作,可以使用redis的事务multi来包装事务并进行提交。除此之外,关注成功或者被关注还可以通过事件机制来生成发送邮件的事件,由异步的队列处理器来完成事件响应,同样是根据redis来实现。对于粉丝列表,除了显示粉丝的基本信息之外,还要显示当前用户是否关注了这个粉丝,以便前端显示。对于关注列表来说,如果被关注对象是用户的话,除了显示用户的基本信息之外,还要显示当前用户是被这个用户关注,以便前端显示。

6)使用爬虫爬取数据,对网站进行数据填充

安装python3.x并且配置环境变量。同时安装pycharm,安装pip。安装好以后,先熟悉python的语法,写一些例子,比如数据类型,操作符,方法调用,以及面向对象的技术。因为数据是要导入数据库的,所以这里安装MySQLdb的一个库,并且写一下连接数据库的代码,写一下简单的crud进行测试。使用requests库作为解析http请求的工具,使用beautifulsoup作为解析html代码的工具,请求之后直接使用css选择器匹配。即可获得内容。当然现在我们有更方便的工具pyspider,可以方便解析请求并且可以设置代理,伪装身份等,直接传入url并且写好多级的解析函数,程序便会迭代执行,直到把所有页面的内容解析出来。这里我们直接启动pyspider的web应用并且写好python代码,就可以执行爬虫了。知乎:先找到问题,再把问题下所有的回答进行爬取,最后把问题和评论一起处理。

发布了100 篇原创文章 · 获赞 12 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/hmh13548571896/article/details/103963645
今日推荐