算法知识点
未读二分法的使用条件
当题目里出现了数组,且为有序数组,并强调数组中无重复元素时,就要考虑是否能够使用二分法了。因为若数组中有重复元素,二分法返回的下标就会出现不唯一的情况。(但也有一种情况特殊,就是直接让你求出重复元素的起始位置和终止位置,比如leetcode 34.在排序数组中查找元素的第一个和最后一个位置)
如果题目对时间复杂度有要求,规定在O(logN)的时间复杂度内解决问题,也可以考虑二分。
还有一种类型的题目可以首先考虑二分,那就是和平方根相关的题目。不允许使用运算符,但需要求一个值的平方根,那么就考虑二分没跑了。比如leetcode 69.x 的平方根, 367.有效的完全平方数。
因此要牢记,二分法的使用场景关键词:
有序数组
数组中无重复元素
时间复杂度(OlogN)
平方根
怎么写二分?
二分的原理非常简单,就是不断地将数组分为两半,最终找到我们需要的值。但我们可能会为二分法许多的边界感到疑惑:到底是left < right,还是left <= right;是right = mid - 1 ,怎么也有人写right = mid呢?
其实所有的二分法都只 ...
今天想要给博客换个主题,本来以为简单clone一下 + 改个配置就好了,结果引出一堆坑 😢
一、git submodule
删除旧主题之后,我按照新主题的教程,使用了git clone将主题克隆到themes文件夹里,配置好_config.yml文件,在本地跑也没问题,gitflow部署却报错了:
1No url found for submodule path 'themes/xxx' in .gitmodules
这个submodule是啥东西呢?我们先来介绍一下。
1. 什么是 git submodule
Git Submodules 叫作 Git 子模块,是 Git 提供的一种功能,允许你将一个 Git 仓库作为另一个 Git 仓库的子目录。它可以让你将另一个仓库克隆到自己的项目中,同时还保持提交的独立。
它非常适合我们程序员在项目管理时遇到的一种情况: 某个工作中的项目需要包含并使用另一个项目。这些包含的项目也许是第三方库,或者你独立开发的,用于多个父项目的库。你想要把它们当做两个独立的项目,同时又想在一个项目中使用另一个。
hexo 中有着丰富的主 ...
前一篇我们说明了JS是一个解释型语言,但为了提高运行速度,我们引入了JIT即时编译,减少JS运行时重复代码的翻译。那么JS究竟是怎么被引擎所执行的?JIT又是在哪个环节加入的呢?
了解V8
JS引擎
JS引擎也可以称为虚拟机,会模拟计算机的CPU、堆栈、寄存器等,还具有自己的一套指令集系统,负责解析运行JavaScript代码。我们前文提到的JS代码解释翻译都是在JS引擎中实现的。浏览器之所以可以运行JS代码,也是因为在浏览器中存在JS解析引擎。
不同的浏览器为了提升速度,会不断升级它们的JS引擎。比如mozilla基金会研发的浏览器FireFox,就在 2017 年重写了浏览器的引擎(称为 Quantum)以确保 Firefox 能够与其他主流浏览器竞争。
V8是什么
V8引擎是一个由Google开发的开源Javascript引擎,目前用在Chrome浏览器和Node.js中。
Chrome的市场占有率高达60%,而Node.js是JS后端编程的事实标准。国内的众多浏览器,其实都是基于Chromium浏览器开发,而Chromium相当于开源版本的Chrome,自然也是基于V8引擎 ...
解释型语言
JavaScript一直被称为解释型语言,即不经过编译的过程,直接在运行时由解释器将js源代码一句句翻译执行。但最近接触到JavaScript其实引入了JIT(Just in Time)即时编译,它会对代码进行一些优化,也可以做到生成并存储代码的编译版本。
此外,JavaScript存在变量提升的特性——在作用域内任何var声明的变量都会被提升到顶部并且赋值为undefined。
如果JS是一个纯解释型语言,仅通过解释器逐行翻译源代码执行是怎样提前获取到作用域内部的变量声明,并提升到作用域顶部的呢?
要解释这个问题,就需要了解JS代码的处理过程。
机器语言 & 汇编语言 & 高级语言
当我们编写了一段JavaScript代码并试图运行它的时候,我们就产生了一个目标:告诉计算机要做什么。同时也产生了一个问题:计算机并不能读懂我们的语言。机器运行采用机器语言,它仅由“0”与“1”组成,即用二进制代码表示的计算机能直接识别和执行的一种机器指指令系统令的集合。
在我们常用的PC机中,有一个芯片,就是我们常说的**CPU(Central Processing Unit ...
前言
工作之后,除了一些老项目还在使用Vue2之外,搭建的新项目大多都采用vue3+ts,老项目能迁移重构的也都尽量使用了vue3+ts。vue3本身就是用ts编写的,对ts有极高的支持性,vue3改进的双向绑定、语法糖、composition api以及用于逻辑复用的Composition Function等等,和Vue2相比确实提升了不少开发体验。尤其是使用ts后让代码更加规范化了,正确使用ts还可以提升开发效率。这都是后话,我们先从搭建项目开始。
官方文档:https://cli.vuejs.org/zh/guide/creating-a-project.html#vue-create
安装vue-cli脚手架
Vue CLI 是官方提供的基于 Webpack 的 Vue 工具链,现已处于维护模式。现在官方推荐使用 create-vue 来创建基于 Vite 的新项目。但目前我还没有深入了解Vite,一般都是采用Vue CLI去创建Webpack项目。之后可以再对vite进行学习。
Vue CLI 的包名称由 vue-cli 改成了 @vue/cli。 如果你已经全局安装了旧版本 ...

