四月的第一天
三月末的独白四月的风吹进了窗,我才惊觉三月已经走远了。 乌鲁木齐的春天总是来得迟疑一些。街边的山桃花刚冒出零星的花苞,粉白色的花瓣在料峭的春寒里微微颤动,像是这座城市在试探着苏醒。而我,却在这早春的季节里,慢慢沉入了某种说不清的疲惫。 一三月的第一天,我拖着行李箱回到学校。宿舍楼的暖气还没停,楼道里弥漫着一股潮湿的气息。室友们陆续回来,大家聊着假期的见闻,而我满脑子都是对未来的憧憬。大二了,终于可以实习了,终于可以证明自己了。那时候的我,天真地以为只要迈出第一步,后面的路就会顺理成章地铺展开来。 第一周的周五,我在宿舍的台灯下匆匆写完了人生中第一份简历。键盘敲击的声音在安静的夜里格外清晰,像是在为我的野心打着节拍。我反复修改着每一个措辞,生怕哪个词用得不够专业,生怕哪个经历写得不够亮眼。那时候的我,还相信简历上的每一个字都能决定我的命运。 周末,我抱着试试看的心态投了几份简历。没想到,命运给了我一个过于仓促的回应——面试通知来得太快,offer来得太容易。我甚至来不及思考这份工作究竟意味着什么,就已经被”软件开发实习生”这个头衔冲昏了头脑。我告诉自己,这就是我想要的生活,忙碌、充...
ConcurrentHashMap详解
ConcurrentHashMap详解概述ConcurrentHashMap是线程安全的HashMap,通过分段锁实现高效的并发访问。 HashMap vs ConcurrentHashMap HashMap:非线程安全,性能高 ConcurrentHashMap:线程安全,通过分段锁/Node级锁实现 JDK1.7 - 分段锁设计 结构:Segment数组 + HashEntry链表 默认16个Segment,多线程可同时访问不同Segment 优点:并发度高 缺点:获取size()需遍历所有Segment JDK1.8+ - CAS+Synchronized 结构:Node数组 + 红黑树 + CAS 只对单个Node加锁,粒度更细 CAS无锁操作性能更高 支持红黑树优化查询性能 put方法逻辑计算hash值 → 定位Node → Node为空CAS插入 → Node存在synchronized加锁 → 链表/树操作 常见问题Q: ConcurrentHashMap是否完全线程安全?A: 单个操作线程安全,但复合操作需要外部同步 Q: 为什么使用vo...
String字符串与常量池详解
String字符串与常量池详解概述String是Java中最重要的类,掌握其内存机制对于优化和避免常见陷阱至关重要。 String创建方式字面量方式123String s1 = "hello";String s2 = "hello";System.out.println(s1 == s2); // true new方式String s3 = new String(“hello”);String s4 = new String(“hello”);System.out.println(s3 == s4); // false 连接方式String s5 = “hello” + “world”; // 编译期优化String s6 = new String(“hello”) + new String(“world”); // 堆内存 常量池位置演变 JDK < 1.7:PermGen(方法区) JDK 1.7:堆内存 JD...
Java HashMap 底层实现原理详解
HashMap 底层实现原理详解一、数据结构HashMap 基于 数组 + 链表 + 红黑树 的数据结构实现: 数组:存储 Node 对象的数组,初始容量为 16 链表:当哈希冲突时,使用链表存储多个 Node 红黑树:链表长度 > 8 时,链表转换为红黑树(JDK 1.8+) 二、关键参数 参数 说明 capacity 容量,默认16,必须是2的幂次方 loadFactor 负载因子,默认0.75 threshold 扩容阈值 = capacity × loadFactor size 当前存储的键值对个数 三、哈希冲突解决链地址法: 计算 hash 值:hash = key.hashCode() ^ (key.hashCode() >>> 16) 计算桶位置:index = (n - 1) & hash(n为容量) 相同 index 的元素形成链表 四、常见问题Q:为什么容量必须是2的幂次方? 使用 & 运算效率高于 % 运算 保证 (n - 1) & hash 的结果均匀分布 Q:...
JVM内存结构详解
JVM内存结构详解概述JVM内存结构分为五个部分:堆、栈、方法区、程序计数器和本地方法栈。 核心内存区域堆(Heap) 线程共享,GC管理 存储所有对象实例 通过 -Xms、-Xmx 调整大小 栈(JVM Stack) 线程私有 存储局部变量、操作数栈 通过 -Xss 调整大小 方法区(Method Area) 线程共享 存储类信息、常量、静态变量 JDK8+为MetaSpace 常见问题Q: String s=”abc” 存在哪里?A: 常量池(方法区) Q: 栈和堆的区别?A: 栈线程私有速度快,堆线程共享需要GC Q: 创建对象的内存分配流程?A: new对象 → 堆中分配 → 初始化 → 栈中引用指向
线程池详解
线程池详解概述线程池是管理一组工作线程的机制,避免频繁创建销毁线程的开销。 核心参数ThreadPoolExecutor七大参数 corePoolSize:核心线程数 maximumPoolSize:最大线程数 keepAliveTime:非核心线程空闲超时时间 unit:时间单位 workQueue:任务队列 threadFactory:线程工厂 handler:拒绝策略 工作流程提交任务 → 核心线程数未满?→ 创建核心线程 → 队列未满? → 加入队列 → 线程数未满? → 创建非核心线程 → 执行拒绝策略 拒绝策略 AbortPolicy:抛出异常(默认) CallerRunsPolicy:调用线程执行任务 DiscardPolicy:直接丢弃 DiscardOldestPolicy:丢弃最老任务,加入新任务 线程池大小选择 CPU密集型:线程数 = CPU核心数 + 1 IO密集型:线程数 = CPU核心数 × (1 + IO等待比) 常见问题Q: 为什么先填满队列再创建非核心线程?A: 减少线程数,降低线程切换开销和内存占用 Q: keepA...
垃圾回收算法详解
垃圾回收算法详解概述垃圾回收是JVM自动管理内存的机制,主要有四种算法。 核心算法标记-清除(Mark-Sweep) 分两阶段:标记可达对象、清除未标记对象 优点:算法简单 缺点:产生内存碎片 复制算法(Copying) 内存分为两个等大小区域,存活对象复制到另一个区域 优点:无内存碎片 缺点:浪费一半内存,适用于新生代 标记-整理(Mark-Compact) 标记可达对象,将存活对象压缩到一端 优点:无碎片,内存利用率高 缺点:算法复杂,需要移动对象 分代收集(Generational Collection) 新 代用复制算法,老年代用标记-整理算法 基于假设:新生对象易死,老年对象难死 常见问题Q: 为什么新生代用复制,老年代用标记-整理?A: 新生代对象存活率低适合复制,老年代存活率高不浪费空间 Q: 什么是GC停顿?A: GC运行时JVM暂停所有用户线程(Stop The World) Q: 如何减少GC停顿时间?A: 使用低延迟收集器如G1GC、ZGC
Java 开发者如何转型 Agent 开发
Java 开发者如何转型 Agent 开发一、什么是 Agent 开发Agent 开发是构建能够自主感知环境、做出决策并执行任务的智能系统。与传统软件按固定逻辑运行不同,Agent 具备动态推理能力,能根据上下文灵活调整行为。 一个典型 Agent 包含四个核心能力:规划拆解复杂任务、调用外部工具获取信息、记忆历史交互上下文、以及最终执行具体动作。这种架构让 Agent 不再只是被动回答问题,而是能主动完成目标。 二、与传统 Java 开发的区别传统 Java 开发遵循明确的输入输出逻辑,业务规则由代码硬编码,系统行为完全可控但缺乏弹性。Agent 开发则引入不确定性,系统通过大模型推理决策,行为随上下文变化,需要设计容错和兜底机制。 开发重心也从编写业务逻辑转向设计提示词、编排工具链和管理 Agent 状态。调试方式随之改变,需要观察推理过程而非仅看最终结果。 三、必备技术栈框架层Spring AI 是 Spring 生态的 LLM 抽象框架,提供统一 API 对接各类大模型。LangChain4j 是 Java 版的 LangChain,专注 Agent 编排和链式调用。Se...
我的第一篇博客
日记这是我的第一篇博客 也算是日记吧 整个博客部署上线很快也很简单
Hello World
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub. Quick StartCreate a new post1$ hexo new "My New Post" More info: Writing Run server1$ hexo server More info: Server Generate static files1$ hexo generate More info: Generating Deploy to remote sites1$ hexo deploy More info: Deployment
