Seven's blog

你不会找到路,除非你敢于迷路

0%

ARTS-11

Algorithm

1304. 和为零的N个唯一整数

解法一:

钻了个漏洞。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Solution {
public int[] sumZero(int n) {
if (n <= 1) {
return new int[]{0};
}

int[] result = new int[n];
int initNumber = 1, sum = 0;

for (int i = 0; i < n - 1; i++) {
result[i] = initNumber;
sum += initNumber;
initNumber++;
}

result[n - 1] = -sum;
return result;
}
}

执行用时:0ms,内存消耗:34.9MB。

Review

What makes a programming exercise good?

什么促成了良好的编程实践?

  • 很有趣

  • 能够教会一些你在意的东西

    比如它可以辅助你更好地工作,或者帮助你更好地完成目标等。

  • 有一定的挑战性

    不然就很容易变得无聊。

  • 可量化的是否成功的标准

    比如你要写一个 TCP 堆栈,怎样才算成功了?成功的标准必须是可量化的,比如你需要通过哪些测试用例才算是成功。

  • 可以快速完成

    一项编程工作一般要在 2-3 小时内完成。除非这项工作非常有趣,不然我们很少能够挤出 8 个小时的完整时间。

  • 作者相信你可以做到

    这一条相对比较模糊。一个前提条件是,你所学习的教程的作者相信你可以通过教程学会对应的东西。

  • 你所学习的东西必须已经被测试过并且被证明是可行的的

    作者举例一本食谱的作者测试了自己的所有食谱,以保证自己的食谱确实是可以操作的。

    从另一个方面说,教程的提供者也必须保证你的教程是被测试过且证明可行的。

  • 你所学习的东西不会遇到阻碍

    很容易陷入与我们尝试学习的技能完全无关的编程练习中的一些随机问题,这会花费我们大量时间解决,但是对我们真正要学的东西并没有太大助力。

  • 很容易获取帮助

    如果学习过程中真的遇到了一些问题,你能够很容易获取帮助。

  • 无需耗时的设置

    我们学习教程时经常会遇到一些环境配置或者依赖引入的坑,这会耗费我们大量精力。

    作者也对教程提供者提供了一些建议:

    • 告诉人们你的教程适用于哪些环境(Windows / Linux / Mac .etc);
    • 声明你的教程需要哪些依赖或者软件;
    • 使用 Docker;
    • 在浏览器中运行代码;
    • 使用云操作系统;
  • 很容易被扩展延伸 / 有较大的成长空间

    你可以很容易地举一反三。

Tip

MySQL 事务

作用

事务就是要保证一组数据库操作, 要么全部成功, 要么全部失败.

特性

ACID(Atomicity, Consistency, Isolation, Durability), 即原子性, 一致性, 隔离性, 持久性.

问题

多事务同时执行的时候, 可能会出现脏读(dirty read), 不可重复读(non-repeatable read), 幻读(phantom read) 的问题. 为了解决这个问题, 就有了事务隔离的概念.

事务隔离

隔离越严, 效率越低.

分类

SQL 标准的事务隔离级别包括: 读未提交(read uncommitted), 读提交(read committed), 可重复读(repeatable read) 和串行化(serializable).

实现

每条记录在更新的时候都会同时记录一条回滚操作. 同一条记录在系统中可以存在多个版本, 这就是数据库的多版本并发控制(MVCC).

建议

  • set autocommit = 1, 显式启动事务语句, begin 或者 start transaction. 配套的提交语句是 commit, 回滚语句是 roolback;

  • 如果介意显式启动事务会多一次交互的问题, 可以使用 commit work and chain 语法. 在 autocommit 为 1 的情况下, 用 begin 显式启动的事务, 如果执行 commit 则提交事务; 如果执行 commit work and chain 则提交事务并自动启动下一个实物, 这样也省去了再次执行 begin 语句的开销.

Share

累了的话,就休息一下吧

平时下班回家我是一定会学习的。这周四下班突然就觉得很丧,啥都不想干。干脆躺床上刷了一个钟的淘宝,顿时觉得心情爽朗不少,第二天的精神状态也特别好。顿觉之前我给自己的束缚可能还是太多了。

近一年以来,生活中陪伴我最多的就是电脑。

除了上班时间要和电脑培养感情,几乎是所有的业余时间,我也会逼迫自己坐在电脑前。美其名曰:学习。

但是,凭心而论,工作效率并不高,学习质量并不好。

这本来也不算什么。问题就在于,明明工作效率不高,我却会强制自己持续工作;明明学习质量不好,我却会砍掉自己所有娱乐。一天下来,除了碌碌无为,只剩下空虚寂寥。

世上本没有太多枷锁,我的现状更像是左手抓着右手,然后告诉自己:“你看,我的手被束缚了,啥都做不了。只能这样。”想想,也是可笑。

觉得累了的话,大可休息一下,调整好心情,以更好的姿态重新出发。嗯,还有,不要自己给自己上枷锁。

微信公众号
扫码关注, 一起进步!