环境描述

由于工作需要,业务项目需要部署在内网中,然后通过另一台可访问公网的服务器作为代理服务器,实现公网访问业务

#mermaid-svg-SarSs2WQHpvgFauu .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-SarSs2WQHpvgFauu .label text{fill:#333}#mermaid-svg-SarSs2WQHpvgFauu .node rect,#mermaid-svg-SarSs2WQHpvgFauu .node circle,#mermaid-svg-SarSs2WQHpvgFauu .node ellipse,#mermaid-svg-SarSs2WQHpvgFauu .node polygon,#mermaid-svg-SarSs2WQHpvgFauu .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-SarSs2WQHpvgFauu .node .label{text-align:center;fill:#333}#mermaid-svg-SarSs2WQHpvgFauu .node.clickable{cursor:pointer}#mermaid-svg-SarSs2WQHpvgFauu .arrowheadPath{fill:#333}#mermaid-svg-SarSs2WQHpvgFauu .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-SarSs2WQHpvgFauu .flowchart-link{stroke:#333;fill:none}#mermaid-svg-SarSs2WQHpvgFauu .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-SarSs2WQHpvgFauu .edgeLabel rect{opacity:0.9}#mermaid-svg-SarSs2WQHpvgFauu .edgeLabel span{color:#333}#mermaid-svg-SarSs2WQHpvgFauu .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-SarSs2WQHpvgFauu .cluster text{fill:#333}#mermaid-svg-SarSs2WQHpvgFauu div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-SarSs2WQHpvgFauu .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-SarSs2WQHpvgFauu text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-SarSs2WQHpvgFauu .actor-line{stroke:grey}#mermaid-svg-SarSs2WQHpvgFauu .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-SarSs2WQHpvgFauu .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-SarSs2WQHpvgFauu #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-SarSs2WQHpvgFauu .sequenceNumber{fill:#fff}#mermaid-svg-SarSs2WQHpvgFauu #sequencenumber{fill:#333}#mermaid-svg-SarSs2WQHpvgFauu #crosshead path{fill:#333;stroke:#333}#mermaid-svg-SarSs2WQHpvgFauu .messageText{fill:#333;stroke:#333}#mermaid-svg-SarSs2WQHpvgFauu .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-SarSs2WQHpvgFauu .labelText,#mermaid-svg-SarSs2WQHpvgFauu .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-SarSs2WQHpvgFauu .loopText,#mermaid-svg-SarSs2WQHpvgFauu .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-SarSs2WQHpvgFauu .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-SarSs2WQHpvgFauu .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-SarSs2WQHpvgFauu .noteText,#mermaid-svg-SarSs2WQHpvgFauu .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-SarSs2WQHpvgFauu .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-SarSs2WQHpvgFauu .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-SarSs2WQHpvgFauu .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-SarSs2WQHpvgFauu .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-SarSs2WQHpvgFauu .section{stroke:none;opacity:0.2}#mermaid-svg-SarSs2WQHpvgFauu .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-SarSs2WQHpvgFauu .section2{fill:#fff400}#mermaid-svg-SarSs2WQHpvgFauu .section1,#mermaid-svg-SarSs2WQHpvgFauu .section3{fill:#fff;opacity:0.2}#mermaid-svg-SarSs2WQHpvgFauu .sectionTitle0{fill:#333}#mermaid-svg-SarSs2WQHpvgFauu .sectionTitle1{fill:#333}#mermaid-svg-SarSs2WQHpvgFauu .sectionTitle2{fill:#333}#mermaid-svg-SarSs2WQHpvgFauu .sectionTitle3{fill:#333}#mermaid-svg-SarSs2WQHpvgFauu .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-SarSs2WQHpvgFauu .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-SarSs2WQHpvgFauu .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-SarSs2WQHpvgFauu .grid path{stroke-width:0}#mermaid-svg-SarSs2WQHpvgFauu .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-SarSs2WQHpvgFauu .task{stroke-width:2}#mermaid-svg-SarSs2WQHpvgFauu .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-SarSs2WQHpvgFauu .taskText:not([font-size]){font-size:11px}#mermaid-svg-SarSs2WQHpvgFauu .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-SarSs2WQHpvgFauu .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-SarSs2WQHpvgFauu .task.clickable{cursor:pointer}#mermaid-svg-SarSs2WQHpvgFauu .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-SarSs2WQHpvgFauu .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-SarSs2WQHpvgFauu .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-SarSs2WQHpvgFauu .taskText0,#mermaid-svg-SarSs2WQHpvgFauu .taskText1,#mermaid-svg-SarSs2WQHpvgFauu .taskText2,#mermaid-svg-SarSs2WQHpvgFauu .taskText3{fill:#fff}#mermaid-svg-SarSs2WQHpvgFauu .task0,#mermaid-svg-SarSs2WQHpvgFauu .task1,#mermaid-svg-SarSs2WQHpvgFauu .task2,#mermaid-svg-SarSs2WQHpvgFauu .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-SarSs2WQHpvgFauu .taskTextOutside0,#mermaid-svg-SarSs2WQHpvgFauu .taskTextOutside2{fill:#000}#mermaid-svg-SarSs2WQHpvgFauu .taskTextOutside1,#mermaid-svg-SarSs2WQHpvgFauu .taskTextOutside3{fill:#000}#mermaid-svg-SarSs2WQHpvgFauu .active0,#mermaid-svg-SarSs2WQHpvgFauu .active1,#mermaid-svg-SarSs2WQHpvgFauu .active2,#mermaid-svg-SarSs2WQHpvgFauu .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-SarSs2WQHpvgFauu .activeText0,#mermaid-svg-SarSs2WQHpvgFauu .activeText1,#mermaid-svg-SarSs2WQHpvgFauu .activeText2,#mermaid-svg-SarSs2WQHpvgFauu .activeText3{fill:#000 !important}#mermaid-svg-SarSs2WQHpvgFauu .done0,#mermaid-svg-SarSs2WQHpvgFauu .done1,#mermaid-svg-SarSs2WQHpvgFauu .done2,#mermaid-svg-SarSs2WQHpvgFauu .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-SarSs2WQHpvgFauu .doneText0,#mermaid-svg-SarSs2WQHpvgFauu .doneText1,#mermaid-svg-SarSs2WQHpvgFauu .doneText2,#mermaid-svg-SarSs2WQHpvgFauu .doneText3{fill:#000 !important}#mermaid-svg-SarSs2WQHpvgFauu .crit0,#mermaid-svg-SarSs2WQHpvgFauu .crit1,#mermaid-svg-SarSs2WQHpvgFauu .crit2,#mermaid-svg-SarSs2WQHpvgFauu .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-SarSs2WQHpvgFauu .activeCrit0,#mermaid-svg-SarSs2WQHpvgFauu .activeCrit1,#mermaid-svg-SarSs2WQHpvgFauu .activeCrit2,#mermaid-svg-SarSs2WQHpvgFauu .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-SarSs2WQHpvgFauu .doneCrit0,#mermaid-svg-SarSs2WQHpvgFauu .doneCrit1,#mermaid-svg-SarSs2WQHpvgFauu .doneCrit2,#mermaid-svg-SarSs2WQHpvgFauu .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-SarSs2WQHpvgFauu .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-SarSs2WQHpvgFauu .milestoneText{font-style:italic}#mermaid-svg-SarSs2WQHpvgFauu .doneCritText0,#mermaid-svg-SarSs2WQHpvgFauu .doneCritText1,#mermaid-svg-SarSs2WQHpvgFauu .doneCritText2,#mermaid-svg-SarSs2WQHpvgFauu .doneCritText3{fill:#000 !important}#mermaid-svg-SarSs2WQHpvgFauu .activeCritText0,#mermaid-svg-SarSs2WQHpvgFauu .activeCritText1,#mermaid-svg-SarSs2WQHpvgFauu .activeCritText2,#mermaid-svg-SarSs2WQHpvgFauu .activeCritText3{fill:#000 !important}#mermaid-svg-SarSs2WQHpvgFauu .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-SarSs2WQHpvgFauu g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-SarSs2WQHpvgFauu g.classGroup text .title{font-weight:bolder}#mermaid-svg-SarSs2WQHpvgFauu g.clickable{cursor:pointer}#mermaid-svg-SarSs2WQHpvgFauu g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-SarSs2WQHpvgFauu g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-SarSs2WQHpvgFauu .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-SarSs2WQHpvgFauu .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-SarSs2WQHpvgFauu .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-SarSs2WQHpvgFauu .dashed-line{stroke-dasharray:3}#mermaid-svg-SarSs2WQHpvgFauu #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-SarSs2WQHpvgFauu #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-SarSs2WQHpvgFauu #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-SarSs2WQHpvgFauu #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-SarSs2WQHpvgFauu #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-SarSs2WQHpvgFauu #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-SarSs2WQHpvgFauu #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-SarSs2WQHpvgFauu #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-SarSs2WQHpvgFauu .commit-id,#mermaid-svg-SarSs2WQHpvgFauu .commit-msg,#mermaid-svg-SarSs2WQHpvgFauu .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-SarSs2WQHpvgFauu .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-SarSs2WQHpvgFauu .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-SarSs2WQHpvgFauu g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-SarSs2WQHpvgFauu g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-SarSs2WQHpvgFauu g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-SarSs2WQHpvgFauu g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-SarSs2WQHpvgFauu g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-SarSs2WQHpvgFauu g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-SarSs2WQHpvgFauu .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-SarSs2WQHpvgFauu .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-SarSs2WQHpvgFauu .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-SarSs2WQHpvgFauu .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-SarSs2WQHpvgFauu .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-SarSs2WQHpvgFauu .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-SarSs2WQHpvgFauu .edgeLabel text{fill:#333}#mermaid-svg-SarSs2WQHpvgFauu .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-SarSs2WQHpvgFauu .node circle.state-start{fill:black;stroke:black}#mermaid-svg-SarSs2WQHpvgFauu .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-SarSs2WQHpvgFauu #statediagram-barbEnd{fill:#9370db}#mermaid-svg-SarSs2WQHpvgFauu .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-SarSs2WQHpvgFauu .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-SarSs2WQHpvgFauu .statediagram-state .divider{stroke:#9370db}#mermaid-svg-SarSs2WQHpvgFauu .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-SarSs2WQHpvgFauu .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-SarSs2WQHpvgFauu .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-SarSs2WQHpvgFauu .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-SarSs2WQHpvgFauu .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-SarSs2WQHpvgFauu .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-SarSs2WQHpvgFauu .note-edge{stroke-dasharray:5}#mermaid-svg-SarSs2WQHpvgFauu .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-SarSs2WQHpvgFauu .error-icon{fill:#522}#mermaid-svg-SarSs2WQHpvgFauu .error-text{fill:#522;stroke:#522}#mermaid-svg-SarSs2WQHpvgFauu .edge-thickness-normal{stroke-width:2px}#mermaid-svg-SarSs2WQHpvgFauu .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-SarSs2WQHpvgFauu .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-SarSs2WQHpvgFauu .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-SarSs2WQHpvgFauu .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-SarSs2WQHpvgFauu .marker{fill:#333}#mermaid-svg-SarSs2WQHpvgFauu .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-SarSs2WQHpvgFauu {color: rgba(0, 0, 0, 0.75);font: ;}公网代理服务器业务服务器请求业务转发请求至实际业务转发业务响应返回业务响应可访问公网不能访问公网需要访问钉钉的接口公网代理服务器业务服务器网络情况

问题描述

由于业务服务不能直接访问公网,关于钉钉业务代码无法执行

限制说明

  1. 业务服务器不能开通公网访问,只能访问代理服务器
  2. 原有代码不能过多改动,尽量少改

实现思路

  1. 在代理服务器构建服务接收钉钉服务接口请求,并转发至公网,钉钉服务接口成功响应后,数据再返回到业务服务器的响应中
  2. 使用sanic的中间件拦截所有请求以及对应的请求参数

代码展示

@app.middleware('request')
def handle_request(request):dingDingTalk = DingTalkClient(request)return json(status=200, body=dingDingTalk.get_result())@app.route('/<path>', methods=["GET", "POST"], strict_slashes=False)
async def path(request):return json(status=200, body={})@app.route('/<path>/<path2>', methods=["GET", "POST"], strict_slashes=False)
async def path2(request):return json(status=200, body={})@app.route('/<path>/<path2>/<path3>', methods=["GET", "POST"], strict_slashes=False)
async def path3(request):return json(status=200, body={})@app.route('/<path>/<path2>/<path3>/<path4>', methods=["GET", "POST"], strict_slashes=False)
async def path4(request):return json(status=200, body={})if __name__ == '__main__':app.run(host='0.0.0.0', port=800, debug=False)

说明: 由于本身框架本身会匹配路由, /<path 是为了让请求顺利抵达中间件

内网环境如何访问钉钉服务接口相关推荐

  1. 钉钉内网穿透工具,如何使用钉钉小程序访问内网

    描述:公司内网搭建项目,客户端钉钉小程序,如何实现钉钉小程序请求公司内网服务. 钉钉提供了内网穿透工具. 一.安装工具 git clone https://github.com/open-dingta ...

  2. 内网环境下预览ArcGIS地图服务

    内网环境下预览ArcGIS地图服务 文章目录 内网环境下预览ArcGIS地图服务 1.背景 2.解决方案 2.1下载ArcGIS API for JavaScript 2.2本地部署ArcGIS AP ...

  3. Centos/Red Hat6.8 安装、配置、启动Gitlab (内网环境)心得分享

    文章目录 一.Gitlab下载 1. Gitlab官网下载 二.分析思路 2.1. 分析 2.2. 代码托管平台 2.3. 镜像站 二.Gitlab 重新加载配置异常 2.1. 异常现象 2.2. 分 ...

  4. 企业级内网环境搭建教程

    简单说明:环境需要四台虚拟机,每一台分别充当企业内不同的功能分区,在真实环境中的配置还需视情况自行更改 内网搭建示意图 有关域控的部署请见企业级内网的域控环境搭建3万字详细部署教程 目录指南 所需设备 ...

  5. zabbix纯内网环境监控服务器发送邮件报警

    Linux | zabbix | 实战篇(一步步带你到邮件报警) 一.本章环境: Zabbix3.4.8服务器OS:Centos7.6x86_64 邮件服务器OS:Windows10x86_64 邮件 ...

  6. 内网环境下的横向移动总结

    前言 在内网渗透中,当攻击者获取到内网某台机器的控制权后,会以被攻陷的主机为跳板,通过收集域内凭证等各种方法,访问域内其他机器,进一步扩大资产范围.通过此类手段,攻击者最终可能获得域控制器的访问权限, ...

  7. 内网渗透-内网环境下的横向移动总结

    内网环境下的横向移动总结 文章目录 内网环境下的横向移动总结 前言 横向移动威胁 威胁密码安全 威胁主机安全 威胁信息安全 横向移动威胁的特点 利用psexec 利用psexec.exe工具 msf中 ...

  8. 内网环境下docker安装PMM 并监控 PG与MySQL

    0.前言 虽然PMM官网上安装指南上安装PMM有三种方式,但目前主流安装 还是以docker 的方式安装. PMM分两个版本:PMM1和PMM2,PMM1控制力度比较好一些,PMM2界面比较丰富友好一 ...

  9. linux 内网环境搭建 maven 私库

    linux 内网环境搭建 maven 私库 参考资料: https://www.codenong.com/cs106446840/ https://blog.csdn.net/lch_wyl/arti ...

最新文章

  1. 现代传感器的接口:中断驱动的ADC驱动程序
  2. 函数作用域,匿名函数
  3. Android之让手机能识别当前app为浏览器类型的APP
  4. C#设计模式(9)——装饰者模式(Decorator Pattern)
  5. python训练聊天机器人_一个可以进行训练的聊天机器人,一次chat的源码
  6. php文章远程图片,php实现异步将远程链接上内容(图片或内容)写到本地的方法
  7. 比特币价格跌破3万美元登上彭博社头版
  8. 中国替扎尼定行业市场供需与战略研究报告
  9. kafka的connect实现数据写入到kafka和从kafka写出
  10. poj 3667 Hotel 线段树 内存分配问题
  11. 直流电机正反转驱动电路
  12. H3CNE实验(一)静态路由
  13. Ogre 3DMax导出插件的制作
  14. Lua FFI 实战
  15. 相比普通XRD,同步辐射原位XRD的优势有哪些?
  16. 华芯飞CC1600到底由谁设计?
  17. 算法笔记——数学相关
  18. excel 统计函数笔记
  19. 机器学习模型管理平台_如何管理机器学习模型
  20. 基于OHCI的USB主机——UFI读容量命令(ReadCapacity)

热门文章

  1. Android绘图实例(Bitmmap,Canvas,Pain的使用)动态的在图片上添加文字(canvas.drawText)
  2. GEE学习笔记一账号注册(只需要用谷歌邮箱就能注册成功)
  3. 怎样在Mysql中直接储存图片(转)
  4. [BOI 2003]团伙
  5. 充电灯 低电灯共用一个 LED
  6. 利用51单片机和霍尔水流量传感器开发水流量计
  7. sort 排序大全 - 最全的sort排序
  8. web技术支持| Web 客户端实现录音、录像
  9. vivo Y55解账户锁刷机包 线刷包救砖教程
  10. 使用layui/layuiAdmin的总结