<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[aimsgmiss的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/aimsgmiss</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; aimsgmiss]]></copyright><item><title><![CDATA[背包问题（0～1）]]></title><link>https://blog.youkuaiyun.com/aimsgmiss/article/details/119116707</link><guid>https://blog.youkuaiyun.com/aimsgmiss/article/details/119116707</guid><author>aimsgmiss</author><pubDate>Mon, 26 Jul 2021 19:29:36 +0800</pubDate><description><![CDATA[#define kProductNum 12
void knapsackProblem(){
    int value[] = {0,10000,2000,2550,2900,500,4000,3000,22000,5894,2455,5885};
    int weight[] = {0,1,3,4,5,1,2,3,1,3,1,2};
    int v[kProductNum][kProductNum] = {0};
    int path[kProductNum][kProductNum] =.]]></description><category></category></item><item><title><![CDATA[迪杰斯特拉算法(Dijkstra) ES6实现]]></title><link>https://blog.youkuaiyun.com/aimsgmiss/article/details/119116439</link><guid>https://blog.youkuaiyun.com/aimsgmiss/article/details/119116439</guid><author>aimsgmiss</author><pubDate>Mon, 26 Jul 2021 19:20:58 +0800</pubDate><description><![CDATA[class Graph{

    constructor(props){
        this.edges = [
            [65535,65535,65535,65535,65535,65535,65535],
            [65535,65535,65535,65535,65535,65535,65535],
            [65535,65535,65535,65535,65535,65535,65535],
            [655...]]></description><category></category></item><item><title><![CDATA[对字符串 “ABC” 所有子集的列举]]></title><link>https://blog.youkuaiyun.com/aimsgmiss/article/details/118224447</link><guid>https://blog.youkuaiyun.com/aimsgmiss/article/details/118224447</guid><author>aimsgmiss</author><pubDate>Fri, 25 Jun 2021 17:00:08 +0800</pubDate><description><![CDATA[/***
 * 引用：http://data.biancheng.net/view/34.html
 * 对字符串 “ABC” 所有子集的列举（使用回溯法-这里实际上是二叉树的深度优先遍历）
 *从集合的开头元素开始，对每个元素都有两种选择：取还是舍。当确定了一个元素的取舍之后，再进行下一个元素，直到集合最后一个元素。其中的每个操作都可以看作是一次尝试，每次尝试都可以得出一个结果。将得到的结果综合起来，就是集合的所有子集。
 *
 */

void allPermutation(char* str,NSS.]]></description><category></category></item><item><title><![CDATA[iOS 锁的性能测试]]></title><link>https://blog.youkuaiyun.com/aimsgmiss/article/details/107911269</link><guid>https://blog.youkuaiyun.com/aimsgmiss/article/details/107911269</guid><author>aimsgmiss</author><pubDate>Mon, 10 Aug 2020 13:42:56 +0800</pubDate><description><![CDATA[1、主线程中测试代码：

1.1、通过clock_gettime() 转换为微秒时间进行比较 ，通过在主线程中分别尝试10000次加锁，解锁操作 得出diff：


static uint32_t getCurrentTimeIntervalMicrosecond()
{
    struct timespec         time = {0, 0};
    clock_gettime(CLOCK_MONOTONIC, &amp;time);
    
    return (uint32_t)(ti]]></description><category></category></item><item><title><![CDATA[Wireshark抓取发起一次请求并返回小部分 流程解读]]></title><link>https://blog.youkuaiyun.com/aimsgmiss/article/details/107693335</link><guid>https://blog.youkuaiyun.com/aimsgmiss/article/details/107693335</guid><author>aimsgmiss</author><pubDate>Thu, 30 Jul 2020 16:32:50 +0800</pubDate><description><![CDATA[1、共计收到的包数量与消耗的字节数：



2、 三次握手不解释，直接进入TLSv1.2 C与S发生了什么：



3、ack确认包的计算：




]]></description><category></category></item><item><title><![CDATA[使用Wireshark 抓取三次握手与四次挥手包]]></title><link>https://blog.youkuaiyun.com/aimsgmiss/article/details/107669717</link><guid>https://blog.youkuaiyun.com/aimsgmiss/article/details/107669717</guid><author>aimsgmiss</author><pubDate>Wed, 29 Jul 2020 17:00:18 +0800</pubDate><description><![CDATA[1、TCP数据包格式：



2、三次握手图：



3、四次挥手



4、第一次握手数据包：



5、第二次握手数据包：

6、第三次握手数据包：



7、第一次挥手数据包：



8、第二次挥手数据包：

9、第三次挥手数据包：

10、第四次挥手数据包（没找到？？？？？？？）

11、出现flag= REST:



12、 Wireshark抓取的记录：
...]]></description><category></category></item><item><title><![CDATA[备忘录模式]]></title><link>https://blog.youkuaiyun.com/aimsgmiss/article/details/106646032</link><guid>https://blog.youkuaiyun.com/aimsgmiss/article/details/106646032</guid><author>aimsgmiss</author><pubDate>Tue, 09 Jun 2020 16:49:33 +0800</pubDate><description><![CDATA[备忘录模式：在不破坏封装前提条件下，捕获一个对象的内部状态，在对象之外，保存状态，以便在适当的时候恢复对象，
应用实例：
1、玩游戏时的存档
2、Command + z
example：
Originator 发起请求将需要保存的信息保存到Memento(备忘录)中，然后将对象提交到Caretaker实例保管

类图：


...]]></description><category></category></item><item><title><![CDATA[建造者模式(Builder)]]></title><link>https://blog.youkuaiyun.com/aimsgmiss/article/details/106645875</link><guid>https://blog.youkuaiyun.com/aimsgmiss/article/details/106645875</guid><author>aimsgmiss</author><pubDate>Tue, 09 Jun 2020 16:43:40 +0800</pubDate><description><![CDATA[建造者模式：将一个复杂对象的构建与它的表现分离，使得同样的构建过程可以创建不同的表现。


构建过程分为:客户-指导-生成器 Client - Director - Builder：

类图：



时序图：

具体实现：


#import &lt;iostream&gt;
#import &lt;string&gt;
//最终被建造产品
class IHouse{
public:
    virtual ~IHouse(){}
protected:
    int _foundationCount...]]></description><category></category></item><item><title><![CDATA[原型模式(Prototype）]]></title><link>https://blog.youkuaiyun.com/aimsgmiss/article/details/106626312</link><guid>https://blog.youkuaiyun.com/aimsgmiss/article/details/106626312</guid><author>aimsgmiss</author><pubDate>Mon, 08 Jun 2020 18:43:08 +0800</pubDate><description><![CDATA[原型模式：使用原型实例指定创建对象的种类，并通过复制这个原型创建新的对象

Objective-C 实现原型模式应用场景:
Cocoa Touch框架为Object的派生类提供了实现深复制的协议
NSObject的子类需要实现NSCopying协议及方法 - (id)copyWithZone:(nullable NSZone *)zone
否则发送copy消息引发异常。

简单理解原型模式就是对象的复制。


#import &lt;iostream&gt;
#import &lt;str...]]></description><category></category></item><item><title><![CDATA[策略模式]]></title><link>https://blog.youkuaiyun.com/aimsgmiss/article/details/106625340</link><guid>https://blog.youkuaiyun.com/aimsgmiss/article/details/106625340</guid><author>aimsgmiss</author><pubDate>Mon, 08 Jun 2020 17:58:30 +0800</pubDate><description><![CDATA[策略模式：把相关算法分离为不同的类，称为策略，这些算法可以相互替换，本模式使得算法可独立于使用它的客户而变化


#import &lt;string&gt;
#import &lt;iostream&gt;
using namespace std;
class IStrategy{
public:
    ~IStrategy(){}
public:
   virtual bool doMethod(std::string str) const = 0;
};

class ByCarStrategy:p]]></description><category></category></item><item><title><![CDATA[BeeHive、CTMediator、MGJRouter]]></title><link>https://blog.youkuaiyun.com/aimsgmiss/article/details/106502152</link><guid>https://blog.youkuaiyun.com/aimsgmiss/article/details/106502152</guid><author>aimsgmiss</author><pubDate>Tue, 02 Jun 2020 18:17:38 +0800</pubDate><description><![CDATA[BeeHive
提供以key为@protocol(协议)，value为class实现协议的键值对，当协议发生改变时候,编译阶段能够及时感知.

BeeHive组件化产生背景：
1)、功能代码之间的依赖复杂，可维护性差；
2)、协同开发过程中，并行开发存在block;
3)、功能界限不清晰，基础功能模块变动，会导致上层业务受到影响；
4)、各团队负责功能模块，在主工程中有耦合代码(其它模块发生改变，主工程也需要改变)；
5)、上层业务出现反向提供功能给底层情况(违反了设计模式的依赖反转原则)；
6)、性能优化]]></description><category></category></item><item><title><![CDATA[单列模式]]></title><link>https://blog.youkuaiyun.com/aimsgmiss/article/details/106410097</link><guid>https://blog.youkuaiyun.com/aimsgmiss/article/details/106410097</guid><author>aimsgmiss</author><pubDate>Thu, 28 May 2020 17:47:10 +0800</pubDate><description><![CDATA[单列模式要求类的实例，在整个应用的生命周期只会实例化一次
无论任何时候，返回的都是同一个实例


#import &lt;Foundation/Foundation.h&gt;
#import &lt;pthread.h&gt;

//这种写法出现在多线程中就会出现实例化多个singleInstance
class SingletonDemo1{
private:
    static SingletonDemo1* singleInstance;
public:
    static Singleto..]]></description><category></category></item><item><title><![CDATA[责任链模式]]></title><link>https://blog.youkuaiyun.com/aimsgmiss/article/details/106409035</link><guid>https://blog.youkuaiyun.com/aimsgmiss/article/details/106409035</guid><author>aimsgmiss</author><pubDate>Thu, 28 May 2020 17:07:33 +0800</pubDate><description><![CDATA[责任链模式：是多个对象都有机会处理请求，从而避免请求的发送者和接受者
之间发生耦合，此模式形成一条链，并延着这条链的传递请求，直到有一个对象能够处理它为止

责任链主要思想是，对象引用了同一类型的另一个对象，形成一条链。链中的每个对象实现了同样的
方法，处理链中第一个对象发起一个请求，如果对象不知道如何处理请求，就把他传递下一个响应
者。

UIView响应者链就是一个完美的责任链模式具体应用：



#import &lt;Foundation/Foundation.h&gt;
#import &lt;.]]></description><category></category></item><item><title><![CDATA[组合模式]]></title><link>https://blog.youkuaiyun.com/aimsgmiss/article/details/106405686</link><guid>https://blog.youkuaiyun.com/aimsgmiss/article/details/106405686</guid><author>aimsgmiss</author><pubDate>Thu, 28 May 2020 15:17:21 +0800</pubDate><description><![CDATA[组合模式把相同基类型的对象组合到树状结构中，父节点包含同类型的子节点
形成"部分-整体"的层次结构
部分-整体：既包含对象的组合又包含作为叶子节点的单个对象的一种层次机构
每个组合体包含其它节点，可以使叶子节点或者其它组合体，这种关系在
层次结构中递归重复，每个组合或者叶子节点具有相同的基类，同样的
操作可以应用他们中的每一个，不必再客户端做类型检查。

Objective-C中使用UIView实现组合模式，UIView的实例可以包含其它实例
形成统一的树形结构，让客户端对单个UIView对象和UIView]]></description><category></category></item><item><title><![CDATA[代理模式]]></title><link>https://blog.youkuaiyun.com/aimsgmiss/article/details/106388914</link><guid>https://blog.youkuaiyun.com/aimsgmiss/article/details/106388914</guid><author>aimsgmiss</author><pubDate>Wed, 27 May 2020 19:35:58 +0800</pubDate><description><![CDATA[代理模式类图：





 NSProxy继承NSObject协议 作为抽象基类和NSObject同级别的基类
 发送给NSProxy子类(代理)的消息会被转发给真正的实体对象，或者让代理加载
 真正的实体对象，或把代理自身变成实体对象，让开销比较大的对象实行
 懒实例化(邮件Mail应用)收到邮件消息中只会显示一些基本信息，当用户点击站位图形
 时，开始加载真正的图形内容，原先的站位图标作为一个代理


 Clie...]]></description><category></category></item><item><title><![CDATA[适配器模式]]></title><link>https://blog.youkuaiyun.com/aimsgmiss/article/details/106382079</link><guid>https://blog.youkuaiyun.com/aimsgmiss/article/details/106382079</guid><author>aimsgmiss</author><pubDate>Wed, 27 May 2020 15:10:17 +0800</pubDate><description><![CDATA[适配器模式：将原来不能够在一起工作的类变得能在一起工作
类适配器：通过实现接口和继承实现


对象适配器：通过实现和组合实现



1、iPhone 6 充电电压5V，插座电压220V 手机通过电源适配器直接能够用上
目标电压5V,220V电压作为适配者(Adaptee)。
2、Objective-C 中协议充当Target需要被实现，UIViewController充当适配者，
如何让协议和UIViewController进行通信，这时候需要自定义视图控制作为适配器
让协议和UIViewControll.]]></description><category></category></item><item><title><![CDATA[中介模式]]></title><link>https://blog.youkuaiyun.com/aimsgmiss/article/details/106356741</link><guid>https://blog.youkuaiyun.com/aimsgmiss/article/details/106356741</guid><author>aimsgmiss</author><pubDate>Tue, 26 May 2020 15:15:55 +0800</pubDate><description><![CDATA[1、中介模式产生背景当系统变得越来越复杂之后，模块与模块的之间依赖性非常强大，后期维护背景加大。

2、引入中介模式之后变得简洁了：模块与模块之间不直接引用，单方面直接通过中介者交互，中介甚至不需要依赖任何模块，模块也不需要知道其他模块的存在，这样由系统的网状结构变得更加简洁，大大减低了后期系统的维护，如图所示：


...]]></description><category></category></item><item><title><![CDATA[命令模式(C++版本和Objective-C)]]></title><link>https://blog.youkuaiyun.com/aimsgmiss/article/details/106356614</link><guid>https://blog.youkuaiyun.com/aimsgmiss/article/details/106356614</guid><author>aimsgmiss</author><pubDate>Tue, 26 May 2020 15:06:47 +0800</pubDate><description><![CDATA[#import &lt;Foundation/Foundation.h&gt;
#import &lt;iostream&gt;
#import "NSInvocationTest.h"
// receiver
class AirConditioning{
public:
    void turnOn(){
        NSLog(@"AirConditioning turnOn");
    }
    
    void turnOff(){
        NSLog(@"AirCondit..]]></description><category></category></item><item><title><![CDATA[装饰模式笔记(网络改编而成)]]></title><link>https://blog.youkuaiyun.com/aimsgmiss/article/details/106339569</link><guid>https://blog.youkuaiyun.com/aimsgmiss/article/details/106339569</guid><author>aimsgmiss</author><pubDate>Mon, 25 May 2020 18:38:47 +0800</pubDate><description><![CDATA[#import &lt;Foundation/Foundation.h&gt;
#include &lt;string&gt;
#include &lt;iostream&gt;
using namespace::std;
class Hamburger{
public:
    Hamburger(){
    }
    ~Hamburger(){
    }
public:
    virtual float get_privice(){
        return 0.0f;
    }
  ..]]></description><category></category></item><item><title><![CDATA[架构设计]]></title><link>https://blog.youkuaiyun.com/aimsgmiss/article/details/106334464</link><guid>https://blog.youkuaiyun.com/aimsgmiss/article/details/106334464</guid><author>aimsgmiss</author><pubDate>Mon, 25 May 2020 15:37:34 +0800</pubDate><description><![CDATA[1、测试阶段未发现缺陷，很可能导致线上用户大规模异常，如果未修复，造成用户损失；

2、业务迭代，功能复杂，卡顿现象频出，用户体验差；

3、关键业务监控不到位，出现业务异常，无感知；

4、支付宝开发测试，仅仅占整体工程量的25%，以下即响应工作拆解；








...]]></description><category></category></item></channel></rss>