介绍:
本人普通后端开发,对 网络编程 和 Unix 系统编程有浓厚兴趣。
Github:zhenbianshu
微博:枕边书_5277
// 个人网站:枕边书: http://www.alwayscoding.net/
博客全部原创,持续更新中,欢迎交流关注。
文章首发于 github.io:枕边书 ,也会在那里更新一些工作和学习的心得。
Golang
2017年11月27日 Gotorch - 多机定时任务管理系统
cron 在单机上应用很方便,可是在多台机器、任务繁多的情况下,想把任务管理得井井有条就不是一件简单的事了。我来安利一个自己用 Go 实现的 cron plus,文章主要介绍实现思想和各功能的技术要点。
C语言
2017年3月14日 用C写一个web服务器(一) 基础功能
为了深刻理解 nginx 服务器工作原理,用 C 仿写一个简化版的 web 服务器,本次更新实现了一个服务器的最基本功能,希望在优化完善的过程中能够有所收获。
2017年3月23日 用C写一个web服务器(二) IO多路复用之epoll
本次更新对服务器添加了I/O多路复用的 epoll 模式,本文通过服务器优化实例来介绍 epoll 事件通知机制的基本知识和其应用方法。
2017年4月18日 用C写一个web服务器(三) Linux下用GCC进行项目编译
本文主要总结一下如何在linux下如何使用GCC完整编译一个C项目,介绍一下动态和静态库的编译方式和使用方法,另外介绍cmake工具的CMakeLists文件的简单写法。
2017年6月7日 用C写一个web服务器(四) CGI协议
本文主要通过 C 服务器 CGI 协议的实现,讲解了 CGI 协议的一般内容,顺便还补充了一些PHP的SAPI和PHP-FPM的知识。
进程间通信
2017年7月31日 PHP 调用 Go 的正确方式 - Unix Domain Sockets
本文通过 PHP 调用 Go 服务的实例的实现,介绍一种不同语言进程间通信的方式:Unix Domain Sockets,它可以快速高效地实现进程间的数据、信息交互,而且不需要锁等复杂操作,可谓是进程间通信的利器。
2017年2月20日 从并发处理谈PHP进程间通信(一)外部介质
任何一个完备的后端语言都应该有支持进程间通信(IPC)的方法,本文依旧通过并发循环ID生成器来讲 PHP 中对System V IPC包装的函数族,描述信号量,共享内存的简单用法。
2017年2月13日从并发处理谈PHP进程间通信(二)System V IPC
后端开发的并发编程中,进程间通信是一个永远也绕不开的问题,本文通过一个 “并发生成循环ID” 的需求的多种实现来讲解如何通过外部介质进行进程间通信。本文介绍的外部通信方式有 文件、mysql、redis。
多进程
2016年7月18日 初探PHP多进程
我们都知道PHP是单进程单线程执行的,PHP处理多并发主要是依赖服务器或PHP-FPM的多进程及它们进程的复用,但PHP实现多进程也意义重大,尤其是在后台Cli模式下处理大量数据或运行后台DEMON守护进程时,多进程的优势不用多说。
通信加密
2017年1月15日再谈加密-RSA非对称加密的理解和使用
随着硬件的快速发展,加解密带来的资源消耗已经越来越微不足道了,对于IT行业,加解密特别是非对称加密一定会越来越重要,本文不谈枯燥的算法,聊一聊非对称加密的相关知识、RSA加密算法的数字证书操作,也会附带一些其他相关知识和使用心得。
2016年7月11日PHP的openssl加密扩展使用小结
互联网的发展史上,安全性一直是开发者们相当重视的一个主题,为了实现数据传输安全,我们需要保证:数据来源(非伪造请求)、数据完整性(没有被人修改过)、数据私密性(密文,无法直接读取)等,本文介绍了加密基础、PHP使用openssl进行常见加密操作。
空间索引
2017年5月7日 空间索引 - 各数据库空间索引使用报告
本文主要介绍 Redis、MongoDB、PostgreSQL 和 MySQL 数据库空间索引安装配置和使用时需要注意的点,并选取了120万数据对这些数据库的空间索引进行了测试,简单总结了各数据库空间索引的性能和特色以及使用场景。
2017年5月16日 空间索引 - GeoHash算法及其实现优化
本文介绍了空间索引之 GeoHash 索引的原理,并参考 Redis GEO 系列函数的实现,使用sorted set 优化了 GeoHash 的效率和精度,并附上PHP实现。
2017年6月22日 空间索引 - 四叉树
本文通过C语言的四叉树实例,介绍了四叉树的实现过程(主要是插入和查询),另外介绍了四叉树的边界点问题及解决方案,并将四叉树和GeoHash在实现空间索引的原理上做了对比。
网页实时聊天
2017年12月4日 多线程编程 - PHP 实现
恰当地使用多线程能够大大提升程序效率,本文对比多进程介绍了下多线程的优势和适用场景,提出了一种巧用方案,并使用 PHP 代码实现了多线程的常见用法。
2015年11月14日 网页实时聊天之js和jQuery实现ajax长轮询
众所周知,HTTP协议是无状态的,所以一次的请求都是一个单独的事件,和前后都没有联系。所以我们在解决网页实时聊天时就遇到一个问题,如何保证与服务器的长时间联系,从而源源不段地获取信息。本文介绍如何使用长轮询的加强版-长轮询来进行网页实时聊天。
PHP
2016年11月14日 PHP中的回调函数和匿名函数
回调函数、闭包在JS中并不陌生,JS使用它可以完成事件机制,进行许多复杂的操作。PHP中却不常使用,今天来说一说PHP中中的回调函数和匿名函数
2016年11月14日 PHP中的回调函数和匿名函数
回调函数、闭包在JS中并不陌生,JS使用它可以完成事件机制,进行许多复杂的操作。PHP中却不常使用,今天来说一说PHP中中的回调函数和匿名函数。
2015年11月6日 PHP正则中的捕获组与非捕获组
今天遇到一个正则匹配的问题,忽然翻到有捕获组的概念,手册上也是一略而过,百度时无意翻到C#和Java中有对正则捕获组的特殊用法,搜索关键词有PHP时竟然没有相关内容,自己试了一下,发现在PHP中也是可行的,于是总结分享一下。
2015年11月5日 PHP递归创建多级目录(一道面试题的解题过程)
一道“创建多级目录”面试题解法不断优化的过程。
2016年3月28日 搭建自己的PHP框架心得(一)
说到写PHP的MVC框架,大家想到的第一个词--“造轮子”,是的,一个还没有深厚功力的程序员,写出的PHP框架肯定不如那些出自大神们之手、经过时间和各种项目考验的框架。但这次造轮子的目的不是为了造轮子,而是为了在造轮子的过程中熟悉其工艺,总结轮子特点,更好的使用轮子。
2016年4月4日 搭建自己的PHP框架心得(二)
接着完善自己的PHP框架,本次更新,更新了函数规范上的一些问题,如将函数尽量的独立化,每一个函数尽量只单独做好一件事情,尽量减少函数依赖。还对框架的整体优化了一下,添加了SQ全局类,用以处理全局函数,变量。
2016年6月27日 搭建自己的PHP框架心得(三)
接着完善自己的PHP框架,本次更新的主要内容有: 介绍了异常处理机制 完善了异常和错误处理 数据表跟Model类的映射。
2016年1月13日 yii2开发后记
前些天准备写一个自己的博客CMS,考虑PHP框架的时候想到了据说非常强大的yii,接触yii时发现有2.0版本,果断尝最鲜的。使用期间踩了很多坑,本文是对yii2使用的一个总结。
数据结构与算法
2018年1月3日 通过2-3-4树理解红黑树
红黑树是非常经典且实用的数据结构,本文通过它的等同——2-3-4树,避开颜色因素的影响,以一种更简单的方式介绍了红黑树插入删除操作的实现。文章附带 PHP 和 Java 版红黑树源码。
2017年7月17日 小时到分钟 - 一步步优化巨量关键词的匹配
60万 条短消息记录,5万 关键词,看我如何一步步地将耗时 10小时 的作业优化到 10分钟 以内。优化过程中的心得、坑和结论方法,希望能大家一些启发。
2016年3月13日 PHP实现堆排序
百度百科的堆排序竟然没有PHP版本的,作为世界上“最”好的语言,这太掉份了,于是我帮它补上。
2015年12月19日 分布算法之一致性哈希算法
在进行大型网站的web开发时,分布式这个词经常出现在我们面前。究其根源,都要理解分布式算法,接下来以缓存服务器的负载均衡来谈一下一致性哈希算法。
2015年10月31日 用memoization优化递归算法[JS/PHP实现]
递归函数,通过把一个大而复杂问题简化为许多但规模较小的问题,以同一个相似模式来计算,降低了解题的难度;memoization的思想是通过定义一个数组,用来存放计算过的数据,在需要的时候直接从数组中取出,而不必再次计算,从而省去大量不必要的动作。本文介绍使用memoization思想优化递归效率。
设计模式
2017年9月6日 设计模式,Let's “Go”!(下)
文章通过用Go语言实现的设计模式,总结了各模式的特点和使用场景,并配以现实生活中的实例,帮助理解设计模式。本篇包括:责任链模式、蝇量模式、解释器模式、中介者模式、备忘录模式、原型模式和访问者模式;
2017年8月29日 设计模式,Let's “Go”!(中)
文章通过用Go语言实现的设计模式,总结了各模式的特点和使用场景,并配以现实生活中的实例,帮助理解设计模式。本篇包括:模板模式、迭代器模式、组合模式、状态模式、代理模式、桥接模式和建造者模式;
2017年8月21日 设计模式,Let's “Go”!(上)
PHP程序员阅读Java语言实现设计模式的书,然后用Go语言实现。配以现实生活中的实例,帮助理解设计模式。本篇包括:策略、观察者、装饰者、工厂、单例、命令、适配器、外观。
Linux
2018年4月9日 一键部署进化史
为了解决调试不便的问题,先是同步工具由 nc 转到 rsync,再修改 rsync 源码添加回调参数,最后添加 docker 重启完成的通知信息,成功完成一键部署系统。
2017年10月17日 Linux “体检” 指标
在“求佛保佑服务器不宕机”、“杀程序员祭天”的环境下,程序员每天可谓是战战兢兢,接到电话和短信都吓得瑟瑟发抖,为了我们的安全,及时发现服务器运行问题已不仅仅是运维的问题了。本文总结了常见的服务器监控指标,希望各位开发人员都搞一个脚本运行着以保障自己的生命安全。
2017年9月11日 扩充你的工具箱 - 大行文件的处理
前几天,从 DBA 手里接到一个 Redis RDB 文件,里面是 15G 约 660万 的 Redis 键值对数据,想通过这些数据提取出当前 Redis 的 Key 和这些 Key 的类型。其文件的每行结构类似于: KEY: IAmATestKey || TYPE: STRING || ex...
2017年7月11日 Linux - 请允许我静静地后台运行
常在 linux 下玩耍的开发者肯定会经常遇到需要对进程调度的情况,也会遇到一些其中的小状况,本文介绍了几个可以在 linux 方便安稳运行后台程序的命令、常用的作业调度命令及 Daemon 进程的特点及创建,也解决了几个常见的小问题。
2016年9月13日 shell实现SSH自动登陆
使用 expect 和 alias 实现ssh一键登陆~~
2015年12月13日 linux的“自动化”
linux系统的web网站在运营状态时,我们常需要对网站进行维护,例如查看资源剩余并做出响应、日志分割、数据整理,在特定状态执行特定任务等等,这些都会需要linux能实现自动执行某些任任务。本篇博文介绍如何进行常见的linux自动化任务。
2015年11月27日 LINUX下的PHP
由于linux系统的稳定性,大部分的PHP服务器都被部署在linux上,而且像redis等扩展在linux能得到更好的支持,所以对于PHP程序员来说,使用linux的功底也相当重要,本文总结一下我从一开始在linux下安装配置PHP的心得。
数据库
2017年11月6日 使用PostgreSQL进行中文全文检索
全文检索应该算是一个挺普遍的需求了,虽然有 ES 这种搜索引擎,但为了数据的灵活性,关系型数据库更为适合。本文记录了 PostgreSQL 进行全文搜索时的配置步骤,总结了几个优化点,同时填了几个经常遇到的坑。
2017年10月9日 Redis “瘦身” 指南
随着业务发展和数据积累,你的 Redis 服务器变得越来越臃肿了,甚至内存爆满影响了业务,那么它是如何一步一步走到这个地步,又如何解决呢?希望本文能帮助到你。
JavaScript
2015年11月22日 JS实现别踩白块小游戏
本文主要应用JS对DOM和数组的操作来实现一个“别踩白块”的小游戏,原创想法,附源码和设计思路。
2018年4月2日 JavaScript Alert 函数执行顺序问题
文章简单地介绍了 javaScript 的 alert 函数在遇到异步代码时的执行顺序问题,分析了问题导致的原因,并提出替换 alert 和 使用 setTimeout 转异步两种解决方案。
后端
2017年11月2日 代码重构之旅(二)渐进式迁移方案
本文介绍了如何使用 Nginx 路由重写功能搭配 Linux 链接,再加上项目内部路由达到代码的渐进式迁移,在新旧项目之间实现无缝切换。
2017年11月2日 代码重构之旅(一)项目结构
项目迁移过程中,项目代码结构的确认是头等大事,本文聊聊我在进行老项目重构时进行代码结构设计中的问题和思考。
2016年12月12日 WEB开发中的字符集和编码
我们都知道计算机是以二进制存储和运行的,那么它是怎么把二进制数据转换为各种文字的呢? 还有我们常用的各种字符集,常用的编码转换,都是怎么进行的呢? 本博文是对我们常用的字符集和编码的一个小总结,小科普。我相信读完本文,您应该对 字符集和常见编码方式 有个差不多的认识了。
业务
2018年3月5日 从 PHP 到 Java
最近主要编程语言从 PHP 转到了 Java,一个多月的经历对我很有意义,所以写文章记录一下经历,再分享一下最近学习 Java 的心得体会。
2017年03月30日 我的支付总结(一) 基础概念
我做支付总结的第一篇,介绍了一些支付概念和数据设计。
2017年04月04日 我的支付总结(二) 系统设计
本文简单地介绍了支付整体流程和各模块的设计要点。
2017年04月04日 我的支付总结(三) 常见问题
支付系统的要求:安全、高效。安全是基本,高效是追求。 要达成两个目标,难免会遇到各种坑,本文挑几个典型的问题来讲述,并附上简单的应对方案