- 博客(16)
- 收藏
- 关注
原创 浏览器缓存---小实验及解析
在做小实验前先要了解一下浏览器缓存的执行原理浏览器的缓存分为强缓存和协商缓存,当客户端请求某个资源的时候,获取缓存的流程如下(1)先根据这个资源的http header判断它是否命中强缓存,如果命中,则直接从本地缓存中获取资源,不会则向服务器请求 资源。(2)当强缓存没有命中时,客户端会发送请求到服务器,服务器通过另一些request header验证这个资源是否命中协商缓存,这个过程成为http再验证,如果命中,服务器直接返回请求而不返回资源,而是告诉客户端之间从缓存中获取,客户端收到返回后就直接从
2020-12-10 18:11:50
318
1
原创 MYSQL-Mysql读锁,写锁(悲观锁),乐观锁,分布式锁运用场景
我们知道为了控制并发,我们可以使用mysql锁机制来实现,但是不同的锁的粒度不同,运用场景也不同。1,读锁描述:即事务A 使用共享锁 获取了某条(或者某些)记录时,事务B 可以读取这些记录,可以继续添加共享锁,但是不能修改或删除这些记录(当事务B 对这些数据修改或删除时会进入阻塞状态,直至锁等待超时或者事务A提交)场景:读取结果集的最新版本,同时防止其他事务产生更新该结果集主要用在需要数据依存关系时确认某行记录是否存在,并确保没有人对这个记录进行UPDATE或者DELETE操作,因为可能因为
2020-12-01 16:34:09
565
原创 PHP对象深拷贝实现
重写__clone方法实现<?php// shallow copy & deep copyclass logo{ public $name; public function __construct($name) { $this->name = $name; }}class car{ public $type; public $logo; public function __construct($
2020-11-26 19:03:50
436
原创 MYSQL-三张图搞懂mysql索引
什么是索引简单一句话索引就是一种排好序的数据结构,对于mysql来说这种数据结构就是B+树(虽然也支持hash表,但几乎不用)三张图理解索引数据结构(innodb引擎)三张图分别是 聚簇索引 ,普通索引,联合索引索引规则至于网上说的几条索引军规及神秘时候索引失效情况,死记硬背是不行的,按照图示去想一想一切都豁然开朗...
2020-09-18 09:56:38
132
原创 算法-插入排序(PHP代码实现)
简介插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴,但它的原理应该是最容易理解的了,因为只要打过扑克牌的人都应该能够秒懂。插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序和冒泡排序一样,也有一种优化算法,叫做拆半插入。1. 算法步骤将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插
2020-09-16 11:53:28
143
原创 算法-快速排序(PHP代码实现)
快速排序原理偷个懒,原理直接参考下面这篇文章,我这里只写php实现方式传送门:https://www.sohu.com/a/246785807_684445PHP代码实现 /** * 快速排序 * @param $arr * @return mixed */ public function quickSort($arr) { $length = count($arr); // 当数组只剩一个元素的时候不再
2020-09-16 11:17:16
531
原创 算法-冒泡排序(PHP代码实现)
三分钟彻底理解冒泡排序1.原理:比较两个相邻的元素,将值大的元素交换到右边2.思路:依次比较相邻的两个数,将比较小的数放在前面,比较大的数放在后面。(1)第一次比较:首先比较第一和第二个数,将小数放在前面,将大数放在后面。(2)比较第2和第3个数,将小数 放在前面,大数放在后面。…(3)如此继续,知道比较到最后的两个数,将小数放在前面,大数放在后面,重复步骤,直至全部排序完成(4)在上面一趟比较完成后,最后一个数一定是数组中最大的一个数,所以在比较第二趟的时候,最后一个数是不参加比较的。(5
2020-09-15 15:27:41
1692
原创 Redis-持久化
前言Redis是一种高级key-value数据库。它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富。有字符串,链表,集 合和有序集合。支持在服务器端计算集合的并,交和补集(difference)等,还支持多种排序功能。所以Redis也可以被看成是一个数据结构服务 器。Redis的所有数据都是保存在内存中,然后不定期的通过异步方式保存到磁盘上(这称为“半持久化模式”);也可以把每一次数据变化都写入到一个append only file(aof)里面(这称为“全持久化模式”)。由于
2020-09-14 18:07:34
73
原创 MYSQL-MYSQL中各种锁
为了方便以后复习和详细讲解,先把遇到的各种锁做个简单的记录和描述话不多说先上图我们听说过读锁、写锁、共享锁、互斥锁、行锁等等各种名词,简单对这些锁进行了分类加锁机制:1、乐观锁:先修改,保存时判断是够被更新过,应用级别2、悲观锁:先获取锁,再操作修改,数据库级别锁粒度:表级锁:开销小,加锁快,粒度大,锁冲突概率大,并发度低,适用于读多写少的情况。页级锁:BDB存储引擎行级锁:Innodb存储引擎,默认选项兼容性:S锁,也叫做读锁、共享锁,对应于我们常用的 select * from
2020-09-14 16:10:53
130
原创 MYSQL-MVCC机制和四种事务隔离级别
MVCC机制和四种事务隔离级别什么是多版本并发控制(MVCC:multi-version concurrency control )MVCC定义:多版并发控制系统。可认为是行级锁的一个变种,它能够避免更多情况下的加锁操作。作用:避免一些加锁操作,提升并发性能。实现:通过在每行记录的后面保存行的创建时间和过期时间或删除时间(它们是隐藏的),这两个时间实际都是系统的版本号。每开始一个新的事务,版本号都会自动增加。具体原理4.1) select:innoBD查询时会检查以下两个条件:一个是数据行.
2020-09-14 15:46:28
805
原创 Redis-分布式锁(PHP实现)
Redis实现分布式锁运用场景(例如解决库存超卖问题)库存超卖现象是怎么产生的?先来看看如果不用分布式锁,所谓的电商库存超卖是啥意思?大家看看下面的图:这个图,其实很清晰了,假设订单系统部署两台机器上,不同的用户都要同时买10台iphone,分别发了一个请求给订单系统。接着每个订单系统实例都去数据库里查了一下,当前iphone库存是12台。俩大兄弟一看,乐了,12台库存大于了要买的10台数量啊!于是乎,每个订单系统实例都发送SQL到数据库里下单,然后扣减了10个库存,其中一个将库存从12.
2020-09-11 17:35:13
919
原创 Redis-Redis线程模型(图文)
Redis线程模型文件事件处理器Redis基于Reactor模式开发了网络事件处理器,这个处理器被称为文件事件处理器。它的组成结构为4部分:多个套接字、IO多路复用程序、文件事件分派器、事件处理器。因为文件事件分派器队列的消费是单线程的,所以Redis才叫单线程模型。消息处理流程文件事件处理器使用I/O多路复用(multiplexing)程序来同时监听多个套接字,并根据套接字目前执行的任务来为套接字关联不同的事件处理器。当被监听的套接字准备好执行连接应答(accept)、读取(read)、写.
2020-09-11 13:34:13
1009
原创 计算机网络-HTTP完整请求流程
HTTP完整请求流程一,外键的使用条件:两个表必须是InnoDB表,MyISAM表暂时不支持外键外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引外键关系的两个表的列必须是数据类型相似,也就是可以相互转换类型的列,比如int和tinyint可以,而int和char则不可以,且被关联字段必须保证唯一四种外键约束方式RESTRICT(约束):如果出现在删除时,意思是约束外键主键did记录(主表中的记录)不能直接删除,必须先删除被约束的表(从表)字段中dept_i.
2020-09-03 18:33:23
485
原创 MYSQL-多表连接查询(图文)
简介表连接的方式内连接 查询的是两张表交集数据,即主外键关联数据。关键字 inner join on外连接 查询的是左表中所有数据和主外键关联数据。关键字 left outer join on,right outer join on自连接表连接示例Step 1: 创建两张表:部门表dept 员工表emp,并将emp.dno外键关联到dept.didCREATE TABLE `dept` ( `did` int(10) NOT NULL AUTO_INCREMENT, `dn.
2020-08-29 11:54:31
392
原创 MYSQL-外键约束(图文)
外键的使用条件:两个表必须是InnoDB表,MyISAM表暂时不支持外键外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引外键关系的两个表的列必须是数据类型相似,也就是可以相互转换类型的列,比如int和tinyint可以,而int和char则不可以,且被关联字段必须保证唯一四种外键约束方式RESTRICT(约束):如果出现在删除时,意思是约束外键主键did记录(主表中的记录)不能直接删除,必须先删除被约束的表(从表)字段中dept_id所有这个外键主键值对应的记录
2020-08-29 11:52:31
444
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人