<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[xjd444的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/xjd444</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; xjd444]]></copyright><item><title><![CDATA[哈希code为什么是31]]></title><link>https://blog.youkuaiyun.com/xjd444/article/details/151764460</link><guid>https://blog.youkuaiyun.com/xjd444/article/details/151764460</guid><author>xjd444</author><pubDate>Tue, 16 Sep 2025 21:07:32 +0800</pubDate><description><![CDATA[66×321+66=66×32+6666×321+66=66×32+66 计算： 65×32+97=2080+97=217765×32+97=2080+97=2177 66×32+66=2112+66=217766×32+66=2112+66=2177 →。： 31=25−131=25−1 → 乘以31可转化为： hash×31=(hash≪5)−hashhash×31=(hash≪5)−hash （−1 的质数），此类质数在模运算中可进一步优化： x mod 31=(x & 31)]]></description><category></category></item><item><title><![CDATA[NIO BIO AIO]]></title><link>https://blog.youkuaiyun.com/xjd444/article/details/150398250</link><guid>https://blog.youkuaiyun.com/xjd444/article/details/150398250</guid><author>xjd444</author><pubDate>Thu, 14 Aug 2025 19:17:36 +0800</pubDate><description><![CDATA[三种IO的区别BIO(Blocking I/O) ：同步阻塞I/O模式 一个人只去厨房烧水且坐等烧水成功NIO(New I/O)：同步非阻塞模式 一个人只去厨房烧水且不定期来查看(轮询)AIO （Asynchronous I/O）：异步非阻塞 I/O 模型 一个人只去厨房烧水且去看电视且烧水成功之后有提醒// 使用 BIO 写入文件try {​bufferedWriter.write("学编程就上技术派");​System.out.println("写入完成");]]></description><category></category></item><item><title><![CDATA[现代Java I/O]]></title><link>https://blog.youkuaiyun.com/xjd444/article/details/149647935</link><guid>https://blog.youkuaiyun.com/xjd444/article/details/149647935</guid><author>xjd444</author><pubDate>Fri, 25 Jul 2025 20:25:32 +0800</pubDate><description><![CDATA[1.1 数据的两个世界：字节流与字符流在Java I/O的核心，“流”（Stream）是一个基础抽象，它代表了数据从一个源（Source）到目的地（Destination）的有序序列。]]></description><category></category></item><item><title><![CDATA[现代Java中Lambda表达式和方法引用的系统性分析]]></title><link>https://blog.youkuaiyun.com/xjd444/article/details/149583613</link><guid>https://blog.youkuaiyun.com/xjd444/article/details/149583613</guid><author>xjd444</author><pubDate>Wed, 23 Jul 2025 22:42:25 +0800</pubDate><description><![CDATA[编译器知道Comparator的compare方法有两个String参数，它会将第一个参数s1作为调用compareToIgnoreCase方法的对象，第二个参数s2作为该方法的参数。当一个Lambda表达式的主体仅仅是调用一个已经存在的方法，并且不进行任何其他操作时，就可以使用方法引用来代替，以达到极致的简洁和清晰。1.静态方法引用：当Lambda表达式的实现恰好是调用一个静态方法，并且Lambda的参数与该静态方法的参数列表完全匹配时，可以使用静态方法引用。：当抽象方法只有一个参数时，括号是可选的。]]></description><category></category></item><item><title><![CDATA[浅谈Builder的学习]]></title><link>https://blog.youkuaiyun.com/xjd444/article/details/148099753</link><guid>https://blog.youkuaiyun.com/xjd444/article/details/148099753</guid><author>xjd444</author><pubDate>Tue, 20 May 2025 22:06:04 +0800</pubDate><description><![CDATA[这是NyPizza中的代码，不要误以为this返回的不是子类类型了，这段代码也值得我目前阅读一下。pizza内部的静态抽象类Builder采用了泛型递归自引用（这也是今天学习最重要的部分，我是通过看效果才比较清楚的理解的）1.T是Builder的子类型  2.T又必须是Builder<T>的子类型——这样就创建了一个递归类型约束。抽象基类—不可变对象设计思想：final Set字段，构造器的防御性克隆，不提供setter方法。上述提到的NyPizza和Calzone只取NyPizza来分析。]]></description><category></category></item></channel></rss>