当前位置: 首页 > news >正文

【云岚到家】-day05-6-项目迁移-门户-CMS

【云岚到家】-day05-6-项目迁移-门户-CMS

  • 4 项目迁移-门户
    • 4.1 迁移目标
    • 4.2 能力基础
      • 4.2.1 缓存方案设计与应用能力
      • 4.2.2 静态化技术应用能力
    • 4.3 需求分析
      • 4.3.1 界面原型
    • 4.4 系统设计
      • 4.4.1 表设计
      • 4.4.2 接口与方案
        • 4.4.2.1 首页信息查询接口
        • 4.4.3.1 数据缓存方案
        • 4.4.3.2 页面静态化
    • 4.5 面试常见问题
  • 5 CMS系统
    • 5.1 迁移目标
    • 5.2 需求分析
      • 5.2.1 业务流程
      • 5.2.2 界面原型
      • 5.2.3 功能列表
    • 5.3 系统设计
      • 5.3.1 总体流程
      • 5.3.2 表设计
        • 5.3.2.1 菜单
        • 5.3.2.2 内容草稿
        • 5.3.2.3 正式内容
        • 5.3.2.4 内容回收站
        • 5.3.2.5 内容统计信息
        • 5.3.2.6 内容检索表
        • 5.3.2.7 SQl
      • 5.3.3 提交审核流程
      • 5.3.4 发布流程流程
      • 5.3.5 内容采用OSS存储
    • 5.4 面试常问问题


4 项目迁移-门户

4.1 迁移目标

项目中通过缓存技术实现了APP首页的信息查询,这是针对APP门户的技术方案。

除了APP门户还有PC门户,本次迁移目标的是理解PC门户的实现方案,理解CMS发布系统的技术方案。

门户是一个系统的入口,应用场景广泛,如下所示,通过本次迁移有能力设计APP门户及WEB PC门户的技术方案。

企业门户:包含员工手册、内部新闻、培训材料、公司政策等信息,同时提供员工自助服务和办公工具。
政府门户:政府门户网站提供政府机关和公共服务的信息和服务。包括公告、法规、政府项目、在线服务、税收信息等。
教育门户:提供学校和学区的信息。它可以包括课程表、学术成绩、教材信息、校园活动通知等。
新闻门户:新闻门户网站为用户提供最新的新闻、社论、评论、娱乐和体育等多种信息。用户可以通过新闻门户获取各种领域的资讯。

4.2 能力基础

4.2.1 缓存方案设计与应用能力

在门户中对信息查询类接口应用缓存提高查询效率。

我们可以参考第三章的内容进行缓存方案的设计,同时要避免高并发场景下缓存穿透、击穿、雪崩等问题,使用SpringCache等缓存框架操作缓存。

4.2.2 静态化技术应用能力

对于PC网站的门户页面通常需要使用静态化技术对网页静态化,避免每次请求动态数据,从而提高响应能力。

4.3 需求分析

4.3.1 界面原型

下边列出不同类型门户的界面原型:

系统类门户

在这里插入图片描述

在这里插入图片描述

资讯类门户

在这里插入图片描述

旅游门户

在这里插入图片描述

电商门户

在这里插入图片描述

4.4 系统设计

下边以界面原型中第一个系统类门户为例进行分析和设计 。

4.4.1 表设计

数据库表清单:

表名称表名存储内容
内容表content内容,包含新闻、广告、论坛、企业文化、审计公告、规章制度
员工自我介绍表staff_introduction未正式发布审核通过的内容均认为是草稿
消息统计表message_statistics用户消息统计表,主要统计员工待办任务数,未读邮件数等

表结构如下:

内容表:

名称数据类型是否可空主键长度描述
idbigintNOYES19
titlevarcharYESNO255标题
show_timedatetimeYESNO首页展示时间
typetinyintYESNO3内容类型,1:新闻,2:公告,3:论坛,4企业文化,5审计公告,6:规则制度
thumbnail_urlvarcharYESNO255缩略图
redirect_linksvarcharYESNO255跳转链接
content_pathvarcharYESNO255内容访问oss访问路径,内容非常占磁盘空间,采用廉价的oss可以降低成本
statusvarcharYESNO255内容状态,1:草稿,2:审核中,3:已发布,4:拒绝,5:隐藏,6:回收
release_typetinyintYESNO3发布类型,1:立即发布,2:定时发布
release_timedatetimeYESNO定时发布时该字段才有意义
recovery_timedatetimeYESNO回收时间,如果该时间存在到达该时间内容自动撤销,如果不存在该时间,需要手动撤销
recovery_typetinyintYESNO3回收类型,1:手动回收,2:定时回收
recyclerbigintYESNO19回收人id,后台管理员id
priorityintYESNO10优先级,数字越大优先级越高
visits_numintYESNO10访问人数
home_showbitYESNO1是否首页展示
liked_numintYESNO10点赞人数
create_timedatetimeYESNO创建时间
update_timedatetimeYESNO更新时间
create_bybigintYESNO19创建人id
update_bybigintYESNO19更新人id
is_deletedbitYESNO1逻辑删除

员工自我介绍表:

idbigintNOYES19主键id
staff_idbigintNONO19员工id
avatarvarcharYESNO255员工头像
namevarcharYESNO20员工姓名
introducevarcharYESNO255员工自我介绍
create_timedatetimeYESNO创建时间

消息统计表:

idbigintNOYES19员工id或后台管理员id
email_numintYESNO10未读邮件数量
to_do_task_numintYESNO10待办任务数量

sql语句:

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for content
-- ----------------------------
DROP TABLE IF EXISTS `content`;
CREATE TABLE `content`  (`id` bigint(0) NOT NULL,`title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '标题',`show_time` datetime(0) NULL DEFAULT NULL COMMENT '首页展示时间',`type` tinyint(0) NULL DEFAULT NULL COMMENT '内容类型,1:新闻,2:公告,3:论坛,4企业文化,5审计公告,6:规则制度',`thumbnail_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '缩略图',`redirect_links` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '跳转链接',`content_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '内容访问oss访问路径,内容非常占磁盘空间,采用廉价的oss可以降低成本',`status` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '内容状态,1:草稿,2:审核中,3:已发布,4:拒绝,5:隐藏,6:回收',`release_type` tinyint(0) NULL DEFAULT NULL COMMENT '发布类型,1:立即发布,2:定时发布',`release_time` datetime(0) NULL DEFAULT NULL COMMENT '定时发布时该字段才有意义',`recovery_time` datetime(0) NULL DEFAULT NULL COMMENT '回收时间,如果该时间存在到达该时间内容自动撤销,如果不存在该时间,需要手动撤销',`recovery_type` tinyint(0) NULL DEFAULT NULL COMMENT '回收类型,1:手动回收,2:定时回收',`recycler` bigint(0) NULL DEFAULT NULL COMMENT '回收人id,后台管理员id',`priority` int(0) NULL DEFAULT 0 COMMENT '优先级,数字越大优先级越高',`visits_num` int(0) NULL DEFAULT NULL COMMENT '访问人数',`home_show` bit(1) NULL DEFAULT NULL COMMENT '是否首页展示',`liked_num` int(0) NULL DEFAULT NULL COMMENT '点赞人数',`create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',`update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',`create_by` bigint(0) NULL DEFAULT NULL COMMENT '创建人id',`update_by` bigint(0) NULL DEFAULT NULL COMMENT '更新人id',`is_deleted` bit(1) NULL DEFAULT NULL COMMENT '逻辑删除',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Table structure for message_statistics
-- ----------------------------
DROP TABLE IF EXISTS `message_statistics`;
CREATE TABLE `message_statistics`  (`id` bigint(0) NOT NULL COMMENT '员工id或后台管理员id',`email_num` int(0) NULL DEFAULT NULL COMMENT '未读邮件数量',`to_do_task_num` int(0) NULL DEFAULT NULL COMMENT '待办任务数量',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '消息统计数据' ROW_FORMAT = Dynamic;-- ----------------------------
-- Table structure for staff_introduction
-- ----------------------------
DROP TABLE IF EXISTS `staff_introduction`;
CREATE TABLE `staff_introduction`  (`id` bigint(0) NOT NULL COMMENT '主键id',`staff_id` bigint(0) NOT NULL COMMENT '员工id',`avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '员工头像',`name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '员工姓名',`introduce` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '员工自我介绍',`create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '员工入职介绍' ROW_FORMAT = Dynamic;SET FOREIGN_KEY_CHECKS = 1;

4.4.2 接口与方案

涉及的技术:spring、springboot、mybatis-plus、redis、mysql、freemarker

部分技术应用说明:

redis:主要解决信息缓存问题,使用redisTemplate进行缓存读写

阿里云oss:静态化界面、具体内容(例如公告、论坛、新闻的具体内容)

freemarker:用于将模板和数据加工处理成静态界面、以此来提高网站的性能

4.4.2.1 首页信息查询接口

接口名称:首页信息查询接口

接口场景:各种后端平台门户方案,多用于pc版以及公司的门户网站

接口路径:GET /home

请求参数:暂无

响应内容:内容列表信息,json格式,示例如下:

{"code": "200","msg": "OK","result": {"newsList":[{//新闻"id":"long,新闻内容id","title":"string,新闻标题","showTime":"string, 展示时间,前端根据自己格式转换","thumbnailUrl":"string,缩略图""redirectLinks":"string,跳转链接"}],"commonNoticeList":[{//公告"id":"long,公告内容id","title":"string,公告标题","showTime":"string, 展示时间,前端根据自己格式转换","thumbnailUrl":"string,缩略图""redirectLinks":"string,跳转链接"}],"forumList":[{//论坛"id":"long,论坛内容id","title":"string,论坛标题","showTime":"string, 展示时间,前端根据自己格式转换","thumbnailUrl":"string,缩略图""redirectLinks":"string,跳转链接"}],"enterpriseCultureList":[{//企业文化"id":"long,企业文化内容id","title":"string,企业文化标题","showTime":"string, 展示时间,前端根据自己格式转换","thumbnailUrl":"string,缩略图""redirectLinks":"string,跳转链接"}],"auditNoticeList":[{//审计公告"id":"long,审计公告内容id","title":"string,审计公告标题","showTime":"string, 展示时间,前端根据自己格式转换","thumbnailUrl":"string,缩略图""redirectLinks":"string,跳转链接"}],"regulationList":[{//规则制度"id":"long,规则制度内容id","title":"string,规则制度标题","showTime":"string, 展示时间,前端根据自己格式转换","thumbnailUrl":"string,缩略图""redirectLinks":"string,跳转链接"}]"message":{"todoTaskNum":"int,待办数量","emailNum":"int,未读邮件数量"},"staffIntroductionList":[{ //员工自我介绍信息"id":"long,员工自我介绍信息id","name":"string,员工姓名","avatar":"string,员工头像","createTime":"string,入职介绍时间""introduce":"string,自我介绍"}]}
}
4.4.3.1 数据缓存方案

首页信息查询接口是一个查询接口,没有操作,所以我们只要考虑该接口的读取性能,即如何使首页访问起来更快,在这里我们选择压缩接口(所有信息汇总到一个接口)+缓存。

为什么这么设计呢?首先我们需要缓存的数据是有限的(我们是一个企业内部服务用户量有限),二是我们的信息变换没有那么频繁。

而考虑到缓存我们就要考虑另一个问题了,该如何做缓存。把所有信息集中缓存可以吗?显而易见是有问题的,首页当中有一项是消息,每个人的消息是不一样的,所以,首页中的数据有一部分是公共的例如新闻、公告等,另一些信息是用户独有的,例如待办数量、邮件数量。

所以我们将数据拆分保存,存储结构设计如下:

在这里插入图片描述

公共信息:每个用户看到的都一样,而且变化不大,我们采用String数据结构,使用起来方便简单,所有信息一起生效和失效,对性能影响不大

个性化信息:消息数量,每个用户的数据都是不一样的,每个用户不止有一项数据,我们采用hash结构,每个用户一个Hash,方便数据变更,一次性读取。

4.4.3.2 页面静态化

页面静态化是一种优化网站性能和提高加载速度的策略,它的核心思想是将动态生成的页面内容事先生成并存储为静态文件,而不是每次用户请求时都动态生成页面。这有助于减轻服务器负担,提高页面响应速度。

页面静态化技术通常用于web PC网站,对于一些信息变化不频繁且访问量大的页面使用页面静态化技术:

示例如下:

门户页面

新闻详情页面

订单详情页面

商品详情页面

在本例中,对公告页面进行静态化,门户页面进行静态化、新闻页面静态化。

上述功能可以通过CMS系统实现。详细见CMS系统。

CMS系统用到了页面静态化技术,比如:velocity 、freemarker等,可进行自学,静态化技术入门视频:

静态化技术学习入口

页面静态化后需要上传到文件系统,比如:阿里云的OSS、腾讯云的CFS等。

也可以自行搭建,比如使用开源的minio实现。

minio的使用视频:minio学习入口

4.5 面试常见问题

  1. 首页如何优化

    1)、减少接口的数量,将多个信息汇总的一个接口中

    2)、使用缓存减少直接读取数据库次数

    3)、使用mysql覆盖索引进行查询,避免回表查询,提高mysql查询的效率

  2. redis缓存为什么分别采用String和Hash两种数据结构

    我们系统使用String结构存储了公共信息,使用Hash结构存储了个性化信息。

    公共信息特点:

    1)、每个人看到的都一样,没有区别;2)、更新频率低;3)、实时性要求低

    个性化信息:

    1)、每个人都是独享的;2)、信息变更频率高,数据不会一起变更;3)、实时性要求高

​ 针对公共信息我们采用了String结构,变更次数少可以使用一个字符串解决,读取方便简单;针对个性化信息我们采用Hash结构,变更次数多,每个员工都有一条数据,用户间变更不受影响;每个用户都有多个hashKey,不同数据间更新不受影响,还能一次性读出所有数据,操作简单。

5 CMS系统

5.1 迁移目标

在门户中用到了CMS系统。

CMS(内容管理系统)在各种场景中都有广泛的应用,主要因为它们能够简化和优化内容的创建、编辑、发布和管理过程,提高网站或应用的运营效率。以下是一些常见的CMS系统应用场景:

  1. 博客和个人网站:

    个人博客和网站是CMS系统最早和最常见的应用场景之一。CMS系统可以让个人用户轻松地创建和更新博文,管理页面内容,展示个人作品或生活日志。

  2. 企业网站:

    企业使用CMS系统来创建和维护公司网站,包括企业介绍、产品展示、新闻发布、招聘信息等。CMS使企业能够快速更新网站内容,保持与市场变化的同步。

  3. 新闻门户:

    新闻网站和在线媒体使用CMS系统来管理和发布新闻、文章、图片和视频。CMS系统的多用户支持和版本控制功能有助于团队协作和内容管理。

  4. 餐饮和旅游网站:

    餐饮和旅游行业使用CMS系统来管理菜单、酒店信息、旅游路线等内容。CMS系统使企业能够灵活地更新和调整业务信息。

本次迁移的目标是认识CMS系统的工作流程,理解它的技术方案,在内容管理及内容发布的场景中使用CMS系统或者使用其技术方案。

5.2 需求分析

下述产品为一个内容社区的后台CMS系统

5.2.1 业务流程

在这里插入图片描述

5.2.2 界面原型

在这里插入图片描述

编辑页

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

5.2.3 功能列表

在这里插入图片描述

5.3 系统设计

5.3.1 总体流程

在这里插入图片描述

编写内容:保存到草稿表,状态为:草稿

提交审核:更新草稿表状态为审核中,将内容生成html静态页面上传到OSS。

审核失败:内容状态为已拒绝

审核通过:内容状态为已发布,将草稿中的内容保存到内容表及内容检索表,对内容检索信息进行分词同步索引到ES中,此时用户可以搜索到内容并查看。

下线:内容状态为隐藏,删除内容检索信息记录,通过Canal+MQ将ES中的索引删除。

删除:写入回收表,内容状态为回收,删除内容检索信息记录,通过Canal+MQ将ES中的索引删除,并且删除OSS中的静态文件。

5.3.2 表设计

CMS发布模块表清单:

mysql表:

表名称表名存储内容
菜单menus内容导航菜单,多级菜单:新闻–>军事
内容草稿content_draft未正式发布审核通过的内容均认为是草稿
正式内容content已经审核通过的内容
内容回收站content_recycle删除的内容
内容统计信息content_statistics对内容的点赞、踩赞、访问量进行统计

elasticsearch表:

表名称表名存储内容
内容检索表content_search内容检索表

表结构如下:

5.3.2.1 菜单
名称数据类型允许为空主键长度字段描述
idbigintNOYES19菜单id
namevarcharYESNO50菜单名称
parent_idbigintYESNO19父菜单id
menu_descvarcharYESNO255菜单描述
statusintYESNO10菜单状态,1:已上架,2:已下架
menu_levelintYESNO10菜单级别,1:一级菜单,2:二级菜单
create_timedatetimeYESNO创建时间
update_timedatetimeYESNO更新时间
create_bybigintYESNO19创建人,后台人员id
update_bybigintYESNO19更新人,后台人员id
5.3.2.2 内容草稿
名称数据类型允许为空主键长度字段描述
idbigintNOYES19内容id
titlevarcharYESNO255内容标题
menu_id_1bigintYESNO19一级菜单id
menu_id_2bigintYESNO19二级菜单id
content_pathvarcharNONO255内容访问oss访问path,内容非常占磁盘空间,采用廉价的oss可以降低成本
thumbnail_urlvarcharYESNO255缩略图url
priceintYESNO10价格,单位分
redirect_linksvarcharYESNO255跳转链接
seo_titlevarcharYESNO50检索标题
key_wordvarcharYESNO255检索关键字
search_descvarcharYESNO255检索描述
anonymous_visitbitYESNO1是否支持匿名访问
allow_evaluatebitYESNO1是否允许评价
release_typeintYESNO10发布类型,1:立即发布,2:定时发布
schedule_release_timedatetimeYESNO定时发布时间
statusintYESNO10内容状态,1:草稿,2:审核中,4:拒绝
reject_reasonvarcharYESNO255审核拒绝原因
create_timedatetimeYESNO创建时间
update_timedatetimeYESNO更新时间
create_bybigintYESNO19创建人id
update_bybigintYESNO19更新人id
is_deletedbitYESNO1逻辑删除
5.3.2.3 正式内容
名称数据类型允许为空主键长度字段描述
idbigintNOYES19内容id
titlevarcharYESNO255内容标题
menu_id_1bigintYESNO19一级菜单id
menu_id_2bigintYESNO19二级菜单id
thumbnail_urlvarcharYESNO255缩略图url
content_pathvarcharNONO255内容访问oss访问path,内容非常占磁盘空间,采用廉价的oss可以降低成本
priceintYESNO10价格,单位分
redirect_linksvarcharYESNO255跳转链接
seo_titlevarcharYESNO50检索标题
key_wordvarcharYESNO255检索关键字
search_descvarcharYESNO255检索描述
anonymous_visitbitYESNO1是否支持匿名访问
allow_evaluatebitYESNO1是否允许评价
statusintYESNO10内容状态,:3:已发布,5:隐藏
release_timedatetimeYESNO发布时间
content_create_timedatetimeYESNO内容的创建时间
create_timedatetimeYESNO创建时间
update_timedatetimeYESNO更新时间
create_bybigintYESNO19创建人id
update_bybigintYESNO19更新人id
5.3.2.4 内容回收站
名称数据类型允许为空主键长度字段描述
idbigintNOYES19内容id
titlevarcharYESNO255内容标题
menu_id_1bigintYESNO19一级菜单id
menu_id_2bigintYESNO19二级菜单id
thumbnail_urlvarcharYESNO255缩略图url
content_pathvarcharNONO255内容访问oss访问path,内容非常占磁盘空间,采用廉价的oss可以降低成本
priceintYESNO10价格,单位分
redirect_linksvarcharYESNO255跳转链接
seo_titlevarcharYESNO50检索标题
key_wordvarcharYESNO255检索关键字
search_descvarcharYESNO255检索描述
anonymous_visitbitYESNO1是否支持匿名访问
allow_evaluatebitYESNO1是否允许评价
statusintYESNO10内容状态,6:回收
release_timedatetimeYESNO发布时间
content_create_timedatetimeYESNO内容的创建时间
create_timedatetimeYESNO创建时间
update_timedatetimeYESNO更新时间
create_bybigintYESNO19创建人id
update_bybigintYESNO19更新人id
5.3.2.5 内容统计信息
名称数据类型允许为空主键长度字段描述
idbigintNOYES19内容id
visits_numintYESNO10浏览量
evaluation_numintYESNO10评论数
liked_numintYESNO10点赞数
disliked_numintYESNO10踩赞数
5.3.2.6 内容检索表
名称数据类型字段描述
idlong内容id
key_wordstext浏览量,进行分词
titletext内容标题,进行分词
menu_id_1long一级菜单
menu_id_2long二级菜单
statusint内容状态:1:草稿,2:审核中,3:已发布,4:拒绝,5:隐藏,6:回收
priceint价格
release_timeint发布时间,10位数字时间戳,秒级
static_urltext静态化后,页面访问地址
update_timeint变更时间,10位数字时间戳,秒级
5.3.2.7 SQl
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for content
-- ----------------------------
DROP TABLE IF EXISTS `content`;
CREATE TABLE `content`  (`id` bigint(0) NOT NULL COMMENT '内容id',`title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '内容标题',`menu_id_1` bigint(0) NULL DEFAULT NULL COMMENT '一级菜单id',`menu_id_2` bigint(0) NULL DEFAULT NULL COMMENT '二级菜单id',`content_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '内容访问oss访问路径,内容非常占磁盘空间,采用廉价的oss可以降低成本',`thumbnail_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '缩略图url',`price` int(0) NULL DEFAULT NULL COMMENT '价格,单位分',`redirect_links` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '跳转链接',`seo_title` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '检索标题',`key_word` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '检索关键字',`search_desc` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '检索描述',`anonymous_visit` bit(1) NULL DEFAULT b'1' COMMENT '是否支持匿名访问',`allow_evaluate` bit(1) NULL DEFAULT b'1' COMMENT '是否允许评价',`static_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '静态化后,页面访问地址',`status` int(0) NULL DEFAULT NULL COMMENT '内容状态,3:已发布,5:隐藏',`release_time` datetime(0) NULL DEFAULT NULL COMMENT '发布时间',`content_create_time` datetime(0) NULL DEFAULT NULL COMMENT '内容的创建时间',`create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',`update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',`create_by` bigint(0) NULL DEFAULT NULL COMMENT '创建人id',`update_by` bigint(0) NULL DEFAULT NULL COMMENT '更新人id',`is_deleted` bit(1) NULL DEFAULT NULL COMMENT '逻辑删除',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '内容' ROW_FORMAT = Dynamic;-- ----------------------------
-- Table structure for content_draft
-- ----------------------------
DROP TABLE IF EXISTS `content_draft`;
CREATE TABLE `content_draft`  (`id` bigint(0) NOT NULL COMMENT '内容id',`title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '内容标题',`menu_id_1` bigint(0) NULL DEFAULT NULL COMMENT '一级菜单id',`menu_id_2` bigint(0) NULL DEFAULT NULL COMMENT '二级菜单id',`content_path` varchar(0) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '内容访问oss访问路径,内容非常占磁盘空间,采用廉价的oss可以降低成本',`thumbnail_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '缩略图url',`price` int(0) NULL DEFAULT NULL COMMENT '价格,单位分',`redirect_links` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '跳转链接',`seo_title` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '检索标题',`key_word` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '检索关键字',`search_desc` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '检索描述',`anonymous_visit` bit(1) NULL DEFAULT b'1' COMMENT '是否支持匿名访问',`allow_evaluate` bit(1) NULL DEFAULT b'1' COMMENT '是否允许评价',`release_type` int(0) NULL DEFAULT NULL COMMENT '发布类型',`schedule_release_time` datetime(0) NULL DEFAULT NULL COMMENT '定时发布时间',`status` int(0) NULL DEFAULT NULL COMMENT '内容状态,1:草稿,2:审核中,4:拒绝',`reject_reason` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '拒绝理由',`create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',`update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',`create_by` bigint(0) NULL DEFAULT NULL COMMENT '创建人id',`update_by` bigint(0) NULL DEFAULT NULL COMMENT '更新人id',`is_deleted` bit(1) NULL DEFAULT NULL COMMENT '逻辑删除',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '内容草稿' ROW_FORMAT = Dynamic;-- ----------------------------
-- Table structure for content_recycle
-- ----------------------------
DROP TABLE IF EXISTS `content_recycle`;
CREATE TABLE `content_recycle`  (`id` bigint(0) NOT NULL COMMENT '内容id',`title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '内容标题',`menu_id_1` bigint(0) NULL DEFAULT NULL COMMENT '一级菜单id',`menu_id_2` bigint(0) NULL DEFAULT NULL COMMENT '二级菜单id',`content_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '内容访问oss访问路径,内容非常占磁盘空间,采用廉价的oss可以降低成本',`thumbnail_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '缩略图url',`price` int(0) NULL DEFAULT NULL COMMENT '价格,单位分',`redirect_links` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '跳转链接',`seo_title` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '检索标题',`key_word` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '检索关键字',`search_desc` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '检索描述',`anonymous_visit` bit(1) NULL DEFAULT b'1' COMMENT '是否支持匿名访问',`allow_evaluate` bit(1) NULL DEFAULT b'1' COMMENT '是否允许评价',`static_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '静态化后,页面访问地址',`status` int(0) NULL DEFAULT NULL COMMENT '内容状态,6:回收',`release_time` datetime(0) NULL DEFAULT NULL COMMENT '发布时间',`content_create_time` datetime(0) NULL DEFAULT NULL COMMENT '内容的创建时间',`create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',`update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',`create_by` bigint(0) NULL DEFAULT NULL COMMENT '创建人id',`update_by` bigint(0) NULL DEFAULT NULL COMMENT '更新人id',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '内容' ROW_FORMAT = Dynamic;-- ----------------------------
-- Table structure for content_statistics
-- ----------------------------
DROP TABLE IF EXISTS `content_statistics`;
CREATE TABLE `content_statistics`  (`id` bigint(0) NOT NULL COMMENT '内容id',`visits_num` int(0) NULL DEFAULT 0 COMMENT '浏览量',`evaluation_num` int(0) NULL DEFAULT NULL COMMENT '评论数',`liked_num` int(0) NULL DEFAULT NULL COMMENT '点赞数',`disliked_num` int(0) NULL DEFAULT NULL COMMENT '踩赞数',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '内容统计信息' ROW_FORMAT = Dynamic;-- ----------------------------
-- Table structure for menus
-- ----------------------------
DROP TABLE IF EXISTS `menus`;
CREATE TABLE `menus`  (`id` bigint(0) NOT NULL COMMENT '菜单id',`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '菜单名称',`parent_id` bigint(0) NULL DEFAULT NULL COMMENT '父菜单id',`menu_desc` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '菜单描述',`status` int(0) NULL DEFAULT NULL COMMENT '菜单状态,1:已上架,2:已下架',`menu_level` int(0) NULL DEFAULT NULL COMMENT '菜单级别,1:一级菜单,2:二级菜单,3:三级菜单',`create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',`update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',`create_by` bigint(0) NULL DEFAULT NULL COMMENT '创建人,后台人员id',`update_by` bigint(0) NULL DEFAULT NULL COMMENT '更新人,后台人员id',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '菜单' ROW_FORMAT = Dynamic;SET FOREIGN_KEY_CHECKS = 1;

5.3.3 提交审核流程

提交审核后进行以下操作:

草稿中的内容状态为:审核中

将内容生成html上传到OSS并将文件地址保存到数据库

在这里插入图片描述

本流程首先将内容写入内容检索表,再通过Canal+MQ将内容检索信息同步到ES中、并且生成静态文件上传到OSS,将OSS的地址更新到草稿表中,最后更新草稿表的状态,Canal+MQ是家政项目的数据同步方案。

流程中的步骤跨越多个服务:上传文件到OSS、同步索引到ES,更新数据库,这里构成了分布式事务。

基于Canal+MQ的机制解决了分布式事务的:

首先向内容检索表写入记录,Canal读取binlog日志写入MQ。

消费程序监听MQ,拿到消息开始执行以下任务:

生成静态文件上传到OSS

同步索引到ES

更新草稿表的状态及OSS地址。

这三步有一步失败会导致整个执行过程异常,执行失败则MQ中的消息不会删除,通过重试来保证三步工作最终全部成功。

当达到重试次数还没有成功,失败消息会进入失败队列,由单独的处理程序进行处理,实现最终数据一致性。

5.3.4 发布流程流程

审核通过内容自动发布,将内容检索信息同步到 ES中,此时内容被搜索出来,用户点击查看内容。

在这里插入图片描述

说明:

本流程前三步通过本地事务控制,保证内容正式表、内容检索表和删除草稿同时成功或同时失败,再通过Canal+MQ将内容检索信息同步到ES中。这里使用了家政项目的数据同步方案。

5.3.5 内容采用OSS存储

内容详细信息没有使用传统的数据库存储,而存储到分布式文件系统,项目选择了阿里云oss有两个原因:

  1. 内容详细信息通常是文章、咨询、新闻等,通常占用空间都是比较大,如果存储在mysql或者elsaticsearch不但会降低性能,它们的存储成本也是很高的,而阿里云oss是价格低廉的。

  2. 内容发布采用了freemarker静态化,c端用户请求OSS访问静态页面,提高访问性能。

也可以自行搭建分布式文件系统,比如使用开源的minio实现。

minio的使用视频:https://www.bilibili.com/video/BV1j8411N7Bm?p=62&vd_source=81d4489ba9312103debc8ee843169f23

5.4 面试常问问题

  1. 为什么要做静态化

    CMS(内容管理系统)中的页面静态化是一种常见的性能优化手段,这样做有以下几个优点

    1)、提高页面加载速度:静态页面可以直接由Web服务器提供,无需在每次请求时动态生成。这消除了服务器端处理的开销,使页面加载速度更快。快速的页面加载对于提升用户体验、降低跳出率很重要。

    2)、减轻服务器压力:静态页面不需要在每次请求时动态生成,这意味着服务器端的计算资源可以更有效地分配给其他任务。特别是在面对高流量时,静态页面的缓存和提供速度更高效。

    3)、SEO优化:静态页面更有利于搜索引擎优化(SEO)。搜索引擎爬虫更容易理解和索引静态页面,因为它们不需要执行JavaScript或处理动态内容。静态页面有助于提高网站的搜索引擎排名。

    4)、降低数据库访问:动态生成的页面通常需要访问数据库来检索内容。将页面静态化后,可以大幅减少对数据库的访问,降低数据库的负担,提高数据库性能。

    5)、CDN缓存优化:静态页面更容易在内容分发网络(CDN)中进行缓存。CDN可以将静态资源分发到全球多个节点,提供更快的访问速度,同时减轻源服务器的负担。

    6)、稳定性和可靠性:静态页面不涉及动态生成和复杂的业务逻辑,因此在技术上更为简单,更容易维护和部署。这提高了系统的稳定性和可靠性

  2. 静态化适合哪些场景

    静态化适用于多种场景,尤其在需要提高性能、降低服务器负担、改善用户体验以及增强网站安全性等方面,静态化技术都能发挥重要作用。以下是一些适合使用静态化的场景:

    1)、内容不经常变动: 静态化适用于内容相对稳定,不经常变动的网站。例如,企业官方网站的首页、产品介绍页等静态信息。

    2)、博客和新闻网站: 对于博客文章和新闻内容,如果这些内容不需要频繁更新,可以将其静态化,提高页面加载速度,减轻服务器压力。

    3)、产品目录和商品详情页: 电商网站的产品目录和商品详情页通常是相对固定的,可以通过静态化来提高用户访问体验。

    4)、营销活动页面: 静态化适用于营销活动的临时页面,这些页面一般不需要频繁修改,但需要在短时间内迎接大量访问。

    5)、信息展示型网站: 对于那些主要用于信息展示,而非交互性强的网站,静态化是一种有效的优化手段。

    6)、高并发场景: 在高并发的情况下,静态化可以显著减轻服务器负担,提高网站的稳定性和响应速度。

    7)、CDN缓存优化: 静态页面更容易在内容分发网络(CDN)中进行缓存,提高全球范围内的访问速度。

    8)、资源文件静态化: 将CSS、JavaScript和图片等静态资源进行静态化,可以通过CDN进行分发,提高加载速度。

  3. 如何确保mysql、elasticsearch数据的一致性

    mysql和elasticsearch之间通过rabbitmq进行数据同步,保证数据完整有序更新是保证数据一致性的关键。

    1)、rabbitmq消息发送失败需要持久化,在mysql中创建一个异步消息失败表结合xxl-job定时重试异常失败消息

    2)、rabbitmq消息处理异常且多次重试后,将消息写入异常处理队列,通过失败处理程序主动拉取rabbitmq异常消息进行处理

    3)、数据同步的顺序性如何保证,即先修改为1,再修改为2,最终同步到ES中的数据必须是最后一次修改的数据。

    两种方案:

    使用单线程消费。

    基于乐观锁机制,每次变更数据增加版本号,更新数据前比较版本号,如果更新数据的版本号与当前数据版本号不一致则不处理。

  4. 你还知道CMS哪些优化手段

    优化内容管理系统(CMS)是确保网站性能、用户体验和搜索引擎优化的关键一步

    1)、异步加载: 使用异步加载技术,将页面中的一些资源(如JavaScript文件)设为异步加载,以避免阻塞页面渲染,提高页面加载速度。

    2)、Lazy Loading: 对于图片和其他媒体资源,使用延迟加载(Lazy Loading)技术,只在用户滚动到页面上需要时才加载这些资源,而不是一次性加载整个页面。

    3)、优化前端资源: 精简和优化CSS、JavaScript和HTML文件,删除不必要的空格、注释和缩进。使用压缩工具来减小文件大小,减少加载时间。

    4)、使用浏览器缓存: 配置服务器以启用浏览器缓存,减少用户重复访问时需要重新下载的资源,从而提高加载速度。

    5)、CDN优化: 配置CDN以确保它有效地缓存和分发静态资源,提高网站的全球访问速度。

相关文章:

【云岚到家】-day05-6-项目迁移-门户-CMS

【云岚到家】-day05-6-项目迁移-门户-CMS 4 项目迁移-门户4.1 迁移目标4.2 能力基础4.2.1 缓存方案设计与应用能力4.2.2 静态化技术应用能力 4.3 需求分析4.3.1 界面原型 4.4 系统设计4.4.1 表设计4.4.2 接口与方案4.4.2.1 首页信息查询接口4.4.3.1 数据缓存方案4.4.3.2 页面静…...

linux彻底卸载docker

for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done 要彻底卸载 Docker 及其相关组件,可以按照以下步骤进行操作。请注意,这些步骤会删除 Docker 安装的所有容器、镜…...

linux高级编程(网络)(www,http,URL)

数据的封包和拆包 封包: 应用层数据(例如HTTP请求)被传递给传输层。传输层(TCP)在数据前添加TCP头部(包含端口号、序列号等)。网络层(IP)在TCP段前添加IP头部&#xff…...

Perl 语言开发(十三):网络编程

目录 1. 概述 2. 网络编程基础 2.1 网络协议概述 2.2 Perl 网络编程基础模块 3. TCP 网络编程 3.1 创建 TCP 服务器 3.2 创建 TCP 客户端 4. UDP 网络编程 4.1 创建 UDP 服务器 4.2 创建 UDP 客户端 5. 高级网络编程 5.1 非阻塞 I/O 5.2 多线程网络编程 6. 简单的…...

Leetcode算法题(移除链表中的元素)

题目如下: 思路1:创建一个新的带头链表 (newhead),遍历头结点对应的值分别于x进行比较,将不等于x的节点尾插到新的带头链表中,返回新的带头链表的下一个节点。 代码如下: typedef …...

浅谈网络安全防守:从被动应对到主动管理的转变

浅谈网络安全防守:从被动应对到主动管理的转变 背景: 在当今的数字时代,网络安全已成为企业生存和发展的重要基石。然而,当企业的网络安全体系面临着诸如资产不清、互联网应用管理混乱、边界防火墙策略失效、长期未修复的漏洞、…...

CentOS7仅安装部署MySQL80客户端

文章目录 CentOS7仅安装部署MySQL80客户端一、前言1.场景2.环境 二、正文1.安装MySQL客户端2. 数据库备份脚本 CentOS7仅安装部署MySQL80客户端 一、前言 1.场景 仅安装部署MySQL80客户端,用于备份数据库时使用 mysqldump 工具 2.环境 Linux 发行版&#xff1a…...

力扣经典题目之->移除值为val元素的讲解,的实现与讲解

一:题目 博主本文将用指向来形象的表示下标位的移动。 二:思路 1:两个整形,一个start,一个end,在一开始都 0,即这里都指向第一个元素。 2:在查到val之前,查一个&…...

pico+unity3d项目配置

重点:unity编辑器版本要和pico的sdk要求一致、比如: 对于 Unity 2022.1.14 及以上版本,若同时在项目中使用 URP、Linear 色彩空间、四倍抗锯齿和OpenGL,会出现崩溃。该问题待 Unity 引擎解决。对于 Unity 2022,若同时…...

python条件

条件语句 if语句 if...else语句 if...elif...else语句 嵌套 is is 是一个身份运算符,用于比较两个对象的身份,即它们在内存中的地址是否相同。这与比较两个对象是否相等的 运算符不同。 运算符比较的是两个对象的值是否相等。 比较对象 比较基本数据…...

华为USG6000V防火墙v1

目录 一、实验拓扑图 二、要求 三、IP地址规划 四、实验配置 1🤣防火墙FW1web服务配置 2.网络配置 要求1:DMZ区内的服务器,办公区仅能在办公时间内(9:00-18:00)可以访问,生产区的设备全天可以访问 要求2:生产区不…...

Apache访问机制配置

Apache访问机制配置 Apache HTTP Server(简称Apache)是世界上使用最广泛的Web服务器之一。它的配置文件通常位于/etc/httpd/conf/httpd.conf或/etc/apache2/apache2.conf,根据操作系统的不同而有所不同。以下是配置Apache访问机制的详细说明…...

在word中删除endnote参考文献之间的空行

如图,在References中,每个文献之间都有空行。不建议手动删除。打开Endnote。 打开style manager 删除layout中的换行符。保存,在word中更新参考文献即可。...

【详解】Spring Cloud概述

🎥 个人主页:Dikz12🔥个人专栏:Spring学习之路📕格言:吾愚多不敏,而愿加学欢迎大家👍点赞✍评论⭐收藏 目录 1. 认识微服务 1.1 单体架构 1.2 集群和分布式架构 1.3 集群和分布式…...

板级调试小助手(3)基于PYNQ的OLED视频显示

一、前言 在之前的文章中介绍了《板级调试小助手》的系统结构和DDS自定义外设的搭建。这篇文章主要介绍一下如何在PYNQ中驱动平时长剑的OLED12864显示屏,并显示BadApple(毕竟有屏幕的地方就要有BadApple)。效果如下: BadApple 本项…...

git批量删除本地包含某字符串的特定分支

git批量删除本地包含某字符串的特定分支 git branch -a | grep 分支中包含的字符串 | xargs git branch -D git删除本地分支_git查看删除本地分支-CSDN博客文章浏览阅读989次。git branch -d <分支名>可以通过: git branch 查看所有本地分支及其名字&#xff0c;然后删…...

Android中RecyclerView使用详解(一)

目录 概述优点列表布局RecyclerView一、创建RecyclerView并且在布局中绑定二、实现RecyclerView单个item的布局三、给RecyclerView写一个对应的适配器Adapter1.创建自定义的ViewHolder2.继承Adapter&#xff0c;泛型使用我们自定义的ViewHolder3.重写Adapter的三个方法onCreate…...

坑3.上传图片(阿里云空间,oss验证)(未验证)

笔记 20240710 未验证&#xff0c;现在还没有阿里云空间&#xff0c;等买个sit环境就可以验证一下。 前端 页面 <!--页面--> <el-form-item label"优惠券图片" prop"couponImg"><single-upload v-model"dataForm.couponImg"&g…...

注册登录后上传文件到本地数据库项目

在上一篇的基础上我有添加了登录注册功能文件上传 更新一下代码添加登录注册功能 app.js // app.js const express require(express); const bodyParser require(body-parser); const cors require(cors); const db require(./models/db); const User require(./models…...

【学习笔记】无人机(UAV)在3GPP系统中的增强支持(十三)-更换无人机控制器

引言 本文是3GPP TR 22.829 V17.1.0技术报告&#xff0c;专注于无人机&#xff08;UAV&#xff09;在3GPP系统中的增强支持。文章提出了多个无人机应用场景&#xff0c;分析了相应的能力要求&#xff0c;并建议了新的服务级别要求和关键性能指标&#xff08;KPIs&#xff09;。…...

react 组件通信 —— 父子传值 【 函数式/类式 】

1、函数式组件通信 父子间通信 —— 父传子 父组件 export default function father() {return (<div style{{width:400px,height:200px,background:pink,marginLeft:500px}}>我是父组件<hr /><Son name{"韩小刀"}/></div>) } 子组件 ex…...

【SpringBoot】95、SpringBoot中使用MyBatis-Plus实现自动加密存储和查询自动解密

有的业务需要将敏感数据加密存储到 DB,如果我们每个都手动去加密,再设值,再保存 DB,不仅麻烦,还对开发者不友好,在 MyBatis-Plus 中我们可以使用 BaseTypeHandler 来解决这个问题 1、新增 TypeHandler import com.baomidou.mybatisplus.core.toolkit.AES; import com.b…...

[数仓]十二、离线数仓(Atlas元数据管理)

第1章 Atlas入门 1.1 Atlas概述 Apache Atlas为组织提供开放式元数据管理和治理功能,用以构建其数据资产目录,对这些资产进行分类和管理,并为数据分析师和数据治理团队,提供围绕这些数据资产的协作功能。 Atlas的具体功能如下: 元数据分类 支持对元数据进行分类管理,例…...

机器学习——决策树(笔记)

目录 一、认识决策树 1. 介绍 2. 决策树生成过程 二、sklearn中的决策树 1. tree.DecisionTreeClassifier&#xff08;分类树&#xff09; &#xff08;1&#xff09;模型基本参数 &#xff08;2&#xff09;模型属性 &#xff08;3&#xff09;接口 2. tree.Decision…...

翁恺-C语言程序设计-08-1. 求一批整数中出现最多的个位数字

08-1. 求一批整数中出现最多的个位数字 给定一批整数&#xff0c;分析每个整数的每一位数字&#xff0c;求出现次数最多的个位数字。例如给定3个整数1234、2345、3456&#xff0c;其中出现最多次数的数字是3和4&#xff0c;均出现了3次。 输入格式&#xff1a; 输入在第1行中…...

ROM修改进阶教程------深度解析小米设备锁机型不解锁bl 刷写特殊类固件的步骤

在玩机过程中会遇到很多自己机型忘记密码或者手机号不用导致机型出现账号锁。无法正常使用。那么此类机型如果无法正常售后解锁。只能通过第三方渠道。例如在早期小米机型有强解bl锁资源。然后刷入完美解锁包。这种可以登陆新账号。但后期新机型只能通过修改分区来屏蔽原设备锁…...

论文翻译 | LEAST-TO-MOST: 从最少到最多的提示使大型语言模型中的复杂推理成为可能

摘要 思维链提示&#xff08;Chain-of-thought prompting&#xff09;在多种自然语言推理任务上展现了卓越的性能。然而&#xff0c;在需要解决的问题比提示中展示的示例更难的任务上&#xff0c;它的表现往往不佳。为了克服从简单到困难的泛化挑战&#xff0c;我们提出了一种新…...

【区块链 + 智慧政务】都江堰区块链公共服务应用平台 | FISCO BCOS应用案例

都江堰区块链公共服务应用平台是四川开源观科技有限公司运用 FISCO BCOS 区块链技术为都江堰市建设的市级 区块链节点平台&#xff0c;该平台上线运营一年以来已在政务服务、社区养老和慈善公益领域落地 3 个应用&#xff0c;上链数据超 过 30 万条。 区块链 政务服务应用&am…...

Python从0到100(三十九):数据提取之正则(文末免费送书)

前言&#xff1a; 零基础学Python&#xff1a;Python从0到100最新最全教程。 想做这件事情很久了&#xff0c;这次我更新了自己所写过的所有博客&#xff0c;汇集成了Python从0到100&#xff0c;共一百节课&#xff0c;帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…...

redis redisson(仅供自己参考)

redis 通过setnx实现的分布式锁有问题 如图&#xff1a; 解决的新的工具为&#xff08;闪亮登场&#xff09;&#xff1a;redisson redisson可重入锁的原理 实现语言lua&#xff1a; 加锁实现脚本语言&#xff1a; 释放锁的脚本语言&#xff1a; 加锁的lua -- 首先判断这个锁…...