13 崔伟灿

尚未进行身份认证

我要认证

暂无相关简介

等级
TA的排名 12w+

HTML5 Canvas 流程图绘制

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

2013-09-25 11:15:07

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

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

2013-07-26 17:02:04

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

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

2013-07-26 10:25:14

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

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

2013-07-24 15:52:38

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

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

2013-07-24 15:34:57

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

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

2013-07-24 08:31:09

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

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

2013-07-22 16:51:19

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

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

2013-06-14 13:50:47

JqueryUI对话框实现示例

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

2013-05-09 17:48:01

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

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

2013-05-08 18:25:28

C#读取CSV文件

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

2013-04-24 11:11:39

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

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

2013-04-16 18:25:11

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

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

2013-04-15 09:45:47

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

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

2013-03-11 16:33:31

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

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

2013-03-11 12:51:23

TCP细节探究:TCP连接终止

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

2013-03-08 15:54:24

TCP细节探究:TCP数据交互

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

2013-03-08 15:52:25

TCP细节探究:TCP连接建立

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

2013-03-08 14:39:34

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

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

2013-02-27 16:47:32

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

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

2013-02-26 13:23:39

查看更多

勋章 我的勋章
    暂无奖章