撩课-Web大前端每天5道面试题-Day11

1. 如何手写一个JQ插件?

方式一:
$.extend(src)  
该方法就是将src合并到JQ的全局对象中去:
$.extend({
      log: ()=>{alert('撩课itLike');}
});

方式二:
$.fn.extend(src) 
该方法将src合并到jquery的实例对象中去:
 $.fn.extend({
       log: ()=>{alert('撩课itLike');}
 });
  1. 说说平衡二叉树?
平衡二叉搜索树(Self-balancing binary search tree)
又被称为AVL树。

具有以下性质:

1)它是一棵空树或它的左右两个子树
的高度差的绝对值不超过1,
并且左右两个子树都是一棵平衡二叉树。

2)平衡二叉树必定是二叉搜索树,反之则不一定。

3)平衡二叉树的常用实现方法有红黑树、AVL、
替罪羊树、Treap、伸展树等。 

最小二叉平衡树的节点的公式如下:
F(n)=F(n-1)+F(n-2)+1 

备注:
1是根节点,
F(n-1)是左子树的节点数量,
F(n-2)是右子树的节点数量。

3. 清除浮动和解决垂直外边距重叠的解决方案?

问题描述:
1) 父元素没有设置宽高,尺寸由子元素撑起;
子元素一旦浮动,父元素高度会发生塌陷。
2)子元素设置margin-top会作用的父元素的margin-top;
此时会造成垂直外边距重叠。
撩课小编:
.clearfix::after,
.clearfix::before{
      content: ' '; 
      display: table;
      clear: both; 
}

4. sessionStorage 、localStorage 和 cookie ?

相同点:
都用于浏览器端存储的缓存数据;

不同点:
1) 存储内容是否发送到服务器端

当设置了Cookie后,数据会发送到服务器端,
造成一定的宽带浪费;xxxstorage则会将数据保存
到本地,不会造成宽带浪费;

2) 数据存储大小不同

Cookie数据不能超过4K,适用于会话标识;
xxxstorage数据存储可以达到5M;

3) 数据存储的有效期限不同

cookie只在设置了Cookid过期时间
之前一直有效,即使关闭窗口或者浏览器;

sessionStorage,仅在关闭浏览器之前有效;
localStorage,数据存储永久有效;

4) 作用域不同
cookie和localStorage是在同源同窗口中
都是共享的;
sessionStorage不在不同的浏览器窗口
中共享,即使是同一个页面;

5. 判断一个单词是否是回文?

回文是指把相同的词汇或句子,
在下文中调换位置或颠倒过来,
产生首尾回环的情景,
叫做回文,也叫回环。
比如 cacac,redivider 。

let checkPalindrom = (str)=>{  
    return str === 
    str.split('').reverse().join('');
}

6. 不借助临时变量,进行两个整数的交换?

撩课小编:输入 a = 3, b =1, 输出 a = 1, b =3
let swap = (a , b)=>{  
  b = b - a;
  a = a + b;
  b = a - b;
  return [a,b];
}

7. 运用JS 实现二叉查找树?

二叉查找树,也称二叉搜索树、有序二叉树;
是指一棵空树或者具有下列性质的二叉树:
1) 任意节点的左子树不空,
则左子树上所有结点的值均
小于它的根结点的值;

2) 任意节点的右子树不空,
则右子树上所有结点的值
均大于它的根结点的值;

3) 任意节点的左、右子树
也分别为二叉查找树;

4) 没有键值相等的节点。

5) 二叉查找树相比于其他数据结构
的优势在于查找、插入的时间复杂度较低, 
为O(log n)。

二叉查找树是基础性数据结构,
用于构建更为抽象的数据结构,
如集合、multiset、关联数组等。

实现:

1)先设定好每个节点的数据结构
class Node {  
  constructor(data, left, right) {
    this.data = data;
    this.left = left;
    this.right = right;
  }
}

2)树是由节点构成,由根节点逐渐延生到各个子节点,
因此它具备基本的结构就是具备一个根节点,
具备添加,查找和删除节点的方法。

class BinarySearchTree  extend Node{
  constructor(data, left, right) {
      super(data, left, right);
      this.root = null;
  }
  insert(data) {
    let n = new Node(data, null, null);
    if (!this.root) {
      return this.root = n;
    }
    let currentNode = this.root;
    let parent = null;
    while (1) {
      parent = currentNode;
      if (data < currentNode.data) {
        currentNode = currentNode.left;
        if (currentNode === null) {
          parent.left = n;
          break;
        }
      } else {
        currentNode = currentNode.right;
        if (currentNode === null) {
          parent.right = n;
          break;
        }
      }
    }
  }
  remove(data) {
    this.root = this.removeNode(this.root, data)
  }
  removeNode(node, data) {
    if (node === null) {
      return null;
    }
    if (data === node.data) {
      if (node.left == null && node.right == null) {
        return null;
      }
      if (node.left === null) {
        return node.right;
      }
      if (node.right === null) {
        return node.left;
      }
      let getSmallest = (node) =>{
        if(node.left === null &&
           node.right == null) {
          return node;
        }
        if(node.left !== null) {
          return node.left;
        }
        if(node.right !== null) {
          return getSmallest(node.right);
        }
      }
      let temNode = getSmallest(node.right);
      node.data = temNode.data;
      node.right = this.removeNode(temNode.right,temNode.data);
      return node;
    } else if (data < node.data) {
      node.left = this.removeNode(node.left,data);
      return node;
    } else {
      node.right = this.removeNode(node.right,data);
      return node;
    }
  }
  find(data) {
    let current = this.root;
    while (current !== null) {
      if (data == current.data) {
        break;
      }
      if (data < current.data) {
        current = current.left;
      } else {
        current = current.right
      }
    }
    return current.data;
  }
}

大前端视频学习通道(点我)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,089评论 1 45
  • 面试官 先做下自我介绍吧?对后端有了解吗?node之类的那我就针对你的项目问一些基础能力?(好的)我看你接触前端两...
    星星编程阅读 1,093评论 0 4
  • <a name='html'>HTML</a> Doctype作用?标准模式与兼容模式各有什么区别? (1)、<...
    clark124阅读 3,418评论 1 19
  • 1.清除盒模型的浮动方式 way 1: 最后追加元素, 设置 clear:both; way 2: 伪元素清除 d...
    Hyb_7818阅读 559评论 0 0
  • 周末真的是太累了,白天忙了一天晚上很早就呼呼大睡,忘了打卡。到这个点儿才缓过神儿来。前几天看了一篇文章,什...
    vivian2阅读 294评论 0 0