2025.11.18

Overview

  1. 近期总结
  2. 终极目标进程

近期总结

距离上一次博客已经过去一周了,自从进入后半学期后明显开始忙碌起来了,而且好几个活动赶在一起使得这一周多的时间过的飞快。

终极目标进程

简单的学习了HTML、CSS、JavaScript,接下来打算学下scss、vue、vite

2025.11.11

Overview

  1. 昨日总结
  2. 学习笔记
  3. 今日总结

昨日总结

昨天从早上集合后前往上海参加本周的城市之旅活动,逛了几处没去过的地方,不过最大的收获是从一个来参加的老师那里得知了一个日后会常驻举办的活动——宠物交流活动,以后每周有一次带摩羯出去和别的宠物交流的机会,希望借此机会让它的胆子变大吧,而且希望可以人生同样有爱的主人吧
不过可惜的是昨天因为行程安排不妥导致昨天没能赶上晚上的飞盘训练,之后的活动不能再犯同样的错误了

学习笔记

计算机体系结构与操作系统

MIPS 汇编语言入门

  1. 计算机抽象层级与指令基础
    1. 抽象层级(从高到低):应用软件→操作系统→架构(程序员视角,定义指令 / 操作数位置)→微架构(硬件实现细节)→逻辑→数字电路→模拟电路→器件→物理
    2. 指令分类:
      1. 机器语言:二进制码(如01101010 10101101),计算机可直接识别
      2. 汇编语言:机器语言的符号表示(如add $s0,$s1,$s2),需汇编器转换
  2. MIPS 架构概述
    1. 学习价值:作为 RISC 架构代表,掌握后易迁移到其他架构
    2. 核心特点:
      1. 32 位架构:操作 32 位数据,含32 个 32 位通用寄存器(速度远快于内存,减少访问延迟)
      2. load/store 架构:仅通过lw(加载)/sw(存储)指令访问内存,其他指令操作寄存器
      3. 固定指令长度:所有指令均为 32 位,简化硬件解码
  3. 基础算术与逻辑操作
    1. 核心指令格式:多数指令为 “目标寄存器,源寄存器 1,源寄存器 2”(如add $d, $s, $t)
    2. 算术指令:
      1. add $d, $s, $t:$d = $s + $t
      2. sub $d, $s, $t:$d = $s - $t
      3. addi $d, $s, imm:$d = $s + imm (add后面的i意味计算里使用了数字)
    3. 复杂表达式实现:需拆分多指令,如 C 代码a=b+c-d对应:
      add $t0, $s1, $s2 # $t0 = b + c(临时寄存器存中间结果)
      sub $s0, $t0, $s3 # $s0 = $t0 - d = b + c - d
  4. 内存访问基础
    1. 内存需求:寄存器仅 32 个,无法存储大量数据,需依赖内存(容量大但速度慢)
    2. 寻址模式:
      1. 字寻址:每个 32 位数据(字)对应唯一字地址
    3. 字节寻址:MIPS 实际采用字节寻址(每个字节 1 个地址),字地址 = 字节地址 ×4(因 1 字 = 4 字节),示例:字 2 的字节地址为 8(2×4)
    4. 内存操作指令:
      1. 加载字:lw $d, offset($base) -> d = 内存[base + offset](示例:读取字节地址4的字到s3,指令lw $s3,4($0))
      2. 存储字:sw $s, offset($base) -> s = 内存[base + offset]()(示例:将t4存入字节地址7,指令sw $t4,0x7($0))
      3. 加载字节(lb)/ 存储字节(sb):操作单个字节数据

逻辑指令、移位、数组与函数调用

  1. 逻辑指令
    1. 核心指令(操作寄存器或立即数):
      1. and $d, $s, $t:$d = $s & $t (用于位掩码,如保留低 8 位:0xF234012F & 0x000000FF = 0x0000002F)
      2. or $d, $s, $t:$d = $s | $t (用于组合位域,如0xF2340000 | 0x000012BC = 0xF23412BC)
      3. xor $d, $s, $t:$d = $s ^ $t (位异或)
      4. nor $d, $s, $t:d= (s | $t) (位或非,用于取反:A nor 0 = ~A)
      5. 立即数逻辑指令:andi、ori、xori(16 位立即数零扩展,无nori)
  2. 移位指令
    1. 指令类型(移位量可为立即数或寄存器):
      1. sll $d, $s, shamt:逻辑左移 → $d = $s << shamt(高位补 0,示例:sll $t0,$t1,5 → t0=t1 左移 5 位)
      2. srl $d, $s, shamt:逻辑右移 → $d = $s >> shamt(低位补 0)
      3. sra $d, $s, shamt:算术右移 → $d = $s >>> shamt(高位补符号位,用于有符号数)
    2. 应用:左移 1 位等价于 ×2,左移 3 位等价于 ×8(如 C 代码a=2*b对应sll $t0,$s1,1)
  3. 常量生成与乘除操作
    1. 32 位常量生成:MIPS 立即数仅 16 位,需组合lui(加载高位立即数)和ori:
      1. 示例:C 代码int a=0xFEDC8765对应:
        lui $s0, 0xFEDC # $s0 = 0xFEDC0000(加载高16位)
        ori $s0, $s0, 0x8765 # $s0 = 0xFEDC0000 | 0x8765 = 0xFEDC8765
    2. 乘除操作:依赖专用寄存器hi(高位结果)和lo(低位结果):
      1. 乘法:mult $s, $t → 结果(64 位)存入 {hi, lo},需mfhi $d(读取 hi)、mflo $d(读取 lo)
      2. 除法:div $s, $t → 商存入 lo,余数存入 hi,同样通过mfhi/mflo读取
  4. 数组操作
    1. 数组存储:数组元素连续存储,基地址为首个元素地址(如 5 元素数组 base=0x12348000,元素地址为 base、base+4、base+8 等)
    2. 单元素操作示例:
      C 代码:
      1
      array[0] *=2; array[1] *=2(base=0x12348000)
      汇编代码:
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      lui $s0, 0x1234       # $s0 = 0x12340000
      ori $s0, $s0, 0x8000 # $s0 = 0x12348000(数组基地址)

      lw $t1, 0($s0) # $t1 = array[0]
      sll $t1, $t1, 1 # $t1 = array[0] * 2
      sw $t1, 0($s0) # array[0] = $t1

      lw $t1, 4($s0) # $t1 = array[1]
      sll $t1, $t1, 1 # $t1 = array[1] * 2
      sw $t1, 4($s0) # array[1] = $t1
    3. for 循环操作数组:
      C 代码:
      1
      for(i=0;i<1000;i++) array[i] *=8
      汇编代码:
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      # 初始化:$s0=数组基址(0x23B8F000),$s1=i=0,$t2=1000
      lui $s0, 0x23B8
      ori $s0, $s0, 0xF000
      addi $s1, $0, 0
      addi $t2, $0, 1000

      loop:
      slt $t0, $s1, $t2 # $t0=1(i<1000),否则0
      beq $t0, $0, done # 若i>=1000,跳至done
      sll $t0, $s1, 2 # $t0 = i*4(字节偏移)
      add $t0, $t0, $s0 # $t0 = array[i]地址
      lw $t1, 0($t0) # $t1 = array[i]
      sll $t1, $t1, 3 # $t1 = array[i] *8(左移3位)
      sw $t1, 0($t0) # array[i] = $t1
      addi $s1, $s1, 1 # i = i+1
      j loop # 跳回loop

      done:
  5. 函数调用机制
    1. 核心概念:
      1. 调用者(Caller):发起调用的函数(如 main)
      2. 被调用者(Callee):被调用的函数(如 sum)
    2. MIPS 函数调用约定
      1. 传参:前 4 个参数通过a0−a3 传递,超过 4 个需用栈
      2. 返回值:通过v0−v1 返回
      3. 跳转与返回:jal(jump and link)指令跳转(同时将返回地址存入$ra),jr $ra(jump register)指令返回
    3. 简单函数示例:
      C 代码:
      1
      2
      3
      4
      5
      6
      7
      8
      void main(){simple(); a=b+c;} void simple(){return;}
      ```
      汇编代码:
      ```asm
      0x00400200 main: jal simple # 跳至simple,$ra=0x00400204(下一条指令地址)
      0x00400204 add $s0, $s1, $s2 # a=b+c
      ...
      0x00401020 simple: jr $ra # 跳回$ra(0x00400204)
  6. 分支、循环、栈内存与寻址方式
    1. 条件标志(CPSR 寄存器):
      标志位 名称 含义
      N Negative(负) 指令结果为负(结果第 31 位为 1)
      Z Zero(零) 指令结果为 0
      C Carry(进位) 指令执行产生进位 / 借位
      V Overflow(溢出) 指令执行产生溢出
    2. 分支指令(流程跳转):用于 “打破顺序执行”,分为条件分支(满足条件才跳)和无条件分支(强制跳),依赖 CPSR 寄存器的标志位(N/Z/C/V)判断条件,核心分支指令如下:
      指令类型 指令 格式 功能 示例
      条件分支 beq beq $s, $t, label 若$s == $t,跳 label beq $s0, $s1, target(s0==s1 跳 target)
      bne bne $s, $t, label 若$s != $t,跳 label bne $s0, $s1, target(s0!=s1 跳 target)
      无条件分支 j j label 强制跳 label(直接使用地址) j target(跳 target)
      jr jr $s 强制跳 $s 存储的地址(寄存器间接跳转) jr $ra(跳 $ra 地址,函数返回)
      jal jal label 跳 label,并将返回地址存入 $ra jal sum(调用 sum,保存返回地址)
    3. 循环与条件语句(if/while/for)
      1. MIPS 通过 “分支指令 + 跳转指令” 实现高级语言的条件与循环逻辑,核心是 “判断条件→跳转到对应代码块”
      2. if 语句示例
        C 代码:
        1
        2
        3
        4
        5
        6
        7
        8
        if(i == j) f = g + h; f = f - i;(s0=f,s1=g,s2=h,s3=i,$s4=j)
        ```
        汇编代码:
        ```asm
        bne $s3, $s4, L1 # 若i!=j,跳L1(跳过if体)
        add $s0, $s1, $s2 # if体:f = g + h(i==j时执行)
        L1:
        sub $s0, $s0, $s3 # 无论if是否执行,都执行f = f - i
      3. if-else 语句示例
        C 代码:
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        if(i == j) f = g + h; else f = f - i;
        ```
        汇编代码:
        ```asm
        bne $s3, $s4, L1 # 若i!=j,跳L1(执行else)
        add $s0, $s1, $s2 # if体:f = g + h
        j done # 跳done,跳过else
        L1:
        sub $s0, $s0, $s3 # else体:f = f -i
        done:
      4. while 循环示例
        C 代码:
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        int pow=1, x=0; while(pow!=128) { pow*=2; x++; }  (s0=pow,s1=x)
        ```
        汇编代码:
        ```asm
        addi $s0, $0, 1 # pow=1
        add $s1, $0, $0 # x=0
        addi $t0, $0, 128 # $t0=128 (循环终止条件)
        while:
        beq $s0, $t0, done # 若pow==128,跳done (终止循环)
        sll $s0, $s0, 1 # pow = pow*2 (左移1位)
        addi $s1, $s1, 1 # x = x+1
        j while # 跳回while,继续循环
        done:
      5. for 循环示例
        C 代码:
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        int sum=0, i; for(i=0; i!=10; i++) sum +=i; (s0=i,s1=sum)
        ```
        汇编代码:
        ```asm
        addi $s1, $0, 0 # sum=0
        add $s0, $0, $0 # i=0
        addi $t0, $0, 10 # $t0=10 (循环终止条件)
        for:
        beq $s0, $t0, done # 若i==10,跳done (终止循环)
        add $s1, $s1, $s0 # sum = sum +i
        addi $s0, $s0, 1 # i = i+1
        j for # 跳回for,继续循环
        done:
    4. 栈内存深度应用(多函数嵌套与递归)
      1. 栈的核心特性是 “LIFO(后进先出)”,生长方向为 “高地址→低地址”,$sp始终指向栈顶,主要用于:
        1. 保存被调用者需保留的寄存器(s0−s7、$ra)
        2. 传递超过 4 个的函数参数
        3. 存储递归函数的中间变量
      2. 多函数嵌套(保存 $ra)
        若函数 A 调用函数 B,函数 B 再调用函数 C,jal B会覆盖$ra中 A 的返回地址,因此 B 需先将$ra压栈,再调用 C,示例:
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        proc1: # 函数A: 调用proc2
        addi $sp, $sp, -4 # 栈扩容4字节(存$ra)
        sw $ra, 0($sp) # 保存proc1的返回地址到栈
        jal proc2 # 调用proc2,$ra被更新为proc1中jal后的地址
        lw $ra, 0($sp) # 恢复proc1的返回地址
        addi $sp, $sp, 4 # 栈缩容4字节
        jr $ra # 返回proc1的调用者

        proc2: # 函数B: 被proc1调用
        jr $ra # 返回proc1 ($ra存储proc1中jal后的地址)
      3. 递归函数示例(阶乘)
        C 代码:
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        22
        23
        24
        25
        26
        27
        28
        29
        30
        31
        32
        33
        34
        35
        36
        37
        38
        39
        40
        41
        42
        43
        int factorial(int n) { return n==1 ? 1 : n*factorial(n-1); }
        ```
        汇编代码($a0=n,$v0= 返回值):
        ```asm
        .data
        n: .word 5 # 计算5的阶乘

        .text
        .globl main
        main:
        lw $a0, n # $a0 = 5 (传入factorial的参数)
        jal factorial # 调用factorial
        # 打印结果
        li $v0, 1 # 系统调用1:打印整数
        move $a0, $v0 # $a0 = 阶乘结果 (factorial的返回值)
        syscall
        # 退出程序
        li $v0, 10 # 系统调用10: 退出
        syscall

        factorial:
        # 1. 栈扩容8字节 (存$ra和$a0,递归需保存n)
        addi $sp, $sp, -8
        sw $ra, 4($sp) # 保存当前返回地址到栈偏移4
        sw $a0, 0($sp) # 保存当前n到栈偏移0

        # 2. 递归终止条件: n==1
        li $v0, 1 # $v0=1 (终止条件返回值)
        beq $a0, $v0, base_case # 若n==1,跳base_case

        # 3. 递归调用: factorial(n-1)
        addi $a0, $a0, -1 # $a0 = n-1
        jal factorial # 调用factorial(n-1),$ra更新为当前jal后的地址

        # 4. 计算n * factorial(n-1)
        lw $a0, 0($sp) # 恢复当前n (从栈中取)
        mul $v0, $a0, $v0 # $v0 = n * factorial(n-1) (返回值)

        # 5. 恢复寄存器+栈缩容
        base_case:
        lw $ra, 4($sp) # 恢复返回地址
        addi $sp, $sp, 8 # 栈缩容8字节
        jr $ra # 返回调用者

今日总结

  1. 今天速学了html和css的一些基础知识

2025.11.7

Overvirw

  1. 静态网站项目准备与学习
  2. 今日总结

静态网站项目准备与学习

  1. 浏览器开发者工具的初步接触
    1. 首先在项目文件夹中调试.html文件,进入浏览器里的静态网页
    2. 在浏览器中按 F12 来打开开发者工具
    3. 用「源」选项卡编辑 JS 文件
      点击开发者工具中的源代码 -> 点击“+手动添加文件夹” -> 选择项目文件夹打开并允许编辑文件 (这样就可以直接编辑外部.html、.js文件并保存(CTRL + S))
      注意:必须手动添加文件夹才能够编辑并保存文件内容
  2. 本地开发服务器
    1. 使用方法:使用Python内置服务器,在PyCharm的终端中输入:
      python -m http.server 8000
      之后就可以在服务器中通过http://协议访问对应的网页
    2. 作用:在本地搭建一个简单的 Web 服务器,以便在开发静态页面(HTML/CSS/JavaScript)时进行本地预览
      1. 模拟线上环境,避免本地文件访问限制
      2. 方便本地调试与实时预览
      3. 为后续部署到 GitHub Pages 做验证
    3. 注意
      1. 每次想要打开本地服务器必须先在PyCharm的终端中执行上面的命令,否则打不开对应网页
      2. 其实在PyCharm终端中执行的代码的本质是创建当前打开文件的本地服务器,所以想要打开必须要先打开对应项目文件夹再执行上面的代码
  3. GitHub Desktop
    1. 下载GitHub Desktop,并登录GitHub账号,并克隆GitHub库到软件内
    2. 使用方法:
      1. 可以通过本地电脑的文件操作或者PyCharm中修改文件后在GitHub Desktop软件内对该次改变进行描述并上传,就可以将改变推送到远程的GitHub库里
  4. 过程中的改变
    1. 将静态网站项目的文件夹内的.html、.sj、.css文件移动到同一个目录下,并创建assets文件夹用于后续存放图片字体等,最后在每一个项目文件夹里加入了.md的项目介绍文件
    2. 在F盘中创建用于存放GitHub库的文件夹,并在里面创建blog文件夹用于存放与博客相关的内容,并把之前pynote1文件夹复制到该文件夹内,使得以后可以通过编写该文件夹内的文件来上传到GitHub库里

今日总结

1.

2025.11.6

Summary

  1. 今天把《墨菲定律》看完了,整体读下来发现这本书就是一个如何提升自我的工具书,书中从各种心理学效应出发,对于不同的情景下自己该怎么做给出了建议
  2. 今天把一门课的一个作业做完了
  3. 今天的飞盘活动原本还因为下雨没什么人打算散场了,结果到最后变成十几个人的大部队,而且在活动中得知了接下来还会有野餐团建,期待快点到来

2025.11.5

Overview

  1. 昨日总结
  2. 学习笔记
  3. 今日总结

昨日总结

  1. 昨天去看牙了,最后拔掉了一颗智齿,还是比想象中轻松的,虽然到了晚上会有点疼但是可以忍受
  2. 昨天在中途休息的时候去到了一家特别大的书店,在里面逛了一圈后我买了6本书,并且成功用一天的时间看完了一本《追逐繁星的孩子》,接下来也要继续多多看书
  3. 晚上继续带摩羯出去锻炼胆量,明显还是一到外面的环境里就害怕

学习笔记

计算机体系结构与操作系统

  1. 数制系统
    1. 核心概念:数制是表示数字的 “规则”,计算机底层仅能识别二进制(0 和 1),但为了简化表示,会用到十进制(日常使用)和十六进制(简化二进制书写)
    2. 二进制转十进制:按权展开法
      二进制数的每一位都有 “权重”,权重为 2 的 “位数 - 1” 次方(从右往左,位数从 0 开始)。将每一位数字乘以对应权重,再求和,即可得到十进制数。
    3. 十进制转二进制:除 2 取余法
      将十进制数反复除以 2,记录每次的余数(余数为 0 或 1),最后将余数从后往前排列,即可得到二进制数。
    4. 二进制与十六进制转换:十六进制的 1 位对应二进制的 4 位(因为 16=2⁴),转换时只需将二进制数按 4 位分组(不足 4 位补 0),再将每组转换为对应的十六进制数即可
  2. 逻辑门:数字电路的 “基本积木”
    1. 单输入逻辑门
      1. NOT 门(非门):功能是 “取反”,输入为 0 时输出 1,输入为 1 时输出 0。
      2. 缓冲器(BUF):功能是 “保持输入”,输入为 0 时输出 0,输入为 1 时输出 1(相当于 “无操作”,主要用于增强信号)
    2. 双输入逻辑门:核心双输入逻辑门的功能:
      逻辑门类型 功能描述 逻辑表达式
      AND 门(与门) 只有 A、B 都为 1 时,Y 才为 1 Y=A・B(“・” 表示与)
      OR 门(或门) A、B 只要有一个为 1,Y 就为 1 Y=A+B(“+” 表示或)
      XOR 门(异或门) A、B 不同时,Y 为 1;相同为 0 Y=A⊕B
      NAND 门(与非门) 只有 A、B 都为 1 时,Y 为 0(AND 门取反) Y=¬(A·B)
      NOR 门(或非门) A、B 只要有一个为 1,Y 就为 0(OR 门取反) Y=¬(A+B)
  3. 组合逻辑电路
    1. 核心定义:组合逻辑电路是由多个逻辑门组成的电路,无记忆功能—— 输出仅由当前输入决定,与过去的输入无关
    2. 电路组成与描述方式:
      描述组合逻辑电路的核心方式是 “布尔方程”—— 用逻辑运算符(・、+、¬)表示输入与输出的关系
      组合逻辑电路的组成包括三部分:
      1. 输入:外部信号来源(如传感器信号,用 A、B、C 等变量表示)
      2. 内部节点:电路中间的信号节点(如多个门之间的连接点,用 n1、n2 等表示)
      3. 输出:电路最终的信号(如机器启动信号,用 Y、Z 等变量表示)
  4. 布尔代数
    1. 核心定义:布尔代数是描述逻辑关系的 “数学工具”,变量仅取值 0 或 1(对应假和真),运算包括与(・)、或(+)、非(¬),主要用于简化布尔方程(减少逻辑门数量,降低电路成本)
    2. 核心公理(基础规则,无需证明)
      布尔代数的公理是推导所有定理的基础,核心公理及对偶公理(将 “・” 与 “+” 互换、0 与 1 互换,公理仍成立)如下表:
      公理编号 公理内容 对偶公理(A’) 含义说明
      A1(二进制域) B=0,若 B≠1 B=1,若 B≠0 变量仅取 0 或 1(二进制域)
      A2(非运算(NOT)) ¬0=1 ¬1=0 非运算的基本规则
      A3(与 / 或运算(AND/OR)) 0·0=0 1+1=1 与 / 或运算的边界情况
      A4(与 / 或运算(AND/OR)) 1·1=1 0+0=0 与 / 或运算的边界情况
      A5(与 / 或运算(AND/OR)) 0·1=1·0=0 1+0=0+1=1 与 / 或运算的交换性边界情况
    3. 核心定理(可通过公理推导,需记忆)
      布尔代数的定理是简化方程的关键,常用定理及对偶定理如下表(B、C、D 为布尔变量):
      定理名 定理内容 对偶定理(T’) 含义说明
      Identity Theorem(同一律) B·1=B;B+0=B B+1=1;B·0=0 与 1 相乘 / 或 0 相加,结果不变
      Null Element Theorem(零律) B·0=0;B+1=1 B+0=0;B·1=1 与 0 相乘 / 或 1 相加,结果为 0/1
      Idempotency Theorem(幂等律) B·B=B;B+B=B B+B=B;B·B=B 与 / 或自身,结果不变
      Involution Theorem(对合律) ¬(¬B)=B ¬(¬B)=B 两次非运算,结果还原
      Complement theorem(互补律) B·¬B=0;B+¬B=1 B+¬B=1;B·¬B=0 与自身非相乘为 0,相加为 1
      Commutativity(交换律) B·C=C·B;B+C=C+B B+C=C+B;B·C=C·B 与 / 或运算的顺序不影响结果
      Associativity(结合律) (B·C)·D=B·(C·D);(B+C)+D=B+(C+D) (B+C)+D=B+(C+D);(B·C)·D=B·(C·D) 与 / 或运算的分组不影响结果
      Distributivity(分配律) B·(C+D)=B·C+B·D;B+C·D=(B+C)·(B+D) B+(C·D)=(B+C)·(B+D);B·(C+D)=B·C+B·D 与对或 / 或对与的分配规则
      Covering(覆盖律) B·(B+C)=B;B+(B·C)=B B+(B·C)=B;B·(B+C)=B 变量与自身和 / 积,结果为自身
      Combining(合并律) B·C+B·¬C=B;(B+C)·(B+¬C)=B (B+C)·(B+¬C)=B;B·C+B·¬C=B 提取相同变量,合并不同变量
      Consensus(共识律) B·C+¬B·D+C·D=B·C+¬B·D;(B+C)·(¬B+D)·(C+D)=(B+C)·(¬B+D) (B+C)·(¬B+D)·(C+D)=(B+C)·(¬B+D);B·C+¬B·D+C·D=B·C+¬B·D 消除冗余的共识项
      De Morgan’s Theorem(德摩根定律) ¬(B·C)=¬B+¬C;¬(B+C)=¬B·¬C ¬(B+C)=¬B·¬C;¬(B·C)=¬B+¬C 与的非等于非的或,或的非等于非的与
  5. 数字构建块
    1. 组合逻辑电路
      1. 核心特性:无记忆功能,输出仅由当前输入决定,包含输入(如 A、B、C)、输出(如 Y、Z)和内部节点(如 n1),通过电路元素(E1、E2、E3)实现逻辑关系,可用布尔方程描述(如 n1=E1 (A,B)、Z=E2 (A,C)、Y=E3 (n1,B,Z))
      2. 常用组件:
        1. 多路复用器(Mux):从 N 个输入中选择 1 个输出,需log(2)N位选择信号(S)。以 2:1 Mux 为例,选择信号 S=0 时输出 D0,S=1 时输出 D1,其真值表如下:
          S D1 D0 Y
          0 0 0 0
          0 0 1 1
          0 1 0 0
          0 1 1 1
          1 0 0 0
          1 0 1 0
          1 1 0 1
          1 1 1 1
        2. 解码器:N 个输入对应2^N个输出,采用 “独热编码”(仅 1 个输出为高电平)。以 2:4 Decoder 为例,输入 A1、A0 控制输出 Y3-Y0,真值表关键逻辑为:A1A0=00 → Y0=1;A1A0=01 → Y1=1;A1A0 = 10 → Y2=1;A1A0=11 → Y3=1
        3. 移位器:分三类,具体功能及示例(输入 11001)如下:
          类型 功能 示例(输入 11001)
          逻辑移位器 左右移位,空位补 0 右移 2 位:11001>>2=00110;左移 2 位:11001<<2=00100
          算术移位器 左移同逻辑移位,右移空位补最高有效位(MSB) 右移 2 位:11001>>>2=11110;左移 2 位:11001<<<2=00100
          旋转移位器 循环移位,移出位补到另一端 右旋转 2 位:11001 ROR 2=01110;左旋转 2 位:11001 ROL 2=00111
    2. 时序逻辑电路
      1. 核心特性:有短期记忆功能,通过输出到输入的反馈存储信息,能为事件提供时序顺序
      2. 基础电路:双稳态电路,可存储 1 位状态(Q),存在两种稳定状态:Q=0 时¬Q=1;Q=1 时¬Q=0,但无输入控制状态
      3. 常用组件
        1. S-R 锁存器:含置位(S)、复位(R)输入,四种工作状态如下:
          1. S=1、R=0:置位,Q=1、¬Q=0
          2. S=0、R=1:复位,Q=0、¬Q=1
          3. S=0、R=0:保持,Q=Q_prev(前一状态)
          4. S=1、R=1:无效,Q=0、¬Q=0(Q≠¬Q)
        2. D 锁存器:含时钟(CLK)、数据(D)输入,避免 S-R 锁存器的无效状态
          1. CLK=1:透明模式,D 直接传递到 Q
          2. CLK=0:不透明模式,Q 保持前一状态(Q_prev)
        3. D 触发器:边沿触发(仅时钟上升沿有效),输入为 CLK 和 D
          1. 时钟从 0→1(上升沿):采样 D 值并传递到 Q
          2. 其他时刻:Q 保持前一状态,仅在上升沿变化
  6. 算术组件
    1. 加法器
      1. 半加器:仅处理 2 位输入(A、B),输出和(S)与进位输出(Cout),真值表如下:
        A B Cout S
        0 0 0 0
        0 1 0 1
        1 0 0 1
        1 1 1 0
      2. 全加器:在半加器基础上增加进位输入(Cin),处理 3 位输入(A、B、Cin),输出和(S)与进位输出(Cout),真值表含 8 种输入组合,关键逻辑为 S=A⊕B⊕Cin、Cout=AB+ACin+BCin
      3. 纹波进位加法器:将多个 1 位全加器链式连接,进位信号从低位向高位 “ripple” 传递,缺点是速度慢(依赖进位传递延迟)
    2. 减法器
      1. 含输入 X(被减数)、Y(减数)、借位输入(Bin),输出差值(D)、借位输出(Bout),核心逻辑如下:
        1. 无 Bin 时:D=X⊕Y,Bout=X⋅Y
        2. 有 Bin 时,D=X⊕Y⊕Bin,Bout=XBin+XY+YBin
    3. 算术逻辑单元(ALU)
      1. 通过 2 位控制信号(ALUControl [1:0])选择运算功能,是处理器核心算术逻辑组件,功能表如下:
        ALUControl[1:0] 功能
        00 加法(Add)
        01 减法(Subtract)
        10 与运算(AND)
        11 或运算(OR)
  7. 其他数字模块
    1. 计数器
      1. 功能:在每个时钟边沿实现计数递增,循环遍历数字(如 000→001→010→…→111→000…)
      2. 应用:数字时钟显示、程序计数器(跟踪当前执行指令地址)
      3. 结构:含时钟(CLK)、复位(Reset)输入和状态输出(Q),复位信号可重置计数状态
    2. 移位寄存器
      1. 功能:每个时钟边沿控制 1 位数据移入(Sin)和移出(Sout),实现串行数据与并行数据的转换(串并转换)
      2. 结构:含串行输入(Sin)、串行输出(Sout)、时钟(CLK)和并行输出(Q0~QN-1)
    3. 存储阵列
      1. 核心功能:高效存储大量数据,通过 N 位地址访问 M 位数据(地址→数据映射)
      2. 分类:
        类型 特性 存储原理 应用
        DRAM(动态 RAM) 易失性(断电失数据)、速度较慢、成本低 电容存储电荷 计算机主内存
        SRAM(静态 RAM) 易失性、速度快、成本高 交叉耦合反相器 高速缓存(Cache)
        ROM(只读存储器) 非易失性(断电保数据)、读快写难 / 慢 制造时编程或电编程 相机闪存、U 盘
    4. 逻辑阵列
      1. PLA(可编程逻辑阵列):由 “与阵列” 和 “或阵列” 组成,仅实现组合逻辑,内部连接固定,通过编程配置逻辑功能(如实现 AB+AC、NC+RC 等布尔表达式)
      2. FPGA(现场可编程门阵列):由逻辑元素(LEs)阵列构成,可实现组合逻辑和时序逻辑,内部连接可编程,部分 FPGA 还集成乘法器、RAM 等模块,灵活性高

今日总结

  1. 今天开始上了后半学期的新课,教课的是一位印尼的老师,虽然听口语还是有点困难,但是一节课下来也完全知道在讲什么,而且明显感觉老师的教学比较活跃,课堂气氛不错,继续努力吧
  2. 办理了住宿证明,以及在读证明,只差学生证了
  3. 保险起见,今天的网球活动就不参加了
  4. 英语学习

2025.11.3

Overview

  1. 学习笔记
  2. 今日总结

学习笔记

概率

  1. 点估计
    1. 核心定义
      1. 估计量(Estimator):是样本X1、X2、··· 、Xn的函数(统计量),用于推断总体参数θ,如样本均值¬X = (X1+X2+···+Xn)/n是总体均值μ的估计量
      2. 估计值(Estimate):估计量在具体样本下的取值,如由观测值x1、x2、···、xn计算的¬x是μ的点估计值
    2. 估计量的评估标准
      1. 无偏估计(Unbiased Estimator)
        1. 定义:若统计量¬Θ满足E[¬Θ]=θ,则¬Θ是θ的无偏估计量(估计量的期望等于真实参数)
        2. 关键示例:样本方差S^2是总体方差σ^2的无偏估计量
      2. 估计量的方差(Variance of an Estimator)
        1. 核心原则:当¬Θ1和¬Θ2均为θ的无偏估计时,选择方差更小的估计量(抽样分布更集中,估计更精确)
        2. 最有效估计(Most Efficient Estimator):在所有θ的无偏估计中,方差最小的估计量
        3. 示例结论:若三个估计量¬Θ1、¬Θ2、¬Θ3中,仅前两者无偏且¬Θ1方差更小,则¬Θ1是最优选择
  2. 区间估计
    1. 基础概念
      1. 区间估计定义:通过样本确定一个区间¬ΘL < Θ < ¬ΘU,其中¬ΘL(下边界)和¬ΘU(上边界)依赖于估计量的抽样分布,反映 “真实参数大概率落在该区间” 的范围
      2. 置信区间(Confidence Interval):
        1. 定义:100(1−α)%置信区间表示 “长期重复抽样下,95%(如α=0.05)的此类区间会包含真实参数”
        2. 关键误区:不能说 “某具体区间含参数的概率是1−α”,因为区间计算后是确定值,要么含参数要么不含;概率仅反映估计 procedure 的可靠性
        3. 理想区间:短区间 + 高置信度(如 95% 置信区间[6,7]优于 99% 置信区间[3,10])
    2. 单样本估计总体均值μ(Single Sample: Estimating μ)
      1. 场景 1:总体方差σ^2已知(大样本n≥30适用 CLT)
        1. 抽样分布:由中心极限定理(CLT),¬X ∼ N(μ,σ^2/n),标准化后Z = (¬X - μ) / σ/√n ∼ N(0,1)
        2. 置信区间公式:¬x - z(α/2)·σ/√n < μ < ¬x + z(α/2)·σ/√n,其中z(α/2)是标准正态分布右侧面积为α/2的分位数(如 95% 置信度下z(0.025)= 1.96)
      2. 场景 2:单 - sided 置信界(σ^2已知)
        1. 适用场景:仅关注 “下界”(如钢棒抗拉强度)或 “上界”(如河流汞含量)
        2. 公式:
          1. 下置信界(95%):μ > ¬x - z(α)·σ/√n
          2. 上置信界(95%):μ < ¬x + z(α)·σ/√n
      3. 场景 3:总体方差σ^2未知(小样本n<30且总体正态)
        1. 抽样分布:用样本标准差S替代σ,统计量 T = (¬X - μ) / S/√n ∼ t(n-1)(t 分布,自由度df=n−1)
        2. 置信区间公式:¬x - t(α/2),(n-1)·S/√n < μ < ¬x + t(α/2),(n-1)·S/√n
    3. 两样本估计总体均值差μ1−μ2(Two Samples: Estimating μ1−μ2)
      1. 点估计:¬X1 - ¬X2(两样本均值差)
      2. 三大场景对比:
        场景 前提条件 抽样分布 关键参数 / 公式
        场景 1:σ^2(1)、σ^2(2)已知 大样本(n1≥30,n2≥30),CLT 适用 Z 分布 区间含 √(σ^2(1)/n1 + σ^2(2)/n2)
        场景 2:σ^2(1) = σ^2(2)未知 小样本,总体正态 t 分布(df=n1+n2−2) 合并方差 S^2(P) = ((n1-1)S^2(1) + (n2-1)S^2(2)) / n1+n2-2
        场景 3:σ^2(1) != σ^2(2)未知 小样本,总体正态 t’ 分布(df=v) 自由度 v = (S^2(1)/n1 + S^2(2)/n2)^2 / (S^2(1)/n1)^2/n1-1 + (S^2(2)/n2)^2/n2-1,向下取整
    4. 配对观测(Paired Observations)
      1. 适用场景:
        1. 同一单元接受两条件(如 15 人节食前后体重)
        2. 配对单元接受两条件(如 IQ 相同的两人分属传统 / 新型教学班级)
        3. 目的:消除 “单元间差异”(如汽车差异对轮胎磨损的影响),提高估计精度
      2. 核心方法:将配对观测转化为 “差异样本”di = x(1i) - x(2i),估计μD = μ1 - μ2(差异总体的均值)
      3. 置信区间公式:
        1. 小样本(n<30,di正态):¬d ± t(α/2),(n-1)·Sd/√n
        2. 大样本(n≥30):用 Z 分布,¬d ± z(α/2)·Sd/√n
    5. 单样本估计总体方差σ^2(Single Sample: Estimating σ^2)
      1. 抽样分布:统计量 X^2 = (n-1)S^2 / σ^2 ∼ X^2(n-1)(X^2分布,自由度n−1),该分布非对称,分位数需区分X^2(α/2)和X^2(1 - α/2)
      2. 置信区间公式:(n-1)s^2 / X^2(α/2),(n-1) < σ < (n-1)s^2 / X^2(1 - α/2),(n-1)
    6. 两样本估计总体方差比σ^2(1)/σ^2(2)(Two Samples: Estimating σ^2(1)/σ^2(2))
      1. 点估计:s^2(1)/s^2(2)(两样本方差比)
      2. 抽样分布:统计量 F = σ^2(2)S^2(1) / σ^2(1)S^2(2) ∼ F(n1-1),(n2-1)(F 分布,分子自由度n1−1,分母自由度n2−1),满足 f(1-α/2)(v1,v2) = 1 / f(α/2)(v2,v1)
      3. 置信区间公式:S^2(1)/S^2(2) · 1/f(α/2)(n1-1,n2-1) < σ^2(1)/σ^2(2) < S^2(1)/S^2(2) · f(α/2)(n2-1,n1-1)
      4. 核心用途:判断方差是否相等 —— 若区间不含 1,则认为σ^2(1) != σ^2(2);含 1 则认为方差相等

今日总结

  1. 今天参加的这周的城市之旅活动体验感非常好,首先把我之前探索的路线骑了一圈,然后我们去到了一个古镇上参观,最后还去到了长江边上,过程中聊天也挺开心的,希望以后也会这么开心
  2. 今天在结束了城市之旅活动后我还去参加了班级举办的羽毛球活动,在活动上认识了一个非常热情的朋友,即使活动结束后我们俩也聊了许久

2025.11.2

Overview

  1. 周末总结
  2. 学习笔记
  3. 后续安排

周末总结

  1. 骑行探索了一下市区的两个湿地公园,并带摩羯溜了一圈
  2. 在飞盘活动中学习了长传和正手发盘
  3. 训练好了一个英语口语交流AI

学习笔记

统计

  1. 人工智能(AI)基础
    1. AI 的定义与核心能力
      1. 定义:AI 即 “人工(人造)” 与 “智能(思考能力)” 的结合,是计算机科学的一个分支,能模拟人类智能并在机器上实现,用于执行原本需要人类智能的任务
      2. 核心功能:包括学习、推理、问题解决和快速决策
    2. AI 的典型应用领域:图像、制造、医疗、互联网、金融、零售、自然语言生成
  2. 神经网络(NN)概述
    1. 神经网络与 AI 的关系
      1. 核心地位:当前大多数主流 AI 模型均基于神经网络,神经网络是 AI 模拟人类智能的核心技术
      2. 结构灵感:神经网络由相互连接的 “神经元” 构成,灵感来源于生物大脑的神经元连接结构
      3. 基础架构示例:以图像识别鸟类为例,输入层接收图像像素,经隐藏层处理,最终由输出层输出识别结果,各层间通过权重传递信息
  3. 卷积神经网络(CNN)
    1. CNN 的基础:神经元行为
      1. 神经元输出公式:单个神经元的输出遵循公式 y = tanh(w₁x₁ + w₂x₂ + b),其中 w₁、w₂为输入 x₁、x₂的权重,b 为偏置,tanh 为激活函数(输出范围 - 1 至 1)
    2. 卷积层与 CNN 的核心功能
      1. 卷积层的作用:通过 “滤波器(Filter)” 对输入图像进行处理,提取图像特征,如垂直条纹、水平边缘、对角线边缘、白色斑点、对角线交叉等
      2. 特征图(激活值):卷积层的输出是一组滤波后的图像,称为 “特征图”,也叫该层的 “激活值”,其形式为 3D 数组,第三维度称为 “通道”,可单独可视化(灰度图)或组合可视化(彩色图)
    3. CNN 的实用技巧与数据处理
      1. 预训练网络的应用:由于深度学习训练耗时久(无 GPU 时难度大),可利用预训练网络提取特征,再结合传统机器学习方法进行分类
      2. 特征提取流程:CNN 在学习图像分类的同时提取有用特征 —— 早期层读取输入图像并提取基础特征,全连接层利用这些特征完成分类;其中,第一个全连接层之前的所有层可作为独立的特征提取网络
      3. 信号数据的图像化:将信号数据(如频谱图)转化为图像形式,输入 CNN 进行特征提取与分类,拓展 CNN 的应用场景
  4. 循环神经网络(RNN)
    1. RNN 的关键类型
      1. 长短期记忆网络(LSTM):解决传统 RNN 的长期依赖问题,能处理序列数据,可用于序列分类(如 “喜欢跳舞” 的文本分类)
      2. 双向 LSTM:同时从序列的正向和反向进行学习,提升序列分类的准确性,适用于对上下文依赖较强的任务(如文本标点优化:将 “punctuation is important and need” 优化为 “punctuation important, and”)
    2. RNN 的序列预处理
      1. 分类序列的数值化:训练 LSTM 需输入数值型序列,若序列为分类类型(如天气序列、DNA 序列(A/G/T)、音符序列、星期序列(周一至周六)),需先将其转化为数值形式才能进行模型训练
  5. 网络训练与大数据的关系
    1. 网络训练的核心要素
      1. 训练 checklist:成功的网络训练需具备四大要素 ——训练数据(模型学习的基础)、网络架构(模型的结构设计)、算法选项(训练所用的算法)、损失函数(计算模型输出与真实值的总误差,用于优化模型)
    2. AI 与大数据的依存关系
      1. 数据是 AI 的基础:没有大数据,AI 无法进行有效学习;AI 模型的智能程度与接触的数据量正相关 —— 数据越多,模型能学习到的规律越丰富,智能程度越高
      2. 类比人类学习:AI 模型通过大数据训练,类似人类大脑通过积累大量经验(数据)来学习和提升能力

安排及所学

为了实现成为全栈AI开发者的终极目标,第一步打算实现极简个人网站
HTML、CSS、JavaScript的理解:
若拿盖一座房子做比喻:

  1. HTML – 房子的结构和内容
    1. 它负责定义网页上有什么内容
    2. 墙壁和房间: 这是标题,那是段落,这边是一个图片,那边是一个按钮
    3. 纯结构: 它不管这些东西好不好看。墙壁就是光秃秃的水泥墙,按钮就是个方框,上面写着字
  2. CSS – 房子的装修和设计
    1. 它负责定义网页内容看起来是什么样子
    2. 美化: 把标题的文字变成红色、放大;把段落的文字变成某种字体,调整行距;把图片加个圆角边框;把按钮的背景变成蓝色,让鼠标放上去时会变色
    3. 布局: 决定导航栏在顶部,侧边栏在左边,主要内容在中间
  3. JavaScript – 让房子变成智能家居的电路
    1. 它负责让网页动起来,并能与用户互动
    2. 交互响应:你点击一个按钮,会弹出一个对话框。你把鼠标移到菜单上,菜单会向下展开
    3. 动态改变内容:网站可以自动更新最新的新闻头条。社交媒体页面上,你发布一条新状态,页面会立刻显示出来,而不用你手动刷新整个页面
    4. 进行计算和验证:在购物网站,当你把商品加入购物车时,JavaScript 会立刻计算总价。在填写注册表单时,它会立即检查你的密码是否足够安全,或者邮箱格式是否正确
    5. 创建复杂的动画和游戏: 网页上那些复杂的幻灯片轮播、有趣的交互动画,以及所有在浏览器里运行的简单游戏(比如贪吃蛇),几乎都是用 JavaScript 实现的

2025.10.31

Overview

  1. 博客升级
  2. 今日总结
  3. 摘录

博客升级

1. 过程记录

  1. 首先在阿里云注册了账号并购买了一个域名
  2. 登录Vercel网站并登录GitHub账号,再导入之前的博客仓库
  3. 在Vercel中添加购买的域名
  4. 去阿里云里修改DNS设置
    1. 配置根域名(A 记录)
      1. 主机记录:@
      2. 记录类型:A
      3. 记录值:216.198.79.1
    2. 配置 www 子域名(CNAME 记录)
      1. 主机记录:www
      2. 记录类型:CNAME
      3. 记录值:a866d5a916b7fd31.vercel-dns-017.com

2. 总结

至今为止的博客搭建过程中我用到了以下工具:Node.js、Hexo、GitHub 库、Vercel、域名
若把博客比作开一家咖啡厅,则上面的工具可以类比为:

  1. Node.js – 咖啡店的电力系统(提供动力)
    1. Node.js 就是为所有工具提供“动力”的基础运行环境。Hexo 需要它的“电力”才能运转
  2. Hexo – 全自动咖啡机和标准食谱(生成网站)
    1. 你提供原材料(Markdown 笔记和文章)
    2. Hexo(咖啡机)按照固定的食谱(主题和模板),自动、快速地把这些原材料“冲泡”成一整套风格统一、漂亮的网页文件(HTML/CSS/JS)
    3. 不需要从零开始手写网页
  3. GitHub 库 – 咖啡馆的总部仓库和设计图纸库(存储代码)
    1. 备份与版本管理:它安全地存储咖啡馆的所有“设计图纸”(博客的源代码)。如果后面改坏了配方,随时可以找回之前的版本
    2. 协作与分发:它是代码的“大本营”,Vercel 可以从这里获取最新图纸来施工
  4. Vercel – 全球顶级的店铺装修和运营团队(部署和加速)
    1. 自动装修:只需要把图纸(代码)存进 GitHub 仓库,Vercel 团队就会自动领取图纸,帮你把店铺(博客)装修好
    2. 全球连锁:它在全世界都有分店(服务器),确保无论顾客在哪里,都能从最近的店铺拿到咖啡,速度极快
    3. 免费服务:免费帮办好营业执照(SSL证书,即 HTTPS 安全锁),让店铺正规、安全
  5. 域名 – 咖啡馆的品牌名和招牌(品牌入口)
    1. 没有招牌,顾客只能通过一个非常难记的地址(比如 Vercel 给你的默认网址 xxx.vercel.app)找到你。而“域名”这个酷炫的招牌,让顾客很容易就能记住并找到你的店

工作流程:

  1. 你在“后厨”(你的电脑),用 Hexo(咖啡机)和 Node.js(电力)写好一篇新文章(制作一杯新咖啡)
  2. 把这份新品的“配方”(代码)交给总部仓库(GitHub)存档
  3. 全球运营团队(Vercel)自动从仓库拿到了新配方
  4. Vercel 立刻指挥它在全球的所有分店,按照新配方进行更新
  5. 分钟后,全世界的顾客都可以通过你醒目的招牌(你的域名)享受到你的新品了

知识点:

  1. IP地址:
    1. IP 地址就像互联网世界里设备的 “身份证号码 + 门牌号”,是给电脑、手机等联网设备分配的唯一数字标识
    2. 核心特点:
      1. 格式是一串点分隔的数字(比如 IPv4 常见的 192.168.1.1),每段数字有范围限制
      2. 唯一性,同一时间同一网络里,没有两台设备的公开 IP 完全相同
      3. 作用是让数据在网络中找准 “收发对象”,就像寄快递必须填清楚收件人地址
  2. DNS(域名系统):
    1. DNS(域名系统)本质是互联网的 “地址簿”,DNS 负责将易记的域名(比如 www.baidu.com)翻译成计算机能识别的 IP 地址(比如 180.101.49.11),让设备能准确连接目标服务器
    2. 关键作用:
      1. 简化访问流程,不用记复杂的数字 IP 地址
      2. 实现负载均衡,让多个服务器分担访问压力
      3. 保障网络弹性,某台服务器故障时可切换至备用 IP

3. 后续规划

  1. 通过借鉴别的博客来设计一个属于我自己的博客页面,并尝试手敲代码实现个性化
  2. 日后尝试云服务器部署:
    1. 购买云服务器
    2. 通过SSH连接到服务器
    3. 在服务器上安装Node.js、Git等环境
    4. 克隆你的博客代码到服务器
    5. 配置Nginx作为Web服务器

今日总结

  1. 终于在进入11月前的最后一天学完了Python的所有语法,接下来只剩下爬虫课了
  2. 今天成功完成了对博客的初步升级
  3. 网球活动

摘录

  1. 对于盲目的船来说,所有的风向都是逆风
  2. 知识是一个细化铺开的过程,而智慧是一个简化浓缩的过程

2025.10.30

Summary

  1. 把昨天的笔记补全了
  2. 学习了正则表达式
  3. 每日英语
  4. 定好了下周的骑行路线
  5. 报名了寒假海外交流项目
  6. 查询了如何办理日本签证
  7. 规划了一下之后的学习路线(打算边实践边学习)