自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Piemon&Anokata的博客

希望我的每一次努力,可以为国内的互联网带来哪怕一点点的进步

  • 博客(159)
  • 资源 (1)
  • 收藏
  • 关注

原创 RxJava实现响应式编程(Reactive Programming with RxJava)

本书已经全部翻译完成,地址在GitBook上,详情请查看:https://www.gitbook.com/book/piemonj/reactive-programming-with-rxjava/details请在学习之前,保证有一定的Java8基础,否则学起来太吃力~~由于本人没有安卓经验,纯Java开发,所以安卓的实战那一节不会翻译了,感兴趣的安卓开发,可以在基础比较娴熟的情况下...

2017-12-21 09:39:51 2051

原创 Redis 散列

我们自底向上来描述redis散列涉及的数据结构。首先是负责存储键值的结构,Java 中存储的结构叫 Entry,redis里也差不多,叫dictEntry:void *key;// 键,它是一个指针类型,所以我们可以将其指向sds的指针union { // 这是一个联合类型,也就是你可以选择任意一个字段来存储void *val;// 因为散列也是redis数据库的底层结构,它是使用val字段// redis还用散列保存键过期时间,此时就用u64存储过期时间。

2024-07-17 23:49:13 1254 1

翻译 编译时内存排序

在您键入一些 C/C++ 源代码和它在 CPU 上执行代码的时间之间,这些代码的内存交互可能会根据某些规则重新排序。内存排序的更改由编译器(在编译时)和处理器(在运行时)进行,目的都是让您的代码运行得更快。编译器开发人员和 CPU 供应商普遍遵循的内存重排序基本规则可以表述如下:不应修改单线程程序的行为。由于这条规则,编写单线程代码的程序员基本上不会注意到内存重新排序【memory reordering】。

2024-07-14 19:37:28 149

原创 JVM Options

为了确定通过收集 Tenured 可以回收的数据量,G1 GC 首先会创建一个可回收的 Tenured 区域列表。该列表仅包含活跃度 ≤ -XX:G1MixedGCLiveThresholdPercent(默认值为 85)的区域,并遵循基于活跃度的自然排序(即活跃度最低的区域优先)。然后统计通过收集此列表中的区域可以回收的总字节数,并将其除以总堆以获得百分比。如果可回收百分比 ≥ -XX:G1HeapWastePercent(默认值为 5),则可回收性检查通过。

2024-06-13 20:57:43 1305

原创 InnoDB Data Locking - Part 2.5 “Locks“ (Deeper dive)

现在让我们把在 InnoDB Data Locking – Part 2 “Locks” 中学习到的有关表锁和记录锁的知识结合起来,以理解以下情况:我们看到:这只是涉及的实际复杂情况的冰山一角(我们还没有讨论从已删除的行继承锁、二级索引、唯一性检查......),但可以从中得到一些高层次的想法:在上面的例子中,您看到了一个有用的 LOCK_DATA 列,它显示了放置记录锁的索引列的行值。这对于人们分析情况是非常有用,但将此“LOCK_DATA”显式存储在内存对象中会很浪费,所以当您查询 performa

2024-06-01 20:24:57 1147 1

原创 InnoDB Data Locking - Part 2 “Locks“

当我熟悉数据库术语时,我发现非常困惑的一件事是“锁【lock】”这个词在数据库中的含义与在编程中的含义不同。在编程中,如果你有一个“锁”,那么它就是内存中存储在某个地址下的单个对象,然后有多个线程尝试“锁定【locking】”它,要么成功,要么等待直到成功。因此,每个资源都有一个锁,而“锁定【locking】”操作是线程执行的操作,您可以使用调试器【debugger】捕获它发生的那一刻,但是没有内存对象(除了调用堆栈外)显式地记录给定线程尝试或成功获取锁的事实。

2024-05-30 20:23:34 1028

原创 第十二讲 查询计划 & 优化

使用模式匹配规则将逻辑计划转换为等效逻辑计划。目标是增加在搜索【search】中枚举最佳计划的可能性,基于成本查询会枚举出所有可能的查询计划,我们可以使用这些逻辑计划优化,来帮助我们走捷径,简而言之,就是它可以指导成本模型去只考虑那些我们知道可能会成为最优的查询计划,而不需要把时间花在那些愚蠢的计划上。我们无法比较操纵前后或更改前后的计划,因为没有成本模型,但可以“引导”向首选方向进行转换。查询优化【Query optimization】对于数据库系统至关重要。

2024-04-14 18:42:39 1463

原创 第十讲 Query Execution Part 1

DBMS 的处理模型【Processing Model】定义了系统如何执行【execute】查询计划【Query Plan】。方法1:迭代器模型【Iterator Model】方法2:物化模型【Materialization Model】方法3:矢量化/批处理模型【Vectorized / Batch Model】

2024-04-06 20:20:05 1081

原创 第九讲 Join 算法

内表的大小没有限制。如果 DBMS 知道外表的大小,那么它可以使用静态哈希表。构建/探测操作的计算开销更少。如果我们不知道其大小,那么我们必须使用动态哈希表或允许溢出页面。对于操作符执行而言,哈希几乎总是比排序更好。对于不均匀的数据,排序算法效果更好。当结果需要排序时,排序效果更好。好的 DBMS 使用其中之一(或两者)。

2024-04-06 15:44:55 1499

原创 第八讲 Sort & Aggregate 算法

我们现在将讨论如何使用迄今为止讨论过的 DBMS 组件来执行查询。

2024-04-05 11:55:14 1152

原创 第七讲 索引并发控制

我们假设迄今为止讨论的所有数据结构都是单线程访问的。但 DBMS 需要允许多个线程安全地访问数据结构,以充分利用额外的 CPU ,并隐藏磁盘 I/O 停顿。并发控制协议【concurrency control protocol】是 DBMS 用于确保在共享对象上的并发操作得到“正确”结果的方法。

2024-04-04 17:42:17 903 1

原创 第六讲 B+树索引

简而言之,每一个 root 节点和 inner 节点,会派生出一个 mod log,我们的更新不会立即传播到叶节点,我们会违反 b+ 树的约束,即叶节点是真正的值所在的地方,而是可以将条目【entry】插入到 mod log 中。在前面介绍中,我们知道页与节点是1:1大小的,但是某些数据库,比如 DB2,允许对某个表或索引,单独设置其数据库中页的大小。1️⃣ 同样是 插入元素 6 ,我们计算的到叶节点,而该叶节点满了,我们意识到插入元素在该叶节点中有重复记录,因此我们增设一个溢出页,并将元素插入其中。

2024-03-30 19:56:36 1120

原创 第五讲 哈希表

我们在前面讲了存储层,以及从次磁盘中将页面加载到缓冲池【Buffer Pool】中,现在我们继续往上,来讨论如何支持 DBMS 的执行引擎从页面中读取/写入数据。这部分是访问方法层的功能,它负责通过索引或者表本身,设置是其他机制来实现功能,

2024-03-24 18:51:50 1215

原创 第四讲 Buffer Pool

问题:DBMS 是如何管理其内存和磁盘之间来回移动数据的?答案:在决定如何在磁盘中来回移动数据时,我们必须考虑两个关键方面:解决方法是基于空间与时间的权衡~注:为什么数据库不适用操作系统的虚拟内存,而要用Buffer Pool?

2024-03-22 00:09:27 933

原创 第三讲 数据存储

TUPLE STORAGE元组【tuple】本质上是一个字节序列。DBMS 的工作是将这些字节解释为属性类型【attribute types】和值【value】。DBMS 的目录【catelog】包含关于表的模式信息【schema information】,系统使用这些表【schema】来确定元组【tuple】的布局。SYSTEM CATALOGSDBMS 在其内部目录【catalog】中存储关于数据库的元数据。表【table】、列【column】、索引【indexes】、视图【views

2024-02-16 09:00:21 1022

翻译 逻辑电路和计算(半成品)

表示负数的习惯方法是在前面加一个负号。将 - 放在 3 前面会生成 -3。这种表示负数的方法称为符号幅度【】表示法。它可以在计算机上通过为符号位分配一个存储位来实现。要更改使用符号幅度【】表示法存储的数字的符号,只需翻转符号位即可。计算机上的整数通常不使用符号幅度【】表示法。原因是,为了用符号幅度【】表示法做加法,你需要按照教给孩子的方式来做(就是算是方程式)。

2024-01-24 20:29:32 373

原创 Linux汇编语言编程-机器语言

机器语言是处理器看到的语言。在获取-执行周期【fetch-execute cycle 】中获取的字节是机器码的字节。汇编语言可以定义为一种使程序员能够控制机器码的语言。汇编语言指定机器码。如果不熟悉机器语言,汇编语言的这一特性是不明显的。本章介绍 x86 机器码的主要特征。将汇编代码转换为机器码的过程称为汇编【assembling以汇编语言作为输入,并产生机器语言作为输出的程序称为汇编程序【assembler它类似于编译器,但它在较低级别上运行。相反,将机器码转换为汇编语言的过程称为反汇编【

2023-12-19 14:08:33 1201

原创 Linux汇编语言编程-汇编语言

reg 代表寄存器。它可以是表 3.13 中列出的任何寄存器。imm 代表立即数【immediate】(可以理解为字面量,常量)。术语“立即数【immediate】”用于指代直接由十进制或十六进制表示形式给出的数值,而不是包含该值的寄存器或内存位置。

2023-12-14 20:39:03 1582

原创 字符驱动程序

设备号注册只是驱动程序代码必须执行的许多任务中的第一个。我们将很快查看其他重要的驱动程序组件,但首先需要另一个题外话。大多数基本驱动程序操作涉及三个重要的内核数据结构,称为 file_operations、file 和 inode。需要对这些结构有基本的熟悉才能做很多有趣的事情,因此我们现在将快速浏览一下它们中的每一个,然后再深入了解如何实现基本驱动程序操作的细节。

2023-04-29 20:22:09 827

翻译 2.关系型模型简介

关系数据库由一组表【table】组成,每个表【table】都分配了一个唯一的名称。通常,表【table】中的一行【row】表示一组值之间的关系【relationship 】。由于表【table】是此类关系【relationships】的集合,因此表【table】的概念与关系的数学概念之间存在着密切的对应关系,关系型数据模型【relational data model】的名称也由此而来。在数学术语中,元组【tuple】只是值的序列(或列表)。

2022-12-16 18:24:14 1585 1

翻译 Mathematics for Computer Science 3

它的思想是,如果你得到这个称为不变量【inariant】的神奇性质/属性【property】,他在初始时成立,在每一步中仍然成立,那么在你抵达终态时,它依然要成立,即必须具有该性质/属性【property】。为了证明你的系统永远不会达到一个特定的特殊状态,我们只需要证明,在初始状态下,存在一些称为不变量【invariant】的性质/属性【property】,并且随着每次移动,这些不变量【invariant】均保持不变,但是,它在特定的特殊状态下是不存在的。So在行移动中,顺序不变。............

2022-07-24 00:09:47 281

原创 Mac 安装 Haskell 环境

这不一定是最简洁的安装,但是应该是最简单的,我想绝多数人都是来学范畴论和函数编程的,实践中应该不会开发项目,能跑代码就行。有好东西大家一起分享~

2022-07-16 20:59:03 1092

翻译 Mathematics for Computer Science 2

正如讲义终所述,我们不会太担心你使用什么公理【axioms】或逻辑推导【logical deduction】。任何合理的事情,我们都可以接受。我们不会要求你知道什么是肯定前件 (Modus ponens),或者在你进行逻辑推理时给某个定律【law】贴上标签。只要你知道是合理的即可。在这门数学课程中,你所知道的任何事实【fact】,都很接近可以用作公理【axioms】。想确保你的公理是一致的【consistent】,这没问题。现在的例外情况是,假设我们正在考试,我们要求你证明一些命题,p。现在的例外情况是,假

2022-07-09 22:46:18 391

翻译 全从句逻辑【Full clausal logic】

关系逻辑【Relational logic】通过逻辑变量【logical variable】对命题逻辑【propositional logic】进行了扩展,使我们能够讨论任意的未命名个体【arbitrary un-named individuals】。但是,请考虑以下陈述【statement】:用关系从句逻辑【elational clausal logic,】来表达该陈述的唯一方法,就是明确列出每一对人,使得在每一对中,第一个人爱第二个人,例如:首先,这并不是对上述陈述【statement】的精确逻辑翻译,

2022-07-06 19:41:18 179

翻译 Mathematics for Computer Science

什么是证明【proof】?证明的存在是超越数学的,那么证明的更高层次的概念是什么?它可能没有潜在的逻辑推导【logical deduction】,也可能没有假设【assumption】。我认为一般来说,证据【proof】被认为是,跨多个领域【field】,作为一种确定【ascertaing】真理【truth】的方法。这里所说的确定【ascertaing】,是指建立【establishing】真理,验证【verifying】真理。在社会中,甚至在科学中,有很多方法可以确定真理【ascertaing truth

2022-07-03 22:46:39 372

翻译 Gradle Dependency Management

当我们开发代码时,我们通常使用第三方或开源库。这些库需要在编译器【compiler】的类路径【classpath】中可用,否则我们将得到错误,构建将失败。Gradle 支持依赖管理【dependency management】,所以我们可以在构建文件【build file】中定义我们的依赖。然后,Gradle 将负责各种任务的必要配置。在本章中,我们将讨论如何在我们的构建中使用依赖管理【dependency management】。我们将看到如何通过配置来组织依赖关系。我们还将讨论托管依赖项工件【host

2022-06-27 11:21:39 775

翻译 关系从句逻辑【Relational clausal logic】

命题从句逻辑是相当粗粒度的,因为它以命题【propositions】(即任何可以被赋予真值的事物)作为其基本构建块。例如,在命题逻辑中不可能形成以下论点:为了使这种类型的推理形式化,我们需要讨论像 Peter 和 Maria 这样的个体,像 Peter 的学生这样的个体集合,以及个体之间的关系,比如 “喜欢”。命题分句逻辑的这种改进将我们引向关系分句逻辑。单独的名称称为常量【constants】;我们遵循 Prolog 约定,将它们写为以小写字符开头的单个单词(或用单引号括起来的任意字符串,例如 'this

2022-06-16 21:03:24 568

翻译 Using Gradle for Java Projects

我们已经看到了如何在 Gradle 构建中编写任务以及如何执行它们,但我们还没有看到如何执行现实生活中的任务,例如编译源代码或使用 Gradle 进行测试。在本章中,我们将讨论如何使用 Gradle Java 插件来获取编译和打包 Java 项目的任务。 我们还将了解 Gradle 的约定构建特性是如何让您轻松的操作源代码。Why plugins?在 Gradle 中,我们可以将插件应用到我们的项目中。 插件基本上为我们的项目添加了额外的功能,例如任务【task】和属性【properties】。

2022-05-31 18:46:43 331

原创 第一讲 数据库简介

DATA MODELS数据模型【data model】是用于描述数据库中数据的概念的集合。关系型【Relational】绝大多数DBMS系统所使用的 键值型【key-value】新型NoSQL数据库所使用的 图型【Grapg】新型NoSQL数据库所使用的 文档型【Document】新型NoSQL数据库所使用的 Array/Matrix型 机器学习相关的模式【schema】是使用给定数据模型【data model】对特定数据集合的描述。关系型数据模型结构【Structure】:关系【

2022-04-23 17:17:47 88 1

翻译 2. Garbage First Garbage Collector in Depth

本章旨在深入了解支持 HotSpot 最新垃圾收集器的原理:Garbage First 垃圾收集器(简称 G1 GC)。第 1 章“垃圾优先概述”中强调过这些原则。在叙述过程中的不同点是,本章将介绍收集周期【collection cycles】、内部结构【internal structures】和算法等概念,然后是全面的细节。这样做的目的是记录详细信息,而不会使外行人负担过重。为了从这一章中获得最大的收获,读者应该熟悉基本的垃圾收集概念和术语,以及垃圾收集在 Java HotSpot JVM 中

2022-04-19 18:32:05 234

翻译 1. Garbage First Overview

本章将介绍 Garbage First(G1)垃圾收集器(GC),并从历史角度介绍 Java HotSpot 虚拟机(以下简称 HotSpot)中垃圾收集器,以及 G1 被纳入 HotSpot 中的原因。假定读者熟悉基本的垃圾收集概念,例如年轻代、年老代和压缩。 Java™ Performance 一书的第 3 章“JVM 概述”详细介绍了这些概念。Serial GC 是 HotSpot 于 1999 年作为 Java Development Kit (JDK) 1.3.1 的一部分引入的第一个垃圾收集

2022-04-19 00:17:20 209

翻译 Transactions

MySQL 具有非事务性存储引擎,例如 MyISAM,但 InnoDB 是默认的和假定的规范。 因此,实际上,默认情况下,每个 MySQL 查询都在一个事务中执行,即使是单个 SELECT 语句。NOTE 如果您碰巧使用了其他存储引擎,例如 Aria 或 MyRocks,则本章不适用。 但更有可能的是,您使用的是 InnoDB,在这种情况下:每个 MySQL 查询都是一个事务。从我们工程师的角度来看,事务似乎是概念性的:BEGIN、执行查询【execute queries】和 COMMIT。然后

2022-03-23 19:43:47 385

翻译 Transaction Processing and Recovery

在本书中,我们对数据库系统概念采用了自下而上的方法:我们首先了解了存储结构【storage structures】。 现在,我们准备转向负责缓冲区管理【buffer management】、锁管理【lock management】和恢复【recovery】的高级组件,这是理解数据库事务的先决条件。事务【transaction】是数据库管理系统中不可分割的逻辑工作单元,允许您将多个操作【multiple operations】表示为一个单独的步骤【single step】。 事务【transactio..

2022-03-20 22:46:49 428

翻译 B-Tree Basics

在上一章中,我们将存储结构【storage structure】分为两组:可变的【mutable】和不可变的【 immutable 】,并将不可变性【immutability 】确定为影响其设计和实现的核心概念之一。 大多数可变存储结构【 mutable storage structures】使用原处更新【in-place update】机制。 在插入、删除或更新操作期间,数据记录直接在目标文件中的位置处更新。存储引擎【Storage engines】通常允许同一数据记录【data record】.

2022-03-19 23:30:20 430

翻译 chapter 2 Indexes and Indexing

许多因素决定了 MySQL 的性能,但索引是最为特殊的,因为没有它们就无法实现性能。您可以删除其他因素(查询【query】、模式【schema】、数据【data】等)并仍然获得性能,但删除索引会将性能限制为蛮力:依赖于硬件的速度和容量。如果这本书的标题是《Brute Force MySQL Performance》,那么内容将与标题一样长:“Buy better, faster hardware”。你可能会笑,但就在几天前,我遇到了一个开发团队,他们一直在通过购买更快的硬件来提高云计算的性能,直到高昂的成本

2022-03-17 00:00:46 835

翻译 虚拟内存概述

内存不足【Not Enough Memory】32位处理器架构为每个程序【Program】提供了专属自己的 32 位地址,当通过load和store 指令操作字【word】时,我们可以指定一个 32 位地址,因此,这意味着程序【Program】可以访问 32 位地址空间中的任意字节。而 32 位地址仅仅能访问 4GB【 byte】 内存。如果我们的内存不足 4GB ,会出现内存访问失败。内存碎片现在操作系统都是支持多道程序【multiprogramming】的,多个程序共享物理内存。

2022-03-12 19:32:17 665

翻译 第六章 垃圾收集算法

第5章研究了所有垃圾收集器的一般行为,包括适用于所有GC算法的JVM标志:如何选择堆大小、分代大小、日志等等。垃圾收集的基本调优可在许多情况下都是足够的了。如果没有的话,那么就应该检查使用的GC算法的具体操作,以确定如何更改其参数,以最大限度地减少GC对应用程序的影响。调优某个收集器所需的关键信息是启用该收集器时来自GC日志的数据。本章首先从日志输出的角度来看每个算法,这让我们了解GC算法如何工作,以及如何调整它以更好地工作。然后,每个部分都包含调优信息,以实现更好的性能。本章还将详细介绍一些新的实

2022-02-20 13:45:57 1034

原创 Redis SDS

what--sds.htypedef char *sds;sds 即是 char * 的别名--sds.h/* Note: sdshdr5 is never used, we just access the flags byte directly. * However is here to document the layout of type 5 SDS strings. */struct __attribute__ ((__packed__)) sdshdr5 { un.

2021-12-17 09:51:26 257 1

翻译 子句逻辑与归结:理论背景

命题子句逻辑非正式地讲,命题【proposition】是指任何要么对要么错的陈述【statement】,比如"2 + 2 = 4"或者"月亮是绿色奶酪做的"。这些是命题逻辑的基石,是最弱的逻辑形式。语法【Syntax】命题【Propositions】由原子【atoms】抽象表示,原子是以小写字母开头的单个单词。 例如,married就是一个原子【atom】,表示这样一个命题:“他/她已婚”; 同样,man表示这样一个命题:“他是一个男人”。 使用特殊符号‘:-’ (if), ‘;’ (o....

2021-10-24 19:03:16 2184 4

翻译 逻辑学随笔

数学不仅仅是数字。 当你超越算术【arithmetic】并接触到抽象【abstract】的东西,数学的乐趣才真正开始变得清晰起来。 所有的抽象【abstract】都可以用两个基本的东西来构建:逻辑【Logic】 集合论【Set theory】Mr. Spock Is Not Logical我是科幻小说的忠实粉丝。事实上,我全家几乎都是科幻极客。我小时候,每周六下午6点是《星际迷航【Star Trek】》时间,当地的一个频道会重播原著。到了周六,我们总是确保 6 点前到家,然后聚在电视机前看节目。

2021-10-14 23:49:03 1753

Domain Driven Design with Spring Boot

Domain Driven Design with Spring Boot epub version

2019-03-14

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除