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