Welcome to js-challenges 👋
集锦大厂面试常考的 前端手写题和 leetcode 算法题
🏠 DOCS
Author
👤 sunny-117
- Website: https://sunny-117.github.io/blog/
- Twitter: @zhiqiangfu6sun
- Github: @sunny-117
- personal share: 个人分享
Project Status
Star History
CONTENT
前端手写题集锦 记录大厂笔试,面试常考手写题,2024 年前端面试中常见的 leetcode 算法题, 致力打造最全的前端 JavaScript 手写题题库和答案的最优解
题目来源:总结了牛客截止到 2024 年 7 月的所有大厂手写题[100%],掘金部分出名的手写题文章,备战前端春招,秋招好友的总结好的题目(github), 就不一一列举链接啦,总之此项目题目来源于社区,答案也由社区讨论后 merge,也完全服务于社区。
谢谢您的 star,您的 star 是我更新的动力 🥳
里面有答案,为了让你们有一个参考,不过非常希望你们能提供自己的思路,指出答案中存在的问题,复杂度优化等等, 期待你们的 contribute, 想来一起维护这个项目,可以联系我,成为 contributor
最后我把社区的好的答案汇总到一个目录下,答案专栏,方便刷题
主要是让大家讨论出最优解,然后 merge,一起贡献这个项目,有些答案有点问题,所以我给出的答案仅作参考,也欢迎发现的小伙伴提 PR
🤝 Contributing
Contributions, issues and feature requests are welcome!
Feel free to check issues page. You can also take a look at the contributing guide.
Thank you to all the people who already contributed to js-challenges!
前端 JavaScript 手写题
JavaScript HOT 100 题
中大厂面试,最常考的 100 个题,每一题都非常具有代表性,想要准备面试突击的同学,优先看这些题,祝在座的每一位都能拿到满意的 offer
- 实现 Promise.all
- JSON2DOM = react 的 render 函数
- 树形结构转成列表
- 列表转成树形结构
- Array.prototype.flat
- instanceof
- call apply bind
- Array.prototype.map
- 正则表达式模版字符串
- lodash.get
- 深拷贝
- 寄生组合式继承
- 发布订阅者模式
- 岛屿数量
- 实现有并行限制的 Promise 调度器
- 实现一个 LazyMan
实现 Promise (hot)
- 完整实现 Promise A+
- 实现 Promise.all
- 实现 Promise.prototype.finally
- 实现 Promise.allSettled
- 实现 Promise.race
- 实现 Promise.prototype.catch
- Promise.resolve
- Promise.reject
Promise 周边场景题(hot)
- 交通灯
- 封装异步的 fetch,使用 async await 方式来使用
- repeat(console.log, 5, 1000)
- 封装一个工具函数输入一个 promiseA 返回一个 promiseB 如果超过 1s 没返回则抛出异常如果正常则输出正确的值
- 请求 5s 未完成就终止
- 实现一个 sleep 函数
- js 每隔一秒打印 1,2,3,4,5
- 使用 setTimeout 实现 setInterval
- promise 实现图片异步加载
- 使用 Promise 封装 AJAX 请求
- 我们能反过来使用 setinterval 模拟实现 settimeout 吗?
- 异步任务:依次发送 3 次网络请求,拿到服务器数据
- 实现网络请求超时判断,超过三秒视为超时
- promise 中断请求
- 给定一系列的 api,测量上传速度(实现的时候用的 GET 请求)并选择一个加载时间最短的 api
- settimeout 系统补偿时间
- setTimeout 准时
- 请求五秒未完成则终止
- 并发多个请求,返回先得到 response 的。函数输入为 url 数组,输出为第一个返回的 response 的结果
- JS 异步数据流,实现并发异步请求,结果顺序输出
- Promise 串行
- 处理高并发, 100 条数据,带宽为 10, 跑满带宽
- 设计一个简单的任务队列, 要求分别在 1,3,4 秒后打印出 "1", "2", "3";
- 实现有并行限制的 Promise 调度器
- 实现 Scheduler
- 有并发限制的 Promise.all(ts 类型)
- 实现 如果上一次的没请求完,之后的就无响应
- 使用 Promise 实现每隔三秒输出时间
- 使用 Promise 改写回调地狱
- 设计一个函数,该函数的参数为可同时发送请求的大小,返回一个函数,该函数的参数为要请求的 url。 实现的效果为,同时发送 n 个请求,当有请求返回后往请求队列里 push 新的请求,并输出刚刚结束的请求的返回值
- Promise.retry 超时重新请求,并在重试一定次数依然失败时输出缓存内容
- 写一个 mySetInterVal(fn, a, b),每次间隔 a,a+b,a+2b 的时间,然后写一个 myClear,停止上面的 mySetInterVal
JavaScript 常考手写题
- 产生一个不重复的随机数组
- await async 如何实现
- 使用递归完成 1 到 100 的累加
- 打印出 1~10000 以内的对称数
- 实现一个字符串匹配算法 indexOf
- 请实现一个模块 math,支持链式调用 math.add(2,4).minus(3).times(2);
- 手写用 ES6proxy 如何实现 arr[-1] 的访问(滴滴 2020)
- 有一堆整数,请把他们分成三份,确保每一份和尽量相等(11,42,23,4,5,6 4 5 6 11 23 42 56 78 90)
- 之字形打印矩阵
- 数组中的最大值
- 尾递归(斐波那契数列
- 实现简单路由
- 封装一个 localstorage 的 setItem 和 getItem 方法
- 1-1000 回文数
- 随机生成字符串
- 判断一个字符串是否为驼峰字符串, judge('ByteDance','BD') -> true judge('Bytedance','BD') -> false
- 压缩字符串
- Map 场景题
- 输入 50a6we8y20x 输出 50 个 a,6 个 we,8 个 y,20 个 x
- 手写 defineProperty
- String string 值一样返回 true Object Object 返回 true function function 都是声明的一个新的变量 返回 false
- 对输入的字符串:去除其中的字符'b';去除相邻的'a'和'c'
- 用一行代码,将数组中的字符串和字符串对象(new String(123))直接判定出来