![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
●面试相关
文章平均质量分 88
面试
Mr小林
软件工程师的成才之路。
展开
-
深入理解SpringBoot之自动装配
Java中自带了所谓SPI机制,按照约定去META-INF/services目录里找各个接口的配置文件,找到接口的实现类,然后使用当前线程上线文类加载器定位到实现类加载器,通过其加载实现类,然后再反射newInstance得到实现类的实例。Spring里也有类似的SPI,思路根上面类似,从classpath下所有jar包的META-INF/spring.factories配置文件中加载标识为EnableAutoConfiguration的配置类,然后将其中定义的bean注入到Spring容器。笔.转载 2022-04-11 15:00:25 · 536 阅读 · 0 评论 -
Volatile详解,太详细了
Volatile可能是面试里面必问的一个话题吧,对他的认知很多朋友也仅限于会用阶段,今天我们换个角度去看看。先来跟着丙丙来看一段demo的代码:你会发现,永远都不会输出有点东西这一段代码,按道理线程改了flag变量,主线程也能访问到的呀?为会出现这个情况呢?那我们就需要聊一下另外一个东西了。JMM(JavaMemoryModel)JMM:Java内存模型,是java虚拟机规范中所定义的一种内存模型,Java内存模型是标准化的,屏蔽掉了底层不同计算机的区别(注意这个跟JVM转载 2022-04-07 20:36:47 · 18126 阅读 · 3 评论 -
Record锁/Gap锁/Next-key锁/插入意向锁
前言InnoDB常见的锁有Record锁、gap锁、next-key锁、插入意向锁、自增锁等。下面会对每一种锁给出一个查看锁的示例。常见的锁有Record锁、gap锁、next-key锁、插入意向锁、自增锁等。下面会对每一种锁给出一个查看锁的示例。1 准备工作1.1 测试用表结构示例的基础是一个只有两列的数据库表。mysql> CREATE TABLE test (id int(11) NOT NULL,code int(11) NOT NULL, PRIMARY转载 2022-04-06 11:45:58 · 1522 阅读 · 0 评论 -
ReentrantReadWriteLock读写锁详解
一、读写锁简介 现实中有这样一种场景:对共享资源有读和写的操作,且写操作没有读操作那么频繁。在没有写操作的时候,多个线程同时读一个资源没有任何问题,所以应该允许多个线程同时读取共享资源;但是如果一个线程想去写这些共享资源,就不应该允许其他线程对该资源进行读和写的操作了。 针对这种场景,JAVA的并发包提供了读写锁ReentrantReadWriteLock,它表示两个锁,一个是读操作相关的锁,称为共享锁;一个是写相关的锁,称为排他锁,描述如下:线程进入读锁的前提条件:没有其他线程的写锁..转载 2022-04-06 09:46:20 · 1060 阅读 · 0 评论 -
AQS一行一行源码分析清楚AbstractQueuedSynchronizer(一)
在分析 Java 并发包 java.util.concurrent 源码的时候,少不了需要了解 AbstractQueuedSynchronizer(以下简写AQS)这个抽象类,因为它是 Java 并发包的基础工具类,是实现 ReentrantLock、CountDownLatch、Semaphore、FutureTask 等类的基础。Google 一下 AbstractQueuedSynchronizer,我们可以找到很多关于 AQS 的介绍,但是很多都没有介绍清楚,因为大部分文章没有把其中的一些关键转载 2022-04-02 16:43:48 · 156 阅读 · 0 评论 -
AQS一行一行源码分析清楚 AbstractQueuedSynchronizer(二)
文章比较长,信息量比较大,建议在 pc 上阅读。文章标题是为了呼应前文,其实可以单独成文的,主要是希望读者看文章能系统看。本文关注以下几点内容:深入理解 ReentrantLock 公平锁和非公平锁的区别 深入分析 AbstractQueuedSynchronizer 中的 ConditionObject 深入理解 Java 线程中断和 InterruptedException 异常基本上本文把以上几点都说清楚了,我假设读者看过上一篇文章中对 AbstractQueuedSynchronize转载 2022-04-02 16:44:48 · 119 阅读 · 0 评论 -
SQL中的锁的分类:行锁,页锁,表锁,读锁,写锁,意向锁,乐观锁,悲观锁
从锁定对象的粒度大小来进行划分从锁定对象的粒度大小可以分为行锁、页锁、表锁1、行锁就是按照行的粒度对数据进行锁定。锁定力度小,发生锁冲突概率低,可以实现的并发度高,但是对于锁的开销比较大,加锁会比较慢,容易出现死锁情况2、页锁就是在页的粒度上进行锁定,锁定的数据资源比行锁要多,因为一个页中可以有多个行记录。当我们使用页锁的时候,会出现数据浪费的现象,但这样的浪费最多也就是一个页上的数据行。页锁的开销介于表锁和行锁之间,会出现死锁。锁定粒度介于表锁和行锁之间,并发度一般。3、表锁就是对数据..转载 2022-04-02 16:26:53 · 1460 阅读 · 0 评论 -
MySQL页的原理
页是什么首先,我们需要知道,页(Pages)是 InnoDB 中管理数据的最小单元。Buffer Pool 中存的就是一页一页的数据。再比如,当我们要查询的数据不在 Buffer Pool 中时,InnoDB 会将记录所在的页整个加载到 Buffer Pool 中去;同样的,将 Buffer Pool 中的脏页刷入磁盘时,也是按照页为单位刷入磁盘的。页的概览我们往 MySQL 插入的数据最终都是存在页中的。在 InnoDB 中的设计中,页与页之间是通过一个双向链表连接起来。而存储在页中的一行转载 2022-03-29 17:18:00 · 201 阅读 · 0 评论 -
volatile指令重排
计算机在执行程序时,为了提高性能,编译器和处理器常常会对指令重排,一般分为以下三种:源代码 -> 编译器优化的重排 -> 指令并行的重排 -> 内存系统的重排 -> 最终执行指令单线程环境里面确保最终执行结果和代码顺序的结果一致处理器在进行重排序时,必须要考虑指令之间的数据依赖性多线程环境中线程交替执行,由于编译器优化重排的存在,两个线程中使用的变量能否保证一致性是无法确定的,结果无法预测。指令重排 - example 1#public void转载 2022-03-29 11:36:56 · 2254 阅读 · 0 评论 -
MYSQL-B+TREE索引原理 B-Tree以及聚簇索引
1.什么是索引?索引:加速查询的数据结构。2.索引常见数据结构:#1.顺序查找: 最基本的查询算法-复杂度O(n),大数据量此算法效率糟糕。#2.二叉树查找(binary tree search): O(log2n)图1左边是数据表,一共有两列七条记录,最左边的是数据记录的物理地址(注意逻辑上相邻的记录在磁盘上也并不是一定物理相邻的)。为了加快Col2的查找,可以维护一个右边所示的二叉查找树,每个节点分别包含索引键值和一个指向对应数据记录物理地址的指针,这样就可以运用二叉查找转载 2022-03-26 20:42:19 · 663 阅读 · 1 评论 -
MYSQL like模糊查询,%在前面索引为什么会失效 (最左前缀底层原理)
还是要从索引的数据结构说起。我们都知道,我们通常用的索引数据结构是B+树,而索引是有序排列的。如果索引关键字的类型是Int 类型,索引的排列顺序如下:数据只存放在叶子节点,而且是有序的排放。如果索引关键字的类型是String类型,排列顺序如下:可以看出,索引的排列顺序是根据比较字符串的首字母排序的,如果首字母相同,就根据比较第二个字母进行排序,以此类推。我们在进行模糊查询的时候,如果把 % 放在了前面,最左的 n 个字母便是模糊不定的,无法根据索引的有序性准确的...转载 2022-03-26 18:32:15 · 5042 阅读 · 2 评论 -
Dubbo RPC只要一个长连接就可以收发所有请求,为什么Spring Cloud不行?
关注 “Java艺术” 我们一起成长!试下这篇能不能把去年写的Dubbo源码分析系列文章重新激活Dubbo RPC使用dubbo协议只需要一个长连接就可以收发所有请求,为什么使用http协议的Spring Cloud即便使用长连接也需要连接池呢?http协议是一种同步应答的交互模式的应用层协议。就是客户端向服务端建立连接后,向服务端发起请求时,客户端必须要阻塞当前连接等到服务端响应,即便使用NIO。如果你用一个Chanel向服务端发送一个http请求,没等服务端响应,你又用Chanel向服务转载 2022-03-25 21:56:54 · 531 阅读 · 0 评论 -
Mybatis Mapper接口是如何找到实现类的-源码分析
Mybatis Mapper接口是如何找到实现类的-源码分析KeyWords: Mybatis 原理,源码,Mybatis Mapper 接口实现类,代理模式,动态代理,Java动态代理,Proxy.newProxyInstance,Mapper 映射,Mapper 实现MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。我们在使用 Mybaits 进行 ,通常只需要定义几个 Mapper.转载 2022-03-25 20:02:09 · 1575 阅读 · 0 评论 -
SpringBoot应用篇(一):自定义starter
一、码前必备知识1、SpringBoot starter机制 SpringBoot中的starter是一种非常重要的机制,能够抛弃以前繁杂的配置,将其统一集成进starter,应用者只需要在maven中引入starter依赖,SpringBoot就能自动扫描到要加载的信息并启动相应的默认配置。starter让我们摆脱了各种依赖库的处理,需要配置各种信息的困扰。SpringBoot会自动通过classpath路径下的类发现需要的Bean,并注册进IOC容器。SpringBoot提供了针对日常企业..转载 2022-03-24 16:49:06 · 412 阅读 · 0 评论 -
TCP粘包和拆包问题
为什么UDP没有粘包?粘包拆包问题在数据链路层、网络层以及传输层都有可能发生。日常的网络应用开发大都在传输层进行,由于UDP有消息保护边界,不会发生粘包拆包问题,因此粘包拆包问题只发生在TCP协议中。粘包拆包发生场景因为TCP是面向流,没有边界,而操作系统在发送TCP数据时,会通过缓冲区来进行优化,例如缓冲区为1024个字节大小。如果一次请求发送的数据量比较小,没达到缓冲区大小,TCP则会将多个请求合并为同一个请求进行发送,这就形成了粘包问题。如果一次请求发送的数据量比较大,超过了缓..原创 2022-03-24 09:41:57 · 390 阅读 · 0 评论 -
你还在用 BeanUtils 试试 MapStruct,优雅的对象转换解决方案
第一次看到MapStruct的时候, 我个人非常的开心。因为其跟我内心里面的想法不谋而合。1 MapStruct 是什么?1.1 JavaBean 的困扰对于代码中JavaBean之间的转换, 一直是困扰我很久的事情。在开发的时候我看到业务代码之间有很多的JavaBean之间的相互转化, 非常的影响观感, 却又不得不存在。我后来想的一个办法就是通过反射, 或者自己写很多的转换器。第一种通过反射的方法确实比较方便, 但是现在无论是BeanUtils,BeanCopier等在...转载 2020-11-16 10:32:57 · 141 阅读 · 0 评论 -
Spring AOP——Spring 中面向切面编程
一、AOP——另一种编程思想1.1 什么是 AOPAOP (Aspect Orient Programming),直译过来就是 面向切面编程。AOP 是一种编程思想,是面向对象编程(OOP)的一种补充。面向对象编程将程序抽象成各个层次的对象,而面向切面编程是将程序抽象成各个切面。从《Spring实战(第4版)》图书中扒了一张图:从该图可以很形象地看出,所谓切面,相当于应用对象间的横切点,我们可以将其单独抽象为单独的模块。1.2 为什么需要 AOP想象下面的场景,开发中在多个模块间有转载 2022-03-23 11:46:08 · 227 阅读 · 0 评论 -
盘点获得spring上下文的几种流行方式
一 前言知识追寻者打算重温spring,以后可能每周会发一篇吧,有空就搞搞;知识追寻者(Inheriting the spirit of open source, Spreading technology knowledge;)二 获取上下文的几种方式AnnotationConfigApplicationContext:从一个或多个基于Java的配置类中加载Spring应用上下文。 AnnotationConfigWebApplicationContext:从一个或多个基于Java..转载 2022-03-23 08:32:40 · 800 阅读 · 0 评论 -
阿里二面:Redis 内存碎片是怎么产生的?
什么是内存碎片?你可以将内存碎片简单地理解为那些不可用的空闲内存。举个例子:操作系统为你分配了 32 字节的连续内存空间,而你存储数据实际只需要使用 24 字节内存空间,那这多余出来的 8 字节内存空间如果后续没办法再被分配存储其他数据的话,就可以被称为内存碎片。内存碎片Redis 内存碎片虽然不会影响 Redis 性能,但是会增加内存消耗。为什么会有 Redis 内存碎片?Redis 内存碎片产生比较常见的 2 个原因:1、Redis 存储存储数据的时候向操作系统申请的内存转载 2022-03-16 15:06:37 · 401 阅读 · 0 评论 -
Spring为何需要三级缓存解决循环依赖,而不是二级缓存?
在使用 Spring 框架的日常开发中,bean 之间的循环依赖太频繁了,Spring 已经帮我们去解决循环依赖问题,对我们开发者来说是无感知的。下面具体分析一下 Spring 是如何解决 bean 之间循环依赖,为什么要使用到三级缓存,而不是二级缓存。bean 生命周期首先大家需要了解一下 bean 在 spring 中的生命周期,bean 在 Spring 的加载流程,才能够更加清晰知道 Spring 是如何解决循环依赖的。我们在 Spring 的 BeanFactory转载 2022-03-16 14:55:33 · 404 阅读 · 1 评论 -
Mysql并发时经典常见的死锁原因及解决方法
1.mysql都有什么锁MySQL有三种锁的级别:页级、表级、行级。表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般算法:next KeyLocks锁,同时锁住记录(数据),并且锁住记录前面的Gap Gap锁,不锁记录,仅仅记录前面的GapRe...转载 2022-03-13 16:58:34 · 3474 阅读 · 0 评论 -
图解Spring解决循环依赖
问题: 循环依赖其实就是循环引用,也就是两个或则两个以上的bean互相持有对方,最终形成闭环。比如A依赖于B,B依赖于C,C又依赖于A。如下图:如何理解“依赖”呢,在Spring中有:构造器循环依赖 field属性注入循环依赖直接上代码:构造器循环依赖@Servicepublic class A { public A(B b) { }}@Servicepublic class B { public B(C c) { }转载 2022-03-13 09:08:40 · 963 阅读 · 0 评论 -
如何设置线程池参数?美团给出了一个让面试官虎躯一震的回答。
荒腔走板大家好,我是 why,一个四川好男人。今天本来应该是武汉马拉松鸣枪起跑的日子,所以先荒腔走板说几句马拉松吧。上面的图是我跑 2019 年成都马拉松的时候拍的,是一对双胞胎陪着 80 岁的父亲跑全程马拉松。图片中的老人叫罗广德,在他 75 岁之前的人生和其他的老人并无不同。但是经过他儿子的影响,在 75 岁的时候开始接触跑步的。一直就没有停下脚步,世界六大马拉松赛(纽约、伦敦、柏林、芝加哥、东京、波士顿)他已经完成了五个。本来打算今年 4 月份站上波士顿马拉转载 2022-01-25 17:11:16 · 612 阅读 · 0 评论 -
头条二面:你确定 ThreadLocal 真的会造成内存泄露?
ThreadLocal 是 Java面试过程中的“钉子户”,在网上也充斥着各种有关ThreadLocal内存泄露的问题。本文换个角度,先思考 ThreadLocal体系中的 ThreadLocalMap 为什么要设计成弱引用。1. ThreadLocal 知识体系本文还是不能免俗,在回答这个问题之前需要先和大家介绍一下 ThreadLocal 的知识,使大家对 ThreadLocal 有一个相对全面的认识。ThreadLocal 本地线程变量,主要用于解决数据访问的竞争,通常用于多.转载 2021-12-31 17:39:29 · 140 阅读 · 0 评论 -
JVM 面试必问的 CMS,你懂了吗?
前言虽然 CMS 已经是很古老的垃圾回收器了,大家现在动不动就G1、ZGC啥的,但是据我所了解,还是有很多公司的生产环境主要使用的 CMS,包括我自己呆过的几家大厂也是。因此在 JVM 面试中,CMS 也是问的最多的,包括我自己现在面试别人时,问到 JVM 这一块,我也喜欢从CMS开始,逐渐深入。不多废话,今天我们就来盘他。正文1、什么是卡表(card table)?试想一下,在进行 YGC 时,如何判断是否存在老年代到新生代的引用?一个简单的办法是扫描整个老年代,但是这个代转载 2021-12-09 10:19:33 · 235 阅读 · 0 评论 -
Redis详解(二)------ redis的五大数据类型实现原理
目录1、对象的类型与编码2、字符串对象3、列表对象4、哈希对象5、集合对象6、有序集合对象7、五大数据类型的应用场景8、内存回收和内存共享9、对象的空转时长前面两篇博客,第一篇介绍了五大数据类型的基本用法,第二篇介绍了Redis底层的六种数据结构。在Redis中,并没有直接使用这些数据结构来实现键值对数据库,而是基于这些数据结构创建了一个对象系统,这些对象系统也就是前面说的五大数据类型,每一种数据类型都至少用到了一种数据结构。通过这五种不同类型的对象,Redis可..转载 2021-12-01 16:47:43 · 164 阅读 · 0 评论 -
Redis详解(一)------ redis的底层数据结构
目录1、演示数据类型的实现2、简单动态字符串3、链表4、字典5、跳跃表6、整数集合7、压缩列表8、总结 上一篇博客我们介绍了redis的五大数据类型详细用法,但是在 Redis 中,这几种数据类型底层是由什么数据结构构造的呢?本篇博客我们就来详细介绍Redis中五大数据类型的底层实现。回到顶部1、演示数据类型的实现 上篇博客我们在介绍 key 相关命令的时候,介绍了如下命令:OBJECT ENCODING key 该命令是用.转载 2021-12-01 16:17:05 · 187 阅读 · 0 评论 -
LinkedHashMap、HashMap 源码详细分析(JDK1.8)
LinkedHashMap 源码详细分析(JDK1.8)2018.01.24 08:3749212浏览1. 概述LinkedHashMap 继承自 HashMap,在 HashMap 基础上,通过维护一条双向链表,解决了 HashMap 不能随时保持遍历顺序和插入顺序一致的问题。除此之外,LinkedHashMap 对访问顺序也提供了相关支持。在一些场景下,该特性很有用,比如缓存。在实现上,LinkedHashMap 很多方法直接继承自 HashMap,仅为维护双向链表覆写了部分方法。所以,要.转载 2021-11-25 16:11:16 · 135 阅读 · 0 评论 -
漏桶算法和令牌桶算法,区别到底在哪里?
漏桶算法和令牌桶算法是接口限流设计中常用的两种算法,网上关于这两个算法的介绍文章有很多,但不同的人有不同的理解,导致很多技术人员在学习的时候,会陷入迷茫的状态,比如说:1)如果要让自己的系统不被打垮,用令牌桶。如果保证别人的系统不被打垮,用漏桶算法;参考链接2)在“令牌桶算法”中,只要令牌桶中存在令牌,那么就允许突发地传输数据直到达到用户配置的门限,所以它适合于具有突发特性的流量。参考链接我在架构实战营中总结两种算法的技术本质和优缺点分别如下:大家会看到,与网上的一些文章对比转载 2021-11-19 14:06:13 · 311 阅读 · 0 评论 -
Elasticsearch 如何做到快速检索 - 倒排索引的秘密
本文不会关注 ES 里面的分布式技术、相关 API 的使用,而是专注分享下“ES 如何快速检索”这个主题上面。这个也是我在学习之前对 ES 最感兴趣的部分。本文大致包括以下内容:关于搜索: 传统关系型数据库和 ES 的差别 搜索引擎原理 细究倒排索引: 倒排索引具体是个什么样子的(posting list→term dic→term index) 关于 postings list 的一些巧技(FOR、Roaring Bitmaps)转载 2021-11-12 10:06:01 · 108 阅读 · 0 评论 -
replace into和insert into on duplicate key update的区别
在项目中,我们经常会遇到当数据库存在某条记录时,则更新数据,若不存在则插入数据的情况。在mysql中,replace into ...和insert into ... on duplicate key update ... 都可以实现,那么这两种有什么区别呢?replace into和on duplcate key update都是只有在primary key或者unique key冲突的时候才会执行。如果数据存在,replace into则会将原有数据删除,再进行插入操作,这样就会有一种情况,如果某些转载 2021-11-11 09:53:11 · 231 阅读 · 0 评论 -
浅谈MySQL索引的分类
什么是索引?索引是辅助存储引擎高效获取数据的一种数据结构。很多人形象的说索引就是数据的目录,便于存储引擎快速的定位数据。索引的分类我们经常从以下几个方面对索引进行分类从数据结构的角度对索引进行分类B+tree Hash Full-texts索引从物理存储的角度对索引进行分类聚簇索引 二级索引(辅助索引)从索引字段特性角度分类主键索引 唯一索引 普通索引 前缀索引从组成索引的字段个数角度分类单列索引 联合索引(复合索引)数据结构角度看索引下表是转载 2021-11-09 14:44:22 · 205 阅读 · 0 评论 -
Sharding-Jdbc 实现读写分离 + 分库分表,写得太好了
| 概览ShardingSphere-Jdbc定位为轻量级Java框架,在Java的Jdbc层提供的额外服务。它使用客户端直连数据库,以jar包形式提供服务,可理解为增强版的Jdbc驱动,完全兼容Jdbc和各种ORM框架。| MySQL主从复制1)docker配置mysql主从复制1)创建主服务器所需目录mkdir-p/usr/local/mysqlData/master/cnfmkdir-p/usr/local/mysqlData/master/data2)定义主...转载 2021-11-04 10:33:03 · 514 阅读 · 0 评论 -
Iterator 在迭代中删除元素抛异常
Iterator 仅用于遍历集合,本身并不提供像集合类那样装对象的能力。Iterator 是个接口,如果需要创建其对象,必须有一个被迭代的集合,没有集合的 Iterator 没有存在的价值。所以说,Iterator 必须依附于 Collection 对象,有一个 Iterator 对象,肯定就有一个与之关联的 Collection 对象。文章《Java 遍历 HashSet 为什么输出是有序的》一文中开始有个例子,可以看到在迭代 HashSet 的过程中对迭代遍历进行赋值,但最后输出时发现集合无任何改变转载 2021-11-03 09:39:14 · 710 阅读 · 0 评论 -
你要的Netty常见面试题总结,我面试回来整理好了
最近经常会再面试中碰到 Netty 相关的问题。全文采用大家喜欢的与面试官对话的形式展开。 如果大家觉得总结的不错的话,不妨点一个赞鼓励一下!这是我继续坚持很重要的动力来源。概览:Netty 是什么? 为什么要用 Netty? Netty 应用场景了解么? Netty 核心组件有哪些?分别有什么作用? EventloopGroup 了解么?和 EventLoop 啥关系? Bootstrap 和 ServerBootstrap 了解么? NioEventLoopGroup 默认的构转载 2021-10-29 16:12:36 · 582 阅读 · 0 评论 -
MyBatis 都有哪些 Executor 执行器 ,它们之间的区别是什么?
SimpleExecutor:每执行一次 update 或 select,就开启一个 Statement 对象,用完立刻关闭 Statement 对象。ReuseExecutor:执行 update 或 select,以 sql 作为 key 查找 Statement 对象,存在就使用,不存在就创建,用完后,不关闭 Statement 对象,而是放置于 Map<String, Statement>内,供下一次使用。简言之,就是重复使用 Statement 对象。BatchExecutor原创 2021-10-27 11:21:01 · 216 阅读 · 0 评论 -
分布式服务限流实战,已经为你排好坑了
由于API接口无法控制调用方的行为,因此当遇到瞬时请求量激增时,会导致接口占用过多服务器资源,使得其他请求响应速度降低或是超时,更有甚者可能导致服务器宕机。限流(Rate limiting)指对应用服务的请求进行限制,例如某一接口的请求限制为100个每秒,对超过限制的请求则进行快速失败或丢弃。限流可以应对: 热点业务带来的突发请求; 调用方bug导致的突发请求; 恶意攻击请求。 因此,对于公开的接口最好采取限流措施。二、为什么要分布式限流.转载 2021-10-26 10:40:20 · 286 阅读 · 0 评论 -
Lucence倒排索引
带着问题探索:全文检索,为什么要全文检索?什么是lucence?什么是倒排索引?一、全文检索要了解全文检索首先需要了解:结构化数据与非结构化数据,以及半结构化数据,这三种数据构成了我们生活中所有数据的组成形式。 结构化数据 非机构化数据 半结构化数据含义 有固定格式的的数据 无固定格式的数据 有一定格式的数据举例 数据库中的数据 ...转载 2020-03-10 17:35:17 · 270 阅读 · 0 评论 -
聊聊Mysql索引和redis跳表 ---redis的有序集合zset数据结构底层采用了跳表原理 时间复杂度O(logn)(阿里)
redis使用跳表不用B+数的原因是:redis是内存数据库,而B+树纯粹是为了mysql这种IO数据库准备的。B+树的每个节点的数量都是一个mysql分区页的大小(阿里面试)还有个几个姊妹篇:介绍mysql的B+索引原理 参考:一步步分析为什么B+树适合作为索引的结构 以及索引原理 (阿里面试)参考:kafka如何实现高并发存储-如何找到一条需要消费的数据(阿里)参考:二分查找法:各...转载 2020-03-08 21:29:45 · 607 阅读 · 0 评论 -
Java的ConcurrentHashMap
简介ConcurrentHashMap是Java中的一个线程安全且高效的HashMap实现。平时涉及高并发如果要用map结构,那第一时间想到的就是它。那么我就这几个方面了解一下ConcurrentHashMap:1)ConcurrentHashMap在JDK8里结构2)ConcurrentHashMap的put方法、szie方法等3)ConcurrentHashMap的扩容4)...转载 2020-03-04 08:56:15 · 965 阅读 · 0 评论