- 博客(86)
- 收藏
- 关注
原创 go 源码篇(三)CSP GMP Channel
1goroutine原理1.1基本概念并发:一个CPU上能同时执行多项任务,在很短时间内,CPU来回切换任务执行(在某段很短时间内执行程序a,然后又迅速得切换到程序b去执行),有时间上的重叠(宏观上是同时的,微观仍是顺序执 行),这样看起来多个任务像是同时执行,这就是并发。并行当系统有多个CPU时,每个CPU同一时刻都运行任务,互不抢占自己所在的CPU资源,同时进行, 称为并行。进程CPU在切换程序的时候,如果不保存上一个程序的状态(context–上下文),直接切换下一个程 序,就会丢失
2021-02-16 19:54:40
606
原创 Redis面试
一、Redis的过期策略以及内存淘汰机制?1、过期策略\color{green}{1、过期策略}1、过期策略reids采用的是定期删除+惰性删除策略为什么不用定时删除策略?定时删除:用一个定时器来负责监视key,过期则自动删除,虽然内存及时释放,但是十分消耗CPU资源。在大并发请求下,CPU要将时间应用在处理请求,而不是删除key,因此没有采用这一策略。定期删除+惰性删除时如何工作的?定期删除:redis默认每隔100ms检查,是否有过期key,有过期的key则删除,需要注意的是,re
2020-09-21 22:28:39
167
原创 STL容器使用
文章目录1std::string1.1生成一个std::string对象1.2查询std::string的长度1.3查询std::string的元素1.4两个std::string的比较1.5修改和替换std::string1.6增加字符到std::string中1.7std::string的输入输出1.8std::string的查找1.9std::string中迭代器的几种特殊用法2std::vector2.1std::vector的创建2.2std::vector的size(大小)和capacity(容
2020-09-09 23:21:55
497
原创 Git使用
1基本概念仓库 :Repository收藏:star复制克隆项目:fork发送请求:Pull request关注:watch事务卡片:Github主页:仓库主页:个人主页:2创建管理仓库新建文件
2020-07-23 10:12:54
513
1
原创 redis常见问题
1缓存预热1.1出现的问题1.2问题分析1.3解决方案1.4总结2缓存雪崩2.1出现的问题2.2问题分析、2.3外部解决方法2.4内部解决方法2.5总结3缓存击穿3.1出现的问题3.2问题分析3.3解决方案3.4总结4缓存击穿4.1出现的问题4.2问题排查和分析4.3解决方案4.4总结5性能指标监控5.1监控指标5.1.1性能指标5.1.2内存指标5.1.3基本活动指标5.1.4持久化指标5.1.5错误指标
2020-07-06 23:22:25
334
原创 最全redis集群(三)
文章目录1主从复制1.1主从复制简介1.1.1 首先了解什么是互联网“三高”架构1.1.2单个redis的风险和问题1.1.3多台服务器的连接方案1.1.4主从复制的概念1.1.5主从复制的作用1.2主从复制的工作流程1.2.1第一阶段:建立连接阶段1.2.1.1工作流程1.2.1.2搭建方式1.2.1.3客户端断开连接1.2.1.4授权访问1.2.2第二阶段:数据同步阶段1.2.2.1工作流程1.2.2.1 注意事项(master和slave)1.2.3第三阶段:命令传播阶段1.2.3.1第三阶段的部分复
2020-07-06 11:27:07
157
原创 最全redis高级(二)
1启动redis的3种方式第2 3 种都可以·1通过改端口号来启动多个redis服务端1.1自动启动redis-serverredis-cli1.2指定端口启动1.3指定配置文件启动配置文件服务端启动客户端连接日志部分2持久化2.1持久化简介2.2RDB2.2.1save指令启动客户端连接执行一下save命令 配置文件和上方一样- 根据配置文件的设定 在服务文件保存的目录中生成rdb文件 这个文件中存放save命令所得到的快照 这个快
2020-07-05 14:34:52
142
原创 shell编程
文章目录1基本语法1.1 变量1. 2文件名代换1.3 命令代换符1.4算术代换1.5转义字符 \ 和 --1.6单引号双引号1.7数据类型2shell脚本语法2.1条件测试2.2分支语句2.2.1if2.2.2case2.3循环2.3.1for/do/done2.3.2while/do/done2.3.3break/continue2.4位置参数 和特殊变量2.5输入输出2.6函数2.7shell脚本调试方式3正则表达式3.1基本语法3.1.1字符类3.1.2数量限定符3.1.3位置限定符3.2grep命
2020-06-26 14:45:34
150
原创 mysql数据库---事务
事物发生在什么时候事物开始1:自动开始show global variables like “autocommit”;//no:表示 事物默认提交 不用commit也可以提交set session autocommit=off;2:手动开始begin :可以手工开始一个事务结束事物commit rollback一个事务持有的锁在其事物结束时才会释放 或者客户端连接中断事物并发...
2020-05-13 00:13:52
122
原创 可靠数据传输协议特点(确认应答,超时重传,发送序号,流量控制,拥塞控制)
文章目录1确认应答1.1问题1.2解决思路1.3解决方案2超时重传2.1问题2.2解决方案3发送序号3.1问题3.2解决方案4滑动窗口(流量控制)5拥塞控制5.1拥塞概念5.2 拥塞控制的概念5.2.1基本概念5.2.2超时重传的概念5.2.3拥塞控制的步骤5.3拥塞控制方法5.3.1慢开始5.3.2拥塞避免5.3.3快重传5.3.4 快恢复5.4总结1确认应答1.1问题实际信道不能保证处...
2020-05-03 19:40:04
833
原创 面试总结--数据结构部分部分
B+和B树的区别和应用1:B+树的通过链表把非叶子节点连成了一串,提高区间访问能力(适用于范围查找) B树就没有,所以B树不适合范围查找。2:B+树非叶子结点不存储data 只存储索引沉余 是可以为了一个结点可以存储更多的索引,而b-树每个结点都会存储data,所以b树存储的所以就少于B+树3:B+叶子结点包含所有的结点4:B+树的每个结点的指针和关键字数相等,因为每个关键字都有相对应的指...
2020-05-03 18:11:42
91
原创 面试部分----操作系统部分(linux)
内存管理:1:连续分配管理方式1:固定内存分配:缺乏灵活性 ,会产生大量内部碎片 内存的利用率低2:动态内存分配 产生外部碎片。 可以通过紧凑技术来解决但是耗时大2:非连续分配管理方式1:基本分页存储管理2:基本分段存储管理3:段页式存储管理...
2020-05-03 18:11:04
144
原创 面试部分----计算机网络+网络编程
1为什么是2MSL概念: 2MSL:Maximum Segment Lifetime英文的缩写,中文可以译为“报文最大生存时间”为了保证客户端发送的最后一个ACK报文段能够到达服务器。因为这个ACK有可能丢失,从而导致处在LAST-ACK状态的服务器收不到对FIN-ACK的确认报文。服务器会超时重传这个FIN-ACK,接着客户端再重传一次确认,重新启动时间等待计时器。最后客户端和服务器...
2020-05-03 18:10:39
111
原创 面试部分---------数据库问题
1三大范式Mysql(约束)数据库的三大范式:设计数据库时所要遵循的规范 避免数据库的沉余案例-1.0基本概念:函数依赖:A–>B 如果 通过A属性(属性组)的值 可以唯一确定B的属性的值 则称:说明B依赖A 如 学号–依赖–> 姓名 (学生,课程名称)(属性组)–>分数完全函数依赖A–>B 如果A是一个属性组 则B的确定需要依赖A属性组中所有的属性值...
2020-05-03 01:01:40
107
原创 STL----map容器
1基本概念2map常用函数2.1构造函数2.2赋值操作2.3大小操作2.4插入删除操作2.5删除元素2.6map查找元素2.7实例#include<iostream>#include<map>using namespace std;void Printf(map<int,int>& m){ for(map<i...
2020-04-13 09:23:49
89
原创 STL----set容器
1概念set键值自动排序、键值唯一set的迭代器不能改变set1的值 所以其迭代器就是只读迭代器set和list一样 当对元素进行插入删除的操作之后 操作之前的所有迭代器都有效 被删除的元素除外multiset可以有相同的key值两种的底层实现都是红黑树2常用函数2.1构造函数2.2赋值函数2.3大小2.4 插入和删除2.5 查找...
2020-04-13 09:22:50
82
原创 STL----- list容器
1概念双向循环列表list的迭代器:list的迭代器是指向list节点的 并有能力进行正确的递增递减去值等:双向迭代器:list的插入删除不会造成list迭代器失效 但是在vector中插入可能导致空间重新配置 导致原有的迭代器全部失效 删除会导致后面的元素前移 并后面的迭代器失效 ,但是vector进行插入删除时回返回有效的迭代器2常用成员函数2.1构造函数2.2元素插入...
2020-04-13 09:21:10
110
原创 STL -- vector容器
1概念动态数组vector 的实质配置空间大小比客户需求要大,一旦容量等于大小 便是满载 下次在有新增就得另寻他所。注意:所谓的动态增加并不是在原有的空间上续接新的空间而是申请一个更大的空间,然后将数据考过去。并释放原空间因此对vector的任何操作 一旦引起空间的重置 指向原vector的所有的迭代器就失效了2常用函数2.1构造函数2.2vector常用赋值操作2...
2020-04-13 09:19:16
99
原创 linux网络--基础配置命令
1修改主机名1.1临时方法//查看主机名[root@oidboy home]# hostnameoidboy[root@oidboy home]# hostname lvke[root@oidboy home]# hostnamelvke要退出当前的shell‘才生效 但是重新开机就失效了1.2永久方法1.2.1方法1步骤1修改配置文件[root@oidboy h...
2020-04-09 20:16:09
439
原创 C++ -----文件IO
文章目录1流的概念1.1流分类2流对象2.1分类2.2流对象状态2.3标准输入2.3.1 成员函数2.4标准输出2.4.1流对象有关的成员函数2.4.2控制符方法3文件流1流的概念流:数据从一个对象到另一个对象的传输。功能:标准输入输出+文件处理1.1流分类标准库定义了三大类流类型:标准I/O流、文件流、字符串流2流对象2.1分类通常标准I/O流对象是全局对象不需要定义...
2020-03-25 22:23:11
104
原创 oracle数据库----DML语句(查询select(where,order by ))
1基本查询1.1语法格式1.2案例查询所有员工记录- select * from employee;查询员工号 姓名 月薪- select id, name,salary from employee;使用别名查询员工号 姓名 月薪- select id as 员工号, name 姓名,salary 月薪,salary*12 年薪 from employee;...
2020-03-24 21:57:30
456
原创 c++ --异常
文章目录1概念1.1基本思想:1.2特点1.3语法1.4C语言措施1.5示例2其他知识点2.1自定义异常类2.2栈解璇2.3异常接口说明2.4异常变量的声明周期3标准异常类1概念1.1基本思想:让一个函数发现自己无法处理的的错误抛出一个异常 然后将它的调用者能够处理这个函数,将问题检测和问题处理分离异常处理就是:处理程序中的错误 所谓错误是指在程序运行的过程中发生的一些异常事件(IO溢...
2020-03-24 21:56:37
136
原创 STL容器--stack
1特点先进后出不能进行遍历不支持随机存储,只能从栈顶获取和插入元素没有迭代器2常用API2.1构造函数2.2stack赋值操作函数2.3stack数据存储操作2.4stack大小操作3代码使用#include<iostream>#include<stack>using namespace std;void tses1(){ //初...
2020-03-23 22:59:48
80
原创 STL容器--queue
1概念先进先出不能进行遍历不支持随机存储,只能从队尾插入 对头获取元素没有迭代器2常用API2.1构造函数2.2stack数据存储函数2.3stack赋值操作函数2.4stack大小函数3代码#include<iostream>#include<queue>using namespace std;void test1(){ queue...
2020-03-23 22:59:15
70
原创 数据结构--B树(B- ,B+, B*)
1B-树1.1概念平衡的多路查找树 ,我们把树中结点最大的孩子数目称为B树的阶 通常记为m1.2特性一个m阶的B-树满足以下特性:书中每颗结点至多有m棵子树,至多有m-1个关键字若根节点不是终端结点,至少有2棵子树除根节点外的所有非叶子结点至少有[M/2](维护平衡的性质)棵子树(判断树根是否要分裂的关键)非叶子结点至少有[m/2]-1个关键字所有的叶子结点都出现在同一层次,...
2020-03-23 22:58:50
147
原创 libevent网络库--bufferevent
1概念1.1原理bufferevent有两个缓冲区:也是队列实现只能读一次 先进先出读缓冲: 加入读缓冲有数据,会触发读缓冲对应的回调函数,在回调函数中不再使用read函数 只能使用bufferevent_read函数写缓冲bufferevent_write()向写缓冲写数据,这个写缓冲一旦有数据,就自动刷新–发送给对端,发送成功 write_cb()回被调用 —通知写数据完成。...
2020-03-22 21:45:16
258
原创 linux网络编程--libeventw网络库
1概念1.1什么是libevent开源的高性能的事件触发的网络库,内部使用select、poll、epoll等系统调用管理事件机制基于“事件”异步通信模型–>主要依赖于回调函数1.2优点开源精简跨平台轻量级:专注于网络通信2 libevent 框架创建 :event_base;struct event_base* pBase = event_base_ne...
2020-03-22 21:44:35
227
原创 linux网络编程--本地套接字
1本地套接字和网络套接字比较本地IPC ,pipe,fifommap,信号,本地套接字(domain)–C/S模型对比网络套接字:int socket(int domain, int type, int protocol)参数domain:从AF_INET改变为AF_UNIX/AF_LOCAL其他参数和网络套接字基本一样。int bind(int socket, co...
2020-03-22 21:43:19
226
原创 linux网络编程--UDP协议
1TCP通信和UDP通信各自的特点1.1TCP本质面向连接的,可靠数据包传输,对于不稳定的网络层,采取完全弥补的通信方式,丢包重传优点稳定:数据流量稳定 速度稳定 顺序(寻路的路由节点顺序)稳定缺点每次通信之前要建立连接 所以:1:传输速度慢2:效率低3: 开销大使用场景数据的完整型要求较高,不追求效率:大数据/文件传输1.2UDP本质无连接...
2020-03-22 21:42:52
96
原创 liunx网络编程-socket(函数)
1.1创建int socket(int domain, int type, int protocol)1.1.1参数No.参数含义int socket(int domain, int type, int protocol)1domain协议域AF_INET:IPv4;AF_INET6:IPv6;AF_LOCAL:Unix域2type类型SOCK_S...
2020-03-22 21:42:24
203
原创 linux 系统编程-vim常用命令
1vim 3种模式1:命令模式2:文本输入模式3:末行模式2光标移动跳转到指定行:命令模式:行号 G末行模式:行号跳转到行首命令模式:gg跳转到行尾命令模式:G自动化程序(格式话)命令模式gg=G大括号对应(找到另一个括号)命令模式:%光标移至行尾命令模式: 03删除删除一个子符:命令模式:x(删除完模式不遍)...
2020-03-22 21:41:38
82
原创 linux 系统--gdb
1基本概念不能检查语法错误,只能检查逻辑错误2基础指令-g:使用该参数编译可执行文件,得到调试表gdb a.out:开始调试list :list 1 列出源码,根据源码指定,行号设置断点,不加行号,默认出现在上次的地方 每次显示10行b 行号:在该行号设置断点run/r:运行程序到断点n/next:下一条指令(会越过函数)s/step:下一条指令(会进入函数)p/...
2020-03-22 21:41:00
99
原创 linux系统--静态库/共享库(动态库)
1基本概念1作用分离编译代码重用2动态库和静态库的区别静态库:在可执行程序运行前就加入到执行码中,成为执行程序的一部分一个或多个.o目标文件归档在一个文件中对空间要求较低,而对时间要求较高的核心程序中动态库:在可执行程序运行启动时加入到执行程序中,可以被多个可执行程序共享使用没有main函数的可执行文件对时间要求较低,而对空间要求较高的2静态库的制...
2020-03-22 21:40:39
160
原创 linux 系统基础--gcc4步骤
1步骤预处理:展开宏 头文件 替换条件编译 删除注释空行空白编译:检查语法规范汇编:将汇编指令翻译成机器指令链接:数据段合并。地址回填2基本常用参数I 指定头文件的目录 参数位置都可c 只预处理 编译汇编 生成点o文件(2进制文件)g 编译时添加调试语句,主要支持gdb调试-On 编译优化 。n=0~3Wall 显示所有的警告信息E 生成预处理文件D 向程序中动...
2020-03-22 21:40:16
425
原创 STL --string容器
1概念1.优点string封装了char* 管理这个字符串,是一个char* 型的容器string 封装了很多实用的方法 find copy deletestring 不用考虑内存越界和释放2常用的API2.1初始化#include<iostream>#include<cstring>void tset(){ string s1; string ...
2020-03-22 21:37:36
88
原创 mysql数据库--常用API
0准备这时编译时所需要链接的库1基础函数1.1初始化分配和初始化与mysql_real_connect() 相适应的MYSQL对象如果mysql是NULL指针,该函数将分配,初始化,并返回新对象 否则将初始化对象,并返回对象地址,如果mysql_init分配了新的对象,在结束时应该调用mysql_close来关闭连接,释放新对象函数原型MYSQL *mysql_init(...
2020-03-22 21:36:47
556
原创 C++----泛式编程
1概念1.2模板概念实际上是建立一个通用函数/类,其函数/类的类型和形参类型不具体制作1.2作用类型参数化:模板可以使函数或者类只写一份代码而对应不同的类型1.3分类函数模板类模板1.4案例例#include<stdio.h>//模版技术:类型参数化template<class T>//或者写template<typename T>...
2020-03-22 21:35:58
541
原创 STL--deque容器
1概念1.1双向容器1.2原理图中间插入的和删除的操作效率低可以随机存储 效率高2常用API2.1构造函数void test1(){ deque<int> d1; //符值10个5 deque<int> d2(10,5); deque<int> d3(d2.begin(),d2.end()); deque<int> ...
2020-03-22 21:34:57
84
原创 linux网络编程-TCP协议
1通讯时序(3次握手4次挥手)1.1标志位No.报文标识英文含义1SYNsynchronous建立连接2ACKacknowledgement确认3FINfinish结束4PSHpush传送5RSTreset重置6URGurgent紧急1.2流程图1.2.1三次握手SYN 1000(0) <...
2020-03-02 23:08:09
133
原创 linux网络编程--多并发服务器(多线程、多进程)
1多进程并发服务器1.1实现思路socketBind()Listen()while(1){cfd =Accept(lfd);pthread_create(&tid,NULL,ffn,NULL);}子程序void *tfn(void *arg){close(lfd);read(cfd);//操作write(cfd);}2多线程并发服务器1.1实现思路...
2020-03-02 23:07:19
271
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人