自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 收藏
  • 关注

转载 最长递增子序列长度及内容

在题解区找到3个比较好的方法,记录一下。方法一:暴力动态规划(超时)具体做法:遍历两层,前面的指针i记录元素,后面指针j比较与前面的值,若是前面大,理论上dp[i]需要加上1,但是需要用dp[i] < dp[j] + 1判断是否是需要这个j,若是还有更大的就不需要这个j。但是因为两层遍历,时间复杂度很高,会超时。class Solution {public: vector<int> LIS(vector<int>& arr) { ve.

2021-08-24 13:01:21 149

原创 网页即时通讯项目

设计思路项目名称:网页即时通讯项目描述:实现通信系统,使用户能够通过浏览器进行用户的登录,进行即时聊天开发环境:Centos7.6 -vim,g++,makefile,git使用技术:MVC框架,MYSQL,mongoose,JsonCpp,Vue.js,jQuery ajax框架设计:使用MVC框架M-数据管理模块:用户数据的管理V-前端页面模块:前端页面的展示C-业务逻辑模块:实现网络通信,进行系统的业务处理详细设计一. 数据管理模块MYSQL数据库是一个C/S框架的数据库注

2021-07-04 21:51:48 1824

原创 个人博客系统

设计思路项目名称:个人博客系统开发环境:Centos7.6 -vim/makefile使用技术:MVC框架,MySQL数据库,httplib,jsoncpp,vue.js,ajax项目功能:实现一个web服务器,能够提供用户通过浏览器访问服务器,实现博客的展示,以及博客的增删改查管理框架设计:实现前端的页面,后台的服务,数据的管理—通过MVC框架进行实现MVC框架前端界面模块需要获取数据进行展示,向服务控制模块发送请求,服务控制模块从数据管理模块获取到数据,组织后发送给前端,是一种服务,数据,

2021-07-04 17:32:13 685

原创 队列及其C++模拟实现

队列的特点即只能从队头pop元素出队,从队尾push元素入队;在队列中不能进行pop和push操作。每个节点包含当前数据以及指向下一个节点的指针typedef int QDataType;typedef struct QNode{ struct QNode* _next; QDataType _data;}QNode;对于队列,需要定义头结点和尾结点typedef struct Queue{ QNode* _front; QNode* _tail;}Queue;队列初始化时将头

2021-04-25 21:07:09 187

原创 二叉树的模拟实现、各种遍历方式、二叉树相关函数

二叉树的模拟实现二叉树中的每个节点都是一个结构体,其中包含一个数据和两个结构体指针typedef char DataType;typedef struct BNode{ DataType _data; struct BNode* _left; struct BNode* _right;}Node;因此二叉树只需要定义一个根节点就可以了typedef struct BTree{ Node* _root;}BTree;构建一棵二叉树这是二叉树和二叉树的节点就都定义好了,可以根

2021-04-25 20:18:41 178

原创 使用deque容器适配器完成栈,队列的创建,使用vector实现优先级队列的创建,仿函数类的简单实现

用container的deque实现栈和队列,以及仿函数类比较大小的实现用deque实现栈stacktemplate<class T,class Container = deque<T>>class Stack{public: void push(const T& val) { _c.push_back(val); } void pop() { _c.pop_back(); } const T& top() { return

2021-04-01 15:48:19 180 1

原创 c++中vector模拟实现

#include <string>#include <iostream>using namespace std;template <class T>class Vector{public: Vector() :_start(nullptr) , _finish(nullptr) , _eos(nullptr) {} size_t size() const { return _finish - _start; } size_t

2021-04-01 14:54:43 95 1

原创 5种IO模型(select,poll,epoll)

IO模型有5种,包括阻塞IO,非阻塞IO,信号驱动IO,异步IO,以及多路转接IO。最后一部分单独描述。首先阻塞IO概念:在内核准备好数据之前,系统调用会一直等待数据,将数据从内核态拷贝到用户态后,返回系统调用。特点:流程简单,顺序化处理,但对资源的利用率不高。非阻塞IO概念:如果内核还没有将数据准备好,系统调用会直接返回,返回错误码。通过循环的方式反复尝试读写文件描述符,指到内核准备好数据,返回系统调用。特点:流程较为复杂,也是顺序化处理,不够实时。信号驱动IO概念:通过定义

2021-03-31 10:57:53 321

原创 进程信号

初识信号:信号是一个软件中断,通知进程发生了某个事件,打断进程当前的操作,去处理这个事件。有三种处理方法:1忽略此信号执行该信号的默认处理方法提供一个信号处理函数,改变默认的处理方法,要求内核在执行到该信号时切换到用户态执行这个默认的信号处理函数,此操作称之为捕捉信号系统定义的信号列表中,1-31是非可靠信号,45-64是可靠信号。kill杀死一个进程的原理:给进程发送一个信号(默认发送15号信号)进程收到信号处理事件(默认为退出)信号的几种产生方式通过终端按键产生信号通过系

2021-03-26 18:12:34 122 1

原创 特殊类的设计,堆建立,栈建立,单例模式(懒汉,饿汉)

设计一个类,只能在堆上创建对象思路:1.如果自动调用公有的无参默认构造函数创建对象,那么将会创建一个栈上的对象。所以要进行构造函数私有化,类外的对象就不能直接调用私有的构造函数。2.在类中构建一个public的方法创建对象,在...

2021-03-25 21:16:59 123

原创 基础IO介绍

包括以下部分的总结:标准库IO接口与系统调用IO接口文件流指针与文件描述符系统调用与库函数的关系文件系统中的inode节点软链接与硬连接动态库与静态库C标准库IO接口(库函数)man 手册 ----3fopen,fwrite,fread,fseek,fcloseFILE *fopen(char *filename,char *mode)mode:r 只读, r+ 读写;w 只写, w+读写;a 追加只写 数据总是写入文件尾部,a+追加读写;b对文件数据进行二进制操作si

2021-03-22 11:20:19 1149 4

原创 进程间通信总结---共享内存,消息队列,信号量

共享内存:本质:开辟的一块物理内存,多个进程通过将同一块物理内存映射到自己的虚拟地址空间,通过自己的虚拟地址空间进行访问,实现数据共享。特点:共享内存是最快的进程间通信方式(操作相较于其他操作,少了两步用用户态到内核的数据拷贝),生命周期随内核操作流程1.创建/打开共享内存int shmget(Key_t key,size_t size,int shmflg)key 共享内存的标识符—多个进程通过同一个标识符打开同一个共享内存;size 共享内存的大小shmflg 操作方式 -IPC_CR

2021-03-19 18:24:38 182

原创 进程间通信总结---管道(命名管道与匿名管道)

1.进程间有哪些通讯方式:管道消息队列共享内存信号量2.为什么进程间不能直接通信?因为每个进程具有独立性,每个进程都有自己的虚拟地址空间,进程只能访问自己的虚拟地址空间,无法直接访问其他进程的虚拟地址空间,因此不能直接通信。3.进程间通信传递什么?数据传输,资源共享,通知事件,控制进程4.管道管道特点管道具有半双工通信,同步与互斥,提供字节流服务,生命周期随进程同步与互斥:同步:让进程按照某种规则,有序的进行资源的访问,保证访问的合理性。互斥:临界资源(进程都能访问到的资源)同一

2021-03-19 14:19:46 424

原创 可能使迭代器失效的容器操作

迭代器可能失效的情况向容器中添加元素或者删除元素的操作都有可能导致容器元素的指针,引用和迭代器失效。失效的指针,引用和迭代器不能代表任何元素,所以要避免迭代器失效。添加元素:1.若容器是vector和string,且存储空间被重新分配,则会失效。若存储空间没有重新分配,指向插入位置之前的元素的指针,引用和迭代器仍然有效,但插入位置之后元素的指针,引用和迭代器会失效。2.若容器是deque,插入到首位位置之外的任何位置都会导致指针,引用和迭代器失效,如果添加首位元素,迭代器会失效,指针,引用不会失效。

2020-08-20 15:50:49 340

原创 c++算法1

1. 二维数组中的查找题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。分析1、每行最大的数字在最后一个位置,全局最大数字在右下角。2、可以从右上角或者左下角开始查找,这样一次就可以排除一行或一列,效率高。代码// An highlighted blockclass Solution {public: bool Find(int ta

2020-08-10 18:38:52 150 1

原创 线程池及代码实现

线程池概念:线程池是一种线程的使用方式,线程过多会带来调度开销,影响缓存局部性和整体性能。线程池中维护着多个线程,外部只需要提供要处理的数据和处理数据的方法,线程池中的线程就可以进行处理。避免了处理短时间任务时创建和销毁线程的代价。同时可以保证内核的充分使用以及防止过分调度。使用场景:1>需要大量线程来完成任务,并且每个任务执行时间很短。2>对性能高要求的应用。3>服务器有突然并发很多任务的情况存在,因为短时间内产生大量线程可能使内存达到极限,出现错误。使用方法:创建固定数量的线程

2020-08-04 18:28:08 197

原创 动态规划问题例题总结1

动态规划问题例题总结1动规概念和本质动规题目详解1.Fibonacci题解方法一递归代码方法二动规代码方法三动规优化代码2.字符串分割题解动规代码三角矩阵题解动规代码动规概念和本质动态规划是分治思想的延伸,通俗一点来说就是大事化小,小事化无的艺术。在将大问题化解为小问题的分治过程中,保存对这些小问题已经处理好的结果,并供后面处理更大规模的问题时直接使用这些结果。动态规划具备了以下三个特点:把原来的问题分解成了几个相似的子问题。所有的子问题都只需要解决一次。储存子问题的解。动态规划的本质,是

2020-08-03 18:26:27 352

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除