青山相待

            白云相爱

            梦不到紫罗袍共黄金带

            一茅斋

            野花开

            管甚谁家兴废谁成败

            陋巷单瓢亦乐哉

            贫,气不改!

            达,志不改!

摘要: template <typename T> struct singleton_default { private: struct object_creator { object_creator() { singleton_default<T>::instance(); } inline void d 阅读全文
posted @ 2016-07-27 17:34 Leo.Z 阅读(1151) 评论(0) 推荐(1) 编辑
摘要: 性能的目标 跑得更快吗?是用更少的资源跑得更快。如果不能兼得,我们通常选择跑得更快,这也是大多数时候性能优化的目的,也有些时候性能优化是为了减少资源消耗。 系统性能的定义 1.吞吐量,系统每s能处理的请求数、任务数 2.时延,系统处理一个请求或者任务的耗时 3.并发数,次级指标,同时接入的客户端数量 阅读全文
posted @ 2016-07-22 15:04 Leo.Z 阅读(453) 评论(1) 推荐(1) 编辑
摘要: 内存池技术是一种饱受争议的技术 争议热点在于到底有没有必要自己实现。 1.内存池技术出现在libc尚不成熟的时候,当时程序经常在运行一段时间后性能下降,当时维护内存池很有必要 2.现在64位服务器经常是32G以上的内存,管理内存碎片意义不打 3.写malloc的各位都是大神,自己写有99%的可能会更 阅读全文
posted @ 2016-07-19 14:26 Leo.Z 阅读(317) 评论(0) 推荐(1) 编辑
摘要: 记录最新的N条执行时间超过M毫秒的命令。慢查询日志保存在内存中,而不是文件中,这保证了慢查询日志的效率。慢查询日志的条目定义/* This structure defines an entry inside the slow log list *//* * 慢查询日志 */typedef struc 阅读全文
posted @ 2016-07-12 17:10 Leo.Z 阅读(951) 评论(0) 推荐(0) 编辑
摘要: 跳跃表是一种插入、查询、删除的平均时间复杂度为O(nlogn)的数据结构,在最差情况下是O(n),当然这几乎很难出现。 和红黑树相比较 最差时间复杂度要差很多,红黑树是O(nlogn),而跳跃表是O(n) 平均时间复杂度是一样的 实现要简单很多 https://en.wikipedia.org/wi 阅读全文
posted @ 2016-07-12 16:08 Leo.Z 阅读(3943) 评论(0) 推荐(0) 编辑
摘要: BIO即background I/O service,后台I/O服务,是redis的aof持久化后台服务。 redis把阻塞的同步I/O操作交给后台I/O服务来完成:close和fsync。 close加入BIO的原因 1.如果fd是特定文件描述符的最后一份拷贝,那么文件描述符相关的资源会被释放。 阅读全文
posted @ 2016-07-12 10:19 Leo.Z 阅读(1794) 评论(0) 推荐(0) 编辑
摘要: 1.调用alarm,在调用超过指定时间时产生SIGALARM信号,这涉及到信号处理,而且可能和进程中其他的alarm冲突 2.使用select阻塞在等待I/O上,select内部有时间限制,一次代替在read和write上阻塞超时 3.使用新的SO_RCVTIMEO和SO_SNDTIMEO套接字选项 阅读全文
posted @ 2016-07-11 21:05 Leo.Z 阅读(237) 评论(0) 推荐(0) 编辑
摘要: 设置和影响套接口选项的方法有 1.getsockopt和setsockopt 2.fcntl 3.ioctl getsockopt和setsockopt 这两个方法仅适用于套接字 有两种基本类型的套接口选项:打开或关闭某个特性的二进制标志,取得并返回我们可以设置或检验的特定值的选项,标有标志的列指明 阅读全文
posted @ 2016-07-11 17:09 Leo.Z 阅读(952) 评论(0) 推荐(0) 编辑
摘要: 典型应用于以下场合 1.处理多个描述字时,比如同时处理套接字和磁盘IO、终端IO 2.一个客户同时处理多个套接字 3.服务器既要处理监听套接字,又要处理已连接套接字 4.既要处理TCP、也要处理UDP 5.一个服务器要处理多个服务和协议 I/O多路复用不局限于网络编程,也可以用于其他程序。 UNIX 阅读全文
posted @ 2016-07-10 23:10 Leo.Z 阅读(371) 评论(0) 推荐(0) 编辑
摘要: 网络编程不只是编写网络、主机、进程都正常时能良好工作的进程,更重要的是客户主机崩溃、客户进程崩溃网络异常时怎么处理。 accept被信号中断 accept以及套接字上的I/O可能被信号打断,并返回EINTR作为结果,必须处理该返回值并且适当时候再次调用。 for(;;) { if(connfd = 阅读全文
posted @ 2016-07-08 16:26 Leo.Z 阅读(1134) 评论(0) 推荐(0) 编辑
摘要: linux的信号来源 1.由一个进程发给另一个进程(或本身) 2.内核发给进程 信号的特征 异步的,分为可靠信号和不可靠信号。 进程收到信号时怎么处理1.执行信号处理程序2.如果收到信号时处在一个阻塞函数中,中断当前系统调用并执行信号处理程序3.如果想要信号处理程序后恢复被中断的系统调用,需要设置S 阅读全文
posted @ 2016-07-08 11:36 Leo.Z 阅读(209) 评论(0) 推荐(0) 编辑
摘要: PDU 协议数据单元,有隐藏size上限,如果应用程序的包超过指定上限会被划分为多个PDU发送 TCP不提供记录结束标记,需要应用程序自己提供,比如http的\r\n 编写TCP协议需要注意IPV4和IPV6的兼容性,可以在应用程序中实现协议无关性。 getaddrinfo getaddrinfo 阅读全文
posted @ 2016-07-08 09:34 Leo.Z 阅读(194) 评论(0) 推荐(0) 编辑
摘要: 判断一个字符c是否在一个字符串str中,你会怎么处理?1.for或者while循环判断可以,但是效率够呛2.建立size为256的静态映射表char tb[256],将字符串str中的所有数值映射到tb中,判断tb[c]==1就可以知道字符是否存在str中。可以,还是可以优化的3.用位压缩技术对tb... 阅读全文
posted @ 2015-08-13 11:14 Leo.Z 阅读(464) 评论(0) 推荐(1) 编辑
摘要: 原文传送门:http://sfsrealm.hopto.org/inside_mopaq/chapter2.htm#hashes安保系统的需求亘古有之,人们试图保护隐私的需求已经有数千年的历史,古希腊用脚携带手写信件,二战的无线电传输,现在通过网络信用卡信息。这门复杂的艺术叫做加密,我们不知道第一个... 阅读全文
posted @ 2015-08-06 16:17 Leo.Z 阅读(341) 评论(0) 推荐(1) 编辑
摘要: 原文来自:http://sfsrealm.hopto.org/inside_mopaq/chapter2.htm#hashes促进历史进步的大多数契机都是在解决特定问题的过程中产生的,本文讨论一下MPQ格式的合适解决方案。----MPQ是暴雪的一种文本压缩格式,可以压缩包括坐标、算法、声音、动画、... 阅读全文
posted @ 2015-08-06 15:35 Leo.Z 阅读(432) 评论(0) 推荐(0) 编辑
摘要: 想想上学的时候,每次立志做计划,都是苦大仇深的,不和自己过不去,不弄点头悬梁锥刺股的段子,都不好意思叫做计划,效果是有的,每次做完计划已经怂了一半。 ...... 现在只想: 上班累了就请半天假,躺着玩会手机游戏或者看个动作、悬疑电影; 敲完码下班就搞搞python3,做一些更感兴趣的工具。 和... 阅读全文
posted @ 2014-10-23 11:14 Leo.Z 阅读(185) 评论(3) 推荐(0) 编辑
摘要: python逆向获取DNS时用到一个函数socket.gethostbyaddr,传入本地主机地址后报错如下: UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb0 in position 0: invalidcontinuation ... 阅读全文
posted @ 2014-10-23 11:01 Leo.Z 阅读(260) 评论(0) 推荐(0) 编辑
摘要: 初学Python3,做一个email的例子,虽然知道做的很渣渣,还是分享一下吧 POP3协议 POP3全称Post Official Protocol3,即邮局协议的第三个版本,它规定了怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议,它是因特网电子协议的第一个离线标准,... 阅读全文
posted @ 2014-10-05 14:18 Leo.Z 阅读(6445) 评论(1) 推荐(0) 编辑
摘要: 提契纸上得来终觉浅,绝知此事要躬行。 正文 前段时间写了一篇epoll的学习文章,但没有自己的心得总觉得比较肤浅,花了一些时间补充一个epoll的实例,并浅析一下过程中遇到的问题。 上epoll_server的例子,epoll的代码都在这里1#include2#include3#include4... 阅读全文
posted @ 2014-07-16 11:02 Leo.Z 阅读(1362) 评论(0) 推荐(2) 编辑
摘要: C++的缺省参数尽量不要使用,结果可能出乎我们的意料,下面的程序大家看看输出结果是多少?1#include2usingnamespacestd;34classA5{6public:7virtualvoidpt(intipt,intnum=1)8{9coutpt(3);28} 想要回答3,2的朋友... 阅读全文
posted @ 2014-07-14 18:35 Leo.Z 阅读(279) 评论(0) 推荐(0) 编辑