自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 JS 面试 Foo.getName()

function Foo() { getName = function () { console.log (1); }; // console.log('this is'+this) return this; } Foo.getName = function () { console.log (2); }; Foo.prototype.getName = function () { console.log('baidu'.

2021-05-15 20:12:32 735

原创 箭头函数跟普通函数的区别

目录1 箭头函数跟普通函数的区别2 箭头函数为什么不能使用new命令1 箭头函数跟普通函数的区别区别:1 箭头函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象2 不可以使用arguments 对象,该对象在函数体内不存在。如果要用,可以用rest参数代替3 不可以使用yield命令,因此箭头函数不能用作Generator函数4 不可以使用new命令2 箭头函数为什么不能使用new命令普通函数可以使用new生成实例如何生成new实例呢,点击这里查看原因1 没有自

2021-05-12 10:24:46 123

原创 JavaScript 如何实现一个 new

目录1 new Object()创建2 Object.create()创建1 new Object()创建先定义一个构造函数,并定义构造函数的原型方法var Dog = function (name,age) { this.name = name; this.age = age;}Dog.prototype.bark = function () { console.log("wang wang")}Dog.prototype.sayName = function ()

2021-05-10 22:26:24 125

原创 前端浏览器缓存机制

目录1 缓存定义及其优点2 强缓存2.1 expires 和 Cache-Control3 协商缓存4 浏览器缓存位置1 缓存定义及其优点什么是缓存?当我们第一次访问网站的时候,电脑会把网站上的图片和数据下载到电脑上,当我们再次访问的时候,网站就会从电脑中直接加载出来,这就是缓存。比如我们访问网页点击后退功能的时候,加载的非常快,这就是缓存的优势。缓存优点:1 缓存服务器压力,不用每次都去请求某些数据了2 提升性能,打开本地资源肯定会比请求服务器更快3 减少带宽消耗,当我们使用缓存时,只会产

2021-05-09 10:04:43 1241 1

原创 JS 数字的千位分隔法

目录1 整数的千位分隔法1.1 正则分隔1.2 遍历分隔1.3 refuce函数分隔2 有小数划分2.1 正则化分隔2.2 toLocalString()函数1 整数的千位分隔法1.1 正则分隔相关知识:(?=p),其中p是一个子模式,即p前面的位置。(hello (?=e) 指e前面的位置 “h#ello”)(?!p)就是(?=p)的反面意思(hello (?!e) 指除e前面的位置 “#he#l#l#o#”)写个正则不匹配任何东西: /.^/数字的千分位就是把"12345678",

2021-05-08 10:30:36 659

原创 简单理解js的深浅拷贝

目录1 深浅拷贝1.1 浅拷贝介绍1.2 深拷贝介绍2 实现浅拷贝2.1 手撕浅拷贝函数2.2 库函数实现浅拷贝2.2.1 Object.assign()2.2.2 展开语法 Spread3 实现深拷贝3.1 JSON.parse(JSON.stringify(object))3.2 手撕深拷贝代码3.3 map解决循环引用问题3.3.3 WeakMap优化Map3.4 其他数据类型1 深浅拷贝        深浅拷贝是

2021-05-06 18:24:53 207

原创 JS的reduce的介绍和应用

目录1 reduce的介绍2 reduce的用法2.1 数组中求和,最大值,最小值2.2 累加对象数组中的和2.3 数组扁平化2.4 计算数组中每个元素出现的次数2.5 按属性对object分类2.6 数组去重2.7 reduce 实现map2.8 reduce实现filter1 reduce的介绍语法:arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])callback 执行数组中的每

2021-05-05 15:06:13 273 1

原创 JavaScript 之 call 和 apply 的模拟实现

目录1 call和apply的区别2 call 方法的实现2.1 设计思路2.1.1 第一步改变this指向2.1.2 第二步参数个数不确定2.1.3 传入参数为空或有返回值2.2 最终代码2.2.1 传入参数只有context 时2.2.2 参数为2的时候3 apply 的实现1 call和apply的区别call()方法接受的是参数列表apply()方法接受的是一个参数数组。它们的共同之处:都可以用来代替另一个对象调用一个方法,将一个函数的对象上下文从初始的上下文改变为由this指定的新对象。

2021-05-03 21:51:09 312 6

原创 js 的继承

目录1 继承方式1.1 原型链继承1.2 借用构造函数继承1.3 组合继承1.4 原型式继承1.5 寄生继承1.6 寄生组合式继承2 相关知识2.1 Object.create()1 继承方式参考链接1参考链接21.1 原型链继承需要两个构造函数来完成一个原型链继承基本原理:使用类似作用域的原型链,进行继承查找 // SuperType 构造函数称为超类 function SuperType (){ this.name='super'; this.friend=[];

2021-04-24 19:24:27 110

原创 JS 原型 构造函数 对象的关系

目录1 原型链2 构造函数、原型对象和实例之间的关系1 原型链所有引用类型都有一个_proto_(隐式原型)属性,属性是一个普通的对象所有函数都有一个prototype(原型)属性,属性值是一个普通的对象所有引用类型的_proto_(隐式原型)指向它的构造函数的prototype每一个原型都有一个constructor属性,指向该关联的构造函数2 构造函数、原型对象和实例之间的关系function F(){}var f = new F();// 构造器console.log(F.p

2021-04-24 11:40:09 116

原创 JavaScript中的this

目录1 内存中的数据结构1.1 内存的数据结构1.2 函数的内存存放1.3 环境变量2 this的值是什么?2.1 语法糖转换2.2 []语法2.3 总结3 this的指向3.1 普通函数的this3.2 箭头函数的this3.3 匿名函数的this1 内存中的数据结构var obj = { foo: function () { console.log(this.bar) }, bar: 1};var foo = obj.foo;var bar = 2;obj.foo() // 1

2021-04-21 11:34:31 165 1

原创 头条笔试 手串问题

文章目录1 问题描述2 题解1 问题描述作为一个手串艺人,有金主向你订购了一条包含n个杂色串珠的手串——每个串珠要么无色,要么涂了若干种颜色。为了使手串的色彩看起来不那么单调,金主要求,手串上的任意一种颜色(不包含无色),在任意连续的m个串珠里至多出现一次(注意这里手串是一个环形)。手串上的颜色一共有c种。现在按顺时针序告诉你n个串珠的手串上,每个串珠用所包含的颜色分别有哪些。请你判断该手串上有多少种颜色不符合要求。即询问有多少种颜色在任意连续m个串珠中出现了至少两次。输入描述:第一行输入n,m,c

2021-03-21 22:18:13 517

原创 手动实现Promise.all()和 Promise.race()

参考链接:https://www.jianshu.com/p/c17085ce40ec1 Promise.allPromise.all() 方法接收一个promise的iterable类型(注:Array,Map,Set都属于ES6的iterable类型)的输入,并且只返回一个Promise实例, 那个输入的所有promise的resolve回调的结果是一个数组。这个Promise的resolve回调执行是在所有输入的promise的resolve回调都结束,或者输入的iterable里没有promi

2021-03-21 16:18:06 412

原创 Promise

1 为什么使用PromisePromise是异步编程的一种解决方案。可以将异步操作队列化,按照期望的顺序执行,返回符合预期的结果可以在对象之间传递和操作promise,帮助我们处理队列1.1 异步回调的问题之前处理异步是通过纯粹的回调函数的形式进行处理;很容易进入到回调地狱中,剥夺了函数return的能力;问题可以解决,但是难以读懂,维护困难;稍有不慎就会踏入回调地狱 - 嵌套层次深,不好维护;1.2 什么时候会来处理异步事件呢?一种很常见的场景应该就是网络请求了。我们封装一

2021-03-21 11:39:13 79

原创 浮动

文章目录1什么是浮动2 怎样就是浮动3 为什么清除浮动4 清除浮动方法4.1 额外标签法4.2 父级添加overflow属性4.3 使用after伪元素4.4 使用before和after双伪元素1什么是浮动浮动最开始出现的意义是为了让文字环绕图片,后来发展着发现浮动可以让多个块级元素并排显示,这样子很方便只需要一个属性。到这里肯定有人会问了,那我把display属性设置为inline-block不也能达到效果,为啥还用浮动。那有没有考虑过我就要这些元素从右往左排列呢哈哈哈,所以浮动可以控制居左还是居右

2021-02-02 14:03:57 70

原创 和为S的连续正数序列 JZ41

目录1 题目描述2 题解2.1 暴力枚举2.2 前缀和2.3 滑动窗口1 题目描述2 题解题目抽象:给定一个1~sum的序列,求和为sum的连续子序列。2.1 暴力枚举算法步骤:用指针 i 枚举目标序列左边界用指针 j 枚举目标序列右边界用指针 k 枚举区间[ i , j ],来计算区间和,看是否等于目标sum。代码如下:class Solution {public: vector<vector<int> > FindContinuousSequen

2020-12-14 10:55:13 77

原创 链表中环的入口节点 JZ55

目录1 题目描述2 题解2.1 哈希法2.2 双指针3 判断链表有无环(相似题)1 题目描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。2 题解2.1 哈希法创建一个set容器,遍历链表查看set内是否存在该结点,不存在则存入set,存在说明链表有环返回结点,遍历结束则返回null,链表无环。/*struct ListNode { int val; struct ListNode *next; ListNode(int x) :

2020-12-08 17:22:18 95

原创 二进制中1的个数 JZ11

目录1 题目描述2 题解2.1 暴力法2.2 技巧法1 题目描述 输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。2 题解原码、补码、反码 知识详解2.1 暴力法 当然这种方法,对于大部分数据是对的,但是对于-2147483648,二进制为1000…000,一共有31个0.因为计算机使用补码存储二进制数据的。对于这个数据,我们的方***输出0,实际上为1.所以这种方法不对。2.2 技巧法别人写的解析。 解析:如果一个整数不为0,那么这个整数至少有一位是1。如果我

2020-12-04 17:13:54 84

原创 数组只出现一次的数字 JZ40

目录1 题目描述2 题解2.1 哈希map2.2 位运算1 题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。2 题解2.1 哈希map 遍历一遍数组,用map记录出现的次数,然后再遍历一遍数组,找出出现1次的数字。class Solution {public: void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) { map<in

2020-12-02 18:36:53 84

原创 和为S的两个数字 JZ42

这里写目录标题1 题目描述2 题解1 题目描述  输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。2 题解两数间隔越远乘积越小证明如下://输出两个数的乘积最小的。这句话的理解?假设:若b>a,且存在,a + b = s;(a - m ) + (b + m) = s则:(a - m )(b + m)=ab - (b-a)m - m*m < ab;说明外层的乘积更小也就是说依然是左右夹逼法!!!

2020-12-01 16:34:49 74

原创 约瑟夫环问题

目录1 题目描述1.1 例题2 题解2.1 链表法2.2 推理法2.2.1 递归法2.2.2 循环迭代法1 题目描述先来看这个类型的某个题目描述:约瑟夫生者死者游戏约瑟夫游戏的大意:30个游客同乘一条船,因为严重超载, 加上风浪大作,危险万分。因此船长告诉乘客,只有将全船 一半的旅客投入海中,其余人才能幸免于难。无奈,大家只 得同意这种办法,并议定30 个人围成一圈,由第一个人数起,依次报数,数到第9人,便把他投入大海中,然后再从 他的下一个人数起,数到第9人,再将他投入大海中,如此 循环地进行,直

2020-11-30 22:08:20 117

原创 统计一个数字在升序数组中出现的次数。

目录1 题目2 题解2.1 暴力2.2 二分法1 题目题目描述统计一个数字在升序数组中出现的次数。2 题解2.1 暴力2.2 二分法暴力法没有把数组有序的条件利用上,因为数组是升序的,目标值如果有多个就是连在一起的,因此我们可以查找目标值的范围即:上界和下界。下界:如果存在目标值,则指向第一个目标值,否则,如果不存在,则指向大于目标值的第一个值。上界:不管目标值存在与否,都指向大于目标值的第一个值。即使用两次二分法分别找下界和上界。上界:当目标值大于中间值时,l=mid+1;若数组

2020-11-27 21:15:10 163

原创 构建乘积数组

目录1 题目描述2 题解1 题目描述  给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]…*A[i-1]A[i+1]…*A[n-1]。不能使用除法。(注意:规定B[0] = A[1] * A[2] * … * A[n-1],B[n-1] = A[0] * A[1] * … * A[n-2];)  对于A长度为1的情况,B无意义,故而无法构建,因此该情况不会存在。2 题解根据题目要求不能使用乘法根据图片可将B[i]按对角线分

2020-11-25 17:17:11 37

原创 数值的整数次方

目录1 题目描述2 解题思路2.1 暴力解题2.2 递归法(快速幂)2.3 非递归的快速幂1 题目描述题目链接 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。 保证base和exponent不同时为0 示例12 解题思路预处理:求 pow(b , n), 如果n为负数怎么解决?例如求 x−2x^{-2}x−2 是不是可以转换成 (1x)2(\frac 1x)^2(x1​)2于是,预处理代码如下:double Power

2020-11-25 16:49:07 55

原创 二叉树的深度

目录1 题目描述2 题解2.1 递归法2.2 层次遍历1 题目描述 输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。2 题解 题目抽象:给出一颗二叉树,求树的最大深度,也就是从根节点到所有叶子节点中的最大值。2.1 递归法分别计算左右子树的深度,选择最大的一个+1/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right;

2020-11-25 16:48:11 443

原创 不用加减乘除做加法

目录1 题目描述1.1 位运算1.1.1 一位加法1.1.2 二位加法1.1.3 更高位的加法1.1.4 代码1 题目描述写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号1.1 位运算 使用位运算实现加法1.1.1 一位加法普通加法异或1 + 1 = 01^1 = 0 (错误)1 + 0 = 11^0 = 1 (正确)0 + 1 = 10^1 = 1 (正确)0 + 0= 00^0 = 0 (正确)问题:没有采取进位

2020-11-25 16:47:51 41

原创 数字 1 的个数

目录1 题目描述2 题解2.1 案例分析2.2 核心代码1 题目描述题目链接2 题解解题思路: 将1~n 的个位、十位、百位、…的1出现次数相加,即为1出现的总次数。设数字n是个x位数,记n的第i位为nin_ini​,则可将n写为nxnx−1...n2n1n_xn_{x-1}...n_2n_1nx​nx−1​...n2​n1​:称"nin_ini​"为当前位,记为cur将"ni−1ni−1...n2n1n_{i-1}n_{i-1}...n_2n_1ni−1​ni−1​...n2​n1​"称

2020-11-20 18:43:51 119

原创 DOM 重点核心

目录1 DOM 简介1.1 创建1.2 增1.3 删1.4 改1.5 查1.6 属性操作1.7 事件操作1 DOM 简介 关于dom操作,我们主要针对于元素的操作。主要有创建、增、删、改、查、属性操作、事件操作。1.1 创建1.2 增1.3 删1.4 改1.5 查1.6 属性操作1.7 事件操作在这里插入图片描述...

2020-11-13 21:52:21 78

原创 JS 操作元素

目录1 操作元素1.1 改变元素内容1.2 表单元素的属性操作1.3 样式属性操作 JavaScript 的 DOM 操作可以改变网页内容、结构和样式,我们可以利用DOM操作元素来改变元素里面的内容、属性等。1 操作元素1.1 改变元素内容 这个是普通盒子 比如div 标签里面的内容element.innerText从起始位置到终止位置的内容,但它去除html标签,同时空格和换行也会去掉。不识别html标签。element.innerHTML起始位置到终止位置的全部内容,包括html标

2020-11-09 16:51:32 596

原创 JS 事件的执行

目录1 事件1.1 执行事件的步骤1.2 常见的鼠标事件1 事件1.1 执行事件的步骤获取事件源注册事件(绑定事件)添加事件处理程序<button id="btn">唐伯虎</button><script> // 点击一个按钮,弹出对话框 // 1. 事件是有三部分组成 事件源 事件类型 事件处理程序 我们也称为事件三要素 // (1) 事件源 事件被触发的对象 谁 按钮 var btn=document.ge

2020-11-08 15:57:01 208

原创 JS 数据类型

目录1 数据类型简介1.1 为什么需要数据类型1.2 变量的数据类型2 简单数据类型2.1 简单(基本)数据类型2.2 数字型 Number2.2.1 数字型进制2.2.2 数字型三个特殊值2.2.3 isNaN()2.3 字符串型String2.3.1 字符串引号嵌套2.3.2 字符串转义符2.3.3 字符串长度2.3.4 字符串拼接2.3.5 字符串拼接加强2.3.6 布尔型 Boolean2.3.7 Undefined和Null3 获取变量数据类型3.1 获取检测变量的数据类型4 数据类型转换4.1

2020-11-07 14:39:09 143

原创 JS引擎运行 js 预解析

目录1 JS引擎运行 js1.1 预解析1.2 代码执行2 代码案例2.1 第一个案例2.2 第二个案例2.3 第三个案例(重点)1 JS引擎运行 js 我们JS引擎运行js分为两步:预解析 、代码执行。1.1 预解析 预解析JS引擎会把js里面所有的var还有function提升到当前作用于的最前面。变量提升:就是把所有的变量声明提升到当前作用域的最前面,不提升赋值操作。函数提升:就是把所有的函数声明提升到当前作用域的最前面,不调用函数。1.2 代码执行 按照代码书写的顺序从上往下执行

2020-11-07 14:38:28 183

原创 JS 变量

目录1 变量概述1.1 什么是变量1.2 变量在内存中的存储2 变量的使用2.1 声明变量2.2 赋值2.3 变量的初始化2.4 变量语法扩展2.4.1 更新变量2.4.2 同时声明多个变量2.4.3 声明变量特殊情况3 变量命名规范4 小结1 变量概述1.1 什么是变量1.2 变量在内存中的存储 本质是程序在内存中申请的一块用来存放数据的空间。2 变量的使用 变量在使用时分为两步:1.声明变量 2.赋值2.1 声明变量2.2 赋值2.3 变量的初始化2.4 变量语法扩展2

2020-11-03 15:21:49 147

原创 JS 书写位置和输入输出语句

这里写目录标题1 JS书写位置1.1 行内式JS1.2 内嵌JS1.3 外部JS2 JS 输入输出语句1 JS书写位置JS书写位置分为3种:行内式JS、内嵌式JS和外部JS1.1 行内式JS1.2 内嵌JS1.3 外部JS2 JS 输入输出语句

2020-11-03 11:05:18 121

原创 响应式开发

目录1 响应式开发1.1 响应式开发原理1.2 响应式布局容器1 响应式开发1.1 响应式开发原理 就是使用媒体查询针对不同宽度的设备进行布局和样式的设置,从而适配不同设备的目的。设备划分尺寸区间超小屏幕(手机)<768px小屏设备(平板)768px<= ~ <992px中等屏幕(桌面显示器)992px<= ~ <1200px宽屏设备(大桌面显示器)1200px<= ~1.2 响应式布局容器 响应式需要一个父级

2020-11-02 20:34:15 669

原创 gitee上传代码

目录1 上传项目2 查看项目3 另一种方法1 上传项目需要下载git ,下载地址:https://git-scm.com/downloads/下载是exe文件,双击一路点击next即可。在需要上传的文件夹中右键点击Git Base Here,打开命令行输入2 查看项目3 另一种方法...

2020-10-30 22:14:34 151

原创 rem和Less

目录1 rem1.1 rem能解决什么问题1.2 rem是什么?2 媒体查询2.1 mediatype查询类型2.2 关键字2.3 媒体特性1 rem1.1 rem能解决什么问题页面布局文字能否随着屏幕大小变化而变化?流式布局和flex布局主要针对于宽度布局,那高度如何设置?怎么样让屏幕发生变化的时候元素高度和宽度等比例缩放? 所以提出rem1.2 rem是什么? rem(root em)是一个相对单位,类似于em,em是父元素字体大小。 不同的是rem的基准是相对于html元素的字体

2020-10-28 09:42:47 251

原创 下载Node.js WebStrom安装配置less

目录1 安装Node.js1.1 什么是Node.js1.2 Node.js安装1.3 查看下载是否成功1.4 安装less2 WebStrom安装配置less2.1 遇到的问题安装配置less需要下载node.js1 安装Node.js1.1 什么是Node.js 如果说Node.js是一个门编程语言,那么它几乎没有定义语言应该有的特性,因为它的语法本身,就是前端大名鼎鼎的JavaScript语言。如果说Node.js不是一门编程语言,它确实可以做所有其他后端语言,可以做的事情,它扩展了JavaS

2020-10-27 18:38:34 132

原创 flex布局

目录1 flex布局原理2 flex布局父项常见属性2.1 常见父项属性2.2 flex-direction2.3 justify-content 主轴2.4 flex-wrap2.5 align-items 侧轴2.6 align-content2.7 flex-flow3 flex布局子项常见属性3.1 flex属性3.2 align-self3.3 order1 flex布局原理  display:flex。 flex是flexible Box的缩写,意为“弹性布局”,用来为盒状模型提供最大的灵

2020-10-25 20:50:23 159

原创 前端移动端基础

目录1 移动端基础1.1 meta视口标签1.2 背景缩放1.3 特殊样式1 移动端基础1.1 meta视口标签<meta name="viewport" content="width=device-width,user-scalable=no, initial-scale=1.0,maximum-scale=1.0 minimum-scale=1.0">属性解释说明width宽度设置的是viewport宽度,可以设置device-width特殊值i

2020-10-24 21:05:30 196

空空如也

空空如也

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

TA关注的人

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