⌨️三角形问题(xhs)
【困难】 小歪想要找到三数之和大于等于 k 的最小的一组勾股数,即找到最小的三元组 (a,b,c) 使得 k≤a_0+b_0+c_0 且 a_0^2+b_0^2=c_0^2。
⌨️周年庆,耶(xhs)
【简单】 奖池一共为 a 个一等奖、b 个二等奖、c 个三等奖和 d 个参与奖,小歪是个收集爱好者,他想知道,如果自己得到了 k 次抽奖的机会,能否确保在 k 次内把所有的奖至少都得一次。
⌨️最小覆盖子串(leetcode)
【困难】 给你一个字符串 s、一个字符串 t。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 ""。
📝XSS 和 CSRF 攻击
XSS 和 CSRF 攻击的介绍、分类、防御方式,以及对这两种网络攻击方式的对比。存在疑问?在评论区留言吧!
📝Hexo + Butterfly 建站记录
基于 Hexo + Butterfly 构建个人博客网站,该贴文涵盖 1. 保姆式的建站步骤 2. Hexo 博文发布与管理 3. Butterfly 主题的相关配置 4. Hexo 项目管理 5. Butterfly 标签外挂的基本使用。存在疑问?在评论区留言吧!
📝JS 中怎么实现深克隆和浅克隆
一、深克隆和浅克隆 1. 克隆的研究对象 克隆(拷贝)就是创建一份数据的副本,其分为深克隆和浅克隆两种实现方式。对于原始类型的值而言,深克隆和浅克隆没有任何区别,因此我们关于克隆的研究对象是对象类型。 2. 两种克隆的区别 深克隆:深克隆会对原始对象进行无限层级的复制,会递归地复制原始对象中的所有属性,从而创建一个独立于原始对象的全新副本。修改深克隆后的对象中的数据,不会影响到原始对象。 浅克隆:浅克隆会对原始对象进行一层复制,会复制原始对象中的所有属性,但对于嵌套对象或数组,只会复制引用。修改浅克隆后的对象中的数据,会影响到原始对象。 注意:直接将对象赋值给一个变量不算浅拷贝。浅拷贝的结果和原数据至少在 === 的判断下是 false! 二、浅克隆的实现方式 1. Object.assign(对象) 语法:Object.assign(target, source1, source2, ...) 功能:将一个或多个源对象(source)的可枚举属性复制到目标对象(target)。 参数 target 目标对象,用于接收源对象的属性。 source...
📝Proxy 相较于 Object.defineProperty 有什么优势?
Object.defineProperty 详解 语法:Object.defineProperty(obj, prop, descriptor) 功能:在一个对象上定义一个新属性或修改其现有属性,并返回此对象。 参数: obj 要定义或修改属性的对象 prop 字符串或 Symbol,指定要定义或修改的属性键 descriptor 对象,指定要定义或修改的属性的描述符 通过 descriptor,可以设置 prop 指定的属性值,getter、setter 等等特性。默认情况下,Object.defineProperty 添加的属性是不可写、不可枚举和不可配置的。 属性描述符(descriptor)的语法:descriptor 有两种类型,数据描述符和访问器描述符,其只能是这两种类型之一。根据传入的属性描述符类型不同,给对象中定义或修改的属性的特性也将有所不同。因此,属性也可以分为数据属性和访问器属性。 因为 descriptor...
📝讲讲你对闭包的理解?有什么优缺点?
对闭包的理解 从 JS 作用域链的角度出发,函数外部无法访问到函数中的变量,但函数内部可以访问到其外部的变量。所谓闭包(closure),是一种在函数外部访问函数内部变量的一种方式。通常通过在函数中返回一个新函数的方式实现闭包,这个新函数中可以访问到返回它的函数中的所有执行上下文。 词法作用域:创建闭包时所在的作用域 对于以下示例,A 函数返回了 B 函数,此时 B 函数中可以访问到 A 函数中的所有执行上下文(变量等),将返回的 B 函数赋给一个变量,此时在 A 函数外也可以访问到 A 函数中定义的变量(包括为了得到 B 函数传给 A 函数的参数)。 1234567891011function A(n){ function B(){ n++; console.log(`n=${n}`) } return B;}let x = A(0);x(); // n=1x(); //...
📝说说你对 JS 中 this 指向的了解
JS 的代码执行环境分为严格模式和非严格模式,可以通过 use strict 打开严格模式,此时 JS 在语法检查上会更加严格。要讨论 JS 中的 this 指向问题,也要分为严格模式和非严格模式进行讨论。这里先讨论非严格模式下的 this 指向,然后再讨论严格模式下的不同之处,未谈到的地方默认与严格模式相同。 非严格模式下的 this 指向 函数独立调用:此时函数中的 this 指向全局对象(浏览器环境是 window,Node.js 环境是 globalThis) 函数作为对象的方法调用:此时函数中的 this 指向该对象。 函数通过 call、apply 调用:call 和 apply 方法可以用于直接调用函数,同时指定 this 和传入参数。 如果 call、apply 传入的表示 this 的参数不是对象(原始值),其会被隐式转换为对应的包装对象。 123const obj = new Object();fun_name.call(obj, param1, param2,...); // 调用 fun_name 函数,同时指定 this 为...
📝谈谈你对 JS 内存泄漏与内存溢出的理解
内存泄漏(Memory Leak)指的是程序不需要使用的内存没有被正确释放,从而导致内存占用逐渐增加,最终可能会耗尽所有可用内存。 内存泄漏即不想用的内存没被释放 内存溢出(Memory Overflow)指的是程序请求的内存超出了系统所能提供的最大限制。 内存溢出即想要申请内存却不足够 内存泄漏场景 全局变量的使用会导致内存泄漏。全局变量指的是未使用 var、let、const 声明的变量,其在整个应用程序的生命周期中始终存在。 闭包也会导致内存泄漏。闭包变量引用闭包,闭包引用其词法作用域中的变量。只要闭包变量不为 null,其相关的引用全部无法被垃圾回收。 DOM 操作可能会导致内存泄漏。如果 JS 变量存储着对 DOM 元素的引用,当对应的 DOM 元素从 document 中移除后,对应变量仍存在着对应的引用,而不是被回收。 123const element = document.getElementById("leakyElement");document.body.removeChild(element);// 但...