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

阅读数 597

评论数 0

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

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

2018-09-06 17:15:19

阅读数 187

评论数 0

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

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

2018-09-03 01:06:16

阅读数 241

评论数 0

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

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

2019-01-14 21:15:50

阅读数 525

评论数 0

[C++11] ThreadPool

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

2018-10-16 23:51:23

阅读数 70

评论数 0

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

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

2018-10-16 16:17:58

阅读数 95

评论数 0

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

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

2018-10-12 23:44:59

阅读数 127

评论数 5

[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

阅读数 27

评论数 0

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

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

2018-10-10 21:38:28

阅读数 25

评论数 0

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

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

2018-10-10 21:07:43

阅读数 63

评论数 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

阅读数 207

评论数 0

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

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

2018-10-06 20:48:10

阅读数 105

评论数 0

[STL] lower_bound和upper_bound实现

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

2018-10-05 15:45:22

阅读数 42

评论数 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

阅读数 20

评论数 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

阅读数 19

评论数 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

阅读数 33

评论数 0

[C++11] 循环引用

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

2018-09-30 13:01:52

阅读数 100

评论数 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

阅读数 65

评论数 0

[Linux] 内存映射IO

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

2018-09-25 00:19:41

阅读数 38

评论数 0

[Golang] fork坑

占坑 待填

2018-09-24 11:37:47

阅读数 125

评论数 0

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