aiguangyuan
要全身心的投入,程序才会有些感觉!
展开
-
前端面试题汇总-数据结构(二叉树)
对于树这个结构,最常见的就是二叉树。我们除了需要了解二叉树的基本操作之外,还需要了解一些特殊的二叉树,比如二叉搜索树、平衡二叉树等,另外还要熟悉二叉树的遍历方式,比如前序遍历、中序遍历、后序遍历、层序遍历。另外还要知道二叉树的常用遍历的方式:深度优先遍历和广度优先遍历。原创 2023-07-09 23:22:14 · 698 阅读 · 0 评论 -
前端面试汇总-React
React并不是将click事件绑定到了div的真实DOM上,而是在document处监听了所有的事件,当事件发生并且冒泡到document处的时候,React将事件内容封装并交由真正的处理函数运行。这样的方式不仅仅减少了内存的消耗,还能在组件挂在销毁时统一订阅和移除事件。除此之外,冒泡到document上的事件也不是原生的浏览器事件,而是由react自己实现的合成事件(SyntheticEvent)。因此如果不想要是事件冒泡的话应该调用event.preventDefault()方法,而不是调用event原创 2023-06-29 19:52:20 · 1184 阅读 · 0 评论 -
前端面试汇总-JavaScript
JavaScript共有八种数据类型,分别是 Undefined、Null、Boolean、Number、String、Object、Symbol、BigInt。其中 Symbol 和 BigInt 是ES6 中新增的数据类型:Symbol 代表创建后独一无二且不可变的数据类型,它主要是为了解决可能出现的全局变量冲突的问题。BigInt 是一种数字类型的数据,它可以表示任意精度格式的整数,使用 BigInt 可以安全地存储和操作大整数,即使这个数已经超出了 Number 能够表示的安全整数范围。原创 2023-06-19 18:37:29 · 1104 阅读 · 0 评论 -
前端面试汇总-计算机网络
超文本传输安全协议是一种通过计算机网络进行安全通信的传输协议。HTTPS经由HTTP进行通信,利用SSL/TLS来加密数据包。HTTPS的主要目的是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。HTTP协议采用明文传输信息,存在信息窃听、信息篡改和信息劫持的风险,而协议TLS/SSL具有身份验证、信息加密和完整性校验的功能,可以避免此类问题发生。安全层的主要职责就是对发起的HTTP请求的数据进行加密操作 和 对接收到的HTTP的内容进行解密操作。原创 2023-06-17 17:44:52 · 1962 阅读 · 0 评论 -
前端面试汇总-CSS
实现动画效果的方法比较多,Javascript 中可以通过定时器 setTimeout 来实现,CSS3 中可以使用 transition 和 animation 来实现,HTML5 中的canvas也可以实现。除此之外,HTML5 提供一个专门用于请求动画的API,那就是 requestAnimationFrame,顾名思义就是请求动画帧。原创 2023-06-10 20:21:59 · 1445 阅读 · 0 评论 -
前端面试汇总-HTML
src和href的区别,src和href都是用来引用外部的资源,它们的区别如下。src:表示对资源的引用,它指向的内容会嵌入到当前标签所在的位置。src会将其指向的资源下载并应用到文档内,如请求js脚本。当浏览器解析到该元素时,会暂停其他资源的下载和处理,直到将该资源加载、编译、执行完毕,所以一般js脚本会放在页面底部。href:表示超文本引用,它指向一些网络资源,建立和当前元素或本文档的链接关系。当浏览器识别到它他指向的文件时,就会并行下载资源,不会停止对当前文档的处理。原创 2023-06-07 20:12:40 · 777 阅读 · 0 评论 -
前端面试题汇总-数据结构(链表)
在计算机里,不保存在连续存储空间中,而每一个元素里都保存了到下一个元素的地址的数据结构,我们称之为链表(Linked List)。链表上的每一个元素又可以称它为节点(Node),而链表中第一个元素,称它为头节点(Head Node),最后一个元素称它为尾节点(Tail Node)。链表的结构定义中,包含了两个信息,一个是数据信息,用来存储数据的,也叫做数据域;另外一个是地址信息,用来存储下一个节点地址的,也叫做指针域。原创 2023-06-05 17:37:51 · 1111 阅读 · 0 评论 -
前端面试题汇总-性能优化
CDN(Content Delivery Network,内容分发网络)是指一种通过互联网互相连接的电脑网络系统,利用最靠近每位用户的服务器,更快、更可靠地将音乐、图片、视频、应用程序及其他文件发送给用户,来提供高性能、可扩展性及低成本的网络内容传递给用户。典型的CDN系统由下面三个部分组成:1. 分发服务系统:最基本的工作单元就是Cache设备,cache(边缘cache)负责直接响应最终用户的访问请求,把缓存在本地的内容快速地提供给用户。同时cache还负责与源站点进行内容同步,把列......原创 2023-06-03 15:07:01 · 1125 阅读 · 0 评论 -
前端面试题汇总-浏览器原理
1. 概念XSS 攻击指的是跨站脚本攻击,是一种代码注入攻击。攻击者通过在网站注入恶意脚本,使之在用户的浏览器上运行,从而盗取用户的信息如 cookie 等。XSS 的本质是因为网站没有对恶意代码进行过滤,与正常的代码混合在一起了,浏览器没有办法分辨哪些脚本是可信的,从而导致了恶意代码的执行。攻击者可以通过这种攻击方式可以进行以下操作:1. 获取页面的数据,如DOM、cookie、localStorage;2. DOS攻击,发送合理请求,占用服务器资源,从而使用户无法访问服务器;原创 2023-06-02 18:39:54 · 761 阅读 · 0 评论 -
前端面试题汇总-代码输出篇
1. 最关键的就是var x = a(5),函数a是在全局作用域调用,所以函数内部的this指向window对象。需要注意的是最后一个定时器打印出的p1其实是.finally的返回值,我们知道.finally的返回值如果在没有抛出错误的情况下默认会是上一个Promise的返回值,而这道题中.finally上一个Promise是.then(),但是这个.then()并没有返回值,所以p1打印出来的Promise的值会是undefined,如果在定时器的下面加上一个return 1,则值就会变成1。原创 2023-04-30 11:42:38 · 1498 阅读 · 0 评论 -
前端面试题汇总-Vue篇
Vue的基本原理:当一个Vue实例创建时,Vue会遍历data中的属性,用 Object.defineProperty(vue3.0使用proxy )将它们转为 getter/setter,并且在内部追踪相关依赖,在属性被访问和修改时通知变化。 每个组件实例都有相应的 watcher 程序实例,它会在组件渲染的过程中把属性记录为依赖,之后当依赖项的setter被调用时,会通知watcher重新计算,从而致使它关联的组件得以更新。原创 2022-12-31 11:49:58 · 951 阅读 · 0 评论 -
如何用JavaScript让 a==1 && a==2 && a==3 条件成立?
这是一道让人鄙视的面视题,如何才能实现呢?原创 2019-03-30 21:35:06 · 649 阅读 · 0 评论 -
JavaScript中鼠标移入移出事件有哪些?区别是什么?
1.onmouseover与onmouseout鼠标经过时自身触发事件,其子元素同时也触发该事件;父亲有的东西,儿子也有,支持冒泡2.onmouseenter与onmouseleave鼠标经过时自身触发事件,其子元素不触发该事件。父亲的东西就是父亲的,儿子没有,不支持冒泡......原创 2020-03-14 14:18:31 · 816 阅读 · 0 评论 -
什么是高阶函数?数组中的高阶函数有哪些?
何为高阶函数?一个函数就可以接收另一个函数作为参数或者返回值为一个函数,这种函数就称之为高阶函数。数组中的高阶函数如下:1. map 遍历1.对原来的数组没有影响;2.创建一个新数组,其结果是该数组中的每个元素都调用提供的函数后返回的结果;3.接收两个参数,一个是回调函数,一个是回调函数的this值(可选)。其中,回调函数被默认传入三个值,依次为当前元素、当前索引、整个数组。let nums = [1, 2, 3]; let obj = { val: 5 }; let n...原创 2021-11-22 18:23:07 · 938 阅读 · 0 评论 -
JavaScript中将数组扁平化有哪些方法?
对于前端项目开发过程中,偶尔会出现层叠数据结构的数组,我们需要将多层级数组转化为一级数组(即提取嵌套数组元素最终合并为一个数组),使其内容合并且展开。那么该如何去实现呢?需求:多维数组=>一维数组1.调用ES6中的flat方法let list= [1, [2, [3, [4, 5]]],6];let newList = list.flat(Infinity);console.log(newList);// [1,2,3,4,5,6]2.replace + split..原创 2021-11-20 10:04:12 · 499 阅读 · 0 评论 -
JavaScript判断数组中是否包含某个值?
此方法判断数组中是否存在某个值,如果存在,则返回数组元素的下标,否则返回-1。原创 2021-11-19 23:03:21 · 1541 阅读 · 0 评论 -
JavaScript中forEach中return有效果吗?如何中断forEach循环?
在forEach中用return不会返回,函数会继续执行。let list= [1, 2, 3];list.forEach((item, index) => { // 无效 return;});中断方法:1. 使用 try 监视代码块,在需要中断的地方抛出异常。let list= [1, 2, 3];try{ list.forEach((item)=>{ if(item=='1'){ // 条件成功,抛出错误原创 2021-11-19 11:43:01 · 591 阅读 · 0 评论 -
JavaScript函数的arguments为什么不是数组?如何转化成数组?
因为arguments本身并不能调用数组方法,它是一个另外一种对象类型,只不过属性从0开始排,依次为0,1,2...最后还有 callee 和length属性,我们也把这样的对象称为类数组。常见的类数组还有:1.用getElementsByTagName/ClassName()获得的HTMLCollection;2.用querySelector获得的nodeList。那这导致很多数组的方法就不能用了,必要时需要我们将它们转换成数组,有哪些方法呢?Array.prototype.sli..原创 2021-11-18 18:16:11 · 904 阅读 · 0 评论 -
JavaScript如何实现继承?
第一种:借助callfunction Parent(){ this.name='parent'; }function Child(){ Parent.call(this); this.type='child' };console.log(new Child);// {name: "parent",type: "child"}这样写的时候子类虽然能够拿到父类的属性值,但是问题是父类原型对象中一旦存在方法那么子类无法继承。第二种:借助原型链functi.原创 2021-11-18 16:22:06 · 518 阅读 · 0 评论 -
能不能描述一下JavaScript原型链?
JavaScript对象通过 proto 指向父类对象,直到指向 Object 对象为止,这样就形成了一个原型指向的链条,即原型链。对象的 hasOwnProperty() 来检查对象自身中是否含有该属性。使用 in 检查对象中是否含有某个属性时,如果对象中没有但是原型链中有,也会返回 true。......原创 2021-11-18 11:35:29 · 387 阅读 · 0 评论 -
JavaScript原型对象和构造函数有何关系?
在JavaScript中,每当定义一个函数数据类型(普通函数、类)时候,都会天生自带一个prototype属性,这个属性指向函数的原型对象。当函数经过 new 调用时,这个函数就成为了构造函数,返回一个全新的实例对象,这个实例对象有一个 proto 属性,指向构造函数的原型对象。......原创 2021-11-18 09:52:40 · 314 阅读 · 0 评论 -
JavaScript闭包有哪些表现形式?
在真实的场景中,究竟在哪些地方能体现闭包的存在?1.返回一个函数;function f1() { var a=2; return function f2() { console.log(a); //2 };};var num=f1();num();2.作为函数参数传递;var a = 1;function f1() { var a = 2; function f2() { console.log(a); }; f3(f2..原创 2021-11-18 09:30:28 · 216 阅读 · 0 评论 -
JavaScript闭包产生的原因?
要弄清闭包产生的原因,首先要明白作用域链的概念。在ES5中只存在两种作用域:全局作用域和函数作用域,当访问一个变量时,解释器会首先在当前作用域查找标示符,如果没有找到,就去父作用域找,直到找到该变量的标示符或者不在父作用域中,这就是作用域链。值得注意的是,每一个子函数都会拷贝上级的作用域,形成一个作用域的链条。比如:var a = 1;function f1() { var a = 2; return function f2() { console.log(a); //原创 2021-11-17 18:08:03 · 399 阅读 · 0 评论 -
JavaScript中什么是闭包?
闭包是实现变量重用又保护变量不被污染的一种结构,它实现了全局变量可重用又兼顾了局部变量不会被污染的两大优势。实现闭包分为以下 3 步完成:1. 使用外层函数包裹受保护的变量和操作变量的内层函数;2. 外层函数将内层函数返回到外部;3. 调用者用外部变量接住返回的内层函数;由于外层函数的函数作用域对象,闭包结构比普通函数占用更多的内存,所以使用完闭包后,要主动释放闭包,将引用内层函数的外部变量置为 null。.........原创 2021-11-17 16:54:51 · 366 阅读 · 0 评论 -
JavaScript如何让if(a == 1 && a == 2)条件成立?
这是一道让许多人都为之抓狂的面试题,非常有意思,实现代码如下;var a= { value: 0, valueOf:function() { this.value++; return this.value; }};console.log(a==1&&a==2);// true原创 2021-11-15 18:03:34 · 1079 阅读 · 0 评论 -
JavaScript对象转原始类型是根据什么流程运行的?
对象转原始类型,会调用内置的 [ToPrimitive] 函数,对于该函数而言,其逻辑如下:1. 如果Symbol.toPrimitive()方法,优先调用再返回;2. 调用valueOf(),如果转换为原始类型,则返回;3. 调用toString(),如果转换为原始类型,则返回;4. 如果都没有返回原始类型,会报错。var obj = { value: 3, toString() { return '5' }, valueOf() { return原创 2021-11-15 17:57:56 · 546 阅读 · 0 评论 -
JavaScript中==和===有什么区别?
===叫做严格相等,是指:左右两边不仅值要相等,类型也要相等,例如'1'===1的结果是false,因为一边是string,另一边是number。==不像===那样严格,对于一般情况,只要值相等,就返回true,但==还涉及一些类型转换,它的转换规则如下:1.两边的类型是否相同,相同的话就比较值的大小,例如1==2,返回false;2.判断的是否是null和undefined,是的话就返回true;3.判断的类型是否是String和Number,是的话,把String类型转换成Nu....原创 2021-11-15 17:45:59 · 308 阅读 · 0 评论 -
JavaScrip中类型转换有哪几种?
JS中,类型转换只有三种:1. 转换成数字;2. 转换成布尔值;3. 转换成字符串;转换具体规则如下:注意:"Boolean 转字符串" 这行结果指的是 true 转字符串的例子。原创 2021-11-15 17:17:21 · 227 阅读 · 0 评论 -
JavaScript中[]==-[]结果是什么?为什么?
console.log([] == ![]); // true解析:== 中,左右两边都需要转换为数字然后进行比较。[] 转换为数字为0。![] 首先是转换为布尔值,由于[] 作为一个引用类型转换为布尔值为true,因此![]为false,进而在转换成数字,变为0。0 == 0 ,结果为true.........原创 2021-11-15 16:45:01 · 494 阅读 · 0 评论 -
JavaScript中Object.is和===有什么区别?
ES5比较两个值是否相等相等运算符“==”和严格相等运算符“===”。2.===NaN不等于自身,以及+0等于-0;1.==自动转换数据类型;1.+0不等于-0;2.NaN等于自身;原创 2021-11-15 15:57:23 · 443 阅读 · 0 评论 -
手动实现一下JavaScript中的instanceof 的功能?
核心原型链的向上查找。原创 2021-11-15 15:23:26 · 290 阅读 · 0 评论 -
JavaScript中instanceof 能否判断基本数据类型?
其实就是自定义instanceof行为的一种方式,这里将原有的instanceof方法重定义,换成了typeof,因此能够判断基本数据类型。原创 2021-11-15 15:08:55 · 722 阅读 · 0 评论 -
JavaScript中的typeof 是否能正确判断类型?
因此采用typeof判断对象数据类型是不合适的,采用instanceof会更好,instanceof的原理是基于原型链的查询,只要处于原型链中,判断永远为true。在JavaScript中中,对于原始类型来说,除了null都可以调用typeof显示正确的类型。但对于引用数据类型,除了函数之外,都会显示"object"。...原创 2021-11-15 14:45:54 · 449 阅读 · 0 评论 -
JavaScript中的什么是BigInt?
1. 什么是BigInt?BigInt是一种新的数据类型,用于当整数值大于Number数据类型支持的范围时。这种数据类型允许我们安全地对大整数执行算术操作,表示高分辨率的时间戳,使用大整数ID等等,而不需要使用库。2.为什么需要BigInt? 在JS中,所有的数字都以双精度64位浮点格式表示,那这会带来什么问题呢?这导致JS中的Number无法精确表示非常大的整数,它会将非常大的整数四舍五入,确切地说,JS中的 Number类型只能安全地表示-9007199254740991(-(2^53.原创 2021-11-14 23:56:04 · 4810 阅读 · 0 评论 -
JavaScript中0.1+0.2为什么不等于0.3?如何实现等于0.3?
计算机中用二进制来存储小数,大部分小数转成二进制之后都是无限循环的值,因此存在取舍问题,也就是精度丢失。如上所述:0.1和0.2在转换成二进制后会无限循环,由于标准位数的限制后面多余的位数会被截掉,此时就已经出现了精度的损失,相加后因浮点数小数位的限制而截断的二进制数字在转换为十进制就会变成 0.30000000000000004。......原创 2021-11-14 21:13:31 · 857 阅读 · 0 评论 -
JavaScript中 “1“.toString()为什么可以调用?
toString() 按官方的说法,它是一个对象的方法,那为什么用字符串调用这个方法也可以呢?其实在这个语句运行的过程中做了这样几件事情:var s = new Object('1'); s.toString(); s = null;第一步:创建Object类实例。注意为什么不是String ? 由于Symbol和BigInt的出现,对它们调用new都 会报错,目前ES6规范也不建议用new来创建基本类型的包装类;第二步:调用实例方法;第三步:执行完方法立即销毁这个实例原创 2021-11-14 20:46:50 · 702 阅读 · 0 评论 -
JavaScript中null是对象吗?为什么?
结论: null不是对象。 解释: 虽然 typeof null 会输出 object,但是这只是 JS 存在的一个悠久 Bug。在 JS 的最初版本中使用的 是 32 位系统,为了性能考虑使用低位存储变量的类型信息,000 开头代表是对象,然而 null 表示为全零,所以将它错误的判断为 object 。 ......原创 2021-11-14 18:42:37 · 1283 阅读 · 0 评论 -
说出下面JavaScript代码运行的结果,说说为什么?
function test(person) { person.age = 26 ; person = { name: 'abc', age: 18 } return person } ;const p1 = { name: 'xyz', age: 19 };const p2 = test(p1) ;console.log(p1);console.log(p2);执行结果如下:console.log(p1);// {"name": "xyz","age": 26}.原创 2021-11-14 12:13:25 · 679 阅读 · 0 评论 -
JavaScript原始数据类型有哪些?引用数据类型有哪些?
3.未定义类型-undefined;6.函数对象-Function;1.布尔类型-boolean;5.字符串类型-string;6.标识符类型-symbol;4.数字类型-number;1.普通对象-Object;3.正则对象-RegExp;7.大整型-bigint;2.数组对象-Array;2.无效类型-null;4.日期对象-Date;5.数学函数-Math;...原创 2021-11-14 11:26:27 · 523 阅读 · 0 评论 -
如何用CSS画一个五角星?
对于这个五角星而言,我们可以拆分成三个部分,如下所示:将五角星分成三部分, 对于最上面的三角,利用边框就可以快速实现,这个不难。但是下面的两个如何实现呢?其实也非常的简单,想一想,下面这两个是不是就是一个向上的三角形旋转而来呢?明白了这一点,就可以动手实现了。<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport"原创 2021-11-14 10:34:52 · 3940 阅读 · 0 评论