<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[魔筝炼药师]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/sinat_34715587</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; sinat_34715587]]></copyright><item><title><![CDATA[AI Agent 元年，于 2025 开启]]></title><link>https://blog.youkuaiyun.com/sinat_34715587/article/details/147340307</link><guid>https://blog.youkuaiyun.com/sinat_34715587/article/details/147340307</guid><author>sinat_34715587</author><pubDate>Fri, 18 Apr 2025 20:54:41 +0800</pubDate><description><![CDATA[AI Agent]]></description><category></category></item><item><title><![CDATA[MySQL 架构、索引优化、DDL解析、死锁排查]]></title><link>https://blog.youkuaiyun.com/sinat_34715587/article/details/146079162</link><guid>https://blog.youkuaiyun.com/sinat_34715587/article/details/146079162</guid><author>sinat_34715587</author><pubDate>Thu, 06 Mar 2025 20:09:33 +0800</pubDate><description><![CDATA[MySQL]]></description><category></category></item><item><title><![CDATA[消息队列架构、选型、专有名词解释]]></title><link>https://blog.youkuaiyun.com/sinat_34715587/article/details/144999060</link><guid>https://blog.youkuaiyun.com/sinat_34715587/article/details/144999060</guid><author>sinat_34715587</author><pubDate>Wed, 08 Jan 2025 09:03:50 +0800</pubDate><description><![CDATA[mq]]></description><category></category></item><item><title><![CDATA[Golang 八股（持续补充...）]]></title><link>https://blog.youkuaiyun.com/sinat_34715587/article/details/144268809</link><guid>https://blog.youkuaiyun.com/sinat_34715587/article/details/144268809</guid><author>sinat_34715587</author><pubDate>Thu, 05 Dec 2024 15:56:24 +0800</pubDate><description><![CDATA[Golang 常见问题]]></description><category></category></item><item><title><![CDATA[这就是AOP]]></title><link>https://blog.youkuaiyun.com/sinat_34715587/article/details/144250085</link><guid>https://blog.youkuaiyun.com/sinat_34715587/article/details/144250085</guid><author>sinat_34715587</author><pubDate>Wed, 04 Dec 2024 21:09:19 +0800</pubDate><description><![CDATA[举个例子，一个业务系统的很多模块都需要记录操作日志，这是一个能从业务逻辑中分离出来的横切关注点，完全不用交织在每个模块的代码中，可以作为一个单独的模块存在。AOP（Aspect Oriented Programming，面向切面编程）是一种编程范式，它的目的是通过分离横切关注点（cross-cutting concerns）来提升代码的模块化程度，AOP 的概念最早是由 Xerox PARC 提出的，它并非站在 OOP 的对立面，而是对 OOP 的一个很好的补充。，它定义了切面中能够采取的动作。]]></description><category></category></item><item><title><![CDATA[这就是IoC容器]]></title><link>https://blog.youkuaiyun.com/sinat_34715587/article/details/144249922</link><guid>https://blog.youkuaiyun.com/sinat_34715587/article/details/144249922</guid><author>sinat_34715587</author><pubDate>Wed, 04 Dec 2024 21:03:38 +0800</pubDate><description><![CDATA[IoC（Inversion of Control，控制反转），也叫依赖注入（Dependency Injection），是一种决定容器如何装配组件的模式。使用 Spring 来实现 IoC，意味着将设计好的对象交给 Spring 容器控制，而不是直接在对象内部控制。控制反转不能很好地描述这个模式，依赖注入却能更好地描述它的特点，所以才经常看到这两个词一同出现。只要遵循这种模式，按照一定规则，容器就能将组件组装起来。这里的容器就是用来创建组件并对它们进行管理的地方。]]></description><category></category></item><item><title><![CDATA[Spring 容器管理 Bean]]></title><link>https://blog.youkuaiyun.com/sinat_34715587/article/details/144249505</link><guid>https://blog.youkuaiyun.com/sinat_34715587/article/details/144249505</guid><author>sinat_34715587</author><pubDate>Wed, 04 Dec 2024 20:46:26 +0800</pubDate><description><![CDATA[Bean 是指 Java 中的可重用软件组件，容器会根据提供的元数据来创建和管理这些 Bean，也包括它们之间的依赖关系。Spring 容器对 Bean 并没有太多的要求，无须实现特定接口或依赖特定库，只要是最普通的 Java 对象即可，这类对象也被称为 POJO（Plain Old Java Object）。JavaBeans 是 Java 中一种特殊的类，可以将多个对象封装到一个对象（Bean）中。特点是可序列化，提供无参构造器，提供 Getter 方法和 Setter 方法访问对象的属性。]]></description><category></category></item><item><title><![CDATA[Spring入园须知]]></title><link>https://blog.youkuaiyun.com/sinat_34715587/article/details/144226245</link><guid>https://blog.youkuaiyun.com/sinat_34715587/article/details/144226245</guid><author>sinat_34715587</author><pubDate>Tue, 03 Dec 2024 23:40:59 +0800</pubDate><description><![CDATA[这不是 Java 的黑历史，而是 Java 的来时路]]></description><category></category></item><item><title><![CDATA[Java注解原理]]></title><link>https://blog.youkuaiyun.com/sinat_34715587/article/details/144209199</link><guid>https://blog.youkuaiyun.com/sinat_34715587/article/details/144209199</guid><author>sinat_34715587</author><pubDate>Tue, 03 Dec 2024 11:59:09 +0800</pubDate><description><![CDATA[典型的就是 @Override 注解，一旦编译器检测到某个方法被 @Override 注解修饰了，编译器就会检查当前方法的方法签名是否真正重写了父类的某个方法，也就是比较父类中是否具有一个同样的方法签名。这种情况只适用于那些编译器已经熟知的注解类，比如 JDK 内置的几个注解，而自定义的注解，编译器是不知道注解作用的，当然也不知道该如何处理，往往只是会根据该注解的作用范围来选择是否编译进字节码文件。注解可以提供更大的便捷性，易于维护修改，但耦合度高，XML 相对于注解则是相反的。]]></description><category></category></item><item><title><![CDATA[Java 泛型]]></title><link>https://blog.youkuaiyun.com/sinat_34715587/article/details/144172568</link><guid>https://blog.youkuaiyun.com/sinat_34715587/article/details/144172568</guid><author>sinat_34715587</author><pubDate>Sun, 01 Dec 2024 18:16:27 +0800</pubDate><description><![CDATA[擦除时使用 Object 或者界定类型替代泛型，同时在要调用具体类型方法或者成员变量时插入强转代码，为了保证多态特性，Java 编译器还会为泛型类的子类生成桥接方法。Java泛型是一种类型参数化范式，有三种表现形式（分别是泛型方法，泛型类，泛型接口），允许开发者使用类型参数替代明确类型，实例化时再指明具体类型，达到了代码重用的目的，类似 C++ 模板的概念，但 Java 泛型是一种伪泛型。Java 编译器对泛型应用了强大的类型检测，如果代码违反了类型安全就会报错，可以在编译时暴露大多数泛型的编码错误。]]></description><category></category></item><item><title><![CDATA[反射和动态代理]]></title><link>https://blog.youkuaiyun.com/sinat_34715587/article/details/144169815</link><guid>https://blog.youkuaiyun.com/sinat_34715587/article/details/144169815</guid><author>sinat_34715587</author><pubDate>Sun, 01 Dec 2024 17:35:49 +0800</pubDate><description><![CDATA[否则被认为是不合法操作。从性能角度看，有 benchmark 表示 JDK Proxy 比 cglib 或者 Javassist 慢几十倍，暂且先不谈具体 benchmark 细节，在主流 JDK 版本中，JDK Proxy 在典型场景可以提供对等的性能水平，数量级的差距基本上不是广泛存在的。在选型中，性能未必是唯一考量，可靠性、可维护性、编程工作量等往往是更主要的考虑因素，毕竟标准类库和反射编程的门槛要低得多，代码量也是更加可控的，如果比较下不同开源项目在动态代理开发上的投入，也能看到这一点。]]></description><category></category></item><item><title><![CDATA[Java OOP]]></title><link>https://blog.youkuaiyun.com/sinat_34715587/article/details/144165028</link><guid>https://blog.youkuaiyun.com/sinat_34715587/article/details/144165028</guid><author>sinat_34715587</author><pubDate>Sun, 01 Dec 2024 11:57:15 +0800</pubDate><description><![CDATA[Default method 提供了一种二进制兼容扩展已有接口的办法，比如 java.util.Collection，它是 collection 体系的 root interface，在 Java 8 中添加了一系列 default method，主要是增加 Lambda、Stream 相关的功能。是对行为的抽象，它是抽象方法的集合（声明性的），方法定义和实现分离。特别说明的一点，方法名称和参数一致，但返回值不同，不是有效的重载，这点Java和C++一致，编译都会报错。实践中过度滥用继承可能会起到反效果。]]></description><category></category></item><item><title><![CDATA[ConcurrentHashMap]]></title><link>https://blog.youkuaiyun.com/sinat_34715587/article/details/144145022</link><guid>https://blog.youkuaiyun.com/sinat_34715587/article/details/144145022</guid><author>sinat_34715587</author><pubDate>Fri, 29 Nov 2024 21:08:26 +0800</pubDate><description><![CDATA[初始化在 initTable 实现，这是一个典型的 CAS 使用场景，volatile 的 sizeCtl 作为互斥手段，如果发现竞争性的初始化，就 spin 在那里，等待条件恢复；数据一致性是怎么保证的？HashEntry内部使用 volatile 的 value 字段来保证可见性，也利用了不可变对象的机制改进利用 Unsafe 提供的底层能力（比如 volatile access）去直接完成部分操作，以最优化性能，毕竟 Unsafe 中的很多操作都是 JVM intrinsic 优化过的。]]></description><category></category></item><item><title><![CDATA[Java Map]]></title><link>https://blog.youkuaiyun.com/sinat_34715587/article/details/144141258</link><guid>https://blog.youkuaiyun.com/sinat_34715587/article/details/144141258</guid><author>sinat_34715587</author><pubDate>Fri, 29 Nov 2024 17:40:06 +0800</pubDate><description><![CDATA[这种行为适用于一些特定场景，比如构建一个空间占用敏感的资源池，希望可以自动将最不常被访问的对象释放掉，就可以利用LinkedHashMap提供的机制来实现。TreeMap则是基于红黑树的一种提供顺序访问的Map，和HashMap不同，它的get、put、remove操作都是O（log(n)）的时间复杂度，具体顺序可以由指定的Comparator来决定，或者根据键的自然顺序。大部分使用Map的场景，通常是放入、访问、删除，对顺序没有特别要求，HashMap在这种情况下基本是最好的选择。]]></description><category></category></item><item><title><![CDATA[Java Collection]]></title><link>https://blog.youkuaiyun.com/sinat_34715587/article/details/144139195</link><guid>https://blog.youkuaiyun.com/sinat_34715587/article/details/144139195</guid><author>sinat_34715587</author><pubDate>Fri, 29 Nov 2024 16:46:40 +0800</pubDate><description><![CDATA[它不需要考虑扩容，空间上更加紧凑等。Collection集合类都不是线程安全的，但并不代表这些集合完全不能支持并发编程的场景，在Collections工具类中提供了一系列的synchronized方法，但平常不推荐使用，同步控制粒度太大，不适合对性能要求较高的场景。Queue/Deque，Java提供的标准队列结构的实现，除了集合的基本功能，它还支持类似先入先出（FIFO， First-in-First-Out）或者后入先出（LIFO，Last-In-First-Out）等特定行为。]]></description><category></category></item><item><title><![CDATA[Java原始数据类型和包装类]]></title><link>https://blog.youkuaiyun.com/sinat_34715587/article/details/144133532</link><guid>https://blog.youkuaiyun.com/sinat_34715587/article/details/144133532</guid><author>sinat_34715587</author><pubDate>Fri, 29 Nov 2024 15:36:13 +0800</pubDate><description><![CDATA[对于应用移植，存在一些底层实现的差异，比如64位HotSpot JVM里的对象要比32位HotSpot JVM大（具体区别取决于不同JVM实现的选择），但总体来说并没有行为差异，应用移植还是可以做到“一次书写，到处执行”，开发者更多需要考虑的是容量、能力等方面的差异。Java对象是引用类型，内建了多态、线程安全等方面的支持，一个原始数据类型数组在内存里是一段连续的内存，而对象数组存储的是引用，对象分散地存储在堆的不同位置。各种转换方法（比如转换为不同进制的字符串，如8进制），或者反过来的解析方法等。]]></description><category></category></item><item><title><![CDATA[Java String设计思想]]></title><link>https://blog.youkuaiyun.com/sinat_34715587/article/details/144123276</link><guid>https://blog.youkuaiyun.com/sinat_34715587/article/details/144123276</guid><author>sinat_34715587</author><pubDate>Fri, 29 Nov 2024 00:38:04 +0800</pubDate><description><![CDATA[为了能修改字符序列，StringBuffer和StringBuilder底层都是利用可修改的（char，JDK 9以后是byte）数组，二者都继承了AbstractStringBuilder，里面包含了基本操作，区别仅在于最终的方法是否加了synchronized。在运行时，字符串的一些基础操作会直接利用JVM内部的Intrinsic机制，往往运行的就是特殊优化的本地代码，根本就不是Java代码生成的字节码。我们如果确定拼接会发生非常多次，而且大概是可预计的，就可以指定合适的大小，避免很多次扩容的开销。]]></description><category></category></item><item><title><![CDATA[聊聊Exception和Error]]></title><link>https://blog.youkuaiyun.com/sinat_34715587/article/details/144119706</link><guid>https://blog.youkuaiyun.com/sinat_34715587/article/details/144119706</guid><author>sinat_34715587</author><pubDate>Thu, 28 Nov 2024 21:10:55 +0800</pubDate><description><![CDATA[聊聊Exception和Error]]></description><category></category></item><item><title><![CDATA[搭建Java开发环境（MAC、IDEA）]]></title><link>https://blog.youkuaiyun.com/sinat_34715587/article/details/125523149</link><guid>https://blog.youkuaiyun.com/sinat_34715587/article/details/125523149</guid><author>sinat_34715587</author><pubDate>Wed, 29 Jun 2022 15:56:59 +0800</pubDate><description><![CDATA[不管三七二十一，先把需要的资源下载下来，然后挨个安装。IDEA：IntelliJ IDEA（ideaIU-2021.3.3-aarch64）JDK：Java Downloads | Oracle（jdk-8u333-macosx-x64）Maven：Maven – Download Apache Maven（apache-maven-3.8.6-bin）Git：Git - Downloads（git-2.33.0-intel-universal-mavericks）idea中application.prop]]></description><category></category></item><item><title><![CDATA[C/C++的标准演进及对应的编译器]]></title><link>https://blog.youkuaiyun.com/sinat_34715587/article/details/125092110</link><guid>https://blog.youkuaiyun.com/sinat_34715587/article/details/125092110</guid><author>sinat_34715587</author><pubDate>Wed, 01 Jun 2022 23:35:43 +0800</pubDate><description><![CDATA[因为区别很小，因此，C89和C90通常指同一种语言，与传统C语言K&R标准对比， ANSI/ISO标准C语言的改进了很多。在1999年，C语言的标准化委员会将不断改进的C语言， 收纳为新的标准，官方名称为 ISO/IEC 9899: 1999，简称为 C99 标准，严格上讲是C语言的第二个官方版本，C99 标准引入了许多特性。在1995年，对C89标准作了一个修订与补充，产生了一个C95标准，官方名称为：ISO/IEC 9899:1990/AMD 1:1995，但并不是一个真正的标准，主要改动如下，]]></description><category></category></item></channel></rss>