设计模式之观察者模式 1、观察者模式又叫做发布-订阅(Publish/Subscribe)模式。观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一主题对象,这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。UML图如下:
Windows核心编程(二十一)远程线程注入DLL windows内的各个进程有各自的地址空间。它们相互独立互不干扰保证了系统的安全性。但是windows也为调试器或是其他工具设计了一些函数,这些函数可以让一个进程对另一个进程进行操作。虽然他们是为调试器设计的,但是任何应用程序都可以调用它们 。接下来我们来谈谈使用远程线程来注入DLL。 从根本上说,DLL注入就是将某一DLL注入到某一进程的地址空间。该进程中的一个线程调用L
计算机网络(3)网络层 1、网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。网络在发送分组时不需要先建立连接,每一个分组(IP数据报)独立发送,与其前后的分组无关(不进行编号)。所传送的分组可能出错、丢失、重复和失序,也不保证分组交付的时限。2、TCP/IP体系中的网络层常常称为网际层或IP层。与IP协议配套的还有:地址解析协议ARP。逆地址解析协议PARP。网际控制报文协议ICMP。网际组管理
C++必知必会之(19)Command模式与好莱坞法则 1、当一个函数对象用作回调时,就是一个Command(命令)模式的实例。2、回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。3、回调是一种常见的编程技
操作系统(10)文件系统管理 1、文件系统是操作系统中负责存取和管理信息的模块,采用统一的方法管理用户信息和系统信息的检索、存储、更新、共享和保护。有逻辑文件和物理文件之分。可实现”按名存取“,以及使用路径名、文件名、文件内位移来执行数据的读、写、修改、删除操作。2、
C++必知必会之(29)虚构造函数与Prototype模式 1、有两个主要的原因需要使用“克隆”:必须(或更喜欢)对正在处理的对象的精确类型保持“不知情”;不希望改变被克隆的原始对象,也不希望受原始对象改变的影响。2、在C++中,提供了这种克隆对象的能力的成员函数,称为“虚构造函数”。当然,并不存在什么虚构造函数,但是生成对象的一份复制品通常涉及到通过一个虚函数对其类的构造函数的间接调用,因此,即使不是真的虚构造函数,效果上也是虚构造函数了
代码大全(1)之软件创建 软件创建:问题定义需求分析实现计划总体设计详细设计创建及实现系统集成单元测试系统测试校正性的维护功能强化“编程”隐含着把已经设计好的程序机械的翻译成机器语言的过程,“创建”指的是创造性和决策性活动,包含一些特定的任务:验证基础工作已经完成,可以进行创建工作设计和编写子程序与模块创立数据类型并命名变量选择控制结构并组织语句块找出
数据库开发(9)查询处理 1、查询处理步骤:1)语法分析与翻译。系统首先必须把查询语句翻译成系统的内部表示形式(关系代数表达式)。语法分析器检查用户查询的语法,验证查询中出现的关系名数据库中的关系名等。2)优化。构造具体有最小查询执行计划代价。为了优化查询,查询优化器必须知道每个操作的代价。3)执行。2、查询执行计划:用云执行一个查询的原语操作序列。查询执行引擎:接受一个查询执行计划,执行该计划并把结果
软件架构系列感想(六) 1、代码不会讲述完整的故事。编写好的代码很重要,重构迫使我们考虑让方法变得更小、更可复用和自文档化,每个人都应该追求易于阅读、理解和维护的好代码。了解系统的设计意图,可以通过代码库如何被拆分为子项目、目录、包、命名空间等对整体架构做出一些判断,也可以根据对这个项目有限的了解、业务领域、你对团队如何构建软件的期望以及你对所用技术的知识,做出自己的假设。(1)软件系统如何融入已有的系统形态(2)为什么...
软件架构系列感想(五) 1、通用的抽象集合。可以将软件系统简单的理解成由多个容器构成,容器又由多个组件构成,组件由一个或多个类实现。类(在一个面向对象系统里,类是最小结构单元)组件(组件可以想象成一个或多个类组成的逻辑群组,通常由多个类在更高层次的约束下组合而成)容器(指一个在其内部可以执行组件或驻留数据的东西)系统(系统是最高的抽象层次,代表了能够提供价值的东西)2、软件的静态视图。语境(设定场景的高层次图,包括关键的...
软件架构系列感想(四) 1、技术约束。时间和预算是大多数软件开发者都熟悉的约束,还有一些在大型组织里经常碰到的一些技术相关的约束:(1)批准的技术清单(目的是限制组织必须支持,运行,维护和购买许可证的技术)(2)现有系统的互操作性(有时别的系统需要和你构建的系统整合,这时组织性的约束规定了你可以用于整合的协议和技术)(3)目标部署平台(包括嵌入式设备、windows或Linux服务器的可用性,以及云)(4)技术成熟度(有...
软件架构系列感想(三) 1、未来的架构师在哪里?我们可能花了很长时间谈论编写代码、自动化测试、自动化部署、工具、各种技术,以及所有相关的流程,而可用的软件是关键。多想想这些问题:(1)你上次写代码是什么时候(2)你上次重构是什么时候(3)你上次测试你的代码是什么时候(4)你上次设计东西是什么时候(5)你上次从零开始设计一个软件系统是什么时候(6)你上次从零开始设计一个会由一个团队来实现的软件系统是什么时候2、有些人过于渴...
软件架构系列感想(二) 3、软件架构师是什么?应用程序架构的关注点是应用程序,通常包括将应用程序解构为类和组件,确保设计模式的正确应用,构建和使用框架等等。本质上,应用程序架构谈论的是软件设计的低级别切面,通常只考虑单一的技术栈。结构单元主要以软件为基础,包括编程语言和结构、类库、框架、api等。它由类、组件、函数、模块、设计模式等加以描述。应用程序架构着重考虑软件和代码组织。大多数软件系统实际上是由横跨不同层次和技术的...
软件架构系列感想(一) 1、什么是架构?架构是一种能力,架构角色则是要求你在具体事物中行使某些行为,而架构师则是用来标识这些能力与行为的一个职务。对于不同的人来说,可能意味着什么是不一样的。模块、连接、依赖和接口;大局观;改变成本很高的事情;难以改变的事情;更加兼顾全局的设计;接口而非实现;审美(比如艺术般的整洁代码);概念模型;满足非功能需求/质量属性;每件事情都有架构;沟通能力(抽象、语言、词汇);计划;一定程度的严...
《软件工程》之开发访谈 《立项阶段》1、立项建议——产品构思提交给总工程师,撰写立项建议书。2、可行性分析——制定调研计划,生成立项可行性分析报告。3、立项评审——形成立项评审记录表。4、项目筹备——任命项目经理、同时定义QA、CCB等角色。《计划阶段》1、客户需求——由项目经理和开发主管来参与客户需求开发,形成用户需求访谈录,编写用户需求说明书,项目经理组织组织评审。2、项目估计——
《软件工程》笔记 ——软件工程是一门研究应用工程化方法构建和维护有效的、实用的和高质量的软件的学科。工程包括了管理、过程和技术三个方面,过程指软件的开发、维护过程及管理过程。涉及程序设计语言、数据库、软件开发工具、系统平台、标准、设计模式等。目标:达到要求的软件功能。取得较好的软件性能。付出较低的开发成本。开发的软件易于移植。开发的软件易于维护,需要较低的维护费用。能按时完成开发
程序设计的50条感想 1、敏捷开发——在一个高度协作的环境中,不断地使用反馈进行自我调整和完善2、阅读代码的频率越高越好3、使用单元测试4、迭代和增量式的学习5、跟踪技术变化——你不需要精通所有技术,但需要清楚知道行业的方向,从而规划你的项目和职业生涯6、CRCC即类—职责—协作—的设计方法7、不要在前期做大量的设计8、不需要开发你能下载到的东西9、防止提交破坏系统的代码——(1)在本地
《软件调试》笔记 一、插装——开发人员编写的额外代码,来提高程序的可观察性和可控制性。二、发现bug的机会:(1)可调试的源代码(2)插装(3)宏定义(4)编译器标志(5)静态检查器(6)选择的库(7)链接器选项(8)代码插装工具(9)测试用例/输入数据(10)调试器:源代码、剖析、内存读取、操作系统调用跟踪器(如truss和strace)三、用户态调试器——查看调试目标状态
代码大全(9)之软件测试及调试 单元测试要点:对每个需求进行测试,以便确保需求得到实现对和设计有关程序进行测试以确保设计得到了实现在详细测试的基础上对需求和设计测试增加基本测试不完全测试善于结构的测试数据流测试(数据的状态:已定义数据、已使用数据、已无效的数据)测试用例:每个子程序的要求是否有自己的测试用例子程序结构的每个部分是否都有自己的测试用例程序中每一行代码都是否至少
代码大全(8)之软件质量 随项目增大而工作量增大的活动:计划管理交流需求开发系统功能设计接口设计和描述总体结构综合错误消除系统测试文档生成配置管理一般:你的软件配置管理计划是否用于帮助程序员,并能将额外开销减至最少你使用SCM手段能否避免对项目失控你所在组是否有修改请求,请示控制可以是非正式方式或正式方式你是否能比较正确地估计每次修改的影响