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

电商系统,核心通用架构案例设计方案浅析

文章目录

  • 一、用户系统案例设计
    • 1、用户信息的存储方案
    • 2、用户注册确保唯一
    • 3、用户数据合并方案
    • 4、用户敏感信息加密存储
    • 5、数据传输安全性
    • 6、多用户数据隔离性
    • 7、防止恶意注册
    • 8、用户好友关系存储方案
    • 9、用户登录token方案
    • 10、会员优先处理设计
  • 二、网关系统设计
    • 1、网关的功能
    • 2、安全控制
    • 3、权限模型:RBAC
    • 4、数据安全
    • 5、黑名单、白名单
    • 6、流量控制
  • 三、电商订单系统设计
    • 1、涉及模块与功能
    • 2、高可用方案
    • 3、抢单系统
    • 4、订单超时关闭设计
    • 5、提交订单接口做了哪些事?
    • 6、订单状态的变更
    • 7、库存扣减方案
    • 8、订单拆单
    • 9、库存分层
  • 四、商品系统设计
    • 1、SPU(Single Product Unit)用户查询
    • 2、SKU(Stock Keeping Unit)库存管理
    • 3、组合SKU
    • 4、SPU编码设计
    • 5、SKU编码设计
    • 6、69码(商品编码)以及校验码的思路
    • 7、SPU还能做什么功能
    • 8、商品类别的设计(自关联,自解释)
    • 9、商品品牌的设计(关联商品、历史存储)
    • 10、商品属性的设计
    • 11、通用规格设计(区分属性,用于用户搜索、选择)
    • 12、税率(税率有周期)
    • 13、生产信息设计
    • 14、商品列表功能设计
    • 15、商品详情功能设计
    • 16、购物车的设计
  • 五、支付系统设计
    • 1、支付的对接

一、用户系统案例设计

1、用户信息的存储方案

如果数据不多,一张表可以存储。

数据多的话就考虑异地多活(北京、广州)。
异地多活涉及数据的同步,使用CDC。

2、用户注册确保唯一

单表、主从:通过数据库唯一索引。

多活注册保唯一:
1、第三方登录绑定(比如用户扫码微信登录,如果已经绑定微信则属于已注册状态,可以保证唯一)
2、手机号发短信验证码保证唯一(注册前发送验证码,输入验证码通过注册,相当于短信平台做了唯一性)
3、通过中间件(redis)保证唯一

3、用户数据合并方案

基于版本/时间戳的合并,新数据覆盖旧数据。

4、用户敏感信息加密存储

对称加密、非对称加密、散列加密、混淆、编码、压缩。
需要解密出结果的,就用对称加密(效率高)、非对称加密(效率低)。
不需要解密出结果的,比如密码,就用散列加密(比如md5)。

查询的话,加密后查询,但是无法模糊查询。
如果要模糊查询,模糊查询的部分不要加密(比如身份证)。或者将数据拆开存储,每个数字单独加密存储。

5、数据传输安全性

使用https。
数据进行签名+盐,可以保证不被人改

6、多用户数据隔离性

比如订单,A用户只能查询A用户的,B用户只能修改B用户的。

可以考虑对查询出来的数据,进行创建人的判断,如果创建人不是当前登录用户,则操作非法。

7、防止恶意注册

验证码(手机、图形验证码、人机识别、人脸、IP频率)
黑名单(IP)
实名(保险、银行、医疗、政府等单位)
审核(很少,一般对公会做审核,政府部门)

8、用户好友关系存储方案

用户表(User):存储用户的基本信息,用户ID、昵称、头像、性别、年龄等。
好友关系表(Friendship Tible):存储好友关系,包括好友关系ID、用户ID和好友ID。
关注关系表(Following Table):存储用户的关注关系,包括关注关系的ID、用户ID和关注对象ID。
粉丝关系表(Follower Table):存储用户的粉丝关系,包括粉丝关系的ID、用户ID和粉丝ID。

好友关系的优化:
1、分库分表(先分库、再分表)
按照用户ID进行分库:将不同用户的好友关系数据存储在不同的数据库中,这样可以提高查询效率和并发性能,减少单库的压力。
按照好友关系ID进行分表:将同一用户的好友关系数据拆分到多个表中,可以提高单表的读写性能。

2、加缓存

9、用户登录token方案

session(服务端key + value,客户端保存key)
Token(jwt)

10、会员优先处理设计

可以每个会员等级设置一个队列,每次优先取最高等级会员队列的数据进行处理,处理完成之后再从头取。

或者设置一个队列,取的时候先按照会员等级排序。

二、网关系统设计

1、网关的功能

路由转发:将来自客户端的请求,按照预先定义的路由规则进行转发,使请求能够到达正确的后端服务。包括:请求的地址、方法、参数等信息。
协议转换:支持多种协议,如HTTP、Websotket、gRPC等,并进行协议转换。
安全控制:根据定义的策略,对请求进行安全控制,比如请求的身份验证、加解密、黑名单、限流、鉴权等。
流量控制:对请求进行限流、熔断、降级等操作,保证系统的稳定性。
缓存:对热点数据进行缓存,减轻后端服务的压力,提高系统的性能。
监控:性能监控。

2、安全控制

鉴权:用户认证(未经授权的访问),权限判断。
加解密:外部加密数据,内部明文调用,扩展https。
黑名单:ip、设备、用户。
限流:计数器。

3、权限模型:RBAC

RBAC(Role-Based Access Control)是一种基于角色的访问控制模型,它可以控制用户对系统资源(一般是对接口)的访问权限。
1.用户表(User):用于存储用户的基本信息,例如用户ID、用户名、密码等。
2.角色表(Role):用于存储角色的基本信息,例如角色ID、角色名、角色描述等。
3.权限表(Permission):用于存储权限的基本信息,例如权限ID、权限名、权限描述等。
4.用户角色关联表(ser_Role):用于记录用户与角色之间的关联关系,例如用户ID、角色ID等字段。
5.角色权限关联表(Role Permission):用于记录角色与权限之间的关联关系,例如角色ID、权限ID等字段.

基于组织、岗位、个人的数据权限,最好是在业务表加上对应的id,就需要对查询条件加上对应的条件。
(业务数据如果也参与RBAC,就会很臃肿)

即:资源放RBAC,具体数据权限放在业务系统。

4、数据安全

对称加密、非对称加密、散列、签名、https等。

5、黑名单、白名单

黑名单不允许访问,白名单允许访问。
存储到redis中。

识别1秒内访问超过10次的IP,并自动添加到黑名单。(可以用消息队列、钩子、轮询、长连接、zk)

6、流量控制

限流:限制客户端在特定时间内发起的请求数量。

限流的依据:
IP:根据客户端的P地址进行限流,这种方式可以防止单个!P地址的流量过大,导致服务不稳定。但这种方式可能误伤同一|P下的多个用户,比如公司内网、公共Wi-Fi等。
设备:应用或客户端:根据应用ID、客户端ID或其他应用标识进行限流。这种方式可以为每个应用或客户端分配独立的限流配额,避免恶意应用或客户端影响其他正常应用。
用户:根据用户ID、用户名或其他用户标识进行限流,这种方式可以为每个用户分配独立的限流配额,更加公平。但需要在网关层实现用户身份识别和认证。
API接口:根据清求的API接口进行限流。这种方式可以为不同的AP!接口分配不同的限流配额,确保关键接口的可用性,但需要维护API接口的限流配置。
地理位置:根据客户端的地理位置进行限流。这种方式可以为不同的国家、地区分配不同的限流配额,满足法规要求或业务需求。
请求方法:根据请求的HTTP方法(GET、POST等)进行限流。这种方式可以为不同的请求类型分配不同的限流配额,确保关键操峰的可用性。

熔断:当后端服务出现异常或响应时间过长时,熔断器会拦截请求,直接返回错误或默认值,防止请求继续传递到后端服务。熔断器可以根据一定的策略自动恢复,例如在一段时间后重试或者根据成功率进行判断。

降级:根据系统的负载情况,动态调整提供的服务质量。例如,当系统压力较大时可以关闭一些非关键功能,或者返回简化的响应数据。降级可以手动触发,也可以根据监控数据自动触发。

负载均衡:将请求分发到多个后端服务实例,以确保每个实例的负载均衡。负载均衡算法包括轮询、随机、加权轮询、最少连接数等。负载均衡可以在网关层实现,也可以通过DNS、负载均衡器等其他组件实现。

请球拦截:请求非法,不要蔓延到后端服务。

优先级调度:根据请求的优先级,动态调整请求的处理顺序。例如,可以为付费用户、实时性要求高的请求分配更高的优先级。优先级调度可以结合队列、堆等数据结构实现。

三、电商订单系统设计

1、涉及模块与功能

涉及功能:购物车、下单、支付、配送、售后跟踪等。
订单创建,订单支付,订单-库存管理,订单配送,订单查询,订单修改与取消,售后服务。
在这里插入图片描述

2、高可用方案

提高组件的可靠性(公有云)。
冗余设计&容错(主从、故障切换)。
负载均衡&故障切换。
微服务架构:熔断/降级。
监控与告警:CPU、内存、磁盘、网络,电话、短信通知。
过载保护:限流。
异步,解耦,削峰(消息队列)。
缓存,预热(缓存是数据库的一种冗余)。

3、抢单系统

防止超卖,可以使用Redisson的信号量。

4、订单超时关闭设计

1、定时任务(不推荐)
2、JDK 延迟队列 DelayQueue(不推荐)
3、redis 过期监听(不推荐)
4、Redisson 分布式延迟队列:RDelayedQueue(推荐!)
5、RocketMQ 延迟消息(推荐)
6、RabbitMQ 死信队列(可以用)

5、提交订单接口做了哪些事?

幂等,库存、营销、优惠券、支付、回调……

订单ID
(唯一性、可读性、安全性、扩展性……)
(UUID、自增ID、redis自增、雪花算法、百度的uidgenerator、美团的Leaf)
ID不能被猜出来

6、订单状态的变更

待支付、支付中、已支付、待发货、发货中、已发货、已签收、已完成、申请退款、退货、退款退货中、已退款、已退货、已取消。

注意点:
连贯性,比如说待发货状态只能变为发货中状态,不能变为支付中状态。
排他性,保证并发安全,保证幂等。
异常处理,用分布式事务保证异常下的正常处理。

7、库存扣减方案

下单扣库存,风险点:只下单不付钱。
付款扣库存,风险点:付款后发现库存没了,体验很差。

完美方案:预扣库存。提交订单后,30分钟不付款恢复库存。
安全反作弊:给经常下单不付款的用户拉黑、设置商品每人最大购买数。

8、订单拆单

一次下单多个店铺,需要拆成多个子订单。一次下单多个不同商品,也需要拆单。

梳理好父子订单关系即可,有父订单ID、级别。分成两个表也可以。

9、库存分层

销售层:显示商品库存情况,用户查看商品是否有货。销售层的数据需要定期从调度层同步保持准确性。(需要做库存的锁定、扣减、回滚
调度层:中间层,基于各个仓库的实际库存情况,进行库存的分配和调度。用户下单后需要决定从哪个仓库发货。还用于库存的同步。存数据可以减轻仓库层压力,并且会有数据一致性问题。也可以不存数据
仓库层:管理实体SKU、库存盘点核对、入库出库。

分层问题:一致性问题没法100%保证,并发问题,安全与权限。

为什么分层?
高内聚,低耦合;分离关注点(区分系统边界)

四、商品系统设计

1、SPU(Single Product Unit)用户查询

定义:SPU是一种将不同的产品变种或规格汇总为一个单一实体或产品的标识符,通常用于商品分类和在线商店的产品列表中。

例子:继续以鞋子店为例,不论鞋子的颜色和尺码如何,同一款运动鞋都被视为一个SPU。这意味着无论你销售多少不同颜色和尺码的鞋子,它们都属于同一个SPU,例如:
型号:ABC123(运动鞋的通用型号) 这样,无论你销售多少不同变种的鞋子,它们都被列为同一款产品的不同变种,方便顾客在在线商店中浏览和比较。

综上所述,SKU用于管理单个产品的不同变种,而SPU用于将所有这些变种汇总到一个单一的产品实体中,以便于销售和分类。

2、SKU(Stock Keeping Unit)库存管理

定义:SKU是一种唯一的编码或标识符,用于区分不同的产品变种或规格,通常与库存管理和销售跟踪有关。

例子:假设你经营一个鞋店。你卖同一款运动鞋,但有不同的颜色和尺码可供选择。每个不同的颜色和尺码组合都可以分配一个独特的SKU,例如:
黑色,尺码39:SKU001
白色,尺码37:SKU002
蓝色,尺码38:SKU003

这样,每个SKU代表了特定颜色和尺码的鞋子,使你能够准确追踪库存和销售情况。

表设计:
https://blog.csdn.net/weixin_42057187/article/details/139180929

3、组合SKU

比如桌子和凳子组合,选择1个桌子+4个凳子,同时下单。
如果库房桌子5个,凳子8个,那么这个组合SKU就是2个。

4、SPU编码设计

SPU编码通常包含以下部分:
类别代码:用于表示商品所属的大类别,如服装、电子产品等。
品牌代码:用于表示商品所属的品牌。
系列代码:用于表示商品所属的产品系列。
序列号:用于表示同一类商品的不同型号或版本。
例如,假设我们为一款电子产品指定SPU编码。类别代码为“01”(表示电子产品),品牌代码为“02”(表示品牌B),系列代码为“03”(表示系列C),列号为“0001”。则该商品的SPU编码为:0102030001。

5、SKU编码设计

SKU编码中包含对应商品的SPU编码,以便于关联和查询。
属性代码:用于表示商品的各种规格属性,如颜色、尺寸等。属性代码可以分为多个字段,分别表示不同的属性。
序列号:用于表示同一商品规格的不同批次或生产日期等信息。
例如,假设我们为上述电子产品的某个规格(颜色为红色,尺寸为大)指定SKU编码。属性代码为“01”(表示红色)和“02”(表示大尺寸),序列号为“0001”。则该商品规格的SKU编码为:0102030001-01020001。

6、69码(商品编码)以及校验码的思路

中国大陆生产的商品,都是69开头的,每个商品都是唯一的。
注册与查询网站:http://www.gs1cn.org/
在这里插入图片描述
校验码校验思路:
从右向左,将奇数位置的数字相加,然后乘以3。
再从右向左,将偶数位置的数字相加。
将步骤1和步骤2的结果相加,得到一个总和。
找到一个最小的整数(包括0),使其(校验位,即最后一位)与总和相加能够被10整除。这个整数就是校验位。

通过这个计算过程,我们可以得到一个校验位。当条形码被扫描时,扫描设备可以通过使用同样的计算方法检査校验位是否正确。如果计算出的校验位与扫描到的校验位不匹配,那么说明条形码数据可能存在问题,需要重新扫描或者检查数据。总之,69码中的校验位是用于确保条形码数据的正确性和完整性,防止扫描错误和数据传输问题导致的错误。
在这里插入图片描述

7、SPU还能做什么功能

评论、搜索、推荐

8、商品类别的设计(自关联,自解释)

category_id:类目ID,是每个类目的唯一标识,通常设为主键。
category_name:类目名称,是用户在界面上看到的类目名字。
parent id:父类目ID,用来表示这个类目的上一级类目。如果这个类目是最顶级的类目,那么这个字段可以为空或者设为0。
level:类目级别,用来表示这个类目在类目层级中的位置。最顶级的类目的级别为1,其下一级的类目级别为2,以此类推。
status:类目状态,用来表示这个类目是否可用。例如,可以设为1表示可用,0表示不可用。
sort order:排序顺序,用来表示在同一级别的类目中,这个类目的排序位置。

用户看到的不一定和配置的一样,有可能会根据季节或热度变化。

自关联设计,并且自解释。
比如父id存储为set类型(111,222,333),参考省市区,111000,111001……

9、商品品牌的设计(关联商品、历史存储)

brand id:品牌ID,每个品牌的唯一标识符,通常设为主键。
brand name:品牌名称,用于显示的品牌名。
brand logo:品牌Logo的URL,用于在页面上展示品牌的Logo。
brand website:品牌的官方网站URL。
brand description:品牌描述,一段简短的文字来描述这个品牌的特点和历史等信息。
brand status:品牌状态,例如,可以设为1表示品牌可用,0表示品牌不可用。
sort order:排序顺序,用来控制品牌在页面上的显示顺序。

与商品关联:一般商品中有个品牌字段,或者使用关联表。

历史变更的存储,重要数据是可以追溯的(修改的话需要保存历史)。
或者根据品牌变更的时间,根据订单时间进行对应的追溯。
或者订单表进行冗余品牌的名称等信息。

10、商品属性的设计

attribute id:属性ID,为每个属性的唯一标识符,通常设置为主键。
attribute name:属性名称,描述属性的类型(如颜色、尺寸等)。
attribute type:属性类型,用于描述属性值的类型,例如文本、数字、日期等。

关联(或许需要一个分类和属性的关联表):category id:分类ID,表示此属性与哪个商品类别相关联。这个字段可以帮助你将相应的属性分配给对应的商品类别。(比如黑色,手机和衣服都有颜色属性)

为了存储每个具体商品的属性值,你可能需要另一个表--商品属性值表(ProductAttribute Value Table)。这个表可能包含product id(商品ID)、attribute id(属性ID)和value(值)等字段,用于存储每个商品具有的特定属性值。

或者,在商品表中,使用一个大json存储商品的属性
在这里插入图片描述
这就意味着,属性不光要跟分类关联,同时,商品也需要跟属性关联

11、通用规格设计(区分属性,用于用户搜索、选择)

specification id:规格ID,为每个规格的唯一标识符,通常设置为主键。
specification name:规格名称,例如"屏幕尺寸"、“存储容量”等。
specification values:规格值,一般以字符串数组或者其他形式存储可能的值,例如"32寸”、"64寸"等。
status:状态,表示这个规格是否可用。可以设为1表示可用,0表示不可用。

规格和属性的区别:属性是地基,规格是地基上面的衍生品。也可以在属性表中加一个字段,用于区分是否是规格。

规格最终决定价格、用户搜索,可以参考属性的参考:
在这里插入图片描述

12、税率(税率有周期)

税率id、税率名称、税率,国家,地区,是否有效,开始时间,结束时间

同时也需要历史记录。

13、生产信息设计

production id:生产信息ID,为每个生产信息的唯一标识符,通常设置为主键。
manufacturer id:制造商ID,关联到制造商信息。
manufacturing date:生产日期。
expiration date:过期日期,如果适用的话,
batch number:批次号,用于识别同一批次的商品。
location:生产地点,可以是具体的工厂或者城市等。
quality control result:质量控制结果,记录该批次商品的质量检测结果。
inspection certification:检验证明,如果有相关的质量检验证明文件,可以记录其文件编号或者链接url。
status:状态,表示该生产信息是否有效或者当前的状态,例如在生产,已完成等。

需要一张生产信息与商品关联表。

14、商品列表功能设计

功能上:
搜索:用ES/Opensearch等搜索引擎,分词过滤、搜索提示和自动完成、搜索结果高亮、搜索历史(存在前端中)、缓存。
过滤:在用户商品列表页,进一步过滤用户的商品范围,对通用结果搜索的第二次筛选。个人权重(喜好)
排序(根据权重)。
商品信息展示(列表、图表)。
推荐(人工智能)。

性能上:
分页&懒加载(滚动加载)
压缩&解压(缩略图)
缓存(缓存一致性)
数据库优化(索引,优化sql,正反范式设计,数据分区,读写分离,分库分表,视图和存储过程-多条sql有关联,上搜索引擎)
CDN

15、商品详情功能设计

减少cookie(减少与服务器的cookie传输,cookie会传输到后端)
图片做压缩(降低像素、色彩)
js、css压缩(删除无效字符、注释、代码语义的缩减)
请求响应压缩(gzip)
减少请求(一次请求多个js、使用雪碧图/精灵图:一张图包含很多图,图片转base64存在css中)
计算能力转移到客户端
CDN
ajax异步加载
缓存(前端缓存cache-control、后端缓存)(文件名、版本号、时间戳来判断是否过期)
预加载(DNS预加载<meta http-equiv="x-dns-prefetch-control" content="on">

16、购物车的设计

购物车的存储:客户端(未登录)/浏览器,服务端(登录后)

商品存放购物车后,价格有可能会有变动,下单时需要提醒用户。

五、支付系统设计

1、支付的对接

对账、支付、回调等等。

相关文章:

电商系统,核心通用架构案例设计方案浅析

文章目录 一、用户系统案例设计1、用户信息的存储方案2、用户注册确保唯一3、用户数据合并方案4、用户敏感信息加密存储5、数据传输安全性6、多用户数据隔离性7、防止恶意注册8、用户好友关系存储方案9、用户登录token方案10、会员优先处理设计 二、网关系统设计1、网关的功能2…...

易飞ERP 9.2 安装包 百度云盘 下载

易飞9.2是鼎捷数智依托四十多年实践经验&#xff0c;面向中小企业的全面ERP解决方案‌。 以下是关于易飞9.2的详细介绍&#xff1a; ‌发布与更新‌&#xff1a; ‌发布时间‌&#xff1a;易飞V9.2新版发布于2023年9月。 ‌核心功能‌&#xff1a; ‌便捷高效‌&#xff1…...

3D目标检测数据集——Waymo数据集

Waymo数据集簡介 发布首页&#xff1a;https://waymo.com/open/ 论文&#xff1a;https://openaccess.thecvf.com/content_CVPR_2020/papers/Sun_Scalability_in_Perception_for_Autonomous_Driving_Waymo_Open_Dataset_CVPR_2020_paper.pdf github&#xff1a;https://github.…...

LSA更新、撤销

LSA的新旧判断&#xff1a; 1.seq&#xff0c;值越大越优先 2.chksum&#xff0c;值越大越优先 3.age&#xff0c;本地的LSA age和收到的LSA age作比较 如果差值<900s&#xff0c;认为age一致&#xff0c;保留本地的&#xff1a;我本地有一条LSA是100 你给的是400 差值小于…...

Redis复制(replica)

Redis主从复制 [Redis主从复制]&#xff08;replica&#xff09;是一个多Redis实例进行数据同步的过程&#xff0c;其中一个实例是主实例&#xff08;Master&#xff09;&#xff0c;其他实例是从实例&#xff08;Slave&#xff09;。主实例负责处理命令请求&#xff0c;而从实…...

Ubuntu上,ffmpeg如何使用cuda硬件解码、编码、转码加速

本文使用 Ubuntu 环境。Ubuntu 直接使用 APT 安装的就支持 CUDA 加速。本文使用这样下载的版本进行演示&#xff0c;你自己编译或者其他源的版本可能会不同。 ffmpeg 的一些介绍&#xff0c;以及 macOS 版本的 ffmpeg 硬件加速请见《macOS上如何安装&#xff08;不需要编译安装…...

磁盘满造成业务异常问题排查

最近遇到一个因为磁盘满导致的问题&#xff0c;分享一下&#xff0c;希望能够帮助到以后遇到同样问题的朋友。 早上突然收到业务老师反馈说&#xff1a;上传文件不能正常上传了。 想想之前都好好的&#xff0c;最近又没有更新&#xff0c;为什么突然不能使用了呢&#xff1f;…...

vim基本命令(vi、工作模式、普通模式、插入模式、可视模式、命令行模式、复制、粘贴、插入、删除、查找、替换)

1. Vim的作用 1.1. 文本编辑 1.1.1. 基础文本编辑功能 Vim是一个功能强大的文本编辑器&#xff0c;它可以用来创建、修改和保存各种文本文件。无论是编写简单的文本笔记&#xff0c;还是复杂的代码文件&#xff0c;Vim都能胜任。例如&#xff0c;我们可以用它来编写Python脚…...

vue的KeepAlive应用(针对全部页面及单一页面进行缓存)

KeepAlive的作用是缓存包裹在其中的动态切换组件 当一个组件在 中被切换时&#xff0c;它的 activated 和 deactivated 生命周期钩子将被调用&#xff0c;用来替代 mounted 和 unmounted。这适用于 的直接子节点及其所有子孙节点。 缓存全部页面 将app.vue中的路由出口改为&am…...

Big Model weekly | 第53期

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 01 CodeRosetta: Pushing the Boundaries of Unsupervised Code Translation for Parallel Programming 近期在大型语言模型&#xff08;LLMs&#xff09;的进展重新激发了自动编程语言翻译的兴趣。特别是编码器…...

基于STM32设计的粮食仓库(粮仓)环境监测系统

一、前言 1.1 项目开发背景 随着现代农业的发展和粮食储存规模的扩大&#xff0c;粮仓环境的智能化监控需求日益增长。传统的粮仓管理方式通常依赖人工检测和定期巡查&#xff0c;效率低下且容易出现疏漏&#xff0c;无法及时发现潜在问题&#xff0c;可能导致粮食受潮、霉变…...

大数据技术Kafka详解 ⑤ | Kafka中的CAP机制

目录 1、分布式系统当中的CAP理论 1.1、CAP理论 1.2、Partitiontolerance 1.3、Consistency 1.4、Availability 2、Kafka中的CAP机制 C软件异常排查从入门到精通系列教程&#xff08;核心精品专栏&#xff0c;订阅量已达600多个&#xff0c;欢迎订阅&#xff0c;持续更新…...

44.ComboBox的数据绑定 C#例子 WPF例子

固定最简步骤&#xff0c;包括 XAML&#xff1a; 题头里引入命名空间 标题下面引入类 combobox绑定资源属性和选择属性&#xff0c;block则绑定和combobox一样的选择属性 C#&#xff1a; 通知的类&#xff0c;及对应固定的任务 引入字段 引入属性 其中资源是只读的 选…...

SOLID原则学习,接口隔离原则(Interface Segregation Principle, ISP)

文章目录 1. 定义2. 为什么要遵循接口隔离原则&#xff1f;3. 违反接口隔离原则的例子4. 遵循接口隔离原则的改进5. 总结 1. 定义 接口隔离原则&#xff08;Interface Segregation Principle, ISP&#xff09; 接口隔离原则是面向对象设计中的五大原则&#xff08;SOLID&#…...

Spring Boot Web技术栈(官网文档解读)

摘要 Spring Boot框架既支持传统的Servlet技术栈&#xff0c;也支持新兴的响应式&#xff08;Reactive&#xff09;技术栈。本篇文章将详细讲述Spring Boot 对两种技术栈的详细支持和使用。 Servlet 概述 基于Java Servlet API构建&#xff0c;它依赖于传统的阻塞I/O模型&…...

闲谭SpringBoot--ShardingSphere分布式事务探究

文章目录 0. 背景1. 未分库分表时2. 仅分表时3. 分库分表时3.1 不涉及分库表3.2 涉及分库表&#xff0c;且分库表处于一个库3.3 涉及分库表&#xff0c;且分库表处于多个库3.4 涉及分库表&#xff0c;且运行中某库停机 4. 小结 0. 背景 接上篇文章《闲谭SpringBoot–ShardingS…...

计算机网络之---TCP报文段

TCP报文段 TCP报文段是TCP协议中传输数据的基本单位。TCP协议基于流控制、顺序控制和错误校验等机制&#xff0c;以确保数据的可靠传输。TCP报文段结构由多个字段组成&#xff0c;每个字段在TCP的工作中都有特定的作用 一个典型的TCP报文段由两部分组成&#xff1a; TCP头部&a…...

USB 驱动开发 --- Gadget 驱动框架梳理(一)

本文由 Linux 内核文档翻译与总结而来&#xff0c;个人学习笔记仅供参考。 Gadget 框架 在 USB 协议交互过程中&#xff0c;角色定义&#xff1a; the device driver is the master (or “client driver”) Linux 内核中称为 HCD(Host Controller Driver)&#xff0c;负责与 …...

C#读写ini配置文件保存设置参数

本示例使用设备&#xff1a;https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.52de2c1b5P5rkA&ftt&id22173428704 [DllImport("kernel32", CharSet CharSet.Unicode)] public static extern uint GetPrivateProfileString(string lpAppName, stri…...

Linux---history查看命令历史记录命令

history命令是Linux系统中用于显示和管理用户之前执行过的命令列表的实用工具。以下是history命令的详细教程&#xff1a; 一、基本功能 history命令能够显示用户在当前shell会话或之前会话中执行过的所有命令。这对于回顾之前的操作、复制某个命令进行修改再次执行等场景非常…...

CANopen 学习笔记(2)

PDO通讯参数 异步传输 发送类型设置为0xFE或0xFF 修改映射参数后执行sendPDOevent(&CanFestival_Master_Data); /* 发送PDO事件 */则会触发PDO传输 还有一直就是定时器异步发送&#xff0c;配置发送类型为0xFE&#xff0c;定时器发送时间为0x64,则会以100ms的周期发送P…...

《鸿蒙Next旅游应用:人工智能赋能个性化与智能导览新体验》

随着鸿蒙Next的推出&#xff0c;旅游应用迎来了全新的发展机遇&#xff0c;借助人工智能技术能为用户带来更出色的个性化推荐和智能导览服务。 鸿蒙Next与人工智能融合优势 鸿蒙Next拥有强大的分布式能力和原生智能体验。其能打破设备界限&#xff0c;实现多设备协同&#xf…...

计算机网络 (39)TCP的运输连接管理

前言 TCP&#xff08;传输控制协议&#xff09;是一种面向连接的、可靠的传输协议&#xff0c;它在计算机网络中扮演着至关重要的角色。TCP的运输连接管理涉及连接建立、数据传送和连接释放三个阶段。 一、TCP的连接建立 TCP的连接建立采用三次握手机制&#xff0c;其过程如下&…...

Level2逐笔成交逐笔委托毫秒记录:今日分享优质股票数据20250114

逐笔成交逐笔委托下载 链接: https://pan.baidu.com/s/18YtQiLnt06cPQP1nRXor0g?pwd4k3h 提取码: 4k3h Level2逐笔成交逐笔委托数据分享下载 基于Level2的逐笔成交和逐笔委托数据&#xff0c;这种毫秒级别的记录能分析出许多关键信息&#xff0c;如庄家意图、虚假动作&#…...

探索Java(适合小白)

探索Java&#xff1a;推动数字世界的语言 Java&#xff0c;这一编程语言在信息技术的海洋中如同明珠般闪耀&#xff0c;吸引着无数程序员的关注与热爱。在今天的博客中&#xff0c;我们将深入了解Java的定义、学习的重要性&#xff0c;并详细探讨Java EE的概念。无论你是编程新…...

Java Web开发高级——Spring Boot与微服务架构

微服务架构&#xff08;Microservices Architecture&#xff09;已经成为现代软件开发中的主流架构之一。它通过将单一的、庞大的应用程序拆分成多个小的、独立部署的服务&#xff0c;使得开发、维护和扩展变得更加灵活、可控。Spring Boot 提供了一种简单且高效的方式来构建微…...

IMX6U Qt 开发环境

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 一、交叉编译 1. 安装通用 ARM 交叉编译工具链 2. 安装 Poky 交叉编译工具链 二、编译出厂源码 1. U-boot 2. 内核和模块 3. 编译出厂 Qt GUI 综合 Demo 前言…...

【计算机网络】lab5 ARP协议

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;计算机网络_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前言 2.…...

基于深度学习的视觉检测小项目(十三) 资源文件的生成和调用

在使用 PySide6 进行开发时&#xff0c;管理应用程序的资源&#xff08;如图标、图片、字体、样式表、音视频等&#xff09;是一个常见的任务。PySide6 提供了一个工具 pyside6-rcc&#xff0c;它能够将资源文件&#xff08;.qrc&#xff09;编译成 Python 模块&#xff0c;然后…...

【C】初阶数据结构3 -- 单链表

之前在顺序表那一篇文章中&#xff0c;提到顺序表具有的缺点&#xff0c;比如头插&#xff0c;头删时间复杂度为O(n)&#xff0c;realloc增容有消耗等。而在链表中&#xff0c;这些问题将得到解决。所以在这一篇文章里&#xff0c;我们将会讲解链表的定义与性质&#xff0c;以及…...

STM32 FreeRTOS 基础知识

多任务处理 内核是操作系统的核心组件。诸如 Linux 这样的操作系统采用的内核&#xff0c; 看似允许用户同时访问计算机。很明显&#xff0c;多个用户可以同时执行多个程序。 每个执行程序都是受操作系统控制的任务&#xff08;或线程&#xff09;。如果一个操作系统能够以这…...

初学stm32 --- II2C_AT24C02,向EEPROM中读写数据

目录 IIC总线协议介绍 IIC总线结构图 IIC协议时序 1. ACK&#xff08;Acknowledge&#xff09; 2. NACK&#xff08;Not Acknowledge&#xff09; IO口模拟II2C协议 发送起始信号&#xff1a; 发送停止信号&#xff1a; 检测应答信号&#xff1a; 发送应答信号&#x…...

探索图像编辑的无限可能——Adobe Photoshop全解析

文章目录 前言一、PS的历史二、PS的应用场景三、PS的功能及工具用法四、图层的概念五、调整与滤镜六、创建蒙版七、绘制形状与路径八、实战练习结语 前言 在当今数字化的世界里&#xff0c;视觉内容无处不在&#xff0c;而创建和编辑这些内容的能力已经成为许多行业的核心技能…...

当comfyui-reactor-node 安装失败urllib.error.HTTPError: HTTP Error 403: Forbidden解决方法

comfyUI 节点comfyui-reactor-node 安装 python install 时 报错 urllib.error.HTTPError: HTTP Error 403: Forbidden 如下&#xff1a; (xxx) xxxxxxx:~/sdb/Q/ComfyUI/custom_nodes/comfyui-reactor-node$ python install.py Traceback (most recent call last): File …...

01基本介绍篇(D2_多线程问题)

目录 一、线程的上下文切换问题 1. 基本介绍 2. 多线程一定比单线程快&#xff1f; 3. 如何减少上下文切换 二、线程安全问题 1. 什么是线程安全&#xff1f; 2. java语言中的线程安全 2.1. 不可变 2.2. 绝对线程安全 2.3. 相对线程安全 2.4. 线程兼容 2.5. 线程对立…...

如何保证光谱相机的稳定性和可靠性

光学系统设计与制造 高质量光学元件&#xff1a;采用高精度研磨和镀膜的透镜、棱镜、光栅等光学元件。优质的透镜可以减少像差和色差&#xff0c;确保光线准确聚焦&#xff1b;高质量的镀膜能够提高光学元件的透光率&#xff0c;降低反射损失&#xff0c;并且增强对不同波段光…...

基于springboot+vue的洪涝灾害应急信息管理系统设计与实现

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…...

登录、注册、忘记密码、首页HTML模板

<!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>登录</title><style>body {display: fl…...

HTML文章翻页功能

效果展示&#xff1a; 效果原理&#xff1a; 1、引入CDN 2、绘制文章翻页样式&#xff0c;以及自动分段 3、获取窗口宽高&#xff0c;计算出当前文章总分段&#xff0c;并实现分页 4、完整代码 <!DOCTYPE html> <html><head><meta charset"utf-8&qu…...

JAVA安全编码规范

1. 数据校验 对外部输入进行校验入参的合法性&#xff0c; 防止内存越界&#xff0c;命令注入&#xff0c;SQL注入&#xff0c;格式化字符串漏洞 校验长度&#xff0c;范围&#xff0c;输入校验采用白名单形式 校验前做归一化处理&#xff0c;使用java.text.Normalizer的n…...

OpenGL —— 基于Qt的视频播放器 - ffmpeg硬解码,QOpenGL渲染yuv420p或nv12视频(附源码)

运行效果 工程说明 源码 vertex.glsl...

爬虫逆向学习(十五):Akamai 3.0反爬分析与sensor-data算法逆向经验

此分享只用于学习用途&#xff0c;不作商业用途&#xff0c;若有冒犯&#xff0c;请联系处理 Akamai 3.0反爬分析与sensor-data算法逆向经验 Akamai开始正题前须知站点信息接口分析反爬点反爬点定位_abck定位结果 逆向前准备工作sensor_data生成位置本地替换文件 请求体sensor…...

java项目启动时,执行某方法

1. J2EE项目 在Servlet类中重写init()方法&#xff0c;这个方法会在Servlet实例化时调用&#xff0c;即项目启动时调用。 import javax.servlet.ServletException; import javax.servlet.http.HttpServlet;public class MyServlet extends HttpServlet {Overridepublic void …...

学会使用开源软件jclasslib 字节码文件的组成 详解

应用场景 1 应用场景 2 学习路线 以正确的姿势打开文件 字节码文件的组成 玩转字节码常用工具 以正确的姿势打开文件 开源软件 jclasslib github 地址 https://github.com/ingokegel/jclasslib 工具使用 字节码文件的组成 基本信息 常量池 字段 方法 属性 详解 魔数 主副版…...

Flask表单处理与验证

Flask是一个轻量级的Python框架&#xff0c;它通过扩展库提供了对表单处理与验证的支持。WTForms是一个流行的Flask扩展库&#xff0c;用于创建和验证Web表单。它提供了一种声明式的方法来定义表单结构和验证逻辑&#xff0c;使得表单处理更为简洁和优雅。下面&#xff0c;我们…...

如何通俗易懂的理解 html js css

HTML、CSS 和 JavaScript 是构建网页的三大核心技术。为了通俗易懂地理解它们&#xff0c;我们可以用一个简单的比喻&#xff1a;**盖房子**。 --- ### 1. **HTML&#xff1a;房子的结构** HTML&#xff08;HyperText Markup Language&#xff09;就像房子的**骨架**。它定义…...

信凯科技业绩波动明显:毛利率远弱行业,资产负债率偏高

《港湾商业观察》施子夫 1月8日&#xff0c;深交所官网显示&#xff0c;浙江信凯科技集团股份有限公司&#xff08;以下简称“信凯科技”&#xff09;主板IPO提交注册。 自2022年递交上市申请&#xff0c;信凯科技的IPO之路已走过两年光景&#xff0c;尽管提交注册&#xff0…...

蓝牙BT04-A的使用与相关AT指令

一、AT指令没有返回的问题及解决方案 检查指令格式&#xff1a; 确认指令格式是否正确&#xff0c;包括特定的命令和结尾的回车换行符&#xff08;n&#xff09;。 检查TX/RX连接&#xff1a; 确认TX&#xff08;发送&#xff09;和RX&#xff08;接收&#xff09;线是否连接正…...

新手如何练习SQL?|掌握

对于新手想要练习SQL语句&#xff0c;可以从以下几个方面入手&#xff1a; 1. 建立理论基础 首先深入理解数据库的核心组件&#xff0c;包括数据库本身、其内部的各个表、表中的字段及其对应的数据类型&#xff08;如字符串、整型、日期等&#xff09;&#xff0c;以及数据库…...

JavaScript宝典下

小哆啦闭关修炼已久&#xff0c;潜心攻读专业秘技&#xff0c;方才下山考研本欲大展宏图&#xff0c;怎奈山河虽壮志难酬&#xff0c;终是觉察考研无望。思来想去&#xff0c;不若弃考研之念&#xff0c;重拾敲代码之道&#xff0c;复盘前端奇术&#xff0c;以备闯荡职场江湖。…...