自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 epoll源码解析

epoll源码解析1epoll解析2epoll解析3epoll_ctl方法epoll_create方法 ,会创建eventpoll结构,然后将fd和file关联起来,使得 通过 fd能找到 eventpoll结构,即ep结构;struct eventpoll { spinlock_t lock; struct mutex mtx; wait_queue_head_t wq; //sys_epoll_wait()使用的等待队列 wait_queue_head_t p

2021-09-20 16:22:01 222

原创 优先队列-完全二叉堆实现

class MasPq{public: MasPq(int _cap):cap(_cap){ q = vector<int>(cap+1,0); }; int top(){ return q[1];} void pop(){ swap(q[1],q[n]); n--; sink(1); return ; } void swim(int k){ int

2021-09-18 23:44:46 163

原创 无锁编程:LockFreeStackT

https://www.jianshu.com/p/3e122ee901c5带有ABA问题 的无锁stack;template <typename T>class LockFreeStackT{ struct Node{ T val; Node *next; }; LockFreeStackT():head_(nullptr){} void push(const T& val){ Node* node

2021-09-11 22:53:13 157

原创 自己动手实现一个shared_ptr

#include<bits/stdc++.h>#include <unistd.h>using namespace std;namespace smart_pointer{ template<typename T> class SharedPtr{ public: SharedPtr(); SharedPtr(T *ptr); SharedPtr(const SharedPtr &amp

2021-09-09 20:17:53 320

原创 十大排序算法

文章目录快排二、归并快排class Solution {public: int partition(vector<int>&nums,int left, int right){ swap(nums[right],nums[rand()%(right-left+1)+left]); int pivot = nums[right]; int i =left-1; for(int j=left;j<=right

2021-08-01 22:45:59 68

原创 MySQL的快照读(MVCC)和当前读(行锁、间隙锁、Next-Key Lock)解决幻读

文章目录前言一、快照读(snapshot read)二、当前读(current read)前言MySQL的innoDB引擎虽然拥有标准的四级隔离级别,不过它有其他数据库不同,就是在可重复读 RR 级别下面已经可以防止幻读的发生。,所谓幻读,指的是事务A执行过程中,由于事务B并发插入或删除了多条新数据,事务A两次读数据的行数不一样,出现了“虚幻”的新纪录(phantom,幽灵)。一、快照读(snapshot read)在快照读(snapshot read)的情况下,MySQL通过MVCC(多版本并发控

2021-07-14 16:26:03 4042 3

原创 RPC初解

系列文章目录提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录系列文章目录前言一、RPC?二、RPC的运行模式2.读入数据总结系列文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言RPC是分布式的基石,可以将各个业务代码模块隔离开来,快速迭代更改代码。提示:以下是本篇文章正文内容,下面案例可供参考一、RPC?R

2021-06-20 17:00:30 193 1

原创 C++ 单例模式(饿汉模式、懒汉模式)

文章目录前言一、单例模式的应用场景二、单例模式的实现1.饿汉式(Eager Singleton)2.懒汉模式-单线程(Lazy Singleton)2.1 简易版2.2 私有嵌套类-回收专用3、懒汉模式 -多线程版本4、懒汉模式 - 现代c++11-优雅的多线程版本前言单例模式是23种设计模式中最常用的一种模式。一个类只能创建一个对象,让类自身负责保存它的唯一实例,并提供一个访问它的全局访问接口,这就是单例模式。Singleton类单例模式-instance私有-Singe

2021-06-17 11:48:07 1582

原创 c++11 多线程 条件变量(condition_variable)

文章目录前言一、条件变量`condition_variable`1、应用场景2、具体动作二、具体函数说明1、wait2、notify_one:3、wait_for4、wait_until三、消费者和生产者模型前言在C++11中,对于多线程的同步问题,我们可以使用条件变量condition_variable;当条件不满足时,相关线程被一直阻塞,直到某种条件出现,该线程才会被唤醒。condition_variable类的成员函数如下:一、条件变量condition_variable条件变量是利用线程间

2021-06-06 14:52:26 746

原创 protobuf -序列化

文章目录前言序列化成字符串SerializeToString和SerializeAsString区别SerializeToString和SerializePartialToString区别前言protobuf有 proto2 和 proto3 两个主要的并且差异很大的版本,所以在使用protobuf前要明确使用的版本。序列化成字符串将 message 结构对象序列化的函数有很多,即使是序列化成字符串也有多个函数可以使用,比如SerializeToString,SerializePartialToSt

2021-06-04 23:21:54 1556

原创 c++ for循环因size(),size_t,无符号数溢出死循环的问题

文章目录前言有符号->无符号 转换规则一、案例一, for 循环误用unsigned二、案例二, int 变 unsigned三、案例三,无符号size() 溢出前言当算术表达式中既有无符号数又有带符号数时,那么在进行运算之前,这个有符号数值会先被转换成无符号数!然后再进行运算。无符号数和有符号数比较的时候,有符号数值也会先被转换成无符号数有符号->无符号 转换规则对于同样字节大小的 有符号数和无符号数,强制类型转换的结果保持位值不变,只是改变了解释位的方式。 unsigned

2021-06-03 11:29:24 1721

原创 字符编码:ASCII,GBK,Unicode 和 UTF-8

文章目录前言一、ASCII 码二、非 ASCII 编码三、GBK四、UnicodeUnicode 的问题五、UTF-8前言大家写程序时肯定有被编码问题困扰过,稍不注意,程序输出就可能是一堆乱码,目前世界上有 UTF-8、GBK、Unicode 等等编码方式,但你真的了解其中的原理吗?一、ASCII 码我们知道,计算机内部,所有信息最终都是一个二进制值。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示

2021-06-01 22:10:23 382

原创 ProtoBuf-反射原理与使用

文章目录前言相关应用场景一、ProtoBuf 反射原理概述1、获取message和service的属性和方法1.1 使用protoc将proto文件生成.h和.cc文件1.2 只使用proto文件,不使用protoc进行编译1.3 非 .proto 文件 ,转换成.proto2、调用message的属性和方法2.1根据type name反射自动创建实例3、通过实例instance 的反射接口reflection对其pb字段读写获取反射Reflection接口,并且**值写入**的代码如下:线程安全二、反射.

2021-05-30 22:55:31 3704

转载 了解ProtoBuf -编码原理

文章目录前言一、编码结构二、Varints 编码三、ZigZag 编码Varint 类型**int32、int64、uint32、uint64****bool****enum 的例子:****64-bit 和 32-bit 类型** **fixed64、sfixed64、double**Length-delimited 类型string、bytes、EmbeddedMessage、repeated补充 packed 编码前言在对 ProtoBuf 做了一些基本介绍之后,这篇开始进入正题,深入 Prot

2021-05-28 00:27:55 334

原创 序列化工具protobuf初解

系列文章目录提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录系列文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例

2021-05-27 20:55:28 381

原创 多机求海量数据的中位数和topK的问题

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录一、多机数据处理 中位数K二、使用步骤1.引入库2.读入数据总结一、多机数据处理 中位数K有10台机器,每台机器保存着10亿个64-bit 整数(可有上下几千万浮动),一共有约100亿个整数(总共差不多80GB数据)10台机器和10亿数据 用快排不现实,所以采用 分布式的 二分查找法1、将每台机器的数据排序2、client端使用 二分 猜数m,调用RPC方法查询 每台机器小于 m的个数smaller,保证满足 smal

2021-05-25 11:36:55 246

原创 c++ map和unorder_map的区别

文章目录mapunordered_map总结mapmap是基于红黑树实现的有序关联容器。红黑树作为一种自平衡二叉树,保障了良好的最坏情况运行时间,即它可以做到在O(log n)时间内完成查找,插入和删除,红黑树意味着对于键值它是有序存储,当你需要查找某一范围的键值时,std::map提供了lower_bound和upper_bound,都是(logN),两者联合使用是可以在(logN)内确定键值key的范围的。操作平均复杂度最坏复杂度空间O(n)O(n)查找O(l

2021-05-22 11:24:45 285

原创 c++的IO复用select/poll/epoll

c++的IO复用select/poll/epoll文章目录前言一、多种IO模式二、I/O 多路复用之select、poll、epoll详解2.1 select2.2 poll2.3 epollLinux中的EAGAIN含义前言在网络服务器中,有着高并发的应用场景。面对数十万乃至上百万的socket连接需求,使用多线程模式如Per-connection-Per-thread,每个线程会开(Linux)8M的栈空间,再TCP长连接的情况下,2000/分钟的请求,假定有20000个连接,则需要20000*

2021-03-30 20:26:37 421

原创 栈的运行速度比堆快? 栈堆详解

文章目录前言为什么栈的运行速度比堆快?二、既然栈更快,为什么不多用栈呢?前言这里说的 “堆” 和 “栈”,而是程序运行中的不同内存空间。(例如C++的内存四区:代码区、全局区、堆、栈为什么栈的运行速度比堆快?申请速度快:栈是程序运行前就已经分配好的空间,所以运行时分配几乎不需要时间。而堆是运行时malloc动态申请的,相当于将分配内存的耗时由编译阶段转嫁到了机器运行阶段,将分配过程从编译器搬到了运行的代码中。于是动态分配的速度不仅与分配算法有关,还与机器运行速度有关。 且malloc还需要动态

2021-03-30 09:46:43 2770 2

原创 C++动态类型转换--少用类型转换

C++动态类型转换–少用类型转换文章目录前言C++动态类型转换--少用类型转换二、C++ 四种强制转换类型函数1.const_cast2.static_cast3.dynamic_cast4.reinterpret_cast前言宁可用c++风格的新式转换const_cast , static_cast , dynamic_cast , reinterpret_cast,也不用旧式转换,如T(expression)C++动态类型转换–少用类型转换const_cast , static_cast

2021-03-29 23:24:51 264

原创 python和c++的区别

系列文章目录提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用文章目录系列文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于Nu

2021-03-20 16:21:47 3251 1

原创 c++编译和链接过程

文章目录前言C++程序编译过程1.编译1.1 编译预处理1.2 编译1.3 汇编2.链接Linking2.1静态链接2.2可重定位目标文件2.3 动态链接前言.cpp :源文件.s : 源文件的汇编代码.o : 可重定位目标文件.a: 静态链接库.so: 动态链接库.exe :可执行文件,点击即可运行C++程序编译过程整个编译过程分为两大步:1)编译 :把文本形式的源代码翻译成机器语言,并形成目标文件2)连接 :把目标文件 操作系统的启动代码和库文件

2021-03-19 21:31:12 436 1

原创 91. 解码方法

文章目录91. 解码方法[](https://leetcode-cn.com/problems/decode-ways/)题解91. 解码方法一条包含字母 A-Z 的消息通过以下映射进行了 编码 :‘A’ -> 1‘B’ -> 2…‘Z’ -> 26要 解码 已编码的消息,所有数字必须基于上述映射的方法,反向映射回字母(可能有多种方法)。例如,“111” 可以将 “1” 中的每个 “1” 映射为 “A” ,从而得到 “AAA” ,或者可以将 “11” 和 “1”(分别为 “

2021-03-19 10:54:02 80

原创 54. 螺旋矩阵

文章目录54. 螺旋矩阵[](https://leetcode-cn.com/problems/spiral-matrix/)题解54. 螺旋矩阵给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。题解双百,while 模拟法 每次大循环 while直左,while直下,while直右,while直上class Solution {}public: vector<int> spiralOrder(vector<vector&

2021-03-19 10:45:49 49

原创 877. 石子游戏

文章目录877. 石子游戏[](https://leetcode-cn.com/problems/stone-game/)解题思路877. 石子游戏亚历克斯和李用几堆石子在做游戏。偶数堆石子排成一行,每堆都有正整数颗石子 piles[i] 。游戏以谁手中的石子最多来决出胜负。石子的总数是奇数,所以没有平局。亚历克斯和李轮流进行,亚历克斯先开始。 每回合,玩家从行的开始或结束处取走整堆石头。 这种情况一直持续到没有更多的石子堆为止,此时手中石子最多的玩家获胜。假设亚历克斯和李都发挥出最佳水平,当亚历

2021-03-19 10:36:01 51

原创 80. 删除排序数组中的重复项 II

文章目录80. 删除排序数组中的重复项 II[](https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array-ii)题解80. 删除排序数组中的重复项 II给定一个增序排列数组 nums ,你需要在 原地 删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。输入:nums = [1,1,1,2,2,3].

2021-03-19 10:29:16 77

原创 c++ 智能指针smart pointer

c++中的smart pointer四个智能指针: shared_ptr,unique_ptr,weak_ptr,auto_ptr文章目录前言auto_ptr(c++98的,cpp11已抛弃)unique_ptr(替换auto_ptr)shared_ptrweak_ptr前言为什么要使用智能指针:智能指针的作用是管理一个指针,原始指针申请的空间在函数结束时忘记释放,造成内存泄漏。智能指针可以很大程度上的避免这个问题,因为智能指针就是一个RAII类,当超出了类的作用域是,类会自动调用析构函数,智

2021-03-18 23:12:14 176

原创 面经:static关键字

static关键字文章目录static关键字静态存储区全局静态变量局部静态变量?静态函数类的静态成员类的静态函数静态存储区全局静态变量在全局变量前加上关键字static,全局变量就定义成一个全局静态变量.bss和.data静态存储区,在整个程序运行期间一直存在未初始化的全局静态变量和全局变量会被自动初始化为0,存在.bss,初始化的在.data作用域:全局静态变量在声明他的文件之外是不可见的,而全局变量其他文件可见,局部静态变量?局部变量之前加上关键字static未经初始化的局

2021-03-18 22:25:26 101

转载 muduo网络库base篇四:生产者/消费者

muduo网络库base篇四:生产者/消费者无界缓冲队列有界缓冲队列生产者与消费者模式是解决并发的有效手段。muduo实现了两种缓冲队列:有界缓冲队列和无边界缓冲队列无界缓冲队列无边界缓冲队列BlockingQueue比较简单,成员数据如下:mutable MutexLock mutex_;Condition notEmpty_;std::deque queue_;有界缓冲队列有界缓冲队列BoundedBlockingQueue类成员数据如下:需要两个条件变量

2021-03-17 10:56:30 149

原创 fatal error: openssl

(解决:fatal error: openssl/ssl.h: No such file or directory)安装 OpenSSL 开发包,执行以下命令进行安装,然后重新编译即可解决[root@localhost]# sudo apt-get install libssl-dev

2020-11-11 20:09:28 504

空空如也

空空如也

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

TA关注的人

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