自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 问答 (2)
  • 收藏
  • 关注

原创 REDIS AOF日志

AOF日志如何实现?AOF(append only file)是写后日志,意思为Redis是先执行命令,把数据写入内存,然后才记录日志。AOF中记录的是Redis收到的每一条命令,这些命令是以文本的形式保存下来。“set testkey testvalue"命令后记录的日志为例,AOF内容为*3$3set$7testkey$9testvalue解释:其中*3表明有三部分,每部分由”$+数字"开头,后面紧跟具体的命令、键或值“$3 set"表明这部分有3个字节,也就是"set"命令

2020-12-02 21:52:17 618

原创 服务端向客户端发送图片并显示在QML中

服务端发送图片1.打开图片文件// 1. 打开图片文件 ifstream is(filepath, ifstream::in | ios::binary); if(!is.is_open()) { cout<<"open failed"<<endl; exit(0); }2.获取图片文件长度// 2. 计算图片长度 is.seekg(0, is.end); int length = is.te

2020-12-01 13:55:29 379

原创 数据库的三大范式

范式定义会使用主键和候选键(因为主键和候选键可以唯一标识元组)能唯一标识元组的属性集叫做超键(身份识别的集合)候选键:如果超键不包括多余的属性,那么这个超键就是候选键主键:用户可以从候选键中选择一个作为主键外键:如果数据表 R1 中的某属性集不是 R1 的主键,而是另一个数据表 R2 的主键,那么这个属性集就是数据表 R1 的外键主属性:包含在任一候选键中的属性称为主属性非主属性:与主属性相对,指的是不包含在任何一个候选键中的属性1NF(第一范式)1NF指的是数据

2020-12-01 13:54:09 207

原创 MYSQL主从同步和Redis主从库实现数据一致总结

MYSQL的主从同步提高数据库的数据高并发访问,可以对数据库进行主从架构的设置。(优化数据库索引和SQL语句、采用缓存策略、主从架构,进行读写分离)主从同步的好处提高数据库的吞吐量实现读写分离,通过主从复制的方式来同步数据,然后通过读写分离提高数据库并发处理能力。(客户端读取数据时,会从从库上进行读取,主库上进行数据更新时,会自动将数据复制到从库)数据备份。从库相当于主库的备份高可用性。数据的高可用性,当主数据库出现故障时,可以切换到从服务器上,保证服务的正常运行。主从同步的原理怎样![

2020-12-01 13:51:05 627

原创 Atomic使用自定义类型链接时报错

struct A{ float x; int y; long long z;};int main(){ atomic<A> a; cout<<a.is_lock_free()<<endl; return 0;}链接错误:解决办法:(添加一个链接库)

2020-10-17 16:03:10 346

原创 MYSQL锁机制

mysql中的锁读写锁读锁会阻塞写,但不会阻塞读(共享锁)写锁会阻塞读和写(排他锁)行页表锁(按照锁的粒度进行划分)对表中的记录加锁,叫做记录锁,又称行锁,行锁只锁定一行,偏写*行锁是基于索引的表锁会锁定整个表,偏读页锁在行锁和表锁之间InnoDB加锁对于UPDATE、DELETE和INSERT语句,InnoDB会自动给涉及及数据集加排他锁对于普通SELECT语句,InnoDB不会加任何锁事务可以通过以下语句显示给记录集加共享锁或排锁。//共享锁(S)SELECT *

2020-10-14 15:04:42 62

原创 数据库事务

概念事务就是保证一组数据库操作,要么全部成功,要么全部失败。在Mysql中,事务支持是在引擎层实现的(innodb)。事务的ACID特性原子性:事务所包含的一系列数据库操作要么全部执行,要么全部回滚一致性:事务必须使数据库从一个一致性状态变换到另一个一致性状态隔离性:多个事务并发执行时,不能先相互影响持久性:一个事务一旦被提交,那么对数据库中的数据的改变就是永久性的事务并发导致的问题脏读一个事务读取了另一个事务未提交的数据;事务A读取事务B更新的数据,然后事务B回滚,此时事务A读

2020-10-14 15:04:01 83

原创 C++智能指针

1.unique_ptr故名独一无二的,所有权只能一个指针拥有,没有拷贝构造函数使用get可以得到一个普通指针release()断开unique_ptr与底层指针的连接。返回底层指针,然后将智能指针设置为nullptr,智能指针失去所有权复制是可以使用右值语义auto ptr = make_unique<int>(10);unique<int> ptr(new int(10));p1 = std::move(p2);int *p2 = ptr.get();//得到

2020-09-06 16:47:31 115

原创 从源码到可执行文件的过程

从源码到可执行文件的过程g++ hello.cpp -o hello1.预处理g++ -E hello.cpp -o hello.i//生成.i文件//-o 指的是将结果输出并指定输出的文件名处理#define 宏定义处理所有的条件预编译指令,“#if #endif”处理“#include”指令删除所有的注释添加行号和文件标识2.编译gcc -S hello.cpp(.i) -o hello.s//生成.s文件(汇编文件)词法分析语法分析语义分析优化3.

2020-08-29 15:07:50 205

原创 C++中的抽象类和接口

面向对象中的抽象类不可以被实例化的类C++中通过纯虚函数实现抽象类(virtual void xxx()=0)派生类必须要override该虚函数,否则派生类也不可以被实例化面向对象中的接口类中没有定义任何成员变量所有的成员函数都是公有的所有的成员函数都是纯虚函数接口是一种特殊的抽象类...

2020-08-19 14:30:41 77

原创 数据库索引

概念:索引就像一本书的目录,帮助数据库管理系统高效获取数据的数据结构;若不适用索引,则需要从第一条记录开始扫描,直到把所有的数据查找完,才能找到自己想要的数据。但有些情况使用索引反而使得效率更低。什么情况下不要建立索引:(索引的价值是帮助你快速定位)要查找的数据里很多重复数据(想要定位的数据很多)数据量不到1000行索引的种类:功能逻辑上分:普通索引是基础的索引,没有任何约束,主要用于提高查询效率。唯一索引在普通索引的基础上增加了数据唯一性的约束,在一张数据表中可以有多个唯一索引。

2020-07-20 15:47:36 108

原创 LINUX下常用命令

基本文件操作命令lsls -a 列出所有文件,包括. …ls -A 不包括. …的所有文件ls -al 包含档案的属性等等数据ls -lrt 递归显示文件的详细信息并按照时间排序tailtail -f filename 会把filename文件里的最尾部的内容显示在屏幕上,并且不断刷新(常用于位于改变的日志文件)tail -c 显示字节数tail -n 显示文件尾部n行内容tail -c 10 gile.logtail -n 100 file.logchmod

2020-07-14 11:10:26 103

原创 epoll/select/poll笔记

1.epoll_create函数#include <sys/epoll.h>int epoll_creator(int size)创建一个指示epoll内核事件表的文件描述符,该描述符将用作其他epoll系统调用的第一个参数,size不起作用2.epoll_ctl函数#include <sys/epoll.h>int epoll_ctl(int epfd,int op,int fd,struct epoll_event* event)该函数用于操作内核事件表监控的文

2020-07-08 17:12:31 134

原创 Boost.Asio学习Proactor设计模式

- 原理图通俗理解:Proactor设计模式 事件处理好后,它通知我们他处理好了Reactor设计模式 感知事件后通知用户来处理Asynchronous Event Demultiplexer (异步事件分发器)阻塞等待事件在完成事件队列中发生,并将完成的事件返回给其调用者。Completion Handler (完成处理程序)处理异步操作的结果,这些是函数对象,通常使用boost::bind创建,也就是回调函数Proactor调用Asynchronous Event Demu

2020-06-17 23:04:04 372

原创 Boost.Asio了解io_context工作原理

Boost.Asio可用于对I / O对象(例如套接字)执行同步和异步操作。I/O模型io_context对象是asio框架中的调度器,所有异步io事件都是通过它来分发处理的(io对象的构造函数中都需要传入一个io_service对象)。在同步事件中会使用一个默认的asio::io_context io_context;asio::ip::tcp::socket socket(io_context)同步IO主要执行流程![在这里插入图片描述](https://img-blog.csdnimg.

2020-06-17 22:59:27 8744

原创 Boost.Asio初入了解

1.Boost Asio是一个跨平台、主要用于网络和其他一些底层输入/输出编程的C++库2.Boost asio中服务端的socket使用共享指针的方式,因为socket有移动构造函数,没有拷贝构造函数3.在普通的网络编程中,服务端存在两个文件描述符,一个是server,一个为当前端对端的client服务端:客户端:在Asio网络编程中,存在一个socket,即端对端的客户端的socket服务端:创建一个Io_Context实例 io_context指定向监听的端口endpoint

2020-06-17 22:58:07 246

原创 Unicode、ASCII、UTF-8的区别

1.ASCII一共规定了128个字符的编码(一个字节8个为,也就是一个字节可以呈现出256种不同的状态),这128个字符,只占用了一个字节的后七位,最前面的一位统一规定为0(所能表示的符号有限)2.GB2312简体中文的常见编码方式GB2312是基于区位码设计的,区位码把编码表分为94个区,每个区对应94个位,每个字符的区号和位号组合起来就是该汉字的区位码。区位码一般 用10进制数来表示,如1601就表示16区1位,对应的字符是“啊”。在区位码的区号和位号上分别加上0xA0就得到了GB2312编码。

2020-06-14 10:57:48 187

原创 QML写界面问题总结

1.页面之间的跳转var component = Qt.createComponent("Core.qml"); //想要跳转的界面component.createObject(loginPage);//当前界面的id名若跳转界面时,发现前一个界面的click事件仍然存在,则可以在新界面中使用//屏蔽父对象的鼠标事件 MouseArea{ anchors.fill: parent }2.返回前一界面,可以使用addui.destroy(); //当前界面的i

2020-05-30 13:43:20 321

原创 滑动窗口问题模板

滑动窗口算法框架:void slidingWindow(string s,string t){unordered_map<char,int> need,window;//need 题目中要求的字符串//window窗口滑动过程中拥有的字符串for(char c : t) need[c]++;int left = 0,right=0;int valid=0;//其中valid记录的是有几个相等的字符和目标字符串(t)while(right<s.size()) //终止条件

2020-05-23 20:25:51 228

原创 C++笔试复习(二)

1.类显式定义了参数或者默认构造函数,编译器就不会再自动创建默认构造函数。2.类=default 要求生成隐式默认构造函数 3.资源管理技术(RAII) 在同一作用域中,这些对象析构函数调用顺序与相应的构造函数调用顺序相反。分为三种 全局变量 静态变量 局部变量 4.复制和赋值 复制 a=b 赋值 A a =b 5.重点:构造函数 参数构造: 默认构造:(显式和隐式) 复制构造函数:A::A(const A &o)深复制需要分配新的空间 赋值构造

2020-05-22 17:59:21 89

原创 C++笔试知识点复习(一)

1.scanf和printf在C++中IDE中,使用scanf和printf的效率比cin/cout更高用法:scanf("%d",&x)不同:scanf("%3d",&x) : 设置输入宽度,只取三位整数printf("%3d",x) : 输出至少三位,超过三位有多少,输出多少2.外部变量和内部变量,外部函数和内部函数关键字:extern可以被其他文件所访问,但是外部函数访问是需要加上externextern int max(int,int);//调用外部函数时,则必须在

2020-05-22 10:05:56 240

原创 Linuxopencv下载和安装步骤以及QtCreator中使用步骤

第一步:文件下载官网下载地址选择Sources则会进行自动下载。第二步(安装命令):cd 文件夹mkdir buildcd buildcmake …sudo make //会将文件中的库安装到系统中sudo make install这时为了可以让Qt种可以使用,可用命令 查看当前opencv库所存在的位置1)find / -name “libopencv*”2)...

2020-04-26 15:24:59 389

原创 初入面试算法(十一)——排序

常见的排序可分为比较类排序,不能突破O(nlogn)的时间复杂度非比较类排序,可以以线性时间运行比较排序1.交换排序冒泡排序(O(n^2))嵌套循环,每次查看相邻的元素,如果逆序,则交换1.第一个for循环计数2.第二个for循环对比相邻值void Bubble(vector<int>& nums){ for(int i=0;i<nums...

2020-04-12 17:40:20 110

原创 Android 开发2048 无法显示gameView、Card

最近因为课程需要,开发了2048这款经典游戏,在开发过程中遇到了addCards无法成功的原因,后来在网上找了帖子,具体看链接如果按博主这样做的话,后面成绩计分时又会出现问题,后来查看资料弄清原理后,得到了解决方法。出错原因:1.onSizeChange这个方法是在构造函数执行之后才会执行的,而这个时候布局已经完成了,所以没有办法将卡片加入到布局当中去。解法:获得系统的长宽高:priva...

2020-04-12 09:16:46 1714 9

原创 面试初入算法(十)——AVL、红黑树概念

回顾二叉搜索树(BST)左子树的所有结点小于根结点,右子树的所有结点大于根结点(是所有结点)对二叉搜索树进行中序遍历,会得到一个递增序列二叉搜索树的时间复杂度为n(log2n),当插入全部位于以便时,就退化成了链表的形式,从而转变为了一维维度,时间复杂度也变为了链表的时间复杂度。因此为了保证二维维度,引入了平衡二叉树。常见的平衡二叉树:B+ Tree :常用于数据库的索引AVL...

2020-04-11 11:36:38 151

原创 LeetCode-打家劫舍I、II、III

1.打家劫舍你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例 1:输入: [1,2,3,1]输出: 4解释: 偷窃 1 号房屋 (金额 = 1) ,...

2020-04-09 22:54:30 97

原创 STL容器的初始化操作总结

STL容器分为三部分顺序容器关联容器容器适配器顺序容器vector(常见的顺序容器)(1)default 默认构造函数vector();explicit vector (const allocator_type& alloc);//该函数为vector()的一个编译器解释(2)fillexplicit vector (size_type n, const all...

2020-04-07 14:52:07 724

原创 面试初入算法(九)——动态规划

动态规划(Dynamic Programming)将一个复杂的问题拆分为重复的子问题,确保每一个问题都是最优解,从而得出全局最优解,用递归的方式,常用的动态规划会要求求最大值,最少的方法等。分治、递归、动态规划、贪心算法区别(看博客)https://blog.csdn.net/qq_41172631/article/details/105346668动态规划的关键点:最优子结构存储中...

2020-04-06 17:59:32 220

原创 分治、递归、动态规划、贪心算法区别

分治、递归、动态规划三者之间没有根本区别,关键看有无最优的子结构。共性:找到重复子问题差异性:动态规划寻找最优子结构,中间可以淘汰次优解动态规划、贪心算法动态规划是寻找局部,全局最优解贪心算法是找局部最优解,不一定得到全局最优解回顾下递归四步骤:terminatorprocessdrill dowmrestore current status分治五步骤:1.终止条件...

2020-04-06 17:06:56 252

原创 面试初入算法(八)——二分查找算法

概念:二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。时间复杂度为O(logn)二分查找的前提:目标函数单调性(单调递增、单调递减)存在上下界(不是无限的)有索引二分查找过程:1.首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找...

2020-04-05 14:52:47 222

原创 面试初入算法(七)——贪心算法

贪心算法:指的是每一步都会选择最优解,但是合在一起不一样会产正最优解贪心算法、回溯、动态规划的区别:贪心:当下做局部最优判断,不能回退回溯:可以回退,寻找解,不一定为最优解动态规划:全局最优判断+回退现在在题目中去体会什么是贪心算法:1.在柠檬水摊上,每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。每位顾客只买一杯柠檬水,然...

2020-04-04 14:10:38 194

原创 面试初入算法(六)--分治、回溯算法

分治、回溯和递归类似,是一种特殊的递归,本质上就是找重复性分治:会将一个问题划分为许多的子问题,找其重复性(以下图片来自于极客大学)算法步骤模板:1.terminator2.process3.drill down4.reverse state5.merge final result回溯:递归的一种(八皇问题)回溯是深度优先遍历的一种(dfs),回溯和DFS的主要区别是,回溯法在求...

2020-04-02 21:41:43 217

原创 栈——表达式求值

核心算法思想:1.运用两个栈,一个存运算符,一个存数值2.以’#‘做为标志位,开头或者结尾3.检查当前字符,若当前字符为数值,则加入数值栈,若为运算符,则检验当前运算符的优先级,1)若当前运算符优先级大于栈顶优先级,则把该运算符压入栈2)若当前运算符优先级等于栈顶优先级(括号的情况),则弹出当前栈顶运算符3)若当前预算符的优先级小于栈顶优先级,则弹出当前运算符栈顶元素,以及数据栈的两个...

2020-03-31 16:21:54 182

原创 面试题初入算法(五)-栈和队列

栈是一个LIFO(先进后出)的数据结构栈存储结构示意图特点:先进后出插入和删除时间复杂度均为O(1)查找时间复杂度为O(n)C++中的STL中含有该类模板,主要功能和数据结构中所实现的栈一样push:向其中插入一个值,插入时会进行是否溢出检查,均为底层代码所为pop:弹出栈顶元素top:得到栈顶元素...

2020-03-30 17:43:48 226

原创 初入算法(四) -BFS(广度遍历) DFS(深度遍历)

搜索或者遍历主要涉及以下三点内容每个节点都要访问一次每个节点仅仅访问一次对于节点的访问顺序不同可以分为广度优先遍历深度优先遍历(Depth-First-Search) 深度优先遍历(DFS)![深度遍历执行顺序](https://img-blog.csdnimg.cn/20200328221856510.jpg?x-oss-process=image/water...

2020-03-28 22:42:03 128

原创 初入算法(三)-树

链表是一种一维结构,二树是一种二维结构,试想下若链表中的next有多个指向时,就好像一颗树一样,同理,当树中指向形成了一个环,就像图链表是一种特殊化的树树是特殊化的图树的分类无序树:树中任意节点的子结点之间没有顺序关系,这种树称为无序树,也称为自由树;有序树:树中任意节点的子结点之间有顺序关系,这种树称为有序树;二叉树:每个节点最多含有两个子树的树称为二叉树;完全二叉树:对于深度...

2020-03-27 22:33:43 115

原创 初入算法(二)-递归

首先谈论下什么是时间复杂度,以及常见的时间复杂度类型时间复杂度:指执行算法所需要的计算工作量;空间复杂度:指执行这个算法所需要的内存空间;常见的类型有七种O(1): 常数复杂度int n=0;cout<<n<<endl;O(log n): 对数复杂度for(int i=0;i<n;i*=2) cout<<i<<endl;...

2020-03-26 16:25:35 116

原创 初入算法(一)

今天是我进入算法学习的第一天,我将以算法题驱动的形式来学习,方便以后复习题目一(*)解法一(用sort算法,来将字符进行排序,若排序后字符串相等则为字母异位词)bool isAnagram(string s,string t){ if(s.length() != t.length()) return false; sort(s.begin(),s.end());...

2020-03-25 22:44:06 106

原创 ASIO(io_context和多thread)--接上一篇

线程池,第二个实例**多线程 Echo Server**使用的线程池,和上一节一样的AsioIoContextPool,这里我就直接贴实例代码,有不懂的欢迎留言server.h#ifndef SERVER_H#define SERVER_H#include <iostream>#include "ioContextPool.h"using namespace b...

2020-03-17 22:35:58 1260

转载 asio模型(io_context 和 thread的使用)

asio模型(io_context 和 thread的使用)本文借鉴网址Boost.asio有两种支持多线程的方式:多个io_context对应多线程(每个线程都有一个io_context,均调用各自的run方法一个io_context对应多线程(所有线程共用一个io_context,每个线程都调用全局的io_context.run 方法 每个线程一个 I/O Service让我...

2020-03-17 21:57:37 5947

空空如也

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

TA关注的人

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