# 京东零售-基础平台
- 1.你最近做的项目是哪些?举一个然后着重介绍一下业务和你说担任的角色及业绩 
- 2.XX平台的有哪些难点,你是怎么实现和解决这些难点的?事件调度中心的具体实现? 
- 3.谈一下性能优化?比如重绘和回流是什么并且如何优化避免? 
- 4.如果要实现一个弹窗组件,不用三方库你是如何设计并且实现的? 
- 5.Web Worker 和Service Worker 在项目中如何使用的? 
- 6.算法-快速排序的时间复杂度是多少? 
- 7.算法-如何判断一个链表是环形的?并且如何找到环的起点? 
- 8.网络-描述一下Https的形成全过程 
- 9.网络-TCP 的拥堵控制是什么?滑动窗口是什么? 
# 网易云音乐
- 1.ReactNative 和 Native 如何通信的?H5 与 Native 又是如何通信的?你们是如何封装的通信层 
- 2.JsBridge 的原理是什么?除了 JsBridge 还有什么通信方式?Url schema 和 JsBridge 有啥区别? 
- 3.React 的事件合成机制是怎样的?有哪些好处?React17 的事件有哪些变更? 
- 4.React 16 废弃了 15 里面哪些生命周期,为什么废弃这些? 
- 5.React 类组件与函数的区别?(答的越多越深越好) 
- 6.Node 如何开启多进程 
- 7.Egg 有几个进程?分别有什么作用 
- 8.你常用的数据库有哪些?它们之间有什么区别(MySql,Redis,Mongo,PG,ElasticeSearch) 
- 9.mySql 索引怎么建立使用 
- 10.Webpack 如何做到组件懒加载的?TreeShaking 是什么版本才有的?有哪些限制?commonjs 里面能用么? 
- 11.Js 闭包是什么?会产生什么问题?有哪些应用场景? 
# 蔚来汽车
- 1.微前端是什么?解决了什么应用场景?有什么明显的好处和作用? 
- 2.qiankun 基于什么封装的?Single Spa 是怎么实现的有哪些功能?Single 的 js 和 css 隔离机制是什么做的? 
- 3.你在项目中是怎么用 qiankun 的遇到了什么问题是?分别是怎么解决的? 
- 4.DNS 实现机制是怎么样的?如何优化 DNS 的速度? 
- 5.Https 是怎么保障安全的?为什么要用 RSA+AES 加密两者结合的好处是什么? 
- 6.浏览器什么时候会崩溃?有几种原因?分别是什么引起的?你是如何监控和优化的? 
- 7.浏览器内存溢出会有多少种出现的方式?怎么排查和解决问题? 
- 8.gzip 原理?他对图片类型文件压缩有效果么? 
- 9.React 17 都有哪些变化?有什么作用? 
- 10.React fible 架构有什么作用?链表结构和之前的树状结构有什么好处?链表是如何串联起整个 dom 的?顺序是什么? 
- 11.函数式编程是什么?有什么好处和作用 
- 12.setState 什么时候异步什么时候同步?异步是真的异步么?他的底层机制到底是什么? 
- 13.SSR 是什么有什么作用?同构的含义是?SSR 会带来什么问题?你是怎么优化的? 
- 14.Next 的服务端计算是怎么处理的?如果一个 SSR 应用有大量数据加载?你是如何优化?服务端怎么做?客户端又是怎么做? 
# 哈罗单车
- 1.hybrid jsbridge 如何通信的,JSBridge 的原理https://blog.csdn.net/yuzhengfei7/article/details/93468914 (opens new window) 
- 2.前端 sdk 是怎么做的,有哪些讲究 
- 3.js 的垃圾回收机制 
- 4.闭包 的原理 和使用场景 
- 5.webpack 执行流程, loader 执行顺序, 写过 loader 和 plugin 么 
- 6.vue 源码阅读过么?阅读了哪些是怎么样的? 
- 7.mvvm 在 vue 里的体现 
- 8.data 为什么是个函数 https://www.jianshu.com/p/f3e774c57356 (opens new window) 
- 9.proxy 比 object.defineProperty 优势,执行效率为什么高 https://juejin.im/post/5acd0c8a6fb9a028da7cdfaf (opens new window) 
- 10.虚拟 dom 的原理是什么?里面的 diff 算法是怎样的 ? 2,3,4,5 如果 34 换 45,怎么改变 https://juejin.im/post/5d36cc575188257aea108a74#heading-18 (opens new window) https://efe.baidu.com/blog/the-inner-workings-of-virtual-dom/ (opens new window) 
- 11.js 在面向对象里面的体现 , 继承有几种实现方式 ,寄生组合式继承 具体是怎样的?es5 和 es6 继承的区别 
# 阿里-钉钉
- postion 的属性
- 文档流是什么?
- get 和 post 请求区别
- get 如何发送一个图片
- Hybird WebView 权限控制的
- WebView 安全漏洞及防护
- Jsbrige 原理
- xxApp 混合开发 难点及架构
- 性能优化
- cdn 外部引用的好处
- Gzip 原理
- 服务端渲染的优缺点
# 字节跳动
- Jsbrige 原理 
- Jsbrige 加载速度检测过么?如何优化? 
- Hybird 性能优化 
- 手写 图片懒加载 (进入视口展示) 
- Node 模块机制 
- egg 怎么部署的,多进程如何通信 
- SSR 的流程 
- 首屏渲染 检测指标和具体的优化方式 
- 广告 sdk 嵌入网页如何防止 iframe 包裹覆盖 
# 掌门集团
- 1 像素边框问题怎么解决 
- SSR 渲染流程 
- Hybird jsBridge 的原理?url schema 有几种类型? 
- WebView 的优化有哪些? 
- Ios WkWebview 会有哪些问题? 
- 描述一个你做过或解决的一个项目的疑难杂症问题,你是怎么解决的 
- 从发送请求到服务段接收的请求 都经历过哪些过程? 
- 关于 http 能系统的讲一下么? 
- 301、302、304,401 、402 、403 分别代表什么意思? 
- 一道场景题 要求用面向对象思想去设计和实现 
- js 的原型和原型链机制,延伸 js 的继承机制是怎样的和 java 的继承机制有什么区别 
- typeScript 的装饰器 是什么原理 和 java 的注解语法有什么类似的地方? 
- 小程序的 登录机制是怎样的? 
- Electron 的深入使用和架构特性和 Android 以及 ReactNative ,Taro 这些有什么区别? 
# 百度
- 1、请分析以下代码执行结果
['1', '3', '10'].map(parseInt);
- 2、请分析以下代码执行结果
var number = 10;
function fn() {
  console.log(this.number);
}
var obj = {
  number: 2,
  show: function(fn) {
    this.number = 3;
    fn();
    arguments[0]();
  }
};
obj.show(fn);
2
3
4
5
6
7
8
9
10
11
12
13
- 3、请写出 inner 的实际高度。
<style>
  .outer {
    width: 200px;
    height: 100px;
  }
  .inner {
    width: 60px;
    height: 60px;
    padding-top: 20%;
  }
</style>
<div class="outer"><div class="inner"></div></div>
2
3
4
5
6
7
8
9
10
11
12
- 4、手写一个深拷贝函数。 
- 5、HTTP 状态码 301 302 304 403。 
- 6、手写发布订阅模式 EventEmitter。 
- 7、手写一个多表查询的 sql 语句。 - 当时用的是 left join 实现。 
- 8、react 高阶函数的写法,通常有哪几种。 - 第一种是通过工厂模式直接 wrapper,第二种是通过组件反向继承的方式。 
// 反向继承方式写法如下
class A extends B{
  render() {
    return (
      <div>component1 start</div>
        super.render()
      <div>component1 end</div>
    )
  }
}
2
3
4
5
6
7
8
9
10
- 9、delete 数组的 item,数组的 length 是否会 -1。 - 不会。 
- 10、mongoDB 中的 BSON 是什么? - B 代表二进制。 
- 11、关系型数据库和 nosql 查询效率谁高? - 关系型是 B+ tree 查询效率相对较高。 
- 12、使用 node app.js 开启服务,如何让它在后台运行。 - 开启守护进程,在命令后加上 & 符号,表示开启守护进程来执行。 
node app.js &
- 13、尽可能写出更多数组副作用方法。
splice、push、pop、shift、unshift。
sort、fill、reverse。
# 百度三面:
- 1、实现一个周岁函数,例如 fn('2018-8-8') 输出 1,只要是过了生日就 +1。 
- 2、不断优化刚才实现的函数,用尽一切办法,多问一问还有吗?跳出自己的固定思维圈。 
# 阿里
- 1、vue 双向数据绑定原理,依赖收集是在什么时候收集的? - 是在 created 生命周期之前,render 生成虚拟 dom 的时候。 
- 2、react hooks 原理是什么? - hooks 是用闭包实现的,因为纯函数不能记住状态,只能通过闭包来实现。 
- 3、useState 中的状态是怎么存储的? - 通过单向链表,fiber tree 就是一个单向链表的树形结构。 
# 爱奇艺
- 1、浏览器渲染 js,html,css 的顺序。 
- 2、react dom diff 算法,list 比较首先比较的是什么? - 首先比较同层级元素,从左到右。 
- 3、为什么 react 要做成异步的呢? 
因为 state 更新会导致组件重新渲染,在渲染后,才能把新的 props 传递到子组件上,所以即使 state 做成同步,props 也做不成,为了保证 state 和 props 的一致性。
为了性能优化,state 会根据不同的优先级进行更新。
为了让 react 更加灵活,如实现异步过渡,例如页面在切换的时候,如果延时很小,就在后台自动渲染了,渲染好之后再进行跳转;如果延时相对较长,可以加一个 loading。
- 4、对象的 {…} 解构,是 rest 吗? - 是。 
- 5、自己实现一个 Symbol Interator 。 
// 给一个对象设置Symbol Interator
var obj = {
  *[Symbol.iterator]() {
    yield 1;
    yield 2;
    yield 3;
  }
};
2
3
4
5
6
7
8
- 6、options 头是在什么时候会进行发送。
检测服务器所支持的请求方法
CORS 中的预检请求
- 7、sessionStorage 在两个 tab 窗口能共享吗? - 不能,和后端的 session 类似,每一个窗口对应一个会话层。 
- 8、localStorage 存放的只能是 string 类型。 - 插入时需要将对象转换为字符串,读取时需要做 JSON.parse 转换。 
- 9、写一个 0-100 的正则表达式。 
/^(\d|[1-9]\d|100)$/;
- 10、linux 中怎么查看内存和磁盘。
top 命令,查看内存。
free 命令,查看内存。
ps aux 列出当前内存中正在运行的程序。
df 命令,查看磁盘。
- 11、meta 标签用过吗,都用来做些什么?
seo 优化
viewreport 设置手机端适配
设置 charset 字符编码
模拟 http 标头字段
<meta name="keywords" content="电商,物流" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta charset="utf-8" />
<!-- 模拟 html 缓存头部 -->
<meta http-equiv="expires" content="Sunday 22 July 2016 16:30 GMT" />
2
3
4
5
# 字节跳动2
- 1、请分析以下代码执行结果
async function a() {
  var result = Promise.resolve();
  result.abort = function() {
    console.log('xxx');
  };
  return result;
}
var p = a();
p.abort();
2
3
4
5
6
7
8
9
- 2、手写一个节流函数 - 手写节流函数 
- 3、什么是装箱和拆箱 - 装箱和拆箱操作,能够在值类型和引用类型中架起一座桥梁。换言之,可以轻松的实现值类型与引用类型的互相转换。 - 装箱是将值类型转换为引用类型,拆箱是将引用类型转换为值类型。 
- 4、什么是委托 - 粗略来说,一个类想执行一个方法,但它本身没有这个方法,这个方法在另一个类中,于是它“委托”那个类来帮它执行。 
using System;
using System.Collections.Generic;
using System.Text;
namespace Delegate
{
    //定义委托,它定义了可以代表的方法的类型
    public delegate void GreetingDelegate(string name);
    class Program
    {
        private static void EnglishGreeting(string name)
        {
            Console.WriteLine("Morning, " + name);
        }
        private static void ChineseGreeting(string name)
        {
            Console.WriteLine("早上好, " + name);
        }
        //注意此方法,它接受一个 GreetingDelegate 类型的参数,该参数是返回值为空,参数为 string 类型的方法
        private static void GreetPeople(string name, GreetingDelegate MakeGreeting)
        {
            MakeGreeting(name);
        }
        static void Main(string[] args)
        {
            GreetPeople("yhlben", EnglishGreeting);
            GreetPeople("yhlben", ChineseGreeting);
            Console.ReadKey();
        }
    }
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
- 5、手写一个 reduce 方法。
Array.prototype.reduce = function(reducer, initVal) {
  for (let i = 0; i < this.length; i++) {
    initVal = reducer(initVal, this[i], i, this);
  }
  return initVal;
};
2
3
4
5
6
- 6、手写一个模板字符串替换方法
function template(html, obj) {
  return html.replace(/\{\{(.*?)\}\}/g, function(match, key) {
    return obj[key.trim()];
  });
}
template('{{name}}很厉name害,才{{ age }}岁', { name: 'jawil', age: '15' });
2
3
4
5
6
7
- 7、看过 antd 源码吗,如何实现一个 Model,Message 组件? - 只能猜想到 React Portals,未曾看过源码,有待提升。 
- 8、如果要设计一套微前端架构,说说你的具体思路?如何实现主页面事件注册机制?如何解决多个 iframe 同时通信? - 需要有落地实战项目,不然很难答好,消息加锁等。