<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Ann__Zhou的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Ann__Zhou</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Ann__Zhou]]></copyright><item><title><![CDATA[vdom]]></title><link>https://blog.youkuaiyun.com/Ann__Zhou/article/details/127186652</link><guid>https://blog.youkuaiyun.com/Ann__Zhou/article/details/127186652</guid><author>Ann__Zhou</author><pubDate>Thu, 06 Oct 2022 19:22:58 +0800</pubDate><description><![CDATA[v dom]]></description><category></category></item><item><title><![CDATA[vdom]]></title><link>https://blog.youkuaiyun.com/Ann__Zhou/article/details/127186651</link><guid>https://blog.youkuaiyun.com/Ann__Zhou/article/details/127186651</guid><author>Ann__Zhou</author><pubDate>Thu, 06 Oct 2022 19:22:58 +0800</pubDate><description><![CDATA[v dom]]></description><category></category></item><item><title><![CDATA[前端组件化 MVVM]]></title><link>https://blog.youkuaiyun.com/Ann__Zhou/article/details/127161966</link><guid>https://blog.youkuaiyun.com/Ann__Zhou/article/details/127161966</guid><author>Ann__Zhou</author><pubDate>Tue, 04 Oct 2022 14:35:22 +0800</pubDate><description><![CDATA[vue MVVM]]></description><category></category></item><item><title><![CDATA[大访问量]]></title><link>https://blog.youkuaiyun.com/Ann__Zhou/article/details/108395113</link><guid>https://blog.youkuaiyun.com/Ann__Zhou/article/details/108395113</guid><author>Ann__Zhou</author><pubDate>Thu, 03 Sep 2020 23:14:28 +0800</pubDate><description><![CDATA[请求量大，怎么支撑

1.合并css，减少背景图片，减少mysql查询

2 利用nginx expires利用浏览器缓存 ，减少查询

3 利用cdn

4 集群+负载均衡
]]></description><category></category></item><item><title><![CDATA[几种保持登录状态的方式]]></title><link>https://blog.youkuaiyun.com/Ann__Zhou/article/details/108389843</link><guid>https://blog.youkuaiyun.com/Ann__Zhou/article/details/108389843</guid><author>Ann__Zhou</author><pubDate>Thu, 03 Sep 2020 17:52:01 +0800</pubDate><description><![CDATA[三种保持会话的方式

（一）session机制保持会话

存在的问题

高并发情况下，会占用服务器大量内存
	分布式（一个业务分成几个子业务，部署在多个服务器）或者集群（一个业务部署在多个服务器）的时候，session不能共享。
解决方案

高并发的时候可以将session存储到redis，如果用户长时间没有访问，将session存储到redis，就减少了服务器的压力。
	分布式或者集群的时候，先通过redis来判断用户状态也可以实现session共享.
（二）cookie机制保持会话

使用的方法

登录]]></description><category></category></item><item><title><![CDATA[数据库 undo log redo log  bin log]]></title><link>https://blog.youkuaiyun.com/Ann__Zhou/article/details/108377996</link><guid>https://blog.youkuaiyun.com/Ann__Zhou/article/details/108377996</guid><author>Ann__Zhou</author><pubDate>Thu, 03 Sep 2020 13:58:15 +0800</pubDate><description><![CDATA[逻辑日志：可以简单理解为记录的就是sql语句
	物理日志：因为mysql数据最终是保存在数据页中的，物理日志记录的就是数据页变更



undo log 记录逻辑日志，是InnoDB存储引擎的日志

redo log 记录物理日志，是InnoDB存储引擎的日志

binlog 是mysql的逻辑日志，并且由Server层进行记录，使用任何存储引擎的mysql数据库都会记录binlog日志



redo log是循环写入，bin log是追加写入，不会覆盖之前的日志。




在计算机操作系统中，...]]></description><category></category></item><item><title><![CDATA[mysql 锁机制]]></title><link>https://blog.youkuaiyun.com/Ann__Zhou/article/details/108368430</link><guid>https://blog.youkuaiyun.com/Ann__Zhou/article/details/108368430</guid><author>Ann__Zhou</author><pubDate>Thu, 03 Sep 2020 00:20:15 +0800</pubDate><description><![CDATA[InnoDB与MyISAM的最大不同有两点：

一是支持事务（TRANSACTION）

二是采用了行级锁



Innodb行级锁

InnoDB行锁是通过给索引上的索引项加锁来实现的，这一点MySQL与Oracle不同，后者是通过在数据块中对相应数据行加锁来实现的。
	InnoDB这种行锁实现特点意味着：只有通过索引条件检索数据，InnoDB才使用行级锁，否则，InnoDB将使用表锁！
	mysql InnoDB引擎默认的修改数据语句：update,delete,insert都会自动给涉及到的数据加上.]]></description><category></category></item><item><title><![CDATA[乐观锁 悲观锁]]></title><link>https://blog.youkuaiyun.com/Ann__Zhou/article/details/108367535</link><guid>https://blog.youkuaiyun.com/Ann__Zhou/article/details/108367535</guid><author>Ann__Zhou</author><pubDate>Wed, 02 Sep 2020 18:31:27 +0800</pubDate><description><![CDATA[乐观锁 和 悲观锁 是针对处理并发资源的采用的方式

与mysql中提供的锁机制(表锁，行锁，排他锁，共享锁)不能混为一谈

悲观锁：就是对于数据的处理持悲观态度，总认为会发生并发冲突，获取和修改数据时，别人会修改数据。所以在整个数据处理过程中，需要将数据锁。

乐观锁：顾名思义，就是对数据的处理持乐观态度，乐观的认为数据一般情况下不会发生冲突，只有提交数据更新时，才会对数据是否冲突进行检测。如果检测有冲突，交给用户处理。



悲观锁实现：

利用 数据库 锁机制
	比如mysql的排他锁，select.]]></description><category></category></item><item><title><![CDATA[数据库 死锁]]></title><link>https://blog.youkuaiyun.com/Ann__Zhou/article/details/108365326</link><guid>https://blog.youkuaiyun.com/Ann__Zhou/article/details/108365326</guid><author>Ann__Zhou</author><pubDate>Wed, 02 Sep 2020 16:51:48 +0800</pubDate><description><![CDATA[数据库中两种基本的锁类型

排它锁（Exclusive Locks，即X锁）：当数据对象被加上排它锁时，其他的事务不能对它读取和修改。

共享锁（Share Locks，即S锁）：加了共享锁的数据对象可以被其他事务读取，但不能修改。



事务之间对资源访问顺序的交替

一个用户A 访问表A（锁住了表A），然后又访问表B；另一个用户B 访问表B（锁住了表B），然后企图访问表A；这时用户A由于用户B已经锁住表B，它必须等待用户B释放表B才能继续，同样用户B要等用户A释放表A才能继续，这就死锁就产生了。

解.]]></description><category></category></item><item><title><![CDATA[死锁]]></title><link>https://blog.youkuaiyun.com/Ann__Zhou/article/details/108364271</link><guid>https://blog.youkuaiyun.com/Ann__Zhou/article/details/108364271</guid><author>Ann__Zhou</author><pubDate>Wed, 02 Sep 2020 16:30:50 +0800</pubDate><description><![CDATA[死锁：

是指两个或两个以上的进程在执行过程中，因争夺资源而造成的一种互相等待的现象，若无外力作用，它们都将无法推进下去。

死锁产生的原因

1) 系统资源的竞争

通常系统中拥有的不可剥夺资源，其数量不足以满足多个进程运行的需要，使得进程在运行过程中，会因争夺资源而陷入僵局，如磁带机、打印机等。只有对不可剥夺资源的竞争才可能产生死锁，对可剥夺资源的竞争是不会引起死锁的。

2) 进程推进顺序非法

进程在运行过程中，请求和释放资源的顺序不当，也同样会导致死锁。例如，并发进程 P1、P2分别保持了资源R1]]></description><category></category></item><item><title><![CDATA[IP转唯一整数]]></title><link>https://blog.youkuaiyun.com/Ann__Zhou/article/details/108360799</link><guid>https://blog.youkuaiyun.com/Ann__Zhou/article/details/108360799</guid><author>Ann__Zhou</author><pubDate>Wed, 02 Sep 2020 14:28:27 +0800</pubDate><description><![CDATA[先转二进制，左边补齐0，再右边补齐0，再转十进制计算


$ip = '0210.110.11.49';
function ipToInt($ip){
    $iparr=explode('.',$ip);
    $d=0;
    foreach ($iparr as $key=&gt;$value){
        $t=decbin($value);
        $t=str_pad($t,8,'0',STR_PAD_LEFT);
        $t=str_pad($t,32-8*$ke]]></description><category></category></item><item><title><![CDATA[2020-08-28]]></title><link>https://blog.youkuaiyun.com/Ann__Zhou/article/details/108274181</link><guid>https://blog.youkuaiyun.com/Ann__Zhou/article/details/108274181</guid><author>Ann__Zhou</author><pubDate>Wed, 02 Sep 2020 13:48:12 +0800</pubDate><description><![CDATA[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..]]></description><category></category></item><item><title><![CDATA[2020-09-01]]></title><link>https://blog.youkuaiyun.com/Ann__Zhou/article/details/108338409</link><guid>https://blog.youkuaiyun.com/Ann__Zhou/article/details/108338409</guid><author>Ann__Zhou</author><pubDate>Tue, 01 Sep 2020 20:39:14 +0800</pubDate><description><![CDATA[防盗链



减少http 请求

性能黄金法则

1减少组件数量

http连接产生的开销：域名解析--TCP连接--发送请求--等待--下载资源--解析时间

1图片地图&lt;map&gt;&lt;area&gt;&lt;/area&gt;&lt;/map&gt;

2.css 精灵

background_position

3.合并脚本和样式表适

独立的js比多个js减少时间

4.图片使用base64编码减少页面请求数，base64方式将图片嵌入网页中，而不是从外部嵌入



http缓存..]]></description><category></category></item><item><title><![CDATA[php 关联数组实现栈  队列]]></title><link>https://blog.youkuaiyun.com/Ann__Zhou/article/details/108347000</link><guid>https://blog.youkuaiyun.com/Ann__Zhou/article/details/108347000</guid><author>Ann__Zhou</author><pubDate>Tue, 01 Sep 2020 17:30:18 +0800</pubDate><description><![CDATA[栈


$arr=[];
array_push($arr,1);
array_push($arr,2);
var_dump($arr);
//array(2) {
//  [0]=&gt;
//  int(1)
//  [1]=&gt;
//  int(2)
//}

$arr=[1,2,3];
echo array_pop($arr);
//3
var_dump($arr);
//array(2) {
//  [0]=&gt;
//  int(1)
//  [1]=&gt;
//  int(2)
//}
]]></description><category></category></item><item><title><![CDATA[php 单链表构造 反转]]></title><link>https://blog.youkuaiyun.com/Ann__Zhou/article/details/108345460</link><guid>https://blog.youkuaiyun.com/Ann__Zhou/article/details/108345460</guid><author>Ann__Zhou</author><pubDate>Tue, 01 Sep 2020 16:36:23 +0800</pubDate><description><![CDATA[&lt;?php
class Node{
    public $data;
    public $next;
    public function __construct($data=null,$next=null){
        $this-&gt;data=$data;
        $this-&gt;next=$next;
    }
}
class linkList{
    public $head;//头节点，默认一个虚拟节点
    public $size;
    publ.]]></description><category></category></item><item><title><![CDATA[php 函数 读取 url]]></title><link>https://blog.youkuaiyun.com/Ann__Zhou/article/details/108340589</link><guid>https://blog.youkuaiyun.com/Ann__Zhou/article/details/108340589</guid><author>Ann__Zhou</author><pubDate>Tue, 01 Sep 2020 14:30:50 +0800</pubDate><description><![CDATA[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=1

2. pathinfo()

parse_url()

basename()


$url='http://localhost/ceshi/c1.php?m=1';
var_dump(p.]]></description><category></category></item><item><title><![CDATA[php master worker]]></title><link>https://blog.youkuaiyun.com/Ann__Zhou/article/details/108333034</link><guid>https://blog.youkuaiyun.com/Ann__Zhou/article/details/108333034</guid><author>Ann__Zhou</author><pubDate>Tue, 01 Sep 2020 01:22:58 +0800</pubDate><description><![CDATA[master 进程只负责管理 worker进程，监听子进程挂掉之后，重新拉起新的子进程

worker进程直接处理请求




]]></description><category></category></item><item><title><![CDATA[php 7 变量]]></title><link>https://blog.youkuaiyun.com/Ann__Zhou/article/details/108329214</link><guid>https://blog.youkuaiyun.com/Ann__Zhou/article/details/108329214</guid><author>Ann__Zhou</author><pubDate>Mon, 31 Aug 2020 22:23:47 +0800</pubDate><description><![CDATA[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，*arr

zend_string 写时复制，头部有个gc变量，gc中refcount 变量赋值给..]]></description><category></category></item><item><title><![CDATA[哈希碰撞攻击与防范机制]]></title><link>https://blog.youkuaiyun.com/Ann__Zhou/article/details/108242472</link><guid>https://blog.youkuaiyun.com/Ann__Zhou/article/details/108242472</guid><author>Ann__Zhou</author><pubDate>Wed, 26 Aug 2020 16:29:33 +0800</pubDate><description><![CDATA[1.引子

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

所谓的哈希碰撞攻击就是，针]]></description><category></category></item><item><title><![CDATA[从日志中获取ip最多的N个]]></title><link>https://blog.youkuaiyun.com/Ann__Zhou/article/details/108224741</link><guid>https://blog.youkuaiyun.com/Ann__Zhou/article/details/108224741</guid><author>Ann__Zhou</author><pubDate>Wed, 26 Aug 2020 11:04:50 +0800</pubDate><description><![CDATA[既然内存只有1G 那么就不能直接使用HashMap进行统计, 可以使用MapReduce原理, 先切片, 通过Hash码进行分片, IP 相同的肯 定在一个文件中, 分片不宜太大,也不宜太小, 就用1000片吧, 之后统计每个文件中出现最多次数的 IP, 合并到一个文件中, 最后统计 合并的文件, 取最终结果









apache日志分析可以获得很多有用的信息，现在来试试最基本的，获取最多访问的前10个IP地址及访问次数。

既然是统计，那么awk是必不可少的，好用而高效。

...]]></description><category></category></item></channel></rss>