后端
weixin_38616018
这个作者很懒,什么都没留下…
展开
-
手写线程池
线程池上图是一个线程池组件线程池主要分三块东西,一个工作线程队列,一个任务队列还有一个管理组件(互斥锁和条件变量)生活中很多场景和线程池比较类似比如去银行取款,一个柜台就是一个工作线程,一个人是一个任务,看号码的窗口就是管理组件再比如去食堂吃饭,一个打饭阿姨就是一个工作线程下面实现了一个线程池组建代码#include <stdio.h>#include <stdlib.h>#include <string.h>#include <pthre原创 2021-04-20 13:52:09 · 101 阅读 · 0 评论 -
生成MRZ数据集
简述模板模式就是通过固定算法⻣架来约束⼦类的⾏为是⾮常常⽤的设计模式,⼦类可以复写⽗类的⼦流程,使⽗类的⼤流程更丰富;反向控制流程的典型应⽤;⽗类 protected 保护⼦类需要复写的⼦流程;这样⼦类的⼦流程只能⽗类来调⽤;充分体现了依赖倒置原则;工厂模式就是延迟到⼦类来选择实现解决创建过程⽐较复杂,希望对外隐藏这些细节;⽐如连接池,线程池;隐藏对象真实类型;对象创建会有很多参数来决定如何创建;创建对象有复杂的依赖关系;代码生成MRZ护照数据集 测试集这里我用python写的,实现的比较简单原创 2021-04-07 15:33:12 · 594 阅读 · 5 评论 -
用reactor反应堆封装epoll
reactor反应堆我的理解就是对于每一个fd,不管是监听还是读写,都绑定了一个对应的回调函数,每次就调用回调就可以了,所以实现了事件驱动。一句话概括reactor是反应堆,每一个fd是反应原子,对应的事件走对应的回调函数代码单线程的reactor反应堆,每一句代码都添加了注释#include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.h>#include<原创 2021-03-28 17:32:58 · 182 阅读 · 0 评论 -
缓存穿透
什么是缓存穿透如上图所示,为了减少数据库的压力,一般在服务端和数据库之间加入一个redis缓存用来存热点数据。缓存穿透发生在服务端请求数据的时候mysql和redis都不存在改数据,黑客可以利用此漏洞导致mysql压力过大,从而使某个系统陷入瘫痪。解决方案1.方法一在redis端设置<key,NULL>键值对,以此来避免访问mysql,缺点是此方法会消耗大量的内存,可以加入超时时长的方式,自动清空超时时长没有访问的<key,NULL>对2.方法二可以用布隆过滤器来过滤原创 2021-03-09 13:54:07 · 98 阅读 · 0 评论