├── .DS_Store
├── CssAndHTML
├── 01css基础
│ ├── 000css基础-属性.md
│ ├── 001css基础-选择符-重要.md
│ ├── 010-width 百分比取值相对基准问题.md
│ ├── 011-varticalAlign.md
│ ├── 012-清除浮动的方式:.md
│ ├── 013-怪异盒模型box-sizing.md
│ ├── 014line-height重要.md
│ ├── 018html基础.md
│ ├── 019mouseout-mouseleave和mouseover-mouseenter的区别.md
│ ├── 020css3新增特性.md
│ ├── 022compositionEnd事件.md
│ ├── 023less-Overview.md
│ ├── 024.verticalAlign和lineHeight.md
│ ├── 026DomNodeAPI.md
│ ├── 027css属性适用基础.md
│ ├── 02margin auto position.md
│ ├── 03-居中的N中方式.md
│ ├── 04style和getComputedstyle区别.md
│ ├── 05transition transform body渐变色填充.md
│ ├── 06 伪类选择符 关系选择符.md
│ ├── 07background-position.md
│ ├── 08定位布局.md
│ └── 09-CSS3 background 背景.md
├── 02css进阶
│ ├── 000css-html-style-guide.md
│ ├── 001css技巧总结.md
│ ├── 002伪对象使用技巧.md
│ ├── 003适配iphoneX.md
│ ├── 004前端冷知识.md
│ ├── 015flex布局.md
│ ├── 016BFC特性.md
│ ├── 017如何解决移动端两栏自适应的问题?.md
│ ├── 021Css Animation.md
│ ├── 025css 案例.md
│ ├── 028position属性详解-包含块.md
│ ├── 029margin合并.md
│ ├── 030float属性详解.md
│ └── 031css两列布局-三列布局.md
├── 03css世界
│ └── 01css世界-流.md
├── 04基础知识回顾
│ ├── 01HTML最基础-DOM.md
│ ├── 02HTML最基础-BOM.md
│ ├── 02JS最基础.md
│ └── 03CSS最基础.md
└── 文章链接.md
├── Docker
├── 01-docker命令.md
├── 02Dockerfile.md
└── README.md
├── Flutter
├── 01dart语法基础-变量-函数-类.md
└── 01dart语法基础-异常-泛型-库.md
├── HTTP
├── 001CDN.md
├── 002DNS.md
├── 003XSS和CSRF.md
├── 004HTTP常见误区总结.md
├── 005DNS原理.md
├── 006HTTP请求头和响应头.md
├── 007jsonp的基本实现.md
├── 008.浏览器对url长度的限制.md
├── 009encode-decode.md
├── 00HTTP权威指南-读书笔记.md
├── 017HTTP协议.md
├── 019HTTP缓存机制详解-重要.md
├── 01HTTP权威指南-读书笔记.md
├── 020-websocket.md
├── 021-from disk cache 和 from memory cache.md
├── 021HTTP-MDN.md
├── 02HTTP权威指南-读书笔记.md
├── 137httpstatus.md
├── 62-HTTP协议-跨域.md
├── 75-MIME类型对应表格.md
├── 82-HTML5 Storage 本地存储.md
└── 83-HTML本地存储cookies篇.md
├── IOS
├── C语言
│ ├── 00Q&A.md
│ ├── 01-数据类型和变量.md
│ ├── 02-存储类和运算符.md
│ ├── 02c-标准库.md
│ ├── 03-c语言常用方法总结.md
│ └── 04c语言预处理器和头文件.md
├── Object-C
│ ├── 01-oc-base.md
│ ├── 02-IOS-animation.md
│ ├── 03-IOS-http.md
│ ├── 04-IOS-MVC.md
│ └── 05AppDelegate-View生命周期.md
└── README.md
├── JavaScript
├── .DS_Store
├── ES6
│ ├── .DS_Store
│ ├── 001Symbol.md
│ ├── 002ES6Promise.md
│ ├── 003ES6-Promise源码分析.md
│ ├── 004Promise静态方法源码.md
│ ├── 004async-await.md
│ ├── 004async-await进阶.md
│ ├── 004async-await进阶2.md
│ ├── 004javascript异步.md
│ ├── 004实例promise-reject源码解析.md
│ ├── 004实例promise-resolve源码解析.md
│ ├── 005fetch请求(promise的封装).md
│ ├── 006解构赋值.md
│ ├── 007ES6新特性 箭头函数.md
│ ├── 008ES6小特性总结.md
│ ├── 009ES6class.md
│ ├── 010ES6Object新词法.md
│ ├── 011ES6-import.md
│ ├── 012ES6-Set-Map.md
│ ├── 013ES6-Iterator.md
│ ├── 014V8引擎处理事件队列的机制.md
│ ├── 015reduce函数用法总结.md
│ ├── 016ES6数组对象的扩展.md
│ ├── 017ES6_class类.md
│ ├── 018ES6 set get 结合 class .md
│ ├── 019实现ES6的extends.md
│ ├── 021.Reflect.md
│ ├── 022装饰器.md
│ ├── 20event-loop.md
│ ├── README.md
│ └── imgs
│ │ └── reflect.png
├── babel
│ ├── 00babel基础.md
│ ├── 01babel使用.md
│ ├── 02babel-进阶.md
│ ├── 03babel-webpack.md
│ ├── 04babel-generator源码.md
│ ├── 05babel-parser源码.md
│ ├── 06babel-webpack.md
│ ├── 07babel-loader源码解析.md
│ ├── 08编译解析器.md
│ ├── 09.如何写bable-plugin.md
│ └── README.md
├── javascript1-基础
│ ├── .DS_Store
│ ├── 00JS隐式转换规则.md
│ ├── 03opacity和rgba 改变透明度的区别.md
│ ├── 04jquery中position 方法.md
│ ├── 07DOM juqery里面操作元素的属性节点:ele.md
│ ├── 08DOM元素和jquery对象的互相转化.md
│ ├── 100-类数组转化为数组.md
│ ├── 102-重要-作用域 执行上下文.md
│ ├── 103-template模板.md
│ ├── 104-数组的sort方法-原理详解!.md
│ ├── 105重要-javascript this 和= 经典面试题 .md
│ ├── 106-字符串的方法总结.md
│ ├── 107-从chorm开发者工具看return 以及闭包的执行.md
│ ├── 108-函数专题 函数域函数式编程.md
│ ├── 109-js乱炖.md
│ ├── 10GitandCMDcommand.md
│ ├── 112-toString和valueOf的区别.md
│ ├── 113-利用defineProperty获取闭包内部数据.md
│ ├── 114-Canvas.md
│ ├── 115-ES5 数组Array新增API.md
│ ├── 116-Object 新增API Object.defineProperty(obj,prop,descripter).md
│ ├── 118-javascript中的类型比较中的隐式转化是如何进行的?.md
│ ├── 119-Object API.md
│ ├── 11hexo 命令.md
│ ├── 123-元素选择器.md
│ ├── 124-文档坐标和视口坐标的区别-重要.md
│ ├── 125-文本编辑命令.md
│ ├── 12HTMl5 file相关API .md
│ ├── 13-HTML5 web存储:.md
│ ├── 130Git command detailBranch.md
│ ├── 132GitCommandDetailReset.md
│ ├── 134HTML5ApplicationCache.md
│ ├── 135apacheVirtual以及Ajax.md
│ ├── 136GetAndSet.md
│ ├── 138Object-assign.md
│ ├── 139重要-遍历对象的属性.md
│ ├── 14-HTML5的全屏API拖拽API.md
│ ├── 140HTML5postMessage.md
│ ├── 141windowObject.md
│ ├── 145CritialRenderingPath.md
│ ├── 149URLoperation.md
│ ├── 15-重要-javascript 常用API总结:.md
│ ├── 150Arrayfrom API.md
│ ├── 151如何实现不同标签页之间的通信.md
│ ├── 152div居中的几种方式.md
│ ├── 153cookie设置-读取-删除操作.md
│ ├── 154Ajax-如何处理缓存.md
│ ├── 157AngularJS-Initialization.md
│ ├── 158DOMContentLoaded.md
│ ├── 159AngularJsModule.md
│ ├── 16-jquery中 get() 和 index().md
│ ├── 161AngularJsModule.md
│ ├── 162AngularJsdirective.md
│ ├── 165AngularJsService.md
│ ├── 169XMIHttpRequest-Level2-FormData.md
│ ├── 17-jQuery js offset系列的不同.md
│ ├── 17-事件对象参数中 offsetx clientx pagex screenx;.md
│ ├── 171web中的path路径浅析.md
│ ├── 172ClientRenderOrServerRender.md
│ ├── 174Angular-Js-MVVM-双向数据绑定如何实现.md
│ ├── 175Angular-Js-directive.md
│ ├── 176src和href的区别.md
│ ├── 177提高网页性能的方法.md
│ ├── 178几种缓存的总结.md
│ ├── 179AngularJs中的link和compile.md
│ ├── 18-jQuery中筛选的总结.md
│ ├── 181svn.md
│ ├── 187isNaN-And-NumberisNaN.md
│ ├── 19-transform(3d):.md
│ ├── 20-封装函数 innerText textContent innerHTML .md
│ ├── 209return小结.md
│ ├── 22-HTML5 data 属性的运用:.md
│ ├── 224ImmutabaleJS.md
│ ├── 228for循环.md
│ ├── 23-拖拉事件.md
│ ├── 27-js jQuery offset scroll client.md
│ ├── 28-移动端 touch事件以及事件对象参数解析.md
│ ├── 29-webstorm编辑器运用小技巧.md
│ ├── 32-HTML5Drag.md
│ ├── 39-媒体查询响应式开发.md
│ ├── 41-Bootstrap框架总结总结.md
│ ├── 43-jQuery核心及源码分析.md
│ ├── 45-js和jQuey的事件对象参数的区别:.md
│ ├── 48-less程序化编译CSS.md
│ ├── 49-underscorejs template模板引擎的使用.md
│ ├── 53-js 和 jquery 的事件区别.md
│ ├── 55-js jQuery绑定与移除事件的比较.md
│ ├── 56-事件冒泡.md
│ ├── 61-cmd常用命令行.md
│ ├── 63-for-in foreach .md
│ ├── 64PHP 基础语法:.md
│ ├── 65js和jQuery的 AJAX 底层实现.md
│ ├── 66XML.md
│ ├── 68JSON数据处理的方法.md
│ ├── 69jseval 和 JSON parse.md
│ ├── 72-typeof instance 以及null undefined区别.md
│ ├── 74-jQuery 对象serialize()方法的使用.md
│ ├── 75-MIME类型对应表格.md
│ ├── 76-事件委派.md
│ ├── 78-如何更改github-hexo博客的主题?.md
│ ├── 80-window对象.md
│ ├── 84-Javascritp代码性能优化方法.md
│ ├── 85-从源代码角度分析内置对象.md
│ ├── 87-Javscript中this详解-重要.md
│ ├── 88-form表单 属性常用总结.md
│ ├── 89-对象-伪对象.md
│ ├── 90-js中原型prototype属性 _ _ proto_ _ 属性 以及原型链的总结.md
│ ├── 91-hasOwnProperty(property)和in的区别.md
│ ├── 92-Javasript垃圾回收机制.md
│ ├── 93-select 的值选择的哪一个?.md
│ ├── 94-apply call bind 对比分析.md
│ ├── 96-重要-Javascript 闭包(closure).md
│ ├── 98-重要-Javascript中运算符.md
│ ├── README.md
│ ├── hello-world.md
│ └── live or life.md
├── javascript2
│ ├── 001变量提升和 this .md
│ ├── 002表单提交的方式.md
│ ├── 003递归分析-数据结构.md
│ ├── 004浏览器环境小结.md
│ ├── 005如何用 JavaScript 下载文件.md
│ ├── 006文件和二进制对象.md
│ ├── 007ajax请求分类.md
│ ├── 008BrowserSync初试.md
│ ├── 009Immutable.md
│ ├── 00内置全局变量-函数.md
│ ├── 014javascript遍历对象属性的方法.md
│ ├── 020String小节.md
│ ├── 021Array小结.md
│ ├── 022chorm开发者工具使用指南.md
│ ├── 025tableAPI.md
│ ├── 026常用代码片段.md
│ ├── 030XMLHttpRequest源码实现.md
│ ├── 031代码优化细节.md
│ ├── 032实现多面板的排序和搜索.md
│ ├── 034ajax结合hostory实现无刷新同时可前进后退.md
│ ├── 035细节问题.md
│ ├── 036多种方法实现转化ajax传输对象.md
│ ├── 037浏览器的重绘和重排.md
│ ├── 038从深浅拷贝案例分析对于函数入参的判断.md
│ ├── 039try-catch.md
│ ├── 040终止for循环.md
│ ├── 10javascript基础.md
│ ├── README.md
│ └── img
│ │ └── image1.jpg
├── javascript高级
│ ├── .DS_Store
│ ├── 00javascript-style-guide.md
│ ├── 00性能优化指南.md
│ ├── 019web-socket.md
│ ├── 020web事件传播.md
│ ├── 02函数的节流.md
│ ├── 11setTimeout.md
│ ├── 12Array数组API.md
│ ├── 13String字符串API-NUmberAPI.md
│ ├── 13实现bind.md
│ ├── 14-JS异步加载的实现方式总结.md
│ ├── 15js-EventLoop.md
│ ├── 16-javascript代码片段.md
│ ├── 17函数式编程.md
│ ├── 18-数据流的处理-同步和异步.md
│ └── 19定时器.md
├── js基础复习-2021
│ └── 01.数据类型.md
├── 代码规范
│ └── 00如何让保证代码更健壮.md
├── 数据结构与算法
│ ├── .DS_Store
│ ├── 01数据结构-链表.md
│ ├── 02数据结构-栈-队列.md
│ ├── 03数据结构-堆.md
│ ├── 04javascript数据结构.md
│ ├── 04对称二叉树.md
│ ├── 04数据结构-二叉树搜索树.md
│ ├── 05javascript数据结构.md
│ ├── 05集合-字典-散列表.md
│ ├── 06javascript递归.md
│ ├── 06数据结构-图.md
│ ├── 07javascript排序算法.md
│ ├── 08算法复杂度.md
│ ├── 101JS中深拷贝和浅拷贝.md
│ ├── 10javascript乱序算法-数组拍平算法.md
│ ├── 11算法-Math.md
│ ├── 12算法dfs-bfs-Search-深拷贝.md
│ ├── 13算法-functionalProgramming.md
│ ├── 14蛇形遍历二维数组.md
│ ├── 15-二分查找算法.md
│ ├── 16算法-动态规划.md
│ └── README.md
├── 构建工具
│ ├── .DS_Store
│ ├── 000npm官网学习.md
│ ├── 001packagejson.md
│ ├── 002package-lock.json详解.md
│ ├── 003如何从头至尾创建一个react-webpack项目.md
│ ├── 005webpack配置文件解读.md
│ ├── 006iTerm 教程.md
│ ├── 007git命令 .md
│ ├── 007git学习实践.md
│ ├── 008终端使用.md
│ ├── 010打包工具的运行基本原理.md
│ ├── 011Mac.md
│ ├── 012vscode快捷键.md
│ ├── 013fis3学习.md
│ ├── 015webpack路径解析.md
│ ├── 016npm包学习.md
│ ├── 017lerna-manage pkkg.md
│ ├── 021eslint.md
│ ├── 14持续集成.md
│ ├── 196npm命令.md
│ ├── 199webpack.md
│ ├── 200webpack-foundation.md
│ └── 214webpack模块路径解析规则.md
├── 模块化开发
│ ├── 001seajs源码.md
│ ├── 002commonJS.md
│ ├── 003requirejs.md
│ ├── 004requirejs.md
│ ├── 005AMD-语法规范.md
│ ├── 006seajs基础.md
│ ├── 007seajs核心.md
│ ├── 008seajs源码实现.md
│ ├── 009seajsuse实例应用与理解.md
│ ├── 010seajs模块加载.md
│ ├── 011babel的作用.md
│ └── 012.commonjs和ES module的区别.md
├── 正则
│ ├── 00正则基础.md
│ ├── 01正则基础-进阶.md
│ ├── 02正则分组引用.md
│ ├── 03正向先行断言.md
│ ├── 04正则面试.md
│ └── 127RegExpReview.md
├── 算法题学习
│ ├── 0.两数之和-无重复字符最长子串.md
│ ├── 1.盛水最多容器-整数反转.md
│ └── 2.电话号码的字母组合.md
├── 设计模式实际应用总结
│ ├── 00设计模式-编程思想.md
│ ├── 01单例-策略-代理-模式.md
│ ├── 02订阅者-迭代器-工厂模式.md
│ ├── 03观察者模式.md
│ ├── 04职责链-中介者模式.md
│ ├── 05职责链模式-模版模式-状态模式.md
│ ├── 06组合模式-装饰着模式-.md
│ ├── README.md
│ └── Untitled.md
└── 面试题汇总
│ ├── 01 数组相关.md
│ ├── 02 汇总各类.md
│ ├── 02汇总各类2.md
│ ├── 03 算法面试题目.md
│ ├── 04 html 和 css 相关.md
│ ├── 05数据结构相关.md
│ ├── 06call-apply-bind实现.md
│ └── 07.业务实战开发.md
├── Mobx源码
└── 01mobx入门.md
├── NodeJS
├── .DS_Store
├── README.md
├── express源码解析
│ ├── 01基本使用.md
│ ├── 02express-api-fallback.md
│ ├── 02express上的get-post-use等源码解析.md
│ ├── 03express-utils文件源码.md
│ └── 173Nodejs-Express.md
├── images
│ ├── req-header.png
│ ├── req.png
│ ├── res-header.png
│ ├── res.png
│ └── router.png
├── koa源码解析
│ ├── 01-koa-base.md
│ ├── 02koa-delegate.md
│ └── 03koa-router.md
└── nodeBase
│ ├── 00nodeJS .md
│ ├── 01NodeJsEventEmitter.md
│ ├── 02NodeJSProcess.md
│ ├── 02NodeJSchildProcess.md
│ ├── 03NodeJsBuffer.md
│ ├── 05NodeJsFS.md
│ ├── 07NodeJsModuleSystem.md
│ ├── 08NodeJs事件驱动.md
│ ├── 09NodeJs中的path路径浅析.md
│ ├── 10NodeJSHTTP.md
│ ├── 11NodeJs-Util-net.md
│ ├── 12NodeJS-Util-url.md
│ ├── 13NodeJsStream.md
│ ├── 14Node-API.md
│ ├── 15NodeJSUtil.md
│ ├── 16NodeJsPath.md
│ ├── 17NodeJS-Modules.md
│ ├── 18NodeJS-OS.md
│ ├── 19NodeJS-HTTP-req-res类.md
│ ├── 20NodeJS-vm.md
│ └── 21NodeJS-require基本原理.md
├── PHP
└── 01php基础.md
├── README.md
├── React
├── README.md
├── React16-learn
│ ├── 01React基础知识回顾.md
│ └── README.md
├── React基础
│ ├── 000React常见概念总结.md
│ ├── 001jsx.md
│ ├── 002React概览.md
│ ├── 003React-Redux-Router学习路线.md
│ ├── 004React-redux Demo案例.md
│ ├── 005react-Event.md
│ ├── 006react-元素渲染和组件.md
│ ├── 007reactStateAndLifeCycle.md
│ ├── 008react-Compare-Vue.md
│ ├── 009react-lifting-State-Up.md
│ ├── 010高阶组件.md
│ ├── 011React加载图片.md
│ ├── 012jsx-in-depth.md
│ ├── 013React实现搜索延迟功能.md
│ ├── 014Refs-And-DOM.md
│ ├── 015React-Optimizing-Performance.md
│ ├── 016Redux-React-基本环境的搭建.md
│ ├── 017React-概览学习笔记.md
│ ├── 018react状态管理中的坑.md
│ ├── 019react中this的解惑.md
│ ├── 020.为什么不用mixins.md
│ ├── 021.react生命周期.md
│ └── 022.react事件系统.md
├── React性能优化.md
├── React源码分析系列
│ ├── 001React-createElement.md
│ ├── 002创建React组件方式以及源码解析.md
│ ├── 003react中context updater到底是如何传递下去的.md
│ ├── 004React中的注册机制.md
│ ├── 005React源码setState实现分析.md
│ └── 006虚拟DOM .md
├── Redux源码
│ ├── 001Redux.md
│ ├── 002Redux-createStore源码.md
│ ├── 003Redux-compose源码.md
│ ├── 004Redux-combineReducers源码bindCreateAction.md
│ ├── 005Redux-applyMiddleware源码.md
│ ├── 006Redux-Provider-Connect.md
│ ├── 007Redux-thunk,Redux-logger源码.md
│ ├── 008Redux中订阅者模式解读.md
│ └── 009enhancer-Store实现.md
├── Router源码
│ ├── 001React-router-Foundation.md
│ ├── 002React-router.md
│ ├── 003React-router-中的Route组件详解.md
│ ├── 004React-router-Prompt.md
│ ├── 005源码React-router-Switch-Redict.md
│ ├── 006Router Switch Route源码解析.md
│ └── 007createBrowserHistory源码.md
├── img
│ ├── reducer.JPG
│ ├── setState.jpg
│ └── subscribe.JPG
└── 源码-应用
│ └── 01-工具函数.md
├── ReactNative
└── 01macRN快捷键.md
├── VueLesson
├── 01VueBase
│ ├── 00Vue中小细节.md
│ ├── 01Vue概览.md
│ ├── 02Vue中组件之间的通信机制.md
│ ├── 03Vue组件实例属性.md
│ ├── 04路由守卫.md
│ ├── 05Vue指令的使用.md
│ └── 06vue中的mixin.md
├── 02Vue-SourceCode
│ ├── 00new Vue参数的形式.md
│ ├── 01Vue构造函数.md
│ ├── 02new Vue构造函数.md
│ ├── 03vnode对象是如何生成的?.md
│ ├── 04Vnode对象的真正渲染patch函数.md
│ ├── 05initState中是如何操作数据的.md
│ ├── 06Vue双向数据绑定实现原理2.md
│ ├── 06Vue双向数据绑定的原理.md
│ ├── 07Vue静态方法.md
│ ├── 08Vue细节注意.md
│ ├── 09Vue.prototype.$nextTick源码.md
│ ├── 10Vue中的内置组件slot组件源码实现.md
│ ├── 11Vue中的内置组件keep-alive源码实现.md
│ ├── 12Vue中内置组件transition component.md
│ ├── 13Vue中事件源码.md
│ ├── 14Vue中异步组件加载源码.md
│ ├── 15Vue组件生命周期-异步更新根源.md
│ ├── 16Vue中provide和inject.md
│ ├── 17Vue中的virtualDom-转.md
│ ├── 18vue-AST是如何转化的.md
│ └── README.md
├── 03VueRouter-SourceCode
│ ├── 01VueRouter源码实现.md
│ ├── 02matcher和history创建源码解析.md
│ ├── 03RouterView和RouterLink的实现.md
│ └── 04router的基础知识.md
├── 04Vuex-SourceCode
│ ├── 01Vuex源码实现.md
│ ├── 02Vuex实例化对象ModuleCollection实现.md
│ ├── 03Vuex实例化store对象的核心源码.md
│ ├── 04Vuex对象中的辅助函数源码.md
│ ├── 05Vuex中的数组函数reduce巧用.md
│ └── 06store实例对象的dispatch和commit源码实现.md
├── 05Vue-axios源码
│ ├── 01axios源码实现.md
│ └── 02code-matrix.md
├── 06VueUI
│ └── elemet.ui
│ │ ├── 01element.ui入口文件.md
│ │ ├── 02ele-directive.md
│ │ ├── 03ele-emitter.md
│ │ └── README.md
├── 07源码-应用
│ ├── 01递归和对象属性的遍历.md
│ └── 02工具函数源码.md
├── 08SSR
│ └── 01ssr基础.md
├── 09@vuecli-3 源码取经
│ └── 01入口.md
├── QS.md
├── README.md
└── img
│ ├── computed.png
│ ├── data.png
│ ├── dep.png
│ ├── newVue.JPG
│ ├── vuexModules.png
│ ├── watcher1.png
│ └── watcher2.png
├── Weex
└── 00weex-cml开发注意点.md
├── Wx
├── 00小程序配置.md
├── 01.小程序原理性文章.md
├── 01小程序原理2.md
├── 01小程序原理性.md
├── 02.小程序生命周期.md
├── 03.小程序运行时.md
├── 04.小程序直播.md
├── 05.小程序基础能力.md
├── 06.小程序开放能力.md
├── 07.小程序组件.md
├── 08小程序API.md
└── README.md
├── gitbook
└── README.md
├── img
├── .DS_Store
├── 1650a9fbd11d0cd7
├── 1691020-07332dda269bdd88.webp
├── PrintRequest(1).pdf
├── String.prototype.match() _ MDN.html
├── array_erchadui .png
├── binaryTree.png
├── classset.png
├── duiyouxu.png
├── event1.png
├── event2.png
├── event3.png
├── eventloop.png
├── git.jpg
├── huisu1.png
├── huisu2.png
├── huisu3.png
├── huisu4.png
├── ios-life.gif
├── ios-life2.png
├── ios.png
├── js_event_loop2.png
├── layers.png
├── line1.jpg
├── line2.gif
├── line3.gif
├── link.png
├── nginx-design.png
├── nginx-proxy.png
├── nginx.png
├── package-npm.png
├── setget.png
├── shell.png
├── sort.jpeg
└── webpack.jpg
├── shell
├── 001-linux&shell.md
├── 002Vim使用入门.md
├── 003shell中的括号使用总结.md
├── 004shell 命令使用总结.md
├── 005shell中的特殊字符.md
├── 006shell-basic-program.md
├── 007执行shell命令方式总结.md
├── 008shell操作符.md
├── 009shell中的字符串包含.md
├── 022ssh.md
└── README.md
├── typeScript
├── 00.base-ts.md
├── 01typeScript.md
├── 02typescript基础命令.md
├── README.md
├── ts-help.png
├── ts-starter.svg
├── ts.png
└── tsconfig.json.md
├── webpack && npm
├── .DS_Store
├── 00-webpack.config.js.md
├── 01webpack入口-输出-配置类型.md
├── 02webpack-devServer.md
├── 03webpack-plugins.md
├── 04webpack-loader.md
├── 05webpack-代码分离.md
├── 06webpack构建速度-包体积优化.md
├── 07webpack启动构建.md
├── 09webpack-tapable源码解析.md
├── 10tapable源码解析-转.md
├── 11 npm包学习2.md
├── 12 package.json解析版本号.md
├── 13clean-webpack-plugin源码.md
├── 14plugin-hooks.md
├── 15html-webpack-plugin源码解析.md
├── 16file-loader源码.md
├── 17webpack打包后代码分析.md
├── 18webpack-externals.md
├── 19 webpack-target.md
├── 20webpack-代码拆分.md
├── 21tree-shaking.md
├── 22npm包集成travis.md
├── 23commonsChunkPlugin源码.md
├── 24 webpack-hash深入理解.md
├── 25webpack-plugin-api.md
├── 26webpack-noParse.md
├── 26webpack-常用plugin.md
├── 27webpack4默认配置.md
├── 28package.json字段含义.md
├── 29.package.json入口文件.md
├── 29neo-async源码
│ ├── 01Each.md
│ ├── 02.EachSeries.md
│ └── 02Each.md
├── README.md
├── imgs
│ ├── npm-after.png
│ └── npm-before.png
└── 前端工程化-剖析npm的包管理.md
├── webpack4
├── 01webpack4.md
├── 08webpack源码解析.md
└── README.md
├── workflow
├── 01git-commit规范.md
├── 02eslint规范编码.md
├── 03eslint源码解析.md
├── 04单元测试-mocha.md
└── README.md
├── 后端
├── 01mongoDB.md
├── 02nginx.md
├── 03nginx负载均衡.md
├── 04浅谈nginx.md
└── 05前端应知应会nginx基础.md
├── 学习资源汇总
└── 常用各种库.md
├── 性能优化
├── 01.性能监控-异常监控.md
├── 02.性能优化-细节点.md
└── README.md
├── 技术架构
├── .DS_Store
├── 01.小程序.md
├── 02.技术架构.md
├── 03.前端项目设计总结.md
├── 04.团队规范.md
├── 05.项目文件检测.md
└── imgs
│ ├── wx-framework2.png
│ └── wx-frameworkpng.png
├── 浏览器相关
├── .DS_Store
├── 01浏览器-优化.md
├── 02WebKit工作原理.md
├── 03前端安全-target=blank.md
├── 04.浏览器架构原理.md
└── imgs
│ ├── .DS_Store
│ ├── DOM-CSS.png
│ ├── html-parser.png
│ ├── major-components.png
│ ├── page-life.png
│ ├── webkit-architecture.png
│ ├── webkit-jscore.png
│ ├── webkit-render.png
│ └── what-is-webkit.png
└── 移动开发
├── 000viewport的理解.md
├── 001设置自适应rem值.md
├── 002移动端300ms延迟和点击穿透.md
├── 003zepto.md
├── 004 charles使用文档.md
├── 005JS-bridge.md
├── 156移动端高清多屏适配的解决方案.md
└── README.md
/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jimwmg/JiM-Blog/11adb268258e10b8ea6a0897cfd56d4ee83a71e9/.DS_Store
--------------------------------------------------------------------------------
/CssAndHTML/01css基础/010-width 百分比取值相对基准问题.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: width 百分比取值基准
3 | date: 2016-11-22 12:36:00
4 | categories: html
5 | tags : html
6 | comments : true
7 | updated :
8 | layout :
9 | ---
10 |
11 | **对于inline元素,宽度由内容决定,不能设置宽度,无效**
12 |
13 | **对于inline-block block 元素可以设置宽高**
14 |
15 | width 百分比取值相对基准问题
16 |
17 | 可能的值
18 | 值 描述
19 | auto 浏览器计算内边距。
20 | length 规定以具体单位计的内边距值,比如像素、厘米等。默认值是 0px。
21 | inherit 规定应该从父元素继承相应属性。
22 |
23 | % 重点理解:width 是 基于父元素的 width 计算的值
24 | height 是基于父元素的 height 计算的值
25 | padding 和 margin 的无论上下左右 值 都是基于父元素的宽度
26 |
27 | 一 :标准流下,父元素不定位,不浮动,子元素的100% width相对于哪个元素的width进行取值
28 |
29 | 二:脱离标准流之后,父元素设置了定位或者浮动之后,子元素的100% width相对于哪个元素的width进行取值
30 |
31 | 注意理解:
32 |
33 | * 当**子元素**`是`**标准流**的元素的时候,(包括子元素设置position:relative,也是永远相对于父元素的宽高为基准)
34 |
35 | 无论**父元素是否是标准流** 的元素,**子元素**的width和height的百分比取值永远都是**相对于父元素**的;
36 |
37 | 此时无论父元素是否设置定位,子元素的width height padding margin 通过百分数取值的时候,都是相对于其**直接父元素**。
38 |
39 | * 当**子元素**`不是`**标准流**的时候,比如子元素设置了position:absolute;
40 |
41 | 此时子元素的宽高百分比设置的时候,百分比的宽高基准是顺着DOM元素往上寻找最近的一个设置了定位了父元素的宽高为基准,如果祖先元素都没有定位的话,那么就是相对于body的宽高;注意position除了static的父元素 ;
42 |
43 | 注意**position除了static的父元素** ;
44 |
45 | * 其实绝对定位的子元素的 margin padding 等值的百分比都是相对于顺着DOM节点树向上第一个设置了除了static定位之外的position 的元素的宽度为基准的;
46 |
47 | * % 重点理解:width 是 基于父元素的 width 计算的值
48 | height 是基于父元素的 height 计算的值
49 | padding 和 margin 的无论上下左右 值 都是基于DOM树节点祖先元素中第一个设置了除了static定位之外的第一个祖先元素的宽度
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
--------------------------------------------------------------------------------
/CssAndHTML/01css基础/011-varticalAlign.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: vertivalAlign
3 | date: 2016-08-27 12:36:00
4 | categories: html
5 | tags : html
6 | comments : true
7 | updated :
8 | layout :
9 | ---
10 |
11 | vertical-align
12 |
13 | 1 在一行中,行内元素默认是以baseline为基准进行垂直对齐的,行内元素包括 img a span 等
14 |
15 | 2 baseline 基线:可以简单的理解为是在四线格中字母x的底部的那根线
16 |
17 | 3 img标签默认对齐行内的文本的基线
18 |
19 | 4 那么由于图片默认对齐基线,会在下面出现几像素的间隙,如何去除该间隙?
20 |
21 | 5 先来看看间隙的产生:(注意浏览器默认字体大小,所以对于所有的DOM元素都有)
22 |
23 | ```html
24 | .div1{
25 | font-size:50px;
26 | }
27 |
28 |
该行的基线以文本的baseline为基准 
29 |
30 | ```
31 |
32 | 一 : 既然产生间隙的根源是**行内元素** 默认以**文本**的基线为基准的对齐方式导致的,那么只需要将改行的文本字体大小设置为font-size 为0 即可这行代码将图片所在行的文本大小设置为0 ,由于文本相关属性的继承性,该元素内所有元素的文本大小均为0px,所以此时可以消除间隙
33 |
34 | ```html
35 | .div1 {
36 | font-size:0px ;
37 | }
38 | ```
39 |
40 | 二:既然间隙是有行内元素默认以改行的文本的baseline为基准进行垂直方向的对齐,那么将图片设置为块级元素,也可以消除间隙:
41 |
42 | ```html
43 | .div1>img{
44 | display: block;
45 | }
46 | ```
47 |
48 | 三 利用vertical-align属性:设置元素的对齐方式 可能值 baseline top bottom middle text-top text-bottom
49 |
50 | ```html
51 | .div1>img{
52 | vertical-align:bottom;
53 | }
54 | ```
55 |
56 | 四 如果想要更好地理解vertical-align属性的作用,可以将图片width="20px",改成可以和字体比较的大小,然后文本设置font-size设置大一些,然后看效果,有助于理解vertical-align的属性。
--------------------------------------------------------------------------------
/CssAndHTML/01css基础/012-清除浮动的方式:.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 清除浮动的方式
3 | date: 2016-09-28 12:36:00
4 | categories: html
5 | tags : html
6 | comments : true
7 | updated :
8 | layout :
9 | ---
10 |
11 | 清除浮动的方式:
12 |
13 | 第一:给父元素设置高度
14 |
15 | 第二:给父元素设置 overflow:hidden ,zoom:1 (zoom :1用来兼容IE6)触发BFC,父元素仍然会被设置了浮动的子元素的高度撑开(如果父元素没有设置高度的话)
16 |
17 | 第三:伪元素,在当前元素的前后添加伪元素,使该伪元素设置:clear:both;注意height必须设置为0 ,否则该元素回避实际高出若干像素;
18 |
19 | ```css
20 | clearfix::before,clearfix::after {
21 | content:"";
22 | display:block;
23 | visibility:hidden;//伪元素不可见
24 | line-height:0;
25 | height:0 ;
26 | }
27 | ```
28 |
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/CssAndHTML/01css基础/013-怪异盒模型box-sizing.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: box-sizing
3 | date: 2016-09-18
4 | categories: css
5 | comments : true
6 | updated :
7 | layout :
8 | ---
9 |
10 | 怪异盒模型:box-sizing
11 |
12 | box-sizing:content-box || border-box ;
13 |
14 | * content-box: padding和border不被包含在定义的width和height之内。对象的实际宽度等于设置的width值和border、padding之和,即 ( Element width = width + border + padding )
15 |
16 | 此属性表现为标准模式下的盒模型。
17 |
18 | * border-box: padding和border被包含在定义的width和height之内。对象的实际宽度就等于设置的width值,即使定义有border和padding也不会改变对象的实际宽度,即 ( Element width = width )
19 |
20 | 浏览器对盒模型的解释是IE6之前的版本下相同,此时内容的宽高可以由定义的 width height 减去相应方向上的padding和border;
21 | 此属性表现为怪异模式下的盒模型。
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/CssAndHTML/01css基础/020css3新增特性.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: css3新增特性
3 | date: 2018-02-26 12:36:00
4 | categories: css
5 | ---
6 |
7 | * 长度单位
8 |
9 | 绝对长度单位 mm. cm. in. pt. px. pc q(1/4mm). : 1in = 2.54cm = 25.4 mm = 101.6q = 72pt = 6pc = 96px
10 |
11 | 相对长度单位 rem ex(相对于字母x) vh. vw (相对于视口被均分为100份之后的单位) vmin. vmax (相对于视口高度或者宽度较大的一个)
12 |
13 |
--------------------------------------------------------------------------------
/CssAndHTML/01css基础/023less-Overview.md:
--------------------------------------------------------------------------------
1 | ---
2 | title:less-OverView
3 | ---
4 |
5 | *
6 |
7 | ```
8 | //@import 导入选项
9 |
10 | --@import 可以至于任何你需要导入的地方
11 | 在标准的CSS,@import在规则必须先于所有其他类型的规则。但Less.js不关心
12 | example:
13 | .test(){
14 | color:#ff6a00;
15 | }
16 | .study{
17 | .test;
18 | }
19 | @import "studyLess.css";
20 |
21 | //output css
22 | @import "studyLess.css";
23 | .study {
24 | color: #ff6a00;
25 | }
26 |
27 | --@import 可以根据文件扩展名不同而用不同的方式处理
28 | 如果文件是.css的扩展名,将处理为CSS和@import语句保持原样。
29 | 如果为其他的扩展名将处理为less导入。
30 | 如果没有扩展名,将会为他添加.less扩展名,作为less导入。
31 | example:
32 | @import "foo"; // foo.less 导入为less文件
33 | @import "foo.less"; // foo.less 导入为less文件
34 | @import "foo.php"; // foo.php 导入为less文件
35 | @import "foo.css"; // 语句保持原样,导入为css文件
36 |
37 | 以下选项可用于覆盖此行为。
38 | 语法:@import (keyword) "filename";
39 | reference: 使用该less文件但是不输出它
40 | inline: 包括在源文件中输出,但是不作处理
41 | less: 将该文件视为less文件,无论其扩展名为什么
42 | css: 将文件视为css文件,无论扩展名为什么
43 | once: 该文件仅可导入一次 (默认)
44 | multiple: 该文件可以多次导入
45 | optional: 当没有发现文件时仍然编译
46 |
47 | 多个关键字 @import 是允许的,你必须使用逗号分隔关键字:
48 | example: @import (optional, reference) "foo.less";
49 | ```
--------------------------------------------------------------------------------
/CssAndHTML/01css基础/024.verticalAlign和lineHeight.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: vertical-align line-height
3 | date: 2018-04-12 12:36:00
4 | categories: css
5 | ---
6 |
7 | 前提注意
8 |
9 | **1. **
--------------------------------------------------------------------------------
/CssAndHTML/01css基础/026DomNodeAPI.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: DOM-Node-API
3 | date: 2018-05-08 12:36:00
4 | categories: html
5 | ---
6 |
7 | ### 1 Node 属性
8 |
9 | * nodeValue
10 | * nodeType
11 | * nodeName
12 | * childrenNodes
13 | * textContent
14 | * nextSibling
15 | * previousSibling
16 |
17 |
18 |
19 | ### 2 Node 方法
20 |
21 | * contains( ) : method returns a [`Boolean`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean) value indicating whether a node is a descendant of a given node, i.e. the node itself, one of its direct children ([`childNodes`](https://developer.mozilla.org/en-US/docs/Web/API/Node/childNodes)), one of the children's direct children, and so on.
22 | * appendChild( ) : The `**Node.appendChild()**` method adds a node to the end of the list of children of a specified parent node. If the given child is a reference to an existing node in the document, `appendChild()` moves it from its current position to the new position (there is no requirement to remove the node from its parent node before appending it to some other node).
--------------------------------------------------------------------------------
/CssAndHTML/01css基础/027css属性适用基础.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: css属性适用基础
3 | ---
4 |
5 | ### 1 块容器适用 css 属性总结:
6 |
7 | ```css
8 | text-align:适用于块级容器,默认值 start;可取值:left center right justify start end
9 |
10 |
11 | ```
12 |
13 | ### 2 内联级元素适用 css 属性总结
14 |
15 | ```css
16 | vertical-align:适用于内联级元素以及某些 table-cell 元素
17 | ```
18 |
19 | ### 3 css技巧
20 |
21 | * 文本垂直居中
22 |
23 | ```css
24 | vertical-align: middle;
25 | display: table-cell;
26 | ```
27 |
28 | * 图片垂直居中
29 |
30 | ```css
31 | div { line-height: 240px; font-size: 0; }
32 | img { vertical-align: middle; }
33 | ```
34 |
35 | * 多行文字垂直居中
36 |
37 | ```html
38 |
51 |
52 |
53 |
54 | 你好
55 | 世界
56 |
57 |
58 | ```
59 |
60 | * 文字少的时候居中显示,文字多的时候居左显示
61 |
62 | ```css
63 | .box{
64 | height:200px;
65 | background-color: antiquewhite;
66 | /* display:inline-block; */
67 | text-align:center;
68 | width:50px;
69 | }
70 | .content{
71 | display:inline-block;
72 | text-align:left;
73 | }
74 | ```
75 |
76 |
--------------------------------------------------------------------------------
/CssAndHTML/02css进阶/002伪对象使用技巧.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 伪对象使用技巧
3 | ---
4 |
5 | ```html
6 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 | ```
73 |
74 |
--------------------------------------------------------------------------------
/CssAndHTML/02css进阶/003适配iphoneX.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jimwmg/JiM-Blog/11adb268258e10b8ea6a0897cfd56d4ee83a71e9/CssAndHTML/02css进阶/003适配iphoneX.md
--------------------------------------------------------------------------------
/CssAndHTML/02css进阶/021Css Animation.md:
--------------------------------------------------------------------------------
1 | ---
2 | title:Css Animation
3 | ---
4 |
5 | ### 1 transition实现
6 |
7 | ```css
8 | .rightSlide{
9 | background-color: #F6F7FB;
10 | border-left:@border;
11 | transition:width .3s ease-in
12 | }
13 | .rightSlideActive{
14 | width:300px;
15 | }
16 | .rightSlideUnActive {
17 | width:50px;
18 | }
19 | ```
20 |
21 | ```html
22 |
23 |
24 |
25 |
28 | ```
29 |
30 | ```javascript
31 | document.getElementById('btn').onclick = function(){
32 | document.getElementById('el').className = 'rightSlide rightSlideUnActive'
33 | }
34 | ```
35 |
36 |
--------------------------------------------------------------------------------
/CssAndHTML/04基础知识回顾/02JS最基础.md:
--------------------------------------------------------------------------------
1 | ---
2 | JS最基础
3 | ---
4 |
5 | ### 1.JS Array 对象
6 |
7 | 注意:API使用方式、参数、返回值、回调函数中的this指向等
8 |
9 |
--------------------------------------------------------------------------------
/CssAndHTML/04基础知识回顾/03CSS最基础.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jimwmg/JiM-Blog/11adb268258e10b8ea6a0897cfd56d4ee83a71e9/CssAndHTML/04基础知识回顾/03CSS最基础.md
--------------------------------------------------------------------------------
/CssAndHTML/文章链接.md:
--------------------------------------------------------------------------------
1 | ---
2 |
3 | ---
4 |
5 | [background-image使用svg无法改变颜色](https://www.cnblogs.com/lovesong/p/7648163.html)
6 |
7 | [flex-basic](https://www.jianshu.com/p/17b1b445ecd4)
8 |
9 | [font-face-张鑫旭](https://www.zhangxinxu.com/wordpress/2017/03/css3-font-face-src-local/)
10 |
11 |
--------------------------------------------------------------------------------
/Docker/README.md:
--------------------------------------------------------------------------------
1 | ---
2 |
3 | ---
4 |
5 |
6 |
7 |
8 |
9 | [docker入门教程](https://yeasy.gitbooks.io/docker_practice/introduction/what.html)
10 |
11 | [掘金docker](https://juejin.im/search?query=docker&type=all)
12 |
13 | [docker中文文档](http://www.docker.org.cn/book/docker/what-is-docker-16.html)
14 |
15 | [docker-从入门到实践PDF]([chrome-extension://cdonnmffkdaoajfknoeeecmchibpmkmg/assets/pdf/web/viewer.html?file=https%3A%2F%2Flegacy.gitbook.com%2Fdownload%2Fpdf%2Fbook%2Fyeasy%2Fdocker_practice](chrome-extension://cdonnmffkdaoajfknoeeecmchibpmkmg/assets/pdf/web/viewer.html?file=https%3A%2F%2Flegacy.gitbook.com%2Fdownload%2Fpdf%2Fbook%2Fyeasy%2Fdocker_practice))
16 |
17 | [docker-从入门到实践](https://yeasy.gitbooks.io/docker_practice/)
18 |
19 | [docker-nodejs](https://github.com/nodejs/docker-node/blob/master/docs/BestPractices.md#cmd)
20 |
21 | [docker-nodejs2](https://juejin.im/post/5a9626abf265da4e9d225f4f)
22 |
23 |
--------------------------------------------------------------------------------
/HTTP/001CDN.md:
--------------------------------------------------------------------------------
1 | ---
2 | titile:CDN
3 | ---
4 |
5 | ### 1.CDN定义
6 |
7 | 内容分发网络(Content Delivery Network,CDN)是建立并覆盖在承载网上,由不同区域的服务器组成的分布式网络。将源站资源缓存到全国各地的边缘服务器,供用户就近获取,降低源站压力。
8 |
9 |
10 |
11 |
12 |
13 | [参考](https://help.aliyun.com/product/27099.html?spm=a2c4g.11186623.6.540.5f01219fLjNpzY)
--------------------------------------------------------------------------------
/HTTP/004HTTP常见误区总结.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: HTTP常见误区总结
3 | ---
4 |
5 | ### 1 get和post的区别
6 |
7 | 基本的区别,可能就是如下表所示:
8 |
9 | | | GET | POST |
10 | | ---------------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
11 | | 后退按钮/刷新 | 无害 | 数据会被重新提交(浏览器应该告知用户数据会被重新提交)。 |
12 | | 书签 | 可收藏为书签 | 不可收藏为书签 |
13 | | 缓存 | 能被缓存( 用户获取数据,可以不用每次都与数据库连接,所以可以使用缓存。) | 不能缓存( post做的一般是修改和删除的工作,所以必须与数据库交互,所以不能使用缓存。因此get请求适合于请求缓存。) |
14 | | 编码类型 | application/x-www-form-urlencoded | application/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码。 |
15 | | 历史 | 参数保留在浏览器历史中。 | 参数不会保存在浏览器历史中。 |
16 | | 对数据长度的限制 | 是的。当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。 | 无限制。 |
17 | | 对数据类型的限制 | 只允许 ASCII 字符。 | 没有限制。也允许二进制数据。 |
18 | | 安全性 | 与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分。在发送密码或其他敏感信息时绝不要使用 GET ! | POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。 |
19 | | 可见性 | 数据在 URL 中对所有人都是可见的。 | 数据不会显示在 URL 中。 |
20 |
21 |
22 |
23 | 从技术的本质上来说,get/post是HTTP协议中的两种发送请求的方法;而HTTP的底层是 TCP/IP;本质上讲 get和post请求是没有什么区别的,因为他们都是通过 TCP/IP协议在传输数据而已,那么上述的区别是在哪里被加上的呢?
24 |
25 | ##### 显而易见,是浏览器!
26 |
27 | 不同的浏览器在发起http请求的时候,通常会对 get 请求的url 的长度进行限制等;
28 |
29 | ##### 也就是说GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。
30 |
31 | 那么抛开浏览器导致的get 和 post请求的区别来看,它们两个还有什么其他的差别?
32 |
33 | * get 请求只产生一个tcp数据包,浏览器会把http Header和data一起发送出去,服务器响应200
34 | * post 请求会产生两个tcp数据包,浏览器先发送header,服务器响应 100 continue,浏览器在发送data,服务器响应200 0k;
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/HTTP/007jsonp的基本实现.md:
--------------------------------------------------------------------------------
1 | ---
2 | title:JSONP的基本实现
3 | ---
4 |
5 | 注意点
6 |
7 | * script标签的删除
8 |
9 | * 全局事件的删除
10 |
11 | * 是否有超时时间处理
12 |
13 | * script标签的onload事件是在该标签被加载并且执行之后才会触发
14 |
15 |
16 | ```javascript
17 | function formateData(data){
18 | let arr = [];
19 | for(let key in data){
20 | if(Object.prototype.hasOwnProperty.call(data,key)){
21 | arr.push(encodeURIComponent(key) + '=' + encodeURIComponent(data[key]))
22 | }
23 | }
24 | }
25 | function JSONP(opts){
26 | let url = opts.url;
27 | function noop (){};
28 | let successFn = opts.successFn || noop;
29 | let failFn = opts.failFn || noop;
30 | let callbackName = opts.callbackName || 'callback';//支持外部自定义和后端约定回调函数名字
31 | let timeout = opts.timeout || 6000;
32 | let timer = null;
33 | let id = opts.id || `__jp${Math.random().toString(36).substr(2)}`;//支持自定义id
34 | let params = opts.params || {};
35 | params.callbackName = id;
36 |
37 | let head = document.getElementsByTagName('head')[0];
38 | let script = document.createElement('scripit');
39 | let qs = formateData(params);
40 | script.src = `${url}?${qs}`
41 | function cleanup(){
42 | window[id] = noop;
43 | head.removeChild(script);
44 | if(timer){
45 | clearTimeout(timer);
46 | }
47 | }
48 | if(timeout){
49 | timer = setTimeout(function(){
50 | cleanup()
51 | failFn(new Error('failed'))
52 | },timeout)
53 | }
54 | window[id] = function(result){
55 | cleanup();
56 | successFn(result);
57 | }
58 | head.appendChild(script);
59 | function cancel(){
60 | if(window[id]){
61 | cleanup()
62 | }
63 | }
64 | return cancel;
65 | }
66 | ```
67 |
68 |
--------------------------------------------------------------------------------
/HTTP/008.浏览器对url长度的限制.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jimwmg/JiM-Blog/11adb268258e10b8ea6a0897cfd56d4ee83a71e9/HTTP/008.浏览器对url长度的限制.md
--------------------------------------------------------------------------------
/HTTP/009encode-decode.md:
--------------------------------------------------------------------------------
1 | ---
2 |
3 | ---
4 |
5 | ### 查询字符串的编码与解码
6 |
7 | `xxx.html?a=x&b=x&url=xxxx/xx/x.html?aa=1`
8 |
9 | ```
10 | encodeURIComponent('?')
11 | "%3F"
12 | 我们又 encode一遍这个符号
13 |
14 | encodeURIComponent('=')
15 | "%3D"
16 | encodeURIComponent('%3D')
17 | "%253D"
18 | encodeURIComponent('%253D') //百分号不会再被encode了
19 | "%253D"
20 | encodeURIComponent('/')
21 | "%2F"
22 | encodeURIComponent('%2F')
23 | "%252F"
24 | encodeURIComponent('%252F') //百分号不会再被encode了
25 | "%252F"
26 | ```
27 |
28 | 易出现问题一:编码解码问题 url的值没有经过编码 xxx.html?a=x&b=x&url=redict.html?aa=1
29 |
30 | ```javascript
31 | 'xxx.html?a=x&b=x&url=redict.html?aa=1'.split('?')
32 |
33 | ["xxx.html", "a=x&b=x&url=redict.html", "aa=1"]
34 |
35 | 开发直接拿到 'xxx.html?a=x&b=x&url=xxxx.html?aa=1'.split('?')[1] 机型解析,那么 redict.html 后面的参数肯定全部都丢了
36 | ```
37 | ```
38 |
39 | 易出现问题二:开发某些情况下拼成如右所示字符串 xxx.html??a=xb=x 带有两个问号
40 |
41 | ```javascript
42 | 'xxx.html??a=x&b=x'.split('?')
43 | ['xxx.html','','a=x&b=x']
44 |
45 | ```
46 |
47 |
--------------------------------------------------------------------------------
/HTTP/020-websocket.md:
--------------------------------------------------------------------------------
1 | ---
2 |
3 | ---
4 |
5 | ### 1 websocket概念
6 |
7 | 我们已经有了 HTTP 协议,为什么还需要另一个协议?它能带来什么好处?
8 |
9 | 答案很简单,因为 HTTP 协议有一个缺陷:通信只能由客户端发起。
10 |
11 | 举例来说,我们想了解今天的天气,只能是客户端向服务器发出请求,服务器返回查询结果。HTTP 协议做不到服务器主动向客户端推送信息。
12 |
13 | 它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于[服务器推送技术](https://en.wikipedia.org/wiki/Push_technology)的一种。
14 |
15 | 其他特点包括:
16 |
17 | (1)建立在 TCP 协议之上,服务器端的实现比较容易。
18 |
19 | (2)与 HTTP 协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用 HTTP 协议,因此握手时不容易屏蔽,能通过各种 HTTP 代理服务器。
20 |
21 | (3)数据格式比较轻量,性能开销小,通信高效。
22 |
23 | (4)可以发送文本,也可以发送二进制数据。
24 |
25 | (5)没有同源限制,客户端可以与任意服务器通信。
26 |
27 | (6)协议标识符是`ws`(如果加密,则为`wss`),服务器网址就是 URL。
28 |
29 | >
--------------------------------------------------------------------------------
/IOS/C语言/00Q&A.md:
--------------------------------------------------------------------------------
1 | ### 1 c语言中的变量的声明和定义声明区别
2 |
3 | ```c
4 | extern int a ;//声明,不是定义
5 | int a; //声明也是定义
6 | a = 5 ;//变量的初始化
7 | ```
8 |
9 | * 寄存器和RAM的区别?
--------------------------------------------------------------------------------
/IOS/C语言/02c-标准库.md:
--------------------------------------------------------------------------------
1 | ---
2 |
3 | ---
4 |
5 | ### 1 [stdio.h](http://www.runoob.com/cprogramming/c-standard-library-stdio-h.html)
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/IOS/C语言/03-c语言常用方法总结.md:
--------------------------------------------------------------------------------
1 | ---
2 |
3 | ---
4 |
5 | ### 1 字符串
6 |
7 | | 序号 | 函数 & 目的 |
8 | | ---- | ------------------------------------------------------------ |
9 | | 1 | **strcpy(s1, s2);** 复制字符串 s2 到字符串 s1。 |
10 | | 2 | **strcat(s1, s2);** 连接字符串 s2 到字符串 s1 的末尾。 |
11 | | 3 | **strlen(s1);** 返回字符串 s1 的长度。 |
12 | | 4 | **strcmp(s1, s2);** 如果 s1 和 s2 是相同的,则返回 0;如果 s1s2 则返回大于 0。 |
13 | | 5 | **strchr(s1, ch);** 返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。 |
14 | | 6 | **strstr(s1, s2);** 返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置。 |
15 |
16 |
--------------------------------------------------------------------------------
/IOS/Object-C/02-IOS-animation.md:
--------------------------------------------------------------------------------
1 | ---
2 |
3 | ---
4 |
5 | 参考资料:
6 |
7 | [animation1](https://www.jianshu.com/p/457357a5897a)
8 |
9 | [github-demo](https://github.com/ildream/CAAnimationDemo)
10 |
11 | [animation-demo汇总](http://code.cocoachina.com/list/33/5?order=downloads)
12 |
13 | [IOS开发步骤](https://www.jianshu.com/p/73f4e11524e9)
14 |
15 | xcode面板详解:
16 |
17 | [xcode官方教程-重要且准确-墙裂推荐-用时 1 小时即可完全掌握xcode用法](https://help.apple.com/xcode/mac/current/)
18 |
19 | 左侧面板最后一个:[IOS构建日志](http://beyondvincent.com/2013/11/21/2013-11-23-123-build-process/)
20 |
21 | [IOS-animation-demo合集](https://segmentfault.com/a/1190000016181681)
22 |
23 | [基础动画](https://github.com/manofit/BabyPigAnimation.git)
24 |
25 |
26 |
27 | xcode文档总结
28 |
29 | ### 1 user interface file
30 |
31 | A *user interface file* is a type of macOS file (a file with a `.storyboard` or `.xib` filename extension) that contains the source for the user interface of an app. A storyboard (`.storyboard`) file contains a set of view controllers and their views, and the relationships between the view controllers. A xib file (`.xib`) usually contains one view controller or menu bar. The contents of `.xib` and `.storyboard`files are stored in XML format. At build time, the `.xib` and `.storyboard` files are compiled into binary files called `nibs`. At runtime, nibs are loaded and the objects they contain are instantiated
32 |
33 | All projects created from a template contain a `Main.storyboard` file that contains the user interface for your app. For watchOS apps, the file is called `Interface.storyboard`. For iOS apps, there’s also a `LaunchScreen.storyboard` file for the view that is displayed while the app is launching. A storyboard (`.storyboard`) file contains a set of view controllers and their views. To open Interface Builder in a separate window, Control-click the user interface file in the Project navigator, then choose Open in New Window from the pop-up menu.
--------------------------------------------------------------------------------
/IOS/Object-C/03-IOS-http.md:
--------------------------------------------------------------------------------
1 | ---
2 |
3 | ---
4 |
5 | #### 1. iOS中发送HTTP请求的方案
6 |
7 | 在iOS中,常见的发送HTTP请求的方案有
8 | 苹果原生(自带)
9 | **NSURLConnection:用法简单,最古老最经典最直接的一种方案 NSURLSession:功能比NSURLConnection更加强大,苹果目前比较推荐使用这种技术(2013推出,iOS7开始使用的技术)**
10 | CFNetwork:NSURL*的底层,纯C语言
11 |
12 | 第三方框架
13 | **AFNetworking:简单易用,提供了基本够用的常用功能,维护和使用者多**
14 | ASIHttpRequest:外号“HTTP终结者”,功能极其强大,可惜早已停止更新
15 | MKNetworkKit:简单易用,产自印度,维护和使用者少
16 |
17 | **为了提高开发效率,我们开发用的基本是第三方框架,但是我们同样也需要掌握苹果原生的请求方案**
18 |
19 |
20 |
21 |
22 |
23 | [参考-IOS网络请求-同步异步](https://www.kancloud.cn/digest/data/106703)
--------------------------------------------------------------------------------
/IOS/Object-C/04-IOS-MVC.md:
--------------------------------------------------------------------------------
1 | ---
2 |
3 | ---
4 |
5 | ### 0 MVC
6 |
7 | Model
8 | Model定义了你的应用是什么(What)。Model通常是纯粹的NSObject子类(Swift中可以是Struct/Class),仅仅用来表示数据模型。
9 |
10 | Controller
11 | Controller定义了Model如何显示给用户(How),并且View接收到的事件反馈到最后Model的变化。Controller层作为MVC的枢纽,往往要承担许多Model与View同步的工作。
12 |
13 | View
14 | View是Model的最终呈现,也就是用户看到的界面。
15 |
16 | 首先系统会在我们应用目录下(MainBundle)的 Info.plist 文件中查找`UIMainStoryBoardFile`的值,如果找到了,则会在`_loadMainInterfaceFile`中调用`_loadMainStoryboardFileNamed:bundle:`使用 Storyboard 文件初始化主视图。和`NSMainNibFile`,没找到则会继续查找`NSMainNibFile`,找到后在`_loadMainInterfaceFile`中调用`_loadMainNibFileNamed:bundle:`使用 Nib 文件初始化主视图。初始化完成后的主视图会自动赋值给当前应用的 UIWindow 的`rootViewController`属性。
17 |
18 | 如果两个都没找到,我们还可以在`UIApplicationDelegate`类的`- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;`方法中手动创建 UIWindow 和 RootViewController(创建 UIViewController 后将其赋值给 UIWindow 的 rootViewController 属性)。当然,如果我们之前在 Info.plist 文件中正确设置了`UIMainStoryBoardFile`或`NSMainNibFile`,这里创建的 RootViewController 则会将其取代掉。手动创建 UIWindow 和 RootViewController 的方法会在后面给出。
19 |
20 | 那么,如果我们在`didFinishLaunching`方法中也没创建,那么这个 iOS 应用就没有 UI 了,启动后会显示黑屏,并且`window`也会为`nil`。
21 |
22 | 1. UIApplicationDelegate
23 |
24 | 每个 iPhone 应用程序都有一个 UIApplication,UIApplication 是 iPhone 应用程序的开始并且负责初始化并显示 UIWindow,并负责加载应用程序的第一个 UIView 到 UIWindow 窗体中。UIApplication 的另一个任务是帮助管理应用程序的生命周期,而 UIApplication 通过一个名字为 UIApplicationDelegate 的代理类来履行这个任务。尽管 UIApplication 会负责接收事件,而 UIApplicationDelegate 则决定应用程序如何去响应这些事件,UIApplicationDelegate 可以处理的事件包括应用程序的生命周期事件(比如程序启动和关闭)、系统事件(比如来电、记事项警 告),本文会介绍如何加载应用程序的 UIView 到 UIWindow 以及如何利用 UIApplicationDelegate 处理系统事件。
25 |
26 | ### 1 Controller
27 |
28 | UIViewController的生命周期
29 | ViewController生命周期会经历初始化、加载视图、销毁视图、生命结束等过程。
30 |
31 | 1)init方法
32 |
33 | 初始化ViewController本身。
34 |
35 | 2)loadView方法
36 |
37 | 当view需要被展示而它却是nil时,viewController会调用该方法,如果代码构建View的话需要重写此方法。
38 |
39 | 3)viewDidLoad方法
40 |
41 | 执行完loadView后继续执行viewDidLoad,loadView时还没有view,而viewDidLoad时view已经创建好了。
42 |
43 | 4)viewDidUnload方法
44 |
45 | 当系统内存吃紧的时候会调用该方法。
46 |
47 | 5)dealloc
48 |
49 | 释放其他资源或内存
50 |
--------------------------------------------------------------------------------
/IOS/README.md:
--------------------------------------------------------------------------------
1 | ### 1 学习资料汇总
2 |
3 | [教程1](https://www.yiibai.com/)
4 |
5 | [菜鸟教程](http://www.runoob.com/)
6 |
7 | [oc](https://www.yiibai.com/objective_c)
--------------------------------------------------------------------------------
/JavaScript/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jimwmg/JiM-Blog/11adb268258e10b8ea6a0897cfd56d4ee83a71e9/JavaScript/.DS_Store
--------------------------------------------------------------------------------
/JavaScript/ES6/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jimwmg/JiM-Blog/11adb268258e10b8ea6a0897cfd56d4ee83a71e9/JavaScript/ES6/.DS_Store
--------------------------------------------------------------------------------
/JavaScript/ES6/003ES6-Promise源码分析.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: ES6-Promise源码分析
3 | date: 2017-06-15 12:36:00
4 | categories: ES6
5 | tags : promise
6 | comments : true
7 | updated :
8 | layout :
9 | ---
10 |
11 |
12 |
13 | 现在回顾下Promise的实现过程,其主要使用了设计模式中的观察者模式:
14 |
15 | 1. 通过Promise.prototype.then和Promise.prototype.catch方法将观察者方法注册到被观察者Promise对象中,同时返回一个新的Promise对象,以便可以链式调用。
16 | 2. 被观察者管理内部pending、fulfilled和rejected的状态转变,同时通过构造函数中传递的resolve和reject方法以主动触发状态转变和通知观察者。
17 |
18 | [Promise源码](https://github.com/jimwmg/promise/blob/master/src/core.js)
--------------------------------------------------------------------------------
/JavaScript/ES6/015reduce函数用法总结.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: reduce函数的作用
3 | date: 2018-01-23
4 | categories: ES6
5 | ---
6 |
7 | ### 1 数组转化为枚举
8 |
9 | ```javascript
10 | var arr = ['GROUP','USER','COMPONY'];
11 | function enmu(arr){
12 | //不考虑入参的判断
13 | return arr.reduce((prev,next)=>{
14 | prev[next] = next;
15 | return prev;
16 | },{})
17 | };
18 | console.log(enmu(arr));
19 | ```
20 |
21 | ### 2 千分位分割符
22 |
23 | ```javascript
24 | var str = '123456789';
25 | //[9,8,7,6,5,4,3,2,1]
26 | function formatCash(str) {
27 | //不考虑入参的判断
28 | return String(str).split('').reverse().reduce((pre, next, index) => {
29 | return (index % 3) ? (next + "" + pre) : (next + ',' + pre);
30 | })
31 | }
32 |
33 | console.log(formatCash(str));
34 | ```
35 |
36 | 另外一种优化算法,因为字符串在 js 每次变化都会重新开辟内存,所有转化为数组会更加便捷;
37 |
38 | ```javascript
39 | function f(str) {
40 | const ret = Array.from(str).reverse().reduce((result,next,i,arr) => {
41 | if((i+1)%3 === 0 && (i+1) !== arr.length) {
42 | result.push(next,',')
43 | return result;
44 | }
45 | result.push(next);
46 | return result;
47 | // return (index % 3) ? (next + "" + pre) : (next + ',' + pre);
48 | },[])
49 | return ret.reverse().join('');
50 | }
51 | ```
52 |
53 | 网友评论的一些‘蒂花之秀’
54 |
55 | [toLocalString](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString)
56 |
57 | ### 3 根据路径查询确定对象
58 |
59 | ```javascript
60 | var state = {
61 | a:{name:'Jhon'},
62 | b:{
63 | c:{age:12},
64 | d:{gender:'male'}
65 | },
66 | e:{
67 | f:{age:12},
68 | g:{
69 | gender:'male',
70 | h:{address:'china'}
71 | }
72 | }
73 | }
74 | var mapPath = {
75 | root :[],
76 | a:['a'],
77 | bd:['b','d']
78 | }
79 | var ret = mapPath.root.reduce(function(state,key){
80 | return state[key]
81 | },state);
82 | var retA = mapPath.a.reduce(function(state,key){
83 | return state[key]
84 | },state)
85 | console.log(mapPath.bd)
86 | var retBD = mapPath.bd.reduce(function(state,key){
87 | return state[key]
88 | },state)
89 | console.log(ret,retA,retBD);
90 | ```
91 |
92 |
--------------------------------------------------------------------------------
/JavaScript/ES6/017ES6_class类.md:
--------------------------------------------------------------------------------
1 | ---
2 | title:ES6——class类
3 | ---
4 |
5 | [ES6系列文章](https://github.com/jimwmg/JiM-Blog/tree/master/JavaScript/ES6)
6 | **首先明确原型链查找属性,如果找不到会去该对象的`__proto__`属性上去查找**
7 |
8 | ### extends关键字的核心作用
9 |
10 | ```javascript
11 | class Basic {
12 | static getBasicDefault(){
13 | console.log('staticBasic')
14 | }
15 | constructor(){
16 | this.basie = 'basic'
17 | }
18 | basic1(){
19 | console.log('basic1')
20 | }
21 | }
22 | //一个类的构造函数也是指向该类本身
23 | console.log(Basic.getBasicDefault == Basic.prototype.constructor.getBasicDefault) //true
24 | class Manager extends Basic {
25 | static getManageDefault(){
26 | console.log('staticManage');
27 | }
28 | manage1(){
29 | console.log('manage1')
30 | }
31 | }
32 | //extends关键字作用核心:1 实现原型的继承
33 | console.log(Manager.prototype.__proto__== Basic.prototype) // true
34 | //extends关键字作用核心:2 实现静态方法继承
35 | console.log(Manager.__proto__ == Basic) //true
36 |
37 | console.dir(Basic)
38 | console.dir(Manager)
39 |
40 | ```
41 |
--------------------------------------------------------------------------------
/JavaScript/ES6/018ES6 set get 结合 class .md:
--------------------------------------------------------------------------------
1 | ---
2 | title: ES6 set get 结合 class
3 | ---
4 |
5 | ### 1 对象的扩展
6 |
7 | ```javascript
8 | let o = {
9 | _name : 'Jim',
10 | get name(){
11 | console.log('222');
12 | return this._name
13 | },
14 | set name(v){
15 | this._name = v
16 | }
17 | }
18 | Object.defineProperty(o,'testSet',{
19 | enumerable:true,
20 | configurable:true,
21 | set() {
22 | console.log('testSet')
23 | },
24 | get() {
25 | return 'getTEST'
26 | }
27 | })
28 | console.dir(o);
29 | console.log(o._name)
30 | console.log(o.name)
31 | o.name = 'Jhon'
32 | console.log(o._name)
33 | ```
34 |
35 |
36 |
37 | 
38 |
39 | ### 2 class 定义类的时候,使用对象的扩展语法
40 |
41 | ```javascript
42 | class Test {
43 | constructor() {
44 | this.name = 'Jim';
45 | this.age = '12';
46 | }
47 | get address() {
48 | return 'jhon'
49 | }
50 | set address(val) {
51 | console.log(333);
52 | this.age = val;
53 | }
54 | otherFunc() {
55 | console.log('otherFunc')
56 | }
57 | }
58 | console.dir(Test)
59 | console.dir(Test.prototype.address)
60 | console.dir(new Test())
61 | console.dir(new Test().address)
62 | ```
63 |
64 | 
65 |
66 | ### 3 核心还是在于 class 这个语法糖,其实等价于
67 |
68 | ```javascript
69 | function Test() {
70 | this.name = 'Jim';
71 | this.age = '12';
72 | }
73 | Test.prototype = {
74 | get address() {
75 | return 'jhon'
76 | },
77 | set address(val) {
78 | console.log(333);
79 | this.age = val;
80 | },
81 | otherFunc() {
82 | console.log('otherFunc')
83 | },
84 | }
85 | ```
86 |
87 |
--------------------------------------------------------------------------------
/JavaScript/ES6/019实现ES6的extends.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 实现ES6的extends
3 | ---
4 |
5 | ### 1 ES6 中extends的核心作用
6 |
7 | ```javascript
8 | class Parent{
9 | constructor(){
10 |
11 | }
12 | parentMethod() {
13 | console.log('parentMethod')
14 | }
15 | }
16 | class Child extends Parent{
17 | constructor(){
18 |
19 | }
20 | childMethod() {
21 | console.log('childMethod');
22 | }
23 | }
24 | console.log(Child.prototype.__proto__ === Parent.prototype); // true
25 | console.log(Child.__proto__ === Parent) // true
26 | console.dir(Parent);
27 | console.dir(Child);
28 | ```
29 |
30 | ### 2 实现 extends
31 |
32 | `Object.setPrototypeOf(obj,proto)` ==> `obj.__proto__ = proto`
33 |
34 | ```javascript
35 | // Only works in Chrome and FireFox, does not work in IE:
36 | Object.setPrototypeOf = Object.setPrototypeOf || function(obj, proto) {
37 | obj.__proto__ = proto;
38 | return obj;
39 | }
40 | ```
41 |
42 | ```javascript
43 | function myExtends(child,parent) {
44 | Object.setPrototypeOf(child,parent);
45 | Object.setPrototypeOf(child.prototype,parent.prototype)
46 | }
47 | ```
48 |
49 | ```javascript
50 | class Parent{
51 | constructor(){
52 |
53 | }
54 | parentMethod() {
55 | console.log('parentMethod')
56 | }
57 | }
58 | class Child {
59 | constructor(){
60 |
61 | }
62 | childMethod() {
63 | console.log('childMethod');
64 | }
65 | }
66 | myExtends(Child,Parent);
67 | console.log(Child.prototype.__proto__ === Parent.prototype); // ture
68 | console.log(Child.__proto__ === Parent) // true
69 | console.dir(Parent);
70 | console.dir(Child);
71 | ```
72 |
73 |
--------------------------------------------------------------------------------
/JavaScript/ES6/022装饰器.md:
--------------------------------------------------------------------------------
1 | ---
2 | title:装饰器
3 | ---
4 |
5 | ### 1.装饰器基本定义
6 |
7 | **装饰器是一个对类进行处理的函数。装饰器函数的第一个参数,就是所要装饰的目标类**
8 |
9 | 官网的一些案例
10 |
11 | (examples are from proposal)
12 |
13 | Simple class decorator
14 |
15 | ```js
16 | @annotation
17 | class MyClass { }
18 |
19 | function annotation(target) {
20 | target.annotated = true;
21 | }
22 |
23 | Copy
24 | ```
25 |
26 | Class decorator
27 |
28 | ```js
29 | @isTestable(true)
30 | class MyClass { }
31 |
32 | function isTestable(value) {
33 | return function decorator(target) {
34 | target.isTestable = value;
35 | }
36 | }
37 |
38 | Copy
39 | ```
40 |
41 | Class function decorator
42 |
43 | ```js
44 | class C {
45 | @enumerable(false)
46 | method() { }
47 | }
48 |
49 | function enumerable(value) {
50 | return function (target, key, descriptor) {
51 | descriptor.enumerable = value;
52 | return descriptor;
53 | }
54 | }
55 |
56 | Copy
57 | ```
58 |
59 | 此语法需要结合 babel 插件使用 @babel/plugin-proposal-decorators
60 |
61 | 装饰器基本的行为类似于
62 |
63 | ```javascript
64 | @decorator
65 | class A {}
66 |
67 | // 等同于
68 |
69 | class A {}
70 | A = decorator(A) || A;
71 | ```
72 |
73 |
74 |
75 |
--------------------------------------------------------------------------------
/JavaScript/ES6/README.md:
--------------------------------------------------------------------------------
1 | ##这里主要是自己对ES6相关的常用特性和语法规则的看法和理解
--------------------------------------------------------------------------------
/JavaScript/ES6/imgs/reflect.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jimwmg/JiM-Blog/11adb268258e10b8ea6a0897cfd56d4ee83a71e9/JavaScript/ES6/imgs/reflect.png
--------------------------------------------------------------------------------
/JavaScript/babel/01babel使用.md:
--------------------------------------------------------------------------------
1 | ----
2 |
3 | [babel-runtime](https://segmentfault.com/q/1010000005596587?from=singlemessage&isappinstalled=1)
4 |
5 | [.babelrc](https://babeljs.io/docs/en/options)
6 |
7 | [babel-polyfill & babel-runtime](https://juejin.im/post/5b2cc31f51882574d02facff)
8 |
9 | [babel-preset-env](http://2ality.com/2017/02/babel-preset-env.html)
10 |
11 |
--------------------------------------------------------------------------------
/JavaScript/babel/03babel-webpack.md:
--------------------------------------------------------------------------------
1 | ---
2 |
3 | ---
4 |
5 | ### 1 babel 结合webpack
6 |
7 | [babel官方](https://babeljs.io/setup#webpack)
8 |
9 | [babel-6.26:注意很多配置选项和babel7不一样](https://segmentfault.com/a/1190000011155061)
10 |
11 |
--------------------------------------------------------------------------------
/JavaScript/babel/04babel-generator源码.md:
--------------------------------------------------------------------------------
1 | Babel-generator
2 |
3 | ----
4 |
5 | ### 1 ast解析
6 |
7 | [参考]()
8 |
9 | #### ast节点
10 |
11 | 所有的节点都有的属性值如下,描述该节点的类型以及位置信息
12 |
13 | ```javascript
14 | {
15 | type:String,节点类型
16 | start:Number,该节点的起始位置
17 | end:Number,该节点的结束位置
18 | loc:{
19 | start:{ 该节点开始行和列的描述
20 | line:Number,该节点所在行数
21 | column:Number,该节点所在列数
22 | }
23 | end:{
24 | line:Number,该节点所在行数
25 | column:Number,该节点所在列数
26 | }
27 | }
28 | }
29 | ```
30 |
31 |
--------------------------------------------------------------------------------
/JavaScript/babel/07babel-loader源码解析.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jimwmg/JiM-Blog/11adb268258e10b8ea6a0897cfd56d4ee83a71e9/JavaScript/babel/07babel-loader源码解析.md
--------------------------------------------------------------------------------
/JavaScript/babel/08编译解析器.md:
--------------------------------------------------------------------------------
1 | ---
2 | title:编译解析器
3 | ---
4 |
5 | ### 1.编译解析器
6 |
7 | https://github.com/starkwang/the-super-tiny-compiler-cn
8 |
9 | https://github.com/jamiebuilds/the-super-tiny-compiler
10 |
11 |
--------------------------------------------------------------------------------
/JavaScript/babel/09.如何写bable-plugin.md:
--------------------------------------------------------------------------------
1 | ---
2 |
3 | ### 1.目录结构
4 |
5 | ```
6 | -.babelrc
7 | - plugin.js
8 | - index.js
9 | - package.json
10 | ```
11 |
12 | [bable-cli](https://babeljs.io/docs/en/babel-cli)
13 |
14 | ### 2.具体内容
15 |
16 | .bablerc
17 |
18 | ```javascript
19 | {
20 | "presets": [
21 | "@babel/preset-flow",
22 | ["@babel/preset-env",{
23 | "useBuiltIns":"usage",
24 | }],
25 | ],
26 | "plugins":[
27 | ["./plugin.js"]
28 | ]
29 | }
30 | ```
31 |
32 | plugin.js
33 |
34 | ```javascript
35 | module.exports = function (...args) {
36 | debugger;
37 | //
38 | console.log(args)
39 | return {
40 | visitor: {
41 | Identifier(...args) {
42 | debugger;
43 | debugger;
44 | console.log('sss',args)
45 | // args:[NodePath,PluginPass]
46 | const name = path.node.name;
47 | // reverse the name: JavaScript -> tpircSavaJ
48 | path.node.name = name.split("").reverse().join("");
49 | }
50 | }
51 | };
52 | }
53 | ```
54 |
55 | index.js
56 |
57 | ```javascript
58 | const JavaScript = 'JavaScript'
59 | ```
60 |
61 | > npx bable index.js
62 |
63 | 生成内容
64 |
65 | ```javascript
66 |
67 | ```
68 |
69 |
--------------------------------------------------------------------------------
/JavaScript/javascript1-基础/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jimwmg/JiM-Blog/11adb268258e10b8ea6a0897cfd56d4ee83a71e9/JavaScript/javascript1-基础/.DS_Store
--------------------------------------------------------------------------------
/JavaScript/javascript1-基础/03opacity和rgba 改变透明度的区别.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: opacity和rgba 改变透明度的区别
3 | date: 2016-10-17 12:36:00
4 | tags: css
5 | categories: css html
6 | comments : true
7 | updated :
8 | layout :
9 | ---
10 |
11 | 一 opacity和rgba 改变透明度的区别
12 |
13 | 需要注意,rgba()
14 |
15 | * 仅仅改变的是背景的透明度,
16 | * 不会对文本造成影响,不具有继承性
17 |
18 | 然而,opacity
19 |
20 | * 不仅会改变背景的透明度,
21 | * 还会改变文本的透明度,并且具有继承性
22 | * 除了具有继承性,一个元素和它包含的子元素都会具有和元素背景相同的透明度,哪怕这个元素和它的子元素有不同的opacity属性值。
23 | opacity属性指定了一个元素的不透明度。换言之,opacity属性指定了一个元素后面的背景的被覆盖程度。
24 |
25 | 当opacity属性的值应用于某个元素上时,是把这个元素(包括它的内容)当成一个整体看待,即使这个值没有被子元素继承。因此,一个元素和它包含的子元素都会具有和元素背景相同的透明度,哪怕这个元素和它的子元素有不同的opacity属性值。
26 |
27 |
28 |
29 | 二 代码演示:
30 |
31 | ```html
32 |
40 | 这一段话是div里面的文字,opacity 透明度会改变字体的透明度 ,rgba 则不会
41 |
这一段话是p里面的文字,如果对div设置透明度的时候,用opacity那么将会被继承,如果用rgba设置 透明度的时候,则不会被继承
42 |
43 |
44 | ```
45 |
46 | ```html
47 |
55 | ```
56 |
57 | 三 总结:在做项目的时候,尽量用rgba 来改变透明度,因为opacity透明度具有继承性,并且还会改变文本的透明度,会造成一些影响
58 |
59 |
--------------------------------------------------------------------------------
/JavaScript/javascript1-基础/04jquery中position 方法.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: jquery中position 方法
3 | date: 2016-12-15 12:36:00
4 | tags: jQuery
5 | categories: html
6 | comments : true
7 | updated :
8 | layout :
9 | ---
10 |
11 | ### position() jquery DOM
12 |
13 | 一 相关position定位基准建议回顾:
14 |
15 | 1 DOM 中获取元素定位相关属性的方法:
16 |
17 | obj.style.property obj.currentStyle(attr) window.getComputedStyle(element,null)[attr]
18 |
19 | 将attr设置为 定位的 left top 等 即可。
20 |
21 | 2 jquery中获取定位元素的偏移,官方文档定义:获取匹配元素相对父元素的偏移。
22 |
23 | 返回的对象包含两个整型属性:top 和 left。
24 |
25 | 嗯,就是这么简洁。初学者需要注意,官方文档说的很模糊,我在这里详细说明一下:
26 |
27 | 二 代码:
28 |
29 | ```html
30 |
50 |
51 |
52 |
58 | ```
59 |
60 | 定位还是按原来的走:
61 |
62 | * 如果父元素有除了static定位以外的定位,那么就相对于父元素进行定位;
63 | * 如果父元素没有定位,那么就相对于body定位
64 | * 定位的基准是 :子元素整体(margin +border+padding+content)的最外边界,相对于有定位的父元素或者body的内边界。
65 |
66 | 如果给div加一个定位
67 |
68 | ```html
69 | position: absolute;
70 | ```
71 |
72 | 此时:
73 |
74 | console.log(pos);//object
75 | console.log(pos.top);//0
76 | console.log(pos.left);//0
77 | 三:总结,jquery中position( )方法不能对定位进行设置,只能获取定位的top left 值,如果要设置定位的坐标,还是的用 css( ) 方法。
--------------------------------------------------------------------------------
/JavaScript/javascript1-基础/08DOM元素和jquery对象的互相转化.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: DOM元素和jquery对象的互相转化
3 | date: 2016-12-22 21:02:00
4 | tags: [DOM]
5 | categories: jQuery
6 | comments : true
7 | updated :
8 | layout :
9 | ---
10 |
11 | DOM元素和jquery对象的互相转化
12 |
13 | 1 DOM对象转化为jquery对象,语法:$(DOM对象):用js一些固有的操作获取页面元素。比如 document.getElementById(),getElementsByTagName(),等js方法获取页面元素的所得为DOM对象,将DOM对象放在中括号里面所得便是jquery对象;
14 |
15 | 2 jquery对象转化为DOM对象,语法:jquery对象[ index]或者 jquery对象.get(index); 用jquery方法获取页面元素,通过jquery选择器,筛选器进行选择,所得结果为jquery对象,jquery对象有两种方法可以转化为DOM对象:jqueryObj[index] 和 jqueryObj . get(index);(如果不写参数的话,那么则将匹配到的所有的jquery对象转化为DOM对象)
16 |
17 | 3 DOM中this代表DOM对象 jquery中$(this)代表jquery对象。
18 |
19 | 4 栗子说明下:
20 |
21 | ```html
22 |
23 |
24 | - 我是体育模块
25 | - 我是娱乐模块
26 | - 我是新闻模块
27 | - 我是综合模块
28 |
29 |
30 | console.log($(".hd>span"));//jquery对象
31 | console.log($(".hd>span:first-child"));//jquery对象
32 | console.log($(".hd>span").get(1));//DOM对象
33 | console.log($(".hd>span").get());//DOM对象
34 | console.log($(".hd>span")[1]);//DOM对象
35 | ```
36 |
37 | 5 注意jQuery对象和DOM对象的方法不能通用,
38 |
39 | DOM对象只能用 innerHTML,innerText ,属性操作 setAttribute() 、getAttribute() 、ele.style.property ;
40 |
41 | jQuery对象只能用html() text(), 属性操作,attr() 、prop( )、 css( );
42 |
43 |
44 |
45 |
--------------------------------------------------------------------------------
/JavaScript/javascript1-基础/112-toString和valueOf的区别.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: toString()和valueof()的区别
3 | date: 2015-10-28 12:36:00
4 | categories: javascript
5 | tags: javascript
6 | comments : true
7 | updated :
8 | layout :
9 | ---
10 |
11 | ## toString()和valueof()的区别
12 |
13 | ## 1.存在环境
14 |
15 | ```
16 | 所有的对象都继承了这两个方法,甚至于包装对象Number、String和Boolean。
17 | ```
18 |
19 |
20 | ## 2.具体细节
21 |
22 | ```
23 | 对于不同类型的对象,js定义了多个版本的 toString 和 valueOf 方法
24 | toString:
25 | (1)普通对象,返回 "[object Object]";
26 | (2)数组,返回数组元素之间添加逗号合并成的字符串;
27 | (3)函数,返回函数的定义式的字符串;
28 | (4)日期对象,返回一个可读的日期和时间字符串;
29 | (5)正则,返回其字面量表达式构成的字符串;
30 | valueOf:
31 | (1)日期对象,返回自1970年1月1日到现在的毫秒数;
32 | (2)其它均返回对象本身;比如数组,函数,对象等以及number 布尔类型 字符串的valueof()都将返回本身
33 | ```
34 |
35 | ```javascript
36 | Object.prototype.valueOf()
37 | 用 MDN 的话来说,valueOf() 方法返回指定对象的原始值。
38 | JavaScript 调用 valueOf() 方法用来把对象转换成原始类型的值(数值、字符串和布尔值)。但是我们很少需要自己调用此函数,valueOf 方法一般都会被 JavaScript 自动调用。
39 | ```
40 |
41 | ```javascript
42 | toString() 方法返回一个表示该对象的字符串。
43 | 每个对象都有一个 toString() 方法,当对象被表示为文本值时或者当以期望字符串的方式引用对象时,该方法被自动调用。
44 | ```
45 |
46 | 原始类型
47 |
48 | ```javascript
49 | Number String Boolean Undefined Null
50 | 在 JavaScript 进行对比或者各种运算的时候会把对象转换成这些类型,从而进行后续的操作
51 | ```
52 |
53 |
54 |
55 | ## 3.应用场景——类型转换
56 |
57 | ```
58 | String类型转化 对象到字符串
59 | (1)执行toString,如果返回了一个原始值,则将其转化为字符串
60 | (2)否则执行valueOf方法,如果返回了一个原始值,则将其转化为字符串
61 | (3)否则抛出类型错误
62 | 如果 toString 方法存在并且返回原始类型,返回 toString 的结果。
63 | 如果 toString 方法不存在或者返回的不是原始类型,调用 valueOf 方法,如果 valueOf 方法存在,并且返回原 始类型数据,返回 valueOf 的结果。
64 | 其他情况,抛出错误。
65 | Number类型转化 对象到数字
66 | (1)执行valueOf,如果返回了一个原始值,如果需要,则将其转化为数字
67 | (2)否则执行toString,如果返回了一个原始值,则将其转化为数字并返回
68 | (3)否则抛出类型错误
69 |
70 | 如果 valueOf 存在,且返回原始类型数据,返回 valueOf 的结果。
71 | 如果 toString 存在,且返回原始类型数据,返回 toString 的结果。
72 | 其他情况,抛出错误。
73 |
74 | 以上两种方式转换的情况,我们可以通过重写对象的valueOf()方法和toString()方法来看下javascript是如何选择执行的以及执行的顺序
75 | ```
76 |
77 | ## 4.类型转换与关系操作符(>、<等,不包括===和!==)
78 |
79 | ```
80 | - 两个都是数值,则比较数值
81 | - 两个都是字符串,则比较字符编码值
82 | - 其中一个是数值,则要把另个转化成数值进行比较
83 | - 如果其中一个是对象,则调用valueOf,若没有返回原始值则调用toString,再进行前面的比较
84 | - 如果有一个是布尔值,则将其转化成数值
85 | ```
86 |
87 | 注:日期对象只调用 valueOf ,不会调用 toString 方法
88 |
89 |
--------------------------------------------------------------------------------
/JavaScript/javascript1-基础/113-利用defineProperty获取闭包内部数据.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 利用defineProperty获取闭包内部数据
3 | date: 2016-11-30 12:36:00
4 | categories: javascript
5 | tags: object
6 | comments : true
7 | updated :
8 | layout :
9 | ---
10 |
11 | ### 利用defineProperty获取闭包内部数据
12 |
13 | 1 defineProperty的使用方法:
14 |
15 | ```javascript
16 | Object.defineProperty(obj,property,{
17 | value:"属性值",
18 | writable:false,//控制属性是否可以重新赋值
19 | configurable:false,//控制属性是否可以被删除
20 | enumerable:false,//是否可枚举
21 | get:function(){
22 | return this.propertyValue;
23 | },
24 | set:function(value){
25 | this.propertyValue = value;
26 | }
27 | })
28 | ```
29 |
30 | 2 利用给定接口获取闭包内部数据
31 |
32 | ```javascript
33 | var o = (function() {
34 | var person = {
35 | name: 'Vincent',
36 | age: 24,
37 | };
38 | return {
39 | run: function(k) {
40 | return person[k];
41 | },
42 | }
43 | }());
44 | //在不改变上面的代码情况下, 怎么得到原有的 person 对象?
45 | //解决:
46 | Object.defineProperty(Object.prototype, 'self',
47 | {
48 | get: function() {
49 | return this;
50 | },
51 | configurable: true
52 | });
53 | o.run('self'); // 输出 person
54 | ```
55 |
56 |
--------------------------------------------------------------------------------
/JavaScript/javascript1-基础/11hexo 命令.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: hexo 命令
3 | date: 2016-01-17 12:36:00
4 | tags:
5 | categories: hexo
6 | comments : true
7 | updated :
8 | layout :
9 | ---
10 |
11 | hexo 命令
12 |
13 | * 初始化博客
14 |
15 | $ mkdir blog 创建一个名为blog 的文件夹
16 |
17 | $ hexo init 将会在目标文件夹下建立博客需要的所有文件
18 |
19 | $ npm install 进行依赖包安装
20 |
21 | * 配置博客
22 | * 创建博文
23 |
24 | $ hexo new myhello 创建一个makedown文件在drafts目录里面
25 |
26 | $ hexo n myhello 等价
27 |
28 | $ hexo publish myhello 将文件从drafts移到post目录
29 |
30 | $ hexo server 启动服务器
31 |
32 | $ hexo s 也可以启动服务器
33 |
34 | * 如何将博客发布到GitHub上?
35 |
36 | $ npm install hexo-deployer-git --save 安装hexo git插件
37 |
38 | * 部署
39 |
40 | $ hexo clean 清除一些莫名其妙的问题
41 |
42 | $ hexo generate 生成静态页面 此时会将/source的.md文件生成到/public中,形成网站的静态文件。
43 |
44 | 等价于
45 |
46 | $ hexo g
47 |
48 | $ hexo deploy 将生成的博客静态页面上传GitHub上 ;该操作会将hexo生成的静态内容部署到配置的仓库中,请看下面介绍。
49 |
50 | 部署网站之前需要生成静态文件,即可以用 `$ hexo generate -d` 直接生成并部署。等价于
51 |
52 | $ hexo d
53 |
54 | $ hexo clean # 删除 已经生成的静态页面
55 |
56 | $ cd your-hexo-site
57 |
58 | $ git clone + http 地址可以创建主题
59 |
60 | 然后修改root/config.yml theme
61 |
62 |
--------------------------------------------------------------------------------
/JavaScript/javascript1-基础/123-元素选择器.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 元素选择器
3 | date: 2016-04-11 12:36:00
4 | categories: javascript
5 | tags: array
6 | comments : true
7 | updated :
8 | layout :
9 | ---
10 |
11 | ## 元素选择器
12 |
13 | 一 : 即时匹配元素
14 |
15 | 1 document.querySelector( ) 匹配选中的第一个HTML元素,如果没有匹配到,则返回 null ;
16 |
17 | 2 document.querySelectorAll( ) 匹配的是对象并不是实时的,后续更新的文档并不会被匹配到,它只包含当前调用时刻选择器所匹配的元素,如果匹配不到则返回一个空的nodelist对象;
18 |
19 | 二 实时匹配元素
20 |
21 | 1 getElementById getElementsTagName getElementsByClassName 等获取元素都是实时的;
22 |
23 | 三 对于有id属性的元素,可以直接通过window.id 获取到该元素
24 |
25 | ```html
26 |
27 |
30 | ```
31 |
32 | 四 对于form表单元素,如果form表单元素有id和name属性,可以直接通过name属性和id拉访问form属性,也可以直接通过元素document.forms来访问,这个获取的是一个HTMLCollection类数组
33 |
34 | ```html
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
47 |
48 |
49 |
65 |
66 |
67 | ```
68 |
69 |
--------------------------------------------------------------------------------
/JavaScript/javascript1-基础/125-文本编辑命令.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: the Methods of String
3 | date: 2016-04-11 12:36:00
4 | categories: javascript
5 | tags: array
6 | comments : true
7 | updated :
8 | layout :
9 | ---
10 |
11 | ### 文本编辑命令
12 |
13 | 1 给元素设置contenteditable属性,可以设置该元素中的内容是否可以被编辑
14 |
15 | ```html
16 | click to rewrite
17 | ```
18 |
19 | 2 给文档设置 design
20 |
21 |
--------------------------------------------------------------------------------
/JavaScript/javascript1-基础/13-HTML5 web存储:.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: HTML5 web存储
3 | date: 2016-07-01 12:36:00
4 | categories: HTML5
5 | comments : true
6 | updated :
7 | layout :
8 | ---
9 |
10 | HTML5 web存储:
11 |
12 | 1 window.localStorage.setItem(key[string],data[string]); 可以将数据存储在用户端;
13 |
14 | 2 window.localStorage.getItem(key[string]);可以将setItem存储的数据取出来;
15 |
16 | 3 window.localStorage.clear(),会将客户端存储的数据全部清空;
17 |
18 | 4 window.localStorage.removeItem(key) ; 可以删除客户端指定的已经存储起来的数据;
19 |
20 | ```html
21 |
22 | 请输入你的名字
23 | 姓名
24 | 年龄
25 |
26 |
27 |