自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

下半夜的风

享受着风带来的清爽,生活需要有条理的梳理。

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

原创 【Git】Git常用命令

子模块可以不建立版本分支管理代码, 因为它是依赖主应用,所以建立版本分支可以从主应用去操作,那么一旦建立新的版本分支当前的所有内容都会被锁定在这个分支上,不管子模块仓库怎么修改。仓库迁移也可以叫复制仓库。有时候需要从一个旧仓库迁移到新仓库,如果手动只能把文件进行迁移,但是如果需要把分支、标签、历史记录一起迁移就需要复制仓库。合并某个分支指定文件或目录, 需要注意的是这会直接覆盖现有文件,而不是本质上的合并。都是重新计算的,所以本地仓库和远端仓库的提交总是不一样的,这会导致 git 无法解决可能的冲突。

2024-04-25 14:46:43 402

原创 【MySQL】A01、性能优化-参数监控&分析

(服务器状态变量,运行服务器的统计和状态指标)(服务器系统变量,实际上使用的变量的值)如果 sort_merge_passes 很大,就表示需要注意 sort_buffer_size。当 MySQL 必须要进行排序时,就会在从磁盘上读取数据时分配一个排序缓冲区来存放这些数据行。如果要排序的数据太大,那么数据就必须保存到磁盘上的临时文件中,并再次进行排序。如果 sort_merge_passes 状态变量很大,这就指示了磁盘的活动情况。read_buffer_size是MySql读入缓冲区大小。

2024-04-24 17:42:33 497

原创 【MySQL】A01、性能优化-结构设计与配置

所谓的垂直拆分,就是把原来一个有很多列的表拆分成多个表,这解决了表的宽度问题。

2024-04-24 15:06:29 757

原创 【MySQL】A01、性能优化-语句分析

重复索引是指相同的列以相同的顺序建立的同类型的索引,如下表中的 primary key和ID列上的索引就是重复索引unique(id)冗余索引是指多个索引的前缀列相同,或是在联合索引中包含了主键的索引,下面这个例子中key(name,id)就是一个冗余索引。对于innodb来说,每一个索引后面,实际上都会包含主键,这时候我们建立的联合索引,又人为的把主键包含进去,那么这个时候就是一个冗余索引。

2024-04-23 16:51:37 519

原创 关于Java浅拷贝与深拷贝的区别

创建一个指向对象的引用变量的拷贝。由输出结果可以看出,它们的地址值是相同的,那么它们肯定是同一个对象。teacher和otherTeacher的只是引用而已,他们都指向了一个相同的对象Teacher(“Taylor”,26)。这就叫做引用拷贝。

2024-04-18 12:00:05 670

原创 B02、JVM调优案例

刚刚又提到一个名词叫“逃逸分析”,那什么是逃逸呢。在Java中,简单来说就是在一个方法里(也就是一个栈帧里),创建的任意对象、变量。只要是跟随这个方法的生存和死亡的,就叫没有逃逸。就是说这个方法的用到的变量、对象,没有提供给外部的任何方法使用。而反之就是发生了逃逸,从创建的这个方法里逃到其它方法里进行使用。対这类对象的分析处理,就是逃逸分析了。如何将堆上的对象分配到栈,这里使用的手段就是逃逸分析。逃逸分析(Escape Analysis)是目前Java虚拟机中比较前沿的优化技术。

2024-04-18 10:37:00 685

原创 B02、GC日志分析-案例演示-6.4

完整代码,可以通过下载文章顶部的《案例一:堆溢出演示代码》,进行演示复现。

2024-04-12 14:44:09 564

原创 B02、分析GC日志-6.3

由于多核的原因,一般的GC事件中,real time是小于sys + user time的,因为一般是多个线程并发的去做GC,所以real time是要小于sys+user time的。,GCeasy是一款在线的GC日志分析器,可以通过GC日志分析进行内存泄漏检测、GC暂停原因分析、JVM配置建议优化等功能,而且是可以免费使用的(有一些服务是收费的)。GCViewer是一个免费的、开源的分析小工具,用于可视化查看由SUN/Oracle,IBM,HP和BEA Java虚拟机产生的垃圾收集器的日志。

2024-04-09 11:54:23 940 1

原创 B02、关于垃圾回收器-6.2

Serial收集器是最基本、历史最悠久的垃圾收集器了。JDK1.3之前回收新生代唯一的选择。Serial收集器作为HotSpot中Client模式下的默认新生代垃圾收集器。Serial 收集器采用复制算法、串行回收和”Stop-the-World”机制的方式执行内存回收。除了年轻代之外,Serial收集器还提供用于执行老年代垃圾收集的Serial Old收集器。Serial Old 收集器同样也采用了串行回收和”Stop the World”机制,只不过内存回收算法使用的是标记-压缩算法。

2024-04-09 11:54:15 703

原创 B02、垃圾回收 算法 & 概念-6.1

垃圾是指在运行程序中没有任何指针指向的对象,这个对象就是需要被回收的垃圾。如果不及时对内存中的垃圾进行清理,那么,这些垃圾对象所占的内存空间会一直保留到应用程序结束,被保留的空间无法被其他对象使用。甚至可能导致内存溢出。也称作“存储渗漏”。严格来说,只有对象不会再被程序用到了,但是GC又不能回收他们的情况,才叫内存泄漏。但实际情况很多时候一些不太好的实践(或疏忽)会导致对象的生命周期变得很长甚至导致OOM,也可以叫做宽泛意义上的“内存泄漏”。对象 X 引用对象 Y,X 的生命周期比 Y 的生命周期长;

2024-04-09 11:53:51 556

原创 B02、执行引擎-5

指令由于机器码是有0和1组成的二进制序列,可读性实在太差,于是人们发明了指令。指令就是把机器码中特定的0和1序列,简化成对应的指令(一般为英文简写,如mov,inc等),可读性稍好。由于不同的硬件平台,执行同一个操作,对应的机器码可能不同,所以不同的硬件平台的同一种指令(比如mov),对应的机器码也可能不同。指令集不同的硬件平台,各自支持的指令,是有差别的。因此每个平台所支持的指令,称之为对应平台的指令集。x86指令集,对应的是x86架构的平台ARM指令集,对应的是ARM架构的平台。

2024-04-07 10:32:01 866

原创 B02、对象内存布局-4

比如:User user=new User();在 jvm 中,将会做哪些事情:1、首先在方法区的常量池中查看是否有new后面参数(也就是类名)的符号引用,并检查是否有类的加载信息也就是是否被加载解析和初始化过。如果已经加载过了就不在加载,否则执行类的加载全过程。2、加载完类后,大致做了如下三件事:a、给实例分配内存b、调用构造函数,初始化成员字段c、user对象指向分配的内存空间new操作不是原子操作,b和c的顺序可能会调换。

2024-04-07 10:31:35 591

原创 B02、运行时内存篇-3.2

从内存模型而不是垃圾收集的角度,对Eden区域继续进行划分,JVM为每个线程分配了一个私有缓存区域,它包含在Eden空间内。据我所知所有OpenJDK衍生出来的JVM都提供了TLAB的设计。不是虚拟机运行时数据区的一部分,也不是《Java虚拟机规范》中定义的内存区域。直接内存是在Java堆外的、直接向系统申请的内存区间。来源于NIO,通过存在堆中的DirectByteBuffer操作Native内存;通常,访问直接内存的速度会优于Java堆。即读写性能高。

2024-04-03 11:37:21 924

原创 B02、运行时内存篇-3.1

Java虚拟机栈是什么?Java虚拟机栈(Java Virtual Machine Stack),早期也叫Java栈。每个线程在创建时都会创建一个虚拟机栈,其内部保存一个个的栈帧(Stack Frame),对应着一次次的Java方法调用。是线程私有的。生命周期生命周期和线程一致。特点栈是一种快速有效的分配存储方式,访问速度仅次于程序计数器。我们说Java虚拟机的解释引擎是基于栈的执行引擎,其中的栈指的就是操作数栈。

2024-04-03 11:37:09 639

原创 B02、类的加载过程梳理-2

所谓类模板对象,其实就是Java类在JVM内存中的一个快照,JVM将从字节码文件中解析出的常量池、类字段、类方法等信息存储到类模板中,这样JVM在运行期便能通过类模板而获取Java类中的任意信息,能够对Java类的成员变量进行遍历,也能进行Java方法的调用。反射的机制即基于这一基础。如果JVM没有将Java类的声明信息存储起来,则JVM在运行期也无法反射。加载的类在JVM中创建相应的类结构,类结构会存储在方法区(JDK1.8之前:永久代;JDK1.8及之后:元空间)。而这个也叫做类模型的位置。

2024-04-03 11:36:42 822

原创 B02、字节码深入了解篇-1

源代码经过编译器编译之后便会生成一个字节码文件,字节码是一种二进制的类文件,它的内容是JVM的指令,而不像C、C++经由编译器直接生成机器码。Java虚拟机的指令由一个字节长度的、代表着某种特定操作含义的操作码(opcode)以及跟随其后的零至多个代表此操作所需参数的操作数(operand)所构成。虚拟机中许多指令并不包含操作数,只有一个操作码。任何一个Class文件都对应着唯一一个类或接口的定义信息,但反过来说,Class文件实际上它并不一定以磁盘文件的形式存在。

2024-04-03 11:36:10 759

原创 B01、本地方法接口 & 本地方法栈 - 05

简单地讲,一个Native Method就是一个Java调用非Java代码的接口。一个Native Method是这样一个Java方法:该方法的实现由非Java语言实现,比如C。这个特征并非Java所特有,很多其它的编程语言都有这一机制,比如在C++中,你可以用extern "C"告知C++编译器去调用一个C的函数。 在定义一个native method时,并不提供实现体(有些像定义一个Java interface),因为其实现体是由非java语言在外面实现的。本地接口的作用是融合不同的编程语

2024-03-17 15:03:03 876

原创 B01、运行时数据区-04

Java8虚拟机规范JVM中的程序计数寄存器(Program Counter Register) 中,Register的命名源于CPU的寄存器, 寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。这里,并非是广义上所指的物理寄存器,或许将其翻译为PC计数器(或指令计数器)会更加贴切(也称为程序钩子) , 并且也不容易引起一些不必要的误会。JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟。它是一块很小的内存空间,几乎可以忽略不记。也是运行速度最快的存储区域。

2024-03-17 14:26:09 873

原创 Centos7 排查流量异常进程

使用iftop命令,界面如下:界面上面显示的是类似刻度尺的刻度范围,为显示流量图形的长条作标尺用的。中间的<= =>这两个左右箭头,表示的是流量的方向。界面相关参数说明TX:发送流量RX:接收流量TOTAL:总流量cumm:运行iftop以来的总流量peak:峰值流量rates:分别表示过去 2s 10s 40s时间内网卡总的平均流量iftop -i ensxxx -n -P #ensxxx表示网卡名称,可以通过ifconfig查看。

2024-03-04 09:47:43 480

原创 响应式常用API

create方法用于创建自定义的Flux或Mono,通过编程方式发射元素和控制订阅。i

2024-01-22 10:12:11 401

转载 nginx接口流量拷贝

我是这样理解的,这里,mirror本意是镜子、镜像,这里可以理解就像一个镜像站点一样,将所有的请求都收集起来,这个镜像就代表了所有真实有效的原始请求。nginx的master进程的进程ID,默认情况下,放在nginx.pid文件中,该文件所在的目录一般是/usr/local/nginx/logs 或者 /var/run。一般情况下,nginx.conf文件在 /usr/local/nginx/conf 或者 /etc/nginx 或者 /usr/local/etc/nginx 目录下。

2024-01-12 15:19:15 62

原创 B01、运行时数据区概述-03

线程是一个程序里的运行单元。JVM允许一个应用有多个线程并行的执行。在HotspotJVM里, 每个线程都与操作系统的本地线程直接映射。当一个Java线程准备好执行以后, 此时一个操作系统的本地线程也同时创建。Java线程执行终止后, 本地线程也会回收。操作系统负责所有线程的安排调度到任何一个可用的CPU上。一旦本地线程初始化成功, 它就会调用Java线程中的run() 方法。

2024-01-03 22:50:15 437

原创 B01、类加载子系统-02

类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识。ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine(执行引擎)决定。加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方法区中还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射)这里的自定义并非是说由开发人员自定义的类加载器。

2024-01-03 22:14:31 970

原创 A01、class文件简要说明

关于 .class 文件的相关结构说明。

2023-12-27 20:22:48 811

原创 A01、关于jvm执行子系统

类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)7个阶段。其中验证、准备、解析3个部分统称为连接(Linking)。于初始化阶段,虚拟机规范则是严格规定了有且只有5种情况必须立即对类进行“初始化”(而加载、验证、准备自然需要在此之前开始):1)、遇到。

2023-12-21 09:43:08 1020

原创 A01、jvm内存区域划分

程序计数器(Program Counter Register),也有称作为PC寄存器。保存的是程序当前执行的指令的地址(也可以说保存下一条指令的所在存储单元的地址),当CPU需要执行指令时,需要从程序计数器中得到当前需要执行的指令所在存储单元的地址,然后根据得到的地址获取到指令,在得到指令之后,程序计数器便自动加1或者根据转移指针得到下一条指令的地址,如此循环,直至执行完所有的指令。也就是说是用来的。由于在JVM中,

2023-12-19 18:16:23 912

原创 A01、关于JVM的GC回收

就是我们一般声明对象是时虚拟机生成的引用,强引用环境下,垃圾回收时需要严格判断当前对象是否被强引用,如果被强引用,则不会被垃圾回收软引用一般被做为缓存来使用。与强引用的区别是,软引用在垃圾回收时,虚拟机会根据当前系统的剩余内存来决定是否对软引用进行回收。如果剩余内存比较紧张,则虚拟机会回收软引用所引用的空间;如果剩余内存相对富裕,则不会进行回收。换句话说,虚拟机在发生OutOfMemory时,肯定是没有软引用存在的。弱引用与软引用类似,都是作为缓存来使用。

2023-12-18 20:57:53 1075

原创 A01、深入了解性能优化

提交请求和返回该请求的响应时间之间使用的时间,一般比较关注平均响应时间。同一时刻。对服务器有实际交互请求的请求数。和网站在线用户数的关联:1000个同时在线用户数,可以估计并发数在5%到15%之间,也就是同时并发数在50~150之间。

2023-12-18 19:22:14 1096

原创 B01、JVM与Java体系结构-01

Java平台上的多语言混合编程正成为主流,通过特定领域的语言去解决特定领域的问题是当前软件开发应对日趋复杂的项目需求的一个方向。试想一下, 在一个项目之中, 并行处理用Clojure语言编写, 展示层使用JRuby/Rails, 中间层则是Java, 每个应用层都将使用不同的编程语言来完成,而且,接口对每一层的开发者都是透明的,各种语言之间的交互不存在任何困难, 就像使用自己语言的原生API一样方便, 因为它们最终都运行在一个虚拟机之上。

2023-12-17 21:35:34 1064

转载 关于带宽大小 & 实际流量大小

这里特别记录下关于这两个的概念,因压测程序受带宽影响,导致始终未定位到正确问题。由于之前一直认为带宽的 20M 就是和实际上行流量的20M对等,结果发现两者之间存在对应的换算关系😂希望有和我一样存在这样误区的,能及时纠正。

2023-12-01 15:28:02 67

原创 Elasticsearch7 入门 & 进阶

全文检索是指,通过一个程序扫描文本中的每一个单词,针对单词建立索引,并保存该单词在文本中的位置、以及出现的次数。用户查询时,通过之前建立好的索引来查询,将索引中单词对应的文本位置、出现的次数返回给用户,因为有了具体文本的位置,所以就可以将具体内容读取出来了。内容爬取,停顿词过滤比如一些无用的像"的",“了” 之类的语气词/连接词内容分词,提取关键词根据关键词建立倒排索引用户输入关键词进行搜索。

2023-11-14 17:04:28 485 1

原创 RabbitMQ 运维 & 扩展

关于Rabbitmq 集群的搭建,详见以下文章。简单说来就是将多个单机rabbitmq服务,通过给到一致的密钥(.erlang.cookie)并且开放rabbitmq服务的 25672 端口,允许多节点间进行互相通讯,就完成了集群的搭建。当多个单机服务正常部署可运行的时候,则需要进行多节点的配置。假设这里一共有三台物理主机, 均己正确地安装了RabbitMQ ,且主机名分别为myblnp1 , myblnp2和myblnp3。接下来需要按照以下步骤执行。

2023-10-31 18:01:47 5817

原创 Jprofiler V14中文使用文档

JProfiler是一个用于分析运行JVM内部情况的专业工具。在开发中你可以使用它,用于质量保证,也可以解决你的生产系统遇到的问题。方法调用这通常被称为"CPU分析"。方法调用可以通过不同的方式进行测量和可视化, 分析方法调用可以帮助了解你的应用程序正在做什么,并找到提高其性能的方法。分配分析堆上对象的分配、引用链和垃圾回收属于"内存分析"的范畴。这个功能可以让你解决内存泄漏,总之使用更少的内存,分配更少的临时对象。线程和锁线程可以持有锁,例如通过在一个对象上做同步。

2023-10-20 13:44:51 1076

原创 Rabbitmq 的管理配置

每一个RabbitMQ 服务器都能创建虚拟的消息服务器,我们称之为虚拟主机(virtual host) ,简称为vhost 。每一个vhost 本质上是一个独立的小型RabbitMQ 服务器,拥有自己独立的队列、交换器及绑定关系等,井且它拥有自己独立的权限。vhost 就像是虚拟机与物理服务器一样,它们在各个实例间提供逻辑上的分离,为不同程序安全保密地运行数据,它既能将同一个RabbitMQ 中的众多客户区分开,又可以避免队列和交换器等命名冲突。vhost 之间是绝对隔离的,无法将vhost1中的交换器与v

2023-10-17 11:00:05 2301

原创 RabbitMQ 知识点解读

当mandatory 参数设为true 时,交换器无法根据自身的类型和路由键找到一个符合条件的队列,那么RabbitMQ 会调用Basic.Return 命令将消息返回给生产者。当mandatory 参数设置为false 时,出现上述情形,则消息直接被丢弃。那么生产者如何获取到没有被正确路由到合适队列的消息呢?这时候可以通过调用 channel.addReturnListener 来添加ReturnListener 监昕器实现。

2023-09-09 15:41:05 1168

原创 Rabbitmq安装

当执行安装目录指定过程中,有提示 err 错误时,需要解决依赖的问题,出现一个解决一个;执行:wget http://erlang.org/download/otp_src_24.1.4.tar.gz。执行第一次解压:xz -d rabbitmq-server-generic-unix-3.8.16.tar.xz。执行第二次解压:tar -xvf rabbitmq-server-generic-unix-3.8.16.tar。执行:./configure --prefix=[具体安装目录路径]

2023-08-31 11:13:51 814

原创 JVM调优指令&参数

想要要获取运行的Java虚拟机进程的列表,可以使用ps命令(Linux系统中)或tasklist命令(Windows系统中),如果Java虚拟机进程没有在单独的docker实例中运行,可以使用jps命令。除此以外,jmap命令还可以查看finalize执行队列、Java堆和方法区的详细信息,比如空间使用率、当前使用的什么垃圾回收器、分代情况等等。显示Java堆中对象的统计信息,包括:对象数量、占用内存大小(单位:字节)和类的完全限定名。要获得某个对象的大小,可以将其总大小除以该对象类型的数量。

2023-08-29 22:29:18 1888

原创 关于JVM的参数类型

一般也是用的最多的,主要用于JVM调优和debug。主要呢可以分为两类,分别是Boolean类型和Key-Value类型。X参数也就是非标准化参数,在jdk各个版本里可能会变,但是变化的可能比较少。格式:-XX:=表示name属性的值是value。等等,这类参数的特点是在jdk各版本里基本不会变的,相对稳定。格式: -XX:[+-]表示启用或者禁用name属性。比如:-XX:MaxGCPauseMillis=500。JVM参数类型,主要是可以分为三类。

2023-08-27 22:35:39 665

原创 性能优化维度

其中的数据会根据读取频率进行组织,把最频繁读取的内容放在最容易找到的位置,把不再读的内容不断往后排,直至从中删除。缓冲(buffers)是根据磁盘的读写设计的,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。这二者是为了提高1O性能的,并由OS管理,并非应用自己分配的内存,而是OS自己根据需要对空闲内存进行的额外利用。查看空闲内存,确定应用是否有内存泄漏时,只能以Free的第三行为依据,第二行其实作用不大,只是可以看到OS当前的buffer和cache大小。两者都是RAM中的数据。

2023-08-27 20:48:32 594

原创 CentOS7 TAR安装 EMQX(MQTT)

官网 --> 右上角[免费试用] --> EMQX 下载 --> EMQX 开源版 --> 选择版本 + 系统 --> [免费下载] + 选择 tar.gz + amd64 --> [立即下载]选择对应下载方式上传到 /usr/local/ 目录下。

2023-08-24 17:46:02 810

字节码解析示例与说明解析

字节码解析示例与说明解析

2024-04-17

字节码解析示例与说明解析

字节码解析示例与说明解析

2024-04-17

JVM常量类型结构说明

JVM常量类型结构说明

2024-04-17

调优初始jmeter脚本

调优初始jmeter脚本

2024-04-15

案例一-堆溢出演示代码

案例一-堆溢出演示代码

2024-04-10

MapToDtoConvert.7z

简单封装的一个关于map类型数据转pojo实体类的工具方法,map数据转换,支持实体类中的String、int、Integer、double、Double、float、Float、long、Long以及Date(java.util.Date)类型

2021-07-06

2020java最新基础面经

这份doc面经文档是我最近整理的,里面内容都是比较新的。所有问题都有答案,知识点基本都涉及了。虽说是基础面经,但是里面整理的比较细,有java基本知识、JVM相关知识点、spring相关内容等。

2020-12-04

jacob api文档及使用方法

这里呢是三份文档,里面有jacob的一些具体使用方法包括代码案例也有,三份文档有些重复的不过都是比较全的

2019-09-20

mybatis分页插件与druid连接池

包含了阿里巴巴开的druid1.026版本连接池架包以及mybatis分页插件pagehelper-4.2.1版本的架包

2018-06-20

hibernate框架所需架包

里面拥有的是使用hibernate框架需要用到的几个架包,主要目的是方便使用。

2018-06-20

spring+springmvc+mybatis等架包

该资源包含了我们SSM框架所需的所有架包,包括日志的架包。

2018-06-13

空空如也

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

TA关注的人

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