1. map与Object区别

    1. Map的键其实是一个引用,指向了键所对应的对象,所以Map的键可以是任意类型,Object只能是字符串、数字或者Symbol
    2. Map实现了迭代器,可用for…of遍历
    3. Map可以直接得到长度,.size
    4. 填入Map的元素会保持原有的顺序,而Object元素key是自动按照字符串排序的,数字排在前面

  2. js内存泄漏防范之道

    Index 起因 如何避免
    1 意外的全局变量(1.给未声明的变量赋值,2.使用指向全局对象的this) 严格模式可以避免严格的全局变量
    2 闭包(闭包可能会让某些变量一直处于被引用状态,即使它的执行上下文和作用域已经不存在了) 闭包是js的语言特性之一,如果无法避免,需要注意以下两点:1.清楚闭包是何时创建的,以及哪些对象会被保留在内存中;2.清楚闭包的生命周期和用途(尤其是当作回调函数的时候)
    3 定时器(在 setTimeout 或 setInterval 的回调函数中引用某些对象,在定时器结束前,是不会回收的) 1.注意被定时器回调函数引用的对象;2.使用定时器返回的句柄,在必要时清除它
    4 事件监听器(活动的事件监听器会阻止作用域内的变量被 GC 回收) 事件监听器不再需要时,要记得解除绑定
    5 Map,Set(Map,Set里面的key也会算作一次引用) 在需要的时候使用WeakMap,WeakSet
    6 分离的DOM元素(如果 DOM 节点被 JavaScript 代码直接引用,即使从 DOM 树分离,也不会被 GC 回收) 把DOM 引用限制为局部作用域

    JavaScript 内存泄漏防范之道-51CTO.COM

  3. Hash路由与History路由区别(记住如何实现就能理解原理)

    Hash路由 History路由
    定义 监听 url 中 hash 的变化,然后渲染不同的内容,这种路由不向服务器发送请求,不需要服务端的支持 监听 url 中的路径变化,需要客户端和服务端共同的支持
    需要监听的事件 当页面中的 hash 发生变化时,会触发hashchange(event: {oldUrl, newUrl})事件,但第一次进入到页面时并不会触发这个事件,所以我们还需要监听load()事件 load() , popState() , 由于pushState和replaceState被调用时,是不会触发popState事件的,所以我们需要手动添加pushState()replaceState()事件
    获取方法 window.location.hash window.location.pathname
    对象方法 window.history.back() .forward() .go(number) .pushState(obj, title, url) .replaceState(obj, title, url) 调用这几种方式时,都会只是修改了当前页面的 URL,页面的内容没有任何的变化。
    应用场景 1.仅切换 url 而不发送请求的特性,可以在前端渲染中使用,例如首页是服务端渲染,二级页面采用前端渲染;2.可以添加路由切换的动画;3.在浏览器中使用类似抖音的这种场景时,用户滑动切换视频时,可以静默修改对应的 URL,当用户刷新页面时,还能停留在当前视频。
    优点 不需要服务端支持,纯客户端路由 1.pushState()可以通过stateObject参数添加任意类型的数据到记录中。2.SEO友好
    缺点 1.传参数不方便,只能添加短字符串。2.传到服务端没有hash值,刷新无法直接从服务端获取状态。3.SEO不友好 前端的URL必须和向发送请求后端URL保持一致

    大部分场景都应该使用history路由,因为我们的目的是希望有前端路由提高效率,但是后端路由大部分场景也都是不能替代的,因为我们需要服务端渲染来做SEO优化。使用hash路由会导致没法儿做后端路由。

    深入理解前端中的 hash 和 history 路由

  4. React Native路由

  5. src和href区别

  6. 介绍react+redux+saga

    1. 可以从MVVM开始介绍
  7. http状态码

  8. BFC,以及它的触发条件

    BFC(Block Formatting Context)块级格式化上下文,是用于布局块级盒子的一块渲染区域。MDN上的解释:BFC是Web页面 CSS 视觉渲染的一部分,用于决定块盒子的布局及浮动相互影响范围的一个区域。

    触发方式:

    1. 根元素,即HTML标签
    2. 浮动元素:float值为leftright
    3. overflow值不为 visible,为 autoscrollhidden
    4. display值为 inline-blocktable-celltable-captiontableinline-tableflexinline-flexgridinline-grid
    5. 定位元素:position值为 absolutefixed
  9. 执行上下文

    执行上下文是当前代码的执行环境。

    分为三种:1.全局执行上下文,2.函数执行上下文,3.eval执行上下文

    三个属性:1.变量对象,2.作用域链,3.this

  10. 普通函数和箭头函数区别

    1. this指向:箭头函数的this指向函数所在的上下文,且this不能被call、apply指定
    2. 构造函数:箭头函数不能作为构造函数,没有prototype属性
    3. 箭头函数不绑定 argument对象
    4. 箭头函数可以隐式返回
  11. HTTP1.0、HTTP1.1 和 HTTP2.0 的区别

    1. HTTP/1.* 一次请求-响应,建立一个连接,用完关闭;每一个请求都要建立一个连接;
    2. HTTP/1.1 Pipeling解决方式为,若干个请求排队串行化单线程处理,后面的请求等待前面请求的返回才能获得执行机会,一旦有某请求超时等,后续请求只能被阻塞,毫无办法,也就是人们常说的线头阻塞;
    3. HTTP/2多个请求可同时在一个连接上并行执行。某个请求任务耗时严重,不会影响到其它连接的正常执行;

    HTTP1.0、HTTP1.1 和 HTTP2.0 的区别

  12. DNS 域名解析过程

    1. 查看浏览器缓存
    2. 查看系统缓存
    3. 查看路由器缓存
    4. 查看ISP DNS缓存(比如电信DNS)
    5. 询问根域名服务器
    6. 询问顶级域名服务器
    7. 询问权威域名服务器
    8. 保存结果到缓存
  13. 浏览器输入url到网页显示发生的过程

    1. 输入地址
    2. DNS 解析
    3. 建立 TCP 连接
    4. 发送 HTTP / HTTPS 请求(建立 TLS 连接)
    5. 服务器响应请求
    6. 浏览器解析渲染页面
    7. HTTP 请求结束,断开 TCP 连接

    浏览器从输入网址到页面展示的过程

  14. TCP和UDP区别

    Untitled

  15. 二进制运算

    Untitled

  16. 精度丢失