- 博客(35)
- 收藏
- 关注
原创 Redis的数据结构
学习目标: 拍电影-》故事情节 场景:人物-物品-声音-播放 1 2 3 4 5 导演-场景-类对象-调度-内存池-显示等 导演-场景-队列 SCENE-树 提示:这里可以添加学习目标 例如:一周掌握 Java 入门知识 学习内容: 提示:这里可以添加要学的内容 例如: 1、 搭建 Java 开发环境 2、 掌握 Java 基本语法 3、 掌握条件语句 4、 掌握循环语句 学习时间: 提示:这里可以添加计划学习的时间 例如: 1、 周一至周五晚上 7 点—晚上9点 2、 周六上午 9 点-上午 11 点
2021-09-18 22:51:26
406
1
原创 Redis简介
基本介绍: Redis(远程字典服务)是一种 Key-value键值对形式的 NoSQL(非关系型数据库)数据库,一类开源的内存数据结构存储器,它是单线程的,将数据存储在内存中,速度很快 优点: 1超高的性能 2完美的文档 3.简单易懂的源码 4.丰富的客户端库支持 一类常用的开源中间件 NoSQL:monoDB,redis,没有表和表之间的关联,甚至没有表的概念,意味着每条数据的大小都可能不一样, 相比而言 MySQL数据库是将文件存储到磁盘当中, 2012年 服务端支持Lua脚本 2015年 添加了Re
2021-09-17 17:26:50
129
原创 设计模式2
行为型模式: 模板方法模式: 将逻辑和算法放在抽象基类之中,并定义好需要实现细节的接口,子类中实现细节 #include<iostream> #include<vector> using namespace std; class Factory{ public: virtual void buildCar(){ this->buildA(); this->buildB(); this->buildC();
2021-08-31 12:29:18
147
原创 设计模式1
学习目标: 提示:这里可以添加学习目标 例如:一周掌握 Java 入门知识 装饰者模式: 装饰者提供了一种给类增加职责的方法,不是通过继承实现的,而是通过组合 提示:这里可以添加要学的内容 例如: 1、 搭建 Java 开发环境 2、 掌握 Java 基本语法 3、 掌握条件语句 4、 掌握循环语句 学习时间: 提示:这里可以添加计划学习的时间 例如: 1、 周一至周五晚上 7 点—晚上9点 2、 周六上午 9 点-上午 11 点 3、 周日下午 3 点-下午 6 点 学习产出: 提示:这里统计学习计
2021-08-30 17:48:14
125
原创 STL的相关知识
vector: vector中实现了某种特殊的元素实现了支持auto访问 vector支持bigin function ,迭代器返回第一个元素, 还要支持 end function,迭代器返回最后一个元素 class A{ public: A(int n=5):n(n){ data=new int[n]; } int *begin(){ return data; } int *end(){ return data+n; } private: int*data,n; }; int main()
2021-08-28 21:34:12
81
原创 STL的相关知识2
学习目标: 提示:这里可以添加学习目标 例如:一周掌握 Java 入门知识 学习内容: 提示:这里可以添加要学的内容 例如: 1、 搭建 Java 开发环境 2、 掌握 Java 基本语法 3、 掌握条件语句 4、 掌握循环语句 学习时间: 提示:这里可以添加计划学习的时间 例如: 1、 周一至周五晚上 7 点—晚上9点 2、 周六上午 9 点-上午 11 点 3、 周日下午 3 点-下午 6 点 学习产出: 提示:这里统计学习计划的总量 例如: 1、 技术笔记 2 遍 2、CSDN 技术博客 3 篇
2021-08-21 21:07:05
97
原创 STL的相关知识1
function: 函数对象,也是一个模板 语法: function<void (param…)> #include<iostream> using namespace std; void add(int a,int b){ return a+b; } struct functor{ int operator()(int a,int b){ return a+b; } int add(int a,int b){ retu
2021-08-21 13:45:46
95
原创 函数指针和lambda
学习目标: 提示:这里可以添加学习目标 例如:一周掌握 Java 入门知识 学习内容: 提示:这里可以添加要学的内容 例如: 1、 搭建 Java 开发环境 2、 掌握 Java 基本语法 3、 掌握条件语句 4、 掌握循环语句 学习时间: 提示:这里可以添加计划学习的时间 例如: 1、 周一至周五晚上 7 点—晚上9点 2、 周六上午 9 点-上午 11 点 3、 周日下午 3 点-下午 6 点 学习产出: 提示:这里统计学习计划的总量 例如: 1、 技术笔记 2 遍 2、CSDN 技术博客 3 篇
2021-08-20 23:14:40
340
原创 C++多态模板
学习目标: 提示:这里可以添加学习目标 例如:一周掌握 Java 入门知识 学习内容: 提示:这里可以添加要学的内容 例如: 1、 搭建 Java 开发环境 2、 掌握 Java 基本语法 3、 掌握条件语句 4、 掌握循环语句 学习时间: 提示:这里可以添加计划学习的时间 例如: 1、 周一至周五晚上 7 点—晚上9点 2、 周六上午 9 点-上午 11 点 3、 周日下午 3 点-下午 6 点 学习产出: 提示:这里统计学习计划的总量 例如: 1、 技术笔记 2 遍 2、CSDN 技术博客 3 篇
2021-08-17 23:22:17
424
原创 数组的相关问题
学习目标: 提示:这里可以添加学习目标 例如:一周掌握 Java 入门知识 学习内容: 提示:这里可以添加要学的内容 例如: 1、 搭建 Java 开发环境 2、 掌握 Java 基本语法 3、 掌握条件语句 4、 掌握循环语句 学习时间: 提示:这里可以添加计划学习的时间 例如: 1、 周一至周五晚上 7 点—晚上9点 2、 周六上午 9 点-上午 11 点 3、 周日下午 3 点-下午 6 点 学习产出: 提示:这里统计学习计划的总量 例如: 1、 技术笔记 2 遍 2、CSDN 技术博客 3 篇
2021-08-14 21:46:57
163
原创 C++标准库
学习目标: 提示:这里可以添加学习目标 例如:一周掌握 Java 入门知识 学习内容: 提示:这里可以添加要学的内容 例如: 1、 搭建 Java 开发环境 2、 掌握 Java 基本语法 3、 掌握条件语句 4、 掌握循环语句 学习时间: 提示:这里可以添加计划学习的时间 例如: 1、 周一至周五晚上 7 点—晚上9点 2、 周六上午 9 点-上午 11 点 3、 周日下午 3 点-下午 6 点 学习产出: 提示:这里统计学习计划的总量 例如: 1、 技术笔记 2 遍 2、CSDN 技术博客 3 篇
2021-08-13 00:15:16
237
原创 高并发设计
数据库: 一.池化技术 原因:1.连接的耗时比较长 2.相反执行一次sql可能时间很快 二.池化连接 最小连接(10左右),最大连接(20-30左右),预热(初始化) 三.池化线程 1.CPU密集型(一定不要让线程数超过cpu核心数) 2.IO密集型(线程池可以适当放宽) 3.尽量不使用无界队列 四.主从读写分离(冗余) 1.读多写少,突发流量 2.主从拷贝:一个数据拷贝给多个从库 查询在从库来 3.异步更新:延迟效应(毫秒级),不同步 五 分库分表(分片) 问题: 数据量增大,查询性能下降 数据量占用磁盘
2021-08-11 21:32:34
86
原创 服务器相关知识
服务器: 一种专门提供服务的机器 硬件 软件:我们关注,CS架构 Sever:高并发 2响应能力-效率 C10K-C100K问题 P2P架构:更关注对等事件怎么对等 高并发: 操作系统的并发和并行 多进程 实现方式:多进程-阻塞? 进程创建成本高 切换的成本(高速缓存(弥补CPU和内存之间速差),内存上)太高 高速缓存:1空间局部性,2时间局部性 多线程 内核支持线程 线程级别:内核线程,用户线程 线程模式: 1个连接对应一个线程 事件驱动(流水线) 互斥与同步 1死锁 data race 临界区
2021-08-10 21:16:50
101
原创 并发模型问题
前置知识: 系统调用:只是用户态进入内核态的一种方式,还有中断,异常,就是系统提供给用户做特权指令的接口 1.内核态 .2用户态 与之对应的进程的陷入和下沉 特权指令 非特权指令 如何切换,切换有成本嘛? 复制拷贝的成本 高级IO: 1.IO多路复用(本质上是异步IO) 避免NIO的多次轮询 select :去内核里面统计(返回多少个就绪事件,从头到尾找)涉及好几次内核拷贝】,容易被信号中断->pselect引入了系统信号集 int select(int nfds,fd_setreadfds,
2021-08-10 19:05:00
233
原创 高并发设计
高并发设计的基本方法: 1.横向扩展:买更多的服务器,更多的CPU(32C) 2.异步处理:把同步等待的时间转为并发执行 3.使用缓存:本质上会缓解磁盘和CPU之间的速差,提高效率 4.高并发系统的演进应该是循序渐进,以解决系统中存在的问题为目的和驱动力 分层设计: MVC框架: M是模型 V是用户界面 C:业务逻辑 与表现层,逻辑层和数据访问层相对应 分层的好处: 简化系统设计:不同人的关注某一层 分层可以有更高的复用性 更容易做横向扩展‘ 不足: 增加了代码的复杂度 每个层次独立部署,层次间通过网络来
2021-08-09 23:28:43
463
原创 左值和右值
条件编译: 可以用宏定义或者 模板+constexptr template<typename T> void test(T t){ if constexptr (std::is_name<T,A>{}){ t.test(); }else if constexptr(std::is_name<T,B>{}){ T.testB(); } } test(A{}); test(B{}); nullptr->指针类型
2021-08-08 22:32:27
170
原创 动态多态和虚函数
虚函数: #include<iostream> using namespace std; class Animal{ public: //c++中可以用纯虚方法做接口 virtual void run(){ cout<<123<<endl; } virtual void eat(){ cout<<123<<endl; } virtual void say(){ cout<<123<<endl; } void atio
2021-08-08 17:45:18
99
原创 继承的问题
继承: 面向对象最重要的概念 :依据一个类来定义拎一个类 class Derived ::Base,这就是一个私有继承 继承类的存储结构: 虚方法->重载 虚函数表->8个字节 j 提示:这里可以添加要学的内容 例如: 1、 搭建 Java 开发环境 2、 掌握 Java 基本语法 3、 掌握条件语句 4、 掌握循环语句 学习时间: 提示:这里可以添加计划学习的时间 例如: 1、 周一至周五晚上 7 点—晚上9点 2、 周六上午 9 点-上午 11 点 3、 周日下午 3 点-下午 6 点
2021-08-08 11:39:39
110
原创 C++多态-重载
C++多态-重载: 提示:这里可以添加学习目标 例如:一周掌握 Java 入门知识 学习内容: 提示:这里可以添加要学的内容 例如: 1、 搭建 Java 开发环境 2、 掌握 Java 基本语法 3、 掌握条件语句 4、 掌握循环语句 学习时间: 提示:这里可以添加计划学习的时间 例如: 1、 周一至周五晚上 7 点—晚上9点 2、 周六上午 9 点-上午 11 点 3、 周日下午 3 点-下午 6 点 学习产出: 提示:这里统计学习计划的总量 例如: 1、 技术笔记 2 遍 2、CSDN 技术博客
2021-08-07 17:46:06
127
原创 封装总结
封装总结: staic ->类属性和类方法,这样就与类进行了绑定了 没有this指针,跟着类走的 static int s_count; int People:????_count=123;//此时才分配内存空间 私有化构造函数,设置静态函数来调用构造方法 :安全,降低内存管理的难度(创建时可以放入一个内存池进行管理) class Mysort{ static void sortInsert(){ cout<<"1223"<<endl; }
2021-08-06 22:50:41
105
原创 封装-构造和析构
封装-构造和析构: 类的实例化: 构造函数/析构函数: 1.默认构造函数 2.有参构造函数 3.拷贝构造函数 4.移动构造函数 4.析构函数 没有返回值 使用初始化列表初始化可以节省cpu的消耗,效率高 分配内存->匹配构造函数->初始化列表初始化->进入大括号才能类对象还未构造完成(此时才能用this指针) delete->调析构函数->执行析构函数体->释放内存 int n=1; int m(1); C++11的写法int k{1};都是调用构造函数 int类型的可以
2021-08-05 23:41:59
83
原创 高并发服务器
echo高并发服务器: 连接: epoll使用mmap做内存映射,实现更高效的拷贝: 时间复杂度为0(1); 主要对fdset的拷贝, select中从1024-2048 OPEN_MAX FDSETSIZE ulimit-a ->65535 cat /proc/sys/fs/file-max 782584 cd /etc vi sysctl.conf 可以对内核参数的设置 netstat -alnt |grep 9001查找端口是否打开 单线程/单进程:可以利用非阻塞的IO(NIO)或者
2021-08-03 23:39:29
128
原创 封装-类和对象
封装-类和对象: 类和对象: 对比类型和变量 可以分为动态部分(变量的计算)和静态部分(变量的存储) Cat cat//栈空间 Cat* cat=new Cat();//堆空间 内存空间:代码区,常量区,堆区,栈区 类占用多少个字节 只关注静态部分->类的成员属性 虚函数->创建一个8个字节的虚函数表 使用#pragma pack(1)可以取消内内存对齐:通讯协议序列化和反序列化时用 让方法跟着类走 此时对象则通过this指针来调用方法 say(people*this,string word){
2021-07-31 11:39:54
77
原创 C到C++
C到C++: 1.C++应用场景 提示:这里可以添加学习目标 例如:一周掌握 Java 入门知识 学习内容: 提示:这里可以添加要学的内容 例如: 1、 搭建 Java 开发环境 2、 掌握 Java 基本语法 3、 掌握条件语句 4、 掌握循环语句 学习时间: 提示:这里可以添加计划学习的时间 例如: 1、 周一至周五晚上 7 点—晚上9点 2、 周六上午 9 点-上午 11 点 3、 周日下午 3 点-下午 6 点 学习产出: 提示:这里统计学习计划的总量 例如: 1、 技术笔记 2 遍 2、CS
2021-07-31 10:12:24
78
原创 动态规划
动态规划: 1.最优子结构(大问题分解出小问题) 2.无后效应 求解步骤 1.观察:大问题与小问题的联系 2状态定义:数组如何定义 3.推导状态转移方程 4.初始化 leetcode322 零钱兑换 class Solution { public: int coinChange(vector<int>& coins, int amount) { vector<int>ans(amount+1,INT_MAX /2); ans[0]=0;
2021-07-31 00:04:09
187
原创 线段树
线段树: 线段树或前缀树都可以来求区间和 线段树:log(n),适用于修改 使用懒标记用作修改 题目描述 给定一个 n 位数组和两种操作: 操作1:数组中某个区间的所有数字加上一个值 操作2:查询数组中某个区间的所有数字之和 输入 第一行输入两个整数 n,m(1≤n≤10000,3≤m≤100000),分别代表数组大小和操作数。 第二行包含 n 个整数,代表数组中相应的数字,数字大小不会超过 int 表示范围。 接下来 m 行,每行三个或四个整数 a,b,c,d(a∈[1,2])
2021-07-30 00:12:41
98
原创 树的问题2
树的问题2: 二叉树的前序遍历 morris遍历//非递归式遍历法 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), l
2021-07-28 22:26:08
117
原创 树的问题
树的问题: 由树的前序和中序推出后序 #include<iostream> #include<cstring> #include<vector> #include<queue> #include<cmath> #include<stack> #include<cstdio> #include<algorithm> using namespace std; char front[105],mid[105]; voi
2021-07-28 00:27:36
110
原创 拓扑排序
拓扑排序: 不断取出入度为0的点,拓扑排序因此不唯一 #include<iostream> #include<cstring> #include<vector> #include<queue> #include<cmath> #include<stack> #include<cstdio> #include<algorithm> using namespace std; struct edge{ int
2021-07-27 00:48:40
439
原创 最小代价生成树
最小代价生成树: 针对图的概念: 1.生成树中的边的数量为节点数减1 2所有剩余边权加在一起最小的生成树 Kruskal算法: 1 使用并查集: 2 以边排序 //最小生成树模板 #include<iostream> #include<algorithm> using namespace std; struct edge{ int s,e,v; bool operator<(const edge &b)const{ return this
2021-07-25 21:02:57
182
原创 链表问题
链表问题: 涉及头节点的需要设计虚拟头节点来完成 //删除链表的倒数第N个节点,采用两个指针来完成判断 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} *
2021-07-25 18:17:36
304
1
原创 二维数组的前缀和
二维数组的前缀和: class NumMatrix { public: int n,m; vector<vector<int> >sum; NumMatrix(vector<vector<int>>& matrix) { n=matrix.size(),m=matrix[0].size(); sum=vector<vector<int> >(n,vector<int>(m
2021-07-25 16:11:39
193
原创 图的最短路径算法
图的创建和遍历算法图的邻接矩阵的创建图的邻接矩阵创建代码`.Floyd算法dijkstra算法链式前向星总结 图的邻接矩阵的创建 图的创建方式有多种,这里选择邻接矩阵的创建方式。 图的邻接矩阵创建代码`. #include<iostream> #include<string> #include<vector> using namespace std; int arr[105][105],n,m; int main(){ cin>>n>>m;
2021-07-24 20:03:26
283
原创 IPython和Jupyter
IPython和Jupyter Ipython是一个交互式计算系统 可通过pip install ipython 安装,它具有自动补全,内省,快捷键,魔术方法,粘贴和使用Ipython进行调试等功能 Jupyter Notebook是个计算交互笔记本 拥有更优美的界面 ...
2019-11-10 22:26:13
96
原创 CSDN如何写博客
目录2019.11.9记 2019.11.9记 pyTorch的核心是两个主要特征: 1.一个n维张量。类似于numpy,但可以在Gpu上运行,numpy不能利用GPU来加速其数值计算,不能满足当代深度学习的需求 2搭建和训练神经网络时的自动微分/求导机制 numpy.dot() 和 x.dot(y) 为矩阵乘法计算 np.max([-2, -1, 0, 1, 2]) 2 np.max...
2019-11-09 21:38:05
334
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人