07 2020 档案

摘要:一、无依赖原则 组件依赖关系图不应该出现环。 我们一定有过这样的经历: 当你花了一整天的时间,好不容易搞定了一段代码,第二天上班时却发现这段代码莫名其妙地又不能工作。这通常是因为有人在你走后修改了你所依赖的某个组件。这种情况叫做”一觉醒来综合症”。 这种综合症的主要病因是: 多个程序员同时修改了同一 阅读全文
posted @ 2020-07-31 20:09 挑战者V 阅读(379) 评论(0) 推荐(0) 编辑
摘要:一、关键字说明 Drools规则引擎有硬关键字和软关键字之分。硬关键字为被保留,命名相关定义时,如对象、属性、方法、函数和应用于规则文本中的其他元素,编辑规则内容时不能使用硬关键字作为命名规范。硬关键字主要包括true、false、null。 编写规则时,一定要注意软关键字不像硬关键字那么强制,软关 阅读全文
posted @ 2020-07-31 20:08 挑战者V 阅读(550) 评论(0) 推荐(0) 编辑
摘要:错误背景:mvn clean package下报错错误关键信息: Cannot create resource output directory 错误原因:有其它地方占用该资源。 解决办法:关闭其它占用该资源的地方即可解决该问题 阅读全文
posted @ 2020-07-31 20:07 挑战者V 阅读(1177) 评论(0) 推荐(0) 编辑
摘要:jQuery针对不同的对象遍历的方式是不一样的。比分说对接API时,如果是下面这样的数据: [object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object 阅读全文
posted @ 2020-07-31 20:03 挑战者V 阅读(197) 评论(0) 推荐(0) 编辑
摘要:问题背景:博客首页随着数据量的增加,最初是几百上千的数据,访问正常,这是开发环境,当切换测试环境(通过爬虫已有数据六万多),这时候访问非常缓慢,长达一分钟。 问题SQL: SELECT DISTINCT post.`ID` AS postId,post.`post_title`,post.`post 阅读全文
posted @ 2020-07-31 20:01 挑战者V 阅读(546) 评论(0) 推荐(0) 编辑
摘要:一、属性no-loop 默认值:false类型:Boolean属性说明:防止死循环,当规则通过update之类的函数修改了Fact对象时,可能使规则再次被激活,从而导致死循环。将no-loop设置为true的目的是避免当前规则then部分被修改后的事实对象再次被激活,从而防止死循环的发生。 二、属性 阅读全文
posted @ 2020-07-31 19:50 挑战者V 阅读(1183) 评论(0) 推荐(1) 编辑
摘要:一、核心方法代码 //json格式美化 function prettyFormat(str) { try { // 设置缩进为2个空格 str = JSON.stringify(JSON.parse(str), null, 2); str = str .replace(/&/g, '&') 阅读全文
posted @ 2020-07-11 10:39 挑战者V 阅读(4843) 评论(0) 推荐(1) 编辑
摘要:应用场景:最近我做的一个在线工具网站(参考现在的JSON网站做的),其中有一个功能叫做JSON格式化和校验,通过复制JSON数据点击格式化后,得到美化的JSON数据,再点击按钮”复制”就能获取美化后JSON数据。 核心代码: function selectText(element) { var te 阅读全文
posted @ 2020-07-11 10:37 挑战者V 阅读(589) 评论(0) 推荐(0) 编辑
摘要:一、复用/发布原则 软件复用的最小粒度应等同于其发布的最小粒度。从软件设计与架构设计的角度来看,复用/发布原则就是指组件中的类与模块必须是彼此紧密相关的。也就是说,一个组件不能由一组毫无关联的类和模块组成,它们之间应该有一个共同的主题或者大方向。 从另一个角度来看,这个原则就没有那么简单。因为根据该 阅读全文
posted @ 2020-07-11 10:26 挑战者V 阅读(370) 评论(0) 推荐(0) 编辑
摘要:组件是软件的部署单元,是整个软件系统在部署过程中可以独立完成部署的最小实体。例如:对于Java来说,它的组件是jar文件。而在Ruby中,它们是gem文件。在.Net中,它们则是DLL文件,组件则是一组源代码文件的集合。无论采用什么编程语言来开发软件,组件都是该软件在部署过程中的最小单元。 我们可以 阅读全文
posted @ 2020-07-11 10:25 挑战者V 阅读(178) 评论(0) 推荐(0) 编辑
摘要:一、两个js文件(FileSaver.js和jquery.wordexport.js) FileSaver.js: /* FileSaver.js * A saveAs() FileSaver implementation. * 1.3.2 * 2016-06-16 18:25:19 * * By 阅读全文
posted @ 2020-07-11 10:23 挑战者V 阅读(6814) 评论(0) 推荐(0) 编辑
摘要:一、下载js库 下载地址:https://github.com/eKoopmans/html2pdf.js 官方文档:https://ekoopmans.github.io/html2pdf.js/ 二、引入 <script src="../js/html2pdf.js"></script> 三、编 阅读全文
posted @ 2020-07-11 10:21 挑战者V 阅读(5485) 评论(1) 推荐(0) 编辑
摘要:依赖反转原则主要想告诉我们,如果想要设计一个灵活的系统,在源代码层次的依赖关系中就应该多引用抽象类型,而非具体实现。 一、稳定的抽象层 我们每次修改抽象接口的时候,一定也会去修改对应的具体实现。但反过来,当我们修改具体实现时,却很少需要去修改响应的抽象接口。所以我们可以认为接口比实现更稳定。 也就是 阅读全文
posted @ 2020-07-11 10:20 挑战者V 阅读(417) 评论(0) 推荐(0) 编辑
摘要:回顾一下ISP最初的成因:在一般情况下,任何层次的软件设计如果依赖于不需要的东西,都会是有害的。从源代码层次来说,这样的依赖关系会导致不必要的重新编译和重新部署,对更高层次的软件架构设计来说,问题也是类似的。接口隔离原则告诉我们:任何层次的软件设计如果依赖了它并不需要的东西,就会带来意料之外的麻烦。 阅读全文
posted @ 2020-07-11 10:18 挑战者V 阅读(191) 评论(0) 推荐(1) 编辑
摘要:1988年,Barbara Liskov在描述如何定义子类型时写下这样一段话:这样需要的是一种可替换性:如果对于每个类型是S的对象o1都存在一个类型为T的对象o2,能使操作T类型的程序P在用o2替换o1时行为保持不变,我们就可以将S称为T的子类型。 在面向对象这场编程革命兴起的早起,我们的普遍认知正 阅读全文
posted @ 2020-07-11 10:17 挑战者V 阅读(186) 评论(0) 推荐(0) 编辑
摘要:问题背景:地址栏传参有中文,中文截取后出现乱码问题。问题代码: function getQueryString(name) { var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)"); var r = window.location.search.s 阅读全文
posted @ 2020-07-05 21:39 挑战者V 阅读(780) 评论(0) 推荐(0) 编辑
摘要:开闭原则是Bertrand Meyer在1988年提出的,该设计原则认为:设计良好的计算机软件应该易于扩展,同时抗拒修改。 换句话说,一个设计良好的计算机系统应该在不需要修改的前提下就可以轻易被扩展。 如果A组件不想被B组件上发生的修改所影响,那么就应该让B组件依赖于A组件。 软件架构师根据相关函数 阅读全文
posted @ 2020-07-05 10:15 挑战者V 阅读(228) 评论(0) 推荐(0) 编辑
摘要:一、规则文件 标准的规则文件以”.drl”结尾。一套完整的规则文件内容如下: package:包名,只限于逻辑上的管理,若自定义的查询或函数位于同一包名,不管物理位置如何,都可以直接调用。 import:规则引用问题,导入类或静态方法。 global:全局变量,使用时需要单独定义变量类型 funct 阅读全文
posted @ 2020-07-04 15:29 挑战者V 阅读(3324) 评论(1) 推荐(0) 编辑
摘要:一、Drools是什么 Drools是一个易于访问企业策略、易于调整以及易于管理的开源业务规则引擎,符合业内标准,速度快、效率高。业务分析师或审核人员可以利用它轻松查看业务规则,从而检验是否已编码的规则执行所需的业务规则。 二、Drools有什么用 从我个人所待过的公司,其中做智能酒店这个项目时就用 阅读全文
posted @ 2020-07-04 11:47 挑战者V 阅读(4495) 评论(0) 推荐(0) 编辑
摘要:SRP是SOLID五大设计原则中最容易理解的一个。很多程序员根据SRP这个名字想当然地认为这个原则就是指:每个模块都应该只做一件事。 没错,后者的确也是一个设计原则,即确保一个函数只完成一个功能。 将大型函数重构成小函数时经常会用到这个原则,但这只是一个面向底层实现细节的设计原则,并不是SRP的全部 阅读全文
posted @ 2020-07-04 10:26 挑战者V 阅读(290) 评论(0) 推荐(0) 编辑
摘要:通常来说,要想构建一个好的软件系统,应该从写整洁的代码开始做起。毕竟,如果建筑所使用的砖头质量不佳,那么架构所能起到的作用也会很有限。反之亦然,如果建筑的架构设计不佳,那么其所用的砖头质量再好也没有用。这就是SOLID设计原则所要解决的问题。 SOLID原则的主要作用就是告诉我们如何将数据和函数组织 阅读全文
posted @ 2020-07-04 09:54 挑战者V 阅读(272) 评论(0) 推荐(0) 编辑
摘要:一、整数平方 函数式编程语言中的变量是不可变的。 二、不可变性与软件架构 为什么不可变性是软件架构设计需要考虑的重点呢?为什么软件架构师要操心变量的可变性呢? 答案显而易见:所有的竞争问题、死锁问题、并发更新问题都是由可变变量导致的。如果变量永远不会被更改,那就不可能产生竞争或者并发更新问题。如果锁 阅读全文
posted @ 2020-07-04 09:52 挑战者V 阅读(346) 评论(0) 推荐(0) 编辑
摘要:面向对象是封装、继承、多态三项的有机组成。 一、封装 通过采取封装特性,我们可以把一组相关联的数据和函数圈起来,使圈外面的代码只能看见部分函数,数据则完全不可见。譬如,在实际应用中,类中的公共函数和私有成员变量就是这样。 二、继承 继承的主要作用是让我们可以在某个作用域内对外部定义的某一组变量与函数 阅读全文
posted @ 2020-07-04 09:51 挑战者V 阅读(219) 评论(0) 推荐(0) 编辑
摘要:一、可推导性 Dijkstra很早就得出的结论是:编程是一项难度很大的活动。一段程序无论复杂与否,都包含了很多的细节信息。如果没有工具的帮助,这些细节的信息是远远超过一个程序员的认知能力范围的。而在一段程序中,哪怕仅仅是一个小细节的错误,也会造成整个程序出错。Dijkstra提出的解决方案是采用数学 阅读全文
posted @ 2020-07-04 09:50 挑战者V 阅读(441) 评论(0) 推荐(0) 编辑
摘要:对于每个软件系统,我们都可以通过行为和架构两个维度来体现它的实际价值。软件研发人员应该确保自己的系统在两个维度上的实际价值都能长时间维持在很高的状态。不幸的是,他们往往只关注一个维度,而忽视了另外一个维度。更不幸的是,他们常常关注的还是错误的维度,这导致了系统的价值最终趋降为零。 一、行为价值 软件 阅读全文
posted @ 2020-07-04 09:49 挑战者V 阅读(306) 评论(0) 推荐(0) 编辑
摘要:一、结构化编程 结构化编程是第一个普遍被采用的编程范式(但是不是第一个被提出的),由Edsger Wybe Dijkstra于1968年最先提出。与此同时,Dijkstra还论证了使用goto这样的无限制跳转语句将会损害程序的整体结构。 结构化编程范式归纳:结构化编程对程序控制权的直接转移进行了限制 阅读全文
posted @ 2020-07-04 09:46 挑战者V 阅读(264) 评论(0) 推荐(0) 编辑
摘要:一、什么是设计?什么是架构?二者究竟有什么区别? 二者没有任何区别。“架构”这个词往往使用于”高层级”的讨论中。这类讨论一般都把”底层”的实现细节排除在外。而”设计”一词,往往用来指代具体的系统底层组织结构和实现的细节。但是,从一个真正的系统架构师的日常工作来看,这样的区分是根本不成立的。 举个例子 阅读全文
posted @ 2020-07-04 09:44 挑战者V 阅读(268) 评论(0) 推荐(0) 编辑