cse-lab2a踩坑

  1. ifstream::eof()有bug。

    如果有一个文件test.txt,文件内容是:

    1
    2
    3
    4
    1 a
    2 ab
    3 abc

    (注意,最后有一个空行)

    则,当时用下面的代码时,会有问题。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int main() {
    ifstream in("test.txt");
    while (!in.eof()) {
    int length;
    in >> length;
    char tmp[length + 1];
    in.read(tmp, length);
    cout << tmp << endl;
    }
    }

    原因在于,第三行读取完成后,不管是否将最后的换行符进行了消除,eof()会仍然返回false,因为只有当读到最后一个字符并尝试继续读的时候,该函数才会返回true。

Read more

计算机系统基础

[TOC]

第一部分 程序结构和执行

第一章 计算机系统漫游

第二章 信息的表示和处理

数据类型的转换

相同位数

Read more

inode文件系统

7层架构

Block Layer

将block的序数,映射到block中实际的数据。

块大小的权衡

太小,则bitmap所需空间太大。

太大,则内部浪费可能比较严重。

Read more

JPA事务控制与外键死锁

问题背景

在做app作业一的第二部分时,遇到了问题(自以为是问题,没想到老师是故意让我们发现这是个bug)。

flowchart LR;
A(OrderController::createOrder) --> B(OrderService::createOrder);
B --> C(OrderDao::addOne);
B --> D(OrderItemDao::addList);

如图,在电子书服务系统E-Book中,我们进行订单创建,一个订单order中包含多个订单项orderItem

现在我们要对OrderService::createOrderOrderDao::saveOneOrderItemDao::saveList进行事务传播控制,分别简称三部分为A,B,C。

若A和B设置为REQUIRED,而C设置为REQUIRES_NEW,则会出现死锁问题。

Read more

机器学习概论

NFL定理

No Free Lunch Theorem:天下没有免费的午餐

我们计算一个学习算法\(\mathcal{L}_a\)的“训练集外误差”,有 \[ \begin{aligned} E_{ote}(\mathcal{L}_a|X,f)=\sum_{h}\sum_{x\in\mathcal{X}-X}P(x)\mathbb{I}(h(x)\ne f(x))P(h|X,\mathcal{L}_a) \end{aligned} \]

如果对于所有真实目标函数\(f\)求和,则有 \[ \begin{aligned} \sum_f E_{ote}(\mathcal{L}_a|X,f)&=\sum_f\sum_h\sum_{x\in \mathcal{X}-X}P(x)\mathbb{I}(h(x)\ne f(x))P(h|X,\mathcal{L}_a)\\ &=\sum_{x\in\mathcal{X}-X}P(x)\sum_hP(h|X,\mathcal{L}_a)\sum_f\mathbb{I}(h(x)\ne f(x))\\ &=\sum_{x\in \mathcal{X}-X}P(x)\sum_hP(h|X,\mathcal{L}_a)\frac{1}{2}2^{|\mathcal{X}|}\\ &=\frac{1}{2}2^{|\mathcal{X}|}\sum_{x\in \mathcal{X}-X}P(x)\sum_hP(h|X,\mathcal{L}_a)\\ &=\frac{1}{2}2^{|\mathcal{X}|}\sum_{x\in \mathcal{X}-X}P(x)\\ \end{aligned} \] 我们可以看到,总误差与学习算法无关,也就是说,对于任意两个学习算法\(\mathcal{L}_a\)\(\mathcal{L}_b\),无论看上去\(\mathcal{L}_a\)多复杂,多聪明,在期望的意义下,他们的性能是相同的。(也就是说,随便瞎猜和复杂推导一样,不学了 (*`皿´*)ノ )


尝试证明AUC计算公式

Read more