<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[wind_dt博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/jieFengDi</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; jieFengDi]]></copyright><item><title><![CDATA[Prolog]]></title><link>https://blog.youkuaiyun.com/jieFengDi/article/details/78776140</link><guid>https://blog.youkuaiyun.com/jieFengDi/article/details/78776140</guid><author>jieFengDi</author><pubDate>Mon, 11 Dec 2017 20:03:38 +0800</pubDate><description><![CDATA[PrologChap1 Basic ConstructGoal/Fact/Query
Goal： 就像plus(0,0,0)这样的，注意后面没有?也没有.
Fact: plus(0,0,0).
Query: plus(0,0,0)?
A fact P. states that the goal P is true.A query P? asks if the goal P is true.回答一个q]]></description><category></category></item><item><title><![CDATA[Random Walk and Personalized Pagerank]]></title><link>https://blog.youkuaiyun.com/jieFengDi/article/details/72824590</link><guid>https://blog.youkuaiyun.com/jieFengDi/article/details/72824590</guid><author>jieFengDi</author><pubDate>Wed, 31 May 2017 22:17:30 +0800</pubDate><description><![CDATA[In graph theory (and its applications) it is often required to model how information spreads within a given graph. This is interesting for many applications, such as attack
 prediction, sybil detecti]]></description><category></category></item><item><title><![CDATA[Design Pattern(11)-Iterator Pattern]]></title><link>https://blog.youkuaiyun.com/jieFengDi/article/details/66478710</link><guid>https://blog.youkuaiyun.com/jieFengDi/article/details/66478710</guid><author>jieFengDi</author><pubDate>Sun, 26 Mar 2017 20:24:53 +0800</pubDate><description><![CDATA[适用场景用于遍历容器，隐藏访问细节，为所有的容器提供统一的遍历接口。类图实例代码我写了一个int的容器用来简单说明一下 
Aggregate：public interface Aggregate {
    Iterator iterator();
    int get(int index);
}ConcreteAggregate：public class ConcreteAggregate im]]></description><category></category></item><item><title><![CDATA[Design Pattern(10)-Immutable Pattern]]></title><link>https://blog.youkuaiyun.com/jieFengDi/article/details/66478443</link><guid>https://blog.youkuaiyun.com/jieFengDi/article/details/66478443</guid><author>jieFengDi</author><pubDate>Sun, 26 Mar 2017 19:55:48 +0800</pubDate><description><![CDATA[适用场景制作不变类，为了安全性之类的考量。弱不变模式与强不变模式这一点参考两种不变模式的定义 
这篇文章中讲的多线程的问题，个人理解如下：A线程遍历users数组还没遍历到users[2],假设users[2]不是vip，B线程因为共享这个数组，却可以修改它，那么修改完了再等A来访问到users[2],那么发现它是vip了。所以A判断的结果不是它那个时间点应得的结果，可能出现同步问题。但是它最后说的]]></description><category></category></item><item><title><![CDATA[Design Pattern(9)-Facade Pattern]]></title><link>https://blog.youkuaiyun.com/jieFengDi/article/details/66478121</link><guid>https://blog.youkuaiyun.com/jieFengDi/article/details/66478121</guid><author>jieFengDi</author><pubDate>Sun, 26 Mar 2017 19:13:22 +0800</pubDate><description><![CDATA[适用场景1.使一个子系统更容易被外部所使用； 
2.将设计很差的API wrap成更合理的API； 
3.减少外部对子系统内部的依赖类图]]></description><category></category></item><item><title><![CDATA[Design Pattern(8)-Interpreter Pattern]]></title><link>https://blog.youkuaiyun.com/jieFengDi/article/details/66478020</link><guid>https://blog.youkuaiyun.com/jieFengDi/article/details/66478020</guid><author>jieFengDi</author><pubDate>Sun, 26 Mar 2017 18:54:22 +0800</pubDate><description><![CDATA[适用场景提供一种方式，用来定义语言的文法表达，并解释执行。类图实例代码这个地方，定义了一个加法表达式，为了简单起见，只有加法，没有其他运算，且假设每个变量名长度只有一个字母。 
AbstractExpression：public abstract class AbstractExpression {
    abstract int interpret(Context context);
}Term]]></description><category></category></item><item><title><![CDATA[Design Pattern(7)-Composite Pattern]]></title><link>https://blog.youkuaiyun.com/jieFengDi/article/details/66475152</link><guid>https://blog.youkuaiyun.com/jieFengDi/article/details/66475152</guid><author>jieFengDi</author><pubDate>Sun, 26 Mar 2017 14:02:30 +0800</pubDate><description><![CDATA[适用场景组合模式适用于树形结构。试想一个公司的所有员工，肯定有上下级关系，除了最底层的员工，其他员工都有自己的领导和自己管理的员工。Composite Pattern通过让每个非最底层员工持有自己的直接下属，从而实现这种树形结构。 
因为公司的每个员工都具有一些共性，所以为他们设计一个公共父类或者接口，譬如Component或者叫Employee。但是最低层员工和非最底层员工有一些区别，因为最底层员]]></description><category></category></item><item><title><![CDATA[Design Pattern(6)-Adapter Pattern]]></title><link>https://blog.youkuaiyun.com/jieFengDi/article/details/64921074</link><guid>https://blog.youkuaiyun.com/jieFengDi/article/details/64921074</guid><author>jieFengDi</author><pubDate>Wed, 22 Mar 2017 16:24:54 +0800</pubDate><description><![CDATA[应用场景试想，你已经有了一个类A，它具有一些功能。但是现在你需要另一些功能，这些功能可以复用A来实现，那么非常自然地应该想到让新的类来持有A的引用，实现组合结构，转发请求来实现新的功能。类图实例代码Target： 
你希望有一个完全符合Target接口的类来达到你的功能：public interface Target {
    void Request();
}Adapter，适配器，完成一个连接]]></description><category></category></item><item><title><![CDATA[Design Pattern(5)-Visitor Pattern]]></title><link>https://blog.youkuaiyun.com/jieFengDi/article/details/64920706</link><guid>https://blog.youkuaiyun.com/jieFengDi/article/details/64920706</guid><author>jieFengDi</author><pubDate>Wed, 22 Mar 2017 16:04:02 +0800</pubDate><description><![CDATA[典型应用场景一个集合容器，里面有一系列元素，但是不同的元素类型不太一样，例如A,B,C,D，但是不同的元素肯定继承自同一个父类或者实现同一个接口,不妨设为Element，毕竟这样才能在同一个集合数据结构里面。现在你想要遍历这个集合，譬如你想得到每个元素的价格，然后求个总价，自然想到的方法是为Element加一个getPrice()方法，然后每个子类都实现这个方法，每个子类可以根据自己的情况选择不同的]]></description><category></category></item><item><title><![CDATA[OpenCV3.2+Visual Studio2017使用过程中的问题]]></title><link>https://blog.youkuaiyun.com/jieFengDi/article/details/61912604</link><guid>https://blog.youkuaiyun.com/jieFengDi/article/details/61912604</guid><author>jieFengDi</author><pubDate>Mon, 13 Mar 2017 09:07:55 +0800</pubDate><description><![CDATA[报错OpenCV Error: Assertion failed (size.width>0 && size.height>0) in cv::imshow原因：最后发现并不是配置错误，是自己的demo程序中选择的图片有问题，后来换了张图片就好了。 
图片的路径也有问题，就是separator用双反斜杠或者’/’, 不要用单反斜杠如果要配置可以参考这篇文章，但是不是最新版了，其实是差不多的： 
配置]]></description><category></category></item><item><title><![CDATA[Design Pattern(4)-Decrator Pattern]]></title><link>https://blog.youkuaiyun.com/jieFengDi/article/details/60981054</link><guid>https://blog.youkuaiyun.com/jieFengDi/article/details/60981054</guid><author>jieFengDi</author><pubDate>Thu, 09 Mar 2017 22:47:33 +0800</pubDate><description><![CDATA[装饰者模式，比前面几种design pattern都复杂，一般情况下并不应该用它。它是为了尽量不修改原有类、接口的情况下为其动态添加功能。但是如果允许修改原有类，我觉得还是应该修改原有类，以达到更好的设计。用了装饰者模式，复杂度增加，不便于后续维护，好处是不需要修改现有的接口啊，不需要动其他使用该类的程序。 
 
下面以一个麦当劳的例子，去麦当劳点一个果汁juice，你需要动态地实现加冰块、糖甚至其]]></description><category></category></item><item><title><![CDATA[Design Pattern(3)-State Pattern]]></title><link>https://blog.youkuaiyun.com/jieFengDi/article/details/60968416</link><guid>https://blog.youkuaiyun.com/jieFengDi/article/details/60968416</guid><author>jieFengDi</author><pubDate>Thu, 09 Mar 2017 20:55:47 +0800</pubDate><description><![CDATA[学过编译原理应该知道有限状态机，状态模式就是适用于那种希望 一个对象在不同状态下呈现不一样的行为的一种design pattern。我们以一个实例来诠释，有一个Door对象，Door对象有两个状态：OpenState，ClosedState，当我们提交一个请求的时候，它若在OpenState状态，希望它能执行关闭操作，它若在ClosedState状态，希望它能执行打开操作。官方类图： 
State：]]></description><category></category></item><item><title><![CDATA[Design Pattern(2)-Strategy Pattern]]></title><link>https://blog.youkuaiyun.com/jieFengDi/article/details/60962778</link><guid>https://blog.youkuaiyun.com/jieFengDi/article/details/60962778</guid><author>jieFengDi</author><pubDate>Thu, 09 Mar 2017 16:35:32 +0800</pubDate><description><![CDATA[试想这样的场景，一个员工，在面向对象设计里，它自己维护了自己的工作时长，职位类型等成员变量，那么我们做公司管理系统时就可能希望将计算工资这个方法放在员工类里，当我们想要知道一个员工的工资，就调用这个员工的getSalary()方法。但是问题是一个员工的工资计算策略可能会变，今天他是固定工资，明天经理觉得他表现不错，就想把他改成别的工资策略了说不定。因此该场景下，Context就是一个Worker，W]]></description><category></category></item><item><title><![CDATA[Design Pattern(1)-Template Method Pattern]]></title><link>https://blog.youkuaiyun.com/jieFengDi/article/details/60956715</link><guid>https://blog.youkuaiyun.com/jieFengDi/article/details/60956715</guid><author>jieFengDi</author><pubDate>Thu, 09 Mar 2017 11:15:27 +0800</pubDate><description><![CDATA[编程时为了提高复用性、可维护性，我们希望把共性的东西提取到一处，这是很自然的想法。但是往往有的时候不是那么容易提取共性， 因为他只是类似，并非一致，又夹杂着差异。典型的例子是JDBC代码。 
那么为了实现这种情况下的复用，唯有使粒度变小，将基本的原子操作提为共性。 
类图如下： 
People类public abstract class People {
    abstract void cook]]></description><category></category></item><item><title><![CDATA[python装饰器]]></title><link>https://blog.youkuaiyun.com/jieFengDi/article/details/51900300</link><guid>https://blog.youkuaiyun.com/jieFengDi/article/details/51900300</guid><author>jieFengDi</author><pubDate>Wed, 13 Jul 2016 18:06:39 +0800</pubDate><description><![CDATA[为函数动态地添加功能，却又不想改变原函数的定义: 
那么就可以用一个函数B接受函数A为参数，然后B再返回一个函数。A是被修饰的函数，返回的函数是修饰过后的函数，我们通过调用修饰后的函数就可以实现动态添加功能。def log(func):
    def wrapper(*args, **kw):
        print 'call %s():' % func.__name__
        r]]></description><category></category></item></channel></rss>