tuple sum 遍历std::tuple #include <tuple> #include <iostream>
using std::cout; using std::make_tuple;
template<typename T> std::enab… ...更多
tuple sum 遍历std::tuple #include <tuple> #include <iostream>
using std::cout; using std::make_tuple;
template<typename T> std::enab… ...更多
coding variable 记录常用变量名 variable name ceil floor round trancate trim below above foo bar tmp begin end start stop final finish forward back front back… ...更多
PIMPL 模式 PIMPL:很实用的一种基础模式。 PIMPL解释 PIMPL(Private Implementation 或 Pointer to Implementation)是通过一个私有的成员指针,将指针所指向的类的内部实现数据进行隐藏。 PIMPL的优点: 1)降低模块的耦合。因为隐藏… ...更多
cxx11内存顺序 背景 x86_64和Sparc是强顺序模型(Total Store Order),这是一种接近程序顺序的顺序模型。所谓Total,就是说,内存(在写操作上)是有一个全局的顺序的(所有人看到的一样的顺序), 就好像在内存上的每个Store动作必须有一个排队,一个弄完才轮到另一个,这… ...更多
内存顺序问题有两个来源:编译器优化可能改变代码中读写指令的顺序;CPU 在运行时也可能重排指令(如 Tomasulo 算法)。单线程或使用 Mutex/Semaphore 时,编译器和 CPU 保证语义一致,开发者无需关心内存顺序;但当使用原子操作进行无锁编程时,内存模型的抽象被打破,开发者必须显式规约。 ...更多
内存顺序(Memory Order) 内存顺序 内存顺序,通俗地讲,是关于代码编译成机器指令后的执行顺序问题。内存顺序和编译器、硬件架构密切相关。那为什么会产生内存顺序问题呢?有两方面原因: 一方面,编译器为了优化程序性能,不会完全按照开发者写的代码的顺序来生成机器指令; 另一方面,在程序运行时,为… ...更多
shared_ptr 和make_shared 介绍 条款21:尽量使用std::make_unique和std::make_shared而不直接使用new std::make_unique 和 std::make_shared是三个make函数中的两个,make函数用来把一个任意参数的集合完美转移… ...更多
为什么不提倡使用vector 为什么不提倡使用vector<bool> vector<bool>并不是一个STL容器,不是一个STL容器,不是一个STL容器!首先vector<bool> 并不是一个通常意义上的vector容器,这个源自于历史遗留问题。 早在C++… ...更多
二叉树后序遍历 二叉树的后序遍历算法比较难,尤其是非递归。但是后序遍历的应用最广泛,最容易出现算法题,因此一定要牢牢掌握。其中迭代的方法又较递归的方法快,但是也是非常令人头疼的一件事。 1.递归算法 public void postOrderRecur(TreeNode root){ if(… ...更多
vscode using remote docker Docker开启远程端口 在远程主机上: 创建文件 daemon.json 到目录 /etc/docker: {"hosts": ["tcp://0.0.0.0:2375", &quo… ...更多
lock free vs wait free 在提到Concurrent Non-blocking算法的时候,都会遇到对无锁算法的无锁程度理解. 什么是wait-free和lock-free 所谓lock-free和wait-free算法是指对于共享的数据并非对其加锁来控制访问,而是多个线程并行的访… ...更多
gdb基础 Debug是啥? Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序 Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用 本地运行没问题,更换服务器就跑不起来 这个问题就是Debug版本带了一… ...更多
shell常用知识 shell基础 记录一些用到的shell知识 常用的cli的快捷键 ALT-? list complete ALT-* insert complete C-x * glob-expand-word M-# insert-comment (M-#) M-g glob-com… ...更多
有栈vs无栈协程 ...更多
flatbuffers ...更多
stdcall和cdecl 概念
stdcall调用 stdcall是Pascal程序的缺省调用方式,参数采用从右到左的压栈方式,由调用者完成压栈操作,被调函数自身在返回前清空堆栈。 WIN32 Api都采用_stdcall调用方式,这样的宏定义说明了问题: WINAPI _stdcall … ...更多
go certificate signed报错 CA证书 数字证书主要用来做签名认证,保证了信息和数据的完整性和安全性 但是在开发过程中经常发生内网环境的证书过期,导致依赖文件无法访问,编译报错 这里记录一下直接用http不加密的方式下载依赖文件 go 主要有几个环境变量, 这样访问这些网址时就会用… ...更多
哪些场景应该用emplace_back emplace的插入原理 当调用push或insert成员函数时,我们将元素类型的对象传递给它们,这些对象被拷贝到容器中。而当我们调用一个emplace成员函数时,则是将参数传递给元素类型的构造函数。emplace成员使用这些参数在容器管理的内存空间中直接构造… ...更多
零宽断言 正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。 零宽断言用于查找在某些内容(但并不包括这些内容)之前或之后的东西,它们像 \b ^ $ < > 这样的锚定作用,用于指定一个位置,这个位置应该满足一定的条件(即断言),因此它们也被称为零宽断言。 断言用来声明一个应… ...更多
markdown-preview emacs markdown preview 直接上插件 grip-mode插件依赖grip python3 -m pip install grip
之后使用use-package安装grip-mode, 这样在编辑markdown文件是就自动用浏览器打开预览了 … ...更多