diff --git a/00-前端工具/02-Atom在前端的使用.md b/00-前端工具/02-Atom在前端的使用.md
new file mode 100644
index 0000000..5de8c3a
--- /dev/null
+++ b/00-前端工具/02-Atom在前端的使用.md
@@ -0,0 +1,65 @@
+
+
+## 常用插件
+
+
+- `Emmet`:快速生成HTML片段,比如输入ul>li*3可以快速生成:
+
+```html
+
+```
+
+[详细地址](https://atom.io/packages/emmet),[Emmet教程](https://docs.emmet.io/cheat-sheet/)
+
+- `Snippets`:快速生成 js 代码片段(用来处理代码片段的模板输出),[详细地址](https://atom.io/packages/snippets)
+
+- `Tree View`:文件浏览器,[详细地址](https://atom.io/packages/tree-view)
+
+- `file icons`:文件识别图标,使用这个插件会让你的编辑器显示对应的图标,[详细地址](https://atom.io/packages/file-icons)
+
+- `language-javascript-jsx`:jsx语法高亮 ,[详细地址](https://atom.io/packages/language-javascript-jsx)
+
+- `language-vue`:vue语法高亮,[详细地址](https://atom.io/packages/language-vue)
+
+- `linter-eslint`:eslint插件,[详细地址](https://atom.io/packages/linter-eslint)
+
+- `vue-snippets`:vue代码片段,[详细地址](https://atom.io/packages/vue-snippets)
+
+- `pigments`:颜色显示器,[详细地址](https://atom.io/packages/pigments)
+
+- `linter-eslint`:语法检查
+
+- `Atom-Beautify`:代码格式化
+
+参考链接:
+
+## 插件无法安装的问题
+
+### 方法一:设置代理
+
+`C:\Users\smyhvae\.atom\.apm`目录下的.apmrc配置文件(没有就新建一个),然后添加代理信息:
+
+```
+strict-ssl=false
+https-proxy=http://127.0.0.1:1080/
+http-proxy =http://127.0.0.1:1080/
+```
+
+这里的 http://127.0.0.1:1080,是我自己的 Shadowsocks 代理,你需要设置成自己的可用代理。
+然后再执行:
+
+```
+apm install --check
+```
+
+应该可以测试成功,祝好运~~
+
+参考链接:
+
+-
+
+-
\ No newline at end of file
diff --git a/00-前端工具/02-推荐链接.md b/00-前端工具/推荐链接.md
similarity index 100%
rename from 00-前端工具/02-推荐链接.md
rename to 00-前端工具/推荐链接.md
diff --git a/07-HTML5和CSS3/06-CSS3属性详解:伸缩布局.md b/07-HTML5和CSS3/06-CSS3属性详解:flex布局.md
similarity index 98%
rename from 07-HTML5和CSS3/06-CSS3属性详解:伸缩布局.md
rename to 07-HTML5和CSS3/06-CSS3属性详解:flex布局.md
index 24cdb83..a2555f9 100644
--- a/07-HTML5和CSS3/06-CSS3属性详解:伸缩布局.md
+++ b/07-HTML5和CSS3/06-CSS3属性详解:flex布局.md
@@ -41,7 +41,7 @@
CSS3在布局方面做了非常大的改进,使得我们对**块级元素**的布局排列变得十分灵活,适应性非常强。其强大的伸缩性,在响应式开中可以发挥极大的作用。
-20180219_2035.png
+![](http://img.smyhvae.com/20180219_2035.png)
如上图所示,有几个概念需要了解一下:
@@ -71,8 +71,8 @@ PS:主轴和侧轴并不是固定不变的,通过flex-direction可以互换
- `flex-direction: row;` 设置**主轴方向**,默认是水平方向。属性值可以是:
- `row` 水平方向(默认值)
- - `reverse-row` 反转
- - `column` 垂直方向
+ - `reverse-row` 反转
+ - `column` 垂直方向
- `reverse-column` 反转列
@@ -354,7 +354,7 @@ PS:主轴和侧轴并不是固定不变的,通过flex-direction可以互换
- `flex-start` 从侧轴开始的方向对齐
- `flex-end` 从侧轴结束的方向对齐
- `baseline` 基线 默认同flex-start
- - `center` 中间对齐
+ - `center` 中间对齐
- `stretch` 拉伸
diff --git a/10-Node.js/01-ES6的介绍和常用语法.md b/10-Node.js/00-01.ES6的介绍和常用语法.md
similarity index 95%
rename from 10-Node.js/01-ES6的介绍和常用语法.md
rename to 10-Node.js/00-01.ES6的介绍和常用语法.md
index 76ffb85..d7fd3d5 100644
--- a/10-Node.js/01-ES6的介绍和常用语法.md
+++ b/10-Node.js/00-01.ES6的介绍和常用语法.md
@@ -610,7 +610,6 @@ for…of 的循环可以避免我们开拓内存空间,增加代码运行效
`for ... of`既可以遍历数组,也可以遍历Map对象。
-代码举例:
@@ -751,23 +750,36 @@ console.log(fn1(1, 2)); //输出结果:3
-
-
-
-
-
### this的指向
ES5中,this指向的是函数被调用的对象;而ES6的箭头函数中,this指向的是函数被定义时。
-
所以说,箭头韩注重,一定要注意this的指向。
-
-
## 模块化
+**模块化的意义**:
+
+比如说,当我需要用到jQuery库时,我会把jQuery.js文件引入到我自己代码的最前面;当我需要用到vue框架时,我会把vue.js文件引入到我自己代码的最前面。
+
+可是,如果有20个这样的文件,就会产生20次http请求。这种做法的性能,肯定是不能接受的。
+
+如果把20个文件直接写在一个文件里,肯定是不方便**维护**的。可如果写成20个文件,这20个文件又不好排序。这就是一个很矛盾的事情,于是,模块化就诞生了。
+
+**模块化历程**:commonJS、AMD规范(RequireJS)、CMD规范(SeaJS);import & export
+
+
+**export:**
+
+静态化:必须在顶部,不能使用条件语句,自动采用严格模式。(静态化有利于性能以及代码的稳定性)
+
+
+
+
+
+
+
diff --git a/10-Node.js/11-JavaScript模块化开发.md b/10-Node.js/11-JavaScript模块化开发.md
index 0082ac4..0c7ab56 100644
--- a/10-Node.js/11-JavaScript模块化开发.md
+++ b/10-Node.js/11-JavaScript模块化开发.md
@@ -51,7 +51,7 @@
浏览器端规范:
-- [**AMD**](https://github.com/amdjs/amdjs-api):是 **[RequireJS](http://requirejs.org/)** 在推广过程中对模块化定义的规范化产出。
+- [**AMD规范**](https://github.com/amdjs/amdjs-api):是 **[RequireJS](http://requirejs.org/)** 在推广过程中对模块化定义的规范化产出。
```
- 异步加载模块;
@@ -61,7 +61,7 @@
- define 定义模块:define([`require`,`foo`],function(){return});
```
-- **[CMD](https://github.com/amdjs/amdjs-api)**:是 **[SeaJS](http://seajs.org/)** 在推广过程中对模块化定义的规范化产出。淘宝团队开发。
+- **[CMD规范](https://github.com/amdjs/amdjs-api)**:是 **[SeaJS](http://seajs.org/)** 在推广过程中对模块化定义的规范化产出。淘宝团队开发。
```
diff --git a/11-前端基础/21-面试题整理 by smyhvae.md b/11-前端基础/21-面试题整理 by smyhvae.md
new file mode 100644
index 0000000..ced12a0
--- /dev/null
+++ b/11-前端基础/21-面试题整理 by smyhvae.md
@@ -0,0 +1,93 @@
+
+
+
+
+## JavaScript
+
+### 存储相关:请描述以下cookie、localStorage、sessionStorage的区别。
+
+
+在H5之前,cookie一直都是本地存储的一个重要的方法。直到后面的两个出现了, 就开始用后面的两个做本地存储。
+
+
+**1、cookie**:
+
+- 本身用于客户端和服务器端的通信。
+
+- 但是它有本地存储的功能,于是就被“借用”。
+
+我们可以通过`document.cookie`获取和修改cookie,获取到的其实就是一个字符串。
+
+
+cookie用于存储时的缺点:
+
+- 存储量太小,只有4kb
+
+- 所有http请求都带着,会影响获取资源的效率
+
+- api简单,需要封装才能用。`document.cookie = ...`
+
+
+
+
+
+
+
+
+
+## ES6
+
+### for each、for in、for of的区别
+
+- `foreach`用于遍历数组,是数组的一个方法。不支持 return。
+
+- `for ... in`获取的是index索引值。
+
+- `for ... of`获取的是数组里的值。
+
+
+
+
+
+## GitHub
+
+- [荐]面试题和答案:
+
+
+- 面试题和答案:
+
+有个题是,浏览器输入url,有哪些过程
+
+- [讲到了Cookie和session](https://github.com/WarpPrism/Blog/issues/5)
+
+- 这个也很全:
+
+-
+
+
+
+
+## 浏览器输入hrl,有哪些过程
+
+- [码农翻身 | 小白科普:从输入网址到最后浏览器呈现页面内容,中间发生了什么?](https://mp.weixin.qq.com/s/3_DZKSP492uq9RfQ3eW4_A)
+
+- 从输入URL到页面加载发生了什么:
+
+
+
+
+
+## 按时间排列
+
+### 2018-03-11
+
+
+- web前端面试题汇总:
+
+- 2017前端面试题及答案总结:
+
+
+### 2018-03-12-今日头条面试题
+
+- [ 今日头条一面笔试面试题!!!!!完整](http://blog.csdn.net/github_35924246/article/details/75675901)
+
diff --git a/11-前端基础/21-网友面经.md b/11-前端基础/22-网友面经.md
similarity index 100%
rename from 11-前端基础/21-网友面经.md
rename to 11-前端基础/22-网友面经.md
diff --git a/11-前端基础/22-面试题整理.md b/11-前端基础/22-面试题整理.md
deleted file mode 100644
index f8f5af8..0000000
--- a/11-前端基础/22-面试题整理.md
+++ /dev/null
@@ -1,46 +0,0 @@
-
-
-
-
-## GitHub
-
-- [荐]面试题和答案:
-
-
-- 面试题和答案:
-
-有个题是,浏览器输入url,有哪些过程
-
-- [讲到了Cookie和session](https://github.com/WarpPrism/Blog/issues/5)
-
-- 这个也很全:
-
--
-
-
-
-
-## 浏览器输入hrl,有哪些过程
-
-- 从输入URL到页面加载发生了什么:
-
-
-
-
-## 按时间排列
-
-### 2018-03-11
-
-
-- web前端面试题汇总:
-
-- 2017前端面试题及答案总结:
-
-
-### 2018-03-12-今日头条面试题
-
-- [ 今日头条一面笔试面试题!!!!!完整](http://blog.csdn.net/github_35924246/article/details/75675901)
-
-
-
-
diff --git a/11-前端基础/23-面试技巧.md b/11-前端基础/23-面试技巧.md
index 0a0ddac..e76a541 100644
--- a/11-前端基础/23-面试技巧.md
+++ b/11-前端基础/23-面试技巧.md
@@ -50,7 +50,7 @@
- map
-
+- 模块化
diff --git a/12-前端进阶/01-前端的几道面试题.md b/12-前端进阶/01-前端的几道面试题.md
new file mode 100644
index 0000000..8e3e742
--- /dev/null
+++ b/12-前端进阶/01-前端的几道面试题.md
@@ -0,0 +1,275 @@
+
+
+几道面试题
+
+## 页面布局
+
+**问题**:如何实现一个三栏布局,要求两边固定宽度、中间自适应。
+
+此题可以考察的知识点:
+
+- 圣杯布局
+
+- 双飞翼布局
+
+- flex布局(css3)
+
+
+
+## 变量提升
+
+
+**问题**:说一下你对JavaScript变量提升的理解。
+
+### 定义
+
+在函数体内部,声明变量,会把该变量提升到函数体的最顶端。注意:**只提升变量声明,不赋值**。
+
+**代码1**:
+
+```javascript
+ fn();
+
+ function fn() {
+ var x = 1;
+ var y = 2;
+ }
+```
+
+
+上方代码中:
+
+(1)给fn创建函数上下文,找到fn中**所有**用var声明的变量(即x和y);
+
+(2)将这些变量初始化为undefined;
+
+(3)将x赋值为1,将y赋值为2。
+
+
+**代码2**:
+
+
+```javascript
+ fn2();
+
+ function fn2() {
+ console.log(2);
+
+ }
+```
+
+
+上方代码中:
+
+(1)创建全局上下文,找到所有用function声明的变量,在环境中“创建”这些变量。
+
+(2)将这些变量**初始化**,并**赋值**为 `function(){ console.log(2) }`(并不是undefined)
+
+(3)开始执行代码`fn2();`
+
+**代码3**:(let的出现)
+
+```javascript
+{
+ let x = 1
+ x = 2
+}
+```
+
+
+上方代码中:
+
+(1)找到所有用 let 声明的变量,在环境中「创建」这些变量
+
+(2)开始执行代码(注意现在还没有初始化)
+
+(3)执行 x = 1,将 x 「初始化」为 1(这并不是一次赋值,如果代码是 let x,就将 x 初始化为 undefined)
+
+(4)执行 x = 2,对 x 进行「赋值」
+
+
+
+代码4:
+
+```javascript
+let x = 'global'
+{
+ console.log(x) // Uncaught ReferenceError: x is not defined
+ let x = 1
+}
+```
+
+原因有两个:
+
+- console.log(x) 中的 x 指的是下面的 x,而不是全局的 x
+
+- 执行 log 时 x 还没「初始化」,所以不能使用(也就是所谓的暂时死区)
+
+看到这里,你应该明白了 let 到底有没有提升:
+
+- let 的「创建」过程被提升了,但是初始化没有提升。
+
+- var 的「创建」和「初始化」都被提升了。
+
+- function 的「创建」「初始化」和「赋值」都被提升了。
+
+
+
+参考链接:
+
+- [我用了两个月的时间才理解 let](https://zhuanlan.zhihu.com/p/28140450)
+
+
+## this
+
+问题:下方代码的打印结果是什么?
+
+```javascript
+ function A() {
+ this.name = 'smyhvae';
+ }
+
+ A.prototype.test = function () {
+ setTimeout(function () {
+ console.log(this.name);
+ }, 1)
+ }
+
+ var a = new A();
+ a.test();
+```
+
+打印结果是window.name,但实际的结果是空的。
+
+这个神奇的特性,被用来解决跨域数据传递。(网上可以查一下iframe相关)
+
+
+
+**总结1**:this永远指向函数运行时所在的对象,而不是函数被创建时所在的对象。即:**谁调用**,指向谁。
+
+**举例**:
+
+```javascript
+ var name = '全局';
+
+ function getName() {
+ var name = '局部';
+ return this.name;
+ };
+
+ alert(getName());
+
+```
+
+上方代码的打印结果是:`全局`。
+
+分析:`getName()`这个函数其实是window调用的,所以this指向的window,因为外部有name这个变量,所以打印结果为`全局`。
+
+
+**总结2**:没有明确的当前对象时,this永远指向window。这个在setTimeout里比较常见。
+
+
+
+
+## 链式调用
+
+**问题**:如何实现类似jQuery的链式调用?
+
+答案:一直return `this`就好了。
+
+
+## Yslow和pageSpeed
+
+
+Yslow和pageSpeed你知道怎么用吗?你记得其中多少规则?
+
+
+
+
+
+```javascript
+
+
+
+
+
+```
+
+
+
+
+
+
+
+
+```javascript
+
+
+
+
+
+```
+
+
+
+
+
+
+
+
+
+```javascript
+
+
+
+
+
+```
+
+
+
+
+
+
+
+
+
+```javascript
+
+
+
+
+
+```
+
+
+
+
+
+
+
+
+
+```javascript
+
+
+
+
+
+```
+
+
+
+
+
+
+
+
+```javascript
+
+
+
+
+
+```
+
diff --git a/22-Vue框架-商城系统/00-Vue的介绍和环境配置.md b/21-Vue基础/00-Vue的介绍和环境配置.md
similarity index 94%
rename from 22-Vue框架-商城系统/00-Vue的介绍和环境配置.md
rename to 21-Vue基础/00-Vue的介绍和环境配置.md
index 6d30732..0179520 100644
--- a/22-Vue框架-商城系统/00-Vue的介绍和环境配置.md
+++ b/21-Vue基础/00-Vue的介绍和环境配置.md
@@ -2,6 +2,14 @@
- [Get全栈技能点 Vue2.0/Node.js/MongoDB 打造商城系统](https://coding.imooc.com/class/chapter/113.html)
+## MVVM模式
+
+- Model:负责数据存储
+
+- View:负责页面展示
+
+- View Model:负责业务逻辑处理(比如Ajax请求等),对数据进行加工后交给视图展示
+
## 前端的各种框架
### Vue、React、AngularJS
@@ -58,10 +66,21 @@ Vue框架中,没有控制器。
- [中文官网](https://cn.vuejs.org/)
-- GitHub地址:
- [vuejs官方论坛](https://forum.vuejs.org/)
+- GitHub地址:
+
+
+- Vue1.0 在线文档:
+
+- Vue2.x 在线文档:
+
+- Vue1下载地址:http://v1-cn.vuejs.org/js/vue.js
+
+- Vue2下载地址:https://unpkg.com/vue@2.2.1/dist/vue.js
+
+
diff --git a/21-Vue基础/01-Vue基础语法.md b/21-Vue基础/01-Vue基础语法.md
new file mode 100644
index 0000000..c4e4c0a
--- /dev/null
+++ b/21-Vue基础/01-Vue基础语法.md
@@ -0,0 +1,301 @@
+
+
+## Vue初体验
+
+新建一个空的项目,引入vue.js文件。写如下代码:
+
+```html
+
+
+
+
+ Title
+
+
+
+
+
+
+ {{name}}
+
+
+
+
+
+```
+
+
+显示效果:
+
+20180313_0955.png
+
+如果我们在控制台输入`myVue.data+='123'`,页面会**自动更新**name的值。
+
+
+## Vue的系统指令
+
+### v-on:注册事件
+
+```html
+
+
+
+
+
+ Title
+
+
+
+
+
+
+
+
+ {{name}}
+
+
+
+
+
+
+
+
+
+```
+
+
+上方代码中,我们给button按钮绑定了点击事件。注意,这个button标签要写在div区域里(否则点击事件不生效),因为下方的View module接管的是div区域。
+
+
+
+### 插值表达式 {{}}
+
+数据绑定最常见的形式就是使用 “Mustache” 语法(双大括号)的文本插值。例如:
+
+```html
+Message: {{ msg }}
+```
+
+Mustache 标签将会被替代为对应数据对象上 msg 属性(msg定义在data对象中)的值。
+无论何时,绑定的数据对象上 msg 属性发生了改变,插值处的内容都会**自动更新**。
+
+`{{}}`对JavaScript 表达式支持,例如:
+
+```javascript
+{{ number + 1 }}
+
+{{ ok ? 'YES' : 'NO' }}
+
+{{ name == 'smyhvae' ? 'true' : 'false' }}
+
+{{ message.split('').reverse().join('') }}
+```
+
+
+但是有个限制就是,每个绑定都**只能包含单个表达式**,如下表达式无效:
+
+```html
+
+{{ var a = 1 }}
+
+
+{{ if (ok) { return message } }}
+```
+
+
+### v-text
+
+v-text可以将一个变量的值渲染到指定的元素中。例如:
+
+```html
+
+
+
+
+
+ Title
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+结果:
+
+
+20180313_1645.png
+
+### v-html
+
+
+`v-text`是纯文本,而`v-html`会被解析成html元素。
+
+注意:使用v-html渲染数据可能会非常危险,因为它很容易导致 XSS(跨站脚本) 攻击,使用的时候请谨慎,能够使用{{}}或者v-text实现的不要使用v-html。
+
+
+### v-cloak
+
+`v-cloak`:保持和元素实例的关联,直到结束编译后自动消失。
+
+
+这个指令和CSS 规则一起用的时候,可以隐藏未编译的标签直到实例准备完毕。比如说,在网络很慢的情况下,通过`v-cloak`隐藏元素,当加载完毕后,再显示出来。
+
+```html
+
+
+
+
+
+ Title
+
+
+
+
+
+ {{name}}
+
+
+
+
+
+
+
+
+
+```
+
+
+
+
+### v-bind
+
+`v-bind`:给html元素或者组件**动态绑定**一个或多个特性,例如动态绑定style和class。
+
+比如说:
+
+```html
+
+
+
+```
+
+
+上方代码中的`imageSrc`和`size`其实是Vue实例里面的变量。
+
+上面两行代码可以简写成:
+
+```html
+
+
+
+```
+
+**举例:**
+
+```html
+
+
+
+
+
+ Title
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+
+效果:
+
+20180313_1745.png
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/21-Vue基础/Vue-router路由.md b/21-Vue基础/Vue-router路由.md
new file mode 100644
index 0000000..72738c5
--- /dev/null
+++ b/21-Vue基础/Vue-router路由.md
@@ -0,0 +1,6 @@
+
+
+## 前言
+
+路由:就是SPA(单页应用)的**路径管理器**。
+