面试题

作者: 当思念变成一种奢望_0c5c | 来源:发表于2020-02-10 14:46 被阅读0次

一、 数组去重的方法

var arr=[1,5,2,1,5,2,3,2,5,3,4]
var temp=[]
for(i=0;i<arr.length;i++){
if(temp.indexof((arr[i])==-1)){
temp.push(arr[i])
}
}
document.write(temp)
首页数据
请求地址:http://47.95.8.3/index.php/home/GK/gettype
请求类型:post
qs转一下
请求参数:name:’newest’ class:‘sell’/ ‘deal’ / ‘buy’
数据详情
请求地址:http://47.95.8.3/index.php/home/GK/getarticle_detail
请求类型:post
qs转一下
请求参数:key:id


二、有10个(a)标签,请写出点击那个A标签,出现那个A标签的下标

var a=document.getElementByTagName("a")
for(var i=0;i<a.length;i++){
a[i].index=i;
a[i].onclick=function(){
alert(this.index)
}
}


三、固定宽高的情况下,图片自适应,高度过高的情况下垂直居中

.box{
width:"500px";
height:"800px";
display:"flex";
background-color:"red";
align-items:"center";
}
.img{
width:"100%";
}


四、简要写一下弹性盒的使用流程

父元素{
display:flex;
justify-content:center
}
子元素{
flex:1;
}


五、解决跨域的问题

vue中在config目录下找到index.js文件
在index.js中找到dev代码块
修改proxyTable:{}内的数据
里面写'^api':''表示rewrite重写。
配置好之后可以直接写/api加上接口名称发送请求。


六、jsonp

在同源策略下,在某个服务器下的页面是无法获取到该服务器以外的数据,但img、iframe、script等标签是个例外,这些标签可以通过src属性请求到其他服务器上的数据。利用script标签的开放策略,我们可以实现跨域请求数据,当然,也需要服务端的配合。当我们正常地请求一个JSON数据的时候,服务端返回的是一串JSON类型的数据,而我们使用JSONP模式来请求数据的时候,服务端返回的是一段可执行的JavaScript代码。


七、 key值得作用

key值表示着具有唯一性,如果不用key,在for循环时,他会拿上面的进行就地复用,加上key的话,每一条数据都有唯一性,防止复用。


八、keep-alive

主要就是保留组件状态或避免重新渲染组件缓存,如果不用他当切换页面是会重新进行缓存页面中的内容,生命周期会重新进行数据缓存和销毁,这样会很好流量,用了之后每次只会调用缓存过得而不会再次去执行生命周期,这样能够提高性能,但是也有缺点,缺点就是当数据多的时候,会比较占内存。


九、promise

promise属于一个构造函数,自身有all、reject、resolve这三个方法


十、什么是事件委托

给父元素绑定事件,用来监听子元素的冒泡事件,并找到是哪个子元素的事件


十一、捕获和冒泡

1、捕获

就以手机中的软件来说,首先是我们先触碰手机,就是先传给硬件,然后硬件会
传给操作系统,操作系统在传给浏览器,浏览器在传给当前你点击要进入的页面,
页面会传给他里面的body然后在body里面找到你最初点击的地方执行操作,这就
是事件的捕获。

2、冒泡

冒泡就是你处理的那个元素处理完之后他就会向他的父级询问,看看父级中有没有
要处理的事情,如果有就继续进行处理,处理完之后就在向上询问,没有的话也是
向上继续询问,直到询问到最后的window对象。


十二、原型和原型链

1、 原型:

所有引用类型都有一个proto属性,所有函数都有一个prototype属性,所有引用类型的proto属性指向它构造函数的prototype。

2、原型链:

当访问一个对象的某个属性时,会先在这个对象本身属性上查找,如果没有找到,则会去它的proto隐式原型上查找,即它的构造函数的prototype,如果还没有找到就会在构造函数的prototype的proto中查找,这样一层一层向上查找就会形成一个链式结构,我们称为原型链。


十三、websocket

WebSocket是html5提供的基于TCP的通信协议,可以实现服务器和客户端相互的通信。Tcp和udp,TCP---传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。


十四、作用域

通俗说作用域是能访问到变量或对象的区域,通常这个作用域只是针对局部变量,对于全局变量来说,哪里都可以访问的到。


十五、作用域链

当代码在一个环境中执行时,会创建变量对象的一个作用域链(scope chain,不简称sc)来保证对执行环境有权访问的变量和函数的有序访问。作用域第一个对象始终是当前执行代码所在环境的变量对象。


十六、闭包

1、闭包的定义:

闭包就是能够读取其他函数内部变量的函数。

2、闭包的缺点:

滥用闭包函数会造成内存泄露,因为闭包中引用的包裹函数中定义的变量都永远不会被释放。


十七、生命周期

1、created

在页面创建的时候调用,只执行一次。
这时页面的dom还未生成,如果在created中执行get将得不到任何数据。

2、mounted

触发顺序为:created->mounted-> activated。
初次渲染时调用,比如v-if=false则表示该组件未被渲染过,
当组件v-if=true初次被渲染的时候,调用mounted函数。
当v-if再次为false时mounted不会再被调用。

3、updated

当组件中有数据发生改变的时候即调用

4、activated

针对keep-alive标签,使用keep-alive在单页面中前进后退只触发activated。


十八、 nextick

在vue里面,数据发生变化时,界面的scrollHeight并没有同步发生改变,意思就是在执行scroll这个动作的时候,界面并没有发生渲染,窗口的高度并没有发生改变,若是,数据一条一条的添加进来,那么滚动条的位置就会是上一条数据的位置,并没有完全滚动到底部,最根本的问题是,它所获取的scrollHeight值是数据添加前的。$nexTick来将事件发生在数据发生改变、界面渲染数据之后。再增加监听事件。


十九、 克隆:

克隆分为深拷贝和浅拷贝,浅拷贝就比如,一个变量a,指向一个数组。拷贝这个a,同样指向那个数组,这样就成了a和b指向同一个数组。深拷贝就是,将a和指向的数组都拷贝一份,这样就有a指向一个数组,b指向另一个数组,不过两个数组的值是相同的。


二十、冒泡算法

function sort(arr){
for(var i=0 ; i<arr.length; i++){
for(var j=0; j<arr.length ;j++){
var temp = []
if(arr[i]<arr[j]){
temp = arr[i]
arr[i] = arr[j]
arr[j] = temp
}
}
}
}
var arr = [1,35,8,99,2,3,6,88,56,43]
console.log('排序前'+arr)
//排序前:1,35,8,99,2,3,6,88,56,43。
sort(arr)
console.log('排序后'+arr)
//排序后:1,2,3,6,8,35,43,56,88,99。


二十一、子传父

子组件中用 this.$emit 发送第一个参数是参数名称,第二个参数是要发送的数据
请看下图:
[图片上传失败...(image-e75065-1581302546624)]
在父组件中用v-on监听事件接收
[图片上传失败...(image-41575-1581302546624)]


二十二、父传子

在子组件标签上 :属性名=“传递的参数”
[图片上传失败...(image-475672-1581302546624)]
在子组件中,用props接收一下
[图片上传失败...(image-93ce0e-1581302546624)]
[图片上传失败...(image-c1add1-1581302546624)]


二十三、兄弟传

根据上述,兄弟传值可以子组件A传到父组件 ,父组件再传到子组件B
开发环境下解决跨域
代理:
[图片上传失败...(image-78a8e2-1581302546624)]
浏览器地址去#号
[图片上传失败...(image-5ae2a7-1581302546624)]
设置每个页面的title
[图片上传失败...(image-43c77a-1581302546624)]
[图片上传失败...(image-aee5e4-1581302546624)]
Baseurl
[图片上传失败...(image-fde62d-1581302546624)]
Vue中key,防止重用,防止页面重复渲染


二十四、路由变化页面数据不刷新问题

出现这种情况是因为依赖路由的params参数获取写在created生命周期里面,因为相同路由二次甚至多次加载的关系 没有达到监听,退出页面再进入另一个文章页面并不会运行created组件生命周期,导致文章数据还是第一次进入的数据。
解决方法:watch监听路由是否变化


二十五、异步回调函数中使用this无法指向vue实例对象

<pre style="margin-top:15.75pt;margin-right:0cm;margin-bottom:15.75pt;
margin-left:0cm;mso-line-height-alt:.85pt;mso-pagination:widow-orphan;
word-break:break-all">//setTimeout/setInterval ajax Promise等等</pre>
解决方案 变量赋值和箭头函数
[var和let的区别]
(http://blog.csdn.net/nfer_zhuang/article/details/48781671)


二十六、setInterval路由跳转继续运行并没有及时进行销毁

比如一些弹幕,走马灯文字,这类需要定时调用的,路由跳转之后,因为组件已经销毁了,但是setInterval还没有销毁,还在继续后台调用,控制台会不断报错,如果运算量大的话,无法及时清除,会导致严重的页面卡顿。
解决办法:在组件生命周期beforeDestroy停止setInterval
<pre style="margin-bottom:15.75pt;mso-line-height-alt:.85pt;mso-pagination:
widow-orphan;word-break:break-all">//组件销毁前执行的钩子函数,跟其他生命周期钩子函数的用法相同。</pre>
[图片上传失败...(image-472e4c-1581302546621)]


二十七、Key

配合for循环使用,当你往下拉的时候,可能会出现第一个渲染的东西,而加上key可以标识唯一,防止重用。


二十八、Vue-cli的原理

首先要下载依赖,然后在config里面配置出入口,局部下载webpack和webpack-cli会自动生成dist文件夹,如果想要边打包边开发的话,需要下载webpack-dev-server,若想要指定文件夹打开的话,就需要在config中更改dev的参数。下载html-webpack-plugin是为了把dist文件夹中存入内存的js文件建立联系。想要实现vue的话,则需要下载vue,然后在config中配置vue,在js中new Vue就可以使用了。


二十九、Vue的原理

最主要的就是双向绑定和组件化,双向绑定则是基于object.defineproperty,里面有两个方法,set和get。Get是用来获取到输入的值,set是用来更改输入的值,然后输出,需要注意的一点是,因为语法是来调用set方法的,所以在set方法中要设置一个临时变量,从而来避免死循环组件化他最大的优点就是重用性,这样可以减少代码量,一个组件可以供多个页面使用。


三十、Vue-router的原理

https://blog.csdn.net/caoxinhui521/article/details/77688512

三十一、微信小程序登录

调用wx.login()获取临时登录凭证code,并返回到开发者服务器调用codeSession接口,换取用户唯一标识openID和秘钥session_key。session_key是对用户数据进行加密的秘钥登录凭证code只能使用一次。


三十二、上传头像

用ajax请求接口,把头像用fromdata来包装一下,将头像上传到服务器,服务器会返回一条url,这个url就是上传到服务器上的图片地址。


三十三、Vue中fifter过滤器

自定义一个fifter的方法,使用的时候直接用{{ XXX | 定义的fifter方法名 }}。


三十四、es6新增的六个特性

Class,export,default,import,promise,字符串模板。


三十五、数组与对象的区别

数组是有序数组,对象是无序数组,但是他们都可以循环遍历


三十六、Webpack打包的工作,并且生成了那些文件

npm i webpack webpack-cli
全局安装过的话就可以直接局部安装,若没有则全局局部都需要安装一遍,会在根目录下面生成一个dist文件夹,里面会有js文件。这个也不是固定的,如果想要改默认生成的文件夹名称或文件名称的话,可以在config中的output更改出口配置


三十七、手写一个完整的组件

<template>
<div></div>
</template>
<srcipt>
export default{
data(){
Return ()
},
created(){}
}
</srcipt>

相关文章

  • 面试材料

    面试经验 面试题1 面试题2 面试题3 面试题4 面试题5 面试题6――数据结构 面试题7――网络 面试题8――汇...

  • 高阶面试题

    webpack面试题 面试题:webpack插件 Git面试题 面试题:git常用命令 面试题:解决冲突 面试题:...

  • this的指向的面试题

    面试题1 面试题2 面试题3 面试题4

  • 面试所涉及的问题

    面试题参考1 : 面试题 面试题参考2 : 内存管理 面试题参考3 :面试题 ...

  • Android超实用最全面试大纲(三)

    文章目录: ANR面试题 OOM面试题 Bitmap面试题 UI卡顿面试题 内存泄漏面试题 内存管理面试题 一、A...

  • Android最全面试大纲(三)

    文章目录: ANR面试题 OOM面试题 Bitmap面试题 UI卡顿面试题 内存泄漏面试题 内存管理面试题 一、A...

  • 2022年web前端面试题

    web前端面试题分为:html/css面试题、javascript面试题、vue面试题、性能优化面试题、网络方面面...

  • ios面试题

    初级面试题 中级面试题 高级面试题 swift篇

  • Android超实用最全面试大纲(四)

    文章目录: 冷启动和热启动面试题 其他优化面试题 架构模式面试题 插件化面试题 热更新面试题 进程保活面试题 Li...

  • Android最全面试大纲(四)

    文章目录: 冷启动和热启动面试题 其他优化面试题 架构模式面试题 插件化面试题 热更新面试题 进程保活面试题 Li...

网友评论

      本文标题:面试题

      本文链接:https://www.haomeiwen.com/subject/ugxaxhtx.html