<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Brust’Blog</title>
        <link>https://tangly1024.com/</link>
        <description>布鲁斯特</description>
        <lastBuildDate>Thu, 25 Jul 2024 00:36:22 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en-US</language>
        <copyright>All rights reserved 2024, NotionNext</copyright>
        <item>
            <title><![CDATA[Bitwarden]]></title>
            <link>https://tangly1024.com/article/78138805-aa67-46f4-8353-f5b50ad2d3a1</link>
            <guid>https://tangly1024.com/article/78138805-aa67-46f4-8353-f5b50ad2d3a1</guid>
            <pubDate>Sat, 01 Oct 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[Bitwarden]]></description>
            <content:encoded><![CDATA[<div id="notion-article" class="mx-auto overflow-hidden "><main class="notion light-mode notion-page notion-block-78138805aa6746f48353f5b50ad2d3a1"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><div class="notion-text notion-block-3db6a1c81f174970ab48c9794ef14af5"><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://zhuanlan.zhihu.com/p/349524829">https://zhuanlan.zhihu.com/p/349524829</a></div><div class="notion-blank notion-block-a9644da1d91840389096fcf94c9d2e70"> </div></main></div>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[奇遇VR打卡300天]]></title>
            <link>https://tangly1024.com/article/b5134444-542d-4fb6-8a59-69474e33f7e0</link>
            <guid>https://tangly1024.com/article/b5134444-542d-4fb6-8a59-69474e33f7e0</guid>
            <pubDate>Wed, 04 Jan 2023 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<div id="notion-article" class="mx-auto overflow-hidden "><main class="notion light-mode notion-page notion-block-b5134444542d4fb68a5969474e33f7e0"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><div class="notion-text notion-block-b1d76465cb7941daaff29527453b276e">恭喜您完成了dream 累计300天打卡活动，相信您与奇遇度过了美好的300天时间。</div><div class="notion-text notion-block-2872b50c1419497db6dce5313a636751">不容易啊,总算打卡完成了</div></main></div>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[LeetCode刷题]]></title>
            <link>https://tangly1024.com/article/leetcode</link>
            <guid>https://tangly1024.com/article/leetcode</guid>
            <pubDate>Tue, 13 Dec 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[记录刷题代码]]></description>
            <content:encoded><![CDATA[<div id="notion-article" class="mx-auto overflow-hidden "><main class="notion light-mode notion-page notion-block-80a91611995f462f8ba34295a03b4b75"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><h4 class="notion-h notion-h3 notion-h-indent-0 notion-block-8d4a57a569b84fa3a56ac20bbea6b5b3" data-id="8d4a57a569b84fa3a56ac20bbea6b5b3"><span><div id="8d4a57a569b84fa3a56ac20bbea6b5b3" class="notion-header-anchor"></div><a class="notion-hash-link" href="#8d4a57a569b84fa3a56ac20bbea6b5b3" title="LeetCode-1. 两数之和"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title"><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://leetcode.cn/problems/two-sum/">LeetCode-1. 两数之和</a></span></span></h4><details class="notion-toggle notion-block-e58e6cf614be4482913f9a2c7f9eddf9"><summary>code1</summary><div></div></details><details class="notion-toggle notion-block-985c4639282c410d8c1c832a003f9da6"><summary>code2</summary><div></div></details><h4 class="notion-h notion-h3 notion-h-indent-0 notion-block-f4a2a83784a34d02a71cb192521ebbbd" data-id="f4a2a83784a34d02a71cb192521ebbbd"><span><div id="f4a2a83784a34d02a71cb192521ebbbd" class="notion-header-anchor"></div><a class="notion-hash-link" href="#f4a2a83784a34d02a71cb192521ebbbd" title="LeetCode-2. 两数相加"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title"><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://leetcode.cn/problems/add-two-numbers/">LeetCode-2. 两数相加</a></span></span></h4><details class="notion-toggle notion-block-8079399780e74b5da086fa1c48f4b2f2"><summary>code</summary><div></div></details><h4 class="notion-h notion-h3 notion-h-indent-0 notion-block-0ac55651be7e4ce19e12067a4b73ac4a" data-id="0ac55651be7e4ce19e12067a4b73ac4a"><span><div id="0ac55651be7e4ce19e12067a4b73ac4a" class="notion-header-anchor"></div><a class="notion-hash-link" href="#0ac55651be7e4ce19e12067a4b73ac4a" title="LeetCode-3. 无重复字符的最长子串"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title"><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://leetcode.cn/problems/longest-substring-without-repeating-characters/">LeetCode-3. 无重复字符的最长子串</a></span></span></h4><details class="notion-toggle notion-block-3e1ed07317ab442aa4fa19c1af90a217"><summary>code</summary><div></div></details><h4 class="notion-h notion-h3 notion-h-indent-0 notion-block-f959faa8af2c4b8b95d4d0e810953546" data-id="f959faa8af2c4b8b95d4d0e810953546"><span><div id="f959faa8af2c4b8b95d4d0e810953546" class="notion-header-anchor"></div><a class="notion-hash-link" href="#f959faa8af2c4b8b95d4d0e810953546" title="LeetCode-4. 寻找两个正序数组的中位数"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title"><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://leetcode.cn/problems/median-of-two-sorted-arrays/">LeetCode-4. 寻找两个正序数组的中位数</a></span></span></h4><details class="notion-toggle notion-block-5b0627aa742146c4b8ae2f2d97d318cb"><summary>code</summary><div></div></details><h4 class="notion-h notion-h3 notion-h-indent-0 notion-block-78f16be45e7b40369aba0828ac13f6f6" data-id="78f16be45e7b40369aba0828ac13f6f6"><span><div id="78f16be45e7b40369aba0828ac13f6f6" class="notion-header-anchor"></div><a class="notion-hash-link" href="#78f16be45e7b40369aba0828ac13f6f6" title="LeetCode-5. 最长回文子串"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title"><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://leetcode.cn/problems/longest-palindromic-substring/">LeetCode-5. 最长回文子串</a></span></span></h4><details class="notion-toggle notion-block-7c09378cb48c47ca9e6acb2e4f86daf3"><summary>code</summary><div><div class="notion-blank notion-block-fdcd1bea28374bc79377ae3b02c12df5"> </div></div></details><h4 class="notion-h notion-h3 notion-h-indent-0 notion-block-0410079623f043e9a6e29fb5d7c13fee" data-id="0410079623f043e9a6e29fb5d7c13fee"><span><div id="0410079623f043e9a6e29fb5d7c13fee" class="notion-header-anchor"></div><a class="notion-hash-link" href="#0410079623f043e9a6e29fb5d7c13fee" title="LeetCode-9. 回文数"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title"><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://leetcode.cn/problems/palindrome-number/">LeetCode-9. 回文数</a></span></span></h4><details class="notion-toggle notion-block-e411528ef07d4d6d91c4f539190354f4"><summary>code</summary><div><div class="notion-blank notion-block-fcd60326e3c54012b0adc8c207d2e9ea"> </div></div></details><h4 class="notion-h notion-h3 notion-h-indent-0 notion-block-c6f9510cf5f84161bd158bdde267d20f" data-id="c6f9510cf5f84161bd158bdde267d20f"><span><div id="c6f9510cf5f84161bd158bdde267d20f" class="notion-header-anchor"></div><a class="notion-hash-link" href="#c6f9510cf5f84161bd158bdde267d20f" title="LeetCode-15. 三数之和"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title"><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://leetcode.cn/problems/3sum/">LeetCode-15. 三数之和</a></span></span></h4><details class="notion-toggle notion-block-30565fcdfcdf48278d757c16dd3d1c81"><summary>code</summary><div></div></details><h4 class="notion-h notion-h3 notion-h-indent-0 notion-block-439a55a557114e76809a6db63cb4baa0" data-id="439a55a557114e76809a6db63cb4baa0"><span><div id="439a55a557114e76809a6db63cb4baa0" class="notion-header-anchor"></div><a class="notion-hash-link" href="#439a55a557114e76809a6db63cb4baa0" title="LeetCode-175. 组合两个表"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title"><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://leetcode.cn/problems/combine-two-tables/">LeetCode-175. 组合两个表</a></span></span></h4><details class="notion-toggle notion-block-040276630b124a7b9cfe444aac7b2c03"><summary>code</summary><div></div></details><h4 class="notion-h notion-h3 notion-h-indent-0 notion-block-943bf63c20fa49a09f87f6f886281b57" data-id="943bf63c20fa49a09f87f6f886281b57"><span><div id="943bf63c20fa49a09f87f6f886281b57" class="notion-header-anchor"></div><a class="notion-hash-link" href="#943bf63c20fa49a09f87f6f886281b57" title="LeetCode-180. 连续出现的数字"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title"><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://leetcode.cn/problems/consecutive-numbers/">LeetCode-180. 连续出现的数字</a></span></span></h4><details class="notion-toggle notion-block-7eb20674ee904beea390f921187804c8"><summary>code</summary><div></div></details><h4 class="notion-h notion-h3 notion-h-indent-0 notion-block-fccb3f53225d4ab7b77ab24b12d84607" data-id="fccb3f53225d4ab7b77ab24b12d84607"><span><div id="fccb3f53225d4ab7b77ab24b12d84607" class="notion-header-anchor"></div><a class="notion-hash-link" href="#fccb3f53225d4ab7b77ab24b12d84607" title="LeetCode-181. 超过经理收入的员工"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title"><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://leetcode.cn/problems/employees-earning-more-than-their-managers/">LeetCode-181. 超过经理收入的员工</a></span></span></h4><details class="notion-toggle notion-block-ff0971d5d4034dec93361ff644f0cde8"><summary>code</summary><div></div></details><h4 class="notion-h notion-h3 notion-h-indent-0 notion-block-7a986a16c8844389b265ae1a90bc26ad" data-id="7a986a16c8844389b265ae1a90bc26ad"><span><div id="7a986a16c8844389b265ae1a90bc26ad" class="notion-header-anchor"></div><a class="notion-hash-link" href="#7a986a16c8844389b265ae1a90bc26ad" title="LeetCode-182. 查找重复的电子邮箱"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title"><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://leetcode.cn/problems/duplicate-emails/">LeetCode-182. 查找重复的电子邮</a>箱</span></span></h4><details class="notion-toggle notion-block-8ad947197b3a447ea121fdd580efa569"><summary>code</summary><div></div></details><h4 class="notion-h notion-h3 notion-h-indent-0 notion-block-dc940961df9a41c69880c7329fffcbf1" data-id="dc940961df9a41c69880c7329fffcbf1"><span><div id="dc940961df9a41c69880c7329fffcbf1" class="notion-header-anchor"></div><a class="notion-hash-link" href="#dc940961df9a41c69880c7329fffcbf1" title="LeetCode-183. 从不订购的客户"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title"><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://leetcode.cn/problems/customers-who-never-order/">LeetCode-183. 从不订购的客户</a></span></span></h4><details class="notion-toggle notion-block-d2eb4cb031254b4c924307e4d0f23298"><summary>code</summary><div></div></details><div class="notion-blank notion-block-9064c16185f04d108a529ca71056d8e4"> </div><div class="notion-blank notion-block-b75328e96cb449a5be7b086bee46b08f"> </div></main></div>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[禁止飞书更新]]></title>
            <link>https://tangly1024.com/article/890a35ef-c477-43c5-bfdb-f8fa654fe1a8</link>
            <guid>https://tangly1024.com/article/890a35ef-c477-43c5-bfdb-f8fa654fe1a8</guid>
            <pubDate>Tue, 04 Jan 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[飞书一直自动更新太烦]]></description>
            <content:encoded><![CDATA[<div id="notion-article" class="mx-auto overflow-hidden "><main class="notion light-mode notion-page notion-block-890a35efc47743c5bfdbf8fa654fe1a8"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><div class="notion-text notion-block-0598badd56f047e197f8343caf6fff3b">飞书一直自动更新太烦</div><div class="notion-text notion-block-ba38cda2dbb74d2b85fe2947793a38bf">这种自动更新的软件太流氓了</div><details class="notion-toggle notion-block-6d512cb933d14b87a3ae883e8e690253"><summary><h4 class="notion-h notion-h3 notion-h-indent-0 notion-block-6d512cb933d14b87a3ae883e8e690253" data-id="6d512cb933d14b87a3ae883e8e690253"><span><div id="6d512cb933d14b87a3ae883e8e690253" class="notion-header-anchor"></div><span class="notion-h-title">禁止飞机更新</span></span></h4></summary><div><ol start="1" class="notion-list notion-list-numbered notion-block-9a164715efff4fdebaa8506a856eb947"><li><code class="notion-inline-code">vim ~/Library/Application\ Support/LarkShell/Default/Preferences</code></li></ol><ol start="2" class="notion-list notion-list-numbered notion-block-18b08f9f7b784727bd63f14517b4d8ef"><li>找到这一段<code class="notion-inline-code"> &quot;disallow_force_update&quot;:false</code> 改成 <code class="notion-inline-code">&quot;disallow_force_update&quot;:true</code></li></ol><ol start="3" class="notion-list notion-list-numbered notion-block-4399175e968b4f5ba1b848c64490b7dd"><li>找到这一段 <code class="notion-inline-code">&quot;update&quot;:xxxx 改成 &quot;update&quot;:{&quot;disable_auto_update&quot;:true}</code></li></ol><ol start="4" class="notion-list notion-list-numbered notion-block-cd0e018b75574624a288f3f05a7f0c1c"><li>保存文件,把修改成只读,并且锁定文件(在”访达“中右键”显示简介“ 中选中”已锁定“)</li></ol><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-62ca57bbe8d8477aadb0661e928f36fd"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:265px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Ffcd49808-7801-4a8b-a939-f8471b923635%2Fd4aa5f65-b41d-44e1-a3be-58ba9d0a6b93%2FUntitled.png?table=block&amp;id=62ca57bb-e8d8-477a-adb0-661e928f36fd&amp;t=62ca57bb-e8d8-477a-adb0-661e928f36fd&amp;width=265&amp;cache=v2" alt="notion image" loading="lazy" decoding="async"/></div></figure></div></details></main></div>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[CAS，ABA问题分析]]></title>
            <link>https://tangly1024.com/article/8eef8c22-1922-417b-bc6a-33a725fef4ee</link>
            <guid>https://tangly1024.com/article/8eef8c22-1922-417b-bc6a-33a725fef4ee</guid>
            <pubDate>Fri, 17 Feb 2023 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<div id="notion-article" class="mx-auto overflow-hidden "><main class="notion light-mode notion-page notion-block-8eef8c221922417bbc6a33a725fef4ee"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-b4ceb4260def46faa9d260a1ae8c5afe"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.rongsoft.com/upload/img/202009/d032d58e19714aa5837359d14ddc0b3e.jpg?t=b4ceb426-0def-46fa-a9d2-60a1ae8c5afe" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-e23d544ebe154fe98b1b22c5a11189c7">CAS大纲</div><div class="notion-text notion-block-76784b92fca1420eba92551e52b37ee7">首先，下图是本文的大纲，也就是说在看本文之前，你需要先了解本文到底是讲什么内容，有个整体大观，然后逐个细分到内容层次去讲解。</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-6290ca62b76f4af68210952cc1a113d9"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.rongsoft.com/upload/img/202009/822b7f3d5509480fb037c96bb5675c2b.jpg?t=6290ca62-b76f-4af6-8210-952cc1a113d9" alt="notion image" loading="lazy" decoding="async"/></div></figure><h4 class="notion-h notion-h3 notion-h-indent-0 notion-block-452ebe0a4ca84398b66e9441550963d0" data-id="452ebe0a4ca84398b66e9441550963d0"><span><div id="452ebe0a4ca84398b66e9441550963d0" class="notion-header-anchor"></div><a class="notion-hash-link" href="#452ebe0a4ca84398b66e9441550963d0" title="什么是CAS ?"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">什么是CAS ?</span></span></h4><div class="notion-text notion-block-318dc5c3c2ba4af3a631628d8669f79e">CAS的全称是Compare-And-Swap，它是一条CPU并发原语。</div><div class="notion-text notion-block-03e561b4cdd041e6baf6d1687d9d5e01">正如它的名字一样，<b>比较并交换</b>，它是一种很重要的同步思想。如果主内存的值跟期望值一样，那么就进行修改，否则一直重试，直到一致为止。</div><div class="notion-text notion-block-8ea843ba22b74022902ea1fd01959015">而原语的执行必须是连续的，在执行过程中不允许被中断，也就是说CAS是一条CPU的原子指令，不会造成所谓的数据不一致性问题。</div><div class="notion-text notion-block-afb37abc48bc4e17acd1623d2c62c6cb">它的功能是判断内存某个位置的值是否为预期值，如果是则更改为新的值，这个过程是<b>原子的</b>。</div><div class="notion-text notion-block-83bca5d2dce1403596ca4cd9910acedb">我们来看一段代码：</div><div class="notion-text notion-block-b28d5f2a8e3b4eeca3aa988f4c52827f">你能猜到答案么？</div><div class="notion-text notion-block-0dc4915224ef4fada39bddb01b56841e">是否自选并替换  true  更改之后的值为：10<!-- -->是否自选并替换  false 更改之后的值为：10</div><div class="notion-text notion-block-b1fe1f1a66a344a5ae750ee341e15275">第一次修改，期望值为5，主内存也为5，修改成功，为10。</div><div class="notion-text notion-block-fa45a7c8960c4a3ebf1b045d3c859baf">第二次修改，期望值为5，主内存为10，修改失败。</div><h4 class="notion-h notion-h3 notion-h-indent-0 notion-block-d748256870274efab2fa71062739de47" data-id="d748256870274efab2fa71062739de47"><span><div id="d748256870274efab2fa71062739de47" class="notion-header-anchor"></div><a class="notion-hash-link" href="#d748256870274efab2fa71062739de47" title="CAS原理"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">CAS原理</span></span></h4><div class="notion-text notion-block-ca1b9c0f40c244ee848570c8a8e47ab0">在翻了源码之后，大致可以总结出两个关键点：</div><ol start="1" class="notion-list notion-list-numbered notion-block-76a93e1d719f4e78950ad9f5723bdfc7"><li><b>自旋；</b></li></ol><ol start="2" class="notion-list notion-list-numbered notion-block-4c212eb4d6fa4caf939a8fe3e223a128"><li><b>unsafe类。</b></li></ol><div class="notion-text notion-block-6ce390ac55ba46f6a63812278a44e819">当点开compareAndSet方法后:</div><div class="notion-text notion-block-93ce409bda464a5f8d75d6b0b86e48d3">通过这个方法，我们可以找出AtomicInteger内部维护了volatile int value和private static final Unsafe unsafe两个比较重要的参数。（注意value是用volatile修饰）</div><div class="notion-text notion-block-1c2c0d1628854823adbb1f4013f995bb">还有变量private static final long valueOffset，表示该变量在内存中的<b>偏移地址</b>，因为Unsafe就是根据<b>内存偏移地址</b>获取数据的。</div><div class="notion-text notion-block-d8d52c928bd04b8a9292bd08ad3b4175">变量value用volatile修饰，保证了多线程之间的内存<b>可见性</b>。</div><div class="notion-text notion-block-85d88ef0eb5544838a4c18a91256a81b">然后我们通过compareAndSwapInt找到了unsafe类核心方法：</div><div class="notion-text notion-block-bed65a8978af480485546e10fc07f7e8">AtomicInteger.compareAndSwapInt()调用了Unsafe.compareAndSwapInt()方法。Unsafe类的大部分方法都是native的，用来像C语言一样从底层操作内存。</div><div class="notion-text notion-block-fc1495c35fc54e2b99af38b2a127d1ce">这个方法的var1和var2，就是根据<b>对象</b>和<b>偏移量</b>得到在<b>主内存的快照值</b>var5。然后compareAndSwapInt方法通过var1和var2得到当前<b>主内存的实际值</b>。如果这个<b>实际值</b>跟<b>快照值</b>相等，那么就更新主内存的值为var5+var4。如果不等，那么就一直循环，一直获取快照，一直对比，直到实际值和快照值相等为止。</div><div class="notion-text notion-block-95cc360f58604589912fb42549d6b95d"><b>比如有A、B两个线程</b></div><ol start="1" class="notion-list notion-list-numbered notion-block-04ad090ea84c4289a17cd57e82eb4988"><li>一开始都从主内存中拷贝了原值为3；</li></ol><ol start="2" class="notion-list notion-list-numbered notion-block-91ba1934dd0d4fec9943aac01da81a98"><li>A线程执行到var5=this.getIntVolatile，即var5=3。此时A线程挂起；</li></ol><ol start="3" class="notion-list notion-list-numbered notion-block-25872b78a4e04f4ea05db6e4b8cbcecd"><li>B修改原值为4，B线程执行完毕，由于加了volatile，所以这个修改是立即可见的；</li></ol><ol start="4" class="notion-list notion-list-numbered notion-block-92070f673fa1479f8d45568765fa0e2e"><li>A线程被唤醒，执行this.compareAndSwapInt()方法，发现这个时候主内存的值不等于快照值3，所以继续循环，<b>重新</b>从主内存获取。</li></ol><ol start="5" class="notion-list notion-list-numbered notion-block-0b5ed1112f8f49f9b9e9cd19a4ae1aa7"><li>线程A重新获取value值，因为变量value被volatile修饰，所以其他线程对它的修改，线程A总是能够看到，线程A继续执行compareAndSwapInt进行比较替换，直至成功。</li></ol><h4 class="notion-h notion-h3 notion-h-indent-0 notion-block-bfbbc9ce4bcc4ea3972ade0f4ab69ee6" data-id="bfbbc9ce4bcc4ea3972ade0f4ab69ee6"><span><div id="bfbbc9ce4bcc4ea3972ade0f4ab69ee6" class="notion-header-anchor"></div><a class="notion-hash-link" href="#bfbbc9ce4bcc4ea3972ade0f4ab69ee6" title="ABA问题"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">ABA问题</span></span></h4><div class="notion-text notion-block-bc4191647e314e3fb39dbe00d9674658">所谓ABA问题，其实用最通俗易懂的话语来总结就是狸猫换太子</div><div class="notion-text notion-block-c75cae9bada84779a1324ede9e2936db">就是比较并交换的循环，存在一个<b>时间差</b>，而这个时间差可能带来意想不到的问题。</div><div class="notion-text notion-block-9ece5a814f734bd080108bce451f83ac">比如有两个线程A、B：</div><ol start="1" class="notion-list notion-list-numbered notion-block-5cc366efc4a64894b8350fefe60150f7"><li>一开始都从主内存中拷贝了原值为3；</li></ol><ol start="2" class="notion-list notion-list-numbered notion-block-1baf6fe11a8c44f0bb72c2e5d7dc247a"><li>A线程执行到var5=this.getIntVolatile，即var5=3。此时A线程挂起；</li></ol><ol start="3" class="notion-list notion-list-numbered notion-block-3af8e04c26bb40ed9c468c69a8a3dd26"><li>B修改原值为4，B线程执行完毕;</li></ol><ol start="4" class="notion-list notion-list-numbered notion-block-a6d5c4752fbd405587e2d6c1e984cf2f"><li>然后B觉得修改错了，然后再重新把值修改为3；</li></ol><ol start="5" class="notion-list notion-list-numbered notion-block-49ddccec2a76487ca30b60c00f45a7e4"><li>A线程被唤醒，执行this.compareAndSwapInt()方法，发现这个时候主内存的值等于快照值3，（<b>但是却不知道B曾经修改过</b>），修改成功。</li></ol><div class="notion-text notion-block-d53261a310674854a366c582e4b21385">尽管线程A CAS操作成功，但不代表就没有问题。有的需求，比如CAS，<b>只注重头和尾</b>，只要首尾一致就接受。但是有的需求，还看重过程，中间不能发生任何修改。这就引出了AtomicReference原子引用。</div><h4 class="notion-h notion-h3 notion-h-indent-0 notion-block-c0dd60e84d0b4d29a6d75edf5fde1625" data-id="c0dd60e84d0b4d29a6d75edf5fde1625"><span><div id="c0dd60e84d0b4d29a6d75edf5fde1625" class="notion-header-anchor"></div><a class="notion-hash-link" href="#c0dd60e84d0b4d29a6d75edf5fde1625" title="AtomicReference原子引用"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">AtomicReference原子引用</span></span></h4><div class="notion-text notion-block-0a79136975cb436aa951afd862341d1c">AtomicInteger对整数进行原子操作，如果是一个POJO呢？可以用AtomicReference来包装这个POJO，使其操作原子化。</div><div class="notion-text notion-block-d897a0990a914289a662f45365ea1f90">本质是比较的是两个对象的地址是否相等。</div><h4 class="notion-h notion-h3 notion-h-indent-0 notion-block-db1f67c6b3d34fd7932af88421a91e9d" data-id="db1f67c6b3d34fd7932af88421a91e9d"><span><div id="db1f67c6b3d34fd7932af88421a91e9d" class="notion-header-anchor"></div><a class="notion-hash-link" href="#db1f67c6b3d34fd7932af88421a91e9d" title="AtomicStampedReference和ABA问题的解决"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">AtomicStampedReference和ABA问题的解决</span></span></h4><div class="notion-text notion-block-b830798aa2614a988c1a296cdb36fd24">使用AtomicStampedReference类可以解决ABA问题。这个类维护了一个“<b>版本号</b>”Stamp，其实有点类似乐观锁的意思。</div><div class="notion-text notion-block-6818f6dd8918433da5403073e690b1fd">在进行CAS操作的时候，不仅要比较当前值，还要比较<b>版本号</b>。只有两者都相等，才执行更新操作。</div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-81165adde6454ec180ec43389b650c6d" data-id="81165adde6454ec180ec43389b650c6d"><span><div id="81165adde6454ec180ec43389b650c6d" class="notion-header-anchor"></div><a class="notion-hash-link" href="#81165adde6454ec180ec43389b650c6d" title="CAS总结"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">CAS总结</span></span></h3><div class="notion-text notion-block-a7490ee1d84942949c9868ba17a2e45e">任何技术都不是完美的，当然，CAS也有他的缺点：</div><div class="notion-text notion-block-3af20de8a15a4f619f4a8a47fe6b7cce">CAS实际上是一种自旋锁，</div><ol start="1" class="notion-list notion-list-numbered notion-block-ce87c28b97b64cacba82ebd72d6c9eec"><li>一直循环，开销比较大。</li></ol><ol start="2" class="notion-list notion-list-numbered notion-block-9b0333dee3ac4b1f864f92da9e1ec560"><li>只能保证一个变量的原子操作，多个变量依然要加锁。</li></ol><ol start="3" class="notion-list notion-list-numbered notion-block-82b50e47b8fc4d68b265e11635b44401"><li>引出了<b>ABA问题</b>（AtomicStampedReference可解决）。</li></ol><div class="notion-text notion-block-cfeeefece45544718fc269a58e72af6b">而他的使用场景适合在一些并发量不高、线程竞争较少的情况，加锁太重。但是一旦线程冲突严重的情况下，循环时间太长，为给CPU带来很大的开销。</div><div class="notion-blank notion-block-083f8acfbe514397bcfc292d51a6eb32"> </div><blockquote class="notion-quote notion-block-161391f7f33b44a3a343aa24e62ce04d"><div>转载来自 <a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://www.rongsoft.com/article/2020/09/021501525294/">https://www.rongsoft.com/article/2020/09/021501525294/</a></div></blockquote></main></div>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[交易系统设计]]></title>
            <link>https://tangly1024.com/article/50862e50-53de-4e05-9f2c-3296a2cb0e74</link>
            <guid>https://tangly1024.com/article/50862e50-53de-4e05-9f2c-3296a2cb0e74</guid>
            <pubDate>Wed, 15 Feb 2023 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<div id="notion-article" class="mx-auto overflow-hidden "><main class="notion light-mode notion-page notion-block-50862e5053de4e059f2c3296a2cb0e74"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-0fac63708b6c4626b2c56ba1fd90fe89" data-id="0fac63708b6c4626b2c56ba1fd90fe89"><span><div id="0fac63708b6c4626b2c56ba1fd90fe89" class="notion-header-anchor"></div><a class="notion-hash-link" href="#0fac63708b6c4626b2c56ba1fd90fe89" title="资料参考"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">资料参考</span></span></h3><div class="notion-text notion-block-63317a6cedf8431db58b09aab2d917e2">LMAX Disruptor<a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://lmax-exchange.github.io/disruptor/">https://lmax-exchange.github.io/disruptor/</a></div><div class="notion-blank notion-block-8f51df93fa754ce7ab8c8863a6ab0cf9"> </div><div class="notion-text notion-block-a93a8742009441eaa2dd73ec4e6b1cdc">证券交易系统设计与开发<a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://www.liaoxuefeng.com/article/1185272483766752">https://www.liaoxuefeng.com/article/1185272483766752</a></div><div class="notion-text notion-block-086392dd6b134955886b8e056361d6f6">高性能交易系统设计原理<a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://www.liaoxuefeng.com/article/1341133393231906">https://www.liaoxuefeng.com/article/1341133393231906</a></div><div class="notion-blank notion-block-13ec8bfade9b4a2c825e44748b4a1826"> </div><div class="notion-text notion-block-f7799c0cb2194c8fb61a9677bd5a2b05">Java版交易系统<a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://www.liaoxuefeng.com/wiki/1252599548343744/1266263401691296">https://www.liaoxuefeng.com/wiki/1252599548343744/1266263401691296</a></div><div class="notion-text notion-block-408bb833f6334805a1faea074d0c3075">对应仓库 <a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://github.com/michaelliao/warpexchange">https://github.com/michaelliao/warpexchange</a></div><div class="notion-blank notion-block-ca3d534d941a4d81be4cfd7009dacb50"> </div><div class="notion-text notion-block-885d1a4ef48e4e0b957a4a2d317c3640">撮合交易系统服务边界与设计<a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://cloud.tencent.com/developer/article/1644833">https://cloud.tencent.com/developer/article/1644833</a></div></main></div>]]></content:encoded>
        </item>
    </channel>
</rss>