- 博客(114)
- 资源 (6)
- 收藏
- 关注

原创 【前端】小白上手Promise、Async/Await和手撕代码
写在前面对于前端新手而言,Promise是一件比较困扰学习的事情,需要理解的细节比较多。对于前端面试而言,Promise是面试官最常问的问题,特别是手撕源码。众所周知,JavaScript语言执行环境是“单线程”。单线程,就是指一次只能完成一件任务,如果有多个任务就必须排队等候,前面一个任务完成,再执行后面一个任务。这种“单线程”模式执行效率较低,任务耗时长。为了解决这个问题,就有了异步模式,也叫异步编程。一、异步编程所谓"异步",简单说就是一个任务分成两段,先执行第一段,然后转而执行其他任务
2021-05-17 20:54:09
347
3
原创 三言两语说透柯里化和反柯里化
JavaScript中的柯里化(Currying)和反柯里化(Uncurrying)是两种很有用的技术,可以帮助我们写出更加优雅、泛用的函数。本文将首先介绍柯里化的概念、实现原理和应用场景,然后介绍反柯里化的概念、实现原理和应用场景,通过大量的代码示例帮助读者深入理解这两种技术的用途。
2023-08-02 16:03:41
279
原创 三言两语说透koa的洋葱模型
Compose函数可以将需要顺序执行的多个函数复合起来,后一个函数将前一个函数的执行结果作为参数。这里利用了函数递归的机制。dispatch函数接收当前中间件的索引i,如果i大于中间件数组长度,则执行next函数。compose接收一个中间件数组作为参数,执行数组中的中间件,返回一个可以执行所有中间件的函数。所有中间件的回调函数中,执行中间件函数的时候,递归调用dispatch,同时将索引+1,表示执行下一个中间件。每个中间件都可以捕获自己的错误,并且不会影响其他中间件的执行,这样对错误处理更加友好。
2023-08-02 16:01:29
886
原创 三言两语说透关于 MySQL2 和 MySQL 的区别
MySQL是最流行的开源关系型数据库管理系统,拥有大量的使用者和广泛的应用场景。而MySQL2是MySQL官方团队推出的新一代MySQL驱动,用于取代老版的MySQL模块,提供更好的性能和更丰富的功能。本文将介绍MySQL2相较于MySQL有哪些优势以及具体的技术区别。
2023-07-28 16:28:14
712
原创 三言两语说透process.stdout.write和console.log的区别
Node.js中的`process.stdout.write`和`console.log`都是用于向标准输出流(stdout)打印输出的方法,但二者在使用场景和实现方式上有些区别。本文将详细介绍`process.stdout.write`和`console.log`的区别。
2023-07-28 16:26:55
783
原创 【前端】一网打尽──Vue3 Composition-api新特性
写在前面在体验Vue3之前,我们先来了解一下Vu3到底有哪些亮点之处。总共有6大特点:Performance(性能比vue2的runtime快2倍左右)Tree shaking support(按需打包模块)Better TypeScript support(更好的TS代码支持)Composition API(组合API)Custom Renderer API(自定义渲染API)Fragment, Teleport, Suspense1. vue3的起源setup理解:vue3.0
2021-08-11 00:20:33
467
原创 【基础】校招,你必须掌握的git知识
写在前面最近在写业务需求的时候,总是和导师的代码发生冲突,自己在处理的时候还是挺耗费时间的。导师一直提醒我更改和添加代码后要及时提交,但是我总是一股脑写完一串后才提交,没有养成良好的提交习惯。在进行协同工作时,导师提问git的使用原理,而我却只能零星的几个命令的作用。现在就对常用的git命令的作用和原理进行总结,希望能够帮助更多人少走弯路,提升开发效率。1. git下载&配置工欲善其事,必先利其器。你想要顺利的使用git管理代码,必须先下载和在本地配置好你的git环境。下载git工具,前
2021-07-20 21:39:23
258
1
原创 【前端】重构,有品位的代码 07 ── 简化条件逻辑
写在前面条件逻辑越多越庞大,程序的复杂度也将提升,重构条件逻辑会变得更易理解。在对条件逻辑进行拆分和合并,可以使得条件逻辑得到简化,代码逻辑也就变得更加清晰易懂。前情回顾:《重构,有品位的代码 01──走上重构之道》《重构,有品位的代码 02──构建测试体系》《重构,有品位的代码 03──常用重构手法》《重构,有品位的代码 04──封装》《重构,有品位的代码 05──搬移特性》《重构,有品位的代码 06── 重新组织数据》简化条件逻辑常见的简化条件逻辑的方式有:分解条件表达式合
2021-07-20 21:37:09
268
原创 【前端】重构,有品位的代码 06── 重新组织数据
theme: smartblue写在前面数据结构在程序中扮演着重要角色,那么在进行代码编写时,同样需要选择合适的数据结构,对其进行组织重构。前情回顾:《重构,有品位的代码 01──走上重构之道》《重构,有品位的代码 02──构建测试体系》《重构,有品位的代码 03──常用重构手法》《重构,有品位的代码 04──封装》《重构,有品位的代码 05──搬移特性》重新组织数据常用的重新组织数据方式有:拆分变量字段改名以查询取代派生变量将引用对象改为值对象将值对象改为引用对象.
2021-07-20 21:34:13
295
原创 【前端】重构,有品位的代码 05──搬移特性
写在前面本文是《重构,有品位的代码》系列第五篇文章,前面文章主要介绍的重构手法是关于如何新建、移除或重命名程序的元素。当然,不只是只有这些手法,还有类型的重构也是很重要的,主要是在不同上下文间搬移元素。可以通过搬移函数手法在类与其他模块之间搬移函数,同样的也有搬移字段手法,还有其它手法将在本文中将逐一介绍…前情回顾:《重构,有品位的代码 01──走上重构之道》《重构,有品位的代码 02──构建测试体系》《重构,有品位的代码 03──常用重构手法》《重构,有品位的代码 04──封装》常见的搬
2021-07-20 21:31:17
304
原创 【前端】重构,有品位的代码 04 ── 封装
写在前面本文是《重构,有品位的代码》系列第四篇文章,将向大家介绍常用的封装手法对于重构的意义,以及其对于我们代码的提升。正如你所知道的,分解模块时的重要标准是对外界隐藏内部细节,而数据结构正是不可对外的核心秘密,此时可以使用封装记录或封装集合进行处理。还有更多封装手法,在本文中将逐一介绍…前情回顾:《重构,有品位的代码 01──走上重构之道》《重构,有品位的代码 02──构建测试体系》《重构,有品位的代码 03──常用重构手法》什么是封装看到封装二字,我们通常会问什么是封装,函数和类是不是
2021-07-20 21:28:12
467
1
原创 【前端】重构,有品位的代码 03 —— 常见的重构技巧
写在前面在前面两篇文章和中分别介绍了重构的基本概念和测试重构性能的测试体系,而本篇文章将致力于介绍11中常见的重构方法。在重构实践中,我们常用的重构方法有提炼函数和变量,就是通过代码提炼到函数和变量,最关键的就是命名。当然,我们还用到了两个重构的反向重构——内联函数和内联变量,是不是很惊讶怎么自己不知道。其实还有更多的重构方法,可能已经在悄无声息在我们的代码中使用。重构名录对于重构可以采用标准格式,每个重构手法都包含以下部分:名称(name):建造常用的重构词汇表,在进行重构的时候可以用于变量和
2021-06-22 21:23:34
617
1
原创 【前端】嘿,Nest.js实战开发系列 01 ── Nest.js初体验
写在前面前面从小白视角学习了Typescript,并学习总结了ts的系列文章,希望能够对于读者有所帮助。至于学习了TS基础后,如何进行开发实践,本系列将结合Nest.js的Node服务器框架进行娓娓道来。Nest (NestJS) 是一个用于构建高效、可扩展的Node.js服务器端应用程序的框架。它使用渐进式 JavaScript,使用TypeScript构建并完全支持(但仍然允许开发人员使用纯 JavaScript 进行编码)并结合了 OOP(面向对象编程)、FP(函数式编程)和 FRP(函数式响应
2021-06-21 23:19:19
1730
原创 【前端】重构,有品位的代码 02 ── 构建测试系统
写在前面代码重构是一个产品不断的功能迭代过程中,不可避免的一项工作。所谓重构,是在不改变程序的输入输出即保证现有功能的情况下,对内部实现进行优化和调整。这是《重构,有品位的代码》系列的第二篇文章,上一篇是《重构,有品位的代码──走上重构之道》构建测试体系工欲善其事,必先利其器重构是很有价值很重要的工具,能够让我们增强代码的可读性和鲁棒性。但是光有重构也不行,因为我们在重构过程中会存在难以避免的纰漏,所以构建一套完善稳固的测试体系是很有必要的。自测代码很重要在进行项目开发中,进行编写代码的时间花
2021-06-21 06:24:29
452
1
原创 【前端】重构,有品位的代码 01——走上重构之道
写在前面正如你所知道的,在进行项目开发过程中代码不断进行更迭堆砌,整个项目的体积和重量也愈发庞大,而代码质量愈发下降。代码堆砌造成的致命后果就是变得逻辑混乱、难以维护,可读性下降,这也造成了理解成本和沟通成本增加,此时想要重构简直是珠穆朗玛峰上种树般难。而造成重构难度大,弊病积重难返的原因主要有:只顾着编程,却忽略了程序设计缺乏代码质量监督,项目从严谨的工程堕落成随意性行为出于成本考虑,在原代码基础上进行持续开发缺乏代码review习惯,不能做到时时回顾重整代码古有云“时时勤拂拭,勿使惹尘
2021-06-15 18:31:54
357
原创 【十万个BUG】npx mrm lint-staged报错
G:\Code\react-blogs>npx mrm lint-stagednpx: 300 安装成功,用时 93.663 秒C:\Users\liu\AppData\Roaming\npm-cache\_npx\8712\node_modules\mrm\bin\mrm.js:55 throw err; ^Error: Cannot find module 'C:\Users\liu\AppData\Roaming\npm-c
2021-06-07 18:06:10
1340
原创 【前端】你好,我叫Typescript 04──函数与类
函数与类前言本文章是Typescript系列学习文章,旨在利用碎片时间快速高效上手学习Typescript,也可以对Typescript进行复习知识点,温故知新。如果感兴趣的话~ 欢迎关注, 后续持续推出文章。前文回顾《你好,我叫Typescript 01 ── 数据类型》《你好,我叫Typescript 02 ── 变量与接口》《你好,我叫Typescript 03 ── 泛型》函数蹦蹦:跳跳,好几天不见,我最近在学习Typescript又遇到了新问题,亟需你的解答。跳跳:啥问题呀,
2021-05-24 16:05:17
267
原创 【前端】你好,我叫TypeScript 03──数据类型
泛型写在前面今天是520,祝大家有情人终成眷属吧,咱们也应应景,解锁两个新英雄:蹦蹦和跳跳,探索以全新的问答视角来介绍和解决亟需处理的问题。什么是泛型?蹦蹦:跳跳,你晓得啥子是泛型嘛?跳跳:在历史中,强者高手都是考虑现在和未来的,只有宏观把握才能让自己立于不败之地。就像你耍游戏撒,不管你要出啥子大件装备,你先买一双孩子或者多兰剑、蓝色戒指你就不会错撒,反正都是要在这个方面拓展。而在面向对象的编程语言中,组件不仅要考虑到现在的数据类型,还要考虑到未来要使用的数据类型,而泛型完美的提供了组件的可
2021-05-19 16:27:55
200
1
原创 【前端】你好,我叫TypeScript 02──变量与接口
TS变量与接口变量声明其实TS中的变量声明和JS中是一样的,所以你会JS就会TS,无外乎var、let和const,记住以下的表格内容就能解决绝大多数场景问题。varletconst存在变量提升不存在变量提升不存在变量提升不需要初始化不需要初始化需要初始化赋值函数作用域块级作用域块级作用域可以重复声明不可重复声明不可重复声明全局作用域下,变量会成为window的属性全局作用域下,变量不会成为window的属性全局作用域下,变量不会成为w
2021-05-18 15:14:50
170
1
原创 【前端】你好,我叫Typescript 01──数据类型
前言1.什么是Typescript?TypeScript并不是一门新的编程语言,它是Javscript的超集,即在JavaScript语言的基础上添加了语言约束:可选的静态类型和基于类的面向对象编程。其实就是添加了静态类型检查,有了约束可以让我们在开发过程中减少错误代码的书写。TypeScript和JavaScript的关系如下:TypeScript和JavaScript的区别:TypeScriptJavaScript强类型,支持静态和动态类型弱类型,没有静态类型Ja
2021-05-17 19:22:16
259
1
原创 【前端】一网打尽──前端开发中的“节流”和“防抖”
1 前言在前端开发过程中,会遇到很多实时输入查询、滚动条触发等业务。而这些频发操作的事件,如果每次触发都进行执行的话,会造成性能下降、后台的压力变大,那么此时就需要使用防抖和节流进行处理。防抖和节流,见名思义:防抖是防止抖动,节流是节约流量。具体释义如后面介绍。2 防抖防抖(Debounce) 指的是触发事件后n秒后才能执行函数,如果在n秒内触发了事件,则会重新计算执行时间。常见场景:点击按钮、拍照、下拉触底加载下一页等。如上图所示,持续触发输入事件时,并不会立即执行func函数,而是在指定.
2021-05-13 13:26:46
810
4
原创 【前端】你真的理解JavaScript中的变量和数据类型吗
前言在我们学习各种编程语言时,最先接触的就是变量和数据类型,那么我们真的理记住和理解了这些最基础的知识点吗?我们是否在笔试和面试的时候,经常对一些不起眼的知识点想不起来?那么跟着这篇文章重新回顾下这些基础内容吧。1 变量(var、let、const)什么是变量变量是用于进行保存任意值的命名占位符。字母数字下划线美元符,严格区分大小写,首字符不能是数字。1.1 var关键字var关键字不初始化的情况下,会自动保存一个特殊值undefinedvar关键字在函数内部进行定义变量,会成为此函数
2021-05-13 13:23:55
307
3
原创 【服务器】vscode配置远程连接
【服务器】vscode SFTP远程连接服务器1.安装在vsocde 中的插件商店找到 sftp插件:2.配置文件在当前已打开的工作区或文件夹,使用ctrl+shift+p快捷键调出输入框,选择 SFTP:Config 回车,会在.vscode目录下创建一个sftp.json配置文件,配置如下:出现sftp.json文件{ "name": "My Server", //本地的文件夹名称,可以自宝 "host": "localhost", //服务器地址。一般是ip或者域
2020-08-01 21:12:08
1398
原创 前端面试
1.重排和重绘1.1 浏览器的运行机制构建DOM树:渲染引擎解析HTML文档,首先将标签转换成DOM树中的DOM node(包含js生成的标签)生成DOM树;构建渲染树:解析对应的CSS样式文件信息(包含js生成的样式和外部css文件),而这些文件信息以及html中可见的指令,构建渲染树;渲染树中每个Node节点都有自己的style,而且渲染树不包含隐藏的节点,因为这些节点不会用于呈现;布局渲染树:从根节点递归调用,计算每一个元素的大小、位置等,给每个节点所应该在屏幕上呈现的精确坐标;绘制渲染树
2020-07-17 15:25:42
148
原创 解惑:震惊了,scipy居然安装失败了?
问题描述:ModuleNotFoundError: No module named 'scipy'问题分析:项目缺少cripy安装模块问题解决:#没有安装conda时,可以换成pipconda install h5pyconda install scripy最终安装成功:
2020-06-25 10:13:50
1009
原创 江在川上曰:JS函数
函数函数的定义方式自定义函数(命名函数)函数表达式(匿名函数)利用 new Function("参数1","参数2","函数体")注意:所有函数都是Function的实例this的指向调用方法this指向普通函数调用window构造函数调用实例对象,原生对象中的方法也是指向实例对象对象方法调用该方法所属对象事件绑定方法绑定事件对象定时器函数window立即执行函数window// 普通函数 this指向window对象f
2020-06-03 20:23:04
225
1
原创 江在川上曰:webpack前端工程化
前端工程化1.模块化相关规范1.1浏览器端模块化规范名称文件AMDRequire.jsCMDSea.js1.2 服务器端模块规范common.js1.3 大一统的模块化规范(ES6)定义:每个js文件都是一个独立的模块导入模块成员使用import关键字暴露模块成员使用export关键字1.4 webpack工程化(1)创建文件、进行打包//创建空项目npm init -y//创建项目文件开发目录mkdir src//npm导入jqu
2020-06-01 14:18:19
483
原创 江在川上曰:vue-Router学习笔记
vue-Router学习笔记1.vue-Router1.1 基本使用步骤引入相关库文件<!-- 1.引入相关的库文件 --><!-- 引入vue库文件 --><script src='./lib/vue.js'></script><!-- 引入vue-router库文件,用于为window对象全局挂载vuerouter构造函数 --><script src="./lib/vue-router_3.0.2.js">&l
2020-05-31 20:15:38
360
原创 江在川上曰:less样式预编译
less样式预编译1.css原生变量定义使用“–”进行变量定义使用var()进行变量的引用--bgColor:red;background:var(--bgColor);2.css原生计算属性使用calc进行计算属性width:calc(50% - 200px)使用calc进行变量计算bgWidth:50%;width:calc(var(--bgWidth) - 200px)细节介绍:calc中的运算符左右两侧必须加 空格width:calc(59% - 20
2020-05-31 14:04:06
301
原创 江在川上曰:vue中使用swiper
vue中使用swiper1 安装//这是swiper组件npm install vue-awesome-swiper --save-dev//这是swiper组件的依赖包npm install --save swiper2 全局注册在main.js中进行全局注册,这样便能在全局使用组件。import Vue from 'vue'import VueAwesomeSwiper from 'vue-awesome-swiper'require('swiper/css/swiper.css'
2020-05-27 09:45:23
214
原创 江在川上曰:js中的JSON解析和序列化
江在川上曰:js中的JSON解析和序列化JSON解析和序列化JSON是javascript的一个严格的子集,利用了javacript中的一些模式来表示结构化数据。他只是一种数据格式,并非一种编程语言。JSON语法JSON可以表示三种类型的值。类型说明简单值可以在JSON使用String、Number、Boolean和null,但是不能够使用undefined。对象是一组无序的键值对,值可以是简单值、也可以是对象、数组。数组是一组有序的值的序列,可以通过索引索引
2020-05-26 10:02:42
243
原创 服务器部署的四次元口袋:ubuntu的普通用户的创建、修改以及删除操作
以下介绍在Ubuntu 18.04系统下创建新用户/目录、修改用户权限及删除用户的正确方法。在Ubuntu系统上创建新用户使用[sudo useradd 用户名]命令,但只能创建用户,不能在/home/中创建用户目录,也无法设置用户权限。以下为创建新用户并且分配权限的正确方法。
2020-05-04 23:21:49
290
原创 小程序的四次元口袋:editor富文本编辑器的使用、渲染,以及rich-text进行解析
editor富文本1、介绍富文本编辑器,可以对图片、文字进行编辑。极大地丰富了我们文章的结构样式,之前小程序还没有自己开发富文本插件,而在2019年微信小程序正式发布了富文本api。支持的类型 编辑器导出内容支持带标签的 html和纯文本的 text,编辑器内部采用 delta 格式进行存储。 setContents 通过setContents接口设置内容时,解析插入的...
2020-04-26 15:00:15
12881
原创 小程序的四次元口袋:wxParse富文本解析组件的使用、wxs的引入等
wxParse富文本组件的使用在我们使用小程序时,不可避免的需要使用富文本解析,而原生小程序的功能有限,这时候我们就可以借助于开源的wxParse富文本解析组件。富文本编辑提取到内容是html格式的,写法与小程序的wxml并不一致,那么怎么样才能做到富文本能够在小程序页面中显示呢?解决办法有位大牛开发了一个模板叫作wxParse,可以直接引入小程序使用。下面把大牛的githu...
2020-04-25 20:22:00
365
原创 十万个BUG:Ubuntu18.04下切换自己想要的python版本默认设置为python3
首先,我们要先查看下python默认版本。python可以看到默认为python2,这不是我们想要的,要知道python2维护时间截止到2020年,也就是今年底。因此我们需要切换python版本,设置优先级,最后一个数字越大、优先级越高。sudo update-alternatives --install /usr/bin/python python /usr/...
2020-04-24 12:48:46
604
原创 江在川上曰:云服务器上的flask项目部署(Ubuntu+Flask+Gunicorn+Supervisor+Nginx+Anaconda)
云服务器上的flask项目部署(anaconda、python、flask等相关安装)在探索未知的路上走了很多弯路,这里记载了我在阿里云上部署项目切实可行的步骤,当然问题因人而异,没有四海皆适用的准则。1、安装ancondaAnconda真是好东西,可以解决我们很多问题。请自行前往官网下载Linux版本:https://www.anaconda.com/distribution/...
2020-04-24 00:10:11
1079
原创 十万个BUG:小程序报错thirdScriptError Unexpected identifier SyntaxError: Unexpected identifier
thirdScriptError Unexpected identifier SyntaxError: Unexpected identifier问题描述:再进行小程序开发时,总是出现这种问题,而且总是找不到错误位置,这就很恼火。问题分析:根据小程序的提示,可能的原因是语法有错误,原因是微信小程序目前不支持es6语法,es6语法需要通过其他方式。问题解决:如果我...
2020-04-20 18:43:56
1563
原创 小程序的四次元口袋:获取小程序用户openid(nodejs后端)
获取小程序用户openid(nodejs后端)需求分析:openID和sessionKey作为小程序用户的唯一凭证,在微信支付和其他接口等都需要使用,还是很重要的。调用wx.login()获取登录凭证,利用code在后台换取openID和sessionKey,通过node.js的Express框架进行解决。需求解决:小程序前端代码:// 获取用户的openid信息 ...
2020-04-19 23:38:28
485
原创 小程序的四次元口袋:如何使用wxs在wxml文件对时间戳进行格式化
如何使用wxs在wxml文件对时间戳进行格式化问题描述:wxs中使用date创建实例报错报错信息Uncaught SyntaxError: Invalid or unexpected token问题代码:filter.js文件const formatTime = date => { const year = date.getFullYear() co...
2020-04-18 16:53:04
640
原创 十万个BUG:ImportError: cannot import name 'PILLOW_VERSION'、ImportError: No module named 'pretrainedmode
成功解决ImportError: cannot import name 'PILLOW_VERSION'问题描述:ImportError: cannot import name 'PILLOW_VERSION'问题解决:由于PILLOW的版本太高,因此需要降低版本。pip3 install Pillow==6.2.2成功解决这个八阿哥,终于有机会见下一个八阿哥了。...
2020-04-16 22:52:00
883
flower.zip
2019-10-13
pyhton的orm项目开发实践
2019-08-23
Book-4.zip
2019-08-16
images2.zip
2019-08-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人