返回

前端面试题24连,手写/场景/排序题高频

前端

前端面试中,手写、场景和排序题目常常出现,考察开发者的基本功和解决问题的能力。本文精选了24道高频面试题,逐一解析,帮助应聘者做好准备。

手写题

  1. 绑定事件?

    事件代理:使用addEventListener方法将事件监听器附加到父元素上,当子元素触发事件时,父元素会捕获并处理该事件。

  2. 通用绑定事件?

    使用DOM0级事件处理程序,如onclick,onmouseover等,将事件监听器直接附加到元素上。

  3. 判断一个DOM元素是不是符合一个CSS选择器?

    使用matches方法或querySelector方法。

  4. 画一个三角形?

    使用CSS或Canvas。

  5. 实现简易的ajax?

    使用XMLHttpRequest对象。

  6. 实现new操作符?

    function newOperator(ctor, ...args) {
      // 创建一个新对象
      const obj = Object.create(ctor.prototype);
      // 调用构造函数
      ctor.apply(obj, args);
      // 返回新对象
      return obj;
    }
    
  7. 实现promise.all?

    function promiseAll(promises) {
      return new Promise((resolve, reject) => {
        const results = [];
        let completed = 0;
        promises.forEach((p, i) => {
          p.then(res => {
            results[i] = res;
            completed++;
            if (completed === promises.length) {
              resolve(results);
            }
          }).catch(err => {
            reject(err);
          });
        });
      });
    }
    

场景题

  1. 如何实现一个简单的双向数据绑定?

  2. 如何优化一个大型列表的渲染性能?

  3. 如何处理跨域请求?

  4. 如何调试一个复杂的前端应用程序?

  5. 如何设计一个可重用的组件库?

  6. 如何实现一个拖拽功能?

  7. 如何实现一个响应式布局?

排序题

  1. 给定一个无序数组,如何找到最大的k个元素?

  2. 给定一个链表,如何反转它?

  3. 给定一个二叉树,如何计算它的深度?

  4. 给定一个字符串,如何判断它是回文串?

  5. 给定一个数组,如何找到重复出现的元素?

  6. 给定两个排序数组,如何合并它们?

  7. 给定一个无序数组,如何找到它的中位数?

  8. 给定一个字符串,如何判断它是否是由数字组成?

  9. 给定一个字符串,如何判断它是否是一个有效的JSON字符串?

  10. 给定一个数组,如何判断它是否是一个有效的IP地址?