1-1 请说一下你项目中是如何进行项目管理和发布的
项目管理:
项目代码使用GOGS进行管理;
每天从GOGS中拉取最新的代码,剪分支,代码完成后Commit,然后切分支,合并,再Push;
项目发布:
项目发布使用Jenkins对代码进行集成和发布;
当代码推送到GOGS后,GOGS会把消息发给Jenkins,Jenkins就会拉取GOGS的代码,重新编译;
然后在Jenkins中重新执行任务,完成发布;
1-2 现在浏览器点击按钮会出现一个报错,如何定位发生问题的代码
有两种常用方法:
首先是看报错,根据报错提示的内容去找代码,看看什么位置出问题会报这个错误,继而打断点进行测试,但是这样有一定限制,如果是前端做的报错,那这样就不好查了.
先看请求发送给哪个服务器,然后根据映射文件hosts,去其中找对应的地址和端口,如果端口没有写默认是80端口的nginx,然后看nginx的配置,找到转接的地址,然后看nginx的docker中对比端口号,然后根据端口号找微服务(通常是网关),然后根据网关中的配置文件去找对应的微服务,定位出问题的方法,然后打断点
1-3 你的项目中进行用户的登录和检验的详细流程是怎样的
非空判断:
先对用户名和密码进行非空判断,如果结果为空,返回错误信息;
比对账号密码:
并查询用户名是否存在,如果不存在,返回错误信息;
如果用户名存在,比较加密后的密码和数据库中的密码是否一致,如不一致,返回错误信息;
生成Token:
确认无误后,用非敏感信息制作Token并返回;
校验Token:
前端把Token放入请求头中保存起来,用来正常访问;后端要调用拦截器对Token进行校验,如果校验失败,返回错误信息;
1-4 说一下文章发布的流程
文章发布大概分为以下几个流程:
判断操作:
首先要根据前端传来的信息判断是要新增文章还是修改文章。如果前端传来的信息中没有文章的主键,那么就是要新增文章;如果前端传回了文章的主键,那么就是修改文章.
如果是修改文章,则会先删除该文章在相关数据库表中已有的基本信息,比如素材图片等,然后再进行修改操作。这里的“修改”实际上是通过“新增”的方式来实现的,即重新添加文章的信息来覆盖旧的信息。
草稿处理:
判断新增修改后,则要判断是否为草稿;
如果为草稿,保存文章到数据库,不进行后续的发布处理
如果不为草稿,那么保存图片和文章中间表关系
发布时间:
文章发布时可以选择当即发布,也可以定时发布;
如果选择定时发布,就要通过Redission来实现,当设置了发布时间的文章被提交的时候,任务会加入到Redission的ZSet集合中,一旦到达发布时间,任务会从ZSet中移除非,并放入阻塞队列等待被消费
审核流程:
首先要对发布文章的内容进行审核,图片,文章,标题等;
其次是调用第三方审核工具,比如阿里云,华为云进行审核;
对于审核结果有以下几种类型:
如果审核未通过,则直接修改文章状态为审核失败状态并返回,前端提示修改;
需要人工审核介入,修改文章状态为人工审核状态并返回,前端进行提示;
审核成功,那就调用文章微服务保存文章,图片存入Minio,然后文章存入mysql,并同步到es中