0%

redux是用于管理web应用状态的一套方案,不仅限于react构建的应用,但是最常被应用的地方是react应用,在大多数web应用中,是不太需要redux的,但是一旦应用涉及到的共享状态非常多,组件间需要频繁地通信时,再依靠零散的组件来组合就会造成应用内部的逻辑很容易出现混乱,难以维护,此时,应用redux的好处立马体现,将共有状态交给redux管理,组件不再操心如何与家族成员的沟通,此中涉及到了多种模式的应用,比如策略模式、代理模式、发布订阅模式等等,这些实践是学习构建JavaScript应用非常好的资料,因此对其源码进行分析和学习是大有脾益的。

Read more »

迭代器模式是指提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。大部分现代语言都已经在语言层面实现了迭代器。比如在JavaScript中的Array.prototype.forEach

Read more »

网络协议栈架构

TCP/IP是一个协议族的统称,包含了IP协议、ICMP协议、TCP协议以及HTTP、ftp、pop3等,网络协议栈可以分为七层,即著名的OSI七层模型。而TCP/IP将这七层又分为四层,分别是:

  • 应用层:应用程序据此访问网络
  • 传输层:TCP、UDP协议
  • 网络层:IP、ARP、RARP、ICMP等
  • 网络接口层:TCP/IP的基层,负责数据帧的发送和接收
    Read more »

代理模式是为一个对象提供一个代用品或占位符,以便控制对它的访问。代理包含保护代理和虚拟代理,保护代理可以实现对访问对象的过滤,用于控制不同权限的对象对目标对象的访问,而虚拟代理则可以将一些开销比较大的对象放在真正需要时再去创建。

Read more »

今天开始复习数据结构与算法方面的知识,使用的教材是《Algorithms》第四版,希望在这个过程中学习到有用的知识。顺便也温习一下JAVA语言。

Java程序的基本结构

一个Java程序通常包含一系列的静态方法和数据类型的声明,不论是Java还是其他的现代编程语言,我们使用以下五个component来编写程序:

  • Primitive data types 准确地定义程序中的整型,数字,和布尔值的意义。
  • Statement 允许我们创建一个变量并赋予其值,控制执行流或造成单因子影响,我们使用六种声明方式:declarations, assignments, conditionals, loops, calls, and returns
  • Arrays 允许我们使用同一类型的多个值
  • Static methods 允许我们封装并重用编码,以相互独立的模块来构建程序。
  • Strings 是一串字符序列,java内置了一些针对strings的操作
  • Input/Output 可以使程序和外部世界相联系。
  • Data abstraction 的扩展封装和重用允许我们自定义数据类型,以支持面向对象的编程方式。

运行一个java程序涉及到与操作系统或程序运行环境的交互,为了清晰和经济,我们在一种叫做叫做虚拟终端的环境下描述这些行为。
触发一个Java程序,我们首先使用javac命令类对齐进行编译,然后使用java命令使其运行。

Primitive data types and expressions

数据结构是值和对值的操作的集合,java语言中基本的数据类型包含以下四种:

  • int 整型+算术操作符(int)
  • real numbers 实数+算数操作符(double)
  • Booleans 布尔值+逻辑运算符(boolean)
  • Characters 字母和符号(char)
    类型转换
    将double转换成int时,会将小数部分去除而不是四舍五入。最好的实践是只同时对同一种类型的数据做操作。

Arrays

An array stores a sequence of values that are all of the same type.
The method that we use to refer to individual values in an array is numbering and then indexing them

Creating and initializing an array.
  • Declare the array name and type
  • Create the array
  • Initialize the array values.
1
2
3
4
5
6
double[] a;//声明类型和名字
a = new double[N];//创建一个数组
//or
//double[] a = new double[N];
//or
//int[] a = { 1, 1, 2, 3, 5, 8 };

the default initial value of variables of type double in a Java array is 0.0
The default initial value is zero for numeric types and false for type boolean.

Using an array

After declaring and creating an array, you can refer to any individual value anywhere you would use a variable namein a program by enclosing an integer index in square brackets after the array name. Once we create an array, its size is fixed. A program can refer to the length of an array a[] with the code a.length.

注意:数组名是对数组位置的记录(指针类型),如果数组名字发生传递,则在传递后仍然指向同一数组,如下:

1
2
3
4
int[] a = new int[N];
a[i] = 1234;
int[] b = a;
b[i] = 5678; // a[i] is now 5678.
Two-dimensional arrays

A two-dimensional array in Java is an array of one-dimensional arrays. A two-dimensional array may be ragged (its arrays may all be of differing lengths), but we most often work with (for appropriate parameters M and N) M-by-N two-dimensional arrays that are arrays of M rows, each an array of length N (so it also makes sense to refer to the array as having N columns).

to create the array,we specify the number of rows followed by the number of columns after the type name (both within square brackets):
double[][] a = new double[M][N];

整数类型默认初始化为0,布尔值则默认为false。

Transactions are typically implemented by “saving-up” your batch of changes to be applied all at once; this has the nice side effect of drastically improving the efficiency of those updates. In other words, transactions can make your scripts faster and potentially more robust (you still need to use them correctly to reap that benefit).

PDO内置了开启事务的方法PDO::beginTransaction(),当开启事务后执行的命令全部有效时,执行PDO::commit()才会将最终的结果确定,
如果其中一个命令执行失败,则事务机制会将数据库的状态还原至事务开启之前。即调用PDO::rollBack()使得事务发生回滚。在使用PDO链接支持事务的数据库时,每一个操作都隐式地开启了一个事务,此时会执行自动提交,即autocommit,而对不支持事务的数据库引擎开启事务时,会报一个严重错误。
mysql需要将引擎设置为innodb才能够支持事务。

Read more »

策略模式的定义是:定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。
一个基于策略模式的程序至少由两部分组成。第一个部分是一组策略类,策略类封装了具体的算法,并负责具体的计算过程。第二个部分是环境类 Context,Context 接受客户的请求,随后把请求委托给某一个策略类。要做到这点,说明 Context 中要维持对某个策略对象的引用。

其实策略模式的含义还是很好理解,下面我们通过两个实例来详细说明一下。

Read more »

PDO提供了许多的方法可以让我们操作数据,主要有:exec(),query(),prepare(),quote(),lastInsertId,setAttribute(),getAttribute(),errorCode(),errorInfo()。

Read more »

PDO简介

在PHP开发中,与数据库的交互始终是个绕不开的话题,PHP虽然原生支持许多中数据库,但是对数据库的具体支持程度并不太理想,而PDOPHP Data Objects则是我们在大多数场景下使用的数据库连接工具。

摘自PHP手册:
The PHP Data Objects (PDO) extension defines a lightweight, consistent interface for accessing databases in PHP. Each database driver that implements the PDO interface can expose database-specific features as regular extension functions.
regardless of which database you’re using, you use the same functions to issue queries and fetch data.

也就是说,PDO提供了一个操作数据库的统一接口,我们可以使用相同的方式去执行SQL命令而不需要关心面对的是什么类型的数据库。

Read more »