- 博客(139)
- 资源 (1)
- 收藏
- 关注
原创 PHP实现协程
在服务器编程当中,为了实现异步,经常性的需要回调函数,例如以下这段代码function send($value) { $data = process($value); onReceive($data);}function onReceive($recv_value) { var_dump($recv_value);}function process($val
2015-04-01 21:54:10
1058
原创 【leetcode】Largest Number
Given a list of non negative integers, arrange them such that they form the largest number.For example, given [3, 30, 34, 5, 9], the largest formed number is 9534330.Note: The result may be ve
2015-02-01 20:18:16
871
原创 记一次zend引擎的采坑事件
开放平台有一个通知的需求,需要一个消费进程不断的去读取buffer中的数据,然后消费并删除。于是,我用cron每分钟起一个php进程去读取数据库,并做通知的工作。同时,增加了一个文件锁,保证同一时间只能有一个进程在干活。某一天,突然发现buffer中的数据有增无减,进程的工作日志也已经没有输出了。ps看了一下进程,还是处于运行态,ltrace和strace都是空,看上去像是进入了某个whi
2015-01-26 13:32:42
1128
原创 C++类型转换dynamic_cast解析
C++的类型转换有四种 const_cast, reinterpret_cast, static_cast, dynamic cast这边举一个dynamic cast的小例子#include using namespace std;class BaseClass{ public : int m_iNum; virtual void foo() {
2015-01-19 17:41:25
879
原创 用PHP构建高性能的TCP/UDP服务器
如果web server直连db,那么当web server被攻破以后,黑客可以在代码中找到db的用户名和密码,可能会造成被拖库的危险。并且对于db来说,其连接数是有上限的,当多个cgi都需要连接db的时候很有可能会因为db连接数达到上限而拒绝服务。因此在webserver和db之间增加一个中间层变得很必要,中间层和db是保持长连接的。当有数据请求时,web server和中间层server用私有
2014-11-23 15:43:59
9838
原创 深入浅出web服务
对于没有做过web开发的人来说,web开发涉及到的名词似乎特别多,apache,nginx,cgi,php,http,cookie,session。这一大坨东西到底是什么,这里我们就从网络的层面去理清楚这些东西。
2014-11-19 21:25:41
4638
转载 关于线程池的“惊群效应”
什么是惊群 举一个很简单的例子,当你往一群鸽子中间扔一块食物,虽然最终只有一个鸽子抢到食物,但所有鸽子都会被惊动来争夺,没有抢到食物的鸽子只好回去继续睡觉, 等待下一块食物到来。这样,每扔一块食物,都会惊动所有的鸽子,即为惊群。对于操作系统来说,多个进程/线程在等待同一资源是,也会产生类似的效果,其结 果就是每当资源可用,所有的进程/线程都来竞争资源,造成的后果:1)系统对用
2014-11-17 10:46:40
13752
2
原创 【APUE学习笔记】dup和dup2用法
在了解dup用法之前,需要对linux的文件节点有一个认识。内核有3个数据结构来表示进程打开的文件,dup是系统提供的一个API可以直接操作这三个数据结构之间的关系。(1)每个进程在进程表当中都有一个记录项,记录项中包含一张表格,记录了所有当前进程打开的文件,可以将其想象成为一个key-value的映射关系,key为文件描述符fd,对于每个进程来说,fd从0开始向后排,value为指向文件
2014-09-09 17:40:33
2847
原创 【php学习笔记】ticks篇
1. 什么是ticks我们来看一下手册上面对ticks的解释:A tick is an event that occurs for every N low-level statements executed by the parser within the declare block. The value for N is specified using ticks=N withi
2014-07-12 16:43:05
1294
原创 【php内核学习】大话php常量
我们先看一个php常量的定义方法define('PRICE', 30); 之前,我一直把define和C中的宏定义理解一致,因此在使用的时候也只是将其当成简单地字符替换。后来研究了PHP内核以后,发现PHP中的常量和宏定义完全不是一回事。在PHP脚本运行的过程中,zend引擎会维护一个常量列表,对于普通用户来说,可以对这个常量列表进行CRUD操作,api分别为d
2014-06-24 09:57:12
1174
原创 用PHP代替JS玩转DOM
事情的起源比较简单,我需要把一个导航页的数据整理好写入数据库。一个比较直观的方法是对html文件进行分析,通用的方法是用php的正则表达式来匹配。但是这样做开发和维护都很困难,代码可读性非常差。导航页的数据都是规则的排列在DOM树当中的,用JS可以用几个循环轻松的对其进行操作,而且JS需要依赖浏览器,操作数据库很困难。其实PHP就有现成的类库对DOM树种的节点进行增删改查操作,在此做一些笔
2014-06-14 11:40:37
1388
原创 PHP Stream API初探
和SPL一样,在PHP手册里面,流被划为“other basic extensions”里面,是PHP开发中一个容易被忽视的函数系列。但其实在C++/Java中,流是一个很重要的概念。流的概念源于UNIX中的管道,管道是一条不间断的字节流,用来实现程序和进程间通信,或者读写外设,外部文件等。流的概念是在php 4.3.0中被引入的。我们知道,文件操作,网络操作,数据压缩操作等具
2014-06-04 20:14:06
2173
原创 Yii Active Record 动态数据表
Active Record(AR)是一种流行的 对象-关系映射(ORM)技术,其映射关系为AR class:数据表AR class property:数据表的一列AR 实例:数据表的一条数据所以对于常用的数据库操作(CRUD)可以转化成一种面向对象的数据操作形式。实现一个AR类的的最简代码如下:class Post extends CActiveRecord{
2014-06-04 20:11:06
2183
原创 mac下发html邮件的方法
今天需要发个图文并茂的邮件,之前的php代码都被我删了,好忧伤。。。乱七八糟的查了好多方案,终于找到一个可行的,先mark一下。1. 编辑好html文本2. 用 safari 打开 (safari only),文件 -> 共享 -> 用邮件发送此页面3. mail打开以后,把光标移到需要插入图片的位置 邮件 -> 服务 -> 从屏幕捕捉,然后选定4.
2014-03-06 17:27:39
4296
原创 [Yii]CComponent Event Handler Demo
For a component:class TestEventComponent extends CComponent{ public function somethingGoesOn($event){ echo "somethingGoesOn..."; $this->onSomethingGoesOn($event); } public function onSome
2013-10-27 21:19:15
719
原创 多服务器共享session的方法
1. NFS2. MySQL3. Cookie4. MemCachehttp://www.cnblogs.com/cyw080/archive/2009/11/17/1604272.html
2013-08-31 16:18:05
582
原创 STL iterator总结
废话不说,先上王道线性结构:vector: random accessdeque: random access链表: 双链(list): bidirectional单链(forward_list): forwardhash:unordered_map: forwardunordered_set: forward红黑树:map: bidirecti
2013-08-31 15:50:42
576
原创 [leetcode]Pow(x, n)
class Solution {public: double powPositive(double x, int n){ if(n == 0) return 1; if(n == 1) return x; double tmp; if(n%2 == 0){ tmp = powPosi
2013-08-02 15:57:32
605
原创 [leetcode]N-Queens
64ms过大集合class Solution { vector> result;public: bool canPlace(int i, int j, vector &tmp, int n){ if(i == 0) return true; for(int k = 0; k < i; k++){ if(tmp[k][j]
2013-07-31 11:43:24
714
原创 [leetcode]Maximum Subarray
class Solution {public: int maxSubArray(int A[], int n) { // Start typing your C/C++ solution below // DO NOT write int main() function if(n == 0) return 0; if(n =
2013-07-31 10:45:12
781
原创 [leetcode]Jump Game II
class Solution {public: int jump(int A[], int n) { // Start typing your C/C++ solution below // DO NOT write int main() function if(n == 1) return 0; vect
2013-07-30 21:44:31
639
原创 [leetcode]jump game
class Solution {public: bool canJump(int A[], int n) { // Start typing your C/C++ solution below // DO NOT write int main() function if(n == 0) return false; if(n
2013-07-30 14:07:43
605
原创 [leetcode]Merge Intervals
先写了一个O(n^2)的算法/** * Definition for an interval. * struct Interval { * int start; * int end; * Interval() : start(0), end(0) {} * Interval(int s, int e) : start(s), end(e) {} *
2013-07-30 13:31:20
801
原创 [leetcode]Insert Interval
/** * Definition for an interval. * struct Interval { * int start; * int end; * Interval() : start(0), end(0) {} * Interval(int s, int e) : start(s), end(e) {} * }; */class So
2013-07-30 13:07:20
658
原创 [leetcode]Length of Last Word
class Solution {public: int lengthOfLastWord(const char *s) { // Start typing your C/C++ solution below // DO NOT write int main() function int N = 0; const char *
2013-07-29 22:43:48
624
原创 [leetcode]Spiral Matrix II
class Solution {public: vector > generateMatrix(int n) { // Start typing your C/C++ solution below // DO NOT write int main() function if(n == 0) return vector>();
2013-07-29 22:25:30
807
原创 [leetcode]Spiral Matrix
class Solution {public: vector spiralOrder(vector > &matrix) { // Start typing your C/C++ solution below // DO NOT write int main() function if(matrix.empty()) return vect
2013-07-29 00:19:36
850
原创 [leetcode]Rotate List
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode *ro
2013-07-28 23:19:21
714
原创 [leetcode]Unique Paths II
class Solution {public: int uniquePathsWithObstacles(vector > &obstacleGrid) { // Start typing your C/C++ solution below // DO NOT write int main() function if(obstacleGri
2013-07-26 12:40:59
632
原创 [leetcode]Unique Paths
class Solution {public: int uniquePaths(int m, int n) { // Start typing your C/C++ solution below // DO NOT write int main() function vector> f(m, vector(n, 1));
2013-07-26 12:25:42
857
原创 [leetcode]Minimum Path Sum
class Solution {public: int minPathSum(vector > &grid) { // Start typing your C/C++ solution below // DO NOT write int main() function if(grid.empty()) return 0;
2013-07-26 09:19:52
672
原创 [leetcode]Merge Two Sorted Lists
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode *me
2013-07-25 20:37:12
652
原创 [leetcode]Add Binary
class Solution {public: char add(char a, char b, char c, char &carry){ int result = a - '0' + b -'0' + c-'0'; if(result == 0){ carry = '0'; return '0';
2013-07-24 22:57:56
611
原创 [leetcode]Plus One
class Solution {public: vector plusOne(vector &digits) { // Start typing your C/C++ solution below // DO NOT write int main() function if(digits.empty()) return vector();
2013-07-24 22:31:38
573
原创 [leetcode]Sqrt(x)
class Solution {public: int sqrt(int x) { // Start typing your C/C++ solution below // DO NOT write int main() function if(x < 1) return 0; if(x == 1) return 1;
2013-07-24 22:19:27
626
原创 [leetcode]Climbing Stairs
class Solution {public: int climbStairs(int n) { // Start typing your C/C++ solution below // DO NOT write int main() function if(n <= 2) return n; vector
2013-07-24 22:02:14
586
原创 [leetcode]Simplify Path
class Solution {public: string simplifyPath(string path) { // Start typing your C/C++ solution below // DO NOT write int main() function if(path.empty()) return "";
2013-07-24 21:57:46
547
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人