
Java基础
文章平均质量分 81
Java基础知识
tataCrayon|啾啾
Java 开发|正在深入大模型
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
从问题出发看JVM的内存管理
JVM垃圾回收机制设计与优化 本文探讨JVM内存管理的核心问题与解决方案。首先分析垃圾识别算法:引用计数法存在循环引用缺陷,而可达性分析算法通过GC Roots遍历对象图实现准确判断。在垃圾清理方面,分代收集理论指导内存区域划分,采用不同回收策略。针对Stop-The-World(STW)的停顿问题,提出并发GC方案,通过三色标记法实现并发标记,并采用增量更新或原始快照技术解决对象消失问题。最后以G1回收器为例,展示如何通过Region细粒度划分解决大内存瓶颈,实现高效回收。文章系统性地阐述了JVM在保证内原创 2025-07-09 19:00:00 · 1047 阅读 · 0 评论 -
Netty解析与简单C/S架构
摘要: Netty框架采用Boss-Worker线程模型,BossGroup单线程处理连接,WorkerGroup多线程处理数据读写,通过ChannelPipeline实现数据流的入站(解码→业务处理)和出站(编码→响应)。与Redis的单线程命令处理不同,Netty的多线程设计适用于通用网络应用。搭建C/S架构时需配置ServerBootstrap/ClientBootstrap、EventLoopGroup及编解码器(如StringDecoder/Encoder),并通过自定义Handler实现业务逻辑原创 2025-07-09 08:30:00 · 990 阅读 · 0 评论 -
Netty:精致的NIO
本文探讨了Java中C/S程序的两种实现方式及其在高并发场景下的问题。首先介绍了基于阻塞I/O(Blocking I/O)的传统实现,分析其在高并发时会导致线程爆炸、内存耗尽及频繁上下文切换等问题。然后介绍了Java NIO的非阻塞解决方案,通过Selector机制避免了线程过多的问题,但仍存在编程复杂度高的缺点。文章通过代码示例对比两种方案,揭示了传统阻塞模型在高并发环境中的局限性,为后续探讨更高效的网络编程模型奠定基础。原创 2025-07-08 08:15:00 · 709 阅读 · 0 评论 -
AQS核心解析:三问三知
摘要:AQS(AbstractQueuedSynchronizer)是Java并发编程的核心框架,通过CLH队列管理等待线程,解决了锁竞争中的线程调度问题。当线程获取锁失败时,AQS将其封装为Node节点加入队列并挂起,避免CPU空转。支持公平/非公平两种模式,非公平模式允许插队以提高吞吐量。锁释放时仅唤醒队首线程,避免"惊群效应"。源码实现中,通过volatile state字段记录锁状态,addWaiter构建等待队列,acquireQueued实现精准唤醒机制。原创 2025-06-25 08:30:00 · 1122 阅读 · 0 评论 -
职责链模式怎么设计?双亲委派告诉你
本文以Java双亲委派机制为例,阐述了职责链模式的设计思想。通过抽象类加载器MyClassLoader实现模板方法loadClass(),定义了检查缓存、父加载器委派、子类查找的标准流程。具体加载器如ExtensionLoader和AppLoader继承该模板,分别从ext和app目录查找类资源。这种分层处理机制既保证了类加载的唯一性,又实现了责任边界划分,体现了职责链模式"多个对象处理同一请求"的核心思想,有效解耦了请求发送者和接收者之间的关系。 (摘要字数:148字)原创 2025-06-06 11:38:57 · 539 阅读 · 0 评论 -
双亲委派机制为什么建立又为什么破坏?
成熟的设计应该兼具稳定性、安全性,同时又满足复杂应用场景和高级功能的灵活性和扩展性。追求简单、安全、高效,但不牺牲应对复杂性的能力。就像Java的类加载机制。原创 2025-06-06 08:30:00 · 693 阅读 · 0 评论 -
深入浅出 Byte Buddy:掌握 Java 运行时代码操作的利器
摘要: 本文介绍了Byte Buddy字节码增强技术的核心原理与常用API,通过示例展示了如何动态创建类、修改方法行为。主要内容包括: 技术优势:Byte Buddy相比其他字节码工具性能更优,API设计现代化,仅依赖ASM库。 核心功能: 动态创建类(subclass) 修改现有类(方法拦截/字段添加) 代理模式实现 非侵入式增强(如监控/日志) 关键API: DynamicType.Builder:类结构定义 ElementMatcher:元素匹配 MethodDelegation:方法委托(支持@Su原创 2025-06-05 21:17:46 · 924 阅读 · 0 评论 -
无侵入监控能力原理-Java Agent原理与入门
Java的众多监控工具(如Arthas、JProfiler、async-profiler)基本都具备无侵入的监控能力,这是怎么做到的呢?即答,使用Java Agent与字节码增强技术。原创 2025-06-05 08:30:00 · 658 阅读 · 0 评论 -
框架与组件版本备忘
版本备忘原创 2025-05-21 16:12:37 · 232 阅读 · 0 评论 -
【Java基础】不可变对象——通过消除共享来简化并发
不可变思想既有空间(变更需要创建新对象、复杂对象深层拷贝)换时间(无锁竞争)底色,又做到了防御性编程。通过限制对象的变化来换取稳定性。原创 2025-05-16 09:42:42 · 274 阅读 · 0 评论 -
【Java性能优化】缓存友好与无锁数据结构
缓存友好数据结构、双buffer缓冲区无锁数据结构原创 2025-05-06 10:03:21 · 1017 阅读 · 0 评论 -
[Java基础]StringBuilder解析
StringBuilder的预留空间设计与模拟作为栈使用。原创 2025-04-11 17:11:06 · 405 阅读 · 0 评论 -
[Java基础-线程篇]7_线程设计模式与总结
懒汉单例模式怎么变得线程安全?Master-Worker归并模式,工作窃取算法。Java线程相关源码使用了什么设计模式?原创 2025-03-06 16:36:25 · 954 阅读 · 0 评论 -
[Java基础-线程篇]6_JUC容器
Java线程安全的容器有哪些?COW与ConcurrentHashMap设计原理与BlockingQueue源码解析原创 2025-03-06 16:31:14 · 949 阅读 · 0 评论 -
[Java基础-线程篇]5_JUC显示锁
JUC锁怎么分类?JUC锁有哪些特性?这些特性是如何设计与实现的?可重入设计、公平设计、共享锁设计、中断设计、死锁监控原创 2025-03-06 16:23:28 · 1190 阅读 · 0 评论 -
[Java基础-线程篇]4_原子性、可见性、有序性
原子性、可见性、有序性说明。重点就CAS做简单说明与Java源码对应说明原创 2025-03-06 16:19:30 · 632 阅读 · 0 评论 -
[Java基础-线程篇]3_Java锁核心原理——对象与锁
锁主要解决什么问题?内置锁有哪些?对象是怎么上锁的?线程通信的简单说明原创 2025-03-06 16:17:10 · 858 阅读 · 0 评论 -
[Java基础-线程篇]2_Thread解析
线程是什么样的结构?Thread、ThreadLocal、ThreadPoolExecutor源码设计解析原创 2025-03-06 16:13:08 · 870 阅读 · 0 评论 -
[Java基础-线程篇]1_线程基础
在Java8中,每一个Java线程都会直接映射到一个操作系统线程,是1:1线程模型,线程的创建、调度和销毁都由操作系统负责,JVM 只需要与操作系统交互即可。原创 2025-03-06 16:05:22 · 515 阅读 · 0 评论 -
[Java基础-JVM篇]3_JVM类加载机制
JVM通过设立不同优先级和职责的加载器保证了类加载的安全性与灵活性,即双亲委派机制,但是实际生产中更复杂的需求又需要破坏双亲委派,即打破JVM约定过的类加载程序原创 2025-02-24 15:22:52 · 480 阅读 · 0 评论 -
[java基础-JVM篇]2_垃圾收集器与内存分配策略
通过分代理论提供划区理论支持后,JVM进行基于标记-清除算法的垃圾回收设计。原创 2025-02-24 15:18:45 · 1029 阅读 · 0 评论 -
[java基础-JVM篇]1_JVM自动内存管理
jdk8 HotSpot虚拟机的内存划分逻辑。较一般资料相对细致地说明了具体内容。原创 2025-02-24 15:10:32 · 1240 阅读 · 0 评论 -
[java-集合篇]集合简单概述
总结篇,集合篇源码阅读总结。欢迎讨论留言。原创 2025-01-16 15:30:13 · 1040 阅读 · 0 评论 -
[java基础-集合篇]LinkedBlockingQueue源码解析
LinkedBlockingQueue 是一个基于链表节点的自定大小的线程安全的阻塞队列。遵循FIFO,结构上一端进一端出的单项队列。且是一个经典双锁队列原创 2025-01-15 15:01:27 · 739 阅读 · 0 评论 -
[java基础-集合篇]有界阻塞队列ArrayBlockingQueue源码解析
从源码可知,ArrayBlockingQueue是一个基于数组大小固定的阻塞队列。且ArrayBlockingQueue获取元素都从头部获取,插入元素都从尾部插入,即ArrayBlockingQueue是单向队列,从一头插入,一头获取。即ArrayBlockingQueue结构上是单向队列。公平模式下,队列会按照线程请求的先后顺序来分配资源。而非公平模式则尽可能减少线程等待时间。构造ArrayBlockingQueue时必须指定大小。原创 2025-01-13 13:23:39 · 1062 阅读 · 0 评论 -
[java基础-集合篇]优先队列PriorityQueue结构与源码解析
PriorityQueue结构上是一个基于数组的“完全二叉树”,且“任意节点的值原创 2025-01-10 11:49:53 · 599 阅读 · 0 评论 -
[java基础-线程篇]线程-ThreadLocal
所有需要线程隔离的变量都可以考虑使用ThreadLocal。原创 2025-01-10 09:49:50 · 241 阅读 · 0 评论 -
[java基础-集合篇]LinkedList源码粗析
LinkedList实现List、Deque接口,基于双向链表实现的列表。与基于数组的ArrayList不同,基于链表的LinkedList允许在列表的任何位置快速地插入和删除元素。Java中LinkedList实现了Deque,它提供了add,offer,remove,poll,element,peek等方法,因此可以视LinkedList为一个基于链表的双向队列。双向链表的高效删除、添加元素,相较低的查询效率LinkedList也具备。原创 2025-01-07 15:25:29 · 1047 阅读 · 0 评论 -
[java基础-集合篇]HashMap源码粗解
HashMap源码的解析,HashMap的特性由来原创 2025-01-03 10:47:47 · 697 阅读 · 0 评论 -
【Java基础】备忘:Java文件操作
工作中经常需要处理SQL文件、处理Excel,也经常有很多Word与在线文档可以转成Excel处理。现就读取SQL文件,写入SQL文件,读取Excel表格、写入Excel做代码备份。原创 2023-03-28 22:05:18 · 192 阅读 · 0 评论 -
[Java基础]e.getMessage()==null
由于null对象没有任何属性或方法,因此该异常不会提供更多的错误信息。AssertionError:通常用于在代码中检查错误条件,如果断言失败,则抛出该异常。ArithmeticException:例如除以0等算术操作会引发该异常,这种异常也不会包含更多的错误信息。此时,可以考虑通过打印堆栈信息来获取更多的异常细节,例如使用e.printStackTrace()方法。除此之外,还有一些特殊的情况,例如在捕获和重新抛出异常时,可能会丢失原始异常的错误信息。Java中的异常通常都会携带错误信息,但。原创 2023-03-24 20:40:13 · 2174 阅读 · 0 评论 -
[基础备忘]Mybatis与JPA都可以自动生成表
使用Mybatis与JPA都可以自动生成表。两者都可以通过注解定义实体类属性对应的数据表策略,下面对两者在实体类不同注解做备份。原创 2023-03-01 13:18:32 · 1232 阅读 · 0 评论 -
[水]单例设计模式的常见写法与多线程时多单例怎么避免
众所周知,单例模式的“懒汉”写法在多线程时运行可能会出现多实例。可以使用以下写法避免。原创 2023-02-16 21:31:19 · 231 阅读 · 0 评论 -
【Java基础】Java类的加载:初始化
这里就**加载阶段中“类的初始化”阶段做说明测试**,以解面试题。原创 2022-09-15 17:29:47 · 674 阅读 · 0 评论 -
[SpringBoot Server]SpringBoot tomcat max-connections与threads-max测试
在配置tomcat时,发现有两个配置项max-connections、threads-max均为线程数配置,下面对两个选项进行测试。原创 2022-09-14 11:41:30 · 740 阅读 · 0 评论 -
[JAVA]jdk下载
官网下载地址当前版本https://www.oracle.com/java/technologies/downloads/全部版本https://www.oracle.com/java/technologies/downloads/archive/云盘jdk整合包,包含 java1.7\java1.8\java14\java18链接:https://pan.baidu.com/s/1h724CxwTEZg5k4hsqD7yfg 提取码:roam ...原创 2022-05-19 11:17:23 · 314 阅读 · 0 评论 -
【JAVA】java教程网站汇总
写给刚学java时的自己,要是当时能看到,可以少走很多弯路一些教程网站,可以稍微系统的学习java以及其他编程语言。[JAVA教程] java corejava corehttps://dunwu.github.io/javacore/有些页已经404了,但是不妨碍他的细致。推荐: 曾经在学校上过一些java课程,或者学过一些java但是又忘了差不多的情况下,照这个学可以系统复习或系统打基础。网上常推Java书籍这边也有推荐。[JAVA教程]How2jHow2jhtt.原创 2021-12-02 23:22:08 · 604 阅读 · 1 评论 -
[备忘]在用IDEA插件备忘
要618了,万一我能换得起电脑,IDEA怎么说也得梳理增强一下吧?目录1、《项目-从启动到送终之Plugins》启动不了之——依赖分析:maven helper看不懂——中文翻译:Translation更熟悉快捷键:Key Promoter XBug分析与代码优化:Spotbugs\SonarLint热部署:JRebel2、《努力的打工人Plugins》看下这个接口出问题了:RestfulToolkit3、《忘了是不是IDEA安装了就有之Plugins》1、《项目-从启动到送终之Plugins》启动不原创 2021-06-17 18:09:44 · 544 阅读 · 1 评论 -
前后端对接、封装第三方接口
封装第三方接口、二次开发的记录前面一段时间,连续分到三个封装http请求做二次开发的任务,记录一下,后续更新其中坑的内容。partOne 注意事项对接文档对接文档中的请求参数和返回示例一定要清楚,接口的权鉴和签名算法请求头拼接也一定要清楚。partTwo 开发流程测试接口测试接口的可用与返回数据。请求接口有okhttp 与 httpclient 两套工具可以使用。这一步经常出现数据格式错误,开发前要确定好数据格式(文档的坑)。转换数据对获取的数据做适应性转换。...原创 2020-09-10 16:36:39 · 1802 阅读 · 0 评论