自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(157)
  • 资源 (5)
  • 收藏
  • 关注

原创 跟我一起用C++实现Java Thread库(一)

最近学习Java多线程编程,发现Java标准库中的java.lang.Thread接口定义十分友好简洁,使用起来十分方便。不禁想起之前用C/C++写多线程时的烦恼,总会写一些pthread_*函数。于是萌生了这个念头,希望用C++实现一套类似Java Thread的库,简化以后的C++多线程开发。

2017-08-22 12:50:38 997

原创 Linux下容易被忽视的那些命令用法

工作中发现很多同学对于Linux下的命令不太熟悉,尤其是一些功能强大的工具,使用者很少。正所谓工欲善其事,必先利其器。本文总结了Linux下常用命令的用法,希望能够帮助大家提升日常开发的效率。

2017-08-16 16:42:59 588

原创 Nginx最新模块—ngx_http_mirror_module分析

最近nginx官网公布了nginx1.13.4最新的ngx_http_mirror_module模块,利用mirror模块,业务可以将线上实时访问流量拷贝至其他环境,基于这些流量可以做版本发布前的预先验证,进行流量放大后的压测等等。本着兴趣笔者调研了其实现原理和使用方式,通过demo的形式展示给读者,希望能解决大家在使用过程中遇到的问题。

2017-08-11 10:58:36 5814

原创 深入剖析nginx时间缓存

在服务器开发领域,时间的准确度关系到系统能否正常运行,尤其是当系统中存在超时事件需要处理时。但是系统时间的获取需要一次昂贵的系统调用,作为一款成熟的服务器软件,Nginx是如何优化这部分的性能开销?

2017-08-07 09:57:17 876

原创 ORM选型—DataMapper VS ActiveRecord

在web后台开发领域,经常会遇到应用程序操作数据库的场景,目前市面上存在的数据库包括mysql、postgresql、oracle、sqlite等,为了屏蔽不同数据库的差异,产生了ORM(Object-Relation-Mapping),在实现层面,又分为DataMapper和ActiveRecord两种。

2017-07-30 09:13:07 6913

原创 自己动手实现promise

大家都知道,异步编程在web领域内越来越多地运用,但异步回调代码的写法十分恶心,逐层嵌套,不便于阅读。为了解决这个问题,js实现了promise模式,但大多数开发者只知道promise的表面用法,不知其底层实现逻辑。笔者采用PHP实现了自己的promise,借着此过程,与大家分享promise的实现原理。

2017-07-22 10:31:11 1126

原创 深入剖析nginx平滑重启

在服务器开发过程中,难免需要重启服务加载新的代码或配置,如果能够保证server重启的过程中服务不间断,那重启对于业务的影响可以降为0。最近调研了一下nginx平滑重启,觉得很有意思,记录下来供有兴趣的同学查阅。

2017-07-16 20:04:48 10221 1

原创 聊聊服务化

本文适合对SOA和服务化比较感兴趣的同学阅读,需要具备一定的web后台基础知识。

2017-07-16 20:00:52 2588

原创 PHP开发web程序的两种模式

从执行流程上来看,所有程序可以分为同步程序和异步程序。众所周知,同步程序流程清晰,开发友好,容易上手,相比之下异步程序的优点在于程序并发度高,资源能够得到充分利用。于是出现了一些基于协程调度的框架,兼具同步程序和异步程序的优点。对应到php领域,除了传统的LAMP/LNMP同步开发模式,还出现了类似swoole的异步协程开发模式。本文通过对两种开发模式进行比较,旨在说明二者实现上的异同,供广大PHP程序员参考。

2017-07-16 19:58:32 6160

原创 PHP HTTP客户端-Guzzle原理解析

在PHP后台开发过程中,经常会遇到模块间需要通过HTTP通信的情形。PHP语言本身只提供了socket操作的接口,并未提供HTTP相关操作的接口。许多现有的实现采用curl扩展充当HTTP Client与HTTP Server通信,但仍需自己封装curl的接口。有鉴于此,本文介绍一款流行的PHP HTTP Client客户端---Guzzle(https://github.com/guzzle/guzzle/)的用法,深入分析其底层实现原理。

2017-07-16 19:55:59 8263 2

原创 php 异步websocket客户端实现

php 异步websocket客户端

2017-06-15 21:35:29 7058

原创 composer autoload原理浅析

最近读了一点laravel的代码,里面用到composer,感觉其中的autoload机制有点诡异,翻阅源码,有所得,故记载之。使用composer下载包之后,需要require "vendor/autoload.php",所以就从入口文件着手。1.autoload.php => composer/autoload_real.php/getLoader() => $loader = new

2016-10-16 19:21:51 2448

原创 composer原理与使用简介

说到php,难免会触及到composer,尤其像laravel、CI这样的框架,随处可见composer的身影。在使用上,composer只需要一个文件即可,composer.phar。此文件可在https://getcomposer.org/composer.phar上下载,当然,也可以采用全局安装等方式,具体见官方文档,但最简单的还是一个文件搞定。添加文件到PATH路径,这样就可以随处

2016-10-16 18:41:24 4005

转载 linux异步IO浅析

知道异步IO已经很久了,但是直到最近,才真正用它来解决一下实际问题(在一个CPU密集型的应用中,有一些需要处理的数据可能放在磁盘上。预先知道这些数据的位置,所以预先发起异步IO读请求。等到真正需要用到这些数据的时候,再等待异步IO完成。使用了异步IO,在发起IO请求到实际使用数据这段时间内,程序还可以继续做其他事情)。假此机会,也顺便研究了一下linux下的异步IO的实现。linux下

2016-09-17 20:23:54 653

原创 未释放互斥锁线程退出

#include #include pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;void *f(void *args){ pthread_mutex_lock(&mutex); printf("lock in f without unlock!\n"); return NULL;}

2016-09-17 18:31:35 3644

转载 binlog,redo log,undo log区别

1. binlog是MySQL Server层记录的日志, redo log是InnoDB存储引擎层的日志。 两者都是记录了某些操作的日志(不是所有)自然有些重复(但两者记录的格式不同)。2. 选择binlog日志作为replication我想主要原因是MySQL的特点就是支持多存储引擎,为了兼容绝大部分引擎来支持复制这个特性,那么自然要采用MySQL Server自己记录的日志而不是仅仅针对

2016-09-15 21:52:19 1820

转载 Linux Shell 文本处理工具集锦

find 文件查找grep 文本搜索xargs 命令行参数转换sort 排序uniq 消除重复行用tr进行转换cut 按列切分文本paste 按列拼接文本wc 统计行和字符的工具sed 文本替换利器awk 数据流处理工具迭代文件中的行、单词和字符本文将介绍Linux下使用Shell处理文本时最常用的工具:find、grep、xargs、sort、uniq、tr、cut、past

2016-08-31 21:09:25 409

转载 xtrabackup热备一致性原理

xtrabackup作为innodb的hotbackup工具,由percona公司开发,因开源,热备份和物理备份而在mysql中部署广泛,详情的说明可见之前的博客讨论.  在物理级别热备份主要的一大挑战就是在文件级别数据块不一致.我们知道innodb的单个page大小由innodb_page_size 来决定,一般为16K.由4个文件系统4K的块组成.mysql> sh

2016-08-28 15:51:55 1624

转载 java8安装

echo "deb http://ppa.launchpad.net/webupd8team/java/ubuntu xenial main" | tee /etc/apt/sources.list.d/webupd8team-java.list echo "deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu xenial main

2016-08-23 09:11:11 660

转载 PHP命名空间(Namespace)的使用详解

对于命名空间,官方文档已经说得很详细[查看],我在这里做了一下实践和总结。命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误。这种情况下只要避免命名重复就可以解决,最常见的一种做法是约定一个前缀。例:项目中有两个模块:article和message board,它们各自有一个处理用户留言的类Comment。之后我可能想要增加对所有

2016-08-14 21:23:26 361

转载 iostat用法小结

1. 基本使用$iostat -d -k 1 10参数 -d 表示,显示设备(磁盘)使用状态;-k某些使用block为单位的列强制使用Kilobytes为单位;1 10表示,数据显示每隔1秒刷新一次,共显示10次。$iostat -d -k 1 10Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtnsda 39.29 21.1

2016-08-06 20:32:54 689

转载 PHP-FPM on highload tips

When you running a highload website with PHP-FPM via FastCGI, the following tips may be useful to you : ) 1. Compile PHP's modules as less as possible, the simple the best (fast); 2. Incre

2016-08-02 17:15:17 389

转载 php-fpm占用系统资源分析

故障检测1.别的先不管,先top看一下cpu、ram、swap哪个比较紧张。  由上图分析,可以看出共有602个进程,其中有601个进程休眠了。这好像有点不对劲,内核进程也就80个左右,加上memcached, nginx, mysqld,也不会超出90个。除了这些,剩下的只有php-fpm管理的php-cgi,难道是…?CPU显示,CPU压力并不大,可以说

2016-08-02 17:01:11 2468

转载 linux使用crontab实现php定时任务

首先说说cron,它是一个linux下的定时执行工具。根用户以外的用户可以使用 crontab 工具来配置 cron 任务。所有用户定义的 crontab 都被保存在/var/spool/cron 目录中,并使用创建它们的用户身份来执行。要以某用户身份创建一个 crontab 项目,登录为该用户,然后键入 crontab -e 命令来编辑该用户的 crontab。该文件使用的格式和 /etc/cr

2016-08-02 14:52:55 1477

原创 SSH自动登录脚本

在通过ssh root@host:port 这种方式登录其他机器时,总需要输入用户名和密码,比较麻烦,遂生成脚本自动执行,具体代码如下:#!/usr/bin/expect -fset username "username"set password "admin"set ip "0.0.0.0"spawn ssh $username@$ipexpect { "*passwo

2016-07-29 16:56:54 413

转载 彻底理解PHP的SESSION机制

一、默认机制,用磁盘文件来实现PHP会话。php.ini配置:session.save_handler = files  1、session_start()    A、 session_start()是session机制的开始,它有一定概率开启垃圾回收,因为session是存放在文件中,      PHP自身的垃圾回收是无效的,SESSION的回收是要删文件的,这个概率是根据php.i

2016-07-27 15:16:39 278

转载 CSRF 攻击的应对之道

CSRF 背景与介绍CSRF(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,它在 2007 年曾被列为互联网 20 大安全隐患之一。其他安全隐患,比如 SQL 脚本注入,跨站域脚本攻击等在近年来已经逐渐为众人熟知,很多网站也都针对他们进行了防御。然而,对于大多数人来说,CSRF 却依然是一个陌生的概念。即便是大名鼎鼎的 Gmail, 在 20

2016-07-27 11:18:05 458

原创 php安装redis扩展

php安装redis扩展需要先安装php,关于php安装的步骤见http://blog.csdn.net/xhjcehust/article/details/50987278接下来安装redis,git clone https://github.com/antirez/redis.git,.make && make install这时在/usr/lib/php/modules或者/usr/

2016-07-18 21:36:45 1809

转载 nginx内置预定义变量

nginx的配置文件中可以使用的内置变量以美元符$开始,也有人叫全局变量。其中,部分预定义的变量的值是可以改变的。$arg_PARAMETER 这个变量值为:GET请求中变量名PARAMETER参数的值。$args 这个变量等于GET请求中的参数。例如,foo=123&bar=blahblah;这个变量只可以被修改$binary_remote_addr 二进制码形式的客户端

2016-06-18 22:16:21 408

原创 动态hash算法实现

动态hash算法实现

2016-06-12 12:54:21 6597

转载 ptrace运行原理及使用详解

你想过怎么实现对系统调用的拦截吗?你尝试过通过改变系统调用的参数来愚弄你的系统kernel吗?你想过调试器是如何使运行中的进程暂停并且控制它吗?你可能会开始考虑怎么使用复杂的kernel编程来达到目的,那么,你错了。实际上Linux提供了一种优雅的机制来完成这些:ptrace系统函数。 ptrace提供了一种使父进程得以监视和控制其它进程的方式,它还能够改变子进程中的寄存器和内核映像,因而

2016-05-08 10:34:23 931

原创 python版本、文件信息及时间获取函数实例

最近用到一些基础组件函数,特记录下来,以便后续用到时查阅,涉及到python版本、文件信息及时间获取等。具体代码为:import sysimport getpassimport pwdimport platformimport datetimestart_time = datetime.datetime.now()print("Author: %s" % (get_owner(sy

2016-05-06 15:34:35 1154

原创 拷贝构造函数和赋值操作符在继承中的应用

在继承中,拷贝构造函数和赋值操作符表现的特性是不同的。拷贝构造函数承担着构造和拷贝双重责任,无论什么情况下都需要构造基类部分,赋值操作符则不同,其目标是已经构造好的对象,只需要赋值即可。派生类无构造函数和赋值操作符场景:#include using namespace std;class B {public: B() { cout << "B()" << endl;

2016-04-29 11:32:53 428

转载 php中大括号的用法和意义{}

在PHP中,大括号“{}”可以起到如下作用:将多个独立语句合并为一个复合语句,例如 if ... else ...中经常如此使用在变量间接引用中进行定界,避免歧义。例如 ${$my_var[8]}与${$my_var}[8]的区分用于指示字符串变量中的单个字符(下标从0开始),例如$my_str="1234";$my_str{1}='5'; //现在 $my_str 内容为 '1

2016-04-27 22:48:22 462

原创 python编解码的那些事儿

在python编程尤其是处理web应用时,遇到编解码问题的概率较大,通常这种问题也比较繁琐,记下自己的理解,以备不时之需。编解码内涵编解码存在的意义主要是由于各种不同编码方式的存在,有gbk啦,也有utf-8啦,还有gb2312等等。python中的decode和encode的参数意义是一样的,即decode("utf-8")代表根据utf-8的编码规则来解码文本,最终得到的就是未经编码的

2016-04-24 11:16:11 810

原创 项目Makefile书写示例(二)

之前介绍了项目Makefile的写法,详见http://blog.csdn.net/xhjcehust/article/details/51096924链接主要讲述的是单个目录下的Makefile写法,本文在此基础上介绍多目录的Makefile写法,目录结构为:在cli、exp、trig子目录下的文件分别为:文件之间的关系为exp和trig下的文件inc

2016-04-10 08:39:34 411

原创 tcp和udp的0字节数据

网上许多博客讨论了tcp和udp的0字节数据问题,如http://blog.csdn.net/wzx19840423/article/details/66430941、tcp和udp都能发送0字节的数据包,windows下通过GetLastError查看返回值为02、tcp发送0字节的数据包后,接收方调用recv不会接收到该数据包3、udp发送0字节的数据包后,接收方调用recvfro

2016-04-08 15:40:29 2582

原创 stty命令

stty可以用来改变终端的行设置常见的命令为:stty -icanon 设置一次性读完操作,如使用getchar()读操作,不需要按enterstty icanon 取消上面设置stty -a 查看 信息stty -echo 设置命令不被显示stty echo 取消不显设置设置icanon 可以用于网络程序开发时的调试,逐个输入字符,判断接收端接收情况

2016-04-08 15:27:35 1688

原创 项目Makefile书写示例(一)

现有如下文件目录,需要构建Makefile文件。文件之间的依赖关系为:需要生成目标文件为indexer queryone printindex query所有.o文件都依赖于freq_list.h queryone、worker、query还依赖于worker.h按照常规写法,先编译生成.o文件,再链接生成目标执行文件写出的Makefile为:# Makefil

2016-04-08 15:22:08 444

原创 Requests库使用

HTTP请求大致有GET、POST、PUT、DELETE、HEAD、OPTIONS六种,对应到requests库上的使用方法依次为GETimport requestsurl = 'http://www.baidu.com'payload = {'key1': 'value1', 'key2': 'value2'}headers = {}r = requests.get(url, pa

2016-04-06 11:50:09 430

VIM配置文件

为了更好的在vim下进行工作,需要手动设置一个配置文件:.vimrc。 在启动vim时,当前用户根目录下的.vimrc文件会被自动读取,该文件可以包含一些设置甚至..

2015-07-05

putty_V0.63.0.0.43510830

PuTTY是一个Telnet、SSH、rlogin、纯TCP以及串行接口连接软件。较早的版本仅支持Windows平台,在最近的版本中开始支持各类Unix平台,并打算移植至Mac OS X上。

2015-07-05

腾讯编程马拉松第一场考试题目.doc

腾讯编程马拉松第一场考试题目,给力~~~

2013-03-20

基于ASP技术网上考试系统的设计与实现

基于ASP技术网上考试系统的设计与实现,只得学学,适合ASP初学者

2012-11-01

空空如也

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

TA关注的人

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