- 博客(22)
- 收藏
- 关注
原创 PHP获取用户IP地址
<?phpfunction getClientIp() { $uip = ''; if(!empty($_SERVER['HTTP_X_FORWARDED_FOR']) && strcasecmp($_SERVER['HTTP_X_FORWARDED_FOR'], 'unknow')) { $uip = $_SERVER['HTTP_X_FORWARDED_FOR']; strpo
2015-08-06 12:29:41
423
原创 PHP 利用SPL标准库获取数组中最小的K个值
class MaxHeap extends SplHeap{ public function compare($value1, $value2) { return ($value1 - $value2); } public function GetKMinNum($arr, $k){ if(is_array($arr) && $k > 0){
2015-06-26 10:30:57
460
原创 PHP设计模式之调解者模式
<?phpabstract class Filter{ abstract public function _filter($value);}class TrimFilter extends Filter{ public function _filter($value){ return trim($value); }}class HtmlFilter
2015-06-25 10:28:09
385
原创 PHP设计模式
PHP常见设计模式主要有:工厂模式、单例模式1、工厂模式<?phpabstract class DB{ abstract public function select(); abstract public function update(); abstract public function delete(); abstract public functi
2015-06-25 09:47:10
311
转载 大型网站架构体系的演变
转载地址:http://mp.weixin.qq.com/s?__biz=MjM5MzA0OTkwMA==&mid=209324678&idx=1&sn=74ad681fa74547426493f2f44af045cc#rd互联网上有很多关于网站架构的各种分享,有些主要是从运维和基础架构的角度去分析的(堆机器,做集群),太关注技术细节实现,普通的开发人员基本看不太懂。本文上篇将
2015-06-24 11:13:09
526
原创 常见漏洞及处理方法
1、sql注入 什么是sql注入?就是用户输入特殊字符改变原有sql的语义,这就叫sql注入。 我们看一下例子: 首先建立一个简单的user表模拟一下sql注入,如图所示 然后我们模拟一下用户登录: $username = $_POST['username'];$passwd = $_POST['passwd'];$s
2015-06-23 16:01:48
731
转载 Apache和Nginx运行原理解析
转载地址:http://www.server110.com/nginx/201402/6543.htmlWeb服务器 Web服务器也称为WWW(WORLD WIDE WEB)服务器,主要功能是提供网上信息浏览服务。应用层使用HTTP协议。HTML文档格式。浏览器统一资源定位器(URL)。Web服务器常常以B/S(Browser/Server)方式提供服务。浏览器和服务器的交
2015-06-19 16:33:43
485
原创 session原理
PHP SESSION原理我们知道,session是在服务器端保持用户会话数据的一种方法,对应的cookie是在客户端保持用户数据。HTTP协议是一种无状态协议,服务器响应完之后就失去了与浏览器的联系,最早,Netscape将cookie引入浏览器,使得数据可以客户端跨页面交换,那么服务器是如何记住众多用户的会话数据呢?首先要将客户端和服务器端建立一一联系,每个客户端都得有一个唯一标识,这
2015-06-17 10:21:51
599
原创 如何判断一个请求为ajax请求?
如何判断一个请求为ajax请求?1、我们可以通过http协议头信息里的X-Requested-With进行判断2、如果是使用jquery完成的ajax请求时,$_SERVER里会存在一个HTTP-X-REQUESTED-WITH键值,可以通过这个来判断 如:if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest'){
2015-06-16 15:16:56
1581
转载 IO多路复用的几种实现机制的分析
转载地址:http://blog.youkuaiyun.com/zhang_shuai_2011/article/details/7675797elect,poll,epoll都是IO多路复用的机制。所谓I/O多路复用机制,就是说通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们
2015-06-15 14:53:46
537
转载 IO基础入门之I/O多路复用技术
转载地址:http://my.oschina.net/fhd/blog/369064在I/O编程过程中,当需要同时处理多个客户端接入请求时,可以利用多线程或者I/O多路复用技术进行处理。I/O多路复用技术通过把多个I/O的阻塞复用到同一个select的阻塞上,从而使得系统在单线程的情况下可以同时处理多个客户端请求。与传统的多线程/多进程模型比,I/O多路复用的最大优势是系统开销小,系统不需要创
2015-06-15 14:28:39
582
原创 面试题总结
1、关于商品秒杀的问题,如何保证100件商品,只能使前100个用户抢到呢? 思路1、我们可以使用redis缓存的list存储类型,当有一个用户请求到来时,将该用户的id存放在list中,这样当list中的llen长度达到100时就不在添加新的用户id,然后在从list中取出对应的id操作数据库,这样有一个缺点是会有一定的延迟。 谁有更好的思路,欢迎讨论2、关于mysql
2015-06-14 14:33:23
423
原创 CGI与fast-CGI的区别
PHP以CGI方式运行时,当一个请求向web server请求动态页时,web server总会fork一个CGI解释器进程进行处理这个请求,进程处理完成之后将结果返回给web server,web server将结果返回并显示出来,进程结束,当用户再次请求同一个页面时,web server总会fork一个进程进行处理,这样效率会比较低下(CGI被人诟病的主要原因)PHP以fast-CGI方式
2015-06-11 09:38:00
1889
原创 C语言 判断二叉树是不是平衡树
int getTreeDepth(treeNode *pRoot){ if(pRoot == NULL){ return 0; } int left = getTreeDepth(pRoot->pLeft); int right = getTreeDepth(pRoot->pRight); return left > right ? left+1 : right+1;}bool
2015-06-10 16:49:14
854
原创 C语言 判断二叉树是不是平衡树
int getTreeDepth(treeNode *pRoot){ if(pRoot == NULL){ return 0; } int left = getTreeDepth(pRoot->pLeft); int right = getTreeDepth(pRoot->pRight); return left > right ? left+1 : right+1;}bool
2015-06-10 16:48:56
741
原创 C语言 打印路径节点值的和为指定和的所有路径
typedef struct treeNode{ int data; struct treeNode *pLeft; struct treeNode *pRight;}treeNode;void printAllPathWithSum(treeNode *pRoot, int sum, list&path, int ¤tSum){ if(pRoot == NULL){ retur
2015-06-10 16:23:30
887
原创 C语言 打印从根节点到叶节点的所有路径
includeincludeusing namespace std;typedef struct treeNode{ int data; struct treeNode *pLeft; struct treeNode *pRight;}treeNode;void printAllPathFromRoot(treeNode *pRoot, list&path){
2015-06-10 16:09:18
3123
1
原创 C语言 二叉树中寻找指定两个数值的最低父节点
共有三种情况:1、两个节点如果一个在左子树,一个在右子树的话,则根节点就是它们的最低父节点2、两个节点全在左子树中3、两个节点全在右子树中#include#include#include#includeusing namespace std;typedef struct treeNode{ int data; struct treeNode *pLeft; s
2015-06-10 13:47:04
888
原创 C语言 链表反向打印与反转
#includeusing namespace std;typedef struct node{ int data; struct node *next;}node;node * ListCreate(){ node *pHead = (node *)malloc(sizeof(node)); if(pHead == NULL){ printf("create list f
2015-06-09 16:13:51
585
原创 C语言 二叉查找树相关算法
#include#include#includeusing namespace std;typedef struct treeNode{ int data; struct treeNode *pLeft; struct treeNode *pRight;}treeNode;//二叉查找树中增加节点 treeNode * createTree(treeNode *pRoot,
2015-06-09 15:52:47
456
转载 redis执行流程源码分析
本文所引用的源码全部来自Redis2.8.2版本。Redis源码整体运行流程的相关文件是:redis.h, redis.c, networking.c, ae.h, ae.c。转载请注明,本文出自:http://blog.youkuaiyun.com/acceptedxukai/article/details/17842119Redis Server端处理Client请求的流程图
2015-06-09 13:36:33
543
原创 PHP 缓存之客户端缓存
今天主要说一下客户端缓存客户端缓存主要是通过http response header中的cache-control来实现的当点击go时, 第一次请求client.php, 会直接向服务器发出请求, 当返回重新点击go时, 由于请求的文件已经被缓存起来, 所以再次请求是不会向服务器发出请求的, 这一点可以通过firebug或其他调试工具查看.cache-controlmax-a
2015-06-09 09:37:27
640
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人