<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[wt_better的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/wt_better</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; wt_better]]></copyright><item><title><![CDATA[T& n、const T& n、T& const n]]></title><link>https://blog.youkuaiyun.com/wt_better/article/details/146983069</link><guid>https://blog.youkuaiyun.com/wt_better/article/details/146983069</guid><author>wt_better</author><pubDate>Thu, 03 Apr 2025 15:57:57 +0800</pubDate><description><![CDATA[声明方式能否修改对象可绑定的对象类型是否合法典型用途T& n✅ 是非 const 左值合法需要修改传入参数const T& n❌ 否任何对象（包括临时值）合法只读访问，避免拷贝T& const n非法无意义，编译器报错。]]></description><category></category></item><item><title><![CDATA[safepoint时间过长问题]]></title><link>https://blog.youkuaiyun.com/wt_better/article/details/145268474</link><guid>https://blog.youkuaiyun.com/wt_better/article/details/145268474</guid><author>wt_better</author><pubDate>Mon, 20 Jan 2025 19:55:52 +0800</pubDate><description><![CDATA[深入浅出解析JVM中的Safepoint
记一次Safepoint导致长时间STW]]></description><category></category></item><item><title><![CDATA[了解/proc/{pid}/目录]]></title><link>https://blog.youkuaiyun.com/wt_better/article/details/145261601</link><guid>https://blog.youkuaiyun.com/wt_better/article/details/145261601</guid><author>wt_better</author><pubDate>Mon, 20 Jan 2025 14:08:17 +0800</pubDate><description><![CDATA[在Linux系统中，每个运行中的进程在/proc/{pid}/目录下都有一些虚拟文件，用于提供进程的各种信息。]]></description><category></category></item><item><title><![CDATA[gpg: signing failed: Inappropriate ioctl for device 解决办法]]></title><link>https://blog.youkuaiyun.com/wt_better/article/details/145120007</link><guid>https://blog.youkuaiyun.com/wt_better/article/details/145120007</guid><author>wt_better</author><pubDate>Mon, 13 Jan 2025 17:22:47 +0800</pubDate><description><![CDATA[原因是 gpg 在当前终端无法弹出密码输入页面。重新执行，发现会弹出一个密码输入界面。]]></description><category></category></item><item><title><![CDATA[IOMMU PT]]></title><link>https://blog.youkuaiyun.com/wt_better/article/details/145040396</link><guid>https://blog.youkuaiyun.com/wt_better/article/details/145040396</guid><author>wt_better</author><pubDate>Thu, 09 Jan 2025 19:23:31 +0800</pubDate><description><![CDATA[IOMMU PT（Input/Output Memory Management Unit - Pass-Through）是一种技术，主要用于虚拟化环境中，特别是在使用直接设备分配（也称为设备直通）的情况下。这项技术允许虚拟机直接访问物理硬件，如网络适配器，不需要通过主机操作系统进行额外的数据传输层，从而提高性能并减少延迟。在没有IOMMU PT的情况下，当一个虚拟机尝试与外部设备通信时，数据通常需要先从虚拟机传递到宿主机的内存空间，然后由宿主机处理后再发送给目标设备。]]></description><category></category></item><item><title><![CDATA[DDR和HBM]]></title><link>https://blog.youkuaiyun.com/wt_better/article/details/144855973</link><guid>https://blog.youkuaiyun.com/wt_better/article/details/144855973</guid><author>wt_better</author><pubDate>Tue, 31 Dec 2024 19:17:34 +0800</pubDate><description><![CDATA[DDR RAM能够在时钟信号的上升沿和下降沿都进行数据传输，因此相对于传统的SDRAM（同步动态随机存取存储器），它的传输速率更高。DDR RAM有多个版本，如DDR、DDR2、DDR3、DDR4和DDR5，随着版本的提升，性能和带宽也在不断提高，同时功耗通常下降。HBM是一种高带宽、低功耗的内存技术，特别适合于需要高速数据传输的应用。HBM有多个版本，包括HBM1、HBM2和HBM2E等，随着技术的发展，带宽和容量持续提升。RAM是一种临时存储器，用于存储当前正在运行的程序和数据。]]></description><category></category></item><item><title><![CDATA[java string和string拼接的优化]]></title><link>https://blog.youkuaiyun.com/wt_better/article/details/144827846</link><guid>https://blog.youkuaiyun.com/wt_better/article/details/144827846</guid><author>wt_better</author><pubDate>Mon, 30 Dec 2024 15:42:43 +0800</pubDate><description><![CDATA[String对象实现的优化Java字符串拼接技术演进]]></description><category></category></item><item><title><![CDATA[golang运行某个类下所有的基准测试]]></title><link>https://blog.youkuaiyun.com/wt_better/article/details/143481189</link><guid>https://blog.youkuaiyun.com/wt_better/article/details/143481189</guid><author>wt_better</author><pubDate>Mon, 04 Nov 2024 12:09:30 +0800</pubDate><description><![CDATA[标识是基准测试，该参数是正则匹配，如果想要运行某个类中的所有Benchmark测试方法，指定。，同时指定后面的测试类，即可。]]></description><category></category></item><item><title><![CDATA[golang函数类型Function Types]]></title><link>https://blog.youkuaiyun.com/wt_better/article/details/143479663</link><guid>https://blog.youkuaiyun.com/wt_better/article/details/143479663</guid><author>wt_better</author><pubDate>Mon, 04 Nov 2024 11:19:58 +0800</pubDate><description><![CDATA[函数类型(function types)是一种特殊的类型，它表示着所有拥有同样的入参类型和返回值类型的函数集合。一个函数只要满足这些特征，那么它就可以通过如下方式将该函数转换成 HandlerFunc类型。充当了一个适配器的作用，适配http中的。参考http的实现，定义了一个。在http的实现中，函数类型。]]></description><category></category></item><item><title><![CDATA[cmake build debug 和 cmake build release]]></title><link>https://blog.youkuaiyun.com/wt_better/article/details/143438192</link><guid>https://blog.youkuaiyun.com/wt_better/article/details/143438192</guid><author>wt_better</author><pubDate>Fri, 01 Nov 2024 18:24:31 +0800</pubDate><description><![CDATA[编译器优化的目的是通过调整和改进生成的机器代码，来提高程序的运行效率和性能。在这些优化的情况下，最终生成的机器代码可能变得非常简化且高效。然而，虽然优化可以提升性能，但在调试时它可能导致代码行为和结构的变化，使得调试变得困难，因为优化可能导致代码行号不再准确匹配源代码，变量值可能被寄存器直接替代等。调试模式（Debug）下，这种做法是ok的，因为它保持了代码结构的简单性和可预测性，使得我们可以轻松设置断点和查看变量值。在没有编译器优化的情况下，编译器可能会直接生成相应的机器指令，逐步执行。]]></description><category></category></item><item><title><![CDATA[DAG和Steps]]></title><link>https://blog.youkuaiyun.com/wt_better/article/details/143183824</link><guid>https://blog.youkuaiyun.com/wt_better/article/details/143183824</guid><author>wt_better</author><pubDate>Wed, 23 Oct 2024 14:44:55 +0800</pubDate><description><![CDATA[最难适配的是steps里面的choice，下一步其实不是确定的（在dag里面next都是同一层级，允许并行），check时，choice左边的steps不能依赖右边的节点结果？运行时，动态删除右边dag的出边及其子边？在这个框架中，steps和DAG被视为不同的任务执行模型，框架会根据定义的模型来调度和执行任务。也称作状态机，通常指的是按顺序执行的一系列步骤，每个步骤可以是一个单一的任务或者一组并行执行的任务。在这种模型中，工作流的执行顺序通常是线性的，每个步骤的开始通常依赖于前一个步骤的完成。]]></description><category></category></item><item><title><![CDATA[Seata序列化优化]]></title><link>https://blog.youkuaiyun.com/wt_better/article/details/143083032</link><guid>https://blog.youkuaiyun.com/wt_better/article/details/143083032</guid><author>wt_better</author><pubDate>Sat, 19 Oct 2024 19:50:39 +0800</pubDate><description><![CDATA[我们细化到这个方法里面，发现是热点集中在异常初始化这里，跟进历史代码，发现是获取机制实现得有问题，先get request相关类，再response，resopnse类必然会走到异常的逻辑，在JAVA里面构造异常是一个耗时操作，所以导致整体吞吐的下降。同时这块存在NIO byteBuffer和netty的byteBuf混用的情况，也导致了比较多的无效拷贝，这块使用的地方比较多，后续也是一个优化的点。**优化效果：**优化完成后，通过上面的benchmark，seata反序列化的吞吐量提升7～10倍左右。]]></description><category></category></item><item><title><![CDATA[训练卡和推理卡]]></title><link>https://blog.youkuaiyun.com/wt_better/article/details/141643058</link><guid>https://blog.youkuaiyun.com/wt_better/article/details/141643058</guid><author>wt_better</author><pubDate>Wed, 28 Aug 2024 16:09:53 +0800</pubDate><description><![CDATA[总的来说，GPU训练卡和推理卡根据深度学习的不同阶段进行了针对性的优化，前者更注重计算能力和精度，后者则在保证一定精度的基础上，更强调效率、低延迟和能效比。：这是NVIDIA专为数据中心设计的高性能计算GPU，如Tesla V100、A100等，它们拥有大量的CUDA核心和高带宽内存（HBM），非常适合大规模的深度学习模型训练。：AMD的竞争产品，如Radeon Instinct MI25、MI50等，同样针对数据中心的计算密集型应用，提供高速的计算性能和大内存容量，支持深度学习训练。]]></description><category></category></item><item><title><![CDATA[Java定时任务缘起]]></title><link>https://blog.youkuaiyun.com/wt_better/article/details/141232822</link><guid>https://blog.youkuaiyun.com/wt_better/article/details/141232822</guid><author>wt_better</author><pubDate>Thu, 15 Aug 2024 22:40:26 +0800</pubDate><description><![CDATA[定时任务是现代应用开发一个常见需求。Java提供了多种机制来处理定时任务，从早期的java.util.Timer到现代的ScheduledThreadPoolExecutor，再到时间轮算法。本文将探讨这些机制演进背后的逻辑，以及对应的使用场景。]]></description><category></category></item><item><title><![CDATA[MAT使用]]></title><link>https://blog.youkuaiyun.com/wt_better/article/details/140642689</link><guid>https://blog.youkuaiyun.com/wt_better/article/details/140642689</guid><author>wt_better</author><pubDate>Tue, 23 Jul 2024 18:45:26 +0800</pubDate><description><![CDATA[Shallow Heap就是对象本身占用内存的大小。Retained Heap就是当前对象被GC后，从Heap上总共能释放掉的内存(表示如果一个对象被释放掉，那会因为该对象的释放而减少引用进而被释放的所有的对象（包括被递归释放的）所占用的heap大小)。]]></description><category></category></item><item><title><![CDATA[G1 和 CMS]]></title><link>https://blog.youkuaiyun.com/wt_better/article/details/140279444</link><guid>https://blog.youkuaiyun.com/wt_better/article/details/140279444</guid><author>wt_better</author><pubDate>Mon, 08 Jul 2024 22:06:00 +0800</pubDate><description><![CDATA[尽管CMS在很长一段时间内被广泛使用于对延迟敏感的服务，但随着G1垃圾收集器的发展和完善，CMS在JDK 9中已被废弃，并在JDK 14中完全移除，推荐使用G1或ZGC、Shenandoah等现代垃圾收集器作为替代。：除了基于IHOP的触发机制外，G1还会根据实际的内存分配速率和当前堆的使用情况动态调整，确保有足够的空闲空间来满足应用程序的内存需求，避免因为没有足够的空间分配对象而导致的Full GC。这意味着G1会定期检查堆的占用情况，一旦达到设定的阈值，就会触发一次收集以回收空间。]]></description><category></category></item><item><title><![CDATA[深度优先搜索和广度优先搜索 使用场景]]></title><link>https://blog.youkuaiyun.com/wt_better/article/details/140279086</link><guid>https://blog.youkuaiyun.com/wt_better/article/details/140279086</guid><author>wt_better</author><pubDate>Mon, 08 Jul 2024 21:32:52 +0800</pubDate><description><![CDATA[深度优先搜索（Depth-First Search, DFS）和广度优先搜索（Breadth-First Search, BFS）是图和树结构中常用的遍历算法。两者适用于不同的场景。]]></description><category></category></item><item><title><![CDATA[NIO的ByteBuffer和Netty的ByteBuf的性能]]></title><link>https://blog.youkuaiyun.com/wt_better/article/details/139155849</link><guid>https://blog.youkuaiyun.com/wt_better/article/details/139155849</guid><author>wt_better</author><pubDate>Thu, 23 May 2024 19:25:11 +0800</pubDate><description><![CDATA[在讨论Java NIO的ByteBuffer与Netty的ByteBuf的性能时，需要考虑几个主要的因素，因为性能表现并不是绝对的，而是依赖于具体的使用场景。Netty的ByteBuf设计更加现代，针对网络编程的需求进行了优化，包含了许多ByteBuffer不具备的特性，这些特性在许多情况下能提供更高的性能和更好的使用体验。]]></description><category></category></item><item><title><![CDATA[HBase到底是列式存储还是行式存储？]]></title><link>https://blog.youkuaiyun.com/wt_better/article/details/139144123</link><guid>https://blog.youkuaiyun.com/wt_better/article/details/139144123</guid><author>wt_better</author><pubDate>Thu, 23 May 2024 12:20:22 +0800</pubDate><description><![CDATA[在行存储的数据库系统中，一行中的所有字段值都是连续存储的；在基于行存储的表中，即使只需要读取指定列时，也需要先将对应行的数据读取到内存，再过滤目标列，这样会导致过多的磁盘IO、内存和时间开销，所以行式存储比较适用于每次需要访问完整行的场景。基于列的存储，是将列数据连续存储在一起。因为是将相同类型的数据存储在了一起，列存储通常能提供更好的压缩率，因为同一列的数据类型相同，数据特征更加相似。加速查询性能，特别对于只需要少量列的分析计算（如SUM、AVG、MIN、MAX）在列存储中非常高效。]]></description><category></category></item><item><title><![CDATA[神经网络激活函数]]></title><link>https://blog.youkuaiyun.com/wt_better/article/details/138856370</link><guid>https://blog.youkuaiyun.com/wt_better/article/details/138856370</guid><author>wt_better</author><pubDate>Tue, 14 May 2024 15:17:08 +0800</pubDate><description><![CDATA[在神经网络的上下文中，如果我们没有使用任何激活函数（也称为线性激活函数），则每个神经元的输出只是其输入的加权和，这是一个线性方程。如果不使用激活函数，无论我们的神经网络有多少层，所有层输出的仍然只能是输入的线性组合，这样的网络叫做线性模型，其表达能力非常有限。总结一下，乐高积木中的连接点（激活函数）是构建复杂模型的关键成分，正如神经网络中的激活函数是进行复杂任务的核心组件。允许反向传播：通过激活函数的导数，误差可以从网络的输出层反向传播到输入层，这对于基于梯度下降算法的网络训练是必要的。]]></description><category></category></item></channel></rss>