自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 一个进程到底可以创建多少个线程

一个进程拥有的进程数

2022-07-29 16:53:58 1676 1

原创 TCP的四大缺陷总结

TCP的缺点问题详解

2022-07-28 21:57:58 1670

转载 NTP的使用方法

ntp使用方式

2022-07-26 21:38:14 1704

原创 TCP/UDP 相关的端口问题详解

TCP/UDP相关端口问题详解

2022-07-26 21:25:42 2419

原创 redis系列之哨兵模式

为什么要有哨兵呢?

2022-07-13 22:45:47 605

原创 redis集群之主从复制

主从复制

2022-07-13 21:26:58 753

原创 持久化之RDB快照

持久化之RDB快照和混合持久化

2022-07-12 13:06:28 95

原创 AOF 复写

AOF复写机制

2022-07-12 09:50:41 337

原创 redis持久化之AOF持久化

redis Aof持久化

2022-07-11 22:39:54 288

原创 缓存穿透详解

缓存穿透详解

2022-07-11 21:44:13 262

原创 缓存击穿详情

缓存击穿相关知识

2022-07-11 21:30:20 82

原创 缓存雪崩详情

redis 缓存雪崩介绍

2022-07-11 21:19:12 126

原创 设计模式(三)之结构性设计模式

结构性设计模式

2022-06-11 17:46:44 93

原创 设计模式(二) 之创建型设计模式

设计模式之创建型设计模式

2022-06-11 15:16:24 82

原创 设计模式(一)之设计原则

设计模式之设计原则

2022-06-11 14:32:43 74

原创 海量去重的hash和布隆过滤器

海量查询数据 所 引出来的效应

2022-06-10 23:44:57 177

原创 dpdk 的环境配置搭建

配置dpdk程序的编译运行前的环境

2022-06-04 16:54:07 1016

原创 环形队列的原理介绍及其代码实现

环形队列的这种数据结构,应用在很多框架的底层,高效简洁

2022-06-04 16:10:53 2252

原创 redis 详解之持久化方案

1 redis为什么需要持久化redis属于kv形式的内存数据库,如果redis-server 突然宕机,那么redis数据库中的数据就会全部丢失,因此需要持久化来保证redis的数据不会因为redis-server发生故障而丢失,并且再redis重启的时候可以将持久化的文件中的数据重新加载到内存中存储。2 redis.conf 关于持久化的相关配置###### aof ####### redis.cnfappendonly noappendfilename "appendonly.aof"#

2022-05-20 11:37:41 541

转载 linux之fork函数父子进程与写时复制

1fork 函数用法1.1 简单的代码示例#include<stdio.h>#include<string.h>#include<stdlib.h>#include<unistd.h> void main(){ char str[6]="hello"; pid_t pid=fork(); if(pid==0) { str[0]='b'; printf("子进程中str=%s\n"

2022-05-18 01:07:10 592

原创 Redis存储结构描述

1 redis 存储结构1.1 redis 存储结构大致框架1.3 部分的redis源码展示说明redis中数据库的结构定义16个数据库由一个数据库对象指针管理,在redis-server的时候,dbnum默认值是162 redis 存储转换此图已经概括了redis中五种数据类型的全部底层数据结构的划分和存储转换3 redis的底层数据结构描述3.1 string3.1.1 int字符串长度小于等于20 ,并且能够转成整数。string 数据类型有一个位图的功能,但是存

2022-05-18 00:32:16 1979

原创 MySQL事务原理分析(1)之事务介绍与ACID特性

文章目录1 事务的介绍1.1 事务的目的1.2 事务的组成1.3 事务的特征1.4事务控制语句2 事务的ACID 特性原子性(A)隔离性(I)持久性(D)一致性(C)1 事务的介绍1.1 事务的目的事务将数据库从一种一致性状态转换为另一种一致性状态1.2 事务的组成事务可由一条非常简单的SQL语句组成,此时MySQL默认这是一条隐含的事务。不需要程序员手动的执行事务的开始语句和事务的提交语句。也可以由一组复杂的SQL语句组成,需要程序员手动执行事务。1.3 事务的特征在数据库提交事务时,可以

2022-05-09 22:40:00 94

原创 MySQL之索引详解

文章目录1 mysql中索引的介绍1.1 什么是索引1.2 索引的优缺点1.2.1 优势1.2.2 劣势1.3 索引的类型1.3.1 聚集索引1.3.2唯一索引1.3.3 普通索引1.3.4 组合索引1.3.5 全文索引1.4 主键索引的选择1.5 约束1.5.1外键约束1.5.2 约束和索引之间的区别2 mysql中的B+树2.1 mysql为什么要用B+树数据结构3 索引实现3.1索引存储3.2关于索引B+树的层高问题3.3聚集索引和辅助索引3.4innodb的体系结构3.4.1 buffer pool

2022-05-08 14:40:03 388

原创 MYSQL之数据库设计范式和高级查询

文章目录1 数据库设计范式范式一范式二范式三反范式高级查询基础查询条件查询范围查询判空查询模糊查询分页查询查询后排序聚合查询分组查询1 数据库设计范式为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。范式一确保每列保持原子性;数据库表中的所有字段都是不可分解的原子值;例如:某表中有一个地址字段,如果经常需要访问地址字段中的城市属性,则需要将该字段拆分为多

2022-05-04 18:57:36 692

原创 Mysql体系结构

MySQL 体系结构1 connectors /连接者、连接器帮助不同计算机语言的代码程序和mysql服务器进行交互的部分。可以帮助mysql兼容不同计算机语言的连接。2 连接池/Connection PoolMySQL 采用的是 Select 和阻塞IO的模式应对mysql客户端的连接。首先当select检测到有mysql连接到服务端,给这条连接分配一个clientid,然后为这条连接分配一个线程池的线程,如果线程池的线程没有了,此时这个连接陷入阻塞,直到线程池中有线程。所以一般mysq

2022-05-03 12:00:26 692 1

原创 内存池原理以及代码实现简易版内存池

内存池的应用及其必要性应用场景当客户端连接上服务端的时候,服务端会准备一部分的堆区用来做消息保留。当一个连接成功之后,服务器会在堆区为其分配一段属于这个连接的内存,当连接关闭之后,所分配的内存也随之释放。但是当连接量较大且过于频繁时,不可避免地对内存进行频繁的分配和释放。这会导致堆区出现小窗口,也就是堆区碎片化。1 全局的内存池 用jemalloc或者tcmalloc 开源封装好的2 一个链接做一个内存池 这种场景,链接的生命周期没有那么长,小块没有必要回收3 每一个消息做

2022-04-25 17:18:55 677

原创 内存地址对齐和posix_memalign函数

内存地址为什么需要对齐?例如int a的地址是0x00fffff3,则其字节分布在0x00fffff3~0x00fffff6空间内,为了读取这个int,cpu必须对0x00fffff0和0x00fffff4进行两次内存读取,并处理得出的中间结果。两次内存访问将会浪费大量的时间,因为内存访问的速度远小于CPU处理指令的速度。比如计算一个结构体的大小struct example{ char a; short b; int c; float d; double

2022-04-25 11:55:43 612

原创 内存泄露检测方案和代码实现

文章目录1 内存泄露核心及原因2 内存泄露的危害3 常用的检查内存泄露的工具4 内存泄露检测的4种方案和代码实现内存泄露检测围绕两个问题解决定位到代码中行的方法方法1方法2方法3 (此方法不推荐使用,编译时也会出现不推荐使用的编译警告)(了解即可)方法4总结1 内存泄露核心及原因 内存泄露(C/C++) 涉及函数: 1 malloc/calloc/relloc new 2 free delete 其核心是 有分配没有释放 内存分配和释放没有做到匹配2 内存泄露的危害

2022-04-24 13:07:55 1122

原创 手撕分布式死锁检测和规避代码

文章目录导读1死锁的构建2pthread 加锁过程中的hook3 图的构建4 三个原语操作6手撕死锁检测代码导读发生死锁时,进程永远不能完成,系统资源被阻碍使用,以致于阻止了其他作业开始执行。在讨论处理死锁问题的各种方法之前,我们首先深入讨论一下死锁特点。死锁,是指多个线程或者进程在运行过程中因争夺资源而造成的一种僵局,当进程或者线程处于这种僵持状态,若无外力作用,它们将无法再向前推进。如下图所示,线程 A 想获取线程 B 的锁,线程 B 想获取线程 C 的锁,线程 C 想获取线程 D 的锁,线

2022-04-21 18:21:22 417

原创 用户协议栈之协议设计

文章目录前序七层模型应用层表达层会话层传输层网络层数据链路层物理层netmap(此次文章的重点,手撕代码的实现)拷贝与零拷贝手撕用户协议栈设计代码(展示关键代码)从抓取的数据提取用户数据发现问题arp协议的工作内容arp 协议arp攻击arp协议协议头arp协议解析源码链接前序网络协议栈 内核已经实现了。站在一个设计者的角度,我们需有必要深入理解如何实现的,自己去实现协议栈可以更好的学习网络协议方面的知识和验证网络协议理论知识七层模型应用层网络服务与最终用户的一个接口。协议有:HTTP FT

2022-04-20 10:31:47 2412

原创 手把手设计实现epoll

前序Epoll 是 Linux IO 多路复用的管理机制。 作为现在 Linux 平台高性能网络 IO 必要的组件。所有的linux服务器底层全部用的epoll linux在以前只能做嵌入式设备,但是自从有了epoll的存在,就有了linux可以用来做服务器1 epoll本身的数据结构epoll本身只用到了两种数据结构1 所有的fd总集合 红黑树epoll和poll的一个很大的区别在于,poll每次调用时都会存在一个将pollfd结构体数组中的每个结构体元素从用户态向内核态中的一个链表节点拷

2022-04-11 23:43:26 499

原创 TCP的可靠性传输

1 TCP的消息格式由于网络层(IP层)是没有可靠传输机制的,尽自己最大的努力进行交付。而传输层使用 TCP 实现可靠传输。TCP保证可靠性传输的机制依靠一下几种1)校验和2)序列号和确认应答机制3)重传机制4)滑动窗口5)流量控制6)拥塞控制2 校验和所谓 TCP 的校验和就是由发送端计算待发送 TCP 报文段的校验和,然后接收端对接收到的 TCP 报文段验证其校验和(TCP 的校验和是一个端到端的校验和)。其目的是为了发现 TCP 的协议头和数据在发送端.

2022-03-18 18:50:01 1044

原创 Redis系列之redis命令详解及其原理

目录Redisredis应用场景安装编译&&启动redis 存储结构Redis的五种数据结构stringstring基础命令string的存储结构redis中string数据类型的应用listlist基础命令list存储结构list应用hsah基础命令存储结构应用set基础命令存储结构应用zset基础命令存储结构应用Redisredis(Remote ...

2022-03-03 09:42:10 279

原创 redis,memcached,nginx网络组件

1 梳理reactor网络编程2 编程细节 (返回值以及错误码)连接的建立分为两种:服务端处理接收客户端的连接,服务端作为客户端连接第三方服务;int clientfd = accept(listenfd, addr, sz);int connectfd = socket(AF_INET, SOCK_STREAM, 0);int ret = connect(connectfd, (struct sockaddr *)&addr, sizeof(addr));errno = E

2022-02-15 21:55:08 1513

原创 websocket协议与服务器实现

1 什么是websocketWebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocket API也被W3C定为标准。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输原理很多网站为了实现推送技术,所用的技术..

2022-02-14 09:43:27 1593

原创 网络IO的基础知识

本期笔记大纲1 TCP 的服务器和客户端的函数调用2 UDP如何实现服务器的并发3 socket 的解释4 sigio的具体实现5 select poll 和epoll的具体原理目录1 TCP 的服务器和客户端的函数调用TCP服务器的函数调用TCP客户端的函数调用2UDP如何实现服务器并发3 socket的解释4 sigio的具体实现 1 进程的信号集合是如何保存的 2 当我们调用signal这个函数的时候如何将对应的信号保存...

2022-02-02 18:22:51 2314

原创 Effective C++ node1

最近空闲下来的时候就会看下书补充一下知识,并做好笔记。最近准备细读一下effective C++这一本书,以前总是囫囵吞枣的看,所以想抽时间把这本书细看玩并且做好笔记以便自己随时查看以及和大家分享!今天C++是一个多重泛型编程语言,一个同时支持过程形式、面向对象形式、函数形式、范型形式、无编程形式的语言。这些能力和弹性使得C++成为一个无可匹敌的工具,但也可能引起某些迷惑:所有“适当用法”似乎都有例外。我们该如何理解这样一种语言呢?最简单的方法就是将C++视为一个由相关语言组成的联邦而不是单一..

2021-12-15 23:24:35 670

原创 服务器百万并发连接的实现

服务器的并发量并发量:一个服务器能够承载客户端的数量,并且能够稳定的维护客户端。承载:客户端发一个请求,服务端能够在200ms内能够返回结果1 数据库2 网络带宽3 内存操作4日志都是承载需要考虑的因素。服务器能够同时建立的连接数量 就是服务器的并发量这种书法是错误的。连接数量只是服务器并发量的一个基础或者说是前提。测试:测试环境:ubuntu16.04sockfd->fd(五元组)fd 是文件描述符和(sip dip spport dp.

2021-11-11 17:43:18 1775

原创 红黑树的实现

我将从下面几个 方分析红黑树1 红黑树的应用场景2红黑树的数学证明与推导3 手撕红黑树的左旋与右旋4红黑树添加的实现与添加三种情况5 红黑树删除的实现与删除四种情况6 红黑树的线程安全的做法7 分析红黑树工程实用的特点1 红黑树的应用场景红黑树主要有两种应用方向 1 红黑树的中序遍历是有序的。 2 红黑树存储的数据是key-value1 Linux进程调度CFS 利用红黑树的中序遍历有序2 Nignx Timer事件管理 利用红黑树的...

2021-10-18 15:06:36 218

原创 用户态协议栈之epoll实现

Epoll 是 Linux IO 多路复用的管理机制。作为现在 Linux 平台高性能网络 IO 必要的组件。内 核的实现可以参照:fs/eventpoll.c .在实现 epoll 之前,先得好好理解内核 epoll 的运行原理。内核的 epoll 可以从四方面来理解。 1. Epoll 的数据结构,rbtree 对<fd, event>的存储,ready 队列存储就绪 io。 2. Epoll 的线程安全,SMP 的运行,以及防止死锁。 3. Epoll 内核回调。

2021-10-14 11:22:12 191

空空如也

空空如也

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

TA关注的人

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