自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 如何实现邮箱+验证码登录功能(express+vue+MySQL版)

【注意】:验证验证码函数使用时需要先导入util 模块,将 Node.js 中传统的基于回调的 API 转换为返回 Promise 的形式,否则无法直接通过。在你的项目数据库中添加列:email(存放邮箱号)、 code(存放验证码)、expires_at(存放验证码过期时间)的 Node.js 库(即在这里生成验证码),dotenv用于在。的node.js依赖库, randomstring是用于。其中,nodemailer是用来。,避免直接暴露在代码中。在后端入口文件中导入。

2024-12-15 21:04:30 2126

原创 Vue3学习笔记

【注意】:① 在子组件中接收时,通过defineProps“编译器宏”函数接收子组件传递的数据 ② defineProps原理:就是编译阶段的一个标识,实际编译器解析时,遇到后会进行编译转换。,当传入的ref对象是简单数据类型时,可以直接监视,当ref对象是复杂数据类型时,监视不到内部数据的变化,只能监视到对象地址的变化,因此需要deep配置。使用defineModel时只需要在父组件中绑定defineModel,然后再子组件中导入即可,并且可以直接在子组件内操作数据。,才能使用模板引用,eg:在。

2024-11-24 19:38:19 1283

原创 黑马智慧商城项目学习笔记

(eg:配置基础地址,请求响应拦截器),所以项目开发中,都会对axios进行基本的。静态接口=>封装接口=>查询参数获取参数query=>获取数据,渲染。封装storage存储模块,利用本地存储,进行vuex持久化处理。实现搜索列表页静态结构,封装接口,完成搜索列表页的渲染。静态接口=>封装接口=>动态获取参数=>获取数据,渲染。将请求封装成方法,统一存放到api模块,与页面分离。构建搜索页的静态布局,完成历史记录的管理。,单独封装到一个request模块中,分析项目页面,设计路由,配置一级路由。

2024-11-17 19:53:49 1429

原创 vue2-vuex详解

的写法是错误的,为了防止在项目的任意一个地方都能随意修改仓库的数据,就要开启严格模式。,再在modules文件夹中创建各个模块文件,然后在index.js中引用。,组件中不能直接修改仓库的数据。,当应用变得复杂时就会难以维护。

2024-11-10 20:49:56 875

原创 vue2声明式导航与编程式导航

把路由配置从main.js文件中抽离出来,放到router文件夹中的index.js文件中,在main.js中导入index.js文件并注入router即可。需要的组件(这些组件放在views目录中,不要放在components中),VueRouter是Vue官方的一个路由插件,是一个第三方包,的映射关系,根据路由就能知道不同路径的,应该匹配渲染哪个组件。问题:网页打开,url默认是/路径,为匹配到组件会显示空白。(路径匹配的组件显示的位置)(在App.vue文件中)目标:在跳转路由时,进行传值。

2024-11-03 19:53:19 839

原创 Vue2自定义指令及插槽

自定义指令:自己定义的指令,封装一些dom操作,扩展额外功能。

2024-10-27 22:10:21 1024

原创 Vue脚手架及组件化开发

分析页面,按模块拆分组件,搭架子(局部或全局注册)根据设计图,编写html结构css样式拆分封装通用小组件(局部或全局注册)

2024-10-20 23:07:59 866

原创 JS考核之解析

在这个阶段,事件从目标节点开始向上冒泡,经过DOM树中的每一个父节点,直到文档的根节点。,也就是说,箭头函数内部的this值是定义时所在的上下文(lexical this),而不是调用时的上下文。这意味着箭头函数内部的this值是在定义的时候绑定的,而不是在运行时。在这个阶段,事件从最顶层的节点(通常是document或window)开始向下传播,直到达到目标节点。这是事件流的第二个阶段,事件到达目标节点,触发目标节点上的事件处理程序。这是事件流中最常见的阶段,也是我们通常编写事件处理程序的地方。

2024-09-17 19:49:08 1065 1

原创 前端需要了解的数据库基础与身份认证

客户端收到服务器返回的JWT之后,通常会将它储存在localStorage或sessionStorage中,此后,客户端每次与服务器通信,都要带上这个JWT的字符串,从而进行身份认证。客户端第一次请求服务器的时候,服务器通过响应头的形式,向客户端发送一个身份认证的Cookie,客户端会自动将Cookie保存在浏览器中。随后,当客户端每次请求服务器的时候,浏览器会自动将身份认证相关的Cookie,通过请求头的形式发送给服务器,服务器即可验明客户端的身份。

2024-08-04 20:51:15 859

原创 AJAX之原理

与axios关系:axios内部采用XMLHttpRequest与服务器交互。请求少的时候,不引用axios直接用XMLHttpRequest可以。Promise对象用于表示一个异步操作的完成(或失败)及其结果值。概念:在async函数内,使用await关键字取代then函数,待定pending:初始状态,既没有兑现,也没有拒绝。可以更简洁的写出基于Promise的异步行为。,会影响新生成的Promise对象。,继续串联下一个任务,直到结束。细节:then()回调函数中的。好处:通过链式调用,

2024-07-28 16:41:54 440

原创 AJAX之基础知识

AJAX是异步的JavaScript和XML。简单说是使用XMLHttpRequest对象与服务器通信,是浏览器与服务器进行数据通信的技术。

2024-07-28 16:38:22 814

原创 JavaScript进阶之深入面向对象

指向构造函数的prototype原型对象,之所以对象都可以使用构造函数prototype原型对象的属性和方法,就是因为有__proto__原型的存在。,根据引用类型的特点,修改一个就都会改变(eg:对女人添加方法,同时也会影响男人,也给男人添加了这个方法)属性,指向原型对象的对象原型,这样一层一层形成的链式结构称作原型链,最顶层找不到则返回null。属性,这个属性是他的对象原型,原型对象也是一个对象,也有。如果希望所有对象使用同一个函数,节省内存,就要用到原型。,解决这个问题,可以在修改后的原型对象中,

2024-07-21 20:40:43 1049

原创 JavaScript进阶之构造函数&数据常用函数

字符串、数值、布尔等基本类型也有专门的构造函数,称为包装类,js中几乎所有数据都可以基于构造函数创建。引用类型:Object、Array、RegExp、Date等。包装类型:String、Number、Boolean等。语法: currentValue必须写,index可选。参数:有起始值,就把起始值加到里面。数组常见静态方法-from方法。数组常见实例方法-核心方法。数组常见实例方法-其他方法。,forEach没有。

2024-07-21 20:36:11 1011

原创 JavaScript进阶之作用域&解构&箭头函数

变量提升指在执行代码之前,把函数、变量、类或导入的声明移动到其作用域的顶部的过程(把var变量提升到当前作用域的最前面,只提升声明,不提升赋值。DOM事件回调函数需要用到this的时候不推荐使用箭头函数,DOM事件回调函数使用箭头函数的时候,this为全局的window。【总结】:① 函数提升使函数的声明调用更灵活 ② 函数表达式不存在提升的现象 ③ 函数提升出现在相同的作用域中。获取的剩余实参,是个。简单理解:闭包 = 内层函数 + 外层函数的变量(即在嵌套的函数中,内层函数引用到了外层函数的变量)

2024-07-21 20:32:53 934

原创 JavaScript之WebAPIs-BOM

转换后的数组元素通过参数里指定的分隔符进行分割,若为空字符串(‘’),则所有元素之间没有任何字符,参数为空则用逗号分隔。【注意】:延时器需要等待,后面的代码先执行,每一次调用延时器都会产生一个新的延时器。history的数据类型是对象,管理历史记录: 前进、后退、历史记录。navigator的数据类型是对象,记录了浏览器自身的相关信息。同步和异步的本质区别:这条流水线上各个流程的执行顺序不同。的,为了解决这个问题,利用多核CPU的计算能力,出现了。location的数据类型是对象,它。

2024-07-21 20:27:55 804

原创 JavaScript之Web APIs-DOM

标准属性:标签自带的属性,例如class id title等,可以直接用点语法操作自定义属性:在html5中推出的专门的data-自定义属性在标签开头一律以data-开头在DOM对象上一律以dataset对象方式获取。

2024-07-21 20:24:28 1103

原创 JavaScript之对象

一种数据类型,可以理解为一种的数据集合,数组是有序的数据集合用来描述一个事物:静态特征、动态特征。

2024-06-13 22:24:09 417

原创 JavaScript之函数

调用函数名()

2024-06-13 22:22:16 474

原创 js简单案例

【代码】js简单案例。

2024-06-02 21:42:35 152

原创 CSS之flex布局

数值越小越靠前,默认是零,可以使用负值Bootstrap来自于推特,是目前最受欢迎的前端框架,Bootstrap是基于HTML、CSS和javascript的,它简洁灵活,使得Web开发更加快捷。中文官网:http://www.bootcss.com/官网:http://getbootstrap.com/推荐使用:http://bootstrap.css88.com/框架。

2024-05-26 19:06:58 1014

原创 CSS之动画及2D、3D转换

转换(transform)可实现元素的位移(translate)旋转(rotate)缩放(scale),理解为变形。

2024-05-19 21:56:01 1198

原创 CSS之高级技巧

② 移动背景图片位置,可以使用background-position,移动的距离就是x和y的坐标(右下正左上负,一般情况都是负值)2.鼠标经过某个盒子的时候,提高当前盒子的层级即可(如果没有有定位,则加相对定位(保留位置),如果有定位,则加z-index)不同浏览器对有些标签的默认值是不同的,为了消除不同浏览器对HTML文本呈现的差异,照顾浏览器的兼容,我们需要对CSS 初始化。先新建font文件夹用来存放下载的图标,再引入以下代码,一定要设置字体font-family:‘iconmoon’;

2024-05-12 20:41:54 878

原创 CSS之定位

② 让固定定位的盒子margin-left:版心宽度一般的距离,多走版心宽度一半的位置。① 子级绝对定位,不会占有位置,可以放到父盒子里面任意一个地方,不影响其他兄弟盒子。① 以浏览器的可视窗口为参照点移动元素,和父元素没关系,不随滚动条滚动。① 让固定定位的盒子left:50%,走到浏览器可视区的一半位置。① 如果没有父元素或祖先元素没有定位,则以浏览器为准定位。③ 父盒子布局时,需要占有位置,因此父亲只能是相对定位。② 如果祖先元素有定位(相对、绝对、固定定位),则以。

2024-05-12 20:38:24 760

原创 CSS之浮动

float属性用于创建浮动框,将其移动到一边,直到左边缘或右边缘触及包含块或另一个浮动框的边缘。

2024-05-12 20:35:40 709

原创 CSS选择器、字体文本属性、三大特性、盒子模型等

只关注语义 可做简单样式,但繁琐标签以什么方式显示,比如div自己占一行,一行可放多个span。

2024-05-05 20:26:49 1133 1

原创 二叉树四种遍历方法

特点:①叶子节点出现在最下两层 ②最下层叶子一定集中在左部连续位置 ③倒数第二层若有叶子节点一定在右部连续位置 ④如果节点度为1,则该节点只有左孩子 ⑤同样节点数的二叉树,完全二叉树深度最小。2. 树的根节点没有前驱,除根结点外,其他所有节点有且只有一个前驱。如果树中节点的各子树次序不能互换,则称为有序树,否则是为无序树。或非终端节点,除根节点外,分支节点也称内部节点。称为结点的度,树的度取各个节点的度的最大值。2. 树中节点的最大层次称为树的深度或高度。的,树的定义中又用到了自身。

2024-05-04 01:33:22 278

原创 HTML网页入门

是超文本标记语言,不是编程语言,是标记语言标记语言是一套标记标签* 超文本:1. 可加入图片、动画、声音等(超越文本限制)2. 可从一个文件跳转到另一个文件(超链接)

2024-04-28 20:57:54 898

原创 每日一题(4.21)

输入字符串为 “(()())(())(()(()))”,原语化分解得到 “(()())” + “(())” + “(()(()))”,删除每个部分中的最外层括号后得到 “()()” + “()” + “()(())” = “()()()()(())”。输入字符串为 “(()())(())”,原语化分解得到 “(()())” + “(())”,例如,“”,“()”,“(())()” 和 “(()(()))” 都是有效的括号字符串。输入:s = “(()())(())(()(()))”

2024-04-21 16:20:01 714

原创 西邮移动应用开发实验室第一次考核题详解

具体操作为:将pCurrent->next指向tmp->next,将tmp->next指向pPrev->next,将pPrev->next指向tmp。然后,通过比较pPrev->next->val和tmp->val的值,移动pPrev直到找到tmp应该插入的位置。最后,将head更新为dummyhead->next,即排序后的链表的头节点,并释放虚拟头节点dummyhead的内存。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。

2024-04-21 16:01:34 748

原创 每日一题(4.20)

接下来,通过遍历前一行m的元素,计算新行n的中间元素,每个元素n[j]都是m[j-1]和m[j]的和。最后,将新行n的指针赋给res[i],并更新returnColumnSizes[i]为i+1。给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]输入: nums = [-1,1,0,-3,3]输出: [0,0,9,0,0]

2024-04-20 18:05:56 685

原创 每日一题(4.19)

如果flag等于j,说明从i到j的子字符串没有重复字符,更新res为当前子字符串长度和res的较大值,并将j增加1以继续搜索。在循环内部,使用另一个指针flag来遍历从i到j-1的子字符串,检查是否有与s[j]相同的字符。请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。如果字符串长度为1,那么最长无重复字符子串的长度就是1,直接返回。解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。

2024-04-20 00:32:06 685

原创 每日一题(4.18)

例如,在 “abbaca” 中,我们可以删除 “bb” 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 “aaca”,其中又只有 “aa” 可以执行重复项删除操作,所以最后的字符串为 “ca”。给定一个表示 DNA序列 的字符串 s ,返回所有在 DNA 分子中出现不止一次的 长度为 10 的序列(子字符串)。如果s中的当前字符与res的最后一个字符相同,则将index减1,这样res中的最后一个字符就被覆盖了,相当于去除了重复字符。输出:[“AAAAAAAAAA”]

2024-04-18 21:48:27 1157

原创 每日一题(4.17)

给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2)。输入:nums = [-1,2,1,-4], target = 1。输入:nums = [0,0,0], target = 1。不占用额外内存空间能否做到?给定 matrix =

2024-04-17 21:53:13 943

原创 分享内容.

哈希函数的作用是将关键字映射为哈希表上的索引。简单来说,哈希函数就是一个把非int类型的“键”或“关键字”转化为int类型的函数,这个函数的结果可以用作数组的下标。:需要重复遍历的同一个数组,可以考虑使用哈希表,减少时间复杂度,但哈希表的使用是提高了空间复杂度,牺牲空间,提升速度,时间复杂度是O(1),空间复杂度是O(n),请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。,其关键码就是数组的索引下标,可以直接通过下标访问数组中的元素。你可以按任意顺序返回答案。

2024-04-17 01:31:53 555

原创 每日一题(4.16)

数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4。例如, 罗马数字 2 写做 II ,即为两个并列的 1。输入:ransomNote = “aa”, magazine = “aab”输入:ransomNote = “aa”, magazine = “ab”I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。输入:ransomNote = “a”, magazine = “b”罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。

2024-04-16 23:50:17 700 1

原创 每日一题(4.14)

数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4。例如, 罗马数字 2 写做 II ,即为两个并列的 1。给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。输入: nums = [0,1,0,3,12]

2024-04-14 22:59:53 278 1

原创 分享内容.

numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0。输入:target = 11, nums = [1,1,1,1,1,1,1,1]输入:target = 7, nums = [2,3,1,2,4,3]找出该数组中满足其总和大于等于 target 的长度最小的 连续。输入:target = 4, nums = [1,4,4]解释:子数组 [4,3] 是该条件下的长度最小的子数组。Leecode-209-长度最小的子数组。

2024-04-14 20:13:28 218 1

原创 每日一题(4.13)

为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。给定一个链表的头节点 head ,返回链表开始入环的第一个节点。输入:head = [3,2,0,-4], pos = 1。输入:head = [1,2], pos = 0。解释:链表中有一个环,其尾部连接到第一个节点。输入:head = [1], pos = -1。输入:head = [1,2,3,4]输出:[2,1,4,3]

2024-04-14 11:56:36 320 1

原创 每日一题(4.12)

输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]从上到下遍历右侧元素,依次为 (top+1,right)到 (bottom,right)输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]输入:l1 = [7,2,4,3], l2 = [5,6,4]输入:l1 = [2,4,3], l2 = [5,6,4]输出:[1,2,3,6,9,8,7,4,5]输出:[7,8,0,7]

2024-04-12 23:25:56 888

原创 每日一题(4.11)

注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。s 中使用至少一个空格将字符串中的 单词 分隔开。,这样组成的字符串中,后面的子串做前串,前面的子串做后串,就一定还能组成一个s,如图。解释:如果两个单词间有多余的空格,反转后的字符串需要将单词间的空格减少到仅有一个。给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。给你一个字符串 s ,请你反转字符串中 单词 的顺序。

2024-04-11 22:29:10 400

空空如也

空空如也

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

TA关注的人

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