├── .gitignore ├── LICENSE ├── README.md ├── docs ├── .vuepress │ ├── components │ │ └── About.vue │ ├── config.js │ ├── enhanceApp.js │ ├── mixins │ │ └── index.js │ ├── public │ │ ├── avatar.jpg │ │ ├── dark.png │ │ ├── favicon.ico │ │ ├── fonts │ │ │ └── Algerian-Regular.ttf │ │ ├── github.png │ │ ├── ills │ │ │ ├── code.svg │ │ │ ├── life.svg │ │ │ ├── password.svg │ │ │ ├── share.svg │ │ │ ├── zhuanlan.svg │ │ │ └── zone-bg.svg │ │ ├── json │ │ │ └── guide.json │ │ ├── manifest.json │ │ ├── style │ │ │ ├── config.json │ │ │ └── theme │ │ │ │ ├── dark.css │ │ │ │ ├── dist │ │ │ │ ├── dark.css │ │ │ │ ├── fonts │ │ │ │ │ ├── element-icons.ttf │ │ │ │ │ └── element-icons.woff │ │ │ │ └── light.css │ │ │ │ ├── fonts │ │ │ │ ├── element-icons.ttf │ │ │ │ └── element-icons.woff │ │ │ │ ├── gulpfile.js │ │ │ │ └── light.css │ │ └── svg │ │ │ ├── github.svg │ │ │ ├── mail.svg │ │ │ ├── password.svg │ │ │ ├── quote-left.svg │ │ │ ├── quote-right.svg │ │ │ ├── tencent-black.svg │ │ │ └── tencent.svg │ ├── styles │ │ └── palette.styl │ └── theme │ │ ├── LICENSE │ │ ├── components │ │ ├── AlgoliaSearchBox.vue │ │ ├── DropdownLink.vue │ │ ├── DropdownTransition.vue │ │ ├── Home.vue │ │ ├── Mode │ │ │ ├── ModePicker.vue │ │ │ ├── applyMode.js │ │ │ ├── index.vue │ │ │ └── modeOptions.js │ │ ├── NavLink.vue │ │ ├── NavLinks.vue │ │ ├── Navbar.vue │ │ ├── Page.vue │ │ ├── Sidebar.vue │ │ ├── SidebarButton.vue │ │ ├── SidebarGroup.vue │ │ ├── SidebarLink.vue │ │ ├── SidebarLinks.vue │ │ └── Valine.vue │ │ ├── global-components │ │ └── Badge.vue │ │ ├── index.js │ │ ├── layouts │ │ ├── 404.vue │ │ ├── Layout.vue │ │ └── img │ │ │ └── bg.jpg │ │ ├── noopModule.js │ │ ├── styles │ │ ├── arrow.styl │ │ ├── code.styl │ │ ├── config.styl │ │ ├── custom-blocks.styl │ │ ├── index.styl │ │ ├── mobile.styl │ │ ├── mode.styl │ │ ├── toc.styl │ │ └── wrapper.styl │ │ ├── user-components │ │ └── Loading.vue │ │ └── util │ │ └── index.js ├── README.md ├── blog │ ├── 1.计算机基础 │ │ ├── 1.计算机组成原理.md │ │ ├── 2.操作系统.md │ │ ├── 3.计算机网络.md │ │ ├── 4.数据结构.md │ │ ├── 5.算法.md │ │ ├── 6.数据库系统概论.md │ │ ├── 7.数据库使用.md │ │ └── 8.JS版本数据结构和算法.md │ ├── 10.前端工程化 │ │ ├── 1.前端工程化绪论.md │ │ ├── 2.Webpack.md │ │ └── 3.Cil书写.md │ ├── 11.前端性能优化 │ │ └── 1.前端性能优化基础.md │ ├── 12.前端代码质量 │ │ ├── 1.前端代码质量绪论.md │ │ ├── 2.ESLint.md │ │ ├── 3.前端测试框架Jest.md │ │ ├── 4.自动化测试.md │ │ ├── 5.项目质量监测.md │ │ └── 6.如何写一个不错的代码.md │ ├── 13. 前端安全 │ │ ├── 1.前端安全绪论.md │ │ ├── 2.前端基本防护.md │ │ └── 3.渗透攻防.md │ ├── 14.前端架构 │ │ ├── 1.前端架构.md │ │ └── 2.前端国际化方案(Vue项目).md │ ├── 15.运维 │ │ ├── 1.Linux知识.md │ │ ├── 2.容器化.md │ │ └── 3.持续集成.md │ ├── 16.网络 │ │ ├── 1.前端网络基础.md │ │ └── 2.前端网络应用.md │ ├── 17.项目 │ │ └── 1.Node项目仿知乎API.md │ ├── 18.其他 │ │ └── 1.爬虫.md │ ├── 2.HTML │ │ ├── 1.HTML基础.md │ │ └── 2.HTML5.md │ ├── 3.CSS │ │ ├── 1.CSS基础.md │ │ ├── 2.CSS3.md │ │ ├── 3.预处理器和后处理器.md │ │ └── 4.现代化CSS.md │ ├── 4.JavaScript │ │ ├── 1.JavaScript根基.md │ │ ├── 2.JavaScript深入.md │ │ ├── 3.JavaScript应用.md │ │ ├── 4.ES6.md │ │ ├── 5.Underscore库源码分析.md │ │ ├── 6.Lodashjs库源码分析.md │ │ ├── 7.函数式编程.md │ │ ├── 8.TypeScript.md │ │ └── 9.Cocos2d.md │ ├── 5.jQuery │ │ ├── 1.jQuery基础.md │ │ ├── 2.jQuery第三方库.md │ │ └── 3.jQuery源码解析以及实现.md │ ├── 6.Vue │ │ ├── 1.MVVM框架绪论.md │ │ ├── 10.Vue3.md │ │ ├── 2.Vue基础.md │ │ ├── 3.Vue全家桶.md │ │ ├── 4.Vue源码解析以及实现.md │ │ ├── 5.VueRouter源码解析以及实现.md │ │ ├── 6.Vuex源码解析以及实现.md │ │ ├── 7.Axios源码解析以及实现.md │ │ ├── 8.Vue SSR.md │ │ └── 9.项目 开发Ant Design Pro Vue.md │ ├── 7.React │ │ ├── 1.React基础.md │ │ └── 2.React全家桶.md │ ├── 8.移动端 │ │ ├── 0.移动端开发绪论.md │ │ ├── 1.移动端H5页面适配.md │ │ ├── 2.移动端H5手机内调试.md │ │ ├── 3.Flutter.md │ │ ├── 4.React-Native.md │ │ ├── 5.移动端原生开发 │ │ │ ├── 5.移动端原生开发.md │ │ │ └── img │ │ │ │ ├── 1.png │ │ │ │ ├── 2.png │ │ │ │ └── 3.png │ │ ├── 6.Weex.md │ │ └── 7.微信小程序.md │ ├── 9.Node │ │ ├── 1.Node绪论.md │ │ ├── 2.原生Node.md │ │ ├── 3.Express框架.md │ │ ├── 4.Koa2框架.md │ │ ├── 5.Egg框架.md │ │ └── 6.Node技术应用.md │ └── 说明.md ├── pages │ ├── blog.md │ ├── book │ │ ├── book.md │ │ ├── img │ │ │ ├── fryst.jpg │ │ │ └── zgcsdxp.jpg │ │ └── 中国城市大洗牌 │ │ │ ├── img │ │ │ └── 1.jpg │ │ │ └── 中国城市大洗牌.md │ ├── github-open │ │ └── github-open.md │ ├── guide.md │ ├── links.md │ ├── my │ │ ├── img │ │ │ ├── hbgy.png │ │ │ ├── iit.png │ │ │ ├── ming.jpg │ │ │ ├── rm.png │ │ │ ├── wb.png │ │ │ └── zywl.png │ │ └── my.md │ ├── plan │ │ ├── 2021 │ │ │ └── 2021-list.md │ │ └── plan-list.md │ ├── update │ │ └── README.md │ └── website.md └── quickcheck │ ├── 1.前端 │ ├── 1.HTML和HTML5.md │ ├── 2.CSS和CSS3速查.md │ ├── 3.JS方法速查.md │ ├── 4.jQuery及其周边库速查.md │ ├── 5.MVVM框架速查(Vue).md │ ├── 6.移动端速查.md │ └── 7.其他.md │ ├── 2.后端 │ ├── 1.Node速查.md │ ├── 2.Node第三方库速查.md │ ├── 3.MySQL速查.md │ ├── 4.MongoDB速查.md │ ├── 5.Redis速查.md │ └── 6.其他.md │ ├── 3.运维 │ ├── 1.各种软件安装速查.md │ ├── 2.Nginx速查.md │ ├── 3.Docker速查.md │ ├── 4.Linux速查.md │ └── 5.其他.md │ ├── 4.其他 │ ├── 1.正则表达式速查.md │ └── 2.好的网站推荐.md │ └── README.md ├── package.json └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | test 3 | .DS_Store 4 | docs/.vuepress/dist 5 | .temp 6 | package-lock.json -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 zhukunpenglinyutong 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 知识如果不整理,就会流失90% 2 | 3 |

4 | LICENSE 5 | repo-size 6 | CodeTriage 7 | 提交活动 8 | 最后一次提交 9 | 10 |

11 | 12 | --- 13 | 14 | ## 🏅前言 15 | 16 | 我一直认为知识是有关联的,不是零散的,所以需要体系来把知识关联起来,可能我现在关联的不是很好,但是我相信随着我学习的深入,我能汇总出来不错的前端知识体系 🆙 17 | 18 | 更佳的查阅体验,请访问 [Notes网站](https://notes.itzkp.com) 19 | 20 | --- 21 | 22 | ## 🎖使用说明 23 | 24 | ```sh 25 | # 克隆 26 | git clone https://github.com/zhukunpenglinyutong/notes.git 27 | 28 | # 安装依赖(注意,一定要yarn安装,并注意不要删除 yarn.lock) 29 | yarn 30 | 31 | # 预览,VuePress会启动一个预览的网址 32 | npm run start 33 | 34 | # 打包,打包后资源在 docs/.vuepress/dist下 35 | npm run build 36 | ``` 37 | 38 | --- 39 | 40 | 41 | ## 🎨 不足与请教 42 | 43 | 因为入行的时间太短(2019.6 毕业),所以项目会有很多地方不完善。各位前行者,大佬们,如果看出这个项目有的地方可以完善,或者有的地方不好,我拜求各位的指点,我会以很快的速度验证,然后更改的。我会时刻以谦逊姿态请教学习,高调的热情创造宣传,我期待各位大佬们能指出我的不足,我定会虚心请教,牢记恩情。(很多思想不是我不用,是我不知道,所以拜求指教) 44 | 45 | --- 46 | 47 | ## 交流 48 | 49 | **个人微信,提供内推机会,猎头朋友们有意也可加入交流** 50 | 51 | 52 | 53 | --- 54 | 55 | ## 💌 致谢 56 | 57 | 致谢所有 star 和 关注我的 朋友们,多谢你们的鼓励和支持。 -------------------------------------------------------------------------------- /docs/.vuepress/components/About.vue: -------------------------------------------------------------------------------- 1 | 48 | 49 | 67 | 68 | -------------------------------------------------------------------------------- /docs/.vuepress/config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | head: [ 3 | ['link', { rel: 'manifest', href: '/manifest.json' }], 4 | ['link', { rel: 'apple-touch-icon', href: '/favicon.ico' }], 5 | ], 6 | title: '朱昆鹏', 7 | description: '朱昆鹏 个人博客', 8 | permalink: "/:year/:month-:day-:slug", 9 | themeConfig: { 10 | sidebar: false, 11 | github: "https://github.com/zhukunpenglinyutong/", 12 | logo: '/avatar.jpg', 13 | lastUpdated: '修改于', 14 | search: true, 15 | searchMaxSuggestions: 6, 16 | nav: [ 17 | { text: '前端体系', link: '/blog/' }, 18 | { text: '开源项目', link: '/github-open/' }, 19 | { text: '友链', link: '/links/' }, 20 | { text: '网站更新', link: '/update/' }, 21 | { 22 | text: '其他', 23 | items: [ 24 | // { text: '网站介绍', link: '/website/' }, 25 | { text: '导航', link: '/guide/' }, 26 | { text: '前端速查', link: '/quickcheck/' }, 27 | // { text: '年度计划', link: '/plan-list/' }, 28 | { text: '读书笔记', link: '/book/' }, 29 | { text: '个人介绍', link: '/my/' } 30 | ] 31 | } 32 | ] 33 | }, 34 | // plugins: ['@vuepress/pwa'], 35 | plugins: { 36 | '@vuepress/medium-zoom': { 37 | selector: '.need-zoom :not(a) > img', 38 | options: { 39 | margin: 16, 40 | background: 'rgba(0,0,0,0.7)' 41 | } 42 | }, 43 | 'vuepress-plugin-smooth-scroll':{}, 44 | 'vuepress-plugin-mathjax': { 45 | macros: { 46 | '\\Z': '\\mathbb{Z}', 47 | }, 48 | }, 49 | }, 50 | configureWebpack: { 51 | resolve: { 52 | alias: { 53 | // '@alias': 'src/' 54 | } 55 | } 56 | } 57 | } -------------------------------------------------------------------------------- /docs/.vuepress/enhanceApp.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Element from 'element-ui' 3 | // import 'element-ui/lib/theme-chalk/index.css' 4 | import './public/style/theme/dist/light.css' 5 | import './public/style/theme/dist/dark.css' 6 | import animated from 'animate.css' 7 | 8 | import Viewer from 'v-viewer' 9 | import 'viewerjs/dist/viewer.css' 10 | 11 | Vue.use(Viewer) 12 | 13 | export default ({ 14 | Vue, 15 | }) => { 16 | Vue.use(Element, animated) 17 | } -------------------------------------------------------------------------------- /docs/.vuepress/mixins/index.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhukunpenglinyutong/notes/16be24eb6144963fdce7809ffed2d7fbd124350b/docs/.vuepress/mixins/index.js -------------------------------------------------------------------------------- /docs/.vuepress/public/avatar.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhukunpenglinyutong/notes/16be24eb6144963fdce7809ffed2d7fbd124350b/docs/.vuepress/public/avatar.jpg -------------------------------------------------------------------------------- /docs/.vuepress/public/dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhukunpenglinyutong/notes/16be24eb6144963fdce7809ffed2d7fbd124350b/docs/.vuepress/public/dark.png -------------------------------------------------------------------------------- /docs/.vuepress/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhukunpenglinyutong/notes/16be24eb6144963fdce7809ffed2d7fbd124350b/docs/.vuepress/public/favicon.ico -------------------------------------------------------------------------------- /docs/.vuepress/public/fonts/Algerian-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhukunpenglinyutong/notes/16be24eb6144963fdce7809ffed2d7fbd124350b/docs/.vuepress/public/fonts/Algerian-Regular.ttf -------------------------------------------------------------------------------- /docs/.vuepress/public/github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhukunpenglinyutong/notes/16be24eb6144963fdce7809ffed2d7fbd124350b/docs/.vuepress/public/github.png -------------------------------------------------------------------------------- /docs/.vuepress/public/ills/zhuanlan.svg: -------------------------------------------------------------------------------- 1 | Books -------------------------------------------------------------------------------- /docs/.vuepress/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Angor", 3 | "short_name": "Angor", 4 | "start_url": "index.html", 5 | "display": "standalone", 6 | "background_color": "#2196f3", 7 | "description": "Angor 的 heiheihei", 8 | "theme_color": "blue", 9 | "icons": [ 10 | { 11 | "src": "./favicon.png", 12 | "sizes": "144x144", 13 | "type": "image/png" 14 | } 15 | ] 16 | } -------------------------------------------------------------------------------- /docs/.vuepress/public/style/config.json: -------------------------------------------------------------------------------- 1 | {"global":{"$--color-primary":"#282C34","$--color-warning":"#E7C000","$--color-danger":"#CC0000","$--color-text-primary":"#2C3E50"},"local":{}} -------------------------------------------------------------------------------- /docs/.vuepress/public/style/theme/dist/fonts/element-icons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhukunpenglinyutong/notes/16be24eb6144963fdce7809ffed2d7fbd124350b/docs/.vuepress/public/style/theme/dist/fonts/element-icons.ttf -------------------------------------------------------------------------------- /docs/.vuepress/public/style/theme/dist/fonts/element-icons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhukunpenglinyutong/notes/16be24eb6144963fdce7809ffed2d7fbd124350b/docs/.vuepress/public/style/theme/dist/fonts/element-icons.woff -------------------------------------------------------------------------------- /docs/.vuepress/public/style/theme/fonts/element-icons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhukunpenglinyutong/notes/16be24eb6144963fdce7809ffed2d7fbd124350b/docs/.vuepress/public/style/theme/fonts/element-icons.ttf -------------------------------------------------------------------------------- /docs/.vuepress/public/style/theme/fonts/element-icons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhukunpenglinyutong/notes/16be24eb6144963fdce7809ffed2d7fbd124350b/docs/.vuepress/public/style/theme/fonts/element-icons.woff -------------------------------------------------------------------------------- /docs/.vuepress/public/style/theme/gulpfile.js: -------------------------------------------------------------------------------- 1 | // gulpfile.js 2 | 3 | var path = require('path') 4 | var gulp = require('gulp') 5 | var cleanCSS = require('gulp-clean-css') 6 | var cssWrap = require('gulp-css-wrap') 7 | 8 | // var customThemeName = '.dark-mode' 9 | 10 | gulp.task('css-wrap-dark', function() { 11 | return gulp.src( path.resolve('./dark.css')) 12 | .pipe(cssWrap({selector: '.dark-mode'})) 13 | .pipe(cleanCSS()) 14 | .pipe(gulp.dest('./dist')) 15 | }) 16 | 17 | gulp.task('css-wrap-light', function() { 18 | return gulp.src( path.resolve('./light.css')) 19 | .pipe(cssWrap({selector: '.light-mode'})) 20 | .pipe(cleanCSS()) 21 | .pipe(gulp.dest('./dist')) 22 | }) 23 | 24 | gulp.task('move-font', function() { 25 | return gulp.src(['./fonts/**']).pipe(gulp.dest('./dist/fonts')); 26 | }); -------------------------------------------------------------------------------- /docs/.vuepress/public/svg/github.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/.vuepress/public/svg/mail.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/.vuepress/public/svg/quote-left.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/.vuepress/public/svg/quote-right.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/.vuepress/public/svg/tencent-black.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/.vuepress/public/svg/tencent.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/.vuepress/styles/palette.styl: -------------------------------------------------------------------------------- 1 | // dark mode scheme 2 | $darkMainColor = #f94135 // 主题色 3 | $darkPrimaryText = #ffffff // 文字的首要颜色 4 | $darkRegularText = #b8b8b8 // 常规文字颜色 5 | $darkSecondaryText = #7f7f7f // 次要文字颜色 6 | $darkBorder = #373737 // 边框颜色 7 | $darkBoundary = #171514 // 边界颜色 8 | $darkBgColor = #171514 // 深色背景颜色 9 | $darkCard = #232222 // 深色卡片颜色 10 | $darkMask = rgba(0, 0, 0, 0.9) 11 | 12 | // light mode scheme 13 | $lightMainColor = #d71a1b 14 | $lightPrimaryText = #292525 15 | $lightSecondaryText = #8e8787 16 | $lightRegularText = #4c4e4d 17 | $lightBorder = #e5e5e5 18 | $lightBoundary = #e5e5e5 19 | $lightBgColor = #f4f4f4 20 | $lightCard = #ffffff 21 | $lightMask = rgba(255, 255, 255, 0.9) // 遮罩颜色 22 | 23 | $darkNavColor = #232222 24 | $codeBgColor = #171a20 25 | $accentColor = var(--main-color) 26 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2018-present, Yuxi (Evan) You 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/components/AlgoliaSearchBox.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 64 | 65 | 159 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/components/DropdownLink.vue: -------------------------------------------------------------------------------- 1 | 51 | 52 | 78 | 79 | 181 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/components/DropdownTransition.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 28 | 29 | 34 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/components/Home.vue: -------------------------------------------------------------------------------- 1 | 55 | 56 | 75 | 76 | 77 | 133 | 134 | 135 | 234 | 235 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/components/Mode/ModePicker.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16 | 17 | 59 | 60 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/components/Mode/applyMode.js: -------------------------------------------------------------------------------- 1 | import modeOptions from './modeOptions' 2 | 3 | function render (mode) { 4 | const rootElement = document.querySelector(':root') 5 | const options = modeOptions[mode] 6 | for (const k in options) { 7 | rootElement.style.setProperty(k, options[k]) 8 | } 9 | document.getElementsByTagName('body')[0].className = mode + '-mode' 10 | // console.log('12312131313', document.getElementsByTagName('body')[0].className) 11 | } 12 | 13 | /** 14 | * Sets a color scheme for the website. 15 | * If browser supports "prefers-color-scheme", 'auto' mode will respect the setting for light or dark mode 16 | * otherwise it will set a dark theme during night time 17 | */ 18 | export default function applyMode (mode) { 19 | if (mode !== 'auto') { 20 | render(mode) 21 | return 22 | } 23 | 24 | const isDarkMode = window.matchMedia('(prefers-color-scheme: dark)').matches 25 | const isLightMode = window.matchMedia('(prefers-color-scheme: light)').matches 26 | 27 | if (isDarkMode) render('dark') 28 | if (isLightMode) render('light') 29 | 30 | if (!isDarkMode && !isLightMode) { 31 | console.log('You specified no preference for a color scheme or your browser does not support it. I schedule dark mode during night time.') 32 | const hour = new Date().getHours() 33 | if (hour < 6 || hour >= 18) render('dark') 34 | else render('light') 35 | } 36 | } -------------------------------------------------------------------------------- /docs/.vuepress/theme/components/Mode/index.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 80 | 81 | 199 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/components/Mode/modeOptions.js: -------------------------------------------------------------------------------- 1 | const modeOptions = { 2 | light: { 3 | '--main-color' : '#d71a1b', 4 | '--regular-text' : '#4c4e4d', 5 | '--secondary-text' : '#8e8787', 6 | '--primary-text' : '#292525', 7 | '--bg-color' : '#f4f4f4', 8 | '--card-color' : '#ffffff', 9 | '--border-color' : '#e5e5e5', 10 | '--box-shadow' : 'rgba(34, 36, 38, 0.15)', 11 | '--mask-color' : 'rgba(255,255,255,0.9)' 12 | }, 13 | dark: { 14 | '--main-color' : '#f94135', 15 | '--regular-text' : '#b8b8b8', 16 | '--secondary-text' : '#7f7f7f', 17 | '--primary-text' : '#ffffff', 18 | '--bg-color' : '#171514', 19 | '--card-color' : '#232222', 20 | '--border-color' : '#373737', 21 | '--box-shadow' : 'rgba(34, 36, 38, 0.15)', 22 | '--mask-color' : 'rgba(0,0,0,0.9)' 23 | } 24 | } 25 | 26 | export default modeOptions -------------------------------------------------------------------------------- /docs/.vuepress/theme/components/NavLink.vue: -------------------------------------------------------------------------------- 1 | 19 | 20 | 50 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/components/NavLinks.vue: -------------------------------------------------------------------------------- 1 | 35 | 36 | 117 | 118 | 152 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/components/Navbar.vue: -------------------------------------------------------------------------------- 1 | 52 | 53 | 106 | 107 | 151 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/components/Sidebar.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 22 | 23 | 60 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/components/SidebarButton.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 28 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/components/SidebarGroup.vue: -------------------------------------------------------------------------------- 1 | 55 | 56 | 71 | 72 | 130 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/components/SidebarLink.vue: -------------------------------------------------------------------------------- 1 | 95 | 96 | 126 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/components/SidebarLinks.vue: -------------------------------------------------------------------------------- 1 | 23 | 24 | 87 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/components/Valine.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 49 | 50 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/global-components/Badge.vue: -------------------------------------------------------------------------------- 1 | 25 | 26 | 46 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/index.js: -------------------------------------------------------------------------------- 1 | const path = require('path') 2 | 3 | // Theme API. 4 | module.exports = { 5 | extend: '@vuepress/theme-default' 6 | } 7 | 8 | module.exports = (options, ctx) => ({ 9 | alias () { 10 | const { themeConfig, siteConfig } = ctx 11 | // resolve algolia 12 | const isAlgoliaSearch = ( 13 | themeConfig.algolia 14 | || Object.keys(siteConfig.locales && themeConfig.locales || {}) 15 | .some(base => themeConfig.locales[base].algolia) 16 | ) 17 | return { 18 | '@AlgoliaSearchBox': isAlgoliaSearch 19 | ? path.resolve(__dirname, 'components/AlgoliaSearchBox.vue') 20 | : path.resolve(__dirname, 'noopModule.js') 21 | } 22 | }, 23 | 24 | plugins: [ 25 | ['@vuepress/active-header-links', options.activeHeaderLinks], 26 | ['@vuepress/search', { 27 | searchMaxSuggestions: 10 28 | }], 29 | '@vuepress/plugin-nprogress', 30 | ['container', { 31 | type: 'tip', 32 | defaultTitle: { 33 | '/zh/': '提示' 34 | } 35 | }], 36 | ['container', { 37 | type: 'warning', 38 | defaultTitle: { 39 | '/zh/': '注意' 40 | } 41 | }], 42 | ['container', { 43 | type: 'danger', 44 | defaultTitle: { 45 | '/zh/': '警告' 46 | } 47 | }] 48 | ] 49 | }) 50 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/layouts/404.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 27 | 28 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/layouts/img/bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhukunpenglinyutong/notes/16be24eb6144963fdce7809ffed2d7fbd124350b/docs/.vuepress/theme/layouts/img/bg.jpg -------------------------------------------------------------------------------- /docs/.vuepress/theme/noopModule.js: -------------------------------------------------------------------------------- 1 | export default {} 2 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/styles/arrow.styl: -------------------------------------------------------------------------------- 1 | @require './config' 2 | 3 | .arrow 4 | display inline-block 5 | width 0 6 | height 0 7 | &.up 8 | border-left 4px solid transparent 9 | border-right 4px solid transparent 10 | border-bottom 6px solid $arrowBgColor 11 | &.down 12 | border-left 4px solid transparent 13 | border-right 4px solid transparent 14 | border-top 6px solid $arrowBgColor 15 | &.right 16 | border-top 4px solid transparent 17 | border-bottom 4px solid transparent 18 | border-left 6px solid $arrowBgColor 19 | &.left 20 | border-top 4px solid transparent 21 | border-bottom 4px solid transparent 22 | border-right 6px solid $arrowBgColor 23 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/styles/code.styl: -------------------------------------------------------------------------------- 1 | {$contentClass} 2 | code 3 | color var(--primary-color) 4 | padding 0.25rem 0.5rem 5 | margin 0 6 | font-size 0.85em 7 | background-color var(--bg-color) 8 | border-radius 3px 9 | .token 10 | &.deleted 11 | color #EC5975 12 | &.inserted 13 | color var(--main-color) 14 | 15 | {$contentClass} 16 | pre, pre[class*="language-"] 17 | line-height 1.4 18 | padding 1.25rem 1.5rem 19 | margin 0.85rem 0 20 | background-color $codeBgColor 21 | // border-radius 6px 22 | border-radius 0.3rem 23 | overflow auto 24 | code 25 | color #eee 26 | padding 0 27 | background-color transparent 28 | border-radius 0 29 | 30 | div[class*="language-"] 31 | position relative 32 | background-color $codeBgColor 33 | // border-radius 6px 34 | border-radius 0.3rem 35 | .highlight-lines 36 | user-select none 37 | padding-top 1.3rem 38 | position absolute 39 | top 0 40 | left 0 41 | width 100% 42 | line-height 1.4 43 | .highlighted 44 | background-color rgba(0, 0, 0, 66%) 45 | pre, pre[class*="language-"] 46 | background transparent 47 | position relative 48 | z-index 1 49 | &::before 50 | position absolute 51 | z-index 3 52 | top 0.8em 53 | right 1em 54 | font-size 0.75rem 55 | color rgba(255, 255, 255, 0.4) 56 | &:not(.line-numbers-mode) 57 | .line-numbers-wrapper 58 | display none 59 | &.line-numbers-mode 60 | .highlight-lines .highlighted 61 | position relative 62 | &:before 63 | content ' ' 64 | position absolute 65 | z-index 3 66 | left 0 67 | top 0 68 | display block 69 | width $lineNumbersWrapperWidth 70 | height 100% 71 | background-color rgba(0, 0, 0, 66%) 72 | pre 73 | padding-left $lineNumbersWrapperWidth + 1 rem 74 | vertical-align middle 75 | .line-numbers-wrapper 76 | position absolute 77 | top 0 78 | width $lineNumbersWrapperWidth 79 | text-align center 80 | color rgba(255, 255, 255, 0.3) 81 | padding 1.25rem 0 82 | line-height 1.4 83 | br 84 | user-select none 85 | .line-number 86 | position relative 87 | z-index 4 88 | user-select none 89 | font-size 0.85em 90 | &::after 91 | content '' 92 | position absolute 93 | z-index 2 94 | top 0 95 | left 0 96 | width $lineNumbersWrapperWidth 97 | height 100% 98 | border-radius 6px 0 0 6px 99 | border-right 1px solid rgba(0, 0, 0, 66%) 100 | background-color $codeBgColor 101 | 102 | 103 | for lang in $codeLang 104 | div{'[class~="language-' + lang + '"]'} 105 | &:before 106 | content ('' + lang) 107 | 108 | div[class~="language-javascript"] 109 | &:before 110 | content "js" 111 | 112 | div[class~="language-typescript"] 113 | &:before 114 | content "ts" 115 | 116 | div[class~="language-markup"] 117 | &:before 118 | content "html" 119 | 120 | div[class~="language-markdown"] 121 | &:before 122 | content "md" 123 | 124 | div[class~="language-json"]:before 125 | content "json" 126 | 127 | div[class~="language-ruby"]:before 128 | content "rb" 129 | 130 | div[class~="language-python"]:before 131 | content "py" 132 | 133 | div[class~="language-bash"]:before 134 | content "sh" 135 | 136 | div[class~="language-php"]:before 137 | content "php" 138 | 139 | @import '~prismjs/themes/prism-tomorrow.css' 140 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/styles/config.styl: -------------------------------------------------------------------------------- 1 | $contentClass = '.theme-default-content' 2 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/styles/custom-blocks.styl: -------------------------------------------------------------------------------- 1 | .custom-block 2 | .custom-block-title 3 | font-weight 600 4 | margin-bottom -0.4rem 5 | &.tip, &.warning, &.danger 6 | padding .1rem 1.5rem 7 | border-left-width .5rem 8 | border-left-style solid 9 | margin 1rem 0 10 | &.tip 11 | background-color #f3f5f7 12 | border-color #42b983 13 | &.warning 14 | background-color rgba(255,229,100,.3) 15 | // border-color darken(#ffe564, 35%) 16 | border-color #ffe564 17 | color #ffe564 18 | // color darken(#ffe564, 70%) 19 | .custom-block-title 20 | color #ffe564 21 | // color darken(#ffe564, 50%) 22 | a 23 | color var(--regular-text) 24 | &.danger 25 | background-color #ffe6e6 26 | // border-color darken(red, 20%) 27 | border-color red 28 | // color darken(red, 70%) 29 | color red 30 | .custom-block-title 31 | color red 32 | // color darken(red, 40%) 33 | a 34 | color var(--regular-text) 35 | 36 | 37 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/styles/index.styl: -------------------------------------------------------------------------------- 1 | @require './config' 2 | @require './code' 3 | @require './custom-blocks' 4 | @require './arrow' 5 | @require './wrapper' 6 | @require './toc' 7 | @require './mode' 8 | 9 | html, body 10 | padding 0 11 | margin 0 12 | 13 | html 14 | background inherit 15 | 16 | body 17 | font-family -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif 18 | -webkit-font-smoothing antialiased 19 | -moz-osx-font-smoothing grayscale 20 | font-size 16px 21 | color var(--regular-text) 22 | background: var(--bg-color) 23 | 24 | .page 25 | padding-left $sidebarWidth 26 | 27 | .navbar 28 | position fixed 29 | z-index 20 30 | top 0 31 | left 0 32 | right 0 33 | height $navbarHeight 34 | // background-color #fff 35 | box-sizing border-box 36 | // border-bottom 1px solid var(--border-color) 37 | 38 | .sidebar-mask 39 | position fixed 40 | z-index 9 41 | top 0 42 | left 0 43 | width 100vw 44 | height 100vh 45 | display none 46 | 47 | .sidebar 48 | font-size 16px 49 | background-color #fff 50 | width $sidebarWidth 51 | position fixed 52 | z-index 10 53 | margin 0 54 | top $navbarHeight 55 | left 0 56 | bottom 0 57 | box-sizing border-box 58 | border-right 1px solid var(--border-color) 59 | overflow-y auto 60 | 61 | {$contentClass}:not(.custom) 62 | @extend $wrapper 63 | > *:first-child 64 | // margin-top $navbarHeight 65 | 66 | a:hover 67 | // text-decoration underline 68 | 69 | p.demo 70 | padding 1rem 1.5rem 71 | border 1px solid var(--border-color) 72 | border-radius 4px 73 | 74 | img 75 | max-width 100% 76 | 77 | {$contentClass}.custom 78 | padding 0 79 | margin 0 80 | 81 | img 82 | max-width 100% 83 | 84 | a 85 | font-weight 500 86 | color var(--regular-text) 87 | text-decoration none 88 | 89 | p a code 90 | font-weight 400 91 | color var(--main-color) 92 | 93 | kbd 94 | background #eee 95 | border solid 0.15rem var(--border-color) 96 | border-bottom solid 0.25rem var(--border-color) 97 | border-radius 0.15rem 98 | padding 0 0.15em 99 | 100 | blockquote 101 | font-size 1rem 102 | color #999; 103 | border-left .2rem solid var(--main-color) 104 | margin 1rem 0 105 | padding .25rem 0 .25rem 1rem 106 | 107 | & > p 108 | margin 0 109 | 110 | ul, ol 111 | padding-left 1.2em 112 | 113 | strong 114 | font-weight 600 115 | 116 | h1, h2, h3, h4, h5, h6 117 | font-weight 600 118 | line-height 1.25 119 | 120 | {$contentClass}:not(.custom) > & 121 | margin-top (0.5rem - $navbarHeight) 122 | padding-top ($navbarHeight + 1rem) 123 | margin-bottom 0 124 | 125 | &:first-child 126 | margin-top -1.5rem 127 | margin-bottom 1rem 128 | 129 | + p, + pre, + .custom-block 130 | margin-top 2rem 131 | 132 | &:hover .header-anchor 133 | opacity: 1 134 | 135 | // 标题的字体大小 136 | h1 137 | font-size 1.8rem 138 | 139 | h2 140 | font-size 1.3rem 141 | padding-bottom .3rem 142 | // border-bottom 1px solid var(--border-color) 143 | 144 | h3 145 | font-size 1.1rem 146 | 147 | a.header-anchor 148 | font-size 0.85em 149 | float left 150 | margin-left -0.87em 151 | padding-right 0.23em 152 | margin-top 0.125em 153 | opacity 0 154 | 155 | &:hover 156 | text-decoration none 157 | 158 | code, kbd, .line-number 159 | font-family source-code-pro, Menlo, Monaco, Consolas, "Courier New", monospace 160 | 161 | // 此处是修改样式 162 | p, ul, ol 163 | line-height 30px 164 | letter-spacing 1px 165 | font-weight 400 166 | > a 167 | border-bottom 1px solid $accentColor 168 | transition all .2s 169 | > a:hover 170 | border-bottom 2px solid $accentColor 171 | 172 | hr 173 | border 0 174 | border-top 1px solid var(--border-color) 175 | 176 | table 177 | border-collapse collapse 178 | margin 1rem 0 179 | display: block 180 | overflow-x: auto 181 | &>* 182 | width 100% 183 | 184 | tr 185 | border-top 1px solid var(--border-color) 186 | 187 | &:nth-child(2n) 188 | // background-color lighten(var(--border-color), 50%) 189 | background-color: var(--border-color) 190 | 191 | th, td 192 | border 1px solid var(--border-color) 193 | padding .6em 1em 194 | 195 | .theme-container 196 | &.sidebar-open 197 | .sidebar-mask 198 | display: block 199 | 200 | &.no-navbar 201 | {$contentClass}:not(.custom) > h1, h2, h3, h4, h5, h6 202 | margin-top 1.5rem 203 | padding-top 0 204 | 205 | .sidebar 206 | top 0 207 | 208 | 209 | @media (min-width: ($MQMobile + 1px)) 210 | .theme-container.no-sidebar 211 | .sidebar 212 | display none 213 | 214 | .page 215 | padding-left 0 216 | 217 | @require 'mobile.styl' 218 | 219 | // 重写 ElementUI 样式颜色 220 | .el-link.el-link--primary 221 | color: var(--primary-text) 222 | &::hover 223 | color: var(--regular-text) 224 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/styles/mobile.styl: -------------------------------------------------------------------------------- 1 | @require './config' 2 | 3 | $mobileSidebarWidth = $sidebarWidth * 0.82 4 | 5 | // narrow desktop / iPad 6 | @media (max-width: $MQNarrow) 7 | .sidebar 8 | font-size 15px 9 | width $mobileSidebarWidth 10 | .page 11 | padding-left $mobileSidebarWidth 12 | 13 | // wide mobile 14 | @media (max-width: $MQMobile) 15 | .sidebar 16 | top 0 17 | padding-top $navbarHeight 18 | transform translateX(-100%) 19 | transition transform .2s ease 20 | .page 21 | padding-left 0 22 | .theme-container 23 | &.sidebar-open 24 | .sidebar 25 | transform translateX(0) 26 | &.no-navbar 27 | .sidebar 28 | padding-top: 0 29 | 30 | // narrow mobile 31 | @media (max-width: $MQMobileNarrow) 32 | h1 33 | font-size 1.9rem 34 | {$contentClass} 35 | div[class*="language-"] 36 | margin 0.85rem -1.5rem 37 | border-radius 0 38 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/styles/mode.styl: -------------------------------------------------------------------------------- 1 | :root 2 | --main-color $lightMainColor 3 | --regular-text $lightRegularText 4 | --secondary-text $lightSecondaryText 5 | --primary-text $lightPrimaryText 6 | --bg-color $lightBgColor 7 | --card-color $lightCard 8 | --border-color $lightBorder 9 | --box-shadow $lightShadow 10 | --mask-color $lightMaskColor 11 | @media (prefers-color-scheme: dark) 12 | --main-color $darkMainColor 13 | --regular-text $darkRegularText 14 | --secondary-text $darkSecondaryText 15 | --primary-text $darkPrimaryText 16 | --bg-color $darkBgColor 17 | --card-color $darkCard 18 | --border-color $darkBorder 19 | --box-shadow $darkShadow 20 | --mask-color $darkMaskColor -------------------------------------------------------------------------------- /docs/.vuepress/theme/styles/toc.styl: -------------------------------------------------------------------------------- 1 | .table-of-contents 2 | .badge 3 | vertical-align middle 4 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/styles/wrapper.styl: -------------------------------------------------------------------------------- 1 | $wrapper 2 | max-width $contentWidth 3 | margin 0 auto 4 | padding 2rem 2.5rem 5 | @media (max-width: $MQNarrow) 6 | padding 2rem 7 | @media (max-width: $MQMobileNarrow) 8 | padding 1.5rem 9 | 10 | -------------------------------------------------------------------------------- /docs/.vuepress/theme/user-components/Loading.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 68 | -------------------------------------------------------------------------------- /docs/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | home: true 3 | heroText: 朱昆鹏 4 | tagline: 凡是经历,皆为过往 5 | permalink: / 6 | actionText: ABOUT 7 | actionLink: https://github.com/zhukunpenglinyutong 8 | 9 | sidebar: false 10 | 11 | features: 12 | - image: /ills/code.svg 13 | title: 保持对代码的敬畏 14 | details: 保持对代码的敬畏,保持对技术的热爱; 15 | - image: /ills/life.svg 16 | title: 保持对生活的热爱 17 | details: 珍惜生活中的每一份小美好,热爱生活; 18 | - image: /ills/share.svg 19 | title: 分享自己的快乐 20 | details: 当有开心的事情的时候,记得分享; 21 | --- -------------------------------------------------------------------------------- /docs/blog/1.计算机基础/1.计算机组成原理.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 1.计算机组成原理(待完善) 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 1.计算机基础 8 | --- 9 | 10 | ## 🍍第一部分:概述篇 11 | 12 | ### 1.计算机的发展历史 13 | 14 | **计算机发展的四个阶段** 15 | 16 | - 第一阶段:电子管计算机 1946 - 1957 17 | - 第二阶段:晶体管计算机 1957 - 1964 18 | - 第三阶段:集成电路计算机 1964 - 1980 19 | - 第四阶段:超大规模集成电路计算机 1980 - 现在 20 | 21 | > 第二次世界大战期间,英国为了解密德军海军的密文,设计了世界上第一台电子管计算机,这一阶段最著名的一个电子管计算机是 艾尼阿克(ENIAC) 22 | > 艾尼阿克(ENIAC 23 | > 18000 多个电子管,运行耗电量 150千瓦,重30吨,占地1500平方英尺,运行速度是人工的20万倍 24 | > 问题:集成度小,空间占用大,功耗高,运行慢,操作复杂,更换程序需要接线 25 | 26 | > 第二阶段:晶体管计算机 1957 - 1964 27 | 28 | > 主要是贝尔实验室的三个科学家发明了晶体管,这一时期最著名的计算机有 TX-0(第一台晶体管计算机),PDP-1(当时性能最高的晶体管计算机,配备4k内存,每秒钟能执行200000条指令,配备了 512x512显示器) 29 | > 集成度相对较高,空间占用相对较小,功耗较低,运算速度较快,操作简单,交互更加简单 30 | 31 | > 第三阶段:集成电路计算机 1964 - 1980 32 | 33 | > 主要是 德州仪器的工程师发明了 集成电路(IC) 34 | > 计算机更小,功耗变得更低,速度更快,这时候计算机已经具备进入千家万户的条件 35 | > 这一阶段 IBM 有两款卖的非常好的计算机(7094 和 1401),但是这两款计算机软件不相互兼容,所以 IBM推出了兼容产品 System/360(操作系统的雏形),操作系统的出现 让 软件在 不同的硬件上运行成为了可能 36 | 37 | > 第四阶段:超大规模集成电路计算机 1980 - 现在 38 | 39 | > 一个芯片可以集成上百万个晶体管,速度更快,体积更小,价格更低,用户丰富(文本处理,表格处理,高交互的游戏...) 40 | 41 | > warning 第五个阶段? 42 | 43 | > 生物计算机,可能以 蛋白质分子作为主要原材料(体积小,效率高,不受信号的干扰,没有热损耗) 44 | > 量子计算机,遵循量子力学的物理计算机 45 | 46 | --- 47 | 48 | **微型计算机的发展历史** 49 | 50 | - 单核CPU(有性能瓶颈) 51 | - 1971-1973 500KHz 频率的微型计算机(字长8位) 52 | - 1973-1978 高于1MHz 频率的微型计算机(字长8位) 53 | - 1978-1985 500MHz 频率的微型计算机(字长16位) 54 | - 1985-2000 高于1GHz 频率的微型计算机(字长32位) 55 | - 2000-现在 高于2GHz频率的微型计算机(字长64位) 56 | - 多核CPU 57 | - 2005 Intel酷睿系列 双核CPU,AMD速龙系列 58 | - 2006 Intel酷睿四核CPUIntel酷睿十六核CPU 59 | - Intel酷睿十六核CPU 60 | - 在服务器领域 Intel至强系列56核CPU 61 | 62 | --- 63 | 64 | ### 2.计算机的分类 65 | 66 | - 超级计算机:功能最强,运算速度最快,存储容量最大的计算机,多用于国家高科技领域和尖端技术的研究,运算速度 TFlop/s(每秒万亿次浮点运算) 67 | - 大型计算机:具有高性能,可处理大量数据与复杂运算(例如人口普查,金融,银行等等),在大型机市场里,IBM占用了很大的份额 68 | - 迷你计算机(服务器):不需要特殊的空调场所,具备不错的算力,可以完成较复杂的运算 69 | - 工作站:高端的通用微型计算机,提供比个人计算机更强大的性能,类似于普通台式电脑,性能强劲 70 | - 微型计算机(个人计算机):台式机,笔记本,一体机 71 | 72 | --- 73 | 74 | ### 3.计算机的体系与结构 75 | 76 | **冯诺依曼体系(将程序指令和数据一起存储的计算机设计概念结构)** 77 | 78 | - 存储程序指令 79 | - 设计通用电路 80 | 81 | **解决了早期计算机 仅能执行固定程序的问题** 82 | 83 | - 必须有一个存储器 84 | - 必须有一个控制器 85 | - 必须有一个运算器 86 | - 必须有一个输入设备 87 | - 必须有一个输出设备 88 | 89 | --- 90 | 91 | **现代计算机的结构** 92 | 93 | - 多了一个内存,解决CPU与硬盘之间 速率不一致的问题 94 | 95 | --- 96 | 97 | ### 4.计算机的层次与编程语言 98 | 99 | 100 | 101 | --- 102 | 103 | ### 5.计算机的计算单元 104 | 105 | --- 106 | 107 | ### 6.计算机的字符和编码集 108 | 109 | --- 110 | 111 | ## 🌽第二部分:组成篇 112 | 113 | --- 114 | 115 | ## 🥒第三部分:计算篇 116 | 117 | --- 118 | 119 | ## 🥜第四部分:实践篇 120 | 121 | --- 122 | 123 | ## 一.系统概述 124 | 125 | ### 1.来造一台简单的计算机 126 | 127 | 128 | 逻辑 129 | 130 | 131 | ## 📚参考列表(致敬) 132 | 133 | - [慕课网 编程必备基础 计算机组成原理+操作系统+计算机网络](https://coding.imooc.com/learn/list/355.html) -------------------------------------------------------------------------------- /docs/blog/1.计算机基础/2.操作系统.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 2.操作系统(待完善) 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 1.计算机基础 8 | --- 9 | 10 | ## 🍜第一部分:基础篇 11 | 12 | ### 1.操作系统概述 13 | 14 | > 操作系统是管理计算机硬件和软件资源的**计算机程序** 15 | 16 | > 管理配置内存,决定资源供需顺序,控制输入输出设备等 17 | 18 | > 操作系统提供让用户和系统交互的操作页面 19 | 20 | > 不局限计算机,还有手机等多种设备,都有操作系统 21 | 22 | --- 23 | 24 | ## 🍲第二部分:提升篇 25 | 26 | --- 27 | 28 | ## 🍔第三部分:实践篇 29 | 30 | --- 31 | 32 | ## 📚参考列表(致敬) 33 | 34 | - [慕课网 编程必备基础 计算机组成原理+操作系统+计算机网络](https://coding.imooc.com/learn/list/355.html) -------------------------------------------------------------------------------- /docs/blog/1.计算机基础/3.计算机网络.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 3.计算机网络(待完善) 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 1.计算机基础 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 | - [慕课网 编程必备基础 计算机组成原理+操作系统+计算机网络](https://coding.imooc.com/learn/list/355.html) -------------------------------------------------------------------------------- /docs/blog/1.计算机基础/4.数据结构.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 4.数据结构(待完善) 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 1.计算机基础 8 | --- -------------------------------------------------------------------------------- /docs/blog/1.计算机基础/5.算法.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 5.算法(待完善) 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 1.计算机基础 8 | --- -------------------------------------------------------------------------------- /docs/blog/1.计算机基础/6.数据库系统概论.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 6.数据库系统概论(待完善) 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 1.计算机基础 8 | --- -------------------------------------------------------------------------------- /docs/blog/1.计算机基础/7.数据库使用.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 7.数据库使用(待完善) 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 1.计算机基础 8 | --- -------------------------------------------------------------------------------- /docs/blog/1.计算机基础/8.JS版本数据结构和算法.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 8.JS版本数据结构和算法(待完善) 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 1.计算机基础 8 | --- 9 | 10 | > 前言:本节主要是从JS的角度出发,来进行的数据结构和算法的学习 11 | 12 | ## 第二章:数据结构和算法简介 13 | 14 | --- 15 | 16 | ## 第二章:时间/空间复杂度计算 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /docs/blog/10.前端工程化/1.前端工程化绪论.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 1.前端工程化绪论 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 10.前端工程化 8 | --- 9 | 10 | > 为什么我想先写一下工程化绪论呢,因为我想让你明白工程化的历史 11 | 12 | > 明白没有工程化的时候 想做一些事情是多么的困难,而有了工程化,想做一些事情是多么简单 13 | 14 | > 这样有助于我们 接收未来新的工程化技术 15 | 16 | > 我希望你通过阅读这篇内容,能够从之前页面仔的思想,过渡到一名工程师的角度 17 | 18 | ## 🍱第一部分:工程化发展历史 19 | 20 | > 现代前端技术不再是以前刀耕火种的年代了,任何简单机械的重复劳动都应该让机器去完成。 21 | 22 | ### 第一阶段:模块化 23 | 24 | > 最开始的时候 HTML/CSS/JS 掌握三者,然后写个页面和交互,就称之为前端工程师(也称之为页面仔) 25 | 26 | > 后来随着前端能做的事情越来越多(因为浏览器能做的事情变多了),前端代码越写越多,最开始受到影响的就是JS 27 | 28 | > 因为JS太多了,于是人们就想模块化的使用JS,用于解耦和复用,于是 这时候JS模块化思想出现,各种JS模块化规范出现。 29 | 30 | > 现在比较流行的就是 ES Module & Commonjs 两种规范 31 | 32 | > 备注:后来CSS也具有模块化,就是CSS预处理器的出现 33 | 34 | --- 35 | 36 | ### 第二阶段:工程化工具 37 | 38 | > 因为模块化使得一个技术火了起来Node(或者说Node使Commonjs模块规范火了起来) 39 | 40 | > 因为前端有了Node,所以能做的事情越来越多,出现了CSS预处理器(Less,Sass,Style...),CSS后处理器(Postcss),Babel等等 41 | 42 | > 这时候人们想做事情越来越多,例如,想让CSS更强大,于是又了CSS预处理器,不行写CSS的兼容性代码,于是CSS后处理器出现,想用ES6语法,而又不想担心其兼容性,Babel就出现了 43 | 44 | > 这时候人们越来越贪婪,还想压缩文件,压缩图片,MD5自动命名等等 45 | 46 | > 这时候就出现了构建工具(其实FIS是百度很早推出的构建工具),构建工具能统筹这些技术(插件或者Loder),让其经由Webpack这个打包工具,产出你想要的样子 47 | 48 | > 最近最火的工程化工具,不用说了,就是webpack 49 | -------------------------------------------------------------------------------- /docs/blog/10.前端工程化/3.Cil书写.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 3.Cli书写 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 10.前端工程化 8 | --- 9 | 10 | > 注意此处:内容不全,结构混乱,等待重构... 11 | 12 | ## 简单CLI示例(下载自己代码方库的的一个Cli) 13 | 14 | --- 15 | 16 | ### 1.代码 17 | 18 | ```js 19 | #!/usr/bin/env node 20 | 21 | let zkp = ` 22 | _ 23 | ____ | | __ _ __ 24 | |_ / | |/ / | '_ \\ 25 | / / | < | |_) | 26 | /___| |_|\\_\\ | .__/ 27 | |_| 28 | 29 | 朱昆鹏脚手架 v0.0.1 30 | 31 | zkp init 下载Git仓库 32 | ` 33 | 34 | const program = require('commander') // 核心命令行工具 35 | const Printer = require('@darkobits/lolcatjs') // 字体渐变(美观用,没啥其他用处,花里胡哨) 36 | const shelljs = require('shelljs'); // 前端写shell 37 | const userHome = require('user-home') // 获取用户的目录,好进行创建文件夹的操作 38 | const inquirer = require('inquirer') // 跟用户进行交互 39 | const ora = require('ora') // loading模块 40 | const download = require('download-git-repo') // 下载Git项目 41 | 42 | // 命令集合 43 | let binHeader = { 44 | 45 | init () { 46 | inquirer 47 | .prompt([ 48 | { 49 | type: 'text', 50 | message: '请输入文件夹', 51 | name: 'dirname' 52 | }, 53 | { 54 | type: 'list', 55 | message: '请选择拉取的模板', 56 | choices: ['Notes', 'Juejin-Plugin', 'Wheel', 'miniVue', 'Koa-api-template'], 57 | name: 'kind' 58 | } 59 | ]).then( answers => { 60 | 61 | // console.log(answers) // 示例:{ dirname: 'sss', Kind: 'Notes' } 62 | let { dirname, kind } = answers 63 | 64 | const spinner = ora('😺 初始化模板') 65 | spinner.start() 66 | 67 | let _projectPath = `${userHome}/Desktop/发布一个cli/${dirname}` 68 | shelljs.cd(_projectPath) 69 | shelljs.mkdir(dirname) 70 | 71 | 72 | let templateStr = `direct:https://github.com/zhukunpenglinyutong/${kind}` 73 | switch (kind) { 74 | case 'Notes': downloadFn(templateStr, _projectPath, spinner); break; 75 | case 'Juejin-Plugin': downloadFn(templateStr, _projectPath, spinner); break; 76 | case 'Wheel': downloadFn(templateStr, _projectPath, spinner); break; 77 | case 'miniVue': downloadFn(templateStr, _projectPath, spinner); break; 78 | case 'Koa-api-template': downloadFn(templateStr, _projectPath, spinner); break; 79 | } 80 | }) 81 | } 82 | 83 | } 84 | 85 | // 加载函数 86 | function downloadFn(template, _projectPath, spinner) { 87 | download(template, _projectPath,{ clone: true }, err => { 88 | spinner.stop() 89 | if (err) { 90 | console.error(`下载出错`, err.message.trim()) 91 | } else { 92 | console.log('下载成功 ✅') 93 | } 94 | }) 95 | } 96 | 97 | 98 | program.version(Printer.default.fromString(zkp), "-v, --version") 99 | // program.command("init", "初始化我们的项目") // zkp --help 中会有提示 100 | 101 | program 102 | .usage("[cmd] ") 103 | .arguments(" [env]") 104 | .action( (cmd, otherParms) => { 105 | let header = binHeader[cmd] 106 | typeof header === 'undefined' ? process.exit(1) : header() 107 | }) 108 | 109 | program.parse(process.argv) 110 | ``` 111 | 112 | --- 113 | 114 | ### 2.发布到npm上去 115 | 116 | -------------------------------------------------------------------------------- /docs/blog/11.前端性能优化/1.前端性能优化基础.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 1.前端性能优化基础 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 11.前端性能优化 8 | --- 9 | 10 | > 等待书写中... -------------------------------------------------------------------------------- /docs/blog/12.前端代码质量/1.前端代码质量绪论.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 1.前端代码质量绪论 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 12.前端代码质量 8 | --- 9 | 10 | # 1.前端代码质量绪论 11 | 12 | > 等待书写中... 13 | 14 | --- 15 | 16 | ## 📚参考 17 | 18 | - 《代码整洁之道》[美]Robert C. Martin 19 | - 《重构 改善既有代码的设计》[美]Martin Fowler -------------------------------------------------------------------------------- /docs/blog/12.前端代码质量/2.ESLint.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 2.ESLint 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 12.前端代码质量 8 | --- 9 | 10 | > 等待书写中... -------------------------------------------------------------------------------- /docs/blog/12.前端代码质量/4.自动化测试.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 4.自动化测试 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 12.前端代码质量 8 | --- 9 | 10 | > 注意:此篇文章未来可能要和其他文章进行合并,或者重构... 目前结构混乱,无法阅读 11 | 12 | --- 13 | 14 | ## 一.概述 15 | 16 | - 我之前也学过好几次测试,单公司不用,自己又没找到必须要用的感觉,就不用了,直到最近(2019.8.13),看到一本书(重构xxx),才深刻的意识到,软件代码如果一直不更改,不优化,就会越来越差,后期根本动不了 17 | - 而要是不断的修改代码,如何保证项目的正常运行,这个时候就需要测试了,我们身处一个好的环境,什么都唾手可得,所以我们可以使用自动化测试来保证我们重构之后的代码没有问题 18 | - 重构就是在不改变软件外部行为的情况下,不断优化代码的行为,而TDD(测试驱动开发)就保证了 我们重构的时候 不改变软件的外部行为 19 | 20 | --- 21 | 22 | ## 二.自动化测试 23 | 24 | ### 1.测试工具类型 25 | 26 | 27 | 28 | --- 29 | 30 | ### 2.单元测试工具对比 31 | 32 | **按照npm下载排名来排列 ---> npm trends** 33 | 34 | - jest 35 | - mocha + chai 36 | - jasmine 37 | - ava 38 | 39 | 40 | --- 41 | 42 | ### 3.e2e测试工具对比 43 | 44 | **按照npm下载排名来排列** 45 | 46 | - cypress 47 | - webdriverio 48 | - nightwatch 49 | - nightmare 50 | - testcafe 51 | 52 | 53 | --- 54 | 55 | ## 三.单元测试Jest 56 | 57 | ### 1.Jest简介 58 | 59 | - 支持 babel, webpack, Typescript 60 | 61 | --- 62 | 63 | ### 2.Jest安装和babel支持 64 | 65 | - npm install --save-dev jest 66 | - npm i --dev babel-jest @babel/core @babel/preset-env 67 | 68 | ```js 69 | // babel.config.js 70 | module.exports = { 71 | presets: [ 72 | [ 73 | '@babel/preset-env', 74 | { 75 | targets: { 76 | node: 'current', 77 | }, 78 | }, 79 | ], 80 | ], 81 | }; 82 | ``` 83 | 84 | --- 85 | 86 | ### 3.第一个Jest测试用例 87 | 88 | **文件(根据测试用例修改之后的代码)** 89 | 90 | ```js 91 | export const add = (a = 0, b = 0) => { 92 | 93 | if (typeof a !== 'number') { 94 | a = 0 95 | } 96 | 97 | if (typeof b !== 'number') { 98 | b = 0 99 | } 100 | 101 | return a + b 102 | } 103 | ``` 104 | 105 | **测试代码** 106 | 107 | ```js 108 | // 引入待测试的功能模块 109 | import { add } from './math' 110 | 111 | // test suite 112 | describe('测试 math.js 功能模块', () => { 113 | 114 | it ('等于加法函数是否正常', () => { 115 | expect(add(1,2)).toEqual(3) 116 | expect(add(1,-2)).toEqual(-1) 117 | expect(add(1, )).toEqual(1) 118 | expect(add(1,'')).toEqual(1) 119 | expect(add('你好',)).toEqual(0) 120 | }) 121 | 122 | }) 123 | 124 | ``` 125 | 126 | 127 | --- 128 | 129 | ### 4.杀手锏功能 Mock & Spy(没懂,来日再说吧) 130 | 131 | - Mock测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建,以便测试的一种方法 132 | 133 | --- 134 | 135 | ### 5.jest cli 功能 136 | 137 | - jest --coverage 生成测试覆盖率 138 | - jest --verbose 详细打印 139 | - jest --watchAll 启动监听,执行所有测试用例(我们可以选择) 140 | - ... 141 | 142 | --- 143 | 144 | ### 6.Vue-Cli快速创建单元 145 | 146 | 147 | --- 148 | 149 | ## TravisCI 150 | 151 | ### 1.使用简介 152 | 153 | > TravisCI 只支持GitHub,不支持其他代码托管服务 154 | 155 | **使用步骤** 156 | 157 | - [进入到官方网站](http://travis-ci.org/),并使用GitHub授权 158 | - 获取GitHub的Tokens 159 | - 配置项目 .taravis.yml 160 | - Node项目 161 | - Script脚本 162 | - 部署到 github pages 163 | - 钩子 164 | - 其他 165 | 166 | --- 167 | 168 | ## CircleCI 169 | 170 | -------------------------------------------------------------------------------- /docs/blog/12.前端代码质量/5.项目质量监测.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 5.项目质量监测 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 12.前端代码质量 8 | --- 9 | 10 | > 注意:此篇文章未来可能要和其他文章进行合并,或者重构... 目前结构混乱,无法阅读 11 | 12 | ### 简介 13 | 14 | **🔥通常来说,项目的质量决定了 软件项目的命运,软件项目的可维护性,软件项目的运维成本,软件项目的拓展性** 15 | 16 | **为什么要进行代码检查** 17 | 18 | - 避免低级BUG 19 | - 统一代码习惯 20 | - 保证线上代码质量 21 | 22 | **如何让一个团队的人产出的代码都在一个基本水平底线之上呢?** 23 | 24 | 最初是靠制订规范。要确保规范得以执行只能靠人,所以文字规范成了code review的公共参照标准。单纯靠人的事最终都容易流于形式, 25 | 26 | 🔥所以需要工具加以保证。虽说工具并不能完全实现规范中的规则,但至少能够在一定程度 上缓解代码不统一一的局面 27 | 28 | 29 | **从哪几个方面可以让项目质量有所提高呢?** 30 | 31 | - 代码Lint:告别低级错误,简单的配置让程序来自动检查 32 | - e2e test:e2e测试,黑盒测试,如何用e2e进行端到端的测试 33 | - 开源测试平台:codecov介绍(配合CI工具,让测试过程自动化) 34 | 35 | --- 36 | 37 | ### 2.日常写代码中遇到的问题 38 | 39 | **代码风格** 40 | 41 | **代码规范** 42 | 43 | 这里使用 Typescript 能提高代码质量 44 | 45 | **设计思路** 46 | 47 | 有的人写的程序就是高度耦合的,几十个函数,很难调用,没办法维护,这就和思路有关系了,要设计一些设计模式,设计一些模块化的东西,来规避这点 48 | 49 | --- 50 | 51 | ### 3.代码质量检测 Lint 52 | 53 | **Lint:是一款分析源码以及标记编程过程中(代码,样式,构建)书写的错误的工具** 54 | 55 | 常见的3个JS检测工具对比 56 | 57 | - JSLint(2012年出现): 58 | - 优点:参数配置完成,可以直接使用 59 | - 缺点:有限的配置选项,不能增加个性化的规则等等 60 | - JSHint 61 | - 优点:可配置,可以写配置文件 62 | - 缺点:难于知道那个规则产生的错误,不能自定义规则等等 63 | - 🔥ESLint(比较新的工具,JSCS已经合并到ESLint) 64 | - 优点:高度可配置 65 | - 缺点:需要一些配置,速度慢 66 | 67 | --- 68 | 69 | ### 4.Lint工具介绍(4个核心概念) 70 | 71 | **核心是配置文件,规则是写到里面的:.eslintrc.js** 72 | 73 | **常见规则** 74 | 75 | - off && 0:关闭规则 76 | - warn && 1:开启规则,使用警告级别错误(不会导致程序退出) 77 | - error && 2:开启规则,使用错误级别错误(程序会退出) 78 | 79 | ```js 80 | // 例如 81 | { 82 | "rules": { 83 | "semi": ["error", "never"] 84 | } 85 | } 86 | ``` 87 | 88 | **Extends:使用别人的包(使用别人的规则)** 89 | 90 | ```js 91 | { 92 | "extends": "google" 93 | } 94 | ``` 95 | 96 | **🔥Plugins:插件系统** 97 | 98 | 我们有时候可能有一些特殊的应用场景,例如Vue的语法,例如less,sass等这些的语法,可能 使用别人的包里面也没有这些配置,我们就需要自己配置了(针对特定的语法结构进行Lint) 99 | 100 | --- 101 | 102 | ### 5.ESLint初始化 103 | 104 | - 安排:npm install eslint --save-dev 105 | - 使用 106 | 107 | ```js 108 | // 109 | "scripts": { 110 | "lint": "eslint app.js", 111 | "lint:create": "eslint --init", 112 | }, 113 | ``` 114 | 115 | **使用 eslint --init创建一个ESLint配置文件** 116 | 117 | - 第一个问题:检查代码规范 | 🔥检查代码规范并查找一些问题 | 强制使用某些规范 118 | - 第二个问题(你使用哪种模块方式):🔥ESM | COM | 不使用 119 | - 第三个问题(选择常见的框架) 120 | - 第四个问题(你的代码会在哪里运行):🔥浏览器 | 🔥Node 121 | - 第五个问题(你想把这些配置放到什么文件中) 122 | 123 | ```js 124 | module.exports = { 125 | "env": { // 运行环境 126 | "browser": true, 127 | "es6": true, 128 | "node": true 129 | }, 130 | "extends": "eslint:recommended", // 拓展规则 131 | "globals": { // 执行代码时脚本需要访问额外全局变量 132 | "Atomics": "readonly", 133 | "SharedArrayBuffer": "readonly" 134 | }, 135 | "parserOptions": { // 用于指定想要支持的JS语言 136 | "ecmaVersion": 2018, 137 | "sourceType": "module" 138 | }, 139 | "rules": { // 开启某些规则,设置规则登记 140 | } 141 | }; 142 | ``` 143 | 144 | **❣️注意,有时候也要写另一个文件.eslintignore,用于告诉ESLint忽略某些文件或者目录** 145 | 146 | 147 | --- 148 | 149 | 150 | > -------------------------------------------------------------------------------- /docs/blog/12.前端代码质量/6.如何写一个不错的代码.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 6.如何写一个不错的代码 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 12.前端代码质量 8 | --- 9 | 10 | > 注意:此文章位置未来可能会变化,因为未来 8.4前端代码质量 可能会进行合并重组 11 | 12 | > 在我的认知了,好的代码不在于用了多么高级的算法,多么深奥的设计模式 13 | 14 | > 而是在于 方便清晰的去写代码,并在此过程中逐渐优化“套路”,也是为了更好的拓展和维护(因为自己代码如何瞎写的话,回过头维护是看不懂的) 15 | 16 | > 目前总结的是 17 | 18 | --- 19 | 20 | ## 第一部分:代码书写技巧 21 | 22 | ### 1.命名 23 | 24 | > 我这块命名不说啥,我想说一下 函数的后缀命名法,规则就是,将函数分为不同性质,加上后缀,以后非常的好找和区分 25 | 26 | > 正常流程函数:正常流程的函数,没法解释,除了下面几种之外的函数吧 | Fn 27 | 28 | > 事件触发函数:因为事件触发调用的函数 | Event 29 | 30 | > 接口类函数:请求数据接口的(可能有时候会调用工具类函数来洗一遍) | Api 31 | 32 | > 工具类函数:处理一些非核心逻辑的处理函数 | Tool 33 | 34 | ```js 35 | // 初始化代码 36 | function initFn() { 37 | initStateFn() 38 | 39 | } 40 | // 初始化状态 41 | function initStateFn() { 42 | let name = '朱昆鹏'; 43 | } 44 | 45 | // 点击事件 46 | function clickButtonEvent() { 47 | console.log('点击按钮获取女朋友') 48 | } 49 | 50 | // 请求女朋友 接口 51 | function getGirlFriendApi() { 52 | console.log('请求上帝赐个女朋友') 53 | } 54 | 55 | // 数据处理函数 56 | function dataHandleTool() { 57 | console.log('上帝没有给你女朋友,你在处理函数里面自己加一个吧...') 58 | } 59 | ``` 60 | 61 | --- 62 | 63 | ### 2.注释 64 | 65 | 关键变量要注释是干什么的,函数要解释这个函数是干什么用的,别吝啬注释 66 | 67 | --- 68 | 69 | ### 3.函数 70 | -------------------------------------------------------------------------------- /docs/blog/13. 前端安全/1.前端安全绪论.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 1.前端安全绪论 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 13. 前端安全 8 | --- 9 | 10 | > 等待书写中... -------------------------------------------------------------------------------- /docs/blog/13. 前端安全/3.渗透攻防.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 3.渗透攻防 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 13. 前端安全 8 | --- 9 | 10 | > 等待书写中... 11 | 12 | ## 第一部分:信息收集 13 | 14 | ### 1.子域名爆破 15 | 16 | - [安装Python](https://www.python.org/downloads/release/python-2710/) 17 | 18 | 19 | -------------------------------------------------------------------------------- /docs/blog/14.前端架构/1.前端架构.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 1.前端架构 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 14.前端架构 8 | --- 9 | 10 | > 这里目录内容我不会,但我会在三四个月内实践好的,先定个目录结构 11 | 12 | ## 🌽第一部分:Cli全栈化 13 | 14 | > 如果要把这块写成文章,我估计我还要几个月,我先写一下,我基于这个原则做的一些产品 15 | 16 | - npm包:[vuepress-es](https://www.npmjs.com/package/vuepress-es) 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 | 42 | -------------------------------------------------------------------------------- /docs/blog/14.前端架构/2.前端国际化方案(Vue项目).md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 2.前端国际化方案(Vue项目) 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 14.前端架构 8 | --- 9 | 10 | > 此篇文章放到这里可能不是很合理,但是没别的地方放了,以后我再抽离一个目录吧... 11 | 12 | ## 第一部分: 13 | 14 | 编译期间转换:i18n-webpack-plugin 15 | 16 | --- 17 | 18 | ## 第二部分:实际操作 19 | 20 | ### 1.提取方案 -------------------------------------------------------------------------------- /docs/blog/15.运维/1.Linux知识.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 1.Linux知识 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 15.运维 8 | --- 9 | 10 | > 等待书写中... -------------------------------------------------------------------------------- /docs/blog/15.运维/2.容器化.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 2.容器化 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 15.运维 8 | --- 9 | 10 | > 等待书写中... -------------------------------------------------------------------------------- /docs/blog/15.运维/3.持续集成.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 3.持续集成 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 15.运维 8 | --- 9 | 10 | > 等待书写中... -------------------------------------------------------------------------------- /docs/blog/16.网络/1.前端网络基础.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 1.前端网络基础 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 16.网络 8 | --- 9 | 10 | ::: warning 11 | 注意此处:内容不全,结构完整... 12 | ::: 13 | 14 | ::: tip 15 | 在我看来这里的重要性简直是太高了,相当一人体的脊柱一样,这块搞不明白,你就高不起来。 16 | 17 | 因为有一些名词是需要有一定的网络基础的,例如 CDN, 缓存,cookie,session,token,TCP/IP,HTTP,请求响应报文... 这些都是至关重要,所以我也在思考,如何将这个重要的一块好好的写一下 18 | 19 | 我之前的书写时基于 HTTP,缓存,等等一块块零散的知识点进行,最后感觉起来,并不是很好,于是最后准备换一条路,从源头来一步一步进行分析,看看是否对理解前端中需要用到的网络知识有所帮助。 20 | ::: 21 | 22 | --- 23 | 24 | ## 🥚第一部分:计算机网络概述 25 | 26 | ### 1.互联网结构发展的三个历史 27 | 28 | ::: tip 29 | 第一阶段:从单网络 ARPANET 向互联网发展的过程 30 | ::: 31 | 32 | 1969年美国国防部建立的 第一个分组交换网 ARPANET 最初只是一个单个的分组交换网,后来发现单个网络并不能满足使用 33 | 34 | 于是 ARPA 开始研究多种网络(分组无线电网络)互联的技术,这就导致了互联网络的出现,也是现在互联网的雏形 35 | 36 | 1983年 TCP/IP 协议成为 ARPANET 上的标准协议,使得使用 **TCP/IP协议** 的计算机都能利用互联网相互通信,因此人们就把 1983年定义为互联网的诞生时间 37 | 38 | --- 39 | 40 | ::: tip 41 | 第二阶段:构建三级结构的互联网 42 | ::: 43 | 44 | 1985年起,美国国家科学基金会 NSF 就围绕留个大型计算机中心 建设计算机网络(NSFNET) 45 | 46 | 这是一个三级计算机网络,分为 主干网,地域网,校园网(或企业网) 47 | 48 | 1991年,NSF 和 美国其他部门认识到,互联网必将扩大使用范围,不再仅限于大学和研究机构,于是美国政府决定将互联网的主干网交给私人公司来经营,并且开始对接入互联网的单位进行收费 49 | 50 | --- 51 | 52 | ::: tip 53 | 第三阶段:形成 多层次ISP结构的互联网 54 | ::: 55 | 56 | ISP 就是一个进行商业活动的公司(互联网服务提供者),中国电信,中国联通,中国移动等公司都是我国有名的 ISP 57 | 58 | ISP 可以从互联网管理机构申请到很多IP地址,同时拥有通信线路,以及路由器等联网设备 59 | 60 | 根据提供服务的覆盖面积,ISP也被分为:主干IPS,地区IPS,本地IPS 61 | 62 | 从原理上讲,只要每个本地IPS都按照了路由器,连接到了某个地区的IPS,而每个地区的IPS也有路由器连接到主干IPS,那么就能完成互联网中的所有的分组转发任务 63 | 64 | 随着互联网上数据流量的急剧增长,人们开始研究如何更快的转发分组,于是 **互联网交换点 IXP 就应用而生了(了解)** 65 | 66 | 67 | 68 | --- 69 | 70 | ### 2.路由器(实现分组交换的关键构件) 71 | 72 | ::: tip 73 | 分组交换则采用了 **存储转发技术**,通常我们把要发送的整块数据成为一个报文,而分组交换技术 就是把一个报文划分为几个分组后再进行发送。 74 | ::: 75 | 76 | 把较长的报文划分为一个个更小的等长数据段,并且在每一个数据段的前面,加上一些由必要的控制信息组成的首部(Header)之后,就构成了一个分组(分组又称之为包,不知道大家听没听过抓包) 77 | 78 | 分组是互联网中传送的数据单元,分组的首部是非常重要的,正是由于分组的首部包含了诸如目的地址和源地址等重要控制信息,每一个分组才能在互联网中独立的进行传输路径,并正确的交付到分组传输的终点。 79 | 80 | 81 | 82 | --- 83 | 84 | ::: tip 85 | 路由器是一种专用计算器(不叫主机),是实现分组交换的关键构件,其任务是 转发收到的分组。 86 | ::: 87 | 88 | 主机是为用户进行信息处理的,路由器是用来转发分组的 89 | 90 | 路由器收到一个分组,会暂时存储一下,检查其首部,查找转发表,按照首部中的目的地址,找到合适的接口转发出去,把分组交给下一个路由器 91 | 92 | 这样一步一步的(可能会经过十几个路由器)以存储转发的方式,把分组交付给最终的目的主机 93 | 94 | 各路由器之间必须经常交换彼此掌握的路由信息,以便创建和动态维护路由器中的转发表,使得转发表能够在整个网络拓扑发生改变的时候,及时更新 95 | 96 | 97 | 98 | --- 99 | 100 | ### 3.计算机网络体系结构 101 | 102 | ::: tip 103 | 主要有三种划分方式,分别是 OSI的七层协议(国际标准),TCP/IP四层协议,五层协议(广泛使用) 104 | 105 | 而我也主要是以五层协议为根本,接下里的内容也是以五层协议模型为核心书写的 106 | ::: 107 | 108 | 109 | 110 | --- 111 | 112 | ::: tip 113 | 应用层 的任务是 通过应用进程间的交互来完成特定网络应用(没太懂) 114 | ::: 115 | 116 | 应用层协议定义的是 应用进程间通信和交互的规则(这里进程就是指正在运行的程序) 117 | 118 | 对于不同的应用程序需要有不同的应用层协议,例如域名系统DNS,万维网应用 HTTP协议,电子邮件 SMTP协议等等 119 | 120 | 我们把应用层交互的数据单元称为报文 121 | 122 | --- 123 | 124 | ::: tip 125 | 传输层 的任务是 负责向两台主机中进程之间的通信 提供通用的数据传输服务 126 | ::: 127 | 128 | 传输层主要使用两种协议 129 | 130 | - **传输控制协议 TCP**,提供面向连接的,可靠的数据传输服务,数据传输单位是报文段 131 | - **用户数据报协议 UDP**,提供无连接的,尽最大努力的数据传输服务(不保证数据传输的可靠性),数据传输单位是用户数据报 132 | 133 | 134 | 135 | --- 136 | 137 | ::: tip 138 | 网络层 的任务是 为分组交换网上的不同主机提供通信服务 139 | ::: 140 | 141 | 在发送数据的时候,网络层把传输层产生的报文段(或用户数据报)封装成分组或包的形式传送 142 | 143 | 144 | 145 | --- 146 | 147 | > 数据链路层,物理层,省略... 148 | 149 | --- 150 | 151 | 152 | ## 🍖第二部分:应用层 153 | 154 | > 书写中... 155 | 156 | ## 🥞第三部分:运输层 157 | 158 | > 书写中... 159 | 160 | ## 🧀第四部分:网络层 161 | 162 | > 书写中... 163 | 164 | ## 📚参考列表(致敬) 165 | 166 | - 《计算机网络》(第七版)谢希仁 编著 -------------------------------------------------------------------------------- /docs/blog/18.其他/1.爬虫.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 1.爬虫 3 | date: 2020-05-06 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 18.其他 8 | --- 9 | 10 | ## 🐛 1.爬取内容 11 | 12 | 爬虫的几种方式 13 | 14 | - 1.通过API获取信息 15 | - 2.通过获取网页源码(通过 require 获取网页返回体 body,然后用正则提取 (.+?) ),但是现在网站越来越复杂,有的还需要登录,甚至还有防护 16 | - 3.目前主流的是:puppeteer控制chromium来进行抓取数据(这个工具可以通过api来操作浏览器行为,通过这个工具,可以用来写爬虫,自动签到,网页截图,生成paf,自动化测试等) 17 | 18 | ```js 19 | // 示例一:博客截图 20 | 21 | let puppeteer = require('puppeteer'); // 记住这里一定要加 ; 22 | 23 | (async function() { 24 | const browser = await puppeteer.launch({ 25 | headless: false // 是否打开一个无页面浏览器 26 | }); 27 | const page = await browser.newPage(); // 打开一个空白页面 28 | await page.goto('https://notes.itzkp.com'); // 在地址栏中输入博客地址 29 | await page.screenshot({path: 'zkp.png'}); // 把当前页面截图,保存到zkp.png中 30 | await browser.close(); // 关闭浏览器 31 | })(); 32 | ``` 33 | 34 | ```js 35 | // 示例二:掘金文章内容获取 36 | 37 | let puppeteer = require('puppeteer'); 38 | let url = 'https://juejin.cn/user/2788017219055175/posts'; 39 | 40 | (async function() { 41 | const browser = await puppeteer.launch({ 42 | headless: false // 是否打开一个无页面浏览器 43 | }); 44 | 45 | const page = await browser.newPage(); // 打开一个空白页面 46 | 47 | // 在地址栏中输入博客地址 48 | await page.goto(url, { 49 | waitUntil: 'networkidle2' 50 | }); 51 | 52 | // 获取指定节点属性 53 | const titles = await page.$$eval('a.title', element => { 54 | return element.map(item => item.innerHTML) 55 | }) 56 | 57 | await browser.close(); // 关闭浏览器 58 | })(); 59 | ``` 60 | 61 | --- 62 | 63 | ## 🐒 2.数据持久化 64 | 65 | > 抓的数据不进行持久化就没有意思 66 | 67 | - 根据爬取的规则和策略,把爬取到的数据存到数据库中 68 | - 如果要兼容不同的来源,需要对数据进行格式化 69 | - 为不同的数据建立索引方便检索 70 | 71 | --- 72 | 73 | ## 🐣 3.数据订阅 74 | 75 | > 用户可以按照自己的兴趣和需要进行定制内容 76 | 77 | --- 78 | 79 | ## 🦑 4.分发 80 | 81 | 有新数据的时候 82 | 83 | - 可以使用邮件推送到订阅者 84 | - 可以使用极光推送等推送服务 85 | - 可以使用即时通信服务向客户端推送 86 | 87 | --- 88 | 89 | ## 5.小项目一:掘金爬虫 90 | 91 | 核心步骤 92 | 93 | 1. 发起HTTP请求获取网页内容 94 | 1. 使用类似jQuery的语法来操作页面提取需要的数据 95 | 1. 把数据保存在数据库中以供查询 96 | 1. 建立一个服务器来显示这些数据 97 | 1. 可以定时爬取数据 98 | 1. 可让程序稳定运行 99 | 1. 对编码进行转换 100 | 101 | 102 | 103 | 104 | 105 | 106 | -------------------------------------------------------------------------------- /docs/blog/3.CSS/1.CSS基础.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 1.CSS基础 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 3.CSS 8 | --- 9 | 10 | > 注意此处:内容不全,结构完整... 11 | 12 | > 前端几乎所有的展示都是用 CSS来写的,你甚至可以 只精通CSS,就能有一个好工作 13 | 14 | > 但是注意,CSS的水很深,这里只是最基础的整理,里面的内容 几乎5天就能学会,总之就是无论何时,对CSS这个技术要保持敬畏 15 | 16 | ## 🌎第一部分:CSS入门 17 | 18 | ### 0.CSS的发展历史 19 | 20 | [CSS的发展历史](https://www.jianshu.com/p/4257a6f40c28) 21 | 22 | ### 1.CSS样式表的使用 23 | 24 | **行内式(内联样式)** 25 | 26 | ```html 27 |
28 | ``` 29 | 30 | **内部样式表** 31 | 32 | ```html 33 | 34 | 37 | 38 | ``` 39 | 40 | **外部样式** 41 | 42 | ```html 43 | 44 | 45 | 46 | ``` 47 | 48 | **❣️ 备注:因为CSS发展了很多年,人们越来越想省事,所以出了预处理器,前处理器,后处理器都有 | 还有CSS命名也是个玄学** 49 | 50 | --- 51 | 52 | ### 2.CSS基础选择器 53 | 54 | > CSS选择器就是 把我们想要的标签选择出来的 55 | 56 | - 标签选择器 标签名 57 | - id选择器 #id名称 58 | - 类选择器 .类名 59 | - 通配符选择器 * 60 | 61 | **拓展:突然想到一个道题(一个BUG),就是多少个类选择器权重 可以覆盖掉 id选择器的权重** 62 | 63 | --- 64 | 65 | ### 3.CSS复合选择器 66 | 67 | - 后代选择器:父级 子级(#father .chilren) 68 | - 子元素选择器:父级>子级(只选离父级最近的一级,孙级之后都不选中) 69 | - 交集选择器:div#app 既是div标签,id又是app的标签(既是 又是 的关系) 70 | - 并集选择器:a, p, div, span, #app(一下选择多个,一起设置的选择器) 71 | - 伪类选择器:用于对某些选择器添加特殊的效果 72 | - 链接伪类 73 | - a:link:未访问的链接 74 | - a:visited:已访问的链接 75 | - a:hover:鼠标移动到链接上 76 | - a:active:选定的链接 77 | - 结构伪类 78 | 79 | --- 80 | 81 | ### 4.font字体 82 | 83 | ```css 84 | /* 字体大小 | px单位,像素 | em单位,相当于当前对象内文本的字体尺寸 | ... */ 85 | font-size: 16px; 86 | 87 | /* 字体 | 多个字体会一个个找,前面的没有,就应用下一个,都没有就走系统默认的 */ 88 | font-family: '宋体', Arial, '微软雅黑'; 89 | 90 | /* 字体粗细 | normal 默认不加粗 | bold 加粗 | 400以下等同于normal | 700以上等同于 bold */ 91 | font-weight: 500; 92 | 93 | /* 字体风格 | normal 默认值 | italic 倾斜 */ 94 | font-style: italic 95 | 96 | /* 字体综合写法(不能更改顺序):font: font-style font-weight font-size/line-height font-family */ 97 | font: normal 500 20px '微软雅黑' 98 | /* 有一些可以省略,但是 字体 和 字体大小 不能省略 */ 99 | ``` 100 | 101 | --- 102 | 103 | ## 🌝第二部分:CSS外观样式 104 | 105 | ### 1.color(文本颜色) 106 | 107 | > 主要用于定义文本的颜色 108 | 109 | ```html 110 | 119 | ``` 120 | 121 | --- 122 | 123 | ### 2.line-height(行间距) 124 | 125 | ```html 126 | 132 | ``` 133 | 134 | --- 135 | 136 | ### 3.text-align(文本水平对齐方式) 137 | 138 | ```html 139 | 147 | ``` 148 | 149 | --- 150 | 151 | ### 4.text-indent(首行缩进) 152 | 153 | ```html 154 | 160 | ``` 161 | 162 | --- 163 | 164 | ### 5.text-decoration(文本装饰,通常给a链接修改装饰效果) 165 | 166 | ```html 167 | 177 | ``` 178 | 179 | --- 180 | 181 | ## 🌛第三部分:CSS背景及应用 182 | 183 | ### 1.背景颜色 184 | 185 | --- 186 | 187 | ### 2.背景图片 188 | 189 | --- 190 | 191 | ### 3.背景平铺 192 | 193 | --- 194 | 195 | ### 4.背景位置 196 | 197 | --- 198 | 199 | ## 🌙第四部分:标签显示模式 & CSS盒模型 200 | 201 | > 标签的显示模式(display)主要有,行内,块级,行内块 202 | 203 | - 块级:独占一行,高度,宽度,内外边距都可以控制(常见的有h1~h6, div, ul, ol, li, p) 204 | - 行内:一行显示多个,高宽直接设置无效,默认宽度是它自身内容的宽度,行内元素只能容纳文本或者行内元素(常见的有 a, span, em, s, ...) 205 | - 行内块:一行可以显示多个,可以设置宽高(常见的有 img, input, td) 206 | - 相互转换:display: block, inline, inline-block 207 | 208 | --- 209 | 210 | ## ⭐️第五部分:CSS三大特性 211 | 212 | --- 213 | 214 | ## 🌟第六部分:浮动 & 清除浮动 215 | 216 | --- 217 | 218 | ## 💫第七部分:定位 219 | 220 | --- 221 | 222 | ## ✨第八部分:其他 223 | 224 | ## 📚参考列表(致敬) 225 | 226 | - [博学谷](https://www.boxuegu.com/) 227 | -------------------------------------------------------------------------------- /docs/blog/3.CSS/2.CSS3.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 2.CSS3 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 3.CSS 8 | --- 9 | 10 | > CSS3不和HTML5一样是一个生态,而是 拓展了CSS的基础,使其更加的好用,但是还不具有现代化的特性 11 | 12 | > 但是不要担心,一些预处理器和后处理器 弥补了 CSS不现代化的一些问题 13 | 14 | ## 🥟第一部分:新增选择器 15 | 16 | > 前言:新增的选择器真是好用,不用多谢一些类名了,起名字我可真是难受 17 | 18 | **备注:类选择器,属性选择器,伪类选择器,权重都是10** 19 | 20 | ### 1.属性选择器 21 | 22 | ```html 23 | 24 | 25 | ``` 26 | 27 | ```css 28 | /* 属性选择器 */ 29 | button[disabled] { } 30 | 31 | /* 两个按钮都能选中 */ 32 | button[class^="btn"] { } 33 | 34 | /* att$='' 具有att属性,并且以...结尾的 */ 35 | /* att*='' 具有att属性,并且含有...的 */ 36 | ``` 37 | 38 | ### 2.结构伪类选择器 39 | 40 | > 所谓结构,就是指,是第几个 41 | 42 | ```html 43 |
44 |

1

45 |

2

46 |

3

47 |

4

48 |

5

49 |
50 | ``` 51 | 52 | ```css 53 | /* 匹配父元素div 中子元素 p 的第一个 */ 54 | div p:first-child { } 55 | 56 | /* 匹配父元素div 中子元素p 的最后一个 */ 57 | div p:last-child { } 58 | 59 | /* 匹配父元素div 中子元素p 的第n个子元素(🔥 n可以是公式,是公式的时候从0开始) */ 60 | div p:nth-child(n) { } 61 | 62 | /* 63 | * 🔥 这个和上面唯一不同的是,上面是按照顺序的,建议使用下面这个,否则稍微复杂一点的选择就做不了 64 | */ 65 | div p:first-of-type { } 66 | div p:last-of-type { } 67 | div p:nth-of-type(n) {} 68 | 69 | ``` 70 | 71 | 72 | ### 3.伪元素选择器 73 | 74 | ```html 75 |
76 | ``` 77 | 78 | ```css 79 | /* 在元素内部的前面插入内容 */ 80 | .app::before { 81 | /* 必有 */ 82 | content: '内容' 83 | } 84 | 85 | /* 在元素内部的后面插入内容 */ 86 | .app::after { } 87 | 88 | /* 🔥 备注:这个属于行内元素,并且权重和标签选择器一样,都是1 */ 89 | ``` 90 | 91 | ## 🥡第二部分:媒体查询(media) 92 | 93 | ```css 94 | @media mediatype and|not|only (media feature) { } 95 | /* mediatype 媒体类型 | all 所有设备 | print 用于打印机和打印机预览 | scree 用于电脑屏幕,平板,手机等 */ 96 | /* 关键字 and 且 | not 非 | only 指定 */ 97 | /* media feature 媒体特性 | width 宽度 | min-width | max-width */ 98 | 99 | /* 例如:在屏幕上并且屏幕大于 1024px 的时候 触发 */ 100 | @media scree and (max-width: 1024px) { } 101 | 102 | ``` 103 | --- 104 | 105 | **引入资源** 106 | 107 | > 这个需求是,当页面是小屏幕的时候,就引入小屏幕的css,这个怎么做? 108 | 109 | ```html 110 | 111 | ``` 112 | 113 | ## 🥬第三部分:动画 114 | 115 | > 动画(animation)可以通过设置多个节点来精确的控制一个或者一组动画,常用来实现复杂的动画效果 116 | 117 | **先定义动画,再使用动画** 118 | 119 | ```css 120 | /* 定义动画(经常和transform一起使用) */ 121 | @keyframes 动画名称 { 122 | /* form 也代表了开始 */ 123 | 0% { 124 | 125 | } 126 | 50% { 127 | 128 | } 129 | ... 130 | /* to 也代表了结束 */ 131 | 100% { 132 | 133 | } 134 | } 135 | 136 | /* 使用动画 */ 137 | .test { 138 | animation-name: 动画名称; 139 | animation-duration: 持续时间(2s); 140 | /* 运动曲线,默认是ease */ 141 | animation-timing-function: ease; 142 | /* 何时开始(可以实现延迟执行) */ 143 | animation-delay: 1s; 144 | /* 重复多少次,默认一次,infinite 无限 */ 145 | animation-iteration-count: 1; 146 | /* 是否进行逆向播放 | 默认是 normal | 如果想的话,就写 alternate */ 147 | animation-direction: normal; 148 | /* 规定浏览器是否正在运行或者暂停 默认是running | pause 是暂停 */ 149 | animation-play-state: running; 150 | /* 规定动画结束后状态,保持 forwards | 回到原始状态 backwards */ 151 | animation-fill-mode: backwards; 152 | } 153 | 154 | /* 🔥 简写(只有前两个必须写) */ 155 | animation: 动画名称 持续运行时间 运动曲线 何时开始 播放次数 是否反方向 动画开始或者结束时候的状态 156 | ``` 157 | 158 | ## 🥤第四部分:2D,3D转换 159 | 160 | ### 1.2D转换 161 | 162 | > 转换(transform)CSS3中具有颠覆性的特征之一,可以实现元素的位移,旋转,缩放等效果 163 | 164 | ```css 165 | /* 🔥 移动,可以改变元素在页面中的位置,类似于定位(要有单位,px...) */ 166 | transform: translate(x, y); 167 | transform: translateX(n); 168 | transform: translateY(n); 169 | 170 | /* 🔥 transform的优点:不会影响到其他元素的位置,对行内元素没有效果,百分比单位是相对于自身元素来说的 */ 171 | 172 | /* 使用 transform 实现水平垂直居中 */ 173 | .test { 174 | position: absolute; 175 | top: 50%; 176 | left: 50%; 177 | transform: translate(-50%, -50%); 178 | } 179 | ``` 180 | 181 | --- 182 | 183 | > 旋转(rotate)是指让元素在二维平面内顺时针或者逆时针旋转 184 | 185 | ```css 186 | transform: rotate(度数) 187 | 188 | /* 旋转45度,如果写正值就是顺时针,如果 -45deg 就是逆时针 */x 189 | transform: rotate(45deg); 190 | 191 | /* 🔥 设置旋转中心点(缩放中心点也是这么设置) 默认中心点事元素中心(50%, 50%),单位可以是像素,也可以是方向名词(top,left...) */ 192 | transform-origin: x y; 193 | ``` 194 | 195 | --- 196 | 197 | > 缩放(scale)控制元素的放大和缩小 198 | 199 | ```css 200 | transform: scale(x, y); 201 | 202 | /* x, y 都放大两倍,简写是 transform: scale(2) */ 203 | transform: scale(2, 2) 204 | 205 | /* scale的优势:不会影响其他盒子,而且可以设置缩放的中心点 */ 206 | ``` 207 | 208 | --- 209 | 210 | ## 🥥第五部分:移动端rem适配布局 211 | 212 | ### 1.简介 213 | 214 | > 问题引入 215 | 216 | - 页面布局文字是否随着屏幕大小变化而变化? 217 | - 流式布局和flex布局主要针对宽度布局,那高度如何设置呢? 218 | - 怎么让屏幕发生变化的时候,元素宽度和高度等比缩放呢? 219 | 220 | ### 2.rem适配以及原理 221 | 222 | > rem是一个单位(root em),类似于em,em是父元素字体大小,不同的是rem的基准是相对于html元素的字体大小,因为html是唯一的,所以就实现了 在各个屏幕下的适配 223 | 224 | **js版本适配** 225 | 226 | ```js 227 | !(function(win, doc) { 228 | var htmlDom = doc.getElementsByTagName('html')[0]; 229 | var resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize'; 230 | var recalc = function() { 231 | var htmlWidth = doc.documentElement.clientWidth || doc.body.clientWidth; 232 | htmlDom.style.fontSize = htmlWidth / 10 + 'px'; 233 | }; 234 | 235 | if (!doc.addEventListener) return; 236 | win.addEventListener(resizeEvt, recalc, false); 237 | doc.addEventListener('DOMContentLoaded', recalc, false); 238 | }(window, document)); 239 | ``` 240 | 241 | ## 📚参考列表(致敬) 242 | 243 | - 日常工作 244 | - [博学谷](https://www.boxuegu.com/) -------------------------------------------------------------------------------- /docs/blog/3.CSS/3.预处理器和后处理器.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 3.预处理器和后处理器 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 3.CSS 8 | --- 9 | 10 | > 注意此处:内容不全,结构完整... 11 | 12 | > 什么都不说了,神器,都不知道那时候的人咋想的,能想出来这些东西,大大提高了 CSS的书写体验 13 | 14 | > 并且后来集成到前端工程化之中,使其成为其中重要的一环 15 | 16 | > 预处理器:代表是 less, sass, 等,为什么叫前处理器呢,因为它们都是将 .less 或者 .sass 的语法转为 .css,不会添加一些厂商前缀等操作 17 | 18 | > 后处理器:代表是 Postcss等,它会在 .css的基础上(注意,这里是.css的基础上,所以是后处理)添加一些厂商前缀等操作 19 | 20 | ## 🥭第一部分:Less(预处理器) 21 | 22 | ### 1.CSS的弊端 23 | 24 | - CSS是一种非程序式的语言,没有变量,函数,作用域等概念 25 | - CSS需要书写大量没有逻辑的代码,冗余度很高 26 | - CSS没有很好的计算能力(例如px转rem...) 27 | 28 | --- 29 | 30 | ### 2.Less基本使用 31 | 32 | > Less(Leaner Style Sheets)是一门CSS拓展语言(CSS预处理器),引入了变量,Mixin(混入),运算以及函数等功能 33 | 34 | - 安装less:npm install less -g 35 | - 编译less:easyless(vs code 插件),或者集成到webpack中进行编译 36 | 37 | ```css 38 | /* index.less */ 39 | 40 | /* 变量名不能包含特殊字符,不能以数字开头,并且大小写敏感 */ 41 | @color: pink; 42 | 43 | /* 嵌套 */ 44 | .test { 45 | .test1 { 46 | /* & 表示自己,写伪类的时候有用 */ 47 | &:hover { 48 | 49 | } 50 | } 51 | } 52 | 53 | /* Less运算 支持 加减乘除 */ 54 | @borderpx: 10px; 55 | div { 56 | width: 200px + @borderpx; 57 | height: (20px + @borderpx) / 2; 58 | } 59 | 60 | ``` 61 | 62 | ## 🧁第二部分:Sass(预处理器) 63 | 64 | ## 🧂第三部分:Postcss(后处理器) 65 | 66 | ## 📚参考列表(致敬) 67 | 68 | - [博学谷](https://www.boxuegu.com/) 69 | -------------------------------------------------------------------------------- /docs/blog/3.CSS/4.现代化CSS.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 4.现代化CSS 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 3.CSS 8 | --- 9 | 10 | > 如果你CSS掌握的不错,那么可以来更深的探索一下CSS了,下面的内容就是为你准备的 11 | 12 | > 内容我没有写全,但是一个结构是有的 13 | 14 | --- 15 | 16 | ## 🍀第一部分:CSS分层 & 面向对象 17 | 18 | **前言:CSS就是一个类,有继承,封装** 19 | 20 | 21 | --- 22 | 23 | ### 1.简介 24 | 25 | 为什么要有CSS分层,因为如果不分层的话,项目大的话,你的CSS会乱成一团的 26 | 27 | 28 | 29 | --- 30 | 31 | ### 2.BEM 32 | 33 | --- 34 | 35 | ### 3.ACSS(原子CSS) 36 | 37 | --- 38 | 39 | ### 4.其他分层思想 40 | 41 | --- 42 | 43 | 44 | ## 🎋第二部分:CSS Houdini 45 | 46 | --- 47 | 48 | ### 1.CSS Houdini介绍(现在还是没有应用上,了解的还是少) 49 | 50 | **CSS Houdini 提供了API, 能让程序员控制浏览器的重绘重排过程** 51 | 52 | 53 | 54 | 55 | 56 | 57 | --- 58 | 59 | ## 🌱第三部分:CSS与数学 60 | 61 | --- 62 | 63 | ### 1.CSS矩阵 64 | 65 | **概念(了解概念就行了,我现在也是不懂)** 66 | 67 | 68 | 69 | 70 | **学习矩阵有什么用么?** 71 | 72 | - 粗浅的举一个例子:transform 实现的原理,在浏览器中就是矩阵的应用 73 | 74 | 75 | 76 | 77 | --- 78 | 79 | ### 2.一些工具网站 80 | 81 | **2D矩阵 转 3D矩阵,可以开启硬件加速,调用GPU,提高性能,让GPU直接合成层,节省了重绘和重排(还是不太懂)** 82 | 83 | 84 | 85 | ## 📚参考列表(致敬) 86 | 87 | - [腾讯课堂](https://ke.qq.com) 88 | -------------------------------------------------------------------------------- /docs/blog/4.JavaScript/5.Underscore库源码分析.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 5.Underscore库源码分析 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 4.JavaScript 8 | --- 9 | 10 | > 等待书写中... 11 | 12 | **[网址](https://www.html.cn/doc/underscore/)** -------------------------------------------------------------------------------- /docs/blog/4.JavaScript/6.Lodashjs库源码分析.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 6.Lodashjs库源码分析 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 4.JavaScript 8 | --- 9 | 10 | > 等待书写中... 11 | 12 | **[网址](https://www.lodashjs.com/)** -------------------------------------------------------------------------------- /docs/blog/4.JavaScript/7.函数式编程.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 7.函数式编程 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 4.JavaScript 8 | --- 9 | 10 | > 等待书写中... 11 | 12 | --- 13 | 14 | ## 第一部分:函数式编程基础 15 | 16 | > **函数式编程不是用函数来编程,也不是传统的面向过程编程。** 主要是将复杂的函数 符合成简单的函数(计算理论,递归论,或者拉姆达演算)。运算过程尽量写成一系列嵌套的函数调用 17 | 18 | > 举例:React高阶组件 19 | 20 | --- 21 | 22 | ### 函数编程的基本概念 23 | 24 | - 函数是第一等公民 25 | - 只用表达式,不用语句 26 | - 没有副作用 27 | - 不修改状态 28 | - 引用透明(函数运行只靠参数) 29 | 30 | --- 31 | 32 | ### 核心概念 33 | 34 | - 纯函数 35 | - 函数的柯里化 36 | - 函数组合 37 | - Point Free 38 | - 声明式与命令式代码 39 | - 惰性求值 40 | 41 | --- 42 | 43 | ### 纯函数 44 | 45 | 对于相同的输入,永远会得到相同的输出,而且没有任何可观察的副作用,也不依赖外部环境的状态 46 | 47 | 鉴于这个特性能做什么? 48 | 49 | - 可以做缓存,因为第一次,我知道输入什么了,第二次就不用计算了,提高性能 50 | - 纯函数不仅可以有效降低系统的复杂度,还有很多很棒的特性,例如可缓存性 51 | 52 | --- 53 | 54 | ### 函数的柯里化 55 | 56 | - 传递给函数一部分参数来调用它,让它返回一个函数去处理剩下的参数 57 | - 作用就是解决了函数不纯的问题,将函数依赖的变量以参数的形式组合成 新的函数 58 | - 好处:事实上柯里化是一种预加载函数的方法,通过传递较少的参数,得到一个已经记住了这些参数的新函数。某种意义上讲,这是一种对参数的缓存,是一种非常高效的编写函数的方式 59 | 60 | --- 61 | 62 | ### 函数组合 63 | 64 | - 将需要层层嵌套的函数 通过一个组合函数包一层,使其使用起来更舒适 65 | 66 | --- 67 | 68 | ### Point Free 69 | 70 | - 把一些对象自带的方法转化成纯函数,不要命名转瞬即逝的中间变量 71 | - 例如:const f = str => str.toString().split('') 72 | 73 | ```js 74 | // 解决 75 | let toString = str => str.toString(); 76 | let split = str => str.split(); 77 | 78 | let fn = compost(split(' '), toString) 79 | 80 | fn(123) // [1, 2, 3] 81 | 82 | // 这种风格能帮助我们减少不必要的命名,让代码保持简洁和通用 83 | ``` 84 | 85 | --- 86 | 87 | ### 声明式与命令式代码 88 | 89 | - 命令式代码:我们通过编写一条又一条指令去让计算机执行一些动作,这其中会涉及到很多繁杂的细节 90 | - 声明式代码:通过写表达式的方式来声明我们想干什么,而不是通过一步一步的指示 91 | - 优缺点: 92 | - 函数式编程这种声明式的代码,对于无副作用的纯函数,我们完全可以不考虑函数内部是如何实现的,专注于编写业务代码,优化代码时,目光只需要集中在这些稳定坚固的函数内部即可 93 | - 不纯的函数式代码会产生副作用,或者依赖外部系统环境,使用他们的时候总要考虑这些不干净的副作用。在复杂的系统中,这对于程序员的心智来说是极大的负担 94 | 95 | --- 96 | 97 | ### 惰性求值,惰性函数 98 | 99 | - 在指令式语言中以下代码会按顺序执行,由于每个函数都有可能改动或者依赖于其内部的状态。因此必须顺序执行 100 | 101 | 102 | ```js 103 | // 求累加的函数(未使用惰性函数) 104 | function add(num) { 105 | let addVale = 0; 106 | for (let i = 0; i <= num; i++) { 107 | addVale += i 108 | } 109 | return addVale 110 | } 111 | 112 | add(2000000000) // 1s 113 | add(2000000000) // 1s 114 | add(2000000000) // 1s 115 | add(2000000000) // 1s 116 | 117 | // 总共4s 118 | ``` 119 | 120 | ```js 121 | // 求累加的函数(使用 惰性函数) 122 | function add(num) { 123 | let addVale = 0; 124 | for (let i = 0; i <= num; i++) { 125 | addVale += i 126 | } 127 | // 函数函数 128 | add = function () { 129 | addVale 130 | } 131 | return addVale 132 | } 133 | 134 | add(2000000000) // 1s 135 | add(2000000000) // 0s 136 | add(2000000000) // 0s 137 | add(2000000000) // 0s 138 | 139 | // 总共1s 140 | ``` 141 | 142 | --- 143 | 144 | ## 第二部分:更加专业的术语 145 | 146 | - 高阶函数 147 | - 尾递归优化 148 | - 闭包 149 | - 容器,Functor 150 | - 错误处理,Either,AP 151 | - IO 152 | - Monad 153 | 154 | --- 155 | 156 | ### 高阶函数 157 | 158 | - 本来我函数不能做很复杂的事情,你给我传过来一个复杂的函数,我一组合就能干很复杂的事情了 159 | - 将函数当参数,把传入的函数做一个封装,然后返回这个封装函数,达到更高程度的抽象。 160 | 161 | --- 162 | 163 | ### 尾递归优化 164 | 165 | --- 166 | 167 | ### 闭包 168 | 169 | - 在函数里面返回一个函数就会造成闭包,更深层次的我好像也知道,给忘了 170 | 171 | --- 172 | 173 | ## 第三部分:流行的函数式编程库 174 | 175 | - RxJS 176 | - cycleJs 177 | - **lodash.js**, lazy(惰性求值) 178 | - underscoreJS 179 | - ramadjs 180 | 181 | --- 182 | 183 | ### 1.RxJS(必学) 184 | 185 | - 诞生以来一直不温不火,单它的函数响应式编程(FRP)理念非常先进(函数式编程 FP) 186 | - 在RxJS中,所有的外部输入(用户输入,网络请求等等)都被试做一种事件流(这种机制特别适合处理游戏,上上下下) 187 | 188 | --- 189 | 190 | ### 2.lodash 191 | 192 | --- 193 | 194 | ### 3.underscoreJS(以后学) 195 | -------------------------------------------------------------------------------- /docs/blog/4.JavaScript/8.TypeScript.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 8.TypeScript 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 4.JavaScript 8 | --- 9 | 10 | > 注意此处:内容不全,待完善... 11 | 12 | > TypeScript 是 JavaScript 的超集 [中文网站...](https://www.tslang.cn/) 13 | 14 | --- 15 | 16 | ## 🐬第一部分:TypeScript介绍 17 | 18 | ### 1.安装 19 | 20 | - 前置:需要Node环境 21 | - 安装:npm i -g typescript 22 | - 验证:tsc -v(tsc是ts的编译器) 23 | 24 | ```sh 25 | # 生成package.json 26 | npm init 27 | 28 | # 生成配置信息(生成 tsconfig.json) 29 | tsc --init 30 | 31 | # 工程化(自动化的帮你buid ts 项目,方便学习) 32 | npm install webpack webpack-cli webpack-dev-server ts-loader typescript html-webpack-plugin 33 | ``` 34 | 35 | --- 36 | 37 | ## 🐌第二部分:TypeScript数据类型 38 | 39 | ### 1.基本数据类型 40 | 41 | ```js 42 | // JavaScript中也有的 43 | let age: Number = 10; 44 | let myName: String = '朱昆鹏'; 45 | let married: Boolean = true; 46 | let arr1: number[] = [1, 2, 3] 47 | let arr2: Array = [1, 2, 3] 48 | 49 | // 元组 50 | let yuanzu: [string, number] = ['朱昆鹏', 20]; 51 | 52 | // 枚举(性别,月份...) 53 | enum Gender { 54 | boy, 55 | girl 56 | } 57 | 58 | // 常量枚举 59 | const enum Colors { 60 | red, green, blue 61 | } 62 | let myColor = [Colors.red, Colors.blue] 63 | 64 | // 任意类型(就不会进行类型检查了) 65 | let root:any = document.getElementById('#app') 66 | root.style.color = 'red' 67 | 68 | // HTMLElement 69 | let element: (HTMLElement | null) = document.getElementById('#app'); 70 | element!.style.color = 'red'; // !非空断言 71 | 72 | // null undefined 是其他类型的子类型 73 | let x: number; 74 | x = 1; 75 | x = undefined; 76 | x = null; 77 | 78 | // never 代表不会出现的值 79 | // void 表示没有任何返回值(void 可以被复制给 null | undefined,never不能返回任何值) 80 | function voidFn(): void { 81 | console.log('void') 82 | } 83 | 84 | // Symbol 85 | const s1 = Symbol('key') 86 | const s2 = Symbol('key') 87 | 88 | // BigInt 89 | const max = BigInt(Number.MAX_SAFE_INTEGER); // 2 的 53次幂 - 1 90 | 91 | // 类型推导 92 | let mName = '朱昆鹏' // string 类型 93 | // 为什么一个 数字类型 可以用 .toString() 不是对象才有属性么,原因是因为 包装类,内部 new 了 94 | 95 | // 联合类型 96 | let zName: string | number; 97 | zName = '朱昆鹏' 98 | zName = 22; 99 | 100 | // 类型断言 101 | let kName: string | number | any 102 | // kName.toFixed(2) 会报错,因为不知道你是不是number类型,这时候可以用类型断言 103 | (kName as number).toFixed(2) 104 | // (kName as number as any) // 双重断言 105 | 106 | // 字面量类型 107 | const up:'Up' = 'up'; 108 | type Direction = 'Up'; 109 | function move(direction: Direction) {} 110 | move("Up"); // 可以实现枚举的效果 111 | 112 | // 类型字面量 113 | type My = { 114 | name: string, 115 | age: number 116 | } 117 | let myN: My = { 118 | name: "zkp", 119 | age: 22 120 | } 121 | ``` 122 | 123 | --- 124 | 125 | ### 2.函数和类 126 | 127 | ```js 128 | // 函数 129 | // ? 是可选参数 130 | function hello(name: string, age?: number, say: string = 'hello'): void { 131 | console.log(say + name + age) 132 | } 133 | 134 | // 函数的重载(函数参数不一样) 135 | 136 | // 类 137 | class Person { 138 | name: string; 139 | getName(): void { 140 | console.log('my name is zkp') 141 | } 142 | } 143 | 144 | let p1 = new Person() 145 | p1.getName(); 146 | ``` 147 | 148 | --- 149 | 150 | ## 📚参考列表 151 | 152 | - [慕课网课程...基于TypeScript从零重构axios](https://coding.imooc.com/class/330.html) 153 | - [珠峰教育](http://www.javascriptpeixun.cn/) -------------------------------------------------------------------------------- /docs/blog/4.JavaScript/9.Cocos2d.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 9.Cocos2d 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 4.JavaScript 8 | --- 9 | 10 | ## 第一章:三小时开发FlappyBird 11 | 12 | --- 13 | 14 | ### 1.Cocos的安装和IDE 15 | 16 | - [cocos2d 下载](https://www.cocos.com/products#CocosCreator) 17 | - [编辑器:vscode](https://code.visualstudio.com/) 18 | 19 | --- 20 | 21 | ### 2.场景,精灵,节点树 等名词 22 | 23 | - 场景(Scene):类似于 拍电影中的一个场景 24 | - 精灵(Sprite):相当于 电影中的一个个演员 25 | - 节点树(NodeTree):和网页的节点树有类似的感觉(就是在 cocos creator 里面可以操作节点的树形结构) 26 | - 节点(Node): 27 | - 画布(Canvas): 28 | - 资源(Assets): 29 | 30 | --- 31 | 32 | ### 3.节点和组件 33 | 34 | > 我给一个节点设置,让它当Lable组件,这样可以,设置让它当精灵(Sprite)组件,这也可以,这就是他们之间的关系。这个对于有编程经验的我来讲,还是比较好理解的。(例如Button 是由 按钮精灵图 + 按钮组件 组合而成的) 35 | 36 | - Button节点简单使用 37 | - 节点右键:创建一个UI节点 --> 创建一个Button组件 38 | - Transition 可以选择 COLOR 可以设置各个情况下按钮的点击状态 39 | 40 | --- 41 | 42 | ### 4.第一个脚本 43 | 44 | - 创建脚本:在 Assets面板,Script文件夹下 右键创建 Ts脚本文件 45 | 46 | --- 47 | 48 | ### 5.帧和函数(基础知识普及) 49 | 50 | - 帧:FPS 影像动画中最小单位的单幅影像画面 51 | - 函数:实现某一种功能的代码块 52 | 53 | ```javascript 54 | // 每刷新一帧页面 都会调用这个函数 55 | update (dt: number) { 56 | console.log('dt', dt) 57 | } 58 | ``` 59 | 60 | --- 61 | 62 | ### 6.制作小鸟翅膀 63 | 64 | ```javascript 65 | const {ccclass, property} = cc._decorator; 66 | 67 | @ccclass 68 | export default class NewClass extends cc.Component { 69 | 70 | @property(cc.Label) 71 | label: cc.Label = null; 72 | 73 | // 小鸟图片1 74 | @property(cc.Sprite) 75 | bird1: cc.Sprite = null; 76 | 77 | // 小鸟图片2 78 | @property(cc.Sprite) 79 | bird2: cc.Sprite = null; 80 | 81 | // 小鸟图片3 82 | @property(cc.Sprite) 83 | bird3: cc.Sprite = null; 84 | 85 | // LIFE-CYCLE CALLBACKS: 86 | 87 | // onLoad () {} 88 | 89 | time: number = 10; // 距离上次切换显示小鸟,流逝的时间 90 | playSeq: number = 0; // 播放顺序 91 | 92 | start () { 93 | 94 | } 95 | 96 | /** 97 | * 小鸟动画播放函数 98 | * @param { Node } startNode 会默认全部取消,然后需要传入需要播放的节点 99 | */ 100 | seditionReset(startNode: any) { 101 | this.bird1.node.active = false 102 | this.bird2.node.active = false 103 | this.bird3.node.active = false 104 | startNode.node.active = true; 105 | } 106 | 107 | // 每刷新一帧页面 都会调用这个函数 108 | update (dt: number) { 109 | 110 | this.time += dt 111 | 112 | if (this.time > 0.5) { 113 | if (this.bird1.node.active) { 114 | this.seditionReset(this.bird2) 115 | this.playSeq = 0; 116 | } else if (this.bird2.node.active && this.playSeq == 0) { // 正向播放 117 | this.seditionReset(this.bird3) 118 | } else if (this.bird2.node.active && this.playSeq == -1) { // 逆向播放 119 | this.seditionReset(this.bird1) 120 | } else if (this.bird3.node.active) { 121 | this.seditionReset(this.bird2) 122 | this.playSeq = -1; 123 | } 124 | this.time = 0; 125 | } 126 | } 127 | } 128 | ``` 129 | 130 | --- 131 | 132 | ## 第三章:物理弹球 133 | 134 | > 这一章主要是讲 cocos的物理引擎 135 | 136 | ### 1.物理简介 137 | 138 | 139 | 140 | 141 | -------------------------------------------------------------------------------- /docs/blog/5.jQuery/1.jQuery基础.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 1.jQuery基础 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 5.jQuery 8 | --- 9 | 10 | > 注意此处:内容不全,结构混乱,待重构... 11 | 12 | --- 13 | 14 | ## jQuery介绍 15 | 16 | ### 1.什么是jQuery 17 | 18 | - jQuery其实就是一堆的JS函数(JS库),也是普通的JS而已,不要畏惧! 19 | - 特点:写得少,做得多 20 | 21 | --- 22 | 23 | ### 2.为什么要用jQuery 24 | 25 | - jQuery面向用户良好的设计,使得在使用过程中彻底解放了你记忆中的原生操作DOM的接口 26 | - jQuery中大量可复用的函数和发展过程中常年积累下来的插件库,可以极大的简化JavaScript开发 27 | - jQuery在搬书以上并没有复杂交互的网站中大部分使用,因为它们仅仅是需要兼容一些低版本浏览器,又要呈现出炫酷的效果,这时候使用jQuery更好 28 | - jQuery改变了数百万人编写JavaScript的方式,虽然现在组件化,工程化流行,但不要忘掉jQuery,面试中还是会问到的 29 | 30 | 31 | --- 32 | 33 | ### 3.jQuery学习注意点 34 | 35 | - jQuery知识辅助工具,不能完全替代JS,原生,jQuery二者经常并存 36 | - jQuery很庞杂,要会使用,但应重学思想 37 | - jQuery方法很多,按需学习,把常用的有价值的学会 38 | - jQuery API可以先用现查 39 | 40 | --- 41 | 42 | ## 基本使用 43 | 44 | ### 1.$() 使用 45 | 46 | - jQuery CDN引入:https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js 47 | 48 | ```js 49 | // $ === jQuery // true 50 | 51 | $('div ul li:last') // 选择元素(传CSS选择器,规则也可以) 52 | 53 | $(null) // 不会报错,这是因为jQuery内部有容错机制 54 | 55 | $(dom) // 传原生DOM,就会变成 jQuery DOM 56 | 57 | $(fn) // 传递一个函数,当DOM加载完毕之后执行(相当于一个事件函数)相当于 $(document).rendy(function () { }) 58 | 59 | ``` 60 | 61 | **jQuery精髓** 62 | 63 | - 精髓一:封闭作用域(IIEF) 64 | 65 | ```js 66 | (function () { 67 | fucntion jQuery (selector) { 68 | return new jQuery.prototype.init(selector) 69 | } 70 | jQuery.prototype.init = funciton (selector) { 71 | // 选出 DOM 并且包装成jQuery对象,并返回 72 | } 73 | 74 | jQuery.prototype.css = function () { 75 | 76 | // 精髓二:链式调用 77 | return this 78 | } 79 | 80 | 81 | window.$ = window.jQuery = jQuery 82 | 83 | })() 84 | ``` 85 | 86 | --- 87 | 88 | ### 2.选择元素 get,eq,find,filter... 89 | 90 | ```html 91 | 92 | 93 | 94 | 95 | 96 | 97 | 选择元素 98 | 99 | 100 |
101 |
1
102 |
2
103 |
3
104 |
105 | 106 | 107 | ``` 108 | 109 | ```js 110 | 111 | // get() | 返回原生DOM对象 112 | $('.demo').get() // 返回所有选中的 原生DOM对象 113 | $('.demo').get(0) // 选中第一个 原生DOM对象 114 | $('.demo').get(-1) // 选择倒数第一个 原生DOM对象 115 | 116 | // get() 源码实现 117 | jQuery.prototype.get = function (num = 0) { 118 | num >= 0 ? return this[num] : return this[num + this[num]] 119 | } 120 | 121 | 122 | // eq() | 返回jQuery对象(和 get() 对比看) 123 | $('.demo').eq() // 返回所有选中的 jQuery对象 124 | $('.demo').eq(0) // 选中第一个 jQuery对象 125 | $('.demo').eq(-1) // 选择倒数第一个 jQuery对象 126 | 127 | // eq() 源码实现 128 | jQuery.prototype.eq = function (num = 0) { 129 | let dom = num >= 0 ? this[num] : this[num + this[num]] 130 | return $(dom) // 返回jQuery对象 131 | } 132 | 133 | 134 | // find() | 查找 经常使用在链式调用中 🔥 135 | $('.wrapper') 136 | .css({color: 'red'}) 137 | .find('.demo') 138 | .eq(0) 139 | .css({color: 'greed'}) // 查找 第一个 wrapper下面 第一个 demo 并设置css 140 | // ❣️注意:find() 会调用前一个的 prevObject(这个保存的是上一次链式调用的jQuery对象) 节省了jQuery的性能 141 | 142 | 143 | // filter() | 过滤 144 | $('.wrapper') 145 | .find('.demo') 146 | .filter('.filt') // 就能筛选到特定的一项了,也能传函数,参数是 index, ele ,其他的都一样,true 也是,false 不返回 147 | 148 | 149 | // has() | 150 | $('demo').has('wrapper') 151 | 152 | 153 | // is() | 154 | 155 | ``` 156 | -------------------------------------------------------------------------------- /docs/blog/5.jQuery/2.jQuery第三方库.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 2.jQuery第三方库 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 5.jQuery 8 | --- 9 | 10 | # 2.jQuery第三方库 11 | 12 | > 等待书写中... -------------------------------------------------------------------------------- /docs/blog/5.jQuery/3.jQuery源码解析以及实现.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 3.jQuery源码解析以及实现 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 5.jQuery 8 | --- 9 | 10 | # 3.jQuery源码解析以及实现 11 | 12 | > 等待书写中... -------------------------------------------------------------------------------- /docs/blog/6.Vue/1.MVVM框架绪论.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 1.MVVM框架绪论 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 6.Vue 8 | --- 9 | 10 | > 了解MVVM框架产生的背景,有助于掌握未来的发展,也能渐进的感受技术的演进,这样对技术的探索是很有帮助的 11 | 12 | ## 🐣第一部分:MVVM的前世今生 13 | 14 | ### 1.MVC,MVP,MVVM介绍 15 | 16 | - MVC:传统的前后端不分离项目 17 | - MVP:单向的 View - Presenter - Model 18 | - MVVM:View - ViewModel - Model 19 | 20 | --- 21 | 22 | ### 2.MVVM的起源 23 | 24 | MVVM是 Model - ViewModel - View 的简写。微软的WPF带来了新的技术体验,例如Silverlight,音频,视频,3D,动画,这导致了软件UI层更加细节化,可定制化。同时,在技术层面,WPF也带来了诸如 Binding, Routed, Events, Command, DataTemplate, ControlTemplate等新特性 25 | 26 | MVVM框架的由来便是MVP(View - Presenter - Model)模式 与 WPF结合起来的应用方式,演变过来的一种新型架构框架。他立足于原有的MVP框架,并把WPF的新特性融合进去,以应对客户日益复杂的需求变化 27 | 28 | 拓展:WPF做了什么:将 View 和 Presenter 做了双向 29 | 30 | --- 31 | 32 | ### 3.MV*框架的演变 33 | 34 | - [dojo](https://dojotoolkit.org/) 35 | - jQuery:无可替代,操作DOM服务(链式调用,等思想我们可以学习,都很经典) 36 | - backbone:函数式编程,让代码MVC,解决代码又丑又烂 37 | - splie && canjs:也是MVC,但是加了绑定的思想 38 | - 第一个MVVM框架:O8年出现,[Knockout官网](https://knockoutjs.com/) 39 | - batman.js && emben 40 | - angler && vue && react 41 | - meteor:前后端统一框架 42 | 43 | --- 44 | 45 | ### 4.对MVMM的思考 46 | 47 | - MVC,MVP,MVVM 48 | - DI,IOC,AOP,OOP 49 | - ORM,RESTful 50 | 51 | > 框架是过眼云烟,思想才是永恒 52 | 53 | --- 54 | 55 | 56 | 57 | 58 | -------------------------------------------------------------------------------- /docs/blog/6.Vue/10.Vue3.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 10.Vue3 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 6.Vue 8 | --- 9 | 10 | # 9.Vue3 11 | 12 | ### Vue3新增了什么 13 | 14 | - 性能(比vue2快了2倍) 15 | - tree shaking(按需编译代码) 16 | - composition apu (类似 hooks 未来) 17 | - ts support(typescript 面向未来) 18 | - custom renderer api(自定义渲染) 19 | 20 | --- 21 | 22 | ### 起步 23 | 24 | - 体验 25 | - vue-cli: 26 | - webpack:vue-next-webpack-preview 27 | - vite: 28 | 29 | 30 | ```sh 31 | # 32 | vue create vue3-demo 33 | 34 | # 35 | vue add vue-next 36 | ``` -------------------------------------------------------------------------------- /docs/blog/6.Vue/5.VueRouter源码解析以及实现.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 5.VueRouter源码解析以及实现 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 6.Vue 8 | --- 9 | 10 | > 注意此处:等待重构 11 | 12 | --- 13 | 14 | ## 之前的部分,等待重构之后删除 15 | 16 | ### 1.路由注册(还是听不懂,以后再来) 17 | 18 | **Vue插件注册原理** 19 | 20 | ```js 21 | Vue.use(VueRouter) // Vue.use是核心,我们来看下源码 22 | ``` 23 | 24 | ```js 25 | /* @flow */ 26 | import { toArray } from '../util/index' 27 | 28 | export function initUse (Vue: GlobalAPI) { 29 | Vue.use = function (plugin: Function | Object) { 30 | const installedPlugins = (this._installedPlugins || (this._installedPlugins = [])) 31 | if (installedPlugins.indexOf(plugin) > -1) { 32 | return this 33 | } 34 | 35 | // additional parameters 36 | const args = toArray(arguments, 1) 37 | args.unshift(this) 38 | if (typeof plugin.install === 'function') { 39 | plugin.install.apply(plugin, args) 40 | } else if (typeof plugin === 'function') { 41 | plugin.apply(null, args) 42 | } 43 | installedPlugins.push(plugin) 44 | return this 45 | } 46 | } 47 | 48 | ``` 49 | 50 | 51 | **路由注册实现流程** 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /docs/blog/6.Vue/6.Vuex源码解析以及实现.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 6.Vuex源码解析以及实现 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 6.Vue 8 | --- 9 | 10 | # 6.Vuex源码解析以及实现 11 | 12 | > 等待书写中... -------------------------------------------------------------------------------- /docs/blog/6.Vue/7.Axios源码解析以及实现.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 7.Axios源码解析以及实现 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 6.Vue 8 | --- 9 | 10 | # 7.Axios源码解析以及实现 11 | 12 | > 注意此处:等待重构 13 | 14 | **🔥备注:[XMLHttpRequest...MDN教程](https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest)** 15 | 16 | ## 第一部分:项目构建 17 | 18 | ### 1.需要做的 19 | 20 | - 在浏览器端使用XMLHttpRequest对象通讯 21 | - 支持 Promise API 22 | - 支持 请求和响应拦截器 23 | - 支持 请求数据和响应数据的转换 24 | - 支持 请求的取消 25 | - JSON数据自动转换 26 | - 客户端防止 XSRF 27 | 28 | --- 29 | 30 | ### 2.初始化项目 31 | 32 | - 脚手架:git clone https://github.com/alexjoverm/typescript-library-starter.git 33 | - 这个脚手架集成的优秀工具 34 | - 使用 RollupJS 帮助我们打包 35 | - 使用 Prettier 和 TSLint 帮助我们格式化代码以及保证代码风格一致性 36 | - 使用 TypeDoc 帮助我们自动生成文档并部署到GitHub pages 37 | - 使用 Jest 帮助我们做单元测试 38 | - 使用 Commitizen 帮助我们生成规范化的提交注释 39 | - 使用 Semantic release 帮助我们管理版本和发布 40 | - 使用 husky 帮助我们更简单的使用 Git Hooks 41 | - 使用 Conventional changelog 帮助我们通过代码提交信息 自动生成 change log 42 | 43 | --- 44 | 45 | ### 3.创建入口文件 46 | 47 | **我们在src文件夹下,建立 index.ts 文件作为入口文件** 48 | 49 | ```js 50 | import { AxiosRequestConfig } from './types/index' 51 | 52 | function axios(config: AxiosRequestConfig) { 53 | // TODE 54 | } 55 | 56 | export default axios 57 | ``` 58 | 59 | **再定义一个 types文件夹 管理我们的类型** 60 | 61 | ```js 62 | // 这个文件放着公共接口类型(src/types/index.ts) 63 | 64 | export type Method = 'get' | 'GET' | 'post' | 'POST' | 'delete' | 'DELETE' | 'head' | 'HEAD' | 'OPTIONS' | 'options' | 'put' | 'PUT' | 'PATCH' | 'patch' 65 | 66 | export interface AxiosRequestConfig { 67 | url: string 68 | method?: Method 69 | data?: any 70 | param?: any 71 | } 72 | ``` 73 | 74 | --- 75 | 76 | > 本着模块化的思想,我们抽离出来 xhr.ts 文件 77 | 78 | ```js 79 | import { AxiosRequestConfig } from './types/index' 80 | 81 | export default function xhr(config: AxiosRequestConfig): void { 82 | const { data = null, url, method = 'get'} = config 83 | 84 | const request = new XMLHttpRequest() 85 | request.open(method.toUpperCase(), url, async: true) 86 | request.send(data) 87 | } 88 | ``` 89 | 90 | --- 91 | 92 | ## 第二部分:axios基础功能实现 93 | 94 | 95 | --- 96 | 97 | ## 📚参考列表 98 | 99 | - [慕课网课程...基于TypeScript从零重构axios](https://coding.imooc.com/class/330.html) -------------------------------------------------------------------------------- /docs/blog/6.Vue/9.项目 开发Ant Design Pro Vue.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 9.项目 开发Ant Design Pro Vue 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 6.Vue 8 | --- 9 | 10 | # 8.1项目 开发Ant Design Pro Vue 11 | 12 | > 注意:此篇内容可能要被删除... 13 | 14 | > 原因是结构混乱,不适合放到这个版块下 15 | 16 | --- 17 | 18 | ### 1.使用Vue-cli3.0快速搭建环境 19 | 20 | 21 | 22 | 安装其他内容:npm i ant-design-vue moment 23 | 24 | ```js 25 | import Antd from "ant-design-vue"; 26 | import "ant-design-vue/dist/antd.less"; 27 | Vue.use(Antd); 28 | 29 | // 这里会报一个错,说的是引入 .less 的文件还需要一些配置啥的吧,这样就引出了下面要整的 自定义webpack配置 30 | ``` 31 | 32 | --- 33 | 34 | ### 2.如何自定义Webpack和Babel配置 35 | 36 | **自定义webpack配置(vue.config.js)** 37 | 38 | ```js 39 | // 新建 vue.config.js 40 | module.exports = { 41 | css: { 42 | loaderOptions: { 43 | less: { 44 | javascriptEnabled: true, 45 | }, 46 | css: { 47 | // 这里的选项会传递给 css-loader 48 | }, 49 | postcss: { 50 | // 这里的选项会传递给 postcss-loader 51 | } 52 | } 53 | } 54 | } 55 | ``` 56 | 57 | - [本问题 vue-cli 自定义配置网址](https://cli.vuejs.org/zh/config/#css-loaderoptions) 58 | - [问题解决方案地址](https://github.com/ant-design/ant-motion/issues/44) 59 | 60 | --- 61 | 62 | **Babel配置** 63 | 64 | - 我们可以通过 .babel 来转义ES6中识别不了的语法,也可以 通过一个插件来实现 UI组件的按需加载 65 | 66 | - 安装:npm i babel-plugin-import --dev 67 | 68 | ```js 69 | module.exports = { 70 | presets: ["@vue/app"], 71 | plugins: [ 72 | [ 73 | "import", 74 | { libraryName: "ant-design-vue", libraryDirectory: "es", style: true } 75 | ] 76 | ] 77 | }; 78 | 79 | ``` 80 | 81 | - [babel按需加载 配置](https://vue.ant.design/docs/vue/use-with-vue-cli-cn/) 82 | 83 | ```js 84 | // 按需加载 代码效果 示例(不用引入CSS了,因为这个插件帮忙引入了) 85 | import { Button, Switch } from "ant-design-vue"; 86 | Vue.use(Button); 87 | Vue.use(Switch); 88 | 89 | ``` 90 | 91 | --- 92 | 93 | **拓展:使用 Prettier格式化代码,例如 给我们自动双引号变单引号,等操作** 94 | 95 | 96 | - [学习笔记](https://www.jianshu.com/p/5f7dbffc257e) 97 | - [官网](https://prettier.io/docs/en/options.html?spm=a2c4e.11153940.blogcont422690.11.5d0b5721zZ3CkZ) 98 | 99 | --- 100 | 101 | ### 3.如何设计一个高拓展性的路由? 102 | 103 | **示例路由** 104 | 105 | ```js 106 | 107 | import Vue from "vue"; 108 | import Router from "vue-router"; 109 | 110 | Vue.use(Router); 111 | 112 | export default new Router({ 113 | mode: "history", 114 | base: process.env.BASE_URL, 115 | routes: [ 116 | { 117 | path: "/user", // 用户相关的路由 118 | children: [ 119 | { 120 | path: '/user/login', // 登录 121 | name: 'login', 122 | component: () => { 123 | import(/* webpackChunkName: "user" */ "./views/User/Login.vue") 124 | } 125 | }, 126 | { 127 | path: '/user/register', // 注册 128 | name: 'register', 129 | component: () => { 130 | import(/* webpackChunkName: "user" */ "./views/User/Register.vue") 131 | } 132 | } 133 | ] 134 | } 135 | ] 136 | }); 137 | 138 | ``` 139 | 140 | --- 141 | 142 | **🔥加载提示库(防止路由切换白屏时间太长的问题,增加友好提示)** 143 | 144 | - 安装:npm i nprogress 145 | 146 | ```js 147 | import NProgress from 'nprogress' 148 | import 'nprogress/nprogress.css' 149 | 150 | // Vue路由守卫 151 | router.beforeEach( (to, form, next) => { 152 | NProgress.start() 153 | next() 154 | }) 155 | 156 | router.afterEach( () => { 157 | NProgress.done() 158 | }) 159 | 160 | ``` 161 | 162 | -------------------------------------------------------------------------------- /docs/blog/7.React/1.React基础.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 1.React基础 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 7.React 8 | --- 9 | 10 | > 等待书写中... 11 | ## 🍡第一部分:React初探 12 | 13 | ### 1.React简介 14 | 15 | - react是由Facebook在2013年5月推出的一个前端框架,带来一种函数式编程风格 16 | - react比vue更灵活一些,Vue比react多一些api,使用起来更简单 17 | 18 | --- 19 | 20 | ### 2.React开发环境搭建 21 | 22 | **使用脚手架工具来生成** 23 | 24 | - 前置条件:有Node环境 25 | - 安装React脚手架:npm i create-react-app -g 26 | - 生成工程:create-react-app my-app 27 | 28 | --- 29 | 30 | ### 3.工程目录文件简介 31 | 32 | - public 33 | - manifest.json 给PWA使用 34 | - src 工程文件夹 35 | - index.js 程序入口文件 36 | - App.js 组件 37 | - App.test.js: 测试文件 38 | 39 | --- 40 | 41 | ### 4.React中的组件 42 | 43 | ```js 44 | // 这就是一个组件,为什么要引入 React呢,因为下面的 div 是JSX的标签,需要引入react进行编译 45 | import React from 'react'; 46 | 47 | function App() { 48 | return ( 49 |
50 | Hello 朱昆鹏 51 |
52 | ); 53 | } 54 | 55 | export default App; 56 | ``` 57 | 58 | --- 59 | 60 | 61 | ### 5.最基础的JSX语法 62 | 63 | ```js 64 | // 自定义标签 JSX 要求以大写字母开头 65 | ``` 66 | 67 | 68 | --- 69 | 70 | ## 🥗第二部分:React基础精讲 71 | 72 | ### 1.使用React编写ToolList功能 73 | 74 | ```js 75 | import React, { Component, Fragment } from 'react' 76 | 77 | class TooLlist extends Component { 78 | 79 | constructor(props) { 80 | super(props) 81 | // 组件的状态 82 | this.state = { 83 | inputValue: '', 84 | list: ['学习英文', '学习React'] 85 | } 86 | } 87 | 88 | render() { 89 | return ( 90 | 91 |
92 | 96 | 97 |
98 |
    99 | { 100 | // 我去,这种写法就是比 v-for 要灵活一些 101 | this.state.list.map( (item, index) => { 102 | return ( 103 |
  • {item} 106 |
  • 107 | ) 108 | }) 109 | } 110 |
111 |
112 | ) 113 | } 114 | 115 | // 输入框绑定事件(感觉Vue的双向数据绑定很香) 116 | handleInputChang(e) { 117 | this.setState({ 118 | inputValue: e.target.value 119 | }) 120 | } 121 | 122 | // 按钮提交方法 123 | handleButtonClick() { 124 | this.setState({ 125 | list: [...this.state.list, this.state.inputValue], 126 | inputValue: '' 127 | }) 128 | } 129 | 130 | // ToolList Item 删除事件 131 | tooLlistDelete(index) { 132 | // immutable | state 不允许我们直接做任何的改变 133 | const list = [...this.state.list] 134 | list.splice(index, 1) 135 | 136 | this.setState({ 137 | list: list 138 | }) 139 | } 140 | } 141 | 142 | export default TooLlist 143 | ``` 144 | 145 | --- 146 | 147 | ### 2.JSX语法细节补充 148 | 149 | > jsx(语法糖,浏览器不识别,会被转换) 最后会通过 babel 转换为 createElement 150 | 151 | - 用 className 代替 class 书写类名 152 | - 用 {//} {/***/} 书写注释(虽然我用之前的写法也没问题吧) 153 | - label 标签中用的 for 代替 htmlFor 154 | 155 | --- 156 | 157 | ### 3.拆分组件与组件之间的传值 158 | 159 | 160 | 161 | 162 | --- 163 | 164 | ## 🍝第三部分:React高级内容 165 | 166 | --- 167 | 168 | ## 📚参考列表(致敬) 169 | 170 | - [慕课网课程-React16.4开发简书项目从零基础入门到实战](https://coding.imooc.com/class/229.html) 171 | -------------------------------------------------------------------------------- /docs/blog/7.React/2.React全家桶.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 2.React全家桶 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 7.React 8 | --- 9 | 10 | > 等待书写中... -------------------------------------------------------------------------------- /docs/blog/8.移动端/1.移动端H5页面适配.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 0.移动端开发绪论 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 8.移动端 8 | --- 9 | 10 | > 适配采用 rem 的方案 11 | 12 | ## 🍇第一部分:rem代码 和 基础示例 13 | 14 | ### rem.js 15 | 16 | ```js 17 | !function(win, doc) { 18 | var htmlDom = doc.getElementsByTagName("html")[0]; 19 | var resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize'; 20 | var recalc = function() { 21 | var htmlWidth = doc.documentElement.clientWidth || doc.body.clientWidth; 22 | htmlDom.style.fontSize = htmlWidth / 10 + 'px'; 23 | } 24 | 25 | if (!doc.addEventListener) return; 26 | win.addEventListener(resizeEvt, recalc, false); 27 | doc.addEventListener('DOMContentLoaded', recalc, false); 28 | }(window, document); 29 | ``` 30 | 31 | --- 32 | 33 | ### html示例 34 | 35 | ```html 36 | 37 | 38 | 39 | 40 | 41 | 42 | Document 43 | 55 | 56 | 57 | 58 | 59 |
60 | 61 | 62 | 63 | 64 | 65 | ``` 66 | 67 | --- 68 | 69 | ## 🍓第二部分:rem用的不舒服的地方,和解决方法 70 | 71 | > 感觉用的最不舒服的,就是需要计算rem的值,这点非常的不舒服,但是经过我不断的采坑,发现有两个好好用的东西,分享给大家 72 | 73 | ### vscode 插件 74 | 75 | - 插件名称叫:cssrem,是一个在书写代码的时候,将px转为rem的工具,我用了一段时间,感觉还好(虽然后期有更好的方案了) 76 | 77 | 78 | 79 | --- 80 | 81 | ### webpack postcss 插件 high-pxtorem【🔥 推荐】 82 | 83 | 这个可以在webpack编译的时候,将 px 转为 rem,我可以像写普通代码一样,不用太关心适配问题了。 84 | 85 | 我现在在用这个,但是需要你有一定的 webpack 基础才行,但是用起来就没事了,要是没有一定的基础,可能都配置不起来 86 | 87 | [high-pxtorem npm地址](https://www.npmjs.com/package/high-pxtorem) 88 | -------------------------------------------------------------------------------- /docs/blog/8.移动端/2.移动端H5手机内调试.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 2.移动端H5手机内调试 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 8.移动端 8 | --- 9 | 10 | > 移动端H5手机内调试 神器:vconsole 11 | 12 | ## 🥞第一部分:vconsole使用 13 | 14 | ### 基本使用 15 | 16 | ```html 17 | 18 | 19 | 22 | ``` 23 | 24 | - [vcondole npm 地址](https://www.npmjs.com/package/vconsole) 25 | 26 | **功能:** 27 | 28 | - 查看 console 日志 29 | - 查看网络请求 30 | - 查看页面 element 结构 31 | - 查看 Cookies、localStorage 和 SessionStorage 32 | - 手动执行 JS 命令行 33 | - 自定义插件 34 | 35 | --- 36 | 37 | ### 效果展示(点击 右下角 绿色按钮 👀) 38 | 39 | 42 | 43 | --- -------------------------------------------------------------------------------- /docs/blog/8.移动端/3.Flutter.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 3.Flutter 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 8.移动端 8 | --- 9 | 10 | > 等待书写中... -------------------------------------------------------------------------------- /docs/blog/8.移动端/4.React-Native.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 4.React-Native 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 8.移动端 8 | --- 9 | 10 | > 等待书写中... -------------------------------------------------------------------------------- /docs/blog/8.移动端/5.移动端原生开发/img/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhukunpenglinyutong/notes/16be24eb6144963fdce7809ffed2d7fbd124350b/docs/blog/8.移动端/5.移动端原生开发/img/1.png -------------------------------------------------------------------------------- /docs/blog/8.移动端/5.移动端原生开发/img/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhukunpenglinyutong/notes/16be24eb6144963fdce7809ffed2d7fbd124350b/docs/blog/8.移动端/5.移动端原生开发/img/2.png -------------------------------------------------------------------------------- /docs/blog/8.移动端/5.移动端原生开发/img/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhukunpenglinyutong/notes/16be24eb6144963fdce7809ffed2d7fbd124350b/docs/blog/8.移动端/5.移动端原生开发/img/3.png -------------------------------------------------------------------------------- /docs/blog/8.移动端/6.Weex.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 6.Weex 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 8.移动端 8 | --- 9 | 10 | ## 第一部分: 11 | 12 | ### 1.weex环境搭建 13 | 14 | 1.安装Node 15 | 2.npm install -g weex-toolkit 16 | 3.weex init 项目名称 17 | 18 | --- 19 | 20 | ### 2. 21 | 22 | --- 23 | 24 | ## 第二部分:weex内建组件 25 | 26 | ### 1.a组件 27 | 28 | > weex中a组件定义了指向weex页面打包后的一个JS地址 29 | 30 | > a组件中无法添加文本,需要在其中加上test组件才能添加文本 31 | 32 | > a组件支持除了自己外的所有weex组件作为子组件 33 | 34 | > a组件支持所有通用样式 35 | 36 | > 请不要为a组件添加click事件 37 | 38 | --- 39 | 40 | ### 2.web组件 41 | 42 | > web组件用于在页面中嵌入一张页面,src用以指定资源地址 43 | 44 | > 不支持任何子组件 45 | 46 | > pagestart web组件开始加载时执行 47 | > pagefinsh web组件完成加载时执行 48 | > error web组件加载错误时执行 49 | 50 | --- 51 | 52 | ### 3.webview组件 53 | 54 | > 一系列web组件的操作接口,可以通过调用this.$refs.el 来获取元素的引用 55 | 56 | > goBack(webElement) 加载历史记录里的前一个资源地址 57 | > goForward(webElement) 加载历史记录里的下一个资源地址 58 | > reload(webElement) 刷新当前页面 59 | 60 | --- 61 | 62 | ### 4.list组件 63 | 64 | > list组件是垂直列表功能的核心组件 65 | 66 | > cell组件 列表中的子项,类似于HTML中的ul和li的关系 67 | 68 | > refresh组件 给列表添加下拉刷新的功能 69 | 70 | > loadmore事件 loadmoreoffset{number} 触发事件所需距离 71 | 72 | 73 | --- 74 | 75 | ## 第三部分: 76 | 77 | --- 78 | 79 | ## 第四部分:自己写的一些组件 80 | 81 | ### 1.iOS滑动删除组件(方案) 82 | 83 | > 这里原来打算抽离成组件的,但是发现不好拓展,因为每个人要求滑动的情况可能不同,所以这里抽离成方案更为合适 84 | 85 | ```html 86 |
87 |
88 | 89 | 90 | 91 | 92 |
93 | 删除 94 |
95 |
96 |
97 | ``` 98 | 99 | ```js 100 | const animation = weex.requireModule('animation'); 101 | 102 | export default { 103 | data() { 104 | return { 105 | currentIndex: -1, //记录当前左滑出来的条目下标 106 | } 107 | }, 108 | methods: { 109 | handleSwipe (e, index) { 110 | e.direction == "left" 111 | ? this.goLeft(index) 112 | : this.goRight(index); 113 | }, 114 | goLeft(index) { 115 | let itemEl = this.$refs.itemDev[index]; 116 | //第二左滑条目与前一次左滑条目相同时,不处理 117 | if (index == this.currentIndex){ 118 | return; 119 | } 120 | 121 | //当前有划出的条目的时候,左滑其他条目,当前的条目归位, 122 | if (this.currentIndex != -1){ 123 | this.goRight(this.currentIndex); 124 | } 125 | 126 | //左滑当前条目 127 | if (this.currentIndex != index){ 128 | animation.transition(itemEl,{ 129 | styles: { 130 | transform: 'translate(-160px, 0px)', 131 | transformOrigin: 'center center' 132 | }, 133 | duration: 200, //ms 134 | timingFunction: 'linear', 135 | delay: 0 //ms 136 | },function () {}); 137 | this.currentIndex = index; 138 | } 139 | }, 140 | //time是动画时间,给个默认值 200毫秒,不传就表明这个值为200毫秒 141 | goRight(index,time = 200) { 142 | let itemEl = this.$refs.itemDev[index]; 143 | animation.transition(itemEl,{ 144 | styles: { 145 | transform: 'translate(0px, 0px)', 146 | transformOrigin: 'center center' 147 | }, 148 | duration: time, //动画时间 149 | timingFunction: 'linear',//线性运动 150 | delay: 0 //ms 151 | },function () {}); 152 | this.currentIndex = -1; 153 | }, 154 | //点击删除 155 | removeItem(index, item) { 156 | this.goRight(index, 0); 157 | } 158 | } 159 | } 160 | ``` 161 | 162 | ```css 163 | /* 删除样式 */ 164 | .delete-sideslip { 165 | margin-left: 30px; 166 | background-color: #ff0000; 167 | width: 160px; 168 | justify-content: center; 169 | align-items: center 170 | } 171 | .delete-sideslip_text{ 172 | font-size: 30px; 173 | color:#ffffff 174 | } 175 | ``` -------------------------------------------------------------------------------- /docs/blog/9.Node/3.Express框架.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 3.Express框架 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 9.Node 8 | --- 9 | 10 | > 等待书写中... 11 | 12 | --- 13 | 14 | ## 第一部分:Koa使用 15 | 16 | ```js 17 | const Koa = require('./koa'); 18 | 19 | const app = new Koa(); 20 | 21 | // 比较核心的有三个方法(listen, use, on('error')) 22 | 23 | // 24 | app.use((ctx) => { 25 | ctx.body = 'B站的小伙伴们,大家好' 26 | }) 27 | 28 | app.listen(3000) 29 | 30 | // use 注册函数 31 | // ctx 上下文(这个上下文的写法很好) 32 | ``` 33 | 34 | > 效果就是打开 http://localhost:3000/,浏览器中会有 B站的小伙伴们,大家好 这句话 35 | 36 | --- 37 | 38 | ## 第二部分:源码简单实现 39 | 40 | ```js 41 | // lib/application.js 42 | 43 | const http = require('http') 44 | 45 | class Application { 46 | 47 | use(fn) { 48 | this.fn = fn; // 将use方法中的函数,保存到实例上 49 | } 50 | 51 | handleRequest(req, res) { 52 | this.fn(req, res) 53 | } 54 | 55 | listen(...args) { 56 | let server = http.createServer(this.handleRequest.bind(this)) 57 | 58 | server.listen(...args) 59 | } 60 | 61 | } 62 | 63 | module.exports = Application 64 | ``` 65 | 66 | 67 | -------------------------------------------------------------------------------- /docs/blog/9.Node/4.Koa2框架.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 4.Koa2框架 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 9.Node 8 | --- 9 | 10 | > 博主绪论:用了一圈Node框架下来,还是Koa2香 11 | 12 | > 等待书写中... 13 | 14 | --- 15 | 16 | ## 源码解析 17 | 18 | ### 1.为什么会有koa框架? 19 | 20 | - 令人困惑的API(Node HTTP模块的 API不符合正常预期) 21 | 22 | ```js 23 | const server = http.createServer((request, response) => { 24 | // 为什么要这么写呢? 25 | response.end('hello world') 26 | 27 | // 这么写不香么 28 | response = 'hello' 29 | response.body = 'hello' 30 | 31 | // 这种的API还有很多(原因是Node HTTP模块是一个理论性的API,是一个浅层封装,需要照顾各种情况) 32 | }) 33 | ``` 34 | 35 | - 顺序描述需要 36 | - 切面描述需要(处理前做什么,处理后做什么) 37 | 38 | --- 39 | 40 | 41 | ### 2.简单实现和使用 42 | 43 | ```js 44 | // Zoa 45 | 46 | const http = requier('http') 47 | 48 | 49 | class Zoa { 50 | 51 | use(callback) { 52 | this.callback = callback 53 | } 54 | 55 | listen(...args) { 56 | const server = http.createServer((req, res) => { 57 | this.callback(req, res) 58 | }) 59 | server.listen(...args) 60 | } 61 | } 62 | 63 | module.exports = Zoa 64 | ``` 65 | 66 | ```js 67 | // 使用 68 | 69 | const Zoa = require('./Zoa') 70 | const app = new Zoa 71 | 72 | app.use(ctx => { 73 | ctx.body = 'hello world' 74 | }) 75 | 76 | app.listen(3000, () => { 77 | console.log('监听端口 3000') 78 | }) 79 | ``` -------------------------------------------------------------------------------- /docs/blog/9.Node/5.Egg框架.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 5.Egg框架 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 9.Node 8 | --- 9 | 10 | > 博主绪论:架构很好,做大型项目很适合(但是做大型项目为什么不考虑Java,岂不是更香),可以拿来研究下结构 11 | 12 | > 等待书写中... -------------------------------------------------------------------------------- /docs/blog/9.Node/6.Node技术应用.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 6.Node技术应用 3 | date: 2020-01-30 00:00:00 4 | permalink: 5 | tag: 6 | - blog 7 | - 9.Node 8 | --- 9 | -------------------------------------------------------------------------------- /docs/blog/说明.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 【🔝置顶】网站文章更新计划 3 | date: 2021-01-28 19:10:32 4 | permalink: 5 | cover: https://xerrors.oss-cn-shanghai.aliyuncs.com/imgs/20200527130157.png 6 | tag: 7 | - blog 8 | - 0.说明 9 | --- 10 | 11 | 网站升级中,逐渐开发中(预计 2021.2.1 日迁移完成) 12 | -------------------------------------------------------------------------------- /docs/pages/book/book.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "读书" 3 | permalink: "book" 4 | categories: noRight 5 | --- 6 | 7 | 36 | 37 | 77 | 78 | 124 | -------------------------------------------------------------------------------- /docs/pages/book/img/fryst.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhukunpenglinyutong/notes/16be24eb6144963fdce7809ffed2d7fbd124350b/docs/pages/book/img/fryst.jpg -------------------------------------------------------------------------------- /docs/pages/book/img/zgcsdxp.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhukunpenglinyutong/notes/16be24eb6144963fdce7809ffed2d7fbd124350b/docs/pages/book/img/zgcsdxp.jpg -------------------------------------------------------------------------------- /docs/pages/book/中国城市大洗牌/img/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhukunpenglinyutong/notes/16be24eb6144963fdce7809ffed2d7fbd124350b/docs/pages/book/中国城市大洗牌/img/1.jpg -------------------------------------------------------------------------------- /docs/pages/book/中国城市大洗牌/中国城市大洗牌.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 中国城市大洗牌 3 | date: 2020-01-30 00:00:00 4 | permalink: 'book-zgcsdxp' 5 | --- 6 | 7 | # 中国城市大洗牌 8 | 9 | ## 1.超级城市,谁更有前途 10 | 11 | > 选择一个未来成长的城市,可能比选择一个行业还要重要 12 | 13 | 我们先来看几个正在改变格局的地方 14 | 15 | - 首先是深圳,这里有最完善的电子制造业产业聚集地,拥有强大的竞争力,科技创新带来了人口流动,让深圳成为了中国改革开放的前沿阵地,未来随着人口的不断流入,超越北上也并非不可能。 16 | - 第二个就是雄安,它承担着疏解非首都功能的重任,也就是说北京的经济重心将会转移到雄安(科技,金融等产业),北京作为首都只专注于文化和政治职能。 17 | - 第三个就是南方城市的大量崛起,中国经济的20强,大多数都在南方。 18 | - 第四,都市圈兴起,城市的概念逐渐被打破,例如 19 | - 深圳带动,东莞 惠州 20 | - 上海带动 苏州 无锡 南通 嘉兴 宁波 甚至舟山 21 | - 完全形成一个巨大都市圈,大家发展的都挺好。 22 | - 第五,强省会崛起,一个省的资源开始向省会倾斜,例如 武汉,成都,合肥和西安。 23 | 24 | 再说北京,北京目前在主动收缩,疏解非首都功能,未来人口将严格控制在一个量级。 25 | 26 | 再看广州和深圳,在三大都市圈中(京津冀,长三角,粤港澳),属粤港澳大湾区的经济增长潜力最大。 27 | 28 | 29 | 30 | --- 31 | 32 | ## 2.南北差距超过东西差距 33 | -------------------------------------------------------------------------------- /docs/pages/github-open/github-open.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "开源项目" 3 | permalink: "github-open" 4 | hideLastUpdated: True 5 | categories: noRight 6 | --- 7 | 8 | --- 9 | 10 | ## 图片压缩客户端(Electron) 11 | 12 | --- 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/pages/my/img/hbgy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhukunpenglinyutong/notes/16be24eb6144963fdce7809ffed2d7fbd124350b/docs/pages/my/img/hbgy.png -------------------------------------------------------------------------------- /docs/pages/my/img/iit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhukunpenglinyutong/notes/16be24eb6144963fdce7809ffed2d7fbd124350b/docs/pages/my/img/iit.png -------------------------------------------------------------------------------- /docs/pages/my/img/ming.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhukunpenglinyutong/notes/16be24eb6144963fdce7809ffed2d7fbd124350b/docs/pages/my/img/ming.jpg -------------------------------------------------------------------------------- /docs/pages/my/img/rm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhukunpenglinyutong/notes/16be24eb6144963fdce7809ffed2d7fbd124350b/docs/pages/my/img/rm.png -------------------------------------------------------------------------------- /docs/pages/my/img/wb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhukunpenglinyutong/notes/16be24eb6144963fdce7809ffed2d7fbd124350b/docs/pages/my/img/wb.png -------------------------------------------------------------------------------- /docs/pages/my/img/zywl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhukunpenglinyutong/notes/16be24eb6144963fdce7809ffed2d7fbd124350b/docs/pages/my/img/zywl.png -------------------------------------------------------------------------------- /docs/pages/plan/2021/2021-list.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "2021年度计划" 3 | permalink: "2021-plan" 4 | hideLastUpdated: True 5 | categories: noRight 6 | --- 7 | 8 | 2021年度计划 -------------------------------------------------------------------------------- /docs/pages/plan/plan-list.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "年度计划" 3 | permalink: "plan-list" 4 | hideLastUpdated: True 5 | categories: noRight 6 | --- 7 | 8 | 年度列表 -------------------------------------------------------------------------------- /docs/pages/update/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "网站更新" 3 | permalink: "update" 4 | categories: noRight 5 | --- 6 | 7 | 30 | 31 | 43 | 44 | 52 | 53 | -------------------------------------------------------------------------------- /docs/pages/website.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "网站介绍" 3 | permalink: "website" 4 | hideLastUpdated: True 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 | -------------------------------------------------------------------------------- /docs/quickcheck/1.前端/4.jQuery及其周边库速查.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 4.jQuery及其周边库速查 3 | date: 2020-01-30 00:00:00 4 | permalink: quickcheck/1-4 5 | --- 6 | 7 | # 4.jQuery及其周边库速查 8 | 9 | --- 10 | 11 | ## 🐣第一部分:jQuery 12 | 13 | --- 14 | 15 | ## 🦁第二部分:jQuery系列库(Bootstrap) 16 | 17 | --- 18 | 19 | ## 📚参考列表(致敬) 20 | -------------------------------------------------------------------------------- /docs/quickcheck/1.前端/5.MVVM框架速查(Vue).md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 5.MVVM框架速查(Vue) 3 | date: 2020-01-30 00:00:00 4 | permalink: quickcheck/1-5 5 | --- 6 | 7 | # 5.MVVM框架速查(Vue) 8 | 9 | ## 🐢第一部分:Vue 10 | 11 | --- 12 | 13 | ## 🦀第二部分:Vue-Cli 14 | 15 | --- 16 | 17 | ## 🐟第三部分:Axios 18 | 19 | --- 20 | 21 | ## 🐡第四部分:Vue-Router 22 | 23 | --- 24 | 25 | ## 🐬第五部分:Vuex 26 | 27 | --- 28 | 29 | ## 🦐第六部分:Element.ui 30 | 31 | --- 32 | 33 | ## 📚参考列表(致敬) 34 | -------------------------------------------------------------------------------- /docs/quickcheck/1.前端/6.移动端速查.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 6.移动端速查 3 | date: 2020-01-30 00:00:00 4 | permalink: quickcheck/1-6 5 | --- 6 | 7 | # 6.移动端速查 8 | 9 | --- 10 | 11 | ## 🐂第一部分:HTML5混生开发 12 | 13 | ### 1.移动端适配方案(rem) 14 | 15 | ```html 16 | 17 | 18 | 19 | 20 | 21 | 22 | Document 23 | 24 | 39 | 40 | 41 |
42 | 56 | 57 | 58 | ``` 59 | 60 | --- 61 | 62 | ## 🐪第二部分:微信小程序 63 | 64 | --- 65 | 66 | ## 🦏第三部分:Flutter 67 | 68 | --- 69 | 70 | ## 🐘第四部分:React-Native 71 | 72 | --- 73 | 74 | ## 🐑第五部分:移动端原生开发 75 | 76 | --- 77 | 78 | ## 📚参考列表(致敬) 79 | -------------------------------------------------------------------------------- /docs/quickcheck/2.后端/1.Node速查.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 1.Node速查 3 | date: 2020-01-30 00:00:00 4 | permalink: quickcheck/2-1 5 | --- 6 | 7 | # 1.Node速查 8 | 9 | ## 🍡第一部分:Node基础操作 10 | 11 | ### 1.文件系统 12 | 13 | ```js 14 | // ============++ 同步 ++============ 15 | 16 | // 1.同步读取文件 17 | fs.readFileSync('input.txt').toString() 18 | 19 | // 2.同步写入文件 20 | fs.writeFileSync(file, data) 21 | 22 | // 3.同步追加内容 23 | fs.appendFileSync(file, data) 24 | 25 | // 4.同步读取目录 26 | fs.readdirSync(path) 27 | 28 | // 5.同步创建目录 29 | fs.mkdirSync(path, [option]) // options 参数一 是否以递归的方式创建目录,默认false |参数二: mode 设置目录权限,默认0777 30 | 31 | // 6.同步删除目录 32 | fs.rmdirSync(path) 33 | 34 | // 7.获取文件信息 35 | fs.statSync('路径') 36 | 37 | // 8.删除文件 38 | fs.unlinkSync(path) 39 | 40 | 41 | 42 | // ============++ 异步 ++============ 43 | 44 | // 1.异步读取文件 45 | fs.readFile('input.txt', (err, data) => { 46 | if (err) console.error(err); 47 | console.log("异步读取: " + data.toString()); 48 | }) 49 | 50 | // 其余的都是一个道理,去除掉Sync,加个回调函数 51 | ``` 52 | 53 | ::: tip 54 | [更多请看...](https://www.runoob.com/nodejs/nodejs-fs.html) 55 | ::: 56 | 57 | --- 58 | 59 | ### 2.启动http服务 60 | 61 | ```javascript 62 | //导入HTTP模块 63 | let http = require('http') 64 | 65 | //定义一个要监听的端口 66 | const PORT = 8989; 67 | 68 | // 一个处理请求和发送响应的函数 69 | const handleRequest = (request, response) => { 70 | response.end('Hello World!!!') 71 | } 72 | 73 | // 创建服务器 74 | let server = http.createServer(handleRequest); 75 | 76 | // 启动服务 77 | server.listen(PORT, () => { 78 | console.log("Server listening on: http://localhost:%s", PORT); 79 | }) 80 | ``` 81 | 82 | --- 83 | 84 | ### 3.快速启动一个代理静态资源的HTTP服务 85 | 86 | ::: tip 87 | 中文目录会有代理不上的地方(一般也不用纯Node代理,直接用第三方框架代理) 88 | ::: 89 | 90 | ```javascript 91 | let http = require('http') 92 | let fs = require('fs') 93 | let url = require('url') 94 | let path = require('path') 95 | 96 | let server = http.createServer(function(request, response){ 97 | //获取输入的url解析后的对象 98 | let pathObj = url.parse(request.url, true); 99 | //static文件夹的绝对路径 100 | let staticPath = path.resolve(__dirname, 'dist') 101 | //获取资源文件绝对路径 102 | let filePath = path.join(staticPath, pathObj.pathname) 103 | // 如果是根目录的情况下的访问,需要拼接上 /index.html 104 | if (filePath.charAt(filePath.length-1)=="/"){ 105 | filePath+="index.html"; 106 | } 107 | //异步读取file 108 | fs.readFile(filePath, 'binary', function(err, fileContent){ 109 | if (err) { 110 | console.log('404') 111 | response.writeHead(404, 'not found') 112 | response.end('

404 Not Found

') 113 | } else { 114 | console.log('ok') 115 | response.write(fileContent, 'binary') 116 | response.end() 117 | } 118 | }) 119 | }) 120 | 121 | server.listen(9999) 122 | console.log('visit http://localhost:9999') 123 | ``` 124 | 125 | --- 126 | 127 | ### 4.Express代理静态资源(我一般用这个) 128 | 129 | - 安装:npm install express --save 130 | 131 | ```javascript 132 | var express = require('express') 133 | var app = express() 134 | 135 | app.use(express.static('docs')) // 代理的文件夹(自动找文件夹下的index.html为 /级目录内容) 136 | 137 | app.listen(3000, () => console.log('Example app listening on port 3000!')) 138 | ``` 139 | 140 | --- 141 | 142 | ## 🍭第二部分:Node常用的组合操作 143 | 144 | ### 1.复制某文件夹下所有的文件到另一个文件夹 145 | 146 | ```js 147 | const fs = require('fs') 148 | 149 | // 复制文件夹 150 | function exists (src, dst) { 151 | //测试某个路径下文件是否存在 152 | fs.exists(dst, function(exists){ 153 | if (exists) {//不存在 154 | copy(src,dst); 155 | } else {//存在 156 | fs.mkdir(dst,function(){//创建目录 157 | copy(src,dst) 158 | }) 159 | } 160 | }) 161 | } 162 | 163 | // 复制文件夹的辅助函数 164 | function copy (src, dst) { 165 | //读取目录 166 | let paths = fs.readdirSync(src); 167 | paths.forEach(function(path){ 168 | var _src=src+'/'+path; 169 | var _dst=dst+'/'+path; 170 | var readable; 171 | var writable; 172 | fs.stat(_src,function(err,st){ 173 | if(err){ 174 | throw err; 175 | } 176 | 177 | if(st.isFile()){ 178 | readable=fs.createReadStream(_src);//创建读取流 179 | writable=fs.createWriteStream(_dst);//创建写入流 180 | readable.pipe(writable); 181 | }else if(st.isDirectory()){ 182 | exists(_src,_dst,copy); 183 | } 184 | }); 185 | }); 186 | } 187 | 188 | // 使用演示 将 a 文件夹下 所有的文件,复制到 b文件夹下 189 | exists('./a', './b') 190 | ``` 191 | 192 | --- 193 | 194 | ## 📚参考列表(致敬) 195 | 196 | - [Node教程|菜鸟教程](https://www.runoob.com/nodejs/nodejs-tutorial.html) 197 | -------------------------------------------------------------------------------- /docs/quickcheck/2.后端/2.Node第三方库速查.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 2.Node第三方库速查 3 | date: 2020-01-30 00:00:00 4 | permalink: quickcheck/2-2 5 | --- 6 | 7 | # 2.Node第三方库速查 8 | 9 | > 内容尚未梳理 10 | 11 | ## 第一部分:Express 12 | 13 | --- 14 | 15 | ## 第二部分:Koa2 16 | 17 | --- 18 | 19 | ## 第三部分:Egg 20 | 21 | --- 22 | 23 | ## 第四部分:Hapi 24 | 25 | --- 26 | 27 | ## 📚参考列表(致敬) -------------------------------------------------------------------------------- /docs/quickcheck/2.后端/3.MySQL速查.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 3.MySQL速查 3 | date: 2020-01-30 00:00:00 4 | permalink: quickcheck/2-3 5 | --- 6 | 7 | # 3.MySQL速查 8 | 9 | > 内容尚未梳理 10 | 11 | --- 12 | 13 | ## 之前的内容,重构后删除 14 | 15 | --- 16 | 17 | ### 基础增删改查 🔥 18 | 19 | ##### 表数据的查看(select) 20 | 21 | - 这个我稍微熟悉一点,先不写了 22 | 23 | --- 24 | 25 | ##### 表数据的增加(insert) 26 | 27 | **insert into 表名(字段名 ...) values(数据...)** 28 | 29 | ```javascript 30 | // 举例 : (掌握下面三个基本学完) 31 | 32 | // ① 在表 blog_user 中插入一条完整数据 33 | insert into blog_user(id,username,password,ctime) values(1,'zhukunpeng','123456','2018-11-23'); 34 | 35 | // ② 在表 blog_user 中插入一天只有部分字段的数据 36 | insert into blog_user(id,username,password) values(1,'zhukunpeng','123456'); 37 | 38 | // ③ 插入 blog_demo表的 查询结果 39 | insert into blog_user (id,username,password) select id,username,password from blog_demo 40 | ``` 41 | 42 | --- 43 | 44 | ##### 表数据的删除(delete) 45 | 46 | **delete from 表名 where 字段名=''** 47 | 48 | ```javascript 49 | 50 | // 注意 :delete 删除数据,如果不加 where 会删除表中所有的数据,所以要加上限制条件 where 51 | 52 | // 案例 :删除 blog_user 表中 username 为 zhukunpeng 的字段 53 | delete from blog_user where username='zhukunpeng' 54 | 55 | ``` 56 | 57 | --- 58 | 59 | ##### 表数据的修改(update) 60 | 61 | **update 表名 set 需要更改的字段='' where 限制条件** 62 | 63 | ```javascript 64 | 65 | // 注意 :update 修改数据,如果不加 where 会跟新表中所有的行 66 | 67 | // 案例 :修改 blog_user 表中 username='zhukunpeng' 的字段 密码改为 654321 68 | update blog_user set password='654321' where username='zhukunpeng' 69 | 70 | ``` 71 | 72 | --- 73 | 74 | ### 其他 75 | 76 | 创建数据库通常情况下 字符集和排列规则 77 | - 字符集:utf8 78 | - 排列规则:utf8_general_ci 79 | 80 | [更多解释......书写中]() 81 | 82 | --- 83 | 84 | ## 📚参考列表(致敬) -------------------------------------------------------------------------------- /docs/quickcheck/2.后端/4.MongoDB速查.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 4.MongoDB速查 3 | date: 2020-01-30 00:00:00 4 | permalink: quickcheck/2-4 5 | --- 6 | 7 | # 4.MongoDB速查 8 | 9 | > 内容尚未梳理 10 | 11 | ## 之前的内容,重构完成之后删除 12 | 13 | **(mongoose官方文档)[http://mongoosejs.net/],安装之类的照着上面来** 14 | 15 | ### 1.快速上手 16 | 17 | ```js 18 | 19 | // ① 连接数据库 20 | var mongoose = require('mongoose'); 21 | mongoose.connect('mongodb://ip或者网址:端口号/数据库名称?配置...'); // 连接数据库,配置可以不写 22 | 23 | // 错误 和 成功 24 | db.on('error', console.error.bind(console, 'connection error:')); 25 | db.once('open', function() { console.log('连接成功') }); 26 | 27 | 28 | // ② 创建 Schema (Mongoose 里,一切都始于Schema) 29 | var personSchema = mongoose.Schema({ 30 | name: String, 31 | age: { type: Number } 32 | }); 33 | 34 | 35 | // ③ 把 schema 编译成一个 Model 36 | var Person = mongoose.model('Person', personSchema); // 注:'Person' 这个是 MongoDB 连接的数据库的 集合名称 37 | 38 | 39 | // ④ 使用 Model 40 | // 注:model 是我们构造 document 的 Class,我们知道,一个集合里面有很多文档 41 | 42 | Person.find() // 查找所有的文档 43 | Person.find({ name: /朱/ }) // 查找特定的文档 44 | 45 | var zhu = new Person({ name: '朱昆鹏', age: 21 }) // 添加文档,.save()是mongoose规定的添加文档的方法 46 | zhu.save() 47 | 48 | ``` 49 | 50 | --- 51 | 52 | ### 2.连接(省略...) 53 | 54 | 55 | --- 56 | 57 | ### 3.模式类型(SchemaTypes) 58 | 59 | 合法的模式类型有:String,Number,Array,Boolean,ObjectId,Date,Buffer,Mixed,Decimal128 60 | 61 | ```js 62 | 63 | // 详细示例 64 | 65 | 66 | ``` 67 | 68 | ### 4.模型(Models) 69 | 70 | ```js 71 | 72 | // ① 增 73 | var zhu = new Person({ name: '朱昆鹏', age: 21 }) // Documents 是 model 的实例。 创建它们并保存到数据库非常简单 74 | zhu.save() 75 | 76 | 77 | // ② 删 78 | Person.remove({ name: '朱昆鹏' }) // model 的 remove 方法可以删除所有匹配查询条件的文档。 79 | 80 | 81 | // ③ 改 82 | Person.findOneAndUpdate(...) // model 的 update 方法可以修改数据库中的文档,不过不会把文档返回给应用层,可以使用 findOneAndUpdate 方法 83 | 84 | // ④ 查 85 | Person.find() // 查找所有的文档 86 | Person.find({ name: /朱/ }) // 查找特定的文档 87 | 88 | ``` 89 | 90 | --- 91 | 92 | ### 5.其他 93 | 94 | 95 | 96 | 97 | 98 | ## 📚参考列表(致敬) -------------------------------------------------------------------------------- /docs/quickcheck/2.后端/5.Redis速查.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 5.Redis速查 3 | date: 2020-01-30 00:00:00 4 | permalink: quickcheck/2-5 5 | --- 6 | 7 | # 5.Redis速查 8 | 9 | > 内容尚未梳理 10 | 11 | --- 12 | 13 | ## 📚参考列表(致敬) -------------------------------------------------------------------------------- /docs/quickcheck/2.后端/6.其他.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 6.其他 3 | date: 2020-01-30 00:00:00 4 | permalink: quickcheck/2-6 5 | --- 6 | 7 | # 6.其他 8 | 9 | > 声明:这个栏目,存放一些过小的问题(不适合单独成一章的),如果后期拓展的很多,就可以考虑单独抽离出去一部分知识 10 | -------------------------------------------------------------------------------- /docs/quickcheck/3.运维/1.各种软件安装速查.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 1.各种软件安装速查 3 | date: 2020-01-30 00:00:00 4 | permalink: quickcheck/3-1 5 | --- 6 | 7 | # 1.各种软件安装速查 8 | 9 | --- 10 | 11 | ## 🍀第一部分:Centos7.*下安装软件 12 | 13 | ### 1. 安装Node 14 | 15 | - 设置安装源:curl --silent --location https://rpm.nodesource.com/setup_11.x | bash - 16 | - 安装node:yum install -y nodejs 17 | - [更多详细介绍](https://github.com/nodesource/distributions) 18 | 19 | --- 20 | 21 | ### 2. 安装MongoDB 22 | 23 | ::: warning 24 | 注意:下面安装的是MongoDB4.0 25 | ::: 26 | 27 | - 创建个人仓库:vi /etc/yum.repos.d/mongodb-org-4.0.repo 28 | - 插入文本段 29 | 30 | [mongodb-org-4.0] 31 | name=MongoDB Repository 32 | baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.0/x86_64/ 33 | gpgcheck=0 34 | enabled=1 35 | gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc 36 | 37 | 注意:第一次复制粘贴文本段会造成缺失,可以全部删除重新粘贴,或者直接光标移至最前面进行输入补全 38 | 39 | - 运行命令:yum install -y mongodb-org 40 | - 启动mongDB:service mongod start 41 | 42 | --- 43 | 44 | ### 3. 安装Nginx 45 | 46 | - 安装:yum install nginx 47 | - 启动nginx:service nginx start 48 | - 开机自启:systemctl enable nginx.service 49 | - 重启服务:nginx -s reload 50 | 51 | --- 52 | 53 | ### 4. 安装pm2 54 | 55 | - 安装:npm install -g pm2 56 | - 运行程序:pm2 start 程序路径 57 | - 生成自启脚本,保持当前进程活跃:pm2 startup 58 | - 保存当前进程状态:pm2 save 59 | 60 | --- 61 | 62 | ### 5. 安装GitLab 63 | 64 | 版本:11.9.9 65 | - 下载rpm:wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-11.9.9-ce.0.el7.x86_64.rpm 66 | - 安装:rpm -i gitlab-ce-11.9.9-ce.0.el7.x86_64.rpm 67 | - 修改gitlab配置文件指定服务器ip和自定义端口 vim /etc/gitlab/gitlab.rb 68 | - gitlab-ctl reconfigure 69 | - gitlab-ctl restart 70 | - 登录:初始账户: root 密码: 5iveL!fe 71 | 72 | > 问题:想安装中文版的,不知道怎么安装 73 | 74 | --- 75 | 76 | ### 6. 安装Docker 77 | 78 | ```sh 79 | yum install -y yum-utils \ 80 | device-mapper-persistent-data \ 81 | lvm2 82 | 83 | yum-config-manager \ 84 | --add-repo \ 85 | https://download.docker.com/linux/centos/docker-ce.repo 86 | 87 | # 正式下载 88 | yum install docker-ce docker-ce-cli containerd.io -y 89 | 90 | # 启动 91 | systemctl start docker 92 | ``` 93 | 94 | --- 95 | 96 | ### 7.安装Jenkins 97 | 98 | ```sh 99 | yum install java -y 100 | 101 | yum install git -y 102 | 103 | wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo 104 | 105 | rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key 106 | 107 | # 完成之后直接使用 yum 命令安装 Jenkins 108 | yum install jenkins -y 109 | 110 | 111 | # Jenkins 修改权限 找到$JENKINS_USER 改为 “root”: 112 | vim /etc/sysconfig/jenkins 113 | 114 | # 然后更改执行以下命令 Jenkins home,webroot 和日志的所有权: 115 | chown -R root:root /var/lib/jenkins 116 | chown -R root:root /var/cache/jenkins 117 | chown -R root:root /var/log/jenkins 118 | 119 | # 启动 jenkins 有一个OK表示启动成功 120 | service jenkins restart 121 | 122 | # 在本地浏览器输入你的 ip 地址加 默认端口 8080 就可以看到 jenkins 解锁页面 123 | # 密码:vim /var/lib/jenkins/secrets/initialAdminPassword 124 | # 选择安装推荐的插件即可 等待安装 125 | ``` 126 | 127 | 128 | [更多文档参考](https://juejin.im/post/5b371678f265da599f68dfa2) 129 | 130 | --- 131 | 132 | ### 8.安装MySQL 133 | 134 | ```sh 135 | wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm //下载mysql的repo源 136 | 137 | # 安装mysql-community-release-el7-5.noarch.rpm包 138 | rpm -ivh mysql-community-release-el7-5.noarch.rpm 139 | 140 | # 安装mysql服务 141 | yum install mysql-server 142 | 143 | # 登录mysql并修改mysql的密码 144 | mysql -u root 145 | ``` 146 | 147 | --- 148 | 149 | **🔥注意:登录时有可能报这样的错:ERROR 2002 (HY000): Can‘t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock‘ (2)** 150 | 151 | ```sh 152 | # 原因是/var/lib/mysql的访问权限问题。下面的命令把/var/lib/mysql的拥有者改为当前用户: 153 | 154 | # 这里的mysql是用户名(需要设置用户组合用户)(一般照着复制不改也没事) 155 | sudo chown -R mysql:mysql /var/lib/mysql 156 | 157 | # 重启mysql 158 | service mysqld restart 159 | ``` 160 | 161 | --- 162 | 163 | **设置(修改)密码** 164 | 165 | ```sh 166 | # 登录 167 | mysql -u root 168 | 169 | use mysql; 170 | 171 | # 修改密码 172 | update user set password=password('ZHUkun94899.1') where user='root'; 173 | 174 | service mysqld restart // 重启MySQL 175 | 176 | # 测试 177 | mysql -u root # 会报错 意思就是你没有使用密码,你要使用密码登录 178 | mysql -uroot -p密码 # 这样就能进去了,root是用户名 179 | ``` 180 | 181 | --- 182 | 183 | 184 | ## 🌾第二部分:docker安装各种软件 185 | 186 | ### 1.安装MongoDB 187 | 188 | - 拉取:docker pull mongo 189 | - 建立MongoDB存储的目录:mkdir ~/mgdb 190 | - 运行:docker run -p 27017:27017 -v /Users/zhukunpeng/mgdb:/data/db -d mongo 191 | - -p 27017:27017 :将容器的 27017 端口映射到主机的 27017 端口(端口可以自己定义)(前面一个27017是主机端口,后面一个是容器端口) 192 | - -v /Users/zhukunpeng/mgdb:/data/db 将主机中下的 mgdb 挂载到容器的/data/db,作为 mongo 数 据存储目录(我这是Mac的目录,你们环境不同目录是不一样的,要改成自己的) 193 | - 查看容器启动情况:docker ps 194 | - 重命名容器对象:docker rename 原来名字 修改的名字(这步是为了以后方便,因为你docker ps 查看会发现启动容器的名字是随机的,不好打) 195 | - 进入mongo容器:docker exec -it 启动容器名字 bash 196 | 197 | --- 198 | 199 | 200 | ## 📚参考列表(致敬) 201 | 202 | -------------------------------------------------------------------------------- /docs/quickcheck/3.运维/2.Nginx速查.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 2.Nginx速查 3 | date: 2020-01-30 00:00:00 4 | permalink: quickcheck/3-2 5 | --- 6 | 7 | # 2.Nginx速查 8 | 9 | ## 配置 10 | 11 | 配置:在conf.d/下建立新的conf文件,即可 12 | 13 | ```js 14 | server { 15 | set $dir_path /home/ubuntu/fatdoge_web/build; 16 | listen 80; 17 | server_name qiu; 18 | charset utf-8; 19 | index index.html; 20 | access_log /opt/log/nginx/qiu-http.log access; 21 | location /{ 22 | index index.html index.htm; 23 | root $dir_path; 24 | } 25 | 26 | } 27 | ``` 28 | 29 | ## 判断Nginx是否启动 30 | [链接](https://blog.51cto.com/lxw1844912514/2940927) 31 | 32 | ## 查看外网(公网)IP 33 | [链接](https://blog.csdn.net/weixin_33857230/article/details/86135986) 34 | 35 | ## 查看端口开没开 36 | [链接](https://www.jianshu.com/p/78c7f4ab19bd) 37 | 38 | ```js 39 | // 一直没反应就是没开,一般用来确定某个端口是否开启了 40 | telnet IP地址 41 | ``` 42 | 43 | ## Nginx在线配置 44 | 45 | [NGINX 配置](https://www.digitalocean.com/community/tools/nginx?global.app.lang=zhCN) -------------------------------------------------------------------------------- /docs/quickcheck/3.运维/3.Docker速查.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 3.Docker速查 3 | date: 2020-01-30 00:00:00 4 | permalink: quickcheck/3-3 5 | --- 6 | 7 | # 3.Docker速查 8 | 9 | > 内容尚未梳理 -------------------------------------------------------------------------------- /docs/quickcheck/3.运维/5.其他.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 5.其他 3 | date: 2020-01-30 00:00:00 4 | permalink: quickcheck/3-5 5 | --- 6 | 7 | # 5.其他 8 | 9 | > 声明:这个栏目,存放一些过小的问题(不适合单独成一章的),如果后期拓展的很多,就可以考虑单独抽离出去一部分知识 10 | 11 | --- 12 | 13 | ## 1.HTTPS证书配置(申请配置ssl证书) 14 | 15 | - 申请了ssl证书,就能让网站变为 https开头的,更安全,额,似乎比我想的简单 16 | 17 | 18 | 19 | 20 | 21 | 22 | - 之后还需要进行配置:https://cloud.tencent.com/document/product/400/35244 23 | 24 | 25 | 26 | - 🔥注意:主域名申请的单域名证书,二级域名不在https加密保护内,所以 notes.itzkp.com 还是 http协议,而通配符证书可以保护主域名下所有的二级子域名 27 | 28 | 于是乎我又申请了:notes.itzkp.com 和 jl.itzkp.com 的ssl证书,难点就是 二级域名的解析我是放到了,conf.d 文件夹下,我这怎么设置 ssl呢? 29 | 30 | ```sh 31 | # 示例:在conf.d 下面的 notes.conf下 32 | 33 | server { 34 | listen 443; 35 | server_name notes.itzkp.com; #填写绑定证书的域名 36 | ssl on; 37 | ssl_certificate 1_notes.itzkp.com_bundle.crt;#证书文件名称 38 | ssl_certificate_key 2_notes.itzkp.com.key;#私钥文件名称 39 | ssl_session_timeout 5m; 40 | ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #请按照这个协议配置 41 | ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#请按照这个套件配置 42 | ssl_prefer_server_ciphers on; 43 | 44 | location / { 45 | 46 | proxy_pass http://140.143.3.244:9998; 47 | proxy_set_header X-Real-IP $remote_addr; 48 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 49 | proxy_set_header Host $http_host; 50 | proxy_set_header X-Nginx-Proxy true; 51 | proxy_redirect off; 52 | } 53 | } 54 | 55 | server { 56 | listen 80; 57 | server_name notes.itzkp.com; #填写绑定证书的域名 58 | rewrite ^(.*)$ https://$host$1 permanent; #把http的域名请求转成https 59 | } 60 | 61 | ``` 62 | 63 | --- 64 | 65 | ## 2.ssh免密登录 66 | 67 | ```js 68 | ①:生成秘钥:ssh-keygen -t rsa(这会在 ~/.ssh下生成两个文件)(后面还可以加参数例如:-f 'zhu_key' 这是生成秘钥名称,就会生成 zhu_key 和 zhu_key.pub) 69 | id_rea:私钥(不规定名称,名称默认就是id_rea,这个留在主服务器上,这样主服务器就能访问具有公钥的服务器就不用密码了) 70 | id_rea.pub:公钥(不规定名称,名称默认就是id_rea.pub,这个传到目标服务器上,这样会使具有私钥的服务器不用密码就能连接) 71 | 72 | ②:把公钥传到目标服务器上:scp ~/.ssh/id_rsa.pub root@目标服务器ip地址:/root/.ssh 73 | 74 | ③:登录目标服务器:cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys (注意:> 是覆盖,>> 是追加) 75 | 76 | ④:在主服务器验证是否可以登录目标服务器:ssh root@目标服务器 77 | ``` 78 | 79 | **❗️有些情况下这种方法不管用,一个就是名称改为自定义的就不行,还有就是如果一台计算机是另一个的免密登录,这台想成为别的计算机的免密登录就不行,具体是什么问题,还需要继续研究** 80 | 81 | --- 82 | 83 | ## 3.Jenkins配置 84 | 85 | ### 1.Jenkins Github hook 触发实现 86 | 87 | [材料](https://www.cnblogs.com/weschen/p/6867885.html) 88 | 89 | - Jenkins钩子函数hook只有一个,然后可以绑定很多个项目,只要一个项目触发了push,或者其他操作就会被这个钩子监听到,然后执行一些命令 90 | 91 | --- 92 | 93 | ## 4.CDN缓存配置(腾讯云) 94 | 95 | - 主要是进入 腾讯云安装指引进行配置 96 | 97 | ## 📚参考列表(致敬) -------------------------------------------------------------------------------- /docs/quickcheck/4.其他/1.正则表达式速查.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 1.正则表达式·速查 3 | date: 2020-01-30 00:00:00 4 | permalink: quickcheck/4-1 5 | --- 6 | 7 | # 1.正则表达式·速查 8 | 9 | --- 10 | 11 | ## 🛴第一部分:创建正则表达式 12 | 13 | ```javascript 14 | // 你可以使用以下两种方法之一构建一个正则表达式 15 | 16 | const regex1 = /ab+c/gi; 17 | const regex2 = new RegExp("ab+c", "gi"); 18 | 19 | ``` 20 | 21 | --- 22 | 23 | ## 🛵第二部分:JS正则表达式的方法 24 | 25 | ### 1. test:一个在字符串中测试是否匹配的RegExp方法,它返回true或false 26 | 27 | ```javascript 28 | let str = 'hello world'; 29 | /world/.test(str); // true 30 | / /.test(str); // true 31 | /good/.test(str); // false 32 | ``` 33 | 34 | --- 35 | 36 | 37 | ### 2. replace:一个在字符串中执行查找匹配的String方法,并且使用替换字符串替换掉匹配到的子字符串 38 | 39 | ```javascript 40 | let str = 'hello world' 41 | let repStr = str.replace('world', 'replace') // 注意不会改变原内容 42 | console.log(repStr) // "hello replace" 43 | ``` 44 | 45 | --- 46 | 47 | ### 3. split:使用正则表达式 或 一个固定字符串分隔 一个字符串,返回 分隔后的子字符串数组 48 | 49 | ```javascript 50 | // 这个大部分我都是 字符串.split(' ') 以空格分开来用的 😁 51 | 52 | let str = 'hello RegExp'; 53 | str.split(' '); // ["hello", "RegExp"] 54 | str.split('hello'); // ["", "RegExp"] 55 | str.split('l'); // ["he", "", "o RegExp"] 56 | str.split('good') // ["hello RegExp"] 57 | ``` 58 | 59 | --- 60 | 61 | ### 4. exec:一个在字符串中执行查找匹配的RegExp方法,它返回一个数组(未匹配到则返回null) 62 | 63 | ::: tip 64 | 直接挂一个解释吧,返回的内容是一个对象有点多:[链接](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec) 65 | ::: 66 | 67 | --- 68 | 69 | ### 5. search:一个在字符串中测试匹配的String方法,它返回匹配到的位置索引,或者在失败时返回-1(略) 70 | 71 | --- 72 | 73 | ### 6. match:一个在字符串中执行查找匹配的String方法,它返回一个数组或者在未匹配到时返回null(略) 74 | 75 | 76 | --- 77 | 78 | ## 🚃第三部分:正则表达式的简单规则 79 | 80 | 81 | 82 | --- 83 | 84 | ## 🚅第四部分:常用正则表达式·速查 85 | 86 | --- 87 | 88 | ## 📚参考列表(致敬) 89 | 90 | - MDN:[正则表达式](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions) -------------------------------------------------------------------------------- /docs/quickcheck/4.其他/2.好的网站推荐.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 2.好的网站推荐 3 | date: 2020-01-30 00:00:00 4 | permalink: quickcheck/4-2 5 | --- 6 | 7 | # 2.好的网站推荐 8 | 9 | ## 🐳资料类 10 | 11 | - [MDN](https://developer.mozilla.org/zh-CN/) 12 | - [Vue官网](https://cn.vuejs.org/) 13 | - [Vue-Cli](https://cli.vuejs.org/zh/) 14 | - [Vue-Router](https://router.vuejs.org/zh/) 15 | - [Vuex](https://vuex.vuejs.org/zh/) 16 | - [Vue.js 服务器端渲染指南](https://ssr.vuejs.org/zh/) 17 | - [lodash.js官网](https://www.lodashjs.com/) 18 | - ... 19 | 20 | --- 21 | 22 | ## 🐬工具类 23 | 24 | - [在线格式化json](http://www.bejson.com/) 25 | - [代码生成好看的图片,可以给别人演示代码片段用](https://codeimg.io/) 26 | - [自动生成NGINX配置](https://nginxconfig.io/) 27 | - [alcss艺术字](https://www.bootschool.net/ascii-art) 28 | - [具有炫酷动画的网站](https://cssfx.dev/) 29 | - [各种文件相互转换的网站](https://smallpdf.com/cn) 30 | - [给变量命名的网站](https://unbug.github.io/codelf/) 31 | - [babel官网](https://www.babeljs.cn/) 32 | - [在线录屏软件](https://www.apowersoft.cn/free-online-screen-recorder) 33 | - ... 34 | 35 | --- 36 | 37 | ## 🦋社区类 38 | 39 | - [掘金](https://juejin.im/timeline) 40 | - [思否](https://segmentfault.com/) 41 | - ... 42 | 43 | -------------------------------------------------------------------------------- /docs/quickcheck/README.md: -------------------------------------------------------------------------------- 1 | ## 前端 2 | 3 | [1.HTML和HTML5](./1-1/)
4 | [2.CSS和CSS3速查](./1-2/)
5 | [3.JS方法速查](./1-3/)
6 | [4.jQuery及其周边库速查](./1-4/)
7 | [5.MVVM框架速查(Vue)](./1-5/)
8 | [6.移动端速查](./1-6/)
9 | [7.其他](./1-7/)
10 | 11 | --- 12 | 13 | ## 后端 14 | 15 | [1.Node速查](./2-1/)
16 | [2.Node第三方库速查](./2-2/)
17 | [3.MySQL速查](./2-3/)
18 | [4.MongoDB速查](./2-4/)
19 | [5.Redis速查](./2-5/)
20 | [6.其他](./2-6/)
21 | 22 | --- 23 | 24 | ## 运维 25 | 26 | [1.各种软件安装速查](./3-1/)
27 | [2.Nginx速查](./3-2/)
28 | [3.Docker速查](./3-3/)
29 | [4.Linux速查](./3-4/)
30 | [5.其他](./3-5/)
31 | 32 | --- 33 | 34 | ## 其他 35 | 36 | [1.正则表达式速查](./4-1/)
37 | [2.好的网站推荐](./4-2/)
38 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "git-notes", 3 | "version": "1.0.1", 4 | "description": "[![License](https://img.shields.io/github/license/zhukunpenglinyutong/notes.svg)](LICENSE) [![repo-size](https://img.shields.io/github/repo-size/zhukunpenglinyutong/notes.svg)](repo-size) [![CodeTriage](https://www.codetriage.com/zhukunpenglinyutong/notes/badges/users.svg)](CodeTriage) [![提交活动](https://img.shields.io/github/commit-activity/m/zhukunpenglinyutong/notes.svg)](提交活动) [![最后一次提交](https://img.shields.io/github/last-commit/zhukunpenglinyutong/notes.svg)](最后一次提交)", 5 | "main": "index.js", 6 | "directories": { 7 | "doc": "docs" 8 | }, 9 | "scripts": { 10 | "commit": "git add . && git-cz", 11 | "start": "vuepress dev docs --temp .temp", 12 | "build": "vuepress build docs" 13 | }, 14 | "dependencies": { 15 | "animate.css": "^3.7.2", 16 | "clipboard": "^2.0.4", 17 | "echarts": "^5.0.1", 18 | "element-ui": "^2.13.0", 19 | "express": "^4.17.1", 20 | "git-cz": "^4.7.6", 21 | "js-md5": "^0.7.3", 22 | "kind-of": "6.0.3", 23 | "leancloud-storage": "^4.2.0", 24 | "minimist": "1.2.3", 25 | "serialize-javascript": "^3.1.0", 26 | "v-viewer": "^1.5.1", 27 | "valine": "^1.3.10", 28 | "vue": "2.6.11", 29 | "vuepress-plugin-medium-zoom": "^1.1.8", 30 | "vuepress-plugin-smooth-scroll": "0.0.9" 31 | }, 32 | "devDependencies": { 33 | "@vuepress/plugin-google-analytics": "^1.2.0", 34 | "@vuepress/plugin-medium-zoom": "^1.2.0", 35 | "axios": "^0.21.1", 36 | "express": "^4.17.1", 37 | "gulp": "^4.0.2", 38 | "gulp-clean-css": "^4.3.0", 39 | "gulp-css-wrap": "^0.1.2", 40 | "vue-click-outside": "^1.1.0", 41 | "vue-particles": "^1.0.9", 42 | "vuepress": "^1.5.0", 43 | "vuepress-plugin-mathjax": "^1.2.8" 44 | }, 45 | "repository": { 46 | "type": "git", 47 | "url": "git+https://github.com/zhukunpenglinyutong/notes.git" 48 | }, 49 | "author": "", 50 | "license": "ISC", 51 | "bugs": { 52 | "url": "https://github.com/zhukunpenglinyutong/notes/issues" 53 | }, 54 | "homepage": "https://github.com/zhukunpenglinyutong/notes#readme" 55 | } 56 | --------------------------------------------------------------------------------