手写面试题
帮你搞定 90% JS 手写题
TODO
- 手写 call, apply 和 bind 🔥
- 实现 new 关键字
- 实现 instanceof 关键字
- 实现 const 关键字
- 实现数据类型判断 typeOf
- 实现 JSON.stringify
- 实现 JSON.parse
- 数组去重、对象数组去重 🔥
- 数组与树结构互转 🔥
- array2tree
- tree2array
- 实现一些 Array 方法
- 数组 forEach, filter, map, reduce
- 扁平化 flatten 方法
- 实现 flatMap 函数 (先 map 再 flat) 🔥
- 实现数组乱序输出
- 将数组扁平化,输出一个升序且不重复的数组
- 实现指定长度拆分数组(lodash.chunk 方法)🔥
- 实现一些 Object 方法
- 实现 Object.create 方法
- 实现 Object.assign 方法
- 实现 Object.freeze 方法
- 实现 JS 函数记忆 memoize 🔥
- 实现深拷贝 deepClone 🔥
- shallowCopy
- deepClone
- 深度优先遍历与广度优先遍历,如何实现?🔥
- 实现宽松相等 looseEqual
- 实现 JS 的继承 ES5/ES6 🔥
- 实现防抖函数 debounce 🔥
- 实现节流函数 throttle 🔥
- 实现函数柯里化 curry 🔥
- 柯里化 currying
- 偏函数 partial
- 反柯里化 uncurrying
- 组合函数 compose
- 闭包相关问题 🔥
- 计时相关问题
- 使用闭包实现每隔一秒打印 1,2,3,4
- 实现 setTimeout 模拟 setInterval🔥
- 解析 URL 参数为对象 🔥
- 手写 Promise 实现 🔥
- 实现简版 Promise
- Promise.all() ES2015
- Promise.race() ES2015
- Promise.prototype.finally() ES2018
- Promise.allSettled() ES2020
- Promise.any() ES2021
- Promise.try() Stage 1
- pAny, pTry, pMap, pLimit 等
- N 道 Promise 面试题一次爽到底
- 实现 sleep 方法
- 实现函数 promisify
- 封装 ajax 请求 🔥
- 实现 jsonp 跨域 🔥
- 实现请求控制 (超时,取消,重试,并发)🔥
- 超时取消
- 手动取消
- 失败重试
- 并发控制
- 手写 async/await 的实现 🔥
- 基于 generator 实现
- 实现懒加载 🔥
- 实现图片懒加载 by
scroll
- 实现图片懒加载 by
IntersectionObserver
- 实现 iframe 懒加载
- 实现图片懒加载 by
- 实现观察者模式 Observer 🔥
- 实现发布订阅模式 EventEmitter(事件总线)🔥
- 字符格式化(千分位等)
- 实现数字千分位分隔
- 手机号按 3-4-4 格式化
- 实现字符串的 repeat 方法
- 实现简版模板引擎
- 实现 add 方法 🔥
- 实现 add(1,2,3) 与 add(1)(2)(3) 结果相同
- 实现无限累加 sum 函数
- 实现大数加法
- 实现一个异步的 sum/add
- 如何控制 add 异步请求的并发次数
- 代码分析题(LazyMan) 🔥
- 满足条件
a == 1 && a == 2 && a == 3
- 实现
(5).add(3).minus(2)
功能 - 实现
LazyMan('Tony').eat('lunch').sleepFirst(5)
- 满足条件
- 对字符串进行压缩编码 🔥
- 实现一个 once 函数,记忆返回结果只执行一次 🔥
- 实现 LRU Cache 算法 🔥
- 实现斐波那契数列 fibonacci 🔥
- 循环打印红黄绿灯 🔥
- 实现管理本地缓存过期的方法 🔥
- 写一个全排列、全组合的函数 🔥
- 查找字符串中出现最多的字符和个数
参考