前端最全面试题-一直更新中

1 HTML


2 css

2.1 三栏布局

2.2 弹性盒

设置了display:flex属性以后,float和vertical-align,clear属性将失效。

有6个主要属性:flex-direction,flex-wrap,flex-flow,justify-content,align-item,align-content

flex-direction:row(默认,从左到右);row-reverse(从右到左);column(从上到下);column-reverse(从下到上)

flex-wrap:nowrap(默认不换行);wrap(换行,第一行在上);wrap-reverse(换行,第一行在下)

flex-flow:是flex-firection和flex-wrap的结合,默认是row nowrap

justify-content:flex-start(默认,从左到右);flex-end(右对齐);center(居中);spac-between(两端对齐,中间间距相等);space-around(两侧间距相等,项目中间距比项目与边框的间距大一倍)

align-items:stretch(默认,如果项目未设置高度或者设为auto,将占满整个高度);center(垂直居中);flex-start(在上面对齐);flex-end(在下面对齐);baseline(项目第一行文字基线对齐)

3 js

3.1 ajax的原理:

是不需要重新刷新页面,减少网络请求,提高用户体验。浏览器让xrh跟服务器要数据,自己可以做其他操作,xhr像服务器请求数据返回给xhr,xhr通知浏览器带回数据,浏览器将数据异步刷新到页面。

3.2 原型链

3.3 闭包

闭包就是能够读取其他函数内部的函数,所以闭包实际是一个函数.

闭包也可以理解为定义在函数内部的函数,本质就是函数内部和外部连接起来的桥梁.

如果函数内部的子函数并没有引用父函数作用域里的变量,这个子函数就不是闭包.

作用:读取函数内部的变量,让变量始终保存在内存中.

缺点:让变量始终保存在内存中就容易内存消耗大造成性能问题,可以在不用该变量的时候将其delete

3.4 promise

在promise出现之前,js的异步一直是依靠回调函数实现,但当多个异步操作有依赖关系就容易出现多层嵌套形成回调地狱,不利于代码维护.promise的出现主要是解决异步操作回调地狱问题;

1 promise本身是同步的,返回的是promise对象;

2 promise有三种状态:bending,resolved,rejected.由bending到resolved就不能再到reject,Promise的状态和值发生改变就不会再改变,不管后续怎么调用resolve或者reject方法,状态和值是不可逆转的

3.5 类型判断和undefined和null的区别

3.6 深拷贝和浅拷贝

4 vue

4.1 虚拟dom的优点

可以解决浏览器性能问题,如果一次操作中有10次更新dom的动作,虚拟dom不会立即操作dom,而是将10次更新的diff保存到本地一个js对象中,最终将这个js对象一次性attch到dom数上,再进行后续操作,避免了大量无谓的计算量。

4.2 v-if和v-show的区别

v-if是节点的消失和隐藏,v-show是display:none或者是block;如果是频繁操作的话用v-show比较合适,性能较高.v-if切换消耗性能,v-show初始的消耗性能大.

4.3 computed,属性观测和methods的区别

计算属性是依赖的数据发生改变就会重新计算返回新的结果,如果依赖的项没有变化,则返回上一次计算过后的数据,所以性能较高,但不能做异步操作,页面初始加载的时候回触发;属性观测只是单纯的观测data中的数据,属性值发生变化则触发相应的回调,可以做一些异步操作,初始页面不触发,但可以设置immidetely:true,对于层级较深的可以设置deep:true来观测。

4.4 vue的different算法

4.5 动态路由

4.6 组件通讯

4.7 状态管理

4.8 路由守卫

4.9 响应式原理

主要是采用数据劫持和订阅发布的模式实现的。通过object.defineProperty来劫持各个属性的getter,setter,在数据变动时发布消息给订阅者,触发响应的监听回调。

但是根据数组的下标修改数组,或者新增的对象属性不会响应式,这个用this.$set/vue.set可以解决。

5 数据结构

6 算法

7 常见网络知识

7.1 常见的状态码

8 其他

8.1 URL到浏览器经历的过程

9 浏览器兼容问题:

1. 不同浏览器的margin和padding不同,这个设置通配符margin:0,padding:0;(遇到100%)

2.块元素设置float以后,横向的margin会比设置的大一些,这个可以将块元素设置为行内元素解决

3. 设置较小高度的时候,IE会比设置的大一些,这个可以通过overflow:hidden结局

参考:https://www.cnblogs.com/fxwoniu/p/11973326.html

10 登陆

11 状态管理

Ajax和fetch的区别

浏览器中的事件循环

箭头函数和普通函数(4点)

伪数组转真数组

      Array.from;

    Array.protype.slice.call(obj);

    [...obj];

v-for中的key  是否可以用随机数

vue中mixin的合并规则

    钩子函数都会调用,而且mixin中的比组件的更先调用;

    如果是data的话,则用组件的data,如果是对象的话,则合并,

    如果是methods同名的话,也用组件的

如何手动销毁一个vue实例

如何区分一个数组或者对象

arr instanceof  Array(判断对象的原型链是否是指向构造函数的prototype)

obj instanceof Object

arr.constructor === Array(对象的constructor属性)

obj.constructor === Object

Object.prototype.toString.call(arr)

"[object Array]"

Object.prototype.toString.call(b)

"[object Object]"

Array.isArray(arr)  es6

你可能感兴趣的:(前端最全面试题-一直更新中)