自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(58)
  • 收藏
  • 关注

原创 Ajax学习笔记

定义:asyn和await关键字让我们可以用一种更简洁的方式写出基于Promise的异步行为,而无需刻意地链式调用Promise。概念:在async函数内,使用await关键字取代then函数,等待获取Promise对象成功状态的结果值。定义:执行代码和收集异步任务的模型,在调用栈空闲,反复调用任务队列里回调函数的执行机制,就叫事件循环。axios响应拦截器:响应回到then/catch之前,触发的拦截函数,对响应的结果统一处理。Promise本身是同步的,而then和catch回调函数是异步的。

2024-07-21 17:13:47 783

原创 Node.js学习笔记

前端工程化:开发项目直到上线,过程中集成的所有技术和工具。Node.js是前端工程化的基础(因为Node.js可以主动读取前端代码内容。Node.js模块化:概念:每个文件当做一个模块,独立作用域,按需加载使用:采用特定的标准语法导出和导入进行使用CommonJs标准:一般应用在Node.js项目环境中ECMAScript标准:一般应用在前端工程化项目中Node.js包:概念:把模块文件,代码文件,其他资料聚合成一个文件夹项目包:编写项目需求和业务逻辑的文件夹。

2024-07-21 17:07:38 916

原创 JavaScript的面向对象思想及实现

基于原型对象的继承使得不同构造函数的原型对象关联在一起,并且这种关联的关系是一种l链状的结构,我们将原型对象的链状结构关系称为原型链。指向构造函数的prototype原型对象,之所以我们对象可以使用构造函数prototype原型对象的属性和方法,就是因为对象有。继承是面向对象编程的另一个特征,通过继承进一步提升代码封装的程度,JavaScript中大多是借助原型对象实现继承的特性。同样的将变量和函数组合到了一起并能通过this实现数据的共享,不同的是借助构造函数创建出来的实例对象之间是彼此不影响的。

2024-06-11 16:42:32 635

原创 JavaScript常用的内置构造函数

之所以具有对象特征的原因是字符串、数字、布尔类型数据是JavaScript底层使用Object构造函数“包装”来的,被称为包装类型。JavaScript底层会把简单数据类型包装为引用数据类型,所以简单数据类型也可以使用属性和方法方法。在JavaScript中的字符串、数字、布尔具有对象的使用特征,如具有属性和方法。,如果省略结束的索引,默认取到最后,截取的索引号不包含想要截取的部分。Object是内置的构造函数,用于创建普通对象。Number是内置的构造函数,用于创建数值。注意:返回的是一个数组。

2024-06-11 16:42:01 769

原创 JavaScript深入对象

通过构造函数创建的对象称为实例对象,实例对象中的属性和方法称为实例成员(实例属性和实例方法)。构造函数命名时约定以大写字母开头,它们只能由new操作符来执行。:构造函数的属性和方法被称为静态成员(静态属性和静态方法)构造函数是一种特殊的函数,主要用来初始化对象。使用场景:用来快速创建多个类似的对象。利用new Object创建对象。为构造函数传入参数,创建。构造函数创建的实例对象。利用构造函数创建对象。

2024-06-11 16:41:11 429

原创 JavaScript的解构赋值

目标:知道解构的语法及分类,使用解构简洁语法快速为变量赋值。数组解构是将数组的单元值快速批量赋值给一系列变量的简洁语法。对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法。可以通过给定默认值解决。可以使用剩余参数解决。

2024-06-02 17:09:41 237

原创 JavaScript函数进阶学习

引入箭头函数的目的是更简短的函数写法并且不绑定this,箭头函数的语法比函数表达式更简洁。在箭头函数出现之前,每一个新函数根据它是被如何调用的来定义这个函数的this值。箭头函数不会创建自己的this,它只会从自己的作用域链的上一层沿用this。剩余参数允许我们将一个不定数量的参数表示伪一个数组,在函数内部中使用。使用场景:箭头函数更适用于那些本来需要匿名函数的地方。以前this的指向:谁调用这个函数,this就指向谁。)可以将一个数组展开,在数组中使用。了解函数的使用细节,提升函数应用的灵活度。

2024-06-02 17:08:35 440 1

原创 JavaScript中内存的分配和回收——垃圾回收机制及算法

如果两个对象相互引用,尽管他们已不再使用,垃圾回收器不会进行回收,导致内存泄露,因为他们的引用次数永远不会是0,这样的相互引用如果大量存在会导致大量的内存泄露。IE采用的引用计数算法,定义“内存不再使用”,就是看一个对象是否有指向它的引用,没用引用了就回收对象。现代的浏览器已经不再使用引用计数算法,使用的大多是基于标记清除算法的某些改进算法,总体思想都是一致的。JS中内存的分配和回收都是自动完成的,内存在不使用的时候会被垃圾回收器自动回收。但引用计数法存在一个致命的问题:嵌套引用(循环引用)

2024-06-02 17:07:11 369

原创 JavaScript中的作用域和作用域链

一个函数对周围状态的引用捆绑在一起,内层函数中访问到其外层函数的作用域(闭包 = 内层函数 + 内层函数引用的外层函数的变量)。变量提升是JavaScript中比较“奇怪”的现象,它允许变量在被声明之前访问(仅存在于var声明变量)。标签和js文件的最外层就是所谓的全局作用域,在此声明的变量在函数内部也可以被访问。作用域规定了变量能够被访问的“范围”,离开了这个范围变量便不能访问。封闭数据,提供操作,使外部也可以访问函数内部的变量。作用域链的本质上是底层的变量查找机制。局部作用域分为函数作用域和块作用域。

2024-06-02 17:03:47 281

原创 正则表达式与元字符

预定义指的是某些常见模式的简写方式预定类说明\d[0,9]\D[^0,9]\w\W\s匹配空格[\t\r\n\v\f]\S。

2024-05-26 19:22:10 287

原创 通过JavaScript本地存储数据

可以将数据永久存储在本地(用户的电脑),除非手动删除,否则关闭页面也会存在。本地存储只能存储字符串类型,非字符串类型会转换成字符串类型存储。需要将复杂数据类型转换成JSON字符串,再存储到本地。本地只能存储字符串,无法存储复杂数据类型。

2024-05-26 19:21:25 480

原创 window对象的常见属性及各个BOM对象的功能含义

这是因为JavaScript这门脚本语言诞生的使命所致——JavaScript是为处理页面中用户的交互,以及操作DOM而诞生的。单线程就意味着,所有任务需要排队,前一个任务结束,才会执行后一个任务。这样所导致的问题是:如果js执行时间过长,这样就会造成页面的渲染不连贯,导致页面渲染加载阻塞的感觉。于是,js中出现了同步和异步。history的数据类型是对象,主要管理历史记录,该对象与浏览器地址栏的操作相对应,如前进、后退、历史记录等。navigator的数据类型时对象,该对象记录了浏览器自身的相关信息。

2024-05-26 19:20:00 596

原创 JavaScript的事件流、页面加载事件与元素滚动事件

当初始的HTML文档被完全加载和解析完成后,DOMContentLoaded事件被触发,而无需等待样式表、图像等完全加载。当一个元素的事件被触发时,同样的事件将会在该元素的所有祖先元素中依次被触发(当一个元素的事件触发时,会依次调用所有父级的。利用事件冒泡的特点,给父元素注册事件,当我们触发子元素时,会冒泡到父元素身上,从而触发父元素事件。目的:防止事件影响父级元素,将事件限制在当前元素内(不仅可以阻止事件冒泡,也可以阻止事件捕获)。从DOM的根元素开始去执行对应的事件(从父到子,从外到里)

2024-05-19 18:52:56 680

原创 JavaScript中的日期对象

时间戳是指两个时间相差的毫秒数,它是一种特殊的计量时间的方式,用于实现倒计时效果。因为日期对象返回的数据我们不能直接使用,所以需要转换为实际开发中常用的格式。日期对象:用来表示时间的对象,可以得到当前的系统时间。

2024-05-19 18:52:15 624

原创 JavaScript的节点操作、移动端事件和插件运用

很多时候,我们需要在页面中动态增加元素,比如点击发送按钮,新增一条评论信息。touch对象代表一个触摸点。触屏事件可响应用户手指或触控笔对屏幕的操作。目标:能够具备根据节点关系查找目标节点的能力。DOM数里的每一个内容都称之为结点。M端是移动端,有自己独有的事件。

2024-05-19 18:51:58 269

原创 JavaScript中的事件监听

事件监听:让程序检测是否有事件产生,一旦有事件触发,就立即调用一个函数做出响应,也被称为绑定事件或注册事件。比如鼠标经过时显示下拉菜单,比如点击可以播放轮播图等。事件对象也是个对象,这个对象里有事件触发时的相关信息,例如:鼠标点击事件中,事件对象就存了鼠标点在哪个位置等信息。环境对象指的是函数内部特殊的变量this,它代表着当前函数运行时所处的环境,this指向函数的调用者。事件:在编程时系统内发生的动作,比如用户在网页上单击一个按钮。如果将函数A作为参数传递给函数B时,我们称函数A为回调函数。

2024-05-12 19:25:55 265

原创 API中DOM元素的获取和操作

标准属性:标签自带的属性,可以直接操作,比如:disabled、checked等在html5中推出来专门的data-自定义属性在标签上一律以data-开头在DOM对象上一律以dataset对象方式获取</</</const'div'log// 1 alog// 1</</</

2024-05-12 19:05:07 412

原创 JavaScript中的函数

函数可以把具有相同或相似逻辑的代码包裹起来,通过函数调用执行这些被包裹的代码逻辑,这么做的优势是有利于精简代码方便复用。通常来说,一段程序代码中所用到的名字并不总是有效和可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。函数表达式和具名函数的不同:具名函数的调用可以写在任何位置,函数表达式像变量一样,要先声明后才能使用。函数或for循环、while循环中定义的变量是局部变量,只能在当前作用域使用,不能在作用域外被调用。作用域的使用提高了程序逻辑的局部性,增强了程序的可靠性,减少了名字冲突。

2024-05-05 20:02:25 412 1

原创 JavaScript中的对象

对象(object)是JavaScript里的一种数据类型,可以理解为一种无序的数据集合(数组是有序的数据集合),通常用来描述某个事物。是 JavaScript 中内置的对象,称为数学对象,这个对象下即包含了属性,也包含了许多的方法。数据描述性的信息称为属性,如人的姓名、身高、年龄、性别等,一般都是名词性的。数据描述性的信息称为属性,如人的姓名、身高、年龄、性别等,一般是名词性的。来遍历,因为它的属性的存储是无序的,不像数组是有序的,可以用下标来遍历。Math.max —— 在一组数中找出最大的。

2024-05-05 20:00:58 593

原创 回溯算法解决组合问题

在[1,9]范围内使用4个不同的数字,我们可以得到的最小和是1+2+3+4 = 10,因为10 > 1,没有有效的组合。简单的、数据小的组合问题可以通过暴力解决,比如在10个数中找出2个数的组合,只需要2个for循环嵌套就可以解决。输出:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”]给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。输出: [[1,2,6], [1,3,5], [2,3,4]]输出:[“a”,“b”,“c”]

2024-04-28 19:19:30 1057 1

原创 Javascript的数据类型

只声明变量,不赋值的情况下,变量默认为undefined,一般很少直接为某个变量赋值undefined。let a。

2024-04-28 19:18:09 2040 1

原创 Leetcode 82. 删除排序链表中的重复元素 II和Leetcode 198. 打家劫舍

先判断数组 nums 的前两个数的去留,ret[0] = nums[0],因为第一个位置,只有留下才在该位置偷取金额最大,判断 nums[1],如果它比 ret[0] 大,将它赋给 ret[1] ,否则 ret[1] 继承 ret[0]。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。

2024-04-21 22:18:37 785

原创 面试题汇总

再遍历之后的链表寻找最小值,如果遇上值更小的结点,保存该节点和该节点的前一个结点,如果循环后存储最小值链表结点的指针存储的结点仍然为第一个循环已遍历结点的下一个结点,该节点不便;当最小差价小于最大差价时,进行循环,取最大差价和最小差价的平均数,设置一个函数 check 来检查是否存在足够的商品差价大于中间值,如果存在,将中间站赋给最小差价,否则将中间值减一赋给最大差价。先将所有链表结点链接在一个新创建的链表上,然后通过交换数据的方式,给链表重新排序,最后返回链表的第一个有效结点,也就是头节点的下一个结点。

2024-04-21 18:55:33 818

原创 Leetcode 41. 缺失的第一个正数和Leetcode 155. 最小栈

定义一个结构体,数组 data 用于存放推进的数据,数组 min 用于存放最小值,变量 top 存放最后进入的数在 data 的下标,变量 mintop 记录最小值在 min 中的下标。循环遍历数组 nums ,如果该位置的值大于 0 并且不小于数组长度,让哈希表 table 在该值的位置自加。获取堆栈中的最小元素时,根据 mintop 的值返回数组 miin 中的元素。返回栈顶元素时,根据 top 的值返回数组 data 中的元素。--> 返回 -3.输入:nums = [3,4,-1,1]

2024-04-20 20:18:23 1637

原创 Leetcode 289. 生命游戏和Leetcode 452. 用最少数量的箭引爆气球

在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend,则该气球会被 引爆。遍历数组 board ,判断某个细胞周围的活细胞数,注意要小心数组越界,将周围活细胞的数量记录到数组 table 对应的位置。原则上,面板是无限的,但当活细胞侵占了面板边界时会造成问题。输入:board = [[0,1,0],[0,0,1],[1,1,1],[0,0,0]]输出:[[0,0,0],[1,0,1],[0,1,1],[0,1,0]]

2024-04-19 23:53:00 773

原创 Leetcode 76. 最小覆盖子串和Leetcode 34. 在排序数组中查找元素的第一个和最后一个位置

给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。输入:nums = [5,7,7,8,8,10], target = 8输出:[3,4]输入:nums = [5,7,7,8,8,10], target = 6输出:[-1,-1]输入:nums = [], target = 0。

2024-04-18 22:25:02 547

原创 Leetcode 152. 乘积最大子数组和Leetcode 162. 寻找峰值

这题在寻找数组中的峰值元素,如果该元素大于左右两边的元素,直接返回该元素下标,如果不存在大于左右两边的元素,返回最大值元素的下标,所以在循环中,我们还同时要记录数组最大值元素的下标。乘积的最大子数组和和求子数组最大的和不一样,两个很小的数相乘可能会变成最大的数(负负得正),所以我们不止要记录子数组最大的乘积,还要记录子数组最小的乘积。给你一个整数数组 nums ,请你找出数组中乘积最大的非空连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。输入: nums = [2,3,-2,4]

2024-04-17 22:03:03 569

原创 Leetcode 560. 和为 K 的子数组和Leetcode 189. 轮转数组

定义变量 a 并声明为 10^7 ,因为 k 的值包含负数,而数组的下标从 0 开始,所以设置将 a 的值作为数字 0 的位置。如果数组前 i 个值的和与数组前 j 个值的和的差等于 k ,说明下标 i-1 到 j-1 的子数组的和为 k。输入: nums = [1,2,3,4,5,6,7], k = 3。向右轮转 1 步: [7,1,2,3,4,5,6]向右轮转 2 步: [6,7,1,2,3,4,5]向右轮转 3 步: [5,6,7,1,2,3,4]输入:nums = [1,1,1], k = 2。

2024-04-16 21:59:17 449

原创 Leetcode 167. 两数之和 II - 输入有序数组和Leetcode 36. 有效的数独

如果设这两个数分别是 numbers[index1] 和 numbers[index2] ,则 1 <= index1 < index2 <= numbers.length。将 flag 初始化为0,查找完每一行或每一列的值,如果存在重复的数,直接返回 false ,否则将 flag 重新初始化为0去查找下一行或下一列。以长度为 2 的整数数组 [index1, index2] 的形式返回这两个整数的下标 index1 和 index2。因此 index1 = 1, index2 = 2。

2024-04-14 22:42:33 784

原创 哈希表函数 —— uthash的简单使用

int key;int val;}Table;其中key一定要有,可以是任意数据类型,不能重复。

2024-04-14 19:47:11 261

原创 Leetcode 80. 删除有序数组中的重复项 II和Leetcode 238. 除自身以外数组的乘积

如果 flag 大于1,说明数组中有两个及以上的值为0,所以数组所有位置的乘积都为0。从数组的第3个元素开始遍历,如果快指针指向的数与慢指针前两位的数不相等,则将快指针指向的数赋予慢指针,并且慢指针向前一步,不管条件是否满足,每次循环快指针都会向前,直到快指针遍历完数组。解释:函数应返回新长度 length = 7, 并且原数组的前七个元素被修改为 0, 0, 1, 1, 2, 3, 3。输入:nums = [0,0,1,1,1,1,2,3,3]输出:7, nums = [0,0,1,1,2,3,3]

2024-04-13 20:44:24 746

原创 Leetcode 56. 合并区间和Leetcode 240. 搜索二维矩阵 II

输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 20。输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5。输入:intervals = [[1,3],[2,6],[8,10],[15,18]]

2024-04-12 22:17:25 655

原创 Leetcode 239. 滑动窗口最大值和Leetcode 347. 前 K 个高频元素

最后将数组 table 的 left 的下标中的值对应的数组 nums 的值赋予数组 ret 的下一位。首先从左到右遍历数组中第一个滑动窗口的元素,将满足条件的下标存入数组 table 中,存入条件为:左边存入的下标的数不小于右边存入的下标的数,并且左边存入的下标小于右边存入的下标。将数组 table 的 left 的下标中的值对应的数组 nums 的值赋予数组 ret 的第一位。输入:nums = [1,3,-1,-3,5,3,6,7], k = 3。输出:[3,3,5,5,6,7]

2024-04-11 19:36:46 692

原创 Leetcode 150. 逆波兰表达式求值和Leetcode 55. 跳跃游戏

从倒数第二个数往前遍历数组,如果 count 的值不为 0 ,继续判断数组当前位置是否大于 count ,如果是,说明在当前位置能跳跃到想要跳到的位置, count 初始化为 0 ,当前位置变成下一个需要到达的位置;如果遇到非数字字符,从数组 stk 中取出最后的两个数字,然后通过 switch 判断是哪一种运算符,并用该运算符对从数组 stk 中取出的两个数字进行运算,将运算结果存入原倒数第二个数的位置,并将 top 指向数组原倒数第一个数的位置。解释:无论怎样,总会到达下标为 3 的位置。

2024-04-10 21:43:49 974

原创 Leetcode 151. 反转字符串中的单词和Leetcode 53. 最大子数组和

如果数组累加的值小于0,说明没有必要再继续累加之后的数组元素,记录累加值的变量 sum 初始化为0,重新计算之后数组元素的累加值。判断重新输入后的字符串 s 的最后一个字符是否是空格,如果是,将最后一个空格赋值转义字符 ‘\0’;首先第一个while循环找出字符串 s 的前空格,然后双指针遍历字符串 s ,消掉前空格并只保留字符串中每个单词之间的一个空格。解释:如果两个单词间有多余的空格,反转后的字符串需要将单词间的空格减少到仅有一个。输入:nums = [-2,1,-3,4,-1,2,1,-5,4]

2024-04-09 20:52:43 753

原创 Leetcode 438. 找到字符串中所有字母异位词和Leetcode 454. 四数相加 II

创建一个空的hash结构体变量,作为哈希表。如果该变量不为空,说明哈希表存在该键,并将该键的地址赋予该变量,然后将记录键存在的 val 变量加一。判断左右指针所代表的字符串是否与字符串 p 的长度相同,如果相同,且计数器,也就是有效字符的数量也与字符串 p 的长度相等,则该字符串符合条件,将左下标存入数组 ans 中,代表传出字符串数量的指针 returnSize 加一。输入:nums1 = [1,2], nums2 = [-2,-1], nums3 = [-1,2], nums4 = [0,2]

2024-04-08 19:31:50 686

原创 Leetcode 142. 环形链表 II和Leetcode 242. 有效的字母异位词

再遍历字符串t中的字符,再对应下标减一,判断该下标的值,如果该下标的值比0小,说明字符串t中出现了字符串s没有的字符,或字符串t中某个字符的数量多余字符串s中该字符的数量,所以它们不是字母异位词,返回false。如果快指针的结点和它的下一个结点都不为空,块指针向后移动两个结点,慢指针向后移动一个结点,如果快慢指针能相遇,说明链表存在环形结构。如何判断链表环形结构的入口:快慢指针相遇的结点和头指针的结点同时移动,二者相遇的地方就是环形链表的入口。建立有26个空间的数组,数组的26个下标对应26个字母。

2024-04-07 22:46:51 581

原创 C语言学习分享

通过代码随想录提供的算法讲解和刷题顺序,这周学习到了很多算法知识。二分查找:在一个元素排列有序的数组中,二分查找是比遍历数组更加有效率的做法。通过不断比较数组中间下标的值,来确定目标值再左边的子数列还是右边的子数列,不断缩小目标区间,从而定义目标值的位置。双指针法(快慢指针法):通过一个快指针和慢指针在一个for循环下完成两个for循环的工作,提高代码的运行效率。很多数组和链表的操作都需要双指针的帮助。

2024-04-07 19:12:59 362

原创 leetcode刷题

文章目录Leetcode 14.最长公共前缀C语言题解与思路Leetcode 15.三数之和题目描述C语言题解与思路Leetcode 20.有效的括号题目描述C语言的题解与思路Leetcode 21.合并两个有序链表题目描述C语言题解与思路Leetcode 217.存在重复元素题目描述C语言题解和思路LCR 086. 分割回文串题目描述C语言题解和思路Leetcode 14.最长公共前缀C语言题解与思路char* longestCommonPrefix(char** strs, int strsS

2024-04-07 18:58:44 1714 1

原创 Leetcode 24.两两交换链表中的结点和Leetcode 19.删除链表的倒数第 N 个结点

因为题目传过来的链表没有虚拟头节点,为了方便操作,我建立了一个哑结点 dummyhead 用来存储题目传来的头节点 head 的地址,然后将 dummyhead 的地址赋予指针 thead ,这样 thead 就会成为链表的虚拟头节点。单独对链表的头节点进行操作,交换头节点和第二结点后,指针 q 指向第三个结点,指针 p 指向第二个结点,循环判断需要交换的两个结点是否为空,判断通过后执行交换操作。输入:head = [1,2,3,4,5], n = 2。输入:head = [1,2], n = 1。

2024-04-06 21:48:48 297 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除