01 2014 档案
摘要:完全二叉树特点:1 叶子节点只能出现在最下面两层2 最下层的叶子一定集中在左部连续位置3 倒数第二层,如果有叶子节点,一定都集中在右边4 如果节点度为1,则该节点只有做孩子5 同样节点数的二叉树,完全二叉树深度最小性质1:在二叉树的第i层上至多有2的(i-1)次幂个节点性质2:深度为k的二叉树最多有2的k-1次幂个节点性质3:叶子节点数为m,度为2的节点数为n,那么 m=n+1性质4:具有n个节点的完全二叉树深度为[log2n]+1性质5:如果节点i的两个孩子是2i和2i+1遍历方式前序遍历void PreOrderTree(BiTree *b){ if( b == NULL) ...
阅读全文
摘要:[edit by xingoo]kmp算法其实就是一种改进的字符串匹配算法。复杂度可以达到O(n+m),n是参考字符串长度,m是匹配字符串长度。传统的算法,就是匹配字符串与参考字符串挨个比较,如果相同就比较下一个,如果不相同,就返回上一次的结果,再重新比较。如图1 如果失败则字符串会重新用S(参考字符串)的第二个,与T(匹配字符串)的第一个比较,知道全部符合查找,或找不到为止。此时发现S[5] != T[5],因此用S[1]与T[0]进行比较。此时发现S[1]!=T[0],因此用S[2]与T[0]比较。此时,仍然不相等,继续后移。此时,S[3] == T[0],继续比较,发现所有T元素都在S中
阅读全文
摘要:循环队列类似栈,但是有两个口,一个专门用来入队,一个专门用来出队。由于入队出队不在一个端口,因此如果不适用循环队列,随着队列的使用,存储空间马上就被耗光了。在循环队列中,一个主要的知识点,就是如何判断队列为空,或者队列满。这里主要有两个方法:1 设置一个标记位,初始时,队列为空,我们设置flag=0;随着数据的使用,如果队满,设置flag=1;2 使用一个空的数据位,这样rear指针永远也不能追上front指针。当front==rear时,队列即为空;当(rear-front)%SIZE==SIZE时,队列为满数据结构typedef struct Queue{ int data[MAXS...
阅读全文
摘要:共享栈,即是两个栈使用同一段存储空间。第一个栈从数组头开始存储,第二个栈从数组尾开始,两个栈向中间拓展。当top1+1==top2或者top1==top2-1时,即staock overflow!.与普通栈一样,共享栈出栈入栈的时间复杂度仍为O(1).数据结构typedef struct shareStack{ int data[MAXSIZE]; int top1; int top2;}shareStack;出栈操作该数据,仅存的是非负数,因此如果想要存储更复杂的操作,可以在判断栈空时,换一种方式,即可。int Pop(shareStack *ss,int flag){ ...
阅读全文
摘要:栈的基本操作就是出栈和入栈,这两个的时间复杂度都是O(1)数据结构typedef struct Stack{ int data[MAXSIZE]; int top;}Stack;出栈操作int Pop(Stack *s){ if(s->top == -1) return 0; s->top--; return s->data[s->top+1];}入栈操作int Push(Stack *s,int num){ if(s->top == MAXSIZE-1) return 0; s->top++; s->data[s->...
阅读全文
摘要:优点:1 空间存储方便,现用现申请2 插入删除,只针对单一数据,不需要移动大量数据缺点:1读取,插入,删除慢,需要从头查找,时间复杂度均为O(n)数据结构声明typedef struct Node{ int data; struct Node * next;}Node;int main(){ ... Node *p = (Node *)malloc(sizeof(Node)); p->data = 1; ... }链表读取指定位置的元素void getNode(Node *L,int n,Node *tar){ int i=1; Node *p; ...
阅读全文
摘要:电科院 北京 电子科学研究院 2所 太原 西北电子装备技术研究所 3所 北京 电视电声研究所 7所 广州 广州通信研究所 8所 淮南 安徽光纤光缆传输技术研究所 9所 绵阳 西南应用磁学研究所 10所 成都 西南电子技术研究所 11所 北京 华北光电技术研究所 12所 北京 北京真空电子技术研究所 13所 石家庄 河北半导体研究所 14所 南京 南京电子技术研究所 15所 北京 华北计算技术研究所 16所 合肥 合肥低温电子研究所 18所 天津 天津电源研究所 20所 西安 西安导航技术研...
阅读全文
摘要:顺序存储优点:1 不用额外增加新的节点空间2 可以快速读取任意位置的元素顺序存储缺点:1 插入和删除需要移动大量元素2 长度变化较大时,难以估计长度3 存储空间碎片化读取时,时间复杂度为O(1);插入或删除时,时间复杂度为O(n);实例代码 1 /*Edit by Xhalo*/ 2 #include 3 #include 4 5 #define MAXSIZE 20 6 7 typedef struct seqList{ 8 int data[MAXSIZE]; 9 int length;10 }SL;11 12 13 int initElem(SL *L,int l...
阅读全文
摘要:守护进程:1 系统启动时,由系统初始化脚本启动。一般在/etc目录下,或者以/etc/rc开头的目录2 许多网络服务器由inetd超级服务器启动3 cron守护进程按规则定期执行一些程序4 用at命令指定在将来的某一时刻执行程序。守护进程输出消息,syslog函数,消息发往syslogd守护进程syslogd守护进程:1 读入配置文件,通常是/etc/syslog.conf。设定守护进程对接收每次键入的各种等级消息的处理。2 创建一个unix域套接口,捆绑路径名/var/run/log3 创建一个UDP套接口,给它捆绑端口5144 打开路径名/dev/klog,内核中的所有出错消息作为这个设备
阅读全文
摘要:IPV4 TCP客户与IPV6服务器之间的通信:1 启动IPV6服务器,创建套接监听口,绑定通配地址2 IPV4调用gethostbyname找到该服务器对应的A记录3 调用connect,向服务器发送一个IPV4的SYN4 服务器设置标志,表明是IPV4映射的IPV6地址,相应一个IPV4的SYN/ACK5 所有通信使用IPV4IPV6 TCP客户与IPV4服务器之间通信:1 创建IPV4监听套接口2 IPV6客户启动,调用gethostbyname询问IPV6地址3 调用connect,在相应IPV6套接口地址结构中存放所得的IPV4映射的IPV6。内核检查到这个映射地址,自动向服务器发送
阅读全文
摘要:DNS中的资源记录RR resource recordAAAAAPTRMXCNAME名字和数值地址间的转换:gethostbyname() gethostbyaddr()服务名字和端口号之间的转换: getservbyname() getservbyport()解析器代码读 依赖于 配置文件,文件/etc/resolv.conf一般包含本地名字服务器IP地址。DNS替代方法:静态主机文件,/etc/hosts或者网络信息系统NIS。struct hostent{ char * h_name; char * * h_aliases; int h_addrtype; int...
阅读全文
摘要:常用的UDP实现的程序:DNS域名系统,NFS网络文件系统,SNMP简单网络管理协议ssize_t recvfrom(int sockfd,void *buff,size_t nbytes,int flags,struct sockaddr * from,socklen_t *addrlen);ssize_t sendto(int sockfd,void *buff,size_t nbytes,int flags,struct sockaddr * to,socklen_t addrlen);sockfd:描述字buff:缓冲区指针nbytes 读写字节数UDP服务器端int main(int
阅读全文
摘要:getsockopt()setsockopt()optval中的返回值,0表示选项关闭,1表示选项打开SO_BROADCAST套接口选项:能或禁止进程发送广播消息的能力。防止进程在应用程序未设计完成能广播时就发送广播信息。SO_DEBUG套接口选项:内核对TCP在此套接口所发送和接受的所有分组跟踪详细信息。SO_DONTROUTE套接口选项:规定发出的分组将旁路底层协议的正常路由机制。对于IPV4,分组指向本地接口SO_ERROR套接口选项:当套接口上发生错误时,内核通过下面两种方式通知进程:1 进程阻塞于select调用,select返回并设置其中的一个或者两个条件2 进程使用驱动IO模型,
阅读全文
摘要:I/O复用的场合:1 客户处理多个描述字时2 客户处理多个套接口3 服务器处理监听套接口,又要处理已连接套接口4 既处理TCP,又处理UDP5 处理多个服务或者多个协议套接口上的输入操作:1 数据到达网络,分组到达时,被拷贝到内核的某个缓冲区2 将数据从内核缓冲区拷贝到应用缓冲区非阻塞模型,应用进程连续不断的查询内核,看看某操作是否准备好。这对CPU时间是极大的浪费。I/O复用,调用select或pool,调用某一个阻塞通过系统调用sigaction安装信号处理程序,当数据准备好时,就生成一个SIGIO信号,调用recvfrom读取数据报异步IO模型:调用函数aio_read传递给内核相关信息
阅读全文
摘要:1 僵尸进程2 信号处理信号:1 由一进程发往另一进程2 由内核发往某进程僵尸状态:父进程取回子进程的相关信息,进程的ID,终止状态,子进程的资源利用信息编程时:1 当派生子进程时,必须捕获信号SIGCHLD2 当捕获信号时,必须处理被中断的系统调用3 SIGCHLD的信号处理程序必须正确编写,使用函数waitpid以免留下僵尸进程 1 int main(int argc,char **argv){ 2 int listenfd,connfd; 3 pid_t childpid; 4 socklen_t clilen; 5 struct sockaddr_in cliaddr,servaddr
阅读全文
摘要:int socket(int family,int type,int protocol);family:AF_INET ipv4协议AF_INET6 ipv6协议AF_LOCAL unix域协议AF_ROUTE 路由套接口type:SOCK_STREAM 字节流套接口SOCK_DGRAM 数据包套接口SOCK_RAW 原始套接口返回一个很小的非负整数,叫做套接口描述字,简称套接字sockfdAF_XXX地址族PF_XXX协议族connect()建立一个TCP连接三次握手出错:1 发送无应答,6秒后再次发送,无应答,24秒后再次发送,若75秒钟后仍未相应,则返回错误2 硬错:SYN返回RST:S
阅读全文
摘要:1 struct in_addr{ 2 in_addr_t s_addr; 3 }; 4 struct sockaddr_in{ 5 uint8_t sin_len; 6 sa_family_t sin_family; 7 in_port_t sin_port; 8 9 struct in_addr sin_addr;10 char sin_zero[8];11 };通用套接口地址结构:struct sockaddr{ uint8_t sa_len; sa_family_t sa_family; char sa_data[...
阅读全文
摘要:Ipv4 32位地址 80年代设计Ipv6 128位地址 90年代设计TCP 传输控制协议。面向连接的协议,全双工字节流UDP 用户数据报协议 无连接,ICMP 网际控制消息协议,处理路由器和主机间的错误和控制消息IGMP 网际组管理协议,RARP 反向地址解析协议BPF BSD分组过滤器,为进程提供访问链路层数据的接口。DLPI 数据链路提供接口TCP:1 提供客户与UDP服务不相同2 提供可靠性3 通过给所发送数据的每一个字节关联一个序列号进行排序4 提供流量控制。数据缓冲区5 连接是全双工的MSS 最大分节大小 max segment sizeTIME_WAIT1 实现终止TCP全双工连
阅读全文
摘要:#include "unp.h"int main(int argc,char **argv){ int sockfd.n; char recvline[MAXLINE + 1]; struct sockaddr_in servaddr; if(argc != 2 ) err_quit("usage:a.out"); if((sockfd = socket(AF_INET,SOCK_STREAM,0)) 0){ recvline[n] = 0; if(fputs(recvline,stdout) == EOF) ...
阅读全文
摘要:硬解析:执行SQL时,SQL已经不再共享池中,会产生硬解析。首先分配共享池空间,创建父游标,创建子游标软软解析:父游标存在,子游标也存在软解析:父游标存在,子游标不可共享游标共享技术ACS游标不会马上关闭,会先放在游标缓存中,等待回话完成后,在关闭OPEN_CURSORS会话打开的游标数量SESSION_CACHED_CURSORS回话缓冲,主要功能:将会话中的常用的SQL放入UGA中的会话缓冲区中,以便下次调用CURSOR_SPACE_FOR_TIME 当父游标被打开的时候,所有子游标及其相关联的对象全部被锁住,从而确保游标相关的信息都是一致的
阅读全文
摘要:SGA包括:1 数据结构部分 fixed size2 数据块缓冲区 database buffers3 redo log缓冲区 redo buffers4 共享池 variable size永久使用的共享内存:进程信息数据、会话信息数据、特殊用途的内存段随着共享池碎片化加剧:产生ORA-4031错误1 加大初始的分配值2 每次扩展一个组共享池内部结构:1 PERMANENT2 FREEABLE3 RECERATEABLE4 FREEABLE WITH MARK通过内部视图 X$KSMSP监控共享池碎片的情况较大的共享池会带来一定的系统开销共享池闩锁竞争也会增加定期刷新共享池会有助于保持共享池性
阅读全文
摘要:1 DB Cache 是以bock为单位组织的缓冲区,不同大小的BLOCK对应不同的缓冲区参数2 DB Cache的命中率越高,访问性能就越好3 Cache中的数据块通过散列算法实现4 每个链上的buffers数量,最佳的情况是每个链上只有一个buffer5 DBWR进程控制脏数据写入6 在DB Cache,同一个数据块中可能存在多个版本的数据7 大表的扫描,热块冲突都可能导致闩锁的争用引入tch计数器,避免LRU链上频繁移动LRU链上搜索达到最大深、LRU-W上没有足够的clean buffers都会触发标记位,使得DBWR进程讲脏数据写入磁盘几个重要的数据链:1 LRU list普通的LR
阅读全文
摘要:Inventory Oracle安装工具OUI用来管理Oracle安装目录的Oracle的参数文件,启动后按照下面的顺序读取参数文件,如果读取失败,启动数据库 失败:1 ORACLE_HOME/dbs/spfile.ora3 $ORACLE_HOME/dbs/init.ora数据库的nomount阶段:读取参数文件,分配共享内存和启动进程Mount阶段:读取控制文件,进行校验oracle的控制文件包括:1 数据库的物理结构2 数据文件3 REDO LOG在线日志文件:解决了数据库实例突然宕机或服务器宕机的系统恢复问题后台进程:1 DB
阅读全文
摘要:近期目标4月末:《TCPIP详解1》(2014-04-04完成)《c与指针》(2014-04-07完成)《高性能CUDA应用设计与开发》(2014-04-14完成)《大规模分布式存储系统 原理解析与架构实践》(2014-04-17完成)基本的数据结构与算法《大话数据结构》(2014-04-21完成)...
阅读全文
摘要:首先我们要为每一时间步,设置一个文件名: char timestr[10] = "1"; itoa(time,timestr,10); std::string s; s += timestr; std::string path = "test_"+s+".txt";这样传入的整型时间步,就可以添加到输出文件名中;然后,输出文件: std::ofstream out(path,std::ios_base::ate); std::ofstream out1(path1,std::ios_base::ate); int num[300]={
阅读全文