自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 初识Python装饰器

Python装饰器听过Python的人,肯定也听过装饰器的名头,但是好多人不明白装饰器是什么,是如何工作的,原理又是什么。先看看装饰器的定义:如果想要修改某个函数的功能,但是又不想修改这个函数的定义,这种在函数运行期间动态增加功能的方式成为装饰器。简而言之,就是Python提供了一种手段,用于在函数运行期间扩充函数功能,这就是装饰器。闭包在了解装饰器之前,先来看看什么是闭包。闭包就是内...

2020-03-27 16:21:09 184

原创 安装pip3

安装pip3yum install epel-releaseyum install python36 -yyum install python36-setuptoolseasy_install-3.6 pip

2019-10-23 23:20:22 237

原创 迷你搜索引擎

这几天在思考如何对项目做出扩展,当一个网站访问量上升之后随之而来的便是用户的大量交流,根据现在主流的交流方式来看,一般都是一个用户先进行发帖,然后其他用户在下面对之评论,评论系统暂且搁置一边不谈,现在有一个问题就是当帖子数量越来越多,如何快速找到与关键词相对应的帖子,使用关键字在数据库中遍历不太现实,但其实仔细想想搜索引擎不就是做这个的吗,于是就想着实现一个简单的搜索引擎。要实现一个简单的搜索引...

2019-05-14 16:54:14 1887

原创 LRU算法的C++实现

LRU算法是虚拟内存页面换出的一种经常使用的算法,虽然我们经常都说LRU算法,但是底层实现的细节我们并不知道,这里用C++模拟实现LRU算法使用getPage模拟访问某个页面,使用setPage模拟页面的换入换出class LRUCache {private: struct Node { int key; int val; Node(int key_, int val_) ...

2019-05-12 23:24:23 2007

原创 STL-空间配置器

在学习C++的过程中STL扮演了一个非常重要角色,STL中六大组件,容器,仿函数,迭代器,适配器,算法,空间配置器。我们最容易忽略的就是空间配置器STL中空间配置器是为了各个容器高效的管理空间,在使用容器中感觉不到他的存在,但是学习他的原理是非常有必要的为什么需要空间配置器?在C/C++中程序员要申请空间通过malloc从堆上申请空间,这样频繁操作会有一些大的问题产生空间的申请与释放...

2019-04-20 14:32:25 267

原创 Git常用命令清单

工程下载clone远程工程: git clone https://xxxxx.gitfetch远程分支到本地某分支: git fetch origin <orginname>:<localname>分支操作查看分支: git branch查看远程所有分支: git branch -r查看本地和远程所有分支: git branch -a创建分支: ...

2019-04-15 22:00:14 117

原创 从用户态到内核态的切换

从用户态到内核态的切换理解用户态和内核态如上图所示, Linux操作系统的体系架构分为用户态和内核态, 内核从本质上来看也是一种软件资源, 用来控制计算机的硬件资源, 并为上层的应用程序提供运行环境,.用户态即是上层应用程序的活动空间, 应用程序的执行必须依靠于内核提供的资源, 包括CPU, 存储器, I/O资源, 为了让上层应用访问到这些资源, 内核必须为上层应用提供访问的接口: 系统...

2019-04-13 10:59:11 4713

原创 C++智能指针

什么是智能指针?在C/C++程序中, 经常会涉及到一些对内存方面的管理, 但是由于工程较大, 程序员忘了对申请的内存进行释放, 就不可避免的会造成内存泄露问题, 为了解决这种问题, C++提出智能指针的概念智能指针的核心思想就是用对象的声明周期来管理内存资源, 当对象构造时获取资源, 最后在析构时释放资源, 即RAII将内存资源交给对象来处理, 不需要显式释放资源, 采用这种方式, 对象所...

2019-04-01 16:59:28 87

原创 项目:C++在线测评系统

项目思路之前写过一个基于http的在线编译器,可以完成代码的编译过程,但是在leetcode上刷题的时候忽然想到在线OJ不就是一个功能更强大的在线编译器吗?在基础的编译功能上加上了题目列表页的展示,每个题目都有对应的序号,名称以及描述,于是想着能不能自己对这个项目再进行进一步的扩充要实现一个简易的在线OJ,有几个大的模块需要去实现,最主要的是在线编译,编译功能可以在服务器上使用子进程进程替换使...

2019-03-13 18:21:44 4336

原创 C++连接Mysql查询结果中文乱码问题

在写项目时需要用到mysql数据库,使用select查询时查询结果中文全部变为问号,但是在Sql中查询结果正常,解决方案:MYSQL *my_fd = mysql_init(NULL);...msyql_query(my_fd, "set names utf8"); //添加之后查询结果正确...mysql_close(my_fd);...

2019-03-01 18:35:58 2279 3

原创 在线代码测试小项目

[小项目]代码在线测试http是我们生活中最常使用的协议,现如今网络浏览器越来越贴近人们的生活,使得做什么事都很方便,但是想要运行一段代码还得需要在电脑指定的环境下来运行,这在有些情况下让人很抓狂,我在网上也看到过很多代码在线测试的网页,感觉还不错,但是还是不知道这背后具体是怎麽实现的,有幸在网上看到过tinyhttp的源码,便想着自己参照着实现一个小型的http服务器来做一个代码测试服务器。...

2019-02-22 17:39:13 1517

原创 TCP/IP协议字段理解

TCP协议源/目的端口号:表示数据从哪个进程来,到哪个进程去序号/确认序号:TCP将每个字节的数据都进行了编号称为序列号,接收端收到数据之后要发送确认序号给发送端。4位头部长度:表示TCP头部有多少个4字节,所以TCP头部最大长度为15*4=60字节6个标志位URG:紧急指针是否有效ACK:确认号是否有效PSH:提示接收端应用程序立刻从缓冲区读走RST:要求对方...

2019-01-13 17:49:59 7516

原创 C++中的多态

C++多态什么是多态多态的定义及实现抽象类C++关键字override 和 finalC++多态原理探究:包含虚函数类的大小探究:C++多态实现的原理静态绑定与动态绑定虚函数真的需要重写吗什么是多态通俗来说,多态就是同一个事物在不同场景下表现出来不同的状态在C++中,多态体现为同一个类派生出来的对象去调用同一函数时产生了不同的行为多态的定义及实现在继承中构成多态的两个前提条件1、调...

2019-01-11 18:15:39 519

原创 C++中的继承

C++中继承何为继承继承定义格式三种继承方式与三种类访问限定符的关系继承中派生类的对象模型基类和派生类对象赋值转换继承中的作用域派生类的默认成员函数多级继承菱形继承虚拟继承菱形虚拟继承何为继承仔细想想继承在生活中无处不在,孩子可以通过父类继承父类拥有的财产以及事物。在C++中,继承是面向对象的一种设计方法,是代码服用的最重要的手段,继承允许在保持原有类的基础上进行扩展,增加新功能。在继承...

2019-01-11 14:14:24 152 1

原创 C++中的单例模式

C++的单例模式概念 单例模式是一种常用的软件设计模式。它的核心结构只包含一个被称为单例的特殊类。 它的目的是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有的程序模块共享。应用场景在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置文件由一个单例对象统一读取,服务器进程中的其他对象通过这个单例对象获取这些配置信息。实现方式饿汉模式:不...

2019-01-09 13:03:15 1574

原创 用C++实现简单线程池

线程池什么是线程池在使用线程的CS模型中,服务器端每接收到一个客户端请求,都会为客户端创建线程资源,当有大量突发性请求时,服务器来不及为每个客户端创建线程。线程每次的创建与销毁都会耗费服务器大量资源与时间,可以在服务器一开始就创建好一堆线程,等到客户端请求来临直接让这些线程进行处理,这就是线程池。线程池是一种多线程的处理模式,在线程池启动之后,向线程池中添加任务,线程池中的线程将会自动处理...

2018-12-27 11:39:35 2217

原创 Linux下的信号以及信号的处理

Linux-信号认识信号信号产生硬件中断使用系统调用软件产生程序异常阻塞信号信号捕捉信号处理认识信号根据生活中的经验,信号就是向一个事物传递某些信息,在Shell下启动一个前台进程,用户输入Ctrl+c,这个过程就相当于是再给内核传递一个进程取消的信号。那么用户按下Ctrl+c后,发生了什么?如果CPU当前正在执行某个进程的代码,接收到Ctrl+c信号之后用户空间的代码暂停执行,CPU从...

2018-12-20 17:05:58 671

原创 C/C++动态内存管理

C/C++动态内存管理C/C++动态内存管理C/C++程序内存分布C语言动态内存管理方式malloccallocreallocC++动态内存管理方式new/delete操作内置类型new/delete操作自定义类型operator new和operator deletenew typename[]和delete[]定位new表达式new/delete和malloc/free的区别面试题C/C++...

2018-12-10 15:59:47 200

原创 谷歌浏览器设置网页编码

在做http项目使用谷歌浏览器访问服务器,服务器正常响应但是返回的html页面和自己写的中文提示总是乱码,想着可能是设置的字符集有问题,但是仔细检查都是utf8,想到可能是浏览器的编码不一致,百度上的是之前版本的设置编码方法,新版的需要自己下载并安装插件,下载插件:https://pan.baidu.com/s/1cz-byOKeMcP4xkCBtyV4PA下载完成之后点击浏览器右上角控制,点...

2018-12-07 20:27:15 1449

原创 C++中的深浅拷贝以及string类的简单实现

C++中的深浅拷贝以及string类的模拟实现深浅拷贝浅拷贝深拷贝写时拷贝string类的简单实现深浅拷贝浅拷贝浅拷贝也叫做位拷贝,实例化新对象调用拷贝构造函数时只是把原对象中的数据原封不动的拷贝一份放在新的对象中,这在没有涉及到资源管理的类中是没有问题的。我们可以先来看一个日期类class Date{friend ostream&amp; operator&lt;&lt;(ostr...

2018-12-07 17:13:53 167

原创 只出现一次的数

只出现一次的数只出现一次的数i只出现一次的数ii只出现一次的数iii只出现一次的数i问题描述:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。解决思路将数组中元素全部异或,根据异或特点,出现两次的元素异或后结果为0,数组全部异或之后的结果就是只出现一次的那个元素。代码实现int singleNumber(vector&lt;int...

2018-12-05 22:38:20 146

原创 TCP协议的三次握手四次挥手

TCP协议TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,计算机网络OSI模型中,它完成第四层传输层所指定的功能。TCP的可靠性体现在他的确认应答机制,每当客户端发起请求,会向服务器发送一个SYN请求,当服务器接收到这个请求后会向客户端回应SYN+ACK,最后客户端向服务器回应ACK,至此三次握手完毕,成...

2018-11-30 16:43:57 136

原创 Linux-套接字编程

认识套接字认识IP地址网路通信的本质是两个不同的主机在进行数据交互,在交互的过程中,数据是不会自己决定流向,这就需要有标示来指明数据从哪里来要到那里去。IP地址在网络中标识了唯一的一台主机,只要获取到对方的IP地址,就可以给对方发送数据。IP地址在IP协议中是用来标示网络中唯一的一台主机IP协议不同,对应的IP地址也不同,对于IPv4来说,IP地址是一个4字节32位的整数我们通常使...

2018-11-28 15:28:47 196

原创 Linux-线程

线程线程概念线程是一个进程内部的控制序列,一切进程至少都有一个线程,线程是运行在进程内部的,进程中的线程共享进程的虚拟地址空间进程和线程Linux下的线程是以进程的PCB来模拟的,一个进程中至少有一个线程,所以此时的进程就可以理解为一个线程组,在进程的CPB中,有一个单独的成员pid来标示这个进程,但是现在有多个线程所以就需要多个pid。既然现在的进程是线程组,所以在每个task_st...

2018-11-27 22:28:46 118

原创 Linux-进程间通信

进程间通信为什么要有进程间通信?早期计算机任务简单一个进程就可以搞定,但是随着计算机的飞速发展,为了完成一个任务需要许多进程来共同协作,这就需要不同进程间来进行数据交互,这就是进程间通信。进程间通信的目的:数据传输:一个进程把数据发给另一个进程资源共享:不同进程间需要用到同一种资源事件通知:一个进程需要向另一个进程通知了某些事件的发生(子进程退出发给父进程信号)进程控制:一个进程...

2018-11-26 15:34:55 97

原创 常用排序之快速排序

快速排序基本思想取待排序元素中的某一个元素作为基准值,按照该基准值将待排序集合分为两部分,左子序列中的元素均小于基准值,右子序列中的所有元素均大于基准值,然后左右子序列重复该过程,直到所有元素都已排好序。快速排序整体上使用的是一个分治的思想,在实现方面需要将大问题化为一个个小问题,直到部分小区间全部有序或者小区间内没有数。在处理区间的问题上,我们使用的是前闭后闭的方式。基于此我们可以写出...

2018-11-23 17:55:57 110

原创 常见排序之插入排序

插入排序排序思想直接插入排序就是把待排序的记录按关键字的大小逐个插入到一个已经排好序的有序序列中,直到所有记录插入完为止。我们可以假设序列第一个元素是已经排好序的,要插入第i(i&amp;gt;=1)个元素,可以将array[i]与排好序的每个元素相比较,知道找到一个比array[i]要小的元素插入到这个元素后面。原来的元素后移。void InsertSort(int *array, int s...

2018-11-22 10:50:16 111

原创 C++类与对象

类与对象的初步认识初识类C语言是面向过程的,注重的是求解问题的步骤,通过函数调用之间逐步解决,C++基于C语言的,但是C++却是基于面向对象的,所以C++关注的是对象,将同一事件拆分成不同的对象,靠对象之间的联系来解决问题。类(Class)是面向对象程序设计(OOP,Object-Oriented Programming)实现信息封装的基础。类是一种用户定义类型,也称类类型。每个类包含数据...

2018-11-21 16:25:20 633 3

原创 C++引用及C11的一些关键字

C++引用及C11的一些关键字引用引用概念引用特性const常引用引用与指针内联函数宏与宏函数C++11的一些关键字autoauto的使用C++11新式for循环指针控制nullptr引用引用概念 引用不是定义一个新的变量,而是给已知的变量取一个别名,定义一个引用变量之后,编译器并不会在内部为它开辟内存,而是和其引用变量共用一块内存空间。 类型&amp; 引用变量 = 引用实体;引用特...

2018-11-19 15:30:15 672

原创 C++命名空间&缺省参数&函数重载

命名空间使用命名空间是要对标识符的名称进行本地初始化,避免命名冲突。定义命名空间需要用到namespace关键字,后跟命名空间的名字,在{}内为命名空间的成员//普通的命名空间namespace N1{ //命名空间的名称为N1 //可定义变量也可以定义函数 int a = 10; int add(int x, int y){ return x + y; }}//...

2018-11-07 15:33:46 166

原创 Mysql-基本查询

增加insert into table_name[(column[,column...])] values (value [,value...]);在查询之前我们可以创建一张商品表并插入几条数据.--创建一张商品表create table goods( id int unsigned primary key, name varchar(100) not null de...

2018-11-07 12:54:50 183

原创 Mysql-数据类型及表约束

表的数据类型tinyint有符号:-128~127, 无符号:0~255, 默认有符号create table t1(num tinyint);insert into t1 values(1);insert into t1 values(128); --越界报错无符号:create table t2(num tinyint unsigned);insert into ...

2018-11-02 14:37:58 241

原创 MySql-基本操作

Windows安装Mysql可以参考:http://blog.51cto.com/aiilive/2116476我们可以先来创建一个简单的数据库,并进行一些简单的操作登陆本地mysql:mysql -u root -p显示当前数据库:show databases;创建数据库:create database helloworld;使用数据库:use hel...

2018-10-31 16:26:23 113

原创 删除链表倒数第N个结点

给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1-&gt;2-&gt;3-&gt;4-&gt;5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1-&gt;2-&gt;3-&gt;5.说明:给定的 n 保证是有效的。之前在LeetCode上遇到这道题想的有点简单,没有考虑极端情况,比如N刚好等于链表长度,N等于1等等,所...

2018-10-31 14:52:06 304

原创 Linux-进程控制

进程创建fork会在已存在的进程中创建一个新进程出来,并且当前进程作为父进程,新创建出来的进程作为子进程。当进程调用fork之后,内核会分配新的内存块和数据给子进程,并且将父进程数据内容拷贝给子进程,然后将子进程添加至系统就绪队列,系统调用fork完成之后开始返回,但是这里fork将会有两个返回值父进程返回子进程的进程ID,子进程返回0,通常用if语句来做分流。pid_t fork(vo...

2018-10-29 17:33:31 144

原创 Linux-进程初识

程序是为了完成特定任务的一系列指令的集合,进程是程序的一次动态执行,在我们打开计算机的同时,操作系统启动会创建许多进程,那么这么多进程操作系统是如何同一管理呢。操作系统会先把进程描述起来,进而把进程组织起来。我们知道,一个程序执行时需要CPU分配程序所需要的资源,那操作系统就需要知道这个进程此时的状态以及调用栈的等等一系列状况,所以就需要一个容器来存放这些具体的参数,这个容器就是PCB。在Li...

2018-10-27 22:06:16 227

原创 Linux下git的初步使用----add&&commit&&push

什么是git?git可以用来干什么?我想这是大多数初学者想不通的一个问题,当然也包括我,在第一次接触到git时,我从网上查看了大量的博客,但却始终无法正确使用。网上资料虽然丰富完全,但是对于新手来说并不是很友好,所以我在这里总结一下最基本使用git的方法。再说使用之前我们先来说说为什么要有git,当你在用户目录下新建一个.c或者一个.cpp文件时,目录下并不会显得杂乱,但是加上各种要引...

2018-09-14 21:32:00 4709

原创 Linux基础指令

Linux和windows不同,Linux没有强大的图形界面,所以用命令来与操作系用进行交互就显得尤为重要,下面列出Linux中常见的基础指令.基本上我们每次登陆Linux都会用到.1.lsls是我们在Linux下学习的第一个命令,ls相当于list的简写,它的作用是列出该目录下的所有子目录和文件,命令后还可以加一些选项来达到我们的目的语法:ls [选项] [目录或文件]常用选项...

2018-07-29 17:39:33 163

原创 字符和字符串函数

求字符串长度strlensize_t strlen(const char *str);//返回字符串中'\0'前面出现字符的个数 模拟实现//计数器方式int my_strlen(const char *str){ int count = 0; while (*str++) { count++; } return count;}//递归方式int my...

2018-07-22 12:13:31 135

原创 C_指针_2

指针数组指针数组,顾名思义是一个数组,是一个用来存放指针的数组,数组里可以是整形,浮点型,当然也可以是指针类型.int *arr1[3];char *arr2[3];char **arr3[1][2];数组指针数组指针是一个指针,有能力指向一个数组int (*p)arr[3];//p先和*结合,说明p是一个指针,指向一个大小为3的整形数组,[]的优先级要高于*,所以要加...

2018-07-20 21:40:06 90

空空如也

空空如也

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

TA关注的人

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