- 博客(25)
- 收藏
- 关注
原创 HTTP与HTTPS
HTTP与HTTPS一、两种协议的基本概念与区别二、HTTP协议详解2.1、HTTP请求报文和响应报文2.2、常用请求方法2.3、常用响应状态码三、HTTPS协议详解3.1、对称加密和非对称加密3.2、SSL协议的具体实现一、两种协议的基本概念与区别HTTP协议:HTTP协议是超文本传输协议的缩写,设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因
2020-12-25 16:37:33
257
原创 Redis之Redis事务
Redis之Redis事务一、Redis事务的概念:二、Redis事务没有隔离级别的概念:三、Redis不保证原子性:四、Redis事务的三个阶段:五、Redis事务相关命令:六、Redis事务使用案例:6.1、正常执行6.2、放弃事务6.3、若在事务队列中存在命令性错误(类似于java编译性错误),则执行EXEC命令时,所有命令都不会执行6.4、若在事务队列中存在语法性错误(类似于java的1/0的运行时异常),则执行EXEC命令时,其他正确命令会被执行,错误命令抛出异常。6.5、使用watch七、总结:
2020-09-03 16:45:46
184
原创 Mysql数据库优化
Mysql数据库优化1、选取最适用的字段属性2、使用连接(JOIN)来代替子查询(Sub-Queries)3、使用联合(UNION)来代替手动创建的临时表4、事务5、锁定表6、使用外键7、使用索引8、优化查询语句1、选取最适用的字段属性MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快。因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小。例如,在定义邮政编码这个字段时,如果将其设置为CHAR(255),显然给数据库增加了不必
2020-08-29 12:06:08
282
原创 设计模式—结构型模式
设计模式—结构型模式设计模式的分类结构型模式1、适配器模式1.1、类适配器(采用多继承实现)1.2、对象适配器(实例化被适配者实现)2、装饰器模式3、代理模式设计模式的分类结构型模式1、适配器模式定义: 适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题。包含角色:目标接口:Target,该角色把其他类转换为我们期望的接口被适配者: Adaptee 原有的接口,也是希望被改变的接口适配器: Adapter, 将被适配者和目标接口组合到一
2020-08-26 23:20:32
216
原创 STL之set(集合)详解
STL之set(集合)详解一、基本概念二、常用函数2.1、构造/析构函数2.1.1、构造函数2.1.2、析构函数2.1.3、等号操作符2.2、迭代器一、基本概念集合是存储排序键的关联容器,其中每个键都是唯一的,可以插入或删除但不能更改。语法:template < class T, // set::key_type/value_type class Compare = less<T>, //
2020-08-26 19:39:42
1177
原创 STL之stack(栈)详解
STL之stack栈详解一、基本概念二、常用函数2.1、push函数2.2、pop函数2.3、top函数2.4、size函数2.5、empty函数2.6、emplace函数一、基本概念这种数据结构使用LIFO技术,其中LIFO表示后进先出。首先插入的元素将在末尾提取,以此类推。有一个名为“top”的元素,它是位于最上面位置的元素。所有插入和删除操作都是在堆栈的顶部元素本身进行的。语法:template<class T, class Container = deque<T> >
2020-08-26 16:08:50
2008
原创 STL之queue(队列)详解
STL之queue队列详解一、基本概念二、常用函数2.1、push函数2.2、pop函数2.3、front函数2.4、back函数2.5、size函数2.6、empty函数2.7、swap函数一、基本概念此数据结构适用于FIFO技术,其中FIFO表示先进先出。首先插入的元素将首先被提取,依此类推。有一个称为“前”的元素,它是位于最前位置或位于第一个位置的元素,也有一个名为“后”的元素,它是位于最后位置的元素。在普通队列中,元素的插入在尾部,而删除则从前面开始。二、常用函数2.1、push函数该函
2020-08-26 15:49:21
538
原创 STL之vector(数组)详解
STL之vector容器详解一、什么是vector?二、容器特性2.1、顺序序列2.2、动态数组2.3、能够感知内存分配器三、基本函数实现3.1、构造函数3.2、添加元素3.3、删除元素3.4、遍历函数3.5、大小函数3.6、其他函数一、什么是vector?向量(vector)是一个封装了动态大小数组的顺序容器(sequence container)。跟任意其它类型的容器一样,它能够存放任何类型的对象。可以简单地认为,vector是一个能够存放任意类型的动态数组。二、容器特性2.1、顺序序列顺序容
2020-08-26 14:50:34
1460
原创 乐观锁和悲观锁
乐观锁和悲观锁一、并发控制二、悲观锁三、乐观锁四、实现方式4.1、悲观锁的实现方式4.2、乐观锁的实现方式五、如何选择一、并发控制当程序中可能出现并发的情况时,就需要通过一定的手段来保证在并发情况下数据的准确性,通过这种手段保证了当前用户和其他用户一起操作时,所得到的结果和他单独操作时的结果是一样的。这种手段就叫做并发控制。并发控制的目的是保证一个用户的工作不会对另一个用户的工作产生不合理的影响。没有做好并发控制,就可能导致***脏读、幻读和不可重复读***等问题。常说的并发控制,一般都和数据库管
2020-08-20 23:20:35
94
原创 C++之string类详解
C++之string类详解一、string类简介1.1、string类的几种常见构造函数1.2 、用C语言风格初始化string对象二、获取string对象的长度三、复制string对象四、string对象的拼接和附加4.1、使用+操作符拼接两个字符串4.2、使用+=操作符在字符串后添加内容4.3、使用string.append()函数4.4、使用string.push_back()函数五、string对象的插入和删除5.1、使用 string.insert() 进行插入操作5.2、使用 string.er
2020-08-20 13:39:24
390
转载 数据库索引详解
转载:https://www.cnblogs.com/fengqiang626/archive/2019/09/04/11459434.html
2020-08-13 11:28:41
85
原创 进程间通信与线程间通信
进程间通信与线程间通信一、进程、线程、协程1、进程2、线程3、协程4、三者之间的区别4.1、子进程和子线程的概念4.2、进程和线程的共同点4.2、进程、线程的不同点4.3、线程、协程比较二、进程与线程的通信方式1、通信方式之间的差异2、进程间通信2.1、管道通信(pipe)2.2、消息队列(pipe)2.3、共享内存(shared memory)2.4、信号量(semaphore)2.5、套接字(socket)2.6、信号 (sinal)3、线程间通信3.1、锁机制:包括互斥锁、条件变量、读写锁3.2、信号
2020-08-11 20:08:15
608
原创 计算机网络-socket(套接字)编程
socket套接字编程一、套接字概念二、网络字节序三、socket地址的数据类型及相关函数四、建立TCP连接的基本步骤及相应API五、建立UDP连接的基本步骤一、套接字概念在TCP/IP协议中,“IP地址+TCP或UDP端口号”唯一标识网络通讯中的一个进程。“IP地址+端口号”就对应一个socket。欲建立连接的两个进程各自有一个socket来标识,那么这两个socket组成的socket pair就唯一标识一个连接。因此可以用Socket来描述网络连接的一对一关系。套接字通信原理如下图所示:二、
2020-07-04 20:18:32
668
原创 计算机网络-运输层(UDP/TCP,流量控制与拥塞控制)
计算机网络-运输层一、进程之间的通信二、运输层的两个主要协议2.1、用户数据报协议 UDP(User Datagram Protocol)2.1.1、UDP概述2.1.2、面向报文的UDP2.1.3、UDP的首部格式2.2、传输控制协议 TCP(Transmission Control Protocol)2.2.1、TCP概述2.2.2、面向流的概念2.2.3、套接字(socket)2.2.4、TCP的首部格式三、运输层的端口3.1、进程标识符3.2、需要解决的问题3.3、端口号(protocol port
2020-07-04 11:22:48
693
原创 计算机网络-网络模型
网络模型OSI七层协议模型TCP/IP四层协议模型OSI七层协议模型主要是:应用层(Application)、表示层(Presentation)、会话层(Session)、传输层(Transport)、网络层(Network)、数据链路层(Data Link)、物理层(Physical)。TCP/IP四层协议模型...
2020-07-03 21:28:07
228
原创 C++中的异常处理机制
C++中的异常处理机制一、C++异常处理基本语法二、能够捕获任何异常的 catch 语句三、异常的再拋出四、函数的异常声明列表五、C++标准异常类5.1、bad_typeid5.2、bad_cast5.3、bad_alloc5.4、 out_of_range一、C++异常处理基本语法C++ 通过 throw 语句和 try…catch 语句实现对异常的处理。throw 语句的语法如下:throw 表达式;该语句拋出一个异常。异常是一个表达式,其值的类型可以是基本类型,也可以是类。try…cat
2020-07-03 21:03:32
488
原创 C++中的内存管理、内存泄漏和内存回收
C++中的内存分布一、内存管理1、C++内存管理详解1.1、内存分配方式1.1.1、内存组成一、内存管理1、C++内存管理详解1.1、内存分配方式1.1.1、内存组成栈区(stack):由编译器自动分配与释放,存放为运行时函数分配的局部变量、函数参数、返回数据、返回地址等。其操作类似于数据结构中的栈。堆区(heap):一般由程序员自动分配,如果程序员没有释放,程序结束时可能有OS回收。其分配类似于链表。全局/静态区(static):存放全局变量、静态数据、常量。程序结束后由系统释放。全局区分为
2020-07-03 18:48:32
4786
转载 常见算法—贪心算法
贪心算法一、基本概念二、基本思路三、存在的问题四、例题分析五、算法的使用前提六、分解问题方式一、基本概念所谓贪心算法是指,在对问题求解时,总是 做出在当前来看是最好的选择。也就是说,不从整体最优上加以考虑,通过贪心算法做出来的往往是在把 原问题拆分成几个小问题,分别求 每个小问题的最优解,再把这些“局部最优解”叠起来,就作为整个问题 当前 的最优解。贪心算法无固定的算法框架,算法设计的关键是贪心策略的选择,必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择贪心策略必须具备 无后效性(即某个状
2020-07-01 22:15:58
1202
原创 C++中的智能指针
C++中的智能指针一、C++智能指针介绍1.1、什么是智能指针1.2、为什么要采用智能指针1.3、智能指针成员二、auto_ptr详解2.1、模拟实现代码2.2、存在的问题2.2.1、赋值运算符存在问题2.2.2、拷贝构造存在问题2.2.3、编译器优化的问题2.2、上述问题解决办法三、unique_ptr详解2.1、基于安全考虑3.1 unique_ptr概念3.2 unique_ptr操作三、shared_ptr详解四、weak_ptr详解一、C++智能指针介绍1.1、什么是智能指针智能指针主要用于
2020-07-01 22:13:31
299
原创 设计模式—创建型模式
设计模式设计模式的分类一、创建者模式1、工厂模式1.1、简单工厂模式1.2、工厂方法模式1.3、抽象工厂模式1.4、三种工厂模式的使用选择2、单例模式2.1、预加载(饿汉式)2.2、懒加载(懒汉式)2.3、线程安全的懒加载(双重检查锁)3、生成器模式3.1、生成器模式的结构3.2、实例和代码分析设计模式的分类一、创建者模式1、工厂模式1.1、简单工厂模式定义: 定义了一个 创建对象的类,这个类封装了实例化对象的行为。代码示例:#include <iostream>using
2020-07-01 21:51:44
224
原创 C++类中的多态
C++类中的多态一、多态的概念及分类1、静态多态2、动态多态二、动态多态详解1、动态多态的实现过程2、代码案例3、动态多态的实现原理—虚函数表3.1、动态多态虚函数表的内存分布3.2、虚函数表属于类而不是对象3.2、多继承情况下的虚函数表一、多态的概念及分类多态是一种 运行绑定机制,通过这种机制,实现将函数名绑定到函数具体实现代码的目的。一个函数的名称与其入口地址是紧密相连的,入口地址是该函数在内存中的起始地址。1、静态多态静态多态是编译器在编译期间完成的,编译器会根据实参类型来选择调用合适的函数
2020-06-14 21:46:34
810
原创 常见算法—排序
排序算法一、 算法的分类二、相关概念三、算法的复杂度四、具体算法详述1、交换排序类1.1、冒泡排序(Bubble Sort)1.1.1、算法描述1.1.2、动图演示1.1.3、代码实现1.2、快速排序(Quick Sort)1.2.1、算法描述1.2.2、动图演示1.2.3、代码实现2、插入排序类2.1、插入排序(Insertion Sort)2.1.1、算法描述2.1.2、动图演示2.1.3、代码实现2.2、希尔排序(Shell Sort)2.2.1、算法描述2.2.2、动图演示2.2.3、代码实现2.2
2020-06-04 22:08:36
168
原创 C++类中的默认成员函数
C++类中的默认成员函数1、默认构造函数2、默认拷贝构造函数3、默认析构函数4、默认重载赋值运算符函数5、默认重载取地址运算符函数6、默认重载取值运算符const函数7、默认移动函数(C++ 11)8、默认重载移动赋值操作符函数(C++ 11) 1 class A 2 { 3 public: 4 5 // 默认构造函数; 6 A(); 7 8 // 默认拷贝构造函数 9 A(const A&);10 11 // 默认析构函数12
2020-05-31 11:54:34
143
原创 C++类中的构造函数和赋值函数
构造函数主要包括:默认构造函数、带参构造函数、拷贝构造函数三种,且构造函数经常与赋值函数混淆,这里放在一起讲,便于区分。首先初始化一个简单的类作为例子讲解:class A {public: A() { v = 1; printf("默认构造\n"); } A(int t) { v = t; printf("有参构造\n"); } A(const A& a) { th
2020-05-30 17:20:17
12827
原创 C++中的宏定义详解
C++中的宏定义详解#define解析新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入#define解析 #define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序
2020-05-22 23:16:59
2029
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人