自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 问答 (1)
  • 收藏
  • 关注

原创 分治算法浅谈(js角度)

算法世界是一个增加知识以及增加思想的地方。深入学习算法,可以从底层夯实自己的编程能力和解决问题的能力。今天来谈一谈经典算法之一——分治法。分治的核心思想:将一个大问题(多重计算),一步一步(递归)分解为原子问题(简单计算),再进行合并(连接)。伪代码模板:function divideAndConquer(参数列表){ if(分割终止条件){ return } 分割操作(比如中间分割) const left const right

2021-11-01 22:52:30 174

原创 单调栈算法浅谈(javaScript角度)

这是栈这个数据结构特殊的表现形式,主要就是从栈顶到栈底的存储拥有一个递增或者递减的规则。单调栈思想模板:维护一个递增或者递减的stack,找出stack具体存什么(下标或者项数值),单调数据存入栈中,遇到非单调数据就出栈,以及其他的一些计算操作,并且直到栈种的数据重新回归单调。更新栈后继续遍历。伪代码:function monotoneStack(数据参数){ const stack = [] 定义一个结果容器 for(遍历数据){ while.

2021-10-04 18:10:37 522

原创 从股票买卖引申出来的几种思想(面试必看)

股票买卖这个算法话题可以说是在基础算法这一块是一个很有意思的存在了。题目稍微变一些或许就回要以完全不同的眼光去看待这个问题。话不多说,一起来看看...给定一个数组 prices ,它的第i 个元素prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。输入:[7,1,5,3,6,4]输出:5...

2021-10-03 22:32:39 135

原创 从全排列引申出来的算法——回溯DFS

回溯思想简单来说:从一条路往前走,能进则进,不能进则退回来,换一条路再试。当然这样也太抽象了,运用在算法里面的思想就是转化为树和图。回溯法思路的简单描述是:把问题的解空间转化成了图或者树的结构表示,然后使用深度优先搜索策略进行遍历,遍历的过程中记录和寻找所有可行解或者最优解。和动态规划一样,也有一个三板斧:1.dfs函数参数的确定2.确定递归终止条件3.确定单层搜索逻辑回溯算法适合:由多个步骤组成的问题,并且每个步骤都有多个选择项,所有就是类似一个树形结构。如果总结一下的话.

2021-09-26 14:29:45 300

原创 关于一维/二维数组动态规划的思考(javaScript角度)

动态规划思想是从运筹学上渗透下来的,用来求解某种有最优性质解的问题。首先得满足三大性质:1.最优解原理,问题包含的最优解子问题也是最优的2.无后效性,即是先前状态的确定后,将不会再受之后状态的影响。3.有重叠子问题,先前状态的解在之后会被用到(但是这个不是必需的)因此,解题的步骤也比较有“技巧性”的分为几步:划分阶段:按照问题的时空特征,将问题划分为有序的几个阶段。确定状态变量:将各个阶段用不同的状态表示出来。写出状态转移方程:根据上一阶段的状态推导出本阶段的状态。寻找边界条

2021-09-25 17:57:06 580

原创 浅谈react——状态更新之后发生了什么

学习react底层的过程,和学习其他原理一样,抓住一些关健的点,也就是关键的函数(往往代表了一些阶段),可以对源码的把握以及 图像化的流程更加清晰和易懂。我们知道facebook团队在react16之后就对react底层有一些重大的重构,一句大白话来解释就是,让react可以实现异步可中断的更新。至于怎么实现的,是react引入了Scheduler调度器,会分配给js线程一个初始的执行时间,源码里面yieldInterval=5ms,如果预留的时间不够浏览器渲染的话,那么react就会将控制权.

2021-09-11 22:08:58 472

原创 浅谈java和javascript的区别和联系?

这个问题的答案是,yes。javascript的名字是不是意味着和java有什么渊源呢?据说,javascript之所以名字里面有java,就是为了蹭当时java的热度。如果说两中语言框架大同小异的话,那么肯定就是先来着为王,所以javascript肯定有自己区别于其他语言的“创新点”,接下来一起看看,开始正题。Java是面向对象的编程语言,摒弃了C++里面的多继承和指针等概念(其实也不是放弃了多继承,只是多了一层封装,java是在接口上进行的多继承)1.怎么理解java是强类.

2021-09-01 21:40:10 1091

原创 分享一个有意思的JS题目,循环打印,可以有几种解法?

有的好题目确实也可以串联一大部分的知识点!循环打印,想必大家都是信手拈来了。但是你有多少种方式实现呢?es5这种情况想必不陌生for(var i=0;i<5;i++){ setTimeout(() => { console.log(i) }, 1000); }// 5// 5// 5// 5// 5但是又es6的块级作用域就迎刃而解for(let i=0;i<5;i++){ setTimeout(() =&

2021-08-24 10:05:34 167

原创 Http2.0的一些思考以及Http3.0的优势

http的协议的发展也是经过了一个比较漫长的阶段,从最初的只支持get请求和纯文本的返回内容,到现在的各种文件,超文本...的传输,http协议毫无疑问是越来越强大了,而且,在这种演变中一定会有许多大佬的智慧的结晶,所有学习这些不仅可以丰富我们的知识,还能在某种程度上丰富自己的思维!本文着重于1.0,2.0,3.0的版本的差异以及一些深层的原因。先从2.0开始.一,二进制分帧先解释一下,就是将一条连接上所有传输的信息,分割为更小的消息和帧(消息则是由一个或者多个帧组成的),并对他们采用二进制格式

2021-08-21 21:30:10 5049

原创 浅谈从源码里面谈react的diff算法

react和vue作为两个目前影响力最大的两套框架,在性能提升方面,都采用了虚拟dom这种理念,在内存中运行,而不会马上改变dom结构。再一个就是使用了diff算法,但是直接diff两棵树会有问题,考虑到一个树上的节点可以复用,以及可以增加或者删除,会导致时间复杂度过大O(n*n*n)怎么解决?react和vue都是默认同级比较的,这样就只需要考虑新增以及删除节点的操作复杂度O(n),极大的提高了效率。当然,vue和react的具体实现还是不同的,vue在diff的时候调用patch函数

2021-08-14 14:12:03 94

原创 手动实现一个完整的promise是个什么感受

说到promise,学前端的应该都很熟悉了。promise的用处可谓是很大了,解决地狱回调,异步并发任务的执行...最近感觉用promise就像用框架一下,知道一些API和基本用法,就可以使用promise做一些简单的操作。既然有框架那么就有对应的底层源码,那就深入的学习一下吧。以下仅是个人的思考的写法,参考了一些大佬的思路,如有偏颇请批评指正。总而言之,手写promise确实不简单,开始写之前可以先将promise的基本用法写上做一个对照。//promise的基本用法co.

2021-08-09 20:51:37 108

原创 浅谈React里面的Fiber

自从react从15版更新到16版后,虽然使用上差别不会很大也提供了一定的兼容性,但是react的底层架构确有了很大的变化。React Fiber横空出世...React15最大的问题就是Reconciler阶段产生产生虚拟DOM是通过深度优先递归的,并且中途不可间断。所以假如虚拟DOM很深的话,由于JS线程和浏览器GUI线程是互斥的,处理js的时间过长,会导致浏览器刷新的时候掉帧,造成卡顿。而React16则实现了异步的可中断的更新。那么Fiber到底是个啥?其实Fiber怎么说都可以...Fib

2021-08-06 22:27:30 646

原创 Object.prototype.toString.call()和Array.prototype.slice.call()的原理

最近发现了个判断js数据类型的“终极武器”,Object.prototype.toString.call()。首先来看效果。//1.判断基本类型: Object.prototype.toString.call(null);//”[object Null]” Object.prototype.toString.call(undefined);//”[object Undefined]” Object.prototype.toString.call(“abc”);//”[object String]

2021-08-02 11:07:12 758

原创 谈谈promise的易错点吧

promise作为ES6里面的“大部头”,说简单也不是很难,说难吧感觉也确实挺难。下面我总结一下我自己关于promise的一些易错点和注意点,以及promise源码相关吧。1.Promise 构造函数是同步执行,promise.then 是异步执行,并且是微任务。上代码。const prom = new Promise((res, rej) => { console.log('first'); res(); console.log('second');});prom.then

2021-07-30 22:40:30 126

原创 通过性能优化这条线串联前端

因为前端的界面呈现是直接和用户交互的,所以方方面面的性能优化,像页面加载呈现的速度,动画的效果,以及网络请求的优化等等,都直接关系到用户的体验!无优化,不前端!所以作为网页的开发者,就先从输入url到页面渲染呈现这个过程中去提升网页的性能,再去拓展到工程化等等。从客户端输入了URL发起请求,到页面的最终呈现,貌似有一根“优化”线...1.减少DNS的查找...

2021-07-28 22:32:39 86

原创 谈谈我对缓存的思考

缓存可以说是无处不在的存在。先分类,在web缓存里面,可以分为数据库缓存,服务器缓存,代理服务器缓存,CDN缓存以及浏览器缓存。缓存在我脑海里面的映像整体而言就是一个字“快”。而在前端的缓存里面,主要就是包含的浏览器缓存和HTTP缓存。...

2021-07-25 22:07:25 79

原创 谈谈我思考总结的一些算法思想方法

算法依托于数据结构而存在,所以在每种语言中,或多或少,都会有一些专门针对这些数据结构来解决问题的方法。下面就谈一谈我的一些思考。个人不才,总结了一个小小的公式,算法=数据结构+逻辑+(创新性)在前端中,使用频率比较高的,应该就是数组,链表,队列,栈,二叉树以及Map和Set结构。其中呢,由于数组的API很多很强大,在js中经常使用数组的pop和push来模拟栈操作。用数组的shift和push来模拟队列的操作,这很重要。Map和Set结构,可以对数组的某些方向增强(比如数组去重等等)。思想上以.

2021-07-24 22:40:35 125 2

原创 谈谈我对手写JS数组API的通性思考

怎么样才算吃透一个API呢,个人觉得至少还得能够快速手写出其实现的源码。数组里面的API很多也很好用。下面来介绍几个常用的而且功能强大的API(至于到底有多少种用法,本篇不细讲)。1.map(fn,thisArg),对数组进行遍历操作返回新数组Array.prototype.mymap=function(fn,toThis){ let result=[] let arr=toThis?toThis:this //map函数可以指定this fo...

2021-07-22 22:16:04 91

原创 谈谈手写节流防抖的里面的关键点

手写节流和防抖,由于其本身不算很简单,需要一定的知识积累,也就成了很多面试官筛选候选人的一种考察方式了。这两个概念也比较接近,但是我个人觉得这并不是什么“故弄玄虚”,相反这种比较学习法更能加深对知识本身的理解很认真。话不多说,先来看看防抖和节流是用来干嘛的?防抖:防止事件多次触发,也就是转化多次触发为一次触发。举个例子,用户框输入的时候,等到用户输入暂停(代表输入完成)后隔一段事件才会触发onChange事件。节流:如果你持续触发事件,则就会定期每隔一段时间触发一次。比如咱们的拖拽事件。上防

2021-07-21 21:32:18 121

空空如也

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

TA关注的人

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