![](https://img-blog.csdnimg.cn/20190918140037908.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
进阶知识
文章平均质量分 91
进阶知识
猥琐猿
这个作者很懒,什么都没留下…
展开
-
存储的基本架构
关于存储,一直是计算机领域的庞大体系,需要持续的学习。原创 2024-01-15 22:32:55 · 922 阅读 · 0 评论 -
测试框架gtest以及内存泄漏检测
gtest原创 2022-11-06 18:19:23 · 2385 阅读 · 0 评论 -
结构型设计模式
结构型设计模式原创 2022-06-03 19:30:55 · 129 阅读 · 0 评论 -
海量数据去重的hash,BloomFilter,bitmap
海量数据查找字符串的问题原创 2022-06-02 21:28:58 · 469 阅读 · 0 评论 -
B树与B+树
B树与B+树原创 2022-06-01 21:55:19 · 246 阅读 · 0 评论 -
红黑树的添加与调整算法
文章目录一、红黑树的应用二、红黑树的实现红黑树的性质红黑树的定义二叉树的旋转节点的添加红黑树的调整一、红黑树的应用例如map的底层实现,nginx,定时器,以及cfscfs就是用红黑树存储进程的集合,把调度的时间,作为一个key值,每一次从他的左下角这棵树开始查找。还有我们的内存管理,是用一颗红黑树树去管理的,红黑树会去自动平衡,树高会降低,更利于查找,不会出现一条树的情况(链表)一块大内存,分小内存,会把那些内存块用红黑树去存储,一块内存有两种存储方法,一种是以起始位置加长度,第二种用开始位置原创 2022-05-29 16:19:57 · 357 阅读 · 0 评论 -
skynet重要组件以及游戏项目的应用
文章目录一、网络模块封装消息与协程的关系数据到达skynet 对连接半关闭状态的支持应用二、游戏项目游戏介绍设计原则接口设计如何优化掌握框架的开发思路skynet 设计原理总结actor 内部若涉及多线程应考虑加自旋锁或原子操作;避免在工作线程执行过程中被切换;actor 内部若涉及多线程应考虑临界区域操作不能过于耗时;避免长期占用工作线程让同消息队列中其他消息得不到及时执行;actor 单个消息业务应避免阻塞线程(注意不是协程)的操作;如果这个操作是必不可少,另起一个外部进程,skynet 进原创 2022-05-07 21:50:53 · 1436 阅读 · 1 评论 -
skynet与lua/c编程
文章目录前言一、lua的开发lua数据类型lua的元表闭包二、lua/c的接口编程虚拟栈C 闭包注册表userdatalightuserdata前言掌握框架的核心开发技能skynet抓好,actor,协程和消息一、lua的开发脚本语言目前效率最高的lua的数据结构只有一个table,不支持多线程用户抽象与底层抽象用户抽象:一个用户对应一个actor,这不一定正确底层抽象:一个actor对应一个lua虚拟机,一个actor一个c接口的回调,一个actor一个消息队列,一个消息对应一个协程处原创 2022-04-27 20:04:28 · 779 阅读 · 0 评论 -
skynet设计原理
文章目录一、多核并发模型多线程多进程CSPActor总结二、skynet环境准备game.conf三、Actor消息四、线程池的原理skynet当中的线程池协程前言:框架学习思路1、掌握框架是怎么解决问题的 2、掌握框架的核心开发技能 3、掌握框架的开发思路目的是基于框架做正确的事情一、多核并发模型erlang是从语言层面上解决actor并发模型skynet从框架层面去实现actor并发模型go语言从语言层面上去实现csp并发模型多线程在一个进程中开启多线程,为了充分利用多核,一般设置工原创 2022-04-25 21:52:35 · 447 阅读 · 0 评论 -
Redis源码,主从同步与对象模型
文章目录一、持久化与持久化选择redis持久化redis持久化相关配置aofaof rewriterdb混合持久化数据安全策略二、Redis主从复制数据同步增量数据同步服务器 RUN ID复制偏移量 offset三、redis哨兵模式分布式中的cap原则Codis集群四、Redis cluster集群集群配置一、持久化与持久化选择redis持久化redis 的数据全部在内存中,如果突然宕机,数据就会全部丢失,因此需要持久化来保证 Redis 的数据不会因为故障而丢失,redis 重启的时候可以重新加原创 2022-04-23 22:37:03 · 927 阅读 · 0 评论 -
Redis源码 存储原理与数据模型
文章目录一、redis源码的学习方法二、redis存储redis存储结构存储转换缩容scan跳表实现redis跳表redis io多线程一、redis源码的学习方法wsl2安装https://docs.microsoft.com/zh-cn/windows/wsl/install-win10vscodehttps://docs.microsoft.com/zh-cn/windows/wsl/tutorials/wsl-vscodec/c++基本配置https://code.visualstu原创 2022-04-17 20:19:52 · 894 阅读 · 0 评论 -
redis协议与异步方式
文章目录一、redis网络层二、redis pipeline三、redis事务multi,exec,lua脚本redis事务lua脚本redis与ACID特性分析四、异步连接实现一、redis网络层只需要一个单线程进行,一个reactor管理所有连接,每一条连接可以看作是一个队列,队列当中的元素看作一个协议包,reactor可以看作一个处理器,这是一种并发的机制。那么我们思考一下,我们每条连接,或者说不同连接当中的队列执行最后是按照什么顺序去执行的。对于一条连接来说肯定是按照顺序的。那么对于整体而言的原创 2022-04-15 22:27:39 · 1174 阅读 · 0 评论 -
redis相关命令详解及其原理
文章目录一、redis二、redis中的数据结构stringlisthashsetzset三、应用与操作一、redisRedis 是Remote Dictionary Service 的简称;也是远程字典服务;Redis 是内存数据库(在内存当中的数据库),KV 数据库,数据结构数据库;涉及到的数据结构有,string、hash、list、set、zset怎么去操作redis的呢,当然是由一个端口,不断发送命令去操作redisRedis 应用非常广泛,如Twitter、暴雪娱乐、Github原创 2022-04-13 22:20:53 · 770 阅读 · 0 评论 -
Mysql缓存策略
文章目录一、数据库提升读写性能的方式二、热点数据处理三、实现原理一、数据库提升读写性能的方式数据库有哪些提升读写性能的方式1、连接池,阻塞io+线程池2、异步连接 非阻塞io3、sql执行出发:即时执行+预编译执行(跳过了词法句法分析,权限验证,优化器)prepare接口我们来举个例子mysql的连接过程跟mysql连接之后,会进行一个验证,会主动发送一个连接给服务器,采用的密码以及连接方式,比如说安装mysql8.0会遇到一个问题,Navicat有些版本不支持mysql8.0默认连接方式原创 2022-04-09 21:01:01 · 1004 阅读 · 0 评论 -
MySQL事务原理分析
文章目录一、事务是什么?事务控制语句二、ACID特性原子性(A)隔离性(I)持久性(D)一致性(C)三、隔离级别READ UNCOMMITTEDREAD COMMITTEDREPEATABLE READSERIALIZABLEmvcc四、锁锁共享锁排他锁(X)意向共享锁(IS)意向排他锁(IX)锁的兼容性锁的算法锁的对象五、并发异常读异常(面试点)脏读不可重复读幻读丢失更新并发死锁死锁相反加锁顺序死锁锁冲突死锁死锁解决如何避免死锁一、事务是什么?事务是访问并更新数据库各种数据项的一个程序执行单元。目原创 2022-04-07 01:04:51 · 628 阅读 · 0 评论 -
MySQL索引原理以及SQL优化
文章目录一、Mysql索引索引主键索引唯一索引普通索引组合索引全文索引主键选择约束外键约束约束与索引的区别二、B+树B+树层高问题关于自增id聚集索引辅助索引索引存储innodb 体系结构三、最左匹配原则与覆盖索引覆盖索引四、索引失效问题五、索引原则优化器成本分析六、问题的解决与定位一、Mysql索引索引索引分类:主键索引、唯一索引、普通索引、组合索引、以及全文索引(elasticsearch);主键索引非空唯一索引,一个表都有且只有一个主键索引;在 innodb 中,主键索引的 B+ 树包含表原创 2022-04-05 22:16:41 · 1451 阅读 · 0 评论 -
Posix API与网络协议栈
原创 2022-03-27 20:33:35 · 2497 阅读 · 0 评论 -
网络编程关注的问题与reactor的应用
文章目录前言一、reactor作为网络框架的职责二、网络编程关注的问题:1.连接的建立2.读入数据三、单reactor模型四、多reactor(one eventloop per thread)总结前言一、reactor作为网络框架的职责对底层(内核):检测io、操作io。对上层(用户):提供用户关注的回调接口。操作io方式:1.阻塞操作。2.非阻塞操作。二、网络编程关注的问题:1.连接的建立分为两种:服务端处理接收客户端的连接,服务端作为客户端连接第三方服务;int client原创 2022-03-26 18:08:05 · 3791 阅读 · 0 评论 -
异步日志方案log4cpp
文章目录日志写入逻辑Log4cpp日志框架日志级别日志格式化日志输出日志回滚配置文件Log4cpp范例讲解配置文件剖析Log4cpp调用栈分析性能测试日志回滚muduo日志库分析异步日志机制双缓冲机制日志写入逻辑调用fwrite与write的吞吐量是不一样的,fwrite的ops比write的大我们可以看到,fwrite与write的区别,当单次发送的数据的大小会影响效率Log4cpp日志框架日志级别日志格式化日志输出日志回滚比如说我们可以只保存最近的一个日志,最大文件大小,超原创 2022-03-23 21:56:12 · 1120 阅读 · 0 评论 -
websocket协议与实现原理
文章目录一、websocket二、websocket的协议实现websocket的协议格式websocket如何验证客户端合法websocket传输的明文和密文的传输websocket如何断开实现一、websocketwebsocket是一个基于tcp的应用层的协议,对tcp的包做了一些限制,websocket只对协议的格式做了规定,不管你发送了什么,只要符合数据格式就可以了,里面是否有get或者post请求websocket压根儿不管,比http协议更加的宽泛更加松散。websocket除了连.原创 2022-03-20 20:28:56 · 4644 阅读 · 2 评论 -
http/https服务器的实现原理
文章目录一、http协议http简介http的工作原理http的三点注意事项http与reactor的关系二、服务器响应消息三、GET的实现方法一、http协议http简介HTTP 协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的 WWW 文件都必须遵守这个标准。HTTP 是一个基于 TCP/IP 通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。,是用于从万维网(WWW:World Wide Web )服务原创 2022-03-19 22:59:57 · 360 阅读 · 0 评论 -
创建型设计模式
文章目录一、设计模式设计模式是什么怎么学习设计模式二、设计原则依赖倒置开放封闭原则面向接口封装变化点单一职责里氏替换接口隔离组合优于继承三、模板方法四、观察者模式五、策略模式一、设计模式设计模式是什么设计模式是指在软件开发中,经过验证的,用于解决在特定环境下,重复出现的,特定问题的解决方案;怎么学习设计模式1、找稳定点和变化点,把变化点隔离出来例如,整洁房间,好动的猫,如何保证房间的整洁—》把猫关进笼子把变化点隔离出来就是在解耦合,降低锁粒度,耦合度2、先满足设计原则,慢慢迭代出设计模式原创 2022-03-18 22:18:20 · 317 阅读 · 0 评论 -
内存泄漏检测组件
文章目录一、内存泄漏二、内存泄漏组件实现方案方案一、重新定义系统函数方案二、宏定义方案三、函数指针共享内存的初步认识总结一、内存泄漏内存泄漏是在没有自动 gc 的编程语言里面,经常发生的一个问题,也就是没有垃圾回收机制的语言才有内存泄漏。因为没有 gc,所以分配的内存需要程序员自己调用释放,内存有分配没有释放就会导致内存泄漏。每分配一次,内存分配与释放没有做到释放。危害可大了,如果一个内存没有释放,每次运行,系统会分配,剩下的内存空间越来越小就会导致系统崩溃。造成内存泄漏的核心原因是调用分配与释放没原创 2022-03-14 22:15:43 · 496 阅读 · 0 评论 -
reactor的原理与实现
文章目录一、reactor二、reactor的实现三、水平触发LT和边缘ET触发:总结客户端跟服务器都有一个连接,客户端A与客户端B进行即时通信,A发数据给服务器,服务器通过listenfd,先判断fd有没有数据可读,如果有数据就读出来通过协议判断是发给谁的,然后发给相应的客户端,这就是即时通信。随着连接越来越多,就会出现一些问题,例如许多io过来,其实只有少数需要处理,还有随着连接数的增多,sendbuff里边会装满了,就会导致不可写,所以send之前,得去判断是否可写。大量的io而言,每个是原创 2022-03-13 20:28:48 · 1771 阅读 · 0 评论 -
网络io,select,poll与epoll的初步认识
网络io与select,poll,epoll文章目录网络io与select,poll,epoll前言一、网络io二、select三、poll四、epoll总结前言 一、网络io.为什么单线程能接受多个连接但是不能传输数据?因为listenfd处于listen状态,三次握手是在协议栈完成的,不受应用程序控制。三次连接不发生在任意函数中,是协议栈自动完成的!一请求一线程2.如何解决多个客户端的连接问题:一个请求一个线程逻辑简单,不适合高并发。一个线程栈8M,难以突破C10k。原创 2022-03-12 16:53:01 · 3390 阅读 · 0 评论 -
死锁与死锁检测
文章目录一、死锁是什么二、死锁的检测三、死锁检测的实现一、死锁是什么比如说以下情况,线程a占用资源1,线程b占用资源2,线程b需要资源1,线程a需要资源2,就会产生死锁在死锁的解决方案中,log和gdb调试可以用于线程数量少的情况线程比较多的情况就不能利用log和gdb去解决再比如三个线程线程A想要线程B的资源,线程B想要线程C的资源,线程C想要线程A的资源,这样就构成了一个有向图的环路再比如,下图所示,线程A想获取线程B的锁,线程B想获取线程C的锁,线程C想获取线程D的锁,线程D想获取原创 2022-03-11 00:17:23 · 1369 阅读 · 0 评论 -
锁与原子操作CAS的原理
前言一、互斥锁mutex锁的概念对一块临界资源枷锁pthread_create(线程的id,,函数)二、自旋锁三.原子操作原创 2022-03-08 00:01:11 · 411 阅读 · 0 评论