自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

LJJZJ的博客

天行健,君子以自强不息 !

  • 博客(147)
  • 资源 (6)
  • 收藏
  • 关注

原创 Kafka协调器和有意思的三个参数

一、Kafka的协调器作用: 负责消费者的出入组工作组协调器,每个broker启动的时候,都会创建GroupCoordinator实例,管理部分消费组在与之连接的消费者中选举出消费者leader下发leader消费者返回的消费者分区分配结果给所有的消费者管理消费者的消费偏移量提交,保存在kafka的内部主题中和消费者心跳保持,知道哪些消费者已经死掉,组中存活的消费者是哪些...

2020-01-21 15:51:43 718

原创 ElasticSearch学习笔记(九)——Elasticsearch查询原理分析

一、前言ES的查询分为两个阶段:查询取回首先,一个 index 的数据会被分为多片,所以一个 document ,只能存在于一个 shard 中,如何确定doc的位置呢?数据路由算法:shard = hash(routing) % number_of_primary_shardsrouting 可以是_id(默认)或者由我们自定义传入。手动指定在发送请求的时候,手...

2020-01-21 15:31:56 607

原创 MySQL连接(join)原理

一、MySQL JOIN分类INNER JOIN,内连接,返回左右表互相匹配的所有行LEFT JOIN,左外连接,返回左表的所有行,若某些行在右表里没有相对应的匹配行,则将右表的列在新表中置为NULLRIGHT JOIN,右外连接,返回右表的所有行,若某些行在左表里没有相对应的匹配行,则将左表的列在新表中置为NULLFULL JOIN,MySQL不支持,可以使用左外连接和右外连接的联合查...

2019-12-20 11:43:44 1148

原创 MySQL行转列案例分析

建表:成绩表:表名score,列名:学号、课程号、成绩CREATE TABLE `score` ( `s_id` varchar(20) NOT NULL, `c_id` varchar(20) NOT NULL, `s_score` int(3) DEFAULT NULL, PRIMARY KEY (`s_id`,`c_id`)) ENGINE=InnoDB DEFAULT...

2019-12-14 10:08:01 307

原创 MySQL Explain命令详解

idid是用来顺序标识整个查询中SELELCT 语句的,在嵌套查询中id越大的语句越先执行。该值可能为NULL,如果这一行用来说明的是其他行的联合结果select_type表示查询的类型,显示本行是简单或复杂select类型说明simple$1600primary包含union或者子查询,最外层的部分标记为primarysubquery一般子查询中的子...

2019-12-11 20:00:56 276

原创 ArrayList实现自定义排序

一、ArrayList排序使用ArrayList中存在sort排序方法,只要你实现了Comparator的接口,按照你自己的排序业务进行实现,你只要告诉这个接口按照什么类型进行排序就OK了。这种方式类似于设计模式中的策略模式,把流程划分好,具体的业务逻辑由用户指定代码实现:public class ComparatorTest { public static void main(St...

2019-12-11 19:45:04 3426

原创 NIO组件Buffer,Channel和Selector

流是用来读写数据的。所有 I/O 都被视为单个的字节的移动,通过一个称为 Stream 的对象一次移动一个字节。流 I/O 用于与外部世界接触。它也在内部使用,用于将对象转换为字节,然后再转换回对象。流与与 NIO 最重要的区别是数据打包和传输的方式,原来的 I/O 以流的方式处理数据,而 NIO 以块的方式处理数据。流与块的比较面向流 的 I/O 系统一次一个字节地处理数据,我们很容易将...

2019-12-02 19:11:46 245

原创 深入理解String

一、String知识总结String被final修饰,不可变对象,也就是不能被继承String是通过Char数组来保存字符串的String提供的操作字符串方法,比如subString,replace,concat,连接符,都不是在原有字符串操作,而是重新生成了一个新的对象String对象重写了equals和hashCode方法,所以equals比较的是字符的值,并不是内存地址为了优化S...

2019-11-26 00:44:19 313

转载 数据库分库分表思路

一个闲暇的周末下午读到这篇分库分表文章,获益匪浅,转载之一. 数据切分关系型数据库本身比较容易成为系统瓶颈,单机存储容量、连接数、处理能力都有限。当单表的数据量达到1000W或100G以后,由于查询维度较多,即使添加从库、优化索引,做很多操作时性能仍下降严重。此时就要考虑对其进行切分了,切分的目的就在于减少数据库的负担,缩短查询时间。数据库分布式核心内容无非就是数据切分(Sharding),...

2019-11-23 15:42:04 221

原创 Spark介绍

一、Spark简介Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark是UC Berkeley AMP Lab(加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行框架二、Spark特性分布式基于内存的迭代式计算高效性SpeedRun workloads 100x faster.Apache Spark achiev...

2019-11-23 11:05:20 325

原创 Redis事务与Pipeline功能

一、Redis事务Redis中的事务(transaction)是一组命令的集合,对事物的支持有限,不能保证原子性,在集群分片环境中,由于不同key可能存在不同的机器上,所以造成事务无法使用(可以简单使用,不推荐)事务相关命令multi命令,用于开启事务,标记一个事务块的开始,事务块内的多条命令会按照先后顺序被放进一个队列当中,最后由 exec命令原子性(atomic)地执行exec命令,...

2019-11-21 20:18:20 1802

原创 MySQL大数据量分页limit优化

limit用法SELECT * FROM t LIMIT 10,10;第一个参数指定第一个返回记录行的偏移量第二个参数指定返回记录行的最大数目如果只给定一个参数:它表示返回最大的记录行数目第二个参数为 -1 表示检索从某一个偏移量到记录集的结束所有的记录行初始记录行的偏移量是 0(而不是 1)所以上面SQL的含义是查询数据库第10条到第20条数据对于小的偏移量,直接使用li...

2019-11-15 00:08:53 1613 7

原创 Elasticsearch学习笔记(八)—Elasticsearch选主流程

一、Elasticsearch中Master的作用Elasticsearch的Master最重要的作用就是维护集群状态集群状态中包括以下信息:集群层面的设置集群内有哪些节点各索引的设置,映射,分析器和别名索引内各分片所在的节点位置上述的集群状态信息,由Master节点进行维护,并且同步到集群中所有节点。也就是说集群中的任何节点都存储着集群状态信息,但只有Master能够改变信息...

2019-11-11 17:46:43 679

原创 Elasticsearch学习笔记(七)—Elasticsearch分析器与映射

一、映射介绍数据库中的表,我们一般在DDL语句中为每个字段指定存储类型,例如:varchar,int,datetime等等,目的很明确,就是更精确的存储数据,防止数据类型格式混乱类比数据库,ES的索引字段也需要为其指定类型,这种方式在ES称为映射(mapping)映射是定义一个文档及其包含的字段如何存储和索引的过程,可以从以下几个方面理解:将哪些字符串字段视为全文字段哪些字段包含数字,...

2019-11-09 00:12:54 324

原创 Kafka具体应用场景介绍

网站活动跟踪成功的网站运营都会非常关注站点的用户行为并进行分析。通过消息队列 for Apache Kafka,您可以实时收集网站活动数据(包括用户浏览页面、搜索及其他行为等),并通过“发布/订阅”模型实现:根据不同的业务数据类型,将消息发布到不同的 Topic;通过订阅消息的实时投递,将消息流用于实时监控与业务分析或者加载到 Hadoop、ODPS 等离线数据仓库系统进行离线处理与业务报...

2019-11-06 10:37:09 688

原创 线程池的异常处理

一、Java线程异常机制在java多线程程序中,所有线程都不允许抛出未捕获的checked exception,也就是说各个线程需要自己把自己的checked exception处理掉,run方法上面进行了约束,不可以抛出异常(throws Exception)public class Task implements Runnable { @Override public vo...

2019-11-04 23:11:56 4030

原创 Elasticsearch学习笔记(六)—Elasticsearch文档及其CRUD操作

文档最顶层结构或者根对象(root object)序列化成的JSON数据(以唯一ID标识并存储于Elasticsearch中),可以认为对象(object)和文档(document)是等价相通的。文档元数据节点说明_index文档存储的地方_type文档代表的对象的类_id文档的唯一标识_index索引(index)类似于关系型数据库里的“数据...

2019-10-29 19:50:56 269

原创 Elasticsearch学习笔记(五)—Elasticsearch写入流程解读

假设一个写入请求发到node1node1接收到请求,根据_routing或_id来计算数据该写到哪个分片上,并且根据集群状态中的信息找到该分片的主分片在哪个节点上。这里发送到node3node3接收到请求的时候,开始往主分片里写数据主分片写入完成后,转发请求到该分片的副本分片所在节点(node1、node2),并等待返回结果副本分片接收到请求后,开始写入,写入成功后会返回结果给主分片节点...

2019-10-25 19:40:30 425

原创 Java内部类详解

内部类介绍在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类为什么需要内部类?内部类继承自某个类或实现某个接口,内部类方法可以访问该类定义所在作用域中的数据,包括被 private 修饰的私有数据,这为外部类的访问提供了窗口内部类可以实现 java 单继承的缺陷我们想要定义一个回调函数,且只在一个地方使用,我们可以选择使用匿名内部类来实现,没必要再定义一个...

2019-10-19 18:55:17 239

原创 Java对象创建过程:静态代码块,构造代码块,构造函数执行顺序

一、普通代码块普通代码块(局部代码快)是在方法名后面用 {} 括起来的代码段,不能够单独存在,必须要紧跟在方法名后面且必须使用方法名调用它,作用是限定变量的生命周期和提高效率二、构造代码块构造代码块是在类中方法外用 {} 括起来的代码,作用是把所有构造方法中相同的内容抽取出来,将来在调用构造方法的时候会去自动调用构造代码块,构造代码快优先于构造方法构造代码块的作用是给对象进行初始化构造代...

2019-10-17 20:06:08 1285

原创 Java值传递与引用传递

结论:在Java中对象作为参数传递时,是把对象在内存中的地址拷贝了一份传给了参数,方法并不能修改传递给它的任何参数变量的内容。所以Java是按值传递如果不能理解,看下面的分析:基本数据类型public class Test1 { public static void main(String[] args) { int n = 3; System.ou...

2019-10-16 19:07:42 168

原创 延时任务调度设计

一、延迟队列介绍延时任务的需求:生成订单30分钟未支付,则自动取消生成订单60秒后,给用户发短信延时任务与定时任务区别:定时任务有明确的触发时间,比如在某个时刻执行,或者按照某个周期执行,延时任务没有定时任务一般执行的是批处理操作是多个任务,而延时任务一般是单个任务二、延时队列设计方案数据库轮询比较简单的实现方式。所有的订单一般都会存储在数据库中,通过一个线程定时的去扫...

2019-10-15 20:14:16 4218

原创 SpringAOP使用

一、AOP介绍AOP ,面向切面编程,在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。其实就是在代码运行,进行一定的包装,如在方法执行前、方法返回后、方法抛出异常后等地方进行一定的拦截处理或者叫增强处理先讲一下AspectJ和Spring AOP关系,网上很多文章对AspectJ存在错误说法AspectJ:AspectJ 来自于 Eclipse 基金会,...

2019-10-11 17:20:45 362

原创 Java异常机制

一、异常简介异常本质上是程序上的错误,包括程序逻辑错误和系统错误。通过异常机制,我们可以更好地提升程序的健壮性二、异常体系结构 Java把异常当作对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超类,所有异常类型都是内置类Throwable的子类。Throwable两个不同的分支Error类对象由 Java 虚拟机生成并抛出,大多数错误与代码编写者所执...

2019-10-10 16:29:25 246

原创 Hive学习笔记(五)—Hive连接优化

1. Join 的基本原理大家都知道,Hive 会将所有的 SQL 查询转化为 Map/Reduce 作业运行于 Hadoop 集群之上。在这里简要介绍 Hive 将 Join 转化为 Map/Reduce 的基本原理。假定有 user 和 order 两张表,分别如下:user 表:sidname1apple2orangeorder 表:ui...

2019-10-08 19:41:39 443

原创 Hive学习笔记(四)—Hive分桶表

一、分桶简介桶是通过对指定列进行哈希计算来实现的,通过哈希值将一个列名下的数据切分为一组桶,并使每个桶对应于该列名下的一个存储文件对于每一个表或者分区,Hive 可以进一步组织成桶,也就是更为细粒度的数据范围划分Bucket是对指定列进行hash,然后根据hash值除以桶的个数进行求余,决定该条记录存放在哪个桶中二、分桶操作1. 创建桶表:create table student(...

2019-10-08 16:31:25 1009

原创 Hive学习笔记(三)—Hive分区表

一、分区简介为了对表进行合理的管理以及提高查询效率,Hive可以将表组织成“分区”。分区是表的部分列的集合,可以为频繁使用的数据建立分区,这样查找分区中的数据时就不需要扫描全表,这对于提高查找效率很有帮助分区是一种根据“分区列”(partition column)的值对表进行粗略划分的机制。Hive中的每个分区对应数据库中相应分区列的一个索引,每个分区对应着表下的一个目录,在HDFS上的表现...

2019-09-30 16:41:18 519

原创 Hive学习笔记(二)—Hive数据类型和存储格式

Hive 支持关系型数据中大多数基本数据类型,除了额外的三个复杂的数据类型。一、数据类型array类比java中的array 有序的的同类型的集合create table test( id int, name string, hobby array<string>)row format delimitedfields terminated by ...

2019-09-30 15:52:12 311

原创 Kafka学习笔记(十二)—Kafka消费者API

一、Kafka消费者简介Kafka和其它消息系统有一个不一样的设计,在consumer之上加了一层group。Consumer Group 是 Kafka 提供的可扩展且具有容错性的消费者机制。同一个group的consumer可以并行消费同一个topic的消息,但是同group的consumer,不会重复消费同一分区。如果消费线程大于 patition 数量,则有些线程将收不到消息;如果...

2019-09-24 17:29:41 439

原创 Kafka学习笔记(十一)—Kafka生产者API

Kafka项目有一个生产者客户端,我们可以通过这个客户端的API来发送消息。生产者客户端是用Java写的,但Kafka写消息的协议是开放的,所以我们也可以自己实现一个非Java语言的客户端问题:每条消息都是很关键且不能容忍丢失么?偶尔重复消息可以么?我们关注的是消息延迟还是写入消息的吞吐量?生产者写消息的基本流程:首先,我们需要创建一个ProducerRecord,这个对象需要包...

2019-09-24 00:39:11 353

原创 Kafka学习笔记(十)—Kafka文件存储机制

Kafka的消息以日志文件的形式进行存储。不同主题下不同分区的消息是分开存储的。同一个分区的不同副本也是以日志的形式,分布在不同的broker上存储查看/tmp/kafka-logs目录,假设有4个partition图片在Kafka文件存储中,同一个topic下有多个不同的partition,每个partiton为一个目录, partition的名称规则为:topic名称+有序序号, 第一个...

2019-09-21 15:02:56 321

原创 理解动态规划算法

一只青蛙一次可以在台阶跳一步或者两步,那么n级台阶青蛙有多少种跳法?思路:假设台阶为10级青蛙最后一次跳上第10级台阶,只能从第9级或者第8级这个问题就演变为 f(10) = f(9) + f(8)依次类推f(9) = f(8) + f(7),一直到f(3) = f(2) + f(1) = 2 + 1 = 3种,即跳上3级台阶要3种方法总结公式:f(n) = f(n-1) + f(...

2019-09-20 15:08:30 217

原创 Kafka学习笔记(九)—Kafka控制器

Kafka控制器在Kafka集群中会有一个或者多个broker,其中有一个broker会被选举为控制器(Kafka Controller),它负责管理整个集群中所有分区和副本的状态Kafka控制器职责监听partition相关的变化。为Zookeeper中的/admin/reassign_partitions节点注册PartitionReassignmentListener,用来处理分区...

2019-09-19 19:48:11 291

原创 Kafka学习笔记(八)—Kafka在Zookeeper中的存储结构

Kafka元数据信息当kafka启动的时候,就会向zookeeper里面注册一些信息,这些数据也称为Kafka的元数据信息 根目录结构:[isr_change_notification, zookeeper, admin, consumers,cluster, config,latest_producer_id_block,controller, brokers,controller_e...

2019-09-19 17:22:10 396

原创 LRU缓存设计

设计一个LRU算法(最近最少移除)来实现缓存思路:使用双向链表 + HashMap 实现采取尾插法,未达到存储上限就每次在加入到链表尾部访问链表节点,就将对应链表节点移到尾部,保持尾节点数据最新链表长度达到上限就删除头节点代码:public class LRUCache { private Node head; private Node end; //...

2019-09-18 19:40:05 173

原创 MySQL学习笔记(六)—MySQL普通索引和唯一索引的区别

一、change buffer介绍A special data structure that records changes to pages in secondary indexes. These values could result from SQL INSERT, UPDATE, or DELETE statements (DML). The set of features invol...

2019-09-18 16:06:38 299

原创 Kafka学习笔记(七)—Kafka高性能原因

批量处理传统消息中间件的消息发送和消费整体上是针对单条的,这样会造成多次网络传输。Kafka是通过将发送到相同partition的数据组装成一个批量消息,然后进行发送,这在前面文章中介绍batch.size参数时提到过,这种方式大大减少了请求的数量,提升了客户端和服务器的性能。客户端优化新版生产者客户端摒弃了以往的单线程,而采用了双线程:主线程负责将消息置入客户端缓存Sender线程负...

2019-09-17 19:56:05 557

原创 MySQL学习笔记(二)—MySQL事务及锁详解

一、隔离级别与视图的关系“读未提交”隔离级别下直接返回记录上的最新值,没有视图概念“读提交”隔离级别,这个视图是在每个 SQL 语句开始执行的时候创建的“可重复读”隔离级别: 视图是在事务启动时创建的,整个事务存在期间都用同一个视图“串行化”隔离级别下直接用加锁的方式来避免并行访问二、可重复读可重复读是MySQL默认级别每条记录在更新的时候都会同时记录一条回滚操作...

2019-09-16 11:36:02 383

原创 理解Raft算法

引言一个有意思的问题:甲乙两人轮流在一张圆桌上平放黑白围棋子,每次放一子,棋子不许重叠,谁先没有地方放就输。请问怎样放才能赢?答案: 先行者必胜三种不同的思维方式:假如桌子只有一个围棋子那么大假如桌子无限大,先行者先占住圆心,由于圆是对称图形,所以只要对手还能找到位置放,你总能在对称的另一面找到位置放一个圆中可画单数个直径相等且互切的小圆(即最后一粒棋子一定是单数)三种不同...

2019-09-11 20:58:52 603

原创 Kafka学习笔记(六)—Kafka数据复制原理

一、HW和LEO HW:High Watermark,高水位,在分区高水位以下的消息被认为是已提交消息,反之就是未提交消息,注意高水位本身属于未提交消息,图中的8就属于未提交消息,高水位上的消息是不能被消费者消费的。LEO: Log End Offset,日志末端位移,表示副本写入下一条消息的位移值,数字 15 所在的方框是虚线,这就说明,这个副本当前只有 15 条消息,位移值是从 0 ...

2019-09-11 16:55:44 1004

java入门基础视频

java基础视频,适合入门新手,非常全面,讲解到位,链接失效评论或私信,我会更新

2018-08-30

jad反编译工具

jad反编译工具!链接失效请私信或评论,我会更新!工具

2018-08-29

Struts2入门视频

Struts2入门视频,包含源码!!!链接失效评论或私信,我会更新!

2018-08-29

SpringMvc+Mybatis基础入门视频

ssm框架SpringMVC+Mybatis非常好的入门视频,由浅入深,包含源码,配置文件。链接失效请复制到地址栏打开,如果打不开请私信或底下评论,我会更新链接!

2018-08-29

spring框架学习视频

非常好的spring入门视频,讲的非常详细全面,有源码! 链接失效评论我会更新!

2018-02-22

张孝祥java基础加强视频

张老师讲的java基础增强视频和源码,很nice!想提升java水平的可以下载,讲的很详细!

2018-02-21

空空如也

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

TA关注的人

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