Makefile 光速入门
Makefile 光速入门
|
Makefile 光速入门什么是 MakefileMakefile 简单来说就是构建某个文件需要的步骤,比如我们要编译一个 C 语言的程序,单个文件时我们可以简单输入一行 gcc 的编译命令:$ gcc main.c -o main就可以完成一个编译单文件的操作,但是如果项目比较复杂,涉及到多文件的
Copy-On-Write 策略
Copy-On-Write 策略
|
操作系统在分配内存时,有一个很重要的策略叫写时复制(Copy-On-Write,COW),在现实情况中,内存通常是不够应用程序分配的,应用程序通常会申请超过自己需求的内存。在操作系统内部,COW 对进程 fork 也有加速作用。我们先从操作系统的 fork 操作来理解。当一个进程进行 fork 时,
MapReduce 详解
MapReduce 详解
|
前言MapReduce 作为谷歌三剑客之一,在分布式系统领域有非常重要的作用,他带来 Map-Reduce 的分布式任务处理框架推动了分布式系统的发展。对于 MapReduce,其可以简单概括为两个步骤,第一个是 Map,第二个是 Reduce。Map 的操作在于把原始巨大的任务打碎拆散,方便多个计
经典互斥问题:面包店算法
经典互斥问题:面包店算法
|
介绍面包店算法是在多线程环境下无锁的互斥算法,能够保证在多线程的环境下,临界区同时至多只有一个线程进入。虽然算法回看起来并不难,但却是图灵奖得主 Lamport 最骄傲的成果之一。面包店算法要解决的本质是一个互斥问题,其是由 Dijkstra 提出的,另一个图灵奖得主。在计算机发展过程中,有相当多人
The Google File System 详解
The Google File System 详解
|
什么是 GFS?GFS 全称为 Google File System,是一个分布式的文件系统,GFS 实际上是部署在分布式的环境中,但是提供的文件服务好像就在单机上运行一样。程序员不需要知道分布式的任何细节,就像使用本地文件一样读取或写入在分布式环境上储存的文件。GFS 为大型数据密集型的应用提供了
std::bind 和 std::thread 传引用的那些事
std::bind 和 std::thread 传引用的那些事
|
C++ |
0 评论
前言在 std::bind 和 std::thread 中可能会遇到引用失效的问题,解决办法是通过 std::ref 传递引用。这通常不是什么难的技术问题,但是知其然知其所以然,为什么这样设计,也许值得深入探讨一下。引用失效的情况在以下两种情况下,引用可能失效,仍然导致拷贝操作std::bindst
Linux 网络编程入门:API 详解
Linux 网络编程入门:API 详解
|
字节序/网络序为了保证机器无关,需要保证在网络上传输的字节序是一致的。所以某些关键信息(例如 IP),需要经过字节序的转化,确保所有机器都能正常解析,网络上采用大端方式的字节序。所以有一系列的 API 负责字节序的转化,例如 htons,其中 h 代表 host,主机,n 代表 network,网络
C++ 黑魔法初探:boost 库 is_detected
C++ 黑魔法初探:boost 库 is_detected
|
前言在阅读 github 上一些库的源代码时,看到一个很有趣的实现,如何检测一个类型是否是容器,源代码是通过检测类型是否支持 begin、end、size 操作来判断。由于标准库并没有 is_detected 这一实现,所以库作者基本是把 boost 库中的源代码搬了过来,第一次看到时还花了好久时间
Randomized-Select 算法详解
Randomized-Select 算法详解
|
Randomized-Select 算法详解前言在一个长为 n 的无序序列中,查找第 k 个大或小的元素,Randomized-Select 算法可以实现时间复杂度为 O(n) 的查找。在网上查了一些资料,都没有讲解为什么该算法时间复杂度是 O(n),于是看了《算法导论》,看了原版的推导和证明,这里
十大经典排序算法(C++实现)
十大经典排序算法(C++实现)
|
前言目前 Leetcode 刷题刷到排序算法部分,回顾一下十大经典排序算法。1. 冒泡排序特性说明时间复杂度O(n^2)有序时最好 O(n)空间复杂度O(1)稳定性稳定排序细节:如果有序,直接返回void bubble_sort(vector<int> &nums){ bo