随笔分类 -  软件设计

摘要:前言:这篇文章写作过程断断续续持续了两个月,终于写完了,最近事情有些多。这次技术会议的主办方虽然是阿里巴巴,但是还有很多其他的互联网企业,比如百度,新浪,腾讯,盛大,360,小米。会议共有两天,主要面向互联网技术,参与者也大多是互联网公司从业者。人还比较多,讨论也比较活跃。我主要参与的是aDev(应用架构和后端技术),这里简单总结一下:1、SOA的落地。记得Infoq上一篇文章曾说过:大意是,当一个技术大家不再热烈的讨论它的时候,说明他已经在工作中真正的发挥作用(当然也可能被淘汰),SOA应该是如此的。虽然各大网站对它的讨论热度不在,但是从这次技术会议中,随处可见SOA的身影。很多公司的交流都 阅读全文
posted @ 2012-09-20 21:21 常高伟 阅读(2011) 评论(4) 推荐(3) 编辑
摘要:前言:我一直在关注如何让开发变得更容易,效率更高,更不易出错。之前做过类似的努力,结合SOA和工作流引擎做的一个流程编辑:http://blog.csdn.net/chgaowei/article/category/597366。它有它自身的缺陷:脚本和程序之间的耦合太大,脚本限制太多。后来接触并且学习Python,它简洁而强大,应该是解决这类问题的一个思路。那天看到Python自带的生成器yield关键字,感觉着应该是解决逻辑问题的一个突破点(后面会介绍)。再后来参加Python con2011 china,看里面很多人提到了协程和Greenlet,特别是赖勇浩提出的口号:协程才是未来。当时 阅读全文
posted @ 2012-06-21 07:59 常高伟 阅读(10448) 评论(1) 推荐(3) 编辑
摘要:我看书有个特点,不写笔记,就感觉好像没有看过书,印象不深刻(虽然写了也未必深刻),所以我看书会比较慢,笔记会很多。这里总结一下并发。最近学习《深入理解计算机系统》,最后一章中讲到了并发。之前一直以为并发是为了提高性能,书中将并发理解为逻辑控制流在时间上的重叠。简单的说,就是让机器能够同时处理多个事情,充分利用机器的能力。特别是现在多核机器的普遍,并发可能越来越重要。现代操作系统提供了三种基本的方法用于构造并发:进程,I/O多路复用,线程。我们公司在工作中用的最多的其实是第二种。你也许知道,他是无法利用CPU的多核的。不过还好,我们的服务器上一般会跑多个程序(系统划分为多个程序模块)。某些语言也 阅读全文
posted @ 2012-06-06 12:50 常高伟 阅读(10845) 评论(3) 推荐(3) 编辑
摘要:不知觉python总结都有四十页了,虽然可能很多都是基础性的,仍然有成就感。和之前一样,仍然全部贴出来,而不是把新的贴出来,请谅解。这次新增的部分包括c扩展,排序,ftp,源码安全,性能,代码检查等。后面在python上努力的几个方向:1、继续在开发中多使用,积累开发经验。2、针对我们公司完善基础库,在我们公司推广。3、抽时间,系统学习一下python。4、学习一下高手在怎么使用python。毕竟我是自学。5、参与开源。如果你想下载这个文档,请点击这里:http://download.csdn.net/detail/chgaowei/4324981两本不错的书:《Python参考手册》:对Py 阅读全文
posted @ 2012-06-05 23:15 常高伟 阅读(6862) 评论(8) 推荐(7) 编辑
摘要:使用C很长时间,但是很难说对c的各个点都十分的透彻。虽然c不像c++那样复杂,但是还有很多叽里旮旯儿:并不是他们有多难,而是在于他们平时用的不多,或者和人的第一直觉相悖,再或者初学时经验有限理解不深根本没有记住。下面的这些东西可能来自《c专家编程》或者网络。最近发现基础的经典的书籍常读常新,原因可能有两个:1、随着自己经验的增长,你的认识可能会不一样,思维的方式也会有所变化,而得到的东西自然会是新的东西。2、早些时候经验有限,有些点可能根本就没有完全理解。现在你可以理解的更深刻。这方面的书籍再比如《代码大全》,前几天翻了一下,又有不同的认识。进入正题: 1、有符号和无符号的比较:printf( 阅读全文
posted @ 2012-06-02 10:54 常高伟 阅读(1313) 评论(1) 推荐(2) 编辑
摘要:首先声明一点:这里的“高并发”是相对的,相对于硬件而言,而不是绝对的高并发。后者需要分布式来实现,这里不做讨论。本文关注的是单机的高并发。最近在做一个语音通信系统,要求在线用户2W,并发1K路通话。硬件是两台服务器,酷睿多核,4G内存,千兆网卡(我用过的最好的硬件,负担这些应该问题不大)。系统的另一个指标是呼叫时延和语音时延。这是这个系统的关键。最终我们的系统拿到用户现场测试的时候,效果可能有点太好,对方测试不大相信。其实降低时延只要几个地方把握好了,应该问题不大的。这里总结一下。1、整体结构:整体上采用控制与承载相分离的结构。控制部分负责流程的控制部分,包括流程的建立,处理,语音资源的管理等 阅读全文
posted @ 2012-06-02 07:01 常高伟 阅读(6860) 评论(18) 推荐(5) 编辑
摘要:最近读完《unix编程艺术》,一本不错的书,值得好好读一下。书中提到了一些非常有启发性的设计概念,这里和大家分享一下。模块性:要编写复杂软件又不至于一败涂地的唯一方法,就是用定义清晰的接口把若干简单的模块组合起来。模块性可以说是听到的最多的一个,它已经深入程序员的心中。它的本质其实就是用分而治之的方法来分解复杂度。关于模块的大小,本书有精彩的论述,有兴趣可以详读。紧凑性:就是一个设计能否装进人脑的特性。我把它理解为设计的可读性。紧凑不等以薄弱:如果一个设计构建在易于理解利于组合的抽象概念上,则这个系统能够在具有非常强大、灵活的功能同时保持紧凑性,典型的如Eclipse的插件体系结构。紧凑不等于 阅读全文
posted @ 2011-10-25 20:18 常高伟 阅读(2657) 评论(3) 推荐(3) 编辑
摘要:同步于我的CSDN博客:http://blog.csdn.net/chgaowei/article/details/6754855#reply “设计良好的函数往往比较小,而过大函数的设计往往一塌糊涂,或者存在很大的优化空间。”也许你认为讨论函数的大小没有必要,原因是函数设计的本质是内聚,它的大小只是它的表现形式。而上面的原因有必要让我们讨论一下函数的大小问题。我对函数的核心思路:我提出代码最小处理单元的概念:一个基本操作(赋值,比较等),一个函数调用(包括调用后判断返回值进行判断)都看成一个最小处理单元。那么,一个函数,最小处理单元合理的个数范围在7以内。如果超过了7,你就要考虑把他们... 阅读全文
posted @ 2011-09-07 20:56 常高伟 阅读(3178) 评论(15) 推荐(7) 编辑
摘要:前几天为新员工写一个简单的测试框架,可让他们方便的写测试用例并且执行。期间遇到一个问题就是如何让他们增加测试用例而用不影响测试框架的代码?c++的单件模式可以解决这个问题,但是其中一个难点是要在main之前注册单件。c++可以通过构造函数来实现注册,c如何注册?最后查了下资料,原来可以定义在main之前调用的函数!有了这个特性可以改善c的模块化设计。特性介绍:如果想定义在main函数之前调用的函数,可以在函数的声明之后加上一句“__attribute__((constructor))”,如下:intbefore()__attribute__((constructor));如果想定义在main函 阅读全文
posted @ 2011-08-18 12:44 常高伟 阅读(4078) 评论(1) 推荐(2) 编辑
摘要:为什么需要简单的设计?我想这和人的特点有关。我不止在一个地方看到过,人同时能够处理的信息不超过7个。我想这应该就是人们追求简单设计的根本原因,人需要用一个简单的设计去解决现实中的问题。如果真的存在完美,也许简单的东西就是完美的东西。很多人都崇尚简单设计的思想,那么什么是简单设计?下面谈谈我的理解:1、首先要能够解决实际问题的;这是所有设计要达到的目标,虽然实现的手段和方法,效果不同。简单的设计也必须达到这个目标。2、易于理解的;易于实现的;易于维护的;我认为这是简单的设计最吸引人的地方,也是它最有价值的地方。3、把握问题的本质的设计;物体运动的表现形式很复杂,但是它的本质:牛顿定理却简单。所以 阅读全文
posted @ 2011-07-16 18:28 常高伟 阅读(2553) 评论(5) 推荐(5) 编辑