自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(41)
  • 资源 (8)
  • 收藏
  • 关注

原创 HTML5 Canvas 流程图绘制

HTML5 Canvas 流程图绘制最近工作之余体验了一把HTML5 Canvas的绘图功能,实现了一简单的流程图绘制功能,个人感觉图形绘制操作还是比较简单易用的,其图形变换功能支持的也非常的不错以下是我实现的流程图界面,功能还有待完善

2013-09-25 11:15:07 1762 5

原创 如何开展软件架构之概念架构

如何开展软件架构之概念架构 到目前为止,我们已经完成了需求的分析过程,总结来说,主要的步聚是 一)需求结构化, 二)分析约束影响 三)重点关注质量需求。 那么接下来的阶段则是系统的概念架构了,这也许是大家最感兴趣的话题,前面提到系统的多层架构,各层之间相互隔离,下层提供服务而不知道上层应用,上层也只通过接口与下层交互,每一层的修改均不会影响其它层的逻辑,看上去有多华丽就有多华丽

2013-07-26 17:02:04 587

原创 如何开展软件架构之什么是业务逻辑层

如何开展软件架构之什么是业务逻辑层在软件架构领域中,有一种很流行的分层方式,即三层架构,分为表现层,业务逻辑层,数据访问层。甚至在一些设计中,进一步将业务逻辑层再细分为应用服务层与业务服务层。三层架构分层如下图1所示:图1很明显,以上三层架构是按逻辑分层,其中,表现层:职责是负责接收用户数据,并展示处理结果,如软件中的各种窗口,页面等。数据访问层:职责是负责封装数据文件

2013-07-26 10:25:14 1062

原创 如何开展软件架构之需求分析4

如何开展软件架构之需求分析4在《如何开展软件架构之需求》里提到一种描述功能需求的用例,现在来具体看一下如何用这一用例格式描述需求,关于这种格式的介绍,可具体参考《编写有效用例》一书如下所示1用例名:U2查看打卡记录层次:用户前置条件:已经登入系统步聚:1.点击左侧导航进入辅助办公菜单2.点击签到记录3.在签到记录页面选择待查询报告的员工4.在签到记录计页面选

2013-07-24 15:52:38 466

原创 如何开展软件架构之需求分析3

如何开展软件架构之需求分析3 前面提到在需求分析过程中,需要将需求结构化,然后依据该需求矩阵,通过推荐需求,分析约束来分析隐藏需求。 现在我们来看一个具体的例子 如下图1所示 图1 其上图中,颜色相同且之间有联线的,表示是两者之间有相互的制约关系。 比如, 1)对于互联网这么一个业务环境,网站必然会有很多的僵尸用户,考虑数据库容量有效,需开发相应的僵尸管理模块,由该

2013-07-24 15:34:57 478 1

原创 如何开展软件架构之需求分析2

如何开展软件架构之需求分析2 前面提到,在需求分析阶段,架构师的两个重要的工作步聚为: 1:结构化需求 2:分析约束影响 以上两个步聚都是为了解各需求之间的联系,发现隐藏需求而服务,相对的从业务需求到用 户需求的分析,再到开发需求的分析,一般不太容易遗漏需求,而平时较少考虑的则是由于 约束产生的设计或功能或质量需求。 现在我们来看一下约束产生的来源: A)业务环

2013-07-24 08:31:09 508

原创 如何开展软件架构之需求分析

如何开展软件架构之需求分析 在开始讨论如何开展软件架构之前,先让我们来看一张漫画。相信大家看到这漫画的时候,总会不自主地会心一笑,客户希望得到礼物,我们却给了他一骨头。是什么原因造成这一情况呢?可能原因有二:一):未进行充分地需求分析。解析:架构师未能初别用户群及使用环境约束因素,也许在接到项目时,他还在想着上一个为狗开发的项目,在这个项目中自然而然地认为用户是狗。

2013-07-22 16:51:19 1078 1

原创 .Net的垃圾自动回收机制之一

.Net的垃圾自动回收机制之一内存管理是软件开发过程中相当重要的一环。据调查,软件故障中大多数异常均是于内存管理相关,比如野指针,比如重复释放,再比如内存泄露等。为提高软件开发效率,很多开发平台如.Net, Java 等提供了垃圾自动回收机制(GC),替开发人员管理内存。那么这垃圾回收机(GC)是如何分配内存的?又是如何释放垃圾内存的?GC有内存碎片的问题吗?在开始回答这些问题之前

2013-06-14 13:50:47 510

原创 JqueryUI对话框实现示例

JqueryUI对话框实现示例在网页设计中,不论是为了减少于由于页面跳转而带来的不友好用户体验,还是为了维持桌面应用程序的使用习惯,对话框的设计都是不可或缺的。目前JqueryUI提供的对话框支持使用相对比较的方便,示例代码如下所示:body>    form id="form1" runat="server">    div id="dlg">         I

2013-05-09 17:48:01 468

原创 软件调试系列:.Net应用程序调试之设置断点

.Net应用程序调试之设置断点在软件调试过程中,断点功能至关重要,想像一下,如果没有断点功能,那么当我们需要查看特定函数的执行情况时,该是多么的困难。.Net应用程序虽然是在执行过程中将中间代码编译成本地代码,也就是说如果中间代码未被编译成本地代码之前,我们无法用bp 命令来设置断点,而我们又很难知道中间代码何时被编译成本地代码,看似是一个很困难的任务,但所幸Windbg.exe

2013-05-08 18:25:28 427

原创 C#读取CSV文件

C#读取CSV文件很多项目中都需要操作CSV文件,我看到很多人都会编码读取CSV文件中的第一行并解释其中的每一个列的值,相对来说这有难度,一来要求开发人员对字符串处理比较熟悉,二来要求对CSV的文件结构要有相当的了解,难度较大,编写的代码质量也要经过一段时间的考验,但其实有一种更简单的方法,即使用微软的文本驱动程序,以表的形式来访问CSV文件。具体代码如下所示  pub

2013-04-24 11:11:39 663

原创 软件调试系列: .Net应用程序软件崩溃调试

.Net应用程序软件崩溃调试排查软件崩溃问题,最重要的一点就是找到软件出错点,相比较C++应用程序来说,.Net应用程序会稍有不同。通常,排查软件崩溃问题的思路是1:确认出错的函数2:确认出错的操作指令现在举例说明.Net 应用程序如何来调试 崩溃问题步聚1:使用~*kbn显示所有线程调用线,找到异常线程 .  0  Id:

2013-04-16 18:25:11 707

原创 软件调试系列:.Net应用程序编译及执行过程

.Net应用程序编译及执行过程与传统的Windows应用程序相比,.Net应用程序有很多不同的地方,尤其是在编译与执行期间。首先来看一下编译过程,传统的Windows应用程序会被编译器直接编译成与特定机器相关的本地应用程序,这类程序则只能在特定操作系统及硬件系统上运行,而.Net应用程序在编译时只会被编译成MSIL(中间代码),在运行期间被即时编译成本地指令,从而可达到跨平台的效果

2013-04-15 09:45:47 453

原创 TCP细节探究:TCP坚持定时器

四:TCP坚持定时器在TCP连接双方,均有一个接收缓存,当接收缓存满时,接收端会回复发送端一个窗口大小为0的报文,当接收端的接收缓存可用时,接收端会再次回复一个报告窗口大小的报文,但由于ACK报文的传递是不可靠的,如若该窗口大小更新的ACK报文丢失,将使得发送端永远不会再向接收端发送数据,因为它还一直以为接收端的缓存已满。为了解决该问题,TCP协议规定发送端定期向接收端发送一个字节长度的报

2013-03-11 16:33:31 622

原创 TCP细节探究:TCP超时/丢失重传

三:TCP超时/丢失重传Nagle算法要求一条TCP连接上最多只有一个未被确认的报文,发送方发送一个TCP报文,接收方确认该报文,发送方再发送下一个报文,若发送方在一定时间内未收到确认,则再重发报文。相对来说Nagle算法相对简单且不容易出错,但却降低了网络的吞吐量,也增加了网络流量。在实际的TCP实现中,接收方往往一次确认一批的TCP报文,且确认报文与接收方发往发送方的报文一同回复,以减

2013-03-11 12:51:23 1163

原创 TCP细节探究:TCP连接终止

六:TCP连接终止TCP为应用层提供全双工服务,意味着在终止连接时,需要关闭连接两端。与建立连接是的三次握手协议,类似的,终止连接需要四次握手,这四次握手的流程是:1客户端发送FIN终止连接报文2服务器端发送ACK确认报3服务器端发送FIN终止连接报文4客户端发送ACK确认对比连接建立的三次握手,注意到步聚2与步聚3没有合并成一个报文,原因是由于服务器端关闭连接是由应用层触

2013-03-08 15:54:24 508

原创 TCP细节探究:TCP数据交互

二:TCP数据交互正如前面所说的TCP协议是一可靠协议,其原因就是发送方与接收方之间存在着数据到达确认机制,当发送方在一定时间内未收到确认或接收方收到乱序的报文时重复发送ACK都会触发发送方重发报文。观察以上抓包,其中序号477651到477662为客户端与服务器之间的数据交互,在此交互过程中, 客户端连续向服务端发送10个1024长度的数据包,其C++代码如下所示for ( i=

2013-03-08 15:52:25 551

原创 TCP细节探究:TCP连接建立

目前大多数的C/S架构的系统,各组件之间的通信方式都基本采用TCP协议,主要是因为TCP协议是一种稳定,可靠的传输协议,但对于TCP协议细节却并不一定被大多数人所熟知。故本文介绍在TCP的一些细节,供大家讨论了解一:TCP连接建立TCP协议传输可靠性最大的理由就是对每一个传输的字节进行编码,如果接收方收到的字节序号序列中出现了丢失,发送方就会将丢失的字节序号重发,以此来保证传输的可

2013-03-08 14:39:34 587

原创 软件调试系列:高CPU排查方法浅谈

软件性能较差,占用CPU较多,往往是由于某段代码逻辑算法不佳导致,那如何在数以千计的函数中找到问题函数呢?这类问题的排查有很多方法,这里介绍如何用神器Windbg是排查。其中,排查步骤如下步聚1:在使用!runaway命令比较不同时间各线程占用CPU时间,找到CPU时间增涨较多的线程,那么就初步定位了问题函数所在的问题线程,步聚2:然后在不同的时刻观察问题线程的调用栈,如果多次观察

2013-02-27 16:47:32 800

原创 软件调试系列:谁动了我的线程

死锁的原因很多,其中一种比较常见的是 线程占用临界区后被强杀,导致临界区没有释放,因此当其它线程访问该临界区就会死等。可是到底是谁强杀了线程了呢?被强杀的线程当时的调用线又是什么呢?对于问题1:有两种办法找到答案。一)搜索所有的代码,查看是否有调用terminatethread的地方。二)在内存中搜索调用terminatethread的指令。方法一有一定难度,因为开发人员可

2013-02-26 13:23:39 403

原创 项目总结

年底了,项目也到输出测试尾期了,夜深人静,趁明天不上班,现在有个好心情~总结一下做的好的也就不提了,讲讲做的不好的地方吧1:技术上,以我现在所掌据的技能,以足够应付目前的工作,但也仅此而己,总没有足够的毅力去好好的学习,年初计划考的软件架构师,也没有准备去考,实在不应该,这点从现在做起,准备多花点时间看看书,学会利用时间片来学习2:管理 在项目管理上,我已深刻认识到要想取得成功

2013-01-25 23:42:46 386

原创 软件调试系列:死锁篇之寻找消失的线程

一:遭遇挑战小鸟:"咦?这软件怎么没有响应了"小菜:"哦,从dump文件看,可能是某个线程占用了一个锁,但在该锁被释放前,该线程却被强杀了吧...."小鸟:"这可能吗?是什么线程消失了?当时它在做什么呢?"小菜:"这个..只是猜测,线程都消失了,怎么知道是什么线程,并且知道当时在做什么呢?"二:动动脑小鸟:"线程被强制结束,会导致资源泄漏的. 不知道泄漏

2012-04-16 14:28:52 1335 1

原创 面向方面编程浅谈

随着计算机越来越广泛地应用于各个行业,应用软件的规模不断扩大,复杂度不断提高,为适应用户需求的变化,在软件的开发方法上进行了一系列的研究,以提高软件的扩展性,可维护性,易用性等来提高软件质量,从面向过程的程序设计方法, 到现在比较流行的面向对象程序设计方法,再到近几年新提出的面向服务的设计思想,无不体现了人们在这方面的努力,使软件各功能内部高内聚,而之间又松耦合。 虽然面向对象的设计方法,

2012-04-11 14:11:46 450

原创 面向方面编程浅谈

随着计算机越来越广泛地应用于各个行业,应用软件的规模不断扩大,复杂度不断提高,为适应用户需求的变化,在软件的开发方法上进行了一系列的研究,以提高软件的扩展性,可维护性,易用性等来提高软件质量,从面向过程的程序设计方法, 到现在比较流行的面向对象程序设计方法,再到近几年新提出的面向服务的设计思想,无不体现了人们在这方面的努力,使软件各功能内部高内聚,而之间又松耦合。虽然面向对象的设计方法,以现实

2012-04-11 14:10:21 51

原创 软件调试系列:内存泄露篇之基本调试步聚

相比崩溃,内存泄漏是一种比较容易排查的BUG,只需按照即定的操作步聚,重现一次内存泄露,即可找出内存泄露所在的代码行。现在介绍一下如何利用windbg提供的工具来排查内存泄漏问题.首先需要设置PDB文件的路径,设置环境变量:变量名为_NT_SYMBOL_PATH,变量值为PDB文件所在的路径我的设置是:C:\WINDOWS\Symbols;C:\WINDOWS\system32;E

2012-04-09 15:06:45 763

原创 软件调试系列:崩溃篇之内存值异常

本来想尽快写一系列文章来介绍各种常见缺陷的软件调试文章,但由于工作原因并且大家的反映似乎不太好,所以我也有点偷懒了。不管怎么样,正好现在有空,咱来聊一聊最近我查的一个崩溃BUG吧。前几天接手排查一个崩溃BUG,测试部报告说该BUG在两台电脑上出现过,并且错误提示信息一模一样,这个BUG直接原因很容易定位,通过windbg分析该BUG的dump文件发现,程序在释放内存时出错,其调用栈如下图1所示

2012-03-29 15:39:09 1906 10

原创 软件调试系列:软件崩溃篇之内存异常崩溃

导致崩溃的情况很多,同样崩溃的表现也是千差万别,既然如此,那么还是让我们先来看一下这个崩溃是如何用Windbg分析的吧。某年某月某日,测试人员报告说,Sample.exe软件崩溃了,两名开发人员小崔与小阮闻讯, 也随即崩溃了.从Sample.exe崩溃时截下的dump文件看,当时出错的线程调用栈是:0:000> kLChildEBP RetAddr  00100350 77d1

2012-03-19 11:43:50 1533 1

原创 软件调试系

导致崩溃的情况很多,同样崩溃的表现也是千差万别,既然如此,那么还是让我们先来看一下这个崩溃是如何用Windbg分析的吧。某年某月某日,测试人员报告说,Sample.exe软件崩溃了,两名开发人员小崔与小阮闻讯, 也随即崩溃了.从Sample.exe崩溃时截下的dump文件看,当时出错的线程调用栈是:0:000> kLChildEBP RetAddr  00100350 77d193

2012-03-19 11:42:23 157

原创 软件调试系列:软件崩溃篇之崩溃BUG基本调试步骤

在各种软件Bug类型中,崩溃当属用户体验最差的Bug之一,同时,这些类型的Bug也是最难查,最令人困扰的Bug之一,其它类型如死锁,内存泄露,相比之下,就显得小儿科多了。常见的软件崩溃主要是断言与未处理异常,断言引起的软件崩溃相对来说比较容易定位,而未处理异常的定位比较困难,现在看看如何利用Windbg进行未处理异常错误的排查,其步聚如下:1.利用windbg打开软件出错时抓取的Dump文

2012-03-16 11:41:24 1940 3

原创 软件调试系列之Windbg探究(下)

三配置调试器相关信息参数    这里有两点信息需要设置    a:符号文件(PDB文件)路径。    b:源代码路径。    1:设置符号文件路径:    在调试时,我们通常需要知道当前软件的运行状态,如当前出错线程的调用栈是什么,出错的函数名,及该函数的参数和局部变量值是什么。仅仅看到如下的截图1就来分析,调试Bug是很不靠谱,也是很不负责任的行为。截图1

2012-03-15 13:13:03 2911 2

原创 软件调试系列之Windbg探究(上)

套用80/20原则,我们大部分时候只使用了Windbg的20%功能,当然我没有精确统计过,但也相差无几,Windbg的上百条功能命令中,我们平时工作也就是使用了其中的几组命令而己,为了减少大家学习的负担,我准备在实战中讲解Windbg的常用功能。那么,让我们开始Windbg实战之旅吧      现在,测试部江湖告急,报告说他无意中发现软件Sample.exe崩溃了。      “很奇怪

2012-03-14 14:29:05 1691 2

原创 软件调试系列之初识调试之剑-Windbg

当测试人员向开发人员反馈问题时,是否经常听到这么一句:“我的电脑上没有问题”,这在新手口中,更容易听到。但是为什么他们会这么说呢,究其原因,可能是因为测试人员的电脑上出现的Bug让他束手无措,无计可施,所以只能搬出“我的电脑没问题”这一说辞来推诿,以证明自己的软件没有问题。       为了避免这种情况,我们需要从两方面着手,      1:在测试人员发现问题时能更有效地保存软件出错时

2012-03-13 09:59:43 3428 2

原创 软件调试系列序言

前段时间,我收到了大学母校的一封邮件,信中说学校为了更好地建立学校与校友的联系,打算成立一个校友导师团,所以要对毕业生做一个问卷调查。这份调查中有一题是评价母校的课程设置是否合理。大学的课程设置是否合理?我真不知道怎么回答,说合理吧,好像很多课程与工作也没什么关系,工作中感觉都用不上。说不合理吧,也不是这么回事情,平心而论,大学时学的知识或学习方式在很大程度上帮助我更快地掌握新的知识。但是

2012-03-12 09:43:38 1075 4

原创 Eralng练习题(1)

<br />题目:编程计算 表达式1-2+3-4+5-6+7+........................n<br />答案:<br /> <br />-module(alg).<br />-export([calc/1]).<br /><br />calc(1)-><br />    1;<br />calc(X)-><br />    case (X rem 2) of<br />        1 -> X + calc(X-1);<br />        0 ->

2010-11-01 21:42:00 319

原创 软件开发方法学 GRPAPPLE理解

一:需求收集 1发现业务过程:软件必然用于解决某一实际问题,因此在项目开始时,需要了解待解决的问题的操作过程。将该过程描述成一组活动图,泳道。领域分析:根据先前会谈结果,分析各名词,动词,绘制高层类图,理解待解决的业务领域。同时可对类图根据性质进行分组,提取抽象类,绘制类之间的关联,初步填充类的属性与操作。该过程结果是一组类图开发系统映象:大致定义系统是怎么样的,如采用Linux操作系统还是win7 ,是桌面开发应用程序,还是网页程序。收集系统需求:收集最终用户希望如何使用该软件及希望软件实现哪些功能。该过

2010-07-19 13:57:00 271

原创 Erlang/OTP's global module

  Erlang/OTP's global 模块可用于以原子的形式为Erlang分布式系统中的进程命名,确保同一时刻分布式系统中的每个进程都有唯一的一个名字。  现在来看看global模块在实际操作中的表现吧,我们在两个一开始并未连接的Erlang结点中注册同一个名字,然后再将这两个结点连接起来,这时,系统将监测到两个节点中有相同的名字,将注销一个节点中的名字注册。  首先,在两个独立的节点上分别注册名字a(这两个节点分别以erl -sname one and erl -sname two启动), 在one

2010-07-14 21:06:00 613

原创 设计模式之命令模式应用

由于工作的关系,日常工作中编码任务总不是很多,绝大部分时间都贡献给了Bug,使得每一次编程体验都来得异常珍贵。前段时间接到一个任务:编写低层模块支持常见控件的点击,文本输入等动作,以用于自动化测试。难得的一次编码任务,现将整个设计过程与大家分享一下,以增加各位的编程体验。虽然学习设计模式已经一年多了,但思维模式的转变并不是一件很容易的事,咱自学习编程以来用面向过程的方式编写了近7万行的代码,这方面是轻车熟路啊。一上手,立即想出一种设计方案,其伪代码如下。Control oControl = Findctrl

2010-07-02 22:15:00 408

原创 WPF编程 第一章:进程与窗口

当我们编写WPF(Microsoft Windows Presentation Foundation)应用程序时,通常会花很长的时间来创建进程对象Application 与 窗体对象 Window。一个简单的WPF 应用程序可能是这样的:SayHello.cs //-----------------------------------------// SayHello.cs (c) 2006 by Charles Petzold//----------------------------------

2010-06-26 13:16:00 1323

原创 隐藏cmd窗口执行dos命令

有些时候我们会在程序中使用dos命令执行一些操作,运行批处理文件之类的,但发现在使用cmd的时候,会显示一个黑色的控制台窗口,很不友好。最近研究发现可以使用CreateProcess来隐藏cmd窗口,该函数的参数相关设置如下:BOOL CreateProcess(  LPCTSTR lpApplicationName,                                     "

2010-04-23 22:05:00 6668 1

原创 如何查出对象被删除时的函数调用栈

如何查出对象被删除时的函数调用栈?挺简单的问题,却被我想复杂了,反省一下!直接找到对象析构函数,设置断点即可~而我的做法却是在delete函数设置数据断点,比较被删除的内存块的第一个内存值是否为指定对象的虚函数表地址值。。。反省~~~

2010-04-10 21:03:00 329

软件需求最佳实践.part1

软件需求最佳实践

2012-02-15

GOF 设计模式 lexi 源码示例

GOF 设计模式 lexi 源码 GOF 设计模式 lexi 源码

2010-11-25

金字塔原理-思考写作与制作图表的逻辑

金字塔原理-思考写作与制作图表的逻辑.pdf

2010-10-08

The Complete Effect and HLSL Guide

The Complete Effect and HLSL Guide

2010-09-21

DirectX10 SDK 中文文档(部分)

DirectX10 SDK 中文文档(部分)DirectX10 SDK 中文文档(部分)DirectX10 SDK 中文文档(部分)DirectX10 SDK 中文文档(部分)DirectX10 SDK 中文文档(部分)DirectX10 SDK 中文文档(部分)DirectX10 SDK 中文文档(部分)DirectX10 SDK 中文文档(部分)DirectX10 SDK 中文文档(部分)DirectX10 SDK 中文文档(部分)

2010-09-19

IDL精髓(经典之作)

IDL精髓(经典之作)~~~~~~~~~~~~

2009-04-08

ATL开发指南 经典之作

ATL 入门 ~~~~~~~~~~~~~~~~~

2009-04-08

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除