黑马头条
2021-09-22 22:59:51 4 举报
AI智能生成
项目笔记
作者其他创作
大纲/内容
day01(难点:MP api使用)
mp入门
lambdaQueryWapper用法需要掌握
数据库设计
计划分出了9个库,各个库主要解决的是某一个特定的业务。
开发步骤
阅读开发接口文档确定需求->controller接收前端接口参数,请求方式,封装数据->service接收数据进行逻辑业务处理->mapper提供DB接口->DB
DB->中间件->持久层->业务层->控制层
api模块中定义接口->mapper继承baseMapper->Service(实现类继承ServiceImpl<AdChannelMapper,AdChannel>实现Service接口)->controller实现api接口->统一返回ResponseResult
频道模块(ad_channel)
分页模糊查询
新增频道
修改频道->设置状态是否有效
删除频道->判断状态是否有效
测试工具
postman
swagger2
http://localhost:9001/swagger-ui.html
knife4j
http://localhost:9001/doc.html
day02(无难点)
1.通用异常类(进行全局异常处理)
写在common包中
根据业务需求定义ExceptionConfig
webpack
导入前端项目
敏感词(ad_sensitive)
增删改查(分页模糊查询)
MD5+手动加盐
jwt-token
用户验证登录成功后通过jwt自动生成token存于cokkie中
admin端登录实现
nacos搭建
day03(难点:微服务远程调用)
gateway网关验证JWT(ad_user)
全局过滤器校验token
自媒体用户注册模块(wm_user)
保存用户和按name查询
创作人注册模块(ap_author)
保存作者和按id查询
user模块中定义fegin,开启fegin远程调用
调用article微服务中的controller
调用wemedia微服务中的controller
远程调用
admin模块用户登录获取token
传入token,通过user模块中controller传入status
修改ap_user_realname中status值
通过ap_user_realname表中外键关联ap_user设置flag
通过wmUserFegin接口关联ap_user表和wm_user表创建新的自媒体用户
通过ApAuthorFeign接口关联ap_user表和ap_author表创建新创作人
前端接口测试
统一访问gateway网关入口6001
将admin+user通过网关访问过滤
day04(重点:FastDFS文件上传系统)
分布式事务
CAP定理
分区容错
一致性
可用性
BASE理论
基本可用
软状态
最终一致性
解决方案
XA协议两段提交
TCC补偿机制
消息最终一致性
基于seata实现分布式事务
创建seata模块,对外提供统一配置类
需要实现共同实现分布式事务的模块:1.需要在各自数据库中构建undo_log表;2.引入依赖并实现seata配置类
在需要实现分布式事务方法上添加注解@GlobalTransactional
需要实现开启seata服务才能实现分布式事务,否则报错
实现登录和网关功能
类似于admin用户登录
集成fastDFS实现素材管理功能(wm_material)
需要分别开启Tracker和Strorage服务
图片上传功能
素材列表功能(需要在seata配置类中添加分页功能,否则无法实现分页功能)
删除图片功能(引用状态下无法删除,非本人上传图片无法删除)
收藏和取消收藏功能
前端接口6002接口联调测试
day09(app端实现文章列表展示、文章内容也详情、关注功能)
app端前端系统
需要修改ip地址为本机地址
conf.js
dev.conf.js
分页文章列表展示(通过“type”属性判断)
load
根据publishTime排序
loadnew
根据publishTime排序
loadmore
分页查询
范围查询
通过tag属性判断
创建app网关heima-leadnews-app-gateway
文章内容详情展示(ap_article_content app文章内容表,ap_article_config app文章配置表)
解决Long精度丢失问题
通过jackson的序列化和反序列化
JSON.tojsonObject()->JSON.parse()
app端登录功能(ap_user)
关注作者/取消关注(ap_user_follow)
当点击关注按钮时通过fegin远程获取作者详情信息
判断用户登录状态
id!=0时为登录状态
修改关注状态,保存数据ap_user_follow
day11(使用mongoDB实现评论和评论回复功能->保存,点赞,查询,回显数据
mongoDB的使用
Query.query()
条件查询:Criteria.where().is().and().in()
降序排序:query.with(Sort.by(Sort.Direction.DESC,"likes"));
分页:query.with(PageRequest.of(1,3))
创建项目heima-leadnews-comment集成mongoDB
发表评论(ap_comment)
可以针对当前文章发布评论
内容,时间,点赞量等信息
评论的点赞(ap_comment_like)
针对于某一条评论进行点赞操作
点赞后修改点赞状态和点赞数量
重新加载回显点赞高亮
发表评论回复(ap_comment_repay)
需要获取评论id
新增回复内容,点赞量
回复的点赞(ap_comment_repay_like)
对某一个回复进行点赞
点赞后修改点赞状态和点赞数量
重新加载回显点赞高亮
day14(Jenkins持续集成)
软件的开发生命周期(SDLC(Software Development Life Cycle))
需求分析
设计
实现
测试
进化
敏捷开发(Agile Development)
迭代开发(Iterative Development)
增量开发(Incremental Development)
持续集成( Continuous integration)
是一个自动构建过程
是一个代码存储库
一个持续集成的服务器
配置Jenkins
git
maven
docker
mysql部署
xxl-job部署
多环境切换
基础依赖打包
微服务打包
部署前端项目
构建触发器配置
day16(项目拓展+面试题)
其它技术解决方案
视频点播
fastDFS
阿里云点播
数据迁移
HBASE
分库分表
myCat
面试题
黑马头条项目中的架构是什么样的?有什么好处?
springboot自动配置的原理?
项目中用到了spring cloud getaway网关,它有什么作用,你们在项目中是如何使用的?
项目中用到了nacos,它与eureka有什么区别?
项目开发的过程中,与前端人员是如何配合的?接口联调如何做?
项目中的异常是如何处理?
如何解决分布式项目中的分布式事务?
seata实现两阶段提交
在使用kafka的时候,生产者的消息确认机制有哪些,各有什么特点?
在使用kafka的时候,消费者是如何确保消息不会重复消费的?消息如何保证不会丢失?
为什么要使用mongodb?
存储文章内容数据
量大,查询新增频繁
数据价值较低
为什么要使用Elasticsearch?
倒排索引
检索效率高
为什么使用jenkins? jenkins的优势是什么?
链路追踪的原理是什么?skywalking核心功能有哪些?
项目中是如何解决高并发的问题的?
前端
Nginx实现动静分离
后端
服务单一原则
缓存技术
限流
降级
熔断
项目中哪一块用到了缓存?
搜索联想词
app文章热点数据
在项目开发中,遇到哪些技术难题?最终如何解决的?
分布式事务
seata
分布式任务调度
xxl-job
day05(难点:新闻内容保存与修改)
自媒体文章实现分页查询(wm_news)
自媒体文章发布与修改(wm_news_material关联表)
通过判断是否有new_id来确定新增和修改逻辑
修改需要先删除关联表内容后再update
无id直接save
将news里的内容与material关联写进wm_news_material关联表中(数据库中保存的url不包含http地址,需要进行业务处理)
如果是文章引用则设置type为0
如果是封面引用则设置type为1
单图,多图,无图
自动添加:<2添加1张,>=3添加3张,无则不添加
自媒体文章根据id查询
自媒体文章删除
通过news_id先删除关系表中数据,在删除news表中数据
自媒体文章上下架
已发布,已上架文章无法删除
需要先下架才能进行逻辑业务处理
day06(重点:kafaka接收消息,DFA过滤算法)
kafka(依赖于zookeeper)
消息生产者
同步发送
异步发送(回调函数)
消息消费者(poll()接收消息通过偏移量来确认消息是否发生改变)
同步提交
异步提交
阿里云安全
文本内容检测
图片内容检测
DFA算法(确定有穷自动机)
一次性的把所有的敏感词存储到了多个map中
hashMap的get实现检索功能
day07(文章自动审核功能实现)
文章自动审核流程
用户提交文章审核时,会将信息提交给kafka,kafka将任务转给自动审核的事务(@GlobalTransactional)方法中执行
根据文章信息查询用户id,status,根据状态的不同进行不同的逻辑处理
status=0 草稿
status=1 进行自动审核
调用aliyun安全服务分别进行图片和文字审核
自管理敏感词审核
根据检测结果返回相应的status
status=2 审核失败
修改自媒体文章信息(wm_news)
status=3 人工审核
修改自媒体文章信息(wm_news)
status=8 审核通过
保存文章配置内容(ap_article_config)
保存文章(ap_article)
保存文章内容(ap_article_content)
保存文章作者信息(ap_author)
修改自媒体文章信息(wm_news)
status=9 已发布
修改自媒体文章信息(wm_news)
admin端需要进行远程调用,添加openfeign依赖
admin端开启远程调用(@EnableFeignClients)
远程调用自媒体端-wmmediaFeign
远程调用作者端-apArticleFeign
使用雪花算法生成主键id(dto->type属性改为IdType.ID_WORKER,需要使用Long)
yml配置文件中mybatis-plus新增配置
global-config:
datacenter-id: 1
workerId: 1
datacenter-id: 1
workerId: 1
发布文章提交审核&定义监听器接收消息
在需要生产者监听的方法上通过kafkaTemplate的send方法将对应的组和文章信息传给监听器
监听器接收到消息,将消息传给消费者对应的方法上开启逻辑业务处理
分布式事务
使用seata在对应方法上提供@GlobalTransactional注册
day08(集成xxl-Job任务调度实现定时任务自动审核)
分布式任务调度(采用xxl-Job实现)
多线程方式:sleep
JDK提供的API:Timer、ScheduledExecutor
spring-task:spring支持的任务调度
xxl-Job
简单灵活
丰富的任务管理功能
高性能
高可用
易于监控运维
admin端实现人工审核功能(status=3时)
查看
新闻内容回显
通过
修改status=4
驳回
修改status=2+驳回原因
文章上下架(通过kafka异步发送消息修改enable)
enable=1
enable=0
day10(app端实现关注,点赞,不喜欢,收藏数据回显)
构建heima-leadnews-behavior采集用户行为数据
关注行为(ap_follow_behavior)->user模块
点赞行为(ap_likes_behavior)->behavior模块
阅读行为(ap_read_behavior)->behavior模块
不喜欢行为(ap_unlikes_behavior)->behavior模块
收藏行为(ap_collection)->article模块
day12(ES实现文章搜索功能,关键字联想功能->通过redis缓存)
ES使用(需要掌握ES-API)
拉取es镜像
ik分词器
启动kibana
app端文章搜索(heima-leadnews-search)
创建ES索引
将数据库已有数据添加至ES中
每当文章自动审核通过后时,保存至ES中
搜索记录(ap_user_search)
每次搜索保存搜索记录至数据库中
根据时间倒序排序分页查询
构建线程池,每次创建搜索词时,异步调用方法进行添加
搜索字联想实现
1.通过查询数据库实现,每次都需要查询数据库,io次数多,降低数据库效率
2.将关键词保存至redis中,每次通过redis中查询
首次构建k-v如果无数据则查询数据库中所有搜索词,添加至redis中
如果有数据且redis中存在,直接查询
如果redis有数据有新增时,保存一份至数据库中
day13(Kafka Stream流式计算)
可选技术方案
Hadoop
Kafka Stream
根据用户的行为(阅读、点赞、评论、收藏)实时计算热点文章
开启定时任务,每日更新一次redis中缓存热点数据
每次用户进行行为操作,通过流式计算统计多次行为传给数据库中保存,减少IO次数
文章计算分值,根据频道id取分值前30条缓存至redis
发布文章后,判断该文章分值是否高于缓存中最后一条数据或是否有30条数据 进行替代或新增操作
day15(skywalking分布式链路追踪)
作用:快速定位问题,性能分析,服务拓扑图,服务告警
Googel Drapper提出分布式链路三大目标
低消耗
应用透明
延展性
openTracing
定义了一套通用的数据上报接口,要求各个分布式追踪系统都来实现这套接口
探针技术-JavaAgent
虚拟机级别的AOP
主程序之前的Agent
主程序运行后的Agent
skyWalking
是一个分布式系统的应用程序性能监控工具(APM),专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。
核心功能
指标分析:服务,实例,端点指标分析
问题分析:在运行时分析代码,找到问题的根本原因
服务拓扑:提供服务的拓扑图分析
依赖分析:服务实例和端点依赖性分析
服务检测:检测慢速的服务和端点
性能优化:根据服务监控的结果提供性能优化的思路
链路追踪:分布式跟踪和上下文传播
数据库监控:数据库访问指标监控统计,检测慢速数据库访问语句(包括SQL语句)
服务告警:服务告警功能
0 条评论
下一页