首页
学习
活动
专区
工具
TVP
发布

李才哥

专栏作者
177
文章
281355
阅读量
30
订阅数
数据结构与算法:成为程序猿的利刃,优化的代码
你是否曾经对过编写复杂程序的困难?你是否在处理大量数据时感受到代码的低效率?如果是的话,那么天就让我们一起来探索数据结构与算法,这个程序猿们的利刃,它将为你的代码优化提供强大的支持。
李才哥
2023-06-22
1290
前端代码优化案例(初版)
DRY是指Don't Repeat Yourself特指在程序设计以及计算中避免重复代码,因为这样会降低灵活性、简洁性,并且可能导致代码之间的矛盾。《The Pragmatic Programmer》对这一思想做了很好的阐述。把一切重复的代码抽象出来。我觉得最主要的原因是很好维护,当需要改动时只需要改动一次。
李才哥
2023-01-11
3680
理解Buffer
理解Buffer.png 理解Buffer Buffer 结构 Buffer所占用的内存不是通过V8分配的,属于堆外内存 Buffer受Array类型的影响很大,可以访问length属性得到长度,也可以通过下标访问元素 Node在内存的使用上应用的是在C++ 层面申请内存、在JavaScript中分配内存的策略 Node采用了slab动态内存管理分配机制 Buffer 的转换 字符串转Buffer 通过构造函数转换的Buffer对象,存储的只能是一种编码类型 一个Buffer对象可以存储不同编码类型的字符
李才哥
2021-03-02
9050
内存控制
这个限制可以通过 v8 提供的选项解除,如 node --max-old-space-size=1700 test.js
李才哥
2021-02-28
4010
异步编程
异步编程.png 异步编程 函数式编程 高阶函数 高阶函数则是可以把函数作为参数,或是将函数作为返回值的函数, 除了通 常意义的函数调用返回外,还形成了一种后续传递风格 在自定义事件实例中,通过为相同事件注册不同的回调函数,可以很灵活地处理业务逻辑 偏函数用法 通过指定部分参数来产生一个新的定制函数的形式就是偏函数 异步编程的优势与难点 优势 Node带来的最大特性莫过于基于事件驱动的非阻塞I/O模型 只要合理利用Node的异步模型与V8的高性能,就可以充分 发挥CPU和I/O资源的优势 难点 try/c
李才哥
2021-02-28
7200
异步I/O
O.png 异步I/O 为什么要异步 I/O 在跨网络的结构下,并发已经是现代编程中的标准配备了 在浏览器中 JavaScript 执行与 UI 渲染共用一个线程 前端通过异步可以消除掉UI阻塞的现象 采用异步并发下载资源 多线程的代价在于创建 线程和执行期线程上下文切换的开销较大 但是串行执行的缺点在于性能 Node在两者之间给出了它的方案 利用单线程,远离多线程死锁、状态同步等问题 利用异 步I/O,让单线程远离阻塞,以更好地使用CPU 异步 I/O 实现现状 非阻塞I/O跟阻塞I/O的差别为调用之后
李才哥
2021-02-26
8090
Mark-Sweep
Mark-Sweep.png Mark-Sweep 遍历所有对象 标记活对象 清除死亡对象 Mark-Compact 将活动对象往一端移动Mark-Sweep 遍历所有对象 标记活对象 清除死亡对象 Mark-Compact 将活动对象往一端移动Mark-Sweep 遍历所有对象 标记活对象 清除死亡对象 Mark-Compact 将活动对象往一端移动Mark-Sweep 遍历所有对象 标记活对象 清除死亡对象 Mark-Compact 将活动对象往一端移动Mark-Sweep 遍历所有对象 标记活对象
李才哥
2021-02-24
5060
Cheney算法
Cheney算法.png Cheney算法 semispace (From)空间 使用中,对象分配时分配到 From 空间 semispace (To)空间 闲置中 释放内存Cheney算法 semispace (From)空间 使用中,对象分配时分配到 From 空间 semispace (To)空间 闲置中 释放内存Cheney算法 semispace (From)空间 使用中,对象分配时分配到 From 空间 semispace (To)空间 闲置中 释放内存Cheney算法 semispace (
李才哥
2021-02-24
6290
async 函数
async 函数.png async 函数 含义 async 函数是什么?一句话,它就是 Generator 函数的语法糖 一比较就会发现,async函数就是将 Generator 函数的星号(*)替换成async,将yield替换成await,仅此而已 Generator 函数的执行必须靠执行器,所以才有了co模块,而async函数自带执行器 async和await,比起星号和yield,语义更清楚了 co模块约定,yield命令后面只能是 Thunk 函数或 Promise 对象,而async函数的a
李才哥
2021-02-24
6110
Generator 函数的异步应用
Generator 函数的异步应用.png Generator 函数的异步应用 传统方法 回调函数 事件监听 发布/订阅 Promise 对象 基本概念 所谓"异步",简单说就是一个任务不是连续完成的,可以理解成该任务被人为分成两段,先执行第一段,然后转而执行其他任务,等做好了准备,再回过头执行第二段 所谓回调函数,就是把任务的第二段单独写在一个函数里面,等到重新执行这个任务的时候,就直接调用这个函数 Promise 对象是一种新的写法,允许将回调函数的嵌套,改成链式调用 Generator 函数 第一步
李才哥
2021-02-24
9100
Generator 函数的语法
Generator 函数的语法.png Generator 函数的语法 简介 Generator 函数是 ES6 提供的一种异步编程解决方案,语法行为与传统函数完全不同 语法上,首先可以把它理解成,Generator 函数是一个状态机,封装了多个内部状态 执行 Generator 函数会返回一个遍历器对象,也就是说,Generator 函数除了状态机,还是一个遍历器对象生成函数 一是,function关键字与函数名之间有一个星号 二是,函数体内部使用yield表达式,定义不同的内部状态 总结一下,调用 G
李才哥
2021-02-24
3580
Iterator 和 for...of 循环
Iterator 和 for...of 循环.png Iterator 和 for...of 循环 Iterator(遍历器)的概念 一种统一的接口机制,来处理所有不同的数据结构 为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署 Iterator 接口,就可以完成遍历操作 一是为各种数据结构,提供一个统一的、简便的访问接口; 二是使得数据结构的成员能够按某种次序排列; 三是 ES6 创造了一种新的遍历命令for...of循环,Iterator 接口主要供for...of消费 默认 Iterat
李才哥
2021-02-24
3310
Promise
Promise.png Promise Promise 的含义 Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大 对象的状态不受外界影响。Promise对象代表一个异步操作,有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败) 一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise对象的状态改变,只有两种可能:从pending变为fulfilled和从pending变为rejected 基本用法 ES6
李才哥
2021-02-23
6750
Set 和 Map 数据结构
Set 和 Map 数据结构.png Set 和 Map 数据结构 Set ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值 上面代码向 Set 实例添加了两个NaN,但是只能加入一个。这表明,在 Set 内部,两个NaN是相等 Set.prototype.constructor:构造函数,默认就是Set函数。 Set.prototype.size:返回Set实例的成员总数 add(value):添加某个值,返回 Set 结构本身。 delete(value):删除某
李才哥
2021-02-23
4730
Symbol
Symbol.png Symbol 概述 ES5 的对象属性名都是字符串,这容易造成属性名的冲突 Symbol的引入,保证每个属性的名字都是独一无二的就好了,这样就从根本上防止属性名的冲突 它是 JavaScript 语言的第七种数据类型,前六种是:undefined、null、布尔值(Boolean)、字符串(String)、数值(Number)、对象(Object) Symbol函数前不能使用new命令,否则会报错 Symbol 值不是对象,所以不能添加属性 Symbol 值不能与其他类型的值进行运
李才哥
2021-02-23
7610
对象的扩展
对象的扩展 对象的扩展.png 属性的简洁表示法 ES6 允许直接写入变量和函数,作为对象的属性和方法。这样的书写更加简洁。 属性名表达式 JavaScript 定义对象的属性,有两种方法 方法一是直接用标识符作为属性名,方法二是用表达式作为属性名,这时要将表达式放在方括号之内 注意,属性名表达式如果是一个对象,默认情况下会自动将对象转为字符串[object Object] 方法的 name 属性 函数的name属性,返回函数名。对象方法也是函数,因此也有name属性 如果对象的方法使用了取值函数(get
李才哥
2021-02-23
6790
数组的扩展
数组的扩展 数组的扩展.png 扩展运算符 扩展运算符(spread)是三个点(...)。它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列 由于扩展运算符可以展开数组,所以不再需要apply方法,将数组转为函数的参数了 数组是复合的数据类型,直接复制的话,只是复制了指向底层数据结构的指针,而不是克隆一个全新的数组 扩展运算符提供了数组合并的新写法。 扩展运算符可以与解构赋值结合起来,用于生成数组 扩展运算符还可以将字符串转为真正的数组。 任何 Iterator 接口的对象(参阅 Iter
李才哥
2021-02-23
5010
字符串的扩展
字符串的扩展 字符串的扩展.png 字符的 Unicode 表示法 JavaScript 允许采用\uxxxx形式表示一个字符,其中xxxx表示字符的 Unicode 码点 ES6 对这一点做出了改进,只要将码点放入大括号,就能正确解读该字符 codePointAt() JavaScript 内部,字符以 UTF-16 的格式储存,每个字符固定为2个字节 对于这种4个字节的字符,charAt方法无法读取整个字符,charCodeAt方法只能分别返回前两个字节和后两个字节的值 ES6 提供了codePoin
李才哥
2021-02-23
4230
变量的解构赋值
变量的解构赋值.png 变量的解构赋值 数组的解构赋值 ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构 本质上,这种写法属于“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的值 如果解构不成功,变量的值就等于undefined 不完全解构,即等号左边的模式,只匹配一部分的等号右边的数组 对于 Set 结构,也可以使用数组的解构赋值 只要某种数据结构具有 Iterator 接口,都可以采用数组形式的解构赋值 解构赋值允许指定默认值 只有当一个数组成员严格等于und
李才哥
2021-02-23
1.9K0
let 和 const 命令
let 和 const 命令.png let 和 const 命令 let 命令 声明的变量,只在let命令所在的代码块内有效 for循环的计数器,就很合适使用let命令 let命令改变了语法行为,它所声明的变量一定要在声明后使用,否则报错 不存在变量提升 只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响 如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域 凡是在声明之前就使用这些变量,就会报错 “暂时性死区”
李才哥
2021-02-23
2560
点击加载更多
社区活动
Python精品学习库
代码在线跑,知识轻松学
【玩转EdgeOne】征文进行中
限时免费体验,发文即有奖~
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·干货材料·成员作品·最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档