Kylen Blog

数据结构和算法之美-第二篇-浅析最好、最坏、平均、均摊时间复杂度

前言我们已经知道如何分析一段代码的时间复杂度,这可以帮助我们写出更优秀的代码,在大多数情况下已经足够了。但在某些场景下,我们可能需要分析的再细致一些。比如具体某个性能调优的场景,我们知道数据规模的波动范围就能选择性的调整我们的代码。 最好、最坏情况时间复杂度顾名思义。最好情况时间复杂度:在最理想的情况下,执行这段代码的时间复杂度。最坏情况时间复杂度:在最糟糕的情况下,执行这段代码的时间复杂度......

数据结构和算法之美-第一篇-如何进行复杂度分析

什么是复杂度分析我们知道,数据结构和算法本身解决的问题是“快”和“省”的问题,,即如何让代码运行的更快,如何让程序更省存储空间。我们实际场景中通常需要综合考量现有的存储空间最大化执行效率。我们经常说的空间换时间,时间换空间就是一种综合考量。 “快”和“省”的问题也就是时间和空间的问题。所以复杂度分析就是分析代码的执行效率和占用存储空间的分析过程。具体也分为时间复杂度和空间度两个维度。 复杂度......

数据结构和算法之美-第零篇

前言工作也有两三年了,从最开始的拘谨到现在游刃有余,可怕的是,回过头一看,我并不认为自己的能力有了一个质的提升,可能只是对工作更熟悉了。偶尔看到一些优秀的开源代码,读起来及其吃力,等到读懂了,不禁为作者身后的功底折服,也迫使我不得不去思考自己究竟差在哪里,该往哪个方向努力。 在我上大学期间就已经接触过数据结构和算法,因为懒眼光短加上这东西本身真的很深奥(在我看来),造成的后果就是对它的掌握很......

JS专题系列-第零篇

JS基础和进阶专题部分的内容是标准和规范。对开发者来说,更关心的还是怎么用。我们首先接触一门语言从一个小小代码段开始的,比如一个简单的hello world。写的代码多了,也不断积累了一些经验,短期可能提升很快,但基础的匮乏却限制了能够到达的高度。所以我回头整理了JS基础和进阶系列的知识点。对以前很多模凌两可、似懂非懂的知识点有了新的认识,我觉得很有意义。 这个专题,主要研究日常开发中一些常......

前端程序员进阶之路

前言时间过的很快,你不珍惜它,它就会让你焦虑。我现在就很焦虑。从去年开始就愈发感到自己有很多不足,为此匆匆报了一些课程,现在看来,一部分是有价值的,也有一部分就是交了一波智商税,谁让自己不过脑子呢。 这个计划写的有点晚,可能是六月份和七月份多少总结了点东西,对自己多少有了点信心。 做为一名开发者,如何成长和提高,最稳健的方式我想应该是广读群书,《JavaScript权威指南》《Javasci......

计算机是如何工作的?

前言本来只想写一篇JS单线程的设计以及这种设计产生的现象问题和解决方案。但接触的概念多了,发现很多以前没有想过的问题、或者想过却因为不在专业领域范围内就忽视的问题,都很值得一谈究竟,所以单独整理这篇,用来记录和加深我对计算机的理解。 物质结构和电没有电就自然就没有电器,计算机要有电才能用(废话)。所以我们先要弄清楚电是什么,或者电能是一种什么样的能量。下面的内容是一些物理和化学的一些常识,上......

JS进阶系列-第八篇-事件循环

前言关于单线程的一些概念和详情可以看之前的文章。CPU可以并发来实现物理上的多个任务同时执行,其实单核CPU同一时刻只能做一件事,由系统协调各进程线程的有序执行。单线程的JS同样,同一时刻只能做一件事,由事件循环机制(event loop)决定任务的执行顺序。我们是写JS,无时无刻不再跟JS打交道,所以事件循环机制是一个必须掌握的知识点。 浏览器中的JS我们说JS是单线程的,其实只是说JS引......

JS进阶系列-第七篇-this

前言一直以来对this的粗浅理解:如果一个函数被一个对象所拥有,在调用的时候以[对象.函数]的形式调用,那么函数内部的this则指向这个对象;如果是直接调用函数内部的this默认指向undefined,非严格模式下,会被自动指向全局对象。 就如同下面的例子一般,前者输出2,后者输出1: 12345678910var value = 1var obj = { value: 2, ......

JS进阶系列-第六篇-作用域链和闭包

作用域作用域是指程序的源代码中定义变量的区域。 作用域规定了如何查找变量,也就是确定当前执行代码对变量的访问权限。 JavaScript采用词法作用域(lexical scoping),也就是静态作用域 注:好像没听过语法作用域 作用域有静态作用域(词法作用域)和动态作用域之分。它们之间的区别是:静态作用域是在定义的时候确定的,动态作用域是在运行时确定的。前者关心函数在何处声明,后者关心函数......

JS进阶系列-第五篇-变量对象

前言我们知道一个函数执行时,会创建一个执行上下文,而一个执行上下文的声明周期可以分为两个阶段: 创建阶段在创建阶段,执行上下文会创建变量对象、生成作用域链、确定this的指向 代码执行阶段创建完成之后,会执行代码,包括赋值语句、函数调用和其他语句 从这里我们就可以看出详细了解执行上下文极为重要,因为其中涉及到了变量对象,作用域链,this等很多人没有怎么弄明白,但是却极为重要的概念,它......