0%

从前端的角度出发,主要包括以下几个方面:

  • 浏览器的地址栏输入URL并按下回车。
  • 浏览器查找当前URL是否存在缓存,并比较缓存是否过期。
  • 通过 DNS(域名解析系统)将 URL 解析为对应的 IP 地址。
  • 然后与这个 IP 地址确定的那台服务器建立起 TCP 网络连接(三次握手)。
  • 随后我们向服务端抛出我们的 HTTP 请求。
  • 服务端处理完我们的请求之后,把目标数据放在 HTTP 响应里返回给客户端。
  • 拿到响应数据的浏览器就可以开始走一个渲染的流程。渲染完毕,页面便呈现给了用户,并时刻等待响应用户的操作。
  • 关闭TCP连接(四次挥手)。
阅读全文 »

Event Loop

Event Loop即事件循环,是指浏览器或Node的一种解决javaScript单线程运行时不会阻塞的一种机制,也就是我们经常使用异步的原理。

进程和线程基本概念

拿出在教科书里的概念:

  • 1、调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位;
  • 2、并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行;
  • 3、拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源;
  • 4、系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。进程和线程的关系:
阅读全文 »

AOP 面向切片编程

AOP(面向切面编程) 的主要作用是把一些跟核心业务逻辑模块无关的功能抽离出来,这些跟业务逻辑无关的功能通常包括日志统计安全控制异常处理 等。把这些功能抽离出来之后,再通过 动态植入 的方式掺入业务逻辑模块中。这样做的好处首先是可以保持业务逻辑模块的 纯净高内聚性 ,其次是可以很方便地复用日志统计等功能模块。

阅读全文 »

深拷贝

1
JSON.parse(JSON.stringify(object))

该方法有以下几个问题:

  • 会忽略 undefined
  • 会忽略 symbol
  • 不能序列化函数
  • 不能解决循环引用的对象
  • 不能正确处理new Date()
  • 不能处理正则
1
2
3
4
5
6
7
8
9
10
11
let obj = {
name: '111',
a: undefined,
b: Symbol('111'),
c: function() {}
}
console.log(obj);

let b = JSON.parse(JSON.stringify(obj));
console.log(b);
// {name: "111"}
阅读全文 »

高阶函数

高阶函数英文叫 Higher-order function,它的定义很简单,就是至少满足下列一个条件的函数:

  • 函数作为返回值
  • 函数作为参数传递

也就是说高阶函数是对其他函数进行操作的函数,可以将它们作为参数传递,或者是返回函数。

函数作为参数传递

JavaScript 语言中内置了一些高阶函数,比如 Array.prototype.map,Array.prototype.filter 和 Array.prototype.reduce,它们接受一个函数作为参数,并使用这个函数作用到列表的每一个元素

阅读全文 »