Note on SQL
概述数据库A Database is a collection of data stored in a format that can easily be accessed.
数据库管理系统为了管理数据库,我们要使用数据库管理系统(Database Management System,简称 DBMS)。
我们通过电脑连接上 DBMS,然后通过指令来查询或修改数据。DBMS 将执行指令并返回结果。
DBMS 被分为两大类,Relational 和 Non-Relational,后者又称为 NoSQL。
关系型数据库管理系统在 Relational DBMS(简称 RDBMS) 中,数据被存储在通过某种方式互相联系的表格中。
每个表格存储特定类型对象的数据,比如客户、订单、产品。
SQL(Structured Query Language)是我们用来处理关系数据库的语言。
MySQL 是最出名的 RDBMS,此外还有 SQL Server 和 Oracle 等。
不同的 DBMS 有不同的风格,但它们的实现都类似,且都基于标准 SQL 规范。
非关系型数据库管理系统在非关系型数据库管理系统 ...
Note on Markdown
常用技巧字体1<span style='color:文字颜色;background:背景颜色;font-size:文字大小;font-family:字体;'>文字</span>
分页符1<div style="page-break-after:always"></div>
Note on Regular Expression
常用符号?匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用\?
used? 可以匹配到 “use” 或者 “used”
*匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*
ab*c 可以匹配到 “ac”, “abc”, “abbbbc” 等
+匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+
ab+c 可以匹配到 “abc”, “abbbbc” 等
如果要精确指示字符出现的次数,可以使用花括号
ab{3}c 只会匹配到 “abbbc”
ab{2,6}c 会匹配到 “abbc”, “abbbc”, “abbbbc”, “abbbbbc”, “abbbbbbc”
ab{2,}c 会匹配到 “abbc”, “abbbc” 等 “b” 出现次数大于等于 2 的字符
( )标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \( 和 \)
或运算| 指明两项之间的一个选择。要匹配 |,请使用 \|
a (cat|dog) 会匹配到 “a cat” 和 ...
Java: Excutive Framework
Intro在线程的基础上,Java 引入了更高级别的抽象来简化构建并发型应用程序的过程。
通过这些抽象,我们不需要显式地处理线程,只需要专注于我们的任务,让 Java 来处理线程操作。
Thread Pools线程是构建并发程序模块的基础,但是直接使用线程有两个问题:
Availability:我们可以使用的线程数量有限,如果不小心创建了过多的线程,程序就会崩溃
Cost:创建一个独立的线程的开销很大
Java 为了解决开销大的问题,提出了一种称为线程池的解决方案。
线程池本质上就是一池子线程,这个池子里的线程被称为 Worker Thread,这些线程可以被多次使用,从而一个线程就可以执行多次任务。如果一个工作线程的任务完成了,它就会被放回线程池,这样就可以重新用它来执行另一个任务。所以这些线程没有被销毁和重新创建,从而能减小开销。
同时,因为线程池中的线程数量是一定的,所以我们不必担心创建了太多的线程,以至于内存不够用。
比如说,我们可以创建一个有 10 个线程的线程池,再给这个线程池分配 1000 个任务,那线程池就会负责给每个线程分配任务。如果所有的线程都在执行任务,那新的 ...
Java: Concurrency and Multi-threading
Intro现在大多数计算机都有多核处理器,可以并行执行多个任务。这一章要讲的就是如何在代码中利用多核处理器,这能提升程序的响应速度。
Processes and Threads进程(process)是一个程序(program)或一个应用(application)的实例。当启动一个应用程序(如代码编辑器或音乐播放器)时,操作系统就会把这个应用加载到一个进程中,因此一个进程包含着这这个应用的代码的映像,它有一些内存和一些其他资源。
你的操作系统可以同时执行多个进程。例如,它可以在播放音乐的同时运行杀毒软件,这就是进程级的并发。但也可以在进程内或使用线程的应用中使用并发。
技术上来说,线程是指令序列(a sequence of instructions),它就像一条指令线。现实点说,线程就是执行代码的东西。
每个进程至少调用一个线程,称为主线程。但我们也可以创造额外的线程去同时执行多个任务。例如我们可以创建一个可以一同时服务多个用户的 web 服务器,我们将使用一个单独的线程为每个客户端服务。或者我们可以构建一个可以同时下载多个文件的应用程序,让每个线程下载一个单独的文件。这就是多线程。
如 ...