Mongo 设计应用 索引 使用ensureIndex()创建索引 db.users.ensureIndex({ "username:1 }) 简介 通常。 操作符如何使用索引 低效率的操作符 $where查询和检查一个键是否存在的查询完全无法使用索引 $ne查询可以使用索引,但并不是很有效,因为必须要查看所有索引的条目 $nin就总是要进行全表扫描 范围 设计多个字段的索引时 比较expr1和expr2的大小,如果expr1小于expr2,返回负数,反之返回正数 “$strcasecmp”:[string1,string2] 比较string1和string2,区分大小写 function(x){ return x.category.toLowerCase(); }, "initializer":... } ) 应用程序设计 范式化与反范式化 决定何时采用范式化何时采用反范式化需要根据自己的应用程序的实际情况仔细权衡 一般来说,数据生成越频繁,就越不应该将这些数据内嵌到其他文档中 如果内嵌字段或者内嵌字段数量时无限增长的,
假期宅家,这两天在看一本书:Designing Data-Intensive Application,书名翻译成中文是设计数据密集型应用 —— 大部分互联网应用都属于数据密集型应用。 通读下来,这本书并没有教怎么设计一个应用(Application),而是介绍各种数据系统(Data System)背后的设计思想和技术 —— The Big Ideas Behind Reliable, 系统的升级、回退、扩容、缩容在系统设计的时候都要考虑在内,最好是能自动化解决。 从开发角度看的 simplicity 和 evolvability。 图数据库在一些特殊场景可能会有应用,比较社交关系链分析等。 远古的层级模型、网络模型这里就不说了。(文档模型和层级模型,图模型和网络模型看起来都挺像的。) Key-Value 在互联网的应用是非常广的,这里的 value 可以是 string、list、set 等,代表作是 redis。
MVVM回顾 经过上一篇文章的介绍,相信你对MVVM的设计思想有所了解。MVVM的核心思想就是解耦,View与ViewModel应该感受不到彼此的存在。 BindableProperty是一个很好的设计,它不仅可以用在ViewModel中,还可以用在View中,用它来修饰 ViewModel,当ViewModel 改变时,比如初始化时,或者从一个ViewModel ViewModel.Name.OnValueChanged += NameValueChanged; ... } 因为+=和-=是成对出现的,所以只要是看到 OnValueChanged,这部份代码的长度几乎都是*2。
EF与Repository 在上一篇《初探领域驱动设计(1)为复杂业务而生》中,我们已经实现了一个用户注册的例子,但是并不完整。 // 应用层ShoppingCartService.cs 1 namespace RepositoryAndEf.Service 2 { 3 public class ShoppingCartService 把所有的更新类操作都放到应用层,这样由应用层去决定什么时候把实体更新到repository,以及什么时候去提交到数据库中。 我们甚至可以学习CQRS架构,将“读”的服务完全分离开,我们就可以单独针对“读”来独立设计。 但是Repository给我们带来的优点,这些优点也是我们不能轻易丢掉它的原因: 提供一个简单的模型,来获取持久对象并管理期生命周期 把应用和领域设计从持久技术、多种数据库策略解耦出来 容易被替换成哑实现
在我们设计和开发应用程序时,经常要用到控件。比如开发一个客户端WinForm应用程序时,微软就为我们提供了若干控件,这些控件为我们提供了可被定制的属性和事件。 设计模式并不深奥,很多模式的理念都是相通的,不同的是对应语言下不同的表现形态,善于剖开现象看本质,很多都是相通的。 源代码托管在Github上,点击此了解
使用自表一对多设计这个表格,因为如果使用多个表格的话,需要增删的情况下就需要改动表格的结构了。所以使用自表一对多的方式,自己这张表的主键对应着自己这张表的外建。 代码示例: ? 例题2: ? 表格设计: 在sqlyog里我们可以通过此工具设计表格时建立表格之间的映射关系: ? 点击进入此界面后右键选择Add Tables...或者Create Table可以添加表格和创建表格: ? 一对一: 表格一对一设计方式有两种,一种是主键对应着关系表的主键,另一种方式是主键对应着关系表设置了唯一索引的外建。 一对多: 一对多关系的表格设计也有两种方式,一种是自表的一对多,第二种是主键对应关系表的外键。 自表一对多: ? 主键对应关系表的外键一对多: ? 多对多: 多对多的表格设计方式是使用一张关系维护表来维护其他表之间的映射关系。 ?
该原则是作为一个指导思想来做的,其作用就是防止过度设计,但需要注意的是其是让你不做,但需要有可能要做的意识,提前留好拓展点,这样如果要做的时候,也可以快速跟上。 ** 后续会有一篇文章,来专门讲解如何在软件设计中,防止过度设计,但对对应该优化,该留好优化点如何实现。 这样的设计可能会导致以下问题, 当一个不知情的人看到这两段代码完成的任务是一样的,但采用的解决方式却是不一样的,则会想其的设计深意,以及不知道该用哪一个? true; } return validContainsA(temp); } 上述代码因为举的例子比较简单,应该能很简单的看出有一段代码被执行了两次,那么这样的设计违反了 迪米特原则 定义 迪米特原则是用来指导设计高内聚、低耦合代码的原则,因此我们先看一下什么是高内聚、低耦合。
7、 Spark应用程序设计 7.1 基本流程 1.创建SparkContext对象 每个Spark应用程序有且仅有一个SparkContext对象,封装了Spark执行环境信息 2.创建RDD 1,2,3),2) (2)本地文件/HDFS文件 1) 文本文件 sc.textFile(“file:///data/a.txt”) //将本地文件加载成RDD sc.textFile(“hdfs:/ ,生成新的RDD nums.flatMap(x=>1 to x)//{1,1,2,1,2,3} 注解: map:一一映射,元素数量不变 filter:过滤,输出元素数量小于等于 flatMap:展开,放大 ,输出元素数大于原来 (2)RDD Action //创建新的RDD val nums=sc.parallelize(List(1,2,3),2) //将RDD保存为本地集合(返回到driver端) nums.collect() //Array(1,2,3) //返回前k个元素 nums.take(2)//Array(1,2) //计算集合大小 nums.count()//3 合并集合元素
上篇中我们介绍了rhdfs插件,R语言通过它可以加载和操作hdfs,这里为大家继续介绍Rhadoop的另一个插件rmr2,它能够在计算过程调用MapReduce,来看下如何使用: 1 安装 下载安装文件 rmr2_2.1.0.tar.gz,在bash环境本地安装 bash> R CMD INSTALL rmr2_2.1.0.tar.gz 注意: 如果是分布式环境,需要在所有datanode节点进行安装 2 测试 测试方法很简单,由于mapreduce也需要操作hdfs 因此rmr2封装了新的一套函数 from.dfs() 和 to.dfs() 来读取写入hdfs,这里的操作函数对写入hdfs的数据进行了压缩
Model设计 1.在settings.py中配置: AUTH_USER_MODEL='users.UserProfile' 2.在apps/users/models.py中: from django.db '女'), (3, '不详')), default=3, verbose_name='性别', help_text='1:男,2:女,3:不详 '非农业户口')), verbose_name='户籍性质', default=2, help_text='1:农业户口,2:非农业户口 初中,3:高中,4:中专,5:大专,6:本科,7:硕士,8:博士') hunyin=models.IntegerField(choices=((1, '未婚'), (2, '已婚'), (3, '离异'),(4,'丧偶')), default=2, verbose_name='婚姻状况', help_text='1:未婚,2:已婚,3
Java 设计模式的相关原则 一、单一职责原则 单一职责原则: 应该有且仅有一个原则引起类的变更 单一职责可以简答的理解为,一个类或者对象,承担的只能应该尽可能单一。 单一职责用“职责”和“变化原因”来衡量接口或类设计得是否优良。但是“职责”的确定往往是无法度量的。 PS: 子类出现的地方,父类未必可以出现 在类中调用其他类时,务必使用父类或接口,如果不能使用,则说明类的设计已经违背了里氏替换原则(Liskov Substitution Principle,LSP 接口隔离原则需要保证的几个特性: 接口尽量要小: (在保证单一职责的情况小,尽量保证接口不过于臃肿) 接口要高内聚:(尽量减少与外界的交互,少公有,多私有) 定制服务: (为特定的服务对象提供其所需的方法) 接口设计是有限度的
组件生命周期 早期的react设计了许多的生命周期钩子。 shouldComponentUpdate(根据true or false决定是否更新)->componentWillUpdate(即将feiqis)->render->componentDidUpdate 2. 设想一下,在一个应用中,包含三级或者三级以上的组件结构,顶层的祖父级组件想要传递一个数据给最低层的子组件,用prop的方式,就只能通过父组件中转。 中间那一层父组件根本用不上这个prop,但是依然需要支持这个prop,扮演好搬运工的角色,只因为子组件用得上,这明显违反了低耦合的设计要求。在flux和redux中我们会探讨如何解决这样的困局。 组件设计方法论 一些指导性原则: •组件尽可能通过props通信。不用context •组件属性需要有默认值,做好类型检查 •组件属性尽可能使用简单值。避免使用对象。
1.Models设计: 1.重构用户表: 1.在users/models.py中: from django.db import models from django.contrib.auth.models 用户' verbose_name_plural = verbose_name def __str__(self): return self.username 2. django.db.migrations.exceptions.InconsistentMigrationHistory: Migration admin.0001_initial is applie 2. 1.将DjangoUeditor包放到extra_apps目录下 2.在settings.py中注册DjangoUeditor ? /', include('good.urls',namespace='goods')), path('ueditor/',include('DjangoUeditor.urls' )) ] 2.
学习内容 Struts 2国际化 Struts 2的异常处理 Struts 2的文件上传与下载 能力目标 熟练使用Struts 2实现国际化 能通过Struts 2的异常处理增强WEB应用的健壮性 使用Struts2实现文件上传与下载 本章简介 本章主要介绍Struts 2的常见应用,主要包括Struts 2国际化、Struts 2异常处理和文件上传与下载。 Internet把全世界联系在了一起,WEB应用可以通过浏览器被全世界的人们所使用,所以开发人员需要考虑WEB应用系统在不同地区和语言环境中的使用情况,使WEB 应用系统能在不同的地区和语言环境中以当地的语言进行显示 文件的上传与下载也是WEB应用常见的功能,例如上传图片,本章最后会学习使用Struts 2实现文件的上传与下载。 WEB应用系统。
上次我们说到自己手动的做使用 RS 的方式来升级 pod ,感觉还是蛮复杂的,并且容易弄错,实际生产过程中,肯定不会这样来弄,很危险 那么今天我们来分享 Deployment 的方式来显示的升级应用吧 ,也是比较容易的,为了接下来的案例清晰,我们就把上述的 RS 全部删除掉,留下 Service 后续可以使用 Deployment 是使用应用程序声明的方式来升级应用,而不是通过 RS 或者 RC 了 对于使用 Deployment 升级应用,我们需要知道 Deployment 涉及 2 个升级策略: RollingUpdate 滚动升级,这个策略会渐进式的删除旧的 pod,同时创建新的 pod, 为什么我们升级 v2 版本之后 之前的 RS 还在? 为什么 deploy 会有升级记录? 版本的时候,deploy 便会创建 RS2,并且 RS2 管理着 Pod:v2,RS1 仍然继续保留 当我们进行回滚的时候,也是类似的,但是不会创建新的 RS,会直接使用我们要回滚的版本对应的 RS,
关于该设计模式在 VFP 中的应用示例,我考虑了很久。最终决定以主程序的伪代码来做。它至少有两个作用:
1. 通过“主程序”这个过程化代码的重灾区的改造,体会 OOP 的设计思想;
2. 而在实际应用中,可能需要提供试用版、标准版和定制版。 m.myApp
Endproc
Enddefine
作为产品类的 myApp 类定义大概是这样:
Define Class myApp As Custom
***
上一篇推文写了工厂方法模式,包括简单工厂模式、多工厂模式、静态工厂模式、抽象工厂模式,这篇推文记录一下单例设计模式 单例设计模式 在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。 static void main (String[] args){ SingleTon s1 = SingleTon.getInstance(); SingleTon s2 = SingleTon.getInstance(); System.out.println(s1 == s2); //true } } 在静态方法创建实例并直接调用如果不是线程同步 static void main (String[] args){ SingleTon s1 = SingleTon.getInstance(); SingleTon s2 = SingleTon.getInstance(); System.out.println(s1 == s2); //true } } 懒汉式(线程安全) 优点:在多线程情形下,
2 决策AI应用与生态 决策AI是一类不同于感知性AI的人工智能方法,它更侧重的是在动态环境中进行决策和交互的策略网络。 AlphaStar都做了什么 下面我用一个例子介绍游戏AI的设计流程,即如何打造一个游戏AI模型。这里我们介绍AlphaStar的星际争霸2的人工智能模型。 Dota2本身是“技术战略”类的游戏,玩家有时需要同步操控上百个多种职业的士兵对象,所以其游戏难度呈现指数级上升。 因此,Deepmind在围棋问题攻克之后,便以Dota2为目标设计工作布局。 在Deepmind的心里,他们也认为Dota2比围棋在难度上高一个级别。 如何设计星际争霸2的AI 我们首先介绍如何设计一个星际争霸2的游戏人工智能模型的程序。这是一张游戏截图。 由于星际争霸2的游戏操控难度较高,玩家所需处理的信息很多、所需之行的动作相对复杂,因此,算法需要对数据也进行十分繁复和具体的处理。 因此,算法网络的结构设计难度相应增加。
:) 风靡硅谷的新趋势有以下特点: 标题更大、更粗 图标更简单、更常见 去除大量的颜色 使用这种设计的结果呢?一些受人喜爱的应用的界面越来越像同一个品牌下的产品。 虽然一个月后 Airbnb 的新版 UI 没有像 Instagram 发布新设计界面时那样被大肆报道(可能是因为它没有换一款让人眼前一亮的应用图标),它还是遵循了很多“界面简化”的要点的。 这些应用的新版界面意味着什么呢? 正如我开始所说,将来会有越来越多的应用看起来长得都很相似。为什么这么说?就跟 NFL (美国国家足球联盟)一样,科技圈里到处都是山寨版。 好的,遵循以下指导,没多久你的应用就能大火特火! 1. 去除颜色。当然你可以有一种主题色,但是要慎用,尽量只用在指示操作上。剩下的最好都用黑白色,突显你应用的内容。 2. 应用图标颜色更亮些。如果你喜欢设计一些带有闪光和颜色的东西,就做应用图标吧。它可以表现你的个性和品牌,让它脱颖而出吧!
当你开发一个客户端应用程序的时候,往往一个单页会包含很多子模块,在不同的平台下,这些子模块又被叫成子View(视图),或者子Component(组件)。 脑海里迅速出现两种解决方案: 1.View A 主动通知View B做出更新,也就是View A依赖 View B void Notify() { ViewB.Update(color); } 2. 但试想一下,在一个复杂的客户端单页应用程序,这种紧耦合关系会导致程序的复杂度陡然上升。每个View/ViewModel依赖其余对象,而本身又被其他View/ViewModel强引用。 交给中介者设计模式来解决吧。 我们需要添加一个中介者,每个ViewModel Publisher对象都会在自己状态改变时,告诉中介者。 但如果设计不当,中介者本身会变得过于复杂。 源代码托管在Github上,点击此了解