- 博客(328)
- 资源 (18)
- 收藏
- 关注
原创 不要把大脑当做磁盘
不要把大脑当做磁盘上学的时候我们会倾向于(被迫)背很多东西,毕业后发现大部分都又还给了老师。但是受过教育和没有受过教育的人还是有区别的,差别可能就在于剩下的那一小部分。工作后,在工作中可能还会倾向于去记忆很多东西,但是我发现很多时候是没有必要的,而且有时候甚至会成为一种负担。第一个原因是之前被我们说了很多的知识爆炸。只看看在软件开发领域,这十几年出现了多少新的语言,接口,框架,思想,方法,模式,还
2012-06-13 08:03:22 12713 75
原创 APUE学习笔记-文件IO
1 文件I/O1、 lseek的返回值应该判断是否为0,而不是小于0。2、 偏移量可以大于文件大小。这个时候会有文件空洞。3、 可以统计程序的运行时间:用户cpu(用户态),系统cpu(内核态),墙上时间(总是将)。time –p ./execute4、 open加上标志:O_CREATE和O_EXCL可以判断文件是否存在。5、 dup和dup2可复制文件描述符。并可指定复制后
2012-06-10 22:12:41 2290
原创 简单的搭建一个高并发低时延系统
首先声明一点:这里的“高并发”是相对的,相对于硬件而言,而不是绝对的高并发。后者需要分布式来实现,这里不做讨论。本文关注的是单机的高并发。最近在做一个语音通信系统,要求在线用户2W,并发1K路通话。硬件是两台服务器,酷睿多核,4G内存,千兆网卡(我用过的最好的硬件,负担这些应该问题不大)。系统的另一个指标是呼叫时延和语音时延。这是这个系统的关键。最终我们的系统拿到用户现场测试的时候,效果可能有点太
2012-05-31 22:14:54 12751 13
原创 python开发总结五
不知觉python总结都有四十页了,虽然可能很多都是基础性的,仍然有成就感。和之前一样,仍然全部贴出来,而不是把新的贴出来,请谅解。这次新增的部分包括c扩展,排序,ftp,源码安全,性能,代码检查等。后面在python上努力的几个方向:1、继续在开发中多使用,积累开发经验。2、针对我们公司完善基础库,在我们公司推广。3、抽时间,系统学习一下python。4、学习一下高手在怎么使用python。毕竟
2012-05-23 22:47:08 3791
转载 禅道程序员的10条原则
原文地址 http://news.cnblogs.com/n/139496/ 英文原文:The 10 rules of a Zen programmer 在一个阴雨的早上,我坐在桌子旁,开始想如何才能高效的工作。在我成为一个自由职业者之前,我有很长一段时间都很努力工作,但收效甚微。 我在 2006 开始接触禅学。我马上意识到:古代的禅宗大师们几百年前早就已经知道现今的程序员应该如何工作。虽然我
2012-04-20 21:51:59 1748 1
原创 最近技术点整理
在一个博客上看到类似会这样的文章,感觉不错。有些内容虽然不成系统,但是对自己还是很重要的,有必要总结出来。好了,开始第一篇:1、epoll相对于select的优势: 不受套接字个数的限制。select默认应该是2048,而epoll没有这个限制,他的限制在系统的内存; select每次都要创建一个列表传递给内核,而epoll则直接写到内核中。 每个套接字可以传递用户数据,这样可以方便的设置回调。2
2012-04-16 22:39:33 2469
原创 使用swig为python添加c扩展总结
1、 可以使用swig来创建c 的扩展程序,非常方便。目前没有时间研究内部机制,先暂时使用,后面在研究吧。2、 swig使用步骤:为库的头文件建立.i文件:%{/* Includes theheader in the wrapper code */#include"code.h"#include"sip.h"%} /* Parse theheader file to generate wrap
2012-04-16 22:35:05 5470 2
原创 给学计算机的表弟几点建议
表弟今年大一,学计算机相关专业,刚买电脑,下面是qq聊天记录,整理了一下。学习编程,linux肯定要学习。一是因为现在很多公司的开发,特别是服务端上的开发都是用linux,而是因为linux的文化非常好。学习linux可以学到很多东西。你之前的系统ubuntu也是一个linux版本。不过可能更面向的是消费者而不是开发者。之前我给你说过,要你安装一个linux的系统,用虚拟机的形式安装。现在就开始安
2012-04-08 21:55:54 2951 2
原创 c语言知识点补遗
使用C很长时间,但是很难说对c的各个点都十分的透彻。虽然c不像c++那样复杂,但是还有很多叽里旮旯儿:并不是他们有多难,而是在于他们平时用的不多,或者和人的第一直觉相悖,再或者初学时经验有限理解不深根本没有记住。 下面的这些东西可能来自《c专家编程》或者网络。最近发现基础的经典的书籍常读常新,原因可能有两个: 1、随着自己经验的增长,你的认识可能会不一样,思维的方式也会有所变化,而得到的东西自然会
2012-04-05 22:54:12 2799 3
原创 2012,做一个现实的理想主义者
还是比较习惯在农历年后做总结。首先对2011总体总结一下:去年有一些进步,也有一些遗憾,有的时候感觉自己进步挺快,有的时候感觉自己好像遇到了瓶颈。1、读书读了几本好书,感觉不错的有《effective c++》,《卓有成效的管理者》,《黑客与画家》,《编程人生》,《unix编程艺术》。之所以感觉不错是可能是因为这些书和目前自己的经验和工作比较贴切,容易产生共鸣,印象深刻。之前我说过,如果一本书读不
2012-02-12 19:51:45 8260 54
转载 我在Facebook学到的10个经验
转发:原文:http://blog.jobbole.com/12952/1 坚持你的远景,但要对细节灵活 作为一个领导者,你需要依赖你自己的远景(至少在你负责的业务领域内)而那些和你一起或为你工作的人将依赖你的远见。什么是远景?就是对最终状态的一种描述。是你需要你的团队着陆的地方。是生效之后的新生活。它是北极星,和方向。这里有一个例子,当我启动支付风险团队的时候,我们只有规则引擎。规则是人写的。一
2012-02-08 21:55:40 3695 1
原创 python开发总结四
不知不觉我的python开发总结已经18页了。原谅我把所有的都贴到博客上,而没有列出更新部分。如果你是第一次看,这样可能最有帮助。两本不错的书:《Python参考手册》:对Python各个标准模块,特性介绍的比较详细。《Python核心编程》:介绍的比较深入,关键是,对Python很多高级特性都有介绍。一个开源代码:openstack,关于云计算的,用Python写的,可以重点学习一下。套接字编程
2012-02-06 20:23:13 3995 1
原创 并发编程学习总结
我看书有个特点,不写笔记,就感觉好像没有看过书,印象不深刻(虽然写了也未必深刻),所以我看书会比较慢,笔记会很多。这里总结一下并发。最近学习《深入理解计算机系统》,最后一章中讲到了并发。之前一直以为并发是为了提高性能,书中将并发理解为逻辑控制流在时间上的重叠。简单的说,就是让机器能够同时处理多个事情,充分利用机器的能力。特别是现在多核机器的普遍,并发可能越来越重要。现代操作系统提供了三种基本的方法
2012-02-06 20:18:27 9941 5
原创 新手小心:c语言的强符号和弱符号
声明:下面的实例全部在linux下尝试,window下未尝试。有兴趣者可以试一下。文章针c初学者。c语言的强符号和弱符号是c初学者经常容易犯错的地方。而且很多时候,特别是多人配合开发的程序,它引起的问题往往非常行为怪异而且难以定位。什么是强符号和弱符号?在c语言中,函数和初始化的全局变量是强符号,未初始化的全局变量时弱符号。强符号和弱符号的定义是连接器用来处理多重定义符号的,它的规则是:不允许多个
2012-01-03 22:25:57 8522 11
原创 python装饰器学习总结
装饰器可以用于AOP(面向切面编程).1、 装饰器本质上来说就是函数(或者是可调用对象),他们接受函数对象。装饰器仅仅用来装饰或者修饰函数的包装,返回一个修改后的函数对象,并将其赋值原来的标示符,并永久失去对原有函数的访问。2、 什么是带参数的装饰器?其实就是一个函数,这个函数可以返回一个装饰器,同时这个函数可以接受参数。3、 不带参数的装饰器要返回一个函数,这个函数就是用来替换原有的标示符
2011-12-20 21:03:57 4005
转载 linux epoll简介
最近研究python的coroutine,顺藤摸瓜,从linux epoll开始:原文:http://baike.baidu.com/view/1385104.htmlepoll是Linux内核为处理大批量句柄而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著减少程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。目录简介优点使用系统调用展开编辑
2011-12-05 19:23:27 2762
原创 linux 程序的段学习总结
linux程序的段陆陆续续接触过一些,今天适当的总结一下,时间仓促,总结的比较零散。linux 段:text:已编译程序的机器代码。.rodata:只读数据。printf中的格式串,或者开关语句的跳转表。data:已初始化的全局变量。bss:未初始化的全局变量。symtab:符号表。注意:1、如果定义一个全局变量,int i = 0;它被初始化为0,但是,它却不是放在data段中的,而是放在bss
2011-11-30 22:40:42 2712
原创 python开发总结二
最近在接触python,感觉python之所以开发效率高,可能有三个因素:1、语言表达能力强悍。2、支持很多高级的语言特性。3、第三方开源库非常的丰富。两本不错的书:《Python参考手册》:对Python各个标准模块,特性介绍的比较详细。《Python核心编程》:介绍的比较深入,关键是,对Python很多高级特性都有介绍。一个开源代码:openstack,关于云计算的,用Python写的,可以重
2011-11-30 22:35:52 10139 15
原创 数据驱动编程之表驱动法
本文示例代码采用的是c语言。之前介绍过数据驱动编程《什么是数据驱动编程》。里面介绍了一个简单的数据驱动手法。今天更进一步,介绍一个稍微复杂,更加实用的一点手法——表驱动法。关于表驱动法,在《unix编程艺术》中有提到,更详细的描述可以看一下《代码大全》,有一章专门进行描述(大概是第八章)。简单的表驱动:《什么是数据驱动编程》中有一个代码示例。它其实也可以看做是一种表驱动手法,只不过这个表相对比较简
2011-11-13 22:02:50 26209 12
转载 怎样花两年时间去面试一个人
这是一篇 刘未鹏 发表的文章。原文地址:http://mindhacks.cn/2011/11/04/how-to-interview-a-person-for-two-years/这篇文章不但讨论了如何面试,还有关于如何学习的一些想法,非常不错,值得好好读一下。书中提到的一种招聘模式具有一定的可行性,有兴趣的同学可以尝试做一下。Joel Spolsky曾经感叹:招聘难,难于上青天(此处笔者稍加演
2011-11-05 14:53:47 4502 4
原创 分享:我用Google Reader收集的非常不错的技术博客
技术博客是学习的一个非常重要的方式。平时遇到不错的博客就收集到google reader上,到现在手机了100多技术博客。现在分享出来,希望对你有所有帮助。另外,google reader支持导出OPML文件,后面的链接提供下载,这样更方便导入。EMC研究院 http://qing.weibo.com/blog/api/rss.php?uid=2294942122 51CTO技术博客-领先的IT
2011-11-03 21:51:31 5777 6
原创 分享几个非常有启发性的设计概念
最近读完《unix编程艺术》,一本不错的书,值得好好读一下。书中提到了一些非常有启发性的设计概念,这里和大家分享一下。模块性:要编写复杂软件又不至于一败涂地的唯一方法,就是用定义清晰的接口把若干简单的模块组合起来。模块性可以说是听到的最多的一个,它已经深入程序员的心中。它的本质其实就是用分而治之的方法来分解复杂度。关于模块的大小,本书有精彩的论述,有兴趣可以详读。紧凑性:就是一个设计能否装进人脑的
2011-10-23 21:35:43 8269 21
原创 开发工具,重用,可移植性——unix编程艺术学习笔记
1 工具:开发的战术有几个工具需要关注一下:Lex和yacc:这两个工具和DSL相关,我之前考虑过写一个通用的DSL引擎,这两个工具也许是可以使用的。另外,Python有它的一个实现叫PLY,也要关注一下。它的一个实例:Glade。Makefile的自动生成工具:比如atuoconf,imake。2 重用:论不要重新发明轮子避免重新发明轮子的最有效的方面就是借用别人的实现:在U
2011-10-20 21:56:32 2127
原创 14 语言:C还是非C——UNIX编程艺术学习笔记
每种语言都有它擅长的领域,所以,我们的策略,就是使用多种语言,让每个语言完成他们擅长的部分任务。混合语言编程是一种语言密集型,而不是代码密集型的编程。我们不但要具备多种语言的知识,还要能够知道各个语言的特长。C:可以作为其他语言的基础,来实现其他语言的核心。它的效率接近机器语言。但是容易犯错,开发效率低。C++:编译效率,面向对象,泛型编程的结合。但是非常怪异复杂,往往鼓励复杂的设计。Shell:
2011-10-20 21:55:47 2144 2
原创 软件的适度规模——unix编程艺术学习笔记
小巧锐利工具的Unix教义隐藏着二重性:框架的存在。吝啬原则:只有实证了其他方式行不通时才写庞大程序。要对庞大程序保持一种严谨怀疑态度以及一种谨慎的策略和方法:首先寻找小巧程序的解决方案。如果单个小程序无法完成工作,尝试在现有框架结构内构造一个协作小程序工具包来解决问题。如果两者都失败了,才可以自由的构建一个巨型的程序或者一个新的框架,而不会觉得已经完败于设计挑战。当编制一个框架时,牢记分离原则。
2011-10-20 21:54:55 1515
原创 c程序员的python开发总结
之前发表过一篇文章《如何学习一门新的语言》。之后就开始学习python了,具体原因也不是很清楚了。我先是从python简明教程开始,写了两篇笔记《python初体验1》《python初体验2》,但是没有太多的感受。后面因为一个小的项目,我想尝试一下python,在这个过程中,体验了python的简洁和高效,有一种飞起来的感觉——也许我是一名c语言程序员。事实也再次证明,学习一门新的语言最好的方法就
2011-10-20 21:44:22 3194 1
原创 给电子类专业大一新生的十三条建议[修订]
前言:写这篇文章的起因是老家几个亲戚的小孩今年高考,而且都是IT类相关专业。我是从一位大学毕业生及程序员的角度提的这些建议。类似这样的文章很多,权作一些补充,希望对他们的大学生活有所帮助。我的建议:1、 首要任务,找到自己的理想,方向,兴趣,人生规划。我认为这才是大学的首要任务。
2011-09-18 09:55:17 6513 14
原创 函数要多小才够好——谈小函数之道[性能?]
“设计良好的函数往往比较小,而过大函数的设计往往一塌糊涂,或者存在很大的优化空间。”也许你认为讨论函数的大小没有必要,原因是函数设计的本质是内聚,它的大小只是它的表现形式。而上面的原因有必要让我们讨论一下函数的大小问题。我对函数的核心思路:我提出代码最小处理单元的概念:一个基本操
2011-09-06 21:38:05 9755 60
原创 谈谈复杂度——unix编程艺术学习笔记
复杂度有三个来源:1、 代码规模:一般就是代码的函数。2、 实现复杂度:程序员为了理解一个程序从而建立其思维模型并调试该程序的困难程度。3、 接口复杂度:主要是和用户接口的复杂度,比如用户界面,功能,操作等。面对上面三个复杂度比较陷入三个陷阱:1、 manularty(人
2011-09-06 20:33:08 2271
原创 性能优化——unix编程艺术学习笔记
最有效的优化往往是优化之外的其他事情,比如:清晰干净的设计。最有效的优化技术就是不做优化:摩尔定律会进行优化。如果确实需要优化,那必须找到真正的瓶颈。可以使用工具。但是有几个问题:1、 工具的误差。工具一般要插入代码,而这些代码也要消耗时间。越小的函数,消耗越大。所以还要结合调
2011-09-06 20:31:08 1974
原创 Unix接口设计模式——unix编程艺术学习笔记
1、 过滤器模式:接收标准输入,然后转化为标准输出。把自己当成一个过滤器。使用时的原则:宽进严出,不需要的信息也绝不丢弃,绝不增加无用数据。比如grep。2、 Cantrip模式:没有输入,没有输出,只调用一次,参数状态值,然后退出。比如rm。不需要交互。3、 源模式:不需
2011-09-06 20:30:20 2424 1
原创 接口设计评估——unix编程艺术学习笔记
这里的接口,更多的指的是对用户的接口。接口的五个特性:1、 简洁:指一个事务处理需要的动作时间及复杂度有较低的上限。2、 表现力:接口可以出发广泛的行为。3、 易用性:使用接口需要记多少东西?4、 透明性:用户动作的效果,能够自然的给出中间结果,反馈,错误通知。程序的运行
2011-09-06 20:29:06 1765
原创 微型语言的设计——unix编程艺术学习笔记
“软件的缺陷率和使用的语言无关。”我曾经设计过一个机遇xml的微型语言。另外,xtest项目让我向设计一个全新的,类似于真正语言的语言,而不是简单的标记语言。在学习这一章的时候,结合整xtext一起学习一下。发现xtext有一个问题,它只可以运行的jvm上。我想设计一种DSL,我
2011-09-06 20:11:13 2147 1
原创 记录最近web的一些学习和后面的计划
前一段时间对于WEB开发,了解了不少。不过主要是针对前端编程的,包括html5,css,JavaScript,dom等。前端编程的原理应该是这样,编写页面显示代码,浏览器收到这些代码后进行解析,然后根据描述(html,css,JavaScript)生成对应的图形。AIR的思想就很
2011-08-27 20:55:59 1876 1
原创 多道程序设计:分离进程为独立功能
Unix最具特点的程序模块化技法就是将大型程序分解成多个协作的进程。这种设计可以降低全局的复杂度,但是需要更多的关注进程间传递信息和命令的协议设计。对于通信协议的设计,真正的挑战不是设计协议语法而是设计协议的逻辑:即要有表达能力又要有防范死锁的能力。它是模块化的延续。在开发出可以
2011-08-23 20:31:50 2164
原创 透明性:来点光——unix编程艺术学习笔记
可显性是指是否容易入门;透明性是指入门后是否容易理解。为透明性和可显性设计运行各种方法保持代码简洁,也要专注同其他人交互的方式。 透明性之禅要追求代码的透明,最有效的方法很简单,就是不要在具体操作的代码上叠放太多的抽象层。这里作者又在批判OO的厚胶合层和过多的抽象层。:要设计简单
2011-08-23 20:09:09 1553
原创 为透明性和可显性而编码——UNIX编程艺术学习笔记
透明性和可显性同模块性一样,主要是设计的特性而不是代码的特性:1、 程序调用层次中最大的静态深度是多少?不考虑递归,为了建立心理模型来理解代码的操作,人们将要调用多少层?这个应该不是实际的代码调用层次。我现在倾向于小函数,所以调用层次会比较深。它这个应该是理解上的层次。2、
2011-08-23 20:06:35 2631
原创 程序库,面向对象语言——unix编程艺术学习笔记
1.1 程序库强烈倾向于把程序分解成有胶合层连接的库集合,特别是共享库。使用库来达到c语言的模块性。库分层的一个重要形式是插件。实例分析:GIMP插件1.2 UNIX和面向对象语言Unix的模块化传统就是薄胶合层原则。也就是程序底层和顶层之间的抽象层越少越好。原因可能是因为c
2011-08-23 20:03:58 2319
原创 模块化编码——unix编程艺术学习笔记
模块性体现在良好的代码中,但首先来自良好的设计。下面是问题清单:1、 有多少全局变量?全局变量时模块化的毒药,很容易使各个模块轻率,混乱的泄露信息。2、 单个模块的大小是否在hatton的“最佳范围内”(物理行在400~800间)?如果回答是不,很多都超过的话,就可能产生长期
2011-08-23 20:03:35 2113
转载 你是优秀程序员吗?
原文地址:http://news.cnblogs.com/n/112562/投递人 Astar发布于 2011-08-22 10:03评论(7)有1420人阅读 原文链接 [收藏] « » Are You a Good Programmer?
2011-08-22 22:02:36 2411 6
:The C Programming Language 中文版
2009-11-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人