Blog is A Room

Welcome to Nicodechal's Blog

[VSCode 源码阅读笔记] VSCode 的进程间通讯 ( 二 )

ChannelClient 和 ChannelServer

本文介绍 VSCode 中的 ChannelServer 和 ChannelClient。 前面提到,VSCode 中 Server 对象维护了一个 Channel 的列表,客户端连接 Server 时可以会创建一个连接 Connection,Connection 中的 channelClient 可以发起请求调用方法或监听事件,请求打包成一条消息发送给 channelServer,ch......

[VSCode 源码阅读笔记] VSCode 的进程间通讯 ( 一 )

从 mainIpcServer 开始

本文从 mainIpcServer 相关源码出发了解 VSCode 中的进程间通讯的大致过程 mainIpcServer 的产生 mainIpcServer 在 CodeMain 中的 startup() 中产生: 1234567891011121314class CodeMain { private async startup(args: ParsedArgs): Pro......

[VSCode 源码阅读笔记] VSCode 的事件处理

以日志服务 BufferLogService 为例

本文从 VSCode 的日志服务之一了解 VSCode 的事件分发和处理。阅读版本为官方当前最新代码的 master 分支。 AbstractLogService 我们已经知道,VSCode 启动后,会从 src/main.js 异步加载并运行 CodeMain 实例的 .main() 方法并开始启动第一个页面。但是,在 startup(args) 一开始执行时,会先创建一个 buff......

[VSCode 源码阅读笔记] VSCode 的启动流程

本文总结 VSCode 的大致启动过程,即从启动到打开第一个界面之间的过程。阅读版本为官方当前 最新代码 的 master 分支。 启动 CodeMain 下面介绍从启动到运行 CodeMain 的过程。 VSCode 的启动脚本为 src/main.js。其在完成一些必要的设置后 (包括启用 ASAR、设置一些路径和缓存、注册 Scheme、启动全局监听器以及解析启动的命令行参数和配......

CSS Specificity 计算

深入 CSS

Specificity 用于决定那一条 CSS 属性和一个元素最相关,并将该属性应用到该元素上。Specificity 基于匹配规则进行计算,匹配规则由一系列 CSS 选择器合成。 一个例子 下面首先通过一个例子来说明 Specificity 的使用方式。假设有如下的 html 文档: 123<div id="test"> <span>Text</span&......
CSS

对于 Webpack 中的路径的理解

Webpack 概念理解

Webpack 打包工具涉及很多的路径的设置,本文对其中的路径进行分析和总结。 Webpack 中的路径 Webpack 中涉及到的路径: Webpack 打包相关的全局路径 output.path 一个绝对路径,指定打包文件的输出文件夹,(默认值:path.join(process.cwd(), 'dist'))。打包文件指的是经过 Webpack 处理得到的文件。 这里就是指定了文......

双向广度优先遍历

算法学习笔记

本文说明双向广度优先遍历算法,并以 LeetCode.127 说明双向广度优先遍历的使用方式。 常规的广度优先遍历 常规的广度优先遍历通常会使用队列实现,首先将起点加入队列,然后不停遍历队列直到队列为空或找到结果,每次取出队头进行处理,处理完毕后,如果还未得到结果,则将和队头相关连的未被访问过的节点加入到队列中。 例如,求一个节点到另一个节点的最短路径的代码可能如下 (不是完整代码):......

快速排序 ( QuickSort ) 和快速选择 ( QuickSelection )

算法学习笔记

这里介绍快速排序 ( QuickSort ) 算法及其衍生算法快速选择 ( QuickSelection ) 算法,并以 LeetCode.324 为例说明快速选择算法的应用。 快速排序算法 ( QuickSort ) 快排是一个经典的排序算法,其时间复杂度为 O(nlogn)O(nlogn)O(nlogn), 其基本流程如下,对于以个数组 nums: 首先选定一个轴心值 p。 将数组中......

KMP 算法 —— 理解与实现

算法学习笔记

这里简单介绍 KMP 算法及其实现思路。KMP 算法实现了在线性时间内完成子串的查找,下面首先介绍基本的匹配算法,在考虑如何使用 KMP 的思路加快匹配。 基本的匹配算法 基本的思路,就是使用两个指针分别指向字符串 A 和待查找字符串 B,然后比较两个指针处的字符是否相等,如果相等就同时推进两个指针,否则回退两个指针 ( 具体来说,两个指针都先回退 B 指针移动的距离,此时,B 指针回到索......

马拉车算法 ( Manacher’s Algorithm ) 理解与实现

算法学习笔记

这里介绍用于计算回文子串的算法 Manacher’s Algorithm。 简单的办法 容易想到复杂度为 O(n2)O(n^2)O(n​2​​) 的算法,对于每一个字符及他们的间隔进行遍历,每个位置从中心扩展,即每次同时检查关于该点轴对称的两点,如果相等继续扩展直至无法扩展,例如对于串 “abacaba” 需要遍历下面的所有位置 ( 间隔处使用 “#” 标出,实现时,也可以先在字符串间加入......