- 博客(32)
- 收藏
- 关注
原创 java【this和super的区别】通俗易懂
在这个例子中, Dog 类的构造函数的参数也叫 name, 和成员变量 name 同名。为了区分这两个 name, 我们使用 this.name 来表示成员变量 name, 而直接使用 name 则表示方法参数 name****
2024-12-19 18:23:14
376
原创 java【流程控制】for while break continue else if switch
条件语句就像是路上的“岔路口”🚧, 根据不同的路况 (条件), 选择不同的前进方向➡️⬅️⬆️⬇️。循环语句就像是跑步机🏃♀️, 只要你不停止 (满足特定条件), 它就会一直跑下去 (重复执行)跳转语句就像是游戏中的“传送门”🚪, 可以让你跳出循环, 或者跳转到程序的特定位置。想象一下, 你在玩一个游戏🎮, 只要你还有生命值❤️, 就可以一直玩下去。想象一下, 你在玩一个寻宝游戏🕹️, 找到宝藏💰后就结束游戏。,程序会顺序地执行完所有 10 次循环。,循环不会提前退出,而是继续运行,最终在。
2024-12-19 17:55:35
574
原创 【Java 中的运算符】
当一个表达式中有多个运算符时, 优先级高的运算符会先被执行。如果你不确定运算符的优先级, 可以使用。的结果还是整数, 会丢弃小数部分。例如, 5 / 2 的结果是 2, 而不是 2.5。可以放在变量前面 (前缀) 或后面 (后缀)。表达式1 : 表达式2。: 用于判断一个对象是否属于某个类。用于对整数的二进制位进行操作。: 只要有一个操作数为。
2024-12-19 17:36:35
613
原创 局部变量、成员变量、静态变量、常量【超级详细解释】
静态变量是用static关键字修饰的成员变量。它也被称为类变量。静态变量不属于某个特定的对象, 而是属于类本身。无论创建多少个对象, 静态变量都只有一份拷贝, 被所有对象共享。在 Java 中, 常量是用final关键字修饰的变量。final的含义是“最终的, 不可改变的”。一旦一个变量被final修饰, 它的值就不能再被修改了。我们通常将final和static一起使用来创建类级别的常量。
2024-12-19 17:25:02
1402
原创 java数组(简简单单的概念)
二维数组, 你可以把它想象成一个表格🧮, 或者一个棋盘♟️, 它有行 (一维数组是一排盒子📦📦📦, 二维数组就是一个盒子矩阵📦📦📦📦📦📦!二维数组, 你可以把它想象成一个表格🧮, 或者一个棋盘♟️, 它有行 (一维数组是一排盒子📦📦📦, 二维数组就是一个盒子矩阵📦📦📦📦📦📦!的方式来访问二维数组中的元素。
2024-12-19 16:20:26
222
原创 String为什么是引用数据类型
为什么呢?String实际上是一个类 (Class): String 是java.lang包中预定义的一个类, 它不是基本数据类型String对象存储在堆 (Heap) 中: Java 中的对象都是存储在堆中的, 而基本数据类型的值是直接存储在栈 (Stack) 中的。String 对象也是在堆中创建的。String变量存储的是引用: 当你声明一个 String 变量时, 这个变量实际上存储的是 String 对象在堆中的内存地址📍, 而不是字符串本身。
2024-12-19 16:11:55
460
原创 【Static和final的区别】钻个牛角尖给你听!
*static**静态的🗿, 属于类的, 只有一份, 大家共享。**final**最终的💍, 不能修改的 (变量不能改值, 方法不能重写, 类不能继承)。通常用来声明常量🧮。
2024-12-19 16:01:42
549
原创 关于Java的public static void main 的通俗解释(简单易懂!包学会!)
你写好了一个 Java 程序👨💻👩💻, 里面有一个 main 函数。你用 javac 命令编译这个程序, 生成.class文件。你用 java 命令运行这个程序, Java 虚拟机 (JVM) 启动🚀。JVM 找到你指定的类 (比如 HelloWorld)。⑤ JVM 在这个类里面找到 main 函数。JVM 开始执行 main 函数里面的代码。问题的关键在于第 5 步, JVM 需要找到 main 函数。你想想, 这个时候, 程序才刚刚开始运行, 还没有创建任何对象呢!
2024-12-19 15:35:12
1064
原创 轻松掌握HTTP状态码:从100到504
1xx 信息性状态码官方:请求正在处理中,请稍等。通俗:别催,正在搞。100 Continue官方定义:服务器已收到请求的初始部分,客户端可以继续发送其余部分。通俗解释:你在饭店说“我点个大餐,服务员可以接单吗?”服务员说:“可以,继续点吧。”101 Switching Protocols官方定义:服务器同意切换到客户端请求的协议(比如从 HTTP 切换到 WebSocket)。通俗解释:你说“咱们换个聊天方式,比如语音?”对方回“好啊,切语音模式了!”2xx 成功状态
2024-12-14 17:01:30
613
原创 Cookie和Session区别,工作步骤,分布式情况下的解决
它能够很好地解决分布式环境下的 Session 共享问题,同时兼顾性能和扩展性。:用户在登录后访问另一个页面,比如查看个人信息页面。:用户第一次访问网站,比如登录页面。服务端验证用户名和密码是否正确。来保存用户的登录状态。🎯 在分布式系统中,
2024-12-14 16:42:40
834
原创 Synchronized的锁升级过程(轻松愉快版)
哎呀,这个锁哈就像一碗火锅底料,开头你一个人占了,锅边有点‘偏向’你;等朋友们也来夹菜了,抢得不凶就是‘轻量’,抢凶了锅就变重了,得一个个来夹,锅底还得暂停熬汤,效率就低咯。锁的升级是指 JVM 根据锁的竞争情况动态调整锁的实现方式,以优化性能。),可以观察锁的状态变化。
2024-12-14 10:32:36
1002
原创 Redisson(新手小白入门版!!超详细!!自己的总结分享)
i < 50;使用事务、行锁来确保库存操作的原子性;引入分布式锁,保证同一时刻只有一个线程修改库存;使用 Redis 的原子性操作优化性能。加锁:只允许一个线程进入关键区域。执行业务逻辑:安全更新库存。释放锁:确保释放的是当前线程的锁,避免误删。公平锁:保证锁的获取顺序公平。读写锁:读多写少场景优化性能。信号量:限流神器,控制并发量。栅栏:线程协作,多个任务协调完成。
2024-12-08 18:56:31
832
原创 Canal的详细解释(小白无痛版!!!)
Binlog,全称Binary Log(二进制日志),是 MySQL 的一种日志文件,主要用来记录数据库的所有写操作,比如INSERTUPDATEDELETE,但是不记录查询操作(SELECT它的作用相当于一个“黑匣子”✈️:👉记录数据库发生过的改变;👉重播这些改变,实现恢复或者同步。
2024-12-08 12:23:27
2578
1
原创 Java之红黑树详聊(超级轻松、愉快解释版本)
亲爱的❤️🎉,红黑树的本质就是让“二叉搜索树”更加聪明,它通过颜色和规则保持平衡,确保高效的操作性能。记住,红黑树最重要的就是这五条规则,每当插入或删除节点时,它都能够自我调整,保持平衡,让查找效率稳定在 O(log n) 的水准。延展红黑树的相关知识,深入浅出地挖掘更多重点内容,绝对不会让你觉得枯燥乏味🌟✨!
2024-10-06 15:24:56
892
原创 Java 悲观锁和乐观锁(通俗解释版!简单易懂)附加代码解释
悲观锁是一种非常谨慎的策略。在这个策略下,每次我们要读取或修改数据时,都假设最坏的情况会发生——也就是我们担心别的线程(或事务)会同时访问或修改同一个数据。因此,在处理数据前,我们会先上锁,让其他线程暂时不能访问这个数据,直到我们完成操作并释放锁。与悲观锁不同,乐观锁假设冲突不会经常发生。它的思路是:当多个线程同时访问同一数据时,没必要每次都上锁,大家可以“乐观”地认为自己不会遇到冲突。在操作数据时,我们不加锁,等到最后提交数据时,才检查是否有人在我们操作期间修改了数据。
2024-09-29 15:25:20
1077
原创 Java之ConcurrentHashMap 和 Hashtable的比较(通俗讲解版)
在学习时,通常会结合一起学习,因为这两者都用于,而且它们都是的集合类。通过对比它们的特性和使用场景,可以帮助我们更好地理解的优势和应用。
2024-09-29 11:36:38
932
原创 HashMap 完整讲解:从源码到原理
HashMap 是 Java 中非常常用的一种数据结构,它通过**键值对(key-value pairs)
2024-09-29 11:26:09
1085
原创 Java —— HashMap从数据结构到扩容机制全面解析
知识点解释基本数据结构数组 + 链表结构,当冲突发生时,链表存储多个键值对。树化与退化链表长度超过阈值时会转换为红黑树,提升查询效率,减少时退化为链表。索引计算哈希函数计算键的哈希值,通过索引决定键值对的存储位置。put 与扩容插入时会根据负载因子进行扩容,重新分布现有键值对。并发问题HashMap 在多线程下不安全,需要使用线程安全的 ConcurrentHashMap。key 的设计设计好的键要确保hashCode()和equals()方法,实现均匀分布。代码展示一下:包括put()
2024-09-29 10:53:23
993
原创 Java——LinkedList 和 ArrayList的全面对比讲解
你前后都有一个人,想插队的话,你只需要拉住你前面和后面的人,让他们也拉住你。:因为数据是通过链表存储的,要访问某个特定位置的元素,你需要从头(或尾)开始,逐个走过每个节点才能找到目标⚙️。因为你只需要拉住你前面和后面的人,告诉他们换一下顺序,所以插入和删除非常方便,效率高🏆。:由于每个节点除了存储数据外,还要存储指向前后节点的两个指针🧷,所以相比ArrayList,它占用的内存更多📊。:ArrayList就像是一个紧凑的货架,所有商品整齐排列,没有多余的“拉绳子”的动作,所以它更加节省空间💡。
2024-09-29 10:44:14
3729
1
原创 Java的迭代器(Iterator)之Fail-Fast 和 Fail-Safe
在 Java 中,当我们使用迭代器(Iterator)遍历集合时,有两种处理方式:结果:这个代码会抛出 ,因为我们在遍历的时候往集合里添加了元素🍍。结果:这个代码不会抛出异常,程序会继续运行,因为 使用了副本,遍历时不会受到原集合修改的影响。
2024-09-29 10:10:55
407
原创 Java之 ArrayList 扩容的通俗解释 ✨(通俗版白话文)
每次你往背包里装满了 10 个水果,再想多放几个时,背包不会直接爆掉💥,它会自动扩展到之前大小的 1.5 倍。比如,装了10个水果后再加水果,背包会扩容到能装下 15 个,然后装满 15 个后,再扩容到能装 22 个🍇🍉。如果你有很多东西一次性需要放进去,比如你有一个装满东西的小箱子📦,你想把这些东西全部转移到背包里,这时背包就会根据小箱子的大小直接扩容到合适的大小,确保你一次就能全部装进去。是一个可以动态增长的数组,就像一个可伸缩的背包🎒,随着你往里面不断加东西,它会自动变大,不用担心背包会装不下。
2024-09-29 09:59:45
1042
原创 Java 二分查找(通俗解释+emoji小表情版)
想象一下,你在翻一本字典📖,你要查一个单词,但你不需要从第一页一个个翻,你可以直接打开中间看看单词是在哪一半,然后继续对半分。通过这种方式,能够很快找到你要的目标!当我们有一个排序好的数组时,二分查找会通过不断地将查找范围“对半分割”来快速找到目标元素。我们看一下,中间位置的值是否就是我们要找的数字。如果找到了,太棒了!的世界,绝对让你感觉到这就像是在找一颗藏在书里的宝石💎,而且很快就能找到!如果我们找的不是中间的值,那么我们就要缩小范围📐。,首先我们要找到数组的中间位置。在上面的代码中,我们通过。
2024-09-29 09:46:14
424
原创 Java 冒泡排序 (Bubble Sort) ✨ 代码版 + Emoji讲解
的基本思想就是让“大泡泡”不断往上浮,直到整个数组像泡泡浴一样排序好!🎉💦。
2024-09-29 09:27:07
724
原创 Java 快速排序的实现(通俗解释 + 详细代码)
选择基准值:选一个数字作为基准值,通常选择数组中的某个元素。分拣:把比基准值小的放左边,比基准值大的放右边。递归:对左边和右边的部分继续进行相同的操作。组合结果:最终把排好序的部分拼在一起。
2024-09-29 09:19:41
11188
2
原创 Jvm GC(垃圾回收机制)中的引用计数法
引用计数法是一种简单的垃圾回收算法,通过为每个对象维护一个“引用计数器”来追踪有多少其他对象引用了它。如果一个对象的引用计数为 0(也就是说,没有任何对象在使用它),那它就可以被回收了。🗑️引用计数法是一种简单的垃圾回收算法,它通过追踪对象的引用数量来判断是否可以回收。虽然它能即时回收内存,但循环引用是它的致命弱点,导致某些情况下无法正常释放内存。
2024-09-28 13:47:58
1011
1
原创 Jvm 使用JProfiler工具分析OOM原因
是 JVM 在堆内存不足时抛出的错误。通常,当程序创建了过多的对象而 JVM 的堆空间无法满足时,会出现此错误。这类错误可能由于内存泄漏、内存分配不合理或者对象过多造成的内存压力引发。使用JProfiler可以帮助你非常细致地分析的原因,包括查看内存使用情况、捕获堆快照、分析占用大量内存的对象以及找到内存泄漏的根源。通过这些分析,你可以优化代码或调整 JVM 的内存参数来解决问题。💡🔧希望这些步骤能够帮助你在实际项目中排查和解决 OOM 问题!如果你有其他问题,随时继续问我!
2024-09-28 13:44:53
1271
原创 Jvm 之 新生区、永久区 和 堆内存调优
新生区是 JVM 堆内存的一部分,用于存储短期存活的对象,它包括 Eden 区和 Survivor 区。对象在新生区存活后才会被移到老年代。永久区(Java 8 之前)存储类的元数据,后来被更灵活的元空间替代,避免了内存不足的问题。堆内存调优是为了优化 JVM 的内存使用,避免内存不足和性能下降。通过调整堆大小、新生代大小和监控垃圾回收,可以提升程序性能。
2024-09-28 13:38:37
720
原创 Jvm核心:栈、HotSpot 和 堆
栈(Stack):用于管理方法调用和局部变量。每个线程都有自己的栈,栈是后进先出的结构。:最常用的 JVM,它通过热点探测和即时编译(JIT)来优化程序性能,具备强大的垃圾回收机制。堆(Heap):用于存储所有的对象和数组,堆是由垃圾回收器自动管理的,分为新生代和老年代。
2024-09-28 13:26:53
656
原创 Jvm之 Native(本地方法) 和 方法区(Method Area)
虽然你主要用自己的工具做饭(Java 代码),但偶尔你需要借助邻居的设备(Native 方法)来搞定一些特定的任务。在 Java 中的意思就是“本地方法”,也就是非 Java 语言写的代码,通常是用 C 或 C++ 等语言编写的。每个类就像是超市里的商品,方法区就负责把这些“商品”(类和它们的信息)整齐地放在货架上,方便 JVM 在需要的时候随时“拿取”。是 JVM 内存结构的一部分,负责存储类的信息。JNI 是 Java 和其他语言之间的桥梁,它允许你在 Java 中调用其他语言编写的代码。
2024-09-28 13:20:15
2183
原创 Jvm沙箱安全机制
简单来说,沙箱安全机制是一种限制 Java 程序执行权限的机制,特别是当程序是从不受信任的来源下载时。它通过限制程序的权限,确保它只能执行受限的操作,无法访问关键的系统资源,比如文件系统、网络或其他敏感数据。沙箱安全机制是 Java 的一项重要功能,特别是在处理来自不受信任来源的代码时,它可以防止恶意代码破坏用户的系统。核心组件:沙箱机制主要通过类加载器安全管理器和权限类实现。简单示例:我们通过代码展示了如何使用来阻止对文件系统的访问,这展示了沙箱机制如何保护系统资源。
2024-09-28 13:15:24
982
原创 JVM的体系结构、类加载器及双亲委派机制
类加载器:它是 JVM 中的搬运员,负责把类文件(Java 类)加载进来。双亲委派机制:它确保每个类加载器不会直接加载类,而是先让“父母”类加载器尝试加载,避免重复或篡改类。
2024-09-28 13:09:03
1021
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅