JS拾遗笔记
本文主要记录了 JS 基础以及 ES6 的相关笔记,随缘更新。
JS 基础基本概念
JS 中 label 标签用来终止或者跳过外层循环
12345678910111213141516171819202122232425top: for (var i = 0; i < 3; i++) {
for (var j = 0; j < 3; j++) {
if (i === 1 && j === 1) break top;
console.log("i=" + i + ", j=" + j);
}
}
// i=0, j=0
// i=0, j=1
// i=0, j=2
// i=1, j=0
// 直接进入下一轮外层循环
top: for (var i = 0; i < 3; i++) {
for (var j = 0; j < 3; j++) {
if (i === 1 && j === 1) continue top;
console.log(& ...
JS事件循环
本文主要介绍了 JS 中的事件循环概念,详细讲解了 Browser 中的事件循环以及 Node.js 中的事件循环。
查看参考资料
参考方向教程原帖面试必问之 JS 事件循环(Event Loop),看这一篇足够面试必问之 JS 事件循环(Event Loop)Node.js 事件循环Event Loop通俗移动的 Node.js 事件循环node.js 事件循环
前言JS 是一门单线程的语言,执行过程中每一步代码都有严格的先后顺序,但 JS 也能够实现异步编程,JS 本身并不具备异步编程的能力,其异步编程是依赖其宿主实现的,而实现异步编程的核心机制就是事件循环。
浏览器中 JS 异步执行的原理例如发送ajax请求以及设定setTimeout定时器,实现这种异步,主要依赖于浏览器的定时触发线程以及 HTTP 请求线程,即浏览器才是执行发送请求以及定时功能的角色,JS 引擎只负责执行这些事件回调的代码。
浏览器的进程与线程以 Chrome 为例,浏览器不仅有多个线程 ...
深入了解Promise
本文主要讲解 Promise 的常用方法以及使用技巧,并实现如何手写一个 Promise。
Promise 的出现回调地狱问题在传统的 JS 编程中始终存在一个问题,即当当前回调函数的执行依赖于上一个回调函数的执行结果的时候,会形成回调函数层层嵌套的问题,严重影响代码的可读性与可维护性,这种现象一般称之为回调地狱。
下面为示例代码,回调地狱的一个比较常见的情景为ajax请求,即下一个请求的是否发起依赖于上一个请求的结果。
12345678910111213141516171819202122232425let xhr = new XMLHttpRequest();
xhr.open(
"get",
"https://v0.yiketianqi.com/api?unescape=1&version=v61&appid=82294778&appsecret=4PKVFula&city=%E5%8C%97%E4%BA%AC"
);
xhr.send();
xhr.onreadystatechange = fu ...
Git 笔记
本文为个人自用 Git 笔记,记录了 Git 的常用命令,不定时更新(●’◡’●)。
Git 常用命令clone
基本格式为:git clone [url] [directory],其中[directory]表示需要创建目录的本地名称,省略则默认为版本库的名称。有一些附加参数如下
-l | --local:只有当指定的版本库是一个本地路径才会生效,能跳过正常的传输机制,直接复制.git目录下的部分文件,即使不指定这个选项默认也会采用本地优化,但注意由于硬链接的特性,本地优化的克隆方式存在一些风险。
-s | --shared:当远程版本库在本地机器上时,使用这个选项可以让本地版本库与远程版本库共享对象文件,而不是复制或链接。
--depth <depth>:使用这个选项可以创建一个浅克隆,即只获取最近的<depth>个提交,而不是整个历史记录。这样可以节省时间和空间。
--single-branch:使用这个选项可以只克隆远程版本库的一个分支,而不是所有分支,来节省克隆时间。默认情况下,这个分支是当前活动分支。
123456# 克隆本地机器上的一个项目到 ...
Vite基础知识总结
本文介绍了 Vite 的一些常用功能笔记,方便后续记忆与复习。总有种写这个不如直接看文档的感觉QAQ
Vite 工作基本原理
传统基于js的bundler based构建工具的慢启动以及热更新缓慢的问题。
原因:
开发服务器需要将所有模块全部打包后才能在浏览器中呈现。
原生js的性能问题。
总结:bundler-based在大型项目下性能低下的原因在于,其开发服务器原理必须先打包才能使用,即便是HMR也是离不开打包这一环节,随着项目体积或者模块体积的增大,打包这一环节会耗费大量的时间。
Vite 的解决方案
将项目的代码分为两类:dependencies与source code:
依赖:即node_modules文件夹下的文件,不常修改的,项目的依赖文件,vite采用使用go编写的esbuild来打包这些文件,提升开发体验。
源码:通常包括ts,tsx,scss等文件,对这些源码的提供是通过原生的ESM来实现的,vite只需要转换并按需提供代码,让浏览器接管了bundler的工作,实现了源码文件的按需加载。
Vite 中 HMR 的更新方式以及浏览器缓存解决方案
基 ...
REGEX in JavaScript
本文主要介绍正则表达式的基本概念与用法,并对 JS 中的正则表达式的常用方法进行总结,方便后续记忆与复习。
查看参考教程
参考方向教程原帖Learn regex the easy wayLearn regex the easy way菜鸟教程-正则表达式教程Runoob 正则表达式教程JS 中正则表达式MDN-RegExp
正则表达式基本概念元字符
元字符
描述
.
句号匹配任意单个字符除了换行符。
[ ]
字符种类。匹配方括号内的任意字符。
[^ ]
否定的字符种类。匹配除了方括号里的任意字符
*
匹配>=0个重复的在*号之前的字符。
+
匹配>=1个重复的+号前的字符。
?
标记?之前的字符为可选.
{n,m}
匹配num个大括号之前的字符或字符集 (n <= num <= m).
(xyz)
字符集,匹配与 xyz 完全相等的字符串.
|
或运算符,匹配符号前 ...
Windows/Ubuntu双系统安装教程
本文主要记录笔者 PC 安装 Windows/Ubuntu 双系统的过程、Windows 平台下 VMware 虚拟机安装 Ubuntu 的配置过程、以及双系统 Ubuntu 卸载的注意事项。
本文中 Ubuntu 安装环境:CPU:Intel i7-12700h,GPU:RTX 3060 laptop GPU,OS:Windows 11 Professional。
查看参考教程
参考方向教程原帖Ubuntu 双系统安装基本框架Ubuntu/Windows 双系统安装巨详细——全面解决各种问题(疑难杂症),有手就行EFI 分区如何卸载彻底删除 Ubuntu EFI 分区及启动项 VMware Ubuntu 安装教程在 VMware16 虚拟机安装 Ubuntu 详细教程
制作 Ubuntu 启动盘注意:制作Ubuntu启动盘将格式化 U 盘内的所有内容,U 盘内有文件请及时做好备份。
准备一个容量大于 5GB的 U 盘,此 U 盘将用来制作Ubuntu启动盘。
...
JAVA学习笔记
本篇文章将作为编程语言 JAVA 的学习笔记,供以后查阅与复习使用。
此 JAVA 学习笔记参考自 菜鸟 JAVA 教程 。
本学习笔记以 查询和复习 为主要功能,文章内容应 短小精悍 。
Java 主要特性 查看Java 主要特性
关于 Java 特性的介绍的文字可能比较多 emm。。。主要因为我是照搬的 ,不过只需要简单了解,但需要特别注意的是 Java 与 C++的一个重要区别为 Java 不使用指针而是引用,这对后面理解 Java 程序有很大的帮助。Java 语言是简单的:Java 语言的语法与 C 语言和 C++ 语言很接近,使得大多数程序员很容易学习和使用。另一方面,Java 丢弃了 C++ 中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。特别地,Java 语言不使用指针,而是引用。并提供了自动分配和回收内存空间,使得程序员不必为内存管理而担忧。Java 语言是面向对象的:Java 语言提供类、接口和继承等面向对象的特性,为了简单起见,只支持类之间的单继承,但支持接口之 ...
栈与队列
本篇文章将详细讲述数据结构 栈与队列 章节的内容。
本教程编程语言采用 JAVA ,文章框架参考自 HUST数据结构PPT ,源码内容参考自 尚硅谷 JAVA 数据结构教程 。
栈与队列章节部分概念方面比较简单,将放在具体的代码实现过程中。
栈的定义与操作定义与术语
栈的基本操作
Initstack(s) // 置 s 为空栈
Push(s,e) // 元素 e 进栈 s
Pop(s,e // 元素 e 出栈 s
Gettop(s,e) // 顶元素拷贝到 e
Empty(s) // 判断是否为空栈
栈的应用场景:
子程序的调用:在跳往子程序前,会先将下个指令的地址存到堆栈中,直到子程序执行完后再将地址取出,以回到原来的程序中。如方法中调用方法。
处理递归调用:和子程序调用类似,只是除了存储下一个指令的地址外,也将参数、区域变量等数据存入堆栈中。
表达式的转换(中缀表达式转后缀表达式)与求值(实际解决)
二叉树的遍历
图形的深度优先(depth-first)搜索法
栈的存储表示和操作实现顺序栈(用数组来模拟栈)
实现思路
定义一个数组,来模拟栈。
定义一个top变量 ...
线性表
本篇文章将详细讲述数据结构 线性表 章节的内容,没想到距离上次更新已经快两个礼拜了。
本教程编程语言采用 JAVA ,文章框架参考自 HUST数据结构PPT ,源码内容参考自 尚硅谷 JAVA 数据结构教程 。
线性表章节部分将简单讲述概念方面的问题,重点将放在具体的代码实现过程中。
线性表的定义线性表的逻辑结构
线性表:由$n(n≥0)$个数据元素$(a_1,a_2,…, a_n)$构成的有限序列,记作: $L=(a_1,a_2,…,a_n)$,$a_1$称为首元素,$a_n$称为尾元素。
表长:线性表中数据元素的数目。
空表:不含数据元素的线性表。
在线性表$L=(a_1,a_2,…,a_n)$中:
$a_{i-1}$是$a_i$的直接前驱(1<i<=n)
$a_{i+1}$是$a_i$的直接后继(1<=i<n)
$a_1$没有前驱,$a_n$没有后继,$a_i$有且仅有一个前驱和后继(1<i<n)
抽象数据类型线性表的定义抽象类型的线性表主要定义几个属性和方法
InitList(&L) //构造空表 L。
Lengt ...
Win10/11任务栏透明美化
本文主要通过 TranslucentTB 和 RoundedTB 两款轻量软件来实现 win10/11 的任务栏美化,在阅读本教程之前,请确保你的电脑安装了 Microsoft Store 并可以正常下载应用
教程除任务栏透明化外还有进阶的边角美化教程,读者可根据需要自行选择阅读
安装应用 点击查看安装应用
打开 Microsoft Store(微软商店),搜索 TranslucentTB安装 TranslucenTB
注意安装的是 TransclucentTB 原版而不是汉化版,汉化版本只适用与 win10 任务栏完全透明化
TranslucentTB 在 2022 年 12 月的一次更新中添加了中文版本,并解决了之前版本任务栏透明顶部仍有一条细线的问题(之前此问题可配合RoundedTB解决),现阶段 TranslucentTB 支持中文并且可独立实现 Windows 任务栏透明美化
基本设置介绍配置参数样式预览
Norma ...
数据结构绪论
前言在数据结构课程结课之后,我打算重开之前一直搁置的数据结构教程书写,一方面为加深数据结构的学习印象,另一方面为以后复习做一个参考。
本教程编程语言采用 JAVA ,文章框架参考自 HUST数据结构PPT ,源码内容参考自 尚硅谷 JAVA 数据结构教程 。
绪论部分主要以定义介绍为主,掌握概念即可,复杂度方面将具体对复杂度进行分析,其中具体对时间复杂度进行分析
数据结构的定义
数据结构本身概念的基本定义:数据结构是计算机中存储、组织数据的方式。
数据结构这门学科的基本定义:数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等相关问题的学科。
基本概念和术语
数据(data):所有能输入到计算机中并被计算机程序加工、处理的符号的总称。如:整数、实数、字符、声音、图象、图形等。
数据元素(data element):数据的基本单位。(元素、记录、结点、顶点)在计算机程序中通常作为一个整体进行考虑和处理。
数据项(data item):是数据的不可分割的最小单位。如:姓名、年龄等。一个数据元素可由一个或多个数据项组成。如: (姓名、年龄)
数据对 ...