前端面试3

2017-08-31  本文已影响39人  卡农me

1.::before 和 :after中双冒号和单冒号 有什么区别?解释一下这2个伪元素的作用
经常会遇到的的伪元素有:::before, ::after(在CSS3中唯一引入的伪元素是::selection),伪类包括::focus, :hover, :link。
在css2中,对两者没有特别的区分,单冒号和双冒号都可以;css3中的伪元素需要用双冒号表示。
2.script中的async defer:


3.CSS中 link 和@import 的区别是?

@import 的不推荐原因:link混合@import会破坏并行下载,这是一个很严重的问题,这会导致原本并行下载的样式变成一个一个的同步下载
4.BFC
参考1
参考2

BFC全称”Block Formatting Context”, 中文为“块级格式化上下文”。

Formatting Context:指页面中的一个渲染区域,并且拥有一套渲染规则,他决定了其子元素如何定位,以及与其他元素的相互关系和作用。

BFC:块级格式化上下文,它是指一个独立的块级渲染区域,只有Block-level BOX参与,该区域拥有一套渲染规则来约束块级盒子的布局,且与区域外部无关。(不严谨的说只有 块元素 参与)

BFC的生成(满足以下条件之一):

BFC的约束规则:

通俗的解释就是:

看到以上的几条约束,让我想起学习css时的几条规则


margin重叠计算方法:()

注意:

  • 根元素的垂直margin不会被重叠
  • float : 相邻的盒模型中,如果其中的一个是浮动的(float),垂直margin不会重叠,并且浮动的盒模型和它的子元素之间也是这样。
  • overflow : 设置了overflow属性的元素和它的子元素之间的margin不被重叠(overflow取值为visible除外)
  • position : 设置了绝对定位(position:absolute)的盒模型,垂直margin不会被重叠,并且和他们的子元素之间也是一样。
  • display : 设置了display:inline-block的元素,垂直margin不会重叠,甚至和他们的子元素之间也是一样。

防止外边距重叠解决方案:

6.js异步编程的4种方法

单线程
如何自定义事件

dom.addEventListener('自定义事件',function(){
  console.log('自定义事件');
});

var eve = new Event('自定义事件');
dom.dispatchEvent(eve);

写一个promise

var promise = new Promise(function(resolve, reject) {
 if (/* 异步操作成功 */){
 resolve(value);
 } else {
 reject(error);
 }
});

promise.then(function(value) {
 // success
}, function(value) {
 // failure
});

同时发送多个请求:关于promises,你理解了多少?

其它:

写一个原生ajax

//var xhr=new ActiveXObject()(IE5/IE6使用,现在基本不用)
var xhr= new XMLHttpRequest(); // 新建XMLHttpRequest对象

xhr.onreadystatechange = function () { // 状态发生变化时,函数被回调
    if (xhr.readyState === 4) { // 成功完成
        // 判断响应结果:
        if (xhr.status === 200) {
            // 成功
        } else {
            // 失败
        }
    } else {
        // HTTP请求还在继续...
    }
}

// 发送请求:
xhr.open('GET', 'url','true(异步)或 false(同步)');
xhr.send();

7.虚拟DOM
实现虚拟 DOM 所需的技术背景可以分为两个方面:

JSX:
React 使用 JSX 来替代常规的 JavaScript,JSX语法像是在Javascript代码里直接写XML的语法,实质上这只是一个语法糖,每一个XML标签都会被JSX转换工具转换成纯Javascript代码
优点:

8.react和vue

react和vue的相似之处:
1.使用虚拟dom
2.提供了响应式和组件化的视图组件
3.关注核心库,伴随于此,有配套的路由和负责处理全局状态管理的库

性能方面的差异:
1.渲染性能

2.更新性能
在react中,当一个组件的状态发生变化时,它将会引起整个组件的子树都进行重新渲染,从这个组件的根部开始。那为了避免子组件不必要的重新渲染,您需要随时使用shouldComponentUpdate,并使用不可变的数据结构。 在Vue中,组件的依赖关系在它的渲染期间被自动跟踪,因此系统准确地知道哪些组件实际上需要重新渲染。这就意味着在更新方面,vue也是快于React

3.开发中
在开发中,Vue 每秒最高处理 10 帧,而 React 每秒最高处理不到 1 帧。这是由于 React 有大量的检查机制,这会让它提供许多有用的警告和错误提示信息。vue在实现这些检查时,也更加密切地关注了性能方面。

上一篇下一篇

猜你喜欢

热点阅读