自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

江左煤郎的博客

发现,尝试,去改变

  • 博客(149)
  • 问答 (4)
  • 收藏
  • 关注

原创 费曼学习法——个人觉得对于程序员的最好学习方法

费曼学习法用通俗易懂的话来说就是:通过向别人清楚的解说某一件事,来确认自己是否真正弄懂了这件事。如果你能让别人理解这件事,那么你肯定也已经掌握了这项技能。第一步:选择目标选择目标的选择很简单,就是确定你要学什么,或要干什么。在这里比如学习一门技术、学习一个科学领域、学习一门语言、学习一个概念等,都可以称作目标。目标一定要明确,大目标要分为无数个小目标,比如你要学Java后端开发,那...

2019-11-03 14:51:00 473

原创 dubbo源码学习(二)——实现核心:SPI机制

1. SPI机制简介SPI机制——即JDK 标准的 SPI (Service Provider Interface) 扩展点发现机制,dubbo基于此机制作了增强版实现,同时该机制也是实现dubbo微内核+插件模式设计思想的实现基石。首先明确什么是扩展点,扩展点实际上就是一个接口,该接口中定义了一个待实现的方法,SPI机制实现了可以在代码运行过程中自动装配该接口的实现类。优化点如下:JDK 标准的 SPI 会一次性实例化扩展点所有实现,如果有扩展实现初始化很耗时,但如果没用上也加载,会很浪费

2022-05-06 19:47:02 545

原创 dubbo源码学习(一)——整体结构设计

框架设计 | Apache Dubbo官方提供的文档,对于dubbo的整体结构和设计思想理念有很好的讲解,结合个人理解进行学习,做一个初步的了解,然后再阅读源码会比较方便。1. 整体设计上图说明:图中左边淡蓝背景的为服务消费方使用的接口,右边淡绿色背景的为服务提供方使用的接口,位于中轴线上的为双方都用到的接口。 图中从下至上分为十层,各层均为单向依赖,右边的黑色箭头代表层之间的依赖关系,每一层都可以剥离上层被复用,其中,Service 和 Config 层为 API,其它各层均为 .

2022-05-02 22:08:38 257

原创 记录一种新的流式数据计算架构的设计想法

灵感来源:因为个人工作需要,做数据采集以及采集数据的处理计算,当时想着学习flink来解决数据实时处理计算的需求,但发现flink想要投入到生产环境的话还是过于复杂了,所以在了解了flink底层大概的处理逻辑后,感觉我也可以基于springboot微服务来实现一个轻量级的、更灵活的实时数据流处理计算框架。特别记录一下个人的设计思路。基于微服务实现流式数据处理思路:1. 每个数据计算处理模块都是一个微服务项目,该项目内负责最基础的算子处理逻辑,即 一个算子任务=一个微服务处理逻辑,而算子任务的并.

2021-09-18 21:48:27 335

转载 微服务中的执行链路追踪的实现方式思考

链路追踪“链路追踪”一词是在2010年提出的,当时谷歌发布了一篇Dapper论文,介绍了谷歌自研的分布式链路追踪的实现原理,还介绍了他们是怎么低成本实现对应用透明的。其实Dapper一开始只是一个独立的调用链路追踪系统,后来逐渐演化成了监控平台,并且基于监控平台孕育出了很多工具,比如实时预警、过载保护、指标数据查询等。除了谷歌的dapper,还有一些其他比较有名的产品,比如阿里的鹰眼、大众点评的CAT、Twitter的Zipkin、Naver(著名社交软件LINE的母公司)的pinpoint以及

2021-09-02 16:31:41 194

原创 Flink学习(5)——state(状态)管理

1. 什么是Flink stateFlink中state分为两种,分别是operator state(算子状态)和keyed state(键控状态)。

2021-07-09 00:19:30 1579

原创 Flink(4)——时间语义与watermark机制

1.

2021-06-14 15:11:01 339

原创 Flink学习(3)——Window(窗口机制)API

1.Window的概念2.Window的类型3.

2021-06-10 23:50:50 824 2

原创 Flink学习(2)——流处理API

1. Source1.1 从集合读取数据1.2 从文件读取数据1.3 从kafka读取数据

2021-06-05 23:37:01 544 1

原创 Flink学习(1)——基础入门与架构了解

1. 简单介绍Apache Flink是一个流式数据处理的框架和分布式计算引擎,支持无界和有界的流式数据处理计算,同时支持批式数据处理计算,是一个。flink是以事件驱动的,每当数据流中传递进来一个数据后,就会触发flink中的计算逻辑。使用flink最大的优势就是其可以保证低延迟、高吞吐以及计算结果的正确性。2. 简单开发词频统计demo1. 首先创建maven项目,然后引入jar包依赖 <dependencies> <dependenc.

2021-05-29 17:46:58 294 1

原创 MySQL——记一次关联查询惨剧(左右连接查询优化)

1. 业务场景:A,B两表之间通过一个字段关联,比如B表依赖于A表的主键id字段,此时需要以A表为主表进行查询,同时关联查询出B表中的字段数据。SQL语句很简单,如下所示SELECT A.id, A.nickname, A.avatar, A.tag, B.start_date, B.end_date, B.monitor_status, B.operate_user_id, B.operate_user_name, B.data_update_timeFRO

2020-09-22 16:59:31 398

原创 ElasticSearch使用踩坑——term查询对中文字符串无效,无法查询正确数据结果(ElasticSearch中keyword设置的作用)

使用的版本是6.8,并且已经在字段上设置了属性为keyword,但是使用term查询无法生效。@Field(type = FieldType.Keyword)QueryBuilder queryBuilder = QueryBuilders.termQuery("source", "淘宝");准确来说并不是无法生效,而是没有查询出数据。首先说一下对于term查询的语义:term query会去倒排索弓|中寻找确切的term,它并不知道分词器的存在。这种查询适合keyword、num

2020-07-03 13:03:49 15469 14

原创 Elasticsearch中的查询API使用——term,match,query_string

1. match:模糊匹配,需要指定字段名在指定字段上进行搜索,并且会对输入的查询字符串进行分词,依据分词的结果进行查询。Java API使用如下 // 构建查询条件 NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder(); // 添加基本的分词查询 queryBuilder.withQuery(QueryBuilders.matchQuery("tit.

2020-06-28 11:42:19 1986

原创 Elasticsearch中的_source、_all、store、index

首先要明确一份数据在进入es中之后通常是如何存储的原始文档数据在进入es中之后,es会将其存为两份,一部分是对其中的索引字段数据进行分词索引,然后存储所有的分词索引结果,这个结果并不一定是整个文档数据(通常都指定索引部分字段)。而另一份则是原始文档数据,而该文档的所有的分词索引都会指向该文档。1. _source的作用_source就是指源文档的存储,你可以理解为是es将你传输的原始文档数据放在了_source字段中存储,该设置是用来控制是否存储源文档数据的,如果将该设置设置为fal.

2020-06-28 11:07:16 1592

原创 Redis应用——缓存一致性问题的解决方式

为什么产生缓存一致性问题在使用Redis等缓存中间件的时候,一定会遇到一个问题就是缓存一致性的问题(面试只要提到缓存也是必问的)。所谓缓存一致性问题就是,当某一个线程在做缓存与数据库的更新操作时,这两步操作一定是分开进行的,所以就会出现缓存与数据库的数据出现短暂的不一致,进而可能会造成其他线程读取数据不一致的问题。更新缓存与数据库的可能策略(1)先修改缓存,再修改数据库:这种方式乍一看...

2020-03-20 18:50:52 827

原创 Redis应用学习——缓存过期与淘汰策略

redis 过期策略redis 过期策略是:定期删除+惰性删除。所谓定期删除,指的是 redis 默认是每隔 一定时间 就随机抽取一些设置了过期时间的 key,检查其是否过期,如果过期就删除。假设 redis 里放了 10w 个 key,都设置了过期时间,如果每隔几百毫秒,就检查 10w 个 key的过期时间,那 redis 基本上就死了,cpu 负载会很高的,消耗在你的检查过期 ke...

2020-03-20 15:13:33 127

原创 Zookeeper入门——利用Java客户端API实现分布式锁

在简单学习了客户端API之后,基本可以尝试利用这些API去开发一个分布式锁初版实现利用的两个Zookeeper特性:(1)临时有序节点:保证了即使客户端发生异常没有删除节点,该节点也会自动被删除。而且有序节点可以将所有操作变成串行操作。(2)事件监听与回调机制:Zookeeper客户端与服务端实现了事件监听与回调,该机制非常重要,他可以保证服务端的节点发生改变时,客户端可以及时...

2020-03-17 18:27:50 218

原创 Zookeeper入门——Zookeeper的Java客户端API(2)

基本所有的对于节点数据读写都有同步和异步两个版本的重载方法,而且都可以通过该方法向某个节点上注册一个监视器Watcher,异步版本仅仅是多了一个回调接口和传递一个上下文对象参数,这两个参数作用都是相同的。1.获取节点的子节点列表1. 同步:和getData方法类似,第一个参数path表示目标节点路径,而第二个参数是Watcher或者boolean,当节点的子节点列表发生变化时,...

2020-03-16 16:26:49 107

原创 Zookeeper入门——Zookeeper的Java客户端API(1)

搜了一些Zookeeper的相关书籍和博客,但好多基本都是讲Zookeeper的架构、用途,尤其分布式中的应用讲的真的是天花乱坠,但看完还是不会写代码,搞得自己理论丰富的一批,实践完全懵逼。对于Zookeeper的Java客户端API使用,基本没有涉及或者讲清楚,要么就是讲的很模糊。果然还是得自己来,通过Zookeeper的API来学习一下Zookeeper的功能,然后依据这些功能去思考怎么用?...

2020-03-16 15:21:32 4337

原创 MySQL深入学习(5)——索引

在学习索引之前,必须要先去了解B+树的数据结构以及其相关算法知识,本文中不做详细讲解。可以参考我的另一篇文章y有关于B与B+树的介绍1. InnoDB存储引擎索引类型刚开始接触MySQL中的索引时,真的很迷,因为其索引分类真的搞不清,简单列一下索引分类名词:B+树索引 全文索引 哈希索引 主键索引 唯一索引 普通索引 组合索引 聚集索引(聚簇索引) 非聚集索引(非...

2020-01-07 15:37:42 180

原创 计算机网络基础了解

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1. 协议1.1 什么是网络协议 1. 简单来说,网络协议就相当于任意两台计算机之间指定达成的一种“约定”,这个“约定”规定了进行网络通信时发送的数据格式以及进行数据打包、拆封数据包的方式等,只要遵守协议的实现,那么两台计算机就可以实现网络通信,即使两台计算机的系统不同、CPU不同甚...

2020-01-06 18:05:10 410

原创 TCP/IP学习——IP协议的辅助协议

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 在TCP/IP网络模型中,网络层仅凭借IP协议是无法实现通信功能,还需要其他技术或者协议辅助实现。比如在进行web页面访问时,不会直接输入IP地址进行通信,而是输入网址,那么就需要一种技术将这个网址转换为对应的IP地址才行。下面介绍几个常见的辅助IP协议的技术协议。1. DNS(域名解析)...

2020-01-06 18:04:29 681

原创 TCP/IP协议基础知识

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1. TCP/IP协议分层模型 1. TCP/IP协议分层模型主要分为四层:应用层、传输层、网络层以及网络接口层。(1)网络接口层:相当于OSI参考模型中的数据链路层与物理层,指底层实现数据传输的硬件设备。(2)网络层:相当于OSI模型中的网络层,基于IP地址进行数据发送。(IP协议是...

2020-01-06 18:03:40 1371

原创 TCP/IP学习——IP协议基础

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 在计算机网络这里主要是三本书《计算机网络:自顶向下》、《图解TCP/IP》以及《TCP/IP详解:卷1》1. IP协议基础知识ip协议对应OSI参考模型中的网络层,网络层主要功能是实现终端主机节点之间的通信,也就是点对点通信,而网络层的下一层——数据链路层是负责在同一段数据链路上节点之...

2020-01-06 18:02:52 518

原创 MySQL深入学习(4)——分区表

1. 概述 分区功能其实并不是在存储引擎层完成的,所以并不是只有InnoDB存储引擎支持分区,常见的存储引擎MyISAM、NDB等都支持。但也并不是所有的存储引擎都支持。 分区是将一个表的数据按照某种方式,比如按照时间上的月份,分成多个较小的,更容易管理的部分,但是逻辑上仍是一个表。所以,分区跟性能没有必然关系,分区更多的是从管理的角度出发的。 MySQL数据库在5....

2020-01-04 15:19:18 273 1

原创 MySQL深入学习(3)——基于InnoDB的数据库表结构

1. InnoDB逻辑存储结构在InnoDB存储引擎的逻辑存储结构中,每一个表下的所有数据都会被放在同一个空间中,这个空间又被称为表空间(tablespace)。往下细分,表空间又由段(segment)组成,段由区(extent)组成,区由页(page,或者被称为块,block)组成,如下图所示1.1 表空间 表空间可以看做是InnoDB存储引擎逻辑结构的最高层,表的所有...

2020-01-04 00:21:33 406

原创 MySQL深入学习(2)——InnoDB存储引擎

1. InnoDB存储引擎体系架构 innoDB的存储引擎主要体系结构如上图所示 首先是工作线程:默认7个后台线程,分别是4个io thread(insert buffer、log、read、write),1个master thread(优先级最高),1个锁(lock)监控线程,1个错误监控线程。可以通过show engine innodb status来查看。新版本已对...

2019-12-31 18:39:04 601 1

原创 MySQL深入学习(1)——体系结构与存储引擎简介

1. 体系结构 1. 首先简单的了解一下什么是数据库系统:数据库管理系统由一个互相关联的数据的集合和一组用以访问这些数据的程序组成。这个数据集合通常称为数据库。 在数据库系统出现之前,是使用的文件系统,其存在非常大的弊端:(1)数据的冗余和不一致:文件通常由不同人创建、维护,相同信息可能存在多个文件,冗余的信息占用了存储空间,并且当部分数据进行修改时可能因某些文件未同时修...

2019-12-25 23:41:27 194

原创 Netty学习笔记(10)——Netty应用示例(1)

本来想先了解Netty组件,然后再学习组件应用的,然后越学越感觉怪异,总感觉少了啥,组件学起来不知道咋用的,想想还是先从Netty应用开始学算了。自己的技术学习方法:先学习技术的应用,在应用中逐步抛出问题,比如说这个功能是怎么实现的,带着问题去接触底层原理,然后解决问题。1. 最基础的Netty应用实现——实现请求与响应1. 首先是环境配置(jdk)要保证没问题,其次,要引...

2019-11-24 21:21:00 397

原创 Netty学习笔记(10)——Netty中的Channel组件

1.Channel的功能 1. 与NIO中的Channel一样,它实现了网络操作的抽象类,聚合了一系列的网络IO功能,包括读写数据、建立连接、关闭连接等功能。通过外观模式,将数据读写、连接建立与断开等操作封装到一个接口中,统一对外提供。相比于NIO中的Channel,Netty提供的Channel相关组件使用起来更加灵活方便。 2. API功能介绍:(1)Chan...

2019-11-18 16:08:00 502

原创 Netty学习笔记(9)——Netty组件ByteBuf

1. ByteBuf作用 1. 当进行数据传输时,都会使用到一个缓冲区,在jdk提供的NIO中最常用的就是ByteBuffer,但在使用的时候,我们很容易会感到ByteBuffer有以下缺点:ByteBuffer实际上就是一个Byte数组,所以在一开始进行创建时,就必须要指定其大小,而且不能进行动态扩容以及缩容,这就引起了很多问题,经常会导致数组下标越界异常。 ByteBuffe...

2019-11-11 17:23:00 1365

原创 SpringCloud组件——Eureka原理分析

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> ...

2019-11-04 13:47:00 162

原创 SpringCloud组件——Eureka服务治理

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> ...

2019-11-04 11:09:00 263

原创 SpringCloud微服务开发应用——简单认识组件

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> ...

2019-11-03 00:22:00 280

原创 现代分布式系统架构演进

双 11 即将来临,本文以设计淘宝网的后台架构为例,介绍从一百个并发到千万级并发情况下服务端的架构的14次演进过程,同时列举出每个演进阶段会遇到的相关技术,让大家对架构的演进有一个整体的认知。文章最后汇总了一些架构设计的原则。基本概念在介绍架构之前,为了避免部分读者对架构设计中的一些概念不了解,下面对几个最基础的概念进行介绍。1)什么是分布式?系统中的多个模块在不同服务...

2019-10-29 12:24:00 124

原创 Netty学习笔记(8)——了解Netty

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> ...

2019-10-18 15:33:00 245

原创 Netty学习(7)——AIO

1. NIO2.0——AIO 1. 从某种程度上来说,NIO依然是同步阻塞的虽然NIO中Channel(网络Channel)和Buffer可以实现非阻塞的read/write操作,而且Selector提供了多路复用的功能,使得可以在一个线程中管理使用多个IO通道,避免了传统IO的存在的问题。但是,NIO中在Selector进行调用select()方法进行通道选择时,其依旧是同...

2019-10-17 17:46:00 295

原创 Netty学习(6)——通道间数据传输

1. FileChannel实现通道间的数据传输在Java NIO中,如果两个通道中有一个是FileChannel,那你可以直接将数据从一个channel传输到另外一个channel。transferFrom()FileChannel的transferFrom()方法可以将数据从源通道传输到FileChannel中(这个方法在JDK文档中的解释为将字节从给定的可...

2019-10-14 14:15:00 441

原创 Netty学习笔记(5)——NIO中的Scatter/Gather机制

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> ...

2019-10-14 13:40:00 360

原创 Netty学习笔记(4)——Selector

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> ...

2019-10-12 20:48:00 2617

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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