自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 git关于分支操作

新增分支 切换分支 删除分支 拉取特定分支的代码 删除指定分支的代码 合并分支  新增分支:   切换分支:  删除分支:  拉取特定分支的代码:   删除指定分支的代码  合并分支: ...

2018-09-06 09:46:41 374 1

原创 uniq -- 文本去重工具

定义:     uniq这个命令用于读取输入文件,并比较相邻的行(注意:比较的是相邻的行)。在正常情况下,第二个及以后更多的重复的行将被删除。行比较是根据所用字符集的排序序列进行的。命令格式:     uniq option 文件option:     -c:显示输出中,在每行行首加上本行在文件中出现的次数(注意是连续出现的行)。     -d:只显示重复的

2017-08-20 15:29:19 1270

原创 sort -- 文本排序工具

定义:     sort将文件的每一行作为一个单位,相互比较,比较的原则是从首字符向后,依次按ASCII码进行比较命令:     sort 【选项】 【文本】选项:     默认:没有选项默认按照ASCII码进行比较(升序)     -r:默认是升序,加-r选项变为降序     -u:去除重复行     -o:sort默认将结果输出到标准输出,所以要

2017-08-20 15:28:10 1343

原创 cut --- 文本剪切工具

定义       正如其名,cut的工作就是“剪”,具体的说就是在文件中负责剪切数据用的。cut是以每一行为一个处理对象的,这种机制和sed是一样的。     cut命令可以从一个文本文件或文本流中提取文本列命令格式     cut option 范围 文本option:     -b:按照字节截取。     -c:按照字符截取。     -d:指定

2017-08-20 15:25:48 1008

原创 awk -- 文本处理工具

什么是awk    awk也是文本处理工具,与sed相比,awk不仅能以行为单位处理文件,还可以以列为单位处理文件。awk的缺省行分隔符是"\n",缺省列分隔符是空格或tab,但是行分隔符和列分隔符都是可以自定义。awk命令格式awk option '编辑命令' file1 file2 ...awk option -f 编辑脚本 file1 file2 ...awk处理

2017-08-20 15:20:46 369

原创 sed -- 流式编辑器

sed是什么:     sed意为流式编辑器。也就是将前一个程序的输出引入sed的输入经过一系列的编辑命令转换成另一种格式输出。     sed是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后, 把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重

2017-08-20 15:11:17 701

原创 grep -- 文本编辑器

grep是一种很强大的文本编辑器,他可以支持正则匹配,也可以将匹配的行统计出来。命令: grep [选项] [--color]  '搜索字符串'  文件名选项:-E 支持扩展正则匹配     匹配一个文件中的电话号码选项: -c 统计符合条件的字符串出现的次数选项: -v 显示没有匹配到“搜索字符串”内

2017-08-20 14:56:05 438

原创 linux下作业前后台转换

fg %作业号      将后台程序放置前台运行bg %作业号     将前台程序放置后台运行

2017-08-19 15:38:01 843

原创 动态库和静态库的区别

什么是库:         库通俗的说就是把这些常用函数的目标文件打包在一起,提供相应函数的接口,便于程序员使用。库是别人写好的现有的,成熟的,可以复用的代码,我们只需要知道其接口如何定义,便可以自如使用。     现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。比如我们常使用的printf函数,就是c标准库提供的函数。我们在使用时只需要包含

2017-08-07 19:33:43 1113

原创 线程同步机制(互斥量,读写锁,自旋锁,条件变量,屏障)

先知:     (1)线程是由进程创建而来,是cpu调度的最小单位。     (2)每个进程都有自己独立的地址空间,而进程中的多个线程共用进程的资源,他们只有自己独立的栈资源。线程同步:     当多个控制线程共享相同的内存时,需要确保每个进程看到一致的数据视图。同一个数据如果被两个及以上的线程进行同时访问操作的时候,有可能就会造成数据不一致的现象。为了解决这个问题,线程不

2017-08-04 10:22:36 3205 1

原创 http的长连接和短连接

http协议和TCP/IP协议的关系:     HTTP的长连接和短连接实际上就是TCP的长连接和短连接。HTTP属于应用层的协议,传输层使用TCP协议,网络层使用IP协议。IP协议的特点:     IP协议主要解决网络路由和寻址的问题。TCP协议的特点:     TCP保证数据可靠到达,不会出现丢包问题,并且接收端收到的所有包和发送端发出的所有包顺序一致,TC

2017-07-31 14:13:01 474

原创 OAuth的三种认证方式

三种认证方式:(1)Resource Owner Password Credentials Grant(资源所有者密码凭据许可)(2)Implicit Grant(隐式许可)(3)Authorization Code Grant(授权码许可)资源所有者密码凭据许可:     比如说,你有某个网站的账号和密码,你就可以通过账号密码登陆以后在这个网站上你自己

2017-07-31 13:03:15 8591

原创 深浅拷贝和写时拷贝

拷贝:       事实是,在对象拷贝过程中,如果没有自定义拷贝构造函数,系统会提供一个缺省的拷贝构造函数,缺省的拷贝构造函数对于基本类型的成员变量,按字节复制,对于类类型成员变量,调用其相应类型的拷贝构造函数。浅拷贝:      缺省拷贝构造函数在拷贝过程中是按字节复制的,对于指针型成员变量只复制指针本身,而不复制指针所指向的目标--浅拷贝。浅拷贝的代码

2017-07-25 22:07:38 551

原创 memcpy和memmove的区别

先看一个例子void test(){ int arr[] = {0,1, 2, 3, 4, 5, 6, 7, 8, 9}; size_t size = sizeof(arr)/sizeof(arr[0]); for (int i = 0;i < size;i++) { cout<<arr[i]<<" ";

2017-07-24 18:08:37 331

原创 strcpy和memcpy的区别

strcpy:     strcpy是字符串的拷贝。strcpy函数原型:     char* strcpy(char* dest, const char* src);模拟实现strcpy:char * strcpy(char * dest, const char * src) // 实现src到dest的复制{  if ((src == NULL) ||

2017-07-24 18:05:39 758

原创 对称加密和非对称加密的详细说明

为什么要进行数据加密:      随着人类社会逐渐步入信息时代,信息安全也越来越受到了关注。对计算机而言,信息表现为各种各样的数据,是否采用了适当的方法对数据进行加密,已成为保障数据安全的首要方法。为了保密,一般在网络上传输的重要数据文件都可以对其进行加密,但数据加密也不一定是为了在网络间传输文件,而是为了保证机密文件即使失窃后也不泄漏其中的重要信息。数据加密的作用:     

2017-07-23 11:38:56 4162

原创 cookie和session的认知

Cookie概念:     (1)具体来说cookie机制采用的是在客户端保持状态的方案。它是在用户端的会话状态的存贮机制,他需要用户打开客户端的cookie支持。       (2)cookie是指某些网站为了辨识用户身份,进行session跟踪而存储在用户本地终端的一些数据(通常经过加密),并随每一个请求发送至同一个服务器。 网络服务器用HTTP头向客户端发送cookies,在

2017-07-23 10:04:23 437

原创 求二叉树中最远的两个节点的距离

求两个节点之间最远的距离:     (1)两个节点都是叶子结点     (2)一个是叶子结点一个是根节点思路:     (1)如果具有最远距离的两个节点经过了根节点,那么最远的距离就是左边最深的深度加上右边最深的深度之和。     (2)如果具有最远距离的两个节点之间的路径不经过根节点,那么最远的距离就在根节点的其中一个子树上的两个叶子结点。 i

2017-07-22 18:40:03 4050

原创 求两个节点最近的公共祖先

(1)如果这棵树是二叉搜索树    二叉搜索树是排序过的,位于左子树的节点的值比当前节点的值小,而位于右子树的节点的值都比当前节点的值大。我们只需要从树的根节点开始和两个输入的节点进行比较。     (1)如果当前节点的值比两个节点的值都大,那么最近公共祖先一定在当前节点的左子树里。于是下一步遍历当前节点的左子树的节点。     (2)如果当前节点的值比两个节点的值都小,那么最近公共祖

2017-07-21 22:00:58 2282

原创 重载,重写(覆盖),隐藏

重载:     是指同一作用域内被声明的几个具有不同参数列表(参数的类型,参数的个数的不同)的同名函数。根据参数列表确定调用哪个函数,重载不关心函数返回类型。重载函数通常用来描述一组功能相似的函数,这样做可以减少函数名的数量,避免了名字空间的污染,对于程序的可读性有很大的好处。编译器是怎么解决命名冲突的问题的?     重载的函数名在反汇编代码下,所有的函数名全部变成了“返回值

2017-07-21 15:06:38 375

原创 实现多态——虚函数的对象模型

多态的概念:(一个接口,多种方法)     多态是面向对象语言的三大特性(封装,继承,多态)之一,多态是指同一个实体具有多种形态。C++中的多态具体体现在编译和运行时期,编译时期就确定对象使用的形式(重载)我们成为编译时多态,运行时期才能确定 具体引用的对象使用的形式我们称为动态多态。同一操作作用于不同的对象,可以有不同的解释,产生不同的结果。多态在继承模型下实现,在运行时,可以通过指向基类(

2017-07-21 12:16:39 415

原创 虚继承和虚基类的对象模型

概念     为了解决不同途径继承来的同名的数据成员和成员函数在内存中有不同的拷贝造成数据不一致的问题,将共同的基类设置为虚基类。这时,不同路径继承下来的同名的数据成员在内存中只有一个拷贝,成员函数名也只有一个映射。这样解决了二义性的问题,避免了数据不一致的问题,也节省了内存。解决办法:     解决数据二义性的问题的办法就是虚继承,将共同的基类设置成虚基类。在多继

2017-07-21 10:00:25 551

原创 grep工具的使用

grep是一种很强大的文本编辑器,他可以支持正则匹配,也可以将匹配的行统计出来。命令: grep [选项] [--color]  '搜索字符串'  文件名选项:-E 支持扩展正则匹配     匹配一个文件中的电话号码选项: -c 统计符合条件的字符串出现的次数选项: -v 显示没有匹配到“搜索字符串”内容的那一行     如图:显示的

2017-07-21 08:02:11 1395

原创 IO多路转接之select、poll、epoll

IO多路转接之select     select系统调用的用途:在一段指定的时间内,监听用户感兴趣的文件描述符上的可读,可写,异常时间。     select函数原型:          int select(int nfds, fd_set* readfds, fd_set* writefds, fd_set* execptfds, struct timeval* timeout);

2017-07-20 15:05:59 453

原创 五种IO模型

五种IO模型     (1)阻塞IO     (2)非阻塞IO     (3)信号驱动     (4)IO多路复用     (5)异步IOIO分两步     (1)等待数据     (2)数据搬迁    阻塞IO     在数据准备好前,什么事情都不做,阻塞在那里一直等待 非阻塞IO     需要不停的轮询,询问数据是

2017-07-20 11:21:45 338

原创 linux下查看内存使用情况的命令

(1)/proc/meminfo     /proc/meminfo 文件列出了内存使用情况的总的概况(2)free     free快速查看内存的使用状况,是对/proc/meminfo收集到的信息的一个概述     (3)top     top对系统中的内存使用情况进行实时监控。(4)pmap     pmap

2017-07-18 13:09:35 1374

原创 线程的同步与互斥

什么是临界资源? 多个进程不能同时使用的资源叫做临界资源。什么是临界区? 每个线程访问临界资源的那段代码称作临界区操作系统在引入线程的并发性了以后,随即带来的就是资源共享和竞争的问题(因为线程共享进程所拥有的所有资源)。 举个例子,比如说,现在有两个线程(线程A和线程B),他们都需要用到打印机,如果这个打印机的资源不加以限制,那么在线程A打印还没有结束的时候线程B

2017-07-18 10:54:13 397

原创 链表带环和相交的问题

判断两个链表是否相交?(不带环)     (1)第一种方法:我们只需要遍历每条链表,把最后一个节点保存起来,然后判断这两条链表的最后一个节点是否相等,如果是一样的节点,那么这两个节点就一定相交。     (2)第二种方法:遍历两条链表,求出链表L1的链表长度为len1,链表L2的链表长度为len2,长度差为| len1 - len2 |,让长的链表先走长度差步,然后两个链表在从

2017-07-17 20:42:12 1026

原创 进程和线程的区别

进程:     (1)进程是系统进行分配的最小单位,进程创建的时候就拥有的自己独立的进程地址空间。     (2)在进程中创建线程,一个进程中至少有一个线程。线程:     (1)线程是比进程还要小的能够独立运行的执行体,线程是最小的执行体,是CPU调度的最小单位。     (2)线程自己不拥有系统资源,他和进程中其他的线程共同享有进程所拥有的所有资源,他只拥有运行中不

2017-07-17 20:19:38 335

原创 为什么要将线程设置成分离状态

可结合线程和可分离线程的区别     在任意一个时间点上,一个线程是可结合的,或者是可分离的。一个可结合的线程是可以被其他进程回收资源或者杀死的,在其他线程被回收之前,他的存储器资源(如栈)是不会被回收的。一个可分离的线程是不可以被其他线程回收资源或者杀死的,他的存储器资源在他终止的时候可以由系统自动释放。创建线程后的默认状态     在一个进程中创建线程,默认的状态是可结合的

2017-07-17 19:46:17 3810 3

原创 C/C++中static函数

C/C++中static函数     将函数声明成static函数,那么这个函数只可以在所处的文件中被调用,不能被其他文件调用。而且声明成static函数以后,即使这个函数名和其他文件中的函数名一样,不会引起冲突,也不会引起编译器调用时的二义性。静态函数只初始化一次。static函数的生命随进程,只有进程退出了,才会使这个进程的静态存储区的东西随着进程资源的释放而释放。

2017-07-14 19:13:07 770 1

原创 Linux中的软链接和硬链接

概念:     我们知道文件都有文件名与数据,这在 Linux 上被分成两个部分:用户数据 (user data) 与元数据 (metadata)。用户数据,即文件数据块 (data block),数据块是记录文件真实内容的地方;而元数据则是文件的附加属性,如文件大小、创建时间、所有者等信息。在 Linux 中,元数据中的 inode 号(inode 是文件元数据的一部分但其并不包含文件名

2017-07-14 19:11:24 706

原创 针对死链接占用资源的情况的解决方法

TCP连接中可能由于网络的问题导致客户端断开连接,但是服务器还存在和他的连接,针对死连接占用资源的情况,如何消除这些占有资源的死连接。     如果客户端因为网络原因或者崩溃等许多原因断开了与服务端的连接,然而服务端却不知道客户端已经断开了连接并等待客户端给他发送数据占用着系统资源,我们称这样的情况为“死连接”。 在TCP连接通过三次握手连接上了以后,就会服务端就会启动保活计时器,并且服务端每

2017-07-14 19:06:02 1204

原创 构造函数和析构函数的重载和虚函数的问题

关于作用:构造函数:用于处理对象的初始化,在实例化对象进入作用域的时候自动调用构造函数。析构函数:用于在撤销对象占用内存之前完成一些清理工作,在对象生命周期结束时自动调用。关于重载:构造函数:构造函数可以被重载,因为构造函数可以有不同的参数类型和参数个数,所以构造函数可以有多个。析构函数:析构函数不可以被重载。析构函数只可以有一个,无参数决定了其不能被重载。

2017-07-08 15:02:23 1479

原创 如何定义一个不能被继承的类

方法一:将构造函数声明为私有的如果把一个类的构造函数声明为私有的,那么这个类就不能被继承。但是这也引入了一个问题,不能在类外定义这个类的对象,所以我们还需要在类内定义一个静态的成员函数来返回创建的这个对象。class AA { public: static AA GetObject(int a) {

2017-07-05 14:40:42 785

原创 如何定义一个只能在栈上生成对象的类

我们必须要了解的一些关于堆和栈的基础知识:在C++中,类的对象建立分为两种,一种是静态建立,如A a;另一种是动态建立,如A* ptr=new A;静态建立一个类对象,是由编译器为对象在栈空间中分配内存,是通过直接移动栈顶指针,挪出适当的空间,然后在这片内存空间上调用构造函数形成一个栈对象。使用这种方法,直接调用类的构造函数。          动态建立一个类对象,是使用new运算

2017-07-05 14:25:07 218

原创 如何定义一个只能在堆上生成对象的类

我们必须要了解的一些关于堆和栈的基础知识:在C++中,类的对象建立分为两种,一种是静态建立,如A a;另一种是动态建立,如A* ptr=new A;静态建立一个类对象,是由编译器为对象在栈空间中分配内存,是通过直接移动栈顶指针,挪出适当的空间,然后在这片内存空间上调用构造函数形成一个栈对象。使用这种方法,直接调用类的构造函数。          动态建立类对象,是使用new运算符将

2017-07-05 14:16:03 239

原创 网络中是通过硬件地址找到目的主机的,那为什么还要有IP地址呢?

计算机网络这本书是这样说的:这是因为全世界存在着各式各样的网络,他们使用不同的硬件地址。要使这些异构的网络能够互相通信就必须进行非常复杂的硬件地址转换工作,因此由用户或用户主机来完成这个任务工作是几乎不可能的。他们之间的通信就像连接在同一个网络上那样简单方便,因为ARP的复杂过程都是计算机软件自动进行的,对用户来说是看不见这种调用的。所以,在虚拟的IP网络上用IP地址进行通信给广大的计算机用户

2017-07-04 23:43:54 6580

原创 关于网络层你了解多少

网络层的设计思路:网络层向上只提供简单灵活的,无连接的,尽最大努力交付的数据报服务。网络层不提供服务质量的承诺。由于传输网络不提供端到端的可靠传输服务,这就使网络中的路由器可以做的比较简单,而且相对价格低廉。采用这种设计思路的好处:网络的造价大大降低,运行方式灵活,能够适应多种应用网际协议IP:网际协议IP是TCP/IP体系中两个最重要的协议之一与I

2017-07-04 23:22:16 667

原创 了解dup和dup2函数

描述:dup和dup2都可用来复制一个现有的文件描述符函数原型:通俗理解:(假定返回fd2) dup(fd) == dup(fd, fd2)相当于fd2指向fd所指向的新的文件描述符-->旧的文件描述符打开文件的内核数据结构:代码图解:运行结果如下:

2017-07-04 21:22:24 596

空空如也

空空如也

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

TA关注的人

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