自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(176)
  • 资源 (1)
  • 收藏
  • 关注

原创 前端动态规划 js 看这篇就够了

动态规划90% 的字符串问题都可以用动态规划解决,并且90%是采用二维数组。一、动态规划的三大步骤动态规划,无非就是利用历史记录,来避免我们的重复计算。而这些历史记录,我们得需要一些变量来保存,一般是用一维数组或者二维数组来保存。动态规划常常适用于有重叠子问题和最优子结构性质的问题,动态规划方法所耗时间往往远少于朴素解法。最优子结构指的是,问题的最优解包含子问题的最优解。反过来说就是,我们可以通过子问题的最优解,推导出问题的最优解。动态规划题三个重要步骤:1、定义数组元素的含义。上面说了,

2021-03-31 11:44:42 2069 1

原创 【数据结构与算法】带你玩透回溯法

回溯法递归算法中非常经典的思想:回溯法。这样的算法思想通常都应用在一类问题上,这类问题叫做树型问题。用回溯算法解决问题的一般步骤:1、 针对所给问题,定义问题的解空间,它至少包含问题的一个(最优)解。2 、确定易于搜索的解空间结构,使得能用回溯法方便地搜索整个解空间 。3 、以深度优先的方式搜索解空间,并且在搜索过程中用剪枝函数避免无效搜索。简单来说,回溯法可以理解成为通过选择不同的岔路口,来寻找目的地,一个岔路口一个岔路口的去尝试找到目的地,如果走错了路的话,继续返回到上一个岔路口的另外一

2021-03-14 14:36:51 498

原创 【超详细小白教学】Vue+nodejs电商项目部署指南

【超详细小白教学】Vue电商项目部署指南前言食用指南:推荐照着我的设置来走。在最前面,厚着老脸,跟大家要一个star。???? 本项目Github源码1 准备工作1.1 云服务器购买进入阿里云官网 找到上边导航栏的产品→云服务器ECS随后点击立即购买进入购买页面后,按照我的选择进行选择就好啦在实例中,选择当前带,筛选“1vCPU"然后选择这个最便宜的17.1的就好啦,够用。其他默认接下来选择镜像 公共镜像Alibaba 2.1903。接下来是选择存储和购买时长。存储的话,

2021-01-22 13:48:58 6706 21

原创 Redux、React-Redux、applyMiddleware源码剖析 So easy

Redux 基本原理剖析前言通过本文章,你将学到什么?Redux 的设计思路、基本原理和实现。React-Redux 的设计思路、基本原理和实现。applyMiddleWare 的设计思路、基本原理和实现。一、Redux 的设计思路Redux 知识简要我们知道 Redux 它的前世是 Flux,主要涉及四个方面的东西:actiondispatchreducerstoreRedux 的三个特点分别为:单一 Storestate 只读reducer 是纯函数Re

2022-03-05 11:04:01 488

原创 JS 常用的六种设计模式介绍

常用设计模式前言我们经常听到一句话,“写代码要有良好的封装,要高内聚,低耦合”。究竟怎样的代码才算得上是良好的代码。什么是高内聚,低耦合?即五大基本原则(SOLID)的简写高层模块不依赖底层模块,即为依赖反转原则。内部修改关闭,外部扩展开放,即为开放封闭原则。聚合单一功能,即为单一功能原则。低知识要求,对外接口简单,即为迪米特法则。耦合多个接口,不如独立拆分,即为接口隔离原则。合成复用,子类继承可替换父类,即为里式替换原则我们为什么要封装代码?其实封

2022-02-07 23:17:49 7134

原创 2021TypeScrip学习指南(最新)——看不懂你打我

TypeScript Study一、TS 基本类型1.1 Boolean类型1.2 Number类型1.3 String类型1.4 Array类型let list: number[] = [1, 2, 3];// ES5:var list = [1,2,3];let list: Array<number> = [1, 2, 3]; // Array<number>泛型语法// ES5:var list = [1,2,3];ReadonlyArray类型告诉

2021-10-23 23:16:48 1262

原创 JavaScript 函数式编程——入门指南

JavaScript 函数式编程一、什么是函数式编程**定义:**函数式编程是一种编程范式,将整个程序都由函数调用以及函数组合构成。可以看成一条流水线,数据可以不断地从一个函数的输出流入另一个函数的输入,最后输出结果。1.1 从例子了解函数式编程要求:字符串数组变成一个对象数组,并对人名进行转换。['john-reese', 'harold-finch', 'sameen-shaw'] // 转换成 [{name: 'John Reese'}, {name: 'Harold Finch'}

2021-10-23 21:26:46 509

原创 Type-challenges类型体操 1097-IsUnion 题解

IsUnion题解:type IsUnion<T extends any, O = T> = T extends O ? [O] extends [T] ? false : true : never有同学就会问了,为什么这样阿?[T] 和 [O] 有什么区别阿?让我来解密一下原理。本题利用分布条件类型,extends会应用于联合类型的每个成员什么是分布条件类型?被检查类型(即上述的T)是裸类型参数的条件类型称分布条件类型。在实例化期间,分布条件类型会自动分布在联合类型上,即

2021-10-20 11:30:37 934 2

原创 Flutter 入门指南之 Dart 语言基础

一、基础篇1.1 Dart 语言的优势Dart 语言的优势1、支持 AOT 编译和 JIT 编译两种方式2、Dart 为单线程,不允许抢占。TODO:深入了解 AOT 和 JIT1.2 Dart 语言的基本语法变量声明1、可以通过 var 定义变量,支持闭包2、Dart 属于强类型语言,自动推导类型,并变量类型不能发生改变。3、没有初始化的变量都会被赋予默认值 null4、常量声明:const 、 final,区别为const 编译时常量,必须在声明时初始化,且初始化值必须为确定值

2021-10-07 10:50:16 507

原创 Mobx 入门

Mobx的基本使用Mobx环境准备在react项目中安装 Mobx 和 Mobx-reactnpm install mobx mobx-react安装装饰器插件npm install @babel/plugin-proposal-decorators// 装饰器的一个插件此时使用装饰器@xx会报错对修饰器的实验支持是一项将在将来版本中更改的功能。设置"experimentalDecorators"选项以删除此警告。解决方案:搜索experimentalDecorators,设

2021-09-08 20:05:53 1140

原创 【React基础】入门笔记

React学习React生命周期初始化执行顺序:constructor、componentWillMount、render渲染、componentDidMount、shouldComponentUpdate(prevProps, prevState)、componentWillUpdate(prevProps, prevState) 、componentDidUpdate(prevProps, prevState)state改变执行顺序:shouldComponentUpdate(prevProps

2021-08-22 23:25:13 659 1

原创 leetcode 5. 最长回文子串 js 两种方法

leetcode 5. 最长回文子串题目给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = "babad"输出:"bab"解释:"aba" 同样是符合题意的答案。1 <= s.length <= 1000s 仅由数字和英文字母(大写和/或小写)组成方案一:暴力法两个变量,遍历起始位置和子串长度,判断当前子串是否为回文串,如果是且子串长度>max,则记录子串,更改max值。时间复杂度大概为O(n^3),有题目得到s.length <=10

2021-03-31 11:46:53 744

原创 剑指 Offer 10- II. 青蛙跳台阶问题 js

剑指 Offer 10- II. 青蛙跳台阶问题题目一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 1:输入:n = 2输出:2示例 3:输入:n = 0输出:1代码var numWays = function (n) { if (n <= 1) { return 1; } let dp = new

2021-03-31 11:45:48 331

原创 【leetcode 611】有效三角形的个数 js

【leetcode 611】有效三角形的个数给定一个包含非负整数的数组,你的任务是统计其中可以组成三角形三条边的三元组个数。示例 1:输入: [2,2,3,4]输出: 3解释:有效的组合是: 2,3,4 (使用第一个 2)2,3,4 (使用第二个 2)2,2,3解法一:枚举形成三角形的条件:两边之和大于第三边var triangleNumber = function (arr) { let count = 0; let len = arr.length; for (l

2021-03-29 19:07:35 760 1

原创 【leetcode 42】接雨水 js

【leetcode 42】接雨水题目给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。示例 1:输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。解决思路概念:left_max: 左边的最大值,它是从左往右遍历找到的right_max: 右边的最大值,它是从右往

2021-03-26 16:45:22 201

原创 leetcode 90 子集2 js

leetcode 90 子集2给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。**说明:**解集不能包含重复的子集。解题思路:对于数组中的每一个数字,有两种状态,取或不取。这个问题为一个树形问题,故采用回溯法解决。难点在于如何去重,即剪枝。将数组从小到大排序,重复数字,只取第一个。一个数字有两种状态:1、不取,直接存入结果数组2、取,继续往后搜索。刻意联系的思路:1、递归树,状态变量:当前下标和新数组2、递归出口:当前下标到达末尾,即搜索完

2021-03-23 08:42:25 208

原创 leetcode 77 组合 js

leetcode 77 组合给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。示例:输入: n = 4, k = 2输出:[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4],]解题思路看到题目首先思考使用什么算法、使用什么数据结构。n个数中选k个,每个数字有两种状态,被选或没被选,那么这个时候,我们会发现这个题目的是树形问题。以n=4,k=2为例,当我们选择数字1,第二个数字的选择只能是2,3,4,形成了一

2021-03-23 08:42:04 349

原创 leetcode 39 组合总和 js

leetcode 39 组合总和给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:所有数字(包括 target)都是正整数。解集不能包含重复的组合。示例 1:输入:candidates = [2,3,6,7], target = 7,所求解集为:[ [7], [2,2,3]]解题思路:我们来思考一下题目是需要使用什么数

2021-03-23 08:40:32 273

原创 leetcode 40 组合总和2 js

leetcode 40 组合总和2给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次。说明:所有数字(包括目标数)都是正整数。解集不能包含重复的组合。示例 1:输入: candidates = [10,1,2,7,6,1,5], target = 8,所求解集为:[ [1, 7], [1, 2, 5], [2,

2021-03-23 08:39:20 239

原创 leetcode46 全排列 js

leetcode46 全排列给定一个 没有重复 数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]解题思路:分析题目可知为树形问题,可以使用回溯算法。且每一个数字只能选择一次,故我们需要使用一个变量记录数字是否被选择过。使用刻意练习的思路思考:1、递归树和状态变量。状态变量为新数组。2、递归出口 len === n3、选择列表

2021-03-23 08:38:28 315

原创 leetcode 47全排列2 js

leetcode 47全排列2给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。示例 1:输入:nums = [1,1,2]输出:[[1,1,2], [1,2,1], [2,1,1]]解题思路:这道题我们可以看成填写一个n列的空格,我们需要从左往右填写n个数,每个数只能填一次,我们自然而然地想到穷举,可以画出一个递归树,该题目为树形问题,故可以采取回溯法。由于每个数只能填一次,我们需要使用标记数组来标记数字是否填过。由于为可重复数组,我们需要为每一个元素都

2021-03-23 08:37:40 309

原创 剑指 Offer 38. 字符串的排列 js

剑指 Offer 38. 字符串的排列输入一个字符串,打印出该字符串中字符的所有排列。你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。示例:输入:s = "abc"输出:["abc","acb","bac","bca","cab","cba"]输入:s = "aab"输出:["aba","aab","baa"]解题思路:分析题目,我们可以很容易地看出可以使用遍历的方法进行求解,即为树形问题,使用回溯法。在该题中,题目没有说明字符串中字符不重复,故我们需要对数组进行排列去重。

2021-03-23 08:36:37 315

原创 leetcode 131. 分割回文串 js

leetcode 131. 分割回文串给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。回文串 是正着读和反着读都一样的字符串。示例 1:输入:s = "aab"输出:[["a","a","b"],["aa","b"]]示例 2:输入:s = "a"输出:[["a"]]解题思路:我们对题目进行分析,我们要将字符串分割成若干个回文串,我们的求解思路是从第一个字符开始划分,当形成回文串后,将该回文串放入结果中,再对该下标后的字符进行

2021-03-23 08:35:07 455

原创 js大数加和 leetcode 415 字符串加和

leetcode415 大数相加题目给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。返回的形式是字符串解法一:split+reverse+竖式加法使用split将字符串分割成数组,并使用reverse进行数组翻转,进行竖式相加,注意进位。将每次个位数计算结果保存至结果数组中,最后翻转输出。举个例子来描述处理过程:num1 "123459" ;num2 "123"两个数组翻转后:num1 "954321"num2 "321"此时个位对齐,直接相加,注意保存进位即可。

2021-03-13 17:17:29 175

原创 js怎么实现继承

js怎么实现继承一、原型链继承将父类的实例作为子类的原型,这样根据原型链,子类就可以访问到父类的属性和方法。function Parent() { this.isShow = true this.info = { name: "yhd", age: 18, };}Parent.prototype.getInfo = function() { console.log(this.info); console.log(this.isShow);

2021-03-13 15:13:26 201

原创 js事件委托、事件冒泡和捕获

事件冒泡和捕获事件冒泡是指,事件会从最内层的元素开始发生,一直向上传播,直到document对象。事件冒泡可以形象地比喻为把一颗石头投入水中,泡泡会一直从水底冒出水面。而事件捕获与事件冒泡相反,事件会从最外层开始发生,直到最具体的元素。以该例子为例:<div id="outer"> <p id="inner">Click me!</p></div>p标签发生点击事件时:事件冒泡:p -> div -> body ->

2021-03-13 14:33:12 275

原创 Webpack从0到1学习

WebpackWebpack起步准备工作本地安装webpackwebpakc依赖node.js,先下载node.js,再使用包管理工具npm下载webpack文件夹和文件夹解析dist文件夹:存放打包后的文件src文件夹:存放写的源文件,包含js文件夹、css文件夹等。main.js 入口文件 放在src的最外层,不要放在js文件夹里。功能相关东西放在js文件夹中。index.html 首页package.json 通过npm init生成js文件打包在cmd中进入当前项目

2021-03-05 17:26:44 269

原创 【手撕原理】前端面试题 手写call、apply、bind方法

手写call 、apply 、bind方法实现call方法思路1.在Function原型上增加_call方法,接受两个参数。第一个参数为指定的this值,默认值为window;第二个参数使用剩余运算符展开,获取参数列表。2.将函数this设置为context对象的属性,通过隐式绑定的方式调用函数,把context上的属性删了,并返回函数调用的返回值这里的原理是:this指向调用它的对象,这是是context调用,所以this指向了context。为什么要删除context上的属性。防止

2021-03-03 12:58:19 464 2

原创 一篇文章 带你理解JavaScript的事件循环!

Tasks, microtasks, queues and schedules看不懂英文的话,可以用Google翻译

2021-03-02 17:31:13 109

原创 ES6 Promise总结

2 Promise通过Promise对象,将异步操作以同步操作的流程表达出来,避免层层嵌套的回调函数。2.1 Promise的基本使用 var succeed = false; // 1、创建Promise实例 new Promise((resolve, reject) => { // 2、判断请求情况 // 如果异步请求成功 if (succeed) { resolve("ruoruochen niubi");

2021-03-02 15:15:55 184

原创 Vuex笔记

Vuex1 认识Vuex1.1 什么是VuexVuex 是一个状态管理模式,它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。1.2 什么是状态管理模式?可以简单的看成多个组件共享变量存储在一个对象中。这个状态自管理应用包含以下几个部分:state,驱动应用的数据源;view,以声明方式将 state 映射到视图;actions,响应在 view 上的用户输入导致的状态变化。表示“单向数据流”理念的简单示意2 Vuex的使用2.1

2021-02-26 16:40:50 281

原创 Vue router笔记

Vue router1 认识路由1.1 什么是路由路由是通过互联的网络把信息从源地址传输到目的地址的活动路由器提供两种机制:路由和传送决定数据包从来源到目的地的路径转送就是将数据转移路由表本质是映射表,决定数据包的指向。1.2 前后端路由什么是后端路由浏览器发送请求url,由后端处理url与页面的映射关系,服务器渲染好整个页面后返回给浏览器进行显示。缺点:前后端没有分离,责任划分不明确。编写和维护麻烦。前端路由前端路由诞生背景:前后端分离 (

2021-02-26 16:38:18 696

原创 JavaScript 什么是闭包

JavaScript 什么是闭包?闭包是指有权访问另一个函数作用域中变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,创建的函数可以访问到当前函数的局部变量。闭包有两个常用的用途。1.使我们在函数外部能够访问到函数内部的变量。通过使用闭包,我们可以通过在外部调用闭包函数,从而在外部访问到函数内部的变量,可以使用这种方法来创建私有变量。2.使已经运行结束的函数上下文中的变量对象继续留在内存中,因为闭包函数保留了这个变量对象的引用,所以这个变量对象不会被回收。其实闭包的本质就是作用域

2021-02-22 18:19:06 151

原创 Git常用指令集合

文章目录Git创建仓库添加、提交文件版本管理修改管理关联远程仓库克隆远程库分支管理创建和合并分支解决冲突分支管理策略Bug分支Feature分支多人协作Rebase标签管理创建标签操作标签使用GiteeGit创建仓库//第一步,进入当前要进入文件目录$ mkdir XXX //创建子目录 如果子目录存在则不用这一步$ cd XXX //进入子目录$ pwd //显示路径 确认以进入目录//第二步,通过git init命令把这个目录变成Git可以管理的仓库:$ git init添加、提交

2021-02-21 17:22:43 112

原创 【超详细】CSS水平居中+垂直居中+水平/垂直居中的方法总结

文章目录1.如何实现水平居中行内元素块级元素2.如何实现盒子垂直居中单行的行内元素多行的行内元素块级元素3.如何实现水平垂直居中已知高度和宽度的元素未知高度和宽度的元素1.如何实现水平居中行内元素1.首先看它的父元素是不是块级元素,如果是,则直接给父元素设置 text-align: center;2.如果不是,则先将其父元素设置为块级元素,再给父元素设置 text-align: center;块级元素方法1:margin1.如果盒子宽度给定,给其设置margin: 0 auto;(作用:使盒子

2021-02-21 15:00:09 174

原创 前端高频面试题:BFC是什么,怎么样形成BFC,BFC有什么作用?

BFC是什么,怎么样形成BFC,BFC有什么作用?BFC (Block Formatting Context) 是块级格式化上下文,是Web页面中盒模型布局的CSS渲染模式,是一个隔离的独立容器。怎样形成一个BFC?由以下之一创建:浮动:float元素除了none以外。绝对定位的元素非块级元素具有 display: inline-block,table-cell,flex等。块级元素具有overflow ,且值不是 visibleBFC用处清除浮动,给父元素添加overflow:hi

2021-02-20 17:56:44 424

原创 前端高频面试题:CSS为什么要清除浮动?如何清除浮动?

CSS为什么要清除浮动?如何清除浮动?由于父级盒子很多情况下,不方便给高度,但是子盒子浮动又不占有位置,最后父级盒子高度为 0 时,就会影响下面的标准流盒子。清除浮动的本质是清除浮动元素造成的影响,清除浮动之后,父级就会根据浮动的子盒子自动检测高度。父级有了高度,就不会影响下面的标准流了。清除浮动的方法有:1.clear:both;在浮动元素末尾添加一个空的标签,这个标签必须为块级元素。然后将其设置clear:both,这样就可以清除浮动。**优点:**简单易懂,方便。**缺点:**添加了无意义

2021-02-20 17:55:33 330

原创 面试题:输入网址到网页显示的过程是什么

输入网址到网页显示的过程是什么?回答思路:1.URL解析2.缓存查找3.DNS解析4.TCP连接,三次握手5.服务器响应,浏览器解析。6.浏览器渲染7.TCP连接断开,4次挥手从用户输入一个网址到网页最终展现,中间的大致流程如下:(1)首先浏览器会对 URL 进行解析,分析所需要使用的传输协议和请求的资源的路径。如果输入的 URL 中的协议或者主机名不合法,将会把地址栏中输入的内容传递给搜索引擎。如果没有问题,浏览器会检查 URL 中是否出现了非法字符,如果存在非法字符,则对非法字符进

2021-02-19 22:34:13 744

原创 js正则表达式(RegExp)总结

文章目录正则表达式1.js的RegExp对象1.1 创建RegExp对象1.2 匹配方法2.正则常见语法2.1 匹配模式2.2 元字符2.3 量词2.4 边界符2.5 分组2.6 优先级顺序正则表达式正则表达式是用于匹配字符串中字符组合的模式,即实现对字符串中的信息进行查找、替换和提取操作。下面是我对js中正则表达式的整理与总结。如果大家发现文章中有问题,欢迎大家在评论中指正。1.js的RegExp对象js通过内置对象RegExp支持正则表达式,有2种方法实例化RegExp对象:1.字面量 2.

2021-02-16 20:57:13 3582

原创 2021JavaScript面试题(最新)不定时更新(2021.11.6更新)

介绍 JavaScript的数据类型。1.有两种2.分两种展开说JavaScript的数据类型分为俩种,一种是基本数据类型,一种是引用数据类型1.基本数据类型js 一共有六种基本数据类型,分别是 Undefined、Null、Boolean、Number、String,还有在 ES6 中新增的 Symbol 类型。Symbol 代表创建后独一无二且不可变的数据类型,它的出现我认为主要是为了解决可能出现的全局变量冲突的问题。2.引用数据类型引用数据类型统称为 Object 对象,主要包括对象

2021-02-16 19:02:08 45777 16

Javair.zip

本游戏,飞机在星空的背景下进行战斗,初始生命值为3。一共有三种敌机:小、中、大敌机,有不同的生命值,大敌机会发射子弹。一共有四种道具:双发子弹、三发子弹、导弹、血包。

2020-06-10

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除