0%

快速排序使用分治法实现,即一个一个复杂的问题分解为一系列容易解决的小问题,最终得到问题的解。

算法步骤

快速排序的三步分治过程:例如对 A[p..r] 进行快速排序

  1. 分解:数组 A[p..r] 被划分为两个(可能为空)子数组 A[p…q-1] 和 A[p+1…r],使得A[p…q-1] 中的每一个元素都小于 A[q],而 A[q] 也小于等于 A[q+1…r]中的每个元素。其中,计算下标 q 也是划分过程的一部分。
  2. 解决:通过递归调用快速排序,对子数组A[p…q-1] 和 A[p+1…r] 进行排序。
  3. 合并:因为子数组都是原址排序,所以不需要合并操作,数组A[p…r]已经有序
    阅读全文 »

umask命令

说明

umask命令指定在建立文件时预设的权限掩码。由3位八进制数字组成。
查看当前系统的文件掩码:umask -S

阅读全文 »

文件标记 Ascii 含义
‘\n’ 10 换行
‘\0’ 0 c语言中表示字符串结束符
EOT 4 传输结束符

EOF(End of File)是一个宏定义,其真实值根据不同平台有差异,通常为-1。表示操作系统无法从数据源获取更多数据的情况,数据源一般为文件或流。

EOT(End-of-Transmission)传输结束字符,是一个控制字符,表示传输的结束。ascii码为04

‘\n’ 在文本文件中,除了最后一行,其余的每一行行尾都有一个换行符,即’\n’,ascii码为10

‘\0’ 等价于NULL,在c语言中,并不存在真正的字符串类型。c语言中的字符串其实是char*指向的地址到’\0’前的字符,字符串的长度并不包括’\0’。例如:

1
2
char *s = "hello\0world";			//表示字符串 hello \0位字符串结束符      
printf("%s",s); //输出hello

JavaScript 简介

JavaScript (也称为JS)是一种高级的,解释型的编程语言。

简洁性

其语法简洁,具有很高的抽象层次,只需很少量的代码就可实现复杂的逻辑交互,支持面向对象,命令式,函数式等编程思想。在JS中,函数也是一种类型,可以作为参数传递给某个函数。

1
2
3
4
5
<script>
//定义一个匿名求和函数,并将其存放到f变量中
var f = function (a, b) { return a + b };
console.log(f(12,12)); //输出24
</script>

安全性

为了保证足够的安全性,语言本身不支持文件I/O,例如读取,修改本地文件等。但可以通过宿主环境实现文件I/O功能,如通过FileReader对象可以实现文件读取。

通用性

目前JS已经被世界主流浏览器所支持,比如:Chrome, Firefox, Safari, Opera,IE 等。

越来越多的网站采用了JS来实现复杂的网页交互,数据验证等。

发展前景

Google开发的V8引擎,直接将JS代码翻译为及机器代码,极大地提高了JS的运行速度,运行缓慢已不在是JS的短板。

Node.js,使JS可以用于服务器端开发。

Electron,是GitHub开发的开源框架,采用Node.js作为后端,Chromium作为前端,是开发跨平台应用的的利器。

使用Electron开发的跨平台应用由:微软的Visual Studio Codd (VScode)

Atom

指针传递:传递的指针只包含数组的起始地址,要使用数组还应传出数组长度信息; 数组名传递:数组名称依旧是一个指针,和方法1本质是一样的,只是书写形式不一样。

阅读全文 »

1962 年,Corbato 首次提出多级反馈队列(Multi-level Feedback Queue, MLFQ),应用于兼容时分共享系统(CTSS)。

多级反馈队列需要解决两方面的问题:

  1. 优化周转时间,这通过先执行短工作来实现。
  2. 降低响应时间,像轮转这样的算法降低了响应时间,但周转时间很差。
    阅读全文 »

早期系统

操作系统曾经是一组函数(实际上是一个库),在内存中(在本例中,从物理地址0开始),然后有一个正在运行的程序(进程),在目前物理内存中(本例中,从物理地址 64KB 开始),并使用剩余内存。

截屏2021-07-17 下午6.22.05
阅读全文 »

比例份额(proportional-share)调度程序,也称公平份额(fair-share)调度程序。比例份额算法基于一个简单的想法:调度程序的最终目标是,确保每个工作获得一定比例的 CPU 时间,而不是优化周转时间和响应时间。

彩票调度是一个非常优秀的比例调度程序。

基本概念:彩票数表示份额

彩票数(ticket)代表了进程(或用户或其他)占用了某个资源的份额。例如:假设两个进程 A 和 B,A 拥有 75 张彩票,B 拥有 25 张。因此我们希望 A 占用 75% 的 CPU 时间,而 B 占用 25%。

阅读全文 »

c语言文件打开模式

以c string 方式打开

文件打开模式 含义
“r” 以只读方式打开文件,该文件必须存在
”w“ 只写方式创建并打开一个空文件,若存在同名文件,则丢弃全部数据,作为一个空文件
“a” 附加模式(append),只写打开文件,在文件末尾写入数据,若文件不存在,则创建该文件。重定位操作(fseekfsetposrewind)将被忽略。
“r+” 读或修改:打开的文件可读可写,但该文件必须存在。
“w+” 写或修改:创建一个空文件进行读取或写入。如果已经存在同名文件,则将其内容丢弃,作为一个空文件。
“a+“ 附加或修改:打开文件进行读或写,所有输出操作均在文件末尾写入数据。重新定位操作(fseekfsetposrewind)会影响下一次读取。如果文件不存在,则创建该文件。
阅读全文 »