9. 数仓开发之 DWD 层

9. 数仓开发之 DWD 层数仓开发之DWD层交易域加购事务事实表DWD层设计要点:DWD层的设计依据:维度建模理论,该层存储维度模型的事实表DWD层的数据存储格式:orc列式存储+snappy压缩DWD层表名的命名规范:dwd_数据域_表名_单分区增量****全量标识(inc/full)交易域加购事务事实表…

大家好,又见面了,我是你们的朋友全栈君。

9. 数仓开发之 DWD 层

DWD层设计要点:

  • DWD 层的设计依据 : 维度建模理论,该层存储维度模型的事实表
  • DWD 层的数据存储格式 : orc 列式存储 + snappy 压缩
  • DWD 层表名的命名规范 : dwd_数据域_表名_单分区增量****全量标识( inc / full )

1. 交易域

数据域 业务过程 粒度 维度 度量
时间 用户 商品 地区 活动(具体规则) 优惠券 支付方式 退单类型 退单原因类型 渠道 设备
交易域 加购物车 一次加购物车的操作 商品件数
下单 一个订单中一个商品项 下单件数/下单原始金额/下单最终金额/活动优惠金额/优惠券优惠金额
取消订单 一次取消订单操作 下单件数/下单原始金额/下单最终金额/活动优惠金额/优惠券优惠金额
支付成功 一个订单中的一个商品项的支付成功操作 支付件数/支付原始金额/支付最终金额/活动优惠金额/优惠券优惠金额
退单 一次退单操作 退单件数/退单金额
退款成功 一次退款成功操作 退款件数/退款金额

1.1 加购事务事实表

购物车表(cart_info):

字段名 字段说明 类型
id 编号 bigint(20)
user_id 用户id varchar(200)
sku_id skuid bigint(20)
cart_price 放入购物车时价格 decimal(10,2)
sku_num 数量 int(11)
img_url 图片文件 varchar(200)
sku_name sku名称 (冗余) varchar(200)
is_checked int(1)
create_time 创建时间 datetime
operate_time 修改时间 datetime
is_ordered 是否已经下单 bigint(20)
order_time 下单时间 datetime
source_type 来源类型 varchar(20)
source_id 来源编号 bigint(20)

字典表(base_dic) :

在这里插入图片描述

建表

-- 加购事务事实表

DROP TABLE IF EXISTS dwd_trade_cart_add_inc;

CREATE EXTERNAL TABLE dwd_trade_cart_add_inc
(
    `id`               STRING COMMENT '编号',
    `user_id`          STRING COMMENT '用户id',
    `sku_id`           STRING COMMENT '商品id',
    `date_id`          STRING COMMENT '时间id',
    `create_time`      STRING COMMENT '加购时间',
    `source_id`        STRING COMMENT '来源类型ID',
    `source_type_code` STRING COMMENT '来源类型编码',
    `source_type_name` STRING COMMENT '来源类型名称',
    `sku_num`          BIGINT COMMENT '加购物车件数'
) COMMENT '交易域加购物车事务事实表'
    PARTITIONED BY (`dt` STRING)
    ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
    STORED AS ORC
    LOCATION '/warehouse/gmall/dwd/dwd_trade_cart_add_inc/'
    TBLPROPERTIES ('orc.compress' = 'snappy');

分区规划

在这里插入图片描述

数据流向

在这里插入图片描述

首日装载

-- 首日装载

set hive.exec.dynamic.partition.mode=nonstrict;
insert overwrite table dwd_trade_cart_add_inc partition (dt)
select id,
       user_id,
       sku_id,
       date_format(create_time, 'yyyy-MM-dd') date_id,
       create_time,
       source_id,
       source_type,
       dic.dic_name,
       sku_num,
       date_format(create_time, 'yyyy-MM-dd') dt
from (
         select data.id,
                data.user_id,
                data.sku_id,
                data.create_time,
                data.source_id,
                data.source_type,
                data.sku_num
         from ods_cart_info_inc
         where dt = '2020-06-14'
           and type = 'bootstrap-insert'
     ) ci
         left join
     (
         select dic_code,
                dic_name
         from ods_base_dic_full
         where dt = '2020-06-14'
           and parent_code = '24'
     ) dic
     on
         ci.source_type = dic.dic_code;

每日装载


-- 每日装载

insert overwrite table dwd_trade_cart_add_inc partition(dt = '2020-06-15')
select
    id,
    user_id,
    sku_id,
    date_id,
    create_time,
    source_id,
    source_type_code,
    dic.dic_name source_type_name,
    sku_num
from (
         select data.id,
                data.user_id,
                data.sku_id,
                date_format(from_utc_timestamp(ts * 1000, 'GMT+8'), 'yyyy-MM-dd')          date_id,
                date_format(from_utc_timestamp(ts * 1000, 'GMT+8'), 'yyyy-MM-dd HH:mm:ss') create_time,
                data.source_id,
                data.source_type                                                           source_type_code,
                if(type = 'insert', data.sku_num, data.sku_num - old['sku_num'])           sku_num
         from ods_cart_info_inc
         where dt = '2020-06-15'
           and (type = 'insert' or
                (type = 'update' and old['sku_num'] is not null and data.sku_num > cast(old['sku_num'] as int)))
     ) cart
         left join (
    select dic_code,
           dic_name
    from ods_base_dic_full
    where dt = '2020-06-14'
      and parent_code = '24'
) dic
                   on cart.source_type_code = dic.dic_code;

1.2 下单事务事实表

在这里插入图片描述

订单明细表(order_detail)

字段名 字段说明 类型
id 编号 bigint(20)
order_id 订单编号 bigint(20)
sku_id sku_id bigint(20)
sku_name sku名称(冗余) varchar(200)
img_url 图片名称(冗余) varchar(200)
order_price 购买价格(下单时sku价格) decimal(10,2)
sku_num 购买个数 bigint(20)
create_time 创建时间 datetime
source_type 来源类型 varchar(20)
source_id 来源编号 bigint(20)
split_total_amount 分摊总金额 decimal(16,2)
split_activity_amount 分摊活动减免金额 decimal(16,2)
split_coupon_amount 分摊优惠券减免金额 decimal(16,2)

订单表(order_info)

字段名 字段说明 类型
id 编号 bigint(20)
consignee 收货人 varchar(100)
consignee_tel 收件人电话 varchar(20)
total_amount 总金额
order_status 订单状态 varchar(20)
user_id 用户id bigint(20)
payment_way 付款方式 varchar(20)
delivery_address 送货地址 varchar(1000)
order_comment 订单备注 varchar(200)
out_trade_no 订单交易编号(第三方支付用) varchar(50)
trade_body 订单描述(第三方支付用) varchar(200)
create_time 创建时间 datetime
operate_time 操作时间 datetime
expire_time 失效时间 datetime
process_status 进度状态 varchar(20)
tracking_no 物流单编号 varchar(100)
parent_order_id 父订单编号 bigint(20)
img_url 图片路径 varchar(200)
province_id 地区 int(20)
activity_reduce_amount 促销金额 decimal(16,2)
coupon_reduce_amount 优惠券 decimal(16,2)
original_total_amount 原价金额 decimal(16,2)
freight_fee 运费 decimal(16,2)
freight_fee_reduce 运费减免 decimal(16,2)
refundable_time 可退款日期(签收后30天) datetime

订单明细活动关联表(order_detail_activity)

字段名 字段说明 类型
id 编号 bigint(20)
order_id 订单id bigint(20)
order_detail_id 订单明细id bigint(20)
activity_id 活动ID bigint(20)
activity_rule_id 活动规则 bigint(20)
sku_id skuID bigint(20)
create_time 获取时间 datetime

订单明细优惠券关联表(order_detail_coupon)

字段名 字段说明 类型
id 编号 bigint(20)
order_id 订单id bigint(20)
order_detail_id 订单明细id bigint(20)
coupon_id 购物券ID bigint(20)
coupon_use_id 购物券领用id bigint(20)
sku_id skuID bigint(20)
create_time 获取时间 datetime

字典表(base_dic)

字段名 字段说明 类型
dic_code 编号 varchar(10)
dic_name 编码名称 varchar(100)
parent_code 父编号 varchar(10)
create_time 创建日期 datetime(0)
operate_time 修改日期 datetime(0)

在这里插入图片描述

建表

-- 交易域下单事务事实表

drop table if exists dwd_trade_order_detail_inc;

CREATE EXTERNAL TABLE dwd_trade_order_detail_inc
(
    `id`                    STRING COMMENT '编号',
    `order_id`              STRING COMMENT '订单id',
    `user_id`               STRING COMMENT '用户id',
    `sku_id`                STRING COMMENT '商品id',
    `province_id`           STRING COMMENT '省份id',
    `activity_id`           STRING COMMENT '参与活动规则id',
    `activity_rule_id`      STRING COMMENT '参与活动规则id',
    `coupon_id`             STRING COMMENT '使用优惠券id',
    `date_id`               STRING COMMENT '下单日期id',
    `create_time`           STRING COMMENT '下单时间',
    `source_id`             STRING COMMENT '来源编号',
    `source_type_code`      STRING COMMENT '来源类型编码',
    `source_type_name`      STRING COMMENT '来源类型名称',
    `sku_num`               BIGINT COMMENT '商品数量',
    `split_original_amount` DECIMAL(16, 2) COMMENT '原始价格',
    `split_activity_amount` DECIMAL(16, 2) COMMENT '活动优惠分摊',
    `split_coupon_amount`   DECIMAL(16, 2) COMMENT '优惠券优惠分摊',
    `split_total_amount`    DECIMAL(16, 2) COMMENT '最终价格分摊'
) COMMENT '交易域下单明细事务事实表'
    PARTITIONED BY (`dt` STRING)
    ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
    STORED AS ORC
    LOCATION '/warehouse/gmall/dwd/dwd_trade_order_detail_inc/'
    TBLPROPERTIES ('orc.compress' = 'snappy');

首日装载


-- 首日装载 交易域下单事务事实表

set hive.exec.dynamic.partition.mode=nonstrict;
insert overwrite table dwd_trade_order_detail_inc
    partition (dt)
select od.id,
       order_id,
       user_id,
       sku_id,
       province_id,
       activity_id,
       activity_rule_id,
       coupon_id,
       date_format(create_time, 'yyyy-MM-dd') date_id,
       create_time,
       source_id,
       source_type,
       dic_name,
       sku_num,
       split_original_amount,
       split_activity_amount,
       split_coupon_amount,
       split_total_amount,
       date_format(create_time, 'yyyy-MM-dd')
from (
         select data.id,
                data.order_id,
                data.sku_id,
                data.create_time,
                data.source_id,
                data.source_type,
                data.sku_num,
                data.sku_num * data.order_price split_original_amount,
                data.split_total_amount,
                data.split_activity_amount,
                data.split_coupon_amount
         from ods_order_detail_inc
         where dt = '2020-06-14'
           and type = 'bootstrap-insert'
     ) od
         left join (
    select data.id,
           data.user_id,
           data.province_id
    from ods_order_info_inc
    where dt = '2020-06-14'
      and type = 'bootstrap-insert'
) oi
                   on od.order_id = oi.id
         left join (
    select data.order_detail_id,
           data.activity_id,
           data.activity_rule_id
    from ods_order_detail_activity_inc
    where dt = '2020-06-14'
      and type = 'bootstrap-insert'
) act
                   on od.id = act.order_detail_id
         left join (
    select data.order_detail_id,
           data.coupon_id
    from ods_order_detail_coupon_inc
    where dt = '2020-06-14'
      and type = 'bootstrap-insert'
) cou
                   on od.id = cou.order_detail_id
         left join (
    select dic_name,
           dic_code
    from ods_base_dic_full
    where dt = '2020-06-14'
      and parent_code = '24'
) dic
                   on od.source_type = dic.dic_code;

每日装载


-- 每日装载 交易域下单事务事实表

insert overwrite table dwd_trade_order_detail_inc
    partition (dt = '2020-06-15')
select od.id,
       order_id,
       user_id,
       sku_id,
       province_id,
       activity_id,
       activity_rule_id,
       coupon_id,
       date_id,
       create_time,
       source_id,
       source_type,
       dic_name,
       sku_num,
       split_original_amount,
       split_activity_amount,
       split_coupon_amount,
       split_total_amount
from (
         select data.id,
                data.order_id,
                data.sku_id,
                date_format(data.create_time, 'yyyy-MM-dd') date_id,
                data.create_time,
                data.source_id,
                data.source_type,
                data.sku_num,
                data.sku_num * data.order_price             split_original_amount,
                data.split_total_amount,
                data.split_activity_amount,
                data.split_coupon_amount
         from ods_order_detail_inc
         where dt = '2020-06-15'
           and type = 'insert'
     ) od
         left join (
    select data.id,
           data.user_id,
           data.province_id
    from ods_order_info_inc
    where dt = '2020-06-15'
      and type = 'insert'
) oi
                   on od.order_id = oi.id
         left join (
    select data.order_detail_id,
           data.activity_id,
           data.activity_rule_id
    from ods_order_detail_activity_inc
    where dt = '2020-06-15'
      and type = 'insert'
) act
                   on od.id = act.order_detail_id
         left join (
    select data.order_detail_id,
           data.coupon_id
    from ods_order_detail_coupon_inc
    where dt = '2020-06-15'
      and type = 'insert'
) cou
                   on od.id = cou.order_detail_id
         left join (
    select dic_name,
           dic_code
    from ods_base_dic_full
    where dt = '2020-06-15'
      and parent_code = '24'
) dic
                   on od.source_type = dic.dic_code;

1.3 取消订单事务事实表

订单明细表(order_detail)

字段名 字段说明 类型
id 编号 bigint(20)
order_id 订单编号 bigint(20)
sku_id sku_id bigint(20)
sku_name sku名称(冗余) varchar(200)
img_url 图片名称(冗余) varchar(200)
order_price 购买价格(下单时sku价格) decimal(10,2)
sku_num 购买个数 bigint(20)
create_time 创建时间 datetime
source_type 来源类型 varchar(20)
source_id 来源编号 bigint(20)
split_total_amount 分摊总金额 decimal(16,2)
split_activity_amount 分摊活动减免金额 decimal(16,2)
split_coupon_amount 分摊优惠券减免金额 decimal(16,2)

订单表(order_info)

字段名 字段说明 类型
id 编号 bigint(20)
consignee 收货人 varchar(100)
consignee_tel 收件人电话 varchar(20)
total_amount 总金额
order_status 订单状态 varchar(20)
user_id 用户id bigint(20)
payment_way 付款方式 varchar(20)
delivery_address 送货地址 varchar(1000)
order_comment 订单备注 varchar(200)
out_trade_no 订单交易编号(第三方支付用) varchar(50)
trade_body 订单描述(第三方支付用) varchar(200)
create_time 创建时间 datetime
operate_time 操作时间 datetime
expire_time 失效时间 datetime
process_status 进度状态 varchar(20)
tracking_no 物流单编号 varchar(100)
parent_order_id 父订单编号 bigint(20)
img_url 图片路径 varchar(200)
province_id 地区 int(20)
activity_reduce_amount 促销金额 decimal(16,2)
coupon_reduce_amount 优惠券 decimal(16,2)
original_total_amount 原价金额 decimal(16,2)
freight_fee 运费 decimal(16,2)
freight_fee_reduce 运费减免 decimal(16,2)
refundable_time 可退款日期(签收后30天) datetime

订单明细活动关联表(order_detail_activity)

字段名 字段说明 类型
id 编号 bigint(20)
order_id 订单id bigint(20)
order_detail_id 订单明细id bigint(20)
activity_id 活动ID bigint(20)
activity_rule_id 活动规则 bigint(20)
sku_id skuID bigint(20)
create_time 获取时间 datetime

订单明细优惠券关联表(order_detail_coupon)

字段名 字段说明 类型
id 编号 bigint(20)
order_id 订单id bigint(20)
order_detail_id 订单明细id bigint(20)
coupon_id 购物券ID bigint(20)
coupon_use_id 购物券领用id bigint(20)
sku_id skuID bigint(20)
create_time 获取时间 datetime

字典表(base_dic)

字段名 字段说明 类型
dic_code 编号 varchar(10)
dic_name 编码名称 varchar(100)
parent_code 父编号 varchar(10)
create_time 创建日期 datetime(0)
operate_time 修改日期 datetime(0)

在这里插入图片描述

建表


首日装载


每日装载


1.4 支付成功事务事实表

在这里插入图片描述

支付表(payment_info)

字段名 字段说明 类型
id 编号 int(11)
out_trade_no 对外业务编号 varchar(50)
order_id 订单编号 bigint(50)
user_id 用户id bigint(20)
payment_type 支付类型(微信 支付宝) varchar(20)
trade_no 交易编号 varchar(50)
total_amount 支付金额 decimal(10,2)
subject 交易内容 varchar(200)
payment_status 支付状态 varchar(20)
create_time 创建时间 datetime
callback_time 回调时间 datetime
callback_content 回调信息 text

订单明细表(order_detail)

字段名 字段说明 类型
id 编号 bigint(20)
order_id 订单编号 bigint(20)
sku_id sku_id bigint(20)
sku_name sku名称(冗余) varchar(200)
img_url 图片名称(冗余) varchar(200)
order_price 购买价格(下单时sku价格) decimal(10,2)
sku_num 购买个数 bigint(20)
create_time 创建时间 datetime
source_type 来源类型 varchar(20)
source_id 来源编号 bigint(20)
split_total_amount 分摊总金额 decimal(16,2)
split_activity_amount 分摊活动减免金额 decimal(16,2)
split_coupon_amount 分摊优惠券减免金额 decimal(16,2)

订单表(order_info)

字段名 字段说明 类型
id 编号 bigint(20)
consignee 收货人 varchar(100)
consignee_tel 收件人电话 varchar(20)
total_amount 总金额
order_status 订单状态 varchar(20)
user_id 用户id bigint(20)
payment_way 付款方式 varchar(20)
delivery_address 送货地址 varchar(1000)
order_comment 订单备注 varchar(200)
out_trade_no 订单交易编号(第三方支付用) varchar(50)
trade_body 订单描述(第三方支付用) varchar(200)
create_time 创建时间 datetime
operate_time 操作时间 datetime
expire_time 失效时间 datetime
process_status 进度状态 varchar(20)
tracking_no 物流单编号 varchar(100)
parent_order_id 父订单编号 bigint(20)
img_url 图片路径 varchar(200)
province_id 地区 int(20)
activity_reduce_amount 促销金额 decimal(16,2)
coupon_reduce_amount 优惠券 decimal(16,2)
original_total_amount 原价金额 decimal(16,2)
freight_fee 运费 decimal(16,2)
freight_fee_reduce 运费减免 decimal(16,2)
refundable_time 可退款日期(签收后30天) datetime

订单明细活动关联表(order_detail_activity)

字段名 字段说明 类型
id 编号 bigint(20)
order_id 订单id bigint(20)
order_detail_id 订单明细id bigint(20)
activity_id 活动ID bigint(20)
activity_rule_id 活动规则 bigint(20)
sku_id skuID bigint(20)
create_time 获取时间 datetime

订单明细优惠券关联表(order_detail_coupon)

字段名 字段说明 类型
id 编号 bigint(20)
order_id 订单id bigint(20)
order_detail_id 订单明细id bigint(20)
coupon_id 购物券ID bigint(20)
coupon_use_id 购物券领用id bigint(20)
sku_id skuID bigint(20)
create_time 获取时间 datetime

字典表(base_dic)

字段名 字段说明 类型
dic_code 编号 varchar(10)
dic_name 编码名称 varchar(100)
parent_code 父编号 varchar(10)
create_time 创建日期 datetime(0)
operate_time 修改日期 datetime(0)

在这里插入图片描述

在这里插入图片描述

建表


首日装载


每日装载


1.5 退单事务事实表

在这里插入图片描述

建表


首日装载


每日装载


1.6 退款成功事务事实表

在这里插入图片描述

建表

首日装

每日装载

1.7 购物车周期快照事实表

在这里插入图片描述

建表

首日装载

每日装载

2. 工具域

数据域 业务过程 粒度 维度 度量
时间 用户 商品 地区 活动(具体规则) 优惠券 支付方式 退单类型 退单原因类型 渠道 设备
工具域 领取优惠券 一次优惠券领取操作 无事实(次数1)
使用优惠券(下单) 一次优惠券使用(下单)操作 无事实(次数1)
使用优惠券(支付) 一次优惠券使用(支付)操作 无事实(次数1)

2.1 优惠券领取事务事实表

在这里插入图片描述

建表


首日装载


每日装载


2.2 优惠券使用(下单)事务事实表

建表


首日装载


每日装载


2.3 优惠券使用(支付)事务事实表

建表


首日装载


每日装载


3. 互动域

数据域 业务过程 粒度 维度 度量
时间 用户 商品 地区 活动(具体规则) 优惠券 支付方式 退单类型 退单原因类型 渠道 设备
互动域 收藏商品 一次收藏商品操作 无事实(次数1)
评价 一次取消收藏商品操作 无事实(次数1)

3.1 收藏商品事务事实表

在这里插入图片描述

建表


首日装载


每日装载


3.2 评价事务事实表

在这里插入图片描述

建表


首日装载


每日装载


4. 流量域

数据域 业务过程 粒度 维度 度量
时间 用户 商品 地区 活动(具体规则) 优惠券 支付方式 退单类型 退单原因类型 渠道 设备
流量域 页面浏览 一次页面浏览记录 浏览时长
动作 一次动作记录 无事实(次数1)
曝光 一次曝光记录 无事实(次数1)
启动应用 一次启动记录 无事实(次数1)
错误 一次错误记录 无事实(次数1)

4.1 页面浏览事务事实表

建表


首日装载


每日装载


4.2 启动事务事实表

建表


首日装载


每日装载


4.3 动作事务事实表

建表


首日装载


每日装载


4.4 曝光事务事实表

建表


首日装载


每日装载


4.5 错误事务事实表

建表


首日装载


每日装载


5. 用户域

数据域 业务过程 粒度 维度 度量
时间 用户 商品 地区 活动(具体规则) 优惠券 支付方式 退单类型 退单原因类型 渠道 设备
用户域 注册 一次注册操作 无事实(次数1)
登录 一次登录操作 无事实(次数1)

5.1 用户注册事务事实表

建表


首日装载


每日装载


5.2 用户登录事务事实表

建表


首日装载


每日装载


6. 数据装载脚本

6.1 首日装载脚本

创建 ods_to_dwd_init.sh

vim ods_to_dwd_init.sh 

脚本执行权限

chmod 777 ods_to_dwd_init.sh 

6.2 每日装载脚本

创建 ods_to_dwd.sh

vim ods_to_dwd.sh 

脚本执行权限

chmod 777 ods_to_dwd.sh 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/153233.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Raven 2 靶机渗透

    前言近几天比较闲,在上周也闲着无聊跑去盒子挖了一周的洞。这周又开始不知道干些啥了,所以就找个靶机来玩玩。Raven2靶机渗透搭建完环境后,发现并没有登录账号和密码,使用御剑高速扫描,先扫描机

    2021年12月11日
    40
  • docker开放2375端口,并添加安全传输层协议(TLS)和CA认证

    docker开放2375端口,并添加安全传输层协议(TLS)和CA认证为了更便捷地打包和部署,服务器需要开放2375端口才能连接docker,但如果开放了端口没有做任何安全保护,会引起安全漏洞,被人入侵、挖矿、CPU飙升这些情况都有发生,任何知道你IP的人,都可以管理这台主机上的容器和镜像,真的可怕。为了解决安全问题,只要使用安全传输层协议(TLS)进行传输并使用CA认证即可。制作证书及秘钥我们需要使用OpenSSL制作CA机构证书、服务端证书和客户端证书,以下操作均在安装Docker的Linux服务器上进行。创建一个目录用于存储生成的证书和秘钥mkdir

    2022年6月3日
    178
  • 碟刹和V刹的区别「建议收藏」

    碟刹和V刹的区别「建议收藏」0首先拍死的一个观点就是碟刹比V刹要好,要高档──似乎大部分对于运动自行车陌生新手往往认为碟刹一定比V刹要好,我们听到过这样的话:“都2000多的车了,还没有碟刹”───这样的话真的让人哭笑不得,看看不论是国外的比赛还是国内的专业比赛,如果是晴天的比赛,V刹车还是占了大部分的,当然目前也有碟刹车增多的趋势,但是对于大部分休闲骑行和不参加业余级别比赛的车友的来说,V刹尤其是好些的V刹还是够用的,…

    2022年10月2日
    5
  • 成功解决pycharm 没有菜单栏「建议收藏」

    成功解决pycharm 没有菜单栏「建议收藏」成功解决pycharm没有菜单栏目录解决问题解决方法解决问题解决pycharm没有菜单栏解决方法首先,按Ctrl+Shift+A打开界面,切换到“Action”栏,输入“Experimentalfeatures”,点击回车,其次,取消linux.native.menu复选框,应用,最后,重启PyCharm即可!…

    2022年8月28日
    15
  • 漫画自动下载工具。

    漫画自动下载工具。

    2021年9月17日
    47
  • 冒泡排序python实现_冒泡排序python代码优化

    冒泡排序python实现_冒泡排序python代码优化一、什么是冒泡排序冒泡排序是一种简单的排序算法,它也是一种稳定排序算法。其实现原理是重复扫描待排序序列,并比较每一对相邻的元素,当该对元素顺序不正确时进行交换。一直重复这个过程,直到没有任何两个相邻的元素可以交换,就表明完成了排序。一般情况下,称某个排序算法稳定,指的是当待排序序列中有相同的元素时,它们的相应位置在排序后不会发生改变。二、示例假设待排序序列为(5,1,4,2,8),如果采用冒泡排序对其进行升序(由小到大)排序,则整个排序过程如下所示:第一轮排序,此时整个序列中的元素都位于

    2022年10月15日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号