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

Transformer 面试题及详细答案120道(81-90)-- 性能与评估

前后端面试题》专栏集合了前后端各个知识模块的面试题,包括html,javascript,css,vue,react,java,Openlayers,leaflet,cesium,mapboxGL,threejs,nodejs,mangoDB,SQL,Linux… 。

前后端面试题-专栏总目录

在这里插入图片描述

文章目录

  • 一、本文面试题目录
      • 81. 如何评估Transformer模型的性能?除了准确率,还有哪些关键指标?
        • 原理说明
        • 示例代码(计算分类任务的多指标)
      • 82. 计算Transformer的参数量和 FLOPs(浮点运算次数)的方法是什么?
        • 原理说明
        • 计算方法
        • 示例代码(使用`thop`库计算)
      • 83. 模型的参数量与性能之间存在什么关系?是否参数量越大越好?
        • 原理说明
      • 84. 什么是“过拟合”?Transformer训练中如何避免过拟合?
        • 原理说明
        • 示例代码(早停实现)
      • 85. 如何评估Transformer模型的鲁棒性(如对抗样本、噪声输入)?
        • 原理说明
        • 示例代码(对抗样本生成与测试)
      • 86. 不同长度的输入序列对Transformer的预测结果有什么影响?
        • 原理说明
        • 示例(不同长度对情感分析的影响)
      • 87. 多语言Transformer模型(如mBERT)在不同语言上的性能是否有差异?为什么?
        • 原理说明
        • 实例
      • 88. 如何比较不同Transformer变体(如BERT、GPT)在同一任务上的优劣?
        • 原理说明
        • 示例代码(在文本分类任务上对比BERT和RoBERTa)
      • 89. 模型压缩(Model Compression)技术(如量化、剪枝)如何应用于Transformer?
        • 原理说明
        • 示例代码(PyTorch量化Transformer)
      • 90. Transformer的推理速度受哪些因素影响?如何优化?
        • 原理说明
        • 示例代码(批量推理与TensorRT优化)
  • 二、120道Transformer面试题目录列表

一、本文面试题目录

81. 如何评估Transformer模型的性能?除了准确率,还有哪些关键指标?

原理说明

评估Transformer模型的性能需结合任务类型选择指标,核心目标是衡量模型的预测能力、泛化能力和实用性。除准确率(Accuracy)外,不同任务的关键指标如下:

  1. 分类任务(如情感分析、文本分类)

    • 精确率(Precision):预测为正例的样本中实际为正例的比例,衡量“查准率”。
    • 召回率(Recall):实际为正例的样本中被预测为正例的比例,衡量“查全率”。
    • F1分数:精确率和召回率的调和平均,平衡两者的权衡关系。
    • AUC-ROC:衡量模型区分正负类的能力,尤其适用于不平衡数据。
  2. 序列标注任务(如NER、POS tagging)

    • Micro-F1/Macro-F1:Micro-F1对样本数量加权,Macro-F1对类别平等加权,适合多类别标注。
    • 准确率(Exact Match):完全匹配标签序列的比例。
  3. 生成任务(如翻译、摘要)

    • BLEU:衡量翻译结果与参考译文的n-gram重叠度。
    • ROUGE:评估摘要与参考文本的重叠度(如ROUGE-L关注最长公共子序列)。
    • METEOR:结合同义词和词干匹配,比BLEU更贴近人类评估。
  4. 通用指标

    • 困惑度(Perplexity, PPL):衡量语言模型对序列的预测能力,值越低越好。
    • 训练/验证损失曲线:判断模型是否收敛、过拟合或欠拟合。
    • 推理速度:每秒处理的样本数,衡量实用性。
示例代码(计算分类任务的多指标)
from sklearn.metrics import accuracy_score, precision_recall_fscore_support# 假设模型预测结果和真实标签
y_true = [0, 1, 1, 0, 1, 0]
y_pred = [0, 1, 0, 0, 1, 1]# 准确率
accuracy = accuracy_score(y_true, y_pred)
# 精确率、召回率、F1分数(宏平均)
precision, recall, f1, _ = precision_recall_fscore_support(y_true, y_pred, average='macro')print(f"准确率: {accuracy:.4f}")
print(f"精确率: {precision:.4f}")
print(f"召回率: {recall:.4f}")
print(f"F1分数: {f1:.4f}")

82. 计算Transformer的参数量和 FLOPs(浮点运算次数)的方法是什么?

原理说明
  • 参数量:模型中可学习参数的总数,反映模型复杂度。
  • FLOPs(Floating Point Operations):浮点运算次数,反映模型的计算成本(训练/推理时的运算量)。
计算方法
  1. 参数量计算

    • 遍历模型所有参数(如nn.Linear的权重和偏置、nn.Embedding的嵌入矩阵),累加各参数的元素数量。
    • 公式:对于形状为((a, b))的参数矩阵,参数量为(a \times b);偏置向量为(b)。
  2. FLOPs计算

    • 自注意力层:(O(4 \times L^2 \times d))((L)为序列长度,(d)为隐藏维度),包括Q/K/V投影、注意力分数计算和输出投影。
    • 前馈网络:(O(2 \times L \times d \times 4d))(假设扩张因子为4)。
    • 总FLOPs:累加所有层的FLOPs,乘以序列长度和批次大小。
示例代码(使用thop库计算)
import torch
from thop import profile
from transformers import BertModel# 加载模型
model = BertModel.from_pretrained("bert-base-uncased")
# 随机输入(批次大小=2,序列长度=128)
input_ids = torch.randint(0, 10000, (2, 128))
attention_mask = torch.ones_like(input_ids)# 计算参数量(Params)和FLOPs
flops, params = profile(model,inputs=(input_ids, attention_mask),verbose=False
)print(f"参数量: {params / 1e6:.2f} M")  # Bert-base约110M
print(f"FLOPs: {flops / 1e9:.2f} G")    # 单批次约18G FLOPs

83. 模型的参数量与性能之间存在什么关系?是否参数量越大越好?

原理说明

参数量与性能的关系并非简单的正相关,需结合数据量、任务复杂度和模型设计综合分析:

  1. 合理范围内的正相关

    • 在数据充足的任务(如语言建模、图像分类)中,参数量增大通常能提升性能。更多参数允许模型学习更复杂的模式(如长距离依赖、细粒度特征)。
    • 示例:GPT-3(1750亿参数)在零样本任务上的性能远超小模型(如GPT-2的1.5亿参数)。
  2. 参数量过大的问题

    • 过拟合风险:数据不足时,大模型可能拟合训练噪声,导致泛化能力下降。
    • 计算成本激增:参数量与训练/推理时间、内存占用正相关,超大模型(如万亿级参数)的部署和维护成本极高。
    • 边际效益递减:参数量超过临界点后,性能提升逐渐放缓(如从1000亿到2000亿参数,准确率可能仅提升0.1%)。
  3. 关键结论

    • 参数量需与数据量、任务复杂度匹配(“缩放定律”:性能随参数量和数据量的乘积增长)。
    • 并非越大越好,优化模型结构(如注意力机制、激活函数)可能比单纯增加参数量更有效。

84. 什么是“过拟合”?Transformer训练中如何避免过拟合?

原理说明

过拟合指模型在训练数据上表现优异,但在未见过的测试数据上性能大幅下降,原因是模型过度学习训练数据中的噪声而非通用规律。

Transformer中避免过拟合的方法:

  1. 数据增强

    • 对文本进行同义词替换、随机插入/删除token、回译等操作,增加数据多样性。
    • 示例:将“我爱自然语言处理”改为“我喜欢NLP”。
  2. 正则化技术

    • Dropout:在注意力层或前馈网络中加入dropout(如概率0.1),随机失活部分神经元。
    • 权重衰减(Weight Decay):在优化器中加入L2正则化(如weight_decay=0.01),限制参数过大。
    • 标签平滑:软化真实标签(见问题43),避免模型过度自信。
  3. 早停(Early Stopping)

    • 监控验证集性能,当性能连续多轮未提升时停止训练,防止过度拟合训练数据。
  4. 模型简化

    • 减少层数、隐藏维度或注意力头数,降低模型复杂度(如用BERT-small替代BERT-base)。
  5. 数据量扩充

    • 使用更大的预训练语料,或通过半监督学习利用未标注数据。
示例代码(早停实现)
import torchclass EarlyStopping:def __init__(self, patience=3, min_delta=0):self.patience = patience  # 容忍性能下降的轮数self.min_delta = min_delta  # 最小性能提升阈值self.best_score = Noneself.counter = 0def __call__(self, val_loss):if self.best_score is None:self.best_score = val_lossreturn False# 若验证损失上升且超过阈值,计数器加1if val_loss > self.best_score + self.min_delta:self.counter += 1if self.counter >= self.patience:return True  # 触发早停else:self.best_score = val_lossself.counter = 0return False# 训练循环中使用
early_stopping = EarlyStopping(patience=3)
for epoch in range(100):train_loss = train(model, train_loader)val_loss = evaluate(model, val_loader)print(f"Epoch {epoch}, Val Loss: {val_loss}")if early_stopping(val_loss):print("早停触发,停止训练")break

85. 如何评估Transformer模型的鲁棒性(如对抗样本、噪声输入)?

原理说明

鲁棒性指模型对扰动输入(如对抗样本、噪声、拼写错误)的稳定性,评估方法包括:

  1. 对抗样本测试

    • 生成对抗样本:通过梯度攻击(如FGSM、PGD)在输入中加入微小扰动,使模型预测错误。
    • 评估指标:模型在对抗样本上的准确率下降幅度(越小越鲁棒)。
  2. 噪声容忍测试

    • 注入噪声:随机替换、删除或插入token(如将“我爱机器学习”改为“我x爱机器学y习”)。
    • 评估指标:噪声输入下的性能(如F1分数)与干净输入的比值。
  3. 分布偏移测试

    • 测试数据与训练数据的分布差异(如领域迁移:用新闻训练的模型测试社交媒体文本)。
    • 评估指标:分布偏移前后的性能落差。
  4. 极端情况测试

    • 输入极短/极长序列、重复序列或无意义文本,观察模型是否崩溃或输出合理结果。
示例代码(对抗样本生成与测试)
import torch
import torch.nn.functional as Fdef fgsm_attack(model, input_ids, attention_mask, labels, epsilon=0.01):# 计算输入梯度input_ids.requires_grad = Trueoutputs = model(input_ids, attention_mask=attention_mask, labels=labels)loss = outputs.lossmodel.zero_grad()loss.backward()# 生成对抗扰动(符号梯度)perturbation = epsilon * torch.sign(input_ids.grad.data)# 应用扰动(确保仍为有效token ID)adv_input_ids = input_ids + perturbationadv_input_ids = torch.clamp(adv_input_ids, min=0, max=model.config.vocab_size-1).long()return adv_input_ids# 测试鲁棒性
model.eval()
clean_correct = 0
adv_correct = 0
total = 0for batch in test_loader:input_ids, attention_mask, labels = batch# 干净输入预测with torch.no_grad():outputs = model(input_ids, attention_mask=attention_mask)clean_preds = torch.argmax(outputs.logits, dim=1)clean_correct += (clean_preds == labels).sum().item()# 对抗输入预测adv_input_ids = fgsm_attack(model, input_ids, attention_mask, labels)with torch.no_grad():adv_outputs = model(adv_input_ids, attention_mask=attention_mask)adv_preds = torch.argmax(adv_outputs.logits, dim=1)adv_correct += (adv_preds == labels).sum().item()total += labels.size(0)print(f"干净输入准确率: {clean_correct/total:.4f}")
print(f"对抗样本准确率: {adv_correct/total:.4f}")
print(f"鲁棒性下降: {clean_correct/total - adv_correct/total:.4f}")

86. 不同长度的输入序列对Transformer的预测结果有什么影响?

原理说明

输入序列长度((L))通过影响上下文信息的完整性和模型的注意力分配,显著影响预测结果:

  1. 过短序列(截断过多)

    • 信息丢失:长文本被截断后,关键上下文(如前文提到的实体、逻辑关系)可能被移除,导致模型预测错误。
    • 示例:在问答任务中,若问题对应的答案在截断部分,模型将无法正确回答。
  2. 过长序列(超过设计长度)

    • 位置编码失效:可学习位置编码在超过训练长度后泛化性差(见问题36),导致位置信息混乱。
    • 注意力稀释:自注意力在长序列中可能“稀释”关键信息的权重(如重要token被分配的注意力占比下降)。
    • 计算误差:部分模型对超长序列直接报错或强制截断,破坏输入完整性。
  3. 长度不匹配的影响

    • 训练与推理长度差异:若训练时用短序列,推理时用长序列,模型可能因未学习过长序列的模式而性能下降。
    • 任务依赖性:摘要、翻译等任务对长度更敏感,而情感分析等短文本任务对长度变化的容忍度较高。
示例(不同长度对情感分析的影响)
  • 输入:“这部电影的特效很棒,但剧情拖沓,演员演技差,总体来说是一部____的电影”
    • 短序列(截断前半):“演员演技差,总体来说是一部____的电影” → 模型可能预测“糟糕”(忽略“特效棒”)。
    • 完整序列:模型综合所有信息,更可能预测“平庸”。

87. 多语言Transformer模型(如mBERT)在不同语言上的性能是否有差异?为什么?

原理说明

多语言Transformer模型(如mBERT、XLM-R)在不同语言上的性能存在显著差异,主要原因如下:

  1. 训练数据不均衡

    • 模型训练数据中,英语等主流语言占比极高(如mBERT的英语数据占40%),而小语种(如斯瓦希里语)数据极少,导致小语种的嵌入质量低。
  2. 语言结构差异

    • 形态复杂的语言(如德语、芬兰语)需要更多子词分割,可能导致信息损失;孤立语(如汉语)的分词难度更高,影响编码效果。
  3. 脚本与字符集差异

    • 非拉丁脚本语言(如阿拉伯语、俄语)的字符嵌入学习难度更高,尤其当数据量不足时。
  4. 任务适配性

    • 部分语言的标注数据稀缺(如低资源语言的NER数据集),微调效果差,放大性能差距。
实例
  • XLM-R在GLUE基准的英语任务上F1分数约90%,但在斯瓦希里语的同类任务上仅约60%。
  • 解决方法:通过数据增强(如回译)、跨语言迁移学习或针对小语种的预训练优化。

88. 如何比较不同Transformer变体(如BERT、GPT)在同一任务上的优劣?

原理说明

比较不同Transformer变体(如BERT、GPT、T5等)需结合任务特性、性能指标、效率及泛化能力综合评估,核心维度如下:

  1. 任务适配性

    • Encoder类模型(如BERT、RoBERTa):擅长需要双向上下文理解的任务(如文本分类、命名实体识别、问答),因能同时关注序列前后信息。
    • Decoder类模型(如GPT系列):适合自回归生成任务(如文本续写、对话、代码生成),因采用单向注意力机制,符合生成式任务的时序逻辑。
    • Encoder-Decoder类模型(如T5、BART):适用于序列转换任务(如机器翻译、文本摘要),因Encoder编码输入、Decoder生成输出的结构天然匹配“输入→输出”模式。
  2. 核心性能指标

    • 在统一数据集上对比任务专属指标(如分类任务的F1分数、生成任务的BLEU/ROUGE、问答任务的EM(精确匹配))。
    • 示例:在SQuAD问答任务中,BERT的EM分数通常高于GPT(因GPT单向注意力难以捕捉上下文双向依赖);在文本生成任务中,GPT的连贯性优于BERT。
  3. 效率与资源消耗

    • 比较参数量、推理速度(每秒处理样本数)、内存占用。例如,DistilBERT参数量为BERT的40%,但性能保留95%,更适合资源受限场景。
    • 生成任务中需额外关注解码速度(如GPT的自回归生成比T5慢,因每步依赖前序结果)。
  4. 泛化能力

    • 测试模型在分布外数据(如不同领域、噪声输入)上的表现。例如,GPT系列在零样本任务中泛化能力较强,而BERT需更多微调数据。
  5. 鲁棒性

    • 评估模型对对抗样本、拼写错误、长序列的稳定性(如BERT对长序列截断更敏感,而Longformer表现更优)。
示例代码(在文本分类任务上对比BERT和RoBERTa)
import torch
from transformers import BertTokenizer, BertForSequenceClassification, \RobertaTokenizer, RobertaForSequenceClassification
from sklearn.metrics import accuracy_score, f1_score# 加载模型和分词器
def load_model(model_name):if "bert" in model_name:tokenizer = BertTokenizer.from_pretrained(model_name)model = BertForSequenceClassification.from_pretrained(model_name, num_labels=2)elif "roberta" in model_name:tokenizer = RobertaTokenizer.from_pretrained(model_name)model = RobertaForSequenceClassification.from_pretrained(model_name, num_labels=2)return tokenizer, model# 评估函数
def evaluate(model, tokenizer, test_data):model.eval()preds = []labels = []with torch.no_grad():for text, label in test_data:inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True)outputs = model(** inputs)pred = torch.argmax(outputs.logits, dim=1).item()preds.append(pred)labels.append(label)acc = accuracy_score(labels, preds)f1 = f1_score(labels, preds, average="macro")return acc, f1# 测试数据(文本,标签)
test_data = [("这部电影很精彩", 1), ("这个产品很差劲", 0), ...]# 对比BERT和RoBERTa
bert_tokenizer, bert_model = load_model("bert-base-uncased")
roberta_tokenizer, roberta_model = load_model("roberta-base")bert_acc, bert_f1 = evaluate(bert_model, bert_tokenizer, test_data)
roberta_acc, roberta_f1 = evaluate(roberta_model, roberta_tokenizer, test_data)print(f"BERT - 准确率: {bert_acc:.4f}, F1: {bert_f1:.4f}")
print(f"RoBERTa - 准确率: {roberta_acc:.4f}, F1: {roberta_f1:.4f}")

89. 模型压缩(Model Compression)技术(如量化、剪枝)如何应用于Transformer?

原理说明

模型压缩技术通过减少Transformer的参数量或计算量,在保证性能的前提下提升效率,适合部署于移动端或边缘设备,核心技术及应用如下:

  1. 量化(Quantization)

    • 原理:将模型参数从32位浮点(FP32)转换为更低精度(如16位浮点FP16、8位整数INT8、4位整数INT4),减少内存占用和计算量。
    • 应用于Transformer
      • 对注意力层、前馈网络的权重和激活值进行量化(如INT8量化可减少75%内存)。
      • 需解决量化误差问题(如使用校准数据调整量化范围,避免性能下降)。
  2. 剪枝(Pruning)

    • 原理:移除模型中“不重要”的参数(如权重接近0的连接),保留关键结构。
    • 应用于Transformer
      • 结构化剪枝:剪去整个注意力头或前馈网络层(如保留6个注意力头而非12个)。
      • 非结构化剪枝:剪去个别权重参数(需稀疏矩阵支持,否则加速效果有限)。
      • 通常结合微调(剪枝后重新训练)恢复性能。
  3. 知识蒸馏(Knowledge Distillation)

    • 原理:用大模型(教师模型)的输出指导小模型(学生模型)训练,使小模型模仿大模型的行为。
    • 应用于Transformer
      • 如DistilBERT通过蒸馏BERT,保留95%性能的同时减少40%参数量和60%推理时间。
      • 蒸馏目标包括logits、注意力权重等。
  4. 参数共享与低秩分解

    • 参数共享:如ALBERT的跨层参数共享,减少重复参数。
    • 低秩分解:将高维权重矩阵分解为低秩矩阵(如将注意力层的权重(W \in \mathbb{R}^{d \times d})分解为(W_1 \in \mathbb{R}^{d \times k})和(W_2 \in \mathbb{R}^{k \times d}),(k \ll d))。
示例代码(PyTorch量化Transformer)
import torch
from transformers import BertModel# 加载预训练模型
model = BertModel.from_pretrained("bert-base-uncased")# 动态量化(仅量化权重,激活值仍为FP32,适合CPU推理)
quantized_model = torch.quantization.quantize_dynamic(model,{torch.nn.Linear},  # 仅量化线性层dtype=torch.qint8  # 8位整数
)# 测试量化前后的性能
input_ids = torch.randint(0, 10000, (1, 128))
attention_mask = torch.ones_like(input_ids)# 原始模型推理
with torch.no_grad():outputs = model(input_ids, attention_mask=attention_mask)# 量化模型推理
with torch.no_grad():quantized_outputs = quantized_model(input_ids, attention_mask=attention_mask)print(f"原始模型参数量: {sum(p.numel() for p in model.parameters()) / 1e6:.2f} M")
print(f"量化模型参数量: {sum(p.numel() for p in quantized_model.parameters()) / 1e6:.2f} M")  # 相同,但内存占用减少

90. Transformer的推理速度受哪些因素影响?如何优化?

原理说明

Transformer的推理速度(单位时间处理的样本数)受模型结构、输入特征、硬件环境等多因素影响,优化需从多维度入手:

  1. 影响因素

    • 模型大小:参数量越大,计算量越大(如GPT-3的推理速度远低于BERT-base)。
    • 序列长度:自注意力的时间复杂度为(O(L^2))((L)为序列长度),长序列(如1024token)比短序列(如64token)慢数十倍。
    • 硬件与框架:GPU推理速度远快于CPU;优化框架(如TensorRT)比原生PyTorch/TensorFlow更高效。
    • 解码策略:生成任务中,束搜索(Beam Search)比贪婪解码慢(束宽越大越慢);自回归生成(逐token预测)比并行生成慢。
  2. 优化方法

    • 模型层面
      • 使用轻量级模型(如DistilBERT、MobileBERT)或模型压缩技术(量化、剪枝)。
      • 限制最大序列长度(如截断长文本),或使用稀疏注意力(如Longformer)处理长序列。
    • 硬件与框架层面
      • 部署于GPU(如NVIDIA T4/V100)或专用芯片(如TPU)。
      • 使用推理优化工具(如ONNX Runtime、TensorRT)进行图优化和量化。
    • 解码策略优化
      • 生成任务中,使用小束宽(如beam_size=1或2),或采用投机解码(Speculative Decoding)并行生成候选token。
      • 批量处理:将多个样本组成批次推理(注意序列长度对齐以减少填充)。
    • 工程优化
      • 预计算位置编码,避免推理时重复计算。
      • 使用混合精度推理(FP16/FP8)加速计算。
示例代码(批量推理与TensorRT优化)
# 1. 批量推理优化
from transformers import BertTokenizer, BertModel
import torchtokenizer = BertTokenizer.from_pretrained("bert-base-uncased")
model = BertModel.from_pretrained("bert-base-uncased").cuda()# 单样本推理
texts = ["这是一个测试句子"] * 32  # 32个样本
inputs = tokenizer(texts, return_tensors="pt", padding=True, truncation=True).to("cuda")# 批量推理(比单样本循环快数倍)
with torch.no_grad():outputs = model(** inputs)# 2. TensorRT优化(需安装tensorrt和torch_tensorrt)
import torch_tensorrt# 转换模型为TensorRT格式(FP16精度)
model_trt = torch_tensorrt.compile(model,inputs=[torch_tensorrt.Input(shape=inputs["input_ids"].shape, dtype=torch.int32),torch_tensorrt.Input(shape=inputs["attention_mask"].shape, dtype=torch.int32)],enabled_precisions={torch.float16},workspace_size=1 << 25
)# TensorRT推理(速度比原生PyTorch快2-5倍)
with torch.no_grad():outputs_trt = model_trt(inputs["input_ids"], inputs["attention_mask"])

二、120道Transformer面试题目录列表

文章序号Transformer 120道
1Transformer面试题及详细答案120道(01-10)
2Transformer面试题及详细答案120道(11-20)
3Transformer面试题及详细答案120道(21-30)
4Transformer面试题及详细答案120道(31-40)
5Transformer面试题及详细答案120道(41-50)
6Transformer面试题及详细答案120道(51-60)
7Transformer面试题及详细答案120道(61-70)
8Transformer面试题及详细答案120道(71-80)
9Transformer面试题及详细答案120道(81-90)
10Transformer面试题及详细答案120道(91-100)
11Transformer面试题及详细答案120道(101-110)
12Transformer面试题及详细答案120道(111-120)
http://www.dtcms.com/a/469177.html

相关文章:

  • 可以做软件的网站有哪些功能中国新闻社待遇
  • 【鉴权架构】SpringBoot + Sa-Token + MyBatis + MySQL + Redis 实现用户鉴权、角色管理、权限管理
  • 三星S25Ultra/S24安卓16系统Oneui8成功获取完美root权限+LSP框架
  • ffmpeg 播放视频 暂停
  • 老题新解|大整数的因子
  • Eureka的自我保护机制
  • 探索颜色科学:从物理现象到数字再现
  • AirSim_SimJoyStick
  • 第五部分:VTK高级功能模块(第149章 Remote模块 - 远程模块类)
  • 道可云人工智能每日资讯|《政务领域人工智能大模型部署应用指引》发布
  • 自己做网站哪家好win10 wordpress安装教程视频
  • wordpress整体搬迁宁波seo深度优化平台有哪些
  • 4K Wallpaper mac v2.7.dmg 安装教程(Mac电脑详细安装步骤4K壁纸Mac下载安装)
  • Mac 软件出现「应用程序“xxx”不能打开」的解决办法
  • 东航集团客户网站是哪家公司建设4k高清视频素材网站
  • Compose 在Row、Column上使用focusRestorer修饰符失效原因
  • Sora 2:当AI视频“以假乱真”,内容创作进入新纪元,体验AI创作能力
  • 推荐一个浏览器代理插件(Tajang Proxy),支持Chrome和Edge
  • conda|如何通过命令行在mac上下载conda
  • VS Code 二次开发:跨平台图标定制全攻略
  • 关于微信小程序开发几点总结
  • 杭州建站价格邢台wap网站建设费用
  • kafka4使用记录
  • 2100AI智能生活
  • 网站开发交流群做网站线上线下价格混乱
  • AI:让驾驶体验个性化!
  • 由Nacos允许配置访问代理启发的Node前端部署路径转发探究
  • vue - JS 判断客户端是苹果 iOS 还是安卓 Android(封装好的方法直接调用)二种解决方案
  • 路由器如何判断数据转发目标
  • BEM命名规范