摘要: 1. APUE Unix环境高级编程(1) Unix基础知识: 内核->系统调用->shell和库函数->应用软件(2) 文件I/O:read函数返回值、进程的文件描述符表、文件共享、inode、fcntl函数(3) 文件和目录:文件类型(普通、目录、socket、FIFO、PIPE)、文件系统(硬... 阅读全文
posted @ 2014-08-28 11:42 skyline09 阅读(422) 评论(0) 推荐(0) 编辑
摘要: 1. TCP协议的状态机TCP一共定义了11种状态,这些状态可以使用 netstat 命令查看@左耳朵耗子 tcp系列教程: 上篇 下篇2. TCP建立连接3次握手、释放连接4次握手TCP包头有4个非常重要的东西:(1) Sequence Number:包的序列号,用来解决 网路包乱序的问题(2) ... 阅读全文
posted @ 2014-08-28 11:42 skyline09 阅读(314) 评论(0) 推荐(0) 编辑
摘要: 1. 利用等概率Rand5生成等概率Rand3Rand5生成等概率Rand3这个题目可以扩展为:利用等概率RandM生成等概率RandN (M > N)这里,我们首先明白一个简单的知识点:如果 randN 可以等概率生成 [0, N) 之间的数假设 N = T的整倍数,那么我们可以直接使用 Rand... 阅读全文
posted @ 2014-08-19 22:18 skyline09 阅读(606) 评论(0) 推荐(0) 编辑
摘要: 0. Google C++编程规范英文版:http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml中文版:http://zh-google-styleguide.readthedocs.org/en/latest/google-cp... 阅读全文
posted @ 2014-08-19 15:20 skyline09 阅读(459) 评论(0) 推荐(0) 编辑
摘要: 1. 二分搜索详见笔者博文:二分搜索的那些事儿,非常全面2. 矩阵二分搜索(1) 矩阵每行递增,且下一行第一个元素大于上一个最后一个元素(2) 矩阵每行递增,且每列也递增3. DFS 深度优先搜索适用场景:(1) 输入数据:如果是 递归数据结构(如单链表、二叉树),则一定可以使用DFS(2) 求解目... 阅读全文
posted @ 2014-08-19 15:20 skyline09 阅读(605) 评论(0) 推荐(1) 编辑
摘要: 1. 插入排序(1) 直接插入排序void StraightInsertionSort(std::vector& num) { if (num.size() == 0 || num.size() == 1) return; for (int i = 1; i = 0 && num.at(... 阅读全文
posted @ 2014-08-15 21:38 skyline09 阅读(362) 评论(0) 推荐(0) 编辑
摘要: 单链表是一种递归结构,可以将单链表看作特殊的二叉树(我把它叫做一叉树)单链表的定义:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * List... 阅读全文
posted @ 2014-08-13 17:19 skyline09 阅读(247) 评论(0) 推荐(0) 编辑
摘要: 一. 二叉树定义二叉树具有天然的递归特性,凡是二叉树相关题,首先应该联想到递归struct BinTreeNode { BinTreeNode* left; BinTreeNode* right; int val; BinTreeNode(int value... 阅读全文
posted @ 2014-08-12 20:56 skyline09 阅读(729) 评论(0) 推荐(0) 编辑
摘要: 1. str*系列手写代码a. 一定要注意末尾'\0'的处理,切记切记b. 一定要对输入做有效性判断,多用断言就是了int Strlen(const char* str) { assert(str != NULL); const char* tmp = str; while (*t... 阅读全文
posted @ 2014-08-12 19:32 skyline09 阅读(222) 评论(0) 推荐(0) 编辑
摘要: 转载自:http://www.acmerblog.com/egg-dropping-puzzle-5591.html两个软硬程度一样但未知的鸡蛋,它们有可能都在一楼就摔碎,也可能从一百层楼摔下来没事。现有座36层的建筑,要你用这两个鸡蛋确定哪一层是鸡蛋可以安全落下的最高位置,可以摔碎两个鸡蛋,要求用... 阅读全文
posted @ 2014-07-09 21:41 skyline09 阅读(470) 评论(0) 推荐(0) 编辑
摘要: 1. 内核提供三种不同的方式来记录时间Wall time (or real time):actual time and date in the real worldProcess time:the time that a process spends executing on a processor... 阅读全文
posted @ 2014-05-30 11:44 skyline09 阅读(350) 评论(0) 推荐(0) 编辑
摘要: 1. 信号是软中断,提供处理异步事件的机制异步事件可以是来源于系统外部(例如用户输入Ctrl-C)也可以来源于系统内(例如除0)内核使用以下三种方法之一来处理信号:(1) 忽略该信号。SIGKILL和SIGSTOP不能被忽略。(2) 捕捉并且处理该信号。The kernel will suspend... 阅读全文
posted @ 2014-05-29 21:36 skyline09 阅读(364) 评论(0) 推荐(0) 编辑
摘要: 1. 进程地址空间Linux中,进程并不是直接操作物理内存地址,而是每个进程关联一个虚拟地址空间内存页是memory management unit (MMU) 可以管理的最小地址单元机器的体系结构决定了内存页大小,32位系统通常是 4KB, 64位系统通常是 8KB内存页分为 valid or i... 阅读全文
posted @ 2014-05-28 22:32 skyline09 阅读(446) 评论(0) 推荐(0) 编辑
摘要: 1. 文件和元数据每个文件都是通过inode引用,每个inode索引节点都具有文件系统中唯一的inode number一个inode索引节点是存储在Linux文件系统的磁盘介质上的物理对象,也是LInux内核通过数据结构表示的实体inode存储相关联文件的元数据ls -i 命令获取文件的inode ... 阅读全文
posted @ 2014-05-27 21:55 skyline09 阅读(312) 评论(0) 推荐(0) 编辑
摘要: 1. Threading is the creation and management of multiple units of execution within a single process二进制文件是驻留在存储介质上,已被编译成操作系统可以使用,准备执行但没有正运行的休眠程序进程是操作系统对... 阅读全文
posted @ 2014-05-26 20:37 skyline09 阅读(344) 评论(0) 推荐(0) 编辑
摘要: 1. 进程调度the process scheduler is the component of a kernel that selects which process to run next.进程调度器需要使 处理器使用率最大化,并且提供 使多个进程并发执行的虚拟Deciding which pr... 阅读全文
posted @ 2014-05-21 22:15 skyline09 阅读(338) 评论(0) 推荐(0) 编辑
摘要: 1. 网络IPC套接字接口既可以用于计算机之间进程通信,也可以用于计算机内部进程通信套接字描述符在Unix系统中是用文件描述符实现的/* 创建一个套接字 */#include int socket(int domain, int type, int protocol);protocol通常是0,表示... 阅读全文
posted @ 2014-05-21 14:29 skyline09 阅读(266) 评论(0) 推荐(0) 编辑
摘要: 1. Unix IPC(InterProcess Communication)同一主机的各个进程间的IPC:管道、FIFO、消息队列、信号量、共享存储器不同主机上的各个进程间IPC:socket套接字2. 管道管道进行IPC有两个局限:(1) 半双工,即数据只能在一个方向上流动(2) 只能在具有公共... 阅读全文
posted @ 2014-05-20 15:52 skyline09 阅读(368) 评论(0) 推荐(0) 编辑
摘要: 1. 进程是unix系统中两个最重要的基础抽象之一(另一个是文件)A process is a running programA thread is the unit of activity inside of a processthe virtualization of memory is ass... 阅读全文
posted @ 2014-05-19 20:56 skyline09 阅读(271) 评论(0) 推荐(0) 编辑
摘要: 1.Scatter/Gather I/Oa single system call to read or write data between single data stream and multiple buffersThis type of I/O is so named because the... 阅读全文
posted @ 2014-05-15 22:31 skyline09 阅读(649) 评论(0) 推荐(0) 编辑
摘要: 1.partial block operations are inefficient. The operating system has to “fix up” your I/O by ensuring that everything occurs on block-aligned boundari... 阅读全文
posted @ 2014-05-14 16:53 skyline09 阅读(284) 评论(0) 推荐(0) 编辑
摘要: 1. 非阻塞I/O低速系统调用时可能会使进程永远阻塞的一类系统调用,包括以下调用:(1)某些文件类型你(网络socket套接字、终端设备、管道)暂无可使用数据,则读操作可能会使调用者永远阻塞(2)如果数据不能立即被(1)中文件类型接受,则写操作会使调用者永远阻塞(3)某些进程间通信函数非阻塞I/O使... 阅读全文
posted @ 2014-05-13 21:21 skyline09 阅读(266) 评论(0) 推荐(0) 编辑
摘要: 1.每个Linux进程都有一个最大打开文件数,默认情况下,最大值是1024文件描述符不仅可以引用普通文件,也可以引用套接字socket,目录,管道(everything is a file)默认情况下,子进程会获得其父进程文件表的完整拷贝2.打开文件open系统调用必须包含 O_RDONLY,O_W... 阅读全文
posted @ 2014-05-13 15:35 skyline09 阅读(426) 评论(0) 推荐(0) 编辑
摘要: 1. 进程的所有信息对该进程内的所有线程都是共享的包括 可执行的程序文本、程序全局内存、堆内存以及文件描述符线程包含了表示进程内执行环境必需的信息,包括线程ID、寄存器值、栈、调度优先级和策略、信号屏蔽字、线程私有数据判断线程相等时 采用 pthread_equal 函数线程创建时并不能保证哪个线程... 阅读全文
posted @ 2014-05-12 15:48 skyline09 阅读(787) 评论(0) 推荐(0) 编辑
摘要: 1. Linux系统编程的三大基石:系统调用、C语言库、C编译器系统调用:内核向用户级程序提供服务的唯一接口。在i386中,用户级程序执行软件中断指令 INT n 之后切换至内核空间用户程序通过寄存器告知内核执行系统调用的所需参数2. API 和 ABIAPI:application program... 阅读全文
posted @ 2014-05-09 21:43 skyline09 阅读(646) 评论(0) 推荐(0) 编辑
摘要: 1.信号是软件中断,提供一种异步处理事件的方法很多事件产生信号:(1)用户按下某些中断键,如 Ctrl + C键产生 SIGINT信号(2)硬件异常产生信号,比如 除数为0,无效的内存引用(3)进程调用kill函数可将信号发送给另一个进程处理信号的三种方式:(1)忽略此信号。大多数信号都采用这种方式... 阅读全文
posted @ 2014-05-08 17:15 skyline09 阅读(188) 评论(0) 推荐(0) 编辑
摘要: 1. fork 创建新进程fork创建的新进程称为子进程,fork函数调用一次,返回两次。两次返回的唯一区别就是子进程的返回值是0,而父进程的返回值是新子进程的进程ID在fork之后是父进程先执行还是子进程先执行是不确定的,这取决于内核的调度算法fork的一个特性就是父进程的所有打开文件描述符都被复... 阅读全文
posted @ 2014-05-07 21:52 skyline09 阅读(207) 评论(0) 推荐(0) 编辑
摘要: 1.main函数C程序总是从main函数开始执行,当内核执行C程序时,在调用main函数之前先调用exec函数从内核获取命令行参数和环境变量值2.进程终止正常终止:(1)在main函数内执行return语句(2)调用exit(3)最后一个线程从其启动例程返回(4)最后一个线程调用pthread_ex... 阅读全文
posted @ 2014-05-07 19:40 skyline09 阅读(227) 评论(0) 推荐(0) 编辑
摘要: 1.流与FILE对象unix I/O系统调用都是针对文件描述符的标准C的I/O函数都是针对流(文件指针)的,我们使用一个流与一个文件相关联2.缓冲标准I/O库提供缓冲的目的就是尽可能减少read和write系统调用的使用次数标准I/O提供三种类型的缓冲:(1) 全缓冲:在填满标准I/O缓冲区后才进行... 阅读全文
posted @ 2014-05-06 19:53 skyline09 阅读(260) 评论(0) 推荐(0) 编辑
摘要: 1. 文件类型文件类型信息包含在 struct stat 里的 st_mode 成员(1)普通文件,unix内核并不区分文本文件和二进制文件(2)目录文件,这种文件包含了其他文件的名字以及指向这些文件有关信息的指针(3)块特殊文件(4)字符特殊文件(5)FIFO, 常用于进程间通信,也称为管道(6)... 阅读全文
posted @ 2014-05-05 22:07 skyline09 阅读(180) 评论(0) 推荐(0) 编辑
摘要: 1. 文件I/O对于内核而言,所有打开的文件都通过文件描述符引用,内核不区分文本文件和二进制文件open函数:O_RDONLY O_WRONLY O_RDWRcreate函数:close函数:关闭一个文件时还会释放该进程加在该文件上的所有记录锁lseek函数:显式地为一个打开的文件设置其偏移量每个打... 阅读全文
posted @ 2014-05-05 20:38 skyline09 阅读(194) 评论(0) 推荐(0) 编辑
摘要: 1. Unix 体系结构内核的接口被称为系统调用公用函数库构建在系统调用接口之上应用软件既可以调用公用函数库,也可以直接进行系统调用2. 文件和目录目录操作函数:opendir---> readdir---> closedirstruct dirent 结构体stat 系统调用3.程序、进程、线程程... 阅读全文
posted @ 2014-05-05 20:35 skyline09 阅读(221) 评论(0) 推荐(0) 编辑
摘要: 本文是我学习中网络编程部分的学习笔记。1. Web基础 web客户端和服务器之间的交互使用的是一个基于文本的应用级协议HTTP(超文本传输协议)。一个web客户端(即浏览器)打开一个到服务器的因特网连接,并且请求某些内容。服务器响应所请求的内容,然后关闭连接。浏览器读取这些内容,并把它显示在屏幕... 阅读全文
posted @ 2014-04-18 21:54 skyline09 阅读(1958) 评论(0) 推荐(0) 编辑
摘要: C语言指针与数组数组的下标应该从0还是1开始? 我提议的妥协方案是0.5,可惜他们未予认真考虑便一口回绝 -- Stan Kelly-Bootle1. 数组并非指针为什么很多人会认为指针和数组始终应该可以互换的呢? 因为对数组的引用总是可以写成对指针的引用,而且确实存在一种指针和数组的定义完全相同... 阅读全文
posted @ 2014-04-16 16:07 skyline09 阅读(534) 评论(0) 推荐(0) 编辑
摘要: C语言是简洁的强大的,当然也有很多坑。C语言也是有点业界良心的,至少它实现了2个最最常用的算法:快速排序和二分查找。我们知道,对于C语言标准库 qsort和 bsearch:a. 它是“泛型”的,可以对任何类型进行排序或二分。b. 我们使用时必须自定义一个比较函数当作函数指针传入。c语言要实现泛型,基本上就只有 void指针提供的弱爆了的泛型机制,容易出错。这篇文章中,我实现了 标准库qsort和bsearch函数,最基本的正确性和泛型当然要保证了。在这里,不涉及优化(写标准库实现的那帮人恨不得用汇编实现),只展现算法的运行原理和泛型的实现机制。1.C语言标准库qsort源码实现。我先呈上完整 阅读全文
posted @ 2014-04-10 15:48 skyline09 阅读(5630) 评论(3) 推荐(4) 编辑
摘要: 二分查找算法,是一种在有序数组中查找某一特定元素的搜索算法。注意两点:(1)有序:查找之前元素必须是有序的,可以是数字值有序,也可以是字典序。为什么必须有序呢? 如果部分有序或循环有序可以吗?(2)数组:所有逻辑相邻的元素在物理存储上也是相邻的,确保可以随机存取。算法思想:搜素过程从数组的中间元素开... 阅读全文
posted @ 2014-03-01 18:59 skyline09 阅读(1253) 评论(2) 推荐(1) 编辑
摘要: 0.规则1.假想的编译程序(1)使用编译器提供的所有的可选警告设施增强类型静态检查的能力eg: void* memchr(const void* str, int ch, int size);那个调用该函数时,即使互换其字符ch和大小size参数,编译器也不会发出警告但是如果在函数原型中使用更加精确... 阅读全文
posted @ 2014-01-13 15:41 skyline09 阅读(906) 评论(0) 推荐(0) 编辑
摘要: 本文是我在学习c++过程中的一些思考和总结,主要是c++中关于函数的林林总总。欢迎大家批评和指正,共同学习。os version: ubuntu 12.04 LTSgcc version: gcc 4.6.3文中以 $ 开头语句表示 shell command0.this 指针我觉得首先得讲明白这个... 阅读全文
posted @ 2013-12-01 20:51 skyline09 阅读(1491) 评论(1) 推荐(2) 编辑
摘要: 条款43:算法调用优先于手写循环class Widget {public: bool test();};vector vec;算法调用:for_each(vec.begin(), vec.end(), mem_fun_ref(&Widget::test));手写循环:for(auto it =... 阅读全文
posted @ 2013-11-26 21:43 skyline09 阅读(458) 评论(0) 推荐(0) 编辑
摘要: 条款38:遵循按值传递的原则来设计仿函数仿函数都是 pass-by-valueFunction for_each(InputIterator first, InputIterator last, Function f); //f按值传递, 结果按值返回函数对象按值传递和按值返回,所以函数对象要尽可能... 阅读全文
posted @ 2013-11-26 20:44 skyline09 阅读(249) 评论(0) 推荐(0) 编辑