<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[lazy-ants的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/github_35634180</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; github_35634180]]></copyright><item><title><![CDATA[laravel跨库事务]]></title><link>https://blog.youkuaiyun.com/github_35634180/article/details/102784546</link><guid>https://blog.youkuaiyun.com/github_35634180/article/details/102784546</guid><author>github_35634180</author><pubDate>Mon, 28 Oct 2019 17:10:22 +0800</pubDate><description><![CDATA[Laravel 下的跨库事务操作是基于连接的 当执行 DB::beginTransaction(); 的时候 其实是和默认的数据库配置建立了连接 后面的操作 commit 或者 rollback 都是操作的这个默认数据库 如果在这中间操作了其他的数据库 对他是不生效的
解决方案
开始事务的时候就指定连接
同时 commit 和 rollback 都 指定连接
增加多数据库配置
在配置目录 conf...]]></description><category></category></item><item><title><![CDATA[链表反转]]></title><link>https://blog.youkuaiyun.com/github_35634180/article/details/100034504</link><guid>https://blog.youkuaiyun.com/github_35634180/article/details/100034504</guid><author>github_35634180</author><pubDate>Fri, 23 Aug 2019 11:34:32 +0800</pubDate><description><![CDATA[class Node
{
    private $value;
    private $next;

    public function __construct($value = null)
    {
        $this-&gt;value = $value;
    }

    public function getValue()
    {
        return $...]]></description><category></category></item><item><title><![CDATA[写个函数，判断下面扩号是否闭合，左右对称即为闭合： ((()))，)(())，(())))，(((((())，(()())，()()]]></title><link>https://blog.youkuaiyun.com/github_35634180/article/details/99247158</link><guid>https://blog.youkuaiyun.com/github_35634180/article/details/99247158</guid><author>github_35634180</author><pubDate>Sun, 11 Aug 2019 23:53:38 +0800</pubDate><description><![CDATA[遇到左括号进栈,遇到右括号出栈(如果栈里没有,说明不闭合),遍历到最后元素,判断栈内为空,即为闭合
function checkClose($str)
{
    $stack = [];

    for ($i = 0; $i &lt; strlen($str); ++$i) {
        if ($str[$i] == "(") {
            $stack[] = "("...]]></description><category></category></item><item><title><![CDATA[PHP内置字符串的实现]]></title><link>https://blog.youkuaiyun.com/github_35634180/article/details/98878298</link><guid>https://blog.youkuaiyun.com/github_35634180/article/details/98878298</guid><author>github_35634180</author><pubDate>Thu, 08 Aug 2019 17:24:35 +0800</pubDate><description><![CDATA[//字符串长度  
function strlen ($str)  
{  
        if ($str == '' ) return 0;  
        $count =  0;  
        while (1){  
                if ( $str[$count] != NULL){  
                         $count++;...]]></description><category></category></item><item><title><![CDATA[cookie与session区别]]></title><link>https://blog.youkuaiyun.com/github_35634180/article/details/98877358</link><guid>https://blog.youkuaiyun.com/github_35634180/article/details/98877358</guid><author>github_35634180</author><pubDate>Thu, 08 Aug 2019 17:08:28 +0800</pubDate><description><![CDATA[1.HTTP中GET与POST的区别，注意最后一条

GET在浏览器回退时是无害的，而POST会再次提交请求。
GET产生的URL地址可以被Bookmark，而POST不可以。
GET请求会被浏览器主动cache，而POST不会，除非手动设置。
GET请求只能进行url编码，而POST支持多种编码方式。
GET请求参数会被完整保留在浏览器历史记录里，而POST中的参数不会被保留。
GET请求在UR...]]></description><category></category></item><item><title><![CDATA[redis面试相关]]></title><link>https://blog.youkuaiyun.com/github_35634180/article/details/98876893</link><guid>https://blog.youkuaiyun.com/github_35634180/article/details/98876893</guid><author>github_35634180</author><pubDate>Thu, 08 Aug 2019 17:04:28 +0800</pubDate><description><![CDATA[redis与memcache区别


Redis 支持更加丰富的数据存储类型，String、Hash、List、Set 和 Sorted Set。Memcached
仅支持简单的 key-value 结构。


Memcached key-value存储比 Redis 采用 hash 结构来做 key-value 存储的内存利用率更高。


Redis 提供了事务的功能，可以保证一系列命令的原子性...]]></description><category></category></item><item><title><![CDATA[Linux常用命令]]></title><link>https://blog.youkuaiyun.com/github_35634180/article/details/98487745</link><guid>https://blog.youkuaiyun.com/github_35634180/article/details/98487745</guid><author>github_35634180</author><pubDate>Mon, 05 Aug 2019 14:55:45 +0800</pubDate><description><![CDATA[查看当前文件夹有多少个php结尾的文件
find . -type f -print|grep php|wc -l

]]></description><category></category></item><item><title><![CDATA[网页输入地址回车]]></title><link>https://blog.youkuaiyun.com/github_35634180/article/details/98485444</link><guid>https://blog.youkuaiyun.com/github_35634180/article/details/98485444</guid><author>github_35634180</author><pubDate>Mon, 05 Aug 2019 14:24:36 +0800</pubDate><description><![CDATA[0、浏览器本地缓存匹配；
1、本地hosts映射对比;
2、本地dns缓存解析；
3、远程dns解析获得服务器ip地址；
4、浏览器发送tcp连接请求包(syn)；
5、请求包经过传输层、网络层、数据链路层封装通过网卡到达路由器；
6、路由器转发数据包到所属运营商服务器；
7、运营商服务器通过寻址最短路径通过中继节点到达指定ip地址；
8、服务器端可能存在反向代理或者负载均衡，都是直接转发请求至上...]]></description><category></category></item><item><title><![CDATA[开源工具]]></title><link>https://blog.youkuaiyun.com/github_35634180/article/details/98476391</link><guid>https://blog.youkuaiyun.com/github_35634180/article/details/98476391</guid><author>github_35634180</author><pubDate>Sun, 04 Aug 2019 23:47:12 +0800</pubDate><description><![CDATA[快速制作 H5 页面：码良

在线录屏工具：RecordScreen.io


]]></description><category></category></item><item><title><![CDATA[redis的bitmap使用场景]]></title><link>https://blog.youkuaiyun.com/github_35634180/article/details/98452341</link><guid>https://blog.youkuaiyun.com/github_35634180/article/details/98452341</guid><author>github_35634180</author><pubDate>Sun, 04 Aug 2019 11:43:57 +0800</pubDate><description><![CDATA[BitMap是什么
就是通过一个bit位来表示某个元素对应的值或者状态,其中的key就是对应元素本身。我们知道8个bit可以组成一个Byte，所以bitmap本身会极大的节省储存空间。
Redis中的BitMap
Redis从2.2.0版本开始新增了setbit,getbit,bitcount等几个bitmap相关命令。虽然是新命令，但是并没有新增新的数据类型，因为setbit等命令只不过是在se...]]></description><category></category></item><item><title><![CDATA[redis实现接口频率访问]]></title><link>https://blog.youkuaiyun.com/github_35634180/article/details/98451884</link><guid>https://blog.youkuaiyun.com/github_35634180/article/details/98451884</guid><author>github_35634180</author><pubDate>Sun, 04 Aug 2019 11:29:37 +0800</pubDate><description><![CDATA[为什么限制访问频率
做服务接口时通常需要用到请求频率限制 Rate limiting，例如限制一个用户1分钟内最多可以范围100次
目的： 主要用来保证服务性能和保护数据安全
因为如果不进行限制，服务调用者可以随意访问，想调几次就调几次，会给服务造成很大的压力，降低性能，再比如有的接口需要验证调用者身份，如果不进行访问限制，调用者可以进行暴力尝试
使用 Redis 来实现
通过 Redis 可以方...]]></description><category></category></item><item><title><![CDATA[redis布隆过滤器]]></title><link>https://blog.youkuaiyun.com/github_35634180/article/details/98450944</link><guid>https://blog.youkuaiyun.com/github_35634180/article/details/98450944</guid><author>github_35634180</author><pubDate>Sun, 04 Aug 2019 11:14:44 +0800</pubDate><description><![CDATA[布隆过滤器用于字符串去重复，比如网络爬虫抓取时URL去重、邮件提供商反垃圾黑名单Email地址去重。等等。用哈希表也可以用于元素去重，但是占用空间比较大，而且空间使用率只有50%。
　　布隆过滤器只占哈希表的1/8或1/4的空间复杂度，就能解决同样的问题，但是有一定的误判，而且不能删除已有元素。元素越多，误报率越大，但是不会漏报。对于还需要删除的布隆过滤器，还有Counter Bloom Filt...]]></description><category></category></item><item><title><![CDATA[高并发QPS]]></title><link>https://blog.youkuaiyun.com/github_35634180/article/details/98450544</link><guid>https://blog.youkuaiyun.com/github_35634180/article/details/98450544</guid><author>github_35634180</author><pubDate>Sun, 04 Aug 2019 11:09:53 +0800</pubDate><description><![CDATA[什么是高并发?
高并发是互联网分布式系统架构的性能指标之一,它通常是指单位时间内系统能够同时处理的请求数,简单点说，就是QPS(Queries per second)。
高并发的基本表现为单位时间内系统能够同时处理的请求数,
高并发的核心是对CPU资源的有效压榨。
上下文切换
并行：两个事件同一时刻完成。
并发：两个事件在同一时间段内交替发生,从宏观上看，两个事件都发生了。
线程是操作系统调度的最...]]></description><category></category></item><item><title><![CDATA[一致性Hash算法]]></title><link>https://blog.youkuaiyun.com/github_35634180/article/details/98450076</link><guid>https://blog.youkuaiyun.com/github_35634180/article/details/98450076</guid><author>github_35634180</author><pubDate>Sun, 04 Aug 2019 11:04:54 +0800</pubDate><description><![CDATA[一致性哈希算法是分布式系统中常用的算法，为什么要用这个算法？
比如：一个分布式存储系统，要将数据存储到具体的节点（服务器）上， 在服务器数量不发生改变的情况下，如果采用普通的hash再对服务器总数量取模的方法（如key%服务器总数量），如果期间有服务器宕机了或者需要增加服务器，问题就出来了。 同一个key经过hash之后，再与服务器总数量取模的结果跟之前的结果会不一样，这就导致了之前保存数据的丢失...]]></description><category></category></item><item><title><![CDATA[敏感词过滤--trie树]]></title><link>https://blog.youkuaiyun.com/github_35634180/article/details/98447463</link><guid>https://blog.youkuaiyun.com/github_35634180/article/details/98447463</guid><author>github_35634180</author><pubDate>Sun, 04 Aug 2019 10:37:36 +0800</pubDate><description><![CDATA[定义
trie 树也称为字典树、单词查找树，最大的特点就是共享字符串的公共前缀来达到节省空间的目的了。例如，字符串 "abc"和"abd"构成的 trie 树如下：

trie 树的根节点不存任何数据，每整个个分支代表一个完整的字符串。像 abc 和 abd 有公共前缀 ab，所以我们可以共享节点 ab。如果再插入 abf，则变成这样：

如果我再插入 bc，则是这样（bc 和其他三个字符串没有公...]]></description><category></category></item><item><title><![CDATA[php中文字符串翻转]]></title><link>https://blog.youkuaiyun.com/github_35634180/article/details/98210524</link><guid>https://blog.youkuaiyun.com/github_35634180/article/details/98210524</guid><author>github_35634180</author><pubDate>Fri, 02 Aug 2019 16:29:45 +0800</pubDate><description><![CDATA[&lt;?php
header("content-type:text/html;charset=utf-8");
 /**
此函数的作用是反转中文字符串
mb_strlen() 获取字符的长度
mb_substr() 获取字符的单个元素
krsort() 按照键值逆序排序数组
implode() 将数组拼接为字符串
explode() 使用字符串分隔字符串
 */
function str_rev...]]></description><category></category></item><item><title><![CDATA[二分查找及其变种]]></title><link>https://blog.youkuaiyun.com/github_35634180/article/details/98209789</link><guid>https://blog.youkuaiyun.com/github_35634180/article/details/98209789</guid><author>github_35634180</author><pubDate>Fri, 02 Aug 2019 16:16:29 +0800</pubDate><description><![CDATA[数组类的二分查找
function binarySearch($arr,$x){
    $start=0;
    $end=count($arr)-1;
    while($start&lt;=$end){
        $mid=intval(($start+$end)/2);//这里只需要保证中间项下标的计算值为整数即可，也可以四舍五入，不影响结果
        if($arr[$m...]]></description><category></category></item><item><title><![CDATA[多维数组排序 array_multisort()]]></title><link>https://blog.youkuaiyun.com/github_35634180/article/details/98209011</link><guid>https://blog.youkuaiyun.com/github_35634180/article/details/98209011</guid><author>github_35634180</author><pubDate>Fri, 02 Aug 2019 16:12:36 +0800</pubDate><description><![CDATA[实现指定多维数组一个字段排序
元数据：
$array = array(
    0=&gt;array('id'=&gt;8,'name'=&gt;'Tom'),
    1=&gt;array('id'=&gt;9,'name'=&gt;'Peter'),
    2=&gt;array('id'=&gt;5,'name'=&gt;'Jack')
);

实现：通过将待排序数组的各个数组的$fi...]]></description><category></category></item><item><title><![CDATA[nginx和fpm的进程数配置和502，504错误]]></title><link>https://blog.youkuaiyun.com/github_35634180/article/details/98207788</link><guid>https://blog.youkuaiyun.com/github_35634180/article/details/98207788</guid><author>github_35634180</author><pubDate>Fri, 02 Aug 2019 15:47:02 +0800</pubDate><description><![CDATA[502 和 php-fpm.conf
1.php-cgi进程数不够用。php执行时间长，导致没有空闲进程处理新请求。
2.php-cgi进程死掉。php-fpm超时时间短，当前进程执行超时关闭连接。
实例：
1.request_terminate_timeout引起的资源问题
request_terminate_timeout默认值为 0 秒，也就是说，PHP 脚本会一直执行下去。
php.ini...]]></description><category></category></item><item><title><![CDATA[多进程（三）--socket]]></title><link>https://blog.youkuaiyun.com/github_35634180/article/details/98207155</link><guid>https://blog.youkuaiyun.com/github_35634180/article/details/98207155</guid><author>github_35634180</author><pubDate>Fri, 02 Aug 2019 15:32:26 +0800</pubDate><description><![CDATA[多进程和多线程其实是作用是相同的。区别是

线程是在同一个进程内的，可以共享内存变量实现线程间通信
线程比进程更轻量级，开很大量进程会比线程消耗更多系统资源

多线程也存在一些问题：

线程读写变量存在同步问题，需要加锁
锁的粒度过大会有性能问题，可能会导致只有1个线程在运行，其他线程都在等待锁。这样就不是并行了
同时使用多个锁，逻辑复杂，一旦某个锁没被正确释放，可能会发生线程死锁
某个线程发生致...]]></description><category></category></item></channel></rss>