2019-08 上旬

作者: Bougie 创建于: 2019-08-01 | 成长
  • 2019-08-10: css flex 相关的所有属性,并说明作用
好好想想先 😌
  • 参考链接
  • 一句话
    • 容器属性
      • display: flex
      • display: inline-flex
      • flex-direction
      • flex-wrap
      • flex-flow
      • justify-content
      • justify-items
      • align-items
      • align-content
    • 项目属性
      • flex
      • flex-basis
      • flex-shrink
      • flex-grow
      • justify-self
      • align-self

  • 2019-08-09: react router 5 新特性
好好想想先 😌
  • 参考链接
  • 一句话
    • One of the main new features in this release is the ability to use an array in , so if you want to render the same component at 2 different route paths, you no longer have to create 2 routes.
    • 因为写错版本号导致的大版本升级

  • 2019-08-08: react router 4 中 Switch 的作用
好好想想先 😌
  • 参考链接
  • 一句话
    • Switch 是唯一的因为它仅仅只会渲染一个路径。相比之下(不使用 Switch 包裹的情况下),每一个被 location 匹配到的 Route 将都会被渲染。

  • 2019-08-07: Node 中的 setImmediate 和 process.nextTick
好好想想先 😌
  • 参考链接

  • 一句话

    • Node 的异步语法比浏览器更复杂,因为它可以跟内核对话
    // test.js
    setTimeout(() => console.log(1))
    setImmediate(() => console.log(2))
    process.nextTick(() => console.log(3))
    Promise.resolve().then(() => console.log(4))
    ;(() => console.log(5))()
    // 5 3 4 1 2
    
    • 异步任务分为两种

      • 追加在本轮循环的异步任务
      • 追加在次轮循环的异步任务
    • 微任务

      • 根据语言规格,Promise 对象的回调函数,会进入异步任务里面的"微任务"(microtask)队列。
      • 微任务队列追加在 process.nextTick 队列的后面,也属于本轮循环。
    • 宏任务

      • setImmediate, setTimeout

  • 2019-08-07: Node 中的 Error 有哪些类型?对 throw 关键字的理解。
好好想想先 😌
  • 参考链接
  • 一句话
    • Node.js 应用程序一般会遇到以下四类错误:
      • 标准的 JavaScript 错误,例如
      • 由底层操作系触发的系统错误,例如试图打开不存在的文件、或试图使用已关闭的 socket 发送数据。
      • 由应用程序代码触发的用户自定义的错误。
      • AssertionError 错误,当 Node.js 检测到不应该发生的异常逻辑时触发。这类错误通常来自 assert 模块。
      • 所有由 Node.js 引起的 JavaScript 错误与系统错误都继承自或实例化自标准的 JavaScript 类,且保证至少提供类中的属性。
    • throw 语句允许您创建自定义错误。从技术上讲您能够抛出异常(抛出错误)。异常可以是 JavaScript 字符串、数字、布尔或对象:

  • 2019-08-06: Node cluster(集群) 作用及原理
好好想想先 😌
  • 参考链接
  • 一句话
    • 单个 Node.js 实例运行在单个线程中。 为了充分利用多核系统,有时需要启用一组 Node.js 进程去处理负载任务。
    • cluster 模块可以创建共享服务器端口的子进程。
    • 工作进程由 child_process.fork() 方法创建,因此它们可以使用 IPC 和父进程通信,从而使各进程交替处理连接服务。
    • cluster 模块允许设立一个主进程和若干个 worker 进程,由主进程监控和协调 worker 进程的运行。worker 之间采用进程间通信交换消息,cluster 模块内置一个负载均衡器,采用 Round-robin 算法协调各个 worker 进程之间的负载。运行时,所有新建立的链接都由主进程完成,然后主进程再把 TCP 连接分配给指定的 worker 进程。

  • 2019-08-05: preventDefault(), stopPropagation(), stopImmediatePropagation() 区别
好好想想先 😌
  • 参考链接
  • 一句话
    • preventDefault: 如果当前 event.cancelable 属性为 true,则取消的当前事件的默认动作,但不阻止当前事件的进一步传播
    • stopPropagation: 阻止当前冒泡或捕获阶段的进一步传播
    • stopImmediatePropagation: 阻止调用相同事件的其他监听器

  • 2019-08-04: child_process exec, spawn, fork, send 作用和区别
好好想想先 😌
  • 参考链接

  • 一句话

    • exec 方法执行一个命令,返回一个流对象,也可以用回调函数的方式
    var exec = require('child_process').exec
    var child = exec('ls -l')
    child.stdout.on('data', function(data) {
      console.log('stdout: ' + data)
    })
    child.stderr.on('data', function(data) {
      console.log('stdout: ' + data)
    })
    child.on('close', function(code) {
      console.log('closing code: ' + code)
    })
    
    • spawn 没有回调函数,需拆分参数,返回一个流对象
    var ls = child_process.spawn('/bin/ls', ['-l', '.'])
    
    • child_process.exec 返回整个子进程处理时产生的 buffer,这个 buffer 默认大小是 200K。 当子进程返回的数据超过默认大小时,程序就会产生”Error: maxBuffer exceeded”异常
    • spawn 没有 maxBuffer 限制
    • fork 方法直接创建一个子进程,执行 Node 脚本
    // main.js
    var n = child_process.fork('./child.js')
    n.on('message', function(m) {
      console.log('PARENT got message:', m)
    })
    n.send({ hello: 'world' })
    
    // child.js
    process.on('message', function(m) {
      console.log('CHILD got message:', m)
    })
    process.send({ foo: 'bar' })
    
    • send 用于 fork 进程间的通信

  • 2019-08-03: child_process 原理 ?如何和主进程通信 ?
好好想想先 😌
  • 参考链接
  • 一句话
    • Nodejs 运行时刻的主进程既是 Event Loop 进程,通过该进程可以创建出任意多个子进程( Child Process ),并且子进程和父进程维护了三个特殊的管道,分别是 stdin、stdout 以及 stderr 这样的三个管道,父进程和子进程可以通过这些管道实现无阻塞( non-blocking) 的通讯方式
    • 通过标准输入输出和主进程通信
    child.stdout.on('data', (data) => {
      console.log(`child stdout: ${data}`)
    })
    child.stderr.on('data', (data) => {
      console.error(`stderror ${data}`)
    })
    

  • 2019-08-02: 如何理解 NodeJS 中的 Buffer ?有哪些方法 ? 有何应用 ?
好好想想先 😌
  • 参考链接
  • 一句话
    • Buffer 是在内存中开辟的一片区域,用于存放二进制数据。Buffer 所开辟的是堆外内存。
    • 主要应用于流和存储需要占用大量内存的数据
    • Buffer.from(array | string | object | bufferArray) - 创建一个 buffer
    • Buffer.alloc(size) - 分配内存空间

  • 2019-08-01: 解释线程、进程,并行、并发,同步、异步,阻塞、非阻塞
好好想想先 😌
  • 参考链接
  • 一句话
    • 线程和进程
      • 一个程序至少有一个进程,一个进程至少有一个线程
      • 进程(英语:process),是指计算机中已运行的程序。进程为曾经是分时系统的基本运作单位。在面向进程设计的系统(如早期的 UNIX,Linux 2.4 及更早的版本)中,进程是程序的基本执行实体;在面向线程设计的系统(如当代多数操作系统、Linux 2.6 及更新的版本)中,进程本身不是基本运行单位,而是线程的容器。
      • 线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。在 Unix System V 及 SunOS 中也被称为轻量进程(lightweight processes),但轻量进程更多指内核线程(kernel thread),而把用户线程(user thread)称为线程。
    • 并行和并发
      • 并发:一个处理器同时处理多个任务。
      • 并行:多个处理器或者是多核的处理器同时处理多个不同的任务.
      • 前者是逻辑上的同时发生(simultaneous),而后者是物理上的同时发生。
    • 同步和异步
      • 同步是阻塞模式,异步是非阻塞模式。
      • 同步就是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么这个进程将会一直等待下去,知道收到返回信息才继续执行下去;
      • 异步是指进程不需要一直等下去,而是继续执行下面的操作,不管其他进程的状态。当有消息返回式系统会通知进程进行处理,这样可以提高执行的效率。
上次更新: 2019-8-18 17:44:13