自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

sai_j的博客

Linux, C, C++, Golang, ARM, RUDP{KCP, UDT, SRT, QUIC, 喷泉码, Sprout}

原创 [rUDP] KCP梳理

背景 先介绍下写这篇博客时的背景。无意间就看到了某视频网站需要懂KCP、UDT这类RUDP协议的开发人员,随即投了份简历。因此,这篇博客算是一份对过往知识的梳理,同时也算是一次面试的准备过程。讲真,在当前这个Java横行的年代,坚守C/C++真的不容易;而去搞KCP、UDT等这类RUDP如此底层...

2018-09-11 00:23:04 2210 2

原创 [evpp/muduo/reactor] evpp事件驱动网络库 整体架构梳理 2

序 上一篇博文中,我们从用户使用的角度入手,对evpp中TCPServer、TCPClient两大类进行了梳理。接下来,我们再来分析梳理下Listener、Connector两个类的细节。当然,这让我联想起了杨宗纬的那首歌“如果你愿意一层一层一层地剥开我的心,你会发现 你会讶异…”。扯得有点远,...

2018-09-06 17:15:19 691 0

原创 [evpp/muduo/reactor] evpp事件驱动网络库 整体架构梳理

介绍 muduo很多人都听说过,那evpp可以理解成是muduo用C++11改写后的升级版。 相比muduo的代码风格,evpp会显得更加现代一点,更讨我们年轻人的喜欢。 作为例子,这里是一段TCP Echo Server的示例代码: std::string addr = &...

2018-09-03 01:06:16 1055 2

原创 [Kafka权威指南] Chapter 4. Kafka消费者:消费数据

Consumer Group What is Consumer Group ? Case:前端采集的数据通过Kafka Topic回传至后端分析程序,但是单个分析线程(Consumer)很有可能忙不过来。 既然单个消费者忙不过来,那就多来几个消费者。此时,这些消费者就构成了一个小团队。 T...

2019-04-29 19:55:50 159 0

原创 [Kafka权威指南] Chapter 1. 初识Kafka

What is Kafka? 基于“发布/订阅”模型的消息队列 Why Kafka? 多生产者 方便数据聚合 多消费者 多个消费者同时消费同一个消息流,消息可以被多次重复消费。 多个消费者可以组成一个Group,保证特定消息只消费一次。 消息持久化 消费者不需要...

2019-04-28 18:42:55 49 0

原创 [MIT 6.824: Distributed Systems] LEC 1: Introduction之Preparation

LEC 1: Introduction 的课前任务为阅读MapReduce论文。 何为MapReduce? 一种面向大数据处理的编程框架 MapReduce的优势? MapReduce隐藏分布式并行计算的琐碎细节,让用户关注计算任务本身 其中,包括: 1) 数据切分; 2) 计算...

2019-04-17 19:40:31 70 0

原创 [LevelDB] 一步步剖析AtomicPointer

AtomicPointer是LevelDB中的一个基础数据结构,其核心代码只有寥寥10来行。 但是,为了理解这10来行代码,却需要十分扎实的CPU架构、操作系统、编译器、C++11知识。 为了搞明白其背后的原理,同时加深理解,我准备从以下几点着手,一步步抽丝剥茧: 什么是乱序执行? 什么是...

2019-03-04 00:32:10 77 0

转载 [Distributed Systems] Two-Phase Commit

https://www.cs.princeton.edu/courses/archive/fall16/cos418/docs/L6-2pc.pdf

2019-03-01 21:06:43 64 0

原创 [C++11] 万能引用总结

针对左值,万能引用等效左值引用;针对右值,万能引用等效右值引用;   针对左/右值,万能引用都正确进行了推导,那为啥还要有std::forward? 因为右值引用是左值!!万恶之源   有点绕,为啥右值引用是左值? 右值,就是“无名”的value,只有值,没有变量名; 右值引用,本...

2019-01-14 21:15:50 1172 0

原创 [C++11] ThreadPool

背景 近期,在造一个异步HTTP调用的轮子;https://github.com/Sai-Jiang 简单来说,通过一个Restful接口,代理会接收异步HTTP调用的请求; 这些接收到的异步HTTP调用请求,将会由代理代为去执行; 适用的场景,主要是低时延接口调用高时延接口; HTTP...

2018-10-16 23:51:23 353 0

原创 [C++] 适用程序退出的Signal Handler

To the point #include <csignal> #include <glog/logging.h> #include <mutex> #include <condition_va...

2018-10-16 16:17:58 1223 0

原创 [C++采坑实录] Lambda按值捕获 和 array

背景  一个学环境的朋友,正准备转码农,今天碰巧遇到一个Bug。 这里,我把代码简化之后,来看看到底哪里出现了问题?   代码 ​ int main() { int collection[5] = {}; auto process = [=]() { // 按值...

2018-10-12 23:44:59 857 7

原创 [N周N语言] C++实现Golang中的WaitGroup

class WaitGroup { public: void Add(int incr = 1) { counter += incr; } void Done() { counter--; if (counter &...

2018-10-10 22:15:05 136 0

原创 [C++11] 线程安全的BoundedBlockingQueue

template <typename T> class BoundedBlockingQueue { public: explicit BoundedBlockingQueue(int maxSize) : ringbuffer(maxSize) { ...

2018-10-10 21:38:28 216 0

原创 [C++11] 线程安全的BlockingQueue

参照muduo中的源码,使用C++11语法进行改写 #include <mutex> #include <condition_variable> #include <deque> template &lt...

2018-10-10 21:07:43 421 0

原创 [kafka] Kafka Docker单机环境搭建

Kafka搭建 docker pull wurstmeister/zookeeper docker pull wurstmeister/kafka docker run -d --name zookeeper -p 2181:2181 -t wurstmeister/zookeeper d...

2018-10-09 12:07:22 1857 1

原创 [N周N语言] Golang for range,C++ auto for 遍历时是否可以删除元素?

先说下结论 Golang中的map,是可以在for range时删除元素的;但是,不能取元素的地址; C++中的auto for,则是不支持删除元素的;

2018-10-06 20:48:10 556 0

原创 [STL] lower_bound和upper_bound实现

int lower_bound(vector<int>& nums, int target) { int lo = 0, hi = nums.size() - 1; while (lo &...

2018-10-05 15:45:22 691 0

原创 [Leetcode] 124. Binary Tree Maximum Path Sum

Given a non-empty binary tree, find the maximum path sum. For this problem, a path is defined as any sequence of nodes from some starting node to any...

2018-10-04 16:15:56 53 0

原创 [uService] Asynchronous Processing with Go using Kafka and MongoDB

参考文献: https://www.melvinvivas.com/developing-microservices-using-kafka-and-mongodb/

2018-10-03 00:30:49 59 0

原创 [C++] lock_guard vs unique_lock

Lock doesn’t have to taken right at the construction, you can pass the flag std::defer_lock during its construction to keep the mutex unlocked durin...

2018-10-01 02:27:37 140 0

原创 [C++11] 循环引用

前言 虽然C++11中的智能指针,一定程度上简化了C++当中的内存管理;但是,shared_ptr<>的使用同时也引出了另一个问题:循环引用。 例子 让我们先来看一段示例代码。 #include <iostream> #include &am...

2018-09-30 13:01:52 1282 0

原创 [Socket] listen()之backlog参数

直奔主题 The behavior of the backlog argument on TCP sockets changed with Linux 2.2. Now it specifies the queue length for completely established sockets...

2018-09-25 10:13:37 306 0

原创 [Linux] 内存映射IO

前言 本科留给我最大的印象,就是大一愣头青死磕APUE。一眨眼,研究生阶段都快结束了。时间过的好快。上研究生之后,慢慢从C转到C++,Linux native API也用的越来越少。趁着最近面试这个机会,赶紧复习一下相关概念。 内存映射IO 的优势 使用内存映射IO来取代read()和write...

2018-09-25 00:19:41 159 0

原创 [STL] vector会自动shrink嘛?

Q(头脑风暴) vector是最常用的STL容器;同时,vector的底层实现会自动处理underlying storage用完的情况,进行扩增。但是,当我们clear()或者erase()掉vector中的部分元素后,vector的underlying storage会自动shrink嘛? A ...

2018-09-24 11:20:42 93 0

原创 [TCP] Write-Write-Read会有什么问题?

待补充 同时包括 TCP_CORK 和 TCP_NODELAY

2018-09-23 22:46:11 209 0

原创 [Linux] 文件描述符和打开文件之间的关系

前言 文件描述符、文件句柄和i-node之间的关系,应该是Linux Native Programming的基本功。Golang、C++11写久了之后,这些概念有些淡忘,今天顺便梳理下。 铺垫 为了搞清楚这当中的关系,我们首先要了解内核维护的3个数据结构: 进程级的文件描述符表 系统级的打开文件...

2018-09-23 22:36:13 161 0

原创 [C++] 如何声明一个同迭代器指向元素类型相同的变量?

Q 假设算法中要声明一个变量,以"迭代器所指对象的类型”为类型,该怎么办? A 1. C++11 auto 在C++11当中,可以直接用auto关键词进行声明; auto var = *iter; 2. function template的参数推导 如果编译器不支持C++11,或...

2018-09-21 22:45:40 299 0

原创 [Golang] timer可能造成的内存泄漏

背景 前两天,跟一位学长交流Golang;然后,他突然问我:你知道timer可能造成内存泄漏嘛? 当时,甚是一脸懵逼,毕竟之前写的Agent测了好久,都没发现这个问题啊。今天,就索性了解了下。这里先说下结论,timer的误用可能造成某些等待timer的Goroutine无法正常退出,导致资源无法释...

2018-09-19 23:33:45 2613 0

原创 [Linux] Sleep睡眠线程还是进程?

sleep() causes the calling thread to sleep either until the number of real-time seconds specified in seconds have elapsed or until a signal arrives w...

2018-09-19 20:36:59 697 0

原创 [HTTP] 状态码301和302的区别

301 Permanently Moved 永久重定向 被请求的资源永久移动到新位置; 将来对此资源的任何引用都应该使用本响应返回的若干个URI之一; 如果可能,客户端应当自动把请求地址修改为从服务器返回的地址。 除非额外指定,否则这个响应也是可缓存的。 301比较常用的场景是使用域名跳转。 比如...

2018-09-19 19:21:34 256 0

原创 [C++11] 线程安全的单例Singleton

饿汉模式 class Singleton { public: static Singleton &GetInstance() { static Singleton instance; return instance; ...

2018-09-19 00:08:38 84 0

原创 [C/C++] volatile关键词

Volatile关键字 Volatile关键词的第一个特性:易变性。 所谓的易变性,在汇编层面反映出来,就是两条语句,下一条语句不会直接使用上一条语句中volatile变量的寄存器内容,而是重新从内存中读取。 Volatile关键词的第二个特性:“不可优化”特性。 volatile告诉编译...

2018-09-16 18:42:42 61 0

原创 [algs] TopK问题

int main() { int N, K; cin >> N >> K; // 请注意,针对TopK(最大的K个元素)问题,我们采用的是末位淘汰的思想; // 末位淘汰后,剩...

2018-09-16 16:14:51 60 0

原创 [GeeksForGeeks] Bin Packing Problem (Minimize number of used Bins)

Given n items of different weights and bins each of capacity c, assign each item to a bin such that number of total used bins is minimized. It may be...

2018-09-16 16:02:15 75 0

原创 [TCP] TCP 40ms Magic Number

待梳理 参考文献: http://www.cnblogs.com/wanpengcoder/p/5366156.html https://www.cnblogs.com/wajika/p/6573028.html

2018-09-12 22:52:22 167 0

原创 [C++] LRU实现

template <typename Key, typename Val> class LRUCache { public: LRUCache(int cache_size_) : cache_size(cache_size_) { }; ...

2018-09-05 11:12:57 344 0

原创 [STL] SGI STL红黑树实现的边界条件

背景 SGI STL红黑树实现上的特殊点,在于红黑树有一个header辅助节点; - 该header的父节点为root节点; - 其左节点为当前二叉树中的最小值(最左); - 其右节点为当前二叉树中的最大值(最右); - 该节点本身就正好用来当做end迭代器; 其初始化代码如下...

2018-09-02 14:52:59 92 0

原创 [Reactor] 如果不限制并发连接数可能会引发的问题?

对于reactor模式,listening socket是一种特殊的IO对象。当有新连接到来时,此socket变为可读,epoll_wait会返回这一事件,然后在事件处理器中调用accept获得新连接的socket,但是如果本机的file descriptor已经用尽,则accept会返回EMFI...

2018-08-31 13:09:03 234 0

原创 [C++] std::enable_shared_from_this

如图:

2018-08-30 00:10:21 76 0

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