ARTS第七周

Algorithm

// https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/description/?utm_source=LCUS&utm_medium=ip_redirect&utm_campaign=transfer2china

/**
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
*/
/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number}
 */
var maxDepth = function(root) {
  if(!root) return 0;
  if(!root.left && !root.right) return 1
  return 1 + Math.max(maxDepth(root.left), maxDepth(root.right))
};
// 使用递归是很好实现这个功能的。
// 下面我们用迭代的方式来解决这个问题
var maxDepth = function(root) {
  if(!root) return 0;
  if(!root.left && !root.right) return 1
  
  // 层次遍历法 BFS
  let cur = root;
  const queue = [root, null]
  let depth = 1
  
  // 利用null来做分界线,然后判断一些queue长度,来看是否还有子节点。
  // 利用了队列的特性,先进在后面,两头都可以出
  while ((cur = queue.shift()) !== undefined) {
    if(cur === null) {
      if(queue.length === 0) return depth
      depth ++
      queue.push(null)
      continue
    }
    const l = cur.left
    const r = cur.right
    
    if(l) queue.push(l)
    if(r) queue.push(r)
  }
  
  return depth
};

review

web端实现一个远程桌面,进行集成测试,

https://www.yuque.com/artist/f2etest/intro,

阿里的开源软件

在这里插入图片描述

涉及技术

1: RDP 协议 (https://zh.wikipedia.org/wiki/%E9%81%A0%E7%AB%AF%E6%A1%8C%E9%9D%A2%E5%8D%94%E5%AE%9A)

2:canvas 绘制

3:webscoket通信 (https://zh.wikipedia.org/wiki/WebSocket)

4: 远程桌面网关apache Guacamole (https://guacamole.apache.org/)

基础流程是:浏览器加载html后,使用websocket 与server 进行通信,server 有一套程序来解析rdp数据,将实际机上屏幕数据,分成不同的块,转换成前端可以理解的位图信息。使用websocket 发送给前端,前端

使用canvas的drawimage API来进行绘制,对多个图片进行绘制拼接后,就形成了完成的“远程桌面”。

来让这一整套走通是使用了Apache Guacamole的技术 ,该技术主要由https://enterprise.glyptodon.com/公司贡献。

tip

平常还是要多关注使用的第三方库或者框架的版本升级信息,这两天做react项目升级,其中react15,升级到react16.8,react部分还好,主要就是createClass,以及不能使用ref="11111"这样的方式,别的没有太多问题,然后router从3到4的时候,大功能上的坑也好改,有个细节的地方,报错也不报,但是一致影响,排错很久,才知道,props.location上,router3的时候,有一个query属性,会把url上,?的后面的给解析成对象,ruoter4却没有了。只有一个search了

share

当有复杂运算,会阻塞当前js线程影响ui渲染的时候,可以使用这个api,Web Worker,Web Worker为Web内容在后台线程中运行脚本提供了一种简单的方法。线程可以执行任务而不干扰用户界面。

https://developer.mozilla.org/zh-CN/docs/Web/API/Web_Workers_API/Using_web_workers

你可能感兴趣的:(js开发,架构设计之路)