美文网首页@IT·互联网Web前端之路让前端飞
腾讯课堂 IMWeb 七天前端求职提升营 Day 3

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

作者: Nian糕 | 来源:发表于2017-05-27 19:46 被阅读416次
    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

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

    相关文章

      网友评论

        本文标题:腾讯课堂 IMWeb 七天前端求职提升营 Day 3

        本文链接:https://www.haomeiwen.com/subject/xlqxfxtx.html