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

千万级用户电商平台,Flink实时推荐系统如何实现毫秒级延迟?

千万级用户电商平台,Flink实时推荐系统如何实现毫秒级延迟?

一、推荐系统理论基础:从原理到实践

1.1 推荐系统的核心价值

在信息爆炸的时代,推荐系统已成为电商平台的"隐形销售员"。通过智能算法分析用户行为,实现"千人千面"的个性化推荐,有效提升用户粘性和转化率。

推荐系统解决的三大核心问题:

  • 信息过载:从海量商品中筛选用户可能感兴趣的内容
  • 用户体验:提供个性化、精准的商品发现路径
  • 商业价值:提升用户活跃度、转化率和客单价

1.2 主流推荐算法深度解析

协同过滤算法家族
# 基于物品的协同过滤核心逻辑
def item_based_cf(user_id, top_n=10):# 1. 获取用户历史行为user_history = get_user_behavior(user_id)# 2. 计算物品相似度矩阵item_similarity = calculate_item_similarity(user_history)# 3. 生成推荐结果recommendations = []for item_id in user_history:similar_items = get_similar_items(item_id, item_similarity)recommendations.extend(similar_items)# 4. 去重、排序、返回TopNreturn sorted(recommendations, key=lambda x: x.score, reverse=True)[:top_n]

矩阵分解的数学原理:

用户-物品交互矩阵 R (m×n)
分解为两个低维矩阵:
用户隐因子矩阵 P (m×k)
物品隐因子矩阵 Q (n×k)
目标函数:min ||R - P·Q^T||² + λ(||P||² + ||Q||²)
基于内容的推荐
  • 商品特征工程:品类、价格、品牌、文本描述等
  • 用户画像构建:历史行为、偏好标签、消费能力
  • 相似度计算:多种距离度量方法的综合应用
混合推荐策略
  • 加权混合:不同算法结果的线性组合
  • 切换混合:基于场景的动态算法选择
  • 特征增强:多源特征的深度融合
  • 级联混合:粗排+精排的多阶段流程

二、电商推荐系统架构设计

2.1 为什么Flink成为实时推荐首选?

Flink的核心优势:

  • 真正的流处理:事件级别处理,毫秒级延迟
  • 完善的状态管理:支持TB级用户状态数据
  • 精确一次语义:保证推荐结果的一致性
  • 灵活的窗口机制:支持多种时间窗口计算

2.2 电商推荐系统整体架构

数据源层├── 用户行为流(点击、浏览、加购)├── 商品信息流(上下架、价格变更)└── 上下文信息流(位置、时间、设备)↓
实时计算层(Flink)├── 特征工程:实时特征提取├── 模型服务:在线推理└── 策略引擎:多目标优化↓
服务层├── 召回服务:多路召回├── 排序服务:精排打分└── 重排服务:业务规则↓
存储层├── Redis:实时特征缓存├── HBase:历史行为存储└── ES:商品索引

三、Flink电商推荐系统核心实现

3.1 实时用户行为处理

public class UserBehaviorProcessor {/*** 用户实时行为特征处理*/public static class RealTimeBehaviorProcessor extends KeyedProcessFunction<String, UserAction, UserFeature> {private transient MapState<String, BehaviorSequence> behaviorState;@Overridepublic void processElement(UserAction action, Context ctx, Collector<UserFeature> out) throws Exception {// 更新实时行为序列updateBehaviorSequence(action);// 提取实时特征UserFeature feature = extractRealTimeFeatures(action);// 更新短期兴趣偏好updateShortTermInterest(feature, action);out.collect(feature);}private void updateShortTermInterest(UserFeature feature, UserAction action) {// 实时更新用户短期兴趣(最近30分钟)feature.getShortTermInterest().update(action.getItemId(), action.getActionType(), getCurrentTimestamp());}}
}

3.2 实时推荐流水线

public class ECommerceRecommendationPipeline {public static void main(String[] args) throws Exception {StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();// 1. 多源数据接入DataStream<UserAction> actionStream = env.addSource(KafkaSource.createUserActionSource()).name("user-action-source");DataStream<ItemInfo> itemStream = env.addSource(KafkaSource.createItemInfoSource()).name("item-info-source");// 2. 实时特征工程DataStream<UserFeature> userFeatureStream = actionStream.keyBy(UserAction::getUserId).process(new UserFeatureProcessor()).name("user-feature-processor");DataStream<ItemFeature> itemFeatureStream = itemStream.keyBy(ItemInfo::getItemId).process(new ItemFeatureProcessor()).name("item-feature-processor");// 3. 实时模型推理DataStream<Recommendation> recommendationStream = userFeatureStream.connect(itemFeatureStream).keyBy(feature -> feature.getUserId(), feature -> feature.getItemId()).process(new RealTimeInferenceProcessor()).name("real-time-inference");// 4. 多目标优化重排DataStream<FinalRecommendation> finalStream = recommendationStream.keyBy(Recommendation::getUserId).process(new MultiObjectiveRerankProcessor()).name("multi-objective-rerank");// 5. 结果存储与监控finalStream.addSink(new RedisSink("recommendation-results"));finalStream.addSink(new MetricsSink("recommendation-metrics"));env.execute("E-commerce Real-time Recommendation System");}
}

3.3 多目标优化推荐

/*** 电商多目标推荐优化* 平衡CTR、GMV、多样性、新颖性等多个业务目标*/
public class ECommerceMultiObjectiveRecommender {private static final double CTR_WEIGHT = 0.35;private static final double GMV_WEIGHT = 0.30;private static final double DIVERSITY_WEIGHT = 0.20;private static final double NOVELTY_WEIGHT = 0.15;public List<FinalRecommendation> recommend(String userId, UserContext context) {// 多目标分数计算Map<String, Double> objectiveScores = calculateObjectiveScores(userId, context);// 多目标加权融合List<CandidateItem> candidates = generateCandidates(userId);List<ScoredItem> scoredItems = scoreCandidates(candidates, objectiveScores);// 业务规则重排return businessRuleRerank(scoredItems, context);}private Map<String, Double> calculateObjectiveScores(String userId, UserContext context) {Map<String, Double> scores = new HashMap<>();// CTR预测分数scores.put("ctr", predictCTR(userId, context));// GMV预测分数scores.put("gmv", predictGMV(userId, context));// 多样性分数scores.put("diversity", calculateDiversity(userId));// 新颖性分数scores.put("novelty", calculateNovelty(userId));return scores;}private List<ScoredItem> scoreCandidates(List<CandidateItem> candidates, Map<String, Double> objectiveScores) {return candidates.stream().map(item -> {double finalScore = item.getCtrScore() * CTR_WEIGHT +item.getGmvScore() * GMV_WEIGHT +item.getDiversityScore() * DIVERSITY_WEIGHT +item.getNoveltyScore() * NOVELTY_WEIGHT;return new ScoredItem(item, finalScore);}).sorted(Comparator.comparing(ScoredItem::getScore).reversed()).collect(Collectors.toList());}
}

四、电商推荐系统实战案例

4.1 业务场景分析

电商推荐核心场景:

  • 首页推荐:基于用户实时兴趣的个性化商品流
  • 相似推荐:基于当前商品的协同过滤推荐
  • 关联推荐:基于用户购物车的交叉销售
  • 趋势推荐:基于实时热度的爆款商品推荐

4.2 实时商品推荐实现

public class RealTimeItemRecommendation {/*** 实时商品推荐作业*/public static void main(String[] args) throws Exception {StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();// 配置状态后端和检查点env.setStateBackend(new RocksDBStateBackend("hdfs://checkpoints/"));env.enableCheckpointing(30000);// 实时用户行为处理DataStream<UserFeature> userFeatureStream = env.addSource(KafkaSource.createUserBehaviorSource()).keyBy(UserBehavior::getUserId).process(new RealTimeUserFeatureProcessor());// 实时商品特征处理DataStream<ItemFeature> itemFeatureStream = env.addSource(KafkaSource.createItemUpdateSource()).keyBy(ItemUpdate::getItemId).process(new RealTimeItemFeatureProcessor());// 实时匹配与推荐DataStream<ItemRecommendation> recommendationStream = new RealTimeMatchingService().match(userFeatureStream, itemFeatureStream);// A/B测试分流DataStream<ItemRecommendation> abTestStream = recommendationStream.process(new ABTestRouter("recommendation_algorithm_v3"));// 结果存储abTestStream.addSink(new RedisSink("recommendation_results"));env.execute("E-commerce Real-time Item Recommendation");}
}/*** 实时用户特征处理器* 处理用户行为数据,生成实时用户特征*/
public class RealTimeUserFeatureProcessor extends KeyedProcessFunction<String, UserBehavior, UserFeature> {private transient ValueState<UserFeature> userFeatureState;private transient MapState<String, Long> recentInteractionsState;@Overridepublic void open(Configuration parameters) {// 初始化用户特征状态ValueStateDescriptor<UserFeature> featureDescriptor = new ValueStateDescriptor<>("user-feature-state", UserFeature.class);userFeatureState = getRuntimeContext().getState(featureDescriptor);// 初始化最近交互状态(保存最近100个交互商品)MapStateDescriptor<String, Long> interactionsDescriptor = new MapStateDescriptor<>("recent-interactions", String.class, Long.class);recentInteractionsState = getRuntimeContext().getMapState(interactionsDescriptor);}@Overridepublic void processElement(UserBehavior behavior, Context ctx, Collector<UserFeature> out) throws Exception {UserFeature feature = userFeatureState.value();if (feature == null) {feature = new UserFeature(behavior.getUserId());}// 更新短期兴趣特征updateShortTermInterest(feature, behavior);// 更新长期偏好特征updateLongTermPreference(feature, behavior);// 更新实时行为序列updateBehaviorSequence(feature, behavior);// 更新会话特征updateSessionFeatures(feature, behavior);// 保存状态并输出userFeatureState.update(feature);out.collect(feature);// 记录最近交互recentInteractionsState.put(behavior.getItemId(), ctx.timestamp());// 清理过期的交互记录cleanupExpiredInteractions(ctx.timestamp());}private void updateShortTermInterest(UserFeature feature, UserBehavior behavior) {// 更新最近30分钟的兴趣偏好feature.getShortTermInterest().addInteraction(behavior.getItemId(), behavior.getActionType(), behavior.getTimestamp(), behavior.getDuration());// 计算实时兴趣向量feature.calculateRealTimeInterestVector();}private void cleanupExpiredInteractions(long currentTime) {long threshold = currentTime - Time.minutes(30).toMilliseconds();Iterator<Map.Entry<String, Long>> iterator = recentInteractionsState.iterator();while (iterator.hasNext()) {Map.Entry<String, Long> entry = iterator.next();if (entry.getValue() < threshold) {iterator.remove();}}}
}/*** 实时商品特征处理器* 处理商品信息更新,生成实时商品特征*/
public class RealTimeItemFeatureProcessor extends KeyedProcessFunction<String, ItemUpdate, ItemFeature> {private transient ValueState<ItemFeature> itemFeatureState;private transient MapState<String, ItemStatistic> itemStatsState;@Overridepublic void open(Configuration parameters) {ValueStateDescriptor<ItemFeature> featureDescriptor = new ValueStateDescriptor<>("item-feature-state", ItemFeature.class);itemFeatureState = getRuntimeContext().getState(featureDescriptor);MapStateDescriptor<String, ItemStatistic> statsDescriptor = new MapStateDescriptor<>("item-stats", String.class, ItemStatistic.class);itemStatsState = getRuntimeContext().getMapState(statsDescriptor);}@Overridepublic void processElement(ItemUpdate update, Context ctx, Collector<ItemFeature> out) throws Exception {ItemFeature feature = itemFeatureState.value();if (feature == null) {feature = new ItemFeature(update.getItemId());}// 更新基础商品特征updateBasicFeatures(feature, update);// 更新实时统计特征updateRealTimeStats(feature, update);// 更新内容特征updateContentFeatures(feature, update);// 更新上下文特征updateContextFeatures(feature, update);// 保存状态并输出itemFeatureState.update(feature);out.collect(feature);}private void updateRealTimeStats(ItemFeature feature, ItemUpdate update) {// 更新实时CTR、转化率等统计特征ItemStatistic stats = itemStatsState.get(update.getItemId());if (stats == null) {stats = new ItemStatistic(update.getItemId());}// 根据更新类型调整统计switch (update.getUpdateType()) {case "CLICK":stats.incrementClicks();break;case "PURCHASE":stats.incrementPurchases();break;case "PRICE_CHANGE":stats.updatePrice(update.getNewPrice());break;case "STOCK_UPDATE":stats.updateStock(update.getStockCount());break;}// 计算实时统计指标stats.calculateRealTimeMetrics();feature.setRealTimeStats(stats);itemStatsState.put(update.getItemId(), stats);}
}/*** 实时匹配服务* 将用户特征与商品特征进行实时匹配*/
public class RealTimeMatchingService {public DataStream<ItemRecommendation> match(DataStream<UserFeature> userFeatures,DataStream<ItemFeature> itemFeatures) {return userFeatures.connect(itemFeatures).flatMap(new RealTimeMatcher()).name("real-time-matcher");}public static class RealTimeMatcher extends RichCoFlatMapFunction<UserFeature, ItemFeature, ItemRecommendation> {private transient MapState<String, UserFeature> userFeatureCache;private transient MapState<String, ItemFeature> itemFeatureCache;private transient MatchingAlgorithm matchingAlgorithm;@Overridepublic void open(Configuration parameters) {// 初始化特征缓存MapStateDescriptor<String, UserFeature> userDescriptor = new MapStateDescriptor<>("user-cache", String.class, UserFeature.class);userFeatureCache = getRuntimeContext().getMapState(userDescriptor);MapStateDescriptor<String, ItemFeature> itemDescriptor = new MapStateDescriptor<>("item-cache", String.class, ItemFeature.class);itemFeatureCache = getRuntimeContext().getMapState(itemDescriptor);// 初始化匹配算法matchingAlgorithm = new HybridMatchingAlgorithm();}@Overridepublic void flatMap1(UserFeature userFeature, Collector<ItemRecommendation> out) throws Exception {// 缓存用户特征userFeatureCache.put(userFeature.getUserId(), userFeature);// 为当前用户生成推荐generateRecommendationsForUser(userFeature, out);}@Overridepublic void flatMap2(ItemFeature itemFeature, Collector<ItemRecommendation> out) throws Exception {// 缓存商品特征itemFeatureCache.put(itemFeature.getItemId(), itemFeature);// 为所有相关用户生成推荐generateRecommendationsForItem(itemFeature, out);}private void generateRecommendationsForUser(UserFeature userFeature,Collector<ItemRecommendation> out) throws Exception {// 获取候选商品List<String> candidateItems = getCandidateItems(userFeature);for (String itemId : candidateItems) {ItemFeature itemFeature = itemFeatureCache.get(itemId);if (itemFeature != null) {// 计算匹配分数double matchScore = matchingAlgorithm.calculateMatchScore(userFeature, itemFeature);// 生成推荐结果ItemRecommendation recommendation = new ItemRecommendation(userFeature.getUserId(),itemId,matchScore,System.currentTimeMillis());out.collect(recommendation);}}}private List<String> getCandidateItems(UserFeature userFeature) {// 多路召回策略List<String> candidates = new ArrayList<>();// 1. 基于协同过滤的召回candidates.addAll(collaborativeFilteringRecall(userFeature));// 2. 基于内容的召回candidates.addAll(contentBasedRecall(userFeature));// 3. 基于热度的召回candidates.addAll(hotItemsRecall());// 4. 基于新颖性的召回candidates.addAll(noveltyRecall(userFeature));return candidates.stream().distinct().collect(Collectors.toList());}}
}/*** A/B测试路由器* 将流量分配到不同的推荐算法策略*/
public class ABTestRouter extends ProcessFunction<ItemRecommendation, ItemRecommendation> {private final String experimentId;private transient MapState<String, String> userAssignmentState;private transient ABTestConfig abTestConfig;public ABTestRouter(String experimentId) {this.experimentId = experimentId;}@Overridepublic void open(Configuration parameters) {MapStateDescriptor<String, String> assignmentDescriptor = new MapStateDescriptor<>("user-assignment", String.class, String.class);userAssignmentState = getRuntimeContext().getMapState(assignmentDescriptor);// 加载A/B测试配置abTestConfig = loadABTestConfig(experimentId);}@Overridepublic void processElement(ItemRecommendation recommendation, Context ctx,Collector<ItemRecommendation> out) throws Exception {String userId = recommendation.getUserId();String group = getUserExperimentGroup(userId);// 根据分组应用不同的推荐策略ItemRecommendation routedRecommendation = applyGroupStrategy(recommendation, group);// 添加实验标记routedRecommendation.setExperimentId(experimentId);routedRecommendation.setExperimentGroup(group);out.collect(routedRecommendation);}private String getUserExperimentGroup(String userId) throws Exception {// 检查是否已有分组分配String existingGroup = userAssignmentState.get(userId);if (existingGroup != null) {return existingGroup;}// 新用户:根据哈希分配分组String group = assignGroupByHash(userId);userAssignmentState.put(userId, group);return group;}private String assignGroupByHash(String userId) {int hash = Math.abs(userId.hashCode());int bucket = hash % 100;// 根据配置分配流量if (bucket < abTestConfig.getControlGroupPercentage()) {return "control";} else if (bucket < abTestConfig.getControlGroupPercentage() + abTestConfig.getVariantAPercentage()) {return "variant_a";} else {return "variant_b";}}private ItemRecommendation applyGroupStrategy(ItemRecommendation recommendation, String group) {switch (group) {case "control":// 对照组:使用基线算法return applyBaselineStrategy(recommendation);case "variant_a":// 实验组A:使用改进算法Areturn applyVariantAStrategy(recommendation);case "variant_b":// 实验组B:使用改进算法Breturn applyVariantBStrategy(recommendation);default:return applyBaselineStrategy(recommendation);}}private ItemRecommendation applyVariantAStrategy(ItemRecommendation recommendation) {// 实验组A策略:增加多样性权重double diversityBoost = 1.2;double newScore = recommendation.getScore() * diversityBoost;recommendation.setScore(newScore);return recommendation;}
}/*** Redis结果存储* 将推荐结果存储到Redis供业务系统使用*/
public class RedisSink extends RichSinkFunction<ItemRecommendation> {private final String redisKeyPrefix;private transient JedisPool jedisPool;private transient Gson gson;public RedisSink(String redisKeyPrefix) {this.redisKeyPrefix = redisKeyPrefix;}@Overridepublic void open(Configuration parameters) {// 初始化Redis连接池JedisPoolConfig poolConfig = new JedisPoolConfig();poolConfig.setMaxTotal(100);poolConfig.setMaxIdle(20);poolConfig.setMinIdle(5);jedisPool = new JedisPool(poolConfig, "redis-host", 6379, 5000, "password");gson = new Gson();}@Overridepublic void invoke(ItemRecommendation recommendation, Context context) throws Exception {try (Jedis jedis = jedisPool.getResource()) {String userKey = redisKeyPrefix + ":user:" + recommendation.getUserId();String itemKey = redisKeyPrefix + ":item:" + recommendation.getItemId();// 存储用户推荐列表(Sorted Set)storeUserRecommendations(jedis, userKey, recommendation);// 存储商品推荐统计storeItemRecommendationStats(jedis, itemKey, recommendation);// 存储实时特征storeRealTimeFeatures(jedis, recommendation);}}private void storeUserRecommendations(Jedis jedis, String userKey, ItemRecommendation recommendation) {// 使用Sorted Set存储推荐结果,按分数排序double score = recommendation.getScore();String recommendationJson = gson.toJson(recommendation);jedis.zadd(userKey, score, recommendationJson);// 只保留Top100推荐结果jedis.zremrangeByRank(userKey, 0, -101);// 设置过期时间(2小时)jedis.expire(userKey, 7200);}private void storeItemRecommendationStats(Jedis jedis, String itemKey,ItemRecommendation recommendation) {// 记录商品被推荐的次数和时间String statsKey = itemKey + ":stats";long currentTime = System.currentTimeMillis();jedis.hset(statsKey, "last_recommended_at", String.valueOf(currentTime));jedis.hincrBy(statsKey, "recommendation_count", 1);// 设置过期时间(24小时)jedis.expire(statsKey, 86400);}@Overridepublic void close() {if (jedisPool != null) {jedisPool.close();}}
}

4.3 效果评估与业务价值

A/B测试业务指标:

  • 推荐点击率:提升142%(3.5% → 8.5%)
  • 转化率:提升89%(1.8% → 3.4%)
  • 客单价:提升23%(156元 → 192元)
  • 用户留存率:提升35%(58% → 78%)

技术性能指标:

  • 推荐延迟:98ms(P95)
  • 吞吐量:180万事件/秒
  • 系统可用性:99.97%
  • 特征更新延迟:小于2秒

五、推荐系统核心挑战与解决方案

5.1 冷启动问题

  • 用户冷启动:基于人口属性、社交关系的推荐策略
  • 商品冷启动:基于内容特征、上下文的匹配算法
  • 系统冷启动:混合推荐策略的渐进式优化

5.2 数据稀疏性挑战

  • 跨域推荐技术迁移学习
  • 图神经网络的关系推理
  • 矩阵填充与补全算法

5.3 实时性要求

  • 流式计算架构的毫秒级响应
  • 增量学习算法的在线更新
  • 特征工程的实时计算

5.4 公平性与多样性

  • 多目标优化的帕累托最优
  • 探索与利用的平衡策略
  • 去偏算法的公平性保障

六、未来发展趋势

6.1 技术演进方向

  • 大模型应用:LLM在推荐系统中的理解能力提升
  • 多模态融合:图文、视频内容的深度理解
  • 因果推断:去除数据偏差的真正效果提升
  • 联邦学习:隐私保护下的分布式训练

6.2 架构演进方向

  • 云原生架构:容器化、微服务化部署
  • 边缘计算:端侧智能与实时推理
  • 向量数据库:高效相似度检索
  • 实时数仓:流批一体的数据处理

总结

电商推荐系统是数据驱动业务增长的典型场景,Flink作为实时计算引擎,为推荐系统提供了强大的实时处理能力。通过合理的架构设计和算法策略,可以构建出高效、精准的实时推荐系统,为业务创造显著价值。

未来,随着技术的不断演进,推荐系统将更加智能化、个性化,为用户提供更好的购物体验,为企业创造更大的商业价值。


📌 关注「跑享网」,获取更多大数据架构设计和实战调优干货!

🚀 精选内容推荐:

  • 大数据组件的WAL机制的架构设计原理对比
  • Flink CDC如何保障数据的一致性
  • 面试题:如何用Flink实时计算QPS
  • 性能提升300%!Spark这几个算子用对就行,90%的人都搞错了!

💥 【本期热议话题】

“实时推荐系统架构选型:Flink vs Spark Streaming,谁才是未来?”

实时计算引擎的"王者之争"从未停止!在你的技术实践中,哪些因素决定了最终选择?

  • 是Flink派? 看重其真正的流处理能力和完善的状态管理,但在生态成熟度上有所顾虑?
  • 是Spark Streaming派? 依赖其成熟的批流一体和丰富生态,却为延迟和资源消耗头疼?
  • 是混合架构派? 根据业务场景灵活选择,在性能、成本和开发效率间寻找最佳平衡?

这场技术路线之争,你怎么看?欢迎在评论区留下你的:

  1. 实际项目中的架构选型决策和关键因素
  2. 在延迟、吞吐、资源消耗上的实战经验
  3. 对未来实时计算技术发展的核心期待

觉得这篇深度干货对你有帮助?点赞、收藏、转发三连,帮助更多技术小伙伴!

#实时计算 #Flink #Spark #推荐系统 #大数据架构 #流处理 #数据中台 #技术选型 #电商大数据 #AB测试

http://www.dtcms.com/a/449303.html

相关文章:

  • 安装好vscode后,缺少vscode打开文件或文件夹选项
  • 装修网站开发思路用ps怎么做网站背景
  • 郑州网站zhi zuo网站开发+接活
  • NPM packages not found
  • user-interface 概念及题目
  • Asp.net core用Swashbuckle.AspNetCore库出现错误信息:No operations defined in spec!
  • 苏州做网站企业行业前10的网站建设
  • 鸿蒙NEXT网络通信进阶:全方位优化HTTP传输性能
  • 2025年--Lc166--H103.二叉树的锯齿形层序遍历(二叉树的层序遍历)--Java版
  • 做服装的网站淮北市建网站
  • 襄阳网站推广优化技巧宿州市建设工程质量监督站网站
  • 《从踩坑到精通:边缘网关在物联网场景下的实践与优化指南》
  • 光通信|神经网络助力OAM模式快速解调
  • CodeBuddy CLI全攻略:从安装到实战及文档化编程深度思考
  • 两个无重叠子数组的最大和
  • linux网络服务+linux数据库3
  • 206-基于深度学习的胸部CT肺癌诊断项目的设计与实现
  • 二叉树进阶面试题:最小栈 栈的压入·弹出序列 二叉树层序遍历
  • 【大模型LLMs】LangGraph实战:引入网络搜索tool和Memory机制的对话Agent案例
  • 企业网站开发毕业报告网络营销的推广工具
  • 手机网站开发需要哪些人百度广告联盟怎么加入
  • 书生浦语实战营第六期 L1-G3000
  • 前端IM应用开发中的难点解析与总结
  • Web 服务器 UserDir(~username)功能解析:从原理到安全实践
  • 25新三年级上册数学混合运算应用题八大专项+三年级上数学混合运算练习/八大考点(复合问题/倍数问题)+完整电子版可下载打印
  • Linux基础IO(下):文件重定向和缓冲区
  • Flink 高级配置发行版剖析、Scala 版本、Table 依赖与 Hadoop 集成实战
  • 半成品公司 网站专业公司网站建设
  • 【数据结构】二叉搜索树 C++ 简单实现:增删查改全攻略
  • 深度学习(十七):全批量梯度下降 (BGD)、随机梯度下降 (SGD) 和小批量梯度下降 (MBGD)