自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(205)
  • 资源 (3)
  • 收藏
  • 关注

原创 【Go系列】

Go1、GoGC整理

2020-02-24 20:27:36 356

原创 【C++】造各类轮子(框架)

造轮子开始了〜 各类框架、各类常见的功能等等。1、AOP框架

2018-08-18 10:11:23 2572

原创 Redis数据结构原理解析:字符串篇

Redis对象通用对象由于所有的redis对象都包含此结构以便redis管理对象的内存、创建、销毁等等,所以这里需要先介绍此对象结构。// 所有redis结构都有这个头:server.h#define LRU_BITS 24typedef struct redisObject { unsigned type:4; unsigned encoding:4; unsigned lru:LRU_BITS; /* LRU time (relative to global lru_cl

2020-06-27 21:00:30 454

原创 Redis原理扫盲(长篇)

文章目录简介数据结构Redis对象通用对象字符串string常用操作数据结构存储方式为什么是44字节扩容列表list常用操作快速列表quicklist数据结构存储方式特点整数集合intset字典常用操作使用场景数据结构扩容关于扩容的问题高位进位法扩容字典遍历hash攻击集合set常用操作跳表skiplist常用操作使用场景数据结构跳表的构建特点压缩列表ziplist数据结构级联更新问题紧凑列表listpack数据结构解决级联更新问题为什么listpack比ziplist更好取代ziplist基数树压缩存储应

2020-06-21 18:44:20 631

原创 GoGC整理

引用自《Go GC 20 问》https://mp.weixin.qq.com/s/o2oMMh0PF5ZSoYD0XOBY2Q含义GarbageCollection 垃圾回收,一种自动内存管理机制根集合,在GC时最先检查,包括:全局变量执行栈寄存器常见的GC方式追踪式标记清理:从根对象触发,标记清扫可回收的对象标记整理:为了解决内存碎片,将对象尽可能整理到一块连续内存增...

2020-02-24 20:26:10 928

原创 Go实现滑动窗口限频

文章目录@[toc]各类限频原理实现方法实现代码压测试压测试输出压测试客户端输出各类限频原理网上有很多讲解限频原理以及限频原因的,限频常用在接口、服务的流量、并发上,主要是为了合理使用后端资源,防止后端被压垮,雪崩等等。实现方法这里使用使用go的ring(环形队列)实现滑动窗口实现代码package mainimport ( "fmt" "net" "os"...

2019-10-06 10:17:20 889

原创 LeetCode刷题记录4-寻找两个有序数组的中位数

题目给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。你可以假设 nums1 和 nums2 不会同时为空。示例 1:nums1 = [1, 3]nums2 = [2]则中位数是 2.0示例 2:nums1 = [1, 2]nums2 = [3, 4]则中位数是 (2...

2019-04-26 15:39:29 310

原创 LeetCode刷题记录3-无重复字符的最长子串

题目给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。示例 1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wk...

2019-04-26 15:15:16 873

原创 LeetCode刷题记录2-两数相加

题目给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原...

2019-04-26 14:14:47 223

原创 【深入理解C++11】第八章 融入实际应用

深入理C++118.1 对齐支持8.1 对齐支持 对齐的数据在读写上有性能优势,比如频繁使用的数据如果与处理器的高速缓存大小对齐,有可能提高缓存性能。数据不对齐,可能会导致一些应用的崩溃,例如某些平台,硬件无法读取不按字节对齐的的数据,可能会抛出异常。 C++11标准为了支持对齐,主要引入了:操作符alignof、对齐描述符alignas。...

2019-04-24 22:16:20 222

原创 【深入理解C++11】第七章 为改变思考方式而改变

深入理C++117.1 指针空值 nullptr7.1 指针空值 nullptr 在C++中一般一个指针声明都是char* p = NULL;表示一个指针处于初始化状态,NULL一般是一个宏定义,定义如下:#ifndef NULL #ifdef __cplusplus #define NULL 0 #else #define NULL ((vo...

2019-04-22 22:31:08 170

原创 【深入理解C++11】第六章 提高性能及操作硬件能力

现在各类语言百花齐放,大多都有很高的开发效率、或者专用场合使用,但是性能方面C++程序通常会有不可比拟的优势。C++11中我们可以进一步发掘程序运行性能。深入理C++116.1 常量表达式6.1.1 常量表达式函数6.1.2 常量表达式值6.1.3 常量自定义类型6.1.4 常量表达式其他应用6.2 变长模板6.2.1 变长函数和变长模板参数6.2.2 变长模板:模板参数包和函数参数包6.2....

2019-02-02 17:52:40 322

原创 【深入理解C++11】第五章 提高类型安全

深入理C++115.1强类型枚举5.1强类型枚举普通枚举在全局区域存在相同的名字则会编译异常例如:enum Type{General, Light, Medium};enum Category{General, Light, Medium};C++11引入强类型枚举,即“枚举类”。enum class Type{General, Light, Medium};他有以下几点优势:...

2018-12-24 22:27:36 201

原创 【深入理解C++11】第四章 新手易学,老兵易用

深入理C++114.2 auto类型推导4.3 decltype4.3.1 typeid与decltype4.3.2 decltype的应用4.3.3 decltype推导四规则4.3.4 cv限制符的继承与冗余的符号4.4 追踪返回类型4.4.1 追踪返回类型的引入4.4.2 使用追踪返回类型的函数4.5 基于范围的for循环4.2 auto类型推导auto在C++11中有了新的定义,例如a...

2018-12-24 22:26:48 252

原创 【深入理解C++11】第三章 通用为本,专用为末

通用为本,专用为末3.1 继承构造函数3.1.1 使用using声明3.1.2注意继承构造函数使用过多造成的冲突问题3.2 委派构造函数3.3 右值引用:移动语义和完美转发3.3.1 指针成员与拷贝构造3.3.2 移动语义3.3.3 左值、右值与右值引用3.3.4 强制转化为右值3.3.5 移动语义的一些其他问题3.3.6 完美转发3.5 列表初始化3.5.1 初始化列表3.5.2 防止类型收窄3...

2018-12-24 22:25:12 338

原创 【深入理解C++11】

深入理C++11第一章第二章第三章继承构造函数使用using声明注意继承构造函数使用过多造成的冲突问题第一章第二章第三章继承构造函数派生类可以自动获得从基类的成员变量和接口,如果派生类需要使用基类的构造函数,通常需要在构造函数显示声明:struct A { A(int) {} };struct B { B(int i) : A(i) {} };如果构造函数非常多,我们就需要把每个...

2018-10-24 22:53:32 442

原创 【算法】选择排序

选择排序概述从1-N,循环遍历,每次从剩下的序列中选择最大或者最小的元素放到剩下序列的前一个。n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果:初始状态:无序区为R[1…n],有序区为空。第1趟排序在无序区R[1…n]中选出关键字最小的记录R[k],将它与无序区的第1个记录R[1]交换,使R[1…1]和R[2…n]分别变为记录个数增加1个的新有序区和记录个数减少1个的...

2018-10-06 12:31:26 215

原创 【算法】反转队列前K个元素

反转队列前K个元素想到队列的反转那肯定首先想到的就是堆栈(同理堆栈反转也可以利用队列)有一个办法我们可以将K个元素入栈,然后可以另一个队列将剩下的元素放入,随后我们首先将栈元素回归原来的队列,最后将临时队列也入队。//使用一个辅助的队列和堆栈实现//前k个放入堆栈,后面的放入队列//取出时堆栈先入后出,达到反转目的void reversalQueue(queue<int>&...

2018-09-28 21:49:02 2851

原创 【算法】使用队列实现栈

使用队列实现栈前一篇使用栈实现队列文章用2个栈实现了一个队列,其实实现栈也是同理(修改一点点代码即可实现)。struct Stack{ Stack() {} Stack(std::initializer_list<int> list) : first(list) {}; void push(int value) { first.p...

2018-09-27 16:35:06 216

原创 【算法】使用栈实现队列

使用栈实现队列栈中的元素采用LIFO (Last In First Out),即后进先出。队列(Queue)与栈类似,都是采用线性结构存储数据。它们的区别在于,栈采用LIFO方式,而队列采用先进先出,即FIFO(First in First Out)。所以2个栈交换数据可以达到队列的效果。具体实现如下:struct Queue{ Queue() {} Queue(std...

2018-09-27 16:26:46 241

原创 【算法】使用栈检查表达式的括号匹配

使用栈检查表达式的括号匹配给定一个表达式字符串exp,编写一个程序来检查对和“{”,“}”,“(”,“)”,“[”,“]”的顺序是否在exp中是正确的。 例如,程序应该为exp =“[()] {} {[()()]()}”打印为true,对于exp =“[(])”则为false。算法步骤其实这种字符串有一个特点,就是如果当前字符串是“右边”的括号类型,那么它的前一个必定是与之匹配的括号。声...

2018-09-27 15:14:54 3739 2

原创 【项目调优小结】状态机优化业务交互

ing

2018-09-25 22:57:47 211

原创 【算法】使用栈为栈的元素排序

使用栈为栈的元素排序栈中的元素采用LIFO (Last In First Out),即后进先出。基本思路就是:从源栈中取出一个元素在临时栈中找到元素的位置,该位置到栈顶不合适的元素(大于或者小于,或者其他pred类型)将其全部“扔”回源栈循环1和2即可得到新的临时栈,其中元素就是排好的元素实现代码如下:stack<int> srcStack;stack<in...

2018-09-25 22:52:07 2552

原创 【算法】使用栈计算简单的后缀表达式

###计算后缀表达式计算简单的后缀表达式,形如:“231*+9-”主要还是利用了栈的特性,先入后出。计算的简略步骤如下:第一个元素是2,将其入栈。此时栈元素为2遇到3,将其入栈。此时栈元素为23遇到1,将其入栈。此时栈元素为231遇到操作,弹出2个数字进行乘法操作(先出1,后出3,计算方式为31),将结果3入栈。此时栈元素为23遇到+操作,弹出2个数字进行乘法操作(先出3,后出2,...

2018-09-20 22:56:24 1731

原创 【算法】重新排序数组中正数和负数

排序正数和负数这里有很多可行的解决方法,我们可以将正数和负数分离,然后将正数和负数依次交换。void rearrange(std::vector<int>& arrs){ //负数在前 正数在后 int j = -1; for (int i = 0; i < arrs.size(); ++i) { if (arrs[i] &l

2018-09-20 21:37:55 6366

原创 【C++11】对象消息总线(2)

本系列文档从属于:C++11应用实践系列部分Demo和结论引用自<深入应用C++11代码优化与工程>这本书消息总线消息总线设计思想前一节已经介绍了,如何承载消息,本节将会实现,消息保存和分发。消息保存:由于消息类型有不同的返回值以及入参,这里可以使用之前介绍的Any作为消息载体消息分发:这个就比较容易了,取出合适的函数对象(消息)直接调用即可。消息总线设计思想消息...

2018-09-18 22:40:55 1913 2

转载 【RPC-Python】分布式 RPC 知识基础

分布式 RPC 知识基础分布式 RPC 知识基础杀死子进程信号处理函数错误码特殊信号收割子进程信号连续打断kazoo分布式 RPC 知识基础本节要学习一下 ZooKeeper 的进程管理、信号处理和服务发现的 Python 客户端基本使用。杀死子进程killparentchildPython 提供了 os.kill 函数,它可以向指定进程发送信号。比如你要强制杀死某个进程,可以向它发送...

2018-09-17 22:24:09 1428

原创 【算法】合并两个排序的数组

合并两个排序的数组对于集合合并这类操作,其实不同的数据量,为了速度或者更小的空间有很多种做法,甚至可使用多线程并发处理都可以(下一节会实现该方式)。下面的例子基于单线程,且数据量较小的实现。拉链法对应合并集合我们可以选择首先将集合1拷贝到集合3中,然后使用插入的方式将集合2插入到集合3中。 此方法的时间复杂度较高,有一种更优的方式实现该算法,那就是拉链法。 以下则是算法实现以及...

2018-09-16 21:07:29 2925

原创 【C++11】对象消息总线(1)

本系列文档从属于:C++11应用实践系列 部分Demo和结论引用自<深入应用C++11代码优化与工程>这本书什么是消息总线?对象的关系之间一般有:依赖、关联、聚合、组合和继承,他们的耦合程度也是依次加强!未完待续。。先整理文章...

2018-09-11 22:56:51 3830

原创 【算法】查找第一个没有重复的数组元素

第一个没有重复的数组元素很直接使用两重循环,内部循环检查是否存在多次。 for (int i = 0; i < arrays.size(); ++i) { int j = 0; for (; j < arrays.size(); ++j) { if (i != j && a...

2018-09-10 22:39:03 3483

原创 【算法】查找数组中第二小的元素

第二小的元素这里有很多方法可以实现:一个简单的解决方案是按递增顺序对数组进行排序,堆排、快排、归并排序等等都可以达到目的。排序数组中的前两个元素是两个最小的元素。这个解的时间复杂度是O(nlogn)。 关于排序算法后续会继续更新。更好的解决方案是扫描数组两次。在第一次遍历中找到最小元素。让这个元素为x,在第二次遍历中,找到最小的元素大于x,这个解的时间复杂度是O(n)。当然有更好的...

2018-09-10 21:58:26 16439 2

转载 【RPC-Python】深入RPC分布式原理

前面几节讲的都是单机 RPC 服务的模式,无论是多线程也好多进程也好,它们都只能算是单点的设计。现代企业的关键性 RPC 服务是绝不可以只使用单点部署的。本节我们要对 RPC 服务进行分布式化,使得服务可以容忍个别节点故障仍能继续对外提供服务。客户端当 RPC 服务部署在多个节点上时,客户端得到的是一个服务列表,有多个 IP 端口对。客户端的连接池可以随机地挑选任意的 RPC 服务...

2018-09-04 21:53:43 3472 1

转载 【RPC-Python】多进程描述符传递模型

这个一个基于Node Cluster的多进程并发模型。Nginx 并发模型我们知道 Nginx 的并发模型是一个多进程并发模型,它的 Master 进程在绑定监听地址端口后 fork 出了多个 Slave 进程共同竞争处理这个服务端套接字接收到的很多客户端连接。 这多个 Slave 进程会共享同一个处于操作系统内核态的套接字队列,操作系统的网络模块在处理完三次握手后就会将套接字塞...

2018-09-04 21:10:54 597

原创 【数据结构与算法】学习

简介学习常用算法、数据结构以及高级算法。 学习leedCode算法题常用算法数据结构LeedCode刷题记录刷题记录

2018-08-30 22:15:56 326

原创 【IoC容器】C++实现

Ioc容器是什么是为了实现某种机制,让某一对象创建不再直接依赖于外部对象创建。外界通过需求灵活的配置这种机制创建对象,这种机制称为控制反转(Inversion of Control, IoC). 我们一般通过依赖注入,将对象创建的依赖关系注入目标对象的构造函数中!比如A对象依赖于B对象的关系注入到A类对象的构造函数中。IoC实现细节IoC实际上具有两种能力:对象的工厂能力,可以...

2018-08-29 22:33:08 5321 3

转载 【RPC-Python】单进程异步模型

单进程异步模型本小节我们开始讲 RPC 的异步模型。异步模型是现代服务器的通用模型,它比古典的同步模型在效率上要高出一大截,但是编程难度上也要加大不少,需要程序员有较高的编程素养。关于如何应用异步模型,我们需要要先从非阻塞 IO 开始讲起,逐步理解基本原理和必备的工具和库之后,再用代码实现。非阻塞IO操作系统提供的文件读写操作默认都是同步的,它必须等到数据就绪后才能返回,如果数据没有就...

2018-08-28 22:42:32 1213

原创 【RPC-Python】多进程同步模型

上节我们完成了一个简单的多线程服务器,可以并发处理多个客户端连接。但是 Python 里多线程使用的并不常见,因为 Python 的 GIL 致使单个进程只能占满一个 CPU 核心,多线程并不能充分利用多核的优势。所以多数 Python 服务器推荐使用多进程模型。我们将使用 Python 内置的 进程模块创建子进程。multiprocessing多进程运行模型如下: # serv...

2018-08-28 22:05:20 1269

原创 【Python】简单的网络通信

简介python实现简单的服务器和客户端实现,主要使用了struct、json、socket库。属于【深入理解RPC】基于Python自建分布式高并发RPC服务的练习文章小结正题交互规则# 业务交互输入和输出(客户端和服务)# 采用协议头长度划分业务# | head(4byte) | data(...) |# {# "in" : "ping"# "params...

2018-08-18 10:17:50 659

转载 【RPC-Python】多线程同步模型

上节我们编写了一个最简单的 RPC 服务器模型,简单到同时只能处理单个连接。本节我们为服务器增加多线程并发处理能力,同时可以处理多个客户端连接。后来的客户端连接再也不用排队了。这也是古典 RPC 服务最常见的处理模型。既然要使用多线程,自然离不开 Python 内置的多线程编程库。我们在上节引出的 socket、struct 和 json 三个库的基础上再增加第四个内置库 thread,本节程...

2018-08-16 22:32:09 1253

原创 【C++】编译期约束类的的接口名称

编译期约束类的的接口名称首先我们看一下怎样能够在不拿到具体类对象就可以运行其函数。 今天的主角:declval定义于头文件 <utility>template<class T>typename std::add_rvalue_reference<T>::type declval() noexcept;将任意类型 T 转换成引用类型,令在 dec...

2018-08-14 22:49:17 218

sourceinsight4.exe

sourceinsight4.exe sourceinsight4的破解文件

2017-07-09

sourceinsight破解工具-lic

sourceinsight破解工具-lic

2017-06-30

sqlyog可视化mysql操作软件

sqlyog可视化mysql操作软件

2017-06-10

空空如也

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

TA关注的人

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