- 博客(152)
- 资源 (11)
- 收藏
- 关注
原创 tcp短连接TIME_WAIT问题解决方法大全(2)——SO_LINGER
SO_LINGER是一个socket选项,通过setsockopt API进行设置,使用起来比较简单,但其实现机制比较复杂,且字面意思上比较难理解。解释最清楚的当属《Unix网络编程卷1》中的说明(7.5章节),这里简单摘录:SO_LINGER的值用如下数据结构表示:struct linger { int l_onoff; /* 0 = off, nozero = on *
2012-11-04 21:48:23 16063 2
原创 tcp短连接TIME_WAIT问题解决方法大全(1)——高屋建瓴
tcp连接是网络编程中最基础的概念,基于不同的使用场景,我们一般区分为“长连接”和“短连接”,长短连接的优点和缺点这里就不详细展开了,有心的同学直接去google查询,本文主要关注如何解决tcp短连接的TIME_WAIT问题。短连接最大的优点是方便,特别是脚本语言,由于执行完毕后脚本语言的进程就结束了,基本上都是用短连接。但短连接最大的缺点是将占用大量的系统资源,例如:本地端口
2012-11-04 21:45:54 29582 10
原创 tcp流控的一个实例:无法发送数据!
模拟测试程序,从客户端向服务器发数据,人工控制服务器收数据。当客户端发了一部分数据后,无法再发送,此时服务器开始每次收取1K。按照常理推断,服务器收取1K后,客户端应该能够继续发送数据,但实测观察发现,客户端还是无法发送数据,直到服务器收取了一定数据量后,客户端才能够继续发送。tcp抓包如下:11:42:40.217984 IP localhost.6379 > local
2012-10-31 09:22:12 4114
原创 缓存淘汰算法系列之3——FIFO类
缓存淘汰算法系列之3——FIFO类1 FIFO1.1. 原理按照“先进先出(First In,First Out)”的原理淘汰数据。1.2. 实现FIFO队列,具体实现如下:1. 新访问的数据插入FIFO队列尾部,数据在FIFO队列中顺序移动;2. 淘汰FIFO队列头部的数据;1.3. 分析l 命中率命中率很低,因为命中率太低,实际应
2012-07-23 18:24:12 6078 2
原创 缓存淘汰算法系列之2——LFU类
1. LFU类1.1. LFU1.1.1. 原理LFU(Least Frequently Used)算法根据数据的历史访问频率来淘汰数据,其核心思想是“如果数据过去被访问多次,那么将来被访问的频率也更高”。1.1.2. 实现LFU的每个数据块都有一个引用计数,所有数据块按照引用计数排序,具有相同引用计数的数据块则按照时间排序。具体实现如下:1. 新加入数据插
2012-06-09 17:46:56 14519 2
原创 缓存淘汰算法系列之1——LRU类
缓存淘汰算法系列之1——LRU类1. LRU1.1. 原理LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。1.2. 实现最常见的实现是使用一个链表保存缓存数据,详细算法实现如下:1. 新数据插入到链表头部;2. 每当缓存命中(即缓存数据被访问
2012-05-24 19:33:22 27378 12
翻译 掌握MySQL如何使用临时表,避免踩中性能地雷
MySQL如何使用临时表??【临时表存储】MySQL临时表分为“内存临时表”和“磁盘临时表”,其中内存临时表使用MySQL的MEMORY存储引擎,磁盘临时表使用MySQL的MyISAM存储引擎;一般情况下,MySQL会先创建内存临时表,但内存临时表超过配置指定的值后,MySQL会将内存临时表导出到磁盘临时表。【使用临时表的场景】1)ORDER BY子句和GROU
2012-05-17 13:48:03 11759 8
原创 参加2012 DTCC大会,总结Big data的趋势
参加了2012中国数据库技术大会,综合各方的演讲、资料和个人理解,总结出Big data(大数据)的趋势。本次技术大会议题众多,但无论是企业级应用还是互联网应用,关注的焦点无一不是“大数据”。传统的IBM、Oracle关注企业级大数据的统一解决方案,并已经提供了商业的产品;互联网的百度、淘宝、腾讯等都基于自己的业务和互联网的特点,构建了自己的大数据系统。一些研究机构或者学术机构
2012-04-22 09:02:13 4142
原创 【原创】Bigtable架构图
最近在研究Bigtable的实现原理,网上搜索了一把,几乎全是Google的那篇论文,由于涉及的点众多,看起来比较吃力,也没有一个宏观的架构用于理解,因此,自己画了一个,分享给大家,欢迎各位批评指正,共同完善!HBase可以认为是山寨版的Bigtable,因此其架构也是类似的,只是各个部件换了名字,对应关系如下:Chubby ===> ZookeeperMaster ===>
2012-04-21 19:40:14 7835 2
原创 MySQL乱码问题终极指南
mysql的字符集设置众多,从客户端到连接到结果集,从服务器到库到表到列,都可以设置字符集,灵活很强大,但就是很容易出问题,如果不了解其机制,很容易就出现乱码问题。为了普度众生,让大家尽量在工作中少受或者不受乱码的骚扰、困扰,这里我结合之前其它同学在论坛的发帖,并结合自己的理解和实践,详细分析总结了一下,以飨各位看官。关于字符集和乱码的基础知识这里就不详细说明了(请自行搜索),但有一个
2012-03-24 21:43:27 4578
原创 MySQL Innodb数据库性能实践——热点数据性能
对于大部分的应用来说,都存在热点数据的访问,即:某些数据在一定时间内的访问频率要远远高于其它数据。常见的热点数据有“最新的新闻”、“最热门的新闻”、“下载量最大”的电影等。为了了解MySQL Innodb对热点数据的支持情况,我进行了基准测试,测试环境如下:【硬件配置】硬件配置CPUIntel(R) Xeon(
2011-12-24 21:47:28 8600 6
原创 MySQL Innodb数据库性能实践——合适的表记录数
在实际工作中,经常有同事问道:MySQL Innodb表记录数多大是合适的?一般的理解肯定是表越大性能越低,但具体低多少呢,是缓慢下降还是急剧下降,是1000万就下降还是1亿才下降呢?针对这些问题,我做了一下基准测试,基准测试环境如下:【硬件配置】硬件配置CPUIntel(R) Xeon(R) CPU E5620
2011-12-18 23:57:45 15701 17
原创 MySQL Innodb数据库性能实践——VARCHAR vs CHAR
学过数据库理论的读者,都应该还记得关于CHAR和VARCHAR的性能对比:CHAR比VARCHAR更快,因为CHAR是固定长度的,而VARCHAR需要增加一个长度标识,处理时需要多一次运算。针对这种情况,我做了一下基准测试,基准测试环境如下:【硬件配置】硬件配置CPUIntel(R) Xeon(R) CPU E5620
2011-12-04 09:11:31 16476 15
原创 Linux平台使用源码安装MySQL 5.1到个人目录简易指南
1. 解压源码到个人目录;2. 执行如下命令进行configure,注意源码默认情况下不支持innodb,必须使用--with-plugins手工指定(二进制包默认已经支持):./configure --prefix=$HOME/local/mysql-5154 --with-extra-charsets=latin1,gbk,utf8 --with-plugins=partition
2011-12-04 08:23:46 2981
原创 MySQL Innodb日志机制深入分析
MySQL Innodb日志机制深入分析 1.1. Log & CheckpointInnodb的事务日志是指Redo log,简称Log,保存在日志文件ib_logfile*里面。Innodb还有另外一个日志Undo log,但Undo log是存放在共享表空间里面的(ibdata*文件)。 由于Log和Checkpoi
2011-06-25 21:45:00 16413 2
原创 C/C++字符串使用军规
最近做项目遇到一个C++字符串string的性能陷阱,导致格式化一个对象为字符串的时候特别耗时,原因就在于使用了string的连加操作。本文深入分析C++ string的实现机制,从原理上总结C++ string和C字符串的使用规则。为什么叫军规呢?因为如果你不遵守,代价可能很大。
2011-05-01 15:17:00 6110
原创 性能杀手:”潜伏”的memset
最近做一个项目时遇到了一个性能瓶颈,用C++将一个对象格式化为JSON字符串花费了100ms,最后定位发现是因为在字符串格式化的时候初始化缓冲区使用了char buffer[1024 * 1024] = {0}这行语句导致的。于是深入分析了一下,竟然发现了一个隐藏的性能陷阱。深入分析以飨读者,希望大家不要也犯这个错误。
2011-05-01 15:06:00 39636 19
原创 大型项目使用Automake/Autoconf完成编译配置(2)——步步为营
使用过开源C/C++项目的同学们都知道,标准的编译过程已经变成了简单的三部曲:configure/make/make install, 使用起来很方便,不像平时自己写代码,要手写一堆复杂的Makefile,而且换个编译环境,Makefile还需要修改(Eclipse也是这样)。这么好的东东当然要拿来用了,但GNU的Autotool系列博大精深,工具数量又多,涉及的语言也多,要是自己从头看到尾,黄花菜都凉了,项目估计早就结束了;上网搜样例倒是有一大堆,但都是“hello world”的样例,离真正完成大型项目
2011-02-04 18:19:00 16540 16
原创 大型项目使用Automake/Autoconf完成编译配置(1)——提纲挈领
使用过开源C/C++项目的同学们都知道,标准的编译过程已经变成了简单的三部曲:configure/make/make install, 使用起来很方便,不像平时自己写代码,要手写一堆复杂的Makefile,而且换个编译环境,Makefile还需要修改(Eclipse也是这样)。这么好的东东当然要拿来用了,但GNU的Autotool系列博大精深,工具数量又多,涉及的语言也多,要是自己从头看到尾,黄花菜都凉了,项目估计早就结束了;上网搜样例倒是有一大堆,但都是“hello world”的样例,离真正完成大型
2011-02-04 18:13:00 8507 5
原创 小心为上:注意C++ fstream给你设下的陷阱
前段时间做了一个项目,使用了C++ 的fstream进行读写,将其中遇到的一些常见的陷阱总结一下(为了定位这些陷阱带来的问题,花费了大量的时间),让其他需要的兄弟参考,避免犯同样的错误。
2010-10-24 11:37:00 9530
原创 Linux GCC 64位编程技巧
Linux GCC 64位编程技巧,项目要用到,上网查了一下,资料虽多,但零零散散,干脆自己整理一份,共享给大家。Windows和Linux类似,但有的细节还需要大家自己查了。
2010-10-17 19:48:00 14508 1
原创 如何与你的老大沟通?
如何与你的老大沟通?看了CSDN冯大侠的《老大,我想说两句》,深有感触,因为我也曾经遇到过类似的情况,深知这种情况下个人的郁闷感觉。 但现实毕竟是“老大”就是老大,你的前途、薪水都掌握在老大手里,抱怨和郁闷都不能解决问题,反而会使问题更加恶化;而且既然是老大,那么必然有过人之处(不管是技术、还是有关系、还是会说话,那都是老大的优势)。因
2010-03-30 11:28:00 19415 139
原创 刨根究底:XML的本质和作用探讨
刨根究底:XML的本质和作用探讨要是有人和你说起“XML”而你却一脸茫然的话,那么真的就要被人狠狠的鄙视一把了,真是“平生不识XML,就称高手也枉然”! XML到底有哪些用途呢?下面是网上搜索的一篇比较详细的文章(原文较多,以下仅摘录,原文地址:http://www.webjx.com/xml/20080104/xml_xslt_2806.html )
2010-03-22 08:34:00 2871 5
原创 鱼还是熊掌:浅谈多进程多线程的选择
鱼还是熊掌:浅谈多进程多线程的选择关于多进程和多线程,教科书上最经典的一句话是“进程是资源分配的最小单位,线程是CPU调度的最小单位”,这句话应付考试基本上够了,但如果在工作中遇到类似的选择问题,那就没有这么简单了,选的不好,会让你深受其害。 经常在网络上看到有的XDJM问“多进程好还是多线程好?”、“Linux下用多进程还是多线程?”等等期望一劳永逸的问题,我只能
2010-03-19 10:19:00 4964
原创 技术管理三字经:管、理、决!
技术管理三字经:管、理、决!初看到“技术管理”这个词,你可能会觉得有点疑惑:技术是技术、管理是管理,怎么会有一个“技术管理”冒出来呢? 请注意:这里的技术管理不是指CTO、CIO那种职位(个人感觉CTO、CIO应该还是纯粹的管理职位),也不是项目经理,而是指同时具备技术和管理职能的职位。技术管理一般是管理一个5~30人的一个开发或者设计团队。
2010-03-18 11:22:00 3692 3
转载 拒绝砖家忽悠,看清职场真相——对工作的理解
原文转自ChinaUnix,链接如下:http://blog.chinaunix.net/u3/94705/showart.php?id=2195885 我个人认为写得不错,不一定全部正确,也不一定适合所有人,但至少说出了很多真相,而不是像很多所谓的“砖家”那样夸夸其谈,站着说话不腰疼。因此转载,供大家参考! 对工作的理解 首先要澄清一个流毒广泛的说法:大学毕业第一份工作不
2010-03-16 09:22:00 4701 3
原创 大道至简:让你顿悟创建型设计模式
大道至简:让你顿悟创建型设计模式 佛教中有一种修行方法叫做“顿悟”,简单的说突然间想明白了。我不是佛教弟子,但幸运的是这两天重温设计模式的时候,也顿悟了一把:每个创建型模式一句话总结! 既然是顿悟,我就不详细介绍了,设计模式相关的书上都会有详细的介绍,我只把我顿悟的内容共享出来,看看你是否可以顿悟:)? Abstract Factory:创建一组相关对象什么叫做“相关对
2010-03-13 10:23:00 3860 3
翻译 如何加入一个开源项目?
原文地址:http://haineault.com/blog/120/ 如何加入一个开源项目?这不是一篇权威的指南,只是一些你需要遵循的基本规则,这些规则可以让你对开源项目的贡献使得你和项目维护者都感到愉快!为什么加入一个开源项目?首先,有很多加入开源项目的动机。排在第一的可能是“酷”:)当你告诉你的朋友“嘿,我在XYZ项目开发团队! 我很潮吧?”
2010-03-12 09:56:00 11348 3
转载 强烈推荐:非常详细的C++和Java对比
原文地址:http://www.computing.dcu.ie/~renaat/projects/cvjava.html Comparing C++ and Java (Taken from Thinking in Java - Bruce Eckel - www.eckelobjects.com)As a C++ programmer you already have the
2010-03-04 16:32:00 4598 4
原创 挑战淘宝:且看如何用1500行搞定淘宝20000行Java SDK(2)
挑战淘宝:且看如何用1500行搞定淘宝20000行SDK(2) 既然想要比淘宝SDK更优秀,就必须解决淘宝SDK存在的问题,那么来看我是如何设计的:1)"API请求"(如ItemGetRequest)、"API响应"(如ItemGetResponse)、"API结果"(如Item)本质上都是"数据结构",不需要完成什么具体的操作,因此可以通过XML来进行定义,而不需要在代码中进
2010-02-03 09:02:00 6834 72
原创 挑战淘宝:且看如何用1500行搞定淘宝20000行Java SDK(1)
挑战淘宝:且看如何用1500行搞定淘宝20000行Java SDK继亚马逊、雅虎、Google等一众知名大公司掀起了开放API的潮流后,淘宝也不甘寂寞,于2009推出了TOP平台,搭上了这趟开放API的顺风车(详细请看http://open.taobao.com/)。为了更好的开发TOP程序,淘宝提供了各种语言的SDK,其中自然少不了编程语言老大Java的SDK。但不幸的
2010-02-01 09:23:00 4940 2
原创 让技术人员看得懂的流程(7)——部署模型(完结篇)
让技术人员看得懂的流程(7) ——部署模型(完结篇) 在上一篇博文“处理模型”中已经提到:在“处理模型”阶段划分为子系统后,为下一阶段打下了基础。当时卖了个关子没说具体是什么,本博就来揭开它的面纱,这就是:“部署模型”。l “部署模型”阶段的任务“部署模型”英文是“Dep
2010-01-25 10:43:00 5620 17
原创 让技术人员看得懂的流程(6)——处理模型
让技术人员看得懂的流程(6) ——处理模型看完“实现模型”,你是否长吁一声,准备拿起咖啡,惬意的喝上一杯?毕竟我们已经完成了从用例到编码的全过程了,确实是值得庆祝的一件事情,但“革命尚未成功、同志还需努力”,现在还不是享受的时候,接下来我们需要进入“处理模型”阶段。l “
2010-01-18 10:03:00 5995 10
原创 让技术人员看得懂的流程(5)——实现模型
让技术人员看得懂的流程(5) ——实现模型经过前面的“用例模型”、“领域模型”、“设计模型”的讲解,面向对象分析设计都完了,面向对象已经基本成型,接下来就是要具体实现了,对应的就是“实现模型”。“实现模型”是整个技术流程中大家接触最多的阶段,只要是做开发的,基本上都是先参与这个阶段
2010-01-14 14:18:00 4554 4
原创 让技术人员看得懂的流程(4)——设计模型
让技术人员看得懂的流程(4) ——设计模型完成了“领域模型”阶段后,面向对象已经初具雏形,我们已经看到了那熟悉的“对象”了,例如“商品”、“交易”、“商品清单”等,看起来已经进入了面向对象的世界了,你是否已经摩拳擦掌,跃跃欲试,准备开始编码了呢?且慢,“领域模型”只是万里
2010-01-12 13:29:00 5044 3
原创 让技术人员看得懂的流程(3)——领域模型
让技术人员看得懂的流程(3) ——领域模型按照一般的项目管理过程,“需求”之后是“分析”,那么在分析阶段对应的技术流程又是哪个?如何将需求阶段和分析阶段联系起来呢?答案就是“领域模型”什么是“领域模型”呢?只要抓住“领域(Domain)”二字就可以理解,也就是说领域模型是帮助我们理解相关领域知识的模型。
2010-01-11 09:10:00 20065 22
原创 让技术人员看得懂的流程(2)——用例模型
让技术人员看得懂的流程(2) ——用例模型一般的管理流程都将软件项目划分为“需求->分析->设计->实现->维护”,对应的技术流程中首先也肯定是要将需求明确,而“用例模型”就是用于获得和分析需求的。简单来说,用例模型就是要将客户的需求写下来。“需求”不是很好理解,更加通俗的讲法是“故事(story)
2010-01-06 18:51:00 6856 6
原创 让技术人员看得懂的流程(1)——面向对象设计全流程概述
让技术人员看得懂的流程 ——面向对象设计全流程概述谈到流程,大家都会想到熟悉的瀑布模型、螺旋模型、迭代开发、敏捷、RUP等一堆软件工程相关的软件开发流程,但是请不要误会,本文的流程和这些管理流程完全不同,为了以示区分,我把瀑布模型、敏捷、RUP等流程成为项目流程,也就是说这是给项目管理用的;而本
2010-01-04 16:44:00 7408 9
十年磨一剑之架构设计
2014-12-24
TCP头信息详解(英文版 pdf)
2013-12-13
spring_in_action中文第二版(高清完整书签版).part2
2013-11-05
设计模式精解 Design_Patterns_Explained
2009-03-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人