Java[106]

网络IO模型

在套接字接口(Socket API)的抽象之下,网络I/O操作的核心在于Socket的读写功能。在操作系统层面,Socket被视作数据流,因此网络I/O操作本质上是对这些数据流的操作。每当进行网络访问时,从远程主机接收到的数据首先会被存放到操作系统内核的缓冲区中。随后,这些数据会从内核缓冲区复制到应

微服务的事件驱动数据管理

1 微服务和分布式数据管理问题 微服务架构和分布式数据管理确实带来了一系列新的挑战,尤其是在维持数据一致性和处理跨服务交易方面。在单体应用中,关系型数据库提供的ACID事务特性确保了数据的一致性和完整性,但在微服务架构中,数据通常被分散到各个服务的私有数据库中,这就需要我们重新思考数据管理和一致性的

漫谈单体应用迁移到微服务架构

迁移单体式应用到微服务架构意味着经历一系列复杂的现代化过程,这与历代开发者持续追求技术革新的努力颇为相似。在进行迁移时,我们确实可以汲取过去的智慧并重用一些成熟的想法。 其中一个关键的策略是避免采取大规模重写代码的方式,即所谓的“大爆炸式”重写。这种方法仅在决定彻底颠覆现有系统,构建一套全新的基于微

垃圾收集策略与算法

程序计数器、虚拟机栈以及本地方法栈,是Java虚拟机中线程私有的内存区域,它们的生命周期与线程紧密绑定。当线程启动时,这些内存区域随之创建;当线程结束时,它们也随之销毁。这种与线程同步的生命周期确保了内存管理的简洁性和高效性。 程序计数器用于记录当前线程执行的字节码指令位置,确保线程能够按照正确的顺

JVM 内存结构

Java 虚拟机的内存空间主要分为五个部分: 程序计数器:记录线程执行的字节码指令位置,线程私有。 Java 虚拟机栈:存储方法执行的局部变量、操作数栈等信息,线程私有。 本地方法栈:为虚拟机使用到的本地方法服务,线程私有。 堆:存储所有对象实例和数组,线程共享,由垃圾回收器自动管理内存。 方法区:

记一次完整的JVM堆外内存泄漏故障排查记录

故障描述 像是Java进程出现了内存泄漏的情况,但我们的堆内存限制为4G。由于内存占用超过了4G,可以初步判断是JVM堆外内存泄漏。 确认了下当时服务进程的启动配置: -Xms4g -Xmx4g -Xmn2g -Xss1024K -XX:PermSize=256m -XX:MaxPermSize=5

JVM内存泄露、内存溢出

内存泄露 指程序中动态分配内存给一些临时对象,但是对象不会被 GC 所回收,它始终占用内存。即被分配的对象可达但已无用。 内存溢出 指程序运行过程中无法申请到足够的内存而导致的一种错误。内存溢出通常发生于 OLD 段或 Perm 段垃圾回收后,仍然无内存空间容纳新的 Java 对象的情况。 从定义上

JVM调优经验

JVM调优经验 在JVM配置方面,我们一般可以先使用默认配置,这些基本的初始参数可以保证一般的应用程序的稳定运行。在测试中,我们可以根据系统的运行状况,比如会话并发情况、会话时间等,结合gc日志、内存监控和使用的垃圾收集器等进行合理的调整。当老年代内存过小时,可能会引起频繁的Full GC,而当内存

Java 面试题及答案整理,最新面试题

Java中的内存模型是如何设计的? Java的内存模型主要包括堆、栈、方法区和本地方法栈几个关键部分:

【面试题108】你真的清楚 i = i++和 i = ++i 的区别吗?

写在前面:前些天看完了JVM的内存结构,自以为自己是懂了,心里想想不就是分线程共享和线程私有嘛,然后又怎么怎么分怎么怎么的嘛… 直到遇到了这道题目。说句实话,曾经自己做这种运算题目,完全是靠脑子空想,然后拿上笔颤抖的写下一个自己都不知道正不正确的答案。不过过了今天,我终于能确定它的答案了。 为此,我

【面试题103】四连问:API 接口应该如何设计?如何保证安全?如何签名?如何防重?

在实际的业务中,难免会跟第三方系统进行数据的交互与传递,那么如何保证数据在传输过程中的安全呢(防窃取)?除了https的协议之外,能不能加上通用的一套算法以及规范来保证传输的安全性呢? 下面我们就来讨论下常用的一些API设计的安全方法,可能不一定是最好的,有更牛逼的实现方式,但是这篇是我自己的经验分

面试官:集群部署时的分布式 Session 如何实现?

面试题 集群部署时的分布式 Session 如何实现? 面试官心理剖析 面试官问了我关于分布式系统框架的使用细节,我明白他的意图是考察我是否具备将单体系统转型为分布式系统的能力。然而,转向分布式系统后,我们会面临一系列新的挑战和问题。 其中,分布式事务是首当其冲的问题。在分布式系统中,多个服务之间可