- 博客(215)
- 收藏
- 关注
原创 ES相关面试问题整理
索引模板,一种复用机制,就像一些项目的开发框架如 Laravel 一样,省去了大量的重复,体力劳动。当新建一个 Elasticsearch 索引时,自动匹配模板,完成索引的基础部分搭建。模板定义,看似复杂,拆分来看,主要为如下几个部分:"order": 0, // 模板优先级"template": "sample_info*", // 模板匹配的名称方式"settings": {...}, // 索引设置。
2023-10-12 10:42:25
1400
原创 Redis基础-概念和基础
Redis是一款内存高速缓存数据库。(远程数据服务),使用C语言编写,Redis是一个key-value存储系统(键值存储系统),支持丰富的数据类型。Redis是一种支持key-value等多种数据结构的存储系统。可用于缓存,事件发布或订阅,高速队列等场景。支持网络,提供字符串,哈希,列表,队列,集合结构直接存取,基于内存,可持久化。
2023-09-27 10:10:57
185
原创 kafka基础架构
先看kafka基础架构的一张图:1)Producer :消息生产者,就是向 kafka broker 发消息的客户端;2)Consumer :消息消费者,向 kafka broker 取消息的客户端; 消费者会保留消费位置信息,保存位置是保存在zk里面,记录当前消费分区里面的消息的位置(zk作用)3)Consumer Group (CG):消费者组,由多个 consumer 组成。消费者组内每个消费者负 责消费不同分区的数据,一个分区只能由一个组内消费者消费;消费者组之间互
2022-01-05 14:46:34
431
1
原创 Springcloud系列 - gateway入门
gateway和zuul的区别spring-cloud-Gateway是spring-cloud的一个子项目。而zuul则是netflix公司的项目,只是spring将zuul集成在spring-cloud中使用而已。因为zuul2.0连续跳票和zuul1的性能表现不是很理想,所以催生了spring团队开发了Gateway项目。Zuul:使用的是阻塞式的 API,不支持长连接,比如 websockets。 底层是servlet,Zuul处理的是http请求 没有提供异步支持,流控等均由hy
2021-09-01 23:17:49
396
1
原创 nacos注册中心
nacos概念命名空间:用于进行租户粒度的配置隔离,常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。配置:需要变更的参数、变量等从代码中分离出来独立管理,以独立的配置文件的形式存在。通常以 param-key=param-value 的形式存在。配置集:一组相关的配置项的集合称。一个配置文件通常就是一个配置集,一个系统或者应用可以包含多个配置集。常用于不同的应用或组件使用了相同的配置类型,如 database_url 配置和 MQ_topic
2021-06-09 11:03:00
514
1
原创 docker安装redis
docker 安装 redis1、下载镜像文件docker pull redis 2、创建实例并启动mkdir -p /mydata/redis/conf touch /mydata/redis/conf/redis.conf docker run -p 6379:6379 --name redis -v /mydata/redis/data:/data -v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \ -d redis redis-
2021-04-19 14:56:23
158
原创 sharding-jdbc执行原理
当Sharding-JDBC接受到一条SQL语句时,会陆续执行SQL解析 ->查询优化 -> SQL路由 -> SQL改写 -> SQL执行 ->结果归并,最终返回执行结果。SQL解析SQL解析过程分为词法解析和语法解析。 词法解析器用于将SQL拆解为不可再分的原子符号,称为Token。并根据不同数据库方言所提供的字典,将其归类为关键字,表达式,字面量和操作符。 再使用语法解析器将SQL转换为抽象语法树。例如,以下SQL:SELECT id, na...
2021-04-07 14:14:00
945
原创 Sharding JDBC 基本使用
创建数据库:t_order1,t_order2 订单表水平分表,订单表含有字段字段:order_id 订单id price 价格 user_id 用户id status 订单状态引入maven:springboot + mybatis 框架引入 sharding jdbc 依赖包 sharding-jdbc-spring-boot-starter分片规则配置:...
2021-04-07 10:34:01
2188
1
原创 sharding-jdbc核心概念记录
sharding-jdbc常用的分片场景策略:取余/取模分片:优点-均匀存放数据,缺点-扩容非常困难按照范围分片:比较好扩容,数据分布不均匀,可能造成资源浪费按照时间分片:比较容易将热点数据区分出来按照枚举值分片:例如按照地区分片按照目标字段前缀指定进行分区:自定义规则sharding-jdbc核心概念:sql:逻辑表:水平拆分的数据库(表)的相同逻辑和数据结构表的总称。例:订单数据根据主键尾数拆分为 10 张表,分别是t_order_0到t_order_9,他们...
2021-04-02 15:39:30
295
原创 Sharding Sphere基本概念理解
什么是 Sharding SphereApache ShardingSphere(Incubator) 是一套开源的分布式数据库中间件解决方案组成的生态圈。组成: 1.Sharding-JDBC 2.Sharding-Proxy 3.Sharding-Sidecar功能:提供标准化的数据分片、分布式事务和数据库治理功能目的:充分合理地在分布式的场景下利用关系型数据库的计算和存储能力,而并非实现一个全新的关系型数据库。它通过关注不变,进而抓住事物本质...
2021-01-12 21:54:45
8760
转载 ES的Search流程过程理解
GET操作只能对单个文档进行处理,由_index、_type和_id三元组来确定唯一文档。但搜索需要一种更复杂的模型,因为不知道查询会命中哪些文档。找到匹配文档仅仅完成了搜索流程的一半,因为多分片中的结果必须组合成单个排序列表。集群的任意节点都可以接收搜索请求,接收客户端请求的节点称为协调节点。在协调节点,搜索任务被执行成一个两阶段过程,即query then fetch。真正执行搜索任务的节点称为数据节点。需要两个阶段才能完成搜索的原因是,在查询的时候不知道文档位于哪个分片,因此索引的所有分片(某
2021-01-12 15:47:23
3943
转载 ES的GET流程理解以及思考
GET流程ES的读取分为GET和Search两种操作,这两种读取操作有较大的差异,GET/MGET必须指定三元组:_index、_type、_id。也就是说,根据文档id从正排索引中获取内容。而Search不指定_id,根据关键词从倒排索引中获取内容。一个GET请求的简单例子,如下:curl -XGET http://127.0.0.1:9200/secisland/_doc/1?pretty响应:{ "_index": "secisland", "_type": "_doc",
2020-12-18 16:28:52
2879
原创 理解Elasticsearch写入过程原理
1. lucene的写操作及其问题Elasticsearch底层使用Lucene来实现doc的读写操作,Lucene通过public long addDocument(...);public long deleteDocuments(...);public long updateDocument(...);三个方法来实现文档的写入,更新和删除操作。但是存在如下问题没有并发设计 lucene只是一个搜索引擎库,并没有涉及到分布式相关的设计,因此要想使用Lucene来处理海量数据,并利用
2020-12-14 20:44:41
1734
1
原创 ES的滚动搜索
游标查询Scroll滚动搜索API,即Search Scroll API,可通过搜索请求,获取大量搜索结果。滚动搜索有点类似于数据库中的分页查询。ES对于from+size的个数是有限制的,二者之和不能超过1w。当所请求的数据总量大于1w时,可用scroll来代替from+size。如果一次性要查出来比如10万条数据,那么性能会很差,此时一般会采取用scoll滚动查询,一批一批的查,直到所有数据都查询完处理完。scroll查询 可以用来对 Elasticsearch 有效地执行大批量..
2020-12-11 16:49:05
1530
原创 索引分词器
了解Elasticsearch分词的原理、过程,以及如何添加新的分词器等,同时插件相关知识,及其功能与安装等。分词器的概念在Elasticsearch中,索引分析模块是可以通过注册分词器(analyzer)来进行配置。分词器的作用是当一个文档被索引的时候,分词器从文档中提取出若干词元(token)来支持索引的存储和搜索。分词器(omalyzer)是由一个分解器(tokenizer)、零个或多个词元过滤器(token filters)组成。分解器处理前可能要做一些预处理,比如去掉里面的HTML
2020-12-09 15:37:54
726
原创 ES搜索和DSL
前面主要介绍了Elasticsearch的索引和映射,但这两个内容只解决存储的问题,在使用Elasticsearch的时候,大部分是和搜索相关的内容。现在开始介绍Elasticsearch的搜索功能,通过学习详细了解搜索的语法和查询专用语言(DSL)的相关知识。深入搜索搜索方式1.URL参数搜索请求:GET http://127.0.0.1:9200/secislan/_search?参数,多个参数用&分开。2.POST请求参数搜索请求:POST http://127
2020-12-02 16:08:17
897
原创 ES映射的使用
映射是定义存储和索引的文档类型以及字段的过程。索引中的每一个文档都有一个类型,每种类型都有它自己的映射。一个映射定义了文档结构内每个字段的数据类型。映射通过配置来定义字段类型与该类型相关联的元数据的关系。例如,可以通过映射来定义日期类型的格式、数字类型的格式或者文档中所有字段的值是否应该被_all字段索引等。本章将介绍映射的概念、参数,以及动态映射的使用等。概念1.映射类型每个索引拥有一个或多个映射类型,用来在索引中将文档划分为不同的逻辑组。每个映射类型拥有:□元字段:用来定义如何处理
2020-12-01 23:41:14
1576
原创 ES索引理解
索引创建索引创建索引的时候可以通过修改number_of_shards和number_of_replicas参数的数量来修改分片和副本的数量。在默认的情况下分片的数量是5个,副本的数量是1个。例如,创建三个主分片,两个副本分片的索引。请求:PUT http://127.0.0.1:9200/secisland/参数:后面可以通过update-index-settings API完成对副本数量的修改。例如请求:PUT http://127.0.0.1:9200/secis
2020-12-01 22:37:59
2133
原创 ES高级客户端文档操作实战
在Elasticsearch中,高级客户端支持以下文档相关的API:(1)Single document APIs——单文档操作API。(2)Index API——文档索引API。(3)Get API——文档获取API。(4)Exists API——文档存在性判断API。(5)Delete API——文档删除API。(6)Update API——文档更新API。(7)Term Vectors API——词向量API。(8)Bulk API——批量处理API。(9)Multi-Get API——多文档获取
2020-12-01 15:04:16
3336
1
原创 ElasticSearch入门,高级客户端了解
上一篇我们对elasticsearch的基本概念有了一些了解,然后我们需要懂一些基本操作。对外接口1 创建索引库在请求URL中输入:http://127.0.0.1:9200/secisland?pretty。在请求的方法中选择PUT,创建索引库示意图点击Request按钮后可以在右边看到返回的内容如下,表示建库成功:执行完建库后查询一下库的状态,有两种方式查看,如果用命令查看,可以在浏览器中执行http://127.0.0.1:9200/_cat/indices?v.
2020-11-30 16:34:42
770
原创 Elasticsearch术语及概念熟悉
想要学好、用好Elasticsearch,首先要了解其核心概念、名词和属性。这就好比想要看懂地图,首先要知道地图里常用的标记符号一样。Elasticsearch的核心概念有索引词(term)、节点(Node)、集群(Cluster)、Shards、Replicas、Index、Type、Document、Settings、Mapping和Analyzer,其含义分别如下所示。1.索引词(term)在Elasticsearch中索引词(term)是一个能够被索引的精确值。foo、Foo、FOO几个
2020-11-30 10:05:42
1064
转载 ES在linux上安装操作
Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene(TM) 基础上的搜索引擎.当然 Elasticsearch 并不仅仅是 Lucene 那么简单,它不仅包括了全文搜索功能,还可以进行以下工作:分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。 实时分析的分布式搜索引擎。 可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据Elasticsearch具备以下特点:分布式,无需人工搭建集群(solr就需要人为配
2020-11-26 11:32:27
907
原创 说起java的线程同步,还算优秀的我总是忘的明明白白
实现多线程同步,java提供了多种方式,比如Synchronized、Lock、Volatile关键字等。但是他们的区别是什么呢,至今对这些东西我还是很懵懂的,所以是时候要对这些东西做一些了结了,不然每次看过就忘Volatile关键字volatile通常被比喻成"轻量级的synchronized",也是Java并发编程中比较重要的一个关键字。和synchronized不同,volatile是一个变量修饰符,只能用来修饰变量。无法修饰方法及代码块等。volatile关键字的作用:保证了变量的.
2020-05-13 18:14:20
224
2
原创 面试官每次问我关于线程间通信方法,我都回答的很糟糕
线程的生命周期废话不多写。首先我们先回顾回顾,理解下线程的生命周期,以及不同的阶段的区别:新建状态(NEW)当程序使用new关键字创建了一个线程之后,该线程就处于新建状态,此时仅由JVM为其分配内存,并初始化其成员变量的值就绪状态(RUNNABLE)当线程对象调用了 start()方法之后,该线程处于就绪状态。Java虚拟机会为其创建方法调用栈和程序计数器,等待调度运行。运行状态(RUNNING)如果处于就绪状态的线程获得了 CPU,开始执行run()方法的线程执行体,
2020-05-12 16:59:01
440
原创 对redis相关知识的总结
之前对redis的知识已经做过一些了解了,今天主要做一个总结,梳理下相关的知识。redis的基本数据类型:string、是redis中最基本的数据类型,一个key对应一个value。String类型是二进制安全的,意思是 redis 的 string 可以包含任何数据。如数字,字符串,jpg图片或者序列化的对象。hash、包含键值对的无序散列表。value 只能是字符串,不能嵌套其他类型。list、List 说白了就是链表(redis 使用双端链表实现的 List),是有序的,value可以
2020-05-11 18:00:13
225
原创 作为合格的程序猿,当面试官问我线程池我怎么也得扯上两分钟
作为一个面试经验不算丰富的程序员,在这行业摸爬滚打几年。我立志要征服个大公司的面试官。原则就是小厂我随便虐,大厂随便虐我。所以在去面试之前,java基础还是要恶补一番的。java线程池作为一个面试官常常问的东西,我是必须得熟悉的。四种线程池Java通过Executors提供四种线程池,分别为:1、newSingleThreadExecutorExecutors.newSingleThreadExecutor()返回一个线程池(这个线程池只有一个线程),保证所有任务按照指定顺序(FIFO, L
2020-05-11 17:51:36
279
原创 理解redis的分布式高可用
还是老话,直入主题。今天就是再次熟悉和理解下redis的高可用,啥是高可用呢,不废话了大家应该都知道。所以再说直白点,前两篇我们了解了redis的基础数据结构和一些高级特性,所以今天,就是来理解redis的主从复制、哨兵模式已经redis cluster这三种模式的。好了,让我们开始主从复制主从复制配置在salve配置文件redis.conf中配置 slaveof 192.16...
2020-04-21 11:01:12
334
原创 对redis基础知识记录
首先直入主题,理解下非关系型数据库的特点:1、存储非结构化的数据,比如文本、图片、音频、视频。 2、表与表之间没有关联,可扩展性强。 3、保证数据的最终一致性。遵循 BASE理论。 Basically Available(基本 可用); Soft-state(软状态); Eventually Consistent(最终一致性)。 4、支持海量数据的存储和高并发的高效读写。 5、支持...
2020-04-15 17:30:36
325
原创 论多数据源(读写分离)的实现方案
好的,作为一个合格的bug生产者,我们直接进入主题,多数据源和读写分离实现方案。首先多数据源和读写分离什么时候我们才需要呢?多数据源:一个单体项目过于复杂,需要操作多个业务库的时候,就需要多数据源操作不同的数据读写分离:数据库压力较大时,我们考虑读写分离,主库写,从库读,减少数据库的压力。多个库数据是一样的。理解完使用场景后,再入主题,怎么实现呢?这里说三种实现方式...
2020-04-14 23:12:28
911
原创 Druid连接池的使用以及注意事项
Druid连接池其实在网上一找一大堆文章,讲实话这里也只是作为自己记录下使用如何使用这个连接池。好的,废话不多说。什么是Druid连接池?Druid首先是一个数据库连接池。Druid连接池是阿里巴巴开源的数据库连接池项目。Druid连接池为监控而生,内置强大的监控功能,监控特性不影响性能。内置了StatFilter功能,能采集非常完备的连接池执行信息,Druid连接池内置了一个监控页面,提...
2020-04-14 23:08:31
1314
原创 论内存溢出的排查过程
作为一个没有感情的代码杀手,写代码的时候难免写出一个死循环啥的,或者动不动造成内存泄漏直到内存溢出,那也是难免并且情有可原的。但是我们不能只是做一个简单的代码复制工具人,我们写的bug,我们当然也要直到怎么去解决它咯。好的,今天就来记录下,如果解决内存溢出的问题。制造一起内存溢出事故机智的我当然不可能故意拿着实际项目来弄一个内存溢出的事故咯,这样做了怕是见不到明天的太阳了。所以这里写一...
2020-04-13 17:14:00
354
原创 论线上如何排查一次CPU100%的情况
记录如何排查CPU100%问题。当我们把服务发布到服务器器,可能会因为一些问题造成我们的服务器CPU被打满甚至超过100%,那如果我们想知道到底上在做什么操作导致CPU持续过高呢?因为在线上,我们只能通过日志看问题,或者排查到哪个进程或者哪个线程持续占用CPU。然后才能找到具体问题在哪里才能进行解决。所以这里我们模拟一个死循环导致CPU过高的情况,然后如何快速的找到问题在哪。问题代码案...
2020-04-13 14:46:49
394
原创 我的JVM总结
目前总结是jvm相关的一些知识体系,虽然不是很深,但是也让自己对jvm有了一个比较总体的认知。1.jvm的内存结构,主要对堆、栈的理解和使用2. 垃圾回收机制,对垃圾回收器和垃圾回收算法的理解。如何判断垃圾。分代思想和分区思想3. 类的加载机制,类的加载过程是怎样?分别做了什么事情。还有类加载器的了解。以及什么是双亲委派模式4.内存的分配策略,内存分配到堆是遵循什么策略5...
2020-04-11 17:58:58
125
原创 GC优化和JVM优化指南
GC优化内存被使用了之后,难免会有不够用或者达到设定值的时候,就需要对内存空间进行垃圾回收。并且垃圾回收有不同的回收器,所以针对哪个回收器更好,其实我们可以分别试一下做一次比较。分别去分析不同的回收器的吞吐量和回收时间。选择最优的一个垃圾回收器。垃圾收集发生的时机一般以下几种情况会发生垃圾回收当Eden区或者S区不够用了老年代空间不够用了方法区空间不够用了System....
2020-04-11 16:41:16
569
原创 JVM参数以及工具分析使用
首先,我们对于jvm的一些知识已经都有了一些了解。从内存结构到内存分配的策略,再到类的加载机制,然后就是对于垃圾回收机制的理解,虽然还有很多细节的地方我们不是很了解,但是细节不是一天两天就能完全记住了,要靠我们后面再实践中不断的总结和发现问题。所以我们现在就开始了解下jvm的一些工具的使用,方便我们对jvm进行优化。JVM参数首先还是先来看看jvm提供的一些参数,我们有对堆、栈的一些命令有...
2020-04-10 15:52:03
258
原创 理解JVM 垃圾回收机制
对于jvm的内存结构,其实就是对堆,栈的了解。然后也了解了jvm的内存分配的规则:优先分配Eden区域、大对象直接进入老年代、到达一定年龄(长期存活对象)进入老年代、动态对象年龄判断、空间分配担保。对于这些有了了解之后,我们也了解了类加载机制:加载、校验、准备、解析、初始化等等,重要是在准备和初始化阶段,经常笔试会做到一些关于类加载的问题。接下来我们了解下垃圾回收机制。什么是垃圾?在jav...
2020-04-08 14:01:42
219
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人