0%

编译器和解释器

编译语言在程序执行之前,需要经过编译器的编译过程,并且编译之后会直接保留机器能读懂的二进制文件,这样每次程序运行时,都可以直接运行该二进制文件,而不需要重新编译了。例如C/CppGo

Read more »

dp技巧思路总结——背包

0-1背包相关题目可以参考上一篇文章,这篇开始介绍一些其他的背包问题例如多重背包等。

子集背包问题

这题在0-1背包那边已经讲过了,这里重新讲一次:

Leetcode 416题

Read more »

作用域

作用域指在程序中定义变量的区域,该位置决定了变量的生命周期。通俗理解,作用域就是变量与函数的可访问范围,即作用域控制着变量和函数的可见性和生命周期。

  • 全局作用域
  • 函数作用域

js之前支持上面两种作用域,因为作者设计该语言的时候只是用了最简单的方式。没有块级作用域,这就导致了变量提升这样神奇的设计。

变量提升所带来的问题

由于变量提升作用,使用 js 编写和其他语言相同逻辑的代码,都可能会导致不一样的执行结果。

1. 变量容易在不被察觉的情况下被覆盖

之前前面那篇文章有说到的调用栈执行上下文后声明的会覆盖掉前声明的。

image-20200602001927127

Read more »

最长递增子序列

dp 的难点在于寻找正确的状态转移方程,这里以 最长递归子序列问题 来讲讲 dp 的通用技巧:数学归纳思想

题目 RT:

image-20200529181044741

这里子序列可以是不连续的序列。下面通过设计 dp 来解决问题。

Read more »

变量提升

指在 js 代码执行过程中,js 引擎把变量声明部分和函数的声明部分提到代码开头的“行为”。变量被提升之后,会被设置默认值 undefined。

js 代码执行流程

实际上变量提升这一过程中,变量和函数声明在代码中的位置不会被改变,而是在编译阶段被 js 引擎放入内存之中。一段 js 代码在执行之前需要被 js 引擎编译,编译完成之后,才会进入执行阶段。

image-20200531230502237

Read more »

Chrome V8 基础-上

Node.js 与 Chrome V8

Node.js 的 JavaScript 运行时引擎是 Chrome V8,那么它们是以何种形式链接起来的呢?

  • 2006 年,V8 开始投入研发
  • 2008年9月,V8 发布了第一个版本,并且 Chrome 浏览器也几乎同期发布,至此 js 还是运行在浏览器中的一门脚本语言
  • 2009年, ry 开发了 Node.js

之后 js 就被带入后端领域,V8 也不仅仅只是 Chrome 的一个支持引擎。

与 Chrome 差不多,node 为 v8 提供了一个宿主,只不过前者的宿主中包含的是类似于 HTML DOM、window 对象等内容;而后者则提供了一整个沙箱 vm机制,以及文件系统、网络操作等内容。

也就是说,Node.js 实际上就是 Chrome V8 引擎的一个宿主。如果你有兴趣,也完全可以用 Chrome V8 创造一个别的 .js ,比如 Mode.jsLode.js等。

因此,我们并不需要对 Chrome V8 有一个特别深入的了解,也不需要知道它的算法、原理等。我们只用关心它暴露出来的一些 api,以及使用这些 api 所必要的储备知识。

有了这些 api,我们就能让自己的 C++ 扩展与 Node.js 进行互通了 —— 因为 Node.js 底层很大程度上也是直接使用了 Chrome V8 所暴露出来的 api。

Read more »

分层

因为页面中还有一些复杂的动画效果,例如一些复杂的 3D 变化、页面滚动。为了更方便地实现这些效果,渲染引擎还需要为特定的节点生成专用的图层,并生成一颗对应的图层树(LayerTree)。

想要更直观地理解图层,可以打开 Chrome 的“开发者工具”, 选择“Layers”标签,就可以看到可视化页面的分层情况。

渲染引擎给页面分了很多图层,这些图层按照一定的顺序叠加在一起,就形成了最终的页面。

Read more »

开始

通常,我们编写好 HTML、JavaScript、CSS等文件,经过浏览器就会显示出漂亮的页面。

image-20200526114743309

RT,左边输入html,js,css,这些数据经过中间的一个渲染过程,最终输出为屏幕上的像素。

这中间的渲染模块就是我们需要讨论的问题。

Read more »

大家好,我是 zoomdong,一名大三的学生,目前在北京实习。想给大家分享一下我最近给 Ant-design贡献代码的经历,同时也希望能引导大家来一起参与其中,一起为开源世界来贡献自己的力量!

Read more »

算法思想

  • 在字符串 S 中使用双指针的左右指针技巧,初始化 left = right = 0,索引闭区间 [left, right] 称为一个窗口
  • 先不断增加 right 指针扩大窗口 [left, right],直到窗口中的字符串符合要求(包含了 T 中的所有字符串)
  • 此时,停止增加 right,转而不断增加 left 指针来缩小窗口 [left, right],直到窗口中的字符串不再符合要求 (不包含 T 中的所有字符了)。同时,每次增加 left,都要更新一轮结果。
  • 重复 2 - 3 ,直到 right 到达尽头。
Read more »