自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

M_jianjianjiao

纵有疾风起,人生不言弃

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

原创 Linux下 定时任务执行

Linux下 定时任务执行单次定时任务at 与 周期定时任务cron设置单次定时任务at 命令设置一次定时任务当需要再某一特定时间 执行一个任务的时候,我们使用at 命令进行设置。比如设置在某一时间发送邮件,或者在半个小时后自动关机,此时我们就可以使用at设置任务在30 分钟后输出hello[root@VM_70_170_centos ~]# at now + 30 minutesat> echo "hello"at> <EOT>job 1 at Th

2021-03-04 22:46:56 438 1

原创 go语言学习--变量、常量

go语言学习--变量、常量定义变量使用var定义变量使用使用:=定义变量常量声明常量常量用作枚举内置变量类型对于如何定义go语言变量、常量、类型的简单学习变量使用var定义变量var a int = 1var a = 1var a int声明变量时可以省略类型, 也可以省略初始值,但是两者必须有一个没有类型可以通过初始值进行推导,对于没有明确的初始化的变量,则初始化成对应类型的空值同时声明多个变量–可以是不同的类型var a , b , c int //三个变量同时声明成

2020-11-22 20:04:01 230

原创 linux 系统查看、设置、获取环境变量

linux 系统的环境变量操作系统的环境变量一般是指用来指定系统运行环境中的一些参数常见的环境变量有:PATH:指定命令的搜索路径HISTSIZE: 保存历史命令的记录条数SHELL:当前的shell ,值通常是bin\bashHOME:指定用户的主工作目录查看环境变量:使用env 命令来查看所有的系统的环境产看系统的环环境环境变量使用 echo $NAME //NAME...

2020-01-03 16:25:55 4605 2

原创 实现一个内存池

高并内存池项目描述:实现在多核多线程的环境下,效率较高的处理高并发的内存池。项目目的:减少内存碎片提高效率,使得在特定的情况下平均运行效率该高于malloc解决在内存申请过程中的竞争问题设计思路:以定长哈希映射的空闲内存池为基础使用三层缓存分配结构三层的缓存结构在内存池实现的时候,采用了三层的结构,通过三层的不同的结构来保证达到减少内存碎片,将低锁竞争的激烈程度。...

2019-03-02 09:03:23 613

原创 一个基于TCP HTTP的具有文件共享功能的服务器

基于TCP、HTTP的文件共享服务器服务器的基础架构构建TCP服务器对于文件的传输来说,我们必须要保证文件内容的准确性。所以在数据传输时我们选择保证数据可靠传输的TCP协议。首先使用socket创建套接字进行对端口号与IP地址进行绑定。然后监听来自客户端的请求。连接任务的处理对于来自客户端的连接请求,我们使用多线程对每个请求进行处理。能够保证并发性的请求处理。考虑到线程的创建时...

2019-03-01 01:05:04 1212

原创 mysql基本操作及使用

mysql基本使用:连接到mysql如果MySQL是使用RPM包安装的就使用服务的启动方式启动mysql服务器[root@bogon wens]# service mysqld start如果是在启动状态需要重启[root@bogon wens]# service mysqld restart关闭mysql服务器service mysqld stop查看服务器是否启动[r...

2019-02-26 22:55:12 226

转载 TCP TIME_WAIT状态

TCP的TIME_WAIT 状态什么是TIME_WAIT状态TCP的TIME_WAIT是指在四次挥手中,主动断开方 在收到对方发送的FIN后,向对方发送ACK后就会进入TIME_WAIT状态处于TIME_WAIT状态时,端口被占用,无法创建新连接只有等待2MSL(报文在网络中的最大生存时间)后,才会进入CLOSED状态TIME_WAIT状态一般是主动断开的一方TIME_WAIT存在...

2019-01-22 07:48:11 540

原创 TCP的拥塞控制 粘包问题等

拥塞控制TCP慢启动机制在开始进行数据发送时,如果在一开始就发送大量的数据,可能此时网络上的数据比较多,比较拥堵。此时数据就会堵在网络上,使网络更加拥堵。此时,可以通过慢启动机制,先发送少量的数据探测出当前网络的拥堵的情况,然后再决定发送多少数据。按多大速度传输数据。拥塞窗口发送开始时,拥塞窗口的大小定义为1每次收到一个ACK应答,拥塞窗口的大小就会加1每次发...

2019-01-22 07:46:02 441

原创 TCP报文格式详解

TCP协议 传输控制协议TCP的特点:面向连接: 使用TCP协议进行通信时,需要先建立连接可靠传输: 具有确认应答机制,超时重传等机制保证数据的可靠传输面向字节流的: 传输的数据是面向字节流的,没有长度的限制关于连接的概念在内核中有有一个结构体来描述连接TCB,再通过队列将其管理起来操作系统维护一个链接是需要成本的包括时间成本和空间资源成本必须要使用合理的方式管理连接否则会导...

2019-01-15 21:47:44 3470

原创 UDP用户数据报协议

传输层传输层负责将数据从发送端传输到接收端TCP与UDP都属于传输层协议端口号通过IP与端口号可以在网络中确定一个唯一的进程端口号可以标识一台主机上的唯一的一个进程一个进程可以绑定多个端口号可以通过源IP地址 目的IP地址 源端口号 目的端口号 协议的版本来确定一个唯一的通信可以通过setsockopt()实现端口的复用第三个参数使用SO_REUSEADD...

2019-01-15 21:45:13 365

原创 c++中的智能指针

什么是智能指针c++中没有垃圾回收机制,所以很容易在疏忽的情况下造成内存泄漏的问题,为了解决这种情况,所以有了RAII,通过智能指针对于资源进行自动的释放。智能指针的原理RAII是一种利用对象的生命周期来控制资源的一种技术。在对象构造时获取资源,使之在对象的生命周期中对于资源的控制访问始终有效,在析构时将资源进行释放实际上是将一份资源交给一个对象进行托管好处:不需要显示的进行资...

2019-01-15 17:22:32 133

原创 HTTP协议详解

http协议应用层协议:双方的一种约定,能够保证发送双方发送的数据都能被对方所能正确的解析。URL: 统一资源定位符定位资源所在的位置互联网上的内一个文件都有一个唯一的位置资源:对web资源的统称,包括图片文字等平时所说的网址即为urlurl格式&lt;scheme&gt;:// &lt;user&gt;:&lt;password&gt; @&lt;host&gt;...

2019-01-15 17:21:19 884

原创 cookie 与 sessionId

cookie 与 sesionhttp协议是无状态的,每次不会保存用户的状态信息优点:http由于是无状态的,不必保存客户端的状态,所以可以减少服务器的CPU和内存的消耗http协议十分简单由于http协议是无状态的,无法得知上一次请求的状态信息,当有的需要登陆时,每次的请求都要进行认证,在请求中添加自己的账号密码信息,但是每次都将账号和密码放入其中无疑增加了繁琐程度,每次的请求服务...

2019-01-15 17:20:33 509 1

原创 c++中的异常

c语言中传统错误处理方式的终止程序如使用assert来终止程序缺陷: 难以接收,如果发生了内存错误程序就会终止如除0返回错误码:缺陷:需要对应错误码查找对应的错误,许多库会将错误码方到erron中,表示错误setjmp longjmpint setjmp( jmp_buf env );void longjmp( jmp_buf env, int value ); ...

2019-01-15 17:19:35 186

原创 cin输入的类型不匹配造成的死循环 cin.clear() cin.ignore()函数

当使用cin输入时,如果想要输入的类型为int的,输入时输入成了字符,就会导致cin错误#include &lt;iostream&gt; #include &lt;set&gt; using namespace std; int main() { int a; cin&gt;&gt;a; while(cin.fail()){ ci...

2019-01-13 14:49:05 1180

转载 telnet 安装及使用

Centos7telnet的安装及使用检测是否安装telnet命令rpm -qa telnet-serverrpm -qa xinetd安装telnetyum list |grep telnetyum -y install telnet-server.x86_64yum -y install telnet.x86_64yum list |grep xinetdyum -y ...

2019-01-13 14:47:48 1171

原创 c++中的多态

c++中的多态什么是多态多态是指有多种形态,具体来说就是一种行为有多种不同的状态。当有不同的对象完成同一个行为时,会产生不同的结果。在c++的调用同一个基类函数,会根据不同的对象的类型来调用不同的成员函数。多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。多态的构成条件在c++中要构成多态,必须要满足两个条件:调用函数的对象必须是引用或指针被调用的函数必须是虚函数,且完...

2019-01-03 14:46:12 219

原创 c++多态的原理 以及虚函数表详解

c++中多态的原理要实现多态,必然在背后有自己的实现机制,如果不了解其背后的机制,就很难对其有更深的理解。一个多态的例子class Person{public: virtual void Drink() { cout &lt;&lt; "drink water" &lt;&lt; endl; };};class Children : public Person{publi...

2019-01-03 14:44:56 477

原创 c++中的菱形继承与虚拟菱形继承

c++中的继承关系分为单继承和多继承单继承:一个派生类只有一个基类多继承:一个派生类不止有一个基类在多继承的过程成容易造成二义性问题。菱形继承是多继承中的一种复杂的情况。菱形继承的有两个问题:二义性:当使用A的数据时无法确定继承自B 还是 C数据冗余:类D中会有两份类A的数据先看一个菱形继承的例子#include &lt;iostream&gt;using names...

2018-12-26 13:14:08 399

原创 c++中的继承

面向对象的三大特性封装,继承,多态。继承作为三大特性之一,在面向对象的设计的重要手段,它使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。继承呈现了面向对象程序设计的层次结构,继承是类设计层次的复用。到底什么是继承?如果B类继承于A类,那么B类中就拥有了A类中的方法和数据。A类中的方法和数据就成了B类中的一部分,B类对象可以访问到这些数据和方法当然也有一...

2018-12-25 23:47:32 172

原创 c++中的IO流

C++ 中的IO流c语言中的输入输出说到c++就不能不提c语言,在c语言中,依靠输入输出函数进行IO操作,在c语言中我们常用的函数有scanf printfpusts gets putc getcgetchar putcharfwrite fread...这些IO函数通过一些缓冲区在设备和代码之间进行数据的输入和输出。缓冲区的读写速度较快,设备和代码都能很快的从其中复制数据和写入...

2018-12-25 09:01:49 1513

原创 c++ 类型萃取

类型萃取类型萃取是基于c++中的模板特化来实现的,是对于模板特化的应用。关于c++的模板特化当我们写一个同用的拷贝函数时,我们可以使用mymcpy进行拷贝,但是mymcpy是一个浅拷贝,对于一些基本类型的拷贝效率很高。但是对于要深拷贝的类型来说就不适用了,对于深拷贝我们可以使用for循环的方式来进行。所以将两者进行结合,当基本类型进行拷贝时使用mymcpy,当自定义类型进行拷贝时使用fo...

2018-12-23 18:08:51 465

原创 c++中模板的特化

关于模板的特化关于c++函数的模板函数的特化使用模板时会遇到一些特殊的类型需要特殊处理,不能直接使用当前的模板函数,所以此时我们就需要对该类型特化出一个模板函数(就是写出一个模板函数专门给该类型使用)当使用一个判断相等的模板函数时template&lt;class T&gt;bool Isequal(T&amp; p1, T&amp; p2){ return p1 == p2;}...

2018-12-23 10:52:17 8396

原创 priority_queue优先级队列实现

优先级队列的实现优先级队列,并不遵守先进先出的特性,所以可以说它并不是一个队列。尽管名字上有些想象。优先级队列,主要的特性就是,对存在里面的数据有了一个优先级高低的划分,或者大的优先级高,或者小的优先级高,出队时就根据优先级的高低进行出队。跟据它的出入队特性,我们可以使用堆来对其进行构建。堆在物理结构上是一个连续的数组,可以支持下标的随机访问,而在逻辑上是一颗完全二叉树。通过构建大堆或者小堆...

2018-12-04 08:40:42 331

原创 计算机网络笔记---互联网的组成及三种交换方式

互联网的组成互联网从工作方式上可以划分为两大块:(1)边缘部分:由连接在互联网上的大量主机组成,由用户直接使用的部分。这些主机包括了一切可以联网的设备,包括电脑,手机,联网的摄像头,更大的有互联网公司中的服务主机等。(2)核心部分:由大量网络和连接这些网络的路由器组成。主要为边缘部分提供服务。互联网的边缘部分两台主机之间的相互通信,称为计算机之间的通信,在网络的边缘部分,主机之间...

2018-12-03 22:39:02 7432

原创 死锁的产生及处理策略条件

死锁什么是死锁?我们先从互斥量造成的死锁说起。当一个线程去申请一个已经被持有,但是还没有释放的互斥量时,线程将会被阻塞,直到该互斥量被释放。如果该互斥量不被释放,该线程将会被一直阻塞。因次,基于以上的原因,我们可以认为当一个线程去申请一个永远不会被释放的互斥量时,该线程将会被永远阻塞,这种情景我们称之为死锁。更宽泛的说,死锁就是,一个线程阻塞的等待一个永远不会为真的条件。以下为两个常...

2018-12-02 23:29:46 164

原创 c++ list 类的模拟实现

list的模拟实现list的构成list在底层是一条双向循环链表,可以在常数时间内完成插入和删除操作。最主要的缺点是无法随机存取。而在链表可以将其中元素存储在不相关的位置。list的组成list的本身和list的节点是不同的结构,list本身是由一个个的节点构成的。所以只需要完成对链表的操作即可。list的节点类与c中一样,每一个节点都有数据域前后指针,通过一个类来构造每一个节点...

2018-12-01 09:13:32 325

原创 读写锁---理解及测试实例

读写锁互斥锁与读写锁的区别同样都是锁,互斥锁与读写锁之间什么区别和联系?互斥锁:当使用互斥锁时,每次只能有一个线程拿到锁,进入临界区,访问临界资源。在对临界资源的访问中,可以将访问方式份为两种:(1)读取数据(2)修改数据我们对与临界资源加锁,是为了保护临界资源的安全性与正确性,防止多个线程在同一时间段中对临界资源同时修改。但是,读取数据时我们只对于数据进行读取,并不对与数据进行修改...

2018-12-01 00:44:39 1102

原创 生产者与消费者模型--基于posix信号量的

基于posix信号量的生产者于消费者模型(此处只有一个生产者与一个消费者)使用一个循环队列作为生产者于消费者之间的交易场所,生产者向其中放数据,消费者从中拿取数据。为了达到同步使用posix信号量。posix 信号量信号量就相当于一个计数器,记录共享资源的份数。每当有一个线程申请访问该共享资源,就将信号量的数目–,当信号量的数目为零时,表示所有的公共资源都正在被访问。其他想要继续申请信号量...

2018-11-30 23:21:09 617

原创 生产者和消费者模型实现(基于条件变量)

基于条件变量的生产者和消费者模型实现我们在这里使用使用一个生产者和一个消费者来实现。并且使用一个定容的队列来作为两者的缓冲区域,即交易场所。生产者与消费者模型及条件变量理解点这里基本思路:生产者向队列中放入数据消费者从队列中拿走数据存放数据的队列最为两者共享区域,必须进行互斥访问,使用互斥量保持同步,避免饥饿问题。使用条件变量当队列为空时,消费者进行等待,直到被生产者唤醒消费...

2018-11-27 08:16:53 533

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

生产者与消费者问题 及 条件变量什么是生产者和消费者模型生产者,顾名思义就是生产东西的人,而消费者就消费的人。在系统中,假设有一块内存,生产者要向内存中放数据,而消费者要从内存区域中拿数据。这片内存区域可以被所有的线程访问,所以这片内存区域就是临界资源,而在对临界区的访问时,要保证不会出错,必须每次对临界区的访问是互斥的。所以当有许多生产者消费者时,每次只能有一个生产者放数据,也只能有一个消...

2018-11-25 23:31:56 421

原创 string类模拟实现

string类部分函数模拟实现对于一些常用的string类的函数进行模拟实现,通过对一些函数的模拟是实现了解,其底层的实现原理,加深对于string 类中的函数的理解构造函数 String(const char* str="")//使用缺省参数 27 :_str(new char[strlen(str)+1]) //预留一个位置放‘\...

2018-11-25 22:15:53 373

原创 C++ vector中的迭代器失效问题

vector中的迭代器失效问题在使用vector的成员函数时,有两个成员函数内部会出!](https://img-blog.csdnimg.cn/20181124093029161.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L01fam...

2018-11-24 09:41:18 1633 3

原创 vector 接口模拟实现

vector 接口模拟实现vector部分常用成员函数的模拟实现private: //成员数据 T* _start; //指向开头地址 T* _finish;//指向最后有效长度的后一个地址 T* _endofstorage; //指向开辟容量的后一个 构造函数无参构造Vector() //无参构造 :_...

2018-11-22 23:16:02 180

原创 pthread_cancel为何无法取消掉一个线程

pthread_cancel如何取消线程pthread_cancel取消线程的机制线程可以通过调用pthread_cancel函数来取消同一进程中的其他线程pthread_cancel函数#include &amp;lt;pthread.h&amp;gt;int pthread_cancel(pthread_t tid);成功取消返回0 不成功返回非0pthread_cancel 函数的作用...

2018-11-18 20:49:55 1706

原创 头文件中能否进行函数的定义

通常我们使用头文件时都是在头文件中进行声明,在源文件中定义,哪我们能否在头文件中进行函数的定义我们先进行一个测试,先声明一个test.h和一个test.cpp文件,并且在test.h中定义一个函数和一个变量可以发现,程序运行没有问题,结果也正确再创建一个test.cpp文件,并且同时包含tset.h,再次运行此时程序运行出错,提示出现了重定义的错误可能有的同学会疑惑,不...

2018-11-15 19:56:17 20195 8

原创 可重入函数与volatile限定符

可重入函数与volatile限定符可重入函数进程捕捉到信号并对其进行处理时,进程正在执行的正常指令序列就被信号处理函数中断,进程就会跳转去执行信号处理函数。当执行完信号处理函数返回后,再返回之前主程序执行流继续按原指令执行。此时会出现一个问题,假设主执行流正在执行一个链表的插入操作,在一个无头的单链表中,当主程序刚将一个节点头插到首节点上,但还未将头指针前移时,捕捉到信号,而信号处理函...

2018-11-13 14:38:00 224

原创 信号的阻塞

信号的阻塞每个信号都有两个标志位分别表示阻塞block和未决pending,还有一个函数指针表示处理动作。(block与pending是两个位图,)信号产生时,内核在该进程控制块中设置该信号的未决标志位,当信号抵达时,才消除该信号。posix.1允许递送系统一次或多次该信号,Linux中,在常规信号递达之前产生多次只记一次,而实时信号产生多次,可依此放在一个队列中。sigset_t 信...

2018-11-13 14:30:42 376

原创 c++动态内存管理

C++动态内存管理对比C语言和C++的动态内存管理探索静态内存管理和动态内存管理理解什么是内存泄露及内存泄露的危害operator new与operator deletenew的定位表达式深度探索new的内部机制new与delete的实现原理1.栈又叫堆栈,非静态局部变量/函数参数/返回值等等,栈是向下增长的。2.内存映射段是高效的I/O映射方...

2018-11-13 14:26:28 144

原创 函数模板

模板泛型编程编写与类型无关的通用代码,是代码的服用。模板是泛型编程的基础。模板函数模板类模板函数模板函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型模板。函数模板的格式template&lt;typename T1,....typename T2,typename T3&gt;返回值类型 函数名(参数列表){}ty...

2018-11-08 18:54:34 114

空空如也

空空如也

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

TA关注的人

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