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

[Valkyrie网络测试仪-软件使用技巧] - Scheduler动作录制,定制打流过程(中途启停/调整带宽/使能部分流量)

在UI界面下将脚本的事情就做完了!  -- ValkyrieManager Scheduler

在网络测试打流过程中,我们经常会遇到要对比在不同报文长度下,端口的转发性能是否有影响,改变报文长度,对转发系统的延迟处理会带来多大的影响,需要实施动态的流量压力测试,并根据实际的场景,可能需要规划模拟某些流量进行定时定次的发送等场景,传统的解决方法是直接拿API进行脚本调取进行二次开发,学习起来比较费事,ValkyrieManager的Scheduler功能可以很好的解决以上痛点。

Xena Scheduler可以在打流过程中进行动态的参数调整,实现动态流量模型,如变更发包的报文长度Packet length,发包的带宽Rate/PPS,动态的启停某些流量等

适用硬件型号及软件版本

以下分享,适用于以下机箱及测试板卡

  • ValkyrieBay,ValkyrieCompact
  • Odin-1G-3S-6P,Odin-1G-3S-6P-T1-RJ45,Odin-1G-3S-6P-E-TSN
  • Odin-10G-5S-6P-CU,Odin-10G-1S-6P,Odin-10G-4S-6P
  • Loki-100G-5S-2P,Loki-100G-5S-4P
  • Thor-400G-7S-1P,Thor-400G-4S-2P,Thor-400G-4S-4P
  • Freya-800G-4S-1P-QDD,Freya-800G-4S-1P-OSFP,Freya-800G-4S-E

软件版本,ValkyrieManager版本Release40及后续版本


Scheduler界面设定

默认该页面在最下面折叠了,方便查看,可以将它先右上角固定住,再拖动到与其他常用界面齐平

Scheduler支持设定的动作

  • Set parameter value改变流数据参数(指定来了的PPS/Rate%数据)
  • Wait period插入等待时间
  • Start traffic开启端口发包
  • Stop traffic停止端口发包
  • Clear Statistics统计数据清零
  • Enable Stream使能流量
  • Disable Stream禁用流量
  • Suspend暂停流量
  • Custom Port/ Stream Command自定义命令行数据(端口级别/流级别)

范例1,动态调整发包带宽-改变Rate/PPS

测试过程中调整带宽,用于观察带宽增加或降低速率时,接受端口的Rx数据,Rx Latency等数据变化

模型设计如下

 

实施效果

 底层逻辑实现

(不重要)

{
  "Operations": [
    {
      "OperType": "StopTraffic",
      "ParamType": 0,
      "OperValue": null,
      "PortTargetList": [
        {
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        }
      ],
      "StreamTargetList": [],
      "AllTargetsSelected": false,
      "FullInfo": "Stop Traffic",
      "Operations": [],
      "ItemId": "b165a6b3-4749-4fb5-bd83-0392d4a4b4e1",
      "ParentId": ""
    },
    {
      "OperType": "SetParamValue",
      "ParamType": "PS_RATEFRACTION",
      "OperValue": 10.0,
      "PortTargetList": [],
      "StreamTargetList": [],
      "AllTargetsSelected": true,
      "FullInfo": "Set Parameter Value",
      "Operations": [],
      "ItemId": "105e9b4f-5b67-48e8-a252-a3a6e3f241fe",
      "ParentId": ""
    },
    {
      "OperType": "StartTraffic",
      "ParamType": 0,
      "OperValue": null,
      "PortTargetList": [
        {
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        }
      ],
      "StreamTargetList": [],
      "AllTargetsSelected": false,
      "FullInfo": "Start Traffic",
      "Operations": [],
      "ItemId": "b641191c-5095-472a-9c72-026c4006c3f3",
      "ParentId": ""
    },
    {
      "OperType": "Wait",
      "ParamType": 0,
      "OperValue": 10.0,
      "PortTargetList": [],
      "StreamTargetList": [],
      "AllTargetsSelected": true,
      "FullInfo": "Wait Period",
      "Operations": [],
      "ItemId": "eff4459b-71c6-47b1-9b8e-76908d20c175",
      "ParentId": ""
    },
    {
      "OperType": "StopTraffic",
      "ParamType": 0,
      "OperValue": null,
      "PortTargetList": [
        {
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        }
      ],
      "StreamTargetList": [],
      "AllTargetsSelected": false,
      "FullInfo": "Stop Traffic",
      "Operations": [],
      "ItemId": "59afa5f4-eaf5-447d-873a-f07417a9831c",
      "ParentId": ""
    },
    {
      "OperType": "SetParamValue",
      "ParamType": "PS_RATEFRACTION",
      "OperValue": 1.0,
      "PortTargetList": [
        {
          "StreamId": 0,
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        },
        {
          "StreamId": 1,
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        },
        {
          "StreamId": 2,
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        }
      ],
      "StreamTargetList": [
        {
          "StreamId": 0,
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        },
        {
          "StreamId": 1,
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        },
        {
          "StreamId": 2,
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        }
      ],
      "AllTargetsSelected": false,
      "FullInfo": "Set Parameter Value",
      "Operations": [],
      "ItemId": "61c840e3-287b-4c17-bb54-99d6e2b7efed",
      "ParentId": ""
    },
    {
      "OperType": "SetParamValue",
      "ParamType": "PS_RATEFRACTION",
      "OperValue": 20.0,
      "PortTargetList": [
        {
          "StreamId": 3,
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        },
        {
          "StreamId": 4,
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        }
      ],
      "StreamTargetList": [
        {
          "StreamId": 3,
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        },
        {
          "StreamId": 4,
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        }
      ],
      "AllTargetsSelected": false,
      "FullInfo": "Set Parameter Value",
      "Operations": [],
      "ItemId": "036b3749-57b0-4830-a521-380cc88de4f7",
      "ParentId": ""
    },
    {
      "OperType": "StartTraffic",
      "ParamType": 0,
      "OperValue": null,
      "PortTargetList": [
        {
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        }
      ],
      "StreamTargetList": [],
      "AllTargetsSelected": false,
      "FullInfo": "Start Traffic",
      "Operations": [],
      "ItemId": "db72a383-79ad-40f9-b3eb-7e7c722d3928",
      "ParentId": ""
    }
  ],
  "ItemId": "c61dd725-211f-4098-b850-285faecb3c52",
  "ParentId": "",
  "FullInfo": "New Schedule 3"
}

范例2,动态调整发包带宽-Multi-Streams多流之间调度

Suspend暂停<-->Enable启用,状态之间切换

Stream有3种状态,Enable启用/Disable禁用/Suspend暂停

在端口发包的时候,Stream状态可以在Suspend/Enable之间切换

Suspend的Stream会占用该端口下的流设定带宽,但发包的时候不会发送

 实施效果

 

 底层实现代码展现

(不重要)

{
  "Operations": [
    {
      "OperType": "StopTraffic",
      "ParamType": 0,
      "OperValue": null,
      "PortTargetList": [
        {
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        }
      ],
      "StreamTargetList": [],
      "AllTargetsSelected": false,
      "FullInfo": "Stop Traffic",
      "Operations": [],
      "ItemId": "58f4e426-79b5-4be3-8744-84554c04cc05",
      "ParentId": ""
    },
    {
      "OperType": "SetParamValue",
      "ParamType": "PS_RATEFRACTION",
      "OperValue": 20.0,
      "PortTargetList": [
        {
          "StreamId": 0,
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        },
        {
          "StreamId": 1,
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        },
        {
          "StreamId": 2,
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        },
        {
          "StreamId": 3,
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        },
        {
          "StreamId": 4,
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        }
      ],
      "StreamTargetList": [
        {
          "StreamId": 0,
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        },
        {
          "StreamId": 1,
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        },
        {
          "StreamId": 2,
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        },
        {
          "StreamId": 3,
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        },
        {
          "StreamId": 4,
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        }
      ],
      "AllTargetsSelected": false,
      "FullInfo": "Set Parameter Value",
      "Operations": [],
      "ItemId": "fe083ec2-a572-457f-9228-b2757d08c288",
      "ParentId": ""
    },
    {
      "OperType": "StartTraffic",
      "ParamType": 0,
      "OperValue": null,
      "PortTargetList": [
        {
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        }
      ],
      "StreamTargetList": [],
      "AllTargetsSelected": false,
      "FullInfo": "Start Traffic",
      "Operations": [],
      "ItemId": "d99797fb-b7b8-4730-8192-d7a970063c7e",
      "ParentId": ""
    },
    {
      "OperType": "Wait",
      "ParamType": 0,
      "OperValue": 10.0,
      "PortTargetList": [],
      "StreamTargetList": [],
      "AllTargetsSelected": true,
      "FullInfo": "Wait Period",
      "Operations": [],
      "ItemId": "be43e4b9-3c3a-49b7-9c1d-842fea62b6cf",
      "ParentId": ""
    },
    {
      "OperType": "SuspendStream",
      "ParamType": 0,
      "OperValue": null,
      "PortTargetList": [
        {
          "StreamId": 1,
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        },
        {
          "StreamId": 2,
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        },
        {
          "StreamId": 3,
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        },
        {
          "StreamId": 4,
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        }
      ],
      "StreamTargetList": [
        {
          "StreamId": 1,
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        },
        {
          "StreamId": 2,
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        },
        {
          "StreamId": 3,
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        },
        {
          "StreamId": 4,
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        }
      ],
      "AllTargetsSelected": false,
      "FullInfo": "Suspend Stream",
      "Operations": [],
      "ItemId": "0d738010-2e51-4fe0-aeca-c34ad7df4f08",
      "ParentId": ""
    },
    {
      "OperType": "Wait",
      "ParamType": 0,
      "OperValue": 10.0,
      "PortTargetList": [],
      "StreamTargetList": [],
      "AllTargetsSelected": true,
      "FullInfo": "Wait Period",
      "Operations": [],
      "ItemId": "1328f903-477d-4899-a901-d83af4eff5fc",
      "ParentId": ""
    },
    {
      "OperType": "EnableStream",
      "ParamType": 0,
      "OperValue": null,
      "PortTargetList": [
        {
          "StreamId": 1,
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        }
      ],
      "StreamTargetList": [
        {
          "StreamId": 1,
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        }
      ],
      "AllTargetsSelected": false,
      "FullInfo": "Enable Stream",
      "Operations": [],
      "ItemId": "6d832bd5-5421-4ba9-8dfe-c819086492d3",
      "ParentId": ""
    },
    {
      "OperType": "Wait",
      "ParamType": 0,
      "OperValue": 10.0,
      "PortTargetList": [],
      "StreamTargetList": [],
      "AllTargetsSelected": true,
      "FullInfo": "Wait Period",
      "Operations": [],
      "ItemId": "0543fd21-97a9-40b4-ab8d-6de2e8d6c651",
      "ParentId": ""
    },
    {
      "OperType": "EnableStream",
      "ParamType": 0,
      "OperValue": null,
      "PortTargetList": [
        {
          "StreamId": 2,
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        }
      ],
      "StreamTargetList": [
        {
          "StreamId": 2,
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        }
      ],
      "AllTargetsSelected": false,
      "FullInfo": "Enable Stream",
      "Operations": [],
      "ItemId": "58aa8fb1-8827-4a9c-8dfa-b025e09002fe",
      "ParentId": ""
    },
    {
      "OperType": "Wait",
      "ParamType": 0,
      "OperValue": 10.0,
      "PortTargetList": [],
      "StreamTargetList": [],
      "AllTargetsSelected": true,
      "FullInfo": "Wait Period",
      "Operations": [],
      "ItemId": "58ed510b-6122-4295-b759-7396916d5317",
      "ParentId": ""
    },
    {
      "OperType": "EnableStream",
      "ParamType": 0,
      "OperValue": null,
      "PortTargetList": [
        {
          "StreamId": 0,
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        },
        {
          "StreamId": 1,
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        },
        {
          "StreamId": 2,
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        },
        {
          "StreamId": 3,
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        },
        {
          "StreamId": 4,
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        }
      ],
      "StreamTargetList": [
        {
          "StreamId": 0,
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        },
        {
          "StreamId": 1,
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        },
        {
          "StreamId": 2,
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        },
        {
          "StreamId": 3,
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        },
        {
          "StreamId": 4,
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        }
      ],
      "AllTargetsSelected": false,
      "FullInfo": "Enable Stream",
      "Operations": [],
      "ItemId": "6d56fa25-eed3-4f4c-abbd-1cf2e2403dc3",
      "ParentId": ""
    },
    {
      "OperType": "SuspendStream",
      "ParamType": 0,
      "OperValue": null,
      "PortTargetList": [
        {
          "StreamId": 1,
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        },
        {
          "StreamId": 2,
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        },
        {
          "StreamId": 4,
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        }
      ],
      "StreamTargetList": [
        {
          "StreamId": 1,
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        },
        {
          "StreamId": 2,
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        },
        {
          "StreamId": 4,
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        }
      ],
      "AllTargetsSelected": false,
      "FullInfo": "Suspend Stream",
      "Operations": [],
      "ItemId": "0f42335b-b714-4e5e-9b8b-cf08077e7222",
      "ParentId": ""
    },
    {
      "OperType": "Wait",
      "ParamType": 0,
      "OperValue": 10.0,
      "PortTargetList": [],
      "StreamTargetList": [],
      "AllTargetsSelected": true,
      "FullInfo": "Wait Period",
      "Operations": [],
      "ItemId": "8a7d181a-4b54-44b6-b299-fab062a65cfa",
      "ParentId": ""
    },
    {
      "OperType": "StopTraffic",
      "ParamType": 0,
      "OperValue": null,
      "PortTargetList": [
        {
          "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
          "ModuleIndex": 1,
          "PortIndex": 4
        }
      ],
      "StreamTargetList": [],
      "AllTargetsSelected": false,
      "FullInfo": "Stop Traffic",
      "Operations": [],
      "ItemId": "52ade31d-50b7-4f8b-a456-23d7dd3e73da",
      "ParentId": ""
    }
  ],
  "ItemId": "66c608ed-98ab-4160-bf60-b3de90f6dfae",
  "ParentId": "",
  "FullInfo": "New Schedule 1"
}

相关文章:

  • ENVI:如何进行遥感图像的分类?(支持向量机模型)
  • 刷题记录(NC50959 To the Max,NC236172 货船,NC16655 [NOIP2005]过河)
  • 【JS逆向系列】某乎x96参数3.0版本与jsvmp进阶
  • Markdown博客 设置字体大小、颜色、类型等样式
  • SATA系列专题之四:4.1 Command Layer命令分类详细解析
  • XAI将创建一套机器学习技术,使人类用户能够理解、适当信任并有效管理新一代人工智能合作伙伴
  • 大数据之ZooKeeper(二)
  • 2021CCPC新疆省赛题解BDEFGHIJK
  • Hyperledge Fabric-身份与角色认证
  • SpringAOP底层原理
  • 【高等数学基础进阶】多元函数的极值与最值
  • QT使用MSVC编译器时中文报错问题
  • Java Double toString()方法具有什么功能呢?
  • 猿创征文|Spring Boot日志
  • Blue Prism 异常处理
  • [nginx文档翻译系列] 控制nginx
  • 【EOS】Cleos基础
  • 2017-09-12 前端日报
  • CentOS从零开始部署Nodejs项目
  • create-react-app项目添加less配置
  • es的写入过程
  • Flex布局到底解决了什么问题
  • httpie使用详解
  • java第三方包学习之lombok
  • JSDuck 与 AngularJS 融合技巧
  • ReactNative开发常用的三方模块
  • scala基础语法(二)
  • Theano - 导数
  • uva 10370 Above Average
  • Vue.js 移动端适配之 vw 解决方案
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • Vue全家桶实现一个Web App
  • vue--为什么data属性必须是一个函数
  • 程序员最讨厌的9句话,你可有补充?
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 力扣(LeetCode)357
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 数据科学 第 3 章 11 字符串处理
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • 移动端高清、多屏适配方案
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • (4)logging(日志模块)
  • (4)事件处理——(7)简单事件(Simple events)
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .CSS-hover 的解释
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?