Ernest_Feng
码龄6年
关注
提问 私信
  • 博客:19,024
    19,024
    总访问量
  • 24
    原创
  • 2,307,795
    排名
  • 270
    粉丝
  • 0
    铁粉
  • 学习成就

个人简介:技术学习道路上摸爬滚打

IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:浙江省
  • 加入CSDN时间: 2018-09-24
博客简介:

weixin_43268715的博客

查看详细资料
  • 原力等级
    成就
    当前等级
    3
    当前总分
    205
    当月
    1
个人成就
  • 获得351次点赞
  • 内容获得3次评论
  • 获得283次收藏
创作历程
  • 13篇
    2024年
  • 11篇
    2023年
成就勋章
TA的专栏
  • java基础
    4篇
  • 并发编程学习指南
    6篇
  • jvm
    7篇
  • 算法
    6篇
  • mq学习指南
    4篇
  • spring|spring-boot
    1篇
  • redis学习指南
    1篇
创作活动更多

HarmonyOS开发者社区有奖征文来啦!

用文字记录下您与HarmonyOS的故事。参与活动,还有机会赢奖,快来加入我们吧!

0人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

深度解析JVM类加载器与双亲委派模型

Java虚拟机(JVM)是Java程序运行的核心,其中类加载器和双亲委派模型是JVM的重要组成部分。本文将深入讨论这两个概念,并解释它们在实际开发中的应用。类加载器是JVM的一部分,负责加载Java类的字节码文件。Java应用程序中的每个类都必须由类加载器加载,类加载器将类的字节码文件从磁盘或网络加载到内存中,并在JVM中创建一个对应的Class对象。双亲委派模型是一种类加载器之间的层次结构,它通过父类加载器委派给子类加载器加载类。
原创
发布博客 2024.01.13 ·
2227 阅读 ·
54 点赞 ·
0 评论 ·
32 收藏

深入了解Java多线程编程:JVM内存模型与同步机制

多线程编程是当今软件开发中不可避免的话题之一。在Java中,了解JVM内存模型及相关概念对编写正确、高效的多线程代码至关重要。本文将深入探讨JVM内存模型、重排序、内存屏障、happen-before关系、主内存、工作内存以及同步机制,并通过具体案例进行原理分析。
原创
发布博客 2024.01.13 ·
553 阅读 ·
14 点赞 ·
2 评论 ·
7 收藏

经典问题 | 线程打印ABA问题

线程A, B,C三个线程, 当存在竞争的时候, 第一个元素应该打印A, 这个时候打印B的线程进来了, 为了要保证打印ABC是顺序执行的,因此不能让打印B的线程打印.在这个问题中,我们有三个线程,每个线程负责打印一个字符。因此线程携带的字母减去'A'构成了条件, 与计数器对3取模的数值进行比较, 就知道当前线程是否可以打印字母.使用一个共享的计数器, 默认从0开始, 每打印一个元素, 次数+1, 严格按照0,1,2顺序打印ABC。条件2 : 在条件1的基础上, 判断线程携带的元素是否是需要打印的元素即可.
原创
发布博客 2024.01.09 ·
408 阅读 ·
8 点赞 ·
0 评论 ·
8 收藏

二叉树 | 二叉树的对称问题

二叉树的镜像对称问题
原创
发布博客 2024.01.09 ·
476 阅读 ·
7 点赞 ·
0 评论 ·
7 收藏

链表 | 指针法解决链表反转问题

指针法解决链表反转的问题
原创
发布博客 2024.01.09 ·
959 阅读 ·
34 点赞 ·
0 评论 ·
21 收藏

二叉树 | 二叉树的前序遍历问题

通过递归思想完成二叉树的前序遍历.
原创
发布博客 2024.01.08 ·
485 阅读 ·
7 点赞 ·
0 评论 ·
9 收藏

jvm | 垃圾回收机制

垃圾回收算法的演进包括标记和清除两个主要阶段。初始阶段采用标记清除算法,通过标记存活对象,再清除未标记的垃圾对象。为了解决标记清除算法的空间碎片问题,引入了标记整理算法,它在标记的基础上将存活对象整理到内存的一端,减少碎片。复制清除算法则将内存划分为两个区域,通过复制存活对象至一块区域,再清除未复制的区域,解决了碎片问题。
原创
发布博客 2024.01.05 ·
1622 阅读 ·
34 点赞 ·
1 评论 ·
34 收藏

jvm虚拟机栈:Java程序的执行框架

虚拟机栈是每个线程私有的内存区域,用于存储方法的执行信息。每个方法在执行的同时都会创建一个栈帧(Stack Frame),栈帧包含了方法的局部变量表、操作数栈、动态链接、方法返回地址等信息。
原创
发布博客 2024.01.05 ·
1223 阅读 ·
32 点赞 ·
0 评论 ·
23 收藏

如何确保分布式环境下消息的顺序消费

在消息队列中保障消息的顺序性通常涉及将相同业务标识的消息发送到同一个队列,并确保消费者按照一定的顺序从队列中拉取并处理消息。通过一定的哈希计算策略, 以确保业务标识相同的消息被发送到同一个主题或队列, 比如同一个订单的创建, 支付, 完成这三个消息一定要在一个队列中。消费者按照顺序从队列中拉取消息。由于相同业务标识的消息被发送到同一个队列,保证了它们在队列中的有序性。
原创
发布博客 2024.01.04 ·
1800 阅读 ·
34 点赞 ·
0 评论 ·
19 收藏

链表 | 链表中环的入口结点

如下图所示, 两段链表{1,2}, {3,4,5}, 头结点是1, 环节点是3, {3,4,5}成环.给一个长度为n链表,若其中包含环,请找出该链表的环的入口结点,否则,返回null.我们的目标就是在给定的一个链表中找出环节点.
原创
发布博客 2024.01.04 ·
875 阅读 ·
18 点赞 ·
0 评论 ·
19 收藏

Jvm内存为什么要分成新生代、老年代、持久代 | 新生代中为什么要分为Eden和Survivor

JVM内存的划分及参数配置在垃圾回收效率和内存利用率之间找到了平衡点。通过新生代的划分和两个 Survivor 区的设计,JVM能够更有效地管理内存,提高垃圾回收的效率。调整参数可以根据应用的特性来灵活配置,以优化性能。这种划分和配置的方式使得JVM能够更好地适应不同类型的对象行为,从而提供更好的应用性能。
原创
发布博客 2024.01.03 ·
839 阅读 ·
15 点赞 ·
0 评论 ·
7 收藏

jvm面试题: 什么情况下会发生栈内存溢出

栈是线程私有的,其生命周期与线程相同。每个方法在执行时都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法出口等信息。如果线程请求的栈深度大于虚拟机所允许的最大深度,就会抛出。栈内存溢出是由于栈空间不足以满足线程的请求,主要涉及到局部变量表、操作数栈、动态链接、方法出口等信息的存储。如果方法内部声明了大量的局部变量,也可能导致栈内存溢出。通过采取这些解决方案,我们可以有效地预防和处理栈内存溢出的问题,提高程序的稳定性和性能。如果代码中存在递归调用,可以考虑优化递归算法,减少递归深度。
原创
发布博客 2024.01.03 ·
613 阅读 ·
7 点赞 ·
0 评论 ·
8 收藏

jvm虚拟机初识

Java虚拟机就是二进制字节码的运行环境,负责装载字节码到其内部,解释/编译为对应平台上的机器指令执行。Java 程序的最终执行是通过执行引擎执行字节码指令,从而按照程序的逻辑改变程序状态,包括对栈、堆和方法区的操作。整个过程中,涉及到了类加载、字节码验证、执行引擎执行、本地方法调用等多个组成部分。本地方法库是由本地语言(如 C 或 C++)编写的库,其中包含与 Java 代码进行交互的本地方法的实现。本地方法接口负责将 Java 数据类型转换为本地方法支持的数据类型,并调用本地方法库中的函数。
原创
发布博客 2024.01.03 ·
699 阅读 ·
16 点赞 ·
0 评论 ·
9 收藏

SpringFrameWork之InitializingBean

接口的主要作用是在 bean 实例化之后、属性设置之后,执行一些自定义的初始化逻辑。这样,我们可以确保在 bean 使用之前,其依赖和状态都已经初始化完毕。接口提供了一种灵活的方式,允许开发者在 bean 初始化阶段执行自定义逻辑。进行初始化,因为它们更具有可读性,且不依赖于 Spring 特定的接口。是 Spring 提供的一种初始化 bean 的方式,但通常更推荐使用。当 Spring 容器实例化一个 bean 后,会检查它是否实现了。接口,就必须提供对应的实现方法。接口的作用和实现原理。
原创
发布博客 2023.12.22 ·
87 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

dynacmic-tp动态线程池

基于上一个问题, 修改生产环境能修改线程池参数最合适的地方就是配置中心了. 那如何保障能够适配不同类型的配置中心呢?为了更好地管理和监控线程池的运行状况,我们需要一种动态的监控机制,以适应不同框架和应用场景。大家都知道线程池7大参数, 在构建线程池的时候, 怎么确保你设定的参数到了生产一定不会有问题呢?这里, 我们先提出以下一些问题, 这是我想学习dynamic-tp动态线程池的动力.监控线上的线程池情况, 通知如何接入, 比如接入钉钉, 企业, 微信的通知?配置中心配置线程池实例。
原创
发布博客 2023.12.22 ·
461 阅读 ·
7 点赞 ·
0 评论 ·
7 收藏

双指针 | 移动零

输入:nums = [0, 1, 0, 3, 12]移动到数组的末尾,同时保持非零元素的相对顺序。输出:[1, 3, 12, 0, 0],编写一个函数将所有。
原创
发布博客 2023.12.18 ·
152 阅读 ·
6 点赞 ·
0 评论 ·
0 收藏

线程基本使用 | 线程池原理 | 线程生命周期 | 守护线程 讲解

作用AbstractExecutorService 是一个抽象类,实现了 ExecutorService 接口的一部分方法,为自定义线程池提供了一些通用的实现。它位于线程池框架的设计中,为实现自定义的线程池提供了一些基本的模板方法,简化了自定义线程池的操作。这个抽象类提供了一些基本的实现,例如任务提交、任务列表管理、Future 对象的创建等,但对于实际的任务执行逻辑,它仍然依赖于具体的实现类去完成。
原创
发布博客 2023.12.15 ·
870 阅读 ·
14 点赞 ·
0 评论 ·
24 收藏

HashMap | TwoSums之和

解释:nums[0] + nums[1] = 2 + 7 = 9,因此返回 [0, 1]。在遍历过程中,检查当前数字与目标值之差是否已经在哈希表中,如果是则找到答案。输入:nums = [2, 7, 11, 15], target = 9。,请你在该数组中找出和为目标值的两个整数,并返回它们的数组下标。使用哈希表(HashMap)存储数字及其索引。使用哈希表记录已经遍历过的数字及其索引。
原创
发布博客 2023.12.15 ·
64 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

深入理解synchronized关键字| java锁机制

首先,偏向锁适用于短时间内只有一个线程访问的情况,通过偏向锁提供低开销的锁机制。当有其他线程竞争同一锁时,系统可能升级为轻量级锁,此时线程会通过自旋等待锁的释放,避免阻塞线程带来的性能开销。当一个线程第一次获得锁时,会在对象头和栈帧中的锁记录中存储锁偏向的线程ID。本文将深入介绍Java中的锁机制,包括基本的synchronized用法以及在Java SE 1.6中引入的偏向锁和轻量级锁的优化机制。如果成功,线程直接获得锁;在没有竞争的情况下,持有锁的线程再次进入同步块时,无需竞争锁,直接获取。
原创
发布博客 2023.12.06 ·
1025 阅读 ·
24 点赞 ·
0 评论 ·
24 收藏

多线程如何保证线程安全性

如何保证线程安全性.
原创
发布博客 2023.12.04 ·
493 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏
加载更多