<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet href='http://feed.feedsky.com/styles/feedsky2.xsl' type='text/xsl' ?><!--这是一个由Feedsy提供技术支持的Feed，为了提高读者阅读的体验，以及满足用户美化自己Feed的需要，我们设计了多种精美的Feed模板，提供给大家选择，所有最终呈现出来的样式，皆由用户自愿选择使用，未经许可，任何团体和个人，请不要擅自修改样式或者盗用，这是对于用户选择权的尊重。--><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:fs="http://www.feedsky.com/namespace/feed" version="2.0"><channel><atom:link href="http://feed.feedsky.com/yuql" type="application/rss+xml" rel="self"></atom:link><fs:self_link href="http://feed.feedsky.com/yuql" type="application/rss+xml"></fs:self_link><lastBuildDate>Thu, 01 Jan 1970 00:33:32 GMT</lastBuildDate><title>余乾隆 - 个人博客</title><description>余乾隆的个人博客.写写日志,聊聊技术,记录我的生活点滴.</description><link>http://www.yuql.net/</link><item><title>成房奴了</title><link>http://item.feedsky.com/~feedsky/yuql/~8501470/600662750/6605732/1/item.html</link><description>感觉肩上沉甸甸的...&lt;br /&gt;</description><pubDate>Thu, 01 Jan 1970 07:33:32 +0700</pubDate><guid isPermaLink="false">http://www.yuql.net/article/65/</guid><fs:srclink>http://www.yuql.net/article/65/</fs:srclink><fs:srcfeed>http://www.yuql.net/rss.xml</fs:srcfeed><fs:itemid>feedsky/yuql/~8501470/600662750/6605732</fs:itemid></item><item><title>不期待，不奢求</title><link>http://item.feedsky.com/~feedsky/yuql/~8501470/600662751/6605732/1/item.html</link><description>我想要的，我喜欢的和我爱的&lt;br /&gt;要么紧紧抓住不放&lt;br /&gt;要么转身离开&lt;br /&gt;&lt;br /&gt;</description><pubDate>Thu, 01 Jan 1970 07:33:31 +0700</pubDate><guid isPermaLink="false">http://www.yuql.net/article/64/</guid><fs:srclink>http://www.yuql.net/article/64/</fs:srclink><fs:srcfeed>http://www.yuql.net/rss.xml</fs:srcfeed><fs:itemid>feedsky/yuql/~8501470/600662751/6605732</fs:itemid></item><item><title>孤独患者</title><link>http://item.feedsky.com/~feedsky/yuql/~8501470/600662752/6605732/1/item.html</link><description>&lt;P align=center&gt;&lt;EMBED name=Player34 pluginspage=http://www.microsoft.com/windows/mediaplayer/download/default.asp src=http://zhangmenshiting2.baidu.com/data2/music/12267360/12267360.mp3?xcode=1fc7e115395d9ab0b5949db22586f5d7&amp;mid=0.10794192502449 width=200 height=50 type=application/x-mplayer2 showstatusbar=&quot;-1&quot; AutoStart=&quot;0&quot; PlayCount=&quot;0&quot; clicktoplay=&quot;-1&quot;&gt;&lt;/EMBED&gt;&lt;/P&gt;欢笑声 欢呼声 &lt;br /&gt;炒热气氛 心却很冷 &lt;br /&gt;聚光灯 是种蒙恩&lt;br /&gt;我却不能 喊等一等 &lt;br /&gt;我真佩服我 还能幽默 &lt;br /&gt;掉眼泪时用笑掩过 怕人看破 顾虑好多 &lt;br /&gt;不谈寂寞 我们就都快活 &lt;br /&gt;我不唱声嘶力竭的情歌 &lt;br /&gt;不表示没有心碎的时刻 &lt;br /&gt;我不曾摊开伤口任宰割 愈合就无人晓得 &lt;br /&gt;我内心挫折 &lt;br /&gt;活像个孤独患者 自我拉扯 &lt;br /&gt;外向的孤独患者 有何不可 &lt;br /&gt;笑越大声 越是残忍 &lt;br /&gt;挤满体温 室温更冷 &lt;br /&gt;万一关灯 空虚扰人 &lt;br /&gt;我却不能 喊等一等 &lt;br /&gt;你说你爱我 却一直说 &lt;br /&gt;说我不该窝在角落 策划逃脱 这也有错 &lt;br /&gt;连我脆弱 的权利都掠夺 &lt;br /&gt;我不唱声嘶力竭的情歌 &lt;br /&gt;不表示没有心碎的时刻 &lt;br /&gt;我不曾摊开伤口任宰割 愈合就无人晓得 &lt;br /&gt;我内心挫折 &lt;br /&gt;活像个孤独患者 自我拉扯 &lt;br /&gt;外向的孤独患者 有何不可 &lt;br /&gt;我不要声嘶力竭的情歌 &lt;br /&gt;来提示我需要你的时刻 &lt;br /&gt;表面镇定并不是保护色 反而是要你懂得 &lt;br /&gt;我不知为何 &lt;br /&gt;活像个孤独患者 自我拉扯 &lt;br /&gt;外向的孤独患者 需要认可&lt;br /&gt;</description><pubDate>Thu, 01 Jan 1970 07:33:31 +0700</pubDate><guid isPermaLink="false">http://www.yuql.net/article/63/</guid><fs:srclink>http://www.yuql.net/article/63/</fs:srclink><fs:srcfeed>http://www.yuql.net/rss.xml</fs:srcfeed><fs:itemid>feedsky/yuql/~8501470/600662752/6605732</fs:itemid></item><item><title>Copy On Writer</title><link>http://item.feedsky.com/~feedsky/yuql/~8501470/600662753/6605732/1/item.html</link><description>PHP为了减少复制，采用了一种copy on writer的机制。我想，这是一种非常常见的机制，你也一定听说过。比如，gcc 的 stl string 的实现，就是采用这样的机制，字符串赋值，不是真正的复制，而且，在修改的时候才会进行复制。我们先来举个最简单的例子：&lt;br /&gt;&lt;pre class=&quot;php&quot;&gt;$a = str_repeat(&quot;0&quot;, 10000);&lt;br /&gt;$b = $a;&lt;br /&gt;$a[0] = &quot;1&quot;;&lt;br /&gt;&lt;/pre&gt;$a 是一个非常大的字符串，如果 $b = $a 的时候，进行复制，那要耗费很多内存 和 cpu，这样非常的不划算，万一，下面的代码并不修改$a 和 $b 那复制根本没有必要。当然，$a 在后面又被修改了，这个时候，必须进行复制了，否则就不符合逻辑了。但是，现在问题来了，怎么知道，$a 在修改的时候，要进行复制呢，必须要有这样一个标记。方法就是采用引用计数。引用计数还被用来进行内存的管理。&lt;br /&gt;&lt;br /&gt;基本的流程是这样的：&lt;br /&gt;&lt;br /&gt;1: 创建一个变量，可以保存 10000 个 0 的这样一个字符串。&lt;br /&gt;&lt;br /&gt;2: 创建一个变量符号 a ，这个变量符号引用 这个变量。注意，变量符号 和 变量不是一回事情，这两者是分离的。&lt;br /&gt;&lt;br /&gt;如果从C语言的角度来说，PHP大概完成这样一件事情：&lt;br /&gt;&lt;pre class=&quot;c&quot;&gt;char *varname = &quot;a&quot;;&lt;br /&gt;size_t varname_len = strlen(varname);&lt;br /&gt;zend_hash_add(EG(active_symbol_table), varname, &lt;br/&gt;varname_len + 1, &amp;amp;var, sizeof(zval*), NULL);&lt;br /&gt;&lt;/pre&gt;active_symbol_table 是PHP的一个符号表，所有能访问到的变量都在这个里面，他是一个哈希表。var 这个变量，保存了 10000 个 0 这个字符串。而且是zval的结构，zval的结构如下：&lt;br /&gt;&lt;pre class=&quot;c&quot;&gt;typedef struct _zval_struct {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; zvalue_value value;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; zend_uint refcount;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; zend_uchar type;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; zend_uchar is_ref;&lt;br /&gt;} zval;&lt;br /&gt;&lt;br /&gt;typedef union _zvalue_value {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; long lval;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; double dval;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; struct {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; char *val;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int len;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } str;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; HashTable *ht;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; zend_object_value obj;&lt;br /&gt;} zvalue_value;&lt;br /&gt;&lt;/pre&gt;zvalue_value 是一个联合，可以保存 long， double， 字符串，哈希表（PHP Array），还有就是 对象。也就是所有的PHP的类型。 zval 其实 就是 对 zvalue_value ，加入了类型type 和 引用is_ref，引用计数refcount三个功能。这就是PHP中的普通变量。要是用PHP做比较大型的东西，就会发现，内存占用非常厉害。就是因为，他一个变量 不是 传统C语言的那个变量了，它加了很多东西。&lt;br /&gt;&lt;br /&gt;好了，第一句完成了，下面是第二句。第二句很简单，会产生一个新的变量符号b，把他加入 active_symbol_table ，但是不会增加新的一个变量，而只是，refcount++。赋值就完成了。如图：&lt;br /&gt;&lt;img width=&quot;262&quot; height=&quot;155&quot; border=&quot;0&quot; src=&quot;http://images.cnblogs.com/cnblogs_com/niniwzw/201104/201104282152254174.gif&quot; alt=&quot;clip_image001[7]&quot; title=&quot;clip_image001[7]&quot; style=&quot;border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px&quot;&gt;&lt;br /&gt;首先我们要注意的是，a ，b 只是一个符号，他是active_symbol_table 表里面的一个key，都有一个指针指向一个zval，所以，a 和b 在 C语言层面上是完全一致的。我们就得出PHP变量第一定律：&lt;br /&gt;PHP变量第一定律：如果两个变量指向同一个zval，那么这两个变量是无差别的。也就是说，任何对a 的操作 相对b 都是对称的。这里的对称，是这样理解的。就是镜子中的你，而不是等同。比如，对 a 进行 赋值，a 就会产生 copy。同样的，如果对b进行赋值，也会进行相同的操作，那就是b产生一个copy。也就是说，a 和b的行为是一样的。&lt;br /&gt;第三句，当writer发生的时候，PHP会判断一下refcount 是否大于2，如果大于2，那么就复制一下zval，然后，把原来那个zval refcount--。这就是copy on writer 的全部了，你一定觉得，这一切你都是非常的熟悉，你都懂。&lt;br /&gt;但是，PHP不仅仅是copy on writer 这样简单，它还有一个引用的问题。引入引用的概念，这样，问题就变的有些复杂了。因为，引用这个标记，意思就是说，writer 的时候，你也不需要复制。这样，会修改原来的那个变量。从我们在学校里面以前经常学习的哲学上来说，这是一对矛盾。他们是对立的，又是统一的，各有各的用处。所谓，存在的就是合理的。&lt;br /&gt;&lt;br /&gt;好，下面我们来看看这对矛盾，我们只考虑两种组合的情况。多种组合都是类似的。两种组合的话，就是赋值在前，引用在后。&lt;br /&gt;&lt;br /&gt;或者&amp;nbsp; 引用在前，赋值在后。我们会分别讨论，先来看：就是赋值在前，引用在后的情况。&lt;br /&gt;&lt;pre class=&quot;php&quot;&gt;$a = 1;&lt;br /&gt;$b = $a;&lt;br /&gt;$c = &amp;amp;$a;&lt;br /&gt;&lt;/pre&gt;$b = $a, 是copy on writer 行为的 赋值。而 $c 和 $a 是引用赋值。我们假设在上面这样的情况下，我们可以用一个zval表示，也就是不需要复制，那么情况是这样的：&lt;br /&gt;&lt;br /&gt;&lt;img width=&quot;262&quot; height=&quot;155&quot; border=&quot;0&quot; src=&quot;http://images.cnblogs.com/cnblogs_com/niniwzw/201104/201104282152251948.gif&quot; alt=&quot;clip_image001[9]&quot; title=&quot;clip_image001[9]&quot; style=&quot;border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px&quot;&gt;&lt;br /&gt;根据我们的PHP变量第一定律，那，就是说，a，b，c的操作是对称的，但是非常明显，对 b 操作要产生复制行为，而对a操作不会产生复制，操作行为不相同，和第一定律矛盾。也就是说，要使得上面的操作没有矛盾，必须，进行分离。分离的原则就是，谁制造矛盾，谁复制。显然是 第三句话，$c = &amp;amp;$a; 在制造矛盾。所以，内部变量的复制过程如下图：&lt;br /&gt;&lt;br /&gt;&lt;img width=&quot;560&quot; height=&quot;430&quot; border=&quot;0&quot; src=&quot;http://images.cnblogs.com/cnblogs_com/niniwzw/201104/201104282152314319.png&quot; alt=&quot;image&quot; title=&quot;image&quot; style=&quot;border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px&quot;&gt;&lt;br /&gt;上面情况是赋值在前，引用在后的情况。还有一种情况是，引用在前赋值在后：&lt;br /&gt;&lt;pre class=&quot;php&quot;&gt;$a = 1;&lt;br /&gt;$b = &amp;amp;$a;&lt;br /&gt;$c = $a;&lt;br /&gt;&lt;/pre&gt;按照PHP变量的第一定律，a，b，c 必须进行分离，才能保证定律的正确。可以发现，b 和 a 明显是一伙人，就是说，b 和 a 的操作是对称的，他们可以指向同一个zval ，而c 的行为和 a，b 不一样，改变c 需要进行复制。看到这里，我想，如果你看懂了的话，为什么刚开始，贴出来的那段代码的，那个两个count差异如此之大，你也应该明白了。当我和那个网友讨论的时候，它最后说，那这样的话，PHP设计的不好，我完全可以，$c先不进行复制，等c被write 了，再进行复制。看来要说懂一个东西，还是一件很难的事情，好好想想那个PHP第一定律吧。你可以假设不进行分离，c指向同一个zval，所以，c 和 a，b的行为是一样的，是is_ref = 1，所以，c 不会进行复制。最后一种内部执行情况可以用下图表示：&lt;br /&gt;&lt;img width=&quot;605&quot; height=&quot;419&quot; border=&quot;0&quot; src=&quot;http://images.cnblogs.com/cnblogs_com/niniwzw/201104/201104282152432541.png&quot; alt=&quot;image&quot; title=&quot;image&quot; style=&quot;border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px&quot;&gt;&lt;br /&gt;文章转自博客园：http://www.cnblogs.com/niniwzw/archive/2011/04/28/2032223.html&lt;br /&gt;</description><pubDate>Thu, 01 Jan 1970 07:33:31 +0700</pubDate><guid isPermaLink="false">http://www.yuql.net/article/62/</guid><fs:srclink>http://www.yuql.net/article/62/</fs:srclink><fs:srcfeed>http://www.yuql.net/rss.xml</fs:srcfeed><fs:itemid>feedsky/yuql/~8501470/600662753/6605732</fs:itemid></item><item><title>在云端</title><link>http://item.feedsky.com/~feedsky/yuql/~8501470/600662754/6605732/1/item.html</link><description>&lt;p&gt;昨夜，小雨，微风。&lt;/p&gt;&lt;p&gt;一个人静静的走进江南诊所，带着标准的重庆普通话，描述症状、量体温、做皮试。。。&lt;/p&gt;&lt;p&gt;毕业后的第二次输液，被越发严重的感冒，逼迫着献给了美丽的“江城”武汉。&lt;/p&gt;&lt;p&gt;想想不确定的归程日期，一个人吃饭、做事、输液。。。&lt;/p&gt;&lt;p&gt;不由得的多愁善感起来。&lt;/p&gt;&lt;p&gt;零星的几个人，偶尔一阵霹雳啪啦的键盘敲击声，在偌大的办公室显得格外的惊心、刺耳。&lt;/p&gt;&lt;p&gt;早上进门的时候保安在问，只有你们公司在加班？&lt;/p&gt;&lt;p&gt;还没来得及回答，就见一位女生亭亭地走来，被问：“天喻的吧？”&lt;/p&gt;&lt;p&gt;我偷笑着，赶紧填好了进门条。&lt;/p&gt;&lt;p&gt;晚上窝在床上，盖着厚厚的被子，和女朋友发着短信。&lt;/p&gt;&lt;p&gt;不时的逗逗她，听着她的关心和思念，一个人的孤单感觉才会稍稍的被磨平一些。&lt;/p&gt;</description><pubDate>Thu, 01 Jan 1970 07:33:31 +0700</pubDate><guid isPermaLink="false">http://www.yuql.net/article/61/</guid><fs:srclink>http://www.yuql.net/article/61/</fs:srclink><fs:srcfeed>http://www.yuql.net/rss.xml</fs:srcfeed><fs:itemid>feedsky/yuql/~8501470/600662754/6605732</fs:itemid></item><item><title>MVC框架分析（一）</title><link>http://item.feedsky.com/~feedsky/yuql/~8501470/600662755/6605732/1/item.html</link><description>公司的框架是现在比较流行的MVC框架。但根据公司的业务现状，做了一些变化。与一般的MVC框架，还是有不同的地方，有些地方也比较有特点。由于从进公司以来，一直比较忙，对框架也谈不上熟悉，仅仅会用而已。趁今天比较有空，就学习了下该框架。作为记录。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;一、&amp;nbsp;&amp;nbsp; &amp;nbsp;session共享机制&lt;/strong&gt;&lt;br /&gt;框架中使用memcached来实现session共享。之所以使用memcached来保存session，我认是为了应对以后用户的大规模访问，毕竟这是移动的项目，用户基数大；为以后应用的集群部署，实现session共享，使多台服务器之间保持会话的统一。&lt;br /&gt;至于不使用数据库的方式来保存session，也应该是考虑到数据库的负担，和读取数度的考虑。毕竟memcached是内存缓存。&lt;br /&gt;memcached的缓存是一种分布式的，可以让不同主机上的多个用户同时访问， 因此解决了共享内存只能单机应用的局限，更不会出现使用数据库做类似事情的时候，磁盘开销和阻塞的发生。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;二、&amp;nbsp;&amp;nbsp; &amp;nbsp;模块的加载&lt;/strong&gt;&lt;br /&gt;框架在index.php中，调用控制器的addModule方法，加载所有的业务模块。&lt;br /&gt;在addModule方法中，为了应对不同城市之间业务的切换，根据citycode的不同，首先加载当前城市相应区县模块到模块队列;如果不存在，则加载当前城市的默认模块;如果仍然不存在，则会加载框架的默认模块。&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;然后在index.php中，调用控制器的_run方法，实例化模块队列中的类。&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;但这样的做法，存在几点问题：&lt;br /&gt;1、&amp;nbsp;&amp;nbsp; &amp;nbsp;所有的模块都在index.php中加载，然后统一实例化。某些当前页面不需要用到的模块，也会被加载进来。随着业务的不断增加，需要加载的模块越来越多，导致系统会耗费很多资源来加载一些根本不会用到的模块。&lt;br /&gt;&lt;br /&gt;经测试，加载现在所有的82个模块共耗费0.022152900695801ttitit秒。若只加载一个CitySwitchModel模块，只耗费0.00099802017211914秒。平均每多加载一个模块，会多耗费2.7*10^-4秒。&lt;br /&gt;&lt;br /&gt;2、&amp;nbsp;&amp;nbsp; &amp;nbsp;在加载模块时，并没有判断该类是否存在于模块队列。而且在实例化该类时，也没有使用单例模式。这样可能会导致模块的重复加载。&lt;br /&gt;&lt;br /&gt;经测试，在index.php中，调用addModule方法，重复加载相同模块。程序会多次实例化相同的模块。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;三、&amp;nbsp;&amp;nbsp; &amp;nbsp;事件机制&lt;/strong&gt;&lt;br /&gt;简单整理了了框架事件机制的关系图。&lt;br /&gt;如下图所示：&lt;br /&gt;&amp;nbsp;&lt;img src=&quot;/APP/upload/images/day_110902/201109021628365646.jpg&quot; alt=&quot;&quot; height=&quot;550&quot; width=&quot;550&quot; /&gt;&lt;br /&gt;接口类Ievent&lt;br /&gt;是事件接口的底层方法，用于规范框架事件机制共享方法。&lt;br /&gt;它定义了三个接口，分别是事件的添加、删除、分派。&lt;br /&gt;&lt;br /&gt;事件抽象类AbstractEvent&lt;br /&gt;继承于IEvent接口，实现事件机制基础。&lt;br /&gt;在这个抽象类中，定了一个静态的事件数组，用于保存所有的事件。dispatchEvent方法，则是根据传递进来的的事件和方法进行分派调用。&lt;br /&gt;&lt;br /&gt;事件类Event&lt;br /&gt;继承于AbstractEvent抽象类。&lt;br /&gt;该类主要是重写了dispatchEvent方法，对传进来的事件参数判断是否规范化，然后调用父类的该方法。&lt;br /&gt;&lt;br /&gt;模块抽象类AbstractModel&lt;br /&gt;实现模块基础机制。&lt;br /&gt;在该类的构造函数中，共做两件事。1、自定义异常处理。2、判断是否存在OP。如果存在则调用该类的OP方法，如果不存在，则默认调用execute方法。&lt;br /&gt;&lt;br /&gt;模块类Model&lt;br /&gt;继承于AbstractModel抽象类，实现模块基础。&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;在该类中，主要是初始化一些基础数据，例如城市代码、电话号码、用户ID和站内导航的处理。&lt;br /&gt;&lt;br /&gt;用户自定义模块类UserModel&lt;br /&gt;继承于Model类，实现模块的数据处理和业务逻辑。&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;整个流程：&lt;br /&gt;1、&amp;nbsp;&amp;nbsp; &amp;nbsp;index.php中，加载各业务的数据处理模块（在加载的同时，添加该模块的相关方法至事件队列中，由execute方法实现）。&lt;br /&gt;2、&amp;nbsp;&amp;nbsp; &amp;nbsp;根据从URL获取的Module、Page、Operation，加载指定的模块。实例化该类，在实例化的同时，传递需要调用的方法。（在模块抽象类中AbstractModel定义，通过构造函数传递相关参数）&lt;br /&gt;3、&amp;nbsp;&amp;nbsp; &amp;nbsp;在调用Operation方法时，如果需要获取某一模块的数据，则调用$this-&amp;gt;dispatchEvent方法，分派事件。&lt;br /&gt;4、&amp;nbsp;&amp;nbsp; &amp;nbsp;调用框架的显示类，指定显示模板，传入相应数据进行展示。&lt;br /&gt;&lt;strong&gt;&lt;br /&gt;四、&amp;nbsp;&amp;nbsp; &amp;nbsp;模板显示机制&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;待续...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;</description><pubDate>Thu, 01 Jan 1970 07:33:31 +0700</pubDate><guid isPermaLink="false">http://www.yuql.net/article/60/</guid><fs:srclink>http://www.yuql.net/article/60/</fs:srclink><fs:srcfeed>http://www.yuql.net/rss.xml</fs:srcfeed><fs:itemid>feedsky/yuql/~8501470/600662755/6605732</fs:itemid></item><item><title>程序员装B指南</title><link>http://item.feedsky.com/~feedsky/yuql/~8501470/600662756/6605732/1/item.html</link><description>转载至此,只为调侃....&lt;br /&gt;&lt;h3 style=&quot;margin: 0px; border-width: 0px; padding: 0px;&quot;&gt;一、准备工作&lt;/h3&gt;&lt;p style=&quot;margin: 0px; border-width: 0px; padding: 0px;&quot;&gt;“工欲善其事必先利其器。”&lt;/p&gt;&lt;p style=&quot;margin: 0px; border-width: 0px; padding: 0px;&quot;&gt;1.电脑不一定要配置高，但是双屏是必须的，越大越好，能一个横屏一个竖屏更好。一个用来查资料，一个用来写代码 。总之要显得信息量很大，效率很高。&lt;/p&gt;&lt;p style=&quot;margin: 0px; border-width: 0px; padding: 0px;&quot;&gt;2.椅子不一定要舒服，但是一定要可以半躺着。&lt;/p&gt;&lt;p style=&quot;margin: 0px; border-width: 0px; padding: 0px;&quot;&gt;3.大量的便签，各种的颜色的，用来记录每天要完成的事务，多多益善。沿着电脑屏幕的边框，尽量贴满，显出有很多事情的样子。&lt;/p&gt;&lt;p style=&quot;margin: 0px; border-width: 0px; padding: 0px;&quot;&gt;4.工具书，orelly的，机械工业，电子工业什么的都可以，能英文就英文，不行影印版的也可以，反正越厚越好，而且千万不要放在书架上，一定要堆在桌上，半打开状。&lt;/p&gt;&lt;h3 style=&quot;margin: 0px; border-width: 0px; padding: 0px;&quot;&gt;二、从进门开始&lt;/h3&gt;&lt;p style=&quot;margin: 0px; border-width: 0px; padding: 0px;&quot;&gt;1.着装！着装！不管你是去实验&lt;br /&gt;室，或者去公司的大楼，在或者是小公司的民宅，或是自己创业的黑作坊；无论是春夏秋冬白天晚上刮风下雨电闪雷鸣台风龙卷风，一个装b的程序员都要十分在意&lt;br /&gt;自己着装！这里只提出参考建议。初级装：衬衣+牛仔裤+休闲鞋。中级装：T恤+宽松短裤+拖鞋。高级装：背心+宽松大花裤衩+人字拖。&lt;/p&gt;&lt;p style=&quot;margin: 0px; border-width: 0px; padding: 0px;&quot;&gt;2.得体的举止。在走廊以及任何形式的过道里，一定要双手插兜，走得像个痞子，至少要看起来有点反社会，如若不行，可走文弱天才型geek路线。。&lt;/p&gt;&lt;p style=&quot;margin: 0px; border-width: 0px; padding: 0px;&quot;&gt;3.如果有女性在你背后指指点点，小声嘀咕说这一定是一个技术男的时候，应该先低头，然后保持低头状态，缓缓回头，坏坏地蔑笑但是不要出声，然后快步前行。&lt;/p&gt;&lt;p style=&quot;margin: 0px; border-width: 0px; padding: 0px;&quot;&gt;4.进门后，一定不要跟任何人打招呼，笔直走向自己的位置，最多路过打一杯咖啡，千万不要有多余的动作，显示出自己的专注与心无旁骛。&lt;/p&gt;&lt;h3 style=&quot;margin: 0px; border-width: 0px; padding: 0px;&quot;&gt;三、坐下就不要再动了&lt;/h3&gt;&lt;p style=&quot;margin: 0px; border-width: 0px; padding: 0px;&quot;&gt;1.坐下以后，姿势需要略微后仰，能翘着二郎腿最好了，然后在后仰的情况下低着头，以便看到屏幕，然后千万就不要再动了。&lt;/p&gt;&lt;p style=&quot;margin: 0px; border-width: 0px; padding: 0px;&quot;&gt;2.粗暴地把电脑前的大堆书推开一个口，然后摘下电脑上的一个便签，看一眼，不过3秒，可以开始coding了。&lt;/p&gt;&lt;p style=&quot;margin: 0px; border-width: 0px; padding: 0px;&quot;&gt;3.能不用IDE就不要用，实在装不了，无论IDE是什么，一定要调成DOS那种黑色背景的。&lt;/p&gt;&lt;p style=&quot;margin: 0px; border-width: 0px; padding: 0px;&quot;&gt;4.如果写前台界面，就不停地调试后台代码；如果写java，就在里面混编C；如果写C，就在里面混编汇编。不光要coding，还要时不时的翻出一本什么英文的书翻一翻，看不懂就看看插图，然后扔到面前假装懂了继续coding。&lt;/p&gt;&lt;p style=&quot;margin: 0px; border-width: 0px; padding: 0px;&quot;&gt;5.什么看起来高端就用什么，不&lt;br /&gt;要管实用不实用。例如对C++：switch统统重构成多态；如果有指针，统统改成智能的；C++一定要自己写 &lt;br /&gt;template；数字是全部要替换成宏的名字能起多长就起多长；struct就不要出现了，如果出现，也一定要用__attriburte__修饰一&lt;br /&gt;下；运算都是位操作的；操作符都是重载的；网络都是并发缓冲线程池的；int只用int32_t声明的;继承不用普通的，什么多继承虚继承&lt;br /&gt;啊；helloworld也要写捕获异常的；后人一看代码，中间一堆关键字 &lt;br /&gt;extern,asm,auto,XXXXX_cast,volatile,explicit,register,template，让一般总在敲 &lt;br /&gt;int,if,else,for的小程序员 顿时心生崇拜。&lt;/p&gt;&lt;p style=&quot;margin: 0px; border-width: 0px; padding: 0px;&quot;&gt;6.注释？算了吧。只有两个路线可以选：一，变量名起得巨长无比，看代码就和读英文文章一样顺畅，根本不需要加注释。 二，代码无比晦涩，加不加注释根本无影响。&lt;/p&gt;&lt;p style=&quot;margin: 0px; border-width: 0px; padding: 0px;&quot;&gt;7.千万不要用IM工具交流，千万不要问同事问题，显得自己没有水平，都是自己上网或者查书。&lt;/p&gt;&lt;p style=&quot;margin: 0px; border-width: 0px; padding: 0px;&quot;&gt;8.无论是同事间开玩笑或者发生任何群体性时间，不要抬头，更不要东张西望，即使地震火灾，也一定要先提交代码再行离开。&lt;/p&gt;&lt;h3 style=&quot;margin: 0px; border-width: 0px; padding: 0px;&quot;&gt;四、潇洒地离开&lt;/h3&gt;&lt;p style=&quot;margin: 0px; border-width: 0px; padding: 0px;&quot;&gt;1.人走，主机是千万千万不能关的，至少要跑个daily build，实在不行正在svn提交也勉强算过关。&lt;/p&gt;&lt;p style=&quot;margin: 0px; border-width: 0px; padding: 0px;&quot;&gt;2.书应该已经又堆到屏幕前了，千万不要整理，明天再来推开。&lt;/p&gt;&lt;p style=&quot;margin: 0px; border-width: 0px; padding: 0px;&quot;&gt;3.不强求最后一个走，但一定要所有的非程序员，什么市场啊前台啊pm啊都走光了，才可以走。&lt;/p&gt;&lt;p style=&quot;margin: 0px; border-width: 0px; padding: 0px;&quot;&gt;4.走得时候一定要率性，千万不要收拾任何东西，站起来，出门，好的，就这样。&lt;/p&gt;&lt;p style=&quot;margin: 0px; border-width: 0px; padding: 0px;&quot;&gt;5.如果今天一定要说句话的话，找到那个最苦逼的程序员 ，跟他说，你进度太慢了啊，不要老让我等你。&lt;/p&gt;&lt;p style=&quot;margin: 0px; border-width: 0px; padding: 0px;&quot;&gt;就写这么些吧。最后，送上《苦逼的程序员之歌》 （来自为什么我们程序员晋升这么难 的网友评论）：&lt;/p&gt;&lt;p style=&quot;margin: 0px; border-width: 0px; padding: 0px;&quot;&gt;在那山的这边海的那边有一群程序员，他们老实又胹腆，他们聪明又没钱。他们一天到晚坐在那里熬夜写软件，饿了就咬一口方便面～～哦苦命的程序员，哦苦逼的程序员，只要一改需求他们就要重新搞一遍，但是期限只剩下两天……&lt;/p&gt;&lt;br /&gt;</description><pubDate>Thu, 01 Jan 1970 07:33:31 +0700</pubDate><guid isPermaLink="false">http://www.yuql.net/article/59/</guid><fs:srclink>http://www.yuql.net/article/59/</fs:srclink><fs:srcfeed>http://www.yuql.net/rss.xml</fs:srcfeed><fs:itemid>feedsky/yuql/~8501470/600662756/6605732</fs:itemid></item><item><title>近期计划</title><link>http://item.feedsky.com/~feedsky/yuql/~8501470/600662757/6605732/1/item.html</link><description>收拾收拾心情，做好自己。&lt;br /&gt;1、每周星期天开始继续学车，不能再懒了，不然几K大洋就打水漂鸟。&lt;br /&gt;2、研究外贸交易流程，月底前拿出一份项目计划书。&lt;br /&gt;3、空余时间，继续看上次买的书。做好笔记。&lt;br /&gt;</description><pubDate>Thu, 01 Jan 1970 07:33:31 +0700</pubDate><guid isPermaLink="false">http://www.yuql.net/article/58/</guid><fs:srclink>http://www.yuql.net/article/58/</fs:srclink><fs:srcfeed>http://www.yuql.net/rss.xml</fs:srcfeed><fs:itemid>feedsky/yuql/~8501470/600662757/6605732</fs:itemid></item><item><title>这一秒坐拥晚霞</title><link>http://item.feedsky.com/~feedsky/yuql/~8501470/600662758/6605732/1/item.html</link><description>&lt;p&gt;&amp;nbsp; 吹着20度微风的空调，裹着一条好可爱的被子，带着加班后睡醒的疲惫，一点点的感冒，还有Eason的抒情慢歌。此刻的我，莫明的有点感性起来。&lt;br /&gt;&lt;br /&gt;&amp;nbsp; 一条条的看着以前同学、朋友的动态，看着他们的文字，想象着他们的近况。但却一点没有想发表些什么，让他们知道我的存在。我只想静静的看着，偶尔为他们笑笑或皱眉。因为我知道，即使重新联系上的我们，也会多了几分生疏，几分客套，会说不出自己的心理话。&lt;br /&gt;&lt;br /&gt;&amp;nbsp; 觉着自己真的慢慢成熟起来了，有时候也会关心下父母朋友，不像以前那么没心没肺。我要谢谢你，一个叫我猪的人，如果你看到的话。&lt;br /&gt;&lt;br /&gt;&amp;nbsp; 在现实的生活面前，有时候我会压抑自己，默默告诉自己去承受，去适应。但我知道真实的自己，不愿甘于平凡，接受束缚。在我平静的表面上，暗地里波涛汹涌。直到某一刻的爆发!一如工作，一如爱情!&lt;br /&gt;&lt;br /&gt;&amp;nbsp; 最近的生活有点乱，尽是瞎忙，似乎有点偏离我的宅男生涯，呵呵。不过大老婆，你放心，我是不会抛弃你的。哈哈!&lt;br /&gt;&lt;br /&gt;&amp;nbsp; 一段新的感情，似乎并不是那么的容易。或许我从来都把这件事想得太过简单，因为也许这并不止是两个人的事。&lt;/p&gt;</description><pubDate>Thu, 01 Jan 1970 07:33:31 +0700</pubDate><guid isPermaLink="false">http://www.yuql.net/article/57/</guid><fs:srclink>http://www.yuql.net/article/57/</fs:srclink><fs:srcfeed>http://www.yuql.net/rss.xml</fs:srcfeed><fs:itemid>feedsky/yuql/~8501470/600662758/6605732</fs:itemid></item><item><title>PHP判断多维数组是否为空</title><link>http://item.feedsky.com/~feedsky/yuql/~8501470/600662759/6605732/1/item.html</link><description>这两天遇到一个问题，公司从JAVA的接口处获取数据不是一般的慢，导致PHP这边获取数据时，总是超过3秒的时间限制。导致没有获取到相关数据。&lt;br /&gt;而公司MVC框架的缓存也很不给力，获取到为空的数据时，也照样缓存。&lt;br /&gt;为了避免缓存到数据为空的页面，封了一个函数，判断是否要进行缓存。&lt;br /&gt;代码如下：&lt;br /&gt;&lt;pre class=&quot;js&quot;&gt;//判断是否生成缓存&lt;br /&gt;function needCache($data)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;$isNeedCache = false;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (is_string($data))//字符串&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;$isNeedCache = empty($data) ? false : true;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (is_array($data) &amp;amp;&amp;amp; !empty($data))&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;$tmpData = array_filter($data);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;$isNeedCache = empty($tmpData) ? false : true;//一维数组判断&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if($isNeedCache &amp;amp;&amp;amp; is_array($tmpData))&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;{//多维数组&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;$isNeedCache = false;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;foreach ($tmpData as $key=&amp;gt;$val)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if ($this-&amp;gt;needCache($val))&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;$isNeedCache = true;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;break;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;return $isNeedCache;&lt;br /&gt;}&lt;/pre&gt;函数就是判断传进来的参数是否为空，来决定是否缓存。&lt;br /&gt;</description><pubDate>Thu, 01 Jan 1970 07:33:31 +0700</pubDate><guid isPermaLink="false">http://www.yuql.net/article/56/</guid><fs:srclink>http://www.yuql.net/article/56/</fs:srclink><fs:srcfeed>http://www.yuql.net/rss.xml</fs:srcfeed><fs:itemid>feedsky/yuql/~8501470/600662759/6605732</fs:itemid></item></channel></rss>
