# 一面

# 笔试题

# 请实现一个通用add方法,add参数为任意数量,如add(1, 2, 3) 输出6。

# 请实现Promise.all()。

# 请实现一个双向数据绑定。

# 算法题

/*
假如有三个词库,第一个词库的内容为发布、推出,第二个词库的内容为小度音箱、小度在家, 第三个词库的内容为 2020 新款、2019 再版。现需要制定一个规则,组合任意数量词库的内容,并输出结果。如规则为第二个词库+第三个词库+第一个词库,输出内容为 
小度音箱 2020 新版发布  小度在家 2020 新版发布
小度音箱 2019 再版发布  小度在家 2019 再版发布
小度音箱 2020 新版推出  小度在家 2020 新版推出
小度音箱 2019 再版推出  小度在家 2019 再版推出 

请编写函数gengertorWord,首先输入固定的第一个词库、第二个词库、第三个词库的内容,然后,输入规则(规则中的词库个数可以是任意个数的),输出对应内容。
*/

# 自我介绍

# ts 和 js 的区别

# es 和 js 的区别

# amd 和 esm 的区别

# 浏览器是否支持 esm

# webpack怎么进行首屏加载的优化

# 了解过 tree-shaking 吗

# 闭包为什么会有内存泄漏问题

# 了解过 nodejs 吗

# express 和 koa2、koa3 的区别

# 了解过 flex 布局吗

# 有8个子盒子,每个盒子宽100px,父盒子宽700px,那么它是一行显示还是会换行?

# 我想换行怎么实现?

# HTTP 和 HTTPS 的区别

# HTTPS 的加密如何实现

# 数字证书如何验证合法性

# 二面

# 自我介绍

# 输入URL到页面展示中的全过程

# 在这过程中的话涉及那些网络协议

# HTTP协议是否包括端口号

# 端口号是TCP协议的一部分?

# 为什么需要三次握手?

# 三次握手的全过程

# TCP连接如何确认连接方

# HTTPS的握手过程

# 证书的作用以及判断过程

# 建立SSL连接之后,是对称还是非对称加密

# 为什么会有跨域的问题

# 跨域的网络情况大概是怎样

# 除了常规的GET、POST以外,DELETE等请求也是这个流程

# 解决方案

# jsonp为什么可以实现跨域呢

# 除了script标签,还有哪些标签支持跨域请求

# 直接使用表单提交请求,会有跨域问题吗

# websocket 建立过程是怎样的

# 代码题

// 实现一个函数,输入工资,返回应该缴纳的税费
// 其中税率规则如下:
// 0~5000元不需要交税
// 5000~8000元 3%
// 8000~20000元 5%
// 20000以上 10%

function cal(price: number): number {
  const rules = getTaxRules(price)
  const last = rules.pop()
  
  return (price - last.begin) * last.tax + 
    rules.reduce((pre, cur) => pre + (cur.end - cur.begin) * cur.tax, 0)
}

const TAX_RULE = [
  { begin: 0, end: 5000, tax: 0 },
  { begin: 5000, end: 8000, tax: 0.03},
  { begin: 8000, end: 20000, tax: 0.05},
  { begin: 20000, tax: 0.1}
]

function getTaxRules(price: number): typeof TAX_RULE {
  return TAX_RULE.filter(function (item) {
    return price >= item.begin
  })
}

# 面向对象编程中的三个特征

封装、继承、多态

# 面向对象编程中的五个规则

单一原则、开闭原则、替换原则、依赖原则、接口分离原则

# 开发过程中的设计模式