- 博客(169)
- 收藏
- 关注
原创 Java面试宝典:网络协议与Netty二
当数据需要在网络上传输或者需要永久存储到硬盘时,内存中的Java对象(如JavaBean)无法直接以编程语言结构的形式保存或传输,它们需要被转换成通用的二进制01序列。代理的好处在于:在目标对象实现的功能基础上,可以增强额外的功能逻辑,或者扩展目标对象的功能。:它提供类似于文件系统的树形命名空间(ZNode),数据结构本质上也是一种高效的K-V存储(路径名是Key,节点数据是Value)。它是一种通过网络,让程序能够像调用本地服务一样调用远端服务的通信技术,其核心目标是对开发者屏蔽底层复杂的网络通信细节。
2025-09-28 00:00:00
67
原创 Java面试宝典:网络协议与Netty一
OSI(开放系统互连)模型定义了一种分层结构,共包含七层:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。Open System Interconnect(OSI)模型是由国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)共同制定的开放系统互连参考模型。它为异构信息系统间的互联提供了一个功能框架。OSI模型较为复杂和理论化。在实际应用中,广泛使用的是TCP/IP模型,它包含四层:网络接口层(或链路层)、网络层(或网际层)、传输层、应用层。两种模型之间的对应关系如下图所示:1.物理层
2025-09-27 00:00:00
197
原创 Java面试宝典:Redis的设计、实现
当字典的某个元素被访问时,它在链表中的位置会被移动到表头。Redis 所有的数据结构都可以设置过期时间,时间一到,就会自动删除,但是会因为同一时间太多的key 过期,以至于忙不过来,同时因为Redis 是单线程的,删除的时间也会占用线程的处理时间,如果删除的太过于繁忙,会导致线上读写指令出现卡顿。因为指令同步是异步进行的,所以主库过期的key 的 del 指令没有及时同步到从库的话,会出现主从数据的不一致,主库没有的数据在从库里还存在,比如上一节的集群环境分布式锁的算法漏洞就是因为这个同步延迟产生的。
2025-09-04 22:00:00
124
原创 Java面试宝典:Redis缓存使用问题及互联网运用
字符串类型非字符串类型:元素数量过多(如List包含百万成员)主从集群中出现两个主节点,均可接收写请求,导致数据不一致或丢失。
2025-09-02 20:00:00
87
原创 Java面试宝典:Redis高并发高可用(主从复制、哨兵)
在分布式系统中,为解决单点故障问题,通常采用数据复制技术创建多个副本部署到不同节点。Redis通过其复制功能实现了相同数据的多个副本部署,这是构建高可用Redis架构的基石。后续的哨兵和集群机制都是在复制功能基础上实现的高可用方案。复制机制的核心价值:Redis支持多种复制拓扑结构,根据系统复杂度需求可选择不同架构:这是最简单的复制拓扑,主要用于主节点故障时提供故障转移支持。优化实践:又称为星形拓扑结构,适用于需要读写分离的场景。场景优化方案:树状结构允许从节点作为其他从节点的主节点,形成层级复制关系。工作
2025-09-01 23:45:00
107
原创 Java面试宝典:Redis高并发高可用(集群)
Redis Cluster是Redis官方推出的分布式解决方案,自3.0版本正式发布以来,已成为应对单机内存、并发及流量瓶颈的核心架构。传统分布式方案的局限性客户端分区方案优点:分区逻辑完全可控缺点:需自行处理数据路由、高可用、故障转移等复杂逻辑代理方案优点:简化客户端逻辑,便于升级维护缺点:增加架构复杂度,引入额外性能损耗Redis Cluster的核心价值原生分布式支持,自动处理数据分片、故障转移与节点通信去中心化架构,节点间通过Gossip协议同步状态。
2025-09-01 20:45:00
61
原创 Java面试宝典:Redis底层原理(持久化+分布式锁)
Redlock 只有建立在「时钟正确」的前提下,才能正常工作,如果你可以保证这个前提,那么可以拿来使用。从硬件角度来说,时钟发生偏移是时有发生,无法避免。例如,CPU 温度、机器负载、芯片材料都是有可能导致时钟发生偏移的。人为错误也是很难完全避免的,所以,Redlock尽量不用它,而且它的性能不如单机版 Redis,部署成本也高,优先考虑使用主从+ 哨兵的模式,实现分布式锁(只会有很小的记录发生主从切换时的锁丢失问题)。
2025-08-22 20:00:00
115
原创 Java面试宝典:Redis高级特性和应用(慢查询、Pipeline、事务、Lua)
慢查询是数据库系统中常见的性能分析工具,MySQL等传统数据库通过慢查询日志帮助开发者定位执行效率低下的操作。Redis同样提供了类似机制:系统在命令执行前后计算耗时,若超过预设阈值,则记录命令的详细信息(包括发生时间、耗时、命令内容等)。核心价值识别性能瓶颈优化高频低效操作辅助容量规划。
2025-08-19 00:45:00
80
原创 Java面试宝典:Redis高级特性和应用(发布 订阅、Stream)
Redis提供基于"发布/订阅"模式的消息通信机制,该模式实现了消息生产者与消费者的解耦。发布者:不直接与订阅者通信,而是向指定频道(channel)发布消息订阅者:通过订阅感兴趣的频道接收消息消息代理:Redis服务器充当中间代理角色,负责消息路由场景特征推荐方案原因说明简单广播,允许丢失Pub/Sub实现简单,延迟极低需要消息持久化Stream完整消息队列特性支持需要严格顺序Stream消息ID保证顺序需要消费者组管理Stream原生支持消费者组简单任务队列。
2025-08-18 23:30:00
193
1
原创 Java面试宝典:Redis 入门与应用
现代计算机用二进制(位)作为信息的基础单位,1个字节等于8位,例如“big”字符串是由3个字节组成,但实际在计算机存储时将其用二进制表示,“big”分别对应的ASCII码分别是98、105、103,对应的二进制分别是01100010、01101001和 01100111。Bitmaps单独提供了一套命令,所以在Redis中使用Bitmaps和使用字符串的方法不太相同,可以把 Bitmaps想象成一个以位为单位的数组,数组的每个单元只能存储0和1,数组的下标在 Bitmaps 中叫做偏移量。
2025-08-18 21:15:00
94
原创 JVM核心原理与实战优化指南
Java是一门跨平台、面向对象的高级编程语言,其核心优势在于“Write Once, Run Anywhere”。从Java语言本质切入,逐步深入JVM核心机制,兼顾不同背景学习者的认知梯度。掌握JVM,不仅为了面试通关,更是构建高并发、低延迟系统的核心竞争力!无论你是大学生还是资深工程师,学习JVM都至关重要。:多数对象朝生夕死(IBM研究:98%对象存活时间<1ms):JVM调优是理论与实践的结合,切忌盲目调整。:对象无法回收(如未关闭的连接)→。Java虚拟机(JVM)是。:泄漏积累或瞬时高负载。
2025-08-15 14:27:23
954
原创 Java面试宝典:JVM性能优化
方法内联是JVM性能优化的基石。它通过消除调用开销和开启后续优化,对性能提升至关重要。开发者通过编写结构清晰、方法小巧、确定性高的代码,可以显著提高方法被成功内联的概率,从而充分利用JVM的优化能力。
2025-08-14 20:00:00
232
原创 Java面试宝典:JVM命令与执行引擎
使用场景:标准语法:关键参数:输出解析:→ 第一列为进程PID,第二列为主类名/JAR名称核心操作:动态修改:全量参数查看:类加载监控:GC行为分析:关键指标说明:基础用法:死锁诊断实战:死锁特征分析:堆内存概览:生成堆转储:自动化内存溢出转储:二、JVM执行引擎深度解析1. Java执行体系全景#mermaid-svg-j1VGE6lGJ3uJCbPi {font-family:"trebuchet ms",verdana,arial,sans-serif;font-si
2025-08-14 07:30:00
43
原创 Java面试宝典:ZGC
是JDK 11推出的一款革命性垃圾收集器,其设计目标是实现亚毫秒级的停顿时间(pauseless GC),彻底解决传统GC在高内存场景下的延迟问题。架构革新摒弃传统物理/逻辑上的新生代/老年代划分采用分页(Page)内存管理机制,通过页面压缩消除内存碎片基于C4(Continuously Concurrent Compacting Collector)算法实现并发压缩演进历程JDK 11:实验性功能,仅支持64位Linux系统JDK 15:正式脱离实验阶段,成为生产可用组件。
2025-08-13 23:30:00
327
原创 Java面试宝典:G1垃圾收集器下
在任意收集暂停中,CSet内的所有分区都会被回收,其中存活对象将被转移到空闲分区中。年轻代收集时CSet仅包含年轻代分区(Young Region),而混合收集会通过启发式算法筛选老年代候选分区,将回收收益最高的分区加入CSet。在GC过程中,这些线程需要暂停(STW阶段)以确保内存状态一致性。当全局缓冲区积压严重时,G1会调用更多线程(甚至暂停App Thread)处理日志,导致应用延迟。合理设置阈值可避免此问题。在标记开始时建立快照,通过写屏障记录被覆盖引用的旧值,确保标记完整性。
2025-08-13 21:00:00
160
原创 Java面试宝典:G1垃圾收集器上
Garbage First(G1)通过分区模型和可预测停顿设计,从根本上解决了CMS的并发失败和碎片化问题。OpenJDK官方表述(JEP 307)明确指出:“G1的设计目标是避免完全回收,当并发收集无法快速回收内存时,其回退的Full GC仍采用单线程算法(后续已优化为并行)”。G1是首个具备可配置停顿目标的商用级收集器,实现了从"分代优先"到"垃圾优先"的范式转移。(默认开启),监控TLAB refill次数调整。),高内存压力系统可切同步模式(
2025-08-12 22:30:00
205
原创 Spring Boot 2 升级 Spring Boot 3 的全方位深度指南
Spring Boot 3不是终点,而是现代Java应用的起跑线。Serverless架构探索:利用原生编译实现冷启动<500msAI集成:Spring AI项目对接大语言模型量子安全:提前布局后量子加密算法可持续计算:基于能耗监控的绿色调度算法“技术升级不是简单的版本变更,而是组织数字化转型的基因重组。每一次成功的升级,都是企业技术DNA的优胜劣汰。升级不是终点,而是竞争力的新起点!
2025-08-10 10:15:00
930
原创 Java面试宝典:CMS垃圾收集器
CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器,主要面向需要快速响应、低延迟的互联网应用场景。作为老年代收集器,CMS通常与ParNew收集器配合使用,形成"ParNew+CMS"的经典组合。官方文档CMS采用"标记-清除"算法,整个过程分为4个主要阶段,其中两个阶段可以与用户线程并发执行,这使得它在减少停顿时间方面表现出色。黑色对象已被垃圾收集器访问所有引用都已扫描安全存活对象不会直接指向白色对象灰色对象已被访问至少有一个引用未扫描。
2025-08-08 07:00:00
76
原创 Java面试宝典:垃圾收集器浅析
垃圾收集器是内存管理的具体实现,负责自动回收不再使用的对象,释放内存空间。JVM提供了多种垃圾收集器,各有特点和适用场景。垃圾收集技术是JVM核心组成部分,随着硬件发展与应用需求变化持续演进。从单线程Serial到并发G1/ZGC,收集器设计不断突破停顿时间与吞吐量的平衡点。
2025-08-08 01:00:00
96
原创 Java面试宝典:JVM的垃圾收集算法
在Java虚拟机(JVM)中,垃圾收集(Garbage Collection, GC)是自动内存管理的核心机制。它负责自动回收不再被程序使用的对象所占用的内存空间,防止内存泄漏,确保应用程序的稳定运行。JVM提供了多种垃圾收集算法,每种算法都有其特定的应用场景和优缺点。本文将全面介绍JVM中的主要垃圾收集算法及其实现原理。JVM垃圾收集算法是Java生态系统的基石之一。从基础的标记-清除、标记-复制到标记-整理算法,再到基于分代理论的各种高级收集器实现,垃圾收集技术不断演进以满足不同应用场景的需求。
2025-08-07 23:30:00
183
原创 Java面试宝典:类加载
这阶段的验证是基于二进制字节流进行的,只有经过该阶段的验证后,字节流才会进入内存的方法区中进行存储,后续验证都是基于方法区的存储结构进行的。这是最后一个阶段的验证,它发生在虚拟机将符号引用转化为直接引用的时候(解析阶段),可以看作是对类自身以外的信息(常量池中的各种符号引用)进行匹配性的校验。类的卸载是JVM方法区垃圾回收的一部分,但由于类加载器的引用特性和核心类的必要性,实际开发中类被卸载的情况相对少见,更多发生在动态加载类的场景中(如自定义类加载器加载的临时类)。对于这句话,我们又怎么理解呢?
2025-08-07 22:15:00
1153
原创 深入解析Java类加载机制:双亲委派模型的设计与实现
委派原则:当一个类加载器收到类加载请求时,它首先不会尝试自己加载这个类,而是将请求委派给父类加载器去完成。层次结构:所有的类加载请求最终都应该被传递到顶层的启动类加载器。自顶向下尝试:只有当父加载器反馈自己无法完成加载请求时,子加载器才会尝试自己加载。@Override// 自定义类加载逻辑// 从自定义位置加载类字节码。
2025-08-07 20:15:00
2366
原创 Java面试宝典:类加载器分层设计与核心机制解析
通过继承可实现自定义类加载器,核心是重写findClass方法(保持双亲委派)或loadClass方法(打破模型)。示例代码} else {// 将字节码转换为Class对象int length;注意事项需传入类的全限定名(如),方法依赖此格式解析。避免重写loadClass方法,以免破坏双亲委派模型。自定义类加载的类需避免放在类路径下,否则会被优先加载。若Test.class。
2025-08-06 22:15:00
1429
原创 Java面试宝典:Java内存模型与对象可达性判定原理
VisualGC插件安装流程:示例代码:关键配置:运行结果:访问 http://localhost:8080/heap 后触发异常:原理分析:当JVM花费98%以上时间执行GC但仅回收不到2%堆空间时,抛出错误,这是堆内存耗尽的典型标志。依赖配置:类加载器实现:接口触发代码:元空间配置:运行结果:访问 http://localhost:8080/nonheap 后输出:技术要点:栈结构图解:递归溢出代码:运行结果:栈空间核心参数:设计权衡:1. 创建阶段(Creation Ph
2025-08-06 20:00:00
118
原创 Java面试宝典:对象的内存布局
新对象在Eden区创建,当Eden满时触发Minor GC。存活对象移至Survivor区(年龄+1),在From/To区间反复迁移。当年龄计数器达到阈值(默认15),对象晋升至老年代。当堆内存超过32GB时,因对齐系数(8)与32位地址空间乘积达到上限(4GB×8=32GB),指针压缩失效。父类采用策略0,子类采用策略1,通过字段合并降低整体空间开销。理论寻址空间:2⁶⁴ ≈ 16EB(实际受操作系统限制)单次处理32位二进制数据(4字节):大端存储(Big-Endian):直接指针访问(性能优先)
2025-08-05 22:30:00
73
原创 Java面试宝典:深入解析JVM运行时数据区
官方规范定义Java虚拟机定义了在程序执行期间使用的各种运行时数据区域。其中一些数据区域在Java虚拟机启动时创建,仅在Java虚拟机退出时销毁。其他数据区域是每个线程的。每个线程的数据区域在线程创建时创建,在线程退出时销毁。内存区域划分。
2025-08-05 20:00:00
284
原创 Java内存泄漏深度排查指南:从原理到实战优化
能力,可大幅降低泄漏导致的业务中断风险。内存安全不是可选项,而是高可用系统的生命线。大促期间订单服务频繁Full GC,监控显示老年代占用超90%且日均增长5GB。:FGC次数24小时内从200次升至1500次,Old Gen使用率97%:在JDK17+环境启用ZGC(
2025-08-05 19:15:00
1180
原创 多线程×数据库:高并发场景下的锁争夺与事务突围战
Python 因 GIL 限制,多线程适用于 I/O 操作(如网络请求),CPU 密集型任务需用多进程。:Worker 中无法访问 DOM,适用于后台计算。:生产者填满缓冲区后休眠,消费者取空后唤醒生产者。:通过线程池分割大文件并行下载,提升效率。:两线程交替打印数字,如。
2025-07-31 13:15:00
1123
原创 Java面试宝典:MySQL InnoDB引擎底层解析
结合前文所述,InnoDB 的内存结构和磁盘存储结构的核心关系可总结为下图:图:InnoDB 内存结构 (Buffer Pool) 与磁盘结构 (表空间) 关系总览。
2025-07-30 23:30:00
164
原创 Java面试宝典:Spring MVC原理
分层清晰:组件各司其职(映射→适配→执行→渲染)扩展灵活:支持自定义参数解析器、视图解析器等无缝集成:完美兼容Spring IoC容器和AOP拦截器链:通过拦截器实现横切关注点内容协商:自动支持JSON/XML等多格式响应。
2025-07-30 22:30:00
36
原创 Java面试宝典:MySQL中的系统库
MySQL 包含多个关键系统数据库,它们存储了服务器运行过程中的元数据、状态信息及性能指标。这些系统库是 MySQL 内部管理机制的基石,提供对数据库底层运作的可见性。该库专注于性能监控,记录服务器运行时资源消耗、等待事件和执行统计。它收集包括 SQL 语句执行时间、内存使用量、I/O 操作等底层性能数据,帮助用户诊断性能瓶颈。所有数据存储在内存中,重启后丢失,但对实时性能分析至关重要。作为 MySQL 的“数据字典”,提供所有数据库对象的元数据信息。用户可以查询表结构、索引、视图、存储过程等详细信息。
2025-07-30 20:00:00
224
原创 Java面试宝典:Spring Boot 自动装配原理与配置文件加载顺序?
特性自动装配 (Auto-Configuration)配置加载 (Externalized Configuration)核心目标自动化组件注册外部化参数管理触发时机容器初始化阶段容器启动前关键技术条件注解 + 配置类扫描优先级覆盖 + 多环境隔离扩展方式自定义Starter自定义PropertySource配置文件依赖通过@ConfigurationProperties绑定直接读取配置值典型应用数据库连接池、Web服务器自动配置端口号、日志级别等运行时参数协同工作原理配置先行。
2025-07-29 22:15:00
101
原创 Java面试宝典:MySQL事务和事务的隔离级别
如果按上图顺序执行两次转账,最终甲的账户剩 9000 元(只扣了 1000 元),而乙的账户却成了 2500 元(多了 1000 元),这显然是不正确的。事务是数据库管理系统(DBMS)执行过程中的一个逻辑单位(不可再进行分割),由一个有限的数据库操作序列构成(包含多个DML语句,select语句不包含事务),其执行结果必须是“要不全部成功,要不全部失败”。此时,事务 B 读取的数据就是无效的“脏数据”。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
2025-07-28 23:00:00
257
原创 Java面试宝典:Spring Boot
SpringBootApplication // 复合注解// 启动入口@SpringBootApplication 注解分解→ 标识为配置类(实质是→ 扫描当前包及子包的@Component、@Service等→自动装配核心开关@EnableAutoConfiguration 实现原理通过导入装配逻辑加载文件读取所有自动配置类(如条件化装配@ConditionalOnClass(DataSource.class) // 类路径存在DataSource时生效@Bean。
2025-07-28 22:45:00
212
原创 Redis数据量过大的隐患:查询会变慢吗?如何避免?
Redis的瓶颈不在数据量本身,而在于数据形态和访问模式。通过分布式架构改造(如分片集群)、存储结构调整(如Hash分桶)和访问路径优化(如本地缓存),TB级Redis集群仍可保持毫秒级响应。Jemalloc按固定大小(8B/16B/32B)分配内存,小于申请空间时产生碎片。频繁修改数据导致空间重用效率降低(如Hash字段动态增减)。)>1.5时,内存分配延迟显著上升,影响写入速度。大Key/热Key阻塞。Redis数据量过大。
2025-07-28 21:30:00
1099
原创 Java面试宝典:MySQL事务底层和高可用原理
验证自动提交状态:innodb_log_group_home_dir,该参数指定了redo日志文件所在的目录,默认值就是当前的数据目录。innodb_log_file_size,该参数指定了每个redo日志文件的大小,默认值为48MB,innodb_log_files_in_group,该参数指定redo日志文件的个数,默认值为2,最大值为100。所以磁盘上的redo日志文件可以不只一个,而是以一个日志文件组的形式出现的。这些文件以ib_logfile[数字](数字可以是0、1、2…)的形式进行
2025-07-28 20:00:00
65
【数据库技术】MySQL 8.0安装配置全指南:涵盖Windows图形化/免安装及Linux部署方案与常见问题解决
2025-06-24
【大数据技术】从核心概念到技术生态:大数据基础学习指南与实践路径规划介绍了大数据的基础概念
2025-06-19
【C/C++开发】VSCode配置C/C++开发环境全流程指南:涵盖安装、编译与调试配置
2025-06-16
【Python编程】多平台Python安装与开发环境搭建指南:覆盖Windows、macOS和Linux系统初学者入门教程
2025-06-15
它允许用户自定义并增强您最喜爱的网页的功能 用户脚本是小型 JavaScript 程序,可用于向网页添加新功能或修改现有功能 使用 篡改猴,您可以轻松在任何网站上创建、管理和运行这些用户脚本
2025-06-15
计算机编程期末作业 西邮校园导游咨询系统,毕业论文,共14页,2617字
2025-06-14
sql语言初级教程及学习资源
2024-06-12
中国行政区划数据获取(java版本生成插入sql)
2024-06-11
maven下载、安装、配置与使用教程(windows、Linux)
2024-06-11
elasticsearch-7.14.0和ik分词器
2024-06-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅