面试题

第一次面试题目总结

2020-05-09  本文已影响0人  林不羁吖

一面

css

1.css引用的方式和优先级

行内样式、内嵌样式、链接样式、导入样式

2.左固定右自适应布局的两种方式

注意:flex容器的一个默认属性值:align-items: stretch;。这个属性导致了列等高的效果。
为了让两个盒子高度自动,需要设置: align-items: flex-start;

3.父盒子内的两个子盒子如果都设置了margin会发生什么

1、水平边距永远不会重合。
2、在规范文档中,2个或以上的块级盒模型相邻的垂直margin会重叠。最终的margin值计算方法如下:
a、全部都为正值,取最大者;
b、不全是正值,则都取绝对值,然后用正值减去最大值;
c、没有正值,则都取绝对值,然后用0减去最大值。

解决方法:
外层元素padding代替
外层元素 overflow:hidden;

内层元素绝对定位 postion:absolute:
内层元素 加float:left;或display:inline-block;
内层元素padding:1px;
内层元素透明边框 border:1px solid transparent;

4.flex布局兼容低版本浏览器

比如说 display: flex; 兼容safari,ios这一类浏览器是display:-webkit-box.
firefox(buggy) :-moz-box;ie10 :display: -ms-flexbox;

.flex-box{
    display: -webkit-flex;  /* 新版本语法: Chrome 21+ */
    display: flex;          /* 新版本语法: Opera 12.1, Firefox 22+ */
    display: -webkit-box;   /* 老版本语法: Safari, iOS, Android browser, older WebKit browsers. */
    display: -moz-box;      /* 老版本语法: Firefox (buggy) */
    display: -ms-flexbox;   /* 混合版本语法: IE 10 */   
 }
 
.flex1 {            
    -webkit-flex: 1;        /* Chrome */  
    -ms-flex: 1             /* IE 10 */  
    flex: 1;                /* NEW, Spec - Opera 12.1, Firefox 20+ */
    -webkit-box-flex: 1     /* OLD - iOS 6-, Safari 3.1-6 */  
    -moz-box-flex: 1;       /* OLD - Firefox 19- */       
 }

js

1.js的数据类型

六种基本类型:字符串,布尔,数值,null,undefined,es6引入的symbol(表示独一无二的值)
一种复杂类型:Object

2.判断数据类型的方法:typeof 和instanceof的区别

共同点:typeof和instanceof都是用来判断变量类型的,
区别:

3.对象沿着原型链查找的规则

4.this在不同情况下的指向

this的指向基于函数执行环境动态绑定
1、当函数作为对象的方法被调用时,指向对象本身
2、当函数作为普通函数方式调用时,this总是指向window对象
3、作为构造器调用
使用new 运算符调用函数通常返回一个对象,构造器的this指向返回的这个对象
,即例子中myObject。

var myObject =function(){this.name = 'hi';};
var  obj=new myObject();
console.log(obj.name);//hi

4、动态改变传入函数的this指向:.call() .apply()方法
区别在于传递参数的方式,前者是参数数组,后者是直接写在apply()函数里面作为一个个参数

5.es6常用的新特性

在js面试题2里总结过

6.promise的使用

在js面试题2里总结过

vue

1.vuex的使用

核心概念:
Vuex 使用一个 Store 对象管理应用的状态,一个 Store 包括 State, Getter, Mutation, Action 四个属性。
State:State 意为“状态”,是 vuex 状态管理的数据源。
Getter:Getter 的作用与 filters 有一些相似,可以将 State 进行过滤后输出。
Mutation:Mutaion 是 vuex 中改变 State 的唯一途径(严格模式下),并且只能是同步操作。Mutaion 使得状态变得可追踪,配合一些 devtools 可以实现 time-travel 的调试体验。
Action:一些对 State 的异步操作可以放在 Action 中,并通过在 Action 提交 Mutaion 变更状态。
Module:当 Store 对象过于庞大时,可根据具体的业务需求分为多个 Module。

使用场景:
vuex 一般在中大型 web 单页应用中用于解决跨组件通信以及作为数据中心集中式存储数据。
vuex中一般存储两类数据:
1、组件之间全局共享的数据
2、通过后端异步请求的数据

本人所在团队在实际的项目开发过程中更多的是应用第二种,即把通过后端异步请求的数据都纳入 vuex 状态管理,在 Action 中封装数据的增删改查等逻辑,这样可以一定程度上对前端的逻辑代码进行分层,使组件中的代码更多地关注页面交互与数据渲染等视图层的逻辑,而异步请求与状态数据的持久化等则交由 vuex 管理。
比如说使用 vuex 管理用户数据(获取,更新)

2.Vue 有哪些生命周期钩子函数?分别有什么用?

  1. created
    此时状态:Vue里的数据在内存中已经创建完毕,但是还没有渲染到页面上。
    可做操作:从服务器获取一些初始化的数据,或者通过ajax向服务器发送一些数据。

  2. mounted
    此时状态: 数据已经渲染在了浏览器的页面上。
    可做操作:操作DOM节点

  3. beforeDestory
    此时状态:奄奄一息。
    可做操作:移除定时器或者事件绑定。
    但是销毁的时候需要手动销毁

3.nextTick怎么用的

原理:eventloop事件循环
在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,可以获取更新后的 DOM。

官方文档里说,Vue 是异步执行 DOM 更新的.而且Vue在修改数据后,视图并不会立刻更新,
而是等同一事件循环中的所有数据变化完成之后,再统一进行视图更新
而使用了nextTick,就可以在修改数据之后获取更新后的 DOM。

使用了nextTick事件循环基本上是这样的:
同步代码执行 -> 查找异步队列,推入执行栈,执行Vue.nextTick[事件循环1] ->查找异步队列,推入执行栈,执行Vue.nextTick[事件循环2]...

应用场景:需要在视图更新之后,基于新的视图进行操作。

mounted: function () {
  this.$nextTick(function () {
  })
}

异步执行的运行机制如下。
(1)所有同步任务都在主线程上执行,形成一个执行栈。
(2)主线程之外,还存在一个"任务队列"。只要异步任务有了运行结果,就在"任务队列"之中放置一个事件。
(3)一旦"执行栈"中的所有同步任务执行完毕,系统就会读取"任务队列",看看里面有哪些事件。
那些对应的异步任务,于是结束等待状态,进入执行栈,开始执行。
(4)主线程不断重复上面的第三步。

二面

1.在项目中用到哪些性能优化

vue项目中需要做哪些项目优化

2.vuex在项目中你是怎么用的

上面写了

3.jquery和vue的区别

jquery是js库,而vue是js框架。

4.vue如何操作dom

5.对vue虚拟dom的理解

1.什么是vdom
vdom是一种使用js对象来描述真实DOM的技术,通过这种技术,们能精确知道哪些真实DOM改变了,从而尽量减少DOM操作的性能开销。
2.实现步骤
vdom是通过snabbdom.js库实现的,大概过程有以下三步:

上一篇 下一篇

猜你喜欢

热点阅读