自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

czf的编程工坊

记录编程的点点滴滴

原创 TCP三次握手四次挥手【概念梳理】

TCP协议:传输控制协议,是一个有链接,可靠的,面向字节流的传输层协议。   TCP三次握手: 1.怎么三次握手? 从上面的两幅图中我们可以看出: 第一次握手:SYN = 1, seq = x     客户端发送一个TCP的SYN标准位为1的包,知名客户端打算连接的服务器的端口...

2018-07-31 15:52:32 101 0

原创 java基础知识整理

前世 java的历史来源背景 背景在网上百度随便都能找的到就不细说了,作为一个之前学习C++的程序员来说,学习java尽量对比学习,理解可以更加透彻。 学习角度:java相对C++摒弃了哪些特性,又增加了哪些特性? java的包、jdk、jar包、jre 包(package) package 特点...

2019-08-28 09:45:37 44 0

原创 五种IO模型

高级IO模型共有五种: 阻塞IO: 在内核将数据准备好之前, 系统调用会一直等待. 所有的套接字, 默认都是阻塞方式。 非阻塞IO: 如果内核还未将数据准备好, 系统调用仍然会直接返回, 并且返回EWOULDBLOCK错误码    -----  非阻塞IO一般需要程序员循环的方式反复尝试读写文...

2018-08-21 15:36:52 1075 0

原创 基于ICMP协议的ping命令

要模拟实现ping命令,就需要对ICMP协议有所了解: ICMP:Internet控制报文协议,它是TCP/IP协议族中的一个子协议,用于在IP主机,路由之间传递信息的协议。 传输的信息包括: 1.目的不可达消息 2.超时消息 3.重定向消息 4.时间戳请求和时间戳响应消息 5.回显...

2018-08-07 14:43:06 4588 1

原创 TCP的分段和IP的分片

今天被同学问到一个问题: TCP的分段和IP的分片有什么联系? 先介绍两个概念: MSS:(Maxitum Segment Size)最大分段大小的缩写,是TCP协议里面的一个概念      MSS就是TCP数据包每次能够传输的最大数据分段。为了达到最佳的传输效能TCP协议在建立连接的时候通...

2018-08-07 13:41:00 120 0

原创 关于RTT、TTL、MSL的概念解释

     1、 MSL 是Maximum Segment Lifetime英文的缩写,中文可以译为“报文最大生存时间”,他是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。因为tcp报文 (segment)是ip数据报(datagram)的数据部分,具体称谓请参见《数据在网络各层中的称...

2018-07-31 16:10:42 372 0

原创 基于socket套接字的UDP/TCP服务器【网络编程】

基于socket套接字基本函数,我们就可以实现一些简单的回显服务器,及基于UDP/TCP的服务器和客户端。 UDP回显服务器: 简单思路: 1.socket()创建socket套接口 2.bind() 绑定IP地址端口号 3.循环的从连接端口接收数据,并重新写入 //////////...

2018-07-30 11:55:05 98 0

原创 网络编程套接字【socket】

在学习Linux系统编程的时候,进程间的通信方式包括——管道、消息队列、共享内存、信号量等方式。但是这些通信方式都村子一定的缺陷——都是在同一个机器上的进程间的通信。为了让不同机器上的进程之间相互通信,Linux网络编程便可解决。linux系统支持套接字接口,可以通过与使用管道类似的方法来使用套接...

2018-07-29 21:31:58 542 0

原创 STL——STL六大组件概念

STL(standard template libaray ):标准模板库,是C++程序设计语言的标准程序库,是一个包罗算法与数据结构的软件框架。STL的目的是标准化组件,所以在STL中使用了泛型编程的思想,对我们常用的数据结构:顺序表、链表、树、哈希以及常用的查找、排序等算法使用模板进行了封装,...

2018-06-19 17:03:34 245 0

原创 C++智能指针

在C语言学习的时候,指针的功能虽然强大,但是也是十分危险,指针的释放和置空在C语言中十分重要,不正确的操作可能会导致内存泄露。那能否让程序自己去控制在不需要资源时自动将其归还给系统。RAII  (Resource Acquisition IsInitialization) :定义一个类来封装资源的...

2018-06-07 16:58:00 61 0

原创 Linux的查找命令

Linux常用的查找命令有:find、which、 whereis、 locate、 type.1.find : 查找任何文件格式:find [PATH] [option] [action]参数说明:        时间查找参数:         -atime  n: 将n*24小时内access...

2018-05-31 16:36:31 97 0

原创 C++的异常机制

在学习C语言时我们的程序出错的处理方式基本都是以下几种:1.终止程序       (除数为0)2.返回一个表示错误的值,附加错误码(errno)3.返回一个合法的值,让程序处于一种非法的状态(atoi())4.调用预先准备好的错误处理函数    (回调函数)5.直接终止程序: abort  或者 ...

2018-05-29 10:46:20 546 0

原创 模板类的特化和类型萃取

模板类的特化:

2018-05-28 17:22:15 211 0

原创 C++模板封装Vector和带头结点的双向链表

C++模板封装Vector:注意:1.在Vector的拷贝构造,扩容函数中,需要注意string的影响#pragma once #include <iostream> #include <assert.h> #include &l...

2018-05-28 16:44:30 187 0

原创 模板总结

模板的使用是为了适应泛型编程

2018-05-26 16:26:05 76 0

原创 string和vector的基本接口函数

简单的介绍string和vector 一些基本的函数的含义

2018-05-25 17:03:59 628 0

原创 计算机网络知识初步梳理

ISO/OSI:开放系统互连参考模型。(七层模型)网络fence分层

2018-05-22 16:58:12 116 0

原创 mmap函数

写在前面:内存共享的几种方式:管道:简单、数据量较小共享内存:最快mmap:最高效socket:最稳定这篇文章重点分析一下mmap:void *mmap(void *addr, size_t length, int prot, int flags,                         ...

2018-05-20 20:40:48 217 0

原创 Linux中的popen函数和system函数

2018-05-18 16:29:23 1278 0

原创 Linux信号

信号的概念:信号是由用户、系统或者进程发送给目标进程的信息,以通知目标进程某个状态的改变或者系统异常。信号的产生:1>对于前台进程,用户可以通过输入特殊的终端字符来给它发送信号。如输入Ctrl+c向进程发送一个中断信号。2>系统异常。如浮点数异常和非法的内存段的访问3&...

2018-05-15 20:33:27 486 0

原创 Linux下的简单线程池

问题描述: 在我们的日常生活中,如果我们现在要浏览一个网页或者频繁的打开一个执行时间较短的任务, 如果每次调用都创建一个线程,使用结束后就立即释放,那么这样的开销对于操作系统来说有点太过浪费了。 而线程池的出现就可以很好地解决这样的问题。 线程池: 1.特点: 1>经典生产者消费...

2018-05-12 12:32:42 1208 3

原创 在虚拟机中和本地上传和下载文件

说明:我的虚拟机系统是Centeros7, 本地系统是Win7,工具是Xshell。希望能帮到大家。虚拟机下载文件到本地:1.找到要下载的文件或文件夹,pwd查看当前的绝对路径2.将文件夹打包 (单个文件可以忽略这一步) tar -zcvf /home/czf/Test/test.tar.gz c...

2018-05-07 15:35:39 4556 0

原创 线程的几种锁及基本操作

互斥锁: 1.定义互斥量: pthread_mutex_t mutex; 2.初始化互斥量: pthread_mutex_init(&mutex, NULL); //第二个参数不研究置NULL;          //初始化为 1 (仅做记忆) 3.上锁      pthread_mut...

2018-05-05 22:50:21 11110 0

原创 线程的基本概念

线程:1>在一个程序里的一个执行路线叫做线程,线程是一个进程内部的控制序列2>一个进程至少都有一个执行线程线程和进程创建过程简单图示:线程和进程:进程是资源竞争的基本单位线程是程序执行的最小单位一个进程内的全部进程共享同一个全局内存空间,这使得进程间很容易共享信息,但是...

2018-05-05 22:49:50 180 0

原创 实现哲学家问题和生产者消费者模型

利用信号量实现互斥访问资源:#include <stdio.h> #include <stdlib.h> #include <sys/ipc.h> #include <sys/sem.h&gt...

2018-05-02 00:26:13 79 0

原创 进程间通信之SystemV IPC--共享内存和信号量

共享内存:最快的可用IPC形式,一旦这样的内存区映射到共享它的进程的地址空间,这些进程间数据的传输就不再涉及内核。然而往该共享内存区存放信息或从中取走信息的进程间通常需要某种形式的同步。(不涉及内核:进程不是通过执行任何进入内核的系统调用来传递彼此的数据)。在消息队列处实现过一个服务器和客户机通信...

2018-05-02 00:09:23 79 0

原创 进程间通信之SystemV IPC--消息队列

System V IPC : 基于内核持续性System V 消息队列:在程序之间传递数据的一种方法System V 共享内存:用于在程序之间高效的共享数据System V 信号量:用于管理对资源的访问内核会为每个IPC对象维护一个数据结构:struct ipc_perm { key_...

2018-05-01 16:59:10 91 0

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

在掌握了基本的继承关系时,为了加深理解和延伸知识,可以实现以下几个特殊的类: 1.实现一个不能被继承的类: 2.实现一个只能在栈上创建对象的类 3.实现一个只能在堆上创建对象的类

2018-05-01 09:56:17 154 0

原创 虚表和虚基表的对象模型

继承这一块被虚表和虚基表弄的特别晕,专开一篇来研究研究:首先:虚表和虚基表无关系!!!虚函数:虚函数是在类的非静态成员函数前加virtual,则这个成员函数成为虚函数(并不是所有的成员函数能够定义为虚函数,如构造函数等),在某基类中声明为 virtual 并在一个或多个派生类中被重新定义的成员函数...

2018-04-26 11:23:15 260 4

原创 虚函数和多态

知识储备: 重提切片行为: 1.子类对象赋值给父类对象 2.父类型的指针指向了子类对象 3.父类型的引用引用子类的对象 虚函数:类的成员函数前面加virtual关键字,则这个成员函数称为虚函数 虚函数重写:当在子类的定义了一个与父类完全相同的虚函数时,则称子类的这个函数重写(也称覆...

2018-04-25 21:59:38 93 0

原创 C++继承概念梳理

继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。类的成员具有三种访问限定符:public                protect(保护)          private    基(父)类和派生(子)类...

2018-04-21 17:27:07 143 0

原创 C++封装顺序表和带头结点的双向循环链表

2018-04-19 10:27:41 93 0

原创 静态库和动态(共享)库

ELF可重定位目标文件的格式: ELF可执行文件的格式: 静态库:(.a) 静态库:(.a)

2018-04-18 15:06:31 50 0

原创 进程间通信之管道

匿名管道和命名管道

2018-04-17 15:41:03 74 0

原创 进程间通信基本概念【操作系统】

基本概念: 进程同步:(司机-售票员、生产者-消费者)两个或多个进程需要相互配合才能完成一项任务 进程互斥:由于各个进程都要访问共享资源,而且这些资源需要排他使用,因此各个进程间需要竞争使用这些资源,这种关系就叫进程互斥 进程间通信的目的: 1.数据传递 2.资源共享 3.通知事件 进程间通信的发...

2018-04-17 00:07:37 159 0

原创 string类模拟之引用计数和写时拷贝

在 string类的模拟之深浅拷贝  中,我们可以看到,程序浅拷贝导致的崩溃,是因为多次释放内存引起的多次析构,那么我们可以添加一个计数器,这里称之为引用计数,来表示当前的空间有多少指针指向它,如果大于一的话,那么在调析构函数的时候,就只对引用计数减一,当减到只剩一的时候就可以安心的释放内存空间了...

2018-04-16 13:17:40 105 0

原创 string类的模拟之深浅拷贝

浅拷贝:浅拷贝只拷贝指针,但拷贝后两个指针指向同一个内存空间,或者可以说,原对象和拷贝对象共用一个实体,任何一个对象的改变都会引起另一个的改变。当类成员不包括指针何引用时,浅拷贝并无问题;但对于指针与引用成员,当对象的生命周期结束后,浅拷贝会造成同一块内存单元被释放两次,导致内存泄漏。 深拷贝:...

2018-04-16 12:43:50 70 0

原创 浮点型数据在内存中的存储

根据国际标准IEEE(电气和电子工程协会) 754,任意一个二进制浮点数V可以表示成下面的形式: 1.(-1)^S*M*2^E 2.(-1)^s表示符号位,当s=0,V为正数;当s=1,V为负数。 3.M表示有效数字,大于等于1,小于2。 4.2^E表示指数位。

2018-04-13 14:06:32 150 0

原创 Linux系统I/O

文件描述符: open/close read/write

2018-04-11 20:53:39 378 0

原创 文件I/O流

1.FILE * fopen ( const char * filename, const char * mode ); 2.int fclose ( FILE * stream ); //需与fopen配套使用(打开流一定要关闭) 3.int getc ( FILE * stream ); ...

2018-04-08 09:47:32 55 0

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