自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(126)
  • 资源 (1)
  • 收藏
  • 关注

原创 java实现Thrift服务端和客户端

namespace java service.testservice Demo { string sayWord(1:string word)}DemoService.javapackage service.test;import org.apache.thrift.TException;import service.test.Demo.Iface;public c

2013-06-13 12:31:45 9457

原创 Thrift安装与使用

centos   jdk6  php5.3以上  python2.6   thrift0.9.0让thrift支持java php python,所以要安装java php python(linux系统默认自带python)java: 安装JDK 和 ant (thrift安装时会检查 java javac ant等命令,ant命令要编译java的开发库)安装thriftyum

2013-06-04 12:26:04 8965 1

原创 "2>&1 > file"和 "> file 2>&1"区别?

什么是文件描述符?文件描述符是一个简单的正整数,用以标明每一个被进程所打开的文件和socket。最前面的三个文件描述符(0,1,2)分别与标准输入(stdin),标准输出(stdout)和标准错误(stderr)对应。"2>&1 > file"和 "> file 2>&1"区别?1.php test.php 2>&1 > file :错误输出到终端,标准输出被重定向到文件fil

2013-04-25 17:03:59 3137

原创 PHP foreach与引用赋值

<?php$arr = array('a', 'b', 'c');foreach($arr as &$v) {}foreach($arr as $v) {}var_dump($arr);/*结果为:array(3) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> &string(1) "b"}*///第一

2013-04-24 16:07:32 4558 2

原创 PHP对象的深复制与浅复制

<?phpclass Test1 { public $num1 = 0; //包含的对象 public $obj2; public function __construct() { $this->obj2 = new Test2; }}class Test2 { public $num2 = 0;}$obj1 = ne

2013-04-24 15:09:26 4067

原创 PHP实现单例模式

<?phpclass Test{ //保存实例在此属性中,$_instance必须声明为静态的私有变量 private static $_instance; //构造函数必须声明为private,防止外部new private function __construct() { } //将__clone方法设置为私

2013-04-24 10:45:15 732

转载 对 HTTP 304 的理解

304的标准解释是:Not Modified 客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。如果客户端在请求一个文件的时候,发现自己缓存的文件有Last Modified,那么在请求中会包含 If Modified Since,这个时间就是缓存文件的La

2013-03-06 17:21:31 571

原创 对301、302的理解

301与302区别?301状态码指的是网页永久性的转移到另外一个位置302状态码指的是网页暂时转移到另外一个位置302重定向和网址劫持(URL hijacking)的关系?从定义来说,从网址A做一个302重定向到网址B时,服务器的隐含意思是网址A随时有可能改主意,重新显示本身的内容或转向其他的地方。大部分的搜索引擎在大部分情况下,当收到302重定向时,一般只要去抓取目标

2013-03-06 17:03:52 769

原创 Redis主从复制

redis是一个key-value存储系统,和memcached类似,它支持存储的value类型更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)等类型。和memcached一样,为了保证效率,数据都是缓存在内存中。区别是redis会周期性的将数据同步到磁盘,并在此基础上实现了master-slave同步。redis主从复制的特点:1.master可以

2013-01-05 22:04:01 503

原创 Nginx实现负载均衡

Nginx主要有两大功能,一种是作为web server(作为apache的替代方案),另外一种是作为反向代理服务器实现负载均衡。Nginx基于HTTP反向代理方式实现了第七层负载均衡功能,能够很好的支持虚拟主机。可以按轮询、IP哈希、URL哈希、权重等多种方式对后端服务器做负载均衡,同时还支持后端服务器的健康检查。一、实验环境Nginx服务器ip:192.168.1.10

2013-01-02 15:21:33 865

原创 利用keepalived构建高可用的MySQL

一、概述MySQL-HA目前有很多实现方案,今天就用MySQL双master+keepalived来实现MySQL-HA。在MySQL-HA环境中,MySQL互为主从关系,这样就保证了两台MySQL数据的一致性。然后用keepalived实现虚拟IP,通过keepalived来实现MySQL故障时自动切换。实验环境如下:Ubuntu12.04 MySQL5.5 keepaliv

2012-12-30 20:02:23 2838

原创 MySQL主从复制详解

实验环境:Master:version:MySQL5.5   ip:192.168.1.102Slave: version:MySQL5.5   ip:192.168.1.103一、复制解决的问题1.数据分布MySQL的复制通常不会对带宽造成很大压力,并且可以随意启动和停止。因此对于在不同地方维护数据拷贝很有作用。2.负载均衡MySQL复制可以把读取分布在不同的服务

2012-12-30 15:17:51 2618 1

原创 高可用的LVS负载均衡集群技术详解

最近在看《高性能Linux服务器构建实战》学习LVS相关的技术,将学习的知识做个笔记。一、LVS集群的组成利用LVS架设的服务器集群系统由3个部分组成:负载均衡层、服务器群组层、数据共享存储层。1.负载均衡层位于整个集群系统的最前端,有一台或者多台负载调度器(Director Server)组成.LVS核心模块IPVS就安装在Director Server上,而Director

2012-12-29 10:08:58 1056

原创 LIKE、ORDER BY、GROUP BY索引优化

1.LIKE2.ORDER BY3.GROUP BY

2012-12-27 16:27:46 1049

原创 MySQL复制原理图解

复制如何工作整体上来说,复制有3个步骤:   1.master将变更记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events)。2.slave将master的binary log events拷贝到它的中继日志(relay log);3.slave回放中继日志中的事件,更新自己的数据。下图描述了复制的过程:如何让slav

2012-12-27 11:17:04 851

原创 MySQL索引优化

MySQL索引类型分为:普通索引、唯一索引、主键、全文索引。普通索引允许重复的值出现。唯一索引除了不能有重复的记录外,其它和普通索引一样。主键是一种特殊的唯一索引。全文索引只能对(char,varchar,text)进行索引,MyISAM引擎支持全文索引。1.什么情况下需要建立索引?通常情况下来讲,在WHERE、JOIN以及LIKE子句中出现的列需要建立索引。2

2012-12-15 16:52:16 568

原创 MyISAM与InnoDB的区别

MyISAM InnoDB 构成上区别 每个MyISAM在磁盘上存储成三个文件。文件名为表名,扩展名为文件类型。.frm 文件存储表定义;.MYD(MYData) 数据文件的扩展名;.MYI(MYIndex) 索引文件的扩展名。 基于磁盘的资源是InnoDB表空间数据文件和它的日志文件,InnoDB 表的大小只受限于操作系统文件的

2012-12-13 12:54:17 465

原创 MySQL数据类型char、varchar、text的比较

char(n)定义的列的长度为固定的,长度为0~255之间。当保存char值时,在它们的右边填充空格以达到指定的长度。当检索到char值时,尾部的空格被删除掉。注意:char最大长度是255字符,字符数和字符集没关系。varchar(n)定义的列的长度为可变长的。该类型在5.0以下的版本中的最大长度限制为255字节,而在5.0及以上的版本中,varchar数据类型的长度

2012-12-12 13:31:24 1451

原创 使用getopt模块处理命令行选项

#!/usr/bin/env python#-*- coding:utf8 -*-import sysimport getopt#函数getopt(args, shortopts, longopts=[])"""参数args一般是sys.argv[1:]shortopts 短格式 (-) longopts 长格式(--) 命令行中输入:python test.py -i 12

2012-11-29 16:29:41 657

原创 php实现常用排序算法和查找算法

<?php/** * 冒泡排序 * 冒泡排序就是依次比较相邻的两个数,根据采用的排序规则决定是否交换两个数的位置。 * 在此以升序为例来进行讲解。 * 第一轮:首先比较第一个数和第二个数,将小数放前,大数放后,然后比较第二个数和第三个数, * 将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。到第一轮结束 * 的时候,已经成功地将最大的数放到了最后。 * 第

2012-09-02 15:34:42 837

转载 理解inode

一、inode是什么?理解inode,要从文件储存说起。文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 sec

2012-08-09 19:27:29 407

转载 浅谈linux的inode

linux中inode是个什么概念呢?简单的说inode是一个不能重复的标号一样,每个文件或目录对应一个inode值,那个inode包含哪些部分,有什么作用呢?这里拿ext3文件系统的inode数据结构来说:struct ext3_inode { __u16 i_mode;    /* File mode */ __u16 i_uid;     /* Low 16 bits of Ow

2012-08-08 13:32:05 624

原创 php通过pcntl扩展用多进程模拟多线程

php本身是不支持多线程的,但是可以利用多进程模拟多线程。function test($thread, $num) {    $i = 1;    while($i        echo $thread.":".$i."\n";        $i++;    }    }function start_thread($thread, $num) {

2012-07-30 19:17:20 816

转载 为什么Nginx的性能要比Apache高得多

这得益于Nginx使用了最新的epoll(Linux 2.6内核)和kqueue(freebsd)网络I/O模型,而Apache则使用的是传统的select模型。目前Linux下能够承受高并发访问的Squid、Memcached都采用的是epoll网络I/O模型。处理大量的连接的读写,Apache所采用的select网络I/O模型非常低效。下面用一个比喻来解析Apache采用的

2012-07-30 17:48:04 2959

原创 Apache工作模式prefork和worker的比较

选择prefork还是worker可以在编译时使用--with-mpm=MPM参数指定,默认为prefork.1.prefork.c模块(一个非线程型的、预派生的MPM)prefork采用预派生子进程方式,用单独的子进程来处理 不同的请求,进程之间彼此独立。在make编译和make install安装后,使用httpd -l来确定当前使用的MPM是prefork.c。prefo

2012-07-30 16:10:23 1206

转载 Apache与浏览器之间的并发,连接,请求

并发(并发数量):就是apache的并发数量,更直接就是apache为了处理用户请求开启的进程数量,简单理解就是apache的进程数量。连接(TCP连接):apache和浏览器之间是通过TCP/IP协议进行通信的,这里的连接就是apache和浏览器之间的TCP连接。请求(浏览器的请求):apache服务器一直监听80端口,不会发起主动请求。而浏览器会向apache发起连接请求。这里讲的请求

2012-07-30 14:23:38 2713

原创 javascript原型和原型链

//原型    var Test = function() {};        //Test对象本身的方法    Test.sayHello = function() {        alert('Hello, Test!');    };        //Test实例化对象的方法    //函数对象会有一个prototype属性,指向这个函数的原型对象,

2012-07-28 19:33:55 483

原创 Python中的可变参数*args和**kwargs

#!/usr/bin/env python#-*- coding:utf8 -*-"""*args和**kwargs这两个参数是Python中的可变参数。*args是一个tuple,表示任意多个无名参数(non-keyword arg);**kwargs是一个dict,表示任意多个关键字参数(keyword arg)。同时使用*args和**kwargs时,必须*args参

2012-07-25 21:22:35 812

原创 Python类的私有成员

#!/usr/bin/env python#-*- coding:utf8 -*-"""Python中类的成员函数、成员变量默认都是公开的(public),而且Python中没有类似public、private等关键词来修饰成员函数,成员变量。在python中定义私有成员只需要在变量名或函数名前加上"__"(两个下划线),那么这个函数或变量就变成私有的了。在内部,pytho

2012-07-25 20:21:23 4345

转载 Python对象的深复制与浅复制

简单点说1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象。2. copy.deepcopy 深拷贝 拷贝对象及其子对象用一个简单的例子说明如下:>>>import copy>>>a = [1, 2, 3, 4, ['a', 'b', 'c']]>>> b = a>>> c = copy.copy(a)>>> d = copy.deepcop

2012-07-23 13:51:47 1604

原创 php合并数组array_merge()与+的区别

$arr1 = array('a', 'name'=>'test1', 1 );$arr2 = array('a', 1, 'name'=>'test2');var_dump(array_merge($arr1, $arr2));/*array(5) { [0]=> string(1) "a" ["name"]=> string(5) "test2" [1]=> i

2012-07-19 22:15:35 493

原创 javascript获取窗口的宽度和高度

获取显示区域尺寸可以用 clientHeight clientWidth 获取内容尺寸可以用 scrollHeight scrollWidth  网页可见区域宽: document.body.clientWidth 网页可见区域高: document.body.clientHeight 网页可见区域宽: document.body.offsetWidth (包括边线的宽) 网页

2012-05-14 20:31:22 745

原创 pageX,clientX,screenX,offsetX区别

pageX/pageY:鼠标相对于整个页面的X/Y坐标。注意,整个页面的意思就是你整个网页的全部,比如说网页很宽很长,宽2000px,高3000px,那pageX,pageY的最大值就是它们了。特别说明:IE不支持!clientX/clientY:事件发生时鼠标在浏览器内容区域的X/Y坐标(不包含滚动条)。浏览器内容区域即浏览器窗口中用来显示网页的可视区域,注意这个可视,也

2012-05-09 13:42:18 24052 5

转载 深入理解ob_flush和flush的区别

ob_flush/flush在手册中的描述, 都是刷新输出缓冲区, 并且还需要配套使用, 所以会导致很多人迷惑…其实, 他们俩的操作对象不同, 有些情况下, flush根本不做什么事情..ob_*系列函数, 是操作PHP本身的输出缓冲区. 所以, ob_flush是刷新PHP自身的缓冲区.而flush, 严格来讲, 这个只有在PHP做为apache的Module(handler或者

2012-04-13 16:33:49 574

转载 如何设置一个严格30分钟过期的Session

第一种回答那么, 最常见的一种回答是: 设置Session的过期时间, 也就是session.gc_maxlifetime, 这种回答是不正确的, 原因如下:1. 首先, 这个PHP是用一定的概率来运行session的gc的, 也就是session.gc_probability和session.gc_divisor(介绍参看 深入理解PHP原理之Session Gc的一个小概率Notice

2012-04-13 15:51:45 467

原创 python常见编码问题解决方法

1.文件编码py文件默认是ASCII编码,是不支持中文的,即使注释是中文也不行,为了解决这个问题,就需要把文件编码类型改为UTF-8的类型。可在文件开头加上如下代码:# -*- coding:utf-8 -*-2.字符串编码字符串在python内部的表示是unicode编码。因此,在做编码转换时,通常需要将unicode作为中间编码。先将其他编码的字符串解码(decod

2012-03-20 13:03:51 866

原创 python多线程模块thread,threading,Queue

python通过两个标准库(thread, threading)提供了对多线程的支持thread模块import timeimport threaddef runner(arg): for i in range(6): print str(i)+':'+arg time.sleep(1) #结束当前线程 thread.ex

2012-03-18 00:05:19 8579

转载 python线程基础

线程状态线程有5种状态,状态转换的过程如下图所示:线程同步(锁)多线程的优势在于可以同时运行多个任务(至少感觉起来是这样)。但是当线程需要共享数据时,可能存在数据不同步的问题。考虑这样一种情况:一个列表里所有元素都是0,线程"set"从后向前把所有元素改成1,而线程"print"负责从前往后读取列表并打印。那么,可能线程"set"开始改的时候,线程"print"便来打印列表

2012-03-16 23:19:19 614

原创 python re module

正则表达式并不是Python的一部分。正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎。compile(pattern, flags=0)编译一个正则表达式字符串,返回一个正则表达式对象.第二个参数flag是匹配模式,取值可以使用按位或运算符'|'表示同时生效,比如re.I | re.M。I(IGNORECASE): 忽略大小写(括号内是完整写法)。

2012-03-10 17:36:07 1024

转载 filter,map,reduce

首先看一下匿名函数lambdalambda的使用方法如下:lambda [arg1[,arg2,arg3,...,argn]] : expression>>> add = lambda x,y : x + y>>> add(1,2)31、filter(bool_func,seq):此函数的功能相当于过滤器。调用一个布尔函数bool_func来迭代遍历每个seq中的元素;返回一个使boo

2012-03-07 00:06:30 554

memcached教程

memcached详细文档,讲解原理什么的。

2013-03-15

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除