跳至主要內容
《极客时间教程 - MongoDB 高手课》笔记

《极客时间教程 - MongoDB 高手课》笔记

第一章:MongoDB 再入门

MongoDB 简介

什么是 MongoDB?

一个以 JSON 为数据模型的文档数据库。

为什么叫文档数据库?

文档来自于“JSON Document”,并非我们一般理解的 PDF,WORD 文档。

谁开发 MongDB?

上市公司 MongoDB Inc. ,总部位于美国纽约。

主要用途

  • 应用数据库,类似于 Oracle, MySQL
  • 海量数据处理,数据平台。

钝悟...大约 24 分钟笔记数据库数据库文档数据库MongoDB
《高性能 MySQL》笔记

《高性能 MySQL》笔记

部分章节内容更偏向于 DBA 的工作,在实际的开发工作中相关性较少,直接略过。

第一章 MySQL 架构与历史

MySQL 逻辑架构

MySQL 逻辑架构分为三层:

  • 连接层 - 连接管理、认证管理
  • 核心服务层 - 缓存、解析、优化、执行
  • 存储引擎层 - 数据实际读写

并发控制

解决并发问题的最常见方式是加锁。

  • 排它锁(exclusive lock) - 也叫写锁(write lock)。锁一次只能被一个线程所持有

  • 共享锁(shared lock) - 也叫读锁(read lock)。锁可被多个线程所持有


钝悟...大约 28 分钟笔记数据库数据库关系型数据库MySQL
《MongoDB 权威指南》笔记

《MongoDB 权威指南》笔记

第 1 章 MongoDB 简介

MongoDB 简介

MongoDB 是一个分布式文档数据库,由 C++ 语言编写。

面向文档

面向文档的数据库使用更灵活的“文档”模型取代了“行”的概念。通过嵌入文档和数组,面向文档的方式可以仅用一条记录来表示复杂的层次关系。

MongoDB 中也没有预定义模式(predefined schema):文档键值的类型和大小不是固定的。由于没有固定的模式,因此按需添加或删除字段变得更容易。

综上,MongoDB 支持结构化、半结构化数据模型,可以动态响应结构变化


钝悟...大约 12 分钟笔记数据库数据库文档数据库MongoDB
《SQL 必知必会》笔记

《SQL 必知必会》笔记

第 1 课 了解 SQL

数据库基础

  • 数据库(database) - 保存有组织的数据的容器(通常是一个文件或一组文件)。
  • 表(table) - 某种特定类型数据的结构化清单。
  • 模式 - 关于数据库和表的布局及特性的信息。
  • 列(column) - 表中的一个字段。所有表都是由一个或多个列组成的。
  • 数据类型 - 所允许的数据的类型。每个表列都有相应的数据类型,它限制(或允许)该列中存储的数据。
  • 行(row) - 表中的一个记录。
  • 主键(primary key) - 一列(或一组列),其值能够唯一标识表中每一行。表中的任何列都可以作为主键,只要它满足以下条件:
    • 任意两行都不具有相同的主键值;
    • 每一行都必须具有一个主键值(主键列不允许 NULL 值);
    • 主键列中的值不允许修改或更新;
    • 主键值不能重用(如果某行从表中删除,它的主键不能赋给以后的新行)。

钝悟...大约 22 分钟笔记数据库数据库关系型数据库
《极客时间教程 - Java 核心技术面试精讲》笔记

《极客时间教程 - Java 核心技术面试精讲》笔记

开篇词 以面试题为切入点,有效提升你的 Java 内功

谈谈你对 Java 平台的理解?

【典型回答】

Java 最显著的特性:

  • 书写一次,到处运行”(Write once, run anywhere)——跨平台
  • 垃圾收集(GC, Garbage Collection)——回收、分配内存

Java 既是解释型语言,又是编译型语言


钝悟...大约 71 分钟笔记JavaJava面试
《极客时间教程 - Java 并发编程实战》笔记三

《极客时间教程 - Java 并发编程实战》笔记三

Immutability 模式:如何利用不变性解决并发问题?

解决并发问题,其实最简单的办法就是让共享变量只有读操作,而没有写操作。这个办法如此重要,以至于被上升到了一种解决并发问题的设计模式:不变性(Immutability)模式。所谓不变性,简单来讲,就是对象一旦被创建之后,状态就不再发生变化。换句话说,就是变量一旦被赋值,就不允许修改了(没有写操作);没有修改操作,也就是保持了不变性。

快速实现具备不可变性的类


钝悟...大约 40 分钟笔记JavaJava并发
《极客时间教程 - Java 并发编程实战》笔记四

《极客时间教程 - Java 并发编程实战》笔记四

案例分析(一):高性能限流器 Guava RateLimiter

Guava 是 Google 开源的 Java 类库,提供了一个工具类 RateLimiter。

【示例】使用 RateLimiter 限流

//限流器流速:2 个请求/秒
RateLimiter limiter = RateLimiter.create(2.0);
//执行任务的线程池
ExecutorService es = Executors.newFixedThreadPool(1);
//记录上一次执行时间
prev = System.nanoTime();
//测试执行 20 次
for (int i = 0; i < 20; i++) {
    //限流器限流
    limiter.acquire();
    //提交任务异步执行
    es.execute(() -> {
        long cur = System.nanoTime();
        //打印时间间隔:毫秒
        System.out.println((cur - prev) / 1000_000);
        prev = cur;
    });
}

// 输出结果:
// ...
// 500
// 499
// 500
// 499

钝悟...大约 38 分钟笔记JavaJava并发
《极客时间教程 - Java 并发编程实战》笔记一

《极客时间教程 - Java 并发编程实战》笔记一

学习攻略 如何才能学好并发编程?

开篇词 你为什么需要学习并发编程?

并发编程可以总结为三个核心问题:分工、同步、互斥。


钝悟...大约 26 分钟笔记JavaJava并发
《极客时间教程 - Java 并发编程实战》笔记二

《极客时间教程 - Java 并发编程实战》笔记二

Lock 和 Condition(上):隐藏在并发包中的管程

再造管程的理由

已有 synchronized,还支持 Lock 的原因是,需要一把锁支持:

  1. 能够响应中断。synchronized 的问题是,持有锁 A 后,如果尝试获取锁 B 失败,那么线程就进入阻塞状态,一旦发生死锁,就没有任何机会来唤醒阻塞的线程。但如果阻塞状态的线程能够响应中断信号,也就是说当我们给阻塞的线程发送中断信号的时候,能够唤醒它,那它就有机会释放曾经持有的锁 A。这样就破坏了不可抢占条件了。
  2. 支持超时。如果线程在一段时间之内没有获取到锁,不是进入阻塞状态,而是返回一个错误,那这个线程也有机会释放曾经持有的锁。这样也能破坏不可抢占条件。
  3. 非阻塞地获取锁。如果尝试获取锁失败,并不进入阻塞状态,而是直接返回,那这个线程也有机会释放曾经持有的锁。这样也能破坏不可抢占条件。

钝悟...大约 43 分钟笔记JavaJava并发
《极客时间教程 - 深入拆解 Java 虚拟机》笔记

《极客时间教程 - 深入拆解 Java 虚拟机》笔记

开篇词 为什么我们要学习 Java 虚拟机?

Java 代码是怎么运行的?

从虚拟机视角来看,执行 Java 代码首先需要将它编译而成的 class 文件加载到 Java 虚拟机中。加载后的 Java 类会被存放于方法区(Method Area)中。实际运行时,虚拟机会执行方法区内的代码。


钝悟...大约 25 分钟笔记JavaJavaJVM
2
3
4
5
...
59