百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

融合贝叶斯生存模型与Transformer注意力的客户重参与策略优化

itomcoil 2025-07-24 18:47 5 浏览

本文提出了一个集成三种核心技术的下一代智能优惠券分发系统:基于贝叶斯生存模型的重购概率预测、采用注意力机制的Transformer利润预测模型,以及用于策略持续优化的Dyna-Q强化学习代理。该系统构建了一个自优化的闭环架构,通过贝叶斯生存分析筛选高价值客户,利用Transformer模型预测优惠券投放的净利润收益,并通过Dyna-Q算法在虚拟环境中进行大规模策略探索与优化。

系统首先采用贝叶斯生存模型分析每个客户的购买历史数据,输出其再次购买的概率分布。通过筛选低概率客户,避免在无效渠道上的预算浪费。随后基于注意力机制的Transformer模型接收客户的行为序列数据和候选优惠券信息,预测其下一次订单的净利润。将生存概率与利润预测相乘得到期望利润评分,Dyna-Q代理将此评分作为虚拟奖励信号,在仿真环境中测试不同优惠券策略,通过查找表更新实现对每个客户档案的个性化优惠券推荐。

实验结果表明,该混合架构确保每个营销预算都投放到既有响应概率又具备激励价值的客户群体。通过最小化实时测试需求,系统能够根据客户行为变化自动调整策略,为营销决策提供基于数据驱动的优化方案。

业务场景与系统架构设计

本项目旨在解决电商平台面临的核心挑战:如何通过个性化优惠券策略重新激活流失客户,在严格的营销预算约束下最大化利润和重复购买率。传统营销策略往往缺乏精确的客户价值评估和实时优化能力,导致营销资源配置效率低下。本系统的设计目标是建立一个日更新的数据驱动优惠券分发机制,在控制客户获取成本的同时,最大化净利润和长期客户忠诚度。

系统的数据基础构建在客户行为日志之上,包含关键维度如客户标识、快照日期、距离上次购买天数、近30天购买频次、平均订单价值、产品类别、剩余营销预算比例、优惠券面值、订单状态和订单利润等。这些特征涵盖了客户行为的时间维度(新近度)、频率维度(购买频次)、货币价值维度(订单价值)以及预算约束和产品偏好等关键要素。

df = pd.DataFrame({ 
"user_id": user_id, 
"snapshot_date": snapshot_date, 
"days_since_last_purchase": days_since_last_purchase, 
"purchases_last_30d": purchases_last_30d, 
"avg_order_value": avg_order_value, 
"category": category, 
"remaining_budget_pct": remaining_budget_pct, 
"coupon_offered": coupon_offered, 
"order_placed": order_placed, 
"order_profit": order_profit 
})

系统架构采用分层设计模式,包含预测层、仿真层和迭代优化层三个核心组件。在预测层,BG/NBD(Beta-Geometric/Negative Binomial Distribution)生存模型和基于注意力的Transformer模型协同工作。BG/NBD模型基于历史订单时间序列估算每个客户的再购买概率,而Transformer模型则接收客户的近期行为序列、状态特征和候选优惠券信息,预测投放该优惠券的净利润。两个模型的输出相乘得到期望利润评分,作为优惠券投放决策的量化依据。

在仿真层,系统将期望利润评分作为虚拟环境的奖励信号。通过构建数千个客户的数字孪生模型,系统能够在零成本的虚拟环境中测试不同优惠券策略,记录仿真结果并构建丰富的经验缓冲区,避免了大规模真实实验的预算消耗。

迭代优化层采用Dyna-Q强化学习算法,结合真实测试结果和仿真经验来更新动作价值函数Q(s,a)。该算法通过试错学习过程,为每种客户状态下的各个优惠券面值进行排序。当新的日志数据到达时,少量真实实验用于模型重新校准,而主要的学习过程仍在高效的虚拟试验中进行。

系统的技术架构采用微服务设计模式:

[PostgreSQL数据库] → 夜间ETL处理 → [GPU模型服务器] 
│ 
├─ BG/NBD REST服务接口 
├─ Transformer REST服务接口 
▼ 
[Dyna-Q CPU处理节点] 
│ 
▼ 
[Redis Q表存储] 
│ 
▼ 
[营销活动管理仪表板]

最终输出是一个日更新的查找表,将客户特征映射到最优优惠券策略。营销决策者每天早晨都能获得清晰可执行的优惠券分发列表,确保策略反映最新的行为趋势和预算约束。

流程图:

预测层[BG/NBD生存模型 & Transformer利润模型] → 期望利润评分
↓
仿真层[虚拟环境展开] → Dyna-Q迭代优化 → Q表更新 → 优惠券推荐列表

核心算法深度解析:Dyna-Q、贝叶斯生存分析与Transformer注意力机制

1、Dyna-Q强化学习核心机制

Dyna-Q算法构成了本系统的决策核心。在该框架中,状态s定义为五元组:(days_since, purchases_30d, avg_order_value, budget_pct, category_idx),动作a对应四个优惠券面值选项{0, 5, 10, 20}。当系统发出优惠券时,观察到的净奖励计算公式为:

Dyna-Q算法维护一个动态更新的价值函数表Q(s,a),该表估计在状态s下选择动作a的长期累积奖励。每次真实优惠券投放产生一个状态转移(s, a, r, s'),价值函数通过时间差分学习进行更新:

其中α为学习率,γ为折扣因子。在实际应用中,学习率α初始设置为0.3并逐步衰减,折扣因子γ设置为0.95,反映了30天时间窗口内的价值衰减特性。

2、贝叶斯生存模型:BG/NBD框架

BG/NBD模型在本系统中扮演"客户忠诚度评估器"的角色。通过分析客户购买的频率和新近度特征,模型输出客户在给定未来时间窗口内再次下单的概率。高概率值表示客户仍然活跃,低概率值则提示客户可能已经流失。

BG/NBD模型的核心在于通过Beta-几何共轭先验,从购买频率f、新近度r和观察时间跨度T中估计生存概率:

对于每个客户,模型输出格式为:

该标量值存储在状态元组中,作为生存权重参与后续计算。

3、Transformer注意力机制的利润预测

基于注意力机制的Transformer模型负责模式识别和利润预测。模型接收客户的近期行为序列、当前状态特征和候选优惠券信息,通过注意力权重机制识别最具预测价值的历史时刻。例如,近期的婴儿用品搜索行为相比于月前的随机浏览具有更高的预测权重。

模型的输入序列定义为x = [c_{t-29},...,c_t],编码客户30天的产品类别流,候选优惠券价值c作为附加token加入序列。自注意力机制为每对token计算相关性评分:

假设token #28(婴儿护理产品)与优惠券token的注意力得分为2.5,而token #5(电子产品)的得分为0.4,softmax函数将主要权重分配给婴儿护理相关的上下文信息,使得净利润预测主要基于该上下文。

经过前向传播后,模型输出预测的利润率:

注意力机制使得模型能够更多地关注近期相关的行为模式,而不是历史上的随机行为。

4、模型融合与仿真生成

系统通过将两个预测模型的输出相乘来生成综合评估。对于任意客户-优惠券对(s,a),系统计算:

BG/NBD提供的生存概率P_alive与Transformer预测的利润估计r^相乘,得到的结果r~作为低成本仿真环境的输入。系统在硅芯片环境中启动数万个数字孪生实例,测试各种优惠券策略,避免了真实预算的消耗。

每个仿真奖励r~都通过时间差分更新输入到Dyna-Q算法中。由于单次真实优惠券投放可以产生约20次合成实验,经验缓冲区快速增长,探索率ε可以在仅四轮训练后从0.30安全降至0.05,在保持低业务风险的同时积累丰富的仿真经验。

通过一个具体示例来说明计算过程:假设客户状态s为days_since=7,avg_order_value=120,产品类别为婴儿食品。BG/NBD模型预测该类客户的生存概率为0.82。对于10元优惠券,Transformer预测毛利润为105元,因此净利润r^ = 105-10 = 95元。仿真奖励计算为0.82×95≈78元。如果当前Q表中Q(s,10)的值为65,最佳未来价值max_{a'} Q(s',a')为70,则时间差分增量为:

这将Q(s,10)更新至约74。经过多次迭代,Q表趋于稳定,使得argmax操作的优惠券选择能够反映真实的投资回报率。

各组件的连接顺序至关重要。BG/NBD模型不考虑优惠券价值,仅关注客户返回概率;Transformer模型始终考虑优惠券价值,但不估计客户生存概率;Dyna-Q算法依赖两者的组合:BG/NBD提供参与概率,Transformer估计期望利润,时间差分学习确定最优长期策略。

在代码实现中,三个组件通过标准化接口交互:返回P_alive的BG/NBD REST端点、返回r^的Transformer CUDA服务,以及执行Dyna-Q更新并将刷新的Q表写入Redis的CPU工作节点。夜间批处理协调器负责重训练预测模型、重新运行虚拟展开,并导出次日的优惠券推荐列表到营销活动工具。

该架构设计的核心价值在于:BG/NBD模型帮助避免在非活跃客户上的优惠券浪费,Transformer模型量化每个优惠券的潜在利润贡献,Dyna-Q算法将所有输入转化为自更新的决策策略。营销团队因此能够获得更优的结果,减少测试成本,并实现策略的日度更新。

实现流程与实验结果分析

本节将展示三个核心算法组件的集成实现过程以及实验结果的详细分析。

系统集成实现

系统实现将BG/NBD生存分析、Transformer注意力模型和Dyna-Q强化学习算法整合为一个完整的工作流程。BG/NBD模型扫描每个客户的订单历史并输出活跃概率;Transformer模型接收客户的近期行为数据和候选优惠券信息,预测投放的净利润;Dyna-Q循环将少量真实优惠券测试与大规模仿真相结合,更新价值函数并为每个客户状态选择最优优惠券策略。最终输出为次日优惠券推荐列表及其期望利润,以CSV格式导出供营销活动工具使用。

import random, numpy as np, pandas as pd, matplotlib.pyplot as plt 
from collections import defaultdict 
from tqdm import trange 

import torch, torch.nn as nn 
from torch.utils.data import Dataset, DataLoader 
from lifetimes import BetaGeoFitter 
from lifetimes.utils import calibration_and_holdout_data 

import matplotlib.pyplot as plt 
plt.rcParams["figure.dpi"] = 120 

DATA_PATH = "repurchase_data.csv" # 历史数据文件路径 

SEQ_LEN = 30 # 行为序列长度 
ACTION_SPACE = [0, 5, 10, 20] # 优惠券面值选项(元) 

# 数据加载与预处理
df = pd.read_csv(DATA_PATH, parse_dates=["snapshot_date"]) 
coupon_map = {"none": 0, "5": 5, "10": 10, "20": 20} 
df["coupon_value"] = df["coupon_offered"].map(coupon_map) 
df["reward"] = df["order_profit"] - df["coupon_value"] 
df["category_idx"] = df["category"].astype("category").cat.codes 

STATE_COLS = [ 
"days_since_last_purchase", "purchases_last_30d", 
"avg_order_value", "remaining_budget_pct", 
"category_idx" 
]

BG/NBD生存模型训练

系统首先构建BG/NBD生存模型作为客户活跃度评估的基础。通过校准期和保持期的数据分割,模型学习客户购买行为的统计规律。

# BG/NBD生存模型构建
summary = calibration_and_holdout_data( 
transactions=df[["user_id","snapshot_date","order_placed"]], 
customer_id_col="user_id", datetime_col="snapshot_date", 
calibration_period_end="2025-05-31", 
observation_period_end="2025-06-30", 
freq="D" 
) 
bgf = BetaGeoFitter(penalizer_coef=1e-3) 
bgf.fit(summary["frequency_cal"], 
summary["recency_cal"], 
summary["T_cal"]) 
print("BG/NBD模型参数:", bgf.params_.round(3).to_dict())

Transformer注意力模型实现

Transformer模型采用序列数据集设计,结合随机生成的30天类别序列和表格特征。模型架构包含嵌入层、多头注意力编码器和MLP预测头。

class SeqDataset(Dataset): 
"""序列数据集:30天类别序列 + 表格特征""" 
def __init__(self, frame: pd.DataFrame, seq_len: int = 30): 
self.df = frame.reset_index(drop=True).copy() 
cats = self.df["category_idx"].unique() 
self.df["seq"] = self.df["category_idx"].apply( 
lambda _ : np.random.choice(cats, seq_len) 
) 
def __len__(self): return len(self.df) 
def __getitem__(self, idx): 
row = self.df.loc[idx] 
seq = torch.as_tensor(row["seq"], dtype=torch.long) 
feats = torch.as_tensor(row[STATE_COLS].to_numpy(np.float32), 
dtype=torch.float32) 
act = torch.tensor(row["coupon_value"] / 20.0, dtype=torch.float32) 
rew = torch.tensor(row["reward"], dtype=torch.float32) 
return seq, feats, act, rew 

class WorldTransformer(nn.Module): 
"""双层注意力编码器 + MLP预测头""" 
def __init__(self, n_cat: int, d: int = 32): 
super().__init__() 
self.embed = nn.Embedding(n_cat, d) 
self.encoder = nn.TransformerEncoder( 
nn.TransformerEncoderLayer(d_model=d, nhead=4, 
dim_feedforward=64, 
dropout=0.1, 
batch_first=True), 
num_layers=2) 
self.head = nn.Sequential( 
nn.Linear(d + len(STATE_COLS) + 1, 64), 
nn.ReLU(), nn.Linear(64, 1) 
) 
def forward(self, seq, feats, act): 
h = self.encoder(self.embed(seq))[:, 0, :] # [CLS] token 
x = torch.cat([h, feats, act.unsqueeze(1)], dim=1) 
return self.head(x).squeeze(1)

模型训练过程采用AdamW优化器,学习率设为2e-3,使用均方误差损失函数进行监督学习。

device = "cuda" if torch.cuda.is_available() else "cpu" 
wm = WorldTransformer(df["category_idx"].nunique()).to(device) 

ds = SeqDataset(df, SEQ_LEN) 
df["seq"] = ds.df["seq"] # 在主数据框中保持序列数据用于Dyna-Q 
loader = DataLoader(ds, batch_size=256, shuffle=True) 
opt = torch.optim.AdamW(wm.parameters(), lr=2e-3) 
mse = nn.MSELoss() 

print("\n训练Transformer世界模型(3轮)...") 
losses = [] 
for epoch in range(3): 
run = 0.0 
for seq, feat, act, rew in loader: 
seq, feat, act, rew = (t.to(device) for t in (seq, feat, act, rew)) 
pred = wm(seq, feat, act) 
loss = mse(pred, rew) 
opt.zero_grad(); loss.backward(); opt.step() 
run += loss.item() 
losses.append(run / len(loader)) 
print(f" 第{epoch+1}轮: MSE = {losses[-1]:.3f}")

仿真展开函数设计

仿真展开函数整合BG/NBD和Transformer的预测结果,为Dyna-Q算法提供虚拟奖励信号。

def roll_out(row_d: dict, action_val: int, model) -> float: 
"""计算期望奖励:P(存活) × Transformer奖励预测""" 
uid = row_d["user_id"] 
alive = bgf.conditional_probability_alive( 
summary.loc[uid,"frequency_cal"] if uid in summary.index else 0, 
summary.loc[uid,"recency_cal"] if uid in summary.index else 0, 
summary.loc[uid,"T_cal"] if uid in summary.index else 1) 

seq = torch.as_tensor(row_d["seq"], dtype=torch.long)[None].to(device) 
feats = torch.as_tensor([float(row_d[c]) for c in STATE_COLS], 
dtype=torch.float32)[None].to(device) 
act = torch.tensor([action_val/20.0], dtype=torch.float32, 
device=device) 
model.eval() 
with torch.no_grad(): 
r_hat = model(seq, feats, act).item() 
return alive * r_hat

Dyna-Q价值迭代实现

Dyna-Q算法通过状态离散化、探索-利用平衡和经验回放机制实现策略优化。

def bucket(row): 
"""连续状态离散化""" 
return (int(row["days_since_last_purchase"] // 10), 
int(row["purchases_last_30d"] // 2), 
int(row["avg_order_value"] // 20), 
int(row["remaining_budget_pct"] * 10), 
int(row["category_idx"])) 

gamma, alpha = 0.95, 0.30 
eps0, eps_end = 0.30, 0.05 
plan_k = 20 
epochs_rl = 4 

Q = defaultdict(float) 
buffer = [(bucket(r), r["coupon_value"], r["reward"]) 
for _, r in df.sample(2000, random_state=0).iterrows()] 

print("\n=== Dyna-Q学习过程 ===") 
for ep in range(1, epochs_rl + 1): 
eps = max(eps_end, eps0 * (1 - ep/epochs_rl)) 
today = df.sample(1500, random_state=ep) # 模拟日流量 
for _, row in today.iterrows(): 
s = bucket(row) 
a = random.choice(ACTION_SPACE) if random.random() < eps else \ 
max(ACTION_SPACE, key=lambda act: Q[(s, act)]) 

r_hat = roll_out(row.to_dict(), a, wm) # 虚拟奖励计算 
best = max(Q[(s, act)] for act in ACTION_SPACE) 
Q[(s, a)] += alpha * (r_hat + gamma*best - Q[(s, a)]) 

buffer.append((s, a, r_hat)) 
for _ in range(plan_k): # 经验回放 
s2, a2, r2 = random.choice(buffer) 
best2 = max(Q[(s2, act)] for act in ACTION_SPACE) 
Q[(s2, a2)] += alpha * (r2 + gamma*best2 - Q[(s2, a2)]) 

print(f"第{ep}轮: ε={eps:.2f}, 缓冲区大小={len(buffer):,}")

推荐系统输出

基于训练完成的Q表,系统为每个客户生成个性化的优惠券推荐。

def recommend(row): 
s = bucket(row) 
best = max(ACTION_SPACE, key=lambda a: float(Q[(s, a)])) 
return best, round(float(Q[(s, best)]), 2) 

demo = df.sample(10, random_state=99) 
records = [dict(user_id=int(r["user_id"]), 
days_since=int(r["days_since_last_purchase"]), 
rec_coupon=recommend(r)[0], 
exp_profit=recommend(r)[1]) 
for _, r in demo.iterrows()] 

pd.DataFrame(records).to_csv("recommendations.csv", index=False) 
print("\n样本推荐结果:") 
print(pd.DataFrame(records).head())

实验结果分析

实验结果显示了系统各组件的有效性和整体性能:

 数据集加载完成: 70,000行, 13列 
BG/NBD模型参数: {'r': 6.004, 'alpha': 81.002, 'a': 0.0, 'b': 0.0} 

训练Transformer世界模型(3轮)... 
第1轮: MSE = 72.684 
第2轮: MSE = 50.637 
第3轮: MSE = 44.474 

=== Dyna-Q学习过程 === 
第1轮: ε=0.22, 缓冲区大小=3,500 
第2轮: ε=0.15, 缓冲区大小=5,000 
第3轮: ε=0.07, 缓冲区大小=6,500 
第4轮: ε=0.05, 缓冲区大小=8,000 

样本推荐结果: 
user_id days_since rec_coupon exp_profit 
0 7679 36 0 0.00 
1 3118 1 0 -0.31 
2 1001 3 0 12.47 
3 5143 7 10 82.48 
4 3731 19 0 12.78

实验结果的关键发现包括:

BG/NBD模型表现:模型参数r≈6和α≈81表明重复购买客户存在但相对稀少,这验证了精准优惠券投放的必要性。高参数值反映了客户行为的异质性,强调了个性化策略的重要性。

Transformer学习效果:模型训练损失从72.684快速下降至44.474,仅用3轮训练就实现了显著的性能提升,表明模型能够有效捕获客户行为序列中的消费信号和模式。

Dyna-Q优化过程:探索率从0.22逐步降至0.05,经验缓冲区从3,500增长至8,000个转移样本,说明算法成功从随机探索转向策略利用。每个真实样本产生20次仿真展开,大幅提高了学习效率同时控制了实验成本。

个性化推荐质量:推荐结果展现了系统的个性化能力。例如,用户5143(距离上次购买7天)获得10元优惠券推荐,期望利润82.48元,而用户7679(距离上次购买36天)不推荐优惠券,期望利润为0,这反映了系统对客户流失风险的准确识别。

该实验验证了三个核心假设:首先,BG/NBD模型有效防止了在潜在流失客户上的过度投资;其次,Transformer模型发现了传统RFM分析可能遗漏的购买模式;最后,Dyna-Q算法成功将两个预测模型融合为快速、预算感知的决策策略。

总结

本文提出的混合架构系统验证了专业化预测模型与强化学习循环相结合的优越性,相比于传统的手动优惠券规则调整方法表现出显著优势。BG/NBD生存模型有效筛选出低返回概率的客户,避免了无效的营销支出;基于注意力机制的Transformer模型准确量化了每个优惠券对活跃客户的净价值贡献;Dyna-Q算法将这些预测信号整合为统一的决策框架,在消耗任何实际预算之前通过虚拟仿真环境安全地测试各种策略方案。

该系统通过将少量真实测试与大规模快速虚拟实验相结合,实现了策略的快速收敛和持续优化。这种设计使营销团队能够快速响应闪购活动、库存变化或季节性趋势等业务事件,无需等待传统A/B测试的长周期反馈。

混合架构的核心优势在于责任分离:监督学习模型专注于概率估计和利润预测,强化学习层负责试错调度和策略优化。这种设计允许系统在不影响学习循环的情况下替换新的利润预测或生存分析模型,从而实现系统的持续自动化改进。

"预测-仿真-优化"的三层架构模式具有广泛的应用潜力,可以扩展到实时产品推荐、动态价格调整、广告出价优化等多个需要快速个性化决策和成本效益权衡的业务场景。该方法论为数据驱动的营销决策提供了一个可扩展、可解释的解决方案框架。

未来的研究方向包括:丰富客户状态特征(如页面浏览行为、价格敏感度等),实现Transformer模型的在线微调机制,扩展优惠券策略空间和推广渠道选择,以及在保持预算约束的前提下进一步提升投资回报率。这些改进将使系统能够在更复杂的业务环境中实现更精准的个性化营销效果。

作者:Shenggang Li

相关推荐

Python高效数据处理——从基础方法到性能优化

数据处理是数据分析的核心环节,高效的数据处理方法能显著提升代码性能。本文将深入介绍Pandas中的各种数据处理技术,并分析它们的性能特点。使用apply方法应用自定义函数apply是Pandas中最灵...

正态分布-置信区间计算(正态90%置信区间)

统计学有两大主要分支,分别是描述性统计学和推断统计学。描述性统计学用于描述和概括数据的特征以及绘制各类统计图表。总体数据,往往因为数据量太大而难以被获取,所以就有了通过较小的样本数据推测总体特性的推断...

一篇文章搞定人工智能之深度学习创建训练数据集的方法

基础数据准备训练所需要的数据集合都存储在数据库中,还有部分文本文件首先对数据进行分类结构化存储[因为涉及到的是多分类问题]整理并存储原始数据集使用numpy将所有需要数据读取出来splitlines(...

向量搜索之 k-means 算法(annoy向量检索)

一直好奇向量数据库的索引是如何实现的,我们可以推断向量搜索的简单实现:把数据存入向量数据库时,会计算每个分段文档的向量(文档向量),然后把分段文档和文档向量同时存入向量数据库。从向量数据库中搜索文档时...

融合贝叶斯生存模型与Transformer注意力的客户重参与策略优化

本文提出了一个集成三种核心技术的下一代智能优惠券分发系统:基于贝叶斯生存模型的重购概率预测、采用注意力机制的Transformer利润预测模型,以及用于策略持续优化的Dyna-Q强化学习代理。该系统构...

用Deepseek编写代码计算今天大乐透开奖号码

以下是一个基于Python的示例代码,用于分析大乐透历史数据并生成可能的号码组合。请务必注意:这仅是统计学模拟,无法真正预测开奖结果,所有结果均为随机性参考。代码实现步骤1.数据准备(模拟数据)假设...

拆解特斯拉L2家用充电桩:技术细节太多了

本文是对第三代特斯拉家用充电桩(L2级)的拆解分析报告。深入探究该充电桩的内部结构、设计特点、性能参数等内容。产品概述设备为第三代特斯拉家用充电桩,属于Level2充电器,是特斯拉推出的家用充电设备...

《光环5》2月更新“战锤风暴”正式推送“枪林弹雨”模式即将到来

今天(2月25日)微软和343工作室正式向Xboxone玩家推送了《光环5》的2月更新补丁“战锤风暴HammerStorm”。本次更新包括了1张全新Arena竞技场地图Torque;3个全新游戏模式...

Spring Boot(十一)Redis集成从Docker安装到分布式Session共享

一、简介Redis是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API,Redis也是技术领域使用最为广泛的存储中间件,它是「...

Mac 基于HTTP方式访问下载共享文件,配置共享服务器

方法一:使用Python的SimpleHTTPServer进行局域网文件共享Mac自带Python,所以不需要安装其他软件,一条命令即可1):进入需要共享的文件夹,如Public文件夹cd/Us...

移动端性能专项测试之 CPU(移动端cpu天梯图2020百度贴吧)

指标背景很多场景下我们去使用App,可能会碰到手机会出现发热发烫的现象。这是因为CPU使用率过高、CPU过于繁忙,会使得整个系统无法响应用户,整体性能降低,用户体验变得相当差,也容易引起AN...

如何三天学会Phyton?这篇文章教你快速编程入门

Phyton作为一门常用的语言在很多领域都有很应用,很多人都想学习这门语言,那么我们就开始从头学习这门语言吧!首先你需要在官网下载你的Phyton的编程工具,也就是下载你的解释器!登录Phyton官网...

学习Python第一天 ---Hello World

引言人生苦短,请用Python(3.+)越来越多的情况下使用Python语言进行"代码粘合"和"数据分析"变得非常方便,而且Python在"爬虫"...

mysql的MVCC多版本并发控制机制(mysql并发情况下怎么解决)

认识MVCCMVCC是英文Multi-VersionConcurrencyControl多版本并发控制的首字母简拼。在上文MYSQL事务隔离级别中,我们已经知道,在可重复读的级别下,不管其他事...

爆炸,MySQL9.0大版本发布,我严重怀疑,它是不...

MySQL在本月发布了9.0大版本,作为MySQL的忠实粉丝,简单说下这次大版本更新。1.企业版,支持JS存储程序(JavaScriptstoredprograms)了。例如,可以像这样定一个函...