<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Ivy_0418的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Ivy_0418</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Ivy_0418]]></copyright><item><title><![CDATA[CSS 选择器的常见用法]]></title><link>https://blog.youkuaiyun.com/Ivy_0418/article/details/169651138</link><guid>https://blog.youkuaiyun.com/Ivy_0418/article/details/169651138</guid><author>Ivy_0418</author><pubDate>Sat, 31 Oct 2026 19:02:45 +0800</pubDate><description><![CDATA[分类选择器示例说明基础标签p选中所有 p 标签类.box选中 class 为 box 的元素ID#app选中 id 为 app 的元素（唯一）通配符选中所有元素关系后代div pdiv 内所有 p（含子孙）子代div > pdiv 的直接子元素 p相邻兄弟h1 + ph1 后面的第一个 p通用兄弟h1 ~ ph1 后面的所有 p属性等于属性值完全匹配包含属性值包含特定字符串状态伪类悬停:hover鼠标悬停状态结构第 n 个子元素排除排除某个选择器伪元素前后插内容::before。]]></description><category></category></item><item><title><![CDATA[深入理解 JVM 垃圾回收（GC）]]></title><link>https://blog.youkuaiyun.com/Ivy_0418/article/details/169564948</link><guid>https://blog.youkuaiyun.com/Ivy_0418/article/details/169564948</guid><author>Ivy_0418</author><pubDate>Fri, 30 Oct 2026 23:19:17 +0800</pubDate><description><![CDATA[垃圾回收是 JVM 最耀眼的明珠之一。为什么回收：防止内存泄漏和溢出，把程序员从内存管理中解放出来。回收哪里：重点是共享的堆（新生代/老年代）和方法区。怎么标记：采用可达性分析算法，从GC Roots向下搜索，不可达的即判死刑。怎么回收：实行分代收集。新生代存活率低，用复制算法老年代存活率高，用标记-清除/整理算法。谁来回收：从早期的单线程 Serial，到多线程的 Parallel，再到重低延迟的 CMS，最终进化到目前的王者 G1 收集器。]]></description><category></category></item><item><title><![CDATA[深入理解 Java 类加载机制与双亲委派模型]]></title><link>https://blog.youkuaiyun.com/Ivy_0418/article/details/169562892</link><guid>https://blog.youkuaiyun.com/Ivy_0418/article/details/169562892</guid><author>Ivy_0418</author><pubDate>Fri, 30 Oct 2026 20:06:03 +0800</pubDate><description><![CDATA[双亲委派模型要求除了顶层的启动类加载器外，其余的类加载器都应当有自己的父类加载器。当一个类加载器收到类加载的请求时，它不会自己先去尝试加载，而是把这个请求委派给父类加载器去完成。每一层都是如此。只有当父类加载器反馈自己无法完成这个加载请求时，子加载器才会尝试自己去加载。自定义类加载器(委派请求) ---> 应用程序类加载器(委派请求) ---> 扩展类加载器(委派请求) ---> 启动类加载器[找到] <---------------------------------- (尝试加载)]]></description><category></category></item><item><title><![CDATA[HTTPS 的加密流程]]></title><link>https://blog.youkuaiyun.com/Ivy_0418/article/details/169466603</link><guid>https://blog.youkuaiyun.com/Ivy_0418/article/details/169466603</guid><author>Ivy_0418</author><pubDate>Thu, 29 Oct 2026 23:39:02 +0800</pubDate><description><![CDATA[原理：通过单向散列函数（如 SHA-256），将任意长度的数据变成固定长度的摘要。数据变一点点，摘要就完全不同。作用：验证数据的完整性，防止被篡改。机制使用场景解决的问题对称加密实际的 HTTP 数据传输解决加密解密的性能问题非对称加密握手阶段加密传输 Pre-Master Secret解决对称密钥安全交换的问题数字证书验证服务器身份解决公钥被中间人调包的问题摘要算法计算随机数、校验报文保证数据的完整性。]]></description><category></category></item><item><title><![CDATA[HTTP 协议的基本格式和 fiddler 的用法]]></title><link>https://blog.youkuaiyun.com/Ivy_0418/article/details/169450432</link><guid>https://blog.youkuaiyun.com/Ivy_0418/article/details/169450432</guid><author>Ivy_0418</author><pubDate>Thu, 29 Oct 2026 12:17:03 +0800</pubDate><description><![CDATA[维度核心要点请求格式请求行（方法 + URI + 版本）+ 头部 + 空行 + 请求体响应格式状态行（版本 + 状态码 + 原因）+ 头部 + 空行 + 响应体头部规则键值对、冒号分隔、不区分大小写、慎用下划线Fiddler 定位本地代理，截获、查看、修改、重放 HTTP/HTTPS 流量必做配置信任根证书，开启 HTTPS 解密核心面板。]]></description><category></category></item><item><title><![CDATA[深入理解数据链路层：以太网、MAC 地址与交换机]]></title><link>https://blog.youkuaiyun.com/Ivy_0418/article/details/169366234</link><guid>https://blog.youkuaiyun.com/Ivy_0418/article/details/169366234</guid><author>Ivy_0418</author><pubDate>Wed, 28 Oct 2026 20:43:16 +0800</pubDate><description><![CDATA[MAC 地址（物理地址/硬件地址）：是烧录在网卡（NIC）上的全球唯一标识符。格式：长度为48 位（6 个字节），通常用十六进制表示，如。前 24 位是厂商识别码，后 24 位是厂商自行分配的序列号。广播 MAC 地址。当目的地址为全 F 时，局域网内的所有设备都会接收并处理该帧。IP 地址是逻辑地址，描述你所处的网络位置（像“小区门牌号”），会随着你连接不同网络而改变。MAC 地址是物理地址，标识你这台物理设备（像“身份证号”），不可更改。以帧为单位。]]></description><category></category></item><item><title><![CDATA[IP 协议的相关特性]]></title><link>https://blog.youkuaiyun.com/Ivy_0418/article/details/169365756</link><guid>https://blog.youkuaiyun.com/Ivy_0418/article/details/169365756</guid><author>Ivy_0418</author><pubDate>Wed, 28 Oct 2026 20:06:07 +0800</pubDate><description><![CDATA[数据链路层（如以太网）对帧的最大长度有限制，这个限制称为MTU（Maximum Transmission Unit，最大传输单元）。以太网的默认 MTU 是1500 字节。由于 IPv4 只有 32 位（约 43 亿个地址），早已分配殆尽。128 位地址：号称可以为地球上每一粒沙子分配一个 IP。简化首部：去掉了首部校验和，取消了分片（交由源端处理），提高了路由器转发效率。支持即插即用：无需 DHCP 即可自动配置。内置安全：强制支持 IPSec。IP 协议作为网络层的核心，是构建整个互联网的基石。]]></description><category></category></item><item><title><![CDATA[TCP 协议的相关特性]]></title><link>https://blog.youkuaiyun.com/Ivy_0418/article/details/169265991</link><guid>https://blog.youkuaiyun.com/Ivy_0418/article/details/169265991</guid><author>Ivy_0418</author><pubDate>Tue, 27 Oct 2026 18:28:31 +0800</pubDate><description><![CDATA[三次握手、四次挥手实现了安全的连接管理。序列号、确认应答、超时重传保证了可靠性。滑动窗口实现了流量控制，避免压垮接收方。慢启动、拥塞避免实现了拥塞控制，避免压垮网络。面向字节流的特性要求我们在应用层处理好粘包/拆包问题。深刻理解 TCP 的这些特性，不仅有助于应对面试，更是编写高性能、高可靠网络程序（如 RPC 框架、网关、消息队列）的基石。]]></description><category></category></item><item><title><![CDATA[UDP 报文结构与注意事项总结]]></title><link>https://blog.youkuaiyun.com/Ivy_0418/article/details/167702331</link><guid>https://blog.youkuaiyun.com/Ivy_0418/article/details/167702331</guid><author>Ivy_0418</author><pubDate>Mon, 12 Oct 2026 20:36:37 +0800</pubDate><description><![CDATA[UDP 是一种简单、高效的传输层协议，其报文结构固定为 8 字节首部，包含源端口、目的端口、长度和校验和。它无连接、不可靠、面向报文，适合实时性高、能容忍丢包的场景。应用层要自己处理丢包、重复、乱序。控制数据大小，避免 IP 分片。合理设置缓冲区，及时读取。了解校验和、端口、广播/多播等机制。在需要可靠性时，可基于 UDP 构建可靠协议（如 QUIC）。掌握 UDP 的报文结构和注意事项，有助于在实际开发中正确选择传输层协议，并编写出高效、稳定的网络程序。]]></description><category></category></item><item><title><![CDATA[计算机网络基础概念总结]]></title><link>https://blog.youkuaiyun.com/Ivy_0418/article/details/167177904</link><guid>https://blog.youkuaiyun.com/Ivy_0418/article/details/167177904</guid><author>Ivy_0418</author><pubDate>Tue, 06 Oct 2026 22:05:41 +0800</pubDate><description><![CDATA[概念核心要点IP 地址网络层逻辑地址，标识主机端口号传输层标识，区分应用进程协议通信规则，语法、语义、时序协议分层OSI 七层 / TCP/IP 四层，各司其职封装从上到下添加首部分用从下到上移除首部并分发客户端主动请求方服务器被动响应方请求/响应典型的通信交互模式通信流程封装 → 传输 → 分用，逐层处理理解这些基本概念，是深入学习网络编程、分布式系统和后端开发的基础。希望本文能帮助你建立清晰的网络知识框架。]]></description><category></category></item><item><title><![CDATA[Java IO 核心总结：File 类、字节流与字符流详解]]></title><link>https://blog.youkuaiyun.com/Ivy_0418/article/details/167040391</link><guid>https://blog.youkuaiyun.com/Ivy_0418/article/details/167040391</guid><author>Ivy_0418</author><pubDate>Sat, 03 Oct 2026 22:56:08 +0800</pubDate><description><![CDATA[类别核心类用途关键点文件抽象File描述文件或目录元信息对象存在不代表文件真实存在字节输入读取字节数据read()返回 -1 表示读完字节输出写入字节数据write()写入，flush()刷新字符输入Reader读取字符数据按行读取字符输出Writer写入字符数据换行转换流字节流转字符流可指定字符集，解决乱码资源管理自动关闭流避免资源泄漏掌握File、字节流、字符流的基本用法，是 Java 文件编程的基础。操作文件元信息使用File；读写二进制文件使用；读写文本文件使用。]]></description><category></category></item><item><title><![CDATA[Java IO、存储、硬盘与文件系统深度总结]]></title><link>https://blog.youkuaiyun.com/Ivy_0418/article/details/166945404</link><guid>https://blog.youkuaiyun.com/Ivy_0418/article/details/166945404</guid><author>Ivy_0418</author><pubDate>Thu, 01 Oct 2026 13:10:01 +0800</pubDate><description><![CDATA[维度核心知识点物理存储硬盘、盘片、磁道、持久化存储文件系统树形结构、目录、绝对/相对路径、文件类型、权限系统Java 抽象（元信息操作，不代表真实存在）字节 IO（按字节读写）字符 IOScanner（按字符读写）资源管理自动关闭流理解文件系统的底层逻辑，掌握 Java IO 的字节与字符流操作，能够帮助我们在实际开发中游刃有余地处理各类文件读写需求。无论是简单的配置文件读取，还是复杂的文件扫描与复制，都能写出高效、健壮的代码。]]></description><category></category></item><item><title><![CDATA[Java 锁策略、CAS 与 synchronized 优化过程总结]]></title><link>https://blog.youkuaiyun.com/Ivy_0418/article/details/166796483</link><guid>https://blog.youkuaiyun.com/Ivy_0418/article/details/166796483</guid><author>Ivy_0418</author><pubDate>Mon, 28 Sep 2026 23:59:36 +0800</pubDate><description><![CDATA[V：内存位置（变量的内存地址）A：预期原值B：新值当且仅当 V 的当前值等于 A 时，才将 V 更新为 B，否则不做任何操作。整个比较和交换是一个原子操作。V = B;锁策略核心思想优点缺点悲观锁先加锁再操作保证一致性并发度低乐观锁先操作再检查并发度高ABA 问题、自旋开销自旋锁循环重试避免线程切换消耗 CPU偏向锁记录线程 ID无竞争时开销极低竞争时需撤销轻量级锁CAS + 自旋竞争不激烈时性能好自旋失败会升级重量级锁操作系统互斥量。]]></description><category></category></item><item><title><![CDATA[Java 线程池总结]]></title><link>https://blog.youkuaiyun.com/Ivy_0418/article/details/166792441</link><guid>https://blog.youkuaiyun.com/Ivy_0418/article/details/166792441</guid><author>Ivy_0418</author><pubDate>Mon, 28 Sep 2026 18:04:25 +0800</pubDate><description><![CDATA[工作流程：核心线程 → 队列 → 非核心线程 → 拒绝策略。Executors提供了快捷创建线程池的方法，但存在资源耗尽风险。推荐手动创建，使用有界队列和合理的拒绝策略。根据任务类型（CPU 密集型、IO 密集型）合理设置线程数，通常 CPU 密集型设为CPU 核数 + 1，IO 密集型设为2 * CPU 核数或更多。合理使用线程池，能够显著提升系统性能和稳定性。]]></description><category></category></item><item><title><![CDATA[Java 死锁总结：原因、排查与预防]]></title><link>https://blog.youkuaiyun.com/Ivy_0418/article/details/166643896</link><guid>https://blog.youkuaiyun.com/Ivy_0418/article/details/166643896</guid><author>Ivy_0418</author><pubDate>Fri, 25 Sep 2026 15:10:41 +0800</pubDate><description><![CDATA[死锁指的是：两个或多个线程在执行过程中，因争夺资源而造成的一种互相等待的现象，若无外力干涉，它们都将无法推进下去。线程 A 持有锁 1，等待锁 2；线程 B 持有锁 2，等待锁 1；两者都在等待对方释放锁，结果谁也拿不到，程序永久卡死。场景说明加锁顺序不一致线程 A 先锁 1 再锁 2，线程 B 先锁 2 再锁 1嵌套锁持有锁 A 时请求锁 B，持有锁 B 时请求锁 A数据库事务两个事务互相等待对方持有的行锁线程池与任务依赖。]]></description><category></category></item><item><title><![CDATA[线程安全问题的原因和解决方案]]></title><link>https://blog.youkuaiyun.com/Ivy_0418/article/details/165892262</link><guid>https://blog.youkuaiyun.com/Ivy_0418/article/details/165892262</guid><author>Ivy_0418</author><pubDate>Sat, 19 Sep 2026 00:08:07 +0800</pubDate><description><![CDATA[线程安全可以简单理解为：当多个线程同时访问同一个对象或资源时，如果不需要额外的同步措施，程序仍然能够得到正确的结果，并且对象的状态保持一致，那么这个对象就是线程安全的。多个线程共享同一个可变状态；多个线程同时读写这个状态；没有正确的同步机制。线程安全问题的根源 = 共享可变状态 + 缺乏同步。多个线程共享了可变状态，并且没有正确同步。原子性：操作不可分割；可见性：一个线程的修改能被其他线程看到；有序性：指令执行顺序符合预期。不共享：无状态、局部变量、；final、不可变对象；]]></description><category></category></item><item><title><![CDATA[Java 线程的几种状态]]></title><link>https://blog.youkuaiyun.com/Ivy_0418/article/details/165886424</link><guid>https://blog.youkuaiyun.com/Ivy_0418/article/details/165886424</guid><author>Ivy_0418</author><pubDate>Fri, 18 Sep 2026 17:24:22 +0800</pubDate><description><![CDATA[NEWRUNNABLEBLOCKEDWAITINGTERMINATEDNEW是刚创建但未启动。RUNNABLE表示可运行，包含就绪和运行。BLOCKED表示等待锁。WAITING表示无限等待。表示限时等待。TERMINATED表示线程已经结束。理解线程状态以及它们之间的切换条件，有助于分析多线程程序的执行流程、死锁问题和性能问题。]]></description><category></category></item><item><title><![CDATA[Thread 类的基本用法]]></title><link>https://blog.youkuaiyun.com/Ivy_0418/article/details/165886267</link><guid>https://blog.youkuaiyun.com/Ivy_0418/article/details/165886267</guid><author>Ivy_0418</author><pubDate>Fri, 18 Sep 2026 17:18:55 +0800</pubDate><description><![CDATA[本文总结 Java Thread 类的基本用法，涵盖线程创建（继承 Thread 或实现 Runnable）、中断机制（interrupt()、isInterrupted()）、线程等待（join()）、休眠（sleep()）及获取线程实例。强调正确使用 start() 启动线程，通过协作式中断安全停止任务，利用 join() 等待线程结束，注意 sleep() 不释放锁且可能抛出 InterruptedException。示例展示线程状态查询与综合应用，帮助掌握并发编程基础。]]></description><category></category></item><item><title><![CDATA[进程与线程的区别和联系]]></title><link>https://blog.youkuaiyun.com/Ivy_0418/article/details/164854812</link><guid>https://blog.youkuaiyun.com/Ivy_0418/article/details/164854812</guid><author>Ivy_0418</author><pubDate>Thu, 10 Sep 2026 15:47:41 +0800</pubDate><description><![CDATA[进程和线程是操作系统中非常核心的概念，也是面试高频考点。很多人容易混淆两者。进程是资源分配的最小单位，线程是CPU调度的最小单位。本文结合操作系统底层原理，梳理进程、线程的概念、联系、区别，以及优缺点与使用场景。前置知识回顾进程：操作系统对运行中程序的抽象，程序的一次运行实例。操作系统以进程为单位分配内存、文件句柄等系统资源。PCB（进程控制块）：操作系统管理进程的数据结构，记录PID、内存映射、打开文件、信号、进程状态等信息。进程调度：单核CPU依靠时间片轮转，切换不同进程，实现宏观并发；]]></description><category></category></item><item><title><![CDATA[进程调度的基本过程总结]]></title><link>https://blog.youkuaiyun.com/Ivy_0418/article/details/164426978</link><guid>https://blog.youkuaiyun.com/Ivy_0418/article/details/164426978</guid><author>Ivy_0418</author><pubDate>Sun, 06 Sep 2026 13:24:42 +0800</pubDate><description><![CDATA[在现代操作系统中，同一台计算机可以同时运行大量应用程序，给用户造成“多个程序同时在CPU上并行运行”的错觉。但在单核CPU场景下，同一时刻CPU只能执行一条指令，只能运行一个进程。实现多程序“同时运行”的核心机制就是进程调度。本文基于计算机底层原理，梳理进程调度完整过程、相关概念与工作逻辑。进程：操作系统对正在运行程序的抽象，是程序的一次运行实例，也是操作系统资源分配的基本单位。PCB（进程控制块）：操作系统用来描述、管理进程的数据结构，保存进程PID、程序信息、占用资源、调度状态等全部信息；]]></description><category></category></item></channel></rss>