自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(108)
  • 收藏
  • 关注

原创 Clickhouse ReplicatedMergeTree 后台任务的工作原理

1.BackgroundPool在ReplicatedMergeTree中所有的后台任务都需要在全局的后台线程池中调度执行,后台线程池在ck有两种实现,分别是BackgroundProcessingPool和BackgroundSchedulePool。BackgroundProcessingPool内部会维护一个任务队列,该任务队列会基于下一次执行的时间进行优先级排序,内部线程会根据顺序取任务执行,任务最大的并发数会等于pool_size。BackgroundSchedulePool内部会维护一个

2021-07-24 11:44:23 1213 1

原创 Clickhouse-copier 源码剖析

clickhouse-copier 用于集群间数据的迁移,也可以用于集群内数据的均衡。接下来会针对源码进行深度剖析,如果觉得对你有帮助别忘记点赞关注。工具参数daemon — 后台运行copier工具,进程将在后台启动。 config — zookeeper.xml的存放路径,用来连接zookeeper集群。 task-path — zookeeper上的任务节点路径,该路径中的内容用来存储任务,以及多个copier进程间的协调信息,同一任务的不同copier进程要保持一致的配置路径。 t

2021-04-05 14:53:39 889 2

原创 clickhouse源码阅读 - server启动

clickhouse源码阅读 - server启动Clickhouse作为Olap的核武器,学习优秀的代码设计,从clickhosue服务如何启动开始。程序启动首先进入progrms/main.cpp,clickhouse_applications会注册启用的application的main函数,其中可以看到mainEntryClickHouseServer,这就是clickhouse服务端的主函数。using MainFunc = int (*)(int, char**);/// Add an

2021-01-10 18:01:47 1124 3

原创 Clickhouse 分布式表的写入原理

表引擎是一种特殊的表引擎,自身不会存储任何数据,而是通过读取或写入其他远端节点上的表进行数据处理的表引擎,该表引擎需要依赖各个节点的本地表来创建。 表引擎有5个参数,前三个参数是指定本地表所在集群的数据库和表名:这里略过 SQL 的词法解析、语法解析等步骤,直接从输出流的方法开始。在中数据都是由来组织的,调用方法写一批数据。上面可以看到写入的过程中分为同步写和异步写,通过来控制,该参数的值是由配置的,默认为。接下来分别介绍同步写和异步写。同步写主要分为以下四步:下面将详细分析同步写的前三步。在方法初始

2022-07-05 09:00:18 3249 2

原创 Java 正则表达式使用Bug

冷静,我们是专业的今天想用正则表达式更改 clickhouse 建表语句的表引擎,遇到了坑爹的问题。"ENGINE = ReplicatedMergeTree(\n" + " '/clickhouse/tables/{shard}/ihap_stream/ihap_cc_case_v2_local',\n" + " '{replica}'\n" + ") PARTITION BY toYYYYMMDD(p

2021-01-01 15:04:19 1087 3

原创 [Kafka 引擎]Kafka Producer 内存管理

码字不易,先关/赞在看个人博客地址KafkaProducer内存管理kafka生产者send一条记录(record)后并没有直接发送到broker,而是先将它保存到内存(RecordAccumulator)中,用于压缩之后批量发送,这里内存直接分配在堆上,如果对它不加以限制在消息生产速率足够高时很可能频繁出现fullgc乃至oom,另一方面频繁的内存申请和释放操作也很吃系统资源,因此Kafka自建了内存池BufferPool管理内存。ByteBuffer 介绍内存的创建和释放是比较消耗资源的,为了

2020-07-19 14:44:18 841

原创 [内功修神]MySQL 索引原理

MySQL 索引原理现在互联网应用中对数据库的使用多数都是读较多,比例可以达到 10:1。并且数据库在做查询时 IO 消耗较大,所以如果能把一次查询的 IO 次数控制在常量级那对数据库的性能提升将是非常明显的,因此基于 B+ Tree 的索引结构出现了。B+ Tree 的索引如图所示是 B+ Tree 的数据结构。是由一个一个的磁盘块组成的树形结构,每个磁盘块由数据项和指针组成。所有的数据都是存放在叶子节点,非叶子节点不存放数据。查找过程以磁盘块1为例,指针 P1 表示小于 17 的磁

2020-06-13 18:28:55 191

原创 [内功修神]设计模式总结

设计模式总结这篇文章主要是在看过设计模式的基础上去理解常见设计模式。码字不易,还请点波关注。文章目录设计模式总结创建类模式工厂方法模式VS建造者模式抽象工厂模式VS建造者模式结构类模式代理模式VS装饰者模式适配器模式桥梁模式门面模式行为类模式命令模式VS策略模式策略模式VS状态模式观察者模式责任链模式中介者模式创建类模式创建类模式包括工厂方法模式、建造者模式、抽象工厂模式、单例模式和原型模式,它们都能够提供对象的创建和管理职责;其中单例模式和原型模式比较容易理解,单例模式是要保持在内存中只有一个对

2020-05-30 08:29:05 135

原创 [Kafka引擎] Producer 端源码分析

Producer 端源码分析总结消息发送的流程图:源码体现:KafkaProduce{send(){ // 对消息进行拦截处理 ProducerRecord<K, V> interceptedRecord = this.interceptors.onSend(record); doSend(){ // 1. 确认数据要发送到的 topic 的 metadata 是可...

2020-05-03 16:37:13 192

原创 Git操作

托管中心维护远程库内网:可以自己搭建一个GitLab服务器外网:可以使用码云、Github版本控制工具集中式:CSV ,SVN,VSS分布式:Git,Darcs,…Git命令行操作1.1本地库初始化进入文件夹git init注意:生成的 .git 目录中存放的是本地库相关文件,不要删除1.2设置签名项目(仓库)级别仅在当前本地库有效git config us...

2020-03-29 22:30:17 566

原创 本科渣渣已拿一线互联网大厂offer

看着标题有点吓人,实力未必有那么强,但是确实是自己第一次走出校园的一段经历。如果对找工作也还很迷茫的话,那么这篇文章确实值得一看。码字不易,还请点个关注/赞;坚持到最后会有一点小福利哦从此处看页面更加简洁美观二话不说先上图:经过半个多月的面试,拿到了滴滴和蘑菇街的offer,虽然没有拿到bat的offer但是对于我来说这个结果还是可以的。面过啊里和腾讯最后还是失败了,确实能感觉到其...

2020-03-29 18:29:48 11600 9

原创 [Spark内核]通讯架构源码解析

熟悉的套路,先大概的了解spark的通讯架构怎么样工作,然后再去跟踪源码。Spark2.x版本使用Netty通讯框架作为内部通讯组件。Spark通讯框架中各个组件(Client/Master/Worker)可以认为是一个个独立的实体,各个实体之间通过消息来进行通信,如图:Endpoint(Client/Master/Worker)有1个InBox和N个OutBox(N>=1,N取决...

2020-03-21 14:58:10 2017

原创 [Spark内核]Yarn集群模式部署流程源码分析

在实际工厂环境下使用的绝大多数的集群管理器是Hadoop YARN,因此我们关注的重点是Hadoop YARN模式下的Spark集群部署。先熟悉一下Yarn集群模式下spark部署流程,然后再跟踪源码进行分析。任务提交后会和ResourceManager通讯申请启动ApplicationMaster,随后ResourceManager分配container;在合适的NodeManager...

2020-03-20 17:28:51 1501

原创 Java8 新特性

1. Lambda 表达式一、1.1. Lambda 表达式的基础语法:Java8中引入了一个新的操作符 “->” 该操作符称为箭头操作符或 Lambda 操作符箭头操作符将 Lambda 表达式拆分成两部分:左侧:Lambda 表达式的参数列表;右侧:Lambda 表达式中所需执行的功能, 即 Lambda 体;public void test1(){ int num ...

2020-03-17 21:14:01 1722

原创 多线程代码实践-大厂面试题

大厂面试手撕题,考察多线程掌握的程度,弄懂这几道,多线程手写的话应该没啥问题,记得点波关注、点波赞1. 手写阻塞队列思路分析:当队列为空的时候,take操作应该阻塞。当队列为满的时候,put操作应该阻塞。synchronized锁代码实现:class MyBlockingQueue<T> { // 队列,存放资源 private Object[]...

2020-03-10 16:05:09 2420

原创 java.lang.IllegalMonitorStateException的解决方法

java.lang.IllegalMonitorStateException是在调用object的wait和notify,notifyAll方法的时候可能会出现的异常;今天碰到了这个异常就打算弄懂这部分内容。在调用上述三个方法的时候,线程必须获得该对象的对象级别锁,换句话说,出现这个异常的原因是因为,调用wait和notify,notifyAll的对象没有在同步方法(synchronized...

2020-03-10 14:57:40 2149

原创 ArrayBlockingQueue源码中为什么方法要用局部变量引用类变量

先上图当我看到这代码的时候,很奇怪为什么不直接用 this.items[putIndex] = x; 难道这样做效率更高?并不仅仅是 ArrayBlockingQueue ,还有 很多集合类,只要涉及到 set ,put 方法的 ,基本都是这样类似的 做法;先解释这个问题,可以从底层的字节码入手,看个例子;final Object[] items = new Object[10...

2020-03-10 11:38:38 1947

原创 [数据结构与算法]第13章 图的遍历

深度优先遍历从初始访问结点出发,初始访问结点可能有多个邻接结点,深度优先遍历的策略就是首先访问第一个邻接结点,然后再以这个被访问的邻接结点作为初始结点,访问它的第一个邻接结点, 可以这样理解:每次都在访问完当前结点后首先访问当前结点的第一个邻接结点。广度优先遍历广度优先遍历需要使用一个队列以保持访问过的结点的顺序,以便按这个顺序来访问这些结点的邻接结点;import java.ut...

2020-03-09 21:32:47 2156

原创 剑指offer题集

文章目录1. 二维数组中的查找 *2. 替换空格3. 从尾到头打印链表4. 重建二叉树 *5. 用两个栈实现队列6. 旋转数组的最小数字 *7. 斐波那契数列8. 跳台阶 *9. 变态跳台阶 *10. 矩形覆盖 *11. 二进制中1的个数12. 数值的整数次方 * (简单快速幂)13. 调整数组顺序使奇数位于偶数前面14. 链表中倒数第k个节点* (快慢指针)15. 反转链表16. 合并两个排序的...

2020-03-07 22:10:16 2425

原创 [内功修神]Java NIO

文章目录1. 浅析I/O模型1.1. 什么是同步?什么是异步?1.2. 什么是阻塞?什么是非阻塞?1.3. 什么是阻塞IO?什么是非阻塞IO?1.4. 什么是同步IO?什么是异步IO?1.5. 五种IO模型1.5.1. 阻塞IO模型(BIO)1.5.2. 非阻塞IO模型1.5.3. 多路复用IO模型(NIO)1.5.4. 信号驱动IO模型1.5.5. 异步IO模型 (Asynchronous IO...

2020-03-07 21:29:48 2254

原创 [内功修神]计算机网络

文章目录1. 计算机网络体系结构1.1. 路由器、交换机位于哪一层?2. 传输层:TCP和UDP2.1. 什么是三次握手?2.1.1. TCP建立连接可以两次握手吗?为什么?2.1.2. 可以采用四次握手吗?为什么?2.1.3. 第三次握手中,如果客户端的ACK未送达服务器,会怎样?2.1.4. 如果已经建立了连接,但客户端出现了故障怎么办?2.1.5. 初始序列号是什么?2.2. 什么是四次挥手...

2020-02-23 19:18:32 2720

原创 第10章 树结构基础部分

文章目录10.1. 二叉树10.1.1 顺序存储二叉树10.1.2. 线索化二叉树10.2. 堆排序10.3. 赫夫曼树10.4. 赫夫曼编码10.5. 二叉排序树10.5. 平衡二叉树(AVL树)10.1. 二叉树数组存储方式的分析优点:通过下标方式访问元素,速度快。对于有序数组,还可使用二分查找提高检索速度。缺点:如果要检索具体某个值,或者插入值(按一定顺序)会整体移动,效率较低.链式...

2020-02-20 16:36:12 2498

原创 [内功修神]MySQL高级

文章目录1. mysql的架构介绍1.2. Mysql逻辑架构介绍2. 索引优化分析2.1. 常见通用的join查询2.2. 索引简介2.2.1. 定义:排好序的快速查找数据结构2.2.2. 优势2.2.3. 劣势2.2.4. mysql索引分类2.2.5. mysql索引结构2.2.6 哪些情况需要创建索引2.2.7 哪些情况不要创建索引2.3. 性能分析2.3.1 MySQL Query Op...

2020-02-12 10:27:50 5234

原创 [数据结构与算法]第9章 哈希表

文章目录9.1 哈希表的基本介绍9.2 google公司的一个上机题:9.1 哈希表的基本介绍散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。9.2 google公司的一个上机题:有一个公司,当有新...

2020-02-06 11:59:55 3463

原创 [数据结构与算法]第8章 查找算法

文章目录8.1 常用查找算法8.2 线性查找算法8.3 二分查找算法8. 3 插值查找算法8.4 斐波那契(黄金分割法)查找算法8.1 常用查找算法顺序(线性)查找二分查找/折半查找插值查找斐波那契查找8.2 线性查找算法代码实现:public class SeqSearch { public static void main(String[] args) { in...

2020-02-06 11:46:47 2819

原创 [数据结构与算法]第7章 排序算法

文章目录7.1 排序算法的介绍7.2 冒泡排序7.3 选择排序7.4 插入排序7.4 希尔排序7.5 快速排序:7.6 归并排序介绍:7.7 基数排序7.8 常用排序算法总结和对比7.1 排序算法的介绍排序的分类:内部排序: 指将需要处理的所有数据都加载到内部存储器中进行排序。外部排序法:数据量过大,无法全部加载到内存中,需要借助外部存储进行排序。常见的排序算法分类7.2 ...

2020-02-06 11:38:35 2746

原创 [数据结构与算法]第6章 递归

文章目录6.1 递归需要遵守的重要规则6.2 递归-迷宫问题6.3 递归-八皇后问题(回溯算法)6.1 递归需要遵守的重要规则执行一个方法时,就创建一个新的受保护的独立空间(栈空间)方法的局部变量是独立的,不会相互影响, 比如n变量如果方法中使用的是引用类型变量(比如数组),就会共享该引用类型的数据.递归必须向退出递归的条件逼近,否则就是无限递归,出现StackOverflowErro...

2020-02-06 11:31:56 2663

原创 [数据结构与算法]第5章 栈

[TOC]5.1 栈实现综合计算器(中缀表达式)思路分析代码实现public class Calculator { public static void main(String[] args) { String expression = "7*2*2-5+1-5+3-4"; // 15//如何处理多位数的问题? //创建两个栈,数栈,一个符号栈 ArraySta...

2020-02-06 11:18:13 2698

原创 [数据结构与算法]第4章 链表

文章目录4.1 单向环形链表应用场景4.1.1 Josephu(约瑟夫、约瑟夫环) 问题4.1 单向环形链表应用场景4.1.1 Josephu(约瑟夫、约瑟夫环) 问题Josephu 问题为:设编号为1,2,… n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m 的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出...

2020-02-06 10:03:17 2524

原创 [数据结构与算法]第3章稀疏数组和队列

文章目录3.1 稀疏sparsearray数组3.2 数组模拟环形队列3.1 稀疏sparsearray数组当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。稀疏数组的处理方法是:记录数组一共有几行几列,有多少个不同的值。把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模。代码实现:public class S...

2020-02-06 09:41:39 2510

原创 [深入理解java虚拟机] 第8章 虚拟机字节码执行引擎

文章目录8.1 概述8.2 运行时栈帧结构8.2.1 局部变量表8.2.2 操作数栈8.2.3 动态连接8.2.4 方法返回地址8.2.5 附加信息8.3 方法调用8.3.1 解析8.3.2 分派8.4 基于栈的字节码解释执行引擎8.4.1 解释执行8.4 2 基于栈的指令集与基于寄存器的指令集8.1 概述从概念模型的角度了解虚拟机的方法的调用和字节码执行。8.2 运行时栈帧结构栈帧...

2020-01-29 21:16:55 2605

原创 [深度理解java虚拟机]第7章 虚拟机类加载机制

文章目录7.1 概述7.2 类加载的时机7.3 类加载的过程7.3.1 加载7.3.2 验证7.3.3 准备7.3.4 解析7.3.5 初始化7.4 类加载器7.4.1 类与类加载器7.4.2 双亲委派模型7.1 概述虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的java类型,这就是虚拟机的类加载机制。7.2 类加载的时...

2020-01-25 19:24:57 2531

原创 [深度理解java虚拟机]第六章 类文件结构

文章目录6.1 概述6.2 无关的基石6.3 Class类文件结构6.3.1 魔数与Class文件的版本6.3.2 常量池6.3.3 访问标志6.3.4 类索引、父类索引与接口索引集合6.3.5 字段表集合6.3.6 方法表集合6.3.7 属性表集合6.4 字节码指令简介6.4.1 字节码与数据类型6.4.2 加载和存储指令6.4.3 运算指令6.4.4 类型转换指令6.4.5 对象创建与访问指令...

2020-01-25 15:44:33 2534 1

原创 [深度理解java虚拟机]-第4章 虚拟机性能监控与故障处理工具

文章目录4.1 概述4.2 JDK的命令行工具4.2.1 jps:虚拟机进程状态工具4.2.2 jstat:虚拟机统计信息监视工具4.2.3 jinfo:java配置信息工具4.2.4 jmap:java内存映像工具4.2.5 jhat: 虚拟机堆转储快照分析工具4.2.6 jstack:java堆栈跟踪工具4.2.7 HSDIS:JIT生辰代码反汇编4.3 JDK的可视化工具4.3.1 JCon...

2020-01-21 19:15:25 2568

原创 2019年终总结-大数据经历

大学年终总结个人博客文章地址看着好多人都在写2019年终总结,我也来回顾一下我的大学生活。由于英语偏科加上其他的科目不是特别强势,来到一所普通二本,读的是数学与应用数学专业,可是却并不怎么想当老师,我更喜欢的是在大学学一门实实在在的技术,去外面的世界闯一闯,不管成功还是失败,还得去看看。回想大一那一年确实没怎么读书,很多时间多花在各种活动和打游戏上面。不过也没什么,毕竟高中时间被安排得明明...

2020-01-21 18:40:46 3030 2

原创 [深度理解java虚拟机]第3章 垃圾收集器和内存分配策略

个人博客文章链接文章目录3.1 概述3.2 判断对象是否存活3.2.1 引用计数算法3.2.2 可达性分析算法3.3 垃圾回收算法3.3.1 标记-清除算法3.3.2 复制算法3.3.3 标记-整理算法3.3.4 分代收集算法3.5 垃圾收集器3.5.1 Serial收集器3.5.2 ParNew收集器注意:并发收集器和并行收集器3.5.3 Parallel scavenge收集器吞吐量就是CP...

2020-01-20 18:41:05 2510

原创 [深度理解java虚拟机] 第2章 java内存区域与内存溢出异常

个人博客文章链接文章目录2.1 概述2.2 运行时数据区域2.2.1 程序计数器2.2.2 java虚拟机栈2.2.3 本地方法栈2.2.4 java堆2.2.5 方法区2.2.6 运行时常量池2.2.7 直接内存2.3 HotSpot虚拟机对象探秘2.3.1 对象的创建2.3.2 对象的内存布局2.3.3 对象的访问定位2.4 实战:OutOfMemoryError异常2.4.1 java堆溢...

2020-01-20 18:36:36 2494

原创 Redis单机版安装

Redis 支持单机版和集群,下面的步骤是单机版安装步骤1. 安装gcc、gcc-c++yum install gccyum install gcc-c++1.1 由于是 c 语言编写,所以需要安装支持组件2. 把压缩包上传到 linux 服务器上2.1 示例位置: /opt/software/ 下3. cd /opt/softwaretar zxvf redis-3.0.6....

2020-01-16 20:43:21 2490

原创 搭建图片服务器nginx+vsftpd

Linux 安装 ftp 组件1. 安装 vsftpd 组件安装完后,有/etc/vsftpd/vsftpd.conf 文件,是 vsftp 的配置文件。[root@ZykServer ~]# yum -y install vsftpd2. 添加一个 ftp 用户此用户就是用来登录 ftp 服务器用的。[root@ZykServer ~]# useradd ftpuser...

2020-01-16 16:52:23 2554

原创 Centos下安装Mysql5.6 完整版

安装前须知CentOS上安装MySql官方推荐使用rpm在线安装的方式进行安装。但是使用在线安装的方式无法修改安装的路径。而且使用在线安装方式,会导致网络过慢,所花时间过多所以:下面我们以解压版的方式进行安装1. 上传jar包到centos中建议把mysql放到/usr/local下,因为这个目录也是解压版的默认目录。可以减少很多配置1.1 进入/usr/local中cd /u...

2020-01-16 11:49:25 2536

空空如也

空空如也

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

TA关注的人

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