redis相关问题剖析 发表于 2020-07-05 | 分类于 redis 字数统计: 16.4k | 阅读时长 ≈ 59 [TOC] Redis 学习笔记初识 RedisRedis 是一种基于键值对的 NoSQL 数据库,Redis 中的值可以是由 string、hash、list、set、zset 等多种数据结构和算法组成,因此 Redis 可以满足很多应用场景。Redis 将所有数据都存放在内存中,所以它的读写能力 ... 阅读全文 »
跳跃表 发表于 2020-07-05 | 分类于 redis 字数统计: 551 | 阅读时长 ≈ 1 [TOC] [TOC] 跳跃表跳跃表是基于多指针有序链表实现的,可以看成多个有序链表。上层结点都有指向下层结点的指针,从上往下每一层链表节点数递减。比如第一层有两个,第二层有四个,以此类推。 插入看懂了跳跃表的数据结构,那么就很容易理解节点的插入操作了,基本上两步操作就可以实现:在最底层的数据链表 ... 阅读全文 »
sql相关 发表于 2020-07-05 | 分类于 mysql 字数统计: 261 | 阅读时长 ≈ 1 [TOC] 左连接和内联的区别左连接:左边有的,右边没有的为null 右连接:左边没有的,右边有的为null 内连接:显示左边右边共有的 左连接 内连接 右连接 like和in关键字LIKE: 当无法确切知道所要查找的值,而是知道所要查找的数据符合的模式时,可以使用LIKE 子句进行匹配。 ... 阅读全文 »
一条SQL查询语句的执行过程 发表于 2020-07-05 | 分类于 mysql 字数统计: 2.6k | 阅读时长 ≈ 9 [TOC] 输入下面一条SQL语句,我们来分析下这条语句在MySQL内部的执行过程。 1mysql> select * from T where ID=10; 体来说,MySQL 可以分为 Server 层和存储引擎两部分。 Server 层包括:连接器、查询缓存、分析器、优化器、执行器等 ... 阅读全文 »
隔离级别serilizable 发表于 2020-07-05 | 分类于 mysql 字数统计: 80 | 阅读时长 ≈ 1 [TOC] 如何实现的在SERIALIZABLE级别下,不会使用mysql的mvcc机制,而是在每一个select请求下获得读锁,在每一个update操作下尝试获得写锁。 对于insert、update、delete,InnoDB会自动给涉及的数据加写锁;对于一般的Select语句,InnoDB不会 ... 阅读全文 »
分布式锁 发表于 2020-07-04 | 分类于 分布式 字数统计: 590 | 阅读时长 ≈ 2 [TOC] 1.使用互斥锁(mutex key)业界比较常用的做法,是使用mutex。简单地来说。 SETNX,是「SET if Not eXists」的缩写,也就是只有不存在的时候才设置,可以利用它来实现锁的效果。 1234567891011121314151617181920public Str ... 阅读全文 »
ZGC和Shenandoah 发表于 2020-07-04 | 分类于 Java虚拟机 字数统计: 635 | 阅读时长 ≈ 2 [TOC] ZGCZGC几乎在所有地方并发执行的,除了初始标记的是STW的。所以停顿时间几乎就耗费在初始标记上,这部分的实际是非常少的。那么其他阶段是怎么做到可以并发执行的呢? ZGC主要新增了两项技术,一个是着色指针Colored Pointer,另一个是读屏障Load Barrier。 着色指针 ... 阅读全文 »
IO多路复用 发表于 2020-07-04 | 分类于 Java基础 字数统计: 3.5k | 阅读时长 ≈ 12 [TOC] 定义对于socket流而言,数据的流向经历两个阶段: 第一步通常涉及等待网络上的数据分组到达,然后被复制到内核的某个缓冲区。 第二步把数据从内核缓冲区复制到应用进程缓冲区。 recvfrom() 用于接收 Socket 传来的数据,并复制到应用进程的缓冲区 buf 中 阻塞IO应用进 ... 阅读全文 »
公平锁和非公平锁 发表于 2020-07-04 | 分类于 Java基础 字数统计: 263 | 阅读时长 ≈ 1 [TOC] 公平锁:多个线程按照申请锁的顺序去获得锁,线程会直接进入队列去排队,永远都是队列的第一位才能得到锁。 优点:所有的线程都能得到资源,不会饿死在队列中。 缺点:吞吐量会下降很多,队列里面除了第一个线程,其他的线程都会阻塞,cpu唤醒阻塞线程的开销会很大。 非公平锁:多个线程去获取锁的时 ... 阅读全文 »
对象头由什么构成 发表于 2020-07-04 | 分类于 Java基础 字数统计: 239 | 阅读时长 ≈ 1 [TOC] 对象布局 在JVM中,对象在内存中的布局分为3块: 对象头Mark Word主要用于储存对象自身的运行时数据,例如对象的hashCode、GC分代年龄、锁状态标志、线程持有的锁、偏向线程的ID、偏向时间戳 类型指针而类型指针用于标识JVM通过这个指针来确定这个对象是哪个类的实例。 实例 ... 阅读全文 »