微服务架构落地:采购业务(下) —— 质检扣杂与采购入库,大宗特有的“物理账”如何算清?

Linux Swap 子系统:架构、内存管理与虚拟化 Swap Linux Swap机制通过将不活跃内存页移至磁盘或压缩内存,扩展系统有效内存容量,缓解内存压力。传统架构中,逻辑Swap槽与物理存储绑定,导致资源浪费,尤其在使用Zswap等压缩技术时。为此,Vswap与Xswap提出虚拟化方案:前者以XArray实现灵活映射,支持多后端迁移;后者采用稀疏映射,简化管理但容量固定。二者在架构设计、资源记账与动态扩展上各有权衡,反映了内核开发中对性能、可维护性与灵活性的深层考量。 阅读详情

大宗商品销采运储系统・六层架构连载(业务服务层)

上一篇我们完成了长协合同与执行子单的拆分,供应商的货终于送到了场站。

如果是普通电商,货车到了直接扫码入库。但在大宗商品(煤炭、矿石、粮食等)领域,货车到了只是第一步。

大宗商品的痛点是:账面重量 ≠ 实际物理重量。
供应商发货单上写的是 100 吨,但货车过磅可能只有 98 吨;更严重的是,经过化验,发现这批货水分超标 2%。这就意味着,你花钱买的一部分是水。

这就是大宗商品极其核心的“按质论价、过磅扣杂”环节。如果这一步系统算错了,企业会直接面临几十上百万的真金白银损失。

一句话定调:

大宗采购入库,不是简单的数量加法,而是一次由“硬件采集 + 质检化验 + 规则计算”共同完成的物理账校准。


一、业务痛点:为什么大宗入库极其复杂?

  1. 过磅防作弊难:大货车司机可能会“压磅”、冲磅,甚至两辆车同时上磅,导致地磅数据虚高。

  2. 质检盲检要求高:为了避免化验员和供应商勾结,化验必须是“盲检”(化验员不知道这车货是谁的)。

  3. 扣杂公式极度复杂:水分超标扣重、硫分超标罚款、灰分超标拒收。这些规则随时在变。


二、过磅防作弊:IoT 硬件联动

过磅不是人工敲键盘录入(人工录入存在不可信),必须引入物联网硬件。

防作弊链路:

  1. 车辆上磅,红外对射仪感应车辆完全在磅上(防止压磅)。

  2. 车牌识别摄像头抓拍车牌,与系统预约提货单比对。

  3. 地磅仪表通过串口/网口实时读取重量。

  4. 如果重量稳定 3 秒,且红外无遮挡,系统自动锁定重量,抓拍车厢照片留存证据。

这套硬件交互通常封装在履约域(场站服务),采集完成后,生成一条“过磅流水记录”,通过 MQ 发给采购域和质检域。

图片


三、质检化验与“扣重防损”计算(结合规则引擎)

货过完磅了,化验室拿走了样品。化验结果出来后,真正的计算才开始。

1. 复用规则引擎算“折标重量”

在前面篇章中,我们用规则引擎算价格。在这里,我们同样用规则引擎来算扣重。
不同品种(如焦煤、铁矿石)的扣杂公式完全不同,用规则引擎动态配置,极其灵活。

质检扣杂脚本示例(假设结果)(存在配置中心):

// 假设化验结果为:化验水分 water,化验灰分 ash// 合同标准水分 standardWater = 8%,超标 1% 扣重 1.5%
if (water > standardWater) {    // 计算水分超标比例    overRate = water - standardWater;    // 计算扣重百分比    deductRate = overRate * 1.5;} else {    deductRate = 0;}
// 如果硫分严重超标,直接拒收或重罚if (sulfur > 1.5) {    deductRate = deductRate + 5.0; // 直接多扣5%的重量}
// 最终折标重量 = 毛重 * (1 - 扣重百分比)finalWeight = grossWeight * (1 - deductRate / 100.0);return finalWeight;

2. 盲检机制设计

化验单里绝对不包含供应商 ID。系统只接收“过磅流水号”和“化验指标”。
只有等化验单审核通过,系统才通过内部映射表,把化验结果和供应商对应起来,防止人为篡改。

图片


四、状态机驱动:生成最终的采购入库单

当折标重量算出来后,终于可以入库了。这里必须由状态机(前面内容)来严格管控。

状态流转:

  1. 待过磅:车辆入场。

  2. 已过磅待化验:过磅完成,锁定毛重、皮重。

  3. 化验完成待入库:扣杂计算完成,有了净重。

  4. 已入库:库存域真正增加了可用库存。

核心落库伪代码

@Service
public class PurchaseInboundService {

    @Autowired
    private StateMachine<InboundState, InboundEvent, InboundContext> inboundStateMachine;

    @Autowired
    private RuleEngineService ruleEngineService;

    // 处理质检完成事件,计算重量并流转状态
    @Transactional
    public void processQualityInspection(String recordNo, QualityResult qualityResult) {
        // 1. 获取过磅记录
        ArrivalRecord record = arrivalRecordMapper.selectByNo(recordNo);
        if (record.getStatus() != InboundState.PENDING_INSPECTION) {
            throw new BusinessException("当前单据状态不允许质检入库");
        }

        // 2. 组装规则引擎上下文
        DeductContext ctx = new DeductContext();
        ctx.setGrossWeight(record.getGrossWeight());
        ctx.setWater(qualityResult.getWater());
        ctx.setSulfur(qualityResult.getSulfur());

        // 3. 调用规则引擎,计算最终折标净重
        BigDecimal finalNetWeight = ruleEngineService.calculateDeduct(ctx);

        // 4. 触发状态机流转(化验完成 -> 待入库)
        InboundContext stateContext = new InboundContext();
        stateContext.setRecordNo(recordNo);
        stateContext.setNetWeight(finalNetWeight);

        InboundState nextState = inboundStateMachine.fireEvent(
                record.getStatus(), InboundEvent.INSPECTION_PASSED, stateContext);

        // 5. 更新本地记录
        record.setNetWeight(finalNetWeight);
        record.setStatus(nextState);
        record.setQualityResult(JSON.toJSONString(qualityResult));
        arrivalRecordMapper.updateById(record);

        // 6. 发送领域事件,通知库存域增加库存
        rocketMQTemplate.convertAndSend("topic_inventory_inbound", 
            new InboundEventMsg(recordNo, record.getGoodsCode(), finalNetWeight));
    }
}

五、跨域联动:库存域如何安全地“加库存”?

采购域发出了 MQ 消息,库存域(前面划分的核心域)接收到消息后,必须完成实际的库存落库。

库存域落库的防重与并发控制:

  1. 幂等控制:监听 MQ 时,根据 recordNo(过磅流水号)校验,防止 MQ 重发导致库存多加。

  2. 合并库存:如果该仓库下已经有相同批次/品牌的库存,直接执行 UPDATE stock SET qty = qty + ? WHERE ...。如果是新批次,则 INSERT。

  3. 库存流水:增加多少库存,必须生成一条对应的“库存流入流水”,供后续对账和审计使用。

@Service
public class PurchaseInboundService {

    @Autowired
    private StateMachine<InboundState, InboundEvent, InboundContext> inboundStateMachine;

    @Autowired
    private RuleEngineService ruleEngineService;

    // 处理质检完成事件,计算重量并流转状态
    @Transactional
    public void processQualityInspection(String recordNo, QualityResult qualityResult) {
        // 1. 获取过磅记录
        ArrivalRecord record = arrivalRecordMapper.selectByNo(recordNo);
        if (record.getStatus() != InboundState.PENDING_INSPECTION) {
            throw new BusinessException("当前单据状态不允许质检入库");
        }

        // 2. 组装规则引擎上下文
        DeductContext ctx = new DeductContext();
        ctx.setGrossWeight(record.getGrossWeight());
        ctx.setWater(qualityResult.getWater());
        ctx.setSulfur(qualityResult.getSulfur());

        // 3. 调用规则引擎,计算最终折标净重
        BigDecimal finalNetWeight = ruleEngineService.calculateDeduct(ctx);

        // 4. 触发状态机流转(化验完成 -> 待入库)
        InboundContext stateContext = new InboundContext();
        stateContext.setRecordNo(recordNo);
        stateContext.setNetWeight(finalNetWeight);

        InboundState nextState = inboundStateMachine.fireEvent(
                record.getStatus(), InboundEvent.INSPECTION_PASSED, stateContext);

        // 5. 更新本地记录
        record.setNetWeight(finalNetWeight);
        record.setStatus(nextState);
        record.setQualityResult(JSON.toJSONString(qualityResult));
        arrivalRecordMapper.updateById(record);

        // 6. 发送领域事件,通知库存域增加库存
        rocketMQTemplate.convertAndSend("topic_inventory_inbound", 
            new InboundEventMsg(recordNo, record.getGoodsCode(), finalNetWeight));
    }
}

六、本篇小结

大宗采购的入库,是一场从物理世界(硬件)到数字世界(规则计算)的精准映射。

记住三句话:

  1. 过磅必须联动硬件防作弊,红线对射加车牌识别是标配。

  2. 质检盲检保公平,扣杂计算靠规则引擎动态配置。

  3. 入库动作由状态机严格把控,通过 MQ 解耦库存域的最终落库。

下篇预告:销售业务(上):现货挂牌与高并发抢单,Redis 防超卖的终极实战。

【法律领域】【合规领域】第一篇 法律合规 企业经营中的违法行为 法律安全 阅读详情

相关推荐

制造业数字化转型案例集:从32个标杆找到你的同类

数字化转型是制造企业从传统IT架构向云化、数据驱动演进的核心路径。其底层原理在于通过基础设施云化、数据中台建设与工业智能算法,重构生产与管理流程,使数据成为新的生产要素。技术价值体现在弹性计算、高可用架构与海量数据处理能力上,可显著降低运维成本、提升仿真效率。在应用场景中,覆盖ERP上云、数字工厂、区域工业互联网平台、C2M柔性生产等,从重型装备到小家电均能找到可复用的落地范式。本文基于32个标杆案例,从IT基础设施云化、数字工厂、工业智能等六个维度,梳理不同企业的转型决策逻辑与量化效果,帮助制造企业对照自

weixin_34185512的博客 481

高危工业场景人员定位系统设计:四类场景的架构选型与部署要点

本文由航飞光电一线工程团队整理,重点讨论高危工业场景下人员定位系统的架构选型思路。覆盖危化、矿山、港口、电力四类场景,拆解技术路线分工、融合引擎跨区切换实现,以及私有化/本地化部署中的工程难点,供架构师与技术负责人参考。

HF17513371855的博客 366

面试题-手撕NMS(非极大值抑制)

非极大值抑制(Non-Maximum Suppression,NMS)是一种常用于目标检测和计算机视觉中的算法,用于去除重叠的边界框,保留最可能是真实目标的边界框。其核心就是对一组检测框,找出其中属于同一个类别且分数最高的那个框,然后把和这个框的IOU值大于阈值的那些框都删掉。

zhaoyqcsdn的博客 1108

【STM32】 ADC 完全指南:从模拟信号采样量化到五大架构原理

本文系统介绍ADC核心概念与五大主流架构。模拟信号具时间与幅值连续性,需经采样(满足奈奎斯特准则防混叠)、量化(引入±1/2LSB误差,SNR≈6.02N+1.76dB)、编码三步转为数字信号。重点解析Flash(并行高速但受限于比较器数量)、SAR(逐次逼近,低功耗适合MCU如STM32)、双积分(高精度抗工频,用于万用表)、流水线(高速吞吐)及Σ-Δ(高分辨率,靠过采样与噪声整形)五类架构原理、优缺点与应用场景。强调分辨率≠精度,选型本质是速度、精度、功耗与面积的权衡。

专注后端与底层技术,分享实战干货与学习笔记,梦想进入字节跳动,步履不停,热爱不止。 484

Visual Studio 2022 社区版安装指南:从下载到配置的完整流程

本文详细介绍了Visual Studio 2022社区版的完整安装与配置流程,包括系统要求检查、官方下载步骤、工作负载选择、安装位置配置等关键环节。作为微软推出的免费集成开发环境,VS2022社区版支持多种编程语言,适合个人开发者和小型团队使用。文章还提供了常见问题解决和性能优化技巧,帮助用户高效完成开发环境搭建。

weixin_28829339的博客 879

CIC-IDS-2018数据集高效预处理实战:从数据清洗到特征整合

本文详细介绍了CIC-IDS-2018数据集的高效预处理方法,从数据清洗到特征整合的全流程实战。通过内存优化、异常值处理和特征工程等技巧,帮助网络安全研究人员快速处理大规模网络流量数据,提升机器学习模型的训练效率和准确率。特别针对特征数据的预处理提供了实用代码示例和优化建议。

weixin_29274969的博客 502

热管理系列之八:终局判断 - 浸没式冷却、混合架构与技术路线图

动力电池热管理三条路径的终局判断:液冷极致优化守住基盘,直冷在中高端渗透,浸没式冷却从概念到量产。附2026-2030技术路线图与关键产业信号分析。

weixin_54917114的博客 1144

华为OD机考双机位C卷 - 文件存储系统的排序(Java & Python & JS & GO & C++ & C)

华为OD机考双机位C卷 - 文件存储系统的排序, 提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。

算法大师! 780

零信任架构实战:基于天远运营商三要素详版V即时版构建自动化线上授信身份核验网关

破解线上信贷身份核验痛点:从离散证件图片审查到运营商三要素详版数据穿透直连 在互联网消费金融、小额循环信用贷款以及各类纯线上数字化授信平台的业务演进过程中,移动端进件的身份真实性校验是构筑整体合规风控体系的第一道关键屏障。随着移动互联网的高度普及,个人信贷申请全面向移动端 App、微信小程序以及轻量级 Web 门户迁移,“秒级审批、免抵押、纯线上放款”成为了

2501_94041864的博客 159

【云原生技术】SonarQube 生态中PMD插件和P3C插件详细介绍

4. 在项目中如何选择 / 组合 1. 小团队、对《阿里规约》认同度高 → 直接启用 **P3C**,配合 SonarJava 基本够用。 2. 追求全面 Bug/安全检测 + 额外编码规范 → **SonarJava + PMD**(必要时加 P3C 少量规则)。 3. 大型多团队,希望“一本规约”统一风格 → **P3C 为主**,再补充 SonarJava/PMD 的 Bug 与安全规则。 4. 通过 Quality Gate 控制:将 **Blocker/Critical** Bug

weixin_46453070的博客 1365

基于STM32L4XX、HAL库的CH182H1以太网收发器(PHY)驱动程序设计

define PHY_REG_PHYSCR 0x12 // PHY特殊控制寄存器。#define PHY_REG_PHYSTS 0x10 // PHY状态寄存器。#define PHY_REG_PHYIDR 0x11 // PHY标识寄存器。#define PHY_REG_ID1 0x02 // PHY标识符1。#define PHY_REG_ID2 0x03 // PHY标识符2。

zhusl6688的博客 403

政务知识库AI架构选型:强合规约束下的架构决策与落地路径

政务知识库是典型的强合规导向场景,架构选型的第一原则是「合规一票否决」:安全优先级高于效果,可控性优先级高于体验,所有技术决策必须先通过等保、密评、信创、数据不出域四大硬性红线校验,再在此基础上优化检索准确率与用户体验。对应部署在互联网政务服务域、政务外网办公域、涉密内网核心域,三域物理隔离,数据仅能通过审批流程单向摆渡,禁止跨网调用模型与流转数据。• 放弃通用文档加载器,基于公文格式标准开发定制化结构化解析器,自动提取文号、标题、发文机关、成文日期、生效日期、密级、主题词等元数据,与分片内容绑定入库。

2401_89363342的博客 365

Vue Print Designer——一款让打印模板的设计变简单的可视化打印设计器

Vue Print Designer——一款让打印模板的设计变简单的可视化打印设计器

bjzhang75的博客 684

AI高密度算力推动冷却架构升级,全球数据中心高功率CDU市场CAGR达23.0%

QYResearch调研显示,2025年全球数据中心高功率CDU市场规模大约为2.04亿美元,预计2032年将达到9.97亿美元,2026-2032期间年复合增长率(CAGR)为23.0%。未来几年,本行业具有很大不确定性,本文的2026-2032年的预测数据是基于过去几年的历史发展、行业专家观点、以及本文分析师观点,综合给出的预测。

QYR_11的博客 193

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

零信任架构实战:基于天远单人婚姻查询构建自动化智慧住房资格核验网关

破解公租房资格核查痛点:从传统纸质婚姻凭证抽检到权威民政数据穿透直连 在智慧城市公共租赁住房(公租房)、保障性租赁住房以及共有产权房等民生保障工程中,保障房资源的公平精准分配是住房保障管理中台的核心职责。按照现行住房保障准入政策,申请主体的家庭结构直接决定了配租资格准入与面积配给标准:单身家庭申请人通常享有特定的单人保障配额与独立的财产评估标准,要求申请人具

2501_94042197的博客 181

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

“伪私有化”的技术甄别:模型API外调与本地推理的架构差异

企业采购AI Agent平台时,“支持私有化”几乎成了标配话术。但“私有化”三个字背后,可能藏着一条你看不见的出站链路:管理后台在你的内网,模型推理却调用了外部API。这不是私有化,是“伪私有化”。本文从网络层、进程层、数据层和审计层四个维度,拆解模型API外调与本地推理的架构差异,给出可落地的技术甄别方法,附代码示例、状态机设计和熔断机制。

2501_93684580的博客 97

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

斯坦福 AI Agent 开发课程指南:从底层架构、工程实践到自主智能体

Agent 开发正在从框架调用走向系统工程。早期学习 Agent,可能只需要掌握 Prompt Engineering、Function Calling,以及 LangChain 等框架。如何设计稳定的任务执行循环。如何管理上下文与长期记忆。如何组织工具、环境和多 Agent 协作。如何保证长时间任务执行的可靠性。如何科学评估 Agent 的效果。如何优化成本、延迟与资源利用。如何持续提升系统能力。因此,

hello! 230

RDIMM、LRDIMM、UDIMM深度对比:寄存器架构、容量上限与平台适配

UDIMM、RDIMM与LRDIMM虽外形相同,但电气架构差异决定其性能与容量上限。UDIMM无缓冲,延迟低但容量受限;RDIMM通过RCD缓冲命令/地址,提升容量;LRDIMM进一步用数据缓冲器(DB)全链路减负,实现超大容量。三者互不兼容,平台适配严格,选型必须“平台先行”,类型错误无法通过降频或混插弥补。核心逻辑:先确认平台支持类型,再优化容量与频率,类型正确才是性能发挥的前提。

JGTX2706的博客 266

智能体架构之争:单Agent加Skills,还是多加几个Agent

Anthropic主张“一个Agent+Skills”取代多子智能体,以减少上下文丢失与成本;DeepSeek则提出“双层超智能体”架构,实现跨任务并行、主动响应。二者不矛盾:前者优化单任务内效率,后者突破多任务并发瓶颈。核心共识是:架构应由任务形态决定,而非组织或会话边界。未来关键在于量化拆分标准与防止Skills泛滥。

weixin_44592002的博客 258

蓝牙之通信架构

从应用、主机和控制器的分工入手,讲清 HCI、GAP、GATT、ATT、L2CAP 与安全协议如何配合,并通过一次温度读取理解蓝牙数据的完整传递过程。

2601_96393911的博客 212

Flux 架构:一个单向数据流库是怎么跑起来的

状态只有一份 + 数据单向流 + reducer 是纯函数 + 中间件链可组合 + 视图层声明式绑定。这 30 行就是这套思想的最小完整样本:两次useStore订阅、一次拿链式 dispatch、四个按钮对应四种 action(其中一种是 thunk 形态)。

sun_weitao的博客 109

广州政务信息发布系统信创适配实战:多场景架构选型与踩坑记录-优胜电子

我遇到过叫号系统的消息推送在达梦上延迟从 200ms 涨到 2s 的情况,排查发现是数据库连接池配置在国产环境下需要重新调优。政务大厅的信息发布场景本身不复杂:大厅主屏放叫号和公告,窗口条屏同步状态,走廊屏放指引,户外屏做宣传,会议室屏支持应急插播。建议在正式迁移前,搭一套和目标环境一致的测试平台,把每个场景的业务流程完整跑一遍。信创验收看的是端到端链路,播放盒是国产的但屏幕驱动不兼容,验收时可能卡住。:信创迁移前,把叫号相关的 SQL 在目标数据库上跑一遍压力测试,重点看分页查询和连接池。

Tuotuo_SEO的博客 280

《PCIe + BRAM架构(一):直接把DDR换成BRAM,只有读带宽没变》

本系列用同一块 XC7K325T 板卡、同一条 XDMA 通路,对比四种 PCIe 数据搬运架构:DDR 大缓存、Streaming、BRAM 轻缓存、多通道。本篇讲第三种:BRAM 架构。上一篇《PCIe + DDR架构(二):实测——更改上位机数据处理方式,带宽从1051.4 MB/s 涨到 1926.3 MB/s》

weixin_44017370的博客 368

从事件风暴到因果收敛:Mopheus多智能体协同事件触发架构与防循环实践

在构建生产级多智能体协同引擎的过程中,我们总结了三条核心工程准则:1.不可变因果链优于事后关系反查在高度并发且异步的多智能体网络中,因果关系的追溯绝不能依赖事后查库反查关联;将只增的因果祖先链显式封装在事件载荷与任务上下文中,以O(1)的内存检查实现确定性极高的闭环防范。2.生产端纯粹广播与消费端前置极速过滤是高吞吐的基石遵循严格的Pub/Sub模式,让核心业务实体与下游智能体编排解耦;通过调度层内存条件字典求值(conditions),在纳秒级内过滤掉99%的无关事件,保障零业务侵入与极高的系统吞吐。

weixin_54551388的博客 239

零信任架构实战:基于天远新能源改表电池报告构建自动化汽车金融抵押放款核验网关

破解新能源车抵贷资产评估痛点:从传统线下验车到新能源改表电池报告数据穿透直连 在深化绿色金融创新、推动新能源汽车消费与资产证券化的大背景下,各大商业银行汽车金融事业部、持牌消费金融公司以及汽车融资租赁机构,正加速重构线上新能源车辆抵押贷款、售后回租与实时授信审批微服务架构。在新能源车抵押借款业务流转中,借款人在线提交车辆识别代号(VIN)与借款申请后,信审与

2501_94042197的博客 177
上一篇: 微服务架构落地:采购业务(上) —— 长协合同与分批到货
code_slave(码畜)
博客等级 码龄10年 31粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值