fe-interview-handwrite icon indicating copy to clipboard operation
fe-interview-handwrite copied to clipboard

📖 前端面试常见手写题整理

前端面试手写题

整理前端面试常见的手写题,面试出现概率极高,建议每个都过自己过一遍。

你也可以提交 PR,提供你面试遇到的题目。

代码汇总请参照 SUMMARY.md

高频:★★★ 中频:★★ 低频:★

JavaScript 原理

  • 实现 bind() ★★
  • 实现 apply() ★★
  • 实现 call() ★★
  • 实现 instanceof
  • 实现 new
  • 实现 jsonp ★★★
  • 实现 Promise ★★★
  • 实现 Promise.all() ★★★
  • 实现 Promise.race()
  • 实现 Proxy ★★
  • 实现 EventEmitter 订阅监听模式 ★★
  • setTimout 实现 setInterval
  • 深拷贝 ★★★

函数

  • 函数防抖 ★★★
  • 函数节流 ★★★
  • 函数柯里化(实现 sum(1,2)(3)() ★★★
  • compose 函数 ★★
  • before 函数

数组

  • 数组拍平 ★★★
  • 数组去重 ★★★
  • 数组转对象

字符串

  • 去除字符串首尾空格
  • 下划线驼峰互转

数学

  • 计算圆周率

算法

算法需要掌握基本的数据结构,例如栈、队列、链表、树、排序算法等等,建议去 LeetCode 上刷题。不过不要为了刷题而刷题,最重要的是归纳与总结,刷十道不如一道刷十遍。

  • 归并排序 ★★
  • 插入排序
  • 快速排序 ★★★
  • 选择排序
  • 希尔排序
  • 堆排序
  • 二分查找
  • 最长递增子序列 ★★★
  • 最长公共子串 ★★
  • 城市数据找父节点
  • 查找缺失的数

分享一下自己整理的 LeetCode 上必刷的题,比较具有代表性。

  • [ ] LeetCode 001 Two Sum
  • [ ] LeetCode 015 3Sum(可能会问 LeetCode18.4Sum思路)
  • [ ] LeetCode 020 Valid Parentheses
  • [ ] LeetCode 021 Merge Two Sorted Lists
  • [ ] LeetCode 025 Reverse Nodes in k-group
  • [ ] LeetCode 053 Maximum Subarra
  • [ ] LeetCode 066 Plus One(等介于:高精度加加法)
  • [ ] LeetCode 098 Validate Binary Search Tree
  • [ ] LeetCode 110 Balanced Binary Tree
  • [ ] LeetCode 134 Gas Station
  • [ ] LeetCode 136 Single Number
  • [ ] LeetCode 137 Single Number II
  • [ ] LeetCode 146 LRU Cache(变形题:带有过期时间的LRU缓存)(Map + 链表)
  • [ ] LeetCode 206 Reverse Linked List(递归、迭代)
  • [ ] LeetCode 215 Kth Largest Element in an Array(等价于:快速排序)
  • [ ] LeetCode 232 Implement Queue using Stacks(每次将新来的元素放到栈底,stack.push())
  • [ ] LeetCode 328 Odd Even Linked List
  • [ ] LeetCode 415 Add Strings(等价于:大数加法)
  • [ ] LeetCode 470 rand70rand100
  • [ ] LeetCode 496 Next Greater Element I(时间复杂度O(n)(单调栈,使用 Map 映射 stack 的指定位置)
  • [ ] LeetCode 716 Max Stack(两个栈实现最大栈,要求pop,push, get max都为0(1)
  • [ ] LeetCode 860 Lemonade Change