<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[SBnG56ts6的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/SBnG56ts6</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; SBnG56ts6]]></copyright><item><title><![CDATA[再谈团队，项目，产品]]></title><link>https://blog.youkuaiyun.com/SBnG56ts6/article/details/162605758</link><guid>https://blog.youkuaiyun.com/SBnG56ts6/article/details/162605758</guid><author>SBnG56ts6</author><pubDate>Sun, 05 Jul 2026 14:47:04 +0800</pubDate><description><![CDATA[作为最终保障，更多的价值在于最终产品质量保障，对于产品代码状况，设计质量无法涉及，而代码作为最终产出，其质量直接关系产品质量，性能等，应该有充分的测试保障，核心代码的白盒/单元测试，系统集成测试，以及最重要的对于业务设计的测试都不可或缺，测试驱动是一个可参考的实践，业界对于TDD评价颇高，可惜笔者目前未有实践机会。往往分层架构会导致有些业务处理出现在不合适的位置，比如向UI层渗透，或领域服务暴露不当等，理想状况应该做到领域层的平台无关性，当然这是理想化，笔者认为领域可测试性，业务可验收性是最为重要的。]]></description><category></category></item><item><title><![CDATA[ VS2010 中 ASP.NET MVC2 网站编译任务的几个问题]]></title><link>https://blog.youkuaiyun.com/SBnG56ts6/article/details/162605739</link><guid>https://blog.youkuaiyun.com/SBnG56ts6/article/details/162605739</guid><author>SBnG56ts6</author><pubDate>Sun, 05 Jul 2026 14:46:17 +0800</pubDate><description><![CDATA[使用它可以自动化处理设置正确的 ToolPath 路径，并且将发布和打包的 ASP.NET MVC2 的网站应用程序输出到一个相邻的文件夹，使你在发布之后不会得到创建错误，如果需要的话，它还提供了众多的配置选项供你选择，即使直接使用它，在不需要修改项目文件的情况下，也是一个理想的创建 ASP.NET MVC2 程序的解决方案。由于这个选项延后了编译任务，所以，这就是你可以在页面文件存在错误的情况下调试代码程序，而不会看到错误，直到页面的时候才会出现错误的原因。继续往下看这个文件，你会看到下面的一段。]]></description><category></category></item><item><title><![CDATA[Programming.log - a place to keep my thoughts on programming]]></title><link>https://blog.youkuaiyun.com/SBnG56ts6/article/details/162581557</link><guid>https://blog.youkuaiyun.com/SBnG56ts6/article/details/162581557</guid><author>SBnG56ts6</author><pubDate>Sat, 04 Jul 2026 14:52:33 +0800</pubDate><description><![CDATA[程序员的百宝箱中可供选择的宝贝是越来多了，而社区中关于语言间的比较和争论也更为热烈，我们常常见到关于“面向过程和面向对象的比较”、“动态语言和静态语言的比较”、“命令式和函数式范式的比较”等比较。例如，在基于Socket连接的分布式系统中服务器端和客户端通过二进制的字节数据进行通信，通信双方只要事先定义共用的结构体，发送方先创建相应的结构体变量并填充字段，然后把变量对应的内存块copy到Socket，接收方从Socket读取字节块，然后把字节块强制类型转换为相应的结构体指针即可读取个字段信息。]]></description><category></category></item><item><title><![CDATA[横刀天笑的碎碎念]]></title><link>https://blog.youkuaiyun.com/SBnG56ts6/article/details/162581496</link><guid>https://blog.youkuaiyun.com/SBnG56ts6/article/details/162581496</guid><author>SBnG56ts6</author><pubDate>Sat, 04 Jul 2026 14:49:39 +0800</pubDate><description><![CDATA[我原来是使用C#语言的，和现在的Java语言相比，现在的Java语言语法就停留在C# 2.0这个年代。语法结构都非常传统，中规中矩。很突出的一点是，因为缺少对闭包的支持，有些用C#很容易做到的，用Java需要写很多废话代码。前几天InfoQ上发表了一篇英国卫报逐步采用Scala替换Java的文章里一句话用的很好：看Java的代码很容易让你只见树木，不见森林。因为为了实现某个功能，你需要太多的支撑代码，而实现功能的关键代码却迷失了。举个例子：我需要一个排好序的用户列表，排序的依据是用户名字。]]></description><category></category></item><item><title><![CDATA[程序集是什么]]></title><link>https://blog.youkuaiyun.com/SBnG56ts6/article/details/162557223</link><guid>https://blog.youkuaiyun.com/SBnG56ts6/article/details/162557223</guid><author>SBnG56ts6</author><pubDate>Fri, 03 Jul 2026 17:24:53 +0800</pubDate><description><![CDATA[Windows文件首部（知道有这么一个东西就行）：就是告诉windows操作系统，本应用程序是ASP.NET 还是Winform还是控制台应用程序。那怎么查文件首部信息呢？打开VS的命令行工具 然后输入CLR 首部信息：运行于.NET 的程序都是需要这个标志哦！]]></description><category></category></item><item><title><![CDATA[DDD社区官网上一篇关于聚合设计的几个原则的简单讨论：]]></title><link>https://blog.youkuaiyun.com/SBnG56ts6/article/details/162557200</link><guid>https://blog.youkuaiyun.com/SBnG56ts6/article/details/162557200</guid><author>SBnG56ts6</author><pubDate>Fri, 03 Jul 2026 17:23:53 +0800</pubDate><description><![CDATA[上面这几条原则，作者通过一个例子来逐步阐述。下面我按照我的理解对每个原则做一个简单的描述。]]></description><category></category></item><item><title><![CDATA[关于分布式锁原理的一些学习与思考-redis分布式锁，zookeeper分布式锁]]></title><link>https://blog.youkuaiyun.com/SBnG56ts6/article/details/162528221</link><guid>https://blog.youkuaiyun.com/SBnG56ts6/article/details/162528221</guid><author>SBnG56ts6</author><pubDate>Thu, 02 Jul 2026 21:16:26 +0800</pubDate><description><![CDATA[这些请求编号1,2不代表执行的先后顺序，正式的场景下，应该是 100台服务器每个服务器持有一个请求去访问负责管理红包的妹子（服务），那在管红包的妹子那里同时会接收到100个请求，这个时候就需要在负责红包的妹子那里加个锁就可以了（抛绣球），你们100个服务器谁拿到锁（抢到绣球），谁就进来和我谈，我给你分，其他人就等着去吧。但是这块有一个问题，也就是，不光你服务器2可能会发现服务器1超时了，服务器3也可能会发现，如果刚好，服务器2，setnx操作完成，服务器3就接着删除，是不是服务器3也可以setnx成功了？]]></description><category></category></item><item><title><![CDATA[迄今为止把同步/异步/阻塞/非阻塞/BIO/NIO/AIO讲的这么清楚的好文章（快快珍藏）]]></title><link>https://blog.youkuaiyun.com/SBnG56ts6/article/details/162528210</link><guid>https://blog.youkuaiyun.com/SBnG56ts6/article/details/162528210</guid><author>SBnG56ts6</author><pubDate>Thu, 02 Jul 2026 21:15:44 +0800</pubDate><description><![CDATA[在计算机里，是没有人这么灵活的，一般在阻塞时，选在干等，因为这最容易实现，只需要挂起线程，让出CPU即可。注：一定要去体会“多个事物”，多个线程是多个事物，多个方法是多个事物，多个语句是多个事物，多个CPU指令是多个事物。因此，可以认为，同步更希望关注的是从宏观整体来看，多个事物是一种逐个逐个的串行化关系，绝对不会出现交叉的情况。只是有些人素质太差，非要往上挤，售票大厅迫不得已，采用排队这种形式来达到自己的目的，即一个一个的买票。所以IO就包括两个过程，一个是等待数据的过程，一个是读写（拷贝）数据的过程。]]></description><category></category></item><item><title><![CDATA[我老大写Bug啦——记一次MessageQueue的优化]]></title><link>https://blog.youkuaiyun.com/SBnG56ts6/article/details/162492036</link><guid>https://blog.youkuaiyun.com/SBnG56ts6/article/details/162492036</guid><author>SBnG56ts6</author><pubDate>Wed, 01 Jul 2026 16:35:03 +0800</pubDate><description><![CDATA[MessageQueue，顾名思义消息队列，在系统开发中也是用的比较多的一个中间件吧。我们这里主要用它来做日志管理和订单管理的，记得老老大（恩，是的，就是老老大，因为他已经跳槽了）还在的时候，当时也是为了赶项目进度，他也参与开发了，那时候我才刚刚入职，他负责写后端这块，我来了就把他手上的任务接过来了，（接着接着……就辞职了）。之后我们的开发仍然有条不紊的开发着，直到今年的一月份吧，才上线开始运行，然后就出现了常规状态，上线之后就开始爆炸，]]></description><category></category></item><item><title><![CDATA[分布式系统关注点(8)——99%的人都能看懂的「熔断」以及最佳实践]]></title><link>https://blog.youkuaiyun.com/SBnG56ts6/article/details/162492017</link><guid>https://blog.youkuaiyun.com/SBnG56ts6/article/details/162492017</guid><author>SBnG56ts6</author><pubDate>Wed, 01 Jul 2026 16:34:16 +0800</pubDate><description><![CDATA[举个夸张的例子来形容：一幢楼的下水管是从最高楼直通到最低楼的，这个时候如果你家楼下的管道口堵住了，那么所有楼上的污水就会倒灌到你家。但是，由于分布式系统被建立在一个并不是100%可靠的网络上，所以上述的情况总有发生，因此我们不能将偶发的瞬时异常等同于系统“不可用”（避免以偏概全）。一旦通过了衡量是否“可用”的验证，整个系统就恢复到了“正常”状态，此时需要重新开启识别“不可用”的策略。切断联系要尽可能的“果断”，既然已经认定了对方“不可用”，那么索性就默认“失败”，避免做无用功，也顺带能缓解对方的压力。]]></description><category></category></item><item><title><![CDATA[​今天我们一起来聊一聊 JVM 堆内存。]]></title><link>https://blog.youkuaiyun.com/SBnG56ts6/article/details/162454877</link><guid>https://blog.youkuaiyun.com/SBnG56ts6/article/details/162454877</guid><author>SBnG56ts6</author><pubDate>Tue, 30 Jun 2026 15:11:00 +0800</pubDate><description><![CDATA[都会优先分配到 Eden 区（除非是超大对象直接进入老年代）。（伊甸园区）：新对象的 "默认出生地"，（幸存者区0，占新生代。（幸存者区1，占新生代。（伊甸园区，占新生代。]]></description><category></category></item><item><title><![CDATA[shared_future]]></title><link>https://blog.youkuaiyun.com/SBnG56ts6/article/details/162454803</link><guid>https://blog.youkuaiyun.com/SBnG56ts6/article/details/162454803</guid><author>SBnG56ts6</author><pubDate>Tue, 30 Jun 2026 15:10:01 +0800</pubDate><description><![CDATA[可以使用shared_futureget()：与不同，的get()可多次调用：多个线程可同时调用get()，但返回引用类型时要小心数据竞争：异常会被存储，每次get()都会重新抛出：共享状态由所有副本共同管理，最后一个副本销毁时释放资源：复制操作只增加引用计数，适合传递到多个线程：尽量返回值类型而非引用类型，避免悬挂引用：使用前检查valid()，避免操作空的get()提供语义，确保结果可见性。]]></description><category></category></item><item><title><![CDATA[Python列表去重的20种实现方式]]></title><link>https://blog.youkuaiyun.com/SBnG56ts6/article/details/162423770</link><guid>https://blog.youkuaiyun.com/SBnG56ts6/article/details/162423770</guid><author>SBnG56ts6</author><pubDate>Mon, 29 Jun 2026 15:33:07 +0800</pubDate><description><![CDATA[列表（数组）去重是最常见的算法，非常简单，但不同实现方式背后的差异巨大。AI时代，可以不手写代码了，但需要知道代码背后的原理，这样才能更好地指导AI编程。]]></description><category></category></item><item><title><![CDATA[泡泡玛特LABUBU冰箱的炒作现象经济学解读]]></title><link>https://blog.youkuaiyun.com/SBnG56ts6/article/details/162423753</link><guid>https://blog.youkuaiyun.com/SBnG56ts6/article/details/162423753</guid><author>SBnG56ts6</author><pubDate>Mon, 29 Jun 2026 15:32:22 +0800</pubDate><description><![CDATA[本例中999台供给 vs 数万IP粉丝需求 → 理论溢价空间达16倍。泡泡玛特LABUBU冰箱的炒作现象可从三大经济学原理深度解读。]]></description><category></category></item><item><title><![CDATA[​完整代码：#​]]></title><link>https://blog.youkuaiyun.com/SBnG56ts6/article/details/162394547</link><guid>https://blog.youkuaiyun.com/SBnG56ts6/article/details/162394547</guid><author>SBnG56ts6</author><pubDate>Sun, 28 Jun 2026 15:43:17 +0800</pubDate><description><![CDATA[【代码】​完整代码：#​。]]></description><category></category></item><item><title><![CDATA[. 问题背景与现象]]></title><link>https://blog.youkuaiyun.com/SBnG56ts6/article/details/162394537</link><guid>https://blog.youkuaiyun.com/SBnG56ts6/article/details/162394537</guid><author>SBnG56ts6</author><pubDate>Sun, 28 Jun 2026 15:42:20 +0800</pubDate><description><![CDATA[在近期开发 AR 程序时，受限于公司测试设备的匮乏，笔者只能使用一台多年前的旧机型 Huawei P30 进行真机调试。相比之下，我个人的 vivo X Fold5 在 AR 能力上远不及这台 P30（新不如旧，原因未知），因此它成为了本次适配的核心测试机。值得一提的是，这台 Huawei P30 已升级至鸿蒙系统。理论上，由于众所周知的历史原因，鸿蒙设备无法安装谷歌的 ARCore 框架。但诡异的是，这台早期机型却成功安装了该框架。]]></description><category></category></item><item><title><![CDATA[在影子里验证比较对象：随机指纹和哈希的数学原理]]></title><link>https://blog.youkuaiyun.com/SBnG56ts6/article/details/162372311</link><guid>https://blog.youkuaiyun.com/SBnG56ts6/article/details/162372311</guid><author>SBnG56ts6</author><pubDate>Sat, 27 Jun 2026 17:24:44 +0800</pubDate><description><![CDATA[程序里经常会遇到一种看似朴素、实际很贵的问题：两个东西是不是一样？它可能是两个字符串、两个文件、两个集合、一段文本里的子串，或者三个矩阵是否满足 A⋅B=CA⋅B=C。如果对象本身很大，尤其是在对象需要跨机器通信、被反复比较、以流式方式到达，或者比较结果只需要高概率可靠时，直接逐个字节比较往往不是最想要的方案。随机指纹法处理的正是这类问题。它不试图完整保留对象，而是把对象映射成一个短得多的值，然后比较这些短值。这个短值可能丢失信息，所以它不是压缩意义上的可逆编码，而更像一个可快速比较的影子。]]></description><category></category></item><item><title><![CDATA[完整学习LLM(五):Embedding是什么,为什么文本能变成向量]]></title><link>https://blog.youkuaiyun.com/SBnG56ts6/article/details/162372301</link><guid>https://blog.youkuaiyun.com/SBnG56ts6/article/details/162372301</guid><author>SBnG56ts6</author><pubDate>Sat, 27 Jun 2026 17:24:05 +0800</pubDate><description><![CDATA[如果是专门做检索的 embedding 模型,它通常会把一段文本压成一个向量.比如 Word2Vec 论文里就强调,词向量可以从大量文本中学到词之间的关系.Embedding 要做的事情,就是让这种语义关系在数字空间里也能体现出来.它是通过训练,把语言里的统计关系和语义关系压到向量空间里.然后拿这个问题向量,去向量库里找最接近的文档向量.而语义检索背后的关键,就是 Embedding.真实的向量维度可能很高,不是二维图能画出来的.真实的 Embedding 是模型训练出来的.]]></description><category></category></item><item><title><![CDATA[AI Coding Agent 时代：代码越便宜，约束越贵]]></title><link>https://blog.youkuaiyun.com/SBnG56ts6/article/details/162309787</link><guid>https://blog.youkuaiyun.com/SBnG56ts6/article/details/162309787</guid><author>SBnG56ts6</author><pubDate>Thu, 25 Jun 2026 16:33:59 +0800</pubDate><description><![CDATA[今天Agent一次可以生成过去几天的工作量，如果前面没有足够清晰的边界和约束，技术债也会以同样的速度被放大。过去，一个功能从想法变成代码，最大的瓶颈往往是人力：谁来写、写多久、熟不熟悉框架、会不会踩API的坑。当代码生成的成本下降，真正变贵的是那些决定代码是否值得存在的东西：架构判断、模块边界、接口契约、不变量表达、测试体系、依赖规则、Review标准、上线后的反馈闭环。因为真正变便宜的，不是"软件"本身，而是代码文本的生成成本。写代码的人按回车键的频率变高了，但让代码变得可信的那些工作，并没有自动发生。]]></description><category></category></item><item><title><![CDATA[在AI时代，如何从0接手一个项目？]]></title><link>https://blog.youkuaiyun.com/SBnG56ts6/article/details/162309732</link><guid>https://blog.youkuaiyun.com/SBnG56ts6/article/details/162309732</guid><author>SBnG56ts6</author><pubDate>Thu, 25 Jun 2026 16:31:53 +0800</pubDate><description><![CDATA[AI推广普及之后，我们在网上见过最多的有关于AI编程的内容无非就两种，一种是“非专业背景如何氛围编程一个新项目”，另一种就是“我/别人氛围编程的项目产生了什么效果”。但其实还有第三种——锐评前两种。某些只有前端页面的网页根本不配称之为“项目”；就算你做出了完整的项目，你没办法盈利，你的商业模式不完整，甚至于没有。所以你的项目只能算个玩具。]]></description><category></category></item></channel></rss>