自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Kafka核心原理

综述1. Kafka 性能高的原因日志文件追加写文件写到内核缓冲区零拷贝:从 broker 到 consumerⅡ. Broker2.1 日志模块2.1.1 日志文件Kafka 日志在磁盘上的组织架构如下图所示:Kafka 日志对象由多个日志段对象组成,而每个日志段对象会在磁盘上创建一组文件,包括:消息日志文件(.log)位移索引文件(.index)时间戳索引文件(.timeindex)已中止(Aborted)事务的索引文件(.txnindex)。一个 Kafka 主题

2021-12-01 07:05:42 827 1

原创 HashMap 源码解析

1. HashMap的初始化static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16HashMap 中的 Node 数组的初始大小。实例化一个 HashMap 对象后,Node数组为null,只有在第一次往 HashMap 中put数据时,Node数组才会初始化,初始化的大小就是 DEFAULT_INITIAL_CAPACITY。transient Node<K,V>[] table; // Node

2021-04-12 16:00:49 151

原创 Java中的overflow-conscious code

1. 背景在jdk源码中,会有很多考虑了溢出而编写的代码,这些代码前会有注释:“overflow-conscious code”,说明下面这段代码是考虑了溢出的情况的。最经典的代码就是 ArrayList 里的 grow() 方法,如下所示:/** * The maximum size of array to allocate. * Some VMs reserve some header words in an array. * Attempts to allocate larger array

2021-04-02 11:55:54 4845

原创 Spring编程思想:二. Spring IoC依赖查找

1. 单一类型依赖查找单一类型依赖查找接口:BeanFactory根据Bean名称查找:getBean(String)根据Bean类型查找:Bean实时查找:getBean(Class)Spring 5.1 Bean延迟查找:getBeanProvider(Class)getBeanProvider(ResolvableType)根据Bean名称 + 类型查找:getBean(String, Class)2. 集合类型依赖查找集合类型依赖查找接口:List

2020-11-20 08:03:16 252

原创 Spring编程思想:一. Spring Bean基础

1. 定义Spring BeanBeanDefinition用来描述Spring中的Bean对象,包含:Bean的类名Bean配置元信息:作用域、自动绑定的模式、生命周期回调其他Bean引用,或依赖Bean属性2. BeanDefinition 元信息2.1 概述属性说明classBean 全类名,必须是具体类,不能用抽象类或接口NameBean 的名称或ID(Bean的识别符)ScopeBean 的作用域(如:singleton,prototype

2020-11-12 19:31:15 141

转载 继承类的加载顺序

转载:https://blog.csdn.net/qq_35038153/article/details/79763157public class Base{ private String baseName = "base"; public Base() { callName(); } public void callName() { System. out. println(baseName); }

2020-09-04 15:50:37 217

原创 亿级流量(二)redis的RDB持久化配置及数据恢复

1. 如何配置RDB持久化redis.conf文件中配置持久化save 60 1000每隔60s,如果有超过1000个key发生了变更,就会生成一个新的dump.rdb文件,就是当前redis内存中完整的数据快照,这个操作也被称之为snapshotting,快照也可以手动调用save或bgsave命令,同步或异步执行rdb快照生成。save可以设置多个,就是多个snapshotting检查点,每到一个检查点,就会区check一下,是否有指定的key数量发生了变更,如果有,就生成一个新的dump

2020-08-27 10:17:03 166

原创 亿级流量(一)Redis的RDB和AOF两种持久化机制

RDB持久化:每隔一段时间,将内存中的数据dump出来一份快照AOF持久化:对每条写入命令做日志,以append-only的模式写入一个日志文件中。在redis重启的时候,可以通过回放AOF日志中的写入指令来重新构建整个数据集。如果同时使用RDB和AOF两种持久化机制,那么在redis重启的时候,会使用AOF来钩心构建数据,因为AOF中的数据更加完整。RDB持久化机制的优点RDB会生成多个数据文件,每个数据文件代表了某个时刻中redis的数据。这种多个数据文件的方式,非常适合做冷备,可以将.

2020-08-27 10:15:07 129

原创 Zookeeper分布式锁实现原理

一、写在前面直接基于比较常用的Curator这个开源框架,聊一下这个框架对ZooKeeper(以下简称zk)分布式锁的实现。二、ZooKeeper分布式锁机制参见上图。zk里有一把锁,这个锁就是zk上的一个节点。然后呢,两个客户端都要来获取这个锁,具体是怎么来获取呢?假设客户端A抢先一步,对zk发起了加分布式锁的请求,这个加锁请求是用到了zk中的一个特殊的概念,叫做“临时顺序节点”。简单来说,就是直接在"my_lock"这个锁节点下,创建一个顺序节点,这个顺序节点有zk内部自行维护的一个节点序号

2020-08-17 19:25:57 144

原创 lua中的面向对象

lua实现面向对象编程是基于元表 metatable,元方法 __index 来实现的。lua中的语法糖lua的table中可以定义函数,如下图:local a = { x = 1, print = function(obj) print("x=" .. obj.x) end}如上图,定义了一个名叫 a 的table,可以通过调用 a.print(a) 来打印table a 中的 x key对应的value值。像是 a.print(a) 这种形式,在.

2020-08-17 18:47:39 299

原创 InfluxDB TSM存储引擎之TSMFile

本篇文章主要介绍InfluxDB TSM存储引擎之TSMFile。为了保证时序数据写入的高效,InfluxDB采用LSM结构,数据先写入内存以及WAL,当内存容量达到一定阈值之后flush成文件,文件数超过一定阈值执行合并。这个套路与其他LSM系统(比如HBase)大同小异。不过,InfluxDB在LSM体系架构的基础上针对时序数据做了针对性的存储改进,官方称改进后的存储引擎为TSM(Time-Structured Merge Tree)结构引擎。本篇文章主要集中介绍TSM引擎中文件格式针对时序数据做了哪些

2020-08-17 18:43:22 725 2

原创 lua-resty-core 和 lua-nginx-module

lua-nginx-module 模块在openresty中,lua-nginx-module 是一个基础的模块,这个模块中暴露出去了很多的API可以供我们来使用。但是 lua-nginx-module 这个模块存在一个问题:模块中调用C函数的API都是使用Lua C API来完成。对于那些能够被 Lua 调用的 C 函数来说,它的接口必须遵循 Lua 要求的形式:typedef int (*lua_CFunction)(lua_State* L)这个代表一个函数指针,参数为 lua_State

2020-08-17 18:36:36 1779 2

原创 图解密码技术(二)认证

第七章 单向散列函数单向散列函数是用来确保完整性的。7.2 单向散列函数7.2.2 什么是单向散列函数单向散列函数有一个输入和一个输出,其中输入称为消息,输出称为散列值,这里的消息可以是字符串,也可以是图像文件、声音文件等等。散列值的长度和消息的长度无关,单向散列函数总是会计算出固定长度的散列值。比如 SHA-1 单向散列函数,它计算出的散列值的长度永远是160比特(20字节)。单向散列函数必须确保要找到和该消息具有相同散列值的另外一条消息是非常困难的,这一性质称为弱碰撞性。7.4 单向

2020-08-17 18:28:45 413

原创 图解密码技术(一)密码

第一章 环游密码世界1.3 对称密码和公钥密码1.3.1 密码算法加密、解密的算法合在一起称为密码算法1.3.3 对称密码与公钥密码对称密码:加密和解密时使用同一个秘钥公钥密码:也是非对称密码,加密和解密时使用不同的秘钥1.3.4 混合密码将对称密码和公钥密码结合起来的密码方式称为混合密码。1.4 其它密码技术1.4.1 单向散列技术为了防止软件被篡改,软件发布者会在发布软件的同时发布该软件的散列值。散列值就是用单向散列函数计算出来的数值。使用者可以自行计算下载软件的散列值冰并和

2020-08-17 13:20:52 5042

原创 RabbitMQ消息队列入门

第一章 课程介绍1.3 业界主流消息中间件介绍ActiveMQ性能不好ActiveMQ集群模式Kafka主要特点是基于Pull的模式来处理消息消费,追求高吞吐量,一开始的目的就是用于日志收集和传输。不支持事务,对消息的重复、丢失、错误没有严格要求,适合产生大量数据的互联网服务的数据收集业务。关注于性能,对数据可靠性要求不高Kafka集群模式RocketMQ具有高吞吐量、高可用性、适合大规模分布式系统应用的特点。起源于Kafka,对消息的可靠传输及事务性做了优化不易维护商

2020-08-13 09:46:14 2598

原创 post传参的方式及接收参数的方法

1. application/x-www-form-urlencoded发送这应该是最常见的 POST 提交数据的方式了。浏览器的原生 <form\> 表单,如果不设置 enctype 属性,那么默认就会以 application/x-www-form-urlencoded 方式提交数据。在postman中对应的就是post方式下的 x-www-form-urlencoded。在jQuery中,ajax请求,Content-Type的默认值就是application/x-www-for

2020-07-16 18:08:27 19661

原创 记一次工作中使用spring-boot-activemq的排错经历

一. 问题描述最近在使用新版本的spring boot连接activeMQ时(2.1.1.RELEASE)遇到了一个问题:引入依赖后,<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.1.RELEASE</version

2020-07-16 17:58:14 3690

原创 Shell编程实战(四):文本处理三剑客

Ⅰ. 概述grep是一个过滤器sed是一个流编辑器awk是报告生成器,对数据进行处理生成报告Ⅱ. grep和egrepegrep 是对 grep 的扩展语法格式第一种形式:grep [option] [pattern] [file1, file2..]第二种形式:command | grep [option] [pattern]grep参数Ⅲ. sed1. sed的工作模式sed(Stream Editor),流编辑器,对标准输出或文件逐行进行处理语法格式第一种:

2020-07-16 17:20:57 4084

原创 Shell编程实战(三):Shell编程中的常用工具

1. 文件查找之find命令选项参数对照表2. find, locate, whereis, which总结locate文件查找命令不同于find是在整块磁盘中搜索,locate在数据库文件中查找find是默认全部匹配,locate则是默认部分匹配updatedb 命令:更新数据库用户更新 /var/lib/mlocate/mlocate.db所使用配置文件 /etc/updatedb.conf该命令在后台cron计划任务中定期执行whereis选项含义

2020-07-16 17:17:21 3740

原创 Shell编程实战(二):函数的高级用法

1. 函数定义和使用如何调用函数:直接使用函数名调用,可以将其想象成 Shell 中的一条命令函数内部可以直接使用参数 $1、$2..$n调用函数:functon_name $1 $2#!/bin/bashthis_pid=$$ # $$ 是执行这个脚本的子进程的pidps -ef | grep nginx | grep -v grep | grep -v $this_pid &> /dev/null # 把$this_pid 过滤掉是为了

2020-07-16 17:12:27 3739

原创 Shell编程实战(一):变量的高级用法

一. 变量替换和测试上图中 前4个是删除,后2个是替换例子:# 注意赋值时,"="左右不能有空格[root@vermouth ~]$ variable_1="I love you, Do you love me"[root@vermouth ~]$ var1=${variable_1#*ov}[root@vermouth ~]$ echo $var1 # e you, Do ...

2019-03-20 10:12:59 3796

空空如也

空空如也

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

TA关注的人

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