lucene

铁打的大厂,流水的程序员。大厂究竟在招的都是什么“神人”?

落花浮王杯 提交于 2020-08-10 18:26:55
话不多说,先上长图,看看主流大厂用人要求。 通过这张长图,再结合各大招聘网站岗位要求,可以分析出当下一线企业对于Java岗位的要求,无非注重考核这些能力: 编程功底(源码阅读、设计模式),海量数据处理能力(数据库),主流框架的驾驭能力(分布式、微服务、中间件),业务对口的实战能力,架构思维(可扩展、可用性、实时性)。 因此,是否具备大规模系统的架构和设计能力,是区分普通程序员和高级程序员,尤其是架构师的一个分水岭。 如何去准备和提升相对应的能力呢? 这里贴上一张 进阶学习Xmind 图和 学习思维导 图,图中将大厂用人需求中的每一项能力具体学习哪些技术分项,多罗列出来,供大家查漏补缺。 编程语言 强类型:C++、Java 弱类型:Javascript、Python 标记型:XML、HTML、JSON、YAML 开发框架 表现层:React、Vue、Flutter、Weex 领域层:Spring、Spring Boot 数据层:Hibernate、MyBatis、JPA 基础层:Log4j、LogBack、Quartz、C3P0 程序设计 面向对象设计 OOD 设计模式 Design Patterns 领域驱动设计 DDD 数据库类 关系型:MySQL、PostgreSQL、Oracle NoSQL:Redis、MongoDB、HBase、Neo4j SQL、存储过程 查询优化(索引

突击Java面试-分布式搜索引擎的架构原理

时光总嘲笑我的痴心妄想 提交于 2020-08-10 06:41:09
1 面试题 说说ES的分布式架构原理 2 考点分析 在搜索这块,曾经lucene 是最流行的搜索库. 几年前业内一般都问,你了解 lucene 吗?你知道倒排索引的原理吗? 但现在不问了,因为现在项目基本都是采用基于 lucene 的分布式搜索引擎—— ElasticSearch. 现在分布式搜索基本已经成为互联网系统的标配,其中尤为流行的就是 ES,前几年一般用 solr。但是最近基本大部分企业和项目都开始转向 ES. 所以互联网面试,肯定会跟你聊聊分布式搜索引擎,就一定会聊到ES! 如果面试官问你第一个问题,确实一般都会问你 es 的分布式架构设计能介绍一下么?就看看你对分布式搜索引擎架构的一个基本理解。 3 详解 ES的设计理念就是分布式搜索引擎,底层其实还是基于 lucene 的. 核心思想 就是在多台机器上启动多ES进程实例,组成ES集群. 3.1 基本单位 ES 中存储数据的 基本单位 是 索引 . 比如说你现在要在 ES 中存储一些订单数据,应该在 ES 中创建一个索引 order_idx ,所有的订单数据就会写到该索引中. 一个索引概念上差不多就相当于MySQL 中的一张表. index -> type -> mapping -> document -> field。 3.2 实例 为便于理解,我在这里做个类比.切记,仅仅是类比!绝不等同! index 相当于

【漫画】ES原理 必知必会的倒排索引和分词

回眸只為那壹抹淺笑 提交于 2020-08-09 20:10:51
倒排索引的初衷 倒排索引,它也是索引。索引,初衷都是为了快速检索到你要的数据。 我相信你一定知道mysql的索引,如果对某一个字段加了索引,一般来说查询该字段速度是可以有显著的提升。 每种数据库都有自己要解决的问题(或者说擅长的领域),对应的就有自己的数据结构,而不同的使用场景和数据结构,需要用不同的索引,才能起到最大化加快查询的目的。 对 Mysql 来说,是 B+ 树,对 Elasticsearch/Lucene 来说,是倒排索引。 倒排索引是什么 刚刚胖滚猪说到图书的例子,目录和索引页,其实就很形象的可以比喻为正排索引和倒排索引。为了进一步加深理解,再看看熟悉的搜索引擎。没有搜索引擎时,我们只能直接输入一个网址,然后获取网站内容,这时我们的行为是document -> words。此谓「正向索引」。后来,我们希望能够输入一个单词,找到含有这个单词,或者和这个单词有关系的文章,即word -> documents。于是我们把这种索引,叫「反向索引」,或者「倒排索引」。 好了,我们来总结一下: 倒排索引的实现 假如一篇文章当中,有这么一段话"胖滚猪编程让你收获快乐",我要通过"胖滚猪"这个词来搜索到这篇文章,那么应该如何实现呢。 我们是很容易想到,可以将这篇文章的词都拆开,拆分为"胖滚猪"、"编程"、"收获"、"快乐"。注意我们把没用的词,比如"让"去掉了

探究 | Elasticsearch集群规模和容量规划的底层逻辑

故事扮演 提交于 2020-08-08 01:26:20
0、引言 实战中经常遇到的问题: 问题 1:请问下大家是如何评估集群的规模?比如数据量达到百万,千万,亿万,分别需要什么级别的集群,这要怎么评估? ps:自己搭建的测试环境很难达到这一级别。 问题 2: 问题 3:我看了很多文章关于 es 集群规划的文章,总感觉乱七八糟的,没有一个统一的规划思路。如何根据硬件条件和数据量来规划集群,设置多少节点,每个节点规划多少分片和副本? Elasticsearch 集群规模和容量规划:是进行 Elasticsearch 集群部署前对所需资源类型和数量的规划。 通过本文,您将了解: Elasticsearch 计算资源详解 Elasticsearch 架构、增删改查操作和资源需求 Elasticsearch 集群规模和容量规划的方法论 1、Elasticsearch 基础架构 1.1 自顶向下的架构体系 Cluster—协同工作的节点组,以保障 Elasticsearch 的运行。 Node—运行 Elasticsearch 软件的 Java 进程。 Index—一组形成逻辑数据存储的分片的集合。 Shard—Lucene 索引,用于存储和处理 Elasticsearch 索引的一部分。 Segment—Lucene 段,存储了 Lucene 索引的一部分且不可变。 Document—条记录,用以写入 Elasticsearch

elasticsearch为什么只能分配最大内存32G

删除回忆录丶 提交于 2020-08-07 21:38:20
elasticsearch分配内存的配置: 1、设置变量的方式: export ES_HEAP_SIZE=32G 该方式比较好 2、启动es时添加启动差数: -Xmx 32G -Xms 32G ,Xmx和Xms的大小最好一样,防止程序在运行时改变大小。 es最大分配32G内存的原因: 1、内存对于Elasticsearch来说绝对是重要的,用于更多的内存数据提供更快的操作。而且还有一个内存消耗大户-Lucene Lucene的设计目的是把底层OS里的数据缓存到内存中。Lucene的段是分别存储到单个文件中的,这些文件都是不会变化的,所以很利于缓存,同时操作系统也会把这些段文件缓存起来,以便更快的访问。 Lucene的性能取决于和OS的交互,如果你把所有的内存都分配给Elasticsearch,不留一点给Lucene,那你的全文检索性能会很差的。 最后标准的建议是把50%的内存给elasticsearch,剩下的50%也不会没有用处的,Lucene会很快吞噬剩下的这部分内存。不要超过32G 2、不分配大内存给Elasticsearch, 事实上jvm在内存小于32G的时候会采用一个内存对象指针压缩技术 。 在java中,所有的对象都分配在堆上,然后有一个指针引用它。指向这些对象的指针大小通常是CPU的字长的大小,不是32bit就是64bit,这取决于你的处理器

ES内存那点事

让人想犯罪 __ 提交于 2020-08-06 10:23:47
注: 本文主要针对ES 2.x。 “该给ES分配多少内存?” “JVM参数如何优化?“ “为何我的Heap占用这么高?” “为何经常有某个field的数据量超出内存限制的异常?“ “为何感觉上没多少数据,也会经常Out Of Memory?” 以上问题,显然没有一个统一的数学公式能够给出答案。 和数据库类似,ES对于内存的消耗,和很多因素相关,诸如数据总量、mapping设置、查询方式、查询频度等等。默认的设置虽开箱即用,但不能适用每一种使用场景。作为ES的开发、运维人员,如果不了解ES对内存使用的一些基本原理,就很难针对特有的应用场景,有效的测试、规划和管理集群,从而踩到各种坑,被各种问题挫败。 要理解ES如何使用内存,先要理解下面两个基本事实: 1. ES是JAVA应用 2. 底层存储引擎是基于Lucene的 看似很普通是吗?但其实没多少人真正理解这意味着什么。 首先,作为一个JAVA应用,就脱离不开JVM和GC。很多人上手ES的时候,对GC一点概念都没有就去网上抄各种JVM“优化”参数,却仍然被heap不够用,内存溢出这样的问题搞得焦头烂额。了解JVM GC的概念和基本工作机制是很有必要的,本文不在此做过多探讨,读者可以自行Google相关资料进行学习。如何知道ES heap是否真的有压力了? 推荐阅读这篇博客: Understanding Memory Pressure

lucene主要学习流程

故事扮演 提交于 2020-08-06 08:05:20
本文是Lucene学习的大概脉络,还需编辑优化 1. 索引类型 索引过程是由Lucene所提供的核心功能之一 ,IndexWriter 是索引过程中最重要的和核心组件。 IndexWriter用于创建或更新索引,而不是用来读取索引。 graph LR field1[field] --> doc[Document] field2[field] --> doc[Document] field3[field] --> doc[Document] field4[field] --> doc[Document] doc[Document] --> analyzer[Analyzer] analyzer[Analyzer] --> indexWriter[IndexWriter] indexWriter[IndexWriter] --> directory[Directory] 1.1 IndexWriter 创建以及更新索引的核心 目前只有一个构造函数: public IndexWriter(Directory d, IndexWriterConfig conf); 1.2 Directory 表示索引的存储位置 1.3 Analyzer 负责分析一个文件,并从将被索引的文本获取令牌/字 1.4 Document Document代表一个虚拟文档与字段,其中字段是可包含在物理文档的内容

最新阿里Java高频面试真题汇总(备战秋招)

早过忘川 提交于 2020-08-06 07:47:31
目录 : 技术一面(23问) 技术二面(3大块) JAVA开发技术面试中可能问到的问题(17问) JAVA方向技术考察点(33快) 项目实战(7大块) 必会知识(48点) 面试小技巧注意事项 1. 阿里技术一面 Java IO流的层次结构? 请说出常用的异常类型? SKU的全称是什么,SKU与SPU的区别及关系? FileInputStream在使用完以后,不关闭流,想二次使用可以怎么操作? 设计一个分步式登录系统? Spring加载过程? 自己有没有写过类似Spring这样的AOP事务? Java中 try..catch关闭流的语法糖? 如何设计一个秒杀系统?要考虑什么? 有没有遇到进线上GC,出现的症状是什么样的,怎么解决的? spring的加载过程? atomic与 volatile的区别? Thread的 notify给notifyAll的区别? notifiy是唤醒的那一个线程? Thread.sleep唤醒以后是否需要重新竞争? 单例有多少种写法?有什么区别?你常用哪一种单例,为什么用这种? 问一个Thread.join相关的问题? 商品相关模块系统怎么设计数据模型? 写一个JAVA死锁的列子? 如何解决死锁? GC回收算法,及实现原理? HashMap数据存储结构? key重复了怎么办?是如何解决的? Spring AOP的实现原理,底层用什么实现的? 2.

elasticsearch 缓存

二次信任 提交于 2020-08-06 03:56:52
1. 背景 在使用ES进行查询的时候,往往可以发现同一条query,查询多次后,越来越快直至1,2毫秒,聪明的你肯定一下就联想到,这肯定是缓存了查询结果到内存。 通过查询官方文档,可以看到有3个小章节描述缓存: https://www.elastic.co/guide/en/elasticsearch/reference/current/query-cache.html https://www.elastic.co/guide/en/elasticsearch/reference/current/shard-request-cache.html https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-fielddata.html 以及1个小章节描述如何清理缓存: https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-clearcache.html PS:分片中数据发生改变的时候,缓存自动失效 通过 GET /_stats/query_cache(request_cache,fielddata)?human 或者 GET /_nodes/stats/indices/query_cache(request

Elasticsearch系列---相关性评分算法及正排索引

倾然丶 夕夏残阳落幕 提交于 2020-08-05 21:20:06
概要 上一篇中多次提到了按相关性评分,本篇我们就来简单了解一下相关性评分的算法,以及正排索引排序的优势。 评分算法 Elasticsearch进行全文搜索时,Boolean Model是匹配的基础,先用boolean model将匹配的文档挑选出来,然后再运用评分函数计算相关度,参与的函数如我们提到的TF/IDF、Length Norm等,再加上一些控制权重的参数设置,得到最后的评分。 Boolean Model 作为全文搜索的基础,Boolean Model的结果决定文档是否要进行下一步的评分操作,使用AND、OR、NOT这种逻辑操作符来判断查找的文档,整个过程不评分,非常快速地将匹配的文档筛选出来。 由于Elastisearch各个版本相关度评分算法有异同,我们以6.3.1版本的BM25算法为准。 TFNORM/IDF 由Boolean Model之后得到的文档,我们开始计算文档的评分,每个文档的评分取决于每个关键词在文档中的权重,权重我们会从以下几个方面考虑: TFNORM 即词频长度(Term Frequency Norm),单个term在文档中出现的频率,并结合字段长度,出现次数越高,字段长度越低,分越高,计算公式: tfNorm(t in d) = (freq * (k1 + 1)) / (freq + k1 * (1 - b + b * fieldLength /