自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 centos环境下搭建python Django框架流程

centos环境下搭建python Django框架流程

2023-03-12 10:17:37 496

原创 linux c++ gsoap如何构建服务端、多个客户端设置命名空间以及MTOM协议传输文件

使用c++ gsoap构建服务端、构建多个客户端并设置命名空间、MTOM协议传输文件

2022-11-15 16:11:59 809

原创 git安装和使用总结

安装windows版本下载:http://git-scm.com/download/win安装过程直接点击 next 直到完成安装。linux版本下载:http://git-scm.com/download/linux初次运行配置打开git命令窗口,配置全局用户名和邮箱,如果使用了--global选项,那么该命令只需要运行一次$ git config --global user.name "zhangsan"...

2022-05-30 21:42:37 152

原创 redis进阶使用

分布式锁redis实现是非公平锁,ectd、zk用来实现公平锁获取不到锁的客户端阻塞等待,阻塞连接返回set lock uuid nx ex 30 #不存在才能设置,定义加锁行为,占用锁,30s超时。或者用setnxif (get(lock) == uuid) #释放锁del(lock)非公平锁:自旋锁,独占cpu不断尝试获取锁公平锁:互斥锁,按照请求顺序得到锁阻塞连接使用list数据结构,队首入队LPUSH,用队尾弹出命令RPOP,这个命令会...

2022-04-18 16:56:12 185

原创 应用层网络

https握手客户端的TLS解析服务器发来的CA证书,先验证公钥是否有效,如颁发机构、是否过期等,有问题则提示证书存在问题;没有问题就生成一个对称加密密钥,然后用公钥对该密钥进行非对称加密发给服务器,服务端则用自己的非对称私钥解开收到的对称加密密钥,以后客户端和服务端的通信就可以通过这个密钥来进行加密解密。非对称加密公钥和私钥的使用:1)公钥加密私钥解密。2)私钥做数字签名、公钥验证。http和https的区别?http是超文本传输协议,信息数据是明文传输,端口是80,连接很简单,是无状态的

2022-03-08 11:24:18 115

原创 mysql缓存方案

数据库有哪些提升读写性能的方式?连接池 阻塞io + 线程池 异步连接,非阻塞io sql执行出发:即时执行 + 预编译执行 prepare 读写分离 缓存方案主从复制,是为了解决单点故障的问题

2022-03-08 11:23:57 253

原创 2022互联网面经(未完待续)

字节一面(2022.2.16)(55min)深信服一面(2022.2.19)(40min)shopee深圳虾皮一面(2022.2.19)(80min)腾讯互娱一面 (2022.02.22)(50min)shopee深圳虾皮一面(2022.2.23)(70min)深信服一面(2022.2.24)(46min)富途一面(2022.2.24)(70min)

2022-03-08 11:22:01 1068

原创 分布式技术

雪花算法生成的ID由哪些部分组成?时间回拨的话有可能重复符号位,占1位 时间戳,占41位,可支持69年的跨度 机器ID,占10位 序列号,占12位,一毫秒可以生成4095个ID使用分布式锁的场景?系统是一个分布式系统,集群 操作共享资源,比如库里唯一的用户数据 同步访问,即多个进程同时操作共享资源分布式锁有哪些解决方案?redis分布式锁,setnx key value ex 10s;增加键值对和设置超时需要变成一条,原子性。在删除锁时需要注意是删除自己增加的key;redisso

2022-03-02 17:25:50 67

原创 mysql事务常见问题

事务的目的:事务将数据库从一种一致性状态转换为另一种一致性状态;组成:可以由一条非常简单的SQL语句组成,也可以由一组复杂的SQL语句组成特征:在数据库提交事务时,可以确保要么所有修改都已经保存,要么所有修改都不保存;事务时访问并更新数据库各种数据项的一个程序执行单元;在MySQL innodb下,每一条语句都是事务;可以通过set autocommit = 0;设置当前会话手动提交。ACID特性:原子性(A)事务操作要么都提交要么都回滚;通过undolog记录事务每步具体操作,回滚时就

2022-02-14 00:14:54 717

原创 mysql基础

关系型数据库:mysql、SQL Server、Oracle、Sybase、postgreSQL、MS Access非关系型数据库:redis、mongodbSQL:结构化查询语言,一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。DQL:数据查询语言,如selectDML:数据操作语言,会使数据库发生变更的语句,如insert、update、deleteDDL:数据定义语言,如create、alter、dropDCL:数..

2022-02-12 21:22:11 51

原创 排序算法--C语言版

冒泡排序、插入排序、希尔排序、选择排序、快速排序、堆排序

2022-02-03 01:34:16 739

原创 简单手写线程池--代码

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <pthread.h>//双向链表的节点增加和删除用宏替换#define LL_ADD(item, list) do { \ item->prev = NULL; \ item->next = list; \ list ...

2022-01-31 00:37:13 72

原创 单例模式--代码

#include <iostream>#include <stdio.h>using namespace std;//此版本不能保证线程安全class Singleton1{public: static Singleton1* GetInstance() { if (_instance == nullptr) { _instance = new Singleton1(); a.

2022-01-31 00:17:29 65

原创 协议栈之TCP/IP

什么是零拷贝技术?例如mmap、sendfile这里不是说数据没有进行拷贝,一般的拷贝是需要cpu进行参与复制,而零拷贝不需要cpu参与,是DMA的方式来进行拷贝。sendfile的原理也是如此,从磁盘拷贝文件到网卡发送出去,这个拷贝动作cpu没有参与而是DMA的方式拷贝的。什么是DMA?DMA有专门的一块芯片...什么是netmap?什么是dpdk?...

2022-01-20 20:25:34 176

原创 c++协程

协程存在的原因?协程能够解决哪些问题?

2022-01-17 21:31:48 3306

原创 udp和tcp的可靠协议

通信双方都有两个滑动窗口,一个用于接收数据,称之为接收窗口;一个用于发送数据,称之为拥塞窗口。接收窗口越大越好吗?不是,当接收窗口达到某个值的时候,再增大的话也不怎么会减少丢包率的了,而且还会更加消耗内存。所以接收窗口的大小必须根据网络环境以及发送发的拥塞窗口来动态调整。流量控制接收方每次收到数据包,在回复ack报文时同时告诉发送方自己的缓冲区剩余量,也叫接收窗口大小,用win来表示可接收窗口的大小。发送方收到后会调整自己的发送速率,也就是调整发送窗口大小,若收到回复的win=0时发送方

2022-01-14 21:07:38 262

原创 posix api与网络协议栈

TCP三次握手listen之后内核为给定的监听套接字维护两个队列:未完成连接队列,已完成连接队列。未完成连接队列:已接受客户端的SYN分节,而且已经发送了第二个SYN分节和第一个SYN分节的ACK。已完成连接队列:在未连接基础上接收到了客户端的ACK响应,TCP3路握手完成(此时accept并没有参与)int ret = listen(int listenfd,int backlog);关于backlog参数的解析:backlog参数就是指已完成连接队列的最大个数,既然已

2022-01-09 20:55:53 110

原创 网络编程--函数返回值

int listenfd = socket(int protofamily, int type, int protocol);listenfd == -1 失败listenfd >0成功int ret =bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);ret == -1 失败ret == 0 成功int ret =listen(int listenfd,int backlog);...

2022-01-08 18:48:40 122

原创 reactor原理

Reactor释义“反应堆”,是一种事件驱动机制。把epoll的事件处理流程逆置,把对应的回调函数注册到Reactor,当事件发生时,Reactor调用回调函数函数。对高并发编程,网络连接上的消息处理,可以分为两个阶段:等待消息准备好、消息处理。Reactor 模式是处理并发 I/O 比较常见的一种模式,用于同步 I/O,中心思想是:1.先注册的相应 I/O 事件分发到对应的处理器中2.将所有要处理的 I/O 事件注册到一个中心 I/O 多路复用器上,同时主线程/进程阻塞在多路复用器上;3..

2022-01-07 22:42:17 464

原创 网络编程--select/poll/epoll代码

以下是各版tcpserver的简易实现,代码包含普通阻塞版本、一请求一线程、select、poll、epoll五种io的代码demo#include <stdio.h>#include <stdlib.h>#include <sys/socket.h>#include <sys/types.h>#include <unistd.h>#include <errno.h>#include <netinet/in.h&

2022-01-03 22:46:57 186

原创 网络编程--io多路复用

阻塞io 和 非阻塞io阻塞在哪里?阻塞在网络线程上,阻塞io操作 accept 、connect、 read、 write例如 read函数会一直等待内核态中的读缓冲区有新的数据int n = read(fd, buf, sz);1.n = 0 表示连接断开2.n < 0 errno = EWOULDBLOCK 表示读缓冲区没有数据io函数到底做了哪些事情?1.检测连接数据状态 2.操作具体ioio多路复用:会检测数据连接状态,并不操作具体的io;可以用一个线程检

2021-12-30 21:38:04 314

原创 常用的设计模式

目录创建型设计模式模板方法观察者模式策略模式结构型设计模式单例模式工厂方法抽象工厂责任链装饰器创建型设计模式模板方法定义:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。要点:最常用的设计模式,子类可以复写父类的子流程,使父类的骨架流程丰富 反向控制流程的典型应用 父类protected保护子类需要复写的子流程,这样子类的子流程只能父类来

2021-12-25 15:34:14 118

原创 设计模式--原则

设计模式是指在软件开发中,经过验证的,用于解决在特定环境下,重复出现的,特定问题的解决方案。设计模式的原则:依赖倒置、开放封闭、面向接口、封装变化点、单一职责、里氏替换、接口隔离、组合优于继承。依赖倒置:高层模块不应该依赖低层模块,两者都应该依赖抽象。抽象不应该依赖具体实现,具体实现应该依赖于抽象。开放封闭:一个类应该对扩展开放,对修改关闭。扩展的方式:组合基类指针、继承虚函数覆盖面向接口:不将变量类型声明为某个特定的具体类,而是声明为某个接口。客户程序无需获知对象.

2021-12-20 21:54:20 30

原创 虚拟内存和物理内存

操作系统有虚拟内存与物理内存的概念。为什么需要虚拟内存?物理内存是有限的,多个进程要执行的时候,都要给4G内存,很显然你内存小一点, 这很快就分配完了,于是没有得到分配资源的进程就只能等待。当一个进程执行完了以后,再将等 待的进程装入内存。这种频繁的装入内存的操作是很没效率的; 由于指令都是直接访问物理内存的,那么我这个进程就可以修改其他进程的数据,甚至会修改内核 地址空间的数据,这是我们不想看到的; 因为内存时随机分配的,所以程序运行的地址也是不正确的;虚拟内存和物理内存的联系一个进

2021-12-20 20:12:38 234

原创 redis--切片集群

11

2021-12-16 21:24:36 229

原创 redis--哨兵集群

在配置哨兵的信息时,我们只需要用到下面的这个配置项,设置主库的 IP 和端口,并没有配置其他哨兵的连接信息。sentinel monitor <master-name> <ip> <redis-port> <quorum>这些哨兵实例既然都不知道彼此的地址,又是怎么组成集群的呢?要弄明白这个问题,我们就需要学习一下哨兵集群的组成和运行机制了。基于 pub/sub 机制的哨兵集群组成哨兵实例之间通过主库可以相互发现相互连接,要归功于 Redis.

2021-12-14 22:46:18 199

原创 redis--哨兵机制

如果客户端发送的都是读操作请求,那还可以由从库继续提供服务,这在纯读的业务场景下还能被接受。但是,一旦有写操作请求了,按照主从库模式下的读写分离要求,需要由主库来完成写操作。此时,也没有实例可以来服务客户端的写操作请求了。所以,如果主库挂了,我们就需要运行一个新主库,比如说把一个从库切换为主库,把它当成主库。这就涉及到三个问题:主库真的挂了吗? 该选择哪个从库作为主库? 怎么把新主库的相关信息通知给从库和客户端呢?在 Redis 主从集群中,哨兵机制是实现主从库自动切换的关键机制,它有效地解决

2021-12-13 21:20:58 130

原创 redis--主从同步

Redis 提供了主从库模式,以保证数据副本的一致,主从库之间采用的是读写分离的方式。读操作:主库、从库都可以接收; 写操作:首先到主库执行,然后,主库将写操作同步给从库。主从库间如何进行第一次同步?当我们启动多个 Redis 实例的时候,它们相互之间就可以通过 replicaof(Redis 5.0 之前使用 slaveof)命令形成主库和从库的关系,之后会按照三个阶段完成数据的第一次同步。例如同步命令:replicaof 172.16.19.3 6379从库间数据第一次同步的..

2021-12-13 00:30:39 615

原创 Redis--持久化AOF和RDB

Redis 的持久化主要有两大机制,即 AOF(Append Only File)日志和 RDB 快照。AOF以 Redis 收到“set testkey testvalue”命令后记录的日志为例,看看 AOF 日志的内容。其中,“*3”表示当前命令有三个部分,每部分都是由“$+数字”开头,后面紧跟着具体的命令、键或值。这里,“数字”表示这部分中的命令、键或值一共有多少字节。例如,“$3 set”表示这部分有 3 个字节,也就是“set”命令。写后日志这种方式,就是先让系统执行命令,只有命令

2021-12-12 19:52:47 59

原创 redis--单线程模型阻塞点

客户端:网络 IO,键值对增删改查操作,数据库操作;磁盘:生成 RDB 快照,记录 AOF 日志,AOF 日志重写;主从节点:主库生成、传输 RDB 文件,从库接收 RDB 文件、清空数据库、加载 RDB 文件;切片集群实例:向其他实例传输哈希槽信息,数据迁移。

2021-12-12 13:50:30 81

原创 为什么单线程Redis能那么快?

我们通常说,Redis 是单线程,主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的,这也是 Redis 对外提供键值存储服务的主要流程。但 Redis 的其他功能,比如持久化、异步删除、集群数据同步等,其实是由额外的线程执行的。Redis 为什么用单线程?对于一个多线程的系统来说,在有合理的资源分配的情况下,可以增加系统中处理请求操作的资源实体,进而提升系统能够同时处理的请求数,即吞吐率。但吞吐率不会随着线程数的增加而一直提高,而是到一定数量后到达顶峰甚至会下降。因为被多线程同时

2021-12-12 13:26:27 154

原创 redis基础--底层数据结构

底层数据结构一共有 6 种,分别是简单动态字符串、双向链表、压缩列表、哈希表、跳表和整数数组。它们和数据类型的对应关系如下图所示:为了实现从键到值的快速访问,Redis 使用了一个哈希表来保存所有键值对。一个哈希表,其实就是一个数组,数组的每个元素称为一个哈希桶。哈希桶中的元素保存的并不是值本身,而是指向具体值的指针。哈希表保存了所有的键值对,所以,我也把它称为全局哈希表。哈希表的最大好处很明显,就是让我们可以用 O(1) 的时间复杂度来快速查找到键值对——我们只需要计算键的哈希值,就可以知道它所.

2021-12-12 12:50:21 202

原创 redis命令--BItmap、HyperLogLog和GEO

Redis 的 5 大基本数据类型:String、List、Hash、Set 和 Sorted Set,它们可以满足大多数的数据存储需求,但是在面对海量数据统计时,它们的内存开销很大,而且对于一些特殊的场景,它们是无法支持的。所以,Redis 还提供了 3 种扩展数据类型,分别是 Bitmap、HyperLogLog 和 GEO

2021-12-10 20:37:40 207

原创 海量数据去重的Hash与BloomFilerm/bitmap

hash函数映射函数Hash(key) = addr;hash函数可能会把两个或两个以上不同的key映射到同一地址,这种情况称之为冲突或者hash碰撞。选择hash计算速度快强随机分布(等概率、均匀地分布在整个地址空间)murmurhash1,murmurhash2,murmurhash3,siphash(redis6.0当中使用,rust等大多数语言选用的hash算法来实现hashmap),cityhash 等都具备强随机分布性;siphash主要解决字符串接近的强随机分布性,ke

2021-12-01 22:32:02 123

原创 《redis的特性》--读书笔记

简介redis是一种基于键值对(kv)的NoSQL数据库,由string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)、Bitmaps(位图)、HyperLogLog、GEO(地理信息定位)等多种数据结构和算法组成。redis可以将内存中的数据利用快照和日志的形式保存到硬盘上,这样在发生类似断电或者机器故障的时候,内存中的数据不会“丢失”。redis还提供键过期、发布订阅、事务、流水线、Lua脚本等附加功能。1、速度快执行命令的速度非常快,官方给出的数字是读

2021-11-29 01:01:58 457

原创 B树与B+数的特性

多叉树的作用,降层高,让结点数量变少,查找结点的数量变少,磁盘寻址次数减少多叉树与B树之间的关系:1.多叉树没有约束平衡2.没有约束每个节点字数的数量2.数据是有规律的B数与B+数的区别:1.B+树所有的数据都存在叶子结点2.B+数所有的叶子结点通过前后指针链起来B树不是唯一的;所有节点都是插入叶子节点,最底层;B树插入过程:1.找到对应的节点,并且未满2.找到的节点已满,则会分裂新节点...

2021-11-24 19:53:29 552

原创 红黑树的特性

常见的地方:map、nginx、定时器、cfs、内存管理每个结点是红色的或者是黑色的根结点是黑色的每个叶子结点是黑色的如果一个结点是红的,则它的两个儿子都是黑色的对每个结点,从该结点到其子孙结点的所有路径上的包含相同数目的黑结点

2021-11-24 19:52:23 118

空空如也

空空如也

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

TA关注的人

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