Welcome to js-challenges 👋
集锦大厂面试常考的 前端手写题和 leetcode 算法题
Author
👤 sunny-117
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 (hot)
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))直接判定出来
- before
- 实现一下 console.log
- 实现(5).add(3).minus(2)功能
- 将十进制数字转为二进制数字字符串
- 封装 remove child.remove()销毁自身
- 字符串中字母的出现次数
- 输出一个等腰三角形
- 实现一个函数 a,使其奇数次调用时返回 1,偶数次调用时返回 2(不能使用全局变量)
- 求 最接近的值
- 不用循环求和
- 连续赋值操作
- 输入一串字符串,根据字符串求出每个字母的数量并返回结果对象。(数字为 1 时可省略
- 创建包含 10 个 1 的数组 多种方法
- ['zm', 'za', 'b', 'lm', 'ln', 'k']
- ["0->2", "4->5", "7", "13", "15->16"]
- ['ab', 'c', 'ab', 'd', 'c'] => ['ab1', 'c1' ,'ab2', 'd', 'c2']
- 移除空属性
- 判断两个对象是否相等
- 一个数组,找出每个数组元素右侧第一个比当前数大的数的下标,时间复杂度 O(N)
- 寻找出现次数最多的三个标签
- 素数
- 实现日期格式化函数
- 实现 jsonp
- URL 反转
- 解析 URL Params 为对象
- 调用计数器(支持重置)
- 颜色生成
- JavaScript 怎么清空数组
- 判断 A、B 数组的包含关系(值和数量),A 属于 B 返回 1,B 属于 A 返回 2,两者相等返回 0,其他返回-1
- 对象的合并
- 实现一个 无限延伸数组)
- 多行字符串转二维数组
- 请实现一个通用的 Array 解构赋值
- 数组合并
- 数组交集,并集,差集
- 多维数组全排列
- 判断对象是否存在循环引用
- 实现函数 solution(arr, k)
- 逆对象扁平
- 对象扁平化
- 实现 执行一次的函数
- 链式调用
- 偏函数
- 实现管道函数
- 手写事件代理(委托)
- 数据类型判断
- 类数组转数组
- 预加载
- 图片懒加载
- 数组去重
- 防抖 节流
- 函数组合 compose redux-saga koa 洋葱模型
- sum(x,y)和 sum(x)(y)
- curry 柯里化
- 实现 xxx 时间之前的函数
- n 个 2 的 n 次方之和
- 无限动画
- 瀑布流
- 匹配 "a*c", "abcaacc"
- 一个字符串中是否出现某串字符,出现的话返回索引
- 实现一个属性选择器
- 字符串转数字
- 实现一个跨浏览器事件工具
- 12 调用计数器(支持重置)
- 实现内存函数缓存函数调用结果
- 返回给定七个扑克牌是否有同花顺,数据结构 [{num: 1, hua: 's'}, ...]
- JS 定义一个 log 方法
- 阿拉伯数字专汉字(偏难)
- 用代码实现把字符串转换成 base64 编码
- 设计 LRU 缓存结构
- 实现一个 LazyMan
- 标签整理分类题
- 求集合单词组合起来的不同结果,集合中的单词不重复,每个结果包含所有单词
- 实现简易版的useState
- 数组乱序-百度实习
- 排序找第几个最大-快手实习
- 怎么在制定数据源里面生成一个长度为 n 的不重复随机数组 能有几种方法 时间复杂度多少(字节)
ts 类型体操
设计模式相关
树-场景题(hot)
实现 JS 原生方法
JS 库函数实现
js utils
手写 nodejs 模块
正则相关
排序算法
实现自定义 HOOK
组件设计题(Vue/React/JS 均可)
Vue 原理题
HTML CSS 手写题
JS 实现基本数据结构
系统设计(场景)题
其他
前端常考 leetcode 算法题
前端 HOT 100 题
所有题目的名称都对应 leetcode,可以自行搜索,完成题目后欢迎把答案贡献给 issue 评论区,大家讨论最优解后 merge 到答案文档区
矩阵相关
数组
链表
二叉树
子序列问题
回文专题
二分查找
滑动窗口
双指针
单调队列
单调栈
位运算
动态规划
回溯
字符串
场景题
社区建议收集区:https://github.com/Sunny-117/js-challenges/discussions
关于捐赠
本项目会持续更新
整理不易,如果您觉得本项目对您有帮助,您可以通过支付宝或微信,扫描二维码,捐赠 X 元,^_^,谢谢!
📝 License
Copyright © 2022 sunny-117.
This project is MIT licensed.
This README was generated with ❤️ by readme-md-generator