自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

HiMark

不会写诗歌的马克吐温

  • 博客(152)
  • 收藏
  • 关注

原创 windows 通信之命名管道

client//等待实例化//创建管道//发收数据//关闭会话#include "pch.h"#include <iostream>#include <windows.h>#include <stdio.h>#include<cstring>using namespace std;void main(){ char buf...

2019-08-15 20:40:10 325

原创 winsock I/O通信之Select

//select 特点 (轮询)//可监控的文件描述符取决于sizeof(fdset)值//将文件描述符加入select监控集的同时,使用数组保存select监控的文件描述符//select返回时将数组中的文件描述符,与监控的文件描述进行比较//select 缺点//每次调用都要设置文件描述符集合,接口使用角度不方便//每次调用都要把fd集合从用户态拷贝到内核态开销比较大//每次调用...

2019-08-15 20:38:14 364

原创 编译与反编译

代码从预处理,编译,汇编,链接,最终形成文件,C语言作为编译语言,可以准确定义在不同情况下所采取的行动。程序的执行过程预处理:头文件展开,宏替换,去掉注释 test.i编译: 生成汇编码词法和语法的检查 test.s汇编:把汇编码转换成机器码 test.o链接:...

2019-08-11 22:44:02 2933

原创 VS217编译安装Detours库

A、添加工程的头文件目录:工程—属性—配置属性—c/c+±–常规—附加包含目录:加上头文件存放目录。B、添加文件引用的lib静态库路径:工程—属性—配置属性—链接器—常规—附加库目录:加上lib文件存放目录。C 然后添加工程引用的lib文件名:工程—属性—配置属性—链接器—输入—附加依赖项:加上lib文件名编译Detours库生成Lib文件1 将下载的Detours放到目录下:C:\P...

2019-08-08 09:32:59 952

原创 winsock I/O selec/WSAEventSelect模型

#include<Winsock2.h>#include<stdio.h>#pragma comment(lib,"ws2_32.lib")#pragma warning(disable:4996)/*//创建服务器套接字 socket//绑定本地地址 bind//进入监听模式 listen//select模式 //构造fd_set集合 fd_...

2019-07-30 21:10:21 174

原创 Winsock多线程TCP通信

#include<WinSock2.h>#pragma warning(disable:4996)#pragma comment(lib,"ws2_32.lib")#include<stdio.h>SOCKET clientSocket[1024];int index = 0;DWORD proc(LPVOID lpThreadParameter){ ...

2019-07-30 21:08:06 1545 1

原创 window下socket实现TCP服务器

服务器1.初始化WSAStartup(…)2.创建Sockets = Socket ( … )3.绑定端口ret = bind ( … )4.监听ret = listen ( … )5.接收客户端的连接请求s_new = accept ( … ) // 三次握手发生在这个过程6.收发数据ret = recv ( … )// 阻塞模式, 内存不够存放发送的信息时,则阻塞...

2019-07-29 20:57:05 4501 2

原创 Windows 命名管道通信

什么是命名管道?命名管道是一种简单的进程间通信机制,命名管道的命名规范\\server\Pipe\[path]name 第一部分server,指定服务器名字 第二部分Pipe,硬编码即原样照录 第三部分 唯一命名+路径例如\myserver\Pipe\mypipe\Testserver\pipe\coldirectory\funtest\jim\.\Pipe\Easyname...

2019-07-29 20:50:38 1558

原创 Centos7 linux下 安装 Redis 5.0

环境:Centos7+Redis 5.0,如果环境不符合,本篇仅供参考。1、准备工作作者习惯软件安装包放在单独路径,解压路径也放在单独路径。下载路径:mkdir -p /data/softworecd /data/software2、软件下载redis包下载地址,可以下载后用ftp工具导入下载路径中,也可以使用wget直接下载。作者:wget http://download.redi...

2019-07-23 09:19:59 648

原创 CephFS简析

Ceph简介分布式存储系统,支持对象存储,块存储,文件系统。无中心结构,系统规模和存储容量可以扩展。多副本,纠错码确保数据安全。Ceph系统架构Ceph是一种为优秀的性能、可靠性和可扩展性而设计的统一的、分布式文件系统特点:高性能,高可用,高扩展,特性丰富。 Clients:客户端(数据用户) mds:Metadata server cluster,元数据服务器(缓存和同步分布...

2019-07-21 23:09:08 624

原创 剑指offer,面试题1,面试题2

面试题1:赋值运算符函数面试题2:实现Singleton模式赋值运算符函数//TEST 1赋值运算符重载class String{public: String(const char* pst =nullptr); String(const String&amp;amp; pst); ~String(); private: char * _pst;};//赋值运算符重载,释放旧空...

2019-01-27 14:32:01 712

原创 Linux大三搜索命令locate,grep,find

locate:可以搜索文件和目录的名称,但是不能搜索文件的内容。grep:在文件中搜索数据find:根据指定条件对文本进行搜索locate搜索文件名数据库 -i 不区分大小写 locate -n 3 test 查看前三个结果 locate test | less 结果分屏显示grep在文本文件中搜索匹配的模式 grep hater * 查找所有使用hater字符串的...

2019-01-17 08:37:46 411

原创 查看文件的命令总结cat,less,head,tail

查看文件的命令总结cat,less,head,tailcat:一次显示整个文件内容less:分页一次一屏显示文件内容head:显示文件开始部分tail:显示文件结束部分catcat 在标准输出上查看文件cat file1 file2 将文件拼接至标准输出设备cat file1 file2&gt;file3 将文件拼接后保存到其他文件cat -n file1 file2&gt;f...

2019-01-17 07:43:10 280

原创 C++十大设计模式(易懂)

单例模式:单例模式:确保一个类只有一个实例,并且这个实例化向整个系统提供(例如只有一台打印机,可以有多个打印任务队列,但是只能有一个正在打印)。单例模式又分为(饿汉模式,懒汉模式)两种饿汉模式:程序运行即创建对象并实例化,静态实现所以线程是安全的懒汉模式:创建对象不实例化,需要的时候才实例化,线程不安全需要(加锁)工厂模式:建立对象的类就如一个加工厂,建立对象就如一个产品,使用产...

2018-12-18 20:33:24 11377

原创 设计模式-工厂模式(简单,工厂方法,抽象)

工厂模式建立对象的类就是一个工厂,被建立的对象就是一个产品,在工厂中加工产品,不用在乎产品如何产生。降低模块耦合。工厂模式分类包括 简单工厂模式,工厂方法模式,抽象工厂模式。1简单工厂模式由工厂对象决定创建哪一个产品类的实例,这些产品类(继承自父类或接口)。例如:一个工厂生产A,B两种产品,当客户需要那种产品就告诉工厂。缺点:当新增加一种产品的时候,就要去修改工厂的类//实现方法:...

2018-12-18 20:05:55 176

原创 Mysql数据库 索引的原理和优化

本文主要讲述了如何加速动态网站的MySQL索引分析和优化。参考原文 https://www.2cto.com/database/201707/660712.html一、什么是索引?索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存。如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,如果作为搜索条件的列上已经创建了索引,MySQL无需...

2018-12-17 12:07:55 200

原创 系统内存不足的处理方案?

当operator new没有能力申请到所需要的空间时,通常会丢一个exception(异常类)打印出信息。常见的 C 习惯做法:定义一个与型别无关的宏,用来配置内存,并做检查,以确定配置成功。对于C++而言的宏如下#define NEW(PTR,TYPE) try{ (PTR)=new TYPE;} catch(std::bad_alloc&amp;) { assert(0); }...

2018-12-17 10:26:05 645

原创 面试总结:B树,B+树的原理及区别

之前在网上看到过一些B树与B+树的区别然后主要是针对定义来陈述,分分钟看的我快要冬眠,然后在一次面试遇到该没问题没回答上来一首凉凉送 给自己,今天老老实实的分享自己对B树,B+树浅显理解,若望指出不足。B树的原理动态查找树主要包括:二叉搜索树,平衡二叉树,红黑树,B树,B-树时间复杂度O(log2N),通过对树高度的降低可以提升查找效率尤其是在大量数据进行存储的时候会存储到外部 磁盘,通过对...

2018-12-08 18:58:32 27339 2

原创 剑指offer 树的子结构

输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)class Solution{public: bool Hassubtree(TreeNode* root1, TreeNode* root2) { if (root1 == nullptr || root2 == nullptr) //约定树2不为空 return false; /...

2018-12-08 15:28:09 107

原创 leetcode104二叉树的最大深度,

给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],class Solution{public: int Maxsize(TreeNode* root) { if (root == nullptr) return 0;...

2018-12-08 15:24:08 197

原创 剑指offer 二叉树的镜像

操作给定的二叉树,将其变换为源二叉树的镜像。//二叉树的镜像struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right;}; class Solution {public: void Mirror(TreeNode *pRoot) { if (pRoot == nullptr) re...

2018-12-08 09:56:02 140

原创 leetcode107 二叉树的层序遍历 II

给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)例如:给定二叉树 [3,9,20,null,null,15,7],struct TreeNode{ int val; TreeNode* left; TreeNode* right;};class Solution {public: vector&amp;lt;vector...

2018-12-08 09:18:53 281

原创 二叉搜索树的创建,插入,查找过程实现

基于顺序查找数据随机:顺序查找,遍历 时间复杂度O(N)数据已序:二分查找,时间复杂度O(log2^N)索引顺序:数据量大,建立静态索引基于树形查找二叉树: 二叉搜索树,二叉平衡树多叉树: B-树,B+树,B*树基于哈希查找哈希:哈希表,哈希桶,位图,布隆过滤器,二叉搜索树(二叉排序树)特点:左子树不为空,则左子树上所有节点小于根节点的值右子树不为空,则右子树上所有节...

2018-11-17 18:07:43 13556

原创 二叉树先序,中序,后序,层序遍历非递归

#include&amp;amp;amp;lt;iostream&amp;amp;amp;gt;#include&amp;amp;amp;lt;stack&amp;amp;amp;gt;using namespace std;//==========================先序遍历void preorderR(Node* root) //先序遍历 V L R{ Node* cur = root; stack&

2018-10-12 16:43:45 625

原创 剑指offer面试题1-10

1二维数组中的查找在一个二维数组中,每一行元素都按照从这里写代码片左到右递增的顺序排序,每一列元素都按照从上到下递增的顺序排序。实现一个查找功能的函数,函数的输入为二维数组和一个整数,判断数组中是否含有该整数。 //例如查找元素7 //二位数组的规律是从左往右依次递增,从下往上依次递增 //可以根据待查元素,与起点位置比较,起点位置暂设为右上角(也可以选左下角) //如果待查元素...

2018-10-12 16:43:25 1214

原创 面试题剑指offer21-30

21栈的压入、弹出序列输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)思想: //合法性检验 //定义一个辅助栈将入栈序列插入到辅助栈...

2018-10-12 16:43:11 141

原创 剑指offer面试题11-20

11二进制中1的个数输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。思想://定义一个标志位flag,依次将flag向左移位,然后与数组的数字进行按位&amp;amp;amp;amp;amp; //如果按位与的结果为1则说明输入数的二进制位的值为1 //直到移位到最左端(int 32位)class Solution {public: int NumberOf1(int n) {...

2018-10-12 16:42:58 191

原创 深入理解红黑树与B+树应用场景

红黑树和B树应用场景有何不同?2者都是有序数据结构,可用作数据容器。红黑树多用在内部排序,即全放在内存中的,微软STL的map和set的内部实现就是红黑树。B树多用在内存里放不下,大部分数据存储在外存上时。因为B树层数少,因此可以确保每次操作,读取磁盘的次数尽可能的少。在数据较小,可以完全放到内存中时,红黑树的时间复杂度比B树低。反之,数据量较大,外存中占主要部分时,B树因其读磁盘次数少,而具...

2018-09-29 07:19:41 19312 4

原创 归并排序--排序算法

//归并排序(分治思想)//按照快速排序递归地将待排区间依次划分为两个区间,区间只剩一个数的时候停止,//如果一个区间只有一个数,可以看作是有序区间,然后对左右两个小区间进行归并,归并后依然保持有序//依次将左右两个有序的子区间归并为一个大的有序区间,并返回给上一次递归//直到划分的所有小区间归并为一个有序序列,归并排序完成//时间复杂度O(NlogN) 空间复杂度O(N) ...

2018-09-26 20:15:39 134

原创 快速排序

//快速排序思想//选取一个基准值一般选取右值,从前往后遍历找到一个小于基准值的值然后停下来,从后往前找一个大于基准值的值然后停下来//交换left,right此时,继续向后,向前遍历,直到找到left=right的时候,那么就第一次遍历完成,然后交换基准值与left=right的值//此时的结果是划分为了两个区间,继续按照上述方法排序,直到每一个小区间只剩下一个值的时候就排序完成。//时...

2018-09-26 17:27:45 136

转载 多进程多线程的区别和选择(总结)

多进程多线程的区别和选择(总结)关于多进程和多线程,教科书上最经典的一句话是“进程是资源分配的最小单位,线程是CPU调度的最小单位”,这句话应付考试基本上够了,但如果在工作中遇到类似的选择问题,那就没有这么简单了,选的不好,会让你深受其害。经常在网络上看到有的XDJM问“多进程好还是多线程好?”、“Linux下用多进程还是多线程?”等等期望一劳永逸的问题,我只能说:没有最好,只有更好。根据实际...

2018-09-22 10:02:53 10597

原创 交换排序——快排/冒泡

快速排序: 平均时间复杂度:O(NlogN) , 最坏时间复杂度: O(N^2) 不稳定 快速排序思想: 1、在待排序列中找一个基准值(默认选择最后一个元素) 2、然后将该基准值放置在合适的位置, 3、使得基准值之前的元素都小于等于基准值,基准值之后的元素都大于等于基准值。然后再对基准值之前的序列使用上述方法进行排序寻找基准值的位置 对基准值之后的序列也使用上述方法,进行排序寻找...

2018-09-16 17:18:36 162

原创 信号在内核的表示

信号在内核中的表示 信号递达:执行信号的处理动作 信号未决:信号从产生到递达之间的状态进程可以选择阻塞(Block)某个信号。被阻塞的信号产生时将保持在未决状态,直到进程解除对此信号的阻塞,才执行递达的动作。注意:阻塞和忽略是不同,只要信号被阻塞就不会递达,而忽略是在递达之后可选的一种处理动作。信号在内核中的表示可以看作是这样的: 信号的发送过程1...

2018-09-14 19:53:28 223

原创 实现一个不能被继承的特殊类。

1、实现一个不能被继承的类?1、将类的构造函数设置为私有 2、在父类中给一个静态的函数构造对象1)保证了父类的构造函数在子类中不可见,但是子类的构造函数是要调用父类 的构造函数合成。 2)此时出现一个问题,子类不能构造出对象,但是这个类也不能构造出对象了,因此提供一个静态的公有函数来构造对象2、如何实现一个只能在堆上生成对象的类? 可在 栈上生成对象(father f) 堆上...

2018-08-25 11:40:11 158

原创 I/O多路转接select/poll/epoll模型

I/O多路转接包含(select/poll/epoll)1、I/O多路转接select系统提供select函数实现多路复用的输入输出模型select系统调用让程序监视多个文件描述符的状态变化,程序会暂停到select这里等待,直到被监视的文件描述符发送了状态变化#include&amp;amp;amp;lt;sys/select.h&amp;amp;amp;gt; //头文件int select (int nfds, ...

2018-08-24 14:07:38 220

原创 linux下的守护进程

一、什么是守护进程守护进程的引入现实中许多大小的服务器或者软件必须保证7*24小时无障碍运行,例如百度搜索引擎等,这些一直运行的程序怎么实现的呢? 本质就是守护进程守护进程的定义守护进程是运行在后台的一种特殊进程,独立于控制终端并且周期性的执行某种任务或处理某些突发事件。 Linux的大多数服务器是守护进程实现的,比如Web服务器httpd,Internet服务器inetd。...

2018-08-23 20:23:20 230

原创 死锁的产生和避免

死锁的产生和避免 死锁的定义该组进程(线程)的每一个进程(线程)都在等待仅由该组进程(线程)的其他进程(线程),才能引发的事件,该进程(线程)是死锁的引入锁是为了解决多线程直接的同步与互斥问题典型的两种死锁情况1 线程自己将自己锁住同一个线程先后两次调用lock,第二次调用时由于锁已经被占用,该线程会挂起等待,然而锁是被自己占用,该线程被挂起没有机会释放,因此永远处于等待状态...

2018-08-23 18:54:18 303

转载 Centos6.5下安装mysql5.7版本(亲测有效)

Step1: 检测系统是否自带安装mysql# yum list installed | grep mysqlStep2: 删除系统自带的mysql及其依赖 命令:# yum -y remove mysql-libs.x86_64Step3: 给CentOS添加rpm源,并且选择较新的源 命令:# wget dev.mysql.com/get/mysql-communi...

2018-08-22 23:47:03 2283 2

原创 内存泄漏&悬挂指针(野指针)的危害及避免

内存泄漏&amp;悬挂指针(野指针)的危害及避免什么是内存泄漏?内存泄漏:动态申请的内存空间没有正常释放,但是也不能正确使用的情况。内存泄漏的危害?一般用户感觉不到内存泄漏的危害,真正有危害的是内存泄漏的堆积,最终会耗尽系统所有的内存。 如果程序内存泄漏正好写到了系统使用的内存或其他程序使用的内存地址,那么会导致系统异常或程序崩溃。如何检测内存泄漏?使用工具 val...

2018-08-20 08:44:57 2973

原创 进程同步之生产者消费者模型

一、概念引入 例如寄信 我(生产者) 邮递员(消费者)我把信件写好 -----相当于生产者生产数据我把信放到邮筒-----相当于把生产者的数据放入到缓冲区邮递员把信从邮筒取出-----相当于消费者把数据从缓冲区取出邮递员把信拿去邮局处理------相当于消费者处理数据...

2018-08-17 19:35:52 8656

空空如也

空空如也

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

TA关注的人

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