写在前面
感谢公司开放的企业文化;
我是来自优矿的量化工程师,闲时喜欢对自己用的产品思考和研究,公司有很多这方面的专家,他们在产品方面有很多沉淀和见解。今天我主要从即时客服这个功能点,以用户的角度和大家分享一些我对产品设计的看法,共通探讨一下如何定义一个好的产品,以及如何设计一个好的产品;此外,我还会分享一些自己使用 CNZZ, Google Analytics, Google Search Console, GrowingIO, Baidu Share 工具来尝试用户增长的一些想法。
继续阅读 »
Tornado本身的设计目标是单线程异步非阻塞,要想很好的发挥它的性能最好使用异步IO,并且Tornado本身也提供了异步的AsyncHttpClient的实现,配合gen.coroutine和yield,可以让请求异步执行从而不阻塞当前线程,对于单线程服务器来说,阻塞(blocking)和同步的sleep这种会挂起线程的动作都是服务器的噩梦,因为只有一个线程,所以任何等待都会影响服务器对于其他请求的处理。
异步非阻塞对于第三方IO是http请求的情况还好,毕竟可以使用Tornado提供的异步实现,但是对于有些数据库的IO,则需要异步库的支持,比如针对MongoDB的Motor等。但是第三方异步库的质量也是参差不齐,在实际的工程中
继续阅读 »
参考原文:https://github.com/angular-ui/ui-router/wiki/URL-Routing
在你的应用中大多数状态都有与其相关联的 url,路由控制不是设计完成 state 之后的事后想法,而是开始开发时就应该考虑的问题。
这里是如何设置一个基本url。
javascript
$stateProvider
.state('contacts', {
url: "/contacts",
templateUrl: 'contacts.html'
})
当我们访问index.html/contacts时, 'contacts'状态将被激活,同时inde
继续阅读 »
HTTP协议本身是一种面向资源的应用层协议,但对HTTP协议的使用实际上存在着两种不同的方式:一种是RESTful的,它把HTTP当成应用层协议,比较忠实地遵守了HTTP协议的各种规定;另一种是SOA的,它并没有完全把HTTP当成应用层协议,而是把HTTP协议作为了传输层协议,然后在HTTP之上建立了自己的应用层协议.
RESTful(Representational State Transfer 表述性状态转移):对基于HTTP的应用提供了一种设计原则,即:
RESTFul定义的URL
RESTful架构又被称作为“面向资源开发”,将任何可命名的概念视为资源,资源可以是实体或抽象的概念,URL的命名以名词为核心.URL表达了
继续阅读 »
Javascript语言的设计不够严谨,很多地方一不小心就会出错。
举例来说,请考虑以下情况。
现在,我们要判断一个全局对象myObj是否存在,如果不存在,就对它进行声明。用自然语言描述的算法如下:
javascript
if (myObj不存在){
声明myObj;
}
你可能会觉得,写出这段代码很容易。但是实际上,它涉及的语法问题,远比我们想象的复杂。Juriy Zaytsev指出,判断一个Javascript对象是否存在,有超过50种写法。只有对Javascript语言的实现细节非常清楚,才可能分得清它们的区别。
more
第一种写法
根据直觉,你可能觉得可以这样写:
javascript
if (!myObj)
继续阅读 »
写在前面
从来没有系统地研究过设计模式,之前领悟出来的JavaScript设计模式那纯粹是个人兴起之作,和主流的大家们整理的设计模式还是有不少差距的。这次有幸看到了一本很不错的书。作者归纳地真的很不错,赞叹之余,不忘摘录几段分享给大家。
编写易于维护的代码,其中一个重要方面是能够找到代码中重复出现的主题并优化他们,这就是设计模式有价值的地方。
什么是模式
模式是一种可复用的解决方案,可用于解决软件设计中遇到的常见问题。
more
模式是已经验证的解决方案
模式很容易被复用
模式富有表达力
模式不是一种确切的解决方案,但可以为我们提供一个解决问题的方法
模式的优点
复用模式有助于防止在应用程序开发工程中小问题引发大问题。
继续阅读 »
什么是反模式
如果我们认为一种模式代表一种最佳实践,那么一种反模式就代表我们已经学到的教训。反模式这个术语是1995年由安德鲁·凯尼格在当年的11月C++报告中创造的,是受“四人组”所著《设计模式》一书的启发。在凯尼格的报告中,他提出反模式的两个概念:
描述一种针对某个特定问题的不良解决方案,该方案会导致糟糕的情况发生;
描述如何摆脱前述的糟糕情况以及如何创造好的解决方案
more
反模式的由来
每一个设计问题都是以在两个实体之间实现平衡为开始的,即:问题的形式和它的上下文。形式是解决问题的方案;上下文定义该问题。
虽然设计模式很重要,但是理解反模式也同样重要。创建应用程序时,一个项目的声明周期就会以此为起点;一旦完成了初
继续阅读 »
简介
根据目的和范围,设计模式可以分为五类。按照目的分为:创建设计模式,结构设计模式,以及行为设计模式。按照范围分为:类的设计模式,以及对象设计模式。下面分别介绍
。
创建设计模式
创建设计模式(Creational patterns),用于创建对象时的设计模式。更具体一点,初始化对象流程的设计模式。当程序日益复杂时,需要更加灵活地创建对象,同时减少创建时的依赖。而创建设计模式就是解决此问题的一类设计模式。
结构设计模式
结构设计模式(Structural patterns),用于继承和接口时的设计模式。结构设计模式用于新类的函数方法设计,减少不必要的类定义,减少代码的冗余。
行为设计模式
行为设计模式(Behavio
继续阅读 »
简介
在[PHP设计模式(七):设计模式分类][2]中我们提到过创建设计模式(Creation
patterns),创建设计模式专注于设计对象(Object)和实例(Instance)的创建过程。
创建设计模式包括下面五种设计模式:
抽象工厂设计模式(Abstract Factory)
生成器模式(Builder)
工厂设计模式(Factory Method)
原型设计模式(Prototype Method)
单例设计模式(Singleton)
当程序逐渐扩展的时候,需要更多的新对象,新对象的创建不应该依赖于创建者,换句话说,新对象的创建过程,不应该依赖调用创建函数的对象。为了减少冗余,增加拓展性,工厂模式就是一种
继续阅读 »