- 博客(19)
- 资源 (1)
- 收藏
- 关注

原创 常见开源产品epoll网络事件模型分析(附200万QPS实现长连接echo server方案)
redis、thrift-noblocking-server、memcached、nginx等开源产品 四种不同场景下不同网络模型 分析
2015-09-07 23:32:02
3731
3

原创 volatile、内存屏障、Acquire&Release语义 三者的差别和关系(二) —— 之内存屏障
这篇博客是系列文章的第二篇, 主要讲一下内存屏障, 不会讲的很深, 但求明确理解和记住, 什么是内存屏障!1. 背景知识: CPU乱序执行这个背景知识很重要, 先讲为快, 在wiki百科上面, 关于CPU乱序执行的解释是这样的:In computer engineering, out-of-order execution (OoOE or OOE) is a paradigm
2014-03-26 22:44:58
3060
1

原创 开放地址法无锁哈希表实现
这个是作者原文: http://preshing.com/20130605/the-worlds-simplest-lock-free-hash-table/实现这个无锁的哈希表,最主要的技术要点在于:1、用了开放地址法实现哈希表,实际内存开销会大于拉链法2、用了CAS(compare and swap)语义实现小于等于8byte变量的原子操作本文的工作主要在于测试 (g
2014-01-24 20:13:55
1477

原创 线程安全的单例模型的演变与Double-Check-Locking的安全性
拜读了论文《C++ and the Perils of Double-Checked Locking》-- Scott Meyers and Andrei Alexandrescu September 2004发现原来一个简单的单例模型,还有如此多的文章,上面提到的这篇文章值得反复读,从中可以衍生出很多并行编程的知识。另外,C++11的内存模型和std::memory以及原子类,是我接下来
2014-01-15 21:37:52
1349
原创 反向传播神经网络的简单实现
先把代码放这里,后面再写字# coding=utf-8# 反向传播神经网络import numpy as npimport mathimport sysnp.random.seed(0)def sigmoid(x): return 1.0 / (1.0 + np.exp(-x))def dsigmoid(x): return x * (1 - x)
2018-01-28 17:08:54
708
原创 Remove Duplicates from Sorted List II 解答(有个比较特殊的case leetcode OJ没有覆盖)
昨天被考了一道数据结构题,当时的实现比较一般。回来翻看leetcode,果然是上面的题,遂解之。accept之后翻看discuss别人的解法,发现很多可以accept的代码都过不了我设计的一个case,网上搜了一些别人的代码,也过不了。遂有这篇博客,与君交流leetcode链接:https://leetcode.com/problems/remove-duplicates-from-sorte
2015-07-29 21:19:56
893
原创 通过Leetcode::Bitwise AND of Numbers Range 深化对比特位计算的理解
无聊写了一道leetcode,后来翻看discussion发现了一个网友用了一个比较巧妙的方法解题,有助于理解比特位计算的一个特性。 先上代码,后面解析:// 我的解法int rangeBitwiseAnd(int m, int n) { if (m == n) return m; int d = n - m; int res = 0; for (int i =
2015-05-03 14:17:38
748
原创 volatile、内存屏障、Acquire&Release语义 三者的差别和关系(一) —— 之volatile
前言:对于这个题目, 本来想写成一篇博客, 但是写下来发现篇幅有点长, 于是拆分成三篇.volatile 内存屏障 Acquire&Release语义 这三个概念恐怕是做并行编程的时候, 或者说是做C++多线程编程的过程中很容易搞不明白的概念, 下面依据我的知识范围和认识深度, 做一个不算详细但很认真的解释吧, 最后面再再用LevelDb的原子指针类AtomicPointer举个例子. 如
2014-03-18 19:53:44
3915
原创 随机字符串算法:13位随机字符串,两两不相同,至少1个大写字母,至少包含这5个字符之3“$@%*#”
高效算法实现:生成13位随机字符串,字符两两不相同,至少1个大写字母,至少包含这5个字符之3“$@%*#”
2014-02-25 20:32:29
2508
原创 不要用std::thread写裸线程
我们先看一段代码:#include #include #include using namespace std;volatile bool flag = false;void f1() { for (int i = 0; i < 1000; ++i) { if (flag) cout << i << " catched" << endl; else cout <
2014-02-11 21:36:34
2658
原创 用C++11实现spinlock
#include #include struct SpinLock;struct SpinLock_t {private: std::atomic stat; static char UNLOCK_STAT; static char LOCK_STAT;public: SpinLock_t() : stat(UNLOCK_STAT) {}private: fri
2014-02-06 23:39:43
2201
原创 Mongodb当limit写负数去请求数据的时候会发生什么?
在我们的mongod日志里面查到有些慢请求返回的数据条数是超过1000,问题很奇怪。我们的应用已经限制了 if(limit>500) return ERR_LIMIT; 这是为什么呢?偶然尝试了在mongodb做query的时候,把limit填负数,居然请求到数据了。当limit填-100时,返回了100条记录,当limit填-1000的时候,返回了1000条记录。在mon
2014-01-24 19:36:56
3267
原创 记录一次安装配置mongodb并做数据预分片
我们组用mongodb已经一年度多了,这个实验是很久之前就记录在evernote了的,最近想建一个博客,所以就搬进来,可能有同学会搜到能有帮助吧。1、安装mongodb,记住要下源码安装,apt-get install 不一定是最新版2、一开始因为空间不足,无法启动,我的虚拟机当时只分配了8g,启动mongodb是剩余更少,后来就扩充vbox的磁盘空间,于是有了vbox里面那两篇笔
2014-01-15 21:51:43
2465
原创 从std::string、leveldb、openbsc源码,研究为什么他们要这么设计代码
文章开始前,先转一下大神的微博ok,开始吧。最近在看一些代码的时候,发现一个奇怪的设计,故写下了这篇文章。下面举了3个例子,然后总结一下网友在水木C++版块上面的讨论。【Case1】:一般来说,我们会觉得,string可以这么实现:string { size_t size; char* buf; };但是,在basic_string里,我却发现stri
2014-01-15 21:47:23
1160
原创 用两种方法,实现常用的ThreadBase代码
第一种方法#include #include using namespace std;class ThreadBase {public: void Start() { pthread_t tid; pthread_create(&tid, NULL, &ThreadBase::DoStart, (void*)this); }private: virt
2014-01-15 21:45:28
1276
原创 gcc静态链接库过程中,关于强类型和弱类型的知识
问题背景:先看下面这段代码://common.h#ifndef COMMON_H#define COMMON_H#includeusing namespace std;#ifndef LABEL#define LABEL "common"#endifclass Common{public: static void f() { cout << "Commo
2014-01-03 18:36:53
1733
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人