- 博客(59)
- 收藏
- 关注
原创 Reactor和Proactor模式简述
Reactor和Proactor模式前言如果让一个服务端服务多个客户端,可以来了一个客户,服务端就为这个客户发起的连接创建一个线程,但是当来了很多客户,服务端就要创建很多线程,每个客户完成自己的工作就会离开,此时服务端创建的线程就要销毁,这样就会创建然后销毁很多线程,造成资源浪费。一个线程对应一个连接的方式不可取,那是不是可以想办法让一个线程对应多个连接呢?我们可以先创建一个线程池,来复用线程池里的线程,让线程池里的每个线程都可以对应多个连接。但是这也会有一个问题:一个线程对应一个连接的时候,这个线
2021-11-10 08:40:44 240
原创 递归问题小结
递归详解递归解释什么时候可以使用递归递归如何使用递归五要素:参数:随着递归状态发送改变的对象。返回值:根据题意判断返回什么值。终止条件:根据题意判断递归到什么时候截止。本层递归要做什么:根据题意判断本层递归要做什么。递归方向:可能要改变的对象有几个选择。经典例题反转链表/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; *
2021-11-09 17:10:19 444
原创 数据结构与算法之动态规划
数据结构与算法之动态规划介绍基本题型子序列和子串首先是几个需要熟记的点:子序列:子序列并不要求连续子串:子串一定是原始字符串的连续子串回文串:一个字符串,正着读和反着读是一样的。经典题目:最大子序和最长上升子序列最长不递增子序列最长回文子串最长公共子序列最长公共子串打家劫舍股票背包...
2021-11-09 17:09:14 228
原创 无重复字符的最长子串
问题描述问题分析题目比较短,但是要确保理解题意。我是这样想的:既然要求出无重复字符的最长子串,我就拿题目给的例子来模拟的一下我的想法。当以第一个字母a开头的时候,有a,ab,abc。abca这个就不符合题意了,当以第二个字母b开头的时候,有b,bc,bca。bcab这个也不符合题意了,依次类推直到最后一个字符。根据这个想法可以得到以下几点理解:可以求出以每个字符开头的最长子串,然后在这些最长子串中取出一个最大的,就是满足题意得解。既然是每个字符开头,就要遍历,遍历到当前字符得时候如何知道当前字符
2021-07-24 20:39:54 69
原创 C++之指针和引用
C++之指针和引用指针定义指针的值和指针指向对象的值NULL和nullptr在C语言中,NULL被定义为(void*)0,在C++中,NULL被定义为整数0,此时就无法和整数0区分,因为函数重载的缘故,当我们想要调用参数是指针的函数,如果传入NULL,会将NULL当作0来看待,而nnullptr就可以区分整型和指针类型,能够根据环境自动转换成相应的指针类型,但是不会转换成任何整型,所以不会造成参数传递错误。引用定义引用指向对象的值参考:https://blog.csdn.net/qq_39
2021-07-14 21:22:42 205
原创 归并排序类题目
归并排序类题目介绍说是归并排序类的题目其实就是合并过程这个部分的思想:两个序列(链表、数组或者字符串等),合并成为一个序列的问题。问题描述问题分析题目意思很明显了,两个链表合并。有一个需要注意的点:两个要合并链表的第一个节点判断数值大小之后用什么接着:虚拟头节点。代码表述/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * Lis
2021-07-11 20:52:56 334 1
原创 五种IO模型
IO多路复用什么叫IO多路复用一个进程来维护多个socket,使得程序能同时监听多个文件描述符的技术。注意:IO复用虽然能同时监听多个文件描述符,但是它本身是阻塞的,并且当多个文件描述符同时就绪的时候,如果不采取额外的措施,程序只能按顺序依次处理其中的每一个文件描述符,这使得服务器程序看起来像是串行工作的,如果要实现并发,就要使用多进程或者多线程等方式。三个实现IO多路复用的系统调用selectpollepoll几个需要清楚的点:首先不同于select和poll,epoll使用多个函数来
2021-07-09 08:36:08 94
原创 C++之宏定义
C++之宏定义对象宏一般用来定义一个常数。格式:#define 宏的名字 内容#define X A;#define M 1;在编译时编译器会在语义分析认定是宏后,将X替换为A,这个过程称为宏的展开。然而,宏展开是在预处理阶段完成的,这个阶段只是将替换文本看成是一个字符串,并不会有任何计算发生,并不会自动增添任何符号。例如:#define SELF(x,y) x+yint main() { int a = SELF(1, 2) * SELF(2, 3); cout <<
2021-07-02 08:27:37 660 4
原创 设计模式之工厂模式
设计模式之工厂模式简单工厂模式问题引出:现在,客户想提供产品的参数给工厂,工厂根据参数生产出对应产品,客户并不关心产品的生产过程细节。定义:定义一个简单工厂类,它可以根据不同的参数返回不同类的实例,被创建的实例通常都具有共同的父类。实现流程:产品:一个抽象产品类,包含一些公共的实现方法;抽象产品类派生出多个具体的产品类,具体产品类实现每个具体产品的代码;工厂:一个工厂类,工厂类中提供一个生产各种产品的工厂方法,该方法根据传入参数(产品名称)创建不同的具体产品类对象客户和工厂打交道,只需要调
2021-06-28 09:00:11 53
原创 LRU算法详解
LRU算法详解基于一种假设:长期不被使用的数据,在未来被用到的概率也不大,因此,当数据所占内存达到一定阈值的时候,我们要移除掉最近最少被使用的数据。现在假设有这样一种场景:现在有一个用户系统,向各个业务系统提供用户的基本信息,而业务方会频繁查询用户的信息,用户的信息存在数据库里,但是对用户系统性能要求要高,但是不能每一次请求都去查数据库,所以就在内存中设置了一个哈希表作为缓存,但是用户太多的时候,缓存撑不住了,内存就会不够,现在想法是将一部分很少查询的用户信息给删除掉,等以后要使用的时候再添加进来。问题
2021-06-09 22:14:45 627
原创 数据结构和算法之DFS+回溯
数据结构和算法之DFS+回溯介绍//模板:void dfs(...)//参数用来表示状态,根据需要添加。一般什么变化就把什么设置成参数{ if(到达终点状态) { ...//根据题意添加 return; } if(越界或者是不合法状态) ...// return; if(特殊状态)//剪枝 ...// return ; fo
2021-06-09 09:02:42 165
原创 OS之进程线程
OS之进程线程OS非常重要!!!建议参考清华大学陈老师视频入门学习。几个需要熟记的点:并发:一段时间内有多个进程执行,可以一个或者多个CPU并行:一个时刻有多个进程执行,必须多个CPU异步:产生了一个事件但是程序不知道它是什么时候产生的中断(外部中断):来自于外设,来自不同的硬件设备的计时器和网络的中断,处理时间是异步的。异常:来源于不良的应用程序,非法指令或者其他坏的处理状态。像地址越界,算数溢出等,处理时间是同步的。系统调用:来源于应用程序,应用程序主动向操作系统发出服务请求进程
2021-06-03 14:38:46 292
原创 STL之set和map
STL之set和mapset和map都是关联式容器,底层实现都是红黑树,先来看红黑树的实现,明白了红黑树,set和map就很简单了。具体使用在数据结构里面列出,因为做题经常用到。。红黑树插入和删除操作都是在O(logn)时间内完成的,其他操作建议参考数据结构和算法类的书籍。rb_tree一点需要声明的是一个节点中key和data加一起是value.几个优点,也是为什么set和map要使用这个rb_tree来实现利用平衡二叉搜索树的特性,排列规则有助于search和insert,并保持适度平衡:
2021-06-01 10:15:18 202
原创 os之内存管理
os之内存管理介绍从os角度来理解内存就是由装着0或者1的小容器(这些0,1数字就是暂时放在CPU内部的运算数据)组成的大容器,它是外存和CPU沟通的桥梁,计算机程序都运行在内存中。当计算机运行的时候,os就会将需要运算的数据从内存调到CPU进行运算,运算完成,CPU将结果传送出来。os将内存抽象成地址空间。程序在访问指令的时候,指令所处的逻辑地址如何对应到具体的物理地址空间中,大致过程cpu的io部件需要这条指令的内容,会发出请求,请求包含了逻辑地址内容MMu会去查找这个逻辑地址映射表中是否
2021-05-31 16:16:10 716
原创 c++之函数参数传递
c++之函数参数传递普通数值传递过程:首先计算出实参表达式的值然后给形参变量分配一个存储空间,该空间大小等于形参类型的将实参表达式的值存入形参变量分配的存储空间中,成为形参变量的初值使用这种方式,形参得值得改变不会影响实参的值。这是因为在值传递的过程中,形参是作为被调函数的局部变量处理,在堆栈中开辟空间存放传递进来的实参值,形成了实参的一个副本。全程有形参的值,实参的值。void fun(int a) { a++; cout << "形参的地址" << &
2021-05-30 09:45:15 108
原创 设计模式之单例模式
单例模式目标:我们设计的类,只希望产生一个对象。一个还不完美的程序:class A{public: static A& getInstance(return a;);//设计一个函数让类外可以取得这个唯一的对象 setup(){...}private: A(); A(const A&rhs);//不想让外界来创建A对象,就把他的构造函数放在private里 static A a;//a本身已经存在一个了,即使没有创建新的A对象 ..}A::g
2021-05-27 22:07:54 47
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人