自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(97)
  • 收藏
  • 关注

原创 常用的算法思路

常用的算法思路1、O(1)时间内求区间和——前缀和算法2、O(1)时间内将区间相加同一个数——差分后再求前缀和3、双指针算法的使用条件是前一个指针随着后一个指针的变化而 单调变化,具有单调性4、求解一边满足某条性质一边不满足某条性质——二分查找5、 求自己最近的比第一个自己大或者小的数——单调栈6、滑动窗口的最大值、最小值——单调队列7、求权值为1的最短路问题——宽度优先搜索8、暴力搜索——深度优先搜索 + 剪肢9、合并集合以及查找在哪个集合——并查集10、 O(logn) 时间内求数

2021-01-21 01:01:22 367

原创 DFS-岛屿类问题解决思路

DFS-岛屿类问题解决思路常见的背包问题有1、岛屿个数与问题200. 岛屿数量2、岛屿面积问题695. 岛屿的最大面积3、包围问题130. 被围绕的区域1254. 统计封闭岛屿的数目核心模板–漫水填充算法/* 满水填充算法 */ int dx[4] = {0 , 0, 1, -1}; int dy[4] = {1 , -1, 0, 0}; int n; int m; int count; void dfs(vector<vector&

2020-12-03 23:59:22 255

原创 背包问题解题思路

背包问题解题思路常见的背包问题有1、组合问题377. 组合总和 Ⅳ494. 目标和518. 零钱兑换 II公式: dp[i]+=dp[i−num]dp[i] += dp[i-num]dp[i]+=dp[i−num]2、True、False问题139. 单词拆分416. 分割等和子集公式: dp[i]=dp[i]ordp[i−num]dp[i] = dp[i] or dp[i-num]dp[i]=dp[i]ordp[i−num]3、最大最小问题474. 一和零322. 零钱兑换公式

2020-12-01 23:09:28 492

原创 MFC相关知识收集(更新中)

1、MFC中五个初始类的作用

2019-10-08 00:35:11 186

原创 Linux下VSCodeC++程序相应的配置说明

VScode C++程序配置文档首先给一下大佬的链接:https://www.jianshu.com/p/2700f2b93b14然后记录一下自己的配置文档注释的那个每次使用要修改,而下面的那个无需修改tasks.json// {// "version": "2.0.0",// "tasks": [// {// "lab...

2019-08-11 12:30:30 347 1

转载 ubuntu16.04 mysql的安装

请参考:https://blog.csdn.net/itxiaolong3/article/details/77905923

2019-07-15 23:14:24 125

原创 Windows系统下配置VsCode C/C++环境

Windows系统下配置VsCode C/C++环境配置完成之后最好重启电脑,或者重启软件,都试一下,非常有用1、lanch.son文件{ "version": "0.2.0", "configurations": [ { "name": "(gdb) Launch", // 配置名称,将会在启动配置的下拉菜单中显示 ...

2019-07-14 03:25:10 233

原创 Git基本配置

Git基本配置1. 系统需要安装Git​ 注意不同系统下安装是不同的,但后面的配置是相同的2. 配置个人身份$ git config --global user.name "name"$ git config --global user.email "[email protected]. 文本换行符配置由于linux系统跟windows系统下换行符是不同的Windows系统下 git...

2019-07-13 20:09:02 314

原创 NetServer开发文档(一)

NetServer开发笔记(一)一、 锁的设计1. MutexLock的设计是对pthread_mutex的封装,包含的头文件是pthread.h数据成员:pthread_mutex_t mutex函数成员:+MutexLock()+~MutexLock()+lock()+unlock()+get()2. MutexLockGuard的设计以RALL的方式对Mut...

2019-06-30 21:44:14 432 4

原创 基础算法模板——数学知识

基础算法模板——数学知识更新中。。。1. 质数试除数法判定一个数是不是质数bool is_prime(int x){ if (x < 2) return false; for (int i = 2; i <= x / i; i ++ ) if (x % i == 0) return false; return t...

2019-06-25 20:24:55 179 1

原创 Redis设计与实现——数据结构与对象(三)

Redis设计与实现——数据结构与对象(二)3、 字典字典的实现方法最简单的就是使用链表或数组,但是这种方式只适用于元素个数不多的情况下;要兼顾高效和简单性,可以使用哈希表;如果追求更为稳定的性能特征,并希望高效地实现排序操作的话,则可使用更为复杂的平衡树;redis中的实现犯法,选择了第二种/* * 字典 * * 每个字典使用两个哈希表,用于实现渐进式 rehas...

2019-06-15 09:45:04 159

原创 Redis设计与实现——数据结构与对象(二)

Redis设计与实现——数据结构与对象(二)2、 链表定义typedef struct list { // 表头指针 listNode *head; // 表尾指针 listNode *tail; // 节点数量 unsigned long len; // 复制函数 void *(*dup)(void *ptr);...

2019-06-15 09:44:31 140

原创 Redis设计与实现——数据结构与对象(一)

Redis设计与实现——数据结构与对象(一)1、 简单的动态字符串sds用途实现字符串对象在Redis程序内部用作char* 类型的替代品(why?)char*类型的功能单一,抽象的层次太低,并且不能高效地支持Redis常用的操作(比如追加操作和长度计算操作)sds的定义typedef char *sds;struct sdshdr { // bu...

2019-06-15 09:42:10 165

原创 算法基础模板——DFS与BFS算法

算法基础模板——DFS与BFS算法1. DFS与BFS算法的比较​ 这两种算法一般都是解决树与图的遍历,主要的区别如下算法数据结构空间复杂度有无固定模板解决哪一类问题DFSstackO(h)无枚举所有的可能,一般有回溯与剪枝BFSqueueO(2^h)有有最短概念,最少的次数2.DFS​ DFS内有固定的模板,主要是思路,比较常见的问题...

2019-06-12 20:40:03 509

原创 关于IO多路复用函数(select、poll、epoll)的一些理解

关于IO多路复用函数(select、poll、epoll)的一些理解一、阻塞现象什么是阻塞现象?​ 当一个数据流中再也没有数据,read的时候,或者,我们的流中写满了数据在去write的时候,即无数据可读和无空间可写的尴尬现象,称为阻塞现象阻塞等待,非阻塞忙轮询比如这个例子,送快递与收快递的例子阻塞等待相当于快递员在送快递的过程中,客户可以空出大脑睡大觉(不占用CPU的宝贵时...

2019-06-10 09:05:48 362

转载 Reactor模式

本文截取自:https://blog.csdn.net/plgy_Y/article/details/80472694无论是C++还是Java编写的网络框架,大多数都是基于Reactor模式进行设计和开发,Reactor模式基于事件驱动,特别适合处理海量的I/O事件。1.2.1. 单线程模型Reactor单线程模型,指的是所有的IO操作都在同一个NIO线程上面完成,NIO线程的职责如下:1...

2019-06-09 21:51:34 188 1

原创 算法基础模板——位运算、双指针算法、离散化、区间合并

算法基础模板——位运算、双指针算法、离散化、区间合并1. 位运算求n的第k位数字:n>>k&1;返回n的最后一位1:lowbit(n) = n&-n;2. 双指针算法for (int i = 0, j = 0; i < n; i ++ ){while (j < i && check(i, j)) j ++ ;​ // 具体...

2019-06-08 13:32:02 305 1

原创 基础算法模板——高精度运算

基础算法模板——高精度运算1. 高精度加法vector<int> add(vector<int> &A, vector<int> &B){ if (A.size() < B.size()) return add(B, A); vector<int> C; int t = 0; for (i...

2019-06-08 13:29:25 357

原创 基础算法模板——前缀和与差分

基础算法模板——前缀和与差分1. 前缀和#include <iostream>using namespace std;const int N = 100010;int n, m;int a[N], s[N];int main(){ scanf("%d%d", &n, &m); for (int i = 1; i <= n; ...

2019-06-08 13:29:03 1298 2

原创 基础算法模板——排序

基础算法模板——排序1. 快速排序void quick_sort(int q[], int l, int r){ if(l >= r) return ; int i = l - 1, j = r + 1, x = q[l + r >> 1]; while(i < j){ do i++; while(q[i] &lt...

2019-06-08 13:28:35 159

转载 Ubuntu16.04 装机必备软件

Ubuntu16.04 装机必备软件:https://blog.csdn.net/u010579901/article/details/78813948

2019-06-08 02:56:01 1322

转载 Ubuntu下Gradle的安装配置

Ubuntu下Gradle的安装配置本文出自:https://blog.csdn.net/yuzhuzhong/article/details/60954901 先决条件:已安装Java JDK orJRE且版本为7或者以上,可通过命令$:java -version查看JDK版本。...

2019-06-08 02:18:04 407

转载 Ubuntu16.04nodejs离线安装

nodejs离线安装

2019-06-08 02:09:56 628

原创 C++后台开发相关问题

C++后台开发相关问题1、请你说一下rector模式的组成reactor模型要求主线程只负责监听文件描述上是否有事件发生,有的话就立即将该事件通知工作线程,除此之外,主线程不做任何其他实质性的工作,读写数据、接受新的连接以及处理客户请求均在工作线程中完成。其模型组成如下:1)Handle:即操作系统中的句柄,是对资源在操作系统层面上的一种抽象,它可以是打开的文件、一个连接(Socket)、...

2019-06-06 15:29:05 266

原创 C++11 特性

C++11 特性1、请问C++11有哪些新特性?C++11 最常用的新特性如下:auto关键字:编译器可以根据初始值自动推导出类型。但是不能用于函数传参以及数组类型的推导nullptr关键字:nullptr是一种特殊类型的字面值,它可以被转换成任意其它的指针类型;而NULL一般被宏定义为0,在遇到重载时可能会出现问题。智能指针:C++11新增了std::shared_ptr、std::w...

2019-06-06 15:28:41 151

原创 C++ 基础——容器和算法

C++ 容器和算法1、 map和set有什么区别,怎么是写的都是关联容器,底层实现都是红黑树区别在于map键值对应,关键值其索引作用,值则表示与索引相关联的数据;Set与之相对就是关键字的简单集合,set中每个元素只包含一个关键字。set的迭代器是const不允许修改元素的值,map允许修改valuemap支持下标操作,set不支持下标操作2、介绍一下STL的allocat...

2019-06-06 15:28:17 295

原创 C++面向对象与泛型编程

C++面向对象与泛型编程1、 什么是右值引用,跟左值有什么区别右值引用是C++11引入的新特性,实现了移动语义和进准传递消除两个对象交换时不必要的对象拷贝,节省运算存储资源,提高效率能够简介明确的定义泛型函数左值右值的区别能对表达式取地址、或具名对象/变量。一般指表达式结束后依然存在的持久对象。不能对表达式取地址,或匿名对象。一般指表达式结束就不再存在的临时对象。左值...

2019-06-06 15:27:43 660

原创 C++基础语言篇(二)

C++基础语言篇(二)1、 请你回答一下为什么析构函数必须是虚函数?为什么C++默认的析构函数不是虚函数 考点:虚函数 析构函数将可能会被继承的父类的析函数设置为虚函数,可以保证当我们new一个子类对象,然后使用基类指针指向该对象,释放基类指针时可以释放掉子类的空间可以防止内存泄漏C++默认的析构函数不是虚函数是因为虚函数需要虚函数表和虚表指针,占用额外的内存,而对于不被继承的类会造成浪费...

2019-06-06 15:27:22 157

原创 C++基础语言篇(一)

C++基础语言篇(一)1. 说一下static关键字的作用全局静态变量全局变量就定义成全局静态变量在静态存储区域,整个程序运行期间一直存在会被自动初始化为0作用域:在声明它的文件之外的是不可见的,从定义之处一直到文件结尾局部静态变量局部静态变量在静态存储区自动初始化为0作用域仍为局部作用域,当局部静态变量离开作用域时,并没销毁,仍然在内存当中,只不过不能对其进行访问,...

2019-06-06 15:26:58 156

转载 ubuntu16.04搭建jdk1.8运行环境

本文出自:https://blog.csdn.net/smile_from_2015/article/details/80056297 搭建环境:Ubuntu 16.04 ×64JDK :jdk-8u171-linux-x64.tar.gz首先下载linux对应的安装包下载地址:http://www.oracle.com/technetwork/java/jav...

2019-05-30 19:30:09 141

原创 muduo网络库源码剖析系列

1.muduo源码剖析专栏注: 此系列来自于专栏:https://blog.csdn.net/FreeeLinux/column/info/13805muduo库的Socket封装muduo库的Acceptor类剖析muduo库的TcpServer和TcpConnection用法muduo应用层缓冲区设计muduo库TcpConnection对send、shutdown、SIGPIP...

2019-05-29 15:27:16 758

转载 博客整理

高并发系统之限流特技动态链接库中函数的地址确定---PLT和GOTLinux 中的各种栈:进程栈 线程栈 内核栈 中断栈Redis和Memcached的区别epoll内核源码详解+自己总结的流程后台开发面试问题整理Linux内核:poll机制linux任务调度机制Linux内核:poll机制解读Raft(一 算法基础) - 杭州.Mark - 博客园Linux文件系统详解 -...

2019-05-29 09:46:53 205

原创 STL中的bind 与boost中的bind

STL中的bind 与boost中的bindC++11 中的std::function和std::bindboost::bind 函数绑定器

2019-05-27 15:55:01 812

原创 Linux 多线程服务端编程读书笔记(八)

Linux 多线程服务端编程读书笔记(八)第八章 muduo 网络库设计与实现​ 这一章从0开始实现一个类似muduo的基于Reactor模式的C++网络库1、 Evenloop类one loop per thread 顾名思义每个线程都只能有一个Evenloop对象。故构造之前要检查当前线程是否已经创建其构造函数会记住本对象所属的线程,创建了Evenloop对象的线程时IO线程,主要...

2019-05-26 19:53:05 222

原创 Linux 多线程服务端编程读书笔记(七)

Linux 多线程服务端编程读书笔记(七)第七章 muduo编程示例1、UNP 中五个简单的示例discard:丢弃所有收到的数据,简单的长连接TCP应用层协议void DiscardServer::onMessage(const TcpConnectionPtr& conn, Buffer* buf, ...

2019-05-25 22:13:12 254

原创 Linux 多线程服务端编程读书笔记(六)

Linux多线程服务端编程笔记(六)从这一章开始开始探究muduo网络库部分第六章 muduo网络库简介1、 muduo网络库的一些介绍muduo 是基于 Reactor 模式的网络库,其核心是个事件循环 EventLoop,用于响应计时器和 IO 事件。muduo 采用基于对象(object- based)而非面向对象( objectoriented)的设计风格,其事件回调接口多以 ...

2019-05-25 15:51:34 328

原创 Linux 多线程服务端编程读书笔记 (五)

Linux 多线程服务端编程笔记(五)第五章 高效的多线程日志1、 两种日志交易日志诊断日志2、 关键进程记录的日志日志通常需要记录:收到的每条内部消息的 ID、关键字段、长度、hash 值等。收到的每条外部消息的全文。发送消息的全文,每条消息都有全局唯一的id关键内部状态的变更另外:每条日志都有时间戳一个日志库大致分为:前端 - 生成日志;后端 - 把日志写到...

2019-05-25 15:50:57 430 1

原创 Linux 多线程服务端编程读书笔记(四)

Linux多线程服务端编程笔记(四)第四章 C++多线程系统编程精要1、多线程编程最大的思维方式的转变有两点当前线程可能随时会被切换出去,被抢占多线程程序中事件的发生顺序不再是全局统一的先后关系2、 多线程程序的正确性不能依赖任何一个线程的执行速度不能通过原地等待(sleep)来假定其他线程事件已经发生,必须通过适当的同步来让当前事件能够看到其他线程执行的结果无论线程执行的快...

2019-05-25 15:50:24 242

原创 Linux 多线程服务端编程读书笔记(三)

Linux 多线程服务端编程笔记(三)第三章 多线程服务器的适用场合与常用编程模型1、进程与线程每个进程都有自己独立的地址空间线程的特点是共享地址空间,从而有效的共享数据。多个进程能有效的共用代码段(操作系统可以映射为同样的代码段),但不能共享数据多线程的价值是为了更好的发挥多核处理器效能2、单线程服务器的常用编程模型用模型: non-blocking IO + IO mult...

2019-05-25 15:49:38 334

原创 linux 多线程服务端编程读书笔记(二)

linux 多线程服务端编程读书笔记(二)第二章 线程同步精要1、线程同步思想原则尽量最低限度地共享对象,减少需要同步的场合。如果确实需要,优先考虑共享 immutable 对象。使用高级的并发编程构建不得已必须使用底层同步原语(primitives)时,只用非递归的互斥器和条件变量,慎用读写锁,不要用信号量。除了使用 atomic 整数之外,不自己编写 lock-free 代码,也...

2019-05-24 19:14:49 331 1

空空如也

空空如也

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

TA关注的人

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