the7设计学习笔记-1

the7设计学习笔记-1

  • 每个页面的TOP与BOTTOM距离一致
  • 板块之间TOP与BOTTOM距离保持一致
  • 一般的首页布局为明暗-明暗的背景色布局,不能两个明也不能两个暗 //留白太多
  • 栏与栏之间高度距离对齐

浅谈php与JavaScript中的设计模式之工厂模式

前言

前段时间照抄了一大堆代码.结果发现自己根本没理解设计模式.最近也接触了php,正好把两者的设计模式给理解一下.
参考书籍《JavaScript设计模式-张容铭》,《learn php设计模式》,《JavaScript设计模式与开发实践-曾探》

何为工厂方法模式

定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类
所谓的决定并不是批模式允许子类本身在运行时做决定,而是指在编写创建者类时,不需知道创建的产品是哪一下,选择了使用
哪个子类,就决定了实际创建的产品是什么。 from http://www.cnblogs.com/li-peng/archive/2013/02/17/2913568.html

JavaScript中的工厂模式

laravel框架学习笔记-1

学习php当中的感觉

一周就上手php了.从前端转来学php并没遇到太大的问题,毕竟都是弱类型语言,SQL这块因为是个新产物所以还得慢慢品尝.
大概的感觉就是

语法

php不愧是世界上最好的语言(手动滑稽).
php内置了 三个sx 大量的函数所以开发起来还是比较方便的
函数默认是按值传递而不是引用传递这点与js不同

win下的编码问题

在win下操控路径必须得用iconv来转gbk 否则会遇到莫名其妙的bug Unix大法好

nginx

php的转发基本上靠这货了.为啥不是apache? 因为我喜欢nginx. 或者用nginx转发Apache也行 哈哈
nginx中涉及到大量的正则,正则是我的弱项.用了就忘- -还是得去反复使用

数据库操作

千万不要用mysql直接操作数据库 用mysqli 并且用mysqli的prepare语句来进行数据库操作 否则会遇到SQL注入问题.
sqlmap表示 prepare是啥?

后端验证

在数据验证这块得做两个验证,前端一个,着重后端验证数据.否则出啥问题就GG了

为什么是laravel?

上手PHP后就直接去用laravel框架了..为了 情怀 还是因为这个框架是跟express比较相近的..

mysql学习笔记3

插入记录 INSERT

1
INSERT [INTO] tbl_name [(col_name,...)] {VALUES|VALUE} ({expr|DEFAULT},...),(...),...

插入记录-范例

1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE TABLE users(
id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(20) NOT NULL,
password VARCHAR(32) NOT NULL,
age TINYINT UNSIGNED NOT NULL DEFAULT 10,
sex BOOLEAN
);
//插入几条记录
INSERT users VALUES(NULL,"Tom","123",25,1);
INSERT users VALUES(DEFAULT,"Tom","123",25,1);
//写入多条记录
INSERT users VALUES(DEFAULT,"JOHN","123",25,1),(NULL,"Rose",md5("123"),DEFAULT,0);

如果想要id遵守默认的编号 只需要设置该列为NULL或者DEFAULT即可.
如果有字段设置过DEFAULT 那么该列可以添加DEFAULT;

插入记录,使用子查询

1
INSERT [INTO] tbl_name SET col_name={expr|DEFAULT},...

只能一次性插入一条记录

范例

1
INSERT users SET username="Ben",password="456";

单表更新记录UPDATE

1
UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET col_name1={expr1|DEFAULT},[, col_name2={expr2|DEFAULT}]...[WHERE where_condition]

范例

1
UPDATE users set age=age+5;

让users表中age加5.

范例2-更新多列

1
UPDATE users SET age=age-id,sex=0;

指定记录更新

1
UPDATE users SET age=age+10 WHERE id%2=0;

单表删除记录DELETE

1
DELETE FROM tbl_name [WHERE where_condition]

范例

1
DELETE FROM users WHERE id = 5;

删除后再插入一条记录 即使ID号不连续,那么新插入的id是已有的最大id+1

表达式解析

查找记录 SELECT

查找前两列

1
SELECT id,username FROM users;

别名

1
SELECT id AS userID,username AS uname FROM users;

group by 语句对查询结果分组

1
GROUP BY {col_name|position} [ASC|DESC],...]

对分组的结果进行分组

按照性别分组

1
SELECT sex FROM users GROUP BY sex;

having语句设置分组条件

1
SELECT sex,age FROM users GROUP BY sex HAVING count(id);

order by 语句对查询结果进行排序

1
[ORDER BY {col_name|expr|position} [ASC|DESC],...]

范例

1
SELECT * FROM users ORDER BY id DESC;
1
SELECT * FROM users ORDER BY age ASC,id DESC;

如果age遇到了相同的 那么再进行id排序

LIMIT

范例

1
SELECT * FROM users LIMIT 2

返回两条记录

1
SELECT * FROM users LIMIT 3,2 //id 4,5

从3开始向后截取两条记录
3非id,指的是结果集中的第三条语句.
数据库从0开始算,所以3会返回至id为4,5

插入记录

1
2
3
4
CREATE TABLE test1(
id TINYINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(20)
);

跨表写入数据

1
INSERT test1(username) SELECT username FROM users WHERE age>=10;

mysql学习笔记2-

约束

  • 约束保证数据的完整性与一致性
  • 约束分为表级约束和列级约束
  • 约束类型包括
    – NOT NULL (非空约束)
    – PRIMARY KEY (主键约束)
    – UNIQUE KEY (唯一约束)
    – DEFAULT (默认约束)
    – FOREIGN KEY (外键约束)

外键约束的要求解析

FOREIGN KEY
保证数据的一致性,完整性.
实现一对一或一对多关系

  • 父表与子表必须使用相同的存储引擎,而且禁止使用临时表.
  • 数据表的存储引擎只能为InnoDB
  • 外键列和参照列必须具有相似的数据类型.其中数字的长度或者是否有符号位必须相同;而字符的长度则可以不同.
  • 外键列和参照列必须创建索引.如果外键列不存在索引的话,MySQL将自动创建索引

mysql学习笔记1——数据库的创建与查询

MYSQL规范

  1. 关键字与函数名称全部大写
  2. 数据库名称,表名称,字段名称全部小写
  3. SQL语句必须以分号结尾

连接数据库

1
musql -u user -p userpassword [-P port -H serverLocation]

创建数据库

在mysql中DATABASE与SCHEMA是一样的

1
CREATE {DATABASE|SCHEMA} [IF NOT EXISTS] db_name [DEFAULT] CHARACTER SET [=] charset_name

语法说明:花括号代表必须要有的 竖线代表选项(or) 中括号为可选项.

1
CREATE DATABASE t1; //创建一个t1的数据库

如果当数据库存在的话再次添加相同的数据库将会报错.但是加上IF NOT EXISTS将会屏蔽掉这个错误信息

1
CREATE DATABASE IF NOT EXISTS t1;

promise学习笔记

本文大部分内容来自阮一峰的ES6入门 这里针对个人所需记录的笔记,如需全面浏览请转自上述链接

Promise含义

Promise简单来说就是一种容器,里面保存着异步操作的结果.promise对象有以下两个特点

  1. 对象的状态不受外界影响,Promise有三种状态,Pending(进行),Resolved(已完成),Rejected(已失败).只有异步操作的结果才能决定当前是哪一种状态,其他任何操作都无法改变这个状态
  2. 一旦状态改变,就不会再改变.Promise状态的改变只有两种可能,从pending变为Resolved和从Pending变为Rejected.一旦这两种情况发生,状态就凝固了,会一直保持这个结果.就算在对Promise对象添加回调函数,也会立即得到这个结果

基本用法

Promise对象是一个构造函数,用来生成Promise实例

1
2
3
4
5
6
7
8
var promise=new Promise(function(resolve,reject){
//...some code
if(/* 异步操作成功 */){
resolve(value);
}else{
reject(error)
}
})

resolve函数的作用是,将Promise对象的状态从“未完成”变为“成功”(即从Pending变为Resolved),在异步操作成功时调用,并将异步操作的结果,作为参数传递出去;reject函数的作用是,将Promise对象的状态从“未完成”变为“失败”(即从Pending变为Rejected),在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。

bootstrap实践笔记

长期更新,前辈总结的bootstrap经验

如何部署container与container-fluid

为了方便更改,在body标签下部署container-fluid,因为container不能嵌套container原则,如果想内容居中则可以使用.limiter这个class.具体参考如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<body>
<div class="container-fluid">
<div class="limiter">
<div class="row">
<div class="col-sm-12">
</div>
</div>
</div>
</div>
<style>
.limiter{
max-width:1170px;
margin:0 auto;
}
</style>
</body>

row与col之间的布局

原则上一个section应该只有一个row.一个row下面可以有多个(总数超过12列)的col,那么要实现col与col之间padding为0 应该用一个额外的class如.no-gutters来实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<div class="row .no-gutters">
<div class="col-sm-8"></div>
<div class="col-sm-8"></div>
<div class="col-sm-8"></div>
<div class="col-sm-8"></div>
</div>
<style>
.row.no-gutters {
margin-right: 0;
margin-left: 0;
}
.row.no-gutters [class^="col-"],
.row.no-gutters [class*=" col-"] {
padding-right: 0;
padding-left: 0;
}
</style>

Iterator与Generator学习笔记

本文阅读资料来自阮一峰ES6入门自己仅仅根据自己需要整理了自己所阅读的笔记

Iterator

Iterator就是一个遍历器,可以手动控制遍历.在js中for循环都是直接遍历的,如果我们想手动控制遍历还得自己写函数包装.
阮一峰的Blog给出了一个模拟Iterator方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var it = makeIterator(['a', 'b']);
it.next() // { value: "a", done: false }
it.next() // { value: "b", done: false }
it.next() // { value: undefined, done: true }
function makeIterator(array){
var nextIndex = 0;
return {
next: function(){
return nextIndex < array.length ?
{value: array[nextIndex++], done: false} :
{value: undefined, done: true};
}
}
}