无损以太网与网络拥塞管理(PFC、ECN)
无损以太网
无损以太网
(Lossless Ethernet)是一种专门用于数据中心网络的网络技术,旨在提供低延迟、高吞吐量和可靠性的传输服务。它是在传统以太网的基础上进行了扩展,引入了新的拥塞管理机制,以避免数据包丢失和网络拥塞,在数据中心的应用中,通常使用无损以太网和RDMA结合,以实现高性能的无丢包数据传输。在无损以太网中,交换机可以使用PFC(Priority Flow Control)机制暂停低优先级流量,以确保高优先级流量的传输。而RDMA可以实现直接访问远程计算机的内存,不需要CPU的介入,从而减少了数据传输的延迟和CPU占用率。
RDMA
(Remote Direct Memory Access)是一种高性能网络技术,可以实现直接访问远程计算机的内存,不需要CPU的介入。在数据中心网络中,RDMA可以提供低延迟、高吞吐量和低CPU占用的数据传输服务。
RDMA 对于网络丢包异常敏感,丢包引起的大量重传(Go-back-N)会导致吞吐性能急剧下降,而RoCE v2是一种基于无连接的UDP协议,缺乏完善的丢包保护机制。构建无损以太网数据中心RoCE在RoCE网络中,我们需要构建无损以太网用于保证数据中心网络传输过程中不丢包。构建无损以太网需支持以下关键特性:
RoCE融合InfiniBand的低时延与以太网的简单和向后兼容,实现零丢包、低时延、大带宽。
智能无损网络一方面通过流量控制技术和拥塞控制技术来提升网络整体的吞吐量,降低网络时延,另一方面通过智能无损存储网络等技术实现网络和应用系统融合优化。
图片引用自无损网络数据中心应用概述_通信世界网 (cww.net.cn)
流控发展:FC(整个链路流控)–>PFC(基于优先级流控)–>PFC+ECN(流控发生前避免拥塞)/PFC+ETS(分配带宽)+ECN;
网络拥塞管理(PFC、ECN)
网络拥塞管理
是指在网络通信中,通过一系列机制来控制网络拥塞的发生和影响,以保证网络的稳定性和服务质量。其中,PFC(Priority Flow Control)和ECN(Explicit Congestion Notification)是两种常见的拥塞管理机制。
PFC
是一种流量控制技术,它可以在网络拥塞时暂停低优先级流量,以确保高优先级流量的传输。PFC使用IEEE 802.1Qbb标准,该标准定义了一组帧头标记,用于识别数据包的优先级,并将低优先级数据包暂停,以确保高优先级数据包的传输。
ECN
是一种拥塞通知技术,它可以在网络拥塞时向数据包添加标记,以通知发件人和收件人网络的拥塞情况。当路由器检测到拥塞时,它会向数据包头部添加ECN标记,然后将其传输到下一个节点。当数据包到达目的地时,收件人会检查ECN标记,如果标记已设置,则收件人会通知发件人减少发送速率,以避免进一步拥塞。ECN使用 RFC 3168 标准。
PFC和ECN通常都用于数据中心网络中,以确保高质量的服务和低延迟。PFC主要用于保证数据包传输的优先级,而ECN则用于控制网络拥塞。这两种机制可以结合使用,以最大限度地减少网络拥塞和数据包丢失,提高网络的性能和可靠性。
PFC原理
PFC 是构建无损以太网的必选手段之一,能够逐跳提供基于优先级的流量控制。设备在进行报文转发时,根据报文的优先级进入对应映射关系的队列中进行调度转发。当某一优先级报文发送速率超过接收速率,导致接收方可用数据缓冲空间不足时,设备通过PFC PAUSE帧反馈给上一跳设备,上一跳设备收到PAUSE帧报文后停止发送本优先级报文,直到再收到PFC XON帧或经过一定的老化时间后才能恢复流量发送。通过使用PFC功能,使得某种类型的流量拥塞不会影响其他类型流量的正常转发,从而达到同一链路上不同类型的报文互不影响。
智能无损网络基于PFC机制提供了智能化拥塞控制技术,可以解决传统以太网络拥塞丢包、时延大的约束,为RoCEv2分布式应用提供“无丢包、低时延、高吞吐”的网络环境,满足分布式应用的高性能需求。
PFC
(Priority-based Flow Control,基于优先级的流量控制)也称为 Per Priority Pause
或 CBFC
(Class Based Flow Control),是对 Pause 机制的一种增强。当前以太 Pause 机制(IEEE 802.3 Annex 31B)也能达到无丢包的要求,原理如下:当下游设备发现接收能力小于上游设备的发送能力时,会主动发 Pause 帧给上游设备,要求暂停流量的发送,等待一定时间后再继续发送数据。但是以太 Pause 机制的流量暂停是针对整个接口,即在出现拥塞时会将链路上所有的流量都暂停。
而 PFC
允许在一条以太网链路上创建8个虚拟通道,并为每条虚拟通道指定一个优先等级,允许单独暂停和重启其中任意一条虚拟通道,同时允许其它虚拟通道的流量无中断通过。这一方法使网络能够为单个虚拟链路创建无丢包类别的服务,使其能够与同一接口上的其它流量类型共存。
图片引用自PFC优先级流量控制 - CloudEngine 12800, 12800E V200R005C10 配置指南-智能无损网络 - 华为 (huawei.com)
如上图所示,DeviceA 发送接口分成了8个优先级队列,DeviceB 接收接口有8个接收缓存(buffer),两者一一对应(报文优先级和接口队列存在着一一对应的映射关系),形成了网络中 8 个虚拟化通道,缓存大小不同使得各队列有不同的数据缓存能力。
当 DeviceB 的接口上某个接收缓存产生拥塞时,即某个设备的队列缓存消耗较快,超过一定阈值(可设定为端口队列缓存的 1/2、3/4 等比例),DeviceB 即向数据进入的方向(上游设备 DeviceA)发送反压信号“STOP”。
DeviceA 接收到反压信号,会根据反压信号指示停止发送对应优先级队列的报文,并将数据存储在本地接口缓存。如果 DeviceA 本地接口缓存消耗超过阈值,则继续向上游反压,如此一级级反压,直到网络终端设备,从而消除网络节点因拥塞造成的丢包。
PFC(Priority based Flow Control)是在交换机入口(ingress port)发起的拥塞管理机制。在通常无拥塞情况下,交换机的入口 buffer 不需要存储数据。当交换机出口(egress port)的 buffer 达到一定的阈值时,交换机的入口 buffer 开始积累,当入口 buffer 达到我们设定的阈值时,交换机入口开始主动的迫使它的上级端口降速。由于 PFC 是基于优先级的控制,所以这种反压可能导致同样优先级的应用都受到影响。如图7所示。
PFC 协议
PFC 允许在每个优先级的基础上执行链路流量控制。 特别地,PFC 用于抑制在指定时间段内传输与一个或多个优先级相关的数据帧。 可以对链路上的某些优先级启用 PFC,而对其他优先级禁用 PFC。
PFC 帧格式
项 | 描述 |
---|---|
Destination address | 目的MAC地址,取值固定为01-80-c2-00-00-01。 |
Source address | 源MAC地址。 |
Ethertype | 以太网帧类型,取值为8808。 |
Control opcode | 控制码,取值为0101。 |
Priority enable vector | 反压使能向量。 |
Time(0)~Time(7) | 其中E(n)和优先级队列n对应,表示优先级队列n是否需要反压。当E(n)=1时,表示优先级队列n需要反压,反压时间为Time(n);当E(n)=0时,则表示该优先级队列不需要反压。 |
Pad | 预留。传输时为0。 |
CRC | 循环冗余校验。 |
ECN原理
ECN 是构建无损以太网的必选手段之一。ECN定义了一种基于 IP层及传输层 的流量控制及端到端拥塞通知机制。ECN功能 利用IP报文头中的DS域来标记报文传输路径上的拥塞状态 。支持该功能的终端设备可以通过报文内容判断出传输路径上发生了拥塞,从而调整报文的发送方式,避免拥塞加剧。
ECN(Explicit Congestion Notification) 是在交换机出口(egress port)发起的拥塞控制机制。当交换机的出口 buffer 达到我们设定的阈值时,交换机会改变数据包头中的 ECN 位来给数据打上 ECN 标签,当带 ECN 标签的数据到达接收端以后,接收端会生成 CNP(Congestion Notification Packet)并将它发送给发送端,CNP 包含了导致拥塞的 flow 或 QP 的信息,当接收端收到 CNP 后,会采取措施降低发送速度。可见 ECN 是基于TCP flow 或 RDMA QP 的拥塞控制机制,它只对导致拥塞的 fow 或 QP 起作用,不会影响到其他的应用。
图片引用自H3C无损网络最佳实践-6W100-新华三集团-H3C
图片引用自H3C无损网络最佳实践-6W100-新华三集团-H3C
ECN 功能对IP报文头中DS域的最后两个比特位(称为ECN域)进行了如下定义:
-
比特位6用于标识发送端设备是否支持ECN功能,称为ECT位(ECN-Capable Transport);
-
比特位7用于标识报文在传输路径上是否经历过拥塞,称为CE位(Congestion Experienced);
ECN 含义:
ECT | CE | 含义 |
---|---|---|
0 | 0 | 不支持ECN |
0 | 1 | 支持ECN |
1 | 0 | 支持ECN |
1 | 1 | 发送拥塞 |
在设备上开启 ECN 功能后,拥塞管理功能将按如下方式对报文进行处理:
- 如果队列长度小于下限,不丢弃报文,也不对 ECN 域进行识别和标记。
- 如果队列长度在上限和下限之间,当设备根据丢弃概率计算出需要丢弃某个报文时,将检查该报文的ECN域。如果ECN域显示该报文由支持ECN的终端发出,设备会将报文的ECT位和CE位都标记为1,然后转发该报文;如果ECN域显示报文传输路径中已经经历过拥塞(即ECT和CE位都为1),则设备直接转发该报文,不对ECN域进行重新标记;如果ECT位和CE位都为0,设备会将该报文丢弃。
- 如果队列长度超过上限,将队列中所有报文的ECN域都标记为11,当队列长度达到队列尾丢弃门限后,报文将被丢弃。
注意:在实际应用中,设备将 ECT 位为1、CE 位为0的报文,以及 ECT 位为0,CE 位为1的报文都识别为由支持 ECN 功能的终端发出的报文。
ECN交互过程
- 发送端设置 ECN 域为 10,告知路径上的设备及接收端,发送端设备支持 ECN 功能。
- 中间设备发生拥塞并达到门限,拥塞设备将发生拥塞的报文 ECN 域设置为11,报文正常转发。
- 接收端收到 ECN 置位为 11 的报文,由传输层发送 CNP(Congestion Notification Packet,拥塞通知报文)通知发送端。
- 发送端收到 CNP 报文,对对应的优先级的队列进行降速处理。
- 经过一段可配置的时间或者发送一定数量数据,发送端恢复原来的速率。
图片引用自H3C无损网络最佳实践-6W100-新华三集团-H3C
总的来说,ECN 技术能够对于拥塞流量进行精确标记以便于精准降速,同时降速可做到较为温和平稳,但是本身反应速度较慢,因此当网络中存在比较高的微突发和剧烈的拥塞时,可能来不及降速已经出现了丢包,因此通常需要使能 Fast ECN、Fast CNP 等辅助技术。PFC 技术则降速反应较快,能够迅速解除拥塞情况,但由于其只能基于优先级进行降速,容易影响和拥塞无关的 Victim 流量且会造成大范围流量震荡,存在 HOL 和 PFC 死锁等问题,一般在网络配置中应尽量少的触发 PFC 机制,仅将其作为最后的保障手段。在此基础上,PFC 和 ECN 的水线设置同样需要根据具体场景进行确定。以 ECN 为例,当拥塞较少且较为轻微时,ECN 水线设置过低会导致更多的报文被标记,导致源端过度降速,吞吐指标劣化。而当突发和拥塞较为严重时,如果 ECN 水线设置过高,可能导致降速不及时而出现丢包或触发 PFC机制,同时队列深度较深,会使得时延指标劣化。
🎢
🥘
🚀
参考
无损网络数据中心应用概述_通信世界网 (cww.net.cn)
互联网技术详解 | 智能无损以太网助力分布式存储的部署与创新(三)-新华三集团-H3C
PFC优先级流量控制 - CloudEngine 12800, 12800E V200R005C10 配置指南-智能无损网络 - 华为 (huawei.com)
RDMA之无损网络_咸鱼弟的博客-CSDN博客_ecn qp
统一的以太无损网络测试技术白皮书v2.0-2020.11.19 - 道客巴巴 (doc88.com)
Priority Flow control (PFC) PFC time class含义讲解。
【PFC】pfctest PFC测试工具_bandaoyu的博客-CSDN博客_%ce’pfcinstalltest’不能检索。
Priority Flow Control (PFC) - Onyx v3.9.1014 - NVIDIA Networking Docs 迈络思交换机PFC配置手册
802.1Qbb-2011 - IEEE Standard for Local and metropolitan area networks–Media Access Control (MAC) Bridges and Virtual Bridged Local Area Networks–Amendment 17: Priority-based Flow Control | IEEE Standard | IEEE Xplore IEEE 802.1qbb 协议规范
相关文章:
无损以太网与网络拥塞管理(PFC、ECN)
无损以太网 无损以太网(Lossless Ethernet)是一种专门用于数据中心网络的网络技术,旨在提供低延迟、高吞吐量和可靠性的传输服务。它是在传统以太网的基础上进行了扩展,引入了新的拥塞管理机制,以避免数据包丢失和网络…...
爬虫大全:从零开始学习爬虫的基础知识
爬虫是一种自动获取网站信息的技术,它可以帮助我们快速地抓取海量网站数据,进行统计分析、挖掘和展示。本文旨在为初学者详细介绍爬虫的基础知识,包括:爬虫原理、爬虫分类、网页结构分析、爬虫工具和技能、爬虫实践示范࿰…...
【Python】【进阶篇】21、Django Admin数据表可视化
目录 21、Django Admin数据表可视化1. 创建超级用户2. 将Model注册到管理后台1)在admin.py文件中声明 3. django_admin_log数据表 21、Django Admin数据表可视化 在《Django Admin后台管理系统》介绍过 Django 的后台管理系统是为了方便站点管理人员对数据表进行操作。Django …...
【MySQL约束】数据管理实用指南
1、数据库约束的认识 数据库约束的概念:数据库的约束是关系型数据库的一个重要的功能,它提供了一种“校验数据”合法性的机制,能够保证数据的“完整性”、“准确性”和“正确性” 数据库的约束: not null:不能存储 nul…...
2023年第二十届五一数学建模竞赛C题:“双碳”目标下低碳建筑研究-思路详解与代码答案
该题对于模型的考察难度较低,难度在于数据的搜集以及选取与处理。 这里推荐数据查询的网站:中国碳核算数据库(CEADs) https://www.ceads.net.cn/ 国家数据 国家数据data.stats.gov.cn/easyquery.htm?cnC01 以及各省市《统…...
Vue父组件生命周期和子组件生命周期触发顺序
加载渲染过程 父 beforeCreate -> 父 created -> 父 beforeMount -> 子 beforeCreate -> 子 created -> 子 beforeMount -> 子 mounted -> 父 mounted子组件更新过程 父 beforeUpdate -> 子 beforeUpdate -> 子 updated -> 父 updated父组件更新…...
DevOps工程师 - 面试手册
DevOps工程师 - 面试手册 岗位概述 DevOps工程师是一种专注于提高软件开发和运维团队协作、提高软件产品交付速度和质量的职位。这种角色要求具备跨领域的知识,以便在开发和运维过程中建立起稳定、可靠的基础设施和自动化流程。 常见的职位招聘描述 负责设计、实…...
Netty内存管理--内存池空间规格化SizeClasses
一、规格化 内存池类似于一个内存零售商, 从操作系统中申请一整块内存, 然后对其进行合理分割, 将分割后的小内存返回给程序。这里存在3个尺寸: 分割尺寸: 底层内存管理的基本单位, 比如常见的以页为单位分配, 但是页的大小是灵活的;申请尺寸: 内存使用者希望申请到的内存大小…...
数据结构刷题(三十):96不同的二叉搜索树、01背包问题理论、416分割等和子集
一、96. 不同的二叉搜索树 1.这个题比较难想递推公式, dp[3],就是元素1为头结点搜索树的数量 元素2为头结点BFS的数量 元素3为头结点BFS的数量 元素1为头结点搜索树的数量 右子树有2个元素的搜索树数量 * 左子树有0个元素的搜索树数量 元素2为头结…...
bash的进程与欢迎讯息自定义
在bash shell中,可以通过多种方式自定义欢迎讯息和提示符。主要有: 修改/etc/profile文件: 该文件在用户登录后执行,定义了PROMPT_COMMAND和PS1提示符。可以修改其内容实现自定义欢迎讯息和提示符。 例如,修改为: bash PROMPT_COMMANDecho -e "\nWelcome to My Bash She…...
本周大新闻|苹果首款MR没有主打卖点;Meta认为AI是AR OS的基础
本周XR大新闻,AR方面,苹果首款MR或没有主打卖点,反而尽可能支持更多App和服务;扎克伯格表示基于AI的AR眼镜操作系统是下一代计算平台的基础;微软芯片工程VP Jean Boufarhat加入Meta芯片团队;Humane展示了…...
Java中工具类Arrays、Collections、Objects
Arrays Arrays是Java中提供的一个针对数组操作的工具类,所有的方法都是静态的。 大致有这些常用的方法 sort()针对常用的基本数据类型,都能进行排序,byte、char、int、long、float、doubleparallelSort()并行排序,多线程排序&am…...
Docker安装Nginx/Python/Golang/Vscode【亲测可用】
一、docker安装nginx docker安装nginx,安装的是最新版本的:docker pull nginx:latest 创建一个容器:docker run --name my-nginx -p 80:80 -d nginx:latest 开启一个交互模式终端:docker exec -it my-nginx bash 创建django项…...
蓝桥杯2022年第十三届决赛真题-最大数字
蓝桥杯2022年第十三届决赛真题-最大数字 时间限制: 3s 内存限制: 320MB 题目描述 给定一个正整数 N。你可以对 N 的任意一位数字执行任意次以下 2 种操作: 将该位数字加 1。如果该位数字已经是 9,加 1 之后变成 0。 将该位数字减 1。如果该位数字已经…...
smbms项目搭建
目录 1.搭建一个maven web项目 2.配置Tomcat 3.测试项目是否能够跑起来 4.导入项目中会遇到的Jar包 5.项目结构搭建 6.项目实体类搭建 7.编写基础公共类 1.数据库配置文件 2.编写数据库的公共类 3.编写字符编码过滤器 3.1web配置注册 4.导入静态资源 1.搭建一个maven web项目 …...
进程/线程 状态模型详解
前言:最近操作系统复习到线程的状态模型(也可以说进程的状态模型,本文直接用线程来说)时候,网上查阅资料,发现很多文章都说的很不一样,有五状态模型、六状态模型、七状态模型.......虽然都是对的…...
数据结构与算法之队列: Leetcode 621. 任务调度器 (Typescript版)
任务调度器 https://leetcode.cn/problems/task-scheduler/ 描述 给你一个用字符数组 tasks 表示的 CPU 需要执行的任务列表。其中每个字母表示一种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完。在任何一个单位时间&#…...
【报错】arXiv上传文章出现XXX.sty not found
笔者在overleaf上编译文章一切正常,但上传文章到arxiv时出现类似于如下报错: 一般情况下观察arxiv的编译log,不通过的原因,很多时候都是由于某一行导入了啥package,引起的报错;但是如果没有任何一个具体的…...
项目合同管理
项目合同管理的基本概念及分类、项目合同签订、项目合同管理以及项目合同索赔处理等内容 信息系统工程的建设过程实际上就是合同的执行和监控的过程 1、项目合同的概念及分类 合同法律关系:权力和义务关系 合同可以是书面形式、口头形式和其他形式 书面形式是指…...
聊聊ClickHouse向量化执行引擎-过滤操作
俄罗斯Yandex开发的ClickHouse是一款性能黑马的OLAP数据库,其对SIMD的灵活运用给其带来了难以置信的性能。本文我们聊聊它如何对过滤操作进行SIMD优化。 基本思想 1、有一个数组data,即ColumnVector::data,存放数据 2、使用uint8类型…...
数据可视化第二版-拓展-网约车分析案例
文章目录 数据可视化第二版-拓展-网约车分析案例竞赛介绍 1等奖作品-IT从业者张某某的作品结论过程数据和思考数据处理数据探索数据分析方法选择数据分析相关性分析转化率分析分析结论 完单数量分析分析结论 司机数量分析分析结论 时间分析每日订单分析 工作日各时段分析周六日…...
pytest - Getting Start
前言 项目开发中有很多的功能,通常开发人员需要对自己编写的代码进行自测,除了借助postman等工具进行测试外,还需要编写单元测试对开发的代码进行测试,通过单元测试来判断代码是否能够实现需求,本文介绍的pytest模块是…...
( 字符串) 205. 同构字符串 ——【Leetcode每日一题】
❓205. 同构字符串 难度:简单 给定两个字符串 s 和 t ,判断它们是否是同构的。 如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。 每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同…...
python+django+vue消防知识宣传网站
开发语言:Python 框架:django Python版本:python3.7.7 数据库:mysql 数据库工具:Navicat 开发软件:PyCharm 层随着移动应用技术的发展,越来越多的消防单位借助于移动手机、电脑完成生活中的事…...
彻底告别手动配置任务,魔改xxl-job!
分析 改造 1、接口调用 2、创建新注解 3、自动注册核心 4、自动装配 测试 测试后 XXL-Job是一款非常优秀的任务调度中间件,其轻量级、使用简单、支持分布式等优点,被广泛应用在我们的项目中,解决了不少定时任务的调度问题。不仅如此&a…...
【五一创作】Springboot+多环境+多数据源(MySQL+Phoenix)配置及查询(多知识点)
文章目录 1. 背景2. 技术点3 子模块依赖SpringBoot设置4. 多环境配置4.1 application.yml4.2 application-pro.yml 5. 多数据源配置5.1 yml配置5.2 自定义数据源在Java中配置5.2.1 PhoenixDataSourceConfig5.2.2 MysqlDataSourceConfig 6. 完整的Pom6. 测试6.1 Mapper配置6.2 方…...
Python小姿势 - 线程和进程:
线程和进程: Python里面线程是真正的并行执行,进程是可以并行执行的。 所谓进程,就是操作系统中执行一个程序的独立单元,它是系统进行资源分配和调度的基本单位。一个进程可以创建和撤销另一个进程,同一个进程内可以并…...
Mysql 锁
目录 0 课程视频 1 概述 1.1 多用户 并发访问 -> 为了数据一致性(多用户) 1.2 全局锁 数据库所有表 1.3 表级锁 每次操作 锁整张表 1.4 行级锁 每次操作 锁对应行 2 全局锁 ->锁后只读 -> 全库逻辑备份 2.1 阻塞DML /DDL 可DQL读 2.2 语法 2.2.1 加锁 flush…...
基于ssm的论坛系统的设计与实现【附源码】
基于ssm的论坛系统的设计与实现 摘 要 早期的网络论坛系统已经诞生一段时间,随着互联网技术的发展,它已经从最初的简单电子公告板系统变成了一种丰富的论坛系统社区模型。人们通过论坛系统进行信息的获取、发布和交流已经成为一种普遍的社交方式&#x…...
Vue中的事件修饰符
Vue中的事件修饰符: 1.prevent: 阻止默认事件 (常用) : 2.stop: 阻止事件冒泡 (常用) : 3.once: 事件只触发一次(常用) : 4.capture:使用事件的捕获模式: 5.self: 只有event.target是当前操作的元素是才触发事件; 6.passive:事件的默认行为立即执行,无需等待事件回调…...
网站多语言包/网站运营主要做什么
拦截器(Interceptor) 拦截器可以监听程序的一个或所有方法。拦截器对方法调用流提供了细粒度控制。可以在无状态会话bean、有状态会话bean 和消息驱动bean 上使用它们。拦截器可以是同一bean 类中的方法或是一个外部类。下面介绍如何在Session Bean 类中使用外部拦截器类。Hell…...
做网站的目标是什么/东莞seo项目优化方法
Linux指令篇:讯息传送与信件管理--write(转)名称 : write使用权限 : 所有使用者使用方式 :write user [ttyname]说明 : 传讯息给其他使用者参数 :user : 预备传讯息的使用者帐号ttyname : 如果使用者同时有两个以上的 tty 连线,可以自行选择合适的 tty 传讯息例子.1…...
做网站客户最关心哪些问题/搜索引擎成功案例分析
704. 二分查找 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 class Solution { public:int search(vector<int>&…...
开发区经济建设网站/上海公司排名
2019独角兽企业重金招聘Python工程师标准>>> 问题场景:高频系统中,agent 会向ATS 服务器发出刷新和预缓存的请求,这里的请求head 里面有GET ,PURGE等,因为一般的预缓存都是小文件,但是某天&…...
浙江省住房和城乡建设厅网站/重庆网络推广公司
1.利用时间戳来获得随机数 利用System.currentTimeMillis()获得时间的位数,例如:个位,十位,百位…等等。 例如: int number1 (int)(System.currentTimeMillis() % 10); #获得时间个位数 int …...
自己做网站公司/营销技巧和话术
...