面试问题

Q1 .  link标签和import标签的区别有什么?

外部引用CSS有两种方法,link标签和import

1.加载顺序区别

link和页面一同加载,import在页面加载完之后再加载

2.兼容性区别

link的兼容性比import好

@import是 CSS2.1 才有的语法,故只可在 IE5+ 才能识别;

link标签作为 HTML 元素,不存在兼容性问题。

3.DOM可控性区别

可以通过 JS 操作 DOM ,插入link标签来改变样式;

由于 DOM 方法是基于文档的,无法使用@import的方式插入样式。

4.从属关系区别
@import是 CSS 提供的语法规则,只有导入样式表的作用;

link是HTML提供的标签,不仅可以加载 CSS 文件,还可以定义 RSS、rel 连接属性等。

5.权重区别(该项有争议,下文将详解)
link引入的样式权重大于@import引入的样式。

 

Q2 .如何让事件先冒泡后捕获

首先,如果是目标元素自身的事件想要先冒泡后捕获,就把添加冒泡事件代码放在添加捕获事件前面。
但是,对于非目标元素的事件,作为父元素,想不到有特别好的办法能实现先冒泡后捕获。能想到的就是:
设置一个用于判断是否冒泡的外部变量,在事件捕获的时候先判断变量是否已经冒泡,没有的话process.nextTick(fn),在冒泡中把变量修改了,同步代码执行完成,异步代码执行之前就执行process的回调函数中再判断执行。

但是感觉这样并不完美,中间还会经过很多同步代码。

或者setTimeout(fn,0)或者setImmediate(fn),但是这两个方法又要等到所有异步代码执行完才行。

 

根据w3c标准,应先捕获再冒泡。若要实现先冒泡后捕获,给一个元素绑定两个addEventListener,其中一个第三个参数设置为false(即冒泡),另一个第三个参数设置为true(即捕获),调整它们的代码顺序,将设置为false的监听事件放在设置为true的监听事件前面即可。

 

 

Q3 . 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。

思路:

    //当前结点为根结点时:

    //1)若根结点无右子树,返回NULL

    //2)若根结点有右子树,返回右子树中最左端的结点

    

    //当前结点为左叶子结点:

    //直接返回其父结点

   

    //当前结点为右叶子结点

    //1)若其祖父结点存在且其父结点是其祖父结点的左结点,返回其祖父结点

    //2)否则,返回NULL

   

    //当前结点为非叶子结点

    //1)若无右子树,返回其父结点

    //2)若有右子树,返回其右子树中最左端的结点

https://www.nowcoder.com/interview/ai/97084

posted @ 2019-09-09 10:32  shansally  阅读(132)  评论(0编辑  收藏  举报