自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

会飞的鱼的博客

个人分享及学习总结,水平有限,若理解不对的地方,欢迎大家批评指正!

  • 博客(54)
  • 资源 (4)
  • 收藏
  • 关注

原创 TCP协议分析

1 TCP服务的特点  传输层协议主要有两个:TCP协议和UDP协议。TCP协议相对于UDP协议的特点是:面向连接、字节流和可靠传输。  对于TCP协议而言,发送端执行的写操作次数和接收端执行的读操作次数之间没有任何数量关系,这即字节流的概念:应用程序对数据的发送和接收是没有边界限制的。UDP则不同。发送端应用程序每执行一次写操作,UDP模块就将其封装成一个UDP数据报并发送之,接收端必须及时...

2019-10-24 10:28:22 745

原创 C++ 实现单例模式小结

单例模式1.1定义以及作用保证一个类仅有一个实例,并提供一个访问它的全局访问点。保证一个类只有一个对象,降低对象之间的耦合度1.2 特点某个类只能有一个实例;其必须自行创建这个实例;必须自行向整个系统提供这个实例。优点:活动的单例只有一个实例,对单例类的所有实例化得到的都是相同的一个实例。这样就防止了其他对象对自己就行实例化,确保每个对象都访问一个实例提供了对唯一实例的受控访问避...

2019-08-25 11:26:54 1137

原创 C++实现工厂模式及解析

工厂模式1 工厂方法模式1.1 定义以及作用通过定义工厂父类负责定义创建对象的公共接口,而子类则负责生成具体的对象。工厂方法使一个类的实例化延迟到其子类,即由子类来决定应该实例化(创建)哪一个类1.2 特点克服了简单工厂的缺点:违背了开放-封闭原则的缺点工厂方法模式将具体产品的创建推迟到工厂类的子类(具体工厂)中,工厂父类不在负责所有产品的创建,而只是给出具体工厂必须实现的接口。工厂...

2019-08-23 12:34:44 918

原创 博客随笔——记写博客一周年

  前几天在知乎上看到一个问题:零基础如何自学编程。其中一个回答让我意识到自己在学习编程的方法上有所欠缺。自认为回答描述的几个区别非常具有典型性:记笔记 VS 写技术文章以学会XX为目标 VS 以做出XX为目标线性学习 VS 递归学习厌恶不确定性 VS 接受不确定性拿会XX定义自己 VS 拿XX项目作者定义自己回顾这一年来写的博客,结合回答者的内容,发现自己写部分博客只是单纯的笔记...

2019-08-22 22:19:33 315 1

原创 函数参数入栈解析

栈:用于维护函数调用的上下文,通常在用户空间的最高地址处分配,增长方向向低地址增长。在i386下,栈顶由esp寄存器进行定位,压栈的操作使栈顶的地址减小,即esp减小;弹出的操作使栈顶地址增大,即esp增大。栈保存了函数调用所需要的维护信息,这被称为堆栈帧(Stack Frame)或活动记录(Active Record),其包括如下内容:函数的返回地址和参数临时变量:包括函数的非静态局部变...

2019-08-04 22:19:45 5365

原创 MySQL命令学习笔记(八)

1 安全管理1.1 访问控制MySQL服务器的安全基础是: 用户应该对他们需要的数据具有适当的访问权,既不能多也不能少1.2 管理用户MySQL用户账号和信息存储在名为mysql的MySQL数据库中。获得所有用户账号列表时,可使用以下代码:USE mysql;SELECT user FROM user;结果如下:这里只有root一个账户。接下来开始创建账户。1.2.1 创建用...

2019-06-28 21:11:39 428

原创 MySQL命令学习笔记(七)

1 使用游标1.1 游标游标(cursor)是一个存储在MySQL服务器上的数据库查询,它不是一条SELECT语句,而是被该语句检索出来的结果集。在存储了游标之后,应用程序可以根据需要滚动或浏览其中的数据。游标主要用于交互式应用,其中用户需要滚动屏幕上的数据,并对数据进行浏览或做出更改。MySQL游标只能用于存储过程(和函数)。1.2 使用游标使用游标涉及几个明确的步骤:在能够使用游...

2019-06-28 21:06:31 168

原创 MySQL命令学习笔记(六)

1 创建和操作表1.1 创建表  MySQL不仅用于表数据操作,而且还可以用来执行数据库和表的所有操作,包括表本身的创建和处理。创建表的两种方法:使用具有交互式创建和管理表的工具表也可以直接用MySQL语句操作1.1.1 表创建基础为利用CREATE TABLE创建表,必须给出下列信息:新表的名字,在关键字CREATE TABLE之后给出表列的名字和定义,用逗号分隔示例如...

2019-06-28 21:03:55 213

原创 MySQL命令学习笔记(五)

1 插入数据1.1 数据插入数据插入的方式有:插入完整的行;插入行的一部分;插入多行;插入某些查询的结果。1.2 数据插入将数据插入表中最简单的方法是使用基本的INSERT语法,其要求指定表名和被插入到新行中的值。示例命令如下:INSERT INTO table1 VALUES('TN8',8,'14723580','x',9, 8.88, '2019-05-21');结果如下:...

2019-06-28 18:08:06 257

原创 MySQL命令学习笔记(四)

一、组合查询有两种基本情况,其中需要使用组合查询:在单个查询中从不同的表返回类似结构的数据;对单个表执行多个查询,按单个查询返回数据1 创建组合查询可用UNION操作符来组合数条SQL查询。利用UNION,可给出多条SELECT语句,将它们的结果组合成单个结果集。1.1 使用UNION创建UNION涉及编写多条SELECT语句。使用示例如下:SELECT id,name FRO...

2019-06-28 17:21:31 129

原创 位运算总结

文章目录位运算基础1 技巧一:用于消去x的最后一位的11.1 应用一:用$O(1)$时间复杂度检测整数n是否是2的幂次1.2 应用二:计算在一个32位的整数的二进制表示中有多少个11.3 应用三:将整数A转换为B,需要改变多少个bit位2 技巧二:使用二进制进行子集枚举2.1 应用一:给定一个含不同整数的集合,返回其所有的子集3 不用任何比较判断找出两个数较大的数4 只用位运算不用算术运算实现整数...

2019-06-20 21:25:31 1008

原创 TCP三次握手与四次挥手过程分析(理论+实践)

1、 前言  TCP协议(Transmission Control Protocol,传输控制协议),为应用层提供可靠的、面向连接的和基于流(stream)的服务。TCP协议使用超时重传、数据确认等方式来确保数据包正确地发送至目的端,因此TCP服务是可靠的  下面利用tcpdump来观察和分析TCP连接的建立与关闭过程。首先介绍测试环境:开启两台Linux虚拟机,然后将网络均连接到同一局域网...

2019-06-11 14:59:27 1072

原创 MySQL命令学习笔记(三)

一、创建计算字段1.1 计算字段字段(field) 基本上与列( column) 的意思相同,经常互换使用,不过数据库列一般称为列,而术语字段通常用在计算字段的连接上。1.2 拼接字段**拼接:**将值联接到一起构成单个值。在mysql的SELECT语句中,可使用Concat()函数来拼接两个列。多数DBMS使用+或||来实现拼接,mysql则使用Concat()函数来实现。示例如下:...

2019-06-11 09:29:27 258

原创 MySQL命令学习笔记(二)

一、过滤数据1.1 使用WHERE子句  在SELECT语句中,数据根据WHERE子句中指定的搜索条件进行过滤。WHERE子句在表名(FROM子句)之后给出,如下所示:SELECT id, home FROM table1 WHERE name = "TN6";**WHERE子句的位置:**在同时使用ORDER BY和WHERE子句时,应该让ORDER BY位于WHERE之后, 否则将会...

2019-06-11 09:24:16 669

原创 Raspberry pi使用笔记2

Raspberry pi使用笔记2一、树莓派上vi(vim)编辑器常用指令vi(vim)有3个模式:插入模式、命令模式、低行模式。插入模式:在此模式下可以输入字符,按ESC将回到命令模式。命令模式:可以移动光标、删除字符等。低行模式:可以保存文件、退出vi、设置vi、查找等功能(低行模式也可以看作是命令模式里的)。1 打开文件、保存、关闭文件(vi(vim)命令模式下使用)vi fi...

2019-06-11 09:17:37 333

原创 Raspberry pi使用笔记1

Raspberry Pi使用记录一、树莓派 Raspberry Pi 设置无线上网1、查看网卡状态是否正常把无线网卡插到树莓派上,输入命令ifconfig -a查看是否有wlan0的信息,如果有说明网卡状态正常,可以跳过第二步,直接配置无线网络。如果查不到wlan0的信息,则需要安装无线网卡的驱动。2、配置无线网络用编辑器vim打开interfaces文件sudo vim /etc/n...

2019-06-11 09:16:27 346

原创 Opencv Mat矩阵操作

Opencv Mat矩阵操作1.生成矩阵:Mat image(240, 320, CV8UC3);第一个参数是rows,该矩阵的行数;第二个参数是cols,该矩阵的列数;第三个参数是该矩阵元素的类型。这句话表示创建一个大小为240×320的矩阵,里面的元素为8位unsigned型,通道数(channel)有3个。image.create(480, 640, CV8UC3);分配(或重...

2019-05-28 22:21:47 8606 3

原创 MySQL命令学习笔记(一)

MySQL命令学习笔记文章目录MySQL命令学习笔记1 使用数据库1.1 连接数据库2 检索数据2.1 SELECT语句2.2 检索多个列2.3 检索所有列2.4 检索不同的行2.5 限制结果2.6 使用完全限定的表名3 排序检索数据3.1 排序数据3.2 按多个列排序3.3 指定排序方向1 使用数据库1.1 连接数据库  为连接到mysql,需要以下信息:主机名(计...

2019-05-26 16:25:24 260

原创 Windows下Mysql和Navicat的安装及使用

Windows下Mysql和Navicat的安装及使用一 Mysql安装说明1 安装包下载去MySQL官网下载※※百度云下载链接※※,提取码:6hdm2 解压  这里使用的是非安装版MySQL,安装操作简单,直接解压就行。将下载好的 zip 包,解压到自己指定的目录即可,这里我解压到了D盘下面:D:\Program Files\mysql-5.7.23-winx64,或者直接先解...

2019-05-18 11:23:57 7527 8

原创 C++字节对齐

C和C++字节对齐文章目录C和C++字节对齐1. 什么是字节对齐2. 对齐的原因和作用3. 对齐准则4. 结果分析5. 字节对齐设置1. 什么是字节对齐  现代计算机中,内存空间按照字节划分,理论上可以从任何起始地址访问任意类型的变量。但实际中在访问特定类型变量时经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序一个接一个地存放,这就是对齐。2. 对齐的原...

2019-05-15 14:45:58 774

原创 C++ Primer 5th学习笔记14 面向对象程序设计

文章目录面向对象程序设计1 OOP概述2 定义基类和派生类2.1 定义基类2.2 定义派生类2.3 类型转换与继承3 虚函数4 抽象基类5 访问控制与继承6 继承中类作用域7 构造函数与拷贝控制7.1 虚析构函数7.2 合成拷贝控制与继承7.3 派生类的拷贝控制成员7.4 继承的构造函数8 容器与继承面向对象程序设计1 OOP概述  面向对象程序设计的核心思想是数据抽象,继承和动态绑定。通过...

2019-05-07 09:37:45 248

转载 C++堆和栈的区别和联系

1、堆和栈的含义在C++中,内存分为5个区:堆、占、自由存储区、全局/静态存储区、常量存储区1、栈: 由系统自动分配和释放内存,存放函数的参数值,局部变量的值等,分配方式类似于数据结构中的栈 。2、堆: 一般由程序员分配和释放内存(由new申请内存,delete释放内存), 若程序员不释放,会造成内存泄露,程序结束时可能由OS回收,分配方式类似于链表 。3、自由存储区: 是由malloc等...

2019-05-03 12:19:47 2899

原创 C#调用C++生成的dll

1 新建工程  (1)首先新建C#控制台工程,文件—新建—项目,选择控制台应用,如下图所示:  (2)在此工程中添加C++的动态链接库项目,右键解决方案(注意这里是解决方案,不是C#工程),选择添加,选择新建项目,如下图:  (3)在添加新建项目的界面,选择VC++下面的Win32,然后选Win32项目,修改对应文件名称,如下图:  (4)点击确定后进入设置向导,在应用程序类型中选择...

2019-05-02 21:16:52 3111

原创 C++ Primer 5th学习笔记16 标准库特殊设施

标准库特殊设施1 tuple类型  tuple是类似pair的模板,不同tuple类型的成员类型也不相同,但一个tuple可以有任意数量的成员tuple支持的操作操作描述tuple<T1, T2, ..., Tn> t;t是一个tuple,成员数为n,第i个成员的类型为Tituple<T1, T2, ..., Tn> t(v1, v2,...

2019-04-27 18:47:51 352

原创 C++ Primer 5th学习笔记15 模板与泛型编程

模板与泛型编程1 定义模板1.1 函数模板  类型参数前必须使用关键字class或typename,示例如下:template<typename T> T valc (const T&, const T&);template<class U> U valc (const U&, const U&);template<ty...

2019-04-27 18:46:11 221

原创 C++ Primer 5th学习笔记13 操作重载与类型转换

操作重载与类型转换1 基本概念  重载运算符是具有特殊名字的函数:其名字由关键字operator和其后要定义的运算符号共同组成。可以被重载的运算符如下:运算符符号符号符号符号符号符号+-*/%^&|~!,=<><=>=++--<<>>==!=&am...

2019-04-14 20:08:37 211

原创 C++ Primer 5th学习笔记12 拷贝控制

拷贝控制1 拷贝、赋值与销毁  拷贝控制操作:拷贝构造函数、拷贝赋值运算符、移动构造函数、移动赋值运算符和析构函数。1.1 拷贝构造函数  若一个构造函数的第一个参数是自身类类型的引用,且任何额外参数都有默认值,则此构造函数是拷贝构造函数。示例如下:class Foo{ public: Foo(); //默认构造函数 Foo(const Foo&...

2019-04-14 20:04:18 291

原创 git版本控制命令行说明

git版本控制操作1.1 打开git命令行  此操作均是在Windows下进行,有关软件安装,请移步此处※※  首先鼠标在桌面空白地方右键选择Git Bash here,然后cd到所要进行版本控制的文件夹。另外一种方法比较简单,直接选中目标文件夹,右键文件夹,选择Git Bash here,出现git的命令行界面。如下图:这里已经在桌面创建了一个名为git_test的文件夹,文件路径建议...

2019-04-10 22:08:45 6829

原创 C++ Primer 5th学习笔记11 动态内存

动态内存1 动态内存和智能指针  在C++中,动态内存的管理是通过一对运算符来完成的:new,在动态内存中为对象分配空间并返回一个指向该对象的指针。delete则是接受一个动态对象的指针,销毁该对象,并释放与之相关联的内存。  动态内存的使用很容易出问题。若忘记释放内存,则会产生内存泄露;若在尚有指针引用内存的情况下就释放内存,则会产生引用非法内存的指针。  因此新标准库提供了两种智能指...

2019-04-04 18:48:48 239

原创 C++ Primer 5th学习笔记10 关联容器

关联容器1 使用关联容器  关联容器支持高效的关键字查找和访问,两个主要的关联容器类型是map和set。map中的元素是关键字-值(key-value)对:关键字起到索引作用,值则表示与索引相关联的数据。set中每个元素只包含一个关键字,set支持高效的关键字查询操作——检查一个给定的关键字是否在set中  标准库提供8个关联容器,如下表格所示。类型map和multimap定义在头文件ma...

2019-04-04 18:45:11 184

原创 C++ Primer 5th学习笔记9 泛型算法

泛型算法1 初识泛型算法  大多数算法都定义在algorithm,其中头文件numeric中定义了一组数值泛型算法。算法永远不会执行容器的操作,即永远不会改变底层容器的大小。只读算法  只读算法:只读取其输入范围内的元素,而不改变元素。例如:find,accumulate。accumulate定义在头文件中,接受三个参数。调用示例://对vec中的元素求和,和的初始值是0int n...

2019-04-04 18:32:17 220

原创 C++ Primer 5th学习笔记8 顺序容器

顺序容器1 顺序容器概述顺序容器类型 名称描述vector可变大小数组,支持快速随机访问。在尾部之外的位置插入元素或删除元素可能很慢deque双端队列,支持快速随机访问。从头尾位置插入/删除速度很快list双向链表,只支持双向顺序访问。在list中任何位置进行插入和删除操作速度都很快forward_list单向链表,只支持单向顺序访问。在任何位...

2019-03-30 15:56:50 285

原创 vector对象增长容量大小测试

vector对象增长说明  在C++中,vector是一个非常好用的容器,该容器大小可变,而且将元素连续储存。如果容器的储存空间已满,此时向容器中添加新元素,则容器必须分配新的内存空间来保存已有元素和新元素,将已有元素从旧位置移动到新空间中,然后添加新元素,释放旧储存空间。这样就会导致每次添加新元素时,vector就执行一次内存分配和释放操作,性能会明显的变慢。  为了避免这种问题,标准库采用...

2019-03-30 15:51:17 638

原创 C++ Primer 5th学习笔记6 类

类  类的基本思想是数据抽象和封装,类的接口包括用户所能执行的操作;类的实现包括类的数据成员、负责接口实现的函数体以及定义类所需的各种私有函数。1 定义抽象数据类型 从改进的Sales_data开始,其结构如下图所示:struct Sales_data{ std::string isbn() const {return bookNo; } Sales_data&amp...

2019-03-30 15:46:23 177

原创 C++ Primer 5th学习笔记7 IO库

IO库1 IO类常用的IO库类型和头文件如下表:头文件类型iostreamistream,wistream从流读取数据ostream,wostream 向流写入数据iostream,wiostream 读写流fstreamifstream,wifstream 从文件读取数据ostream,wofstream 向文件写入数据fstr...

2019-03-25 09:10:49 193

原创 C++ Primer 5th学习笔记5 函数

函数1 函数基础  自动对象:只存在于块执行期间的对象,当块的执行结束后,块中创建的自动对象的值就变成未定义的。  局部静态对象:在程序的执行路径第一次经过对象定义语句初始化后,直到程序终止才被销毁,对象所在的函数结束执行也不会影响该变量。将局部变量定义成static类型即可变成局部静态对象2 参数传递  引用传递:形参是引用类型  值传递:实参的值被拷贝给形参时2.1 传引用参数...

2019-03-25 09:07:35 148

原创 C++ 链表总结

一、单链表问题定义ListNode节点结构体struct ListNode { int val; ListNode *next; //定义节点的后继 ListNode(int x) : val(x),next(NULL);//声明一个节点}1、链表反转 1-&amp;gt;2-&amp;gt;3-&amp;gt;4-&amp;gt;5-&amp;gt;null ^ root  逆序的思...

2019-03-18 13:01:59 2849

原创 C++ Primer 5th学习笔记4 异常语句

语句try语句块和异常处理  C++语言中,异常处理包括以下几种:throw表达式,异常检测部分使用throw表达式,来表示程序遇到了无法处理的问题。try语句块(try block),异常处理部分使用try语句块处理异常,try语句块以关键字key开始,并以一个或多个catch子句结束。一套异常类,用于在throw表达式和相关catch子句之间传递异常的具体信息。1、try语句块...

2019-03-18 12:57:03 160

原创 C++ Primer 5th学习笔记3 表达式

1、算术运算符运算符功能描述+一元正号+ expr-一元负号- expr*乘法expr * expr/除法expr / expr%求余expr % expr+加法expr + expr-减法expr - expr  上述运算符的优先级中,由上往下,一元运算符优先级最高,其次是乘除运算,最后是加减运算,所有...

2019-03-18 12:54:40 168

原创 C++ Primer 5th学习笔记2 字符串、向量和数组

一、字符串、向量、数组1 标准库类型string  标准库类型string表示可边长的字符序列,使用时必须先包含string头文件#include &amp;lt;string&amp;gt;,文件中还需要声明using std::string;1.1 定义和初始化string对象eg声明形式描述string s1默认初始化,s1是一个字符串string s2(s1)s2是...

2019-03-10 21:22:35 158

C&C++ reference

整理最新的C&C++ reference参考手册,包含大量库函数,以及STL模板函数,和C++11/C++14/C++17/C++20包含相关函数,以及相关函数的使用方法。使用chm格式便于打开,避免每次都需要去打开网页。

2019-03-10

TortoiseGit+Git

Git-2.19.0-64-bit+TortoiseGit-2.7.0.0-64bit软件安装包,Git + TortoiseGit 配置步骤见博客

2018-11-20

STM32F4xx官方串口IAP例程

STM32F4xx官方串口IAP例程,可作为移植开发的参考文件

2018-09-05

WIN10刷JLINK固件教程

已成功在WIN10系统下刷JLINK固件

2016-08-30

空空如也

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

TA关注的人

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