- 博客(25)
- 收藏
- 关注
原创 八种排序算法
直接插入排序: 时间复杂度:O(n^2) 空间复杂度: O(1) 稳定 越有序越快希尔排序: 时间复杂度:O(n^1.3-n^1.5) 空间复杂度:O(1) 不稳定 越有序越快冒泡排序: 时间复杂度:0(n^2) 空间复杂度:O(1) 稳定选择排序: 时间复杂度: 0(n^2) ...
2020-03-13 13:48:32 176
原创 C++复习 之智能指针 & STL & 设计模式
顺序容器:vector :向量容器,底层内存可增长的数组,每次以2倍的方式增长;deque :双端队列容器,底层动态开辟的二维数组;list :列表容器,底层带头结点的双向链表容器;关联容器:set : 单重集合,底层红黑树;multiset : 多重集合,底层红黑树;map :单重映射表,底层红黑树;multimap :多重映射表,底层红黑树;ST...
2019-08-27 21:10:07 545
原创 MySQL 之SQL语言
1.SQL语言DDL create drop alter show 1、库 1.创建库 create database [if not exists] dbname; eg:create database [if not exists] CY1269; 2.删除库 drop database [if exists] db...
2019-08-25 12:31:46 212
原创 MySQL 之存储引擎
对文件的存取机制MyISAMB+树索引(多路树,多路查找)数据 索引分离 1、支持全文索引,不支持外键,不支持事务,表锁 2、非聚集索引 3、 .frm .myi .myd( MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址) (MyISAM的索引文件仅仅保存数据记录的地址) (在MyISAM中,主索引和辅助索引(Secondary k...
2019-08-25 11:52:04 196
转载 堆区和栈区的区别
堆(Heap)栈(Stack)一个由c/C++编译的程序占用的内存分为以下几个部分 :1、栈区(stack)由编译器自动分配释放 ,存放函数的参数值,局部变量的值等; 其操作方式类似于数据结构中的栈;2、堆区(heap)一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 , 分配方式类似于链表; (注意它与数据结构中的堆是两回事)3、全局...
2019-08-22 14:49:06 131
原创 数组 、链表 、堆栈 、队列
1、数组:数组是使用一块连续的内存空间保存数据,保存的数据的个数在分配内存的时候就是确定的: 访问数组中第 n 个数据的时间花费是 O(1) ; 但是要在数组中查找一个指定的数据则是 O(N); 数组应用场景: 1、数据比较少; 2、经常做的运算是按序号访问数据元素; 3、构建线性表较稳定; 4、数组更...
2019-08-22 14:00:31 205
原创 Linux复习之内存部分
1、操作系统内存管理模块1. 内存管理方案 分区 分页 分段 伙伴系统 段页式 交换分区 1)分区:程序加载时,将程序整体加载到一块分区上; 固定分区: 内存碎片(大小相等/不等的固定分区) 动态分区:外部碎片 2)分页:类似于大小相等的固定分区, ...
2019-08-20 10:25:42 105
原创 Liunx 之高性能编程:多线程 & 多进程 & 进程池 & 线程池 & 线程思想
1、多进程 & 多线程多进程编程:思想:父进程负责监控,并接收客户连接(accept)fork创建子进程,子进程处理与客户端通讯注意: 1.父子进程之间共享文件描述符,所以父进程不需要将接收连接的文件描述符传递给子进程; 2.父进程要关闭连接的文件描述符; 原因: 1.父进程不关闭文件描述符,则后续创建的子进程会将所有的文件描述符继承下来; 2...
2019-08-12 20:32:47 217
原创 Linux之 高性能服务器编程 :I/O复用
1、I/O复用的含义:一个单进程、单线程的服务器程序同时监听多个文件描述符上是否有关注的事件发生,如果某些文件描述符上有事件发生,则程序接着处理有事件发生的文件描述符,没有事件发生的文件描述符则不予理会;这样就可以极大的提高程序的性能。2、I/O复用的方式:select poll epoll3、select函数用法:int select(int maxFd, fd_set *re...
2019-08-09 21:47:31 349
原创 Linux复习相关问题
文件传输项目中,秒传的思路?首先秒传,给我们主观感觉是很大的一个文件比如几个 G,几秒钟的时间就可以上 传完成。其实,该文件并没有上传到服务器,是别人在服务器已经上传了该文件,只需 要给你一个访问的连接,所以速度很快。如果之前服务器没有,那就不可能实现秒传。 当然判断文件是否在服务端已存在,不是靠文件名而是该文件对应的 md5 的值,值一 样,说明文件内容一样。所以秒传发送了 md5 值,服...
2019-08-08 21:51:02 130
原创 Linux 之网络基础部分
HTTP 与 HTTPS 协议 1.安全套接字(Secure Socket Layer, SSL)协议是Web浏览器与Web服务器之间安全交换信息的协议,提供两个基本的安全服务:鉴别与保密。 2.特性 ① 保密:在握手协议中定义了会话密钥后,所有的消息都被加密。② 鉴别:可选的客户端认证,和强制的服务器端认证。③ 完整性:传送的消息包括消息完整性检查(...
2019-07-30 19:14:21 369
原创 Linux 之TCP & UDP & IP报头信息
高性能服务器编程1、I/O复用 – 服务器并发 I/O 的方式,服务器程序将多个 I/O 统一管理,当其中某些 I/O 有事件(I/O 复用上注册的事件)发生时,则将发生事件的 I/O 及相应的事件通知服务器程序。int select (int maxfd, fd_set*read)epollint epoll_create(int size); // 创建一个内核事件表,保存用户...
2019-07-30 10:09:23 284
原创 Linux 复习 之系统编程部分
fork1.fork复制过程:1、分配pid2、分配进程描述符(pcb),同时分配好内核栈3、复制进程实体,即:打开的文件、文件目录、信号信息、进程地址空间等4、用父进程内核栈上存放的现场信息,初始化为子进程的现场信息,并将eax置 05、将父进程时间片分子进程一半,设置进程状态为就绪2.fork 写实拷贝1、fork写实拷贝:在进行fork复制过程中,并不马上进行父进程的地址...
2019-07-30 09:06:16 268
原创 Linux复习 之基础命令
g++与gcc的区别。1、gcc现在是Gnu Compiler Collection 提供的一些编译器工具的集合,以前是其提供的c编译器 ;g++是C++编译器。2、gcc可以编译.c和.cpp的源文件,对 .c 按c语言语法规则处理,.cpp自动按C++语法规则处理,但不默认链接相应的C++库,需要手动指定链接的库名 “-lstdc++”。3、g++可以编译 .c 和 .cpp 的源文...
2019-07-27 21:24:11 235
原创 C++复习 之oop & 三大特征 封装 继承 多态 & 虚函数
1、oop抽象数据类型(AbstractDataType)是指一个数学模型以及定义在该模型上的一组操作。ADT包括数据数据元素,数据关系以及相关的操作。即ADT{数据对象:(数据元素集合)数据关系:(数据关系二元组结合)基本操作:(操作函数的罗列)}抽象数据类型(ADT)的一个实现包括储存数据元素的存储结构以及实现基本操作的算法。在这个数据抽象思想中,数据类型的定义和它的实现是...
2019-07-24 20:05:03 408
原创 C++复习 之C/C++的区别
C++的函数生成规则和什么有关系?函数原型 :返回值+函数名+形参形参 :形参的个数 形参的顺序 形参的类型C/C++的区别1、函数的默认值1.自右向左依次赋予2.不能重复赋值3.一般赋在声明上2、函数重载函数重载的三要素1.同名 2.参数不同 3.同作用域3、inline函数1. 编译阶段 调用点直接代码展开 运行效率高2. inline函数和s...
2019-07-23 21:34:01 285
原创 C++复习 之编译链接原理与虚拟地址空间
1.编译链接原理1)(.cpp文件) 预编译 ( 生成 .i文件)1. 将所有的 “#define” 删除 ,并展开所有的宏;2. 处理掉所有条件预编译指令,如:"#if" ,"#ifdef" ,"#elif" ,"#else", “#endif” ;3. 处理 “#include" 指令 (递归过程);4. 删除所有的注释 : " // " ‘’/* */’’ ;5. 添...
2019-07-22 21:22:55 343
原创 位运算总结
1、 位运算符号&(按位与,二进制相同的位都为1才为1,否则为0);|(按位或,二进制相同的位上只要有一个为1就为1);^(按位异或,二进制相同的位上不一样为1,一样为0);~(按位取反,不分正负数);<<(按位左移,标准规定在右边补0);>>(按位右移,正数则左边补0,负数算术右移即负数补1)2、 二进制位的变换操作步骤1 确定符号想得到1——&g...
2018-11-21 14:04:35 131
原创 函数递归的过程
递归:前进(规模缩小),边界条件,返回段递归本质: 自己调用自己例如函数:#include <stdio.h>int Age (int n){int tmp;if(n==1)tmp= 10;elsetmp= Age(n-1)+2;return tmp;}int main(){printf("%d\n", Age(5));return 0;}函数递归过...
2018-11-01 23:29:08 205
原创 一维数组与二维数组的若干比较
首先要理解:在形参中数组已退化成指针;所以对于一维数组来说,数组名==首元素地址;一维数组int*p=arr例如:int arr[5]参数类型arrint*p;(整形指针)arr+1int*p;(整形指针)arr[0]intarr[0]+1int如图所示:二维数组例如:int*p=brr;int brr[3][5];...
2018-11-01 22:49:04 423
原创 指针p++的可能性
例如对如下函数:#include<stdio.h>int main (){int arr[10]={1,2,3};int *p=arr;p++;*p=10;printf("%d,%d",arr[0],arr[1]);}指针p++的可能性:(1)加一个字节(2)加一个元格(4个字节)(3)加一个数组首先排除(3),加一个数组,没啥意义。对于(1)如图所示:...
2018-10-25 23:13:38 212
原创 求进制问题
题目:假设在n进制下,下面的等式成立,567*456=150216,则n的值是()A:9 B:10 C:12 D:18通用的解法:567456=150216可以化为:20nnnn+49nnn+88nn+71n+42=nnnnn+5nnnn+2n*n+6 (1)(1)两边同时%n42%n=6 (2)(1)两边同时除以n,然后在%n(71+42/n)%n=...
2018-10-25 21:58:53 276
原创 父函数调用子函数
先了解一下几个相关概念:野指针:没有访问权限的指针(地址)父函数调用子函数,子函数如果想修改父函数变量的值,则必须传变量的指针并在子函数中解引用 ; 换而言之,子函数的改变要想影响父函数,则父函数需要传指针,子函数需要解引用。几种错误代码如下·:err1:#include <stdio.h>void Swap_err1(int a,int b){int tmp ;t...
2018-10-25 21:31:00 977
原创 数组越界
数组越界是一个非常麻烦的问题,所以一定要注意,千万不要越界。先介绍一下栈:对于普通变量:例如 int i;栈是:先放的东西放在下面,后放的东西放在上面。先定义的变量地址反而大。对于特殊的:例如:数组 int arr[10];数组为一个整体,为40个字节,自上而下。如图所示;举个例子:函数如下:#include<stdio.h>int main(){int ...
2018-10-18 23:30:28 1006 2
原创 经典数字问题
题目:给出一个整数,要求;1 求他是几位数;2 分别输出每一位数字;3按逆序输出每一位数字。代码如下:#include <stdio.h>//1 求他是几位数;int Count(int n){int tmp=0;if(n==0){tmp=1;}else{for( ;n!=0;tmp++){n /= 10;}}return tmp;}//2...
2018-10-14 23:43:31 198
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人