吐血整理
JS
- WeakMap 和 Map 了解吗? 说下他们的区别?WeakMap 是和垃圾回收有一些关系
- 0.1 + 0.2 !== 0.3 数字精度问题
- fetch有什么好处和缺点
- babel实现转码的过程
- jsonp有什么缺点
- set/map的区别
- decorator的作用,编译后是怎样的(@decorator -> decorator(target)...)
- symbol是什么,一般用来做什么,symbol 和 symbol 的 polyfill写法
- ts 泛型做什么的,infer关键字的作用
- 尾递归函数优化
- 请用一句话描述 try catch 能捕获到哪些 JS 异常
- 事件循环,哪些是宏任务,哪些是微任务,为什么要区分宏任务和微任务
- js堆和栈的区别,内存,垃圾回收,内存泄漏这篇文章可以凑合看
- 怎么看js异步编程,如何做到公共的封装,当组件销毁时取消请求
React
- react18
- react-router实现原理
- react16新增了哪些生命周期、有什么作用,为什么去掉某些15的生命周期
- fiber如何实现异步渲染的
- useEffect的实现原理,useState怎么做缓存的
- 简述一下redux的实现理念,手写一个redux connect
- Mixin、HOC、Render Props的区别和优缺点
- react diff如何实现,深度优先还是广度优先
- setState和hook的区别
- react 调用setState之后发生了什么
pureComponent
和Component
的区别
setState
同步还是异步
- react 合成事件怎样的,有什么好处,冒泡和捕获怎么办
- 请问React调用机制一共对任务设置了几种优先级别?每种优先级都代表的具体含义是什么?在你开发过程中如果遇到影响主UI渲染卡顿的任务,你又是如何利用这些优先级的?
- render 和 renderToString 的底层实现上的区别
- useEffect、useLayoutEffect区别
- redux三大原则
- fiber节点对象的一些属性都有哪些
- 浏览器每一帧都做了什么,优先级是怎样的,requestAnimationFrame什么时候执行,requestIdleCallback什么时候执行,如果事件循环中微任务执行非常久,宏任务和rAF受什么影响(实际上页面会卡帧,FPS降低,导致rAF也不能执行)
- getDerivedStateFromError
常见功能实现
- 异步任务调度器
- 深拷贝
- 写一个图片懒加载
- 如何实现模块动态加载
- 4等分div并列布局
- 实现 instanceOf
- js sleep函数实现,三个版本都是一下,promise、generator、async await
- redux的compose函数做什么的,实现一个
- 实现typescript的
Paramters
、ReturnType
(考察infer关键字使用)、DeepReadOnly
- 实现
Promise.all
- 手写分别实现apply, call, bind函数,
- 实现一个
useState
- 用decorator装饰器模式实现防抖,节流函数
- requestAnimationFrame的作用及使用,替代setTimeout的写法
- 实现promise.allSettled 和 promise.all
- 实现cacheRequest方法,保证使用ajax请求相同资源实际只发送一次请求
- 手写promise
- node中promisify实现
- fetch兼容超时重传
- 观察者模式
- 扁平化
- 柯里化
- 手写实现async(链接中的第四题)或者这里
- 实现maxRequest,成功后resolve结果,失败后重试,尝试超过一定次数才真正的reject
- 实现一个new方法,关于继承可以看传送门,里面几种比较全,有优点和缺点
- 写一个 mySetInterVal(fn, a, b),每次间隔 a,a+b,a+2b 的时间,然后写一个 myClear,停止上面的 mySetInterVal
- 手写数组转树,arrayToTree
- 手写用 ES6proxy 如何实现 arr[-1] 的访问。proxy巧用
- 手写一个redux-thunk
- 对象数组转换成tree数组
- 实现类似模版字符串的解析
- 请实现一个 find 函数,功能等同于 document.getElementById
- 实现 一个 find sql功能
- 将字符串转成千分位。例如 '12345678' 转化成千分位是 '12,345,678'
- 数组的flattern方法(试一试用reduce实现)和对象的flattern方法
- 实现 applyMiddleWare,示例见链接
- 手写-将虚拟 Dom 转化为真实 Dom
- 手写函数实现数组([12, 3, 24, 1, 932, 6423])按照首位排序
- 实现一个典型的lazyMan
- 惰性求值
- 正则qq号
- abcdefgabchabja => 'abcdefabchabja'
- 数字转中文 123456 => '十二万三千四百五十六'
- sortDeps由文件依赖关系输出加载排序
算法
- 最大乘积子序列(leetcode-152)
动态规划
- 翻转链表(leetcode-206)
- 快速排序
- 最小路径和
动态规划
- 单词搜索(leetcode-79)
回溯
- 洗牌算法(leetcode-384)
- 一个无限长有序可重复数组N,查X最后出现的位置
- 版本号排序
- 数组中第K大个元素
- 二叉树的所有路径(leetcode-257)
- 二叉树路径总和(leetcode-112)
- 二叉树的最近公共祖先
- 爱吃香蕉的珂珂
- LRU 缓存机制
- 二叉树遍历(dfs, bfs, 前序,中序,后序)
- 回文子串
- 最长回文子串
- 买卖股票的最佳时机
- 排序算法(冒泡、快排、插入、选择、归并)
- 无重复字符的最长子串
- 有一堆整数,请把他们分成三份,确保每一份和尽量相等(11,42,23,4,5,6, 56, 78, 90)
- 给定一个数组,按找到每个元素右侧第一个比它大的数字,没有的话返回-1的规则返回一个数组
- 从给定的无序、不重复的数组data中,取出n个数,使其相加和为sum
- 单向链表实现队列
- 根据传入参数n(数字)对一维数组(纯数字)按照距离n最近的顺序排序
- 判断一个字符串最多只删1个字符,是否能成为一个回文字符串
- 红包算法
- 螺旋矩阵(leetcode-52\59)
- 旋转数组的最小数字
- 二叉搜索树与双向链表
- 复原 IP 地址
- 二维数组中的查找
- 从先序遍历还原二叉树
- 大招
- 大招II
HTML & CSS
- 如何清除浮动
- BFC实现原理
- 实现动画有哪些方法(js & css)
- 图片base64和外链的应用场景,各有什么优缺点(base64减少请求数,但是会增加额外的体积)
- 如何监听html外链资源加载失败(面试官又追问了
onerror
和addEventListener
的error都能吗。面试官说onerror不行)
- 如何解决在移动端1px的问题?
- 客户端怎么处理 JS 事件失效的问题
- link标签prefetch和preload作用
- link和@import
Webpack
- HMR的原理,webpack怎么实现的热更新
- loader 和 plugins 的区别,plugins作用于哪个声明周期
- treeshaking原理
- Webpack 的工作流程
- Babel 的 preset 和 plugin 区别
- Babel 插件中 syntax 和 transform 的区别和联系
- webpack插件,同步异步等等
性能
- 白屏怎么优化
- 浏览器渲染出一个页面的过程
- 移动端一个元素拖动,如何实现和优化(节流、改变位置)
网络
- DNS解析、预解析、劫持
- http2,头部压缩、多路复用、server push
- https,对称加密和非对称加密,握手过程是怎样的
- CDN缓存
- TCP拥塞控制,TCP和UDP
- 有哪些常见的http头
- http 302 301 307之间的区别,301和302对于seo来说哪个更好 (301)
- http缓存机制
- csrf 是什么,如何防范
- sql注入是什么,如何防范
- 简单请求和复杂请求的区别
- no-stroe & no-cache
- 跨域请求能携带 cookie么
- http header字段都有哪些
Node
- nodejs事件循环机制
- pm2的原理,cluster和fork两种模式的区别
- 协程是什么,node怎样实现协程
- 锁机制,死锁,死锁产生的必要条件,node如何处理死锁
- node实现并发怎么做
软技能 & 功能设计
- 技术栈选型:特性、稳定性、性能、生态社区文档、兼容性、上手成本
- 弹幕设计和分页
- 二维码扫描登录实现原理
- 一组数组,实现Chrome控制台火焰图
- 大体积文件上传【分片、断点续传】
- A/B Test实现原理,如何实现10%,80%【一致性哈希算法、虚拟节点】
- 为什么要使用koa / express
- 如何设计一个单点登录方案
- 设计一个策略和方法,实现在https的前端项目里进行http请求
- 一个iframe,内嵌了一个A页面,iframe的宽高不停变化,如何让A页面的宽高实时自适应这个iframe的宽高大小
- 请设计一个方案:有a、b、c三个npm插件,它们会经常更新,在前端项目npm run start启动后,要求a、b、c三个npm插件自动更新到最新版本
- 一次性插入1000个div,如何优化插入的性能; 向1000个并排的div元素中,插入一个平级的div元素,如何优化插入的性能
- 实现一个搜索推荐组件会考虑哪些
- 劫持所有的a标签,点击时不发生跳转,而是弹出提示框提示即将跳转到某个网址,点击确认则跳转,点击取消则无操作
- Antd栅格布局的实现
- A页面跳转到B页面,在B页面做的操作传输给A页面的方法
- 实现一个多级菜单,菜单层级不定
- 如何设计实现一个渲染引擎
- 从输入URL到看到页面发生了什么【高德】
- 设计模式
- npm、yarn、pnpm
- lerna是怎么工作的
好文章&工具
- typescript挑战
- react源码阅读
- react如何调试源码