分配内存
同单链表的节点类似,数组的每一个元素都保存了两个值,数据和游标,游标类似于指针,其值是后继元素的下标。 静态链表的下标并不像普通数组那样代表顺序,而是每一个元素的cursor代表着顺序,比如要找到第二个元素,并不是下标为2的元素,而是第一个元素的cursor,这个cursor代表着第二个元素的下标值。 既然是数组,那么在分配内存的时候,内存大小是会大于数组大小的,为了防止数组的溢出,所以在静态链表中,有备用链表这么一说,没有保存数据的元素就是备用链表的一员
Dijkstra算法是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题。Dijkstra算法主要特点是从起始点开始,采用贪心算法的策略,每次遍历到始点距离最近且未访问过的顶点的邻接节点,直到扩展到终点为止。 问题:有N个节点,M条边,求某节点到另一节点的最短距离 输入:先输入N(从0开始)代表N个节点,M条边,随后跟随N行,p1p2d,最后输入起始点st和终点ed 输出:求最短距离 例: 算法描述: ① 初始化,将图edge数组以及距离数组dis所有值置为极大量,表示不可访问,标记数组置为false 算法最多需要更新N个点才能得到最短路径,每次遍历节点也需要查询N遍其他节点与该节点的关系,所以空间复杂度应该是O(n^2);我们使用了N*N邻接表储存边,所以空间复杂度是O(n^2) 邻接矩阵实现简单,但是浪费很多空间,在稀疏图中就更加严重了
此函数的返回值是分配区域的起始地址,或者说,此函数是一个指针型函数,返回的指针指向该分配域的开头位置。如果分配成功则返回指向被分配内存的指针),否则返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放
首先来了解Java方法中的形参和实参。 形参:用来接收调用方法时传递的参数,在被调用时才分配内存空间,一旦调用结束,就释放内存空间,所以形参只在当前方法内有效。等同于变量的定义格式例如:int number 实参:方法调用中的参数,传递值给被调用方法
I/O多路复用这个概念被提出来以后, select是第一个实现 (1983 左右在BSD里面实现)。其函数原型如下: 该函数第一个参数表明我们要监听的文件描述符的最大值,中间的三个参数?readfds writefds exceptfds指向描述符集最后一个参数是超时时间。 它所需要的fd_set类型其实是一个__FD_SETSIZE长度bit的数组
众所周知,在多核 CPU 遍地开花、众核攻城略地的今天,并发的程序设计模式已经是显学。关于线程调度的文章也数不胜数,但大部分这样的文章都只停留在策略层面上,如轮转、彩票;很少有文章介绍背后的机制(mechanism)。这一方面再次说明了操作系统设计中常说的“策略与机制分离”的有效性,使得我们可以完全不谈论调度的实现机制而理解调度的行为,但另一方面则让调度机制蒙上了一层神秘的面纱
Nginx 是一个开源的高性能 Web 服务器,可用于加速内容和应用程序的交付。 Nginx 增强了安全性,提高了可扩展性,还可以用作高可用负载均衡器。它可以用作反向代理,Nginx 最重要的用途之一是内容缓存
变量只是一个存储位置。每个变量都以其名称而闻名 并存储一些已知和未知的信息 称为值。因此 可以通过变量的数据类型和名称来定义变量 数据类型负责为变量分配内存
Linux释疑:物理内存占用80%以上,正常吗? 从上面的图片可以看出 物理内存 使用率高达 80% 以上,正常吗? 作为 Linux新手的倡萌,开始也是担心内存不够用,还怀疑是不是系统不正常,后来 Google下才知道,这很正常! 在Linux中经常发现空闲内存很少,似乎所有的内存都被系统占用了,表面感觉是内存不够用了,其实不然。这是Linux内存管理的一个优秀特性,在这方 面,区别于 Windows的内存管理。主要特点是,无论物理内存有多大,Linux 都将其充份利用,将一些程序调用过的硬盘数据读入内存,利用内存读写的高速特性来提高Linux系统的数据访问性能
享元设计模式(Flyweight Design Pattern)通过共享技术实现相同或相似对象的重用,节省内存,前提是享元对象是不可变对象。 古代的活字印刷术就有点像享元模式,活字印刷就是将每个字模做出来,再印刷时再选取需要的字模到印刷板上,这样就构成了一页书的印刷板。这样的活字印刷大大提升了效率,减少了印刷板的空间