编程语言
文章平均质量分 90
华仔爱技术
精通C++、Java开语言,精通Linux平台相关开发技术,MySQL、Sphinx,熟悉各种互联网开源产品,如Nginx、Redis等,对系统分析和设计有丰富的经验
展开
-
技海无涯:正则表达式相关的知识和技术(1)——表达式
正则表达式,看似简单,实则博大精深。简简单单几个字符:|、*、(、)……却能够演绎出无穷无尽的变化。初看正则表达式,其实就是一串子字符串,但隐藏在这字符串背后的各种各样的知识、技能、技巧,却一点也不简单。以前在学习《编译原理(龙书)》的时候,也是一目十行的将其跳过,这次偶尔需要用到正则表达式,然后自己就上网搜了搜,结果发现水不是一般的深,耗费了3个晚上的时间搜索、查阅,才稍微理清了这些相关知识原创 2009-05-19 22:11:00 · 2786 阅读 · 3 评论 -
连载:面向对象葵花宝典:思想、技巧与实践(6) - 不要说你懂“类”
方以类聚,物以群分——《周易 易传》。 类是面向对象领域里最基础的一个概念,也是面向对象分析和设计的基石。 然而,如此重要的一个概念,竟然很难找到深入的说明,绝大部分介绍面向对象的书籍或者资料基本上都是这么解释的:“类是一组对象的抽象”,这个解释看起来清晰明了,但实际上犯了一个逻辑上的错误:以未明确的概念来解释待明确的概念,什么是对象,什么是抽象,我们都还不知道,你却用这个概念来解原创 2013-12-25 20:11:47 · 5699 阅读 · 8 评论 -
连载:面向对象葵花宝典:思想、技巧与实践(7) - “对象”新解
有了“类”的清晰定义后,“对象”就比较容易理解了。对象就是一个具体的类,一个真实存在的类。前面我们提到面向对象是对现实世界的模拟,那么对象就是现实世界中存在的“物体”。 例如,“人”是一个类,我就是一个“人”的对象,你也是“人”的对象,奥巴马也是“人”的对象。。。。。。又比如:你去国美买冰箱,但国美肯定没有一个单独叫做“冰箱”的东西卖给你,而是具体的某台海尔XX型号的冰箱、西门原创 2014-01-08 20:49:05 · 5405 阅读 · 2 评论 -
连载:面向对象葵花宝典:思想、技巧与实践(9) - “抽象类” 详解
抽象类是一种特殊的类,其特殊性在于抽象类只能用于继承,不能被实例化为具体的对象。例如在Java中不能new一个抽象类,但可以extends一个抽象类。 抽象类的定义其实很简单,但其使用并不那么简单,有几个问题我们需要深入研究一下。 第一个问题是:有了类,为什么还要抽象类,为什么设计一种只能继承,不能实例化的类?答案就在于:某些场景下普通类不够用。例如,“苹果”、“桔子”、“香蕉原创 2014-01-24 09:56:08 · 4933 阅读 · 3 评论 -
连载:面向对象葵花宝典:思想、技巧与实践(10) - “抽象” 详解
抽象的中文概念非常形象,简单来说就是“抽取出来比较像的部分”。 那么,在面向对象的领域里,抽取什么东西比较像的部分? 还记得前面给类下的定义么?我们一起来回顾一下:类就是一组相似事物的统称。再结合我们对象的定义:对象就是一个具体的类,一个真实存在的类。我们就很容易发现了抽象的详细含义:抽取多个对象或者类中比较像的部分。 注:史派克:《猫和老鼠》中的斗原创 2014-02-13 16:29:37 · 4601 阅读 · 5 评论 -
连载:面向对象葵花宝典:思想、技巧与实践(1) - 程序设计思想的发展
史前时代:面向机器最早的程序设计都是采用机器语言来编写的,直接使用二进制码来表示机器能够识别和执行的指令和数据。简单来说,就是直接编写0和1的序列来代表程序语言。例如:使用0000 代表 加载(LOAD),0001 代表 存储(STORE)等。 机器语言由机器直接执行,速度快,但一个很明显的缺点就是:写起来实在是太困难了,一旦你发现自己写错了,改起来更蛋疼!这样直接导致程序编写效率十分原创 2013-12-10 20:13:28 · 10479 阅读 · 13 评论 -
连载:面向对象葵花宝典:思想、技巧与实践(4) - 面向对象是瑞士军刀还是一把锤子?
为什么要面向对象?可以说,面向过程和计算机是如影随形的。从计算机诞生之日起,面向过程就是占据着主导地位的思想,即使到了现在,面向过程也是无处不在的,C语言、操作系统、协议栈、驱动系统,都是面向过程的代表。 那为什么还会有面向对象的诞生并流行呢?当然是面向过程存在某些不足,如果面向过程足够好,谁还费心费力的去搞另外一套呢? 前面我们提到,面向过程是一种机器的思想,我们以流水线作为类比,那原创 2013-12-17 10:28:42 · 5703 阅读 · 5 评论 -
连载:面向对象葵花宝典:思想、技巧与实践(13) - “多态” 详解
在此要向将polymorphism翻译成“多态”的人致敬!因为多态的英文实在是太难理解了,而中文翻译得又如此形象如此贴切。 从字面意思上就可以看出,多态就是“多种形态”的意思。但仔细探究一下:“多种形态”其实还是没法很好的理解,不同的人也还是会有不同的理解。 动画片看得多的同学可能会以为:多种形态,就是很多种变身啦 :),就像孙悟空72变一样,一会儿可以变成房子,一会儿可以变成原创 2014-02-26 15:05:57 · 4403 阅读 · 8 评论 -
连载:面向对象葵花宝典:思想、技巧与实践(14) - 面向对象开发技术流程
抛开项目流程,让我们来谈谈“技术流程”吧!!谈到流程,很多人立刻就会想到熟悉的瀑布模型、螺旋模型、迭代开发、敏捷、RUP等一堆软件工程相关的软件开发流程,但对于大部分人来说,这些流程仅仅是项目管理上的概念,只有项目经理开例会时那红红绿绿的甘特图、燃尽图、路径图等,或者只有评估工作量和是否要加班的时候,我们才会意识到这些流程的存在。 通俗的讲,项目管理上的流程主要是用于指导项目经原创 2014-02-28 18:05:59 · 4437 阅读 · 3 评论 -
连载:面向对象葵花宝典:思想、技巧与实践(11) - “封装” 详解
封装的概念本身很好理解,意思就是把一堆东东装起来。 但要想真正理解封装,这样还远远不够。第一个问题是:我们要封装什么?这个问题很好回答,封装当然是封装不想让别人知道或者看到的东东了。例如:你的身家。。。。。。漂亮MM的年龄。。。。。。富二代的女朋友数。。。。。明星是否整过容。。。。。。你是如何赚到100万的(想想什么样原创 2014-02-21 11:10:06 · 4545 阅读 · 1 评论 -
连载:面向对象葵花宝典:思想、技巧与实践(12) - “继承” 详解
继承 = 遗传继承是面向对象最基本的特征,如果一个语言没有继承机制,就谈不上真正的面向对象的语言。 继承本身很好理解,和我们日常生活中的“继承”概念基本一样:子承父业!所以,你可以看到面向对象的编程语言里面,有了“父类”、“子类”的概念。 但是我个人认为“继承”这个说法并不确切,一般我们理解“继承”,都是理解为继承产业、继承财产,例如李泽钜继承李嘉诚的事业。但在面向对象的领域里原创 2014-02-24 13:40:18 · 4426 阅读 · 3 评论 -
CRC32算法冲突概率测试和分析
最近因为某个业务需要用到CRC32算法,但业务又不能容忍重复的数值出现,于是自然就想了解一下CRC32算法的冲突概率(或者叫碰撞概率)。本以为这种问题应该很多人分析过,结果找来找去就只看到一大堆数学公式,我这种数学盲完全看不懂。好不容易找到一张图,但看得云里雾里(原图链接:http://preshing.com/20110504/hash-collision-probabilities/ ):既然原创 2015-01-16 11:34:28 · 23382 阅读 · 5 评论 -
连载:面向对象葵花宝典:思想、技巧与实践(3) - 面向过程 vs 面向对象
从理论的角度对比“面向对象”和“面向过程”两种编程思想的差异,提出了面向对象的程序 = 对象 + 交互 的新颖说法原创 2013-12-13 17:57:00 · 8109 阅读 · 16 评论 -
连载:面向对象葵花宝典:思想、技巧与实践(2) - 面向对象语言发展历史
Simula 面向对象技术最早是在编程语言Simula中提出的。1967年5月20日,在挪威奥斯陆郊外的小镇莉沙布举行的IFIP TC-2 工作会议上,挪威科学家Ole-Johan Dahl和Kristen Nygaard正式发布了Simula 67语言。Simula 67被认为是最早的面向对象程序设计语言,是面向对象的开山祖师,它引入了所有后来面向对象程序设计语言所遵循的基础概念:对原创 2013-12-12 10:47:32 · 6143 阅读 · 4 评论 -
连载:面向对象葵花宝典:思想、技巧与实践(8) - “接口” 详解
“接口”是我见过的面向对象领域中滥用、乱用、误用最多的术语:有的人说:兄弟,给我提供一个“查询XXX”的接口。。。。。。有的人说:系统对外提供了“查询”、“插入”、“更新”、“删除”4个接口。。。。。。有的人说:我们要基于“接口”编程。。。。。。有的人说:你这样做破坏了我们的接口设计。。。。。。。。。。。。。。。。。倒不是在这里指责他们的水平有多差,而是接口这个属于的中文翻原创 2014-01-19 13:41:20 · 5534 阅读 · 9 评论 -
技海无涯:正则表达式相关的知识和技术(2)——算法
转换算法为了让正则表达式最终能够被机器识别,并且能够用其来匹配目标字符串,必须首先将正则表达式转换为NFA或者DFA(后面介绍)两种等价的自动机,一般的转换过程如下:正则表达式—①—>NFA—②—>DFA。当然也可以直接这样转换,当然这个算法复杂度更高:正则表达式—③—>DFA。上面的每个过程对应一个算法,下面我们分别简单的介绍三种算法。 ①正则表达式——>原创 2009-05-24 20:14:00 · 2334 阅读 · 0 评论 -
技海无涯:正则表达式相关的知识和技术(3)——编程技巧:堆栈的本质探讨
编程技巧——堆栈的本质探讨如果我要说本章的编程技巧就是为了介绍堆栈的使用技巧,你可能会笑掉大牙:哈哈,堆栈,这不是小儿科吗?!!是的,每个编程的人都知道的堆栈,而且说起堆栈,大家肯定会马上想到“后进先出(LIFO)”,这是教科书关于堆栈本质的解释。没错,堆栈的本质是LIFO,但绝不是简单的先进后出就完了,结合各种各样的压栈出栈操作,堆栈可以实现很强大的功能。下面就以正则表达式涉及的两个原创 2009-06-02 23:08:00 · 2484 阅读 · 0 评论 -
技海无涯:正则表达式相关的知识和技术(4)——自动机(完结篇)
自动机自动机,顾名思义,就是能够自动完成事情的“机器”。但是为什么要用自动机,什么又叫“自动”呢?我们看看普通的处理方式,简单的就是if了,例如:判断某字符串是否是“Hello,Word”,我们都会这么写:if(str == “Hello,Word”)普通的比较可以满足大部分的场景,但对于正则表达式这种比较的话,普通的if就完全不能满足了,例如a*b|c,可以是如下字符串:ab原创 2009-06-12 23:57:00 · 2375 阅读 · 1 评论 -
挑战淘宝:且看如何用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 · 4946 阅读 · 2 评论 -
挑战淘宝:且看如何用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 · 6835 阅读 · 72 评论 -
强烈推荐:非常详细的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 · 4607 阅读 · 4 评论 -
大型项目使用Automake/Autoconf完成编译配置(1)——提纲挈领
使用过开源C/C++项目的同学们都知道,标准的编译过程已经变成了简单的三部曲:configure/make/make install, 使用起来很方便,不像平时自己写代码,要手写一堆复杂的Makefile,而且换个编译环境,Makefile还需要修改(Eclipse也是这样)。这么好的东东当然要拿来用了,但GNU的Autotool系列博大精深,工具数量又多,涉及的语言也多,要是自己从头看到尾,黄花菜都凉了,项目估计早就结束了;上网搜样例倒是有一大堆,但都是“hello world”的样例,离真正完成大型原创 2011-02-04 18:13:00 · 8530 阅读 · 5 评论 -
大型项目使用Automake/Autoconf完成编译配置(2)——步步为营
使用过开源C/C++项目的同学们都知道,标准的编译过程已经变成了简单的三部曲:configure/make/make install, 使用起来很方便,不像平时自己写代码,要手写一堆复杂的Makefile,而且换个编译环境,Makefile还需要修改(Eclipse也是这样)。这么好的东东当然要拿来用了,但GNU的Autotool系列博大精深,工具数量又多,涉及的语言也多,要是自己从头看到尾,黄花菜都凉了,项目估计早就结束了;上网搜样例倒是有一大堆,但都是“hello world”的样例,离真正完成大型项目原创 2011-02-04 18:19:00 · 16549 阅读 · 16 评论 -
C/C++字符串使用军规
最近做项目遇到一个C++字符串string的性能陷阱,导致格式化一个对象为字符串的时候特别耗时,原因就在于使用了string的连加操作。本文深入分析C++ string的实现机制,从原理上总结C++ string和C字符串的使用规则。为什么叫军规呢?因为如果你不遵守,代价可能很大。原创 2011-05-01 15:17:00 · 6117 阅读 · 0 评论 -
Java aes加密C#解密的取巧方法
项目开发过程中遇到一个棘手的问题:A系统使用java开发,通过AES加密数据,B系统使用C#开发,需要从A系统获取数据,但在AES解密的时候遇到麻烦。Java的代码和C#的代码无法互通。Java代码: /** * 加密 * * @param content 需要加密的内容 * @param password 加密密钥 * @return */原创 2013-12-09 17:26:33 · 9236 阅读 · 1 评论 -
连载:面向对象葵花宝典:思想、技巧与实践(5) - 面向对象迷思:面向对象导致性能下降?
面向对象会导致性能降低?这是一个在IT江湖流传已久的传说,很多对面向对象不甚了解、或者一知半解的人,每当需要抵触面向对象时,就会把这条“金科玉律”拿出来救驾! 更要命的是,每个相信这个传说的人都会举一个看起来很显而易见的例子:C和Java的对比! 你可以到网上搜索一大堆C和Java的性能对比,你自己也可以做一个简单的对比测试,我毫不怀疑测试结果肯定是C快,但这能证明面向对象导致原创 2013-12-21 09:39:38 · 5164 阅读 · 3 评论 -
java程序启动时cpu和负载高探索
这两天协助运维定位1个监控程序CPU占用率达到150%的问题,过程曲折,结论简单,很有意思:)首先我们来看一下cpu高时候截图:可以看到红色框中的监控程序CPU占用率都很高,但其实这些监控程序的实现很简单:发送1个http请求,收到响应后简单判断一下响应码,然后打印监控结果。这么简单的业务占用这么高的cpu,怎么感觉都不太可能,于是拿到监控程序的源码开始定位。原创 2015-02-12 18:58:46 · 11981 阅读 · 3 评论