跳至主要內容
数字电子技术——数据选择器

数据选择器的地址输入和数据输入怎么理解

以一个 4-1 数据选择器为例,它有 4 个数据输入线(D0, D1, D2, D3)、2 个选择输入线(S0, S1)和 1 个输出线(Y)。S0 和 S1 是地址输入,它们可以选择其中一个数据输入线作为输出线的数据。
例如,当 S0=0, S1=0 时,选择器会选择 D0 作为输出数据,因为 S0 和 S1 的二进制值为 00,对应的是选择器的第 1 个数据输入线 D0,而 D0 的数据输入则是指在 D0 输入线上输入的具体数字。
因此,地址输入和数据输入是数据选择器的两个重要的输入,用于选择和输出特定的数据。


ZiHao...大约 2 分钟专业课javascript
手写一些函数
  1. 二维数组斜向打印
(function () {
  function printMaxit(arr: number[][]) {
    let row = arr.length; //行 x
    let conlum = arr[0].length; //列 y
    let res: any = [];
    //左上角  从0开始打印到conlum-1;
    for (let k = 0; k < conlum; k++) {
      for (let i = 0, j = k; i < row && j >= 0; i++, j--) {
        res.push(arr[i][j]);
      }
    }
    //右下角
    for (let k = 1; k < row; k++) {
      for (let i = k, j = row; i < row && j >= 0; i++, j--) {
        res.push(arr[i][j]);
      }
    }
    return res;
  }
  const matrix2 = [
    [1, 2, 3, 4],
    [5, 6, 7, 8],
    [9, 10, 11, 12],
  ];
  console.log(printMaxit(matrix2));
  // 输出: [1, 5, 2, 9, 6, 3, 10, 7, 4, 11, 8, 12]
})();

ZiHao...大约 4 分钟记录javascript
手写Promise🧐简单版🚩
class MyPromise {
  constructor(executor) {
    // 初始化state为等待态
    this.state = "pending";
    // 成功的值
    this.value = undefined;
    // 失败的原因
    this.reason = undefined;
    let resolve = (value) => {
      // state改变,resolve调用就会失败
      if (this.state === "pending") {
        // resolve调用后,state转化为成功态
        this.state = "fulfilled";
        // 储存成功的值
        this.value = value;
      }
    };
    let reject = (reason) => {
      // state改变,reject调用就会失败
      if (this.state === "pending") {
        // reject调用后,state转化为失败态
        this.state = "rejected";
        // 储存失败的原因
        this.reason = reason;
      }
    };
    // 如果executor执行报错,直接执行reject
    try {
      executor(resolve, reject);
    } catch (err) {
      reject(err);
    }
  }
  then(onFulfilled, onRejected) {
    // 状态为fulfilled,执行onFulfilled,传入成功的值
    if (this.state === "fulfilled") {
      onFulfilled(this.value);
    }
    // 状态为rejected,执行onRejected,传入失败的原因
    if (this.state === "rejected") {
      onRejected(this.reason);
    }
  }
}

ZiHao...小于 1 分钟记录javascript
浏览器如何渲染的

面试题

浏览器是如何渲染页面的?

当浏览器的网络线程收到 HTML 文档后,会产生一个渲染任务,并将其传递给渲染主线程的消息队列。

在事件循环机制的作用下,渲染主线程取出消息队列中的渲染任务,开启渲染流程。


整个渲染流程分为多个阶段,分别是: HTML 解析、样式计算、布局、分层、绘制、分块、光栅化、画

每个阶段都有明确的输入输出,上一个阶段的输出会成为下一个阶段的输入。

这样,整个渲染流程就形成了一套组织严密的生产流水线。


渲染的第一步是解析 HTML


ZiHao...大约 5 分钟记录javascript
JS事件循环

用简单的流程解释事件循环

在了解什么是事件循环之前我们应该需要先行了解javascript是一个单线程语言JavaScript的事件分类;

JavaScript 是一个单线程语言

什么是单线程。举个例子:这就好像食堂打饭,需要排队,如果只有一个窗口可以进行打饭,那么就可以看作是单线程,如果有好多个窗口可以进行打饭,这就是多线程
同理,javascript中的所有任务都只有一条线程在处理。

显然这种机制会造成很多问题,如果一个任务卡死,那么整个都不能运行了,
或者其中有一个任务执行的很慢,那么后面所有的任务都会延迟执行,所以 JS 有了两个任务分类[同步任务]和[异步任务]


ZiHao...大约 5 分钟记录javascript
防抖与节流

防抖与节流

复习一下

function debounce(fn, delay) {
  let timerID = null;
  return function () {
    const context = this;
    if (timeID) {
      window.clearTimeout(timerID);
    }
    timerID = setTimeout(() => {
      fn.apply(context, arguments);
    }, delay);
  };
}

ZiHao...小于 1 分钟记录javascript
本周学习笔记

假期总结

  1. 复习了 Vue2 的内容,然后做了一个半的项目,总得来说 Vue2 确实不错,相比 Vue3 还是差点意思,Vue3 性能几乎翻倍,各种优化的非常好,但是 Vue3 毕竟出的时间不久,还是先从 Vue2 开始学习,弄懂 vue2 之后再进行 vue3 的学习,vue3 在用法上与 2 做了少许改变, 学习周期短,
  2. 完成了小组招新,我是第九组,怎么说呢,真希望他们坚持久一点,小组真的是一个学习的好地方,机会只有一次,大一的学习热情非常浓厚,我应该向他们学习,我现在大二了,激情有点褪去了,加油,自己感兴趣的东西,努力不留遗憾

ZiHao...小于 1 分钟记录javascriptnode.js
编写干净的JavaScript

我们应该编写不言自明、易于理解、易于修改或易于扩展新功能的代码。因为代码常常需要被阅读,这就是为什么如此强调干净代码的原因。

我们的源代码可读性越强,则:

越容易维护
新开发人员理解代码所需的时间越少
越容易发现哪些代码可以重用
在这篇文章中,我将分享一些通用的干净编码原则以及一些特定于 JavaScript 的干净编码实践。

  1. 命名
    不要把命名变成猜谜游戏。变量和函数的名称最好能够揭示最初创建的意图。
    如此一来,即使有新的开发人员加入团队,也不至于需要像看天书一样艰难地理解代码。
    Bad 👎

ZiHao...大约 6 分钟记录javascript
七个JavaScript的简写方法

多字符串检查

通常,如果我们需要检查字符串是否等于多个值中的一个,往往很快就会觉得疲惫不堪,性欲的是,JavaScript 有一个内置方法帮助你解决这个问题

// 普通写法
const isVowel = (letter) => {
  if (
    letter === "a" ||
    letter === "e" ||
    letter === "i" ||
    letter === "o" ||
    letter === "u"
  ) {
    return true;
  }
  return false;
};

// 简写方法
const isVowel = (letter) => ["a", "e", "i", "o", "u"].includes(letter);

ZiHao...大约 2 分钟记录javascript
JS对象复制

我们知道,赋值运算符不会创建对象的副本,只会分配对它的引用,请看以下代码:

let obj = {
  a: 1,
  b: 2,
};
let copy = obj;

obj.a = 5;
console.log(copy.a);
// Result
// a = 5;

ZiHao...大约 6 分钟记录javascript
2
3