自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Tyshawn的博客

你眼中的世界就是你自己的样子。

原创 如何停止一个正在运行的线程?

如何停止一个正在运行的线程? 这个一个面试常问的问题, 我们有两种办法, 分别是stop()和interrupt(), 但stop()太过于暴力, 无法保证线程业务的原子性, 且已过期, 不推荐使用. 使用stop()来停止线程 stop()方法让线程立即停止运行, 这种暴力停止可能会破坏线程业务...

2020-04-16 14:50:36 77 0

原创 MySQL分库分表必知必会

1. 为什么要分库分表(设计高并发系统的时候,数据库层面该如何设计)? 一个高并发系统的瓶颈主要在数据库层, 为了缓解数据库的压力, 我们可以这样做: 使用Redis缓存减少数据库的读并发. 使用Kafka消息队列来进行写并发削峰. 数据库SQL优化, 必须走索引. 水平分表. 读写分离. 垂直...

2020-03-28 14:19:27 194 0

原创 MySQL主从复制原理

MySQL主从复制和Redis主从复制有点像, 可以相互对照一下. Redis主从复制 Binary Log日志格式 STATEMENT 记录每一条会修改数据的SQL语句. 相比ROW来说日志量少, 性能更高, 但在某些特殊情况下会丢失数据, 比如使用sleep()函数等. ROW 如果是表结构...

2020-03-28 14:09:52 101 0

原创 ZooKeeper必知必会

1. ZooKeeper有哪些使用场景? (1) 分布式锁 在分布式系统中经常会遇到并发问题, 比如领取新人礼包, 限制每个人只能领取一次, 为了避免机器刷量的问题, 我们可以使用ZooKeeper实现的分布式锁. (2) Master选举 比如kafka集群控制器选举. (3) 服务注册中心 比...

2020-03-26 11:09:51 85 0

原创 分布式事务方案

常见的分布式事务方案一共有五种, 下面我们来一起了解下. 两阶段提交 两阶段提交(2 Phase Commit简称2PC)是强一致性方案, 它有两个角色: 一个协调者(coordinator)和若干参与者(participant). Prepare阶段 协调者向所有参与者发送prepare命令...

2020-03-26 10:57:36 102 0

原创 分布式Session

分布式Session的实现原理 Session的实现原理 我们先来看下单机Session的实现原理. 客户端第一次发送请求到服务端. 服务端生成Session和Cookie, Cookie中存储了JSESSIONID, 服务端将Cookie返回给客户端. 客户端再次发送请求到服务端时, 请求Co...

2020-03-24 11:15:23 63 0

原创 Redis和ZooKeeper的分布式锁实现

github地址: Redis和ZooKeeper对于分布式锁的实现 Redis分布式锁 客户端在读写redis之前必须先从redis获取锁, 只有获取到锁的客户端才能读写redis, 而其他没有获取到锁的客户端, 会以每秒一次的频率不断地去尝试获取锁. (1) 获取锁 SET my_lock 随...

2020-03-21 17:12:47 65 0

原创 Dubbo必知必会

1. 为什么要进行系统拆分? 如何拆? (1) 为什么要进行系统拆分? 所有的业务模块都在一个系统中, 导致系统太过于庞大, 迭代, 维护困难, 比如开发时很容易出现代码冲突, 一次小改动就需要大量的回归测试. 大一统的系统会系统的可靠性降低, 一个小地方出现问题就会导致整个系统不可用. 不利于...

2020-03-21 16:14:23 87 0

原创 手写一个简化版的Dubbo框架

在学习了Dubbo之后, 我发现自己好像了解了Dubbo的实现原理, 又好像不是很了解, 毕竟我只是背诵了下概念, 没有深入的去看源码. 这里我就来手写一个简化版的Dubbo框架, 通过动手实践来深入理解Dubbo的实现原理. Dubbo的实现原理 RPC调用的过程 我们先来看下RPC调用的过程....

2020-03-21 15:43:14 99 0

原创 HTTPS详解

HTTP介绍: HTTP详解 HTTPS简介 HTTPS出现的目的就是为了弥补HTTP的缺陷, HTTP有哪些缺陷呢? 通信使用明文(不加密), 内容可能会被窃听 不验证通信方的身份, 因此有可能遭遇伪装 无法证明报文的完整性, 所以有可能已遭篡改 HTTPS采用SSL协议(Secure So...

2020-03-19 22:25:57 68 0

原创 TCP三次握手与四次挥手详解

我们都知道TCP协议是面向连接的, 建立连接时需要三次握手, 断开连接时需要四次挥手, 那三次握手和四次挥手的具体流程是怎样的呢? 为什么建立连接时需要三次握手, 两次行不行? 为什么断开连接时需要四次挥手, 三次行不行? 下面我们就一起来了解下. TCP协议格式 我们先来了解下TCP报文中一些...

2020-03-19 22:14:43 96 0

原创 Redis必知必会

1. 在项目中缓存是如何使用的? 结合自己的公司的项目, 回答以下问题: 项目哪里用了缓存? 为什么要用? 用了可能会带来什么问题? 怎么解决这些问题? 项目的缓存架构是怎么样的? 如果面试官没有问这些问题, 我们也要主动和面试官聊聊. 2. 为什么要在项目中用缓存? (1) 高性能 如果...

2020-03-04 16:19:30 81 0

原创 Redis事务和并发控制

什么是Redis事务? Redis事务不保证原子性, 即事务中的某个命令执行失败, 事务不会回滚, 且后续命令会继续执行. 这样一来, Redis事务的功能就和脚本差不多, 都是将命令打包, Redis事务能做的事, 脚本也能做, 而且脚本速度更快. (1) Redis事务相关的命令 MULTI...

2020-03-04 16:15:28 142 0

原创 HashMap原理

HashMap底层是通过哈希表实现的, jdk1.8为了提升HashMap的性能又引入了红黑树, 下面我们来了解HashMap的数据结构. 哈希表 哈希表是一种数组+链表的数据结构, 其中储存的元素节点的数据结构如下: static class Node<K,V> implement...

2020-02-20 20:42:43 66 0

原创 Redis布隆过滤器

在redis中我们可以使用布隆过滤器(BloomFilter)来解决缓存穿透的问题, 具体流程就是, 在更新缓存时, 我们会将缓存数据的key添加到布隆过滤器中, 然后在查询缓存之前, 我们先判断key在布隆过滤器中是否存在, 存在才去查询缓存, 不存在则直接返回空. 布隆过滤器(BloomFil...

2020-02-19 22:12:46 150 1

原创 鬼吹灯

Description 胡八一和王胖子发现了一个墓穴决定去摸金,按照祖上传下的规矩,在摸金的时候要在墓穴口放上蜡烛,摸金的时候若是蜡烛全灭了就要把宝物放还墓主人,然而贪心的王胖子决定多放点蜡烛,墓主人的鬼魂宅在墓中上千年不运动表示肺活量不够,吹灭一根蜡烛需要x秒,设宝物有y件,胡八一每摸一个宝物...

2020-02-07 14:38:30 644 0

原创 Elasticsearch必知必会

前置知识: Elasticsearch基本概念与核心原理 Elasticsearch数据建模 1. Elasticsearch的分布式架构原理是什么? Elasticsearch是分布式的, 在多台机器上启动ES进程实例, 组成一个ES集群. ES集群中的节点会选举出一个master节点来管理集群...

2020-02-02 17:55:34 215 1

原创 Kafka必知必会

前置知识: Kafka消息队列理解 Kafka发送消息和读取消息 1. 为什么使用消息队列? 解耦 异步 削峰 面试时要结合自己项目中的业务场景回答, 而不是直接背诵概念, 如果面试官没有问到这些问题, 我们可以主动提出聊聊自己的理解. (1) 解耦 现有系统A, B, C, 系统B和C需...

2020-02-01 20:44:24 157 0

原创 Elasticsearch数据建模

本文基于Elasticsearch7.x 前置知识: Elasticsearch Mapping Elasticsearch 如何处理存在关联关系的数据? 什么是数据建模(Data Modeling)? 数据建模是创建数据模型的过程, 数据模型是对真实世界进行抽象描述的一种工具和方法, 实现对现...

2020-01-21 17:22:52 95 0

原创 Elasticsearch使用Ingest Pipeline进行数据预处理

Elasticsearch可以使用自身的Ingest Pipeline功能进行数据预处理, 无须借助Logstash. Ingest Pipeline介绍 Ingest Pipeline 就是在文档写入Data Node之前进行一系列的数据预处理, 进行数据预处理的就是processor, 一组...

2020-01-15 21:54:07 412 0

原创 Elasticsearch 如何处理存在关联关系的数据?

关系数据库的三大范式 什么是范式? 范式就是数据建模的规则. 第一范式: 确保每列保持原子性. 数据库表中的所有字段都是不可分割的原子值. 第二范式: 确保表中的每列都和主键相关. 一张数据库表中只能保存一种数据, 不可以把多种数据保存在同一张数据库表中. 比如订单相关的信息会设计三张表: 订单...

2020-01-14 23:09:30 467 0

原创 Elasticsearch重建索引

本文基于Elasticsearch7.x 在聊重建索引之前, 我们先了解下Elasticsearch基本概念与核心原理 我们知道Elasticsearch的索引一旦创建是不可变更的, 如果我们要修改索引的Setting, Mapping, 这时就需要重建索引. Elasticsearch内置了两...

2020-01-14 23:02:43 77 0

原创 Elasticsearch聚合分析Java Client

本文基于Elasticsearch7.x 本文将上篇Elasticsearch聚合分析Rest API里的实例转化为Java Client Bucket Aggregation Bucket Aggregation是一系列满足特定条件的文档的集合, 类似于SQL语句里的分组功能. (1) ma...

2020-01-10 10:04:02 183 0

原创 Elasticsearch聚合分析Rest API

本文基于Elasticsearch7.x 什么是聚合(Aggregation) Elasticsearch除了数据搜索之外, 提供的针对数据的统计分析功能. 聚合的分类 Bucket Aggregation 一系列满足特定条件的文档的集合. Metric Aggregation 一系列数学运...

2020-01-07 22:36:08 124 0

原创 Elasticsearch控制相关度分数API

Elasticsearch可以控制相关度分数计算的, 让满足一些条件的分数更高. 在学习本篇博客前先了解下Elasticsearch全文搜索之基础语法API Rest API Elasticsearch有三种控制相关度分数的方法: boost boosting function_score ...

2020-01-02 22:04:04 104 0

原创 Elasticsearch分页API

本文基于Elasticsearch7.x版本. 在学习本篇博客前先了解下Elasticsearch全文搜索之基础语法API Rest API Elasticsearch分页api有三种: from/size search after scroll search after 和 scroll...

2020-01-02 17:45:32 366 0

原创 ElasticSearch 复合搜索与过滤API

本文基于Elasticsearch7.x 全文搜索在搜索时, 会对输入的搜索文本进行分词, 然后去倒排索引中进行匹配, 只要能匹配上任意一个关键词(词项), 就可以作为结果返回. 在学习本篇博客前先了解下Elasticsearch全文搜索之基础语法API Rest API 添加搜索实例数据 P...

2020-01-02 15:42:55 65 0

原创 ElasticSearch 全文搜索之基础语法API

全文实例基于Elasticsearch7.x 这篇博客介绍ElasticSearch全文搜索的基础语法, 后续的复合搜索(bool)和过滤(filter)都是基于这些基础语法的. 全文搜索在搜索时, 会对输入的搜索文本进行分词, 然后去倒排索引中进行匹配, 只要能匹配上任意一个关键词(词项), ...

2020-01-02 14:55:16 155 0

原创 Elasticsearch基础增删改查与批量操作API

本文基于Elasticsearch7.x版本. 基础增删改查 新增文档 (1) 语法 a. 语法一 PUT /index_name/_doc/id { "字段名" : "字段值" ... } POST /index_name/_doc/id { &...

2019-12-25 18:54:19 61 0

原创 Elasticsearch基本概念与核心原理

本文基于Elasticsearch7.x版本. 什么是Elasticsearch Elasticsearch是一个分布式的搜索引擎和数据分析引擎, 提供了全文检索, 同义词处理, 相关度排名, 复杂数据分析, 海量数据的近实时处理等功能, Elasticsearch作为传统数据库的一个补充, 提...

2019-12-20 18:32:51 222 0

原创 深入剖析零拷贝与顺序写

这篇文章我们来学习下经常出现在各种数据库与中间件设计中的零拷贝和顺序写. 零拷贝 零拷贝技术就是在文件传输时, 减少CPU执行的数据拷贝次数. 那如何减少数据的拷贝次数呢? 我们来学习下在不同Linux内核版本中文件传输的过程. kernel1.0版本 文件传输代码: read(file, tmp...

2019-12-20 14:36:43 97 0

原创 Kafka发送消息和读取消息

生产者发送消息到Kafka 我们先来看一个生产者-消费者最简单的实例. public class DemoProducer { public static void main(String[] args) { Properties props = new Properties(); ...

2019-12-19 15:38:22 103 0

原创 Elasticsearch搜索推荐

本文基于Elasticsearch7.x版本. 什么是搜索推荐? 当我们在Google上搜索信息时, Google会推荐一些相关联的搜索词, 即使我们拼写错了关键词, Google仍然会推荐出我们想要的内容, 这就是搜索推荐. Elasticsearch Suggesters Elastic...

2019-12-16 22:32:27 136 0

原创 Elasticsearch Mapping

什么是Mapping? 定义索引中字段的数据结构, 如字段名, 字段类型, 分词器等等. 类似于MySQL中的表结构. 在Elasticsearch7.0之前一个index可以定义多个type, 在7.0之后就不再手动定义type, 所有index都只有一个默认的type: _doc. 常见的...

2019-12-02 10:32:41 114 0

原创 Centos7上安装sbt

sbt是一种项目管理及自动构建工具,类似于Apache Maven和Apache Ant. (1) 安装包下载地址 http://www.scala-sbt.org/download.html (2) 下载安装包 wget https://piccolo.link/sbt-1.3.4.tgz ...

2019-11-28 10:48:46 331 0

原创 IK Analyzer 热更新自定义词典

IK Analyzer的GitHub地址: https://github.com/medcl/elasticsearch-analysis-ik IK Analyzer 自己有一个热更新方案, 但不推荐使用, 我们可以修改下源码, 从mysql读取中读取自定义的词典. 本文Elasticsea...

2019-11-15 15:21:27 337 1

原创 Elasticsearch倒排索引和分词器

倒排索引 Elasticsearch是基于lucene实现的, 而lucene是基于倒排索引实现的, 所以我们有必要了解下什么是倒排索引. 正排索引和倒排索引的区别 (1) 正排索引 文档ID到文档内容的关联. 文档ID 文档内容 1 Mastering Elasticsearch...

2019-11-13 23:05:46 114 0

原创 CentOS7安装Elasticsearch

Elasticsearch需要JDK1.8以上的版本. (1) 获取安装包 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.0.tar.gz (2) 解压 tar -zxvf elastics...

2019-11-11 17:46:49 160 0

原创 CentOS7通过Yum方式安装MySQL

卸载已有的MySQL (1) 停掉mysql进程 pkill -9 mysqld (2) 查看本地安装的mysql rpm -qa | grep mysql (3) 卸载本地mysql //这里有多个, 要一个一个删除 yum -y remove '上一步显示的软件名' ...

2019-11-07 15:15:07 62 0

原创 ElasticSearch Rest API 一文全搞定

本文通过Kibana来操作ES Rest API. 基础增删改查 语法 (1) 创建/全量替换 记录不存在就是创建, 否则是全量替换. PUT /index/type/id { "属性名" : "value" ... } (2) 创建/修改 ...

2019-11-06 15:40:15 905 0

提示
确定要删除当前文章?
取消 删除