MySQL 隐式转换 背景平时在使用 MySQL 的时候发现即使字段类型是 int,但是拿字符串去查询也能查到。那这是为什么呢?背后自然是 MySQL 帮我们自动转换了。 WHERE 条件语句里,字段属性和赋给的条件,当数据类型不一样,这时候是没法直接比较的,需要进行一致转换。 隐式转换规则官方文档中关于隐式转化的规则是如下描述的: 两个参数至少有一个是 NULL 时,比较的结果也是 NULL,例外是使用 < 2020-08-08 MySQL #MySQL
MySQL 页 页是什么首先,我们需要知道,页(Pages)是 InnoDB 中管理数据的最小单元。 Buffer Pool 中存的就是一页一页的数据。再比如,当我们要查询的数据不在 Buffer Pool 中时,InnoDB 会将记录所在的页整个加载到 Buffer Pool 中去;同样的,将 Buffer Pool 中的脏页刷入磁盘时,也是按照页为单位刷入磁盘的。 页的概览我们往 MySQL 插入的数据最终都 2020-08-08 MySQL #MySQL
MySQL 预编译 1、什么是MySQL的预编译?我们发送一条 SQL 语句给 MySQL 服务器时,MySQL 服务器每次都会对这条 SQL 语句进行校验、解析等操作。 有很多情况,一条 SQL 语句可能需要反复的执行,而 SQL 语句也只可能传递的参数不一样,这样的 SQL 语句如果每次都进行校验、解析等操作,有些太过于浪费性能了,因此提出了 SQL 语句的预编译。 所谓预编译就是将一些灵活的参数值以占位符 ? 2020-08-08 MySQL #MySQL
SQL 语句执行过程 本篇文章会分析下一个 SQL 语句在 MySQL 中的执行流程,包括 SQL 的查询在 MySQL 内部会怎么流转,SQL 语句的更新是怎么完成的。 在分析之前我会先带着你看看 MySQL 的基础架构,知道了 MySQL 由那些组件组成以及这些组件的作用是什么,可以帮助我们理解和解决这些问题。 1、MySQL 基础架构分析1.1 MySQL 基本架构概览下图是 MySQL 的一个简要架构图,从下图 2020-08-08 MySQL #MySQL
bitmap 简介位图(Bitmap),即位(Bit)的集合,是一种数据结构,可用于记录大量的 0-1 状态,在很多地方都会用到,比如 Linux 内核(如inode,磁盘块)、Bloom Filter算法等,其优势是可以在一个非常高的空间利用率下保存大量0-1状态。 BitMap 的原理 Bitmap 就是用一个bit位来标记某个元素对应的 Value, 而 Ke y即是该元素。由于采用了 Bit 为单位来存 2020-08-08 算法 #算法
information_schema 信息数据库 一、information_schema 简介在 MySQL 中,把 information_schema 看作是一个数据库,确切说是信息数据库。其中保存着关于 MySQL 服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。 在 information_schema 中,有很多只读表,它们实际上是视图,而不是基本表,因此,你将无法看到与之相关的任何文件。 12 2020-08-08 MySQL #MySQL
布隆过滤器 布隆过滤器相信大家没用过的话,也已经听过了。 布隆过滤器主要是为了解决海量数据的存在性问题。对于海量数据中判定某个数据是否存在且容忍轻微误差这一场景(比如缓存穿透、海量数据去重)来说,非常适合。 文章内容概览: 什么是布隆过滤器? 布隆过滤器的原理介绍。 布隆过滤器使用场景。 通过 Java 编程手动实现布隆过滤器。 利用 Google 开源的 Guava 中自带的布隆过滤器。 Redis 中的 2020-08-08 数据结构 #数据结构
布隆过滤器 Java 实现 介绍使用 Java 实现布隆过滤器有两种方式,一种是自己实现,另一种是使用 Google 开源的 Guava 中自带的布隆过滤器 自己实现版本一:简单模拟实现1234567891011121314151617181920212223242526272829303132333435363738public static class BloomFilter { private byte 2020-08-08 算法 #算法
布隆过滤器 Python 实现 python实现通过python实现可以有两种方式: 布隆过滤器直接用内存存储; 布隆过滤器用redis存储。用redis实现可以支持并发,多进程过滤。 我们先创建一个布隆过滤器的基类: 123456789101112131415161718192021222324252627282930313233343536373839404142import mathclass BloomFilter( 2020-08-08 算法 #算法
布隆过滤器简介 背景在开发以及数据处理过程中,我们经常要判断一个元素是否在一个集合中,或者对一批元素去重,最直接的办法是是将所有元素存在计算机中,遇到新的元素时,将它和集合中的元素比较即可,当集合小时这样做快速准确,但当集合规模巨大时,因为要耗费存储空间,其存储效率低的问题的就显现出来。 比如:5TB的硬盘上放满了数据,请写一个算法将这些数据进行排重。如果这些数据是一些32bit大小的数据该如何解决?如果是64b 2020-08-08 算法 #算法
数据结构基础 what’s the 数据结构数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成。 简单来说,数据结构就是设计数据以何种方式组织并存储在计算机中。比如:列表、集合与字典等都是一种数据结构。 通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。 数据结构按照其逻辑结构可分为线性结构、树结构、图结构: 线性结 2020-08-08 数据结构 #数据结构
算法之链表排序 1.链表排序简介在数组排序中,常见的排序算法有:冒泡,选择,插入,快速排序,归并,希尔,堆,计数,桶,基数排序等 而对于链表排序而言,因为链表不支持随机访问,访问链表后面的节点只能依靠next指针从头部顺序遍历,所以相对于数组排序问题来说,链表排序问题会更加复杂一点。 下面来总结一下适合链表排序与不适合链表排序的算法: 适合链表的排序算法:冒泡,选择,插入,归并,快速,计数,桶,基数排序 不 2020-08-08 算法 #算法
乐观锁与悲观锁 悲观锁总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。 传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。Java中synchronized和ReentrantLock等独占锁就是悲观锁思想 2020-03-29 #锁
000-Java JDK JRE OpenJDK 的区别 1、JRE和JDK 的区别 JVM(Java Virtual Machine),Java虚拟机。 JRE(Java Runtime Environment),Java运行环境,包含了JVM和Java的核心类库(Java API)。 JDK(Java Development Kit),Java开发工具,包含了JRE和开发工具。 总结:我们只需安装JDK即可,它包含了java的运行环境和虚拟机 2020-02-02 Java #Java
000-Java 关键字 Java 的基本数据类型有 8 种,分别是: 整数型(4种):byte、short、int、long、 浮点型(2种):float、double 字符类型(1种):char 布尔类型(1种):boolean 引用数据类型(3种)。引用类型指向一个对象,指向对象的变量是引用变量。这些变量在声明时候被指定为一个特定的类型,声明之后不能改变。 引用数据类型包括:类(对象)、接口、数组。 所有引用类 2020-02-02 Java #Java
000-Java 变量名 parameter 参数argument 参数variable 变量Attribute 属性,比如dom树某一节点的属性propety 特性,财产 create 创建build 建造init 初始化 2020-02-02 Java #Java
000-Java 访问修饰符-访问权限 简介Java 访问权限修饰符有四个:public 、protected 、默认修饰符 、private 修饰符 public protected 默认修饰符 private 类 √ √ √ √ 同包 √ √ √ × 不同包的子类 √ √ × × 不同包的非子类 √ × × × public:所修饰的类、变量、方法,在内外包均具有访问权限,Public(公有)访问权限较 2020-02-02 Java #Java
000-Java 非访问修饰符 static 修饰符static 修饰符用于修饰类的成员(变量和方法)。被 static 修饰的成员被类的所有对象共享。可以通过类名调用,也可以通过对象名调用,推荐使用类名调用。 静态变量(也称为类变量):static 关键字用来声明独立于对象的静态变量。无论一个类实例化多少对象,它的静态变量只有一份拷贝。局部变量不能被声明为 static 变量。 静态方法:static 关键字用来声明独立于 2020-02-02 Java #Java
001-Java基础语法(一) 1. Java概述1.1 Java语言发展史(了解)语言:人与人交流沟通的表达方式 计算机语言:人与计算机之间进行信息交流沟通的一种特殊语言 Java语言是美国Sun公司(Stanford University Network)在1995年推出的计算机语言 Java之父:詹姆斯·高斯林(James Gosling) 2009年,Sun公司被甲骨文公司收购,所以我们现在访问oracle官网即可:ht 2020-02-02 Java #Java
002-Java基础语法(二) 1. 运算符1.1 算术运算符(理解)1.1.1 运算符和表达式 运算符:对常量或者变量进行操作的符号。 表达式:用运算符把常量或者变量连接起来符合java语法的式子就可以称为表达式。 不同运算符连接的表达式体现的是不同类型的表达式。 举例说明: 123int a = 10;int b = 20;int c = a + b; +:是运算符,并且是算术运算符。 a + b:是表达式,由于+ 2020-02-02 Java #Java