<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[andy2541的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/andy2541</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; andy2541]]></copyright><item><title><![CDATA[php利用root权限执行shell脚本 （转）]]></title><link>https://blog.youkuaiyun.com/andy2541/article/details/101792239</link><guid>https://blog.youkuaiyun.com/andy2541/article/details/101792239</guid><author>andy2541</author><pubDate>Wed, 26 Jul 2017 22:02:00 +0800</pubDate><description><![CDATA[转一篇博客，之前搞这个东西搞了好久，结果今天晚上看到了一篇救命博客，瞬间开心了。。。转载转载
利用sudo来赋予Apache的用户root的执行权限，下面记录一下：
利用PHP利用root权限执行shell脚本必须进行以下几个步骤：（所有步骤都是我亲自实验，若有不妥可指出，谢谢！）
1. 确定一下你的Apache的执行用户是谁。注：不一定就是nobody，我自行安装的httpd，我...]]></description><category></category></item><item><title><![CDATA[一个菜鸟程序员的16年岁末留忆]]></title><link>https://blog.youkuaiyun.com/andy2541/article/details/101792238</link><guid>https://blog.youkuaiyun.com/andy2541/article/details/101792238</guid><author>andy2541</author><pubDate>Mon, 30 Jan 2017 23:01:00 +0800</pubDate><description><![CDATA[不知道为什么，突然觉得自己应该写点什么东西了。也许是震惊于今天突然发现2017年春节后自己已经25岁了，也许是羞愧于即将25岁的自己还仍一事无成，也许是迷茫于25岁以后自己的未来究竟在哪里？但是总觉得自己应该抓住在脑海中还未完全溜走的2016年的点滴记忆，对即将过去的16年的自己留下点什么。
   人们总说对一个人的了解无非于他的生活、工作和学习，自己也就从这几个方面写...]]></description><category></category></item><item><title><![CDATA[PHP简单socket编程]]></title><link>https://blog.youkuaiyun.com/andy2541/article/details/101792234</link><guid>https://blog.youkuaiyun.com/andy2541/article/details/101792234</guid><author>andy2541</author><pubDate>Sun, 27 Nov 2016 22:45:00 +0800</pubDate><description><![CDATA[今天再看一点邮件发送的功能，所以了解一下socket变成，看到了一篇不错的文章，转发过来做个笔记吧。
原文链接：http://www.cnblogs.com/thinksasa/archive/2013/02/26/2934206.html
文章中的例子已亲测，没有问题。。。
对TCP/IP、UDP、Socket编程这些词你不会很陌生吧？随着网络技术的发展，这些词充斥着我们的耳朵。...]]></description><category></category></item><item><title><![CDATA[PHP设计模式之委托模式]]></title><link>https://blog.youkuaiyun.com/andy2541/article/details/101792236</link><guid>https://blog.youkuaiyun.com/andy2541/article/details/101792236</guid><author>andy2541</author><pubDate>Mon, 19 Sep 2016 11:25:00 +0800</pubDate><description><![CDATA[委托模式：　　通过分配或委托至其他对象，委托设计模式能够去除核心对象中的判决和复杂的功能性。

 1 class Bank{
 2     protected $info;
 3 
 4     /*
 5     设置基本信息
 6     @param string $type 类型。例如"RMB"
 7     @param int $money 利率。例如"0.4...]]></description><category></category></item><item><title><![CDATA[PHP设计模式之装饰器模式]]></title><link>https://blog.youkuaiyun.com/andy2541/article/details/101792235</link><guid>https://blog.youkuaiyun.com/andy2541/article/details/101792235</guid><author>andy2541</author><pubDate>Sun, 18 Sep 2016 14:35:00 +0800</pubDate><description><![CDATA[装饰器模式：如果已有对象的部分内容或功能性发生改变，但是不需要修改原始对象的结构或不使用继承，动态的扩展一个对象的功能，则应该使用装饰器模式。简单点说：就是我们不应该去修改已有的类，而是通过创建另外一个装饰器类，通过这个装饰器类去动态的扩展其需要修改的内容，这样做的好处就是————1、我们可以保证类的层次不会因过多而发生混乱。2、当我们需求的修改很小时，不用改变原有的数据结构。
代码引...]]></description><category></category></item><item><title><![CDATA[设计模式之建造者模式]]></title><link>https://blog.youkuaiyun.com/andy2541/article/details/101792237</link><guid>https://blog.youkuaiyun.com/andy2541/article/details/101792237</guid><author>andy2541</author><pubDate>Tue, 13 Sep 2016 16:15:00 +0800</pubDate><description><![CDATA[建造者模式：将复杂对象的创建过程和表示进行分离（好吧，我也看不懂什么意思1）。来点我人类能听懂的话：1、在客户端看来需要的仅仅是实例化后的类对象（大多数情况下是需要类的属性）。2、传统方式下当类有了之后，一般直接通过new class()的方式直接进行实例化，然后通过$obj-&gt;set1()构建属性1，$obj-&gt;set2()构建属性2，$obj-&gt;set3()构建属性...]]></description><category></category></item><item><title><![CDATA[PHP代码优化技巧]]></title><link>https://blog.youkuaiyun.com/andy2541/article/details/101792232</link><guid>https://blog.youkuaiyun.com/andy2541/article/details/101792232</guid><author>andy2541</author><pubDate>Tue, 30 Aug 2016 17:46:00 +0800</pubDate><description><![CDATA[echo比print快。
使用echo的多重参数代替字符串连接。
在执行for循环之前确定最大循环数，不要每循环一次都计算最大值，最好运用foreach代替。
对global变量，应该用完就unset()掉。
用单引号代替双引号来包含字符串，这样做会更快一些。因为PHP会在双引号包围的字符串中搜寻变量，单引号则不会。
函数代替正则表达式完成相同功能。
当执行变量$i的递增...]]></description><category></category></item><item><title><![CDATA[PHP数组排序函数array_multisort()函数详解]]></title><link>https://blog.youkuaiyun.com/andy2541/article/details/101792233</link><guid>https://blog.youkuaiyun.com/andy2541/article/details/101792233</guid><author>andy2541</author><pubDate>Mon, 22 Aug 2016 10:33:00 +0800</pubDate><description><![CDATA[这个函数因为用到了，并且在网上找了半天终于找到了一个写的通俗易懂的文章，在这里分享给大家。
　 原文链接：http://blog.163.com/lgh_2002/blog/static/4401752620115242345435/
array_multisort()这个函数可以对多个PHP数组进行排序，排序结果是所有的数组都按第一个数组的顺序进行排列——有点拗口，真的，并...]]></description><category></category></item><item><title><![CDATA[MySQL索引背后的数据结构及最左原则]]></title><link>https://blog.youkuaiyun.com/andy2541/article/details/101792231</link><guid>https://blog.youkuaiyun.com/andy2541/article/details/101792231</guid><author>andy2541</author><pubDate>Sun, 26 Jun 2016 21:08:00 +0800</pubDate><description><![CDATA[MySQL索引原理
##索引目的索引的目的在于提高查询效率，可以类比字典，如果要查“mysql”这个单词，我们肯定需要定位到m字母，然后从下往下找到y字母，再找到剩下的sql。如果没有索引，那么你可能需要把所有单词看一遍才能找到你想要的，如果我想找到m开头的单词呢？或者ze开头的单词呢？是不是觉得如果没有索引，这个事情根本无法完成？
##索引原理除了词典，生活中随处可见索引的例子，如...]]></description><category></category></item><item><title><![CDATA[数据结构学习之二叉树]]></title><link>https://blog.youkuaiyun.com/andy2541/article/details/101792229</link><guid>https://blog.youkuaiyun.com/andy2541/article/details/101792229</guid><author>andy2541</author><pubDate>Tue, 07 Jun 2016 17:17:00 +0800</pubDate><description><![CDATA[　　这些天一直在准备毕业，写论文，改论文。现在差不多了，偷点闲，学习了一下二叉树，写点小总结，用以备忘。
　　先说一下树的定义（ps：这些定义都是一些通俗理解，不是真正的官方定义）：（1）树由多个节点和边组成。（2）每个节点只有一个父节点但可以有多个子节点。（3）在树中只有一个例外，该节点没有父节点，该节点称为父节点。
　　再来几个专业术语：
　　（1）深度：从根节点到最底层节点的...]]></description><category></category></item><item><title><![CDATA[数据结构排序算法之希尔排序]]></title><link>https://blog.youkuaiyun.com/andy2541/article/details/101792228</link><guid>https://blog.youkuaiyun.com/andy2541/article/details/101792228</guid><author>andy2541</author><pubDate>Tue, 03 May 2016 22:13:00 +0800</pubDate><description><![CDATA[　　希尔排序又叫做递减增量排序。在这种排序中，我们将设置一个步长（增量），我们在比较数据时根据增量去进行比较，这样我们的数据会一次性前进很多步，所以希尔排序的效率要比直接插入排序的效率高。
　　希尔排序的思想就是我们设置一个步长，然后我们根据这个步长进行划分子序列，得到子序列1，子序列2....，然后我们对每个子序列进行直接插入排序，我们也知道当整个数列基本有序的时候使用直接插入排序的...]]></description><category></category></item><item><title><![CDATA[数据结构排序算法之归并排序]]></title><link>https://blog.youkuaiyun.com/andy2541/article/details/101792227</link><guid>https://blog.youkuaiyun.com/andy2541/article/details/101792227</guid><author>andy2541</author><pubDate>Fri, 29 Apr 2016 15:23:00 +0800</pubDate><description><![CDATA[　　最近一段时间一直在做项目，没有时间（好吧，我也承认最近有点懒，晚上回去什么都不想干了）。不过最近这两天晚上还是看了一点，就写下来备忘吧。
　　排序算法之归并排序：看资料都介绍说这是一种效率非常高的算法，看有的大神进行的测试，在200000个随机数的情况下排序速度比快排还要快。
　　其实主要原理也非常简单，看资料中的专业术语都是说采用分治法，分治法的要求是左右两边的数据都要有序（其...]]></description><category></category></item><item><title><![CDATA[数据结构排序算法之简单插入排序]]></title><link>https://blog.youkuaiyun.com/andy2541/article/details/101792226</link><guid>https://blog.youkuaiyun.com/andy2541/article/details/101792226</guid><author>andy2541</author><pubDate>Fri, 15 Apr 2016 21:44:00 +0800</pubDate><description><![CDATA[　　接着昨天，排序算法-》简单插入排序。
　　简单插入排序算法原理：从整个待排序列中选出一个元素插入到已经有序的子序列中去，得到一个有序的、元素加一的子序列，直到整个序列的待插入元素为0，则整个序列全部有序。
　　在实际的算法中，我们经常选择序列的第一个元素作为有序序列（因为一个元素肯定是有序的），我们逐渐将后面的元素插入到前面的有序序列中，直到整个序列有序。
示意图如下：

...]]></description><category></category></item><item><title><![CDATA[数据结构排序算法之选择排序]]></title><link>https://blog.youkuaiyun.com/andy2541/article/details/101792225</link><guid>https://blog.youkuaiyun.com/andy2541/article/details/101792225</guid><author>andy2541</author><pubDate>Thu, 14 Apr 2016 22:36:00 +0800</pubDate><description><![CDATA[　　今天继续介绍一种排序算法：选择排序。
　　选择排序的基本思想就是从待排序列中选择出最小的，然后将被选出元素和序列的第一个元素互换位置（当前默认是升序排列），则互换完成后第一个元素就是整个序列的最小的元素，则一次选择排序结束。然后我们从剩下的子序列中选择出最小的，然后将该被选出来的元素和该子序列的第一个元素（即整个序列的第二个元素）互换位置，则当前整个序列的第二个元素就是当前序列中的...]]></description><category></category></item><item><title><![CDATA[数据结构排序算法之快速排序]]></title><link>https://blog.youkuaiyun.com/andy2541/article/details/101792224</link><guid>https://blog.youkuaiyun.com/andy2541/article/details/101792224</guid><author>andy2541</author><pubDate>Tue, 12 Apr 2016 23:11:00 +0800</pubDate><description><![CDATA[　　排序算法包括很多种，其中快速排序是其中一种比较快的排序算法，今天就来介绍一下：
　　快速排序的基本实现思想就是将当前待排序列分成两个部分、一个值。一个值：就是选定出一个值作为被比较的元素。两个部分：所有比该被选定元素大的部分都去该元素的右边，所有比被选定元素小的部分都去该元素的左边。这样我们就确定了该元素在这个待排序列中的位置，其实也就是我们已经将这个元素“排好了”。
　　那么，...]]></description><category></category></item><item><title><![CDATA[数据结构知识基础之指针]]></title><link>https://blog.youkuaiyun.com/andy2541/article/details/101792221</link><guid>https://blog.youkuaiyun.com/andy2541/article/details/101792221</guid><author>andy2541</author><pubDate>Sat, 02 Apr 2016 22:43:00 +0800</pubDate><description><![CDATA[　　对于很多学习过c语言的同志们来说都知道指针是c语言中最最精粹的地方。就拿我现在主攻的php语言来说，php这种动态脚本语言底层也是用c来实现的，当我们实例化一个对象时，其实真正的过程也是一个在栈内存中的地址指向堆内存中真正的对象的过程，也就是说真正的对象时放在堆内存中，栈内存中放的是指向堆内存中对象的地址，PHP就是通过这种地址的指向实现了一个对象实例化的过程。上面插了一点，现在就来...]]></description><category></category></item><item><title><![CDATA[MySQL性能优化的最佳20+条经验]]></title><link>https://blog.youkuaiyun.com/andy2541/article/details/101792223</link><guid>https://blog.youkuaiyun.com/andy2541/article/details/101792223</guid><author>andy2541</author><pubDate>Thu, 24 Mar 2016 16:53:00 +0800</pubDate><description><![CDATA[今天，数据库的操作越来越成为整个应用的性能瓶颈了，这点对于Web应用尤其明显。关于数据库的性能，这并不只是DBA才需要担心的事，而这更是我们程序员需要去关注的事情。当我们去设计数据库表结构，对操作数据库时（尤其是查表时的SQL语句），我们都需要注意数据操作的性能。这里，我们不会讲过多的SQL语句的优化，而只是针对MySQL这一Web应用最多的数据库。希望下面的这些优化技巧对你有用。
1...]]></description><category></category></item><item><title><![CDATA[ThinkPHP框架下基于RBAC的权限控制模式详解]]></title><link>https://blog.youkuaiyun.com/andy2541/article/details/101792220</link><guid>https://blog.youkuaiyun.com/andy2541/article/details/101792220</guid><author>andy2541</author><pubDate>Tue, 22 Mar 2016 20:35:00 +0800</pubDate><description><![CDATA[　　这几天因为要做一个项目，需要可以对Web应用中通用功能进行封装，其中一个很重要的涉及到了对用户、角色和权限部分的灵活管理。所以基于TP框架自己封装了一个对操作权限和菜单权限进行灵活配置的可控制模式。
　　RBAC角色权限分配模式大家或许都不陌生，其重要的访问控制原理就是将权限基于角色进行动态分配，在一个工作模式中，每个人都被分配了不同的角色，因为每个人角色的不同所以每个人负责的事情...]]></description><category></category></item><item><title><![CDATA[Memcache缓存系统原理]]></title><link>https://blog.youkuaiyun.com/andy2541/article/details/101792192</link><guid>https://blog.youkuaiyun.com/andy2541/article/details/101792192</guid><author>andy2541</author><pubDate>Sun, 28 Feb 2016 18:48:00 +0800</pubDate><description><![CDATA[在Web服务开发中，服务端缓存是服务实现中所常常采用的一种提高服务性能的方法。其通过记录某部分计算结果来尝试避免再次执行得到该结果所需要的复杂计算，从而提高了服务的运行效率。

　　除了能够提高服务的运行效率之外，服务端缓存还常常用来提高服务的扩展性。因此一些大规模的Web应用，如Facebook，常常构建一个庞大的服务端缓存。而它们所最常使用的就是Memcached。
　　在本文...]]></description><category></category></item><item><title><![CDATA[数据库设计之三大范式]]></title><link>https://blog.youkuaiyun.com/andy2541/article/details/101792219</link><guid>https://blog.youkuaiyun.com/andy2541/article/details/101792219</guid><author>andy2541</author><pubDate>Fri, 19 Feb 2016 15:53:00 +0800</pubDate><description><![CDATA[为了建立冗余较小、结构合理的数据库，设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库，必须满足一定的范式。


在实际开发中最为常见的设计范式有三个：
1．第一范式(确保每列保持原子性)
第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值，...]]></description><category></category></item></channel></rss>