登录社区云,与社区用户共同成长
邀请您加入社区
Java 微服务架构设计的核心是服务边界的划分,而边界划分的依据是业务域而非技术层。Spring Cloud 提供了完整的微服务基础设施,但组件选型需要根据业务场景做取舍。网关统一入口、注册中心管理服务发现、Sentinel 保护服务稳定性、事务消息解决分布式一致性——这些是微服务架构的四根支柱。但每根支柱都有代价:网关增加一跳延迟、注册中心引入依赖、Sentinel 增加配置复杂度、事务消息牺牲
分为静态多态、动态多态。
多态是 C++ 面向对象三大核心特性(封装、继承、多态)的最后一环,依托继承机制实现,核心目标是同一个接口,不同实现,大幅提升代码扩展性与复用性,本章分为运算符重载、虚函数、抽象类三大模块。典型重载场景:算术运算符+、关系运算符==、流运算符<</>>、自增自减++/–等,是自定义类实现直观运算的基础。对象指针数组:定义基类指针数组,存储各类派生类对象,循环调用虚函数,统一处理不同子类逻辑,是多态
RxJava是JVM平台实现响应式编程的核心库,支持异步和事件驱动开发。它提供Flowable、Observable等五种响应式类型,通过链式操作符处理数据流,自动管理线程调度和同步问题。4.x版本新增虚拟线程支持、JDK标准整合等特性,优化了背压处理机制。RxJava内置多种调度器,支持subscribeOn/observeOn指定线程,并提供flatMap等并行处理方式。该库广泛应用于Andr
金三银四跳槽季,Java 后端面试其实有规律可循。这篇把最高频的考点梳理一遍,每道题说清楚「怎么答」和「为什么」。
在当今的软件开发领域,Java 以其强大的跨平台能力、丰富的生态系统和卓越的性能,成为众多企业和开发者的首选语言。因此,掌握 Java 的核心知识,尤其是 JVM(Java Virtual Machine,Java 虚拟机)的内存模型,对于每一位 Java 开发者来说,都是必不可少的。在 JDK 8 之前,方法区是 JVM 内存的一部分,它存储了类的元数据信息。当 Eden 区满了,会触发一次 M
如果一个运算对象是无符号类型、另外一个运算对象是带符号类型,而一其中的无符号类型不小于带符号类型,那么带符号的运算对象转换成无符号的。较大的char类型(wchar_t、char16_t、vchar32_t)提升成int、unsigned int、long、unsigned long、long long和unsigned long long中最小的一种类型,前提是转换后的类型要能容纳原类型所有可能
做Java后端性能调优的同学,大概率都被超长Full GC停顿折磨过:系统不定期卡顿、接口TP99耗时暴涨、微服务心跳超时、网关熔断告警,查看监控面板,清一色的Full GC耗时10s+、STW(Stop-The-World)超长停顿。
底层const (const int *),规定指向的值不能改变,赋值给int*后,约束破坏了,他可以修改对象的值。在成员函数声明末尾加const,表示该函数不会修改任何非静止成员(变量mutable成员除外)顶层const (int* const), 指向的指针不能改变,但是对象值可以改变,不受影响。const关键字在C++中不只是表示常量,他的核心是只读契约。特点:值不能改,但指针可以改(是顶
堆是垃圾回收(GC)的主要区域,通常被划分为新生代和老年代。在JDK 8之前,方法区被称为“永久代”(PermGen),但由于永久代容易出现内存溢出,JDK 8将其移除,改用元空间(Metaspace)实现。通过掌握方法区、堆、栈等内存区域的职责,以及合理运用调优策略,我们可以在面试中脱颖而出,并在实际项目中构建高性能、稳定的Java应用。在Java面试中,JVM(Java虚拟机)内存模型与调优策
对象通常先分配在新生代,短命对象会被快速回收,存活久的对象会晋升到老年代。真正有用的理解方式,不是背一堆名词,而是抓住一条主线:对象怎么创建,怎么分配,怎么存活,怎么晋升,最后又怎么被回收。大多数对象都很短命,所以 JVM 才会采用分代思想,把“容易死的”和“活得久的”分开处理。很多时候,真正有效的优化不是一上来改 JVM 参数,而是减少对象创建、缩短对象生命周期、避免大集合无限增长、降低一次请求
摘要: 本文记录了一次因JVM启动参数书写错误导致的线上服务启动卡死故障排查全过程。故障现象为服务启动后健康检查不通过,接口无响应。通过Arthas工具排查发现,JVM参数被错误放置在-jar之后导致全部失效,引发堆内存不足和FullGC风暴。修复后规范了启动参数顺序:JVM参数→探针→系统变量→jar包→应用参数,并验证GC指标恢复正常。文章提供了Arthas全套排查命令和线上启动脚本规范,强调
/ 注入指标注册器 @Resource private MeterRegistry meterRegistry;// 初始化业务计数器 public JvmDemoController(MeterRegistry registry) {// 每次访问计数器+1 return "JVM监控Demo服务运行正常";} }// 注入指标注册器 @Resource private MeterRegistr
场景存储位置/生命周期作用域/链接性初始化次数局部变量静态存储区(程序结束时才销毁)函数内部/作用域为函数范围1次(线程安全)全局变量/函数静态存储区本文件内部(内部链接)1次(程序启动时初始化)静态成员函数静态存储区(全局共享)类域(需外部定义)1次静态成员函数无this,属于类类域(通过类名调用)--
这篇博客为C++初学者整理了《C++语言程序设计教程》前四章的核心基础知识,重点包括: 数据类型与变量:介绍了整型、浮点型等基本数据类型及其用法 常量定义:对比了宏定义和const常量的区别,推荐使用const 运算符:详细讲解算术、关系、逻辑等运算符及其易错点 流程控制:通过实例演示了选择结构和循环结构的实现 综合案例:以九九乘法表为例展示知识点综合运用 常见错误:总结了初学者常犯的语法错误和改
ContextRefreshedEvent事件发生在WebServerInitializedEvent之后,此时初始化Bean时,服务已经被注册到注册中心,请求已经进来,但Bean还在初始化中,造成服务启动时接口响应慢、GC异常。通过监听Web容器的初始化完成事件注册服务,注册中心客户端(不限于Nacos)实现这个抽象类就会在 Web容器初始化完成后向注册中心注册服务。于是,每次配置发布,都可能引
日常开发优先选择实现 Runnable 接口,规避单继承限制,方便多线程共享资源,代码更灵活。
本文系统介绍 JVM 的核心机制,包括内存结构、类加载与垃圾回收。首先讲解堆、栈、程序计数器和元空间等内存区域的职责与常见 OOM 问题;随后分析类加载生命周期、双亲委派模型及其设计意义;最后介绍可达性分析、引用类型、GC 算法、分代回收策略以及 G1、ZGC 等主流垃圾回收器,并总结常用调优参数与故障排查工具,帮助开发者理解 JVM 运行原理并提升性能优化能力。
C++ 异常处理
本文主要针对 Hotspot VM 中“CMS + ParNew”组合的一些使用场景进行总结。重点通过部分源码对根因进行分析以及对排查方法进行总结,排查过程会省略较多,另外本文专业术语较多,有一定的阅读门槛,如未介绍清楚,还请自行查阅相关材料。在这里,我们把整个文章内容总结一下,方便大家整体地理解回顾。
Runnable 方式实现多线程和使用 Callable 和 FutureTask 实现多线程
显式在EndPlay中解绑委托是处理“短生命周期对象监听长生命周期对象事件”的黄金准则。即便 UE 的动态委托提供弱引用保护,主动清理能消除对象销毁顺序不确定性带来的隐患,确保系统稳定性。
摘要:本文介绍了C++异常处理机制的基本概念和使用方式。异常处理将问题检测与解决分离,相比C语言错误码更全面。主要内容包括:1)异常通过throw抛出对象,由匹配的catch捕获处理;2)栈展开过程描述异常沿调用链向上查找处理程序;3)异常匹配规则允许类型转换;4)异常可重新抛出给外层处理;5)C++标准库提供了exception基类及其继承体系,建议主函数捕获exception基类并调用what
本文记录了在使用JDK8+Spring+SpringMVC+Tomcat+JSP的老旧技术栈时遇到的ASM字节码问题。开发者在添加Stream API代码(Function.identity())后,因Spring依赖的老版本ASM4(仅支持Java7)无法处理Java8接口静态方法的INVOKESTATIC指令,导致BeanDefinitionStoreException异常。通过查阅ASM版本
集合框架是Java开发中很常用的框架,单线程下没什么问题,但是多线程下有很大的并发问题数据覆盖数据丢失扩容死循环(JDK7)因为 HashMap 本身没有任何同步机制,多线程下会有很大的并发安全问题全局元素数量 + 1检查元素总数是否超过扩容阈值,达到阈值触发多线程 resize新增元素返回 nullbaseCount + CounterCell = 分段计数避免热点 CAS。
2.2 模式:传统的垃圾收集器(如 Serial, Parallel, CMS)将堆内存划分为连续的三大块:年轻代(Eden + 2个 Survivor)和老年代(Old),G1将堆划分为多个大小相等的 Region,每个 Region 可以在逻辑上扮演 Eden、Survivor、Old 或 Humongous(大对象)区域,不严格要求连续分代,优先回收价值最大的 Region(垃圾最多),以可
/ ❌ 常见错误:用 DTO 做 key,但没重写 hashCode// 只重写了 equals,没重写 hashCode// 换个新的 query 对象(字段相同),取不出来// null ❌。
本文深入解析Java反射机制及其应用场景。通过支付系统案例引入反射概念,形象比喻反射为透视眼能力,能动态获取类信息并操作对象。文章详细介绍了获取Class对象的三种方式、反射的核心功能(创建对象、调用方法、修改字段等)及四大应用场景(JDBC驱动加载、Spring IOC/AOP、测试框架)。同时指出反射的缺点:性能损耗、破坏封装性、安全隐患等,并提供避坑指南。最后强调反射是Java动态性的基石,
用户咨询了一个java中cpu缓存伪共享场景, 他通过padding多个long 字段隔离 2 个volatile字段,但是实测效果没有提升。这是个比较有趣的场景,在 jdk8 有更稳定的方案去解决伪共享带来的性能问题。下面我们展开介绍。
通过上诉两个全局函数的实现代码可以看出,operator new实际上是通过malloc来申请空间的,如果malloc申请空间成功就直接返回,否则执行用户提供的空间不足的应对,如果用户提供该措施就继续申请,否则就抛异常。new和delete是用户进行动态内存申请和释放的操作符,operator new和 operator delete是系统提供的全局函数,new在底层调用operator new
继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。基类的公有成员,子类可以继承为自己的公有成员。在派生类可以访问,在外部也可以访问。基类的保护成员,子类可以继承为自己的保护成员,在派生类可
变量定义就是告诉编译器在何处创建变量的存储,以及如何创建变量的存储。变量定义指定一个数据类型,并包含了该类型的一个或多个变量的列表,如下所示:在这里,type必须是一个有效的 C++ 数据类型,可以是 char、wchar_t、int、float、double、bool 或任何用户自定义的对象,可以由一个或多个标识符名称组成,多个标识符之间用逗号分隔。下面列出几个有效的声明:char c, ch;
/ << "\t最大值:" << (numeric_limits<string>::max)() << "\t最小值:" << (numeric_limits<string>::min)() << endl;
Java 26新特性摘要 Java 26带来了三大实用新特性: 结构化并发:StructuredTaskScope的正式转正解决了回调地狱问题,使并发代码更简洁。通过scope管理子任务,自动处理错误传播和任务取消,重构案例显示代码量减少40%。 Scoped Values:替代ThreadLocal的新型上下文传递机制,自动管理作用域生命周期,避免内存泄漏和线程池复用导致的数据污染问题,特别适合
Java多线程编程核心涵盖线程六种状态及转换机制,通过代码示例展示状态变化过程。线程安全问题源于调度随机性、共享变量修改、非原子操作、内存可见性和指令重排序五大因素,可通过synchronized保证原子性、volatile解决可见性、wait/notify实现线程协调。单例模式线程安全实现包括饿汉式的类加载初始化与懒汉式的双重检查锁定优化。典型问题如死锁需避免循环等待条件,注意sleep不释放锁
/ 通过注入的 clock 获取时间。// 新写法:直观、链式调用。对比维度│ 旧版java.util.Date│ 新版java.time.Instant。Date到底是 UTC 时间还是本地时间。// 旧写法 2:借助 Calendar(代码冗长)Instant类所有的计算和修改操作(如plus() ,minus()Instant只代表绝对时间线上的一个点(默认。
本周 JVM 生态密集更新:Spring AI 2.0 引入自纠错结构化输出,Spring Boot 3.5.16/Spring Data 2025.0.13 终结 3.5.x 系列,Quarkus 紧急修复 CVE-2026-50559,JetBrains 开源 120 亿参数 MoE 编程模型 Mellum2,Netflix 推出 AI 视频编辑模型 Vera 和 VOID,Oracle 发布
变量类型存储区域生命周期地址特征全局变量全局区程序启动→结束地址小,固定静态变量全局区程序启动→结束地址小,固定局部变量栈区函数开始→结束地址大,每次运行可能不同局部常量栈区函数开始→结束地址大,和局部变量相邻全局常量常量区程序启动→结束地址中,只读字符串常量常量区程序启动→结束地址中,只读1.2 程序运行后 **栈区:** 由编译器自动分配释放, 存放函数的参数值,局部变量等 注意事项:不
你打开自己三个月前写的Java代码,看着那个超过500行的Service类,里面充斥着各种switch-case和if-else嵌套,以及一个名叫的方法——这个方法内部做了数据校验、格式转换、业务计算、日志记录、邮件通知……你深吸一口气,意识到这就是人们常说的“屎山”的起点。更可怕的是,你突然发现无法迅速理解这段逻辑,更别提安心地修改它了。编写优质Java代码并非遥不可及,它源自于点滴编程习惯的积
jvm
——jvm
联系我们(工作时间:8:30-22:00)
400-660-0108 kefu@csdn.net