2014年2月24日
摘要: 二分查找及其扩展应用场景大端和小端的问题2012-09-21 11:33:41| 分类: 算法、数据结构 | 标签:算法数据结构 归并排序 内部排序 面试 |举报 |字号大中小订阅这三个排序以前都写过,快速排序还写了递归版和迭代版。现在在这里做一下总结。堆排序(Heap Sort)堆排序是一种树形选择排序,在排序过程中,将A[n]看成是完全二叉树的顺序存储结构,利用完全二叉树中双亲结点和孩子结点之间的内在关系来选择最小的元素。对N个元素从小到大排序建立大根堆,然后交换堆顶与最后一个元素,将剩下的N-1个元素调整为大根堆,执行N-1此这样的操作。 堆排序是不稳定的。算法时间复杂度O(nlogn. 阅读全文
posted @ 2014-02-24 09:06 思过崖 阅读(802) 评论(0) 推荐(0) 编辑
  2014年1月13日
摘要: GalleryRSScode my lifeLinux 进程2013-07-08 09:31 by cococo点点, 801阅读, 5评论, 收藏, 编辑 在用户空间,进程是由进程标识符(PID)表示的。从用户的角度来看,一个 PID 是一个数字值,可惟一标识一个进程。一个 PID 在进程的整个生命期间不会更改,但 PID 可以在进程销毁后被重新使用,所以对它们进行缓存并不见得总是理想的。进程表示 在 Linux 内核内,进程是由相当大的一个称为 task_struct 的结构表示的。此结构包含所有表示此进程所必需的数据,此外,还包含了大量的其他数据用来统计(accounting)和维护.. 阅读全文
posted @ 2014-01-13 18:01 思过崖 阅读(763) 评论(0) 推荐(0) 编辑
  2014年1月10日
摘要: 数据结构和算法,是我们程序设计最重要的两大元素,可以说,我们的编程,都是在选择和设计合适的数据结构来存放数据,然后再用合适的算法来处理这些数据。 在面试中,最经常被提及的就是链表,因为它简单,但又因为需要对指针进行操作,凡是涉及到指针的,都需要我们具有良好的编程基础才能确保代码没有任何错误。 链表是一种动态的数据结构,因为在创建链表时,我们不需要知道链表的长度,当插入一个结点时,只需要为该结点分配内存,然后调整指针的指向来确保新结点被连接到链表中。所以,它不像数组,内存是一次性分配完毕的,而是每添加一个结点分配一次内存。正是因为这点,所以它没有闲置的内存,比起数组,空间效率更高。 像是单向链表 阅读全文
posted @ 2014-01-10 14:29 思过崖 阅读(250) 评论(0) 推荐(0) 编辑
摘要: 目录:一、大型软件开发二、头文件和static三、结构体四、联合五、枚举回到顶部一、大型软件开发将一个代码中的内容,拆分成多个文件,最后的可执行文件只要一个。操作步骤:1 原来只有一个文件main.c输入函数 输出函数 声明2 多人开发 将原文件拆成三个文件,分别为*.h、*c、main.c3 编译时1)分别编译不同的源文件,生成相应的目标文件gcc -c input.cgcc -c main.c2)可以将多个目标文件链接生成同一个可执行文件gcc input.o main.o => a.out3)在main.c中,引入头文件4).h文件中的条件编译解决的是重复声明问题5)先xcode中 阅读全文
posted @ 2014-01-10 09:27 思过崖 阅读(235) 评论(0) 推荐(0) 编辑
摘要: 2012-10-12 00:12:39| 分类: 网络基础知识 | 标签:网络基础 面试 |字号大中小订阅类似的基础知识时间长不用,真心会忘记啊。还是记录下吧,以备不时之需。转一个我认为写的比较清晰的博文。现在的IP网络使用32位地址,以点分十进制表示,如172.16.0.0。地址格式为:IP地址=网络地址+主机地址 或 IP地址=主机地址+子网地址+主机地址。 IP地址类型 最初设计互联网络时,为了便于寻址以及层次化构造网络,每个IP地址包括两个标识码(ID),即网络ID和主机ID。同一个物理网络上的所有主机都使用同一个网络ID,网络上的一个主机(包括网络上工作站,服务器和路由器等)有一个. 阅读全文
posted @ 2014-01-10 09:19 思过崖 阅读(266) 评论(0) 推荐(0) 编辑
摘要: TCP/IP2012-07-19 22:13:40| 分类: 网络基础知识 | 标签:网络基础 |字号大中小订阅端口的概念:1-1023是系统分配的端口,应用程序不可用。常见的端口有20:FTP数据连接21:FTP控制连接23:Telnet25:SMTP80:HTTPTCP连接三次握手:第一次握手:客户端TCP首先给服务器端TCP发送一个特殊的TCP数据段。该数据段不包含应用层数据,并将头部中的SYN位设置为1,所以该数据段被称为SYN数据段。另外,客户选择一个初始序列号SEQ,设SEQ=x并将这个编号放到初始的TCP SYN数据段的序列号字段中。该数据段被封装到一个IP数据报中,并发送给服. 阅读全文
posted @ 2014-01-10 09:19 思过崖 阅读(349) 评论(0) 推荐(0) 编辑
摘要: Linux虚拟存储系统2012-07-19 22:25:27| 分类: Linux | 标签:linux 存储系统 虚拟内存 |字号大中小订阅 Linux为每一个进程单独维护了一个单独的虚拟地址空间,形式如图所示。 其中内核虚拟存储器包含内核中的代码和数据结构。内核虚拟存储器中的某些区域被映射到所有进程共享的物理页面。例如每个进程共享内核的代码和全局数据结构。 内核虚拟存储器的其他区域包含每个进程都不相同的数据,比如页表,内核在进程上下文中执行代码时用到的栈。 Linux将虚拟存储器组织成一些区域(也叫做段)的集合。一个区域就是已经存在的(已分配的)虚拟存储器的连续片,这些页是以某种方式相关. 阅读全文
posted @ 2014-01-10 09:18 思过崖 阅读(706) 评论(0) 推荐(0) 编辑
摘要: 深入理解计算机系统--信号2012-07-19 22:38:52| 分类: Linux | 标签:linux 信号 计算机系统 |字号大中小订阅信号信号其实是一种高级的软件形式的异常。我们已经知道了硬件和软件是如何合作以提供基本的低层异常机制的,我们也知道了操作系统是如何利用异常来支持一种称为进程上下文切换的异常控制流形式。在本篇文章里,继续研究一种更高层次的软件形式的异常,称为unix信号,它允许进程中断其他进程。信号就是一条小消息,它通知进程系统中发生了一种类型的事件。Linux系统上支持30多种信号,我简单介绍几个常用的信号。序号名称默认行为相应事件1SIGHUP终止终端线挂断2SIG. 阅读全文
posted @ 2014-01-10 09:18 思过崖 阅读(244) 评论(0) 推荐(0) 编辑
摘要: 深入理解计算机系统--链接2012-07-19 22:40:13| 分类: Linux | 标签:计算机系统 |字号大中小订阅链接是将各种代码和数据部分收集起来并且组合成一个单一文件的过程,这个文件可以被加载到存储器并执行。整个编译的过程是:预处理,编译,汇编,链接。链接后生成可执行的目标文件,汇编后生成的目标文件被链接器使用,结合成可执行的目标文件。目标文件有三种形式可重定位的目标文件:包含二进制代码和数据,其形式可以再编译时与其他可重定位的目标文件合并起来,创建一个可执行目标文件。通常对一个程序模块进行汇编以后,生成的就是可重定位的目标文件。可执行目标文件:包含二进制代码和数据,可以直接. 阅读全文
posted @ 2014-01-10 09:18 思过崖 阅读(233) 评论(0) 推荐(0) 编辑
摘要: 深入理解计算机系统--异常2012-07-19 22:41:53| 分类: Linux | 标签:linux 计算机系统 异常 |字号大中小订阅1 异常异常是异常控制流的一种形式,它一部分是由硬件实现的,一部分是由操作系统实现的。异常就是控制流中的突变,用来响应处理器状态中的某些变化。在处理器中,状态被编码为不同的位和信号。状态变化称为事件event,事件可能与当前指令的执行直接相关。比如发生虚拟存储器的换页,算数溢出,或者一条指令试图除以零。另一方面,事件也可能和当前指令的执行没有关系。比如一个系统定时器产生信号或者一个I/O请求完成。在任何情况下,当处理器检测到有事件发生的话,它就会通过. 阅读全文
posted @ 2014-01-10 09:18 思过崖 阅读(487) 评论(0) 推荐(0) 编辑