自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 JVM内存模型详解

本文主要讲解JVM运行时内存模型

2022-08-09 18:02:42 2679 3

原创 Arthas使用

结束采样,生成svg火焰图。查看已采集到的样本数量。

2023-06-20 10:51:19 140

原创 JVM - 垃圾回收器

譬如把此参数设置为19, 那允许的最大垃圾收集时间就占总时间的5%(即1/(1+19)) , 默认值为99, 即允许最大1%(即1/(1+99)) 的垃圾收集时间。在JDK 5的默认设置下, CMS收集器当老年代使用了68%的空间后就会被激活, 这是一个偏保守的设置, 如果在实际应用中老年代增长并不是太快, 可以适当调高参数 -XX: CMSInitiatingOccu-pancyFraction的值 来提高CMS的触发百分比, 降低内存回收频率, 获取更好的性能。因此,年轻代和老年代都是同时收集的。...

2022-08-31 22:47:22 344 1

原创 JVM-垃圾收集算法

如果内存中多数对象都是存活的, 这种算法将会产生大量的内存间复制的开销, 但对于多数对象都是可回收的情况, 算法需要复制的就是占少数的存活对象, 而且每次都是针对整个半区进行内存回收, 分配内存时也就不用考虑有空间碎片的复杂情况, 只要移动堆顶指针, 按顺序分配即可.因此并不需要按照1∶1的比例来划分新生代的内存空间。算法分为“标记”和“清除”两个阶段: 首先标记出所有需要回收的对象, 在标记完成后,统一回收掉所有被标记的对象, 也可以反过来, 标记存活的对象, 统一回 收所有未被标记的对象。...

2022-08-31 21:28:29 192

原创 JVM垃圾回收机制及算法

即使在可达性分析算法中判定为不可达的对象,也不是“非死不可”的,这时候它们暂时还处于“缓刑”阶段,要真正宣告一个对象死亡,至少要经历两次标记过程:第一次标记:如果对象在进行可达性分析后发现没有与GCRoots相连接的引用链,那它将会被第一次标记,随后进行一次筛选,筛选的条件是此对象是否有必要执行finalize()方法。没有必要:假如对象没有覆盖finalize()方法,或者finalize()方法已经被虚拟机调用过,那么虚拟机将这两种情况...

2022-08-31 16:37:39 210

原创 JVM类加载机制详解

init()并不是程序员在Java代码中直接编写 的方法, 它是Javac编译器的 自动生成物,init()方法是由编译器自动收集类中的所有类变量的赋值动作和静态语句块(static{}块) 中的语句合并产 生的, 编译器收集的顺序是由语句在源文件中出现的顺序决定的, 静态语句块中只能访问到定义在静态语句块之前的变量, 定义在它之后的变量, 在前面的静态语句块可以赋值, 但是不能访问, 如代码所示。其中 static 字段和 static 代码块,是属于类的,在类的加载的初始化阶段就已经被执行。...

2022-08-31 14:55:54 504

原创 HBase优化

rowkey是一个二进制码流,可以是任意字符串,最大长度64kb,实际应用中一般为10-100bytes,以byte[]形式保存,一般设计成定长。建议越短越好,不要超过16个字节,设计过长会降低 memstore内存的利用率 和 HFile存储数据的效率。............

2022-08-30 17:14:31 671

原创 HBase数据模型与整体架构

Hbase中的列是可以随意定义的,一个行中的列不限名字、不限数量,只限定列族。例如 info:name,info:age。2.1.HBase逻辑架构。2.2.HBase物理存储。2.HBase数据模型。3.HBase整体架构。1.HBase的特点。1.HBase的特点。(时间戳--》版本)......

2022-08-30 15:19:16 688

原创 HBase原理深入

HBase读操作首先从 zk 找到 meta表 的 region位置,然后读取 meta表 中的数据,meta表 中存储了用户表的 region信息根据要查询的 namespace、表名 和 rowkey 信息。找到写入数据对应的 region 信息找到这个 region 对应的 regionServer,然后发送请求查找对应的region先从 memstore 查找数据,如果没有,再从 BlockCache 读取 HBase上Regionserver 的内存分为两个部分: 一部分作为 Mems

2022-08-30 14:53:30 714

原创 Linux性能优化

二八原则,并不是所有的性能问题都值得优化,找出最重要的、可以最大程度提升性能的问题。优先优化系统资源使用问题、性能指标变化幅度最大的问题。选能最大提升性能的方法,但性能优化通常会带来复杂度的提升,降低程序的可维护性,还可能引发其他指标的异常。2)系统资源的维度,我们可以用 CPU 使用率来评估系统的 CPU 使用情况。1)应用程序的维度,我们可以用吞吐量和请求延迟来评估应用程序的性能。2)避免外部环境的变化影响性能指标的评估。1)避免性能测试工具干扰应用程序的性能;2.Linux性能优化-CPU。

2022-08-22 10:38:40 608

原创 Linux性能优化-磁盘I/O优化

块设备层将请求发往SCSI层,SCSI就开始真实处理这些IO请求,但是SCSI层又对其内部按照功能划分了不同层次: * SCSI高层:高层驱动负责管理disk,接收块设备层发出的IO请求,打包成SCSI层可识别的命令格式,继续往下发;所以,文件系统又把连续的扇区组成了逻辑块,然后每次都以逻辑块为最小单元,来管理数据。拿第一类,也就是基于磁盘的文件系统为例,在安装系统时,要先挂载一个根目录(/),在根目录下再把其他文件系统(比如其他的磁盘分区、/proc 文件系统、/sys 文件系统、NFS 等)挂载进来。.

2022-08-22 10:35:32 3283

原创 Linux性能优化-内存优化

第二,共享内存 SHR 并不一定是共享的,比方说,程序的代码段、非共享的动态链接库, 也都算在 SHR 里。虽然每个进程的地址空间都包含了内核空间,但这些内核空间,其实关联的都是相同的物理内存。一个很典型的场景就是,即使内存不足时,有些应用程序也并不想被 OOM 杀死,而是希望能缓一段时间,等待人工介入,或者等系统自动释放其他进程的内存,再分配给它。所以,并不是所有的虚拟内存都会分配物理内存,只有那些实际使 用的虚拟内存才分配物理内存,并且分配后的物理内存,是通过内存映射来管理的。...

2022-08-22 10:34:49 2460

原创 Linux性能优化 - CPU优化

CPU优从应用程序和系统的角度,分别来看看如何才能降低CPU使用率,提高CPU的并行处理能力。

2022-08-22 10:33:35 2699

原创 JVM常用调优及监控指令

该文章主要讲述JVM常规调优参数及调优命令

2022-08-15 18:34:30 438

原创 Windows多环境下Jinfo命令异常

Windows多环境下Jinfo命令异常处理方案

2022-08-11 14:17:17 438

原创 ThreadPoolExecutor线程池实现原理与源码解析

关于线程池方面的学习,包括了线程池的实现原理及ThreadPoolExecutor的源代码分析

2022-06-22 13:36:29 319

原创 Redis -- 数据类型选择和应用场景

概要:Redis是一个Key-Value的存储系统,使用ANSI C语言编写。key的类型是字符串。value的数据类型有:常用的:string、list、set、sortedset(zset)有序集合类型、hash。不常见的:bitmap位图类型、geo地理位置类型。Redis5.0新增一种:stream类型注意:Redis中命令是忽略大小写(set SET),ke.........

2022-05-31 22:04:59 160

原创 搜索引擎ES--索引、映射及文档操作

索引操作创建与删除索引库Elasticsearch采用Rest风格API,因此其API就是一次http请求,你可以用任何工具发起http请求创建索引使用PUT请求语法PUT /索引名称{ "settings": { "属性名": "属性值" }}settings:就是索引库设置,其中可以定义索引库的各种属性比如分片数副本数等,目前我们可以不设置,都走默认删除索引使用DELETE请求语法DELETE /索引名称1,索引名称2,索引名...

2022-05-31 11:20:31 1427

原创 搜索引擎ES--IK分词器

集成IK分词器概要:IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。新版本的IKAnalyzer3.0发展为面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现。3.0特性:1)采用了特有的“正向迭代最细粒度切分算法“,具有60万字/秒的高速处理能力。2)采用了多子处理器分析模式,支持:英文字母(IP地址、Email、URL)、数字(日期,常用中文数量词,罗马数字,科学计数法),中文词汇(姓名、地名处理)等分词处理。

2022-05-30 15:00:42 7550

原创 搜索引擎ES--elasticsearch安装、kibana安装

目录ES功能及特点ES应用场景常见场景常见案例主流搜索方案对比ES安装部署ES功能及特点分布式搜索引擎通过多台服务器进行存储检索,如:百度、谷歌、站内搜索全文检索提供模糊搜索等自动度较高的查询方式,进行相关排名,高亮等操作数据分析引擎各类电商、新闻类网站进行搜索排名,销量排名处理海量数据实时处理对海量数据实现秒级的数据搜索和分析ES应用场景常见场景搜索类场景比如电商、...

2022-05-05 11:41:09 1028 1

原创 数据结构与算法--01背包问题

有n件物品和一个最大承重为W的背包,每件物品的重量是w[i],价值是v[i] 在保证总重量不超过W的前提下,选择某些物品装入背包,背包的最大总价值是多少? 注意:每个物品只有一件,也就是每个物品只能选择0件或者1件 分析:假设:W=10,有5件物品,重量和价值如下: 重量 价值 1 2 6 2 2 3 3 6 5 4 5 4 5 4 6 dp数组的计...

2022-04-27 14:38:45 890

原创 数据结构与算法--链表成环问题

给定一个链表,判断链表中是否有环。存在环返回 true ,否则返回 false分析:该题可以理解为检测链表的某节点能否二次到达(重复访问)的问题。需要一个容器记录已经访问过的节点 每次访问到新的节点,都与容器中的记录进行匹配,若相同则存在环 若匹配之后没有相同节点,则存入容器,继续访问新的节点 直到访问节点的next指针返回null,或者当前节点与容器的某个记录相同,操作结束。实现简单,时间复杂度为:O(n^2)遍历整个链表:O(n)每次遍历节点,再遍历数组进行匹配:O(n)换个思路:

2022-04-24 17:29:37 676

原创 数据结构与算法--算法思维之动态规划

动态规划概念经典问题时间复杂度优缺点适用场景

2022-04-21 23:00:00 492

原创 数据结构与算法--算法思维之回溯算法

回溯算法概念经典问题时间复杂度优缺点适用场景

2022-04-21 22:28:58 1299

原创 数据结构与算法--算法思维之分治算法

分治算法概念经典问题时间复杂度优缺点适用场景

2022-04-21 15:48:33 755

原创 数据结构与算法--算法思维之贪心算法

概要贪心算法分治算法回溯算法动态规划

2022-04-20 18:02:14 454

原创 数据结构与算法--二叉树、二叉查找树、红黑树、多路查找树、二叉堆

树的概念二叉树二叉树是树的一种特殊形式,每个节点最多有两个孩子节点。 可能只有一个或者没有孩子节点。满二叉树完全二叉树二叉查找树遍历二叉树红黑树多路查找树二叉堆...

2022-04-20 14:37:19 509

原创 数据结构与算法--基础排序之桶排序

实现思路桶排序同样是一种线性时间的排序算法桶排序需要创建若干个桶来协助排序每一个桶(bucket)代表一个区间范围,里面可以承载一个或多个元素桶排序的第1步,就是创建这些桶,并确定每一个桶的区间范围具体需要建立多少个桶,如何确定桶的区间范围,有很多种不同的方式。我们这里创建的桶数量等于原始数列的元素数量,除最后一个桶只包含数列最大值外, 前面各个桶的区间按照比例来确定。区间跨度 = (最大值-最小值)/ (桶的数量 - 1)假设有一个非整数数列如下:4.5,0.84,3.25,2.1

2022-04-14 18:11:22 91

原创 数据结构与算法--基础排序之计数排序

实现思路计数排序,这种排序算法是利用数组下标来确定元素的正确位置的。假设数组中有10个整数,取值范围为0~10,要求用最快的速度把这10个整数从小到大进行排序。可以根据这有限的范围,建立一个长度为11的数组。数组下标从0到10,元素初始值全为0假设数组数据为:9,1,2,7,8,1,3,6,5,3下面就开始遍历这个无序的随机数列,每一个整数按照其值对号入座,同时,对应数组下标的元素进行加1操作例如第1个整数是9,那么数组下标为9的元素加1最终,当数列遍历完毕时,数组.

2022-04-14 15:27:25 55

原创 数据结构与算法--基础排序之堆排序

目录实现思路代码实现时间复杂度堆排序即是利用堆这种数据结构设计的一种算法,堆是具有以下性质的完全二叉树大顶堆:每个结点的值都大于或等于其左右孩子结点的值小顶堆:每个结点的值都小于或等于其左右孩子结点的值我们对堆中的结点按层进行编号,将这种逻辑结构映射到数组中:该数组从逻辑上讲就是一个堆结构,我们用简单的公式来描述一下堆的定义就是:大顶堆:arr[i]>=arr[2i...

2022-04-14 14:38:41 225

原创 数据结构与算法--基础排序之快速排序

目录实现思路基准元素的选择元素的交换代码实现时间复杂度同冒泡排序一样,快速排序也属于交换排序,通过元素之间的比较和交换位置来达到排序的目的。不同的是,冒泡排序在每一轮中只把1个元素冒泡到数列的一端,而快速排序则在每一轮挑选一个基准元素,并让其他比它大的元素移动到数列一边,比它小的元素移动到数列的另一边,从而把数列拆解成两个部分,这种思路就叫作分治法。实现思路基准元素的选择在分治过程中,以基准元素为中心,把其他元素移动到它的左右两边我...

2022-04-14 14:05:20 733

原创 数据结构与算法--基础排序之冒泡排序

树树的概念二叉树二叉查找树遍历二叉树红黑树多路查找树二叉堆排序冒泡排序快速排序堆排序计数排序桶排序字符串匹配BF算法RK算法BM算法Trie树图图的概念...

2022-04-14 14:00:11 97

原创 数据结构与算法--字符串匹配算法

概要字符串匹配这个功能,是非常常见的功能,比如"Hello"里是否包含"el"? 在 Java 里用的是indexOf函数,其底层就是字符串匹配算法。主要分类如下:单模式与多模式的区别 单模式匹配算法即在一段文本中匹配单个字符串,多模式匹配算法则是需要匹配多个字符串。单模式匹配算法 BF算法 概念BF即是 Brute Force 缩写,即暴力匹配算法,也称为朴素匹配算法。例如在A字符串中查找B字符串,...

2022-04-07 17:22:51 2093

原创 数据结构与算法--图

图的概念图一图(Graph)是一种复杂的非线性表结构。 图中的元素叫做顶点(vertex),图中的一个顶点可以与任意其他顶点建立连接关系。把这种建立的关系叫做边(edge),跟顶点相连接的边的条数叫做度(degree)。 边有方向的图叫做有向图,比如A点到B点的直线距离,微信的添加好友是双向的。边无方向的图叫无向图,比如网络拓扑图。带权图(weighted graph)则是在图中,每条边都有一个权重(weight),我们可以通过这个权重来表示 ...

2022-04-02 15:57:03 962

原创 数据结构与算法--图的广度优先搜索 (BFS)

广度优先搜索即是 一种“地毯式”层层推进的搜索策略,即先查找离起始顶点最近的,然后是次近的,依次往外搜索。BFS解决的最短路径问题。采用BFS进行遍历的话,需要依赖队列,先进先出。假设我们有这么一个图,里面有A、B、C、D、E、F、G、H 8 个顶点,点和点之间的联系如下图所示, 对这个图进行广度优先的遍历第一步 选择起始顶点,从顶点 A 开始。把 A 压入队列,标记它为访问过(用红色标记)。第二步从队列的头取出顶点 A...

2022-04-02 15:29:44 1087 1

原创 数据结构与算法--图的深度优先搜索 (DFS)

深度优先搜索即是 从起点出发,从规定的方向中选择一个不断往前走,走到头为止,然后尝试另一种方向直到最后的终点。DFS解决的是连通性问题,即从A是否能到达B。采用DFS进行遍历的话,必须依赖栈,后进先出。假设有一个图,里面有A、B、C、D、E、F、G、H 8 个顶点,对这个图进行深度优先的遍历第一步选择一个起始顶点,例如从顶点 A 开始。把 A 压入栈,标记它为访问过(用红色标记),并输出到结果中。第二步 寻找与 A 相连并且还没有被...

2022-04-02 15:06:36 4092 6

原创 数据结构与算法--基础篇

概念常见的数据结构常见的算法算法复杂度空间复杂度时间复杂度数据结构与算法基础线性表散列表递归二分查找...

2022-02-14 15:37:29 1654

原创 RabbitMQ的高级特性--TTL、死信队列、延迟队列

1.TTL机制 1.1 实现方案 目前的电商业务中订单创建成功,等待支付一般都会给一定的时间,开始倒计时。如果在这段时间内用户没有支付,则默认订单取消。如何实现这个功能? 定时轮询(数据库等) 用户下单成功,将订单数据放入数据库,同时将支付状态放入数据库,用户付款更改数据库状态。定期轮询数据库支付状态,如果超过30分钟就将该订单取消。 优点:设计实现简单 ...

2022-02-04 09:38:48 2384

原创 RabbitMQ的高级特性--如何保证消息可靠性

1.rabbitMQ临时队列 1.首先,我们无论何时连接RabbitMQ的时候,都需要一个新的,空的队列。我们可以使用随机的名 字创建队列,也可以让服务器帮我们生成随机的消息队列名字。 其次,一旦我们断开到消费者的连接,该队列应该自动删除。 2.创建临时队列方式如下:String queue = channel.queueDeclare().getQueue();上述代码我们声明了一个非持久化的、排他的、自动删除的队列,并且名字是服务器随机生成的...

2022-02-02 21:57:07 3781 2

原创 RabbitMQ中消息确认机制

概要:RabbitMQ中间件的引入对于整个系统来说是一把双刃剑,在对系统进行解耦的同时也降低了消息的可靠性,但是对于某些系统来说我们又必须保证我们的消息是不会丢失的,因此rabbitmq给提供了以下一些功能来保证消息的可靠性,本文我们主要讲解消息可靠性中的 发送端确认机制以及 消费端确认机制发送端确认机制RabbitMQ引入了一种轻量量级的方式,叫发送方确认(publisher confirm)机制。生产者将信道设置成confirm(确认)模式,一旦信道进入confirm 模式...

2022-01-27 17:32:53 4549 1

输出指定路径下的目录树

输出指定路径下的目录树,可以控制跳过指定文件,只输出文件夹,文件夹合并

2022-10-21

空空如也

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

TA关注的人

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