自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 压缩算法分析(Gzip/Snappy/Lz4/ZSTD)

一、概况当我们进行数据传输或者数据存储等场景的时候,如果数据量比较大的话,那么操作就会随着数据量的变大而变得缓慢以及耗费资源。如果是数据传输,那么大的数据量在进行网络传输的时候会非常耗时;如果是进行数据的持久化,存储到数据库,那么必然也会非常耗费存储空间。对于大数据而言,最直接的优化方式,就是对数据进行一个压缩操作处理,减少数据尺寸。因此为了资源的节省以及操作加速,会对数据进行一下压缩加工,减少它的尺寸,从而提高各项效率。压缩类别:压缩可以分为有损压缩和无损压缩。有损压缩算法通过移除在保真情形下需要大

2023-09-14 19:27:37 4741

原创 JSON & JSON Schema

存储数据时、数据传输时、组件交互及数据验证的时候,JSON,在不同平台、组件及场景下的应用,已经自证了它作为无关平台标记语言的易用性及通用性。结合JSON Schema能够完成数据定义、数据传输以及数据验证的完整过程。

2022-12-27 10:05:58 1327 1

原创 架构基础理论

前言概念当我们谈到一辆车的时候,会想到它的发动机、电气设备、轮毂、车身骨架、安全配置等,同样,在做系统架构的时候,也总有几个出场频率很高的关键词,模块、组件、框架等,可以理解从不同角度、维度去描述、去解释所谓的“架构”,那么我就首先看下构成它的代表词们的含义是什么。模块 & 组件开发中经常提到模块和组件,例如:我们有可复用的日志组件、限流组件,我们分为登录模块、支付模块等等,从使用过程中多少会有一种混合的感觉,看下维基百科中对二者的定义:模块软件模块(Module)是一套一致且互相有紧密

2022-06-05 18:03:09 539

原创 Caffeine 驱逐算法

概况在《Caffeine入门使用》一文中讲解了Caffeine基本使用方法以及功能分类描述和使用示例,在会使用以及了解使用模式的背景下,在《Caffeine基础源码解析》文中对caffeine的主流程进行源码分析,从原理看下Caffeine的设计和实现,从会使用到深理解,本文是Caffeine学习的最后一部分,也是它最重要的一部分,驱逐算法的实现,即W-TinyLFU算法在Caffeine中的实现。算法对于缓存组件,驱逐算法基本是标配,它是直接影响缓存组件命中率的重要因素,无论是基于服务的Redis组

2022-03-13 16:39:07 1682

原创 Caffeine基础源码解析

概况《Caffeine入门使用》一文中主要讲解了Caffeine基本使用方法以及功能分类描述和使用示例,在会使用以及了解使用模式的背景下,本文主要对caffeine的主流程进行源码分析,从原理看下Caffeine的设计和实现,从会使用到深理解。之前也提到,Caffeine在使用方式上可分为手动/主动,同步/异步的缓存处理方式,实际上在底层还区分为有界限/无界限的缓存,即缓存空间是否有限,无论是通过缓存条目数量、权重阈值、写后过期、访问过期以及软弱缓存k-v等方式,都代表缓存是有界限的,从这里可以想到 ,

2022-03-05 17:54:17 2281

原创 mysql 8.x安装&忘记密码

上一次忘记mysql的密码而进行修改还是mysql 5.x的版本使用最广泛的时候,也是在网上来查找解决方式;最近在安装8.x版本的mysql,因为误操作设置了中文密码,导致在进入服务的时候提示密码不正确,5和8的版本重置密码操作还是有些许差异,因此整理一下忘记密码后修改密码的操作步骤,以备回看。网上解决mysql忘记密码的文章一大箩筐,基本差不多,本文章以Mac、brew、mysql 8.x 为基讲解,只供笔录供查询。一、brew安装mysql&初始密码修改因为本机安装了brew工具,因此我采

2021-02-24 11:32:10 160

原创 缓存算法-FIFO/LRU/LFU/W-TinyLFU

一、概况《Caffeine入门使用》一文中介绍了当下性能比较好且正在流行的缓存组件Caffeine Cache,一个缓存组件是否好用,其中一个重要的指标就是他的缓存命中率,而命中率又和缓存组件本身的缓存数据淘汰算法息息相关的,本文意在讲解一些业界内常见的页面置换算法,以及在详细的介绍下Caffeine Cache的W-TinyLFU算法,以便于更好的理解缓存组件。二、讲解2.1 FIFOFIFO(First in First out)先进先出。可以理解为是一种队列的实现算法:最先进来的数据,被认为

2020-09-19 14:35:57 4200

原创 Java面试题小结(2018)

java后端技术面试题总结(2018)java se部分简述string对象,StringBuffer、StringBuilder区分 多态的原理 简要描述面向对象编程的思想 反射的原理 代理的作用和实现 hashcode和equals的用法 set,map,list的区别(尽量详细) 简述arraylist和vector的区别 hashmap原理,key碰撞时是如何...

2020-09-09 09:01:02 423

原创 Caffeine入门使用

目录一、概况简介:优点:二、使用坐标缓存填充策略过期策略时间监听外部存储springboot集成三、参考文档功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入一、概况就一般的互联网行业中的应用而言,目前比较通用的并且也是普遍存在的

2020-09-08 10:22:08 15381

原创 Redis-数据库&过期

一、数据库Redis中的键值对保存的地方叫做Redis的数据库,数据库的结构信息使用redisServer来描述。Redis服务器启动时,默认是初始化16个数据库,一般我们使用的都是0号数据库。当然,可以通过使用select选择你要操作的数据库,一般时候,我们通过redis-cli客户端连接Redis的服务器的时候,会在会话处显示默认连接的数据库是[0],可以使用select x来切换数据库,直接看到会话处的数据库标识变化。但是,一般不建议切换数据库来进行数据分开存储,因为这需要使用者自己维护选

2020-08-16 10:54:16 721

原创 RocketMQ-浅析架构

一、简介RocketMQ是一款开源的、java编写的分布式消息中间件,支持事务消息、顺序消息、批量消息、定时消息、消息回溯等。RocketMQ、ActiveMQ以及Kafka消息中间件对比:消息中间件 客户端SDK 协议和规范 有序消息 调度消息 批量消息 广播消息 消息过滤 服务触发 消息存储 消息回溯 消息优先级 高可用&容错 消息轨迹 配置 管理操作工具 ActiveMQ Java,

2020-08-13 11:24:58 401 2

原创 Redis-库之数据结构

一、简介Redis数据库里边的每一个键值对(key-value pair)都是由对象构成。其中,数据库键总是一个字符串对象(sting object),而值则可能是字符串(string objec)、哈希对象(hash object)、列表对象(list object)、集合对象(set object)、有序集合(sorted set object)的其中一种。这些键值对象,都是由底层re...

2020-05-12 08:32:03 420 1

原创 JUC-BlockingQueue

一、简介BlockingQueue是juc包下提供的队列工具,叫做阻塞队列。类似于生产者和消费者的模式。二、使用BlockingQueue是一个很经典的生产者-消费者类型的队列模式,生产者不断的向队列中生产输入,如果队列满了则会阻塞生产者知道队列不满;另一方面消费者则不断的从队列中获取消费,如果队列是空的,则会阻塞消费者,知道队列不为空。我这以ArrayBlockingQueue为例,...

2020-04-29 09:26:41 203

原创 JUC-并发工具(CountDownLatch\CycleBarrier\Semaphore)

一、简介CountDownLatch(闭锁)、Semaphore(信号量)、CycleBarrier(栏栅)二、解析CountDownLatch一般称为闭锁,某一个线程等待其他线程完成后,再继续往下执行的场景下,可以使用此工具。首先创建CountDownLatch的一个实例对象,指定等待锁数量k,一般等于剩余等待的线程数量,然后等待线程执行await()方法阻塞等待,其他线程执行cou...

2020-04-24 09:21:49 521

原创 JUC-Lock工具解析

一、简介我们在进行多线程编程的时候,考虑的最多的问题之一就是并发的问题,也就是多线程对于共享变量的操作问题。许多的时候我们会借助于锁这个工具来控制多线程并发对于共享变量的操作,是一种牺牲时间的并发保障机制。在java中关于同步工具有自带的关键字synchronized,也有juc下利用AQS同步框架封装的Lock工具,关于AQS可以在JUC-AQS框架解析文章中进行源码级别的分析,本文章在AQ...

2020-04-21 08:41:59 232

原创 JUC-AQS框架解析

一、简介当我们谈到并发的时候,就会想到java中juc包下的一系列的并发工具,例如lock、CountDownlach、CyclicBarrier以及Semphore等,当你使用这些并发工具的时候,就必需深刻理解AQS,因为AQS是juc下并发工具的灵魂,也就是他们的底层框架.AQS全称为AbstractQueuedSynchronizer,也就是抽象队列同步器,定义了一套多线程访问共享资...

2020-04-15 14:09:21 236 2

原创 ThreadLocal源码功能解析

一、简介ThreadLocal是java中提供的一个意在处理多线程对于共享变量访问操作冲突问题的一个工具,其实可以认为是处理多线程并发问题的一个工具。我们知道java中的内存交互方式是java的JMM(java内存模型)模型所规范的,每个线程都有属于自己的工作内存,且线程之间工作内存之间是互相隔离的,每个线程不可以直接操作主存,都需要从主存读取信息到工作内存,然后同步存入主存,并且在计算机底层...

2019-12-08 13:15:36 218 3

原创 JUC-JMM & volatile

一、前言本文意在讲解java中volatile关键字的作用以及原理,因为该关键字可以说是JMM模型封装底层原语而提供出来的API,他的实现涉及到cpu的指令以及线程内存与主存间的交互过程,因此本文会从cpu到缓存内存,再到线程以及JMM,通过简单的介绍线程、缓存、cpu的大致流程后,在此基础之上讲解volatile的作用以及原理,以便于更加深刻的理解volatile关键字的含义。二、计算机...

2019-11-24 15:50:25 213 1

原创 Mysql—Innodb锁介绍

一、锁简介锁这个词是比较常见的,生活中我们使用锁来保证一个房间或者一个资源的安全,因为开锁需要钥匙,而钥匙保存在我们手里,其他人是无法正常获取到的。程序中,当我们的程序需要多线程去访问操作共享资源时,为了保证一致性,我们需要使用锁机制来防止并发原因出现的问题,同样,数据库会使用这种锁机制来保证资源的共享安全性,比如当两个事务都需要更改同一条记录时,就需要锁机制来保证一致安全性。下面根据加锁...

2019-11-05 18:33:34 181

原创 JUC-线程池源码简析

一、线程池介绍Java5开始,在util下提供了一个包,叫做JUC(java.util.concurrent),里面提供了关于多线程、并发的一些工具包。例如锁、多线程等工具都在这个包中。我们知道一个线程的创建、销毁过程是会消耗系统性能的,需要使用cpu,占用内存,当频繁大量的创建销毁线程,这个消耗累积到会影响系统性能,为了解决这一类问题,出现了“池化”的概念,“池化”意为将资源放进一个池子...

2019-10-25 08:24:49 321 1

原创 Mysql—服务器层日志

一、日志类别1.错误日志(error log):服务器的启动、停止,以及运行中严重的警告或者通知信息,比如表的修复等;2.常规日志(general log):服务器接收到的每一个命令,包括客户端连接以及sql执行记录等;3.慢日志(slow query log):执行时间超过一定阈值和没有使用索引的sql,用来发现并调优一些慢sql;4.二进制日志(binlog):引起或可能引起数...

2019-10-18 10:14:49 884 1

原创 Mysql—Innodb Buffer Pool

一、Innodb Buffer Pool简介我们知道Mysql是基于磁盘的永久性存储的一个数据库,但是磁盘的读写速度远远赶不上内存的速度,当数据库访问量级比较大时,频繁的磁盘IO不仅速度慢,还有可能造成数据库的崩溃。为了缓解这一问题,通过使用内存来弥补磁盘缓慢读写的性能,尽量减少磁盘的IO,因而产生了Innodb缓冲池,提高数据库的速度以及稳定性。缓冲池缓存全部数据?缓冲池只是缓存了部分数...

2019-09-26 15:49:19 456

原创 Mysql—Innodb引擎 索引

一、索引分类索引对于数据库而言,就像是目录对于书籍,可以快速定位想要查找的信息,提高效率。而Innodb引擎更是使用索引来组织数据,Innodb引擎目前支持三种形式的索引,B+树索引、全文索引、哈希索引。B+树索引是常用并且效率很高的索引,是通过二叉树,平衡树等演化的结构,根据键值对来确认节点位置,需要注意的是B+树索引并不能找到具体记录的位置,它只能找到对应的叶子结点,将叶子放入内存中,...

2019-09-22 16:53:33 1196

原创 Mysql—Innodb引擎 逻辑结构

一、Innodb引擎简介Innodb引擎是事务安全的Mysql存储引擎,其设计上采用了类似于oracle的设计架构,该引擎存在于mysql发布的任何的二进制版本之中,正是由于Innodb引擎的存在,使得Mysql更具有魅力。从Mysql的5.1版本开始,可以动态的加载引擎,出现所谓的Innodb plugin,在Mysql5.5版本将Innodb升级到1.1.x版本,5.6则将Innodb...

2019-09-10 21:32:05 775

原创 ElasticSearch系列之---基本概念介绍

ElasticSearch简介ElasticSearch(以下简称ES)在官网的定义为:Elasticsearch 是一个分布式、可扩展、实时的 RESTful 风格的搜索和数据分析引擎,是一个“天然”支持分布式的基于Apache Lucene(TM)的搜索分析引擎。它可以被下面这样准确的形容: 一个分布式的实时文档存储,每个字段都可以被索引与搜索 一个分布式实时分析搜索引擎...

2018-10-25 20:46:25 314

原创 Redis-集群构建

Redis集群搭建1.背景分析redis使用中遇到的瓶颈  我们日常在对于redis的使用中,经常会遇到一些问题  1、高可用问题,如何保证redis的持续高可用性。  2、容量问题,单实例redis内存无法无限扩充,达到32G后就进入了64位世界,性能下降。  3、并发性能问题,redis号称单实例10万并发,但也是有尽头的。redis-cluster的优势    1、官方推荐,毋庸置疑。  ...

2018-04-11 16:31:20 269

原创 ActiveMQ的初步使用

1.MQ概念: 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过写和检索出入列队的针对应用程序的数据(消息)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。2.种类Activem

2017-07-25 09:03:21 626 1

空空如也

空空如也

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

TA关注的人

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