- 博客(187)
- 收藏
- 关注
转载 Linux网络通信
使用TCP协议的socket1.网络字节序由于在主机存储为小端序,网络传输为大端序,并且在网络中需要读取IP号和端口号,所以发送端要将小端序转为大端序,接收端将大端序转为小端序#include <arpa/inet.h>uint32_t htonl(uint32_t hostlong);uint16_t htons(uint16_t hostshort);...
2018-08-05 20:12:00 286
转载 Linux线程
线程原语pthread_create创建线程#include <pthread.h>int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *a...
2018-07-29 13:35:00 135
转载 共享内存
效率:采用共享内存通信的一个显而易见的好处是效率高,因为进程可以直接读写内存,而不需要任何数据的拷贝。对于像管道和消息队列等通信方式,则需要在内核和用户空间进行四次的数据拷贝,而共享内存则只拷贝两次数据[1]: 一次从输入文件到共享内存区,另一次从共享内存区到输出文件。实际上,进程之间在共享内存时,并不总是读写少量数据后就解除映射,有新的通信时,再重新建 立共享内存区域。而是保持共享区...
2018-07-26 19:10:00 302
转载 消息对列
消息对列的优点:1.消息队列是一种先进先出的队列型数据结构,保证先送的货物先到达。2.消息队列将输出的信息进行了打包处理,这样可以保证以每个消息为单位进行接收3.消息队列还可以对货物进行分类,标记各种类别的货物。消息队列的最佳定义是:内核地址空间中的内部链表。消息可以顺序地发送到队列中,并以几种不同的方式从队列中获取。当然,每个消息队列都是由IPC标识符所唯一标识的。...
2018-07-25 22:46:00 266
转载 有名管道FIFO
管道和FIFO的特征之一是它们的数据是一个字节流。这是UNIX的原生I/O模型。进程往其中写入的是字节流,系统不对它作解释。FIFO不存数据,只是通过它找到内核文件。一.建立有名管道1.命令mknod :mknod name p/s/m //创建管道文件/信号量/共享内存2.命令mkfifo 创建管道mkfifo -m 664 k2 //创建...
2018-07-25 20:09:00 200
转载 匿名管道
LINUX进程通信公开的交流方式有:信号量,消息队列,共享内存,有名管道,文件秘密的信息仅限于交流双方知道的有:信号通信,无名管道通信和socket通信一.匿名管道pipe #include <unistd.h> int pipe(int filedes[2]);管道作用于有血缘关系的进程之间,通过fork来传递调用pipe函数时在内核...
2018-07-25 13:10:00 157
转载 虚函数
虚函数的结束结点,标志了虚函数表的结束。在WinXP+VS2003下,这个值是NULL。而在Ubuntu 7.10 + Linux 2.6.22 + GCC 4.1.3下,这个值是如果1,表示还有下一个虚函数表,如果值是0,表示是最后一个虚函数表。一般继承(无虚函数覆盖)1)虚函数按照其声明顺序放于表中。2)父类的虚函数在子类的虚函数前面。一般继承(...
2018-07-24 20:22:00 110
转载 信号
kill -l 查看全部信号前32个 unix经典信号后32个称为实时信号(自定义信号)kill可以导致一个进程被终止90%的信号,默认都使进程终止1.2 信号机制信号的三大行为和五种默认动作 核心已转储 一定是Core 动作 SIGHUP 1 TermHangup...
2018-07-21 20:12:00 129
转载 内核线程和用户线程(SMP)
用户级和内核级线程用户级线程:任何应用程序都可以通过使用线程库设计成多线程程序。线程库是用于用户级线程管理的一个例程句,它包含用于创建和销毁线程的代码、在线程间传递消息和数据的代码、调度线程执行的代码以及保存和恢复线程上下文的代码。该情况下所有活动发生在用户空间中,并且发生在一个进程中,而内核并不知道这些活动。内核继续以进程为单位进行调度。用户级线程优点:所有线程管理数据结构都在一个...
2018-07-20 18:43:00 336
转载 类与类的横向关系
依赖:UML表示法:虚线 + 箭头动物呼吸空气,空气作为动物类呼吸函数的参数。(大话设计模式) 关系:" ... uses a ..." 人需要空气依赖就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、临时性的、非常弱的,但是类B的变化会影响到类A。比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖。表现在代码层面,为类B作为参数被类A...
2018-07-19 21:44:00 407
转载 this指针
1. this指针的用处:一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。2. this指针的使用:一种情况就是,在类的非静态成员函数中返回类对象本身的时候,直接使用 return *this;另外一种情况是当参...
2018-07-19 17:09:00 116
转载 析构函数和构造函数
1、构造函数和析构函数为什么没有返回值?总是由编译器来调用这些函数以确保它们被执行。如果它们有返回值,要么编译器必须知道如何处理返回值,要么就只能由客户程序员自己来显式的调用构造函数与析构函数,这样一来,安全性就被人破坏了。另外,析构函数不带任何参数,因为析构不需任何选项。构造函数返回的应当是所构造的对象。否则,我们将无法使用临时对象初始化对象。class C{...
2018-07-18 21:26:00 173
转载 类
类所占内存的大小是由成员变量(静态变量除外)决定的,成员函数(这是笼统的说,后面会细说)是不计算在内的。摘抄部分:成员函数还是以一般的函数一样的存在。a.fun()是通过fun(a.this)来调用的。所谓成员函数只是在名义上是类里的。其实成员函数的大小不在类的对象里面,同一个类的多个对象共享函数代码。而我们访问类的成员函数是通过类里面的一个指针实现,而这个指针指向的是一个tab...
2018-07-18 20:32:00 92
转载 引用
一、引用简介 引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。 引用的声明方法:类型标识符 &引用名=目标变量名; 【例1】:int a; int &ra=a; //定义引用ra,它是变量a的引用,即别名说明:1.声明引用时,必须同时对其进行初始化。2.引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用...
2018-07-18 19:59:00 75
转载 new和delete
和 sizeof 类似,new 和 delete 也不是函数,它们都是 C++ 定义的关键字,通过特定的语法可以组成表达式。和 sizeof 不同的是,sizeof 在编译时候就可以确定其返回值,new 和 delete 背后的机制则比较复杂。在实例解释 new 背后的机制之前,你需要知道operator new和operator delete是什么。operat...
2018-07-18 19:11:00 96
转载 输入输出流总结
1.int getchar(void);//有错返回EOF,也可以指定返回值为char变量,因为这个字符包含于低位字节中(高位字节通常为0)行缓冲输入:在键入的字符实际传送给程序之前必须敲入一个回车键。2.int putchar(int c);//只有其低位字节被实际输出到屏幕上返回被写入的字符,若操作失败,返回EOF(宏EOF被定义于stdio.h中,通常其值为-1)3...
2018-07-18 18:18:00 156
转载 数据流中的中位数
题目描述如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。思路:用大根堆和小根堆,将数字分为两组,要保证小根堆中的数字都比大根堆中的大。这样,如果共有偶数个数,小根堆中最小的,和大根堆最大的,的平均数即为中位数。我们采用如果当前为偶数...
2018-07-12 11:18:00 84
转载 二级指针
记住两句话,函数传递有值传递和地址传递,要想修改某个内容的值,必须传递指向这块内容的地址。这就引起了关于指针的最基本的两个内容:是修改指针还是修改指针指向的值,前者需要将指针的地址(也就是二级指针呗)传递给函数,后者则只需要指针本身即可。要想在函数中修改他们的值,就要传递他们的地址。例1:void foo(char* p) { p+...
2018-07-11 16:05:00 83
转载 序列化二叉树
题目描述请实现两个函数,分别用来序列化和反序列化二叉树例如:二叉树8,6,5,7,10,9,10,11序列化:(采用前序遍历方式)8,6,5,%%7,%%10,9,%%11,%%反序列化:就是把之前序列化的结果再转化回去。即转化为一个树。解析:其中代码用,分隔主要是为了防止有两位数或多位数的情况。我的代码:序列化1: char* Seri...
2018-07-11 15:34:00 75
转载 按之字形顺序打印二叉树
题目描述请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。之字形:思路:之字形:就是一层是从左向右,一层是从右向左。最初的想法是用一个计数点i,用i的奇偶来判断从右还是从左。后来发现下一层开始遍历的点就是上一层最后放入的点,所以我们选择栈。由于来回变换所以我们要选择两个栈...
2018-07-11 10:31:00 71
转载 二叉搜索树的第k个结点
题目描述给定一颗二叉搜索树,请找出其中的第k小的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。思路:二叉搜索树就是二叉排序树,也叫二叉查找树。其中序遍历就是顺序的。我的代码: TreeNode* KthNode(TreeNode* pRoot, int k) { ...
2018-07-08 21:51:00 77
转载 滑动窗口的最大值
题目描述给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,...
2018-07-06 21:55:00 50
转载 僵尸进程和孤儿进程
一 . 僵尸进程: 子进程退出,父进程没有回收子进程资源(PCB),则子进程变成僵尸进程 处理僵尸进程的方法:wait 和 waitpid 调用wait和waitpid不仅可以获得子进程的终止信息,还可以使父进程阻塞等待子进程终止,起到进程间同步的作用。 1. waitpid的原型: #include <sys/types.h> #includ...
2018-07-06 15:43:00 81
转载 fork和vfork,exec
一.fork:子进程是父进程的一个拷贝,子进程获得同父进程相同的数据,但是同父进程使用不同的数据段和堆栈段。特点:调用一次,返回两次。成功则在父进程中返回子进程ID,在子进程中返回0。失败则返回-1。返回后都执行fork之后的语句。例如:创建4个子进程,每个子进程都输出自己的pid和父进程的pid#include <stdio.h>#include &...
2018-07-05 13:21:00 185
转载 扑克牌顺子
题目描述从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10位数字本身,A为1,J为11,Q为12,K为13,而大王,小王可以看成任意数字。为了方便我们将大小王看成0。思路:1.找出5张牌中得大小王,即0的个数2.将牌排序,找出相邻牌中的空隙数3.如果空缺的总数小于或等于0的个数,那么数组是连续的。在下面的代码中,使用了sort函数,第一个...
2018-07-04 17:52:00 68
转载 字符流中第一个不重复的字符
题目描述请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。输出描述:如果当前字符流没有存在出现一次的字符,返回#字符。看着题有点眼熟,因为前面做过了,字符串中第一个不重复的字符。差别就是字符流是一个一...
2018-07-04 16:11:00 82
转载 表示数值的字符串
题目描述请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。思路:ScanDigit()函数为判断是否为0~9的整数isExponential()函数为判断用科学计数法表示的结尾...
2018-07-03 15:59:00 55
转载 正则表达式匹配
题目描述请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配思路:基本流程如下:1.如果字符串和匹配串同时到达\0 ,那...
2018-07-03 13:12:00 86
转载 构建乘积数组
题目描述给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法。思路:B[i]的值可以看作图中的矩阵中每行的乘积。我们把它分为1的左边和1的右边的乘积称为左三角和右三角左三角从上到下累乘即可,右三角从下到上累乘。...
2018-07-03 10:07:00 87
转载 把字符串转换成整数
题目描述将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0输入描述:输入一个字符串,包括数字字母符号,可以为空输出描述:如果是合法的数值表达则返回该数字,否则返回0输入+2147483647 1a33输出2147483647 0...
2018-07-02 20:42:00 69
转载 孩子们的游戏(圆圈中最后剩下的数)
题目描述每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0...m-1报数......
2018-06-14 15:20:00 41
转载 翻转单词顺序列
题目描述牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?最开始...
2018-06-13 21:22:00 60
转载 复杂链表的复制
题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)1、复制每个节点,如:复制节点A得到A1,将A1插入节点A后面2、遍历链表,A1->random = A->random->n...
2018-06-13 17:49:00 55
转载 左旋转字符串
题目描述汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!思路:拿题中的例子来说,abcXYZdef 左移3位, 先将前3位倒...
2018-06-13 12:36:00 98
转载 删除链表中重复的结点
题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5思路:设置了一个链表头的标记节点,解决链表头重复需要删除的情况代码:ListNode* deleteDuplication(ListN...
2018-06-12 20:39:00 55
转载 数组中的逆序对
题目描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007思路:归并排序,在归并的时候算出逆序对;//剑指offer答案,写的很明白,看了就会懂思路分析:看到这个题目,我们的第一反应是顺序扫描整个数组。每扫描到...
2018-06-12 20:07:00 130
转载 数组中重复的数字
题目描述在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。代码:class Solution {public: // Parameter...
2018-06-12 12:29:00 51
转载 和为S的连续正数序列
题目描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!输出描述:输出所有和为...
2018-06-12 10:56:00 51
转载 链表中环的入口结点
题目描述一个链表中包含环,请找出该链表的环的入口结点。【转】牛客网方法一:假设x为环前面的路程(黑色路程),a为环入口到相遇点的路程(蓝色路程,假设顺时针走), c为环的长度(蓝色+橙色路程)当快慢指针相遇的时候:此时慢指针走的路程为Sslow = x + m * c + a快指针走的路程为Sfast = x + n * c + a2 Sslow =...
2018-06-12 10:18:00 76
转载 字符串的排列
题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。思路:我们以三个字符abc为例来分析一下求字符串排列的过程。首先我们固定第一个字符a,求后面两个字符bc...
2018-06-12 08:59:00 57
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人