06 2020 档案

摘要:对一个数组按照快速排序方式排序: public class Solution { public int[] sortArray(int[] nums) { int len = nums.length; quickSort(nums, 0, len - 1); return nums; } priva 阅读全文
posted @ 2020-06-28 17:58 星火燎原智勇 阅读(210) 评论(0) 推荐(0)
摘要:不分配大内存给 Elasticsearch,事实上 jvm 在内存 < 32G 的时候会采用一个:内存对象指针压缩技术。 需要明白:不一定是 32GB,一般 linux 系统上都是介于 (31, 32),所以为了安全起见我们统一都可以设置为 31GB。 在 java 中,所有的对象都分配在堆上,然后 阅读全文
posted @ 2020-06-28 16:22 星火燎原智勇 阅读(1277) 评论(0) 推荐(0)
摘要:1、为什么需要 3 次握手 目的:为了防止 已失效的连接请求报文段 突然又传送到了服务端,因而产生错误。主要防止资源的浪费。 额外补充:TCP作为一种可靠传输控制协议,其核心思想:既要保证数据可靠传输,又要提高传输的效率,而用三次恰恰可以满足以上两方面的需求!两次无法保证数据可靠,四次及以上无法保证 阅读全文
posted @ 2020-06-28 14:40 星火燎原智勇 阅读(1317) 评论(0) 推荐(0)
摘要:1、后端服务 php 为什么迁移到 java? 网上流传已久的 “世界上最好的语言是 php”,说实话,php 基本上什么都能做,每个领域都能找到一些库。但是在性能上确实有一定的问题。 1、性能及格的服务端 性能上,传统有 C++ 和 Java,现代有 Go 和 Node 还有 Rust,php 虽 阅读全文
posted @ 2020-06-28 12:30 星火燎原智勇 阅读(370) 评论(0) 推荐(0)
摘要:前言 搜索其实是一个很复杂的场景,且如何将搜索从 0 构建到 1 其实也蛮有挑战的,尤其要保证构建的整个闭环架构合理、服务稳定、性能高效,这是需要下功夫思考和实践才能想清楚的。 分层 数据源层 索引层 es 构建和调优 搜索业务层 搜索微服务架构 搜索必备配套服务 搜索体系监控和报警 详解 1、数据 阅读全文
posted @ 2020-06-27 23:16 星火燎原智勇 阅读(464) 评论(0) 推荐(0)
摘要:1、分词源码升级一段时间后异常 主要特点:其中几个数据节点 CPU 负载飙升,线程池阻塞 线上升级完分词后,线下测试与压测都没有什么问题,统一大规模上线一段时间后频繁的出现数据节点所在的服务器节点 CPU 飚的非常高,查看日志只看到: java.lang.OutOfMemoryError: unab 阅读全文
posted @ 2020-06-27 22:45 星火燎原智勇 阅读(2548) 评论(0) 推荐(0)
摘要:背景 这里介绍的优化是基于 ik 分词源码的优化。首先,我们知道,ik 分词默认有两种分词模式,分别为:ik_max_word 和 ik_smart 这里针对这两种分词方式分别存在的问题有: ik_max_word :最细粒度分词方式 分的太细了,召回率确实很高,但是会导致召回的内容存在语义问题。例 阅读全文
posted @ 2020-06-26 23:50 星火燎原智勇 阅读(3755) 评论(1) 推荐(2)
摘要:1、避免深分页操作 es是一个搜索引擎,所以如果用这个搜索引擎对大量的数据进行搜索,并且返回搜索结果中排在最前面的少数结果,是非常合适的。 类似于后台下载功能,如果要做成类似数据库的东西,每次都进行大批量的查询,是很不合适的。如果真的要做大批量结果的查询,记得考虑用scroll api。 2、避免业 阅读全文
posted @ 2020-06-26 18:07 星火燎原智勇 阅读(747) 评论(0) 推荐(0)
摘要:1、尽量少的字段 elasticsearch 的搜索引擎严重依赖于底层的 filesystem cache,你如果给 filesystem cache 更多的内存,尽量让内存可以容纳所有的 indx segment file 索引数据文件,那么你搜索的时候就基本都是走内存的,性能会非常高。 比如说, 阅读全文
posted @ 2020-06-26 00:13 星火燎原智勇 阅读(1617) 评论(0) 推荐(0)
摘要:1、使用 bulk 批量写入 你如果要往es里面灌入数据的话,那么根据你的业务场景来,如果你的业务场景可以支持让你将一批数据聚合起来,一次性写入es,那么就尽量采用bulk的方式,每次批量写个几千条这样子。 bulk批量写入的性能比你一条一条写入大量的 document 的性能要好很多。但是如果要知 阅读全文
posted @ 2020-06-25 23:35 星火燎原智勇 阅读(1471) 评论(0) 推荐(0)
摘要:【申明】这里启动 elasticsearch 用户名为:elastic 1、设置启动 elasticsearch 用户所持有的文件句柄数 vim /etc/security/limits.conf # 在文件末尾增加以下内容 elastic soft memlock unlimited elasti 阅读全文
posted @ 2020-06-25 23:03 星火燎原智勇 阅读(1205) 评论(0) 推荐(0)
摘要:没有多余的废话,直接上方案吧! 方案一: 最笨的方案即:for * for,对应的时间复杂度为:O(n*n) 每个搜索词命中的网页是非常多的,O(n*n) 的复杂度是明显不能接受的。倒排索引是在创建之初可以进行排序预处理,问题转化成两个有序的list求交集,就方便多了。 画外音:比较笨的方法。 方案 阅读全文
posted @ 2020-06-24 17:35 星火燎原智勇 阅读(1619) 评论(1) 推荐(0)
摘要:1、为什么需要倒排索引 倒排索引,也是索引。 索引,初衷都是为了快速检索到你要的数据。 每种数据库都有自己要解决的问题(或者说擅长的领域),对应的就有自己的数据结构,而不同的使用场景和数据结构,需要用不同的索引,才能起到最大化加快查询的目的。 对 Mysql 来说,是 B+ 树,对 Elastics 阅读全文
posted @ 2020-06-24 11:40 星火燎原智勇 阅读(2106) 评论(0) 推荐(0)
摘要:CAP C(Consistency):强一致性 A(Availability):可用性 P(Parition tolerance):分区容错性 这三个基本需求,最多只能同时满足其中的两项,在分布式环境下因为P是必须的,因此往往选择就在 CP 或者 AP 中。 各种组合的场景 CA - 这个比较特殊, 阅读全文
posted @ 2020-06-24 11:04 星火燎原智勇 阅读(873) 评论(0) 推荐(0)
摘要:开篇 例如我们常见的 kafka、nginx 以及 tomcat 等底层都用的这类技术,这里暂且用 kafka 来列举案例。 当我们从 kafka 读取数据的时候,我们会调用 read 方法读取指定的内容,然后调用 write 方法,将字节流写到 socket 中,那么,我们调用这两个方法,在 OS 阅读全文
posted @ 2020-06-18 23:47 星火燎原智勇 阅读(3072) 评论(3) 推荐(2)
摘要:网上充斥着各类类似于这样的文章:rpc 比 http 快了多少倍?既然有了 http,为什么还要用 rpc 调用等等。遇到这类文章,说明对 http 和 rpc 是由理解误区的。 这里再次重复强调一遍,通信协议不是 rpc 最重要的部分,不要被这类回答带偏。如果要了解 rpc 请更多的去了解服务治理 阅读全文
posted @ 2020-06-10 11:29 星火燎原智勇 阅读(27117) 评论(8) 推荐(18)
摘要:概念 Redis 事务的本质是通过 MULTI、EXEC、WATCH 等一组命令的集合。事务支持一次执行多个命令,一个事务中所有命令都会被序列化。在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命令序列中。 redis 事务的三个阶段 事务开始 MULTI 阅读全文
posted @ 2020-06-10 10:08 星火燎原智勇 阅读(272) 评论(0) 推荐(0)
摘要:序列化 序列化是将一个对象变成一个二进制流就是序列化, 反序列化是将二进制流转换成对象。 为什么要序列化? 1. 减小内存空间和网络传输的带宽 2. 分布式的可扩展性 3. 通用性,接口可共用。 dubbo RPC是dubbo体系中最核心的一种高性能、高吞吐量的远程调用方式,我喜欢称之为多路复用的T 阅读全文
posted @ 2020-06-10 00:54 星火燎原智勇 阅读(1139) 评论(0) 推荐(1)