自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 vdom

v dom

2022-10-06 19:22:58 80 1

原创 vdom

v dom

2022-10-06 19:22:58 80 1

原创 前端组件化 MVVM

vue MVVM

2022-10-04 14:35:22 215

原创 大访问量

请求量大,怎么支撑1.合并css,减少背景图片,减少mysql查询2 利用nginx expires利用浏览器缓存 ,减少查询3 利用cdn4 集群+负载均衡

2020-09-03 23:14:28 98

转载 几种保持登录状态的方式

三种保持会话的方式(一)session机制保持会话存在的问题高并发情况下,会占用服务器大量内存 分布式(一个业务分成几个子业务,部署在多个服务器)或者集群(一个业务部署在多个服务器)的时候,session不能共享。解决方案高并发的时候可以将session存储到redis,如果用户长时间没有访问,将session存储到redis,就减少了服务器的压力。 分布式或者集群的时候,先通过redis来判断用户状态也可以实现session共享.(二)cookie机制保持会话使用的方法登录

2020-09-03 17:52:01 1542

原创 数据库 undo log redo log bin log

逻辑日志:可以简单理解为记录的就是sql语句 物理日志:因为mysql数据最终是保存在数据页中的,物理日志记录的就是数据页变更undo log 记录逻辑日志,是InnoDB存储引擎的日志redo log 记录物理日志,是InnoDB存储引擎的日志binlog 是mysql的逻辑日志,并且由Server层进行记录,使用任何存储引擎的mysql数据库都会记录binlog日志redo log是循环写入,bin log是追加写入,不会覆盖之前的日志。在计算机操作系统中,...

2020-09-03 13:58:15 143

原创 mysql 锁机制

InnoDB与MyISAM的最大不同有两点:一是支持事务(TRANSACTION)二是采用了行级锁Innodb行级锁InnoDB行锁是通过给索引上的索引项加锁来实现的,这一点MySQL与Oracle不同,后者是通过在数据块中对相应数据行加锁来实现的。 InnoDB这种行锁实现特点意味着:只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁! mysql InnoDB引擎默认的修改数据语句:update,delete,insert都会自动给涉及到的数据加上.

2020-09-03 00:20:15 79

原创 乐观锁 悲观锁

乐观锁 和 悲观锁 是针对处理并发资源的采用的方式与mysql中提供的锁机制(表锁,行锁,排他锁,共享锁)不能混为一谈悲观锁:就是对于数据的处理持悲观态度,总认为会发生并发冲突,获取和修改数据时,别人会修改数据。所以在整个数据处理过程中,需要将数据锁。乐观锁:顾名思义,就是对数据的处理持乐观态度,乐观的认为数据一般情况下不会发生冲突,只有提交数据更新时,才会对数据是否冲突进行检测。如果检测有冲突,交给用户处理。悲观锁实现:利用 数据库 锁机制 比如mysql的排他锁,select.

2020-09-02 18:31:27 72

转载 数据库 死锁

数据库中两种基本的锁类型排它锁(Exclusive Locks,即X锁):当数据对象被加上排它锁时,其他的事务不能对它读取和修改。共享锁(Share Locks,即S锁):加了共享锁的数据对象可以被其他事务读取,但不能修改。事务之间对资源访问顺序的交替一个用户A 访问表A(锁住了表A),然后又访问表B;另一个用户B 访问表B(锁住了表B),然后企图访问表A;这时用户A由于用户B已经锁住表B,它必须等待用户B释放表B才能继续,同样用户B要等用户A释放表A才能继续,这就死锁就产生了。解.

2020-09-02 16:51:48 155 1

原创 死锁

死锁:是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。死锁产生的原因1) 系统资源的竞争通常系统中拥有的不可剥夺资源,其数量不足以满足多个进程运行的需要,使得进程在运行过程中,会因争夺资源而陷入僵局,如磁带机、打印机等。只有对不可剥夺资源的竞争才可能产生死锁,对可剥夺资源的竞争是不会引起死锁的。2) 进程推进顺序非法进程在运行过程中,请求和释放资源的顺序不当,也同样会导致死锁。例如,并发进程 P1、P2分别保持了资源R1

2020-09-02 16:30:50 82

原创 IP转唯一整数

先转二进制,左边补齐0,再右边补齐0,再转十进制计算$ip = '0210.110.11.49';function ipToInt($ip){ $iparr=explode('.',$ip); $d=0; foreach ($iparr as $key=>$value){ $t=decbin($value); $t=str_pad($t,8,'0',STR_PAD_LEFT); $t=str_pad($t,32-8*$ke

2020-09-02 14:28:27 349

原创 2020-08-28

l 主节点 binary log dump 线程当从节点连接主节点时,主节点会创建一个log dump 线程,用于发送bin-log的内容。在读取bin-log中的操作时,此线程会对主节点上的bin-log加锁,当读取完成,在发动给从节点之前,锁会被释放。l 从节点I/O线程当从节点上执行`start slave`命令之后,从节点会创建一个I/O线程用来连接主节点,请求主库中更新的bin-log。I/O线程接收到主节点binlog dump 进程发来的更新之后,保存在本地relay-lo..

2020-09-02 13:48:12 90

原创 2020-09-01

防盗链减少http 请求性能黄金法则1减少组件数量http连接产生的开销:域名解析--TCP连接--发送请求--等待--下载资源--解析时间1图片地图<map><area></area></map>2.css 精灵background_position3.合并脚本和样式表适独立的js比多个js减少时间4.图片使用base64编码减少页面请求数,base64方式将图片嵌入网页中,而不是从外部嵌入http缓存..

2020-09-01 20:39:14 96

原创 php 关联数组实现栈 队列

栈$arr=[];array_push($arr,1);array_push($arr,2);var_dump($arr);//array(2) {// [0]=>// int(1)// [1]=>// int(2)//}$arr=[1,2,3];echo array_pop($arr);//3var_dump($arr);//array(2) {// [0]=>// int(1)// [1]=>// int(2)//}

2020-09-01 17:30:18 150

原创 php 单链表构造 反转

<?phpclass Node{ public $data; public $next; public function __construct($data=null,$next=null){ $this->data=$data; $this->next=$next; }}class linkList{ public $head;//头节点,默认一个虚拟节点 public $size; publ.

2020-09-01 16:36:23 115

原创 php 函数 读取 url

1.$_SERVER//http://localhost/ceshi/c1.php?m=1$p1=$_SERVER['QUERY_STRING'];echo $p1;//结果 m=1$p2=$_SERVER['REQUEST_URI'];echo $p2;//结果 /ceshi/c1.php?m=12. pathinfo()parse_url()basename()$url='http://localhost/ceshi/c1.php?m=1';var_dump(p.

2020-09-01 14:30:50 114

原创 php master worker

master 进程只负责管理 worker进程,监听子进程挂掉之后,重新拉起新的子进程worker进程直接处理请求

2020-09-01 01:22:58 133

原创 php 7 变量

zval 三个变量:zend_value,u1,u2 三个联合体 16个字节表示php变量首先通过u1里面v的type判断类型,类型常用11个类型 。再根据这些类型去zend_value 中根据type 去取对应的值,如果是zend_long 取lval ,如果是IS_NULL,IS_TRUE,IS_FALSE, 直接在zval中 u1的type可以判断,如果是复杂类型,则根据type去取*str,*arrzend_string 写时复制,头部有个gc变量,gc中refcount 变量赋值给..

2020-08-31 22:23:47 199 3

转载 哈希碰撞攻击与防范机制

1.引子哈希表的原理是用数组来保存键值对,键值对存放的位置(下标)由键的哈希值决定,键的哈希值可以在参数时间内计算出来,这样哈希表插入、查找和删除的时间复杂度为O(1),但是这是理想的情况下,真实的情况是,键的哈希值存在冲突碰撞,也就是不同的键的哈希值可能相等,一个好的哈希函数应该是尽可能的减少碰撞。解决冲突碰撞的方法有分为两种:开放地址法和 链接法,这里不具体展开。哈希表一般都采用链接法来解决冲突碰撞,也就是用一个链表来将分配到同一个桶(键的哈希值一样)的键值对保存起来。所谓的哈希碰撞攻击就是,针

2020-08-26 16:29:33 1357 1

转载 从日志中获取ip最多的N个

既然内存只有1G 那么就不能直接使用HashMap进行统计, 可以使用MapReduce原理, 先切片, 通过Hash码进行分片, IP 相同的肯 定在一个文件中, 分片不宜太大,也不宜太小, 就用1000片吧, 之后统计每个文件中出现最多次数的 IP, 合并到一个文件中, 最后统计 合并的文件, 取最终结果apache日志分析可以获得很多有用的信息,现在来试试最基本的,获取最多访问的前10个IP地址及访问次数。既然是统计,那么awk是必不可少的,好用而高效。...

2020-08-26 11:04:50 200

原创 树的高度

class TreeNode{ public $left; public $right; public $val; public function __construct($val){ $this->val=$val; }}function TreeMinDepth($pRoot){ if(null===$pRoot){ return 0; } $leftMinDepth=TreeMinDepth($.

2020-08-26 10:36:55 104

原创 代码 快速排序

<?phpfunction swap(array &$arr,$a,$b){ $temp=$arr[$a]; $arr[$a]=$arr[$b]; $arr[$b]=$temp;}function Partition(array &$arr,$low,$high){ $pivot=$arr[$low]; while($low<$high){ while($low<$high && $arr[$h.

2020-08-26 10:22:43 90

原创 工厂模式

简单工厂//抽象产品interface Person{ public function getName(){}}//具体产品实现class Teacher implements Person{ public function getName(){ return '老师'; }}class Student implements Person{ public function getName(){ return '学生';.

2020-08-26 09:14:49 41

原创 php-fpm.conf中,worker进程的配置项

static 静态模式,启动的时候创建固定数量的worker 进程,实际请求大于worker进程的时候 包warning ondemand 按需分配模式,启动的时候不会创建worker进程,根据需要创建,释放在idle_timeout之后 ​ 这样不能及时的释放连接和建立连接需要消耗资源 dynamic 动态模式(默认):启动的时候创建指定数量的worker进程,根据情况合理的worker,定期检查worker,关闭闲置连接 ...

2020-08-26 09:11:36 182

原创 代码  递归求目录下的文件

递归求目录下的文件function getDir($path){ if(is_dir($path)){ $files=scandir($path); foreach ($files as $file) { //判断是不是文件 . 当前节点 ..父节点 if($file=='.' && $file=='..') continue; if..

2020-08-25 13:57:42 81

原创 斐波那契数列 青蛙跳台阶

大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。n<=390,1,1,2,3,5,8,,,function febonacci($n){ if($n<0 || $n>39){ return false; } $ret=[]; for($i=0;$i<=$n;$i++){ if($i==0){ $ret[$i]=0; continu.

2020-08-25 13:56:05 81

转载 TCP/IP拥塞窗口

2020-08-25 10:17:22 103

原创 三范式

1NF:字段不可分;如果实体中的某个属性有多个值时,必须拆分为不同的属性2NF:有主键,非主键字段依赖主键;任意一个字段都只依赖表中的同一个字段3NF:非主键字段不能相互依赖;一张表最多只存两层同类型信息解释:1NF:原子性 字段不可再分,否则就不是关系数据库;2NF:唯一性 一个表只说明一个事物;3NF:每列都与主键有直接关系,不存在传递依赖;...

2020-08-25 10:12:13 60

原创 进程 线程

进程是运行中的程序,线程是进程的内部的一个执行序列进程是资源分配的单元,线程是执行行单元进程间切换代价大,线程间切换代价小进程拥有资源多,线程拥有资源少多个线程共享进程的资源...

2020-08-25 10:05:36 78

转载 https四次握手

1. 客户端发起HTTPS请求2. 服务端的配置采用HTTPS协议的服务器必须要有一套数字证书,可以是自己制作或者CA证书。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用CA证书则不会弹出提示页面。这套证书其实就是一对公钥和私钥。公钥给别人加密使用,私钥给自己解密使用。3. 传送证书这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间等。4. 客户端解析证书这部分工作是有客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等,如..

2020-08-25 09:58:06 970

原创 http状态码

响应码分五种类型,由它们的第一位数字表示:1xx:信息,请求收到,继续处理2xx:成功,行为被成功地接受、理解和采纳3xx:重定向,为了完成请求,必须进一步执行的动作4xx:客户端错误,请求包含语法错误或者请求无法实现5xx:服务器错误,服务器不能实现一种明显无效的请求200 - 请求成功 404 - 请求的资源(网页等)不存在 500 - 内部服务器错误 301 (永久移动) 请求的网页已永久移动到新位置。服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自.

2020-08-25 09:50:27 82

原创 redis的各种淘汰算法

LRU淘汰LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。LFU算法LFU算法是Redis4.0里面新加的一种淘汰策略。它的全称是Least Frequently Used,它的核心思想是根据key的最近被访问的频率进行淘汰,很少被访问的优先被淘汰,被访问的多的则被留下来。LRU的优点:LRU相比于 LFU 而言性能更好一些,因为它算法相对比较简单,不..

2020-08-25 09:46:15 516

原创 apache的mod_php5和fastcgi

SAPI提供了一个和外部通信的接口,使得PHP可以和其他应用进行交互数据。对于一个基于apache的php应用,其运行流程可以简单归结如下mod_phpmod_php是在lamp体系中最常使用的工作方式。在这种模式下,php被编译为apache的一个内置模块,在启动时加载。当有一个php请求过来时,直接在httpd进程里完成php的解释运行,将结果返回。cgiWebserver接受客户端的HTTP请求,然后建立进程执行CGI程序,客户端的请求被传递给CGI程序,CGI..

2020-08-25 09:38:36 163

原创 nginx的正向代理和反向代理原理

正向代理:客户端 <一> 代理 一>服务端反向代理:客户端 一>代理 <一> 服务端正向代理的代理对象是客户端,反向代理的代理对象是服务端代理服务器站在客户端那边就是正向代理,代理服务器站在原始服务器那边就是反向代理,Nginx通过proxy_pass可以设置代理服务。...

2020-08-25 09:05:31 432

转载 nginx中php-fpm的socket是什么类型

nginx和fastcgi的通信方式有两种,一种是TCP 一种是unix socket TCP使用的是 127.0.0.1:9000端口,将fastcgi_pass参数修改为127.0.0.1:9000 unix socket 使用套接字/dev/shm/php-cgi.sock,两个进程引用同一个socket描述符文件就可以建立通道进行通信了,fastcgi_passunix:/dev/shm/fpm-cgi.sock; 创建sock文件...

2020-08-24 21:57:17 162

转载 2020-08-24

进程间通信的同步/异步, 阻塞/非阻塞首先强调一点, 网络上很多博文关于同步/异步, 阻塞非阻塞区别的解释其实都经不起推敲。 例如在严肃的这一高赞回答中 , 有如下解释(不准确):同步/异步关注的是消息通信机制 (synchronous communication/ asynchronous communication) 。 所谓同步,就是在发出一个调用时,在没有得到结果之前, 该调用就不返回。 异步则是相反,调用在发出之后,这个调用就直接返回了,所以没有返回结果阻塞/非阻塞关注的是...

2020-08-24 21:53:55 44

转载 Nginx实现负载均衡的方式有哪几种呢

什么是负载均衡当一台服务器的单位时间内的访问量越大时,服务器压力就越大,大到超过自身承受能力时,服务器就会崩溃。为了避免服务器崩溃,让用户有更好的体验,我们通过负载均衡的方式来分担服务器压力。我们可以建立很多很多服务器,组成一个服务器集群,当用户访问网站时,先访问一个中间服务器,在让这个中间服务器在服务器集群中选择一个压力较小的服务器,然后将该访问请求引入该服务器。如此以来,用户的每次访问,都会保证服务器集群中的每个服务器压力趋于平衡,分担了服务器压力,避免了服务器崩溃的情况。负载均衡是用.

2020-08-24 21:51:21 171

转载 2020-08-24

Nginx --->epoll模型Apache --->select模型处理大量连接的读写时,Apache所采用的select网络I/O模型比较低,用两个通俗的比喻来解释二者的区别: 第一个比喻: 例如你在大学读书,住的宿舍楼有很多房间,你的朋友要来找你,select版宿管大妈就会带着你的朋友到各个房间挨个去找,直到找到为止。而epoll版宿管大妈会先记下每位入住同学的房间号码,当你朋友来找你时,只需告诉你的朋友你住在哪个房间?不用亲自带着你的朋友满宿舍的找...

2020-08-24 21:46:18 89

原创 redis

set :无序 ,自动去重 的集合intsethashtablezset :有序,自动去重的集合dict+skiplist 数据多skiplist:ziplist: 数据量少redis 持久化RDB:快照触发方式1.配置文件2手动执行 save/bgsaverdb快照过程中,如何处理新的请求rdb数据格式优点:1.二进制文件,启动效率高2.主进程继续处理缺点:copyonwrite 耗费性能在复制上数据安全...

2020-08-21 18:13:23 71

原创 redis 数据类型 使用场景 实现原理

setzset:redis的ZSET是通过跳跃表来实现的,复杂度为O(logN),N是存放在ZSET中元素的个数。用redis来实现可以依赖于redis自身的持久化来实现持久化,redis的集群来支持高并发和高可用。因此开发成本很小,可以做到很实时。...

2020-08-21 18:12:32 65

空空如也

空空如也

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

TA关注的人

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