路旁有花,心中有歌,
天上有星。
Personal
2022.02.15
经典的题目。 记录一些解决思路比较巧妙,具有参考价值的题目。 逃离黑洞 题目 【 逃离黑洞 】 你驾驶一艘飞船正在宇宙中遨游,宇宙可简化为一个二维平面,你所在的位置坐标是[0,0],你想要到达的目标坐标是[a,b]。 宇宙中有若干个黑洞,它们的坐标在holes数组中给出,每一个坐标为一对正整数值,代表黑洞中心的横、纵坐标位置[x,y],给出的黑洞中心点都位于平面内(含边...
2022.01.26
纪念碑谷。 Leetcode 1000 Questions AlgoExpert Certificate Leetcode Knight
Computer Science
2022.01.15
计算机硬件组成 CPU结构及工作原理 进程和线程 程序平时储存在硬盘中,当我们执行程序,程序就从硬盘中被加载到内存。 在内存中的程序就叫做进程。每一个进程都被分配了独立的资源(内存空间、网络端口等),进程是系统分配资源的最小单位。 进程在开始运行的时候,操作系统会帮助找到第一行待执行代码,叫做主线程。一颗CPU内核,同时只能运行一个线程。 多线程一定更快吗? 对...
JavaScript
Algorithm
Data Structure
2022.01.12
记录一些算法 & 技巧 Preview 算法的复杂度 基本操作 在普通的计算机上,加减乘除、访问变量(访问基本数据类型的变量)、给变量赋值等都可以看作基本操作。 对基本操作的次数统计或是估测,可以作为评判算法用时的指标。 不同的基本操作,其实执行用时是不同的(除法比加法用时长),这种不同在计算时间复杂度的时候因过小被忽略。 数据规模 衡量一个算法的快慢,...
Math
2022.01.01
记录一些数学定义、公理和定理。 数论 余数 同余定理 两个整数a,b,如果他们同时对一个自然数m求余所得的余数相同,则称a,b对于模m同余。记作a≡b(mod m)。读为:a同余于b模m。在这里“≡”是同余符号。 模m的两个同余数a和b的差diff = a - b,被它们的模数m整除:(a-b) % m === 0; 模m的两个同余数a和b的和、差、积,与它们模m后余...
2021.12.19
经典的算法。 1. Kadane 算法 Kadane算法,用于计算数组中连续子数组的最大或最小和。 1.1 计算连续子数组最大和、最小和 【1.求子数组最大和】 求一个非空数组A中的一个子数组SubA,使得SubA中元素的加和最大。 (子数组:在原数组中必须是连续的,长度最小为1。单个元素构成的数组和数组A本身也是A的子数组。) Kadane算法,基于以...
2021.11.08
作用域(Scope)、闭包(Closure)、作用域链和上下文(Context) JS函数词法环境和作用域问题,还有var和let的区别问题。 一、执行环境(Execution Context) 执行环境,也叫执行上下文,是JavaScript在运行时,用于控制程序执行流程的一种手段。 执行环境记录了当前执行流条件下,可访问的变量空间、访问顺序(作用域链)和上下文(this指向...
2021.11.04
基础数据结构 一、基本常见数据结构 1. 队列、栈、背包 队列:先进先出; 栈:先进后出; 背包:集合类型。只收集元素,无法按顺序遍历,也无法删除元素。(可以判断是否为空,也可以迭代所有收集到的元素) 2. 数组与链表 2.1 数组 数组是长度在创建时就固定的一种数据格式,每个元素类型统一,因此每个数组元素占用的内存空间相同。 一般会为数组分配一块连续的内存空...
工程化
2021.11.01
前端项目构建 打包构建 Bundle 为什么需要打包? 每个资源需要单独发起Http请求,Http2.0之前不支持TCP连接多路复用,浏览器限制了TCP最大并发数,同时请求资源过多造成堵塞,影响加载性能; 打包后,多个资源可以整合为一个大的资源,减少了请求次数,使加载更快。 无打包 Bundleless Bundleless 的产生背景 打包构建过程缓慢,起...
Network
Web Socket协议 Web Socket 协议诞生的原因(相比于http的优势) WS支持服务端推送: http协议中,请求只能由客户端发起,无法进行服务端推送(获取实时信息只能轮询,浪费网络资源); WS在建立连接之后,数据包头部字段较轻: http协议每次都要携带完整头部,字节数较大。 WS支持二进制流式传输; WS可扩展,用于实现自定义的子协议。 ...
Performance
2021.10.10
性能优化: 重绘和重排 什么是重绘和重排 重排:当 Render Tree 中部分或全部元素的尺寸、结构、或某些属性发生改变时,浏览器重新渲染部分或全部文档的过程称为重排。 重绘:当页面中元素样式的改变并不影响它在文档流中的位置时(例如:color、background-color、visibility 等),浏览器会将新样式赋予给元素并仅重新绘制它本身,这个过程称为重绘。 ...
IEEE 754 双精度数字表示法 数字在JavaScript中按IEEE 754标准中双精度浮点数(64bit)来表示。一个数占用64位,其格式如下: 用这种形式表示出来的数字,叫做这个数值的原码。 其中的阶码部分: 阶码有11位,可表示的数范围是0 ~ 2047,这样对应的指数计算结果是2^0 ~ 2^2047,无法表示很小的小数; 因为既需要表示很小的小数,又需要...
图片懒加载原理和实现。 图片懒加载的原理 图片懒加载的基本原理: 拿到所有的img元素; 绑定 window 的 scroll 事件,对其进行事件监听; 每次滚动,遍历每个img元素,判断当前img元素是否到了可视区范围内; 如果到了,就修改图片的 src 属性。 实现 getBoundingRect()方法 const imgs = document....
前端工程化 几种不同的测试 单元测试:将代码分为若干个独立的单元进行分别测试。通常一个单元是一个函数、一个组件或一个复杂的算法; 端到端测试(e2e):不将应用程序分解成单元,直接从用户层面模拟与应用程序的交互,查看是否返回了预期的结果。 前端测试工具 单元测试:Jest 安装、配置Jest // 安装jest npm i jest -D // 引导式命令行自动...
前端工程化 前端工程化包括什么 前端工程化的含义 前端工程化一般包括四个方面:模块化、组件化、规范化和自动化。 模块化、组件化 模块化就是将一个大文件拆分成相互依赖的小文件,再进行统一的拼装和加载。比如:CommonJS、ES6模块等。模块化是在文件层面上,对代码或资源的拆分。 组件化是在设计层面上,对用户界面的拆分。一个组件可能在页面上占据独立的一块,并且可以独...
2021.09.21
接触新事物的思考过程 相比于同类事物,它是否有独特的优势? 它解决了什么问题? 它存在缺陷或冗余吗?可以优化吗? 如果可以优化,它为什么是现在的样子? 掌握新技术三个维度 学会使用; 探索原理; 理解设计思路; 保证独立思考的重点 信息引用的数据可考证; 正确处理集合及其包含关系; 正确处理逻辑上的因果关系; 找到稳定可靠的基准...
设计模式
《JS设计模式》 —— 曾探 一、基本概念 1. 高阶函数 高阶函数满足以下条件: 函数可以作为参数被传递; 函数可以作为返回值被输出; 高阶函数的部分应用: 面向切面编程 AOP; 感受面向切面编程 柯里化函数; 函数节流、防抖; 二、设计模式 单例模式 一个类只有一个实例,全局都可访问。 策略模式 定...
Promise
2021.09.20
Promise A+规范 与 手动实现 一、Promis A+ 规范 截自:字节路白讲义 Promise A+ 官方原文 1. 术语 promise 是一个有then方法的对象或者是函数,行为遵循本规范; thenable 是一个有then方法的对象或者是函数; value 是promise状态成功时的值,也就是resolve的参数, 包括各种数据...
Browser
浏览器渲染基本流程 进程和线程的区别 浏览器线程和进程 浏览器进程?线程?傻傻分不清楚! 进程 什么是进程 进程类似工厂,线程类似工人。 进程是cpu资源分配的最小单位(系统会给它分配内存)。操作系统会为每个进程分配私有、独立的一块内存资源,进程之间互不影响; 当进程被杀掉,分配的内存空间也被释放; 一个进程中可能有一个或多个线程在工作;...
Web
Web API
目前的 Web 设备接口API: Web USB API; (USB通信) Web Serial API; (串口通信) Web NFC API; (NFC通信) Web Bluetooth API; (蓝牙通信) Web HID API; (人机接口设备通信) 为保证安全,这些API: 只在htttps或wss协议下...
Page 2 Of 8