├── 07-移动web开发
└── 02-Bootstrap使用.md
├── 03-JavaScript基础
├── 13-事件委托.md
├── 04-对象简介.md
├── 02-JavaScript语法基础:运算符和表达式.md
├── 14-原型链.md
├── 06-对象、作用域和this.md
├── 13-BOM的常见内置方法和内置对象.md
└── 05-函数.md
├── 18-前端面试
├── 其他.md
├── 计算机网络.md
├── web安全.md
├── 11-02.ES6.md
├── 15-虚拟DOM.md
├── 11-00.JavaScript高级面试:前言.md
├── 23-面试技巧 by smyhvae.md
├── 22-网友面经.md
├── 推荐文章.md
├── 11-01.ES6:模块化的使用和编译环境.md
├── 16-01.MVVM.md
├── 08-算法问题.md
├── 21-面试题整理 by smyhvae.md
├── 10-02.前端错误监控.md
├── 05-02.面向对象:类的定义和继承的几种方式.md
├── 09-01.浏览器渲染机制.md
├── 05-01.创建对象和原型链.md
├── 04-HTTP协议.md
├── 07-安全问题:CSRF和XSS.md
├── 09-02.js运行机制:异步和单线程.md
└── 00-准备.md
├── 19-面试题积累
├── 05-BAT爱考的JS面试题.md
├── 函数.md
├── 清单.md
├── 异步.md
├── 03-http.md
├── 01-我的面试经历 by smyhvae.md
├── 04-变量提升的题目.md
└── 03-JS相关.md
├── 21-Vue基础
├── Vue-router路由.md
├── 生命周期.md
└── 02-过滤器.md
├── 08-Ajax
├── 1.php
├── 05-模板引擎.md
├── 04-同源和跨域.md
└── 03-函数封装:Ajax发送http请求(get&post).md
├── 09-Node.js
├── server.js
├── Node.js代码举例.md
├── WebSocket.md
├── 03-模块化结构.md
├── 12-ES6.md
├── 02-事件驱动和非阻塞机制.md
└── 11-JavaScript模块化开发.md
├── 00-前端工具
├── chrome浏览器.md
├── 推荐链接.md
├── 04-Atom在前端的使用.md
├── 03-VS Code.md
├── 01-Sublime Text在前端中的使用.md
└── 02-WebStorm的使用.md
├── README.md
├── 22-Vue框架-组件化思维
├── Vue基础知识.md
├── 11-面试技巧.md
├── z商城系统.md
├── Vue-router.md
├── 03-京东金融的首页.md
├── 08-上线指导.md
├── 09-构建工具.md
├── 01-项目介绍.md
└── 02-项目设计与原理分析.md
├── 17-前端进阶
├── 04-前端监控技术.md
├── 09-lazyload&防抖动和节流阀.md
└── 01-前端的几道题目.md
├── 03-JavaScript进阶
├── 浅拷贝和深拷贝.md
├── 07-call、apply、bind的区别.md
├── this.md
└── 创建对象和继承.md
├── 02-CSS
├── 浏览器的兼容性问题.md
└── 10-CSS的一些小知识.md
├── 04-前端基本功:JavaScript特效
├── 04-JS的小知识.md
└── 03-client家族(可视区).md
├── 20-网友
├── 面经链接推荐.md
└── 20180116-博客园:一年经验初探阿里巴巴前端社招.md
├── 10-ES6
├── 01-ES5中的严格模式.md
├── 03-ES6的介绍和环境配置.md
├── 06-ES6:字符串、数组、对象的扩展.md
└── 02-ES5中的一些扩展.md
├── 推荐链接.md
├── 02-CSS进阶
└── Sass入门.md
└── 04-前端基本功:CSS和DOM练习
├── 05-DOM操作练习:访问关系的封装.md
└── 08-JavaScript基础:定时器.md
/07-移动web开发/02-Bootstrap使用.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/03-JavaScript基础/13-事件委托.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | ## 事件委托
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/18-前端面试/其他.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | ## 前端基础
4 |
5 | ### 闭包和作用域,面试喜欢问。
6 |
7 |
--------------------------------------------------------------------------------
/19-面试题积累/05-BAT爱考的JS面试题.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | ## this 在各个场景下的指向
5 |
6 |
--------------------------------------------------------------------------------
/21-Vue基础/Vue-router路由.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | ## 前言
4 |
5 | 路由:就是SPA(单页应用)的**路径管理器**。
6 |
7 |
--------------------------------------------------------------------------------
/18-前端面试/计算机网络.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | - [HTTP最强资料大全](https://github.com/semlinker/awesome-http)
4 |
5 |
--------------------------------------------------------------------------------
/18-前端面试/web安全.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | ## 前言
6 |
7 | 攻击的原理也许你能讲出来,主要是想知道如何发现这个网站的漏洞,毕竟大部分的网站都已经把用户输入的内容各种花式过滤了
--------------------------------------------------------------------------------
/08-Ajax/1.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/09-Node.js/server.js:
--------------------------------------------------------------------------------
1 |
2 |
3 | const http = require('http'); //因为 这个 http 库引用之后就不会去改它,所以我们用常量来表示
4 |
5 | http.createServer(); //创建一台服务器
--------------------------------------------------------------------------------
/00-前端工具/chrome浏览器.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | ### show user agent shadow DOM
4 |
5 | 20180206_1610.png
6 |
7 | 20180206_1616.png
8 |
9 | 把上图中的红框部分打钩。
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | 前端入门和进阶学习笔记。从零开始学前端,做一个web全栈工程师。持续更新...
4 |
5 | 更多内容,请点开文件夹。
6 |
7 |
8 | 另外,欢迎关注本人的公众号「生命团队」,会分享一些技术之外的软技能(和代码完全无关)。公众号里的每篇文章,自认为写得还算用心。“全栈”不应该只是体现在技术上,而是全方位。
--------------------------------------------------------------------------------
/19-面试题积累/函数.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | ```
4 | var arr = [1, 2, 3];
5 |
6 | fun(arr);
7 | console.log(arr);
8 |
9 | function fun(a) {
10 | a = [];
11 |
12 | }
13 | ```
14 |
15 | 上方代码的打印结果是:[1,2,3]
16 |
17 |
--------------------------------------------------------------------------------
/19-面试题积累/清单.md:
--------------------------------------------------------------------------------
1 | 01.md
2 |
3 |
4 |
5 | ### CommonJS、RequireJS(AMD) SeaJS(CMD)区别
6 |
7 |
8 |
9 |
10 | ### Webpack 打包
11 |
12 |
13 | ### WebSocket
14 |
15 |
16 | ### ES6
17 |
18 | 会 ES6 是应该的部分,不算加分项。
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/22-Vue框架-组件化思维/Vue基础知识.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | ## 基础知识介绍
4 |
5 | Vue 的基础知识包括:
6 |
7 | 20180303_1237.png
8 |
9 | 20180303_1238.png
10 |
11 |
12 | 实例 --> 组件 --> 指令 --> 选项 --> 模板渲染 --> 事件绑定 --> 计算属性 --> 内置动画 --> 组件交互 --> 路由等。
13 |
14 |
15 | ## 实例对象
--------------------------------------------------------------------------------
/17-前端进阶/04-前端监控技术.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | ## 前言
4 |
5 | 要监控的内容:
6 |
7 | - 业务数据
8 |
9 | - 稳定性
10 |
11 | - 性能
12 |
13 | - 错误
14 |
15 | - 用户操作路径
16 |
17 |
18 | 怎么监控:
19 |
20 | - PV/UV、业务操作上报
21 |
22 | - 根据上报寻找异常
23 |
24 | - 将页面性能数据上报
25 |
26 | - 将页面产生错误上报
27 |
28 | - 跟踪用户操作路径
29 |
30 |
31 |
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/18-前端面试/11-02.ES6.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | ## Class和普通构造函数有何区别
4 |
5 | > 我们经常会用ES6中的Class来代替JS中的构造函数做开发。
6 |
7 |
8 | - Class 在语法上更加贴合面向对象的写法
9 |
10 | - Class 实现继承更加易读、易理解
11 |
12 |
13 |
14 | - 更易于写 java 等后端语言的使用
15 |
16 |
17 | - 本质还是语法糖,使用 prototype
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/21-Vue基础/生命周期.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | - beforeCreate和created。
8 |
9 | created之后,就拿到了数据和方法。create一般用来**获取ajax,初始化操作**
10 |
11 | - beforeMount和mounted。
12 |
13 | mounted之后,表示**真实DOM渲染完了,可以操作DOM了**。
14 |
15 |
16 | - beforeUpdate和updated
17 |
18 | 数据发生变化时,会触发这两个方法。不过,我们一般用watch来做。
19 |
20 | - beforeDestory和destoryed
21 |
22 | 可以在beforeDestory里**清除定时器、或清除事件绑定**。
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/03-JavaScript进阶/浅拷贝和深拷贝.md:
--------------------------------------------------------------------------------
1 |
2 | ## 浅拷贝
3 |
4 | 对于对象或数组类型,当我们将a赋值给b,然后更改b中的属性,a也会随着变化。
5 |
6 | 也就是说,a和b指向了同一块堆内存,所以修改其中任意的值,另一个值都会随之变化,这就是浅拷贝。
7 |
8 | ## 深拷贝
9 |
10 | 那么相应的,如果给b放到新的内存中,将a的各个属性都复制到新内存里,就是深拷贝。
11 |
12 | 也就是说,当b中的属性有变化的时候,a内的属性不会发生变化。
13 |
14 |
15 |
16 |
17 |
18 | 参考链接:
19 |
20 | - [深拷贝与浅拷贝的实现(一)](http://www.alloyteam.com/2017/08/12978/)
21 |
22 | - [javaScript中浅拷贝和深拷贝的实现](https://github.com/wengjq/Blog/issues/3)
23 |
24 |
25 |
--------------------------------------------------------------------------------
/22-Vue框架-组件化思维/11-面试技巧.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | ## 前言
5 |
6 | **面试提问**包括:
7 |
8 | - 同学做过哪些项目
9 |
10 | - 为什么用这样的框架
11 |
12 | - 在项目中的角色是什么?解决过哪些**难题**?
13 |
14 | “难题”是表现自己的机会,不要错过。
15 |
16 | - 通过这个项目学到了什么?
17 |
18 | 这个问题不好回答。要独具一格,不要芸芸众生。
19 |
20 |
21 | **面试分析**:
22 |
23 | - 二面考什么
24 |
25 | - 项目要怎么准备
26 |
27 | - 项目该怎么介绍
28 |
29 | - 沟通有哪些技巧
30 |
31 |
32 |
33 | ## 面试演练
34 |
35 |
36 |
37 | 参考链接:
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/17-前端进阶/09-lazyload&防抖动和节流阀.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | ## lazyload
5 |
6 | 用的最多的场景是:
7 |
8 | - 图片lazyload
9 |
10 | - 组件lazyload
11 |
12 | 现在一般都单独做css的lazyload或者js的lazyload,因为这种方式,其实还是要加载图片和组件。
13 |
14 |
15 |
16 | ### 图片lazyload
17 |
18 | 图片一般是页面最大的资源,所以**非首屏**延迟加载很重要(让首屏尽快显示)。
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 | ## 防抖动(Debouncing)和节流阀(Throtting)
31 |
32 |
33 |
34 |
35 | 参考链接:
36 |
37 | - [实例解析防抖动(Debouncing)和节流阀(Throttling)](http://www.css88.com/archives/7010)
38 |
39 |
40 |
--------------------------------------------------------------------------------
/02-CSS/浏览器的兼容性问题.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | 我们在div里放一个img,发现:
4 |
5 | 在html和html5中,div的长宽是不同的,后者的高度要超过几个像素。
6 |
7 | 比如说,下面这个是html的。
8 |
9 | ```html
10 |
11 |
12 |
13 |
14 | Document
15 |
21 |
22 |
23 |
24 |

25 |
26 |
27 |
28 |
29 | ```
30 |
--------------------------------------------------------------------------------
/22-Vue框架-组件化思维/z商城系统.md:
--------------------------------------------------------------------------------
1 | 02-商城系统.md
2 |
3 | ## 商城系统介绍
4 |
5 | ### 商城系统包含的模块
6 |
7 | - 商品列表
8 |
9 | - 购物车
10 |
11 | - 地址
12 |
13 | - 结算
14 |
15 | - 订单
16 |
17 | - 登录等
18 |
19 |
20 | ### 技术栈
21 |
22 | 前端使用:Vue 全家桶以及 ES6。
23 |
24 | 后端使用:Express 框架、DB 使用 Mongo。
25 |
26 | ### 项目整体架构
27 |
28 | 20180302_1850.png
29 |
30 |
31 | ### 课程安排
32 |
33 |
34 | 20180302_1851.png
35 |
36 | 20180302_1852.png
37 |
38 |
39 | ### 项目地址
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
--------------------------------------------------------------------------------
/18-前端面试/15-虚拟DOM.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | ## 前言
4 |
5 |
6 |
7 | vdom 是 vue 和 React 的**核心**,先讲哪个都绕不开它。
8 |
9 | vdom 比较独立,使用也比较简单。
10 |
11 | 如果面试问到 vue 和 React 和实现,免不了问 vdom:
12 |
13 | - vdom 是什么?为何会存在 vdom?
14 |
15 | - vdom 的如何应用,核心 API 是什么
16 |
17 | - 介绍一下 diff 算法
18 |
19 |
20 | ## 什么是 vdom
21 |
22 |
23 | ### 什么是 vdom
24 |
25 | DOM操作是昂贵的。
26 |
27 | 步骤一:用JS对象模拟DOM树
28 |
29 | 步骤二:比较两棵虚拟DOM树的差异
30 |
31 | 步骤三:把差异应用到真正的DOM树上
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
--------------------------------------------------------------------------------
/19-面试题积累/异步.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | ## 面试题
4 |
5 | ### 20180321面试题
6 |
7 | ```javascript
8 | console.log(1);
9 |
10 | setTimeout(function () {
11 | console.log(2);
12 | }, 1000);
13 |
14 | setTimeout(function () {
15 | console.log(3);
16 | }, 0);
17 |
18 | console.log(4);
19 | ```
20 |
21 |
22 |
23 | ### 20180321面试题
24 |
25 | ```javascript
26 | var arr = [1, 2, 3];
27 | for (var i = 0; i < arr.length; i++) {
28 | setTimeout(function () {
29 | console.log(i);
30 | }, 0);
31 | }
32 | ```
33 |
34 | 打印结果:3,3,3
35 |
36 |
--------------------------------------------------------------------------------
/22-Vue框架-组件化思维/Vue-router.md:
--------------------------------------------------------------------------------
1 |
2 | ## 路由的概念
3 |
4 |
5 | ### 前端路由
6 |
7 | 路由:根据不同的 url 地址展示不同的内容或页面。
8 |
9 | 前端路由:把不同路由对应不同的内容(页面)的任务交给前端来做。以前是通过服务器端根据url的不同返回不同页面来实现的。
10 |
11 |
12 | 什么时候使用前端路由:在单页面应用中,大部分页面结构不变,只改变部分内容的使用。
13 |
14 |
15 | ### 前端路由的优点和缺点
16 |
17 |
18 | 优点:
19 |
20 | - 用户体验好,不需要每次都从服务器全部获取,快速展现给用户。
21 |
22 | 缺点:
23 |
24 | - 不利于 SEO。
25 |
26 | - 使用浏览器的前进、后退键时,会重新发送请求,没有合理利用缓存。
27 |
28 | - 单页面无法记住之前滚动的位置,无法在前进、后退时记住滚动的位置。
29 |
30 |
31 | ## vue-router 构建 SPA
32 |
33 | ### 动态路由
34 |
35 | 20180303_1335.png
36 |
37 |
38 |
39 | ## axios
40 |
41 | 尤雨溪之前发微博说, vue-resource 不再是官方推荐的插件,推荐使用 `axios`。
42 |
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/18-前端面试/11-00.JavaScript高级面试:前言.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | ## 前言
4 |
5 |
6 | 一、基础知识:
7 |
8 | - ES 6常用语法:class 、module、Promise等
9 |
10 | - 原型高级应用:结合 jQuery 和 zepto 源码
11 |
12 | - 异步全面讲解:从原理到 jQuery 再到 Promise
13 |
14 | 二、框架原理:
15 |
16 | - 虚拟DOM:存在价值、如何使用、diff算法
17 |
18 | - MVVM vue:MVVM、vue响应式、模板解析、渲染
19 |
20 | - 组件化 React:组件化、JSX、vdom、setState
21 |
22 | 三、混合开发:
23 |
24 | - hybrid
25 |
26 | - H5
27 |
28 | - 前端客户端通讯
29 |
30 |
31 | 内容优势
32 |
33 | - 面试官爱问“源码”、“实现”。
34 |
35 | - 介绍常用框架实现原理
36 |
37 | - 介绍hybrid原理和应用
38 |
39 |
40 |
41 |
42 | ## ES6
43 |
44 |
45 | - 模块化的使用和编译环境
46 |
47 | - Class与JS构造函数的区别
48 |
49 | - Promise的用法
50 |
51 | - ES6其他常用功能
52 |
53 | ## 异步
54 |
55 |
56 | - 什么是单线程,和异步有什么关系
57 |
58 |
59 |
60 |
61 |
62 |
--------------------------------------------------------------------------------
/18-前端面试/23-面试技巧 by smyhvae.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | ## 写简历的注意事项
5 |
6 | - 最多可以写“深入了解”,但不要写“精通”。
7 |
8 |
9 | ## 遇到不知道的问题,该怎么回答
10 |
11 | - 这块儿我没了解过,准备回去看一下。
12 |
13 | - 这块儿我没研究过,您有没有好的资料,我可以补充一下细节。
14 |
15 | - 写不出详细的代码,但是知道思路。
16 |
17 |
18 |
19 | ## 项目经历
20 |
21 |
22 | - 面试要体现项目的设计思路、方案设计等
23 |
24 |
25 |
26 | ## 模块化思维
27 |
28 |
29 |
30 |
31 | (1)模块化设计的关键词:**封装、继承**;把**通用**的模块**先抽象,后具体**,达到**复用**。【面试记住】
32 |
33 | 比如,**panel、按钮、轮播图**、列表等等,都可以提取为**抽象**的组件,复用。
34 |
35 | (2)页面有哪几个模块
36 |
37 | (3)每个模块分成不同的文件,然后在index页面中import。
38 |
39 |
40 |
41 |
42 |
43 | ## ES6新特性
44 |
45 | - let、const
46 |
47 | - 函数扩展:参数默认值、箭头函数、扩展运算符`...`
48 |
49 | - for ... of 循环
50 |
51 | - map
52 |
53 | - 模块化
54 |
55 |
56 |
57 | ## 薪资
58 |
59 | 面试官;"你要求多少薪资?"
60 |
61 | 我:“能给个范围吗?”
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
--------------------------------------------------------------------------------
/18-前端面试/22-网友面经.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | ### 2018-03-08
5 |
6 | - [jawil | 一年经验初探阿里巴巴前端社招](https://github.com/jawil/blog/issues/22)
7 |
8 |
9 | 此博主的博客签名:
10 |
11 | 20180308_1703.png
12 |
13 |
14 | - [2017我遇到的前端面试题](https://blog.dunizb.com//2017/09/08/interview-questions-2017/)
15 |
16 | 作者整理的这些题目,很多是来自面试跳槽的视频。非常推荐。
17 |
18 | 作者说,性能优化和ES6,是必问的。
19 |
20 |
21 |
22 | - [2018年web前端经典面试题及答案](https://www.cnblogs.com/wdlhao/p/8290436.html)
23 |
24 | 写得很长啊。
25 |
26 |
27 | ### 2018-03-11
28 |
29 | - [2017年BAT面试题大全集](http://www.bijishequ.com/detail/421600?p=)
30 |
31 | - [bat前端面试内容记录](https://www.jianshu.com/p/d94d5290328c)
32 |
33 |
34 |
35 | ### 2018-03-18
36 |
37 | - [笔记:阿里、网易、滴滴共十次前端面试碰到的问题](https://zhoukekestar.github.io/notes/2017/06/07/interview-answers.html)
38 |
39 | - [笔记补充:阿里、网易、滴滴共十次前端面试碰到的问题](https://zhoukekestar.github.io/notes/2017/07/06/interview-answers.html)
40 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/18-前端面试/推荐文章.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | ## 征服JavaScript面试系列 | 众城翻译
4 |
5 |
6 | - [征服 JavaScript 面试:什么是闭包?](http://www.zcfy.cc/article/master-the-javascript-interview-what-is-a-closure)
7 |
8 | - [征服 JavaScript 面试:什么是函数组合](http://www.zcfy.cc/article/master-the-javascript-interview-what-is-function-composition)
9 |
10 | - [征服JavaScript面试系列:类继承和原型继承的区别](http://www.zcfy.cc/article/master-the-javascript-interview-what-s-the-difference-between-class-amp-prototypal-inheritance-2185.html)
11 |
12 | - [征服 JavaScript 面试:什么是纯函数](http://www.zcfy.cc/article/master-the-javascript-interview-what-is-a-pure-function-2186.html)
13 |
14 | - [征服 JavaScript 面试: 什么是函数式编程?](http://www.zcfy.cc/article/master-the-javascript-interview-what-is-functional-programming-2221.html)
15 |
16 | - [征服 JavaScript 面试: 什么是 Promise?](http://www.zcfy.cc/article/master-the-javascript-interview-what-is-a-promise)
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/22-Vue框架-组件化思维/03-京东金融的首页.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | ## 需求分析
4 |
5 | 京东金融首页的需求分析如下:
6 |
7 | - 头部
8 |
9 | - 轮播图
10 |
11 | - 新手特权
12 |
13 | - 极速借贷
14 |
15 | - 理财精选
16 |
17 | - 新品推荐
18 |
19 | - 生活服务
20 |
21 | - 在线客服
22 |
23 | - 公司介绍
24 |
25 | - 导航条
26 |
27 | 20180308_1953.png
28 |
29 |
30 | 目前,大多数设计稿的尺寸是iPhone5:320*568。
31 |
32 | 拿到设计稿后,要先做架构:
33 |
34 |
35 | ### 组件化设计
36 |
37 |
38 | ### 按钮
39 |
40 | 俺就可以设计成抽象的组件。
41 |
42 | 我们要先给它一个**默认**类名,然后**允许传递进来一个自定义**的类名,这样就实现**继承**了;让自定义的类名去**覆盖**默认的样式,就实现了**复用**。
43 |
44 | ### panel
45 |
46 |
47 | ### 轮播图
48 |
49 | Vue有一些常用的组件,可以直接拿来用,比如`vue-awesome-swiper`。链接:
50 |
51 |
52 | 定义一个抽象的轮播图,然后把轮播图的图片和跳转的url作为参数传递。
53 |
54 |
55 | ### css module
56 |
57 | 这个组件有一个类名,另外一个组件可能还有个同名的,为了防止冲突,可以使用命名空间。
58 |
59 |
60 | ### 第三方的自适应解决方案
61 |
62 | hotcss:
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
--------------------------------------------------------------------------------
/04-前端基本功:JavaScript特效/04-JS的小知识.md:
--------------------------------------------------------------------------------
1 | JS的小知识.md
2 |
3 |
4 |
5 |
6 | ### 方法的注释
7 |
8 |
9 | 方法写完之后(注意,一定要先写完整),我们在方法的前面输入`/**`,然后回车,会发现,注释的格式会自动补齐。
10 |
11 | 比如:
12 |
13 |
14 |
15 | ```javascript
16 | /**
17 | * 功能:给定元素查找他的第一个元素子节点,并返回
18 | * @param ele
19 | * @returns {Element|*|Node}
20 | */
21 | function getFirstNode(ele){
22 | var node = ele.firstElementChild || ele.firstChild;
23 | return node;
24 | }
25 | ```
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 | ### 断点调试
35 |
36 | (1)先让程序运行一遍。
37 |
38 | (2)f12,弹出代码调试工具
39 |
40 | (3)打断点:
41 |
42 | 
43 |
44 | 然后刷新页面。
45 |
46 | (4)一步步调试,每点击一次,执行一步:
47 |
48 | 
49 |
50 | (5)监视变量:
51 |
52 | 当然,也可以添加变量或者表达式到监视窗口。操作如下:
53 |
54 | 
55 |
56 | 上图中,选择变量或表达式,然后右键add to watch.
57 |
58 | 然后监视窗口:
59 |
60 | 
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
--------------------------------------------------------------------------------
/19-面试题积累/03-http.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | ## HTTP 状态码知道哪些?
4 |
5 | 301 和 302 的区别:
6 |
7 | - 301 永久重定向,浏览器会记住(有缓存)
8 |
9 | - 302 临时重定向(无缓存)
10 |
11 |
12 | ## HTTP 缓存怎么做?
13 |
14 | 强缓存:
15 |
16 | - **`Expires`**或**`Cache-Control`**
17 |
18 | 协商缓存:
19 |
20 | - 第一对:`Last-Modified`、`If-Modified-Since`
21 |
22 | - 第二对:`ETag`、`If-None-Match`
23 |
24 |
25 | ## Cookie 是什么?Session 是什么?
26 |
27 | ### Cookie
28 |
29 | - HTTP响应通过 Set-Cookie 设置 Cookie
30 |
31 | - 浏览器访问指定域名是必须带上 Cookie 作为 Request Header
32 |
33 | - Cookie 一般用来记录用户信息
34 |
35 | ### Session
36 |
37 | - Session 是服务器端的内存(数据)
38 |
39 | - session 一般通过在 Cookie 里记录 SessionID 实现
40 |
41 | - SessionID 一般是随机数
42 |
43 |
44 | ## LocalStorage 和 Cookie 的区别是什么?
45 |
46 | - Cookie 会随请求被发到服务器上,而 LocalStorage 不会
47 |
48 | - Cookie 大小一般4k以下,LocalStorage 一般5Mb 左右
49 |
50 | ## GET 和 POST 的区别是什么?
51 |
52 | GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。
53 |
54 |
55 | 需要注意的是,web 中的 get/post 只是 http 中的 get/post 的子集。http 中的 get 与 post 只是单纯的名字上的区别,get 请求的数据也可以放在 request body 中,只是浏览器没有实现它,但是 get 并不只是在 web 中使用
56 |
57 |
58 | 参考链接:
59 |
60 | -
61 |
62 | -
63 |
64 |
65 |
66 |
--------------------------------------------------------------------------------
/20-网友/面经链接推荐.md:
--------------------------------------------------------------------------------
1 |
2 | ### 2018-01-25
3 |
4 |
5 |
6 | - [有时在面试时,我都替候选人着急——候选人完全可以在面试前准备](https://www.cnblogs.com/JavaArchitect/p/8353578.html)
7 |
8 | ### 2018-01-26
9 |
10 | - [转眼人到中年:前端老程序员无法忘怀的一次百度电话面试](https://www.cnblogs.com/chyingp/p/a-telephone-interview-long-age.html)
11 |
12 | 八年前的面经,咋记得这么清楚?
13 |
14 |
15 | ### 2018-01-27
16 |
17 | - [16年毕业的前端er在杭州求职ing](https://www.cnblogs.com/qianduantuanzhang/archive/2018/01/27/8365670.html)
18 |
19 |
20 | ### 2018-02-04
21 |
22 | - [2018秋招前端总结](https://www.cnblogs.com/Mr-stockings/archive/2018/02/02/8407295.html)
23 |
24 |
25 |
26 |
27 | ### 2018-02-25
28 |
29 | - [前端开发面试题(CSS)](http://www.bijishequ.com/detail/379621)
30 |
31 | - [超过20家的前端面试题](https://www.jianshu.com/p/8b68f4df749e)
32 |
33 |
34 | - [来聊聊前端工程师的面试套路](https://baijiahao.baidu.com/s?id=1570338146494165&wfr=spider&for=pc)
35 |
36 | - [我的前端进阶之路(面试题)](https://www.cnblogs.com/libin-1/p/6864344.html)
37 |
38 | 这几个链接里讲到了 less。听说面试爱问 less 和 Sass的区别。
39 |
40 |
41 |
42 |
43 |
44 | ### 2018-03-02
45 |
46 | - [记录前端的面试日常(持续更新)](https://www.cnblogs.com/fangdongdemao/p/8492563.html)
47 |
48 |
49 |
50 | ### 2018-03-06
51 |
52 | - [我遇到的前端面试题2017](https://segmentfault.com/a/1190000011091907)
53 |
54 |
55 | 里面有很多面试跳槽里的内容。
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
--------------------------------------------------------------------------------
/18-前端面试/11-01.ES6:模块化的使用和编译环境.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | ## 前言
4 |
5 |
6 | ### ES6的主要内容
7 |
8 | - 模块化的使用和编译环境
9 |
10 | - Class与JS构造函数的区别
11 |
12 | - Promise的用法
13 |
14 | - ES6其他常用功能
15 |
16 | 本文来讲“模块化的使用和编译环境”。
17 |
18 | ### 面试常见问题
19 |
20 | - ES6 模块化如何使用,开发环境如何打包
21 |
22 | - Class 和普通构造函数有何区别
23 |
24 | - Promise 的基本使用和原理
25 |
26 | - 总结一下 ES6 其他常用功能
27 |
28 |
29 | ### ES6的现状
30 |
31 | - 开发环境已经普及使用
32 |
33 | - 浏览器环境却支持不好(需要开发环境编译)
34 |
35 | - 内容很多,重点了解常用语法
36 |
37 | - 面试:开发环境的使用 + 重点语法的掌握
38 |
39 |
40 | ## 模块化的基本语法
41 |
42 |
43 | (1)util1.js:
44 |
45 | ```javascript
46 | export default var a = 100;
47 |
48 | export function foo {
49 | console.log('util1-foo');
50 | }
51 | ```
52 |
53 | `export default`命令用于指定模块的默认输出。显然,一个模块只能有一个默认输出。
54 |
55 | 有了默认输出之后,其他模块加载该模块时,import命令可以为该匿名变量/函数,起**任意的名字**。
56 |
57 | 上面的代码中,默认输出是一个变量。当然,我们也可以换成**默认输出一个匿名函数**:
58 |
59 | ```javascript
60 | export default function() {
61 | console.log('util1-function');
62 | }
63 | ```
64 |
65 |
66 | (2)util2.js:
67 |
68 | ```javascript
69 |
70 | export var myUtil2 = 'this is util2';
71 |
72 | export function fn1() {
73 | console.log('util2-fn1');
74 | }
75 |
76 | export function fn2() {
77 | console.log('util2-fn2');
78 | }
79 | ```
80 |
81 |
82 | 上方代码中,我把一个变量和两个函数作为了导出。
83 |
84 |
85 | (3)index.js:
86 |
87 |
--------------------------------------------------------------------------------
/18-前端面试/16-01.MVVM.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | ## 前言
4 |
5 | MVVM的常见问题:
6 |
7 | - 如何理解MVVM
8 |
9 | - 如何实现MVVM
10 |
11 | - 是否解读过Vue的源码
12 |
13 |
14 | 题目:
15 |
16 | - 说一下使用 jQuery 和使用框架的区别
17 |
18 |
19 | - 说一下对 MVVM 的理解
20 |
21 |
22 | - vue 中如何实现响应式
23 |
24 |
25 | - vue 中如何解析模板
26 |
27 | - vue 的整个实现流程
28 |
29 |
30 |
31 | ## 说一下使用 jQuery 和使用框架的区别
32 |
33 |
34 |
35 |
36 | ## MVVM / Vue
37 |
38 |
39 | ## MVVM模式
40 |
41 | - Model:负责数据存储
42 |
43 | - View:负责页面展示
44 |
45 | - View Model:负责业务逻辑处理(比如Ajax请求等),对数据进行加工后交给视图展示
46 |
47 | 数据驱动视图,只关心数据变化,DOM操作被封装。
48 |
49 | ### MVVM / Vue的三要素
50 |
51 | - **响应式**:vue 如何监听到 data 的每个属性变化?
52 |
53 | - **模板引擎**:vue 的模板如何被解析,指令如何处理?
54 |
55 |
56 | - **渲染**:vue 的模板如何被渲染成 html ?以及渲染过程
57 |
58 |
59 |
60 | ### 什么是虚拟 DOM
61 |
62 | 传统的web开发,是利用 jQuery操作DOM,这是非常耗资源的。
63 |
64 | 我们可以在 JS 的内存里构建类似于DOM的对象,去拼装数据,拼装完整后,把数据整体解析,一次性插入到html里去。这就形成了虚拟 DOM。
65 |
66 |
67 | Vue1.0没有虚拟DOM,Vue2.0改成了基于虚拟DOM。
68 |
69 |
70 | ### 如何理解MVC
71 |
72 | C指的是Controller。控制器能够控制视图的变化,也能控制数据的变化。
73 |
74 | 单项通信。一般情况下是:view 发出命令给控制器,控制器处理业务逻辑后控制 Model,Model再去改 view。
75 |
76 |
77 | ## hybrid
78 |
79 | ### 使用场景
80 |
81 | 不是所有的场景都适合用 hybrid:
82 |
83 | - 使用原生应用:体验要求极致,变化不频繁(如头条的首页)
84 |
85 | - 使用 hybrid:体验要求高,变化频繁(如新闻详情页)
86 |
87 | - 使用H5:体验无要求、不常用(比举报、反馈等)
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
--------------------------------------------------------------------------------
/09-Node.js/Node.js代码举例.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | ## 在 Node.js 上建一个 http 服务器
5 |
6 |
7 | (1)新建一个文件 `server01.js`,然后在里面输入如下代码:
8 |
9 | ```javascript
10 |
11 | const http = require('http'); //引入 node.js里面的一个http包。因为引入之后,我们不会去修改它,所以用常量来表示
12 |
13 |
14 | // 创建一台服务器
15 | var server = http.createServer(function (){ //当有人来访问这台服务器时,就会执行 function 回调函数
16 | console.log('有人来访问我了');
17 | });
18 |
19 | server.listen(8080); //要让服务器设置为监听状态,端口设置为8080
20 |
21 | ```
22 |
23 | 注意看注释。
24 |
25 | 我们把上面这个 js 文件跑起来,然后在浏览器端输入`http://localhost:8080/`,每请求一次,服务器的控制台就会打印 `有人来访问我了`。
26 |
27 |
28 | (2)write()函数和 end()函数:
29 |
30 | 将上面的代码修改如下:
31 |
32 | server02.js:
33 |
34 | ```javascript
35 | const http = require('http');
36 |
37 |
38 | // 创建一台服务器
39 | var server = http.createServer(function (request, response) { //当有人来访问这个服务器时,就会执行function 这个回调函数
40 | console.log('有人来访问我了');
41 |
42 | response.write('smyhvae'); //向浏览器输出内容
43 | response.end(); //结束了,浏览器你走吧。
44 |
45 | });
46 |
47 | server.listen(8080);
48 |
49 |
50 | ```
51 |
52 | function 回调函数里可以设置两个参数:request 和 response。`response.write()`表示向浏览器输出一些内容。
53 |
54 | 将上面的 js 代码跑起来,产生的问题是,无论我们在浏览器端输入`http://localhost:8080/1.html`,还是输入`http://localhost:8080/2.jpg`,浏览器上显示的都是`smyhvae`。
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
--------------------------------------------------------------------------------
/00-前端工具/推荐链接.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 积累平时看到的一些好的前端文章。
5 |
6 |
7 |
8 |
9 | ### 2017-08-17
10 |
11 | - [面试分享:一年经验初探阿里巴巴前端社招](https://github.com/jawil/blog/issues/22)
12 |
13 | 在公众号「web前端课程」上看到的文章。作者经历了4面,也是厉害了。另外,作者在gihub上的[博客](https://github.com/jawil/blog)也是出彩的。比如说下面这篇文章就值得推荐:
14 |
15 | - [挖 "掘" 淘 "金" 之 前端闯关历险记学习资料汇总](https://github.com/jawil/blog/issues/4)
16 |
17 | 作者搜集了几百篇在掘金上看到的好文章,让人惊叹。
18 |
19 |
20 | ### 2017-08-16
21 |
22 | - [道阻且长啊TAT(前端面试总结)](https://segmentfault.com/a/1190000010631325?_ea=2359607)
23 |
24 | 作者毕业于华科,面的是前端的实习,还拿了不少offer:百度外卖,头条,美团,狗东,其他,最终在美团实习。我最初是在[微信公众号](https://mp.weixin.qq.com/s/_clHr5a6_JzTos9bKpvKrA)上看到的文章。
25 |
26 |
27 | hello。我看你拿了不少实习offer。有没有推荐的前端学习资料呀?比如说:网站、链接、书籍等。可否分享给我?如果内容较多,欢迎发表成博客。谢啦~~~
28 |
29 |
30 | ### 2017-08-01
31 |
32 | - [资深Web技术专家曹刘阳:2016年前端技术观察](http://geek.csdn.net/news/detail/128912)
33 |
34 | 有很多争议,[知乎](https://www.zhihu.com/question/53625757)上都有人评论了。
35 |
36 |
37 |
38 | ### 2017-07-31
39 |
40 | - [你可能不需要 Vuex](https://github.com/chenbin92/blog/issues/1)
41 |
42 | 这篇文章里的流程图画得挺好看的,gif图也很小,只有200多kb。我发邮件问作者用的什么软件,很幸运的是,得到了作者的回复。答案是:
43 |
44 | - 录制 GIF:[licecap](https://github.com/justinfrankel/licecap)
45 |
46 | - 画图:[processon免费在线作图](https://www.processon.com/)
47 |
48 |
49 |
50 |
51 |
52 |
53 | ### 2017-07-13
54 |
55 | - [前端开发面试题](https://github.com/markyun/My-blog/tree/master/Front-end-Developer-Questions)
56 |
57 | 在逛公众号「前端大全」的时候发现的,然后顺着找到了对应的GitHub链接。面试题有答案哦。
58 |
59 |
60 |
61 |
62 |
63 |
64 | ### 2017-01-20
65 |
66 | - [阿里9年,我总结的前端架构演进3大阶段及团队管理心法](http://www.infoq.com/cn/news/2017/01/Ali-9-3)
67 |
68 | 伟明的推荐,说是对前端开发的价值观形成有良好的影响。
69 |
70 |
71 |
--------------------------------------------------------------------------------
/00-前端工具/04-Atom在前端的使用.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | ## 常用插件
4 |
5 |
6 | - `Emmet`:快速生成HTML片段,比如输入ul>li*3可以快速生成:
7 |
8 | ```html
9 |
14 | ```
15 |
16 | [详细地址](https://atom.io/packages/emmet),[Emmet教程](https://docs.emmet.io/cheat-sheet/)
17 |
18 | - `Snippets`:快速生成 js 代码片段(用来处理代码片段的模板输出),[详细地址](https://atom.io/packages/snippets)
19 |
20 | - `Tree View`:文件浏览器,[详细地址](https://atom.io/packages/tree-view)
21 |
22 | - `file icons`:文件识别图标,使用这个插件会让你的编辑器显示对应的图标,[详细地址](https://atom.io/packages/file-icons)
23 |
24 | - `language-javascript-jsx`:jsx语法高亮 ,[详细地址](https://atom.io/packages/language-javascript-jsx)
25 |
26 | - `language-vue`:vue语法高亮,[详细地址](https://atom.io/packages/language-vue)
27 |
28 | - `linter-eslint`:eslint插件,[详细地址](https://atom.io/packages/linter-eslint)
29 |
30 | - `vue-snippets`:vue代码片段,[详细地址](https://atom.io/packages/vue-snippets)
31 |
32 | - `pigments`:颜色显示器,[详细地址](https://atom.io/packages/pigments)
33 |
34 | - `linter-eslint`:语法检查
35 |
36 | - `Atom-Beautify`:代码格式化
37 |
38 | 参考链接:
39 |
40 | ## 插件无法安装的问题
41 |
42 | ### 方法一:设置代理
43 |
44 | `C:\Users\smyhvae\.atom\.apm`目录下的.apmrc配置文件(没有就新建一个),然后添加代理信息:
45 |
46 | ```
47 | strict-ssl=false
48 | https-proxy=http://127.0.0.1:1080/
49 | http-proxy =http://127.0.0.1:1080/
50 | ```
51 |
52 | 这里的 http://127.0.0.1:1080,是我自己的 Shadowsocks 代理,你需要设置成自己的可用代理。
53 | 然后再执行:
54 |
55 | ```
56 | apm install --check
57 | ```
58 |
59 | 应该可以测试成功,祝好运~~
60 |
61 | 参考链接:
62 |
63 | -
64 |
65 | -
66 |
67 |
68 |
69 |
70 | ## 相关设置
71 |
72 | ### 显示缩进线
73 |
74 | settings -->Editor --> Show Indent Guide
75 |
76 |
--------------------------------------------------------------------------------
/09-Node.js/WebSocket.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | ## WebSocket 的引入
5 |
6 | ### 背景分析
7 |
8 | HTTP协议是无状态的,服务器只会响应来自客户端的请求,但是它与客户端之间不具备持续连接。
9 |
10 |
11 | 当用户在浏览器上进行操作时,可以请求服务器上的api;但是反过来却不可能:服务器端发生了一个事件,无法将这个事件的信息**实时主动**地通知客户端。只有在客户端查询服务器当前状态时,所发生事件的信息才会从服务器传递到客户端。
12 |
13 |
14 | 那怎么去实时地知道服务器的状态呢?方法有两个:
15 |
16 | (1)**轮询**:客户端每隔很短的时间,都会对服务器发出请求,查看是否有新的消息,只要轮询速度足够快,例如1秒,就能给人造成交互是实时进行的印象。这种做法是无奈之举,实际上对服务器、客户端双方都造成了大量的性能浪费。
17 |
18 |
19 | (2)**长连接**:客户端只请求一次,但是服务器会将连接保持,不会返回结果。当服务器有了新数据时,实时地发给客户端,而一直保持挂起状态。这种做法的也造成了大量的性能浪费。
20 |
21 | ### WebSocket 协议
22 |
23 | 最新的 HTML5协议,制定了 WebSocket 协议标准,允许客户端和服务器端以**全双工**的方式进行通信。
24 |
25 | WebSocket 的原理非常简单:利用HTTP请求产生握手,HTTP头部含有 WebSocket 协议的请求,**握手之后,二者转用TCP协议进行交流*(QQ的协议)。
26 |
27 | WebSocket协议需要浏览器和服务器都支持才可以使用:
28 |
29 |
30 | - 支持WebSocket协议的浏览器有:Chrome 4、火狐4、IE10、Safari5
31 |
32 | - 支持WebSocket协议的服务器有:Node 0、Apach7.0.2、Nginx1.3
33 |
34 |
35 | ### http 长连接和 websocket 的长连接区别
36 |
37 | HTTP1.1通过使用Connection:keep-alive进行长连接,HTTP 1.1默认进行持久连接。在一次 TCP 连接中可以完成多个 HTTP 请求,但是对每个请求仍然要单独发 header,Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。
38 |
39 | websocket是一个真正的全双工。长连接第一次tcp链路建立之后,后续数据可以双方都进行发送,**不需要发送请求头**。
40 |
41 | keep-alive双方并没有建立正真的连接会话,服务端可以在任何一次请求完成后关闭。WebSocket 它本身就规定了是正真的、双工的长连接,两边都必须要维持住连接的状态。
42 |
43 | ### Socket.IO 的引入
44 |
45 | Node.js上需要写一些程序,来处理TCP请求。
46 |
47 | Node.js从诞生之日起,就支持 WebSocket 协议。不过,从底层一步一步搭建一个Socket服务器很费劲(想象一下Node写一个静态文件服务都那么费劲)。所以,有大神帮我们写了一个库 Socket.IO。
48 |
49 | Socket.IO 是业界良心,新手福音。它屏蔽了所有底层细节,让顶层调用非常简单。并且还为不支持 WebSocket 协议的浏览器,提供了长轮询的透明模拟机制。
50 |
51 | Node的单线程、非阻塞I/O、事件驱动机制,使它非常适合Socket服务器。
52 |
53 | ### Socket.IO 的安装
54 |
55 | Socket.IO 的官网是:
56 |
57 | 安装方式:
58 |
59 | ```
60 | npm install socket.io
61 | ```
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
--------------------------------------------------------------------------------
/00-前端工具/03-VS Code.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | ## 常用插件
4 |
5 | 方式一:打开VS Code,左侧有五个按钮,点击最下方的按钮,然后就可以开始安装相应的插件了。
6 |
7 | 方式二:在vscode中输入快捷键「ctrl+shift+P」,弹出指令窗口,输入`extension:install`,回车,左侧即打开扩展安装的界面。
8 |
9 |
10 | ### sftp:文件传输
11 |
12 |
13 | 输入快捷键「ctrl+shift+P」,弹出指令窗口,输入`sftp:config`,回车,当前工作工程的`.vscode`文件夹下就会自动生成一个`sftp.json`文件,我们需要在这个文件里配置的是:
14 |
15 | - `host`:服务器的IP地址
16 |
17 | - `username`:工作站自己的用户名
18 |
19 | - `privateKeyPath`:存放在本地的已配置好的用于登录工作站的密钥文件(也可以是ppk文件)
20 |
21 | - `remotePath`:工作站上与本地工程同步的文件夹路径,需要和本地工程文件根目录同名,且在使用sftp上传文件之前,要手动在工作站上mkdir生成这个根目录
22 |
23 | - `ignore`:指定在使用sftp: sync to remote的时候忽略的文件及文件夹,注意每一行后面有逗号,最后一行没有逗号
24 |
25 |
26 | 举例如下:(注意,其中的注释不能保留)
27 |
28 | ```json
29 | {
30 | "host": "", //服务器ip
31 | "port": 22, //端口,sftp模式是22
32 | "username": "", //用户名
33 | "password": "", //密码
34 | "protocol": "sftp", //模式
35 | "agent": null,
36 | "privateKeyPath": null,
37 | "passphrase": null,
38 | "passive": false,
39 | "interactiveAuth": false,
40 | "remotePath": "/root/node/build/", //服务器上的文件地址
41 | "context": "./server/build", //本地的文件地址
42 |
43 | "uploadOnSave": true, //监听保存并上传
44 | "syncMode": "update",
45 | "watcher": { //监听外部文件
46 | "files": false, //外部文件的绝对路径
47 | "autoUpload": false,
48 | "autoDelete": false
49 | },
50 | "ignore": [ //忽略项
51 | "**/.vscode/**",
52 | "**/.git/**",
53 | "**/.DS_Store"
54 | ]
55 | }
56 | ```
57 |
58 |
59 |
60 | 参考链接:
61 |
62 | -
63 |
64 | -
65 |
66 |
67 |
68 |
69 | ## 常用快捷键
70 |
71 | ### 代码格式化
72 |
73 | Shift + Alt + F
74 |
75 | ## 问题
76 |
77 | 问题1
78 |
79 | 解决;You can kill the Microsoft.VSCode.Cpp.IntelliSense.Msvc process to save the file successfully. 也就是 IntelliSense 这个进程。
--------------------------------------------------------------------------------
/09-Node.js/03-模块化结构.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | ## 全局对象
5 |
6 | ### global
7 |
8 | 类似于客户端 JavaScript 运行环境中的 window。
9 |
10 |
11 | ## process
12 |
13 | 用于获取当前的 Node 进程信息,一般用于获取环境变量之类的信息。
14 |
15 | ### console
16 |
17 | Node 中内置的 console 模块,提供操作控制台的输入输出功能,常见使用方式与客户端类似。
18 |
19 | ## 全局函数
20 |
21 | - setInterval(callback, millisecond)
22 |
23 | - clearInterval(timer)
24 |
25 | - setTimeout(callback, millisecond)
26 |
27 | - clearTimeout(timer)
28 |
29 | - Buffer:Class
30 | - 用于操作二进制数据
31 | - 以后介绍
32 |
33 |
34 | ## Node 调试
35 |
36 | ### 最简单的调试
37 |
38 | 最方便也是最简单的调试:console.log()
39 |
40 |
41 | ### Node 原生的调试
42 |
43 | 网址:
44 |
45 | ### 第三方模块提供的调试工具
46 |
47 | ```
48 | $ npm install node-inspector –g //方式一
49 |
50 |
51 | $ npm install devtool -g //方式二
52 | ```
53 |
54 | ### 开发工具的调试
55 |
56 | - Visual Studio Code
57 |
58 | - WebStorm
59 |
60 | ## 模块化结构
61 |
62 | Node 实现 CommonJS 规范,所以可以使用模块化的方式组织代码结构。
63 |
64 | - Node 采用的模块化结构是按照 CommonJS 规范。
65 |
66 | - 模块与文件是一一对应关系,即加载一个模块,实际上就是加载对应的一个模块文件。
67 |
68 | ### CommonJS 规范
69 |
70 | CommonJS 就是一套约定标准,不是技术。用于约定我们的代码应该是怎样的一种结构。
71 |
72 | 参考链接:
73 |
74 | -
75 |
76 | ### 常用内置模块
77 |
78 | - `path`:处理文件路径。
79 |
80 | - `fs`:操作(CRUD)文件系统。
81 |
82 | - `child_process`:新建子进程。
83 |
84 | - `util`:提供一系列实用小工具。
85 |
86 | - `http`:提供 HTTP 服务器功能。
87 |
88 | - `url`:用于解析 URL。
89 |
90 | - `querystring`:解析 URL 中的查询字符串。
91 |
92 | - `crypto`:提供加密和解密功能。
93 |
94 |
95 | 总结:更多内容可以参考 api文档:
96 |
97 |
98 | ## 文件系统操作
99 |
100 | ### 相关模块
101 |
102 | - fs:基础的文件操作 API
103 |
104 | - path:提供和路径相关的操作 API
105 |
106 | - readline:用于读取大文本文件,一行一行读
107 |
108 | - fs-extra(第三方):
109 |
110 |
111 |
112 |
113 |
114 |
115 |
--------------------------------------------------------------------------------
/22-Vue框架-组件化思维/08-上线指导.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | ## 前言
4 |
5 | 上线指导包括:
6 |
7 | - **生产构建**:合并、抽取、压缩、调试。
8 |
9 |
10 | - **发布部署**:提交、部署、开启gzip压缩、更新CDN。
11 |
12 | 下面来讲一下。
13 |
14 | ## 生产构建
15 |
16 | 生产构建包括:
17 |
18 | - 合并:style、js
19 |
20 | - 抽取:样式要从javaSCript中抽取出来
21 |
22 | - 压缩:JS、CSS都要压缩。
23 |
24 | - 调试:开启SourceMap。
25 |
26 | 下面分别讲一下。
27 |
28 | ### 1&2:合并和抽取
29 |
30 | 我们发现,首页引入了很多`
32 |
33 |
34 |
46 |
47 | div0
48 | div1
49 | div2
50 | div3
51 | div4
52 |
53 |
54 |
55 |
56 |