2018-03-07 小程序页面传值、十大编程算法之三:堆排序算法、设计模式-单例模式、get和post区别?(更新)、赋值

第一组:杨昊 小程序页面传值

开发小程序的时候,也会遇到页面之间相互传值的问题,这里分享一下小程序页面之间的传值方式。

转载自:http://blog.csdn.net/gaoqiang1112/article/details/77876826

正向传值:上一页面 --> 下一页面

  1. url传值


    2018-03-07 小程序页面传值、十大编程算法之三:堆排序算法、设计模式-单例模式、get和post区别?(更新)、赋值_第1张图片
  2. 本地储存


    2018-03-07 小程序页面传值、十大编程算法之三:堆排序算法、设计模式-单例模式、get和post区别?(更新)、赋值_第2张图片
  3. 全局的app对象

2018-03-07 小程序页面传值、十大编程算法之三:堆排序算法、设计模式-单例模式、get和post区别?(更新)、赋值_第3张图片

反向传值:下一页面 --> 上一页面

  1. 本地储存


    2018-03-07 小程序页面传值、十大编程算法之三:堆排序算法、设计模式-单例模式、get和post区别?(更新)、赋值_第4张图片
  2. 全局的app对象

2018-03-07 小程序页面传值、十大编程算法之三:堆排序算法、设计模式-单例模式、get和post区别?(更新)、赋值_第5张图片

第二组:徐晋 十大编程算法之三:堆排序算法

归并排序(Merge sort,台湾译作:合并排序)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。

算法步骤:

  1. 申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
  2. 设定两个指针,最初位置分别为两个已经排序序列的起始位置
  3. 比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
  4. 重复步骤3直到某一指针达到序列尾
  5. 将另一序列剩下的所有元素直接复制到合并序列尾
归并排序.gif

第三组:蔡永坚 设计模式-单例模式

单例模式的介绍


2018-03-07 小程序页面传值、十大编程算法之三:堆排序算法、设计模式-单例模式、get和post区别?(更新)、赋值_第6张图片

说到单例模式,大家第一反应应该就是——什么是单例模式?,从“单例”字面意思上理解为——一个类只有一个实例,所以单例模式也就是保证一个类只有一个实例的一种实现方法罢了(设计模式其实就是帮助我们解决实际开发过程中的方法, 该方法是为了降低对象之间的耦合度,然而解决方法有很多种,所以前人就总结了一些常用的解决方法为书籍,从而把这本书就称为设计模式),下面给出单例模式的一个官方定义:确保一个类只有一个实例,并提供一个全局访问点。为了帮助大家更好地理解单例模式,大家可以结合下面的类图来进行理解,以及后面也会剖析单例模式的实现思路:

为什么会有单例模式

看完单例模式的介绍,自然大家都会有这样一个疑问——为什么要有单例模式的?它在什么情况下使用的?从单例模式的定义中我们可以看出——单例模式的使用自然是当我们的系统中某个对象只需要一个实例的情况,例如:操作系统中只能有一个任务管理器,操作文件时,同一时间内只允许一个实例对其操作等,既然现实生活中有这样的应用场景,自然在软件设计领域必须有这样的解决方案了(因为软件设计也是现实生活中的抽象),所以也就有了单例模式了。

C#中实现了单例模式的类

理解完了单例模式之后,菜鸟又接着问了:.NET FrameWork类库中有没有单例模式的实现呢?

经过查看,.NET类库中确实存在单例模式的实现类,不过该类不是公开的,下面就具体看看该类的一个实现的(该类具体存在于System.dll程序集,命名空间为System,大家可以用反射工具Reflector去查看源码的):

 // 该类不是一个公开类
    // 但是该类的实现应用了单例模式
    internal sealed class SR
    {
        private static SR loader;
        internal SR()
        {
        }
        // 主要是因为该类不是公有,所以这个全部访问点也定义为私有的了
        // 但是思想还是用到了单例模式的思想的
        private static SR GetLoader()
        {
            if (loader == null)
            {
                SR sr = new SR();
                Interlocked.CompareExchange(ref loader, sr, null);
            }
            return loader;
        }

        // 这个公有方法中调用了GetLoader方法的
        public static object GetObject(string name)
        {
            SR loader = GetLoader();
            if (loader == null)
            {
                return null;
            }
            return loader.resources.GetObject(name, Culture);
        }
    }


第四组:张元一 get和post区别?

但是在逛知乎时又看到了这篇文章:听说『99% 的人都理解错了 HTTP 中 GET 与 POST 的区别』??,指出了前文的两个错误:

100 continue 只有在请求里带了Expect: 100-continueheader 的时候才有意义。
When the request contains an Expect header field that includes a 100-continue expectation, the 100 response indicates that the server wishes to receive the request payload body, as described in Section 5.1.1. The client ought to continue sending the request and discard the 100 response. If the request did not contain an Expect header field containing the 100-continue expectation, the client can simply discard this interim response.

我们通常在讨论 GET vs POST 的时候,实际上讨论的是 specification,而不是 implementation。什么是 specification?说白了就是相关的 RFC。implementation 则是所有实现了 specification 中描述的代码/库/产品,比如 curl,Python 的 requests 库,或者 Chrome。

POST 请求怎么发送,根本就不是这段 RFC 在讨论的事情。RFC 中只说明了 100 continue 和 Expect header 的联系,比如你想在 GET 请求里带 body,一样可以发送 Expect: 100-continue 并等待 100 continue,这是符合标准的。

也就是说,『XHR 发送两个 TCP packets』是关于 implementation 的知识,而不是关于 specification 的知识。你不能说『Chrome 在 AJAX POST 的时候会发两个 TCP packets,GET 只会发一个』是 GET 和 POST 的区别,正如你不能因为北京 PM 2.5 经常爆表就说国家关于工业废气排放的标准有问题。


第五组:陈孚楠 赋值

最近由一个自己不太理解的BUG,导致了一系列的学习。(后续的描述可能有点乱,且看且珍惜吧)

先看BUG吧(简化后的):


2018-03-07 小程序页面传值、十大编程算法之三:堆排序算法、设计模式-单例模式、get和post区别?(更新)、赋值_第7张图片

代码里先实例化了一个Model对象a1,给其中一个属性‘AA_Content’赋值为1;
然后又实例化了一个Model对象a3,接着实例化了一个Db对象a1Db,并设其Value为a3;
最后我想把a1赋值给a3,提交到数据库后发现‘AA_Content’为空。带着一脸懵逼就去开始一系列的测试。

在测试中,突然发现一个抛在脑后很久的东西,就是变量的赋值(具体的下次再说)
针对这段代码的解释如下:
实例化a1对象,系统为它分配了一个空间;a1的值指向空间‘1’的首地址

实例化a3对象,系统也为它分配了一个空间。a3的值指向空间‘3’的首地址

将a3赋给a1Db的value,这个操作不会为value分配空间,只是把a3的值即
空间‘3’的首地址赋值给value,那么此时的a1Db的value指向空间‘3’

2018-03-07 小程序页面传值、十大编程算法之三:堆排序算法、设计模式-单例模式、get和post区别?(更新)、赋值_第8张图片

最后又把a1赋值给了a3。同上,其实就是把a1指向的空间‘1’的首地址赋值给了a3,也就是现在a3指向的空间是‘1’


2018-03-07 小程序页面传值、十大编程算法之三:堆排序算法、设计模式-单例模式、get和post区别?(更新)、赋值_第9张图片

但最后Db层的操作是把value指向的空间‘3’内的值存入数据库,所以数据库中的AA_Content’为空。(解决办法也很简单,不过还是下次再说吧)

你可能感兴趣的:(2018-03-07 小程序页面传值、十大编程算法之三:堆排序算法、设计模式-单例模式、get和post区别?(更新)、赋值)