# 快手

# 一面

# react 16 新增了那些生命周期函数,有什么作用,为什么去掉某些 15 的生命周期

# fiber 原理,如何实现异步渲染(链表/可中断)

# redux 和 redux-saga 的区别和原理

# 项目中用到的 saga-duck 是什么东西

# useEffect 的实现原理

# 异步渲染和旧版的 diff 的区别

# babel 实现转码的过程(词法、语法分析)

# 项目技术栈怎么选型

# 小程序底层实现原理了解多少(双线程模型/预加载Webview)

# 项目 nodejs 应用异常退出如何处理(pm2/uncaughtException 事件等)、日志上报怎么做(输出重定向到文件,elk服务传到kibana)

# graphic schema 怎么设计

# 有哪些技术驱动业务的案例

# 算法:最大乘积子序列 (opens new window)

# 拼多多

# 一面

# redux 理念

# react-redux 中 connect 怎么实现

# mixin、hoc、继承的区别、优缺点

# react diff 实现

# react 旧版的diff用深度优先还是广度优先。为什么用深度优先,广度优先能实现吗

# diff的时间复杂度?为什么?

O(n)

react 从 O(n3) -> O(n)

# react-router 实现原理

# 客户端路由 hash/history 实现的区别、原理

# 有哪些常见的 http 头

# websocket 轮询的好处缺点

# websocket 握手的过程

# tcp 握手过程

# tcp/udp 的区别

# 尽可能多实现pdd app 导航布局实现(4等分div并列排布)

# 如何清除浮动

# BFC 实现原理

# 开放题:pdd 假设没有首页优化,尽可能想办法优化

# 二面

# css盒子模型(content-box、border-box)

# 实现动画有哪些方法

# react mixin hoc 以及 hook 之间的区别和优缺点

# 浏览器渲染出一个页面的过程

# vue/react 技术选型

# 项目相关,重构开发如何并行

# 项目中工程化进行了哪些优化

# 项目中进行优化会从哪方面去做

# nodejs 性能优化

# linux 文件权限

# 前端监控怎么实现

# 虾皮

# 一面

# http 302 301 307 的区别

# 301 和 302 哪个对 seo 更友好(301)

# 跨域是什么、如何解决

# jsonp 有什么缺点

# base64和外链的应用场景,各自的优缺点

# http缓存机制

# https 的握手过程

# set/map 的区别

# hook 的局限性

# setState 和 hook 的区别

# decorator 的作用,编译后是什么样子的

# symbol 是什么,一般用来做什么

# csrf 是什么,如何防范

# sql注入是什么,如何防范

# react 调用 setState 之后发生什么

# nodejs 事件循环机制

# pm2原理,有哪些模式(cluster fork)

# docker 和 k8s 有了解多少

# 移动端一个元素的拖动,如何实现和优化(节流,改变位置)

# for in / for of 看代码输出

# 描述链表的反转如何实现,复杂度多少

# 实现 instanceof

# 实现一个对象被 for of 遍历

# 实现链表的添加、删除。复杂度是多少

# 二面

# 给两段效果上都可以实现继承的代码,说出差异

function child() {}
function parent() {}

child.prototype.__proto__ = parent.prototype
child.prototype = new parent()

# this 输出问题

# 如何监听 html 外链资源加载失败

# Mutation ObserverIntersection Observer 使用场景

# 127.0.0.10.0.0.0 差别(一个只能通过 localhost ,另一个可以通过本机 ip 或者 localhost 都可以)

# 利用 Promise js sleep 函数实现

# jsx 转换后是什么样子的

# redux compose 函数是做什么的,中间件呢

# redux-sage 是什么,和 redux-thunk 有什么区别

# dva 了解吗

# umi.js 有用过吗

# req.pipe(res)

# stream 如何处理数据消费和数据生产的速率不一致问题

# writeable stream drain 事件是做什么的(这是和一个控制读写速率有关的事件)

# 字节

# 一面

# 常用的 http 状态码(101 200 204 301 302 304 307 400 404 500)

# 301 和 302 的区别(永久/临时)

# 前端路由如何实现

# 前端路由刷新404如何处理(404时重定向到index.html)

# 从前端到后端全链路如何设计一个登录的流程(session 方案、jwt)

# 什么是跨域,怎样处理

# 简单请求、复杂请求

# 浏览器的缓存策略

# domain 属性解决跨域,几种domain设置对跨域是否生效

# ts泛型做什么的,infer关键字的作用

# 实现 typescript 的 Paramters、ReturnType

# 实现 Promise.all

# 实现一个并发请求控制函数,限制并发数

# 二面

# jwt 原理

# xss和csrf防范

# pureComponent 和 Component 区别(前者 shouldComponentUpdate 默认比较 props)

# react hook hoc 解决了什么问题

# 有哪些常用的 hook

# 项目实现一个中间层的意义(前端全链路日志打通)

# setState 同步还是异步

# setState 传递对象和函数有什么区别

# 合成事件是怎样的,有什么好处

# 事件冒泡和事件捕获的区别,react中的冒泡和捕获(react 都是合成事件,无论是冒泡还是捕获,都对应原生中的冒泡)

# 水平垂直居中

# 手写 bind

# 实现快排

# 三面

# graphql 相比 restful 的区别,优缺点

# 为啥选择了redux-saga作为解决方案(解决异步优雅/提供很多工具函数)。redux的异步中间件方案有哪些,对比。saga对比dva

# graphql的鉴权在哪里做

# 协程是什么(语言层面实现的并发),Go/nodeJs怎样去实现协程(Go使用go关键字、node可以使用Generator实现、我理解react16的异步渲染也是协程的实现)

# react fiber的机制是怎样的

# 锁机制的作用,node和Go如何处理死锁

# Go/node实现并发怎么做

# node和Go的优缺点怎样理解

# 实现一个 useState