5、模式与算法
文章平均质量分 70
广州接入
毕业于北京交通大学计算机系,一直从事企业应用开发,有十多年的SaaS平台产品研发经验。擅长系统架构,需求分析。
展开
-
用问答式聊一下最近资本火热推动的chatGPT
问答式聊下现在很火的chatGPT原创 2023-02-07 19:28:04 · 4611 阅读 · 1 评论 -
建筑行业是时候进行平行建造的应用了
平行建造就是在建筑的建造过程中利用ACP方法,对建造过程进行模拟、实施和校正的方法,平行建造的实施可以更好的降低建造过程中的各种风险,从而保证工期,降低成本,提高建造质量。对于大型复杂工程的建造过程本身是一个复杂的过程,做平行建造的难度比较大,但由于信息技术的日益发展,建造过程的平行比起社会工程来说还是简单很多,条件成熟很多:1)BIM的应用解决了建造过程中的人工建筑的基础,BIM不仅提供...原创 2020-05-01 07:15:05 · 8521 阅读 · 4 评论 -
浅谈几句“搜索算法”
人类总是在追求规律,因为按照规律做事,确实可以剩下大量的时间,算法也是一样,但我们应该清醒的认识到,很多问题都不是能靠找规律的事情能搞定的。有时候最笨的方法也是好方法,比如说穷举之类的。特别是计算机出现后,很多问题用计算机穷算其实更简单。搜索算法其实就是这种笨办法,当然,搜索算法比穷举要好些。搜索算法的概要就是先找到或者猜到某个“解”点,然后通过一定的步长向领域内进行搜索,如果”解“更优,就继...原创 2020-03-11 09:00:30 · 979 阅读 · 0 评论 -
普通人如何参与区块链游戏
因为对区块链技术的了解,同时一直在研究分布式存储系统架构,所以一直比较反对区块链应用(很多朋友问我,我的回答都是如果你真要参与,你可以宣称,但不要真用,反正绝大部分人搞不清,没办法,人们对赚钱的欲望远远超过对真实的追求),原因就是这个东西要落地非常困难,不是一般的困难,下面我从公共,私有和联盟三个方向来分析下:1)公共链 这个如果是全员参与模式,需要从工程角度来考虑节点的故障率,失...原创 2019-12-16 07:33:23 · 1603 阅读 · 1 评论 -
区块链升为国家战略,它就升天了么?
这是去年3月份我写的关于区块链的文章,在公众号发布,虽然今年区块链升为国家战略,但技术就是技术,我们也需要看清它到底能做什么。这是原文(修正了个别错别字):一、区块链技术三大特征的优与劣:1)去中心化(分布式记账)优点:数据保存在多个节点上,安全性比较好(不易丢失),查询速度快(非验证查询);缺点:如果每份数据保存的节点数过多则:维护数据一致性比较困难,存储效率低,节点间通信带宽要求高;...原创 2019-11-30 17:05:33 · 1257 阅读 · 0 评论 -
微软技术系列(WebForm补充)
前面关于webform的博文谈到了Webform的优缺点,但主要集中在性能和易操作性方面.虽然Webform是一次伟大的尝试,但总体上来讲,我觉得不是很成功.除了前面文章所提到的缺陷外,其实从架构和软件工程的角度来说,也是有其不足,甚至可以说是有些倒退的.我们知道,Webform还是基于BS基本架构:HTTP+HTML+JAVASCRIPT+CSS等技术,客户端的呈现是基于服务器端传来的脚本来解释原创 2012-10-25 22:46:36 · 3093 阅读 · 1 评论 -
REST架构风格
REST字面意思是表示性状态转移,它是一种充分利用Http协议的BS架构风格.为什么这么讲呢?我们看看Roy Thomas Fielding博士对于REST机构风格的定义.REST架构风格是一种组合架构风格: 1)REST整体架构上使用CS风格,这种风格其实也是BS架构风格的基础风格; 2)REST在服务端采用无状态架构风格,无状态(面向非连接)也是BS架构风格典型特点,传统的CS架构原创 2012-11-01 19:48:06 · 5337 阅读 · 0 评论 -
一个领导者选举算法
根据Matrix67的"囚徒与灯泡"文章而写:public class Wakeup { static class People { //记录第一次进入时确定的位置 0未确定,-1 左边 1右边. public int Position; //手上的球 public int BallNum; //标识 public int Id; //是否还在参与跷跷原创 2013-01-26 23:56:57 · 4555 阅读 · 0 评论 -
一个简单的跨域跨数据库事务处理架构
原来只是有点这个想法,怎么去做这个事务,这次给公司做新架构演示,随带就加进去了,居然还成了,还像那么回事:我的做法很简单:自己写了个事务处理类,提供一个静态的启动事务方法,然后就是Commit,Rollback方法,再利用GUID作为事务ID。有事务处理类管理本地数据库链接和远程跨域服务信息,利用这些信息在Commit或者rollback时进行提交或者回滚,在数据库级上并行执行命令,需要对远程跨域原创 2012-01-16 22:47:33 · 18440 阅读 · 1 评论 -
分布式计算实践(C#)-2
因为是模拟和试验,很多地方我都没有做得很完善,能省则省了,因为我采用的是对等结构,这里讲一下计算节点的结构,一个计算接点包含三个基本的功能:1)外部任务请求管理:负责接收外部请求的计算任务,并根据客户提供的路由信息,转发给目标计算节点的内部任务请求管理功能;2)内部任务请求管理:负责接收计算节点发过来的任务或命令,并调用本地的任务执行功能;当然。3)任务执行管理:这个负责具体的任务执行,包括代码部原创 2013-05-31 11:39:03 · 3808 阅读 · 0 评论 -
分布式计算实践(C#)-3
由于这段时间和接下来的一段时间都比较忙,所以这个系列就到这里,我把源代码稍微整理了一下,放到了我的资源里,大家可以去下载运行.整个架构相对比较简单,功能有限.但作为分布式计算的入门,还是可以的.运行前要对DCSHost程序进行分布式部署,需要修改App.Config: 这个示例的整体架构采用的是对等式结构,原创 2013-06-16 08:01:44 · 3523 阅读 · 0 评论 -
软件架构风格整理(6 CS,BS等)
1.1 CS结构 C/S软件体系结构是基于资源不对等,且为实现共享而提出来的,是20世纪90年代成熟起来的技术, C/S体系结构定义了工作站如何与服务器相连,以实现数据和应用分布到多个处理机上。 C/S体系结构有三个主要组成部分:数据库服务器、客户应用程序和网络。l 服务器 (1)数据库安全性的要求; (2)数据库访问并发性的控制; (3)数据库前端的客户应用程序的全局数据完整性规则;原创 2012-10-21 09:41:07 · 9838 阅读 · 0 评论 -
软件架构风格整理(5 仓库风格 6复制风格) .
1 仓库风格在仓库风格中。有两种不同的构件:中央数据结构说明当前状态.独立构件在中央数据存贮上执行.仓库与外构件问的相互作用在系统中会有大的变化若输入流中某类时间触发进程执行的选择.则仓库是一传统型数据库;另一方面.若中央数据结构的当前状态触发进程执行的选择.则仓库是一黑板系统1.1 数据库系统数据库架构是库风格最常见的形式。构件主要有两大类,一个是中央共享数据源,保存当原创 2012-10-21 09:38:19 · 9914 阅读 · 0 评论 -
软件架构风格整理(2 调用/返回) .
1 调用/返回1.1 主程序/子程序单线程控制,把问题划分为若干处理步骤,构件即为主程序和子程序。子程序通常可合成为模块。过程调用作为交互机制,即充当连接件。调用关系具有层次性,其语义逻辑表现为子程序的正确性,取决于它调用的子程序的正确性。这种程序风格也比较多,比如早期的结构化程序.1.2 面向对象风格数据抽象和面向对象架构风格。这种风格的构件是对象。对象是抽象原创 2012-10-21 09:34:41 · 5416 阅读 · 0 评论 -
软件架构风格整理PDF文件已上载,欢迎下载.
这些文章内容来自:系统架构师教程,系统架构教程,系统架构研究论文,系统架构培训资料等.因为内容来源太杂,没有列出来源,请大家见谅.在此非常感谢内容的提供者!也希望对大家有所帮助!http://download.csdn.net/detail/hawksoft/4671068原创 2012-10-21 17:56:30 · 3477 阅读 · 3 评论 -
软件架构风格整理(7 DSSA,HA,Agent,正交等) .
1.1 面向Agent 软件体系结构面向Agent 的基本思想是从现实世界中人类、事物和环境出发,认为事物的属性特别是动态特性在很大程度上受到与其密切相关的人和环境的影响,强调认识、思维与客观事物及其所处环境之间的相互作用,将影响事物的主观与客观特征相结合,并抽象为系统中的Agent ,作为系统的基本构成单位,通过Agent 之间的合作实现系统的整体目标。软件Agent 的定义及主要特性什么是软件原创 2012-10-21 09:42:59 · 4970 阅读 · 0 评论 -
软件架构风格整理(3 独立构件风格 4 虚拟机风格)
1 独立构件风格1.1 进程通讯进程通信架构风格。构件是独立的过程,连接件是消息传递。这种风格的特点是构件通常是命名过程,消息传递的方式可以是点到点、异步和同步方式及远过程调用等。1.2 事件系统事件驱动架构风格。构件不直接调用一个过程,而是触发或广播一个或多个事件。系统中其他构件中的过程在一个或多个事件中注册,当一个事件被触发,系统自动调用在这个事件中注册的所原创 2012-10-21 09:36:39 · 7325 阅读 · 1 评论 -
软件架构风格整理(1 数据流风格)
1 数据流风格1.1 批处理序列批处理风格的每一步处理都是独立的.并且每一步是顺序执行的.只有当前一步处理完后.后一步处理才能开始.数据传送在步与步之间作为一个整体.(组件为一系列固定顺序的计算单元,组件间只通过数据传递交互。每个处理步骤是一个独立的程序,每一步必须在前一步结束后才能开始,数据必须是完整的,以整体的方式传递)批处理的典型应用:l 经典数据处理;l 程序原创 2012-10-21 09:32:47 · 9148 阅读 · 0 评论 -
对于设计模式的一点思考(杂记)
在C#后台,要用工厂方法,估计大家觉得都很正常,但对于前端Web开发呢?却未必能想起来,特别是那些对在后台拼接html字符串非常鄙视的人来说,就更不要说了.人总是很喜欢把很多事情莫名的分出三六九等,或者是陷入别人设定的一种广告定势中去,固然可能获得某种优越感,却不知道已经把自己的思维束缚.在后台通过拼接html字符串来输出各种html元素,其实也是一种工厂方法,而且在工程化的系统开发中,这样做虽然原创 2012-09-21 23:09:08 · 2855 阅读 · 0 评论 -
算法笔记(红黑树)
前面的博文分析了一般查找树的性质,理论上来讲,可以构造m阶完全树,但这种结构,会导致调整过于频繁,所以保持相对平衡就成了一种策略。红黑树,B树都是这种考虑。分析这些树(红黑树,AVL,B树)等,一个重要的地方就是我们所做的大部分工作的目标就是需要保持树在一定程度上的平衡。下面是红黑树常见操作的实现: using System;using System.Collections.Gen原创 2011-11-26 16:05:04 · 4019 阅读 · 3 评论 -
MyMathLib系列(一元多项式运算求初等因子等)
利用TExp类的运算来求矩阵的特征值,初等因子等:using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace MyMathLib{ /// /// 一元多项式计算 /// public class PolynomialOfOneB原创 2015-01-07 21:23:37 · 2542 阅读 · 0 评论 -
MyMathLib系列(一元多项式-准备)
这里定义的类TExp是基本的计算项,这里的表达式与C#自带的表达式有很大的区别,这里定义这个类主要是为了进行矩阵运算,当然本身也支持普通的运算,但目前不支持除法。这个类目前的用途主要是为了计算矩阵的特征值,特征向量,有时间,再扩展成支持常见的复数域类的数值和符号运算。代码有点长,需要有点耐心:using System;using System.Collections.Generic;using原创 2015-01-07 20:54:08 · 2158 阅读 · 0 评论 -
Spark学习(单机本地提交作业)
1)spark-1.3.0-bin-hadoop2.4.tar 解压后是可以直接在Windows下运行的,当然这时只是单机模式。2)本地提交的方法是在Spark的解压主目录下(CMD)进入,输入:bin\spark-submit --class ScalaMain ./test/ScalaJarT.jar local其中ScalaMain是类名(记得命名空间不能丢,我的这个类是没有命名空间的),本原创 2016-09-06 23:02:32 · 3688 阅读 · 0 评论 -
如何从0构造自己的系统?
1)抄,当然是个非常快捷的方式,但由于抄很多时候只能看到其表面,很难形成一个体系,而构造自己的系统,是一定要成体系的;2)借鉴,跟抄差不多,是集合众之长,这种方式如果产品设计者没有非常深刻的理解,往往到最后就是什么都不像;3)产品需求--〉UI设计--〉架构设计--〉程序设计....这是目前很多公司,特别是创业公司最喜欢的套路,一些做产品的企业也喜欢这样,这种方式其实在于人们对于UI的过分追求而忽原创 2016-09-06 07:34:19 · 1534 阅读 · 0 评论 -
看看CSDN能不能发布文章
昨天发布了两次技术文章都不见了,发布一篇灌水的看会不会被看不见。发布完成可见,但过不久都不见了。CSDN在做分布式,不一致引起了?别猜了,干活!原创 2016-09-06 07:17:15 · 1856 阅读 · 1 评论 -
Spark学习(3)--Scala语言学习
花了半天的时间,熟悉了一下Scala的基本语法,说实在的,Scala的语法确实让人感觉不怎么舒服,其实编程语言发展到现在,已经非常成熟,语法上Scala明显是c+pascal混合风格,而且有些地方甚至有些不伦不类。说实在的,跟F#明显不在一个档次上。当然,学习语言,不时为了语法,而是为了后面的编程。虽然Scala难用点,但对于看多了编程语言的老鸟来说,虽然感觉不舒服,但用起来还是没问题的。何况原创 2016-07-18 08:57:11 · 3852 阅读 · 0 评论 -
spark学习(1)
考虑到公司的发展和未来,以及合作业务的关系,作为技术男,忍不住开始了大数据之路,先选择Spark练练手。原来虽然对云计算,大数据分析之类的算法有个一阵子的研究,也对Hadoop的原理做个研究和模拟,但真正开始实战,还是得从头学起。买了几本书,就开始上路了。今天安装了Java,也完成了Scala安装,安装IntellijIDE倒是很顺利,但下载Scala插件的时候老是中断,幸好IE有续传功能,但到现原创 2016-07-16 22:12:50 · 4166 阅读 · 0 评论 -
滴滴有感
现在的滴滴快车和出租车相比,已经没有什么优势,价格上很多时候都比出租车贵,用户体验差了很多,主要原因其实还是滴滴的快车规则所致。现在的滴滴快车体验不好主要是两个地方;1) 司机绕路2) 司机拖时间绕路可能是因为司机不熟悉,也可能是司机故意,但这个还相对好说点,毕竟大家都有导航;而拖时间,主要是因为时延费,不要小看这每分钟5毛钱,10分钟5块钱。原来坐滴滴快车感觉不出这种,现在坐滴滴非常明显,反正司原创 2016-07-26 08:59:02 · 2432 阅读 · 1 评论 -
Scala学习(本地向量集 loadLibSVMFile)
这是SVM文件格式例子:1 1:2 2:3 3:42 1:1 2:2 3:31 1:1 2:3 3:31 1:3 2:1 3:3需要注意以下几点:1)标签列可以重复2)索引要从1开始,从0开始的时候生成的内部索引时从-1开始,而且数据长度会比实际少1;3)数据的长度是以最大列数为准的,因此最好是要保持数据列数一致;Scala的MLib支持的本地数据的类型主要是整数和浮点数,因为MLib主要是用原创 2016-07-25 08:58:19 · 7084 阅读 · 2 评论 -
Scala的var,val
其实就是变量和常量的区别,之所以在这种函数式编程语言里,要求大家尽量使用val(常量),少使用var(变量),其中一个很重要的原因是多线程中并发访问中的读写一致性原因。对于变量来说,因为值可以被其它逻辑修改,就存在读写一致性问题,如果读写一致性会影响业务逻辑,就需要增加这种额外的代码来维持这种读写一致性。而对于常量来说,由于不能修改,所以就不存在读写一致性的问题。在编程中,变量的这种可修改性其实是原创 2016-07-24 21:56:28 · 2922 阅读 · 0 评论 -
一起学编程(3--组织与表达)
利用计算机的目的是为了解决问题,我们可以将程序看做是解决问题的过程和结果的描述。这跟我们用流程和规范来指导做事并无本质的区别,而且更为简单。因此我们希望计算机有一天能理解我们的自然语言,这样,我们利用自然语言就可以与计算机交流,并指挥计算机做事。但无论是自然语言还是现有的编程语言,都需要计算机能够理解,这种理解与和他人进行交流时的理解也是一致的。因此如何清晰地,准确的对要做的事情进行组织和表达就非原创 2015-06-06 23:07:24 · 1981 阅读 · 0 评论 -
MyMathLib系列(矩阵算法--2)
矩阵相关的算法比较多,也是比较重要的,而且算法之间的性能差异确实比较大,初等变换法求逆比古典法求逆快不是一点点。矩阵的计算量和数值其实都是比较大的,特别是20阶以上,我在机器上最多只搞到40阶,随机产生的矩阵,很容易就爆掉decimal和double类型。另外,这里使用了操作符重载,后面的一元符号运算也用到了操作符重载,后面如果有时间,我会将这些算法利用这些特性统一起来,本来它们的计算就应该是统一原创 2015-01-05 21:11:47 · 2233 阅读 · 0 评论 -
MyMathLib系列(向量及矩阵--准备工作)
因为向量和矩阵的计算工作量比较大,为了更好的书写代码,这里增加了几个定义类,这些定义或者扩展方法将在以后的代码中应用到:1、公共枚举类型/* 文件:PublicEnums.cs * 目的:定义公共枚举类型. */using System;using System.Collections.Generic;using System.Linq;using System.Text;n原创 2015-01-04 22:44:47 · 2124 阅读 · 0 评论 -
算法(全排列算法封装)
本算法是教材中的全排列方法之一,本人仅做封装,在此感谢发现算法和传播算法的大牛们. /// /// 全排列算法,算法原理:Perm(n)=[n]*Pern(n-1).N的全排列等于将N个数取一个放在第N个位置后,剩下的N-1个数做全排列。 /// 这个算法的一个用途是进行行列式的展开和计算,这也是这次封装这个算法的目的。 /// public class原创 2014-12-16 11:08:38 · 2823 阅读 · 0 评论 -
MyMathLib系列(行列式计算4--向量部分)
1)将向量组进行消元,变换成阶梯矩阵,这是求向量组的极大线性无关组的基本算法。这个方法在前面曾经给出过,但在这里做了改进,目的是为了可以判断是否线性相关: /// /// 方程组消元,最后一列为系数,结果就在CoefficientDeterminant里. /// 本算法也可以用来求矩阵的秩. /// /// 方程组原创 2014-12-27 08:17:08 · 2336 阅读 · 0 评论 -
MyMathLib系列(线性空间)
线性空间的算法不是特别多,这里是代码:using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace MyMathLib{ /// /// 线性空间 /// public class LinearSpace {原创 2015-01-07 20:40:55 · 2002 阅读 · 0 评论 -
对于设计模式的一点思考(后记)
前面那篇里,说了要列一下html元素输出的工厂方法的好处和实际应用场景,在这里兑现一下:1) 可以附加很多职责,这个是很多设计模式的优势对于工厂方法等构造型设计模式来说,也是其一大优点,比较典型的应用场景:A)企业开发的合法性检查:采用微软提供的或者第3方的方法也是一种非常好的选择,但对于更为灵活的设计方式来说,将校验信息放在类或者数据库其实是更好的选择,在这种方式下,采用工厂方法输出html元素原创 2012-10-09 11:35:33 · 2788 阅读 · 0 评论 -
微软技术系列(WebForm)
在桌面程序和BS应用程序比较来看,无论是开发速度还是用户体验来说,都是桌面程序要有优势.由于BS程序的特性,使得在开发BS程序时可使用的资源非常有限(客户端只能借助浏览器,客户端与服务端的无状态交互,服务端的集中计算压力等),因而也严重影响了BS程序开发的效率。怎么让BS的开发能像桌面开发那样富有效率,一直以来也是业界的追求。微软的WebForm就是这样一种尝试,而且取得了一定的成功。Webfor原创 2012-09-26 13:26:35 · 2871 阅读 · 0 评论 -
算法笔记(排序算法)
比较常见的比较排序有插入排序,选择排序,冒泡排序,合并排序,快速排序,堆排序等方法,这些排序的期望时间T(n)>O(nlgn).线性排序的方法有计数排序,基数排序,桶排序。排序方法的选择应该考虑几个比较重要的特性:时间复杂度,空间复杂度,稳定性,常数因子,算法实现难度,输入依赖性等。综合这些因素来讲,在实际应用中,线性排序未必就比比较排序要好。下面是常见的排序实现(计数排序和快速排序可参见前面原创 2011-11-17 20:17:49 · 2308 阅读 · 0 评论 -
算法笔记(有根树遍历)
public class TreeNode { public string Key { get; set; } public object Data { get; set; } public TreeNode Parent; public List Children { get; set; } public T原创 2011-11-18 09:40:46 · 3049 阅读 · 0 评论