前端手写题集锦 use js 记录大厂笔试,面试常考手写题, 致力打造最全的前端JavaScript手写题题库和答案的最优解
Github:github.com/Sunny-117/j…
注意,本仓库目前不包含算法相关的题目,比如leetcode上的题,只包含js的手写题,leetcode相关的题目也会整理,计划中,还未定方案
谢谢您的star,您的star是我更新的动力🥳
里面有答案,为了让你们有一个参考,不过非常希望你们能提供自己的思路,指出答案中存在的问题,复杂度优化等等, 期待你们的contribute, 想来一起维护这个项目,可以联系我,成为contributor
主要是让大家讨论出最优解,然后merge,一起贡献这个项目,有些答案有点问题,所以我给出的答案仅作参考,也欢迎发现的小伙伴提PR
贡献此项目
提PR就行
思考很久,用issue形式收集各种手写题,并让小伙伴们讨论题解
JavaScript HOT 100 题
中大厂面试,最常考的100个题,每一题都非常具有代表性,想要准备面试突击的同学,优先看这些题,祝在座的每一位都能拿到满意的offer
实现Primise.all
JSON2DOM = react的render函数
树形结构转成列表
列表转成树形结构
Array.prototype.flat
instanceof
call apply bind
Array.prototype.map
正则表达式模版字符串
lodash.get
深拷贝
寄生组合式继承
发布订阅者模式
实现 Promise (hot)
完整实现Promise A+
实现Primise.all
实现Promise.prototype.finally
实现Promise.allSettled
实现Primise.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))直接判定出来
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柯里化
设计模式相关
观察者模式
发布订阅者模式
树-场景题(hot)
DOM2JSON
JSON2DOM = react的render函数
计算目录树的深度
树形结构获取路径名
树形结构转成列表
列表转成树形结构
对象树遍历
获取树对象属性
查找json中的children路径
对象字符串转化成树形结构
判断有无符合路径和 -> 打印所有路径
获取树结构中的name:getName
实现 JS 原生方法
Array.prototype.flat
Array.prototype.forEach
Array.prototype.map
Array.prototype.filter
Array.prototype.reduce
Array.prototype.fill
Array.prototype.includes
Array.prototype.push
Array.prototype.unshift
Array.prototype.copy
Array.prototype.getLevel
实现es6的set集合
实现es6的map集合
String.prototype.zpadStart
Object.assign
Object.is
JSON.stringify
JSON.parse
call apply bind
instanceof
trim
实现new
String.prototype.repeat
String.prototype.includes
JS 库函数实现
lodash.get
lodash.chunk
js utils
判断一个对象是否是isPlainObject
手写 nodejs 模块
promisify
正则相关
正则表达式模版字符串
正则判断手机号,qq,颜色,邮箱
字符串的大小写取反
检验字符串首尾是否含有数字
去除字符串空格
去除字符串中的字母
正则 驼峰转换
对象key的驼峰转下划线
判断字符串中是否存在连续的三个数
((2+3)+(3*4))+2---->['(2 + 3)+(3 * 4)', '2 + 3', '3 * 4']
排序算法
冒泡排序
选择排序
快速排序
插入排序
归并排序
基数排序
计数排序
希尔排序
桶排序
堆排序
实现自定义HOOK
Hooks怎么封装手势逻辑
Hooks实现移动端的滑动轮播插件
如何用 Hooks 模拟 componentDidMount 与componentWillUnmount
实现一个useBodyScrollLock ,当出现弹窗时 阻止背景滚动
ts 实现 hooks: useInterval
实现 useQuery
实现useRequest
组件设计题(Vue/React/JS均可)
全选
轮播图
根据response渲染table
歌词滚动功能(hot)
实现一个 百度搜索框 (搜索提示)
实现todos
计时器或倒计时组件
设计一个公会入驻信息提交页
编码实现宽高不相同图片的自适配排列
列表子元素顺序反转
遍历树组件
选项卡
拖拽
HTML CSS 手写题
实现圆形环状进度条