<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[An丶的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/AnPHPer</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; AnPHPer]]></copyright><item><title><![CDATA[Golang 每日一库]]></title><link>https://blog.youkuaiyun.com/AnPHPer/article/details/117924904</link><guid>https://blog.youkuaiyun.com/AnPHPer/article/details/117924904</guid><author>AnPHPer</author><pubDate>Tue, 15 Jun 2021 15:02:04 +0800</pubDate><description><![CDATA[github 项目地址

https://github.com/darjun/go-daily-lib
]]></description><category></category></item><item><title><![CDATA[Golang 依赖注入]]></title><link>https://blog.youkuaiyun.com/AnPHPer/article/details/117747223</link><guid>https://blog.youkuaiyun.com/AnPHPer/article/details/117747223</guid><author>AnPHPer</author><pubDate>Wed, 09 Jun 2021 16:30:12 +0800</pubDate><description><![CDATA[1. 手动实现依赖注入


package main

import "fmt"

type A struct {
	B *B
}

type B struct {
	Did int
}

func main() {
	var a A
	b := B{Did: 1}
	fmt.Println(b.Did)
	a.B = &amp;b
	fmt.Println(a.B.Did)
}

2.
]]></description><category></category></item><item><title><![CDATA[Golang动态调用方法]]></title><link>https://blog.youkuaiyun.com/AnPHPer/article/details/117703862</link><guid>https://blog.youkuaiyun.com/AnPHPer/article/details/117703862</guid><author>AnPHPer</author><pubDate>Tue, 08 Jun 2021 15:19:39 +0800</pubDate><description><![CDATA[main.go


package main

import (
	"lenu/call"
	"reflect"
)


type FuncMapsType map[string]reflect.Value

func main() {
	_, _ = CallFunc("Hello", "执行Hello方法")
	_, _ = CallFunc("World", "执行World方法")
}

func CallFunc(tableName string, args ... interface{}) (r]]></description><category></category></item><item><title><![CDATA[Golang实现定时任务]]></title><link>https://blog.youkuaiyun.com/AnPHPer/article/details/117702887</link><guid>https://blog.youkuaiyun.com/AnPHPer/article/details/117702887</guid><author>AnPHPer</author><pubDate>Tue, 08 Jun 2021 14:58:31 +0800</pubDate><description><![CDATA[package main

import (
	"github.com/robfig/cron/v3"
	"log"
)

func main() {
	c := cron.New()
	_, _ = c.AddFunc("@every 5s", timer)
	c.Start()
	select {}
}

func timer() {
	log.Println("每5s执行一次")
}


]]></description><category></category></item><item><title><![CDATA[深入理解 PHP 的 7 个预定义接口]]></title><link>https://blog.youkuaiyun.com/AnPHPer/article/details/105569296</link><guid>https://blog.youkuaiyun.com/AnPHPer/article/details/105569296</guid><author>AnPHPer</author><pubDate>Thu, 16 Apr 2020 23:05:42 +0800</pubDate><description><![CDATA[深入理解预定义接口场景：平常工作中写的都是业务模块，很少会去实现这样的接口，但是在框架里面用的倒是很多。

1. Traversable（遍历）接口


该接口不能被类直接实现，如果直接写了一个普通类实现了该遍历接口，是会直接报致命的错误，提示使用 Iterator（迭代器接口）或者 IteratorAggregate（聚合迭代器接口）来实现，这两个接口后面会介绍；所有通常情况下，我们只是会用来判...]]></description><category></category></item><item><title><![CDATA[MySQL 索引为什么要选择 B+ 树]]></title><link>https://blog.youkuaiyun.com/AnPHPer/article/details/94559934</link><guid>https://blog.youkuaiyun.com/AnPHPer/article/details/94559934</guid><author>AnPHPer</author><pubDate>Wed, 03 Jul 2019 14:22:49 +0800</pubDate><description><![CDATA[前言:

每天都在跟 mysql 打交道，你知道执行一条简单的 select 语句，都经历了哪些过程吗？

首先，mysql 主要是由 server 层和存储层两部分构成的。server 层主要包括连接器、查询缓存，分析器、优化器、执行器。存储层主要是用来存储和查询数据的，常用的存储引擎有 InnoDB、MyISAM，MySQL 5.5.5 版本后使用 InnoDB 作为默认存储引擎。

连接器
...]]></description><category></category></item><item><title><![CDATA[微服务架构下的鉴权，怎么做更优雅？]]></title><link>https://blog.youkuaiyun.com/AnPHPer/article/details/94554421</link><guid>https://blog.youkuaiyun.com/AnPHPer/article/details/94554421</guid><author>AnPHPer</author><pubDate>Wed, 03 Jul 2019 11:23:07 +0800</pubDate><description><![CDATA[从单体应用架构到分布式应用架构再到微服务架构，应用的安全访问在不断的经受考验。为了适应架构的变化、需求的变化，身份认证与鉴权方案也在不断的变革。面对数十个甚至上百个微服务之间的调用，如何保证高效安全的身份认证？面对外部的服务访问，该如何提供细粒度的鉴权方案？本文将会为大家阐述微服务架构下的安全认证与鉴权方案。


一、单体应用 VS 微服务

随着微服务架构的兴起，传统的单体应用场景下的身份认证...]]></description><category></category></item><item><title><![CDATA[控制反转，依赖注入概念理解]]></title><link>https://blog.youkuaiyun.com/AnPHPer/article/details/94554091</link><guid>https://blog.youkuaiyun.com/AnPHPer/article/details/94554091</guid><author>AnPHPer</author><pubDate>Wed, 03 Jul 2019 11:11:18 +0800</pubDate><description><![CDATA[我们先来介绍控制反转，依赖注入，这两个概念我们可以认为他们表达的同一种意思，举个通俗的例子，我们用户登录需要提供记录日志的功能，可以选择使用文件或者数据库。下面我们用代码来演示。


// 定义写日志的接口规范
interface log
{
    public function write();   
}

// 文件记录日志
class FileLog implements Log
{
  ...]]></description><category></category></item><item><title><![CDATA[PHP 设计模式(全)]]></title><link>https://blog.youkuaiyun.com/AnPHPer/article/details/94454434</link><guid>https://blog.youkuaiyun.com/AnPHPer/article/details/94454434</guid><author>AnPHPer</author><pubDate>Tue, 02 Jul 2019 16:40:27 +0800</pubDate><description><![CDATA[PHP设计模式 :

https://learnku.com/docs/php-design-patterns/2018

PHP之道 :

https://laravel-china.github.io/php-the-right-way/
]]></description><category></category></item><item><title><![CDATA[mysql 分组取指定条数的数据]]></title><link>https://blog.youkuaiyun.com/AnPHPer/article/details/93759125</link><guid>https://blog.youkuaiyun.com/AnPHPer/article/details/93759125</guid><author>AnPHPer</author><pubDate>Wed, 26 Jun 2019 17:53:55 +0800</pubDate><description><![CDATA[在数据条数不足的情况未测试:

表结构如下:





刘德华,周润发,未命名三个分组,每组三条数据

实现三个分组,每组取一条数据

SQL如下:


SELECT
	*
FROM
	(
		(
			SELECT
				g.id,
				g.project_id,
				g.group_name,
				g.group_user_id,
				ug.user_name
			FROM...]]></description><category></category></item><item><title><![CDATA[PHP文件缓存实现]]></title><link>https://blog.youkuaiyun.com/AnPHPer/article/details/85600741</link><guid>https://blog.youkuaiyun.com/AnPHPer/article/details/85600741</guid><author>AnPHPer</author><pubDate>Wed, 02 Jan 2019 10:37:02 +0800</pubDate><description><![CDATA[有些时候，我们不希望使用redis等第三方缓存，使得系统依赖于其他服务。这时候，文件缓存会是一个不错的选择。

我们需要文件缓存实现哪些功能：

功能实现：get、set、has、increment、decrement、delete、flush

能够在较短的时间内返回数据

支持key过期

    为了避免一个文件内的数据过大，造成读取文件的时候延迟较高，我们采用一个key-value一个文件...]]></description><category></category></item><item><title><![CDATA[深入理解控制反转（IoC）和依赖注入（DI）]]></title><link>https://blog.youkuaiyun.com/AnPHPer/article/details/85282474</link><guid>https://blog.youkuaiyun.com/AnPHPer/article/details/85282474</guid><author>AnPHPer</author><pubDate>Thu, 27 Dec 2018 14:52:19 +0800</pubDate><description><![CDATA[
友情提示：本文有点长，但绝对都是干货，请耐心读完，必有收获！


容器，字面上理解就是装东西的东西。常见的变量、对象属性等都可以算是容器。一个容器能够装什么，全部取决于你对该容器的定义。当然，有这样一种容器，它存放的不是文本、数值，而是对象、对象的描述（类、接口）或者是提供对象的回调，通过这种容器，我们得以实现许多高级的功能，其中最常提到的，就是 “解耦” 、“依赖注入（DI）”。本文就从这里开...]]></description><category></category></item><item><title><![CDATA[php session_set_save_handler 函数的用法]]></title><link>https://blog.youkuaiyun.com/AnPHPer/article/details/85252184</link><guid>https://blog.youkuaiyun.com/AnPHPer/article/details/85252184</guid><author>AnPHPer</author><pubDate>Tue, 25 Dec 2018 18:13:32 +0800</pubDate><description><![CDATA[&lt;?php   
/**
@filename:     session.class.php  
@description:  数据库保存在线用户session，实现在线用户功能！  
@notice:       session过期时间一个小时，因为我们的站点是使用cookie（有效时间是1小时）登录。                  
           因此我们只记录用户登录的时间...]]></description><category></category></item><item><title><![CDATA[php-fpm的配置和优化]]></title><link>https://blog.youkuaiyun.com/AnPHPer/article/details/83749254</link><guid>https://blog.youkuaiyun.com/AnPHPer/article/details/83749254</guid><author>AnPHPer</author><pubDate>Mon, 05 Nov 2018 14:35:25 +0800</pubDate><description><![CDATA[我在前面几篇中，很详细的讲述了php-fpm的各种介绍，和安装。今天来看一下它的配置文件php-fpm的各种配置以及一些常见的优化。

php-fpm的安装目录

下面是我的平时的环境搭建php的各种安装目录，大家的基本也差不多。

centos等linux平台



 

/usr/local/php/php
	/usr/local/php/etc/php.ini
	/usr/local/php...]]></description><category></category></item><item><title><![CDATA[php-fpm的安装和启动]]></title><link>https://blog.youkuaiyun.com/AnPHPer/article/details/83749238</link><guid>https://blog.youkuaiyun.com/AnPHPer/article/details/83749238</guid><author>AnPHPer</author><pubDate>Mon, 05 Nov 2018 14:34:44 +0800</pubDate><description><![CDATA[在前面我学习过了php中的mod_php模式和mode_fastcgi和php-fpm模式：地址，中大致的讲述了几种模式的区别，也明白了php-fpm是fastcgi模式的管理器。今天就来看下php如何安装php-fpm，以及运行。

安装 php-fpm

我的机器是centos 6.2 之前就已经安装过了php 5.4.11，PHP在 5.3.3 之后已经讲php-fpm写入php源码核心了。...]]></description><category></category></item><item><title><![CDATA[php中fastcgi和php-fpm是什么东西]]></title><link>https://blog.youkuaiyun.com/AnPHPer/article/details/83749206</link><guid>https://blog.youkuaiyun.com/AnPHPer/article/details/83749206</guid><author>AnPHPer</author><pubDate>Mon, 05 Nov 2018 14:33:51 +0800</pubDate><description><![CDATA[最近在研究和学习php的性能方面的知识，看到了factcgi以及php-fpm，发现我对他们是少之又少的理解，可以说几乎是一无所知，想想还是蛮可怕的。决定仔细的学习一下关于这方面的知识。

参考和学习了以下文章： 
1. mod_php和mod_fastcgi和php-fpm的介绍,对比,和性能数据 
2. 实战Nginx_取代

为了如何一步步的引出fastcgi和php-fpm，我先一点一点的...]]></description><category></category></item><item><title><![CDATA[对比PHP对MySQL的缓冲查询和无缓冲查询]]></title><link>https://blog.youkuaiyun.com/AnPHPer/article/details/83744594</link><guid>https://blog.youkuaiyun.com/AnPHPer/article/details/83744594</guid><author>AnPHPer</author><pubDate>Mon, 05 Nov 2018 10:24:46 +0800</pubDate><description><![CDATA[关于缓冲查询和无缓冲查询
MySQL的客户端有两种类型的查询：缓冲查询：将接收查询的结果并把他们存储在客户端的缓存中，而且接下来获取行记录的请求仅仅从本地内获取。
(1)优点：可以在结果集中自由地移动“当前行”的指针，这样很容易找到，因为结果是存在客户端的。
(2)缺点：需要额外的内存来存储这些结果集，而且需要大量的内存，另外，php中用来运行查询的函数会一直到所有的结果都接收才会返回值。

无缓...]]></description><category></category></item><item><title><![CDATA[MySQL回滚到某一时刻数据的方法]]></title><link>https://blog.youkuaiyun.com/AnPHPer/article/details/83116691</link><guid>https://blog.youkuaiyun.com/AnPHPer/article/details/83116691</guid><author>AnPHPer</author><pubDate>Wed, 17 Oct 2018 19:54:49 +0800</pubDate><description><![CDATA[对于有归档日志的数据库来说，原理上都具备全库回滚到之前某一时刻的能力。在这方面最好用的Orale数据库，使用Oracle数据库的RMAN工具，可以方便的设置全备，增备保留的时间和自动清理，RMAN自己记录之前做过哪些备份操作，有一份备份列表，所以可以全自动的根据全备、增备、归档日志进行回滚，只需一条命令。这个可以参考我之前写的博客
Oracle Database 12c RMAN全量+增量备份+归...]]></description><category></category></item><item><title><![CDATA[PHP  JWT  token加密]]></title><link>https://blog.youkuaiyun.com/AnPHPer/article/details/82190027</link><guid>https://blog.youkuaiyun.com/AnPHPer/article/details/82190027</guid><author>AnPHPer</author><pubDate>Wed, 29 Aug 2018 17:54:16 +0800</pubDate><description><![CDATA[前言

关于jwt的介绍这里就不阐述了，相信你已经在网上看到了N篇介绍文章（你丫的讲那么多介绍到是告诉我怎么样呀！），关于php使用jwt的相关的使用却少的可怜，有的也看的模模糊糊，于是就自己整理，也方便自己以后进行查看。

jwt版本

php中jwt有3个版本：2.0、2.2、3.0。so！我们选择的是3.0的版本。别问为什么，你买电子产品都是买新不买旧呢。(说到这，想到了即将到手的iphon...]]></description><category></category></item><item><title><![CDATA[PHP 垃圾回收与内存管理指引]]></title><link>https://blog.youkuaiyun.com/AnPHPer/article/details/81536610</link><guid>https://blog.youkuaiyun.com/AnPHPer/article/details/81536610</guid><author>AnPHPer</author><pubDate>Thu, 09 Aug 2018 14:49:59 +0800</pubDate><description><![CDATA[引用计数

在 PHP 5.2 及以前的版本中，PHP 的垃圾回收采用的是 引用计数 算法。

引用计数基础知识

引用计数基础知识

php 的变量存储在「zval」变量容器（数据结构）中，「zval」属性包含如下信息：

当前变量的数据类型；
	当前变量的值；
	用于标识变量是否为引用传递的 is_ref 布尔类型标识；
	指向该「zval」变量容器的变量个数的 refcount 标识符（即这...]]></description><category></category></item></channel></rss>