自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 从原理聊JVM(一):染色标记和垃圾回收算法

本篇介绍了JVM中垃圾回收器相关的基础知识,后续会深入介绍CMS、G1、ZGC等不同垃圾收集器的运作流程和原理,欢迎关注。

2023-04-25 14:21:16 206 2

原创 ES的索引结构与算法解析

ES在处理海量数据时通过其独到的结构和压缩算法,将索引效率尽可能的提升。虽然在实际业务处理中我们极少遇到海量数据处理的情况,但是通过了解ES的原理,能够帮我们开阔下视野,了解数字之美,算法之美。

2023-04-25 14:20:12 408

原创 如何优雅的处理异常

Java 语言按照错误严重性,从 throwale 根类衍生出 Error 和 Exception 两大派系。程序在执行过程中所遇到的硬件或操作系统的错误。错误对程序而言是致命的,将导致程序无法运行。常见的错误有内存溢出,jvm 虚拟机自身的非正常运行,calss 文件没有主方法。程序本生是不能处理错误的,只能依靠外界干预。Error 是系统内部的错误,由 jvm 抛出,交给系统来处理。程序正常运行中,可以预料的意外情况。比如数据库连接中断,空指针,数组下标越界。

2023-04-25 14:17:31 292 1

原创 SpringBoot 之启动流程

加载应用程序上下文扫描应用程序中的所有组件自动配置应用程序环境启动嵌入式Web服务器在下面的章节中,我们将逐一分析这些步骤的源代码。在本文中,我们深入分析了 SpringBoot 应用程序的启动过程的源代码。我们了解了 SpringBoot 如何加载应用程序上下文、扫描应用程序中的所有组件、自动配置应用程序环境以及启动嵌入式Web服务器。这些步骤的源代码展示了 SpringBoot 如何简化应用程序的开发和部署。

2023-04-25 13:37:59 211

原创 Java的流(Stream)、文件(File)和IO

因为几乎所有的字符流都只能连接在其它流上,而基本上节点流(低级流)都是字节流,由于 InputStreamReader & OutputStreamWriter 可以连接字节流,而其本身又是字节流,所以可以起到将字节流与字符流“对接”的作用。可以称之为“转换流”。:标准输入读取一个字符串需要使用 BufferedReader 的 readLine() 方法,该方法会连续读取若干字符,当读取到换行符时,将之前读取的字符以字符串形式返回(若读取不到换行符,可能会阻塞),若返回值为 null 时,表示流的末尾。

2023-04-25 13:27:09 1685

原创 探寻Java装箱和拆箱的奥妙

今天在逛某知名论坛的时候,看到一篇"请不要使用包装类型,避免造成性能损失"的文章。一下子就吸引了我的注意。大意就是,能用基本数据类型就尽量用基本数据类型,因为包装类型自动拆箱、装箱会带来性能损失尤其是循环使用时会大量创建对象。所以今天聊一下,Java的装箱和拆箱。Java中的装箱(boxing)和拆箱(unboxing)是指将基本数据类型与其对应的包装类之间进行转换的过程。装箱装箱是将基本数据类型转换为其对应的包装类,例如将int类型转换为Integer类型。

2023-04-25 13:25:45 252

原创 Java文件操作必备技能,10个小技巧让你快速掌握

在我们日常的开发中,文件操作是一个非常重要的主题。文件读写、文件复制、任意位置读写、缓存等技巧都是我们必须要掌握的。在这篇文章中,我将给你们介绍 10 个实用的文件操作技巧。使用 try-with-resources 语句处理文件 IO 流,确保在使用完毕后自动关闭流。使用 java.nio.file.Files 类来读取、写入和操作文件。它提供了许多便利的方法,如 copy、move、delete、create 等。

2023-04-25 13:24:23 85

原创 Synchronized原理分析

我们先看一个例子最后的输出我们可以看一下一定是一个小于等于1000的值,这是一个比较经典的代码场景了,小于1000的原因也简单就是的原因原子性: 原子性是指在一个操作中就是cpu不可以在中途暂停然后再调度,既不被中断操作,。count++看着像是一句代码好像也不能够再怎么拆分步骤,但其实底层是分为好几步的,我们可以使用。

2023-04-25 13:22:59 41

原创 SpringBoot WebService服务端和客户端使用案例

UserDto/** 和接口的服务名称保持一致 *//** 和接口的命名空间保持一致 *//** 接口全路径 */@Component@Override@Override复制代码。

2023-04-25 13:22:08 194

原创 闲聊Java中$符的各种使用场景

虽然在Java编程中,通常不建议使用$符号作为类名或变量名的一部分,但这是允许的。复制代码然而,由于这种命名方法可能引起混淆,因此在实际编程中应该避免这样做。

2023-04-25 13:20:29 216

原创 一起探秘,不可不知双向链表底层原理

LinkList是一个双向链表(双链表);它是链表的一种,也是最常见的数据结构,其内部数据呈线性排列,属于线性表结构.它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点,所以是双向链表.

2023-04-24 13:31:38 258

原创 同步锁synchronized追本溯源

1、synchronized是靠ObjectMonitor来控制锁的2、需要这把锁的线程在monitor的队列里被各种安排3、拿到锁的线程被monitor标记,计数加加,释放锁,需要将计数器减减操作。

2023-04-24 13:30:57 58

原创 容器编排Docker-Compose少不了

​ docker 是轻量化的应用程序,docker 官方推荐每个 docker 容器中只运行一个进程,那么就是说,我们需要分别为我们的应用、数据库、nginx 创建单独的 docker 容器,然后分别启动它。​ Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景。,用户也可以使用 -f 指定其他文件名。

2023-04-24 13:30:02 116

原创 Apache Druid 数据摄取---本地数据和kafka流式数据

Apache Druid是一个集时间序列数据库、数据仓库和全文检索系统特点于一体的分析性数据平台。本文将带你简单了解Druid的特性,使用场景,技术特点和架构。这将有助于你选型数据存储方案,深入了解Druid存储,深入了解时间序列存储等。Apache Druid是一个高性能的实时分析型数据库。上篇文章,我们了解了Druid的加载方式,咱么主要说两种,一种是加载本地数据,一种是通过kafka加载流式数据。

2023-04-24 13:29:22 180

原创 架构设计基础设施保障 - IaaS之网络篇

域名劫持又称DNS劫持,是指在劫持的网络范围内拦截域名解析的请求,域名劫持通常相伴的措施是封锁正常DNS的IP, 这样就可以采用虚假的IP来代替真实的IP。这里可以采用系统分配生成的cname域名, 主域名是用户访问应用服务使用的域名,必须填写真实主域名, 这里主域名是配置: test.mirson.cn。全球加速可以为不同地域的客户端智能返回不同的加速IP,降低解析时延,如果是面向国际的服务,是需要开启此功能, 如果只是国内使用, 可以不用开启。最后, 在解析设置里面, 添加记录。

2023-04-24 10:37:52 90

原创 轻量容器引擎Docker安装及其架构

因此,在构建镜像的时候,需要额外小心,每一层尽量只包含该层需要添加的东西,任何额外的东西应该在该层构建结束前清理掉。的文件系统,将不同目录拉到同一个虚拟目录下,下图展示了Docker用Union FS 搭建的分层镜像:(比如最下层是操作系统的引导,上一层是Linux操作系统,再上一层是Tomcat,jdk,再上一层是应用代码)镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。

2023-04-24 10:37:06 83

原创 【超详细】Apache Durid从入门到安装详细教程

Apache Druid是一个集时间序列数据库、数据仓库和全文检索系统特点于一体的分析性数据平台。本文将带你简单了解Druid的特性,使用场景,技术特点和架构。这将有助于你选型数据存储方案,深入了解Druid存储,深入了解时间序列存储等。Apache Druid是一个高性能的实时分析型数据库。1.1 为什么使用1.1.1 云原生数据库一个现代化的云原生,流原生,分析型数据库​ Druid是为快速查询和快速摄入数据的工作流而设计的。Druid强在有强大的UI,运行时可操作查询,和高性能并发处理。

2023-04-24 10:35:33 429

原创 Springboot+Shiro+Jwt实现简单的权限控制

因为需要实现一个设备管理系统的权限管理模块,在查阅很多博客以及其他网上资料之后,发现重复、无用的博客很多,因此写一篇文章来记录,以便后面复习。书写顺序。

2023-04-24 10:02:55 1645

原创 Java 应用程序在 Kubernetes 上棘手的内存管理

JVM 内存管理是一种高度复杂的机制,多年来通过连续发布不断改进,是 JVM 平台的优势之一。对于本文,我们将只介绍对本主题有用的基础知识。在较高的层次上,JVM 内存由两个空间组成 —— Heap 和 Metaspace。

2023-04-24 10:01:15 152

原创 为什么95%的Java程序员人,都是用不好Synchronized?

自旋锁在JDK 1.4.2中引入,默认关闭,但是可以使用-XX:+UseSpinning开开启,在JDK1.6中默认开启。同时自旋的默认次数为10次,可以通过参数-XX:PreBlockSpin来调整;如果通过参数-XX:preBlockSpin来调整自旋锁的自旋次数,会带来诸多不便。假如我将参数调整为10,但是系统很多线程都是等你刚刚退出的时候就释放了锁(假如你多自旋一两次就可以获取锁),你是不是很尴尬。

2023-04-24 09:57:52 70

原创 Kafka牛逼在哪里

一个独立的Kafka服务器称为broker,broker接收来自生产者的消息,为消息设置偏移量,并提交消息到磁盘保存。kafka更好的替换传统的消息系统,消息系统被用于各种场景(解耦数据生产者,缓存未处理的消息等),与大多数消息系统比较,kafka有更好的吞吐量,内置分区,副本和故障转移,这有利于处理大规模的消息。kafka原本的使用场景是用户的活动追踪,网站的活动(网页游览,搜索或其他用户的操作信息)发布到不同的话题中心,这些消息可实时处理,实时监测,也可加载到Hadoop或离线处理数据仓库。

2023-04-23 14:02:32 29

原创 Kafka基本概念大全

下面给出 Kafka 一些重要概念,让大家对 Kafka 有个整体的认识和感知,后面还会详细的解析每一个概念的作用以及更深入的原理• Producer:消息生产者,向 Kafka Broker 发消息的客户端。• Consumer:消息消费者,从 Kafka Broker 取消息的客户端。• Consumer Group:消费者组(CG),消费者组内每个消费者负责消费不同分区的数据,提高消费能力。一个分区只能由组内一个消费者消费,消费者组之间互不影响。

2023-04-23 14:01:55 133

原创 Redis这个内存回收,确实有点牛逼

​ LFU(Least Frequently Used),最少频率使用。会统计每个 key 的访问频率,值越小淘汰优先级越高。

2023-04-23 14:00:33 32

原创 大哥,这是并发不是并行,Are You Ok?

进程是程序运行资源分配的最小单位​ 进程是操作系统进行资源分配的最小单位,其中资源包括:CPU、内存空间、磁盘IO等,同一进程中的多条线程共享该进程中的全部系统资源,而进程和进程之间是相互独立的。进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。​ 进程是程序在计算机上的一次执行活动。当你运行一个程序,你就启动了一个进程。显然,程序是死的、静态的,进程是活的、动态的。进程可以分为系统进程和用户进程。

2023-04-23 13:59:25 40

原创 这是一篇纯讲SQL语句优化的文章

如果我们需要一次性往数据库表中插入多条记录,可以从以下三个方面进行优化。批量插入数据手动控制事务主键顺序插入,性能要高于乱序插入。

2023-04-23 13:57:28 27

原创 精通Netty,那倒是把这个8个东西说清楚呀!

Netty 是一个异步的、基于事件驱动的网络应用框架,用于快速开发可维护、高性能的网络服务器和客户端注意:netty的异步还是基于多路复用的,并没有实现真正意义上的异步IO。

2023-04-23 09:40:20 111

原创 一分钟搞定Netty 三大组件,如果搞不定,再看3遍

Channel 与 Buffer通道 (Channel) 和缓冲区 (Buffer)。通道表示打开到 IO 设备 (例如:文件、套接字) 的连接。若需要使用 NIO 系统,需要获取用于连接 IO 设备的通道以及用于容纳数据的缓冲区。然后操作缓冲区,对数据进行处理简而言之,通道负责传输,缓冲区负责存储常见的 Channel 有以下四种,其中 FileChannel 主要用于文件传输,其余三种用于网络通信Buffer 有以下几种,其中使用较多的是 ByteBufferByteBuffer。

2023-04-23 09:39:26 107

原创 折腾了我一周,原来Netty网络编程就是这么个破玩意儿!!!

正常断开时,服务器端的 channel.read (buffer) 方法的返回值为 - 1,所以当结束到返回值为 - 1 时,需要调用 key 的 cancel 方法取消此事件,并在取消后移除该事件。类型和长度已知的情况下,就可以方便获取消息大小,分配合适的 buffer,缺点是 buffer 需要提前分配,如果内容过大,则影响 server 吞吐量。固定消息长度,数据包大小一样,服务器按预定长度读取,当发送的数据较少时,需要将数据进行填充,直到长度与消息规定长度一致。

2023-04-23 09:37:54 105

原创 13种Shell逻辑与算术,能写出5种算你赢!

我们通过一个有点奇怪的示例来说明这一点。如下:

2023-04-23 09:35:52 227

原创 Java里面为什么搞了双重检查锁,写完这篇文章终于真相大白了

延迟初始化降低了初始化类或创建实例的开销,但增加了访问被延迟初始化的字段的开销。在大多数时候,正常的初始化要优于延迟初始化。如果确实需要对实例字段使用线程安全的延迟初始化,请使用上面介绍的基于 volatile 的延迟初始化的方案;如果确实需要对静态字段使用线程安全的延迟初始化,请使用上面介绍的基于类初始化的方案。

2023-04-23 09:33:54 702

原创 来一波骚操作,Java内存模型

线程之间的通信线程的通信是指线程之间以何种机制来交换信息。在编程中,线程之间的通信机制有两种,共享内存和消息传递。​ 在共享内存的并发模型里,线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信,典型的共享内存通信方式就是通过共享对象进行通信。在消息传递的并发模型里,线程之间没有公共状态,线程之间必须通过明确的发送消息来显式进行通信,在java中典型的消息传递方式就是wait()和notify()。线程间的同步同步是指程序用于控制不同线程之间操作发生相对顺序的机制。

2023-04-21 14:46:55 31

原创 数据库平滑扩容方案剖析

但是在极限情况下, 即便通过上面的数据校验处理, 也有可能出现99.99%数据一致, 不能保障完全一致,这个时候可以在旧库做一个readonly只读功能, 或者将流量屏蔽降级,等待日志增量同步工具完全追平后, 再进行新库的切换。日志增量同步过程随时可能会产生新的数据, 新库与旧库的数据追平也会是一个无限逼近的过程。修复切换异常数据:在切换过程中, 如果出现,Canal未同步,但已切换至新库的请求(比如下单,修改了资金, 但还未同步 ), 可以通过定制程序, 读取检测异常日志,做自动修复或人工处理。

2023-04-21 14:45:02 131

原创 【源码透视】SpringBoot的SPI机制

只有接口,没有实现。在该方法里,首先拿到ClassLoader,然后加载FactoryNames,加载类型(type)为ApplicationContextInitializer,类加载器(classLoader)为刚刚拿到的类加载器,返回值放入一个Set中,为的是确保没有重复的FactoryName,这是因为在之后加载的两个spring.factories配置文件中有两个重复的FactoryName。在双亲委派模型中,子类加载器可以使用父类加载器已经加载的类,而父类加载器无法使用子类加载器已经加载的。

2023-04-21 13:26:26 241

原创 Dubbo架构设计及入门案例

Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成。Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

2023-04-21 11:11:46 64

原创 JVM的运行数据区相

程序计数器(Program Counter Register)每个线程一个。是一块较小的内存空间,它表示当前线程执行的字节码指令的地址。字节码解释器工作时,通过改变这个计数器的值来选取下一条需要执行的字节码指令,所以整个程序无论是分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。由于线程是多条并行执行的,互相之间执行到哪条指令是不一样的,所以每条线程都需要有一个独立的程序计数器,各条线程之间计数器互不影响,独立存储,我们称这类内存区域为“线程私有”的内存。

2023-04-21 11:10:50 36

原创 这是一篇纯讲SQL语句优化的文章

如果我们需要一次性往数据库表中插入多条记录,可以从以下三个方面进行优化。批量插入数据手动控制事务主键顺序插入,性能要高于乱序插入。

2023-04-21 09:56:05 25

原创 【必须收藏】别再乱找TiDB 集群部署教程了,这篇保姆级教程来帮你

从 TiDB 4.0 版本开始,TiUP 作为新的工具,承担着包管理器的角色,管理着 TiDB 生态下众多的组件,如 TiDB、PD、TiKV 等。TiDB 作为一款开源分布式 NewSQL 数据库,可以很好的部署和运行在 Intel 架构服务器环境、ARM 架构的服务器环境及主流虚拟化环境,并支持绝大多数的主流硬件网络。集群诊断是在指定的时间范围内,对集群可能存在的问题进行诊断,并将诊断结果和一些集群相关的负载监控信息汇总成一个诊断报告。包含最小拓扑的基础上,同时部署 TiDB Binlog。

2023-04-21 09:37:59 700

原创 ElasticSearch还能性能调优,涨见识了

性能优化是个涉及面非常广的问题,不同的环境,不同的业务场景可能会存在不同的优化方案,本文只对一些相关的知识点做简单的总结,具体方案可以根据场景自行尝试。

2023-04-21 09:36:02 170

原创 程序员赶紧看过来!布隆过滤器又有新玩法了~

布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。布隆过滤器可以理解为一个不怎么精确的 set 结构,当你使用它的 contains 方法判断某个对象是否存在时,它可能会误判。但是布隆过滤器也不是特别不精确,只要参数设置的合理,它的精确度可以控制的相对足够精确,只会有小小的误判概率。

2023-04-21 09:33:48 163

原创 一文搞定接口幂等性架构设计方案

现如今很多系统都会基于分布式或微服务思想完成对系统的架构设计。那么在这一个系统中,就会存在若干个微服务,而且服务间也会产生相互通信调用。那么既然产生了服务调用,就必然会存在服务调用延迟或失败的问题。当出现这种问题,服务端会进行重试等操作或客户端有可能会进行多次点击提交。如果这样请求多次的话,那最终处理的数据结果就一定要保证统一,如支付场景。此时就需要通过保证业务幂等性方案来完成。什么是幂等性幂等是一个数学与计算机学概念,即f(n) = 1^n。

2023-04-21 09:32:28 131

空空如也

空空如也

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

TA关注的人

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