WebGL | 青训营笔记

103 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的的第15天

image.png

web.eecs.umich.edu/~sugih/cour…

image.png

The Book of Shaders

thebookofshaders.com/

Mesh.js

glsl-doodle

SpriteJS

ThreeJS

ShaderToy

剑指 Offer 32 - II. 从上到下打印二叉树 II

从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。

 

例如:
给定二叉树: [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7

返回其层次遍历结果:

[
  [3],
  [9,20],
  [15,7]
]

 

提示:

  1. 节点总数 <= 1000

注意:本题与主站 102 题相同:leetcode-cn.com/problems/bi…

var levelOrder = function(root) {
    const ret = [];
    if (!root) {
        return ret;
    }

    const q = [];
    q.push(root);//初始队列
    while (q.length !== 0) {
        const currentLevelSize = q.length;//当前层节点的数量
        ret.push([]);//新的层推入数组
        for (let i = 1; i <= currentLevelSize; ++i) {//循环当前层的节点
            const node = q.shift();
            ret[ret.length - 1].push(node.val);//推入当前层的数组
            if (node.left) q.push(node.left);//检查左节点,存在左节点就继续加入队列
            if (node.right) q.push(node.right);//检查左右节点,存在右节点就继续加入队列
        }
    }
    return ret;
};

theme: smartblue

1. CPU的调度分为高级,中级和低级三种,其中低级调度是指?

高级调度是作业调度;中级调度是交换调度;低级调度是进程调度

2. 以下代码执行后,result的值变成什么?

var result=0;
function test(result){
 result=1;
}
test(2); 

答案:0

解释:result在方法内作为形参它的作用域仅限于这个方法,因此方法内的result=1并不会更改外界的result值

3. 以下代码执行后,result的值是什么?

function Test(name) { }
Test.name='Tom';
Test.prototype.name="John";
var result = (new Test('JK')).name;

答案:John

解释:实例化的对象从原型链上去找的name

不选Tom的原因是, 在ES5语法里, 构造函数的属性和方法必须放到函数的原型上, 实例才继承得到.

不选JK的原因是, 而后面实例里传的实参 'JK' ,在实例里没有变量接收, 等于没有实参使用, 必须在构造函数里this.name=name 接收好实参传递的值才行, 就像这样:

function Test(name) {
  this.name = name
}

不选undefined的原因是, 原型里有对应的变量, 实例就会直接调原型的变量

4. 变量el为一个 <div class="a">元素,哪段代码能得到其滚动内容的高度(   )

答案:el.scrollHeight

解释:ScrollHeight滚动内容高度。clientHeight可视内容高度 ScrollTop滚动过的高度

scrollHeight不是样式,是元素的属性

5. 对于有n 个结点的二叉树, 其高度为(    )

答案:unknown

一棵二叉树有n个元素,n>0,它的高度最大为n,最小高度为[log2n]+1。

6. 操作系统相关算法

最佳置换算法(OPT) (理想置换算法):从主存中移出永远不再需要的页面;如无这样的页面存在,则选择最长时间不需要访问的页面。于所选择的被淘汰页面将是以后永不使用的,或者是在最长时间内不再被访问的页面,这样可以保证获得最低的缺页率。 

最佳置换算法可以用来评价其他算法。假定系统为某进程分配了三个物理块,并考虑有以下页面号引用串:
7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1
进程运行时,先将7, 0, 1三个页面依次装入内存。进程要访问页面2时,产生缺页中断,根据最佳置换算法,选择第18次访问才需调入的页面7予以淘汰。然后,访问页面0时,因为已在内存中所以不必产生缺页中断。访问页面3时又会根据最佳置换算法将页面1淘汰

先进先出置换算法(FIFO) :是最简单的页面置换算法。这种算法的基本思想是:当需要淘汰一个页面时,总是选择驻留主存时间最长的页面进行淘汰,即先进入主存的页面先淘汰。其理由是:最早调入主存的页面不再被使用的可能性最大。

最近最久未使用(LRU)算法: 这种算法的基本思想是:利用局部性原理,根据一个作业在执行过程中过去的页面访问历史来推测未来的行为。它认为过去一段时间里不曾被访问过的页面,在最近的将来可能也不会再被访问。所以,这种算法的实质是:当需要淘汰一个页面时,总是选择在最近一段时间内最久不用的页面予以淘汰。再对上面的实例釆用LRU算法进行页面置换