- 博客(5)
- 资源 (3)
- 收藏
- 关注
原创 多进程写同一个日志并发问题分析
背景问题在优化日志组件项目中有如下场景:两个进程,A、B进程往同一个文件写日志的时候,使用C语言的库函数写,fopen文件追加方式打开, fwrite等。如果每一次写的时候都强制fflush操作,则写的时序是正常的。如果不是每次fflush操作的时候,则会出现写入日志的时候的时序问题,即是A进程的一条日志没打完,B进程的日志中间插进来了。问题分析原子性系统调用先从最基本的系统调用说起...
2018-10-26 23:14:57 6124 4
原创 mysql innodb索引结构的理解
从几个“经验”做法问题开始:1、建索引的时候,建议使用一个id字段作为主键,并递增的插入,这样效率更高。2、为什么索引查询的时候,会有前缀匹配的约束?开始的时候抛出这两个问题,我们先了解完innodb的索引的数据结构,再回来看这两个问题是不是更清晰了。innodb的数据与主键索引是如何组织B树与B+树的基本原理mysql的索引通过B+树来进行组织。为什么是B+树?这先简单回...
2018-10-21 23:54:23 373
原创 C语言结构体中解决变长数据结构连续内存分配的定义的一种方法(char data[0])
最近项目中,有一个业务场景需要使用一个变长数据结构。而且需要使用连续内存。例如这个场景,我定义一个字段,它来表示DB结构的某个列,如下所示:struct Col_v0 { int type; int len; char data[100];};一般来说,我们可以简单的定义成这样。直接用一个定长的结构体来表示。又有人或者有疑问,要表示一个变长的,不是可以直接用...
2018-10-14 22:00:02 2075 3
原创 哈希桶的预分配内存的实现形式
之前在书本中使用过的hashtable的时候,总体思想是使用一大片内存,然后把key值hash成一个int,找到对应的内存的结构的位置,然后找到相应的数据。常用的解决冲突的方式是,需要进行拉链,再new一个新结点来表示数据。这是一种实现形式,逻辑上没有什么问题。总体方案如下图所示 存在问题:大部分情况下,都需要通过动态分配内存的方式进行拉链。而对于类似共享内存,或者是堆内存,预...
2018-10-10 11:05:26 918
原创 二分搜索问题总结
最近工作中遇到了二分搜索问题。它是计算机课程中最基础的算法,这是我们在顺序查找时,最直接的一种提速的普遍性算法了,能够将一个顺序的查找的时间复杂度,从O(n)提升到了O(logn),这是质变的算法。首先我们来看一下一个经典的二分搜索算法:int BinarySearch(vector<int>& vec_arr, int target) { int left ...
2018-10-02 08:43:57 385
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人