@IT·互联网Web前端之路让前端飞

腾讯课堂 IMWeb 七天前端求职提升营 Day 3

2017-05-27  本文已影响416人  Nian糕
Unsplash

本次的系列博文主要是针对 腾讯课堂七天前端求职提升营 课程中,所推送的面试题目及编程练习的一次汇总,期间还包括三次直播课的分享,均由腾讯导师给大家讲解,该系列博文的发布已得到 IMWeb 前端学院助教的许可

IMWeb 前端学院 授权转发

0. 课程目录

腾讯课堂 IMWeb 七天前端求职提升营 Day 1
腾讯课堂 IMWeb 七天前端求职提升营 Day 2
腾讯课堂 IMWeb 七天前端求职提升营 Day 3
腾讯课堂 IMWeb 七天前端求职提升营 Day 4
腾讯课堂 IMWeb 七天前端求职提升营 Day 5
腾讯课堂 IMWeb 七天前端求职提升营 Day 6
腾讯课堂 IMWeb 七天前端求职提升营 Day 7

1. 经典前端面试题

问题 1: 优先级算法如何计算?

答案: 重要性和来源的优先级排序从低到高是:
① 浏览器默认样式
② 用户在浏览器中定义的普通样式(normal 规则,不带 important 规则)
③ 开发人员定义的普通样式( normal 规则,不带 important 规则)
④ 开发人员定义特殊样式(带 important 规则)
⑤ 用户在浏览器中定义特殊样式(带 important 规则)

另外还有一些原则:
① 相同的样式在 CSS 规则后添加了 !important 的优先于没有添加的
② CSS 规则在文档中出现的顺序后面定义的的优先于前面定义的
③ 加了 !important 的优先于内联样式
④ 内联样式优先于用 link 引入的样式和页面上 <style> 里的样式

问题 2: split() 和 join() 的区别?

答案: 前者是切割成数组的形式,后者是将数组转换成字符串

问题 3: ajax 请求的时候 get 和 post 方式的区别?

答案: ① 一个在 url 后面 一个放在虚拟载体里面
② 有大小限制
③ 安全问题
④ 应用不同 一个是论坛等只需要请求的,一个是类似修改密码的

问题 4: IE 和标准下有哪些兼容性的写法?

答案: ① Var ev = ev || window.event
document.documentElement.clientWidth || document.body.clientWidth
Var target = ev.srcElement||ev.target

2. 前端常见题目个人思考题

1、 说一下你理解的 MVVM,画一下你的设计模式。

2、 说一下 H5 中的离线存储有哪些?

3. 在线编程任务

—— 所有 AC 代码均在 JavaScript(V8 6.0.0)下提交通过 ——

题目 13:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

思路:
新建两个数组,分别用来存放奇数和偶数;
将偶数的数组连接到奇数数组后面。

function reOrderArray(array) {
    var odd = [];
    var even = [];
    
    for(var i = 0;i < array.length;i++){
        if((array[i]%2)===0){
            even.push(array[i]);
        }
        else{
            odd.push(array[i])
        }
    }
    return odd.concat(even);
}

题目 14:输入一个链表,输出该链表中倒数第 k 个结点。

function FindKthToTail(head, k) 
  { 
      if(!head||k<=0){return null;}else{ 
          var q=head; 
          var p=head; 
          for(var i=0;i<k-1;i++){ 
              if(p.next) 
              { p=p.next;}else{ 
                  return null; 
              }   
          } 
          for(;p.next;p=p.next){  
             q=q.next; 
          } 
         return q;  
      } 
  }

题目 15:输入一个链表,反转链表后,输出链表的所有元素。

function ReverseList(pHead)
{
    var pCur = null;
    var pNext = null;
    while(pHead !== null){
        pNext = pHead.next;
        pHead.next = pCur;
        pCur = pHead;
        pHead = pNext;
    }
    return pCur;    
}

题目 16:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

思路:
① 如果 pHead1 和 pHead2 中有一个为空,则 result 是另一个;

② 如果 pHead1 的头结点值小于 pHead2,那么 result 的头结点为 pHead1 的头结点,其 next 为 pHead1.next 和 pHead2 比较的结果。同理对 pHead2 也一样。

③ 因此本题可采用递归的方法。

function Merge(pHead1, pHead2) {
    // write code here
    if (pHead1 == null) {
        return pHead2;
    } else if (pHead2 == null) {
        return pHead1;
    }
    var result = {};
    if (pHead1.val < pHead2.val) {
        result = pHead1;
        result.next = Merge(pHead1.next, pHead2);
    } else {
        result = pHead2;
        result.next = Merge(pHead1, pHead2.next);
    }
    return result;
}

题目17:输入两棵二叉树 A,B,判断 B 是不是 A 的子结构。(ps:我们约定空树不是任意一个树的子结构)

相关知识:二叉树子结构的意思是包含了一个结点,可以只取左子树或者右子树,或者都不取。例如:


由于 A 中有一部分子树的结构和 B 是一样的,因此 B 是 A 的子结构。

思路:
① 有关二叉树的算法问题,一般都可以通过递归来解决。那么写成一个正确的递归程序,首先一定要分析正确递归结束的条件。

② 如果根节点相同则递归调用 isSubtree(),如果根节点不相同,则判断 root1 的左子树和 root2 是否相同,再判断右子树和 tree2 是否相同;

③ 注意 null 的条件,HasSubTree 中,如果两棵树都不为空才进行判断,isSubtree 中,如果 root2 为空,则说明第二棵树遍历完了,即匹配成功;

④ root1 为空有两种情况:(1) 如果 root1为空 && root2 不为空说明不匹配,(2) 如果 root1 为空,root2 为空,说明匹配。

function isSubtree(root1, root2) {
    if (root2 == null) return true;
    if (root1 == null) return false;
    if (root1.val == root2.val) {
        return isSubtree(root1.left, root2.left) &&
            isSubtree(root1.right, root2.right);
    } else {
        return false;   
    }
}
 
function HasSubtree(pRoot1, pRoot2)
{
   if (pRoot1 == null || pRoot2 == null) {
       return false;
   }
    return isSubtree(pRoot1, pRoot2) ||
        HasSubtree(pRoot1.left, pRoot2) ||
        HasSubtree(pRoot1.right, pRoot2);
}

**题目 18:操作给定的二叉树,将其变换为源二叉树的镜像。 **

输入描述:

二叉树的镜像定义:源二叉树 
            8
           /  \
          6   10
         / \  / \
        5  7 9 11
        镜像二叉树
            8
           /  \
          10   6
         / \  / \
        11 9 7  5

思路:

① 有关二叉树的算法问题,一般都可以通过递归来解决。那么写一个正确的递归程序,首先一定要分析正确递归结束的条件。

② 先前序遍历这棵树的每个结点,如果遍历到的结点有子结点,就交换它的两个子节点;

③ 当交换完所有的非叶子结点的左右子结点之后,就得到了树的镜像。

function Mirror(root)
{
    if(root === null) {
        return;
    }
    var temp = root.left;
    root.left = root.right;
    root.right = temp;
    Mirror(root.left);
    Mirror(root.right);
}

—— 题目来源 剑指 offer ——

4. 鹅厂求职直播课:如何申请大公司职位-面试笔试_旷旭卿导师

简历 应届生笔试特点 数据结构 排序算法 计算机基础 前端附加题 开放性笔试题_1 开放性笔试题_2 开放性笔试题_3 面试官的套路 入职
End of File

行文过程中出现错误或不妥之处在所难免,希望大家能够给予指正,以免误导更多人,最后,如果你觉得我的文章写的还不错,希望能够点一下喜欢关注,为了我能早日成为简书优秀作者献上一发助攻吧,谢谢!^ ^

上一篇 下一篇

猜你喜欢

热点阅读