自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 python中的import、from import以及import as的区别

首先介绍一下import和include的区别或者说import相对include的好处: import导入的内容只会被包含一次,在引入之前会检测是否已经存在该模块,不存在才会被引入,而include是不会做判断的。使用import在递归包含的时候不会出错,不会引起交叉编译的问题。 此外,使用i...

2019-07-02 22:18:48 5824 0

原创 Debug和Release的区别以及obj文件的作用

Debug和Release的区别 Debug:调试版本,包含调试信息,所以容量比release大很多,并且不进行任何优化,(优化会使调试复杂化,因为进行优化肯定会进行一些额外的处理,这样就导致了源代码和生成的指令间关系变得更加复杂),便于程序员调试。Debug模式下生成两个文件,除了.exe ...

2018-08-24 11:15:28 794 0

原创 vim常用的功能

vim是vi 的升级版本,它兼容vi的所有指令,而且还有一些新的特性,比如说预付高亮、可视化操作不仅可以在终端进行,还可以在 x Window、mac os、windows vim 有多种模式,我们常用的有三种:命令模式、插入模式、末行模式。 进入插入模式的三种方式: i : 从光标当前位置...

2018-08-24 10:45:37 216 0

转载 命令行选项解析函数(C语言):getopt()和getopt_long()

关于命令行参数的解析函数,看到一篇写的很详细的博客,分享给大家。 原链接点这里https://www.cnblogs.com/chenliyang/p/6633739.html 上午在看源码项目 webbench 时,刚开始就被一个似乎挺陌生函数 getopt_long() 给卡住了,说实话...

2018-08-22 10:35:20 95 0

原创 HTTP报头中为cookie服务的首部字段

Cookie的工作机制是用户识别和状态管理。Web网站为了管理用户的状态,会通过Web服务器,把一些数据临时写入用户的计算机内。当用户访问该Web网站时,可通过通信方式取回之前存放的Cookie。调用Cookie是,由于可校验Cookie的有效期,,以及发送方的域、路径、协议等,所以正规发布的Co...

2018-08-20 13:17:45 620 0

原创 HTTP的状态码

摘自图解HTTP第4章 当客户端向服务器端发送请求时,通过状态码可以知道自己的请求结果。 状态码的类别 接下来介绍一下常用的状态码 2XX 成功 200 (OK)请求已经正常处理 表示从客户端发来的请求已经被服务器正常处理了。 204 (No Content)请求处理成...

2018-08-20 09:34:58 215 1

原创 求一个数组中和为sum的方法数

题目描述 给定一个有n个正整数的数组A和一个整数sum,求选择数组A中部分数字和为sum的方案数。 当两种选取方案有一个数字的下标不一样,我们就认为是不同的组成方案。 这是一道简单的动态规划题目,困惑了我好久,今天终于搞明白了,分享给大家。这道题使用递归的方式做OJ是过不了的,时间复杂度太高...

2018-08-19 21:25:41 2454 2

原创 动态规划---求最长公共子序列

直接看题: 对于两个字符串,请设计一个高效算法,求他们的最长公共子序列的长度,这里的最长公共子序列定义为有两个序列U1,U2,U3…Un和V1,V2,V3…Vn,其中Ui&ltUi+1,Vi&ltVi+1。且A[Ui] == B[Vi]。 给定两个字符串A和B,...

2018-08-19 19:55:37 341 0

转载 GET和POST的区别

转载自:https://www.cnblogs.com/logsharing/p/8448446.html 很不错的一篇文章,推荐大家看看~ 下表是参考自w3school的标准答案 接下来更具体的去了解它们的区别。 GET和POST都是HTTP协议中的两种发送请求的方法。 HTTP协...

2018-08-13 10:02:17 87 0

原创 Effective C++读书笔记----自定义类型的传参和返回值问题

对于自定义类型,传参的时候尽可能的使用传引用来代替传值。 看如下这个例子: #include <iostream> using namespace std; #include <string> class Person { pu...

2018-08-05 13:18:13 102 0

原创 Effective C++ 读书笔记----接口和类的设计

设计接口时要让接口容易被正确使用,不易被误用。应该让接口具有如下这些性质: “促进被正确使用”,接口的一致性(比如STL中各个容器的接口)以及与内置类型的行为兼容。自定义的类型支持的操作尽量与内容类型的使用保持一致。 “阻止误用”的办法包括建立新类型、限制类型上的操作,束缚对象值,以及消除对象...

2018-08-05 09:59:23 72 0

原创 Effective C++读书笔记----资源管理

C++中,我们自己申请的资源,需要我们手动的释放。 有时候我们给了显示释放资源的语句,但是存在有些意外情况导致释放语句没能成功被执行。比如说在执行释放语句前函数提前返回;假如释放语句在一个循环内部,循环因为continue或者break提前结束;执行释放语句之前程序抛异常了。 为了防止资源泄漏,...

2018-08-04 11:15:07 85 0

原创 Effective C++读书笔记----构造/析构/赋值运算

对于一个空类,编译器会自动创建构造函数、拷贝构造函数、赋值运算符重载以及析构函数。(当然只有在这些函数在被调用的时候才会被编译器创建出来)如果我们在类中显示的声明了这些函数,编译器将不再自动生成这些函数。 当类的成员变量中有引用类型或者有const修饰,编译器不会为该类生成赋值运算符重载函数,尽...

2018-07-30 18:14:52 101 0

原创 Effective C++读书笔记---让自己习惯C++

* 声明式是告诉编译器某个东西的名称和类型。 * 签名式是指参数和返回值。一个函数的签名等同于该函数的类型(C++对签名式的官方认定不包括返回值) * 将函数声明为 explicit ,可以阻止他们被用来执行隐式转换,但他们仍可以用来进行下你是类型转换 * 其他静态成员只能在类里边进行声明...

2018-07-29 16:53:47 284 0

原创 函数&指针&数组混搭

整型变量 int a; a是一个整型变量 指针变量 int* p; p是一个指向整型的指针 整型数组 int arr[ ] arr是一个数组,数组的每一个元素都是一个整型 指针数组 int* parr[ ] 数组指针 int (*p) [ ] ...

2018-07-27 21:50:22 58 0

原创 C语言中的操作符

首先讲述一下两个概念:左值和右值 左值就是能够出现在赋值运算符左边的东西,右值就是能够出现在赋值运算符右边的东西 算数操作符(+ -  *   /  %) 除了 % 操作符,其他几个操作符都可以作用于整数和浮点数。 对于 / 操作符,如果两个操作数都是整数,则做整数除法。只要其中有一个是浮...

2018-07-25 17:13:28 246 0

原创 C语言预备知识

C语言的特点:高效、灵活、功能丰富、表达力强和较高的可移植性 #include <stdio.h> 和#include "stdio.h"的区别 查找路径不一样。 #include 预处理指令用于把这个文件包含到需要使用这些声明的源文件中。 ...

2018-07-24 09:42:11 84 0

原创 内存的分区与数据的存放

典型的存储器安排(Linux下的内存分配) 栈区:由编译器自动分配与释放。用于存放局部变量、函数参数、函数返回值。特点:效率高,但空间大小有限。 堆区:使用malloc或者new开辟的空间都是在堆上分配的,需要程序员显示地释放。如果没有释放,在程序运行结束时可能由OS回收。特点:使用灵活,...

2018-07-23 19:34:58 2484 4

原创 编译和链接的过程

程序要运行起来,必须要经过四个步骤:预处理、编译、汇编和链接。接下来通过几个简单的例子来详细讲解一下这些过程。 对于上边用到的几个选项需要说明一下。 使用 gcc 命令不跟任何的选项的话,会默认执行预处理、编译、汇编、链接这整个过程,如果程序没有错,就会得到一个可执行文件,默认为a.out...

2018-07-22 23:08:24 12768 6

原创 vector中常见接口的介绍与使用

迭代器相关iterator begin();正向迭代器:返回一个迭代器,指向vector对象的第一个元素iterator end();正向迭代器:返回一个迭代器,指向vector对象最后一个元素的后边reverse_iterator rbegin();反向迭代器:返回一个迭代器,指向vector对...

2018-07-16 12:34:16 3375 0

原创 STL中vector的构造函数

        vector是由STL提供的一种序列式容器,它的底层其实就是一个动态数组。如要使用vector,需要#include<vector>。vector的特点:        因为支持下标访问,所以能高效的进行随机存取,时间复杂度为O(1);        由...

2018-07-15 15:53:01 8218 0

原创 xargs的简单介绍

xargs的作用       xargs命令是用于给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具。       它擅长于将标准输入数据转换成功命令行参数能够将管道或者标准输入里的数据转换成特定命令的命令行参数。       xargs也可以将单行或多行文本输入转换成其他格式,例如单行变...

2018-07-08 17:48:29 3000 0

原创 cut的使用

cut的作用       cut命令用于从文件的每一行剪切字节、字符和字段,并将这些字节、字符和字段写到标准输出。注意:cut必须制定-b、-c 或-f 标志之一-b选项,以字节为单位进行分割-c选项,以字符为单位进行分割细心的读者可能发现上边这两张图图片除了选项不同和描述有一点点差别外,其他的都...

2018-07-08 09:50:15 1081 0

原创 paste的使用

paste的作用       用于将两个文件进行文本合并的工具。它合并的方式比较特殊,比如说两个文件的合并,不是将一个文件搬移到另一个文件的后边,而是将文件并行展出,也就是说,它将一行分为两部分(两列),前一列放第一个文件,后一列放第二个文件。那么合并后的第一行有两列,分别放的两个文件的第一行。可...

2018-07-07 17:09:59 3196 0

原创 sort和uniq的常见选项及其使用

sortsort,见名知意,就是用来排序的。sort读取每一行输入,并按照指定的分隔符(默认为空格)将每一行划分成多个字段,这些字段就是排序的对象。同时,sort可以指定何种排序规则进行排序,默认使用当前字符集排序规则,还可以按照字典排序规则、数值排序规则、按照月份排序规则、按照文件大小排序规则等...

2018-07-07 14:31:30 3284 0

原创 正则表达式

正则表达式概念       正则表达式是用于描述一组字符串特征的模式,用来匹配特定的字符串。通过特殊字符+普通字符来进行模式描述,从而达到文本匹配目的的工具。通俗的说,就是在描述某个事物时,通过描述它具有的特征来将它描述起来,有的特征是可以精确的描述出来,但是对于有的特征,每个人心中可能会有不同衡...

2018-07-05 20:37:40 58 0

原创 二级空间配置器的原理剖析和简单实现

首先来讲一下频繁地向系统申请小内存块的缺点  用户代码与操作都是在用户态,而操作系统是属于内核态的,用户在向系统申请空间的时候是通过操作系统来申请的,所以,每一次空间申请就会进行用户态与内核态之间的切换,会大大降低效率。        系统在将一块空间交给用户去使用的时候,并不是就将这块空间交...

2018-06-06 18:22:03 369 0

原创 UDP服务器的实现

先介绍一个重要的函数:socket(),socket()是用于创建一个套接字的。函数原型:参数:domain确定了通信的特性也包括地址格式,比如AF_INET就是IPV4协议,AF_INET6就是IPV6协议,AF_UNIX是UNIX域。           type是套接字的类型,进一步的确定了...

2018-05-30 20:37:22 4336 0

原创 SGI一级空间配置器的简单介绍与实现

#pragma once #include <new> #include <iostream> using namespace std; #define THROW_BAD_ALLOC cerr<<"o...

2018-05-29 17:12:36 96 0

原创 关于网络编程套接字的基础知识

为了方便后边更好地理解网络套接字编程,先介绍一些重要的概念。 IP地址 IP地址是在IP协议中用来标识网络中不同主机的地址。它有两个版本:IPv4 和 IPv6 IPv4:IP地址由4个字节(0~255)构成,共32位。 IPv6:IP地址由16个字节(0~255)构成,共128位。 接...

2018-05-28 19:25:13 120 0

原创 死锁的四个必要条件和解决办法

死锁概念及产生原理    概念:多个并发进程因争夺系统资源而产生相互等待的现象。    原理:当一组进程中的每个进程都在等待某个事件发生,而只有这组进程中的其他进程才能触发该事件,这就称这组进程发生了死锁。    本质原因:        1)、系统资源有限。        2)、进程推进顺序不合...

2018-05-13 22:45:30 66264 16

原创 生产者消费者模型

什么是生产者消费者模型? 生产者消费者问题是一个很经典的线程同步问题。将数据的产生和处理分由多个线程来完成,一部分用于完成数据的产生,另一部分用于完成数据的处理。我们形象地将产生数据的线程称为生产者,将用于数据的处理的线程称为消费者。生产者将数据生产出来,然后放入缓冲区,然后消费者从缓冲区去里边...

2018-04-26 20:46:09 75 0

原创 多线程的同步与互斥

mutex互斥锁实现互斥为什么需要互斥?          前边已经说过了,线程是在进程内部的,即线程是共享进程的地址空间的。线程拥有仅属于自己的一部分数据的:线程ID、一组寄存器(用于保存自己的上下文信息)、栈、errno、信号屏蔽字、调用优先级。所以大部分情况,线程使用的数据都是局部变量,变量...

2018-04-26 13:39:13 96 0

原创 守护进程

守护进程的概念       守护进程(Daemon)是运行在后台的一种特殊的进程,它独立于控制终端并且周期性地执行某种任务或者等待处理某些发生的事件。守护进程不需要用户输入(即不需要从控制端接收数据)就能运行而且能够为用户程序甚至整个系统提供某种服务。Linux系统中大多数服务器就是通过守护进程实...

2018-04-19 17:16:01 122 0

原创 进程间的关系

    进程间有什么关系呢?我们都知道使用fork函数创建进程是一次调用两次返回。父进程返回子进程的进程ID(非0),子进程返回0值。很显然,使用fork创建出来的两个进程是父子关系。那如果两个进程都是同一个父进程创建出来的,它们是什么关系呢?“兄弟”关系。那么,两个或者多个进程之间,都有什么关系...

2018-04-16 21:16:46 1199 0

原创 基础I/O----通过系统调用来操纵文件

简单回忆一下两个在C语言中用于文件的读写的函数 size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); //用于从文件里边读数据     ptr:用于存储读取数据的空间     size:读取元素的大小     n...

2018-04-14 17:07:57 100 0

原创 umask函数的作用

使用umask函数需要包含头文件#include <sys/types.h>#include <srs/stat.h>mode_t umask(mode_t mask);//函数原型该函数为进程设置文件模式屏蔽字,并返回以前的值。即在创建新文...

2018-04-13 20:29:32 438 0

原创 C语言中文件操作函数汇总

fopen函数  --- 打开一个文件流函数原型:FILE*  fopen(const char *path, const char *mode);参数:参数path是需要打开文件的文件名,通常把它叫做文件的路径,         参数 mode 是打开文件的权限(只读、只写、读写等)。返回值:打...

2018-04-13 19:56:54 2677 1

原创 线程概念与线程创建

什么是线程?为什么要有多线程?        一家公司需要生产某种产品,然后为生产这种产品提供了各种原材料和几层楼的资源。而这件产品是有很多个零件组成的,各个零件需要的材料可能是不同的,即,有些零件之间的制造是不相互影响的。现在要生产一种产品,由A、B两种零件组成。公司分配了1、2、3这三层楼(...

2018-04-11 22:22:07 101 0

原创 熟悉编译器gcc/g++

本文说是为了熟悉gcc/g++编译器,除此之外,还希望读者能对源程序被执行起来的整个过程有更深刻的理解。gcc和g++的用法差不多,本文就以gcc为例来讲解一个源程序被执行起来首先要经过四个步骤:预编译、编译、汇编、链接。预编译:1)、宏替换与删除。将代码中展开所有的宏,并将所有的#define宏...

2018-04-09 21:52:53 114 0

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