自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(72)
  • 收藏
  • 关注

原创 cp指令

简介cp命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。cp命令还支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现错误。语法cp [选项] [参数]选项-a:此参数的效果和同时指定"-dpR"参数相同;-d:当复制符号连接时,把目标文件或目录也建...

2018-07-01 23:37:45 14165

原创 Linux网络编程知识树

作者:【果冻:https://blog.csdn.net/jelly_9】

2018-04-03 20:38:12 552 1

原创 多线程的同步与互斥

当多个控制线程共享相同的内存时,要确保对数据访问的正确性,就需要做线程的同步与互斥工作。先看下面这个例子:为什么要进行线程的同步与互斥#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <pthread.h>#include <sign...

2018-03-17 17:53:28 1028 1

原创 线程基础

线程(thread)是一个程序里的执行路线,每个进程都至少有一个线程。线程基础概念什么是线程线程(thread)是一个程序里的执行路线,每个进程都至少有一个线程。在单线程下,一个进程同一时刻只能干一件事情,而在多线程进程中,同一时刻可以有多个执行流程。如下图:线程的特点 多线程共享的部分:线程是操作系统调度的最小单位,也是进程中实际运作的单位;它是单一顺序...

2018-03-15 14:59:32 194

原创 进程信号

信号时一种从软件层面上对中断的模拟,很多重要的程序都需要处理信号,信号提供了一种处理异步事件的方法。比如,用户在终端按下 ctrl C 会终止一个进程,或者通过 kill 命令来给特定的进程发送信号。信号基本概念每个信号都有一个名字,这些名字以SIG 开头,在头文件 <signal.h> 中,这些信号名被定义为正整数常量(信号编号)。我们可以通过 kill -l 查...

2018-03-14 13:47:20 224

原创 进程替换和exec函数族

fork 创建的子进程一般不会执行和父进程相同的代码段,而是调用 exec 相关函数,将该进程的用户空间代码和数据完全替换,子进程从替换的新程序启动执行。exec仅仅是替换代码和数据,并不会创建新进程,所以被替换的进程 id 和子进程 id 相等。如下图: 新进程从调用进程继承了下列属性:进程 ID 和父 ID,实际用户 ID 和实际组 ID附属组 ID,进程组 ID,回...

2018-03-11 12:02:56 235

原创 进程等待 wait和waitpid

父进程通过 wait 或 waitpid 函数来获取子进程的退出状态,并且彻底杀死这个进程,清理这个进程的所有资源。如果不这么做,子进程会变成一个僵尸进程,长时间占用系统内存,造成类似内存泄漏的问题。wait()#include <sys/types.h>#include <sys/wait.h>pid_t wait(int *status);...

2018-03-11 10:21:08 331

原创 进程创建fork()和vfork()

一个现有的进程可以通过两种方式创建一个新的进程,下面详细介绍两种 fork() 、 vfork()。fork()函数原型( man 手册):#include <unistd.h>pid_t fork(void);描述: fork() 以当前的进程为副本创建一个新的进程,新创建的进程被称为子进程, 当前的进程被称为父进程,父进程和子进程运行在各自的地...

2018-03-10 16:04:17 226

原创 虚函数与虚表指针

多态(polymorphism)是C++语言的一大特性,该词最早出自于希腊语,意为多种状态,而C++中的多态是实现接口复用的一种手段,即在保证接口不变的情况下,根据作用对象的不同而产生不同的运行结果—。C++中实现多态有两个必要的条件: 派生类重写基类的虚函数; 基类的指针或引用指向派生类的对象。 对于第二点很好理解,而第一点中“重写虚函数是什么意思呢?”,...

2018-03-05 13:15:07 608

原创 线程

【作者:果冻 http://blog.csdn.net/jelly_9】

2018-02-28 08:46:32 140

原创 信号

【作者:果冻 http://blog.csdn.net/jelly_9】

2018-02-28 08:45:45 128

原创 进程间通信

【作者:果冻 http://blog.csdn.net/jelly_9】

2018-02-28 08:44:40 128

原创 进程控制

【作者:果冻 http://blog.csdn.net/jelly_9】

2018-02-28 08:43:23 107

原创 进程基础

【作者:果冻 http://blog.csdn.net/jelly_9】

2018-02-28 08:42:05 175

原创 菱形继承和虚拟继承

菱形继承继承是面向对象中实现复用的一个机制,通过继承定义的一个类,可以共享公共的东西,而各自实现本质不同的东西。 在单继承下,这种由继承机制支持的、特殊形式的按值组合提供了最有效、最紧凑的对象表示。在多继承下,当一个基类在派生类中多次出现时就会出现问题。最主要的一个例子是 iostream 类的层次结构模型。如下图:(图片来源:http://blog.csdn.net/lostspe...

2018-02-27 16:26:34 434

原创 指针和引用对比

指针和const指针C++中对于对象的定义是:一块能存储数据并具有类型的空间,对于对象a,它既有内容(存储的值是什么),也有地址(存储值的那块空间的地址编号&a)。程序在运行时,计算机会为其分配存储空间来存储值,我们既可以通过对象名来访问对象的值,也可以通过对象的地址来访问对象的值。存储地址的数据类型叫做指针,我们所谓通过对象地址来访问值,也就是通过指针变量来访问值。指针p也是对象...

2018-02-24 13:28:00 292

原创 友元、内联和宏

友元采用类的机制后实现了数据的隐藏与封装,类的数据成员一般定义为私有成员,成员函数一般定义为公有的,依此提供类与外界间的通信接口。但是,有时需要定义一些函数,这些函数不是类的成员函数,但又需要频繁地访问类的私有数据成员,这时可以将这些函数定义为该函数的友元函数。除了友元函数外,还有友元类,两者统称为友元。友元的作用是提高了程序的运行效率(即减少了类型检查和安全性检查等都需要时间开销),但它破坏...

2018-02-18 16:54:44 217

原创 键值对pair

什么是 pairpair 类是C++标准库的一部分,它使得我们可以在一个对象的内部把相同类型或不同类型的两个值关联起来,它被包含在头文件 unility 中:pair类的结构大致如下:template<class T1, class T2>class pair{public: pair(T1 v1, T2 v2) :first(v1) ,s...

2018-02-18 01:01:41 629

原创 谁调了main函数

之前思考过一个问题:为什么C语言要有main函数,而且程序从main函数开始执行,查了一下资料,以下是我整理的一些内容。C语言为什么要有main函数之前写时 shell 脚本,发现 shell 直接将源程序写在源文件中,然后就从头至尾就开始执行了,并没有像 C语言那样需要一个 main 函数,然后程序从 main 函数开始执行。实际上大多数的脚本语言都是这样——并不需要注明程序...

2018-02-18 00:32:30 1062

原创 C++ 引用

什么是引用引用是 C++ 对C语言的一个重要的扩充,引用就是给一个变量起一个别名,它并没有定义新的变量,对引用的操作与对变量直接操作完全一样,一个对象可以取多个别名,但一个引用只能作为一个对象的别名,即 一对多的关系(一个对象——多个别名)。引用的声明方法如下:int i = 10;int &ri = i;如上代码第一行定义了一个整形变量,而第二则定义了一个整形变量 ...

2018-02-17 23:12:01 320

原创 大小端模式详解及其测定

大小端的寓言故事有关大小端的争论,最早来自于《格列夫游记》里一个有趣的故事: Lilliput和Blefuscu这两个强国在过去的36个月中一直在苦战。战争的原因:大家都知道,吃鸡蛋的时候,原始的方法是打破鸡蛋较大的一端,可以那时的皇帝的祖父由于小时侯吃鸡蛋,按这种方法把手指弄破了,因此他的父亲,就下令,命令所有的子民吃鸡蛋的时候,必须先打破鸡蛋较小的一端,违令者重罚。然后老百姓对此法...

2018-02-16 16:33:56 987 2

原创 C语言知识点总结

从大一开设C语言这门课起,就接触了C语言,到如今,学过的知识点也忘的七七八八了,下面的脑洞图用于回顾C语言中的一些知识点,肯定还有没总结到的地方,等后面再添加吧。其它博客中有更详细的总结,欢迎讨论交流。【作者 :果冻 http://blog.csdn.net/jelly_9】...

2018-02-16 11:59:22 1909

原创 C语言数据类型

数据是程序的重要组成部分,而数据在计算机中存储、数据的属性以及对数据的处理自然而然成了我们关注和学习的重点部分。下面就C语言数据相关知识做一总结。基本数据类型 C语言中包括以下几种数据类型:整型、字符型、浮点型、空类型、指针、聚合类型(数组和结构),除此之外的其它更为复杂的类型多是通过这些基本类型的组合而来的。 整形整型包括短整型(short int)、整型(int)、...

2018-02-13 14:08:22 641

原创 mysql基本概念

什么是数据库数据库是长期储存在计算机内有组织,可共享的数据集合,它采用数据结构来组织、管理、储存数据,具有读写速度快、对数据操作简单、、容易理解、便于维护等特点。数据库分类关系型数据库 关系型数据库是应用数学方法,建立在关系模型上的数据库。 当前主流的有: -Oracle:商业数据库代表,价格贵,非开源主要用于商业大公司 ,如银行,保险,证券等和钱有关的商业公司; DB2:是IB

2017-12-13 13:51:42 276

原创 数据库概述

数据库是数据管理的有效技术,是计算机科学的重要分支。随着时代的发展,今天信息资源已经成为一种宝贵的财富。从校务管理系统到电子政务、商务系统,这些社会的方方面面都会产生庞大的数据,管理和使用这些数据成为当今相关从业者必不可少的一种技能。四个基本概念:数据 数据库中储存的基本对象。狭义的数据指的是对客观世界的数字化描述,而广义的理解认为数据的种类有很多,如文本(text)、图像(image)、音频

2017-12-12 15:02:30 4270

原创 插入排序

将一个元素插入到一个有序序列中,使插入之后的序列仍然有序,是插入排序的核心思想。概述插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据。我们将待排序数组分为前(有序)后(无序)两部分,每次从后一部分取一个数据,然后在前一部分找其对应位置,找到后将其置入,然后增加有序部分的长度,持续这样的操作,直到整个序列有序。原理详解以排升序为例。如上图所示,插入排

2017-12-12 10:31:28 131

原创 冒泡排序

概述冒泡排序 (bubble_sort) 是计算机领域最经典的一种排序算法,它重复走访要排序的序列,每次比较相邻的两个元素,若次序错误就交换它们,直到整个序列有序。 由于冒泡排序每趟通过交换可以将最大(小)元素换至尾端,类似水中逐渐浮起的水泡,故以此得名。原理以排升序为例: 如上图所示,其排序步骤如下: 从前至后依次比较相邻元素,若它们的次序错误就交换其位置,直至比较到数组最后一个元素

2017-12-10 19:22:01 190

原创 【Linux命令】:ps

简介ps 命令是最基本也是非常强大的进程查看命令,使用ps 命令可以查看系统当前进程的详细信息,这些信息包括但不限于进程的所述用户名、进程id、父进程id、cpu占用率、内存占用率、进程状态等等。用法使用权限:所有用户 使用方式:ps [options] 使用效果:瞬间显示进程相关信息 参数:该命令有许多参数,下面将部分参数列举并演示部分常用操作。 -a:显示现...

2017-12-10 14:46:54 214

原创 C语言概述

C语言之父 Dennis Ritchie。 C语言是一门通用的计算机语言,广泛用于系统软件与应用软件的开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。 整理自网络名称来历说起C语言名称的来历,可谓是颇为曲折。在编程语言发展的早期, 有一种叫做 BCPL(Basic Combined Programmin

2017-12-10 12:08:52 986

原创 进程控制块(PCB) —— task_struct

我们把正在执行的程序称为进程,这是一种广义的定义。更具体一点来说,进程是由正文端 (text) 、用户数据段 (usr segment) 以及系统数据段 (system segment)共同组成的一个程序执行环境。进程和程序程序 程序是一个包含及其代码指令和数据的可执行文件,这个文件一般储存在磁盘上(储存设备)上,所以,程序是一个静态的实体。比如,我们用 C 语言写了一个C...

2017-12-09 01:11:41 1636

原创 stl中map的使用

map是一种关联式容器,值以 键值对 "pair" 的形式储存,STL 的 map 以红黑树作为地底层结构。完整代码概述map中的元素以键值对 (pair) 的形式被储存。键值对的第一元素 first 为键值, 第二元素 second 为实值,第一元素键值不允许被改变,原因是 map 内部元素依据键值排序,若改变键值会影响 map 的结构。而第二元素可以被改变。由于红黑树是一棵平衡二叉查找树,在查

2017-12-06 11:39:39 756

原创 MySQL发展历史

整理自网络 MySQL(发音为”my ess cue el”)是一种开放源代码的关系型数据库管理系统,因为是开放源代码的,在下载后可以根据自己的需要进行修改。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库名字由来MySQL的海豚标志的名字叫“sakila”,它是由MySQL AB的创始人从用户在“海豚命名”的

2017-12-05 15:28:54 12516

原创 set算法 (交集,并集,差集,对称差集)

set是以种以红黑树作为底部结构的关联式容器,它查找的平均时间复杂度可以达到 O(logN)。模拟实现 set 的代码概述set 是一种关联式的容器,它的特点是:所有元素依照键值大小被排序。由于 set 内元素有序的特点,所以以红黑树作为它的底部容器最合适不过了。set 中的值不允许被改变,原因是改变它的值会影响底部容器——红黑树的结构,而红黑树的调整则需要付出很大的代价。正因为如此,它具有很高的

2017-12-02 19:14:37 5056

原创 哈希表 (桶)

之前博文提到的平衡二叉搜索树 (AVL 树 和 红黑树)可以在 O(logN) 的时间复杂度内进行增删等操作,下面要介绍的哈希表 (hashtable) 在增删等操作表现更为出色,时间复杂度为 O(1)。完整实现代码概述不同于之前的树形数据结构,此处的哈希表是一种表 (或者字典) 结构,这种结构的好处是提供常数时间复杂度的基本操作,就像数组那样,想要访问某个元素,通过下标一步就可以找到该元素。事实

2017-11-30 12:05:18 2225 1

原创 红黑树 (附 STL 源码学习注释)

除了 AVL 树之外,另一个颇具历史并被广泛运用的平衡二叉搜索树是红黑树。同 AVL 树一样,红黑树的高度也近似为 O(logN),它是通过给节点标记上两种不同的颜色 (红、黑) 来实现此目的的。模拟实现代码概述红黑树是在1972年由 Rudolf Bayer 发明的,当时被称为平衡二叉B树(symmetric binary B-trees)。后来,在1978年被 ...

2017-11-27 12:21:07 777

原创 堆 (heap)

堆是一棵特殊的完全二叉树,由于这个特性,它的底层采用数组储存数据,这样,我们通过一个数组以及一组 heap 算法就可以轻易地实现一个堆。完整实现代码概述根据数组的特点,我们使用一个技巧。如果将 #i 处的元素看作根,则它的左右子树分别为 #(2*i+1) 和 #(2*i+2),这样堆就可定义如下:堆总是一棵完全二叉树;对于大堆,树中每个节点的值总是大于其左右孩子节点的值,对于小堆,树中每个节点

2017-11-16 18:41:53 297

原创 双端队列 (deque)

除了我们常见的的 vector 和 list 之外,还有一种序列式容器 deque。它是一种双向开口的连续线性空间,双向开口意味着你可以在它的头部,尾部任意插入元素,连续线性意味着它底层如同 vector 那样是“连续”的空间。 - 完整实现代码概述我们知道 vector 底层是一块连续的空间, 正因为如此它的迭代器及其简单,仅仅是一个 T* 类型的指针,它的缺点也显而易见——头插数据的效率

2017-10-22 16:17:13 787

原创 队列 (queue)

完整实现代码概述队列是一种先进先出 (FIFO) 的数据结构,它允许在一端插入数据,在另一端删除数据。最先进入队列的数据最先出队列。除此之外,队列还允许访问队头元素和队尾元素、获取队列长度和判断空列队等操作。 队列不提供遍历的方法,也不提供迭代器。 如上图所示,插入操作将新的数据元素插到队尾,删除操作则将队头数据元素删掉,这种结构即可保证最先进入队列的数据元素可以最先出队列。队列操作pu

2017-10-10 21:25:54 630

原创 栈 (stack)

stack 是一种后进先出 ( LIFO ) 的数据结构,它对外只开放一个叫做栈顶的口,数据从栈顶入,也从栈顶出,也不允许有遍历的行为。完整实现代码概述 栈是一种运算受限的序列式容器,它的行为被限定在只能在一端进行增删操作,我们把这一端称为栈顶,相对的另一端为栈底。栈的插入 (push()) 操作又被称为 “入栈” ,新来的数据元素只能被插到栈顶。删除 (pop()) 操作又称为“出栈”,出栈时

2017-10-10 19:42:37 370

原创 list

本篇将介绍 STL 中 list 的使用及实现原理 list是一种序列式容器,它采用链式结构,其中的元素采用节点方式储存,每个节点独占“一块”内存,它对于空间的运用有绝对的精准,一点也不会浪费。为什么呢?如下:完整实现代码list概述我们知道,vector中的数据是连续的储存在一块静态内存上,而此处的list与之不同,它使用“节点”的方式储存数据,节点之间采用指针链接。每一个数据独占一个节点,

2017-09-30 17:15:34 406

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除