摘要: 前言:这篇文章写作过程断断续续持续了两个月,终于写完了,最近事情有些多。这次技术会议的主办方虽然是阿里巴巴,但是还有很多其他的互联网企业,比如百度,新浪,腾讯,盛大,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 常高伟 阅读(10447) 评论(1) 推荐(3) 编辑
摘要: 不要把大脑当做磁盘上学的时候我们会倾向于(被迫)背很多东西,毕业后发现大部分都又还给了老师。但是受过教育和没有受过教育的人还是有区别的,差别可能就在于剩下的那一小部分。工作后,在工作中可能还会倾向于去记忆很多东西,但是我发现很多时候是没有必要的,而且有时候甚至会成为一种负担。第一个原因是之前被我们说了很多的知识爆炸。只看看在软件开发领域,这十几年出现了多少新的语言,接口,框架,思想,方法,模式,还有操作系统。而且,知识增长的速度只会越来越快,分工也会越来越细,一个人要想记住所以的东西基本是不可能的,即便是他所处领域内的东西也是不可能的。第二个原因是没有必要。为什么要记住这些东西?因为会用到它。 阅读全文
posted @ 2012-06-13 08:08 常高伟 阅读(3978) 评论(32) 推荐(18) 编辑
摘要: 我看书有个特点,不写笔记,就感觉好像没有看过书,印象不深刻(虽然写了也未必深刻),所以我看书会比较慢,笔记会很多。这里总结一下并发。最近学习《深入理解计算机系统》,最后一章中讲到了并发。之前一直以为并发是为了提高性能,书中将并发理解为逻辑控制流在时间上的重叠。简单的说,就是让机器能够同时处理多个事情,充分利用机器的能力。特别是现在多核机器的普遍,并发可能越来越重要。现代操作系统提供了三种基本的方法用于构造并发:进程,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 常高伟 阅读(6861) 评论(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 常高伟 阅读(6854) 评论(18) 推荐(5) 编辑
摘要: 本文示例代码采用的是c语言。之前介绍过数据驱动编程《什么是数据驱动编程》。里面介绍了一个简单的数据驱动手法。今天更进一步,介绍一个稍微复杂,更加实用的一点手法——表驱动法。关于表驱动法,在《unix编程艺术》中有提到,更详细的描述可以看一下《代码大全》,有一章专门进行描述(大概是第八章)。简单的表驱动:《什么是数据驱动编程》中有一个代码示例。它其实也可以看做是一种表驱动手法,只不过这个表相对比较简单,它在收到消息后,根据消息类型确定使用调用什么函数进行处理。复杂一点的表驱动:考虑一个消息(事件)驱动的系统,系统的某一模块需要和其他的几个模块进行通信。它收到消息后,需要根据消息的发送方,消息的类 阅读全文
posted @ 2011-11-14 21:19 常高伟 阅读(2808) 评论(4) 推荐(1) 编辑
摘要: 最近读完《unix编程艺术》,一本不错的书,值得好好读一下。书中提到了一些非常有启发性的设计概念,这里和大家分享一下。模块性:要编写复杂软件又不至于一败涂地的唯一方法,就是用定义清晰的接口把若干简单的模块组合起来。模块性可以说是听到的最多的一个,它已经深入程序员的心中。它的本质其实就是用分而治之的方法来分解复杂度。关于模块的大小,本书有精彩的论述,有兴趣可以详读。紧凑性:就是一个设计能否装进人脑的特性。我把它理解为设计的可读性。紧凑不等以薄弱:如果一个设计构建在易于理解利于组合的抽象概念上,则这个系统能够在具有非常强大、灵活的功能同时保持紧凑性,典型的如Eclipse的插件体系结构。紧凑不等于 阅读全文
posted @ 2011-10-25 20:18 常高伟 阅读(2657) 评论(3) 推荐(3) 编辑
摘要: 之前发表过一篇文章《如何学习一门新的语言》。之后就开始学习python了,具体原因也不是很清楚了。我先是从python简明教程开始,写了两篇笔记《python初体验1》《python初体验2》,但是没有太多的感受。后面因为一个小的项目,我想尝试一下python,在这个过程中,体验了python的简洁和高效,有一种飞起来的感觉——也许我是一名c语言程序员。事实也再次证明,学习一门新的语言最好的方法就是在实际开发中去使用它。我旁边没有人有python经验,所以学习过程有些曲折,还好很多问题都可以通过网络解决。另外,学习的过程中发现一本书《python参考手册》非常不错,有时间一定要通读一下。学习一 阅读全文
posted @ 2011-10-24 19:56 常高伟 阅读(2204) 评论(5) 推荐(1) 编辑