随笔分类 - [20]DesignAnalysis设计分析
-
性能优化-开发流程中的性能优化
摘要:性能优化-开发流程中的性能优化性能优化不是某一个人的职责范围,也不是某一个开发阶段的工作内容,而应该是贯穿整个开发流程、每个人员都参与的活动。如果等到项目上线后再进行优化,会导致我们成为需求的被动接受者。为了避免这种情况,我们应该主动出击,在项目初始阶段就将性能问题融入进去。需求讨论阶段开发人员分析实现方案,提出建议,在不影响产品目的的前提下,引导产品经理对需求做一些调整以获取更高的性能。比如对于产品经理提出的一些实时性统计,可以酌情修改为准实时统计,将缓存利用起来;对于初始就需要返回大量数据的页面,可以适当调整需求,减少数据量。方案设计阶段明确产品业务架构,挖掘潜在风险点;注重动静数据的分离 阅读全文
-
百万行mysql数据库优化和10G大文件上传方案
摘要:百万行mysql数据库优化和10G大文件上传方案最近这几天正在忙这个优化的方案,一直没时间耍,忙碌了一段时间终于还是拿下了这个项目?项目中不要每次都把程序上的问题,让mysql数据库来承担,它只是个mysql而已。问题1:针对MySQL Community5.5+版本优化业务执行速度,提高整体系统效率测试服务器硬件环境:Intel Core i5,8gb内存,7200rpm硬盘,Win7专业版Table名称读取频率写入频率最低连续读取速度最低连续写入速度预估数据量C….频繁不频繁30行/150ms100行/s百万行D…频繁不频繁30行/150ms100行/s百万行De…..频繁不频繁30行/1 阅读全文
-
40w会议投票系统优化方案
摘要:40w会议投票系统优化方案最近2天谈了一个项目,根据提出的需求是,该系统本来是属于一个大系统的分割出来的一个很小的系统,但是由于是并发关系会耗费资源很大,所以分割出来。据了解,系统采用的mysql+java+tomcat,他们将业务逻辑放在数据库中采用存储过程处理,界面采用的js封装的控件实现,系统运行就很快吃光了内存(8g)。系统解决方案可以重几个方面入手:(1) 系统采用的是Java+Tomcat+Mysql,可以对Java虚拟机JVM进行配置优化。JVM一般现在的垃圾回收都是采用的分代回收的方式实现的。配置Java –Xmx3800m –Xms3800m –Xmn2g –Xss128k 阅读全文
-
DDD:订单管理 之 如何组织代码
摘要:DDD:订单管理 之 如何组织代码背景系统开发最难的是职责的合理分配,或者叫:“如何合理的组织代码”,今天说一个关于这方面问题的示例,希望大家多批评。示例背景参考数据字典需求OrderCode必须唯一。Total = Sum(Subtotal)。订单有三种状态:【未提交】、【待审核】和【已审核】,合理的状态迁移有:【未提交】----》【待审核】和【待审核】----》【已审核】,只有处于【未提交】状态的订单能修改。订单和订单项中的状态必须合法,规则自己定义。示例实现项目结构Application:应用层,负责领域逻辑的封装。主要角色:ApplicationService、CommandHandl 阅读全文
-
AOP之拦截函数调用链实现
摘要:AOP之拦截函数调用链实现定义函数A,B,C,调用A->B->C,这样就形成了函数静态调用链,而AOP要做的是能动态的添加多个B,形成A->B1->B2->B3...->C这样的效果,在EntLib(MS的企业库)Unity中有这样的实现,不过要看明白里面的代码的确需要花不少脑子,3年前看过里面的代码并做了记录,但是这两天翻出来看时照样化了很大精力,并杀死杀伤大量脑细胞,于是痛下决心将整个过程整理并画出时序图。测试代码:View Codepublic partial class Form1 : Form { public Form1() { ... 阅读全文
-
消息服务介绍
摘要:消息服务介绍前言2010年为公司设计的一套消息服务,目前已经运用到多个大型企业项目上。共分为管理配置功能和服务两个核心内容。消息服务MES是执行层面的管理系统,它的核心是事件驱动,而消息服务是它的基础,它提供了信息集成的能力。功能目标:为业务模块之间的消息驱动提供基础支持。消息内容来源于各个业务模块,可包括订单状态变更、作业状态变更、计划下达、异常报警等。各个业务模块将消息发送到消息服务上的指定通道上,MES框架将定期检索通道,检索到新消息后将在主界面上提示收到消息,当接收人员查看消息时可直接打开功能页面,查看相关数据或者执行自定义操作(比如回发一条确认消息)。服务架构消息通道配置界面服务监视 阅读全文
-
输入参数能动态调决定调用哪个实现类
摘要:输入参数能动态调决定调用哪个实现类 spring的一个特性今天做公司的以前项目的时候发现项目中有个特别好的东西,记录下来,分享一下发现spring有个这样的功能,我也不知道这个是东西应该怎么称呼,就是通过输入参数,动态决定调用接口的实现类。简单理解就是在spring配置文件定义若干个参数,然后,定义同样多的实现类实现同一个接口,在接口调用方法中,通过输入参数,就能动态决定接口调用具体哪个实现类。这样的好处就是对外发布接口时,接口通过参数能动态的调用某个服务。如果你注重于系统的可扩展性,这个方法确实是个好方法,我重新建了个工程,用来更加简明的理解这个实现过程。工程结构如图:myeclipse工程 阅读全文
-
动态加载与插件系统的初步实现(3):WinForm示例
摘要:动态加载与插件系统的初步实现(三):WinForm示例代码文件在此Download,本文章围绕前文所述默认AppDomain、插件容器AppDomain两个域及IPlugin、PluginProvider、PluginProxy3个类的使用与变化进行。添加WinForm项目Host、类库Plugin、引用System.Windows.Forms;的类库Plugin_A与Plugin_B,其中Plugin_A、Plugin_B的项目属性中,“生成”选项卡中“输出路径”设置为..\Host\bin\Debug\,即指向Host项目的Bin目录。考虑到WinForm项目常常涉及多级菜单构建,这里以两 阅读全文
-
模板引擎开发3自定义标签的处理
摘要:模板引擎开发(三)-自定义标签的处理自定义标签大致可以理解为一个HTML代码块,也可以指向一个HTML文件。在模板页中,很多地方需要相同的内容,例如页面的头部、尾部等,这个时候,可以利用自定义标签来定义HTML代码,然后在模板页中引用就可以了。自定义标签的格式如下:{%@ pageTop%} 页面顶部的顶部的自定义标签;自定义标签中的HTML代码,我用了XML来记录,当然也有可视化的编辑界面来操作,在这里就不再缀述,只是说明一下原理即可,XML如下: PageTop page PageTop.html logo 信息化动力核心 ]]> ... 阅读全文
-
重视命名,应该没有看起来那么简单
摘要:重视命名,应该没有看起来那么简单背景接触了一些非常优秀的编程人才,发现他们有一个共同的特点:“重视命名”,记得一位大师也曾说过:“命名和缓存是他最头痛的两个问题”,我不是一个注重细节的人,最起码从骨子里不是,因此我吃了不少苦头,我需要注重细节,从命名开始。这篇文章不会介绍如何更好的命名,关于这方便的资料,可以去买一些这些方面的书,设计模式固然必不可少,但是现在如果让我排一个优先级的话,我更关注代码可读性和命名,一些推荐的图书:《实现模式》、《代码质量》、《代码阅读》、《编写可读代码的艺术》、《微软框架设计规范》等。为何命名如此重要好的名称代表了合理的职责分配。好的名称代表了清晰的思路。好的名称 阅读全文
-
使用WebDriver遇到的那些坑
摘要:使用WebDriver遇到的那些坑使用WebDriver遇到的那些坑2013-06-25 22:44 by 黄博文,273阅读,2评论,收藏,编辑在做web项目的自动化端到端测试时主要使用的是Selenium WebDriver来驱动浏览器。Selenium WebDriver的优点是支持的语言多,支持的浏览器多。主流的浏览器Chrome、Firefox、IE等都支持,手机上的浏览器Android、IPhone等也支持,甚至还支持PhantomJS(由于PhantomJS跑测试时并不需要渲染元素,所以执行速度快)。但是我在使用Selenium WebDriver时,遇到了很多坑。这些问题,有的 阅读全文
-
正则表达式引擎:nfa的转换规则。
摘要:正则表达式引擎:nfa的转换规则。正则到nfa前言在写代码的过程中,本来还想根据龙书上的说明来实现re到nfa的转换。可是写代码的时候发现,根据课本来会生成很多的无用过渡节点和空转换边,需要许多的代码。为了简化代码,我实现了我自己的re到nfa的规则。注意我的这套re规则只包括如下几种类型:闭包,即*运算符一个或多个,即+运算符存在或不存在,即?运算符。这三个运算符的优先级最高而且都是单目运算符。括号括起来的,即成对的括号,其实也不算运算符,只能当作分隔符。中括号括起来的,作为假名,也算是分隔符连接运算符,即.运算符,但是在输入re的时候默认不输入这个符号,只有在处理输入的时候才添加这个符号。 阅读全文
-
JIT动态编译器的原理与实现之Interpreter3
摘要:JIT动态编译器的原理与实现之Interpreter(解释器)的实现(三) 接下来,就是要实现一个虚拟机了。记得编码高质量的代码中有一条:不要过早地优化你的代码。所以,也本着循序渐进的原则,我将从实现一个解释器开始,逐步过渡到JIT动态编译器,这样的演化可以使原理看起来更清晰。 解释器的原理很简单,就是一条指令一条指令的解释并执行。具体流程分为:取出指令-解码指令-执行-返回主流程。这样形成一个无限循环,如下图所示: 这里的主流程就是上篇定义的程序rom.bin。但rom.bin不能直接运行,需要一个解释器来包裹它,来解释执行。解释器放在一个无限循环中,使得主流程无限运行不停止:?voidlo 阅读全文
-
银行快捷支付的思考
摘要:银行快捷支付的思考网上对银行快捷支付一片叫好,但是大家貌似都忽略一个问题,我甚至没法关闭这个这个功能,也就是说我的帐号永远都留了一个偏门给支付宝!1. 如果将银行比作一个家的话,我有三个大门及对应的钥匙,如下图,我需要持身份证到银行签订协议才能获取,也就是说,我在银行的钱只能从这三个大门出去。2. 有了快捷支付后,你只需要输入(银行卡号,身份证号,手机号),淘宝会返回短信认证码(注意是淘宝,不是银行),并勾选2份协议。就可以付款了。问题: 貌似看,上两个模型都没什么问题,无非是你多了个付钱的方式,而且你签订了协议。但我个人认为这份协议有很大的问题!因为银行没有尽到(完整的)审查的义务(尽快输入 阅读全文
-
跨站请求伪造(Cross Site Request Forgery (CSRF))
摘要:跨站请求伪造(Cross Site Request Forgery (CSRF))跨站请求伪造(Cross Site Request Forgery (CSRF)) 跨站请求伪造(Cross Site Request Forgery (CSRF))也被称为:one click attack/session riding,缩写为:CSRF/XSRF,是一种挟制终端用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。攻击人员通过一些手段让终端用户点击存在攻击的链接或者页面,例如攻击人员通过xss漏洞在终端用户的页面中执行<img src="http://www.myban 阅读全文
-
对dump脱壳的一点思考
摘要:对dump脱壳的一点思考偶然翻了一下手机日历,原来今天是夏至啊,时间过的真快。ISCC的比赛已经持续了2个多月了,我也跟着比赛的那些题目学了2个月.......虽然过程很辛苦,但感觉还是很幸运的,能在大三的时候遇到ISCC,不管怎样,对我来说都会是一个很好的锻炼机会。在做综合关的逆向破解的题目,遇到了很多蛋疼的问题,磕磕碰碰把《加密与解密》看完了。还是老习惯,把这1个多星期以后学到的,想到的做一个总结,希望能有一个思想上的提高,也希望能对其他人有一个借鉴的效果吧。这里想起lenus大神的一句话:Hacker的精神里面除了学习(learn)的第一精神以外,还应该是共享(share)的精神。好,废 阅读全文
-
重新诠释的OSGi规范
摘要:重新诠释的OSGi规范 上周五部门开会讨论新一代产品(基于.net Winform)的设计规范,从设计规范慢慢讨论到体系结构等架构存在的问题,诸如菜单、工具条、状态条、界面布局等不能实现配置化和自动化,子系统之间拥有强依赖,甚至产生强依赖等等,最后我提出通过OSGi 框架来解决界面和模块之间的问题,并立下军令状一周内把核心框架Beta搭建完毕,第二周进行一次培训。 基于项目的特点,结合贞宝兄的OSGi.Net 和Mono.Addins 进行了重新诠释,在两天半的时间里通过Mono.Addins 和NLite 的依赖注入容器相结合实现了诠释后的OSGi规范,再这里首先感谢贞宝兄在OSGi规范的布 阅读全文
-
WebAPI下的如何实现参数绑定
摘要:WebAPI下的如何实现参数绑定本文将概述在WebAPI方式下将如何将参数绑定到一个action方法,包括参数是如何被读取,一系列规则决定特定环境采用的那种绑定方式,文章最后将给出一些实际的例子。Parameter binding说到底是接到一个Http请求,将其转换成.NET类型使得action方法的签名更易于理解。请求消息(request message)包括了请求的所有信息,如带查询字符串的请求地址(URL),内容主体(content body)及头部信息(header)。在没有采用parameter binding的情况下,每个action方法将需要接收request message, 阅读全文
-
代码契约CodeContract(八)
摘要:代码契约(Code Contract):它并不是语言本身的新功能,而是一些额外的工具,帮助人们控制代码边界。代码契约之于C#,就相当于诗词歌赋之于语言。 --- C# in Depth一,概述 1.1 未引入“代码契约(特指MS代码契约)”之前的状态---“契约” • 契约:20世纪80年代,Bertand Meyer在设计Eiffel语言时就将其作为重要的部分。已有大量的计算机科学研究开始探究正式的规范说明和验证,它允许在编译时检查程序的正确性,不过契约的作用还不止于此。 •契约编程的核心理念是将API的需求和承诺与实现相分离。 •契约约定比文档约定方式更“同步”一些。 ... 阅读全文
-
用Pomelo 搭建一个简易的推送平台
摘要:用Pomelo 搭建一个简易的推送平台前言实际上,个人感觉,pomelo 目前提供的两个默认sioconnector和hybridconnector使用的协议并不适合用于做手机推送平台,在pomelo的一份公开ppt里面,有提到过, 网易的消息推送平台是基于pomelo开发的 (一个frontend 支持30w 长连接,消耗了3g 内存,如果我没记错数据应该是这样),不过,这里用的前端(frontend)实现的是基于MQTT协议,我估计这个基于MQTT协议实现的frontend,基本不可能开源出来.这里只是说,默认提供的frontend不适合用于构建大型的推送平台(c10m规模的),一般而言( 阅读全文