- 博客(46)
- 收藏
- 关注
原创 图片服务器
一.目录 1.项目产生的背景 2.项目模块的实现 3.项目的基本测试 4.项目的扩展 5.项目中的问题1.项目产生的背景 有时候需要向网页上上传一张图片,但是这个网页却不支持基本的图片上传方式。因此我就想设计一个可以存储图片的服务器,通过使用这个服务器来保存我们可能会使用到的图片,并且这个服务器会对每一张图片产生唯一的一个url,用户可...
2019-09-06 21:00:35 785
原创 进程间通信
进程间通信: 原因:进程之间具有独立性。 目的:1.数据传输:一个进程需要将它的数据发送给另一个进程。 2.资源共享:多个进程之间共享同样的资源。 3.通知事件:一个继承需要向另一个或一组进程发送消息,通知他们发生了某种事件。 4.进程控制:有些进程希望完全控制另一个进程的执行,此时控制进程希望够...
2019-08-09 20:47:53 240
原创 快速排序
#include<iostream>#include<algorithm>#include<vector>using namespace std;int mid(vector<int>&a,int left,int right){ int begin=left; int end=right-1; int mi...
2019-07-31 17:59:21 120
原创 C语言 用自定制函数实现字符串的拷贝
#include<stdio.h>#include<assert.h>char* my_strcmp ( char* dest, const char* src ) //src 指的是要复制字符串 b 的地址{char * ret=dest;assert(dest); //判断指针是否存在 ,若不存在则报错assert(src...
2019-05-02 17:00:07 1506
原创 自定义实现strstr字符串查找
char* my_strstr(char* src, char* dest) { char* temp = src; //先创建一个临时指针,指向被查找的字符串 if (*dest == '\0') //如果当前要查找的字符串为空,则直接返回空 { return nullptr; } while (*temp) ...
2019-09-22 22:23:35 265
原创 线程池的基本概念
线程池:至少一个线程+任务队列 首先线程池是一种线程使用模式。 线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护者多个线程,等待监督管理者分配可并发执行的任务。即在初始化的时候,创建一定数量的线程(有最大限制),从任务队列中获取任务,进行处理。 作用: 1.避免为大量请求创建线程,导致瞬间资源耗尽程序崩溃的问题。 2.避免大量线...
2019-09-22 21:32:05 178
原创 软链接与硬链接的区别
硬链接: 硬链接是一个指向inode节点的指针,硬链接想当年于源文件的一个别名,硬链接不占据内存空间。每增加一个硬链接,原文件的inode节点的链接数就+1;当所有的inode节点的链接数减至为0的时候,这个文件才确保被删除了。因为硬链接是一个指向inode节点的指针,所以当源文件被删除以后照样可以通过硬链接进行文件的访问。硬链接的缺点:1.不能跨越文件系统进行链接。2....
2019-09-14 18:07:11 249
原创 数据库中事物与索引的简介
数据库事务: 是指单个逻辑工作单元执行的一系列操作,要么完全的执行,要么完全得不执行。事务处理可以确保除非事物性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源,通过将一组相关操作组合为要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。要想成为事物首先要满足事物的4个条件:1.原子性:事物是应用中最小的执行单位,如原子是自然界中最小的粒子一 样,事物...
2019-09-13 21:13:12 199
原创 STL中vector与List的对比
vector与list都是STL中重要的序列式容器,由于两个容器的底层结构不同,导致特性以及应用场景不同其主要区别如下:1.底层结构:vector的底层结构是采用动态的顺序表实现的(一段连续的空间)。而list的则是一个带头节点的双向循环链表。12.成员操作方法:vector支持随机访问,访问其任意元素的时间复杂度是O(1)。list不支持随机访问,访问某个元素的复杂度为O(N);...
2019-09-07 17:20:04 713
原创 C++11中的右值引用
引用的概念:C++98中首次提出了引用的概念,引用即别名。引用变量与其引用实体共用同一块存储空间,而引用的底层是通过指针来实现的,因此使用引用,可以提高程序的可读性。引用的特性:1.引用在定义时必须初始化。2.一个变量可以有多个引用。3.引用一旦引用一个实体,在不能引用其他实体。为了提高程序的运行效率,C++11中引入了右值引用,右值引用也是别名,但其只能对右值引用。...
2019-09-03 22:40:04 136
原创 顺时针打印矩阵
对于一个矩阵,请设计一个算法从左上角(mat[0][0])开始,顺时针打印矩阵元素。给定int矩阵mat,以及它的维数nxm,请返回一个数组,数组中的元素为矩阵元素的顺时针输出。测试样例:[[1,2],[3,4]],2,2返回:[1,2,4,3]class Printer {public: vector<int> clockwisePrint(vec...
2019-08-28 21:45:58 94
原创 加法运算(不用加减乘除运算符)
class Solution {public: int Add(int num1, int num2) { int a,b; a=(num1&num2)<<1; //相与判断,是否有进位如果有进位的话,左移一位 b=num1^num2; //异或相当于,对没有进位的元素直接进行相加 ...
2019-08-26 23:10:40 170
原创 二叉树的层序遍历(逐层打印)非递归
class Solution {public: vector<vector<int>> levelOrder(TreeNode* root) { vector&...
2019-08-25 13:55:08 617
原创 二叉树的前序非递归遍历
class Solution {public: vector<int> preorderTraversal(TreeNode* root) { vector<int&...
2019-08-25 13:45:20 233
原创 二叉树的中序遍历非递归
class Solution {public: vector<int> inorderTraversal(TreeNode* root) { vector<int>v; if(root==nullptr) return v; stack<TreeNode*>s; s.pus...
2019-08-23 10:15:41 115
原创 二叉树的非递归后序遍历
class Solution {public: vector<int> postorderTraversal(TreeNode* root) {class Solution {public: vector<int> postorderTraversal(TreeNode* root) {vector<int>v;if(roo...
2019-08-22 20:41:15 117
原创 STL之树形结构的关联式容器
STL中有很多的容器比如说序列是容器和关联式容器,经常见到的容器有这些:vector,list,deque,forward_lise等,这几个容器通常称为序列式容器,因为其底层为线性序列的数据结构,里面存储的是元素本身。什么是关联是容器?关联式容器也是用来存储数据的,与序列式容器不同的是,其里面存储的是<key,value>结构的键值对,在数据检索的时候比序列式容器效率更高。...
2019-08-21 20:25:04 709
原创 I/O多路转接模型
IO多路转接模型大致分为三种:select模型/poll模型/epoll模型。IO多路转接模型的功能:可以实现对大量描述符信息进行就绪事件监控,可以让进程针对就绪描述符进行操作; 可以让进程/线程避免因为对非就绪的描述符进行操作而阻塞。 ...
2019-08-20 16:29:53 237
原创 线程安全之死锁
死锁的概念:多个线程对锁资源进行争抢操作,但是因为推进顺序不当,而导致相互等待,从而导致程序无法继续运行下去。死锁产生的四个必要条件:(1)互斥条件:当一个线程正在对锁资源进行操作的时候,其他线程则不能进行操作。(2)请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。(3)环路等待条件:若干个线程之间形成一种头尾相接的循环等待资源的关系。(4)不可剥夺条件:线...
2019-08-19 21:12:35 114
原创 构造函数与析构函数可不可以是虚函数?原因是什么?
构造函数与析构函数可不可以是虚函数?原因是什么?构造函数不能是虚函数但是析构函数通常确实虚函数。为什么构造函数不能是虚函数?假设构造函数是虚函数,那么他就需要通过vtable(简称虚基表)来调用,但是vtable却是在构造函数中进行初始化的,产生了矛盾,所以两者的顺序不能倒置。析构函数可以是虚函数,且通常大多情况下都是作为虚函数。 因为虚基表已经在构造函数中初始化好了,我们...
2019-08-19 20:56:45 517
原创 指针和引用的区别
引用和指针的区别(底层空间都是用指针实行的)(1)引用在定义时必须初始化,而指针不需要初始化。(2)引用在引用一个实体后就不能在引用其他实体,而指针则可以指向多个实体。 (3) 没有NULL引用,但有NULL指针。(4)在sizeof中含义不同:引用结果为引用类型大小,但是指针始终占4个字节空间(在32位操作系统中)。(5)引用自加即引用实体加1;而指针自加即跳过一个指针...
2019-08-18 21:54:15 202
原创 malloc/free和new/delete的区别
new/delete和malloc/free的区别?(1).malloc和free是函数,new和delete是操作符。(2).malloc申请的空间不会初始化,new可以初始化。(3).malloc申请空间时,需要手动计算空间大小并传递,new只需在其后跟上空间类型即可。(4).malloc的返回值是void*因此在使用时必须进行强转,new不需要(因为new的后面是类型)。...
2019-08-18 11:05:53 216
原创 多线程与多进程的区别
. 多任务的执行-既可以使用多线程也可以使用多进程,哪一个更好? 1.多线程处理任务的优点: 多线程共用进程大部分资源 1.线程间通信除了进程间的方式之外还有更简单的就是全局数据/传参---线程间通信更加 方便。 2.创建/销毁一个线程的成本相较于进程更低。 3.线...
2019-08-13 17:26:16 144
原创 linux信号的基本概念
信号信号:是一个软件中断;通知进程发生了某件事情,中断进程当前操作;让进程去处理这件事。前提:(必须识别这个信号)信号种类有很多。每个都代表不同事件。信号是有生命周期:产生-》注册-》注销-》处理 阻塞(阻止信号被处理)操作系统中定义的信号种类:查看信号种类: kill -l总共62种,1-31非可靠信号 (信号有可能丢失) 34 -64:可靠...
2019-08-11 14:57:57 235
原创 分解因式
#include<iostream>#include<math.h>using namespace std;int main(){ int n; while(cin>>n) { cout<<n<<" = "; int* v=new int [1000]; ...
2019-08-06 11:53:06 268
原创 插入排序算法,与希尔插入排序算法
#include<iostream>using namespace std;void insertsort(int *a, int sz) //插入排序 { for (int i = 1; i < sz; ++i) { int k =...
2019-07-30 15:50:33 228
原创 网络基础三的完整版
**1**可靠传输:1.tcp面向连接2.确认应答机制3.超时重传机制4.协议字段中序号/确认序号可靠传输牺牲了部分性能,但是有些损失是可以避免的, 1.滑动窗口机制 * 通信双方,在通信时会通过协议字段中的窗口字段协商窗口大小,告诉对方一次可以发送的最大数量。 *当然这些数据不可能一条数据全部发送,通信双通常在三次握手阶段,还会协商一个数据叫MMS(最大数据...
2019-07-29 20:16:54 104
原创 网络基础3
1可靠传输:1.tcp面向连接2.确认应答机制3.超时重传机制4.协议字段中序号/确认序号可靠传输牺牲了部分性能,但是有些损失是可以避免的,1.滑动窗口机制* 通信双方,在通信时会通过协议字段中的窗口字段协商窗口大小,告诉对方一次可以发送的最大数量。*当然这些数据不可能一条数据全部发送,通信双通常在三次握手阶段,还会协商一个数据叫MMS(最大数据段大小—数据报中数据的最大长度)。...
2019-07-29 17:54:07 92
原创 C++多态
1.多态的概念:完成某个行为,不同的对象去完成是会产生不同的状态。2.继承中构成多态的两个条件:(1)必须通过基类的指针或者引用调用虚函数。(2)被调用的函数必须是虚函数,且派生类必须对于基类的虚函数进行重写。虚函数:被virtual修饰的列成员函数成为虚函数。虚函数的重写:派生类中有一个跟基类完全相同的虚函数(及派生类虚函数与基类虚函数的返回值类型,函数的名字,参数列表完全相同),成为...
2019-07-23 16:21:08 149
原创 网络基础2
1.应用层:负责应用程序程序之间的数据沟通。应用程序之间存在的两种协议:(1)自定制协议。(2)知名协议。(其中著名的协议HTTP)2.结构化数据传输:使用的方法:序列化工具:将数据对象按照指定的协议组织,组织成为能够进行持久化存储数据传输的二进制数据串。反序列化:将二进制 数据串按照指定的协议解析得到各个数据对象。知名协议:HTTP协议----超文本传输协议 HTML超文本标记语...
2019-07-22 11:19:11 156
原创 linux中关于进程的创建
进程的基本概念:通俗来讲进程就是运行中的程序,在操作系统层面来讲进程就是一个个的PCB(进程控制块)。linux中对于进程的创建主要使用的是fork这个函数,fork函数创建进程的原理:就是从已存在的进程中创建一个新进程,新进程成为子进程,而原进程则被称为父进程。fork函数的声明:#include<unistd.h>pid_t fork(void);返回值:失败则返回-1,...
2019-06-30 11:38:34 108
原创 C语言中动态内存管理方式。
C语言中关于动态内存管理的方式有三种,他们分别是malloc,calloc.realloc,虽然说他们都可以进行动态内存申请,但是他们之间还有一些相同之处,和不同之处。下面我们可以简要的说明一下:三个函数的声明分别是:void * malloc ( size_t size );(1)函数malloc()在内存的动态存储区中分配一块长度为size字节的连续区域,参数size为需要内存空间的长...
2019-06-29 20:27:56 226
原创 linux中关于进程的学习
进程的概念:进程通俗的来讲就是运行中的程序(用户方面的理解),但是在操作系统层面进程就是pcb(进程控制块);程序运行需要将代码加载到内存中,在操作系统层面进程就是操作系统对一个运行中的程序的描述,这个描述信息就是pcb。进程的三种基本状态:运行,就绪,阻塞运行状态:这是指进程已经获得CPU,其程序正在执行状态。就绪状态:这是指进程已经处于准备好运行的状态,即进程已经分配到所需资源,除了C...
2019-05-30 10:24:17 104
原创 关于二叉树链式存储的实现
1.二叉树顺序存储与链式存储的优缺点:(1)顺序存储时,相邻数据元素的存放地址也相邻(逻辑与物理统一);要求内存中可用存储单元的地址必须是连续的。优点:存储密度大(=1),存储空间利用率高。缺点:插入或删除元素时不方便。(2)链式存储时,相邻数据元素可随意存放,但所占存储空间分两部分,一部分存放结点值,部分存放表示结点间关系的指针优点:插入或删除元素时很方便,使用灵活。缺点:存储密度小...
2019-05-29 20:31:39 506
原创 字符集是什么?
字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。字符集是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同。计算机要准确的处理各种字符集文字,需要进行字符编码,以便计算机能够识别和存储各种文字。中文文字数目大,而且还分为简体中文和繁体中文两种不同书写规则的文字,而计算机最初是按英语单字节字符设计的,因此,对中文字符进行编码,是中文信息交流的技术基础。定义:...
2019-05-29 19:47:45 1571
原创 数据结构之二叉树的堆
1.学习一个新事物我们首先了解它的概念。堆的概念及结构:如果有一个关键码的集合K={K0,K1,K2,K3…Kn-1},把他所有的元素按照完全二叉树的顺序存储方式存在一个一维数组中,并满足Ki<=k2i+1且ki<=k2i+2(ki>=k2i+1且k>=k2i+2)i=0,1,2,3…,则称之为小堆(或大堆)。将根节点最大的堆称之为大堆,根节点最小的堆称之为小堆。堆的...
2019-05-25 20:39:36 440
原创 二叉树是数据结构中非常重要的一部分,下面我们来说如何学好二叉数。
1树的概念(1)树是一种非线性的数据结构,它是由n(N>=0)个有限节点组成的一个具有层次关系的结合。(2)边:从父节点到子节点的连线(边有方向)(3)兄弟节点:父节点相同的节点互为兄弟节点(如上图中的2 3,4 5, 6 7等都是兄弟节点)。(4)树叶、分支节点:没有子节点的节点称为树叶,树中的其余节点称为分支节点,分支节点可只有一个分支,(12 9 10 11 7都是叶节点)。...
2019-05-25 20:14:27 315
原创 数据结构中关于复杂度的问题
1.对于如何衡量一个算法的好坏我们通常来看他的时间效率,空间效率。(1)时间效率又被称为时间复杂度:在计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。算法中的基本操作的执行次数,叫做算法的时间复杂度。(2)空间效率又被称为空间复杂度:空间复杂度是对一个算法在运行过程中临时占用空间大小的量度。空间复杂度算的是变量的个数。2.为什么我们不用时间来衡量时间复杂度而是...
2019-05-18 10:04:01 445
原创 c语言编写杨辉三角
1、每行数字左右对称,由1开始逐渐变大,然后变小,回到1。2、第n行的数字个数为n个。 3、第n行数字和为2^(n-1)。(2的(n-1)次方)。4、每个数字等于上一行的左右两个数字之和。可用此性质写出整个帕斯卡三角形。 5、将第2n+1行第1个数,跟第2n+2行第3个数、第2n+3行第5个数……连成一线,这些数的和是第2n个斐波那契数。将第2n行第2个数,跟第2n+1行第4个数、第2...
2019-05-15 22:41:33 1588
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人