- 博客(76)
- 资源 (5)
- 收藏
- 关注
原创 设计模式之职责链模式
这里写自定义目录标题官方定义通俗定义简单实现应用场景优点缺点官方定义将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求,将这些接收对象串成一条链,并沿着这条链传递这个请求,直到链上的某个接收对象能够处理它为止。通俗定义说到底就是 多个处理器类对同一个接受对象进行处理。按照从上倒下依次去执行。比如在核酸检测期间,为了保证看病人员的中风险范围的筛选。医院会有一条通道,我们经过这条通道过程中,需要一层一层的扫码,只有通过最后一步检测的才能看病。并且如果我们需要多增加一条检测,只需要在同道中,
2022-02-18 17:14:56
222
原创 设计模式之内功心法 SOLID五大原则
内功心法前言意义五经单一原则开闭原则里式替换接口隔离依赖倒置前言随着计算机行业的不断发展,人们对于可以给予自身快速成长的技术非常的痴迷。就比如今天要聊的设计模式,学过编程的都知道设计模式,而很少有人会知道它的核心思想是什么,只是一味的照着网络上流行的设计模式 二十三式 依葫芦画瓢。仅做到了知其然而不知其所以然。所以今天来聊聊它出现的意义什么意义我们知道一个江湖的组成是非常不容易的,在江湖中也会有很多的门派与帮派,而门派一多就会有各式各样的问题,这时就出来了一个叫做设计模式的东西,来处理门派在发
2022-01-24 16:27:23
2145
原创 记一次mongodb碎片的处理
Mongodb的碎片处理发现过程接口报错日志中,发现了一条超时的错误日志。排查过程首先查看接口里面是否有复杂的业务逻辑 (否)查看消息的表是否过大,碎片是否过多?Monodb数据库 (是)解决方案删除无用的消息数据/过期的消息 db.collections.remove()处理碎片 /索引文件 db.runCommnd({compact: “somecollection”})重建索引 db.collection.reIndex()总结以上的操作建议在业务空
2022-01-24 10:15:53
757
原创 php实战 AES对称加密 第三章
对称加密对称加密 很好理解,就是指加密和解密的时候密钥都是同一个,是 对称 的。只要保证密钥的安全,那整个通信过程就可以说具有了机密性。接下来会以 AES加密算法来实战说明。AESAES 的意思是 高级加密标准。密钥长度可以是 128、192或256.它是DES算法的替代者,安全强度很高,性能也很好,而且有的硬件还会做特殊优化,所以非常流行。是应用最广泛的对称加密算法。实战在一些需要安全性高的业务里面,我们常会用到 非堆成加密。但是在一些简单的数据处理方面,我们还是可以使用对称加密的。毕
2022-01-21 08:54:37
3126
原创 LRU用什么数据结构实现更合理?
LRU用什么数据结构实现更合理?解:最原始的方式是用数组,数组的每一项中有数据最近的使用频次,数据的使用频次可以用计时器计算。每次置换的时候查询整个数组实现。另一种更好的做法是利用双向链表实现,将使用到的数据移动到链表头部,每次置换时从链表尾部拿走数据,链表头部是最近使用的,链表尾部是最近没有被使用到的数据。...
2022-01-18 11:11:57
1011
原创 记一次数据库 MySQL Server has gone away的解决过程
MySQL Server has gone away问题产生?在一次清理完 数据库表的碎片之后,并重启了Mysql实例 线上项目进行sql查询时则产生了下面的问题。 MySQL Server has gone away问题排查。MySQL服务宕机了 (因为已经重启 所以排除)Mysql的链接进程被主动kill掉。(这个也排除了 因为无人操作)Mysql 链接超时 ,在某个mysql长连接的很久没有新的请求,达到了server端的timeout,被server强行关闭,此后再通过这个c
2022-01-18 10:12:51
827
原创 如何控制同一时间只有2个线程运行?
如何控制同一时间只有2个线程运行?解析:同时控制两个线程进入临界区,一种方式可以考虑用信号量。另一种方式是考虑生产者、消费者模型。想要进入临界区的线程先在一个等待队列中等待,然后由消费者每次消费两个。这种实现方式,类似于实现一个线程池,所以也可以考虑实现一个 ThreadPool类,然后再实现一个调度器类,最后实现一个每次选择两个线程执行的调度算法。...
2022-01-13 11:18:56
370
原创 TCP协议是如何恢复数据顺序的,TCP拆包和粘包的作用是什么
TCP协议是如何恢复数据顺序的,TCP拆包和粘包的作用是什么?解析:TCP拆包的作用是将任务拆分处理,降低整体任务出错的概率,以及减小底层网络处理的压力。拆包过程需要保证数据经过网络的传输,又能恢复到原始的顺序。这中间,需要数学提供保证顺序的理论依据。TCP利用(发送字节数、接收字节数)的唯一性来确定封包之间的顺序关系。粘包是为了防止数据量过小,导致大量的传输,而将多个TCP段合并成一个发送。...
2022-01-12 14:35:41
1114
原创 php实战 RSA 加密解密 第一章
RSA加密前情提要编写RSA密钥生成器加密解密实例总结前情提要随着网络的发展,互联网公司对于数据的保护也越来越加的严格了,众所周知最长用的两个加密算法,就是 对称加密与非对称加密了。至于这俩个算法的相关知识,大家可以自行去了解,今天着重实战RSA实现对称算法。编写RSA密钥生成器<?phpclass KeyGenerator{ // 新的私钥 protected $res; // 密钥key private $privateKey; // 公钥
2022-01-08 17:28:55
2432
原创 MySQL中的B树和B+树有什么区别?
MySQL中的B树和B+树有什么区别?解析:B+树继承于B树,都限定了节点中数据数目和子节点的数目。B树所有节点都可以映射数据,B+树只有叶子节点可以映射数据。为了B+树创造了很多冗余的索引(所有非叶子节点都是冗余索引),这些冗余索引让B+树在插入、删除的效率都更高,而且可以自动平衡,因此B+树的所有叶子节点总是在一个层级上。所以B+树可以用一条链表串联所有的叶子节点,也就是索引数据,这让B+树的范围查找和聚合运算更快。...
2022-01-04 16:37:32
1465
原创 进程的开销比线程大在了哪里?
进程的开销比线程大在了哪里?解析:Linux中创建一个进程自然会创建一个线程,也就是主线程。创建进程需要为进程划分出一块完整的内存空间,有大量的初始化操作,比如要把内存分段(堆栈、正文区等)。创建线程则简单得多,只需要确定PC指针和寄存器得值,并且给线程分配一个栈用于执行程序、同一个进程得多个线程间可以复用堆栈。因此,创建进程比创建线程慢,而且进程得内存开销更大。...
2021-12-31 11:38:54
485
原创 什么情况下会触发饥饿和死锁?
什么情况下会触发饥饿和死锁?解析:线程需要资源没有拿到,无法进行下一步,就是饥饿。死锁和活锁都是饥饿的一种形式。非抢占的系统中,互斥的资源获取,形成循环依赖就会产生死锁。死锁发生后,如果利用抢占解决,导致资源频繁被转让,有一定概率触发活锁。死锁、活锁、都可以通过设计并发控制算法解决,比如哲学家就餐问题。...
2021-12-29 16:55:34
305
原创 用户态线程与内核态线程的优缺点
用户态线程优点管理开销小:创建、销毁不需要系统调用。切换成本小:用户空间程序可以自己维护,不需要走操作系统调度。缺点与内核协作成本高:比如这种线程完全是用户空间程序在管理,当它进行I/O的时候,无法利用到内核的优势,需要频繁进行用户态到内核态的切换。线程间协作成本高:设想两个线程需要通信,通信需要I/O,I/O需要系统调用,因此用户态需要支付额外的系统调用成本。无法利用多核优势:比如操作系统调度的仍然是这个线程所属的进程,所以无论每次一个进程有多少用户态的线程,都只能并发执行一个线
2021-12-25 17:39:52
4415
原创 TCP/IP第六期 长连接与短连接
短链接定义:客户端与服务端的整个连接过程很短暂,不会与服务器保持长时间的连接状态,所以就被称为短链接操作步骤:下图我们可以看到每次短连接都会重新创建缺点:资源浪费,时间...
2021-12-25 16:01:45
1617
原创 TCP/IP 第五期 UDP与TCP的区别
目的差异TCP:提供可靠的网络传输UDP:提供报文交换能力基础上尽可能地简化协议轻装上阵可靠性差异TCP:为保证可靠性提供了多种机制,建立连接需要握手地过程,保证双方同时在线。并且还提供了窗口机制保证报文段的有序性。UDP:它只管发送数据包,不关心对端是否确认收到。连接 / 无连接TCP:进行数据传输前必须先建立连接UDP:无连接协议,数据随时可以发送,只提供发送 封包的能力流控技术TCP:提供滑动窗口和拥塞窗口机制,可以保证接收方不会因为发送方一次性传输太多
2021-12-14 15:15:58
1329
原创 TCP/IP 采用层次结构模型的优点
TCP/IP采用分层的优点易维护与实现,这种结构结构使得实现,调试和维护一个庞大而复杂的系统变得容易。灵活性好,任何一层发生变化时,只要层间接口关系保持不变,则在这层以上或以下各层均不影响。各层之间是独立的。某一层并不需要知道它的下一层是如何实现的,而仅需要知道该层通过层间接口所提供的服务。每一层实现相对独立的功能,将一个难以处理的复杂问题分解为若干个较容易处理的更小的问题。结构上可分割,各层都可以采用最合适的技术实现能促进标准化工作,每一层的功能及其所提供的服务都已有了精确的说明。.
2021-12-11 20:52:05
2752
原创 滑动窗口和流速控制是怎么回事?
滑动窗口和流速控制是怎么回事?解析:滑动窗口是tcp协议控制可靠性的核心。发送方将数据拆包,变成多个分组,然后将数据放入一个拥有滑动窗口的数组,依次发出,仍然遵循先入先出(FIFO)的顺序,但是窗口中的分组会一次性发送,窗口中序号最小的分组如果收到ACK,窗口就会发生滑动;如果最小序号的分组长时间没有收到ACK,就会触发整个窗口的数据重新发送。另一方面,在多次传输中,网络的平均延迟往往是相对固定的,这样TCP协议可以通过双方协商窗口大小控制流速。分组和TCP段是一个意思。...
2021-12-10 15:07:11
871
原创 TCP为什么是3次握手 4次挥手
问:为什么TCP是三次握手 4次挥手解析:TCP是一个全双工协议,为了让双方都保证,建立连接的时候,连接双发都需要向对方发送SYN(同步请求)和ACK(响应)。握手阶段:双方都没有繁琐的工作,因此一方向另一方发起同步(SYN)之后,另一方可以将自己的ACK和SYN打包作为一条消息回复。因此是3次握手 需要三次数据传输。挥手阶段双方可能可能都存在没有完成的工作,收到挥手请求的一方,由于必须马上响应(ACK),表示收到了挥手请求,类比现实中你收到一个快递,你可能会先收下,然后再使用一段时间才会给
2021-12-10 11:21:41
1567
原创 TCP/IP第四期 提供TCP可靠性的方式
应用数据被分割成TCP认为最适合发送的数据块。这和UDP完全不同,应用程序产生的数据报长度将保持不变。由TCP传递给IP的信息单位称为报文段或段当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒。TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP将丢弃这个报文..
2021-12-10 11:03:58
144
原创 TCP/IP 第三期 四次挥手
四次挥手前言为什么是四次挥手?四次挥手的流程总结前言上一期中我们讲了TCP建立连接中的三次握手,这一期我们再讲讲四次挥手,这样我们就能基本将TCP的 建立与关闭过程基本搞清楚了。为什么是四次挥手?因为要保证在关闭阶段,客户端与服务端之间的消息要处理完成 并保证双方正常关闭。而且我们知道TCP是一个全双工协议,既然一个TCP连接是全双工(即数据在两个方向上能同时传递),因此每个方向都必须单独地进行关闭。原则:当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。当一端收到一个FI
2021-12-10 10:59:48
1082
原创 Socket 第一期 浅谈socket php 的基本使用
Socket使用前言socket的流程图操作socket运行前言socket 的使用在计算机网络中占有非常重要的地位,所以作为一位程序开发人员,也应对它有基本了解,今天我们来简单的聊聊。socket的流程图操作socket接下来使用代码对应上面的流程,大家可以从代码中查看到每一步究竟是怎样的。service.php 文件<?phpset_time_limit(0);# 连接的Ip 这里使用环回地址$ip = '127.0.0.1';# 端口号$port = 521
2021-12-09 16:26:07
435
原创 MySQL 第十一期 Join 关联查询分析
Mysql join 关联查询的详解 清晰知道在何时我们能使用join去进行查询,而不是一味的禁止Join的使用
2021-12-06 15:38:44
1085
原创 TCP/IP 第一期 认识TCP/IP协议
TCP/IP前言什么是TCP/IP协议TCP/IP如何划分为何要划分每层的作用链路层网络层前言对于一名程序员来说,掌握TCP/IP是我们成为资深工程师的底层知识之一,只有掌握了这个,才能无往不利。所以可能需要很多时间在这上面。什么是TCP/IP协议官方解释:TCP/IP传输协议,即传输控制/网络协议,也叫作网络通讯协议。它是在网络的使用中的最基本的通信协议。TCP/IP传输协议对互联网中各部分进行通信的标准和方法进行了规定。通俗的理解:可以把网络当作一个异世界,我们如果要在异世界里面进行活
2021-12-06 10:26:59
672
原创 docker第十期 使用docker-compose 编排LNMP环境
编排LNMP环境前言实操使用三步骤前言为了使我们编排的有序,不会显的混乱。我们首先创建需要的目录,然后在不同目录下建立自己的Dockerfile 文件。接下来都是硬货,大家要仔细认真的阅读。实操使用三步骤使用Dockerfile定义应用程序的环境使用docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境种一起运行最后,执行docker-compose up 命令来启动并运行整个应用程序。$root@VM-8-11-ubuntu:/home# mkdi
2021-12-02 17:23:30
1569
原创 docker 第七期下 自定义网络 (容器互联)
docker的互联互通实战,手把手解决大家对docker的疑问。--link 以及自定义网络的处理
2021-12-01 10:14:07
1350
原创 docker第八期 dockerfile的编写原则
前言有一套好的编写规范可以使得协作者,更加清晰的了解镜像的完整构建流程,还可以减少镜像的体积,加快镜像构建的速度和分发速度。单一职责提供注释信息保持容器最小化合理选择基础镜像使用.dockerignore文件尽量使用构建缓存正确设置时区使用国内软件源加快镜像构建速度最小化镜像层数...
2021-11-30 17:55:07
384
原创 docker第七期上 docker 网络实现
前言基本原理创建网络参数docker的网络实现是学习docker的重中之重,首先我们要了解Docker的网络实现其实就是利用了Linux上的网络名字空间和虚拟网络设备(特别是 veth pair)。基本原理要实现网络通信,机器需要至少一个网络接口(物理接口或者虚拟接口)来收发数据包;此外,如果不同子网之间要进行通信,需要路由机制。Docker中的网络接口默认都是虚拟的接口,虚拟接口的优势之一是转发效率较高。Linux通过在内核中进行数据复制来实现虚拟接口之间的数据转发,发送接口的发送缓存中的
2021-11-30 17:02:00
933
原创 docker第六期 实战 使用Dockerfile 构建属于自己的php环境
php环境前言环境需要的拓展安装拓展需要的命令构建 属于自己的PHP-Dockerfile 文件前言大家可能会在开发中遇到这个问题,当我们从docker-hub上拉取一个php镜像下来时,发现很多拓展都没有,导致无法很好为我所用,这个时候我们就可以自定义 Dockerfile,创建一个属于我们自己的一个镜像。接下来就来讲讲它的构建过程。环境php 7.4需要的拓展swooleredismongodbxmlwriter安装拓展需要的命令docker-php-source
2021-11-29 19:09:55
2565
原创 docker第五期 DockerFile讲解
DockerFileDockerFile 介绍DockerFile 构建过程DockerFile的指令实战测试实战 :php镜像发布自己的镜像DockerFile 介绍DockerFile 构建过程DockerFile的指令实战测试实战 :php镜像发布自己的镜像
2021-11-29 12:00:38
1059
原创 docker第四期 简单部署 nginx php mysql
前言接下来的我们用简单的方式来部署以下 web应用的三个常用环境。都是基于docker-hub库部署nginx
2021-11-26 15:41:46
871
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人