前端面试01总结
1.Js 中!x为true 时,x可能为哪些值
答:
1.false:布尔值false
2.0或-0:数字零
3.""或’'或 ``(空字符串):长度为0的字符串
4.null:表示没有任何值的特殊值
5.undefined:变量未定义时的默认值
6.NaN:表示非数字(Not a Number)
注:NaN一般是某些转数字函数转不过来会报的一个值NaN,它NaN==NaN返回false,只能使用isNaN(xxx)来判断;
2. js 请求接口时在哪些情况下会出现跨域?
在JavaScript中,由于浏览器的同源策略限制,当你试图使用AJAX(或其他方式)进行跨域请求时会遇到问题。以下情况会找到跨域问题:
1).协议不同
:例如一个请求来自http协议网页,另一个来自https协议网页
2).域名不同
:例如一个请求来自example1.com,另一个来自example2.com。
3).端口不同
:例如一个请求来自example.com:3000,另一个来自example.com:5000。
除非服务器启用了CORS(跨源资源共享),否则浏览器将限制这些请求,并抛出跨域错误。为了解决跨域问题,可以采取以下几种方式:
1).CORS:服务器可以设置响应头
Access-Control-Allow-Origin允许哪些源进行跨域请求。
2).JSONP
:通过动态创建script标签进行跨域请求,这个方法局限性较大,只支持GET请求,且安全性不如CORS。
3).代理服务器
:通过在同源的服务器端设置一个代理,将请求转发到目标服务器,然后再将结果返回给前端。
4).使用postMessage进行跨文档通信
:这是HTML5引入的API,可以用来在不同的源之间发送消息。
5).使用WebSocket
:WebSocket不受同源政策的限制,可以用来进行跨域通信。
3.网页中 options 请求出现的原因和作用
答:options请求出现的原因:
请求接口超出了如下范围就会先发options,再发真接口:
HEAD
GET
POST
除了被用户代理自动设置的头(例如 Connection, User-Agent, 或者任何 Fetch 规范定义的其他头)以及 CORS 安全的首部字段列表中的头,不得人为设置任何其他头。CORS 安全的首部字段列表包括:
Accept
Accept-Language
Content-Language
Content-Type (但只限以下三个值)
application/x-www-form-urlencoded
multipart/form-data
text/plain
跨不跨域,由后台设置的res header的三个值绝定,
res.header(‘Access-Control-Allow-Origin’, ‘http://myapp1.com’);
res.header(‘Access-Control-Allow-Methods’, ‘GET,POST,PUT,DELETE,OPTIONS’);
res.header(‘Access-Control-Allow-Headers’, ‘Content-Type’);
浏览器看到后台这三个值有任何一个不满足就会发生跨载报错!
4. 简单说下回谓地狱是怎么回事?简述至少一种常规的优化方案
答:下回谓地狱就是多个串联的异步操作,会导致嵌套过深,代码难维护,
常规方案:
1).promose
2)async+await
3)从业务上减少互相的依赖,尽量做到并行
5.递归如果过深,会占用大量内存,如果要将递归拆成常规循环,请提供你的解决思路
答:递归过深,会占用大量内存,而每个页面分到的内存有限,会导致界面卡顿甚至卡死,怎么办,把过深的递归拆成常规循环,采用
const stack=[];
for(item in trees){
stack.push(item);
while(stack.length){
const tItem=stack.pop();
…
}
}
例子:https://www.cnblogs.com/wangpenghui522/p/16218816.html
还有其它的办法:尾递归优化、使用循环代替递归、对重复计算结果的缓存(也称记忆化),以及对问题进行分治
6.请写个匹配手机号的正则表达式
答:var reg = /^1[3-9]\d{9}$/;
7.有个数组 ary1,请使用 es6 的解构赋值,创建一个新数组 ary2,将 ary1的后5个元素赋值给 ary2, let ary1=[1, 2, 3, 4, 5, 6]
答:let ary1 = [1, 2, 3, 4, 5, 6];
let [, …ary2] = ary1;
console.log(ary2);//[2, 3, 4, 5, 6],注意:…ary2必须是最后一个,就是入参一样,不然会报错
7.以下代码存在什么 BUG?该如何解决?
function updateCount(){
window.timer=setInterval(function(){
if(!Number(window.count)){
window.count=0
}
window.count++
console.log(window.count)
},1000)
}
答:这个多次调用后,之前的timer不会关闭,而会一起在跑,而大家共享一个变量,导致一个值,一秒变n(updateCount()调用n次),而且后面没有停止的地方,长时间跑会导致内存问题,页面卡顿,解决就是在timer有值时,要停止它,并且把window.count=0
8.以下 css 实现了一个什么效果?
.send{
width: 150px;
text-align: center;
line-height: 38px;
height: 40px;
box-sizing: border-box;
cursor: pointer;
background-color: #eee;
border-radius:0 5px 5px 0;
user-select: none;
&.is-send {
cursor: no-drop;
color: red;
}
&:hover{
background-color: blue;
}
&:active{
background-color: yellow;
}
}
答:实现了一个按钮的效果,按钮整体宽150,高40,背景#eee,文字水平垂直居中,右上右下角有5px的圆角,把鼠标放上去是可点击手型,背景变成蓝色,当把某个按钮的 class设置成send is-send(同时)就会显示字色是红色,鼠标移上去是不可操作形状,也不可能复制里的文字,&:active代表.send:active代码鼠标点击按钮但未放手状态,&:hover代表鼠标移到按钮上未点击时状态,上面代码里有嵌套,一般要使用工具转换下(但实践中却可以跑起来),.send{&.is-send{}}等于.send.is-send{}(注意没空格,有空格后面代表字元素class)等于:where(.send).is-send{} 表示某个元素的类必须满足.send和.is-send两个才符合
9.css通过盒子模型,将子元素上下和左右都居中需要如何设置?如果是绝对定位如何将元素居中>css 属性 display 有哪些常用的值?
.parent {
display: flex;
justify-content: center; /* 水平居中 /
align-items: center; / 垂直居中 */
}
.child {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
答:flex和absolute
10.在vue 中想使用 scss 需要安装那些 npm 模块
答:官方使用sass,官方,权威,而node-sass是基于nodejs平台的封装,编译速度比较快,如果要在webpack上使用sass,还要增加一个sass-loader连接库
命令:npm install --save-dev sass-loader node-sass
npm i sass
11.vue 中computed 和 watch 的区别和运用场景
答:computed使用在一个属性变量依赖其它变量时,当其它变量改变时它也会随着改变(例子算购物车总价,列表总条数),并且它有缓存和初始值,有返回值,多次调用不会重新计算,效率更高,而watch更关注监听变量的变化,当变量时,可以做某些事(如发送网络请求),它有个deep属性,用来监听对象(deep:true,相应的固定名处理函数handler()),不太关心函数返回值,再函数里面也不要改变监听的值,不然容易引起死循环;
12.vue 中$nexttick的作用
答:它在下一个 DOM 更新周期结束后延迟执行一段代码,当一个数据变化了,不会立即更新dom,而是放在一个队列里在某个合适的机会一并更新,这时如果立即去获取相应的变化(元素的位置和尺寸),是获取不到的,为了获取到,只能等更新后再来获取, n e x t t i c k ( ) 传入一个回调给它,当被回调时,证明 d o m 已经更新了,这时就可以取 d o m 的变化内容,一般会使用在 c r e a t e d ( ) 函数中,或者数据变了,想获取相应的 d o m 变化后的信息 ∗ ∗ 13. v u e 中 , 如果需要为订单明细页创建一个路由 , 需要的格式如下 : / o r d e r / 订单 i d , 路由的 p a t h 属性该如何设置 ? ∗ ∗ 答 : p a t h : ′ / o r d e r / : i d ′ , n a m e : ′ o r d e r ′ , c o m p o n e n t : O r d e r C o m p o n e n t o r d e r 界面获取 : t h i s . nexttick()传入一个回调给它,当被回调时,证明dom已经更新了,这时就可以取dom的变化内容,一般会使用在created()函数中,或者数据变了,想获取相应的dom变化后的信息 **13.vue 中,如果需要为订单明细页创建一个路由,需要的格式如下:/order/订单id,路由的 path属性该如何设置?** 答:{ path: '/order/:id', name: 'order', component: OrderComponent } order界面获取:this. nexttick()传入一个回调给它,当被回调时,证明dom已经更新了,这时就可以取dom的变化内容,一般会使用在created()函数中,或者数据变了,想获取相应的dom变化后的信息∗∗13.vue中,如果需要为订单明细页创建一个路由,需要的格式如下:/order/订单id,路由的path属性该如何设置?∗∗答:path:′/order/:id′,name:′order′,component:OrderComponentorder界面获取:this.route.params.id
如果是发送方:this. r o u t e r . p u s h ( n a m e : " r e q u i s i t i o n D e t a i l " , q u e r y : i d : i t e m . r e c e i v e I d , , ) ; − − − − − r e q u i s i t i o n D e t a i l 页面接收方 : t h i s . router.push({ name: "requisitionDetail", query: { id: item.receiveId,}, }); -----requisitionDetail页面接收方:this. router.push(name:"requisitionDetail",query:id:item.receiveId,,);−−−−−requisitionDetail页面接收方:this.route.query.id
13.在 vue 组件的 data中,有个对象 student,在组件初始化时没有电话属性[phone],如何使[phone]属性的数据更新能被检测到?**
在 Vue.js 中,如果你在初始化 data 对象时没有声明某个属性,那么在后期动态添加该属性,Vue 是无法检测到这个变化的。这是由于 Vue.js 的响应性系统的工作方式决定的:Vue.js 在初始化组件时会遍历 data 对象的属性,用 Object.defineProperty 为这些属性添加 getter 和 setter,来实现数据变化的检测和通知。但是,Vue.js 提供了一个方法 Vue.set(object, propertyName, value) 或者 this. s e t ( o b j e c t , p r o p e r t y N a m e , v a l u e ) 可以为对象添加新的响应式属性。使用这个方法,你就可以为 s t u d e n t 对象添加 p h o n e 属性的数据更新,并且使其能被 V u e . j s 检测到,例子 : t h i s . set(object, propertyName, value) 可以为对象添加新的响应式属性。使用这个方法,你就可以为 student 对象添加 phone 属性的数据更新,并且使其能被 Vue.js 检测到,例子: this. set(object,propertyName,value)可以为对象添加新的响应式属性。使用这个方法,你就可以为student对象添加phone属性的数据更新,并且使其能被Vue.js检测到,例子:this.set(this.student, ‘phone’, ‘123456789’);
14.在 vue 中使用 watch,如果要同时检测多个属性该如何做?
在 Vue 中,watch 选项使你可以监听特定的数据源,并在其变动时执行函数。如果你要同时检测多个属性的变化,有两种方式可以实现:
1).逐一声明: 你可以为每一个属性分别声明一个 watch 函数:
watch: {
property1: function (newVal, oldVal) {
// do something
},
property2: function (newVal, oldVal) {
// do something
},
// …以此类推
}
2).合并检测: 如果你需要在多个属性发生变化时执行相同的操作,或者这些属性的变化都会影响到同一份数据,你可以使用计算属性 computed 将这些属性合并起来检测。
例如,如果你面临的情况是“当 property1 或 property2 发生改变时,都需要执行处理逻辑”,那么可以将这两个属性组合成一个计算属性,然后用 watch 来监听这个计算属性
computed: {
combinedProperty: function () {
return this.property1 + this.property2;
}
},
watch: {
combinedProperty: function (newVal, oldVal) {
// do something
}
}
3).还有一种使用依赖注入的方式来监听多个属性的变化。可以创建一个 watch 对象,将需要监听的属性包含在这个对象中,然后 watch 这个对象。
一旦这个对象中的任何一个属性值改变,都会触发 watch 函数。这在某些情况下(例如多个属性一起决定某个行为)可能是有用的。
data() {
return {
obj: {
prop1: ‘’,
prop2: ‘’,
prop3: ‘’
}
}
},
watch: {
obj: {
handler: function(newVal, oldVal) {
// 这里的 newVal 和 oldVal 都是 obj 对象的新旧状态
// 这个函数会在 obj 对象的任何属性改变时调用
},
deep: true // 必须指定 deep 为 true,表示这是一个深度观察
}
}
相关文章:
前端面试01总结
1.Js 中!x为true 时,x可能为哪些值 答: 1.false:布尔值false 2.0或-0:数字零 3.""或’或 (空字符串):长度为0的字符串 4.null:表示没有任何值的特殊值 5.undefined:变量未定义时的默认…...
算法--目录
algorithm: 十种排序算法 二分法-各种应用 algorithm: 拓扑排序 算法中的背包问题 最长子序列问题 前缀和-解题集合 差分数组-解题...
ArcGIS Pro 3D建模简明教程
在本文中,我讲述了我最近一直在探索的在 ArcGIS Pro 中设计 3D 模型的过程。 我的目标是尽可能避免与其他软件交互(即使是专门用于 3D 建模的软件),并利用 Pro 可以提供的可能性。 这个短暂的旅程分为三个不同的阶段:…...
24届数字IC设计/验证秋招总结贴——先看这个
文章目录 前言一、经验篇二、知识学习篇三、笔试篇3.1 各大公司笔试真题3.2 华为机试——数字芯片笔试题汇总 四、面试篇4.1 时间节点4.2 提前批4.3 正式批 前言 为方便快速进行查找该专栏的内容,将所有内容链接均放在此篇博客中 整理不易,欢迎订阅~~ …...
带洞平面三角分割结果的逆向算法
先标不重复点,按最近逐个插入。 只说原理。 不带洞的 1 2 4 2 3 4 两个三角形 结果 1 2 3 4 无重复 无洞 1 2 6 1 2 3 6 1 2 3 7 6 1 2 3 4 7 6 1 2 3 4 5 7 6 1 2 3 4 1 5 7 6 1 2 3 4 1 6 5 7 6 最终结果 1 2 3 4 1 6 5 7 6 按重复分割 1 2 3…...
MGRE-OSPF接口网络类型实验
OSPF接口网络类型实验 一,实验拓扑 初始拓扑: 最终拓扑: 二,实验要求及分析 要求: 1,R6为ISP只能配置IP地址,R1-R5的环回为私有网段 2,R1/R4/R5为全连的MGRE结构,R…...
ChatGPT科研利器详解:写作论文轻松如玩游戏
ChatGPT无限次数:点击直达 ChatGPT科研利器详解:写作论文轻松如玩游戏 引言 在当今科技日新月异的时代,人工智能技术的应用越来越广泛,其中自然语言处理领域的发展尤为迅猛。ChatGPT作为一款先进的文本生成模型,为科研工作者提供…...
vue3从精通到入门23:定义全局变量
在vue2中,我们知道vue2.x是使用Vue.prototype.$xxxxxxx来定义全局变量, 比如定义一个全局的工具函数。 // 定义 ... Vue.prototype.$utilsutils;// 使用 this.$utils() ... 在vue3中我们无法使用this,提供了globalProperties; …...
反爬虫之代理IP封禁-协采云IP池
反爬虫之代理IP封禁-协采云IP池 1、目标网址2、IP封禁4033、协采云IP池 1、目标网址 aHR0cDovL3d3dy5jY2dwLXRpYW5qaW4uZ292LmNuLw 2、IP封禁403 这个网站对IP的要求很高,短时间请求十几次就会遭关进小黑屋。如下图: 明显是网站进行了反爬处理&…...
ELK-Kibana 部署
目录 一、在 node1 节点上操作 1.1.安装 Kibana 1.2.设置 Kibana 的主配置文件 1.3.启动 Kibana 服务 1.4.验证 Kibana 1.5.将 Apache 服务器的日志(访问的、错误的)添加到 ES 并通过 Kibana 显示 1.6. 浏览器访问 二、部署FilebeatELK&…...
Backtrader 量化回测实践(7)——在jupyter中执行bt的samples
Backtrader 量化回测实践(7)——在jupyter中执行bt的samples Backtrader提供了大量的测试用例,在samples目录下,测试程序主要都是用argparse解析参数,但是不能在jupyter中直接执行。 找到一个解决方法,可…...
npm vs. pnpm vs. Yarn: 三者之间的区别与比较
在现代前端开发中,包管理工具是必不可少的一环。npm、pnpm和Yarn是三个常用的包管理工具,它们各有特点,适用于不同的场景。本文将深入讨论这三者的基本概念、特点、优势和劣势,并对比分析它们之间的主要区别,包括功能、…...
Learning Feature Sparse Principal Subspace 论文阅读
1 Abstract: 这篇论文提出了新的算法来解决特征稀疏约束的主成分分析问题(FSPCA),该问题同时执行特征选择和PCA。现有的FSPCA优化方法需要对数据分布做出假设,并且缺乏全局收敛性的保证。尽管一般的FSPCA问题是NP难问题ÿ…...
Hibernate入门经典与注解式开发大全
本博文主要讲解介绍Hibernate框架,ORM的概念和Hibernate入门,相信你们看了就会使用Hibernate了! 什么是Hibernate框架? Hibernate是一种ORM框架,全称为 Object_Relative DateBase-Mapping,在Java对象与关系数据库之间建…...
蓝桥杯之注意事项
1.特殊求解的地方 2.一些数学公式 比如二叉树求全深度数值那道题 3.掌握有关库函数 #include<algorithm> 包含sort()函数【排列函数】C sort()排序详解-CSDN博客,next_permutation()函数【求解全排列问题】求解数组大小sizeof(arr…...
ES6 全详解 let 、 const 、解构赋值、剩余运算符、函数默认参数、扩展运算符、箭头函数、新增方法,promise、Set、class等等
目录 ES6概念ECMAScript6简介ECMAScript 和 JavaScript 的关系ES6 与 ECMAScript 2015 的关系 1、let 、 const 、var 区别2、变量解构赋值1、数组解构赋值2、对象解构赋值3、字符串的解构赋值 3、展开剩余运算符1、**展开运算符(...)**2、**剩余运算符(...)** 4、函数的拓展函…...
c++ - 类的默认成员函数
文章目录 前言一、构造函数二、析构函数三、拷贝构造函数四、重载赋值操作符五、取地址及const取地址操作符重载 前言 默认成员函数是编译器自动生成的,也可以自己重写,自己重写之后编译器就不再生成,下面是深入了解这些成员函数。 一、构造…...
Java哈希查找(含面试大厂题和源码)
哈希查找(Hash Search)是一种基于哈希表(Hash Table)的数据查找方法。哈希表通过使用哈希函数将键(Key)映射到表中的位置来存储数据,从而实现快速的数据访问。哈希查找的效率通常取决于哈希函数…...
c++中常用库函数
大小写转换 islower/isupper函数 char ch1 A; char ch2 b;//使用islower函数判断字符是否为小写字母 if(islower(ch1)){cout << ch1 << "is a lowercase letter." << end1; } else{cout << ch1 << "is not a lowercase lette…...
Scrapy框架 进阶
Scrapy框架基础Scrapy框架进阶 【五】持久化存储 命令行:json、csv等管道:什么数据类型都可以 【1】命令行简单存储 (1)语法 Json格式 scrapy crawl 自定义爬虫程序文件名 -o 文件名.jsonCSV格式 scrapy crawl 自定义爬虫程…...
ubuntu22安装snipaste
Ubuntu 22.04 一、Snipaste 介绍和下载 Snipaste 官网下载链接: Snipaste Downloads 二、安装并使用 Snipaste # 1、进入Snipaste-2.8.9-Beta-x86_64.AppImage 目录(根据自己下载目录) cd /home/jack/Downloads/softwares/AppImage# 2、Snipaste-2.8.9-…...
spring-cloud微服务openfeign
Spring Cloud openfeign对Feign进行了增强,使其支持Spring MVC注解,另外还整合了Ribbon和Nacos,从而使得Feign的使用更加方便 优势,openfeign可以做到使用HTTP请求远程服务时就像洞用本地方法一样的体验,开发者完全感…...
小程序变更主体需要多久?
小程序迁移变更主体有什么作用?小程序迁移变更主体的好处有很多哦!比如可以获得更多权限功能、公司变更或注销时可以保证账号的正常使用、收购账号后可以改变归属权或使用权等等。小程序迁移变更主体的条件有哪些?1、新主体必须是企业主体&am…...
19 Games101 - 笔记 - 相机与透镜
**19 ** 相机与透镜 目录 摘要一 照相机主要部分二 小孔成像与视场(FOV)三 曝光(Exposure)四 景深(Depth of Field)总结 摘要 虽说照相机与透镜属于相对独立的话题,但它们的确是计算机图形学当中的一部分知识。在过往的十多篇笔记中,我们学习的都是如…...
Flink入门学习 | 大数据技术
⭐简单说两句⭐ ✨ 正在努力的小新~ 💖 超级爱分享,分享各种有趣干货! 👩💻 提供:模拟面试 | 简历诊断 | 独家简历模板 🌈 感谢关注,关注了你就是我的超级粉丝啦! &…...
Arthas实战教程:定位Java应用CPU过高与线程死锁
引言 在Java应用开发中,我们可能会遇到CPU占用过高和线程死锁的问题。本文将介绍如何使用Arthas工具快速定位这些问题。 准备工作 首先,我们创建一个简单的Java应用,模拟CPU过高和线程死锁的情况。在这个示例中,我们将编写一个…...
HTML制作跳动的心形网页
作为一名码农 也有自己浪漫的小心思嗷~ 该网页 代码整体难度不大 操作性较强 祝大家都幸福hhhhh 效果成品: 全部代码: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML><HEAD><TITLE> 一个…...
如何在Odoo 17 销售应用中使用产品目录添加产品
Odoo,作为一个知名的开源ERP系统,发布了其第17版,新增了多项功能和特性。Odoo 17包中的一些操作简化了,生产力提高了,用户体验也有了显著改善。为了为其用户提供新的和改进的功能,Odoo不断进行改进和增加新…...
为什么pdf拆分出几页之后大小几乎没有变化
PDF 文件的大小在拆分出几页之后几乎没有变化可能有几个原因: 图像压缩: 如果 PDF 文件中包含图像,而这些图像已经被压缩过,拆分后的页面依然会保留这些压缩设置,因此文件大小可能不会显著变化。 文本和矢量图形: PDF 文件中的文…...
如何在 VM 虚拟机中安装 OpenEuler 操作系统保姆级教程(附链接)
一、VMware Workstation 虚拟机 若没有安装虚拟机的可以参考下篇文章进行安装: 博客链接https://eclecticism.blog.csdn.net/article/details/135713915 二、OpenEuler 镜像 点击链接前往官网 官网 选择第一个即可 三、安装 OpenEuler 打开虚拟机安装 Ctrl …...
小程序购物平台/广东seo快速排名
最近学习php,按照书上的描述,下载好apache和php后,按照其中配置进行,结果遇到了上述问题。花费了近一个半小时的时间解决了上述问题。现把解决问题过程中看到的方法总结如下。 最先肯定是一定要注意版本问题,apache和p…...
网站建设一般多少钱新闻/百度关键词快速排名方法
1.IN 操作符 在业务密集的SQL当中尽量不采用IN操作符而使用EXISTS 2.NOT IN 操作符 强列推荐不使用3. <> 操作符 强列推荐不使用 用其它相同功能的操作运算代替, 如 a<>0 改为 a>0 or a<0 ;a<>’’ 改为 a>’’ 4. > < 操作符 推荐 5. LIKE 操…...
b2c网站建设平台/最新疫情最新数据
目录 DCOM 本地DCOM执行命令 获取DCOM程序列表 使用DCOM执行任意系统命令...
外贸公司网站建设需要注意/在线html5制作网站
bmp:http://pan.baidu.com/s/1qWz1xaW png:http://pan.baidu.com/s/1pJFIyAB jpg:http://pan.baidu.com/s/1d9qPo 链接: http://pan.baidu.com/s/1gd3N2En 密码: rtvo 链接: http://pan.baidu.com/s/1EMY8Q 密码: c7r4...
可以做网络攻防的实验的网站/品牌推广的具体方法
Microsoft Office Visio绘画双箭头直线的具体步骤介绍作者:小鑫 来源:PC下载网时间:2019-07-19 15:27:03你们的工作中是不是也离不开Microsoft Office Visio呢?不过你们了解Microsoft Office Visio是怎么绘画双箭头直线吗?以下文章就为你们带来了Microsoft Office Visio绘画双…...
wordpress显示缩略图 摘要/360站长工具seo
作为讲述口袋妖怪的Round 16,这里,我会采用“夹叙夹议,夹议夹叙”的模式进行编排。也就是在议论一些口袋妖怪中的小游戏的核心算法的同时,叙述一下我对口袋妖怪的理解以及我与这一系列的经历。以上,就是我们的那位少年…...