
软件学习笔记
文章平均质量分 94
长山的随笔
AI Agent infra方向创业,ex 淘宝 阿里云,公众号同名
展开
-
《跨界》学习笔记
跨界 笔记1.未来设备之间的连接将会改变现有的模式和生态。出现大量机会。2.在互联网向传统行业渗透的过程中,传统行业未必没有机会。他们需要升级,利用互联网进行升级,变成传统行业2.0。互联网将会消失,因为一切都是互联网。3.在线教育,千亿市值。价格不是决定因素,质量至关重要。传统公司掌握核心资源,但是如果不迅速转变行业地位堪忧。4.互联网金融,p2p前景不错。5.3D打印精密制造还不可以。6.随着原创 2015-03-05 22:02:50 · 3671 阅读 · 1 评论 -
4.3 软件是多层的——UNIX编程艺术学习笔记
1.1.1 自顶向下和自底向上自顶向下的设计者可能会首先考虑主事件循环,然后在考虑插入具体的事件;自底向上设计者通常会考虑封装具体的事务,以后再按照某种相关次序把这些东西粘合在一起。单纯的使用自底向上和自顶向下都无法达到好的效果。一方面设计程序逻辑(自顶向下),一方面整理底层的原创 2011-08-16 21:21:26 · 1894 阅读 · 0 评论 -
模块性: 保持清晰,保持简洁——《unix 编程艺术》学习笔记
软件设计有两种方式:一种是设计的非常简洁,没有看得到的缺陷;另一种设计的极为复杂,有缺陷也看不出来。第一种方式难度要大得多。——C.A.R Hoare更精练的表达:一种是明显没有缺陷;一种没有明显的缺陷。要编写复杂软件又不至于一败涂地的唯一方法,就是用定义清晰的接口把若干简单的模原创 2011-08-16 21:19:08 · 2055 阅读 · 0 评论 -
程序库和面向对象语言——unix编程艺术学习笔记
1.1 程序库强烈倾向于把程序分解成有胶合层连接的库集合,特别是共享库。使用库来达到c语言的模块性。库分层的一个重要形式是插件。实例分析:GIMP插件1.2 UNIX和面向对象语言Unix的模块化传统就是薄胶合层原则。也就是程序底层和顶层之间的抽象层越少越好。原因可能是因为c原创 2011-08-16 21:22:00 · 1581 阅读 · 0 评论 -
4.2 紧凑性和正交性——UNIX编程艺术学习笔记
1.1.1 紧凑性紧凑性就是一个设计能否装进人脑的特性。——它是设计的可读性?紧凑不等以薄弱:如果一个设计构建在易于理解利于组合的抽象概念上,则这个系统能够在具有非常强大、灵活的功能同时保持紧凑性。紧凑不等于易于学习:对于某些紧凑设计而言,在掌握其精妙的内在概念模型之前,要理解原创 2011-08-16 21:20:01 · 4607 阅读 · 4 评论 -
unix设计十七条原则之一(unix编程艺术笔记)
最近在学习《unix编程艺术》。第一章非常不错,讲了很多Unix的历史,哲学基础,其中最重要的是提到的十七条设计原则。很多原则自己也知道,但是从来没有总结的如此详细深刻。下面的内容大部分来自《unix编程艺术》这本书,少部分是我的一些理解。这是我读书的一个习惯,对于我认为重要的,原创 2011-07-26 20:49:23 · 2643 阅读 · 5 评论 -
概念模型——分析模式学习笔记
分析和设计存在很多的不同之处,设计的目的是为了更高实现一个技术方案,而分析的目的是为了理解问题的本质。这不仅仅是用用例列出需求清单那么简单的事情。 假设我们想开发一个斯诺克台球模拟游戏,击打白球后,白球按照一定的轨迹运动,并且撞击红球。用例可以列出成千上万,但是这不足以让我们开发出一个更好的软件——你必须了解运动背后蕴含的规律。这个问题不难解决,因为这些规律已经众所周知。 但是在很多的应用领域原创 2011-06-25 08:43:00 · 4285 阅读 · 1 评论 -
如何成为一名专家级的开发人员——读后总结
今天在优快云首页上看了一篇文章:如何成为一名专家级的开发人员文章相当不错,感触很深,总结一下:1、专注。要选择一个平台,一个行业,然后在这个领域内专注一段时间(最少要6年)。我现在应该是linux 上C/C++开发,要专注这一领域。我的一个同事做了三年,后来跳槽到HW后转java了,可惜了。2、深入。深入的了解我的这个平台,以及语言,行业。比如,我要能掌握linux操作系统,linux内核;深入掌握C/C++;掌握通信行业知识。3、扩展。“当你开始掌握当前的平台,要开始学习独立于平台的原创 2010-11-22 18:48:00 · 5575 阅读 · 11 评论 -
成功架构设计的关键要素
下面内容来自《软件架构设计》,是我的学习笔记。 探究成功架构设计的关键要素: 1、 是否遗漏了至关重要的非功能性需求。非功能性需求:1)客户——易用性,性能,可伸缩性,持续可用性和鲁棒性;2)开发人员和维护人员——可扩展性,可重用性,可移植性,易理解性和易测试性等软件开发期质量属性。3)客户组织——成本,上线时间,业务上的限制(这些限制是软件架构的决策依据)。非功能性需求基本上分为质量属性和约原创 2010-04-01 15:25:00 · 2806 阅读 · 1 评论 -
《设计模式》学习笔记——ABSTRACT FACTORY 抽象工厂
1.1 ABSTRACT FACTORY 抽象工厂1、 意图 提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。 2、 动机 “客户仅与抽象定义的接口交互,而不使用特定的具体类的接口。” 这里的主要的思想是封装对象的创建的过程。客户端可以不需要知道具体要创建那些对象,而只需要知道创建某一系列的对象所用到的“工厂对象”即可。 3、 适原创 2010-03-03 20:32:00 · 1776 阅读 · 0 评论 -
开发工具,重用,可移植性——unix编程艺术学习笔记
1 工具:开发的战术有几个工具需要关注一下:Lex和yacc:这两个工具和DSL相关,我之前考虑过写一个通用的DSL引擎,这两个工具也许是可以使用的。另外,Python有它的一个实现叫PLY,也要关注一下。它的一个实例:Glade。Makefile的自动生成工具:比如atuoconf,imake。2 重用:论不要重新发明轮子避免重新发明轮子的最有效的方面就是借用别人的实现:在U原创 2011-10-20 21:56:32 · 2147 阅读 · 0 评论 -
14 语言:C还是非C——UNIX编程艺术学习笔记
每种语言都有它擅长的领域,所以,我们的策略,就是使用多种语言,让每个语言完成他们擅长的部分任务。混合语言编程是一种语言密集型,而不是代码密集型的编程。我们不但要具备多种语言的知识,还要能够知道各个语言的特长。C:可以作为其他语言的基础,来实现其他语言的核心。它的效率接近机器语言。但是容易犯错,开发效率低。C++:编译效率,面向对象,泛型编程的结合。但是非常怪异复杂,往往鼓励复杂的设计。Shell:原创 2011-10-20 21:55:47 · 2173 阅读 · 2 评论 -
APUE学习笔记——线程
采用多线程模式可以采用同步编程,而非异步编程,可以简化编程;多个进程间可以很方便的共享数据; 可以通过pthread_self获得自身的线程ID。线程ID只在进程内部唯一。 新创建线程不能保证那个线程先运行,新县城可以访问进程的地址空间,继承线程的浮点环境和信号屏蔽字。 如果任意一个线程调用:exit,_Exit,_exit,进程都会终止。 线程终止方式:1)从启动函数中返回,返回值就是线程的退出原创 2013-03-02 21:43:32 · 3205 阅读 · 0 评论 -
APUE学习笔记——线程控制
线程属性使用的是结构体ptread_attr_t,它对应用程序是不透明的,这样可以增强程序的可移植性。 可以使用ptread_attr_init进行初始化,使用ptread_attr_destroy进行反初始化(类似于释放操作)。两者必须配对出现。 如果要修改ptread_attr_t,必须调用相应的函数。 如果不关心线程的终止状态,可以将线程设置成分离状态(PTREAD_CRETE_DETACH原创 2013-03-02 21:46:26 · 2745 阅读 · 0 评论 -
APUE学习笔记——信号
信号可以自己扩展。 信号产生:1)用户操作:ctl+c;2)硬件异常:除0,内存越界等;3)进程调用kill函数可以将信号发送到另一个进程。4)用户使用kill命令。5)某软件条件产生。 信号处理: 忽略,但是SIGKILL和SIGSTOP不可以忽略,他们向超级用户提供了进程终止或停止的可靠方法。硬件产生异常也不可以忽略。使用SIG_IGN忽略。 捕捉信号,为信号注册一个函数。SIGKILL原创 2013-03-02 21:42:17 · 2531 阅读 · 0 评论 -
python开发总结六——c程序员python之路
前言学习使用python已经一年,自从看了python简明教程后就开始使用python编码,并且在两个项目中尝试使用了。在使用的过程中遇到问题就查资料,边学边写,并且把自己学到的东西总结下来,不知不觉已经有三十多页。虽然到目前为止还没有完整的看过一本全面python文档,但我认为这种方式可能更适合用来学习新的语言。之前发表过一些,这次各个部分均有更新,并且新增了python性能相关总结。电子版下载原创 2012-09-21 22:58:55 · 8675 阅读 · 2 评论 -
APUE学习笔记——进程控制
1. getpid可以获取进程id。getppid可以获取进程调用进程的id。 2. fork函数:一次调用,两次返回:返回0是在子进程中。返回其他值在父进程中。如果大于0为子进程id;否则失败。 3. 子进程获得了父进程的数据空间(DATA,BSS),堆,栈的副本。进程之间共享正文段。 4. 目前的实现一般不进行全部复制,而实现的是写时复制:及经常只读共享部分,一个进程去更改一块内存是,为这块内原创 2012-09-20 21:27:20 · 2016 阅读 · 0 评论 -
APUE学习笔记——进程环境
在main中调用exit(1)和reutrn 1是等价的。内核启动一个进程的唯一的方法是调用exec,用户程序终止进程的唯一方法是显示或者隐式的调用_exit或者_EXIT。每个进程都会有一个进程表。进程表是一个全局的指针:environ。extern char **environ可以查看这个环境表。另外,可以通过getenv和putenv来获取修改环境表。写个程序试一下。linux的段:linu原创 2012-07-03 11:23:28 · 2695 阅读 · 0 评论 -
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 · 2316 阅读 · 0 评论 -
python开发总结四
不知不觉我的python开发总结已经18页了。原谅我把所有的都贴到博客上,而没有列出更新部分。如果你是第一次看,这样可能最有帮助。两本不错的书:《Python参考手册》:对Python各个标准模块,特性介绍的比较详细。《Python核心编程》:介绍的比较深入,关键是,对Python很多高级特性都有介绍。一个开源代码:openstack,关于云计算的,用Python写的,可以重点学习一下。套接字编程原创 2012-02-06 20:23:13 · 4034 阅读 · 1 评论 -
并发编程学习总结
我看书有个特点,不写笔记,就感觉好像没有看过书,印象不深刻(虽然写了也未必深刻),所以我看书会比较慢,笔记会很多。这里总结一下并发。最近学习《深入理解计算机系统》,最后一章中讲到了并发。之前一直以为并发是为了提高性能,书中将并发理解为逻辑控制流在时间上的重叠。简单的说,就是让机器能够同时处理多个事情,充分利用机器的能力。特别是现在多核机器的普遍,并发可能越来越重要。现代操作系统提供了三种基本的方法原创 2012-02-06 20:18:27 · 10010 阅读 · 5 评论 -
《设计模式》学习笔记——设计模式怎样解决设计问题
1.1 设计模式怎样解决设计问题1.1.1 寻找合适的对象面向对象设计最困难的部分是将系统分解为对象的集合。 设计的许多对象来源于现实世界的分析模型,这里和领域驱动设计有点关联。分析所得到的类,很多事现实中并不存在的类。这是抽象的结果。设计中的抽象对于产生灵活的设计至关重要。就像我设计的一个流程调度模型。 1.1.2 决定对象的粒度记笔记可以让我达到沉流的状态。原创 2010-03-03 20:29:00 · 2071 阅读 · 0 评论 -
浅谈函数的内聚性
在设计类的时候,抽象和封装已经很大程度上取代了内聚性。但是在子程序这一层次上,内聚性仍是常用的启发式方法。下面内容,来自《代码大全》对与子程序而言,内聚性是指子程序中各个操作之间的联系的紧密程度。我们的目标是让子程序只把一件事情做好,不再做任何其他事情。内聚性是针对操作的概念。即操作具有内聚性。通常,一个操作指一个语句,或一个函数调用。一个是简单的操作,一个是复原创 2009-12-02 22:54:00 · 5263 阅读 · 1 评论 -
重构手法——Inline Method
1.1 Inline Method1.1.1 概述在函数调用点插入函数本体,然后移除该函数。1.1.2 动机代码大全和重构中都强调过的一点是,为了代码的可读性,不要吝于为几行代码写一个函数。这个重构方法,就是针对上述原则的滥用。如果代码已经清晰的表达了其意图,间接层的必要性就不大了。这个时候,就可以把间接层移除。另外一个原创 2009-11-10 19:46:00 · 2390 阅读 · 0 评论 -
《代码大全》学习笔记——第十六章,控制循环
第十六章,控制循环前言16.1 选择循环的种类什么时候使用while循环:什么时候使用带退出的循环:如果把循环条件放在开始或结束处,那就要写一个半循环。还要注意把所有的退出条件放在一起,避免将它写的到处都是。带退出的循环更容易理解。什么时候使用for循环:不需要在内部控制循环,循环条件是简单原创 2009-09-18 20:55:00 · 1353 阅读 · 0 评论 -
开始《代码之美》学习
终于把代码大全买了回来,要100¥,有点下不了决心。 上次去书店的时候翻过这本书,不过我给不了一个要买的理由。虽然书的作者是38个大牛,但是没有看这本书的时候,没有像看《代码大全》那种醍醐灌顶的感觉。 这次去的时候有翻了一下,看了一下推荐序,第一篇是孟岩写的,程序员杂志的主编。看完之后我决定把他买下来。用孟岩的话,锻炼一下自己“强悍的思考力”。不原创 2009-08-25 21:59:00 · 1962 阅读 · 0 评论 -
《代码大全》学习笔记:第十四章,组织直线型代码
第十四章,组织直线型代码前言14.1 必须有明确顺序的语句针对接口编程而不是针对实现编程,则要求接口没有假定,或者假定很明显。1、 设法组织代码,使依赖关系变得明显。2、 使子程序名称能够明显的表示依赖关系。3、 利用子程序参数明确表示依赖关系。4、 用注释对不清晰的依赖关系进行说明。5、 用断言或错误处理代码来检查依赖关系。 14.1 顺序原创 2009-08-25 21:52:00 · 1887 阅读 · 0 评论 -
《代码大全》学习笔记:第10,11,12,13章 关于变量的使用,命名等。
第十章, 使用变量的一般事项前言把蓝图设计得精细到已经完全展现出所有的细节实在是一种低效的做法10.1 数据认知10.2 轻松掌握变量定义隐式声明:是指你在使用一个未定义的变量的时候,编译器会自动为你声明此变量。隐式变量声明对任何一种语言来说都是最具危险的特性之一。避免的方法:1、 关闭隐式什么。2、 什么全部的变量。3、 遵循某种命名规则。原创 2009-08-25 21:49:00 · 2667 阅读 · 0 评论 -
《代码大全学习笔记》 第七章,高质量的子程序
第七章,高质量的子程序前言子程序是为实现一个特定的目的而编写的一个可被调用的方法或过程。7.1 创建子程序的正当的理由1、 降低复杂度。当内部循环或内部嵌套层次很深的时候,就要考虑从子程序中提取出新的子程序了。子程序以其抽象,封装,信息、细节的隐藏来实现管理复杂度的功能。2、 引入中间、易懂的抽象。通过命名将一段代码重组织,使其更易原创 2009-08-25 21:41:00 · 2211 阅读 · 0 评论 -
整合之道
文章的题目有点晦涩,有点虚无缥缈。 写这个题目是因为看了孟岩给《代码之美》写的序而有感而发。 以后的软件开发,有可能是这样的一个模式:很多人在分析用户的需求,然后使用工具,迅速的满足用户的需求;少数人会在平台,核心组件,开发工具上研究,以使前者可以更迅速的开发软件。这样,软件开发大部分时候是在整合,而不是绝对意义上的编程。 我们公司在这一方面做的不够好。以后我们的原创 2009-08-25 22:10:00 · 1285 阅读 · 0 评论 -
《代码大全学习笔记》第九章,伪代码编程过程
第九章,伪代码编程过程前言 9.1 创建类和子程序的步骤概述创建一个类的步骤1、 创建类的总体设计:定义类的特定职责,定义类说要隐藏的秘密,以及精确的定义类的接口所代表的抽象概念,决定这个类是否要从其他类派生出来,以及是否运行其他类从它派生;支持这个类中关键的公用方法,标识并设计出类所需要的重要的数据成员。2、 创建类的子程序:3、 复查并测试。创建子程原创 2009-08-25 21:47:00 · 3129 阅读 · 0 评论 -
《代码大全》学习笔记 第八章,防御式编程
第八章,防御式编程前言Byzly。防御式驾驶:你永远不能确定另外一位司机将要做什么。你要承担其保护自己的责任,哪怕是其他司机犯的错误。防御式编程的主要思想:子程序应该不因传入错误数据而被破坏,哪怕是有其他子程序产生的错误数据。 8.1 保护数据免受非法数据的破坏1、检查所有来源于子程序外部的数据的值。2、检查所有输入参数的值原创 2009-08-25 21:45:00 · 2400 阅读 · 0 评论 -
《代码大全》学习笔记一:第五章 软件构建中的设计
1、“深入一种语言去编程”,而非“在一种语言上去编程”。区别在于,不要将自己的思想受限于语言特性,而是首先决定表达的思想,然后使用特定的语言特性来表达这些实现。 2、软件设计的首要问题:管理复杂度。管理复杂度的两个行之有效的方法: 1)把任何人同一时间需要处理的本质复杂度的量减少到最少 所有软件设计的目标都是把复杂问题分解成简单的原创 2009-07-19 15:17:00 · 2337 阅读 · 0 评论 -
《代码大全》学习笔记——第十五章,使用条件语句
第十五章,使用条件语句前言15.1 if语句简单if-then语句:1、 首先写正常的代码路径,再处理不常见的情况。2、 确保对于等量的分支是正确的。3、 把正常的情况放在if后面而不是else后面。4、 让if后面跟一个有意义的句子。原创 2009-09-18 20:59:00 · 993 阅读 · 0 评论 -
《代码大全》学习笔记—— 第十七章,不常见的控制结构
第十七章,不常见的控制结构前言谨慎的使用这些控制结构,将会获得更多的帮助。17.1 子程序中有多处返回1、 如果能够增强可读性,那么就是用return。2、 用防卫子句来简化复杂的错误处理。3、 减少子程序中return的数量。 17.2递归原创 2009-09-18 21:02:00 · 1172 阅读 · 0 评论 -
重构手法之——Extract Method
概述你有一段代码可以被组织在一起并独立出来。将这段代码放进一个独立的函数中,并让函数名称解释该函数的用途。以后的笔记要多些自己的理解。而不单单是对文中内容的摘要。动机适用情况:主要是为了提高可理解性。1)函数过长;2)需要注释才能够理解——这两种情况下可以考虑使用此重构手法。目标:简短而又有良好命名的函数。好处原创 2009-10-19 21:23:00 · 2023 阅读 · 0 评论 -
测试驱动开发(TDD)
代码整洁可用(clean code that works )是TDD的追求目标。 测试驱动的规则:1、 只有自动测试失败时,我们才重写代码。2、 消除重复设计,优化设计结构。上面的规则派生的规范:1、 我们必须通过运行代码提供的反馈来做决定,并以此达到有机设计的目的。2、 我们必须自己写测试原创 2009-09-27 20:35:00 · 1544 阅读 · 0 评论 -
代码大全学习笔记
最近两个把《代码大全》的4至25章学习完了,感觉收获还是挺大的。下面是我的学习笔记,和大家分享http://d.download.youkuaiyun.com/down/1712490/chgaowei学习笔记中大部分是书中的重点内容,和部分我的个人理解。希望能和大家一起交流。原创 2009-10-03 08:41:00 · 2417 阅读 · 0 评论 -
软件体系结构的重构——定义
以前做过一个产品,共分为三层:平台层,应用服务器层,应用层。其中有一个业务流程,实现是在应用层,但它那里的信息不全,需要通过应用服务器层向平台层获取必要的业务数据,然后通过应用服务器层控制业务流程。当时考虑这个结构的时候,主要的出发点就是业务和控制分离,将业务处理从平台层剥离开来。当时,在具体是实施过程中,我们工程师对这种结构抵触心理很强烈。他认为我们的业务开发非常的繁琐,而且经常要贴“狗皮膏药”原创 2009-10-03 07:54:00 · 2955 阅读 · 0 评论 -
重构原则
1.1 何谓重构重构(名词):对软件内部结构的一种调整,目的是在不改变“软件可察行为”的前提下,提高其可理解性,降低修改成本。重构(动词):使用一系列的重构准则,在不改变“软件可察行为”的前提下,调整其结构。1、 重构的目的是使软件更容易被理解和修改。2、 重构不会改变软件“可察行为”。1.2 为何重构原创 2009-09-27 20:33:00 · 1851 阅读 · 0 评论