自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 2021-02-02

两数之和给定一个数组和一个目标数,查找数组中是否有两个数之和等于目标数,如有,返回两个数的下标。1. 暴力 : 两层for循环(指定一个数,按个遍历剩余数)2. hash表:将数组存入哈希表,单循环即可...

2021-02-02 21:52:53 199

原创 Linux Vim插件管理器Vundle安装和使用

Vundle是vim的一个插件管理器, 同时它本身也是vim的一个插件。插件管理器用于方便、快速的安装、删除、Vim更新插件。vim Vundle插件官方地址:https://github.com/VundleVim/Vundle.vim步骤1、下载Vundle插件(一)使用"yum -y install git"安装git命令(二)输入指令mkdir -p ~/.vim/bundlegit clone https://github.com/gmarik/Vundle.vim.gi.

2020-08-04 16:06:53 945

原创 二叉搜索树

二叉搜索树基本概念二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不空,则左子树上所有节点的值均小于它的根节点的值;若它的右子树不空,则右子树上所有节点的值均大于它的根节点的值;它的左右子树也分别为二叉排序树。如下图所示二叉搜索树的查找若根节点 = 要查找的节点 返回true若根节点 < 要查找的节点 ,在右子树种查找若根节...

2019-07-26 14:10:57 329

原创 IO多路转接之select、poll、epoll简介及优缺点对比

IO多路转接IO多路转接也叫做IO多路复用,它是一种处理高并发的IO事件监控。它可以同时对大量的描述符进行监控,监控其是否具备了IO条件。就绪:包括了读就绪事件(就是有数据到来的时候),写就绪事件(缓冲区有空闲的空间),异常事件(发生异常)。对于服务器来说,很多时候我们都是监控的读事件,对于写事件和异常事件都只会在特定的情况下使用。IO多路转接之selectselect简介系统提供了se...

2019-07-25 15:17:28 529

原创 五种IO模型

五种IO模型以前,我看过别人针对五种IO模型举过一个很合适的例子,那么今天我将以生动的例子帮助大家更好的理解这五种IO模型。阻塞IO假如A在河边钓鱼的时候,非常的专心,生怕鱼儿溜掉,故此,A就一直盯着鱼竿,一直等着鱼儿上钩,专心的做这一件事情,直到鱼儿上钩,才结束这个动作,这就是阻塞IO。在内核把数据准备好之前,系统调用会一直处于阻塞状态。非阻塞IO假如B也在河边钓鱼,B不想像A一样把...

2019-07-25 12:56:34 264

原创 C++多态

C++多态多态概念字面意思,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。举个例子:假如你要去看电影,有的影院也许有这样的规定,如果你是成年人,那么就是全票,如果你是学生,那么就是半价票,如果你是一个小孩子,那么你就不需要票,免费。这就是很典型的一个例子,针对不同的对象,你去做这件事发生的结果是不一样的。多态的发生条件必须通过基类的指针或者引用调用虚函...

2019-07-24 16:42:58 264

原创 C++继承

C++继承继承概念继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,而继承是类设计层次的复用。class Person{public: void Print() { co...

2019-07-24 14:26:25 204

原创 C++类型转换

C++类型转换C语言类型转换在c语言中,存在两种类型转换,一种是隐式类型转换,另一种是显示类型转换。如下所示。int a = 4;double b = a; //隐式类型转换int *ptr = &a;int address = (int) ptr;缺陷:C语言中的隐式类型转换看起来是很方便,但在有些时候也会给我们带来一些隐患问题。C语言中的强制类型转换太...

2019-07-24 13:07:37 482

原创 基于C++和SQLite自主开发的SuperDocumentRetriever

项目简介项目名称 : SuperDocumentRetriever(超级文档检索器)开发环境 : Visual Studio 2017项目描述 : 本项目是一款实用型小工具,可以根据输入的关键字快速的在         本地检索出相关信息项目特点 : 1. 使用 Sqlite 数据库        2.自主实现简易...

2019-07-22 13:43:30 1159 2

原创 C++ 异常处理

C语言处理错误的方式终止程序。assert ,这种方式比较粗暴,如发生内存错误,除0错误时就会终止程序返回错误码,缺陷:需要程序员自己去查找对应的错误。如系统的很多库的接口函数都是通过把错误码放到errno中,表示错误C 标准库中setjmp和longjmp组合。这个不是很常用,这个我也不是很了解。大家知道有这么个东西就行了。C++异常概念异常是一种处理错误的方式,当一个函数发现自己...

2019-07-20 23:10:21 248

原创 C++智能指针

导入我在学习C语言的时候,最让人头疼的便是指针,指针本身并不难,但是指针和内存挂钩就显得不那么容易理解。我们经常要利用 malloc 申请内存空间,但是一不留神就忘记释放内存空间,那么着就会造成内存泄漏,不容小觑。那么C++中我们该如何解决这个问题呢?RAII基本描述RAII(Resource Acquisition Is Initialization)是一种利用对象生命周期来控制程序资源...

2019-07-19 16:19:15 168

原创 MySQL表的内外连接以及视图

MySQL内连与外连内连接内连接实际上就是利用where子句对两种表形成的排列组合进行筛选语法select 字段 from 表1 inner join 表2 on 连接条件 and 其他条件;举个例子-- 用以前的写法select ename, dname from emp,dept where emp.deptno=dept.deptno and ename='MIKE';--...

2019-07-14 22:45:51 1140

原创 MySQL索引与事务

MySQL索引索引基本描述索引是用来提高数据库的性能的一种机制。不用加内存,不用改程序,不用调sql,只要执行正确的create index ,查询速度就可能提高成百上千倍。但是天下没有免费的午餐,查询速度的提高是以插入、更新、删除的速度为代价的,这些写操作,增加了大量的IO。所以它的价值,在于提高一个海量数据的检索速度。索引分类主键索引(primary key)唯一索引(unique...

2019-07-14 22:22:02 590

原创 MySQL增删改查基本使用(CRUD)

前言在前几篇,我介绍了关于MySQL的基本概念,那么本次就要开始介绍关于MySQL的最重要的部分,那就是关于表的操作。(CRUD- Create, Retrieve,Update,Drop)。建表例:创建一张学生表create table student( id int primary key, name varchar(20), sex varchar (2), addr var...

2019-07-14 19:05:46 257

原创 MySQL 数据类型及约束

MySQL数据类型数据类型分类MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。数值类型日期和时间类型字符串类型char与varcharchar(L): 固定长度字符串,L是可以存储的长度,单位为字符,最大长度值可以为255varchar(L): 可变长度字符串,L表示字符长度,最大长度65535个字节关于varchar(l...

2019-07-14 18:04:48 199

原创 MySQL库操作及表操作

MySQL库操作创建数据库创建一个名为 student1 的数据库create database student1;创建一个使用utf8字符集的 student2 数据库create database student2 charset=utf8;创建一个使用utf字符集,并带校对规则的 student3 数据库。create database student3 cha...

2019-07-14 09:19:34 175

原创 mysql数据库基础

数据库的基本介绍相关概念DBMS:数据库管理系统,就是数据库软件数据库:保持有组织的数据的容器(通常是一个文件和一组文件),不管数据是什么或如何组织的,是通过DBMS创建和操纵的容器。SQL:结构化查询语句,是专门用来与数据库沟通的语言,需要一个支持SQL语句执行的应用程序表:某种特定类型数据的结构化清单,存储在表中的数据是同一种类型的数据或清单主流数据库介绍Oracle: 甲...

2019-07-14 08:43:06 181

原创 UDP与TCP协议简介

前言本节起,我们主要介绍关于传输层相关的两个著名协议,即 UDP 与 TCP 协议,那么就让我们开始从传输层说起。传输层基本概念我们知道传输层位于网络层之上,网络层提供了主机之间的逻辑通道。那既然已经把一个数据包从一个主机发到另一个主机上面了,为什么还需要传输层呢?这是因为传输层提供了应用进程之间的端与端之间的数据传输功能。我们知道一个电脑可能有多个进程同时在使用网络连接,那么网络包达到主...

2019-07-11 00:11:21 504

原创 UDP/TCP常见面试题

为什么需要第三次握手?如果没有第三次握手,可能会出现如下情况:如果只有两次握手,那么server收到了client的SYN=1的请求连接数据包之后,便会分配资源并且向client发送一个确认位ACK回复数据包。那么,如果在client与server建立连接的过程中,由于网络不顺畅等原因造成的通信链路中存在着残留数据包,即client向server发送的请求建立连接的数据包由于数据链路的拥塞或...

2019-07-11 00:10:15 746

原创 HTTP协议简介

应用层基础概念应用层就是在应用程序之间进行数据交换,我们平时写的一个个应用程序解决一个个实际问题,满足日常需求的网络程序,都是在应用层。应用层常见协议HTTP协议——超文本传输协议FTP协议——文件传输协议SMTP协议——简单邮件传输协议DNS协议——域名解析协议应用层有好多协议,都是由我们程序员自己处理的,在这些协议中,我们最常用的就是HTTP协议,那么接下来就让我们一起来看...

2019-07-09 15:56:10 1178

原创 网络套接字编程(socket 详解)

socket 编程套接字概念Socket本身有“插座”的意思,在Linux环境下,用于表示进程间网络通信的特殊文件类型。本质为内核借助缓冲区形成的伪文件。既然是文件,那么理所当然的,我们可以使用文件描述符引用套接字。与管道类似的,Linux系统将其封装成文件的目的是为了统一接口,使得读写套接字和读写文件的操作一致。区别是管道主要应用于本地进程间通信,而套接字多应用于网络进程间数据的传递。在T...

2019-06-09 22:54:39 14970

原创 网络基础概念

导入在计算机网络学习中我觉得比较重要的就是网络协议的学习。网络协议是为计算机网络中进行数据交换而建立的规则、标准或者说是约定的集合。因为不同用户的数据终端可能采取的字符集是不同的,两者需要进行通信,必须要在一定的标准上进行。一个很形象地比喻就是我们的语言,我们天朝大国人多地广,地方性语言也非常丰富,而且方言之间差距巨大。A地区的方言可能B地区的人根本无法接受,所以我们要为全国人名进行沟通建立一个...

2019-05-30 11:05:29 495

原创 C++模板简介——泛型编程

泛型编程概念:泛型编程是编写一种与类型无关的代码,增强代码复用性。如何实现一个交换函数呢?假如要交换两个整数,也许我们会做如下处理void swap(int& a,int& b){ int tmp = a; a = b; b = tmp;}这样实现没有问题,但是假如我要交换char型,float 型等等,我们只能通过函数重载完成。重载的函数仅仅只是类型不同,代码的...

2019-05-28 21:34:38 192 2

原创 C++之单例模式~~

设计模式什么是设计模式设计模式就是一套反复被使用,多数人知晓,经过分类的,对于一些特定的场合总结的经验。比如在古代,经常会发生战争,打仗也要有技巧,于是就出现了像孙子兵法,武穆遗书这种东西。。人们凭借这着这些经验,去解决相关的问题。在早期,一共有23种设计模式,例如简单工厂模式,适配器模式,观察者模式,单例模式等,而今天我与大家分享的就是单例模式。单例模式概念:单例模式指的就是一个类只能实...

2019-05-28 18:57:17 115

原创 C/C++内存管理

内存管理在C和C++中,我们最关心的就是内存,一旦与内存沾上边,所以也就导致相对其它语言而言,它学起来就没有那么容易。内存布局栈存储非静态局部变量,函数参数返回值等,栈是向下增长的堆用于程序运行时动态内存分配,堆是可以上增长的。内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享共享内存,做进程间通信。数据段可用来存储全局数据和静态数据。代码...

2019-05-28 16:19:53 105

原创 C++类中的黑暗料理~~

引入之前,我们谈论了关于类的基本概念,了解了类和对象的基本使用以及关于类的六个默认构造函数等。那么今天就来说一说在C++类中你可能还不太了解的黑暗料理~~ 学会了之后,你会发现,原来还可以这么玩。。再谈构造函数之初始化列表class Date{ public: Date(int year,int month,int day){ _year = year; _month =...

2019-05-22 14:40:19 171

原创 隐含的this指针以及类的六个默认成员函数

隐含的this指针问题导入当我初学C++时,我遇到了这样一个问题,当时我写了一个简单的代码,如下:class Date{ public: void Print(){ cout<<_year<<"-"<<_month<<"-"<<day<<endl; } private: int _year; i...

2019-05-21 16:00:45 1263

原创 条件变量与POSIX信号量及生产者消费者模型

引入上篇我们详细的介绍了一下Linux下线程安全以及锁机制,利用互斥锁实现了线程间的互斥,那么线程同步( 在保证数据安全的前提下,让线程能够按照某种特定的顺序访问临界资源,从而有效避免饥饿问题,叫做同步。生产出来,才能使用,保证临界资源的合理访问)到底该如何实现呢?这就是我和大家接下来要讨论的条件变量。条件变量概念:  条件变量本身不是锁,但是它可以造成线程阻塞。没有资源则等待,生产资源后...

2019-05-15 17:18:48 433

原创 你的线程真的安全吗?—— 线程安全与锁机制

问题引入上篇我们谈论了线程的基本的概念,线程控制原语,以及多线程与多进程之间的区别。提到进程我们就不得不说线程,提到线程那么势必就会谈及线程安全。 ,因为它非常的重要。为什么这么说呢?我们举个例子,如下:举例:   有一位大婶去银行存款5000元 。卡里本来余额还有5000元,银行小姐姐查询余额后发现还有5000元,这时候银行小姐姐要将大婶的5000元改成10000元,就在这时候大婶眼疾手快...

2019-05-15 11:53:00 641

原创 Linux之线程细究~~~~

线程一、线程基本概念  首先要说的就是在我们Linux下并不存在真正的线程,在Linux下,线程采用进程模拟实现的。当我们在单个进程中需要处理多个任务时,又不能创建多个进程,这时我们就引入了线程的概念。在Linux下,由于线程是用进程实现的,所以我们也罢线程叫做 轻量级进程 (LWP:light weight process),它的本质仍是进程。进程其实就是一个线程组,其中包含一个或者多个线程...

2019-05-12 00:14:35 151

原创 C++类对象模型及内存对齐与字节序

回顾上篇我们简单的阐述了一下面向对象与面向过程编程的基本思想以及它们之间的区别,对我们类与对象做了一个简单的了解,那么这次我们就来说一下关于类的其它相关的知识。类对象模型问题引入我们知道,一个类中既可以有成员变量,还可以有成员函数,那么我们的对象中到底包含了什么?我们应该如何计算一个类的大小?类对象模型的存储方式我们知道对象是一个类的实例化,类是一个抽象的概念,而对象占有实际的物理内存...

2019-05-09 15:33:02 468

原创 C++类与对象初识

引入:在我们编程语言中,想必大家都应该听说过面向过程编程与面向对象编程,那么到底什么是面向过程编程什么是面向对象编程呢?对于这个问题我想大家都应该听我们的老师讲过一个生动而又形象的例子,下面我以这个例子为大家具体的讲解释一下这两者的区别。如何将大象装进冰箱?面向过程(POP)对于面向过程而言,就是分步骤去解决问题,如下打开冰箱门把大象放进冰箱关闭冰箱门你没看错,就是这么简单。面向...

2019-05-08 18:47:52 194

原创 C++中的糖果——缺省参数、内联函数、auto及nullptr关键字

在C++中,相对于C语言,我们引入了许多新的概念,新的机制,它们的到来让我们的编程方便了不少,它并没有多么难理解,但是比较零碎,在我看来它就是一些加分项,故此,我们通常也将其称为C++中的糖果。下面就让我为大家来介绍几个比较有意思的概念。缺省参数提到缺省参数,那么参数必定是和函数相关的内容,那么什么到底是缺省参数呢?我就用一个当下比较火的网络红词来大体解释一下什么是缺省参数,那就是“备胎”。...

2019-05-07 13:57:58 459

原创 my favorite --------- 引用

引用引用是我们C++中新引入的一种机制,那么到底什么是引用呢?引用概念:引用不是新定义一个变量,而是给已存变量娶了一个别名,编译器不会为引用变量开辟内存空间,它和我们已有变量共用同一块内存空间。简单来说引用就是一个别名。例如你在外叫张三,在家叫臭牛一样。。。。。定义引用变量的格式类型& 引用变量名(对象名) = 引用实体;int a = 10;int& ...

2019-04-30 18:53:47 450

原创 C语言为什么不支持函数重载

函数重载在我们中国的文化中,一个词可能是有多种含义,在这种情况下就可以通过上下文来判断这个词到底是什么意思,在这里我们就可以理解为这个词被重载了。例:又是晴朗的而又美好的一天,可是小明的妈妈却让小明去打扫卫生,不打扫完不能出去玩,但是恰好小明这时候特别想出去和朋友一起打篮球,当她妈妈给他让他去打扫卫生时,小明顺口来了一句“ 我去 ”。那么请问小明到底是去还是不去。其实这只是个玩笑而已,不过它却...

2019-04-30 17:55:25 5449 1

原创 C++命名空间

命名空间提到C++,我们就不得不说命名空间了,那么命名空间到底是什么呢?也许你经常会看到别人写的C++代码中总是有这样一句:using namespace std;其中namespace 就是我们C++中的命名空间。首先我们来说一下为什么C++为什么要引入命名空间在我们的C/C++语言中,变量、函数以及类都是大量存在的,这些变量、函数以及类都是存在于全局域中的,一不小心,我们就有可...

2019-04-27 18:50:06 2842 1

原创 思维导图——Linux常用基础指令

2019-04-25 15:59:25 188

原创 Linux进程信号

信号信号概念:信号就是一个软件中断,它是用来通知某件事情的发生,打断当前操作,选择合适的时机,去处理信号。信号功能:通知事件的发生使用命令查看信号: kill -l在Linux下,我们共有62种信号1~31 : 继Unix而来的非可靠信号,也叫非实时信号(信号有可能会丢失)34~64 :可靠信号 ,也叫实时信号(信号不会丢失)信号的声明周期产生->信号在进程种注...

2019-04-24 16:09:33 154

原创 Linux进程间通信之消息队列与信号量

消息队列基本概念:消息队列是消息的链接表,包括Posix消息队列system V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。消息队列是双向通信,传输的是有类型的数据块,它的本质是内核中的优先级队列。消息队列的实现包括创建或打开消息队列、添加消息、读取消息和控制消息...

2019-04-24 15:23:12 778

原创 Linux进程间通信之共享内存

共享内存共享内存是我们进程间通信最快的一种方式,那么为什么可以这样说呢?那么咱们先来看看共享内存的通信原理。上图是我画的利用共享内存通信的示意图。其实看了图我想你应该就明白共享内存通信是怎么一回事了基本思想:多个进程通过将同一块物理内存映射到自己的虚拟地址空间中,实现了多个进程可以对同一块物理内存进行操作,通过这种方式我们就实现了数据共享的功能。为什么利用共享内存通信最快那么为...

2019-04-24 14:50:29 274

空空如也

空空如也

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

TA关注的人

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