- 博客(14)
- 收藏
- 关注
原创 select,poll,epoll区别(言简意赅)
select的文件描述符集合是位数组->fd_set (线程不安全)一次系统调用在内核中 select 采用的是轮询的机制来查询就绪 fd ,事件复杂度为 O(N),然后返回给用户的时候任然需要遍历查询 就绪 fd 事件复杂度也为 O(N)并且每次调用结束后都会使用一组宏来清理和重新设置 fd_set。使用三个位图表示三种被监听的描述符,读,写,exp(检查是否有异常条件出...
2019-08-28 17:06:42
234
原创 笔试时遇到的这些数字1.23e9,12.3e8
浮点数浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的比如,1.23x109和12.3x108是完全相等的。浮点数可以用数学写法,如1.23,3.14,-9.01,等等。但是对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,1.23x109就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5,等等。如...
2019-06-10 15:40:27
2170
3
原创 ptmalloc源码剖析
ptmalloc内存管理器ptmalloc是glibc默认的内存管理器。我们常用的malloc和free就是由ptmalloc内存管理器提供的基础内存分配函数。ptmalloc有点像我们自己写的内存池,当我们通过malloc或者free函数来申请和释放内存的时候,ptmalloc会将这些内存管理起来,并且通过一些策略来判断是否需要回收给操作系统。这样做的最大好处就是:让用户申请内存和释放内存的...
2019-03-31 10:14:43
3962
原创 数据结构(下)--快速排序(三种优化),归并排序,堆排序,基数排序思想及代码实现
快速排序思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序时间复杂度:O(NlogN)空间复杂度:O(1)稳定性:不稳定快速排序一共有三种:固定位置选取基准法(过程见下图)随机选取基准法(基准选取不是arr[0],而是随机选取)三分选取基准法(过程见下)1.左中右三个数...
2019-03-31 10:09:28
398
原创 数据结构(上)--选择排序,插入排序,希尔排序,冒泡排序思想及代码实现
选择排序思想:遍历n次,每次将该位置的数与其后的数比较,找到最小的数并与之交换时间复杂度:O(N^2)空间复杂度:O(1)稳定性:不稳定画图文字表述过程:这时最简单的排序方式,也是最麻烦的方式应用场景:列表基本有序时,需要寻找最小值时void SelectSort(int *arr, int len)//选择法排序,每次与元素后面的数字排序{ int tmp = ...
2019-03-31 09:48:06
220
原创 详解设计模式--工厂模式(简单工厂,工厂方法,抽象工厂)
什么是工厂模式?工厂模式是23种GOF设计模式之一,在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象由以下两个问题引入工厂模式:所以工厂模式的两个重要功能是:定义创建对象的接口,封装了对象的创建; 使得具体化类的工作延迟到子类;了解一下工厂家族里的简单工厂(静态工厂)模型,工厂方法模型,抽象工厂模型简单...
2019-03-26 13:46:34
246
原创 图解 朴素匹配,KMP算法 next数组 nextval数组求解 及代码实现
朴素匹配朴素匹配又称暴力匹配,其时间复杂度为O(m*n)缺点:时间复杂度高例如:在ABEECDEEF中查找是否有子串EEF1.ABEECDEEFEEF将A于E匹配发现不相同,子串回到起点,主串后移一位2.ABEECDEEFEEFB与E匹配发现不相同,子串回到起点,主串后移一位3.ABEECDEEFEEFE与E匹配成功,子串和主串...
2018-06-13 13:01:15
1029
1
原创 中缀转后缀表达式代码
中缀表达式转后缀表达式遇到数字原样输出,遇到操作符入栈,入栈时要判断栈内已有的操作符的优先级和需要判断的操作符的优先级的大小代码:#define OPERATORS_PRIO_PLUS_IN 4 //栈内加法#define OPERATORS_PRIO_SUB_IN 4 //栈内减法#define OPERATORS_PRIO_MULTY_IN 2 //栈内乘法#defin...
2018-06-03 16:59:54
855
原创 数组
一,const 1.const修饰的变量,不能被改变 eg: const int a=10; a = 20; //error 2.const定义的变量必须初始化 3.const的一个误区 const定义的变量可以用各种const,非const对其进行初始化,甚至可以是函数的返回值之类的 eg: const int a = 5;//在编译时进行初始化,即类似于#de...
2018-03-06 20:35:51
207
原创 初识数组与指针
一,数组数组是C语言中一种复合(构造)数据类型,是相同数据类型的一个集合。我们可以把它看作是一个类型的所有数据的一个集合,并用一个数组下标来区分或指定每一个数。eg:int a[10]; 说明整型数组a,有10个元素。float b[10],c[20]; 说明实型数组b,有10个元素,实型数组c,有20个元素。char ch[20]; 说明字符数组ch,
2017-12-17 20:37:03
486
原创 循环
一,for循环一般形式:(表达式1;表达式2;表达式3) {语句}3个表达式的作用:表达式1,设置初始条件,只执行一次,可以为零,一或多个变量设置初值。表达式2,是循环条件表达式,用来判定是否继续循环,在每次执行循环体前先执行此表达式,决定是否继续执行循环表达式3,作为循环的调整,例如使循环变量增值,它是在执行完循环体后才进行的。因此,for语句可以理解为
2017-12-17 11:26:16
307
原创 运算符,常量和变量,强制类型转换
一,运算符一定注意=是赋值,==才是等于!!太容易搞混了。表达式1?表达式2:表达式3意思是1若为真,则执行2,否则执行3二,常量和变量常量:程序运行过程中,值不能改变的量符号常量:#define变量:程序运行过程中,值能改变的量const和define的区分:1.从定义常量说的话: const 定义的常数是变量 ,带类型, #define 定义的只是个常数 不
2017-12-11 00:59:44
1204
原创 大小端,汇编指令,if和swith的区别,左移右移等
一,大小端问题大端:低地址放低数据 如:手机,网络等小端:低地址放高数据 如:PC,Inter如何用指针或结构体判断大小端指针:#include #include //用指针的方式检测机器的大小端模式 int small_port() { int a = 1 ; char b = *((char *)(&a)) ;
2017-12-11 00:12:15
578
原创 浮点数在内存中的存储,头文件,名大小写是否区分,unsigned int在实现两数相加时应注意什么
一,浮点数的存储对于32位浮点数,最高位为符号位S,其次是8位指数E,最后是23位有效数字M对于64位浮点数,最高位为符号位S,其次是11位指数E,最后是52位有效数字M8.25 用十进制表示为:8.25 * 10^0 8.25 用二进制表示为:1000.01 用二进制的科学计数法可以表示为1.0001 * 2^3存储方式:符号位为:0,表
2017-12-03 12:29:08
1373
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人