优先级

JAVA 堆 与 优先级队列 关系

流过昼夜 提交于 2020-02-28 20:28:22
一 : 堆 什么是堆? 堆可以理解成一个完全二叉树 只不过堆是以数组的形式表现出来的 满足任意结点的值都大于其子树中结点的值,叫做大堆,或者大根堆,或者最大堆4. 反之,则是小堆,或者小根堆,或者最小堆。 大堆与小堆可以用于筛选数组之中最大值或是最小值, 比如在千万级别的数据中找到前五个最大的值,那么就要建立一个有五个元素的小堆,每一次筛选,如果筛选的元素比堆顶就找到堆顶最小的元素将其换下来 那么怎么进行堆的排序呢? 有向上调整和向下调整 如果是一个不规则的堆,那么就要从最后一个非叶子节点向下调整 这里以大堆举例 public static void shiftDownBig ( int [ ] arr , int sz , int parent ) { int child = 2 * parent + 1 ; // left child // 从parent节点开始,一直调整到叶子节点结束 while ( child < sz ) { //right child : child + 1 从两个孩子节点中选一个最大的 if ( child + 1 < sz && arr [ child + 1 ] > arr [ child ] ) { ++ child ; } if ( arr [ child ] > arr [ parent ] ) { //如果child 大于 parent,

计算逆波兰式

允我心安 提交于 2020-02-28 18:37:00
在程序设计中,可能碰到需要对字符串数学表达式求值的问题,常用的方法是解析表达式,生成二叉树,然后进行计算。编译器就是使用这种方法来解析程序中的表达式的。这种方法实现起来有点难度,需要考虑运算符的优先级,括号的配对,堆栈的使用等等。我们正常情况下看到的数学表达式如果用二叉树遍历的话,恰好是中序遍历,故叫做中序表达式。除此之外,还有前序表达式,后序表达式。如:a+b+c(中序),++abc(前序),ab+c+(后序),如果表达式含有×,/,()等就更复杂了。 后缀表达式也称逆波兰表达式 因其使表达式求值变得轻松,所以被普遍使用。 逆波兰式: 在通常的表达式中,二元运算符总是置于与之相关的两个运算对象之间(如:1+1),所以这种表示法也称为中缀表示。波兰逻辑学家J.Lukasiewicz于1929年提出了另一种表示表达式的方法,称为逆波兰记法,在逆波兰记法中,所有 操作符 置于 操作数 的后面,因此也被称为后缀表示法。示例如下: 中缀表示 逆波兰式 a+b a,b,+ a+(b-c) a,b,c,-,+ a+(b-c)*d a,b,c,-,d,*,+ a+d*(b-c) a,d,b,c,-,*,+ a=1+3 a=1,3 + 逆波兰表达式是一种十分有用的表达式,它将复杂表达式转换为可以依靠简单的操作得到计算结果的表达式。它的优势在于只用两种简单操作

交换机的生成树STP原理

自作多情 提交于 2020-02-28 03:36:28
生成树协议: 企业网三层架构—》冗余----》线路冗余—》二层桥接环路 导致问题: 1、广播风暴 2、MAC地址表翻滚 3、同一数据帧的重复拷贝 4、以上3个条件最终导致设备工作过载,导致重启保护 生成树:在一个二层交换网络中,生成一棵树型结构,逻辑的阻塞部分接口,使得从根到所有的节点仅存在唯一的路径;当最佳路径故障时,自动打开部分阻塞端口,来实现线路备份的作用; 生成树在生成过程中,应该尽量的生成一棵星型结构,且最短路径树; 存在算法: 802.1D PVST PVST+(CISCO) RSTP(802.1w) MSTP(802.1S) 一、802.1D 一个交换网络内仅存在一棵生成树实例; 交换机间使用BPDU—桥协议数据单元 – 交换机间沟通互动收发的数据 配置BPDU—只有根网桥可以发送,在交换网络初始状态时,所有交换机均定义本地为根网桥,进行BPDU的发送;使得网络中所有交换机均收到其他设备的BPDU,之后基于数据中的参数进行比对,选举出根网桥;再所有非根网桥不再发送BPDU,而是仅接收和转发根网桥的BPDU;周期2s发送,hold time 20s; TCN—拓扑变更消息(也是BPDU): 本地交换机链路故障后,STP重新收敛,为了快速刷新全网所有交换机的MAC表,将向本地所有STP接口发送TCN(标记位中的TCN位置1),邻居交换机收到TCN后,先标记为ACK位为回复

nginx全局变量,rewrite实战,nginx的location配置

北城以北 提交于 2020-02-28 03:21:11
nginx全局变量 如图,这是nginx 常用的全局变量 第一个变量 $args 表示请求的参数 比如 www.123.com/1.php 就是请求 1.php文件 但是后面有一个问号 ? 这个问号表示输入的参数的意思 访问请求是可以输入参数的,如果有必要的话,也可以不输入参数 总之参数会放在问号的后面,问号后面的 a=1&b=2 就是参数 nginx 接收到这个请求后,就会把参数的值放到 $args 全局变量里面去 如图,在配置文件里面定义访问返回 $args 变量的值 如图,这里模拟访问这个网站,并输入参数 a=1&b=2 网站字符串之所以要用单引号括起来,是因为后面有特殊符号 & 存在 不括起来会导致系统判断错误 可以看到访问之后,系统返回的值是 a=1&b=2 所以问号后面不管写了什么,这些字符串都会作为一个整体赋值到 $args 变量里面去 如图,使用 -I 查看头文件信息 可以看到,头文件信息里面有 Content-Length 和 Content-Type 这两个值也是记录在 $content_length 和 $conten_type 全局变量里面 调用这两个全局变量就可以获得访问请求的这两个值 如图,配置文件里面的 root 后面的值,也就是网站的根目录路径 就是全局变量 $document_root 的值

μC/OS的任务调度实现方法及其在PowerPC上的优化

人走茶凉 提交于 2020-02-27 10:58:01
y = OSUnMapTbl[OSRdyGrp];   SPrioHighRdy = (INT8U)((y << 3) + OSUnMapTbl[OSRdyTbl[y]]);   μC/OS的任务调度算法采用了以空间换时间的策略,将特定字节值的最低位1所在位的信息预先计算并保存到表中,运行时通过查表快速得到;每个任务的TCB中除了保存优先级信息本身外,还使用额外的4个字节保存优先级的高低3位和对应的OSUnMapTbl值,以避免运行时实时计算这几个值所带来的延迟。这些措施增加了系统ROM和RAM的开销。   3 利用 PowerPC “数出前导零数目”指令实现任务调度   PowerPC是Motorola 、IBM和Apple三家公司于20世纪90年代初期联合设计的32位CPU。Freescale(其前身是Motorola半导体部)发展了针对汽车电子的MPC5xx系列单片机及后续基于e200内核的MPC5xxx系列单片机;更高端的e500、e600内核是用于通信领域的MPC6xxx、7xxx和8xxx系列。   下面对μC/OS任务优先级调度算法的改进和优化是在MPC5554单片机上实现的。   PowerPC处理器具有一条“数出前导零数目” 的指令cntlzw(count leading zero word),可以以硬件指令方式实现优先级的多任务调度算法

STP

旧时模样 提交于 2020-02-27 02:38:24
一、 STP 1.1STP出现的背景 STP是一个用于局域网中消除环路的协议。运行该协议的设备通过彼此交互信息而发现网络中的环路,并适当对某些端口进行阻塞以消除环路。由于局域网规模的不断增长,STP已经成为了当前最重要的局域网协议之一。 在上图的网络情况中,会产生如下三种情况 广播风暴 假设交换设备上没有启用STP协议。如果HostA发出广播请求,那么广播报文将被其他两台交换设备的端口port1接收,并分别从端口port2广播出去,然后端口port2又收到另一台交换设备发过来的广播报文,再分别从两台交换设备的端口port1转发,如此反复,最终导致整个网络资源被耗尽,网络瘫痪不可用。 MAC地址表不稳定 假设上图所示的网络中没有广播风暴,HostA发送一个单播报文给HostB,如果此时HostB临时从网络中移去,那么交换设备上有关HostB的MAC地址表项也将被删除。此时HostA发给HostB的单播报文,将被交换设备S1的端口port1接收,由于S1上没有相应的MAC地址转发表项,该单播报文将被转发到端口port2上,然后交换设备S2的端口port2又收到从对端port2端口发来的单播报文,然后又从port1发出去。如此反复,在两台交换设备上,由于不间断地从端口port1、port2收到主机A发来的单播报文,交换设备会不停地修改自己的MAC地址表项,从而引起了MAC地址表的抖动

调度系统设计精要

百般思念 提交于 2020-02-26 22:26:34
作者 | Draveness 导读 :本文作者写这篇文章前前后后大概 2 个月的时间,全文大概 2w 字,建议收藏后阅读或者通过电脑阅读。 调度是一个非常广泛的概念,很多领域都会使用调度这个术语,在计算机科学中, 调度 就是一种将任务(Work)分配给资源的方法。任务可能是虚拟的计算任务,例如线程、进程或者数据流,这些任务会被调度到硬件资源上执行,例如:处理器 CPU 等设备。 图 1 - 调度系统设计精要 本文会介绍调度系统的常见场景以及设计过程中的一些关键问题,调度器的设计最终都会归结到一个问题上 — 如何对资源高效的分配和调度以达到我们的目的,可能包括对资源的合理利用、最小化成本、快速匹配供给和需求。 图 2 - 文章脉络和内容 除了介绍调度系统设计时会遇到的常见问题之外,本文还会深入分析几种常见的调度器的设计、演进与实现原理,包括操作系统的进程调度器,Go 语言的运行时调度器以及 Kubernetes 的工作负载调度器,帮助我们理解调度器设计的核心原理。 设计原理 调度系统其实就是调度器(Scheduler),我们在很多系统中都能见到调度器的身影,就像我们在上面说的,不止操作系统中存在调度器,编程语言、容器编排以及很多业务系统中都会存在调度系统或者调度模块。 这些调度模块的核心作用就是对有限的资源进行分配,以实现最大化资源的利用率或者降低系统的尾延迟

线程八大基础核心六(线程属性)

自古美人都是妖i 提交于 2020-02-26 14:06:09
1.引子 在java多线程并发编程中,有八大基础核心。考考你: 看看都有哪八大基础核心呢?它们分别是: 1.创建线程的方式 2.线程启动 3.线程停止 4.线程生命周期 5.线程相关的方法 6.线程相关的属性 7.线程异常处理 8.线程安全 今天我们从第六个基础核心开始:线程相关属性 2.考考你 #前情回顾 在我们日常多线程编程中,需要关心线程的线程优先级有: 线程Id 线程名称 是否是守护线程 线程优先级 #考考你 1.你知道线程Id的作用吗? 2.你知道线程名称的作用吗? 3.你知道什么是守护线程吗? 4.你知道守护线程与用户线程的区别吗? 5.你知道有哪些线程优先级吗? 6.你知道为什么我们在实际开发中,不应该依赖线程优先级吗? 3.案例 3.1.线程Id 简述: 1.线程Id,是线程的唯一身份标识 2.用于JVM执行过程中,识别线程 package com.anan.thread.threadproperty; /** * 线程属性:Id * 1.线程Id,是线程的唯一身份标识 * 2.用于JVM执行过程中,识别线程 */ public class ThreadIdDemo { public static void main(String[] args) { // 创建线程对象 Runnable r1 = new MyRunnable(); Thread t1 = new

Sleep(0)的妙用

只愿长相守 提交于 2020-02-26 11:45:51
原文地址:https://blog.csdn.net/qiaoquan3/article/details/56281092/ Thread.Sleep(0) 表示挂起0毫秒,你可能觉得没作用,你要写Thread.Sleep(1000) 就有感觉了。似乎毫无意义。 MSDN的说明:指定零 (0) 以指示应挂起此线程以使其他等待线程能够执行。 Thread.Sleep(0) 并非是真的要线程挂起0毫秒,意义在于这次调用Thread.Sleep(0)的当前线程确实的被冻结了一下,让其他线程有机会优先执行。Thread.Sleep(0) 是你的线程暂时放弃cpu,也就是释放一些未用的时间片给其他线程或进程使用,就相当于一个让位动作。 [AppleScript] 纯文本查看 复制代码 ? 1 2 3 4 5 6 7 8 Thread th = new Thread ( new ThreadStart ( MainForm.StartSplash ) ) ; th.Priority = ThreadPriority.AboveNormal; th.Start ( ) ; Thread.Sleep ( 0 ) ; base.SetStyle ( ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint |

快速了解时间敏感网络(TSN)_Part2

最后都变了- 提交于 2020-02-26 11:23:07
大家好,上期我们介绍了TSN是什么,能够给我们带来什么好处以及TSN的用途。在文章的最后也给我们的协议介绍起了个头,讲解了TSN中用到的时钟同步系统IEEE 802.1AS-Rev。如果有小伙伴漏掉了上期的内容,可以点此链接查看:快速了解时间敏感网络(TSN)_Part1 今天我们就开始介绍TSN协议族中的其他成员包括:延迟(TAS和帧抢占)、流量监控(802.1Qci)和冗余(802.1CB) IEEE 802.1Qbv Time Aware Shaper 时间感知整形(TAS)可以说是TSN里的一个核心协议,正是它的应用为车内时间敏感数据提供了超低的延时及抖动的保证。 我们知道,以太网的数据是在总线上串行传输的,如图5,当有多个数据在交换机出口等待被转出时(不同的数据会根据VLAN Tag中的优先级在不同的队列中排队等待),谁先出谁后出就决定了数据的延迟大小。 图5 以太网出口队列示意图 TAS通过开关门的机制,来控制数据的发送。 如图6,通过右侧的Gate Control list来控制每个队列在某一时刻的开关门状态,以右侧黑框圈出的T05举例,该时刻 队列7到队列0的开关门状态分别是CoCCoCCC(C表示关门,o表示开门)。数据只有在开门的时候才可以进行发送,也就是说该时刻只有队列6和队列3可以发送数据。 图6 TAS 开关门控制 (图片部分引自IEEE 802.1Q)