2014年1月10日
摘要: 数据结构和算法,是我们程序设计最重要的两大元素,可以说,我们的编程,都是在选择和设计合适的数据结构来存放数据,然后再用合适的算法来处理这些数据。 在面试中,最经常被提及的就是链表,因为它简单,但又因为需要对指针进行操作,凡是涉及到指针的,都需要我们具有良好的编程基础才能确保代码没有任何错误。 链表是一种动态的数据结构,因为在创建链表时,我们不需要知道链表的长度,当插入一个结点时,只需要为该结点分配内存,然后调整指针的指向来确保新结点被连接到链表中。所以,它不像数组,内存是一次性分配完毕的,而是每添加一个结点分配一次内存。正是因为这点,所以它没有闲置的内存,比起数组,空间效率更高。 像是单向链表 阅读全文
posted @ 2014-01-10 14:29 思过崖 阅读(252) 评论(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 思过崖 阅读(239) 评论(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 思过崖 阅读(270) 评论(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 思过崖 阅读(352) 评论(0) 推荐(0) 编辑
摘要: Linux虚拟存储系统2012-07-19 22:25:27| 分类: Linux | 标签:linux 存储系统 虚拟内存 |字号大中小订阅 Linux为每一个进程单独维护了一个单独的虚拟地址空间,形式如图所示。 其中内核虚拟存储器包含内核中的代码和数据结构。内核虚拟存储器中的某些区域被映射到所有进程共享的物理页面。例如每个进程共享内核的代码和全局数据结构。 内核虚拟存储器的其他区域包含每个进程都不相同的数据,比如页表,内核在进程上下文中执行代码时用到的栈。 Linux将虚拟存储器组织成一些区域(也叫做段)的集合。一个区域就是已经存在的(已分配的)虚拟存储器的连续片,这些页是以某种方式相关. 阅读全文
posted @ 2014-01-10 09:18 思过崖 阅读(709) 评论(0) 推荐(0) 编辑
摘要: 深入理解计算机系统--信号2012-07-19 22:38:52| 分类: Linux | 标签:linux 信号 计算机系统 |字号大中小订阅信号信号其实是一种高级的软件形式的异常。我们已经知道了硬件和软件是如何合作以提供基本的低层异常机制的,我们也知道了操作系统是如何利用异常来支持一种称为进程上下文切换的异常控制流形式。在本篇文章里,继续研究一种更高层次的软件形式的异常,称为unix信号,它允许进程中断其他进程。信号就是一条小消息,它通知进程系统中发生了一种类型的事件。Linux系统上支持30多种信号,我简单介绍几个常用的信号。序号名称默认行为相应事件1SIGHUP终止终端线挂断2SIG. 阅读全文
posted @ 2014-01-10 09:18 思过崖 阅读(255) 评论(0) 推荐(0) 编辑
摘要: 深入理解计算机系统--链接2012-07-19 22:40:13| 分类: Linux | 标签:计算机系统 |字号大中小订阅链接是将各种代码和数据部分收集起来并且组合成一个单一文件的过程,这个文件可以被加载到存储器并执行。整个编译的过程是:预处理,编译,汇编,链接。链接后生成可执行的目标文件,汇编后生成的目标文件被链接器使用,结合成可执行的目标文件。目标文件有三种形式可重定位的目标文件:包含二进制代码和数据,其形式可以再编译时与其他可重定位的目标文件合并起来,创建一个可执行目标文件。通常对一个程序模块进行汇编以后,生成的就是可重定位的目标文件。可执行目标文件:包含二进制代码和数据,可以直接. 阅读全文
posted @ 2014-01-10 09:18 思过崖 阅读(234) 评论(0) 推荐(0) 编辑
摘要: 深入理解计算机系统--异常2012-07-19 22:41:53| 分类: Linux | 标签:linux 计算机系统 异常 |字号大中小订阅1 异常异常是异常控制流的一种形式,它一部分是由硬件实现的,一部分是由操作系统实现的。异常就是控制流中的突变,用来响应处理器状态中的某些变化。在处理器中,状态被编码为不同的位和信号。状态变化称为事件event,事件可能与当前指令的执行直接相关。比如发生虚拟存储器的换页,算数溢出,或者一条指令试图除以零。另一方面,事件也可能和当前指令的执行没有关系。比如一个系统定时器产生信号或者一个I/O请求完成。在任何情况下,当处理器检测到有事件发生的话,它就会通过. 阅读全文
posted @ 2014-01-10 09:18 思过崖 阅读(498) 评论(0) 推荐(0) 编辑
摘要: 2012-09-17 19:07:00| 分类: 网络基础知识 | 标签:分布式 面试 |字号大中小订阅tencent2012笔试题附加题 问题描述: 例如手机朋友网有n个服务器,为了方便用户的访问会在服务器上缓存数据,因此用户每次访问的时候最好能保持同一台服务器。 已有的做法是根据ServerIPIndex[QQNUM%n]得到请求的服务器,这种方法很方便将用户分到不同的服务器上去。但是如果一台服务器死掉了,那么n就变为了n-1,那么ServerIPIndex[QQNUM%n]与ServerIPIndex[QQNUM%(n-1)]基本上都不一样了,所以大多数用户的请求都会转到其他服务器... 阅读全文
posted @ 2014-01-10 09:18 思过崖 阅读(248) 评论(0) 推荐(0) 编辑
摘要: 2012-07-24 13:24:50| 分类: Linux | 标签:linux |字号大中小订阅以下是Linux系统调用的一个列表,包含了大部分常用系统调用和由系统调用派生出的的函数。这可能是你在互联网上所能看到的唯一一篇中文注释的Linux系统调用列表,即使是简单的字母序英文列表,能做到这么完全也是很罕见的。按照惯例,这个列表以man pages第2节,即系统调用节为蓝本。按照笔者的理解,对其作了大致的分类,同时也作了一些小小的修改,删去了几个仅供内核使用,不允许用户调用的系统调用,对个别本人稍觉不妥的地方作了一些小的修改,并对所有列出的系统调用附上简要注释。其中有一些函数的作用完全相. 阅读全文
posted @ 2014-01-10 09:17 思过崖 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 记录上锁2012-08-09 21:01:36| 分类: Linux | 标签:linux |字号大中小订阅记录锁可用于有亲缘关系或无亲缘关系的进程之间共享某个文件的读与写。被锁住的文件通过其描述符访问,执行上锁操作的函数是fcntl。这种类型的锁通常是在内核中维护的,所以这些锁可以用于不同进程间的上锁,而不仅用于同一进程内不同线程间的上锁。现在假如我们要在不同进程之间进行互斥操作,如果选用互斥锁或者读写锁的话,我们必须先让这些进程共享某个内存区,然后再该共享内存区中使用某种类型的同步变量。而如果使用fcntl记录上锁的话,就不需要共享内存。下面将着重讲解fcntl函数的使用。POSIX f. 阅读全文
posted @ 2014-01-10 09:17 思过崖 阅读(283) 评论(0) 推荐(0) 编辑
摘要: 2012-07-23 13:41:13| 分类: Linux | 标签:linux |字号大中小订阅比较一下下面三段程序:程序1int main(){ printf("this is a test\n")printf("test exit fun");exit(0);}运行结果是:This is a testTest exit fun[root@localhost3.23]#程序2int main(){ printf("this is a test\n")printf("test exit fun");_exit( 阅读全文
posted @ 2014-01-10 09:16 思过崖 阅读(327) 评论(0) 推荐(0) 编辑