自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ConcurrentLinkedQueue详解(图文并茂)

是基于链接节点的无界线程安全队列。此队列按照FIFO(先进先出)原则对元素进行排序。队列的头部是队列中存在时间最长的元素,而队列的尾部则是最近添加的元素。新的元素总是被插入到队列的尾部,而队列的获取操作(例如poll或peek)则是从队列头部开始。与传统的LinkedList不同,使用了一种高效的非阻塞算法,被称为无锁编程(Lock-Free programming),它通过原子变量和CAS(Compare-And-Swap)操作来保证线程安全,而不是通过传统的锁机制。

2025-06-29 21:16:30 1129

原创 CountDownLatch翻车后,我建议大家用CompletableFuture改造

异步编程,利用多线程优化性能这个核心方案得以实施的基础他的目的也很简单,同一个CPU上执行几个松耦合的任务,充分利用CPU核数,实现最大化吞吐量,避免因为阻塞造成等待时间过长;章我主要是根据大家的建议,使用了Java8的CompletableFuture 来进行了原来的业务功能改造.在执行比较耗时的业务操作时候可以使用异步编程来提高性能,加快程序的处理速度。

2025-06-29 21:16:06 680

原创 Tomcat和JVM的性能调优你都懂吗?

持久代一般固定大小为64m。我们都知道Java虚拟机都有默认的垃圾回收机制,但是不同的垃圾回收机制的效率是不同的,正是因为这点我们才经常对Java虚拟机的垃圾回收策略进行相应的调整。1、 -XX:+UseSerialGC :代表垃圾回收策略为串行收集器,即在整个扫描和复制过程采用单线程的方式来进行,适用于单CPU、新生代空间较小及对暂停时间要求不是非常高的应用上,是client级别默认的GC方式,主要在JDK1.5之前的垃圾回收方式。设置为4,则年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5。..

2025-06-29 21:15:43 573

原创 Java中Mybaitis缓存的优化!

从库消费 relaylog 的速度跟不上主库生成 binlog 的速度。切换过程一般由专门的 HA 系统完成,存在。,这样几乎不存在不可用时间,但可能会。(主库A和从库B都处于。

2025-06-29 21:15:20 775

原创 Redis原来还可以这么用?

redis是键值对的数据库,常用的五种数据类型为字符串类型(string),散列类型(hash),列表类型(list),集合类型(set),有序集合类型(zset)Redis用作缓存,主要两个用途:高性能,高并发,因为内存天然支持高并发。...

2025-06-29 21:14:48 889

原创 面试官问你MyBatis SQL是如何执行的?把这篇文章甩给他

相比于其他的组件就简单很多了,ParameterHandler 译为参数处理器,负责为 PreparedStatement 的 sql 语句参数动态赋值,这个接口很简单只有两个方法ParameterHandler 只有一个实现类, 它实现了这两个方法。getParameterObject: 用于读取参数setParameters: 用于对 PreparedStatement 的参数赋值ResultSetHandler 也是一个非常简单的接口。

2025-06-28 12:00:00 521

原创 一文带你了解 HTTP 黑科技

在 HTTP 中,内容协商是一种用于在同一 URL 上提供资源的不同表示形式的机制。内容协商机制是指客户端和服务器端就响应的资源内容进行交涉,然后提供给客户端最为适合的资源。内容协商会以响应资源的语言、字符集、编码方式等作为判断的标准。一旦资源存储在缓存中,理论上就可以永远被缓存使用。但是不管是浏览器缓存还是代理缓存,其存储空间是有限的,所以缓存会定期进行清除,这个过程叫做缓存回收(cache eviction)(自译)。另一方面,服务器上的缓存也会定期进行更新,HTTP 作为应用层的协议,它是一种。

2025-06-28 11:45:00 655

原创 一文带你看清HTTP所有概念

上一篇文章我们大致讲解了一下 HTTP 的基本特征和使用,大家反响很不错,那么本篇文章我们就来深究一下 HTTP 的特性。我们接着上篇文章没有说完的 HTTP 标头继续来介绍(此篇文章会介绍所有标头的概念,但没有深入底层)

2025-06-28 11:30:00 675

原创 看完这篇HTTP,跟面试官扯皮就没问题了

在互联网早期的时候,我们输入的信息只能保存在本地,无法和其他电脑进行交互。我们保存的信息通常都以文本即简单字符的形式存在,文本是一种能够被计算机解析的有意义的二进制数据包。而随着互联网的高速发展,两台电脑之间能够进行数据的传输后,人们不满足只能在两台电脑之间传输文字,还想要传输图片、音频、视频,甚至点击文字或图片能够进行超链接的跳转,那么文本的语义就被扩大了,这种语义扩大后的文本就被称为超文本(Hypertext)。

2025-06-28 11:15:00 978

原创 ReentrantLock 源码分析从入门到入土

如果 state = 1,那么 c = 0,再判断当前线程是否是独占锁的线程,释放独占锁,返回 true,当 head 指向的头结点不为 null,并且该节点的状态值不为0的话才会执行 unparkSuccessor 方法,再进行锁的获取。如果没有其他线程持有该锁,则获取该锁并立即返回,将锁保持计数设置为1。逻辑,如果读取的同步状态是1,说明已经线程获取到了锁,那么就先判断当前线程是不是获取锁的线程,如果是的话,记录一下获取锁的次数 + 1,也就是说,只有同步状态为 0 的时候是无锁状态。

2025-06-28 11:00:00 982

原创 计算机网络的核心概念

这是《计算机网络》系列文章的第二篇文章我们第一篇文章讲述了计算机网络的基本概念,互联网的基本名词,什么是协议以及几种接入网以及网络传输的物理媒体,那么本篇文章我们来探讨一下网络核心、交换网络、时延、丢包、吞吐量以及计算机网络的协议层次和网络攻击。

2025-06-27 21:32:10 607

原创 Kafka 的这些原理你知道吗

如果只是为了开发 Kafka 应用程序,或者只是在生产环境使用 Kafka,那么了解 Kafka 的内部工作原理不是必须的。不过,了解 Kafka 的内部工作原理有助于理解 Kafka 的行为,也利用快速诊断问题。下面我们来探讨一下这三个问题如果感兴趣的话,就请花费你一些时间,耐心看完这篇文章。

2025-06-27 21:31:27 1007

原创 不懂什么是锁?看看这篇你就明白了

自旋锁的定义:当一个线程尝试去获取某一把锁的时候,如果这个锁此时已经被别人获取(占用),那么此线程就无法获取到这把锁,该线程将会等待,间隔一段时间后会再次尝试获取。这种采用循环加锁 -> 等待的机制被称为自旋锁(spinlock)。ReentrantLock 是一把可重入锁,也是一把互斥锁,它具有与相同的方法和监视器锁的语义,但是它比 synchronized 有更多可扩展的功能。ReentrantLock 的可重入性是指它可以由上次成功锁定但还未解锁的线程拥有。当只有一个线程尝试加锁时,该线程调用。

2025-06-27 21:29:12 638

原创 你说你懂计算机网络,那这些你都知道吗?

首先来聊一下因特网是什么,wiki 对它的定义是:因特网是一个全球范围的互联网系统,它使用TCP/IP协议簇来链接全世界的设备。我们可以从两个方面来描述一下因特网我们描述因特网可以通过基本硬件和软件组件来进行描述我们能够根据为分布式应用提供服务的联网基础设施来描述因特网我们先从第一条描述开始。

2025-06-27 21:26:52 618

原创 带你涨姿势的认识一下 Kafka 消费者

之前我们介绍过了 Kafka 整体架构,Kafka 生产者,Kafka 生产的消息最终流向哪里呢?当然是需要消费了,要不只产生一系列数据没有任何作用啊,如果把 Kafka 比作餐厅的话,那么生产者就是厨师的角色,消费者就是客人,只有厨师的话,那么炒出来的菜没有人吃也没有意义,如果只有客人没有厨师的话,谁会去这个店吃饭呢?!所以如果你看完前面的文章意犹未尽的话,可以继续让你爽一爽。如果你没看过前面的文章,那就从现在开始让你爽。应用程序使用 从 Kafka 中订阅主题并接收来自这些主题的消息,然后再把他们保存

2025-06-27 21:24:33 971

原创 真的,Kafka 入门一篇文章就够了

Kafka 是由Linkedin公司开发的,它是一个分布式的,支持多分区、多副本,基于 Zookeeper 的分布式消息流平台,它同时也是一款开源的基于发布订阅模式的消息引擎系统。

2025-06-27 21:23:11 921

原创 程序员需要了解的硬核知识之操作系统和应用

利用计算机运行程序大部分都是为了提高处理效率。例如,Microsoft Word 这样的文字处理软件,是用来提高文本文件处理效率的程序,Microsoft Excel 等表格计算软件,是用来提高账本处理效率的程序。这种为了提高特定处理效率的程序统称为应用程序员的工作就是编写各种各样的应用来提高工作效率,程序员一般不编写操作系统,但是程序员编写的应用离不开操作系统,此篇文章我们就针对 Windows 操作系统来说明一下操作系统和应用之间的关系。

2025-06-27 21:21:35 993

原创 详解Kafka Producer

在 Kafka 中,我们把产生消息的那一方称为生产者,比如我们经常回去淘宝购物,你打开淘宝的那一刻,你的登陆信息,登陆次数都会作为消息传输到 Kafka 后台,当你浏览购物的时候,你的浏览信息,你的搜索指数,你的购物爱好都会作为一个个消息传递给 Kafka 后台,然后淘宝会根据你的爱好做智能推荐,致使你的钱包从来都禁不住诱惑,那么这些生产者产生的消息是怎么传到 Kafka 应用程序的呢?发送过程是怎么样的呢?尽管消息的产生非常简单,但是消息的发送过程还是比较复杂的,如图我们从创建一个。

2025-06-27 21:20:32 1007

原创 程序员需要了解的硬核知识之操作系统入门

本篇文章作为操作系统的入门文章,可能入门都算不上吧,毕竟操作系统太庞大和复杂了。本篇文章主要带你了解一下我们常用的操作系统环境。

2025-06-27 21:19:07 680

原创 程序员需要了解的硬核知识之压缩算法

上面介绍了文件的集合体其实就是一堆字节数据的集合,那么我们就可以来给压缩算法下一个定义。压缩算法(compaction algorithm)指的就是数据压缩的算法,主要包括压缩和还原(解压缩)的两个步骤。其实就是在不改变原有文件属性的前提下,降低文件字节空间和占用空间的一种算法。有损和无损无损压缩:能够无失真地从压缩后的数据重构,准确地还原原始数据。可用于对数据的准确性要求严格的场合,如可执行文件和普通文件的压缩、磁盘的压缩,也可用于多媒体数据的压缩。该方法的压缩比较小。

2025-06-27 21:18:01 603

原创 Kafka从入门到进阶

每个分区所在的服务器的资源(比如:CPU、内存、带宽、磁盘等)是有限的,如果不分区(可以理解为等同于只有一个)的话,必然受限于这个分区所在的服务器,那么多个分区的话就不一样了,就突破了这种限制,服务器可以随便加,分区也可以随便加。如果组中有一个实例死了,那么它的分区将会被分给其它实例。举个例子,在上面的图中,4个分区,组A有2个消费者,组B有4个消费者,那么对A来讲组中的每个消费者负责4/2=2个分区,对组B来说组中的每个消费者负责4/4=1个分区,而且同一时间消息只能被组中的一个实例消费。

2025-06-26 21:44:12 701

原创 Kafka集群搭建?

创建包含多个broker(Kafka Server)的集群。# 启动一个Kafka Server。3.1. 设置KE_HOME环境变量。# 启动zookeeper。3.3. 启动Eagle。1. 启动Server。3.2. 修改配置文件。

2025-06-26 21:42:19 953

原创 Spring Boot 集成 Hystrix?

44 * 如果fallback方法的参数和原方法参数个数不一致,则会出现FallbackDefinitionException: fallback method wasn't found。38 throw new RuntimeException("name不能为空");23 throw new RuntimeException("出错了");

2025-06-26 21:40:51 571

原创 Hystrix是如何工作的?

对于HystrixObservableCommand(),为了提供回退逻辑,你需要实现hystrixobservablecomman.resumewithfallback(),它会返回一个Observable,这个Observable可能返回一个回退值或者多个值。下图显示了HystrixCommand或HystrixObservableCommand是如何与HystrixCircuitBreaker交互的,以及它的逻辑和决策流程,包括断路器中计数器的行为。如果是关着的,将执行第5步,继续检查容量是否可用。

2025-06-26 21:39:52 733

原创 什么是Hystrix?

在分布式环境中,许多服务依赖项中的一些必然会失败。Hystrix是一个库,通过添加延迟容忍和容错逻辑,帮助你控制这些分布式服务之间的交互。Hystrix通过隔离服务之间的访问点、停止级联失败和提供回退选项来实现这一点,所有这些都可以提高系统的整体弹性。复杂分布式体系结构中的应用程序有许多依赖项,每个依赖项在某些时候都不可避免地会失败。在高流量的情况下,一个后端依赖项的延迟可能导致所有服务器上的所有资源在数秒内饱和(PS:意味着后续再有请求将无法立即提供服务)99.9930 = 99.7% 可用。

2025-06-26 21:39:01 727

原创 MyBatis 分页插件 PageHelper 使用

30 // 在你需要进行分页的 MyBatis 查询方法前调用 PageHelper.startPage 静态方法即可,紧跟在这个方法后的第一个MyBatis 查询方法会被进行分页。代码上传至 https://github.com/chengjiansheng/cjs-mybatis-example.git。37 * 分页时,实际返回的结果list类型是Page<E>,如果想取出分页信息,需要强制转换为Page<E>38 title: '名称'

2025-06-26 21:37:54 815

原创 Spring Boot Security

Spring Security致力于为Java应用提供认证和授权管理。它是一个强大的,高度自定义的认证和访问控制框架。具体介绍参见https://docs.spring.io/spring-security/site/docs/5.0.5.RELEASE/reference/htmlsingle/这句话包括两个关键词:Authentication(认证)和 Authorization(授权,也叫访问控制)认证是验证用户身份的合法性,而授权是控制你可以做什么。

2025-06-26 21:35:50 858

原创 Spring Boot Cache配置 序列化成JSON字符串

当我们使用@Cacheable注解的时候会将返回的对象缓存起来,我们会发现默认缓存的值是二进制的,不方便查看,为此我们自定义序列化配置,改成JSON格式的。

2025-06-26 21:34:03 551

原创 Spring Boot 事件和监听?

256 @Data81014 }15 }26912 System.out.println("监听到BlackListEvent事件: " + event.getAddress());

2025-06-26 21:33:00 853

原创 Spring Boot @Async 异步任务执行

当一个@Async方法有一个Future类型的返回值时,就很容易管理在调Future的get()方法获取任务的执行结果时抛出的异常。换句话说,方法的调用者会立即得到返回,并且实际的方法执行是想Spring的TaskExecutor提交了一个任务。举个例子:下面这种,在外部直接调用sayHi()是可以异步执行的,而调用sayHello()时sayHi()仍然是同步执行。默认是用代理去处理@Async的,因此,相同类中的方法调用带@Async的方法是无法异步的,这种情况仍然是同步。

2025-06-26 21:31:33 973

原创 MyBatis打印SQL执行时间?

281112 @Slf4j222728 log.info("执行SQL: [{}]花费{}ms", sql, (endTime - startTime));

2025-06-26 21:30:01 620

原创 Spring Boot Kafka

http://kafka.apache.org/documentation/#quickstart有一句我觉得特别重要: For Kafka, a single broker is just a cluster of size one.#解压文件tar -zxf kafka_2.11-1.1.0.tgzcd kafka_2.11-1.1.0#启动Zookeerperbin/zookeeper-server-start.sh config/zookeeper.properties#启动Kafk

2025-06-25 21:54:27 693

原创 Spring Boot Cache Redis缓存

上面那样使用默认的配置可以看起来很好,但是有一个问题:存到redis中的value是二进制形式的,不利于查看要是JSON字符串就好了。为此,我们需要自定义SerializationPair那么,怎么自定义呢?官方文档上面写得很清楚接下来,我们就自定义一个RedisCacheConfiguraion于是乎,一切都不一样了至此,完美收工!!!

2025-06-25 21:53:27 310

原创 Spring AOP 实践

为了方便理解,我们这样想:aspect就是我们要实现的功能,那么这个功能所要做的事情就是advice,这些功能应用到哪些地方就是pointcut。AOP的作用就是分离关注点,它将与业务无关的逻辑抽离出来单独封装成模块,实现核心业务与通用的逻辑的解耦。Spring AOP和AspectJ是AOP的两种不同实现。前者是动态代理,后者是静态代理。下面的示例采用了两种方式来实现一个AOP功能。2、定义joinpoint。1、声明aspect。3、定义advice。

2025-06-25 21:52:22 158

原创 Spring AOP介绍

AOP(面向切面编程)对OOP(面向对象编程)是一种补充,它提供了另一种程序结构的思路。OOP的模块单元是class,而AOP的模块单元是aspect。Spring中一个关键的组件是AOP框架,然而,Spring IoC容器并不依赖于AOP,也就是说如果你不想用AOP的话可以不用。在Spring框架中AOP用来做什么呢?

2025-06-25 21:51:24 608

原创 什么是Kakfa?

kafka对于构建实时的数据管道和流应用是很有用的。Apache Kafka是一个分布式的流平台。这是什么意思呢?Kafa有什么用呢?那么Kafka是怎样做到这些事情的呢?在Kafka中,客户端和服务器端的通信被做成是简单的、高性能的、基于TCP协议的。

2025-06-25 21:49:48 576

原创 Spring依赖注入?

在AbstractApplicationContext#refresh()方法的最后会实例化容器中所有非懒加载的单例bean,它是通过调用getBean()方法来做的,下面从getBean()开始分析。实例化Spring容器的核心方法是org.springframework.context.support.AbstractApplicationContext#refresh。2、用默认的构造方法实例化的时候涉及到实例化策略,默认的策略是使用cglib,还有一种是使用反射。

2025-06-25 21:48:16 512

原创 基于Redis的分布式锁的简单实现

不同之处在于,SET方式只需判断能不能设置成功,删除的时候判断是不是自己设置的,万一超时了利用系统自带的生存时间可以自动释放锁。而SETNX+GETSET方式除了需要判断能不能设置成功,在设置失败的时候还要进一步判断其值是否有效,是否超时由客户端自己判断。这两种方式的基本思路都是:客户端在服务器上设置一个key值,如果能够设置成功,则视为加锁成功;第一种:SET key value [EX seconds] [PX milliseconds] NX。官方给出的思路是这样的。官方给出的思路是这样的。

2025-06-25 21:46:34 157

原创 MySQL事务隔离级别的实现原理?

在MySQL的众多存储引擎中,只有InnoDB支持事务,所有这里说的事务隔离级别指的是InnoDB下的事务隔离级别。读未提交:一个事务可以读取到另一个事务未提交的修改。这会带来脏读、幻读、不可重复读问题。(基本没用)读已提交:一个事务只能读取另一个事务已经提交的修改。其避免了脏读,但仍然存在不可重复读和幻读问题。可重复读:同一个事务中多次读取相同的数据返回的结果是一样的。其避免了脏读和不可重复读问题,但幻读依然存在。串行化:事务串行执行。避免了以上所有问题。

2025-06-25 21:45:15 752

原创 Docker是什么?

Docker是世界上领先的软件集装箱化平台。它灵活、可移植、安全、节省成本。Container是一个标准化的软件单元。

2025-06-25 21:43:54 377

空空如也

空空如也

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

TA关注的人

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