- 博客(129)
- 收藏
- 关注

原创 剖析Kafka持久化底层原理
解决大量数据的实时传输问题。这需要kafka系统支持分区,分布式,实时处理接收到的数据。此外,当数据被送到其他服务系统中时,kafka系统在机器出现问题是还必须有容错性保证。从某种程度上理解,kafka系统更像是一个日志数据库。
2025-02-28 16:01:24
1121

原创 RocketMQ消息持久化机制
对于一个优秀的消息中间件来说,持久化机制应该是最值得讨论和学习的,本文将深入了解RocketMQ的持久化机制帮助我们来理解优秀的开源框架RocketMQ 在持久化的设计上,采取的是,利用磁盘顺序写的速度,让磁盘的写速度不会成为系统的瓶颈。并且采用 MMPP 这种“零拷贝”技术,提高消息存盘和网络发送的速度。极力满足 RocketMQ 的高性能、高可靠要求。先来看看RocketMQ架构图。
2025-02-28 15:45:45
486

原创 热榜第二记录一下(很激动)
写优快云博客有一个多月了,一直在总结之前学习的Java知识,无论是源码还是架构,从简单到负责,从特殊到抽象性,坚持努力做下去,虽然博客不是简简单单就能写好的,但是相信努力会有结果。
2025-02-26 15:50:41
112

原创 五分钟弄懂MVCC多版本并发控制
多版本并发控制(MVCC)是 MySQL 用以处理读 - 写冲突的无锁并发控制机制。其依赖于记录中的三个隐式字段(db_row_id、db_trx_id、db_roll_ptr)、undo 日志以及 Read View 来实现。通过这些要素,MVCC 不仅能提升数据库并发读写性能,还可解决脏读、幻读、不可重复读等事务隔离问题,不过无法处理更新丢失问题。其中,隐藏字段为数据记录提供关键标识与事务关联信息;undo 日志记录修改前数据用于回滚;
2025-02-26 15:46:58
813

原创 详解Redis如何持久化
本文介绍了 Redis 的两种持久化方式:RDB 和 AOF。RDB 按时间间隔快照存储,AOF 记录写操作。阐述了它们的配置、工作原理、恢复数据的方法、性能与实践建议,如降低 fork 频率、控制内存等,还提到二者可配合使用,最后提及后续将介绍主从复制与集群知识。
2025-02-25 14:58:00
1058
原创 Java中的finally一定会被执行吗
这三个示例都说明了一点,在分析含有finally块的方法返回值时,要对于return出现的地方进行具体分析。在finally块中进行return操作的话,则方法整体的返回值就是finally块中的return返回值。如果在finally块之后的方法内return,则return的值就是进行完上面的操作后的return值。
2025-03-10 14:48:41
255
原创 破坏双亲委派之后,能重写String类吗?
在 Java 中,即使破坏了 双亲委派模型,理论上依然无法完全重写 类。这是因为 JVM 对 类有特殊的限制和处理机制,具体如下:JVM 内置限制类加载机制安全性限制JVM 提供的 的 方法会对类的全限定名进行检查:这项检查在 JVM 的底层实现中被硬编码,无法通过常规方式绕过。尝试覆盖 的结果示例代码:假设你尝试自定义一个 类:编译结果编译时会提示错误:这是因为 Java 禁止用户在 包下定义核心类。绕过编译检查使用某些工具或方法绕过编译检查(如直接修改 文件),在运行时仍然会
2025-03-10 14:45:24
349
原创 你项目是如何保证高可用的?
项目的高可用、高并发和高扩展是当前开发中必须追求的三大目标,因此也是面试中经常被问到的内容,所以我们今天就来看看,如何才能保证项目的高可用性呢?
2025-03-10 14:39:19
344
原创 spring中@Autowired、@PostConstruct注解失效
按照正常流程,应该先执行 BeanFactoryPostProcessor,我们在配置类中提供的 BeanFactoryPostProcessor是通过工厂方法配置的,这个方法要被调用,前提是要先把这个方法的配置类对象先创建好,对象创建了,才能调用这个方法,才能执行这个BeanFactoryPostProcessor。下面是我们的main函数,我这里自己创建了一个干净的spring容器,把我们刚才的配置类加入了这个容器,并往里面加入了一些后处理器,用来解析我们上图代码的。根据运行结果可以看到,这个时候。
2025-03-10 14:38:03
1042
原创 NIO为什么会导致CPU100%?
也就说,当连接出现了 RST(强制连接关闭),因为 poll 和 epoll 对于突然中断的连接 Socket 会对返回的 eventSet 事件集合置为 POLLHUP 或者 POLLERR,eventSet 事件集合发生了变化,这就导致 Selector 会被唤醒,进而导致 CPU 100% 问题,其根本原因就是 JDK 没有处理好这种情况,比如 SelectionKey 中就没定义有异常事件的类型,导致异常无法被捕捉和处理,从而一直空轮询。空轮询产生的原因可以在。
2025-03-09 23:12:50
633
原创 核心线程数为0时,线程池如何执行?
线程池是 Java 中用于提升程序执行效率的主要手段,也是并发编程中的核心实现技术,并且它也被广泛的应用在日常项目的开发之中。那问题来了,如果把线程池中的核心线程数设置为 0 时,线程池是如何执行的?要回答这个问题,我们首先要了解在正常情况下,线程池的执行流程,也就是说当有一个任务来了之后,线程池是如何运行的?
2025-03-09 23:10:15
569
原创 为什么建议去掉 StringBuilder,而要使用 “+” 拼接字符串?
比如,"Hello" + " " + "World",结果就是 "Hello World"。然而,从 JDK 5 开始,Java 编译器做了一个优化——当你使用“+”拼接字符串时,编译器会自动将其优化为使用 StringBuilder 的方式。也就是说,"a" + "b" 在编译后,实际上会被编译器转换为 new StringBuilder().append("a").append("b").toString()。写一个测试类,分别用“+”和 StringBuilder 拼接字符串,然后比较它们的性能。
2025-03-07 22:28:22
383
原创 Java 泛型中的通配符 T,E,K,V是什么
不久前,被人问到Java 泛型中的通配符 T,E,K,V,?是什么?有什么用?这不经让我有些回忆起该开始学习Java那段日子,那是对泛型什么的其实有些迷迷糊糊的,学的不这么样,是在做项目的过程中,渐渐有又看到别人的代码、在看源码的时候老是遇见,之后就专门去了解学习,才对这几个通配符 T,E,K,V,?有所了解。
2025-03-07 22:26:01
622
原创 Java类加载器ClassLoader实现热加载
网上描述ClassLoader加载的文章很多,这里不再详细描述,需要注意的是:将需要动态加载的类放到独立的jar文件中,从一开始就通过动态加载方式加载,不要放到主进程的jar包中,那样会被默认加载器加载,会导致在更新后无法重新加载。2.启动测试demo,待打印出版本号后,修改MockService.java中的版本号重新生成jar文件。1.编译动态加载模块,生成jar文件,并修改主模块中测试程序的jar文件路径。需要动态加载的类放到这个模块中,甚至可以按照业务划分多个模块。此模块放不需要动态加载的类。
2025-03-06 22:41:34
347
原创 一文学会Java泛型
Java泛型设计原则:只要在编译时期没有出现警告,那么运行时期就不会出现ClassCastException异常泛型:把类型明确的工作推迟到创建对象或调用方法的时候才去明确的特殊的类型参数化类型:把类型当作是参数一样传递<数据类型> 只能是引用类型相关术语:ArrayList< E >中的E称为类型参数变量ArrayList< Integer >中的Integer称为实际类型参数整个称为ArrayList< E >泛型类型。
2025-03-06 21:42:19
591
原创 盘点你没见过的5个Java语法糖
语法糖(Syntactic Sugar),也称糖衣语法,是由英国计算机学家 Peter.J.Landin 发明的一个术语,指在计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。简而言之,语法糖让程序更加简洁,非常利于操作。事实上听名字也能想到,加在语法中的糖让语法变得更”甜“。
2025-03-06 21:30:21
241
原创 一文详解贪心算法
是一种在每一步选择中都采取当前状态下的策略,希望通过一系列局部最优选择最终得到全局最优解的算法设计方法。它的核心思想是“短视但高效”——每一步只关注眼前的最佳选择,不回溯、不全局规划。
2025-03-06 12:35:10
214
原创 详解反射的底层实现原理
反射在程序运行期间动态获取类和操纵类的一种技术。通过反射机制,可以在运行时动态地创建对象、调用方法、访问和修改属性,以及获取类的信息。
2025-03-06 12:25:10
1944
原创 一文学会“动态规划”
动态规划(Dynamic Programming,简称DP)是一种解决复杂问题的优化方法,它将原问题分解为一系列相互重叠的子问题,并通过存储子问题的解来避免重复计算。动态规划的核心思想是利用空间换时间,通过存储已经计算过的子问题的解,从而减少计算量。
2025-03-06 12:21:47
314
原创 URL和URI区别?
URL:是一种具体的 URI,用于标识资源的位置以及如何访问该资源,它提供了足够的信息来定位和获取网络上的资源,比如,通过这个 URL,浏览器能知道要使用 HTTP 协议去访问服务器上的index.html文件。URI:是一个更通用的概念,用于唯一标识一个资源,它可以只是标识资源,而不一定提供如何访问资源的信息,比如,它标识了一个电子邮件地址资源,但没有说明如何获取或操作这个资源。
2025-03-05 21:37:05
295
原创 CountDownLatch入门实战
在CountDownLatch中通过countDown来减少倒计时数,这是最重要的一个方法,我们继续跟进源码看到它通过releaseShared()方法去释放锁,这个方法是AQS内部的默认实现方法,而在这个方法中再一次的调用了tryReleaseShared(arg),这是一个AQS的钩子方法,方法内部仅有默认的异常处理,真正的实现由CountDownLatch内部类Sync完成。废话说的有点多了,我们直接进入CountDownLatch内部去看看它的底层原理吧。
2025-03-05 21:29:42
337
原创 深入理解Redis哨兵模式
在Redis 的主从架构中,由于主从模式是读写分离的,如果主节点(master)挂了,那么将没有主节点来服务客户端的写操作请求,也没有主节点给从节点(slave)进行数据同步了。在实际生产环境中,服务器难免会遇到一些突发状况:服务器宕机,停电,硬件损坏等等,一旦发生,后果不堪设想。Redis 在 2.8 版本以后提供的哨兵(Sentinel)机制,它的作用是实现主从节点故障转移。它会监测主节点是否存活,如果发现主节点挂了,它就会选举一个从节点切换为主节点,并且把新主节点的相关信息通知给从节点和客户端。
2025-03-05 21:15:28
862
原创 redis中rdb、aof都有什么作用?
引言对于目前线上Redis内存几十G上百G都很常见,如果redis突然宕机/重启,内存中数据会全部丢失;直接从底层数据库中查询并写到redis,将会对底层数据库产生非常大的压力。
2025-03-05 21:10:49
230
原创 mysql for update是锁表还是锁行
在并发一致性控制场景中,我们常常用for update悲观锁来进行一致性的保证,但是如果不了解它的机制,就进行使用,很容易出现事故,比如for update进行了锁表导致其他请求只能等待,从而拖垮系统,因此了解它的原理是非常必要的,下面我们通过一系列示例进行测试,来看看到底是什么场景下锁表什么场景下锁行。
2025-03-05 21:05:22
164
原创 MySQL自增ID用完会怎样
在一些中小型项目开发中,我们通常会使用自增 ID 来作为主键的生成策略,但随着时间的推移,数据库的信息也会越来越多,尤其是使用自增 ID 作为日志表的主键生成策略时,可能很快就会遇到 ID 被用完的情况,那么如果发生了这种情况,MySQL 又会怎样执行呢?PS:当然,在分库分表的场景中,我们通常会使用雪花算法来替代自增 ID,但中小型项目开发中,使用自增 ID 的场景还是比较多的。
2025-03-05 21:02:31
356
原创 什么是k8s?一文弄懂
1.1 项目部署方式的进化和 k8s 的出现首先最早的传统部署方式可以理解为将若干应用(可以理解成Java中的若干微服务)打成 jar 包或者是 war 包以后,通过 tomcat 等容器运行到服务器上,这种传统的方式适合于小型项目,尤其是单体应用,应用过多的话,一个应用的内存溢出可能就会导致整个服务器上的应用全部宕机。再之后为了解决上述提到的内存溢出问题使用服务器上开多个虚拟机来隔离应用的方式,一台虚拟机负责一个应用,如此一来从物理级别将各个应用的内存隔离开来。
2025-03-04 20:33:52
641
原创 MySQL三大日志之Undo Log、Redo Log与Bin Log
MySQL数据库作为目前最流行的关系型数据库管理系统之一,开发者在面试中经常会被问到这个问题。其中,Undo Log、Redo Log和Bin Log是MySQL中最重要的三种日志,它们各自承担着不同的职责(各司其职),共同保障数据库的数据一致性、持久性和可恢复性。本篇文章用作个人面试后的复盘,也希望能给各位大佬带来帮助。
2025-03-04 20:19:59
434
原创 三分钟了解MySQL慢查询
什么是MySQL慢查询呢?其实就是查询的SQL语句耗费较长的时间。具体耗费多久算慢查询呢?这其实因人而异,有些公司慢查询的阈值是100ms,有些的阈值可能是500ms,即查询的时间超过这个阈值即视为慢查询。正常情况下,MySQL是不会自动开启慢查询的,且如果开启的话默认阈值是10秒。
2025-03-04 20:16:19
365
原创 Linux超实用面试题
Linux是一套免费使用和自由传播的类似Unix操作系统,一般的WEB项目都是部署都是放在Linux操作系统上面。Linux是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。Linux 系统的核心是内核。内核控制着计算机系统上的所有硬件和软件,在必要时分配硬件,并根据需要执行软件。系统内存管理应用程序管理。
2025-03-04 13:07:48
653
原创 Nginx面试题大全
Nginx是一个 轻量级/高性能的反向代理Web服务器,他实现非常高效的反向代理、负载平衡,他可以处理2-3万并发连接数,官方监测能支持5万并发,现在中国使用nginx网站用户有很多,例如:新浪、网易、 腾讯等。正向代理就是一个人发送一个请求直接就到达了目标的服务器反方代理就是请求统一被Nginx接收,nginx反向代理服务器接收到之后,按照一定的规 则分发给了后端的业务处理服务器进行处理了。
2025-03-04 13:05:48
392
原创 HashMap 为什么每次扩容都是两倍?
HashMap每次扩容为原来的两倍是为了利用位运算的高效性、减少元素移动成本、保持哈希分布的均匀性以及简化代码实现。
2025-03-04 12:55:19
316
原创 ConcurrentHashMap和Hashtable的区别
多线程环境下,我们通常会使用线程安全的 ConcurrentHashMap 或 Hashtable。然而,Hashtable 逐渐被淘汰,而 ConcurrentHashMap 成为了主流选择。那么,Hashtable 为什么会被淘汰?它和 ConcurrentHashMap 之间存在哪些关键区别?本文将围绕这些高频面试问题展开。ConcurrentHashMap和hashtable都是线程安全的,他们的区别主要体现在实现线程安全的机制有所不同。
2025-03-04 12:52:45
744
原创 看完ZooKeeper这几题再去面试
一次性 无论是服务端还是客户端,一旦一个 Watcher 被 触 发 ,Zookeeper 都会将其从相应的存储中移除。这样的设计有效的减轻了服务端的压力,不然对于更新非常频繁的节点,服务端会不断的向客户端发送事件通知,无论对于网络还是服务端的压力都非常大。客户端串行执行 客户端 Watcher 回调的过程是一个串行同步的过程。轻量 3.1、Watcher 通知非常简单,只会告诉客户端发生了事件,而不会说明事件的具体内容。
2025-03-03 23:33:57
764
原创 Tomcat面试题大全
Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。Tomcat内存优化,启动时告诉JVM我要多大内存 调优方式的话,修改: Windows 下的catalina.bat Linux 下的catalina.sh 修改方式如: JAVA_OPTS=’-Xms256m -Xmx512m’-Xms JVM初始化堆的大小-Xmx JVM堆的最大值 实际参数大。利用Java的异步IO处理,可以通过少量的线程处理大量的请求,可以复用同一个线程处理多个connection(多路复用)。
2025-03-03 23:32:02
843
原创 HTTP1.0,HTTP1.1,HTTPS和HTTP2.0的区别
HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。,HTTP1.x的解析是基于文本。HTTP协议运行在TCP之上,所有传输的内容都是明文,HTTPS运行在SSL/TLS之上,SSL/TLS运行在TCP之上,所有 传输的内容都经过加密的。
2025-03-03 23:29:39
925
原创 在浏览器中输入url地址会发生什么
文章详细介绍了在浏览器输入 URL 后发生的一系列过程,包括 URL 解析、DNS 解析(缓存判断与查询 IP 地址)、TCP 三次握手(建立连接)、SSL/TLS 四次握手(仅 https)、浏览器发送请求、服务器响应并返回数据、浏览器解析渲染页面(构建 DOM Tree、CSSOM Tree、Render Tree 及布局绘制等)、断开连接(TCP 四次挥手)。
2025-03-03 22:57:45
573
原创 你知道TCP与UDP的区别吗?
TCP(传输控制协议)和UDP(用户数据报协议)是互联网中两个核心的传输层协议,它们各自采用不同的方式来确保数据从源头传输到目的地。
2025-03-03 17:59:37
667
原创 详解HTTP 与 HTTPS 的区别
HTTP 是无状态明文传输协议(80 端口),HTTPS 通过 SSL/TLS 加密通信(443 端口),而 HTTP/2 基于 HTTPS 实现二进制分帧和多路复用,大幅提升传输效率。
2025-03-03 17:56:15
780
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人