自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

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

2019-07-02 22:18:48 31836 3

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

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

2018-08-24 11:15:28 1907

原创 vim常用的功能

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

2018-08-24 10:45:37 646

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

关于命令行参数的解析函数,看到一篇写的很详细的博客,分享给大家。 原链接点这里https://www.cnblogs.com/chenliyang/p/6633739.html 上午在看源码项目 webbench 时,刚开始就被一个似乎挺陌生函数 getopt_long() 给卡住了,说实话这函数没怎么见过,自然不知道这哥们是干什么的。于是乎百度了一番,原来是处理命令行选项参数的,的确,正规...

2018-08-22 10:35:20 317

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

Cookie的工作机制是用户识别和状态管理。Web网站为了管理用户的状态,会通过Web服务器,把一些数据临时写入用户的计算机内。当用户访问该Web网站时,可通过通信方式取回之前存放的Cookie。调用Cookie是,由于可校验Cookie的有效期,,以及发送方的域、路径、协议等,所以正规发布的Cookie内的数据不会因为来自其他Web站点和攻击者的攻击而泄漏。 Set-Cookie字段的属性...

2018-08-20 13:17:45 1056

原创 HTTP的状态码

摘自图解HTTP第4章 当客户端向服务器端发送请求时,通过状态码可以知道自己的请求结果。 状态码的类别 接下来介绍一下常用的状态码 2XX 成功200 (OK)请求已经正常处理表示从客户端发来的请求已经被服务器正常处理了。204 (No Content)请求处理成功,但是没有资源可返回。表示服务器已经成功处理,但在返回的响应报文中不含实体的主体部分。另外,也...

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

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

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

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

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

直接看题: 对于两个字符串,请设计一个高效算法,求他们的最长公共子序列的长度,这里的最长公共子序列定义为有两个序列U1,U2,U3…Un和V1,V2,V3…Vn,其中Ui&ltUi+1,Vi&ltVi+1。且A[Ui] == B[Vi]。给定两个字符串A和B,同时给定两个串的长度n和m,请返回最长公共子序列的长度。保证两串长度均小于等于300。题意就是说,给出两个字符串,...

2018-08-19 19:55:37 497

转载 GET和POST的区别

转载自:https://www.cnblogs.com/logsharing/p/8448446.html 很不错的一篇文章,推荐大家看看~ 下表是参考自w3school的标准答案 接下来更具体的去了解它们的区别。 GET和POST都是HTTP协议中的两种发送请求的方法。 HTTP协议是基于TCP/IP实现的关于数据如何在万维网中如何通信的协议。HTTP的底层是TCP/IP。那么...

2018-08-13 10:02:17 197

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

对于自定义类型,传参的时候尽可能的使用传引用来代替传值。看如下这个例子:#include <iostream>using namespace std;#include <string>class Person{public: Person()//默认的构造函数,如果不给,没法通过编译,因为在创建一个派生类的对象是需要调用。 { ...

2018-08-05 13:18:13 302

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

设计接口时要让接口容易被正确使用,不易被误用。应该让接口具有如下这些性质: “促进被正确使用”,接口的一致性(比如STL中各个容器的接口)以及与内置类型的行为兼容。自定义的类型支持的操作尽量与内容类型的使用保持一致。“阻止误用”的办法包括建立新类型、限制类型上的操作,束缚对象值,以及消除对象的资源管理责任。消除对象的资源管理责任。比如说,如果某个函数返回一个指向动态开辟的内存的指针,要求调...

2018-08-05 09:59:23 177

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

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

2018-08-04 11:15:07 174

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

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

2018-07-30 18:14:52 264

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

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

2018-07-29 16:53:47 450

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

整型变量int a; a是一个整型变量指针变量int* p; p是一个指向整型的指针整型数组int arr[ ] arr是一个数组,数组的每一个元素都是一个整型指针数组int* parr[ ]数组指针int (*p) [ ] p是一个指针,指向一个数组。 p先和*结合,表明它是一个指针,然后指向的是一个整型数组,所以,p是一...

2018-07-27 21:50:22 183

原创 C语言中的操作符

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

2018-07-25 17:13:28 522

原创 C语言预备知识

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

2018-07-24 09:42:11 229

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

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

2018-07-23 19:34:58 4940 5

原创 编译和链接的过程

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

2018-07-22 23:08:24 42058 12

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

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

2018-07-16 12:34:16 6796

原创 STL中vector的构造函数

        vector是由STL提供的一种序列式容器,它的底层其实就是一个动态数组。如要使用vector,需要#include<vector>。vector的特点:        因为支持下标访问,所以能高效的进行随机存取,时间复杂度为O(1);        由于内存空间是连续的,在进行非尾插和尾删的操作时,会进行大量的数据搬移操作,时间复杂度为O(n)。        当数组...

2018-07-15 15:53:01 32160 1

原创 xargs的简单介绍

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

2018-07-08 17:48:29 15021

原创 cut的使用

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

2018-07-08 09:50:15 1966

原创 paste的使用

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

2018-07-07 17:09:59 9320

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

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

2018-07-07 14:31:30 10171

原创 正则表达式

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

2018-07-05 20:37:40 190

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

首先来讲一下频繁地向系统申请小内存块的缺点 用户代码与操作都是在用户态,而操作系统是属于内核态的,用户在向系统申请空间的时候是通过操作系统来申请的,所以,每一次空间申请就会进行用户态与内核态之间的切换,会大大降低效率。       系统在将一块空间交给用户去使用的时候,并不是就将这块空间交给用户就行了,这块空间是可读的还是可写的,有多大等相关信息都要告知用户,所以,还会有额外的开销,每一块...

2018-06-06 18:22:03 840

原创 UDP服务器的实现

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

2018-05-30 20:37:22 7440

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

#pragma once#include <new>#include <iostream>using namespace std;#define THROW_BAD_ALLOC cerr<<"out of memory"<<endl;exit(1)template <int inst>class Alloc_malloc_...

2018-05-29 17:12:36 305

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

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

2018-05-28 19:25:13 253

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

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

2018-05-13 22:45:30 180967 23

原创 生产者消费者模型

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

2018-04-26 20:46:09 205

原创 多线程的同步与互斥

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

2018-04-26 13:39:13 233

原创 守护进程

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

2018-04-19 17:16:01 271

原创 进程间的关系

    进程间有什么关系呢?我们都知道使用fork函数创建进程是一次调用两次返回。父进程返回子进程的进程ID(非0),子进程返回0值。很显然,使用fork创建出来的两个进程是父子关系。那如果两个进程都是同一个父进程创建出来的,它们是什么关系呢?“兄弟”关系。那么,两个或者多个进程之间,都有什么关系呢?在介绍进程间关系之前先介绍两个重要的概念:前台进程与后台进程       我们输入的命令由bash...

2018-04-16 21:16:46 3619

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

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

2018-04-14 17:07:57 223

原创 umask函数的作用

使用umask函数需要包含头文件#include <sys/types.h>#include <srs/stat.h>mode_t umask(mode_t mask);//函数原型该函数为进程设置文件模式屏蔽字,并返回以前的值。即在创建新文件或目录时屏蔽掉你希望新文件或新目录不应有的访问权。比如说你不希望新创建的文件或目录拥有可执行的权限,那么只需将它的可执行权限作为该函...

2018-04-13 20:29:32 1295 1

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

fopen函数  --- 打开一个文件流函数原型:FILE*  fopen(const char *path, const char *mode);参数:参数path是需要打开文件的文件名,通常把它叫做文件的路径,         参数 mode 是打开文件的权限(只读、只写、读写等)。返回值:打开成功返回指向打开文件的指针,后序可以通过这个指针来访问该文件。打开失败则返回NULL。关于第三个参数...

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

原创 线程概念与线程创建

什么是线程?为什么要有多线程?       一家公司需要生产某种产品,然后为生产这种产品提供了各种原材料和几层楼的资源。而这件产品是有很多个零件组成的,各个零件需要的材料可能是不同的,即,有些零件之间的制造是不相互影响的。现在要生产一种产品,由A、B两种零件组成。公司分配了1、2、3这三层楼(2楼是用于生产的该产品的各种器械)用于生产该产品。假设加工零件A是将材料都准备好了放到2楼的机器里边,...

2018-04-11 22:22:07 278

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

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

2018-04-09 21:52:53 329

空空如也

空空如也

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

TA关注的人

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