自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

致力于不留技术债务cuizb.top

致力于不留技术债务,欢迎搜索:Java技术债务

  • 博客(151)
  • 资源 (3)
  • 收藏
  • 关注

原创 十万访问量的背后

自去年十一月份购买第一台服务器后,设想拥有属于一个人的博客。然后开始实施,虽然中间有不少的阻力,比如:服务器被黑,数据库被黑等。后来也开始注重服务器的安全,以及保护自己的博客,屏蔽一些恶意的爬虫等。现在的博客我也尽可能的使访问的数据真实,避免被刷,被恶意爬取我的文章信息。由于我对SEO不了解,导致前期我的文章大都是发布到了CSDN(地址:https://blog.csdn.net/qq_40124555),才能被检索到,然后去往我的博客网站引流,但是毕竟博主只是小生,许多用户看过了就走了,并不会进入我自己

2022-07-10 22:06:52 1336 3

原创 Redis特殊数据结构

根据官网介绍:Bitmap 不是 Redis 中的实际数据类型,而是在 String 类型上定义的一组面向位的操作,将其视为位向量。由于字符串是二进制安全的块,且最大长度为 512 MB,它们适合用于设置最多 2^32 个不同的位。Bitmap 存储的是连续的二进制数字(0 和 1),通过 Bitmap, 只需要一个 bit 位来表示某个元素对应的值或者状态,key 就是对应元素本身。我们知道 8 个 bit 可以组成一个 byte,所以 Bitmap 本身会极大的节省储存空间。

2024-06-07 17:03:33 522

原创 Nginx配置文件

通俗的解释:我们有时候,用自己的计算机A想访问国外的某个网站B,但是访问不了,此时,有一台中间服务器C可以访问国外的网站B,那么,我们可以用自己的电脑访问服务器C,通过C来访问B这个网站。那么这个时候,服务器C称为代理服务器,这种访问方式叫做正向代理。

2024-06-07 16:50:38 882

原创 Java中CAS机制详解

传统的并发控制手段,如使用关键字或者等互斥锁机制,虽然能够有效防止资源的竞争冲突,但也可能带来额外的性能开销,如上下文切换、锁竞争导致的线程阻塞等。而此时就出现了一种乐观锁的策略,以其非阻塞、轻量级的特点,在某些场合下能更好地提升并发性能,其中最为关键的技术便是Compare And Swap(简称CAS)。CAS是一种无锁算法,它在硬件级别提供了原子性的条件更新操作,允许线程在不加锁的情况下实现对共享变量的修改。在Java中,CAS机制被广泛应用于包下的原子类以及高级并发工具类如(AQS)的实现中。

2024-06-06 16:53:31 1046

原创 Java反射Reflect机制详解

Java反射是一个强大的工具,极大地增强了Java语言的动态性和灵活性。然而,在使用反射时需要权衡其性能开销和安全风险。Java反射有优点也有缺点,从整体上看,Java反射是以牺牲了小部分的性能换取了更好的扩展性和灵活性,牺牲小我成就大我,而且,随着现代硬件设备能力越来越强,这点小性能的牺牲是完全值得的。理解反射的原理和使用场景,可以更好地应用反射技术来解决实际开发中的问题。

2024-06-06 16:49:59 1059

原创 关于Spring中的@Async注解以及为什么不建议使用

Async 注解是 Java 8 中的一个注解,用于标识一个方法是异步执行的。当一个方法被标记为 Async 时,该方法将在一个新的线程中执行,并且可以立即返回一个 CompletableFuture 对象。使用 CompletableFuture 可以更轻松地管理异步计算的结果。@Async// 异步执行一些操作在上面的代码中,doSomethingAsync() 方法被标记为 Async,这意味着该方法将在一个新的线程中异步执行,同时返回一个 CompletableFuture 对象。

2024-04-23 14:28:22 701

原创 Mybatis 一级缓存和二级缓存

Mybaits提供一级缓存,和二级缓存。MyBatis是常见的Java数据库访问层框架。在日常工作中,开发人员多数情况下是使用MyBatis的默认缓存配置,但是MyBatis缓存机制有一些不足之处,在使用中容易引起脏数据,形成一些潜在的隐患。MyBatis一级缓存的生命周期和SqlSession一致。MyBatis一级缓存内部设计简单,只是一个没有容量限定的HashMap,在缓存的功能性上有所欠缺。

2024-04-23 14:23:47 547

原创 【集合】List取交集、并集(去重)、差集

交集差集并集不去重去重elementData引用还是指向this.elementData,所以后面直接操作elementData改变的会是this。对自身进行了遍历,在遍历的过程中判断传进来的集合中是否包含当前元素,如果包含,则按顺序写入当前集合中。ArrayList对此方法进行了重写,先对传入的参数进行了非空判断。第二个判断就是将交集后面多余的元素去除。

2023-12-05 15:24:04 6504

原创 Spring事件ApplicationEvent源码浅读

Spring 使用反射机制,获取了所有继承 ApplicationListener 接口的监听器,在 Spring 初始化时,会把监听器都自动注册到注册表中。定义一个继承ApplicationEvent的事件;定义一个实现ApplicationListener的监听器或者使用@EventListener监听事件;定义一个发送者,调用ApplicationContext直接发布或者使用ApplicationEventPublisher来发布自定义事件;

2023-10-17 19:09:18 19047 1

原创 Java8中Stream流的常用姿势

Stream的使用3.1 遍历/匹配(foreach/find/match)3.2 筛选(filter)3.3 聚合(max/min/count)3.4 映射(map/flatMap)3.5 归约(reduce)3.6 收集(collect)3.6.1 归集(toList/toSet/toMap)3.6.2 统计(count/averaging)3.6.3 分组(partitioningBy/groupingBy)3.6.4 接合(joining)3.6.5 归约(reducing)3.7 排序(sorte

2023-10-12 15:30:48 12093 1

原创 三元运算符引发的自动拆装箱问题

Java中的自动拆箱和装箱问题,以及三元运算符中类型不一致导致的空指针异常问题。作者通过查看Java字节码,演示了代码中出现空指针异常的原因,并提醒读者在编写代码时要注意类型的转换问题。

2023-07-28 11:33:16 3783

原创 【面试系列】JDK动态代理和CGLIB静态代理

JDK动态代理代码实例Cglib 代理代码实例两者优缺点JDK动态代理只能代理接口实现类,原因是JDK动态代理是基于接口实现的,代理对象的类型由接口列表决定。如果你想代理一个类而不是一个接口,你需要使用其他的代理技术,比如CGLIB。

2023-07-21 16:32:19 246

原创 修改jar包中的文件内容

查找是否存在需要修改的文件vim命令修改配置文件jar命令替换jar包中的文件(也可新增)解压jar包,修改后重新打包jar修改clas文件jar命令参数

2023-07-14 15:22:18 10056

原创 Go语言的基本概念与语法

包package、Imports(导入)、基本数据类型、bool、string、int、byte、rune、float、complex、变量、变量声明、变量的初始化、匿名变量、常量、iota 常量生成器、for语句、if语句、switch、defer栈、go中关键字、类型转换、类型推断、Go函数、多值返回、命名的返回值、函数值、函数闭包、Go语言nil:空值/零值、nil 标识符是不能比较的、nil 不是关键字或保留字、nil 没有默认类型、不同类型 nil 指针是一样的、nil 是零值、内存大小可能不一样

2023-06-28 10:20:51 459

原创 从注解@EventListener和@TransactionalEventListener掌握Spring的事件机制原理

Spring为我们提供的一个事件监听、订阅的实现,内部实现原理是观察者设计模式;为的就是业务系统逻辑的解耦,提高可扩展性以及可维护性。事件发布者并不需要考虑谁去监听,监听具体的实现内容是什么,发布者的工作只是为了发布事件而已。在Spring中我们可以通过实现接口或者接口来实现事件驱动编程。比如我们做一个电商系统,用户下单支付成功后,我们一般要发短信或者邮箱给用户提示什么的,这时候就可以把这个通知业务做成一个单独事件监听,等待通知就可以了;把它解耦处理。Spring事件类自定义类描述运行程序上下文。

2023-05-23 16:24:28 1711

原创 ClickHouse之Explain查看执行计划

基本语法EXPLAIN 类型PLAN:用于查看执行计划,默认值。AST:用于查看语法树;SYNTAX:用于优化语法,有时我们指定的查询语句未必是最优的,那么 ClickHouse 在底层会进行优化,EXPLAIN SYNTAX 可以返回对一条 SQL 语句进行优化后的结果。通过对比优化前和优化后的 SQL 语句,可以有助于我们理解 ClickHouse 的优化机制PIPELINE:用于查看 PIPELINE 计划。ESTIMATE:显示处理查询时要从表中读取的估计行数、标记数和部分数

2023-05-08 18:59:30 2243 1

原创 kafka配置大全broker、topic、生产者和消费者等配置介绍

kafka配置,生产者配置,消费者配置,topic配置,partition配置,broker配置等

2023-04-23 17:20:47 2596

原创 ClickHouse之常见的时间周期函数

在工作中,如果使用了ClickHouse作为数据的存储的话,那么难免会遇到关于时间的转换问题比如:字符串转时间,日期等特定格式。

2023-04-20 15:39:32 4303

原创 ClickHouse之采样查询(SAMPLE)

子句,你不知道处理了哪些数据的相对百分比。在此示例中,对0.1(10%)数据的样本执行查询。聚合函数的值不会自动修正,因此要获得近似结果,值 count()例如,如果您需要计算所有访问的统计信息,只需对所有访问的1/10分数执行查询,然后将结果乘以10即可。启用数据采样时,不会对所有数据执行查询,而只对特定部分数据(样本)执行查询。的使用示例 _sample_factor。设置),是有意义的设置一个样品,其大小远大于颗粒。在至少10,000,000行上运行查询。,其中包含有关网站访问的统计信息。

2023-04-18 10:55:29 1271

原创 Kafka文件存储机制

Kafka是一种分布式的流处理平台,它通过文件存储机制来保证数据的可靠性,高效性和可扩展性。Kafka的数据存储是基于日志的,它将所有的消息都保存在一个或多个主题(topic)的日志文件中。每个主题都由一个或多个分区(partition)组成,每个分区都是一个有序的、不可修改的消息日志。消息按照它们的写入顺序追加到分区中,并分配一个唯一的偏移量(offset)来标识它们在分区中的位置。Kafka使用了两个文件来存储消息:消息文件和索引文件。索引文件:以.index后缀结尾,存储当前数据文件的索引;

2023-03-07 19:51:42 1410

原创 kafka生产者和消费者配置介绍

kafka配置,生产者配置,消费者配置,topic配置,partition配置,broker配置

2023-03-06 19:42:29 1662

原创 Kafka 的简介与架构

Kafka是最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。Kafka是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统。它可以作为消息系统和日志收集系统使用。

2023-03-02 19:37:04 1636

原创 Java中常见性能优化策略的总结

在软件开发中,性能优化是非常重要的一环。以下是常见的性能优化策略1. 代码优化2. 数据库层面优化SQL调优架构层面的调优连接池调优3. 网络优化4. 缓存缓存分类使用场景选型考虑什么时候更新缓存?如何保障更新的可靠性和实时性?缓存是否会满,缓存满了怎么办?缓存是否允许丢失?丢失了怎么办?缓存被“击穿”问题5. 异步使用场景作用常见做法6. JVM调优什么时候调?怎么调?7. 多线程与分布式使用场景常见做法

2023-03-01 11:09:22 1225

原创 Java无法通过形参设置为null改变实参

Java中的对象是通过引用来传递的,这意味着当我们将一个对象作为参数传递给函数时,实际上是将该对象的引用传递给函数。如图所示,setNull函数仅仅解除了该函数体中的node变量与堆中的TreeNode object的绑定关系,并没有解除main函数中的node与TreeNode object的绑定关系。main函数中的node与setNull函数中的node是栈中两个不同的引用型变量,它们都指向了堆中同一个的TreeNode object。

2023-02-23 22:22:59 649

原创 Java是值传递还是引用传递?区别是什么?

在Java方法中参数列表有两种类型的参数,基本类型和引用类型。- **基本类型:**值存放在局部变量表中,无论如何修改只会修改当前栈帧的值,方法执行结束对方法外不会做任何改变;此时需要改变外层的变量,必须返回主动赋值。- **引用数据类型:**指针存放在局部变量表中,调用方法的时候,副本引用压栈,赋值仅改变副本的引用。但是如果通过操作副本引用的值,修改了引用地址的对象,此时方法以外的引用此地址对象当然被修改。(两个引用,同一个地址,任何修改行为2个引用同时生效)。

2023-02-22 23:26:37 545

原创 浅谈SQL中的union和union all

`MySQL UNION` 操作符用于连接两个以上的 `SELECT` 语句的结果组合到一个结果集合中。多个 `SELECT` 语句会删除重复的数据。`UNION` 操作符选取不同的值,如果允许得到重复的值,可以使用 `UNION ALL`union 和union all区别

2023-02-21 23:01:36 733

原创 Java字节码介绍

Java之所以可以“一次编译,到处运行”。一是因为JVM针对各种操作系统、平台都进行了定制。二是因为无论在什么平台,都可以编译生成固定格式的字节码(.class文件)供JVM使用。因此,也可以看出字节码对于Java生态的重要性。之所以被称之为字节码,是因为字节码文件由十六进制值组成,而JVM以两个十六进制值为一组,即以字节为单位进行读取。

2022-12-21 22:51:12 2384

原创 【Kubernetes系列】工作负载资源之DaemonSet

DaemonSet确保全部(或者某些)节点上运行一个 Pod 的副本。当有节点加入集群时, 也会为他们新增一个 Pod。当有节点从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。在每个节点上运行集群守护进程在每个节点上运行日志收集守护进程在每个节点上运行监控守护进程一种简单的用法是为每种类型的守护进程在所有的节点上都启动一个 DaemonSet。一个稍微复杂的用法是为同一种守护进程部署多个 DaemonSet;

2022-12-01 20:43:53 890 2

原创 【Kubernetes系列】工作负载资源之StatefulSet

StatefulSet 是用来管理有状态应用的工作负载 API 对象。StatefulSet 用来管理某 Pod 集合的部署和扩缩, 并为这些 Pod 提供持久存储和持久标识符。和 Deployment 类似, StatefulSet 管理基于相同容器规约的一组 Pod。但和 Deployment 不同的是, StatefulSet 为它们的每个 Pod 维护了一个有粘性的 ID。这些 Pod 是基于相同的规约来创建的, 但是不能相互替换:无论怎么调度,每个 Pod 都有一个永久不变的 ID。

2022-11-29 22:00:19 938

原创 【Kubernetes系列】工作负载资源之ReplicaSet

ReplicaSet 的目的是维护一组在任何时候都处于运行状态的 Pod 副本的稳定集合。因此,它通常用来保证给定数量的、完全相同的 Pod 的可用性。

2022-11-24 20:30:12 584 2

原创 【Kubernetes系列】工作负载资源之Deployment

Deployment很适合用来管理你的集群上的无状态应用,Deployment中的所有Pod都是相互等价的,并且在需要的时候被替换。一个 Deployment 为 Pod 和 ReplicaSet 提供声明式的更新能力。负责描述 Deployment 中的 目标状态,而 Deployment 控制器(Controller) 以受控速率更改实际状态, 使其变为期望状态。

2022-11-21 20:48:43 1032 1

原创 【Kubernetes系列】Workloads(工作负载)

工作负载是在 Kubernetes 上运行的应用程序。在 Kubernetes 中,无论你的负载是由单个组件还是由多个一同工作的组件构成, 你都可以在一组Pod中运行它。在 Kubernetes 中,Pod代表的是集群上处于运行状态的一组 容器 的集合。Kubernetes Pod 遵循预定义的生命周期。例如,当在你的集群中运行了某个 Pod,但是 Pod 所在的 节点 出现致命错误时, 所有该节点上的 Pod 的状态都会变成失败。

2022-11-07 13:40:46 388 1

原创 Spring事务传播行为,事务隔离级别以及事务失效的场景

@Transactional注解,事务的传播行为,事务失效的原因,事务为什么失效,事务的隔离级别

2022-11-02 20:05:10 785 1

原创 Docker容器网络(七)

在应用程序和网络之间是 Docker 网络,被亲切地称为容器网络模型 或 CNM(Container Network Model)。是 CNM 为您的 Docker 容器代理连接性,并且还抽象出网络中常见的多样性和复杂性。结果是可移植性,它来自 CNM 强大的网络驱动程序。这些是 Docker 引擎、Swarm 和 UCP 的可插拔接口,提供了多主机网络、网络层加密和服务发现等特殊功能。每个驱动程序都提供权衡,并根据用例具有不同的优势。

2022-10-24 18:32:35 5391 1

原创 【Kubernetes系列】Pod

Pod是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元。Pod是一组(一个或多个)容器;这些容器共享存储、网络、以及怎样运行这些容器的声明。Pod 中的内容总是并置(colocated)的并且一同调度,在共享的上下文中运行。Pod 所建模的是特定于应用的 “逻辑主机”,其中包含一个或多个应用容器, 这些容器相对紧密地耦合在一起。在非云环境中,在相同的物理机或虚拟机上运行的应用类似于在同一逻辑主机上运行的云应用。

2022-10-16 22:07:31 419 1

原创 【Kubernetes系列】Container(容器)

镜像摘要唯一标识了镜像的特定版本,因此 Kubernetes 每次启动具有指定镜像名称和摘要的容器时,都会运行相同的代码。如果有一个容器化的应用程序需要修改,则需要构建包含更改的新镜像,然后再基于新构建的镜像重新运行容器。这里的服务仅限于新容器的 Pod 所在的名字空间中的服务,以及 Kubernetes 控制面的服务。容器镜像是一个随时可以运行的软件包, 包含运行应用程序所需的一切:代码和它需要的所有运行时、应用程序和系统库,以及一些基本设置的默认值。每个运行的容器都是可重复的;

2022-09-30 15:40:41 854

原创 【Kubernetes系列】Kubernetes介绍以及架构

Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。Kubernetes 拥有一个庞大且快速增长的生态,其服务、支持和工具的使用范围相当广泛。Kubernetes这个名字源于希腊语,意为“舵手”或“飞行员”。k8s 这个缩写是因为 k 和 s 之间有八个字符的关系。Google 在 2014 年开源了 Kubernetes 项目。Kubernetes 建立在Google 大规模运行生产工作负载十几年经验的基础上, 结合了社区中最优秀的想法和实践。

2022-09-19 23:10:08 282 1

原创 【Kubernetes系列】Kubernetes组件介绍

部署完 Kubernetes,便拥有了一个完整的集群。集群是由一组被称作节点(node)的机器组成, 这些节点上会运行由 Kubernetes 所管理的容器化应用。且每个集群至少有一个工作节点。工作节点会托管所谓的 Pods,而 Pod 就是作为应用负载的组件。控制平面管理集群中的工作节点和 Pods。为集群提供故障转移和高可用性, 这些控制平面一般跨多主机运行,而集群也会跨多个节点运行。

2022-09-19 11:17:18 376 1

原创 【Kubernetes系列】Kubernetes相关概念介绍

【Kubernetes系列】Kubernetes相关概念Pod 中的内容总是并置(colocated)的并且一同调度,在共享的上下文中运行。在非云环境中,在相同的物理机或虚拟机上运行的应用类似于在同一逻辑主机上运行的云应用。ReplicaSet 支持新的基于集合的选择器需求(在标签的用户指南中有相关描述),而副本控制器只支持基于等值的选择器需求。包含可被 Pod 中容器访问的数据的目录。这些规则是使用 Kubernetes 标签(label) 和 Pod 中指定的 选择算符定义的, 这些规则、

2022-09-13 23:05:22 316 1

原创 猿创征文|小而巧的API文档生成工具之smart-doc

一个 java restful api 文档生成工具,不用像Swagger一样写大量注解,完全基于接口源码分析来生成接口文档,但是需要按照 java的标准注释写。完全基于接口源码来分析生成接口文档,不采用任何注解侵入到业务代码中。你只需要按照java-doc标准编写注释,smart-doc就能帮你生成一个简易明了的Markdown、HTML5、、的文档。注意:需要完全按照java的标准注释,如果方法注释包含特殊符号或者换行的话,生成的json是会出现格式错误,但是不影响相关的html使用。...

2022-08-31 20:41:35 1258 3

ClickHouse从入门到精通

ClickHouse从入门到精通 xmind脑图

2022-08-09

restful api设计

restful api设计

2022-03-10

SpringCloud中文文档

SpringCloud中文文档

2022-03-10

空空如也

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

TA关注的人

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