<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
>
<channel>
<title><![CDATA[码海拾贝]]></title> 
<atom:link href="https://www.kotori.qzz.io/rss.php" rel="self" type="application/rss+xml" />
<description><![CDATA[录技术成长的点滴，分享编程路上的思考与实战]]></description>
<link>https://www.kotori.qzz.io/</link>
<language>zh-cn</language>
<generator>emlog</generator>

<item>
    <title>Git 进阶：那些让你事半功倍的命令</title>
    <link>https://www.kotori.qzz.io/?post=5</link>
    <description><![CDATA[<p>只会 git add, git commit, git push 和 git pull 只能算入门。掌握一些进阶命令，能让你在版本控制中游刃有余。</p>
<ol>
<li>git stash：暂存现场<br />
当你正在开发一个功能，突然需要切换到其他分支修复 Bug，但当前代码还没写完不想提交时，git stash 就派上用场了。它会把你的修改暂时藏起来，让工作区变干净。修复完 Bug 回来，用 git stash pop 恢复现场。</li>
<li>git rebase：保持提交历史整洁<br />
git merge 会产生分叉的提交历史，而 git rebase 可以将你的提交“变基”到目标分支的最新提交之后，形成一条直线的历史。<br />
注意：千万不要在公共分支（如 master/main）上使用 rebase，这会改写历史，导致团队协作冲突。</li>
<li>git cherry-pick：精准移植提交<br />
如果你想把 A 分支上的某一个特定提交应用到 B 分支，而不需要合并整个分支，可以使用 git cherry-pick <commit-hash>。</li>
<li>git reflog：后悔药<br />
如果你不小心 reset 错了分支，或者删除了某个重要的 commit，别慌。git reflog 记录了你所有的操作历史（包括已经被删除的提交）。找到对应的 hash 值，就可以轻松恢复。<br />
熟练掌握这些命令，你的 Git 操作将更加自信和高效。</li>
</ol>]]></description>
    <pubDate>Mon, 11 May 2026 15:05:08 +0800</pubDate>
    <dc:creator>emer</dc:creator>
    <guid>https://www.kotori.qzz.io/?post=5</guid>
</item>
<item>
    <title>程序员如何高效学习新技术？</title>
    <link>https://www.kotori.qzz.io/?post=4</link>
    <description><![CDATA[<p>技术更新迭代极快，从 React 到 Vue，从 Docker 到 Kubernetes，新技术层出不穷。很多程序员陷入了“学不动了”的焦虑。其实，掌握正确的学习方法比盲目追赶潮流更重要。</p>
<ol>
<li>明确学习目标<br />
不要为了学而学。问自己：为什么要学这个技术？它能解决什么问题？是工作需要，还是个人兴趣？目标明确才能有的放矢。</li>
<li>官方文档是最好的老师<br />
很多中文教程可能存在滞后或错误。养成阅读英文官方文档的习惯，虽然初期比较吃力，但这是获取最准确、最一手信息的最佳途径。</li>
<li>动手实践<br />
“纸上得来终觉浅”。看懂了不代表会了。最好的学习方式是 Project-based Learning。尝试用新技术做一个小项目，比如待办事项列表、个人博客等。在解决实际问题的过程中，你对技术的理解会深刻得多。</li>
<li>费曼学习法<br />
尝试把你学到的知识讲给别人听，或者写成博客。如果你不能简单地解释它，说明你还没有完全理解它。输出倒逼输入，是巩固知识的利器。<br />
保持好奇心，保持耐心，技术之路虽长，行则将至。</li>
</ol>]]></description>
    <pubDate>Thu, 12 Mar 2026 15:04:47 +0800</pubDate>
    <dc:creator>emer</dc:creator>
    <guid>https://www.kotori.qzz.io/?post=4</guid>
</item>
<item>
    <title>深入理解 RESTful API 设计原则</title>
    <link>https://www.kotori.qzz.io/?post=3</link>
    <description><![CDATA[<p>在前后端分离的架构中，API 是沟通的桥梁。一个设计良好的 RESTful API 能让前端开发事半功倍。那么，如何设计出优雅的 API 呢？<br />
资源导向<br />
REST 的核心是“资源”。URL 应该代表资源，而不是动作。<br />
错误示例：/api/getUser, /api/createOrder<br />
正确示例：/api/users, /api/orders<br />
使用 HTTP 方法表达动作<br />
GET：获取资源（安全且幂等）。<br />
POST：新建资源。<br />
PUT：全量更新资源。<br />
PATCH：部分更新资源。<br />
DELETE：删除资源。<br />
状态码的正确使用<br />
不要所有接口都返回 200，然后在 body 里自定义错误码。应该充分利用 HTTP 状态码：<br />
200 OK：请求成功。<br />
201 Created：资源创建成功。<br />
400 Bad Request：客户端请求参数错误。<br />
401 Unauthorized：未授权。<br />
404 Not Found：资源不存在。<br />
500 Internal Server Error：服务器内部错误。<br />
版本控制<br />
API 可能会迭代，为了兼容旧版本客户端，建议在 URL 中加入版本号，例如 /api/v1/users。<br />
遵循这些原则，你的 API 将变得更加规范、易懂且易于维护。</p>]]></description>
    <pubDate>Fri, 20 Feb 2026 15:04:27 +0800</pubDate>
    <dc:creator>emer</dc:creator>
    <guid>https://www.kotori.qzz.io/?post=3</guid>
</item>
<item>
    <title>前端性能优化实战：让你的网页快如闪电</title>
    <link>https://www.kotori.qzz.io/?post=2</link>
    <description><![CDATA[<p>在用户体验至上的今天，网页加载速度直接影响着留存率和转化率。作为前端开发者，我们需要掌握一些核心的性能优化手段。</p>
<ol>
<li>图片优化<br />
图片往往是网页中占用体积最大的资源。<br />
选择合适的格式：对于照片类图片使用 WebP 或 JPEG，对于图标类使用 SVG。<br />
懒加载：使用 loading=&quot;lazy&quot; 属性，让图片只在进入视口时才加载。</li>
<li>减少 HTTP 请求<br />
合并文件：将多个小的 CSS 或 JS 文件合并，或者使用构建工具（如 Webpack, Vite）进行打包。<br />
雪碧图：将多个小图标合并成一张大图，通过 CSS 背景定位来显示。</li>
<li>利用浏览器缓存<br />
合理设置 Cache-Control 和 ETag，让浏览器缓存静态资源。这样用户在二次访问时，无需重新下载未变动的文件，极大提升加载速度。</li>
<li>代码分割<br />
不要一次性加载所有 JavaScript 代码。利用动态 import() 语法，将非首屏必要的代码拆分出去，按需加载。<br />
性能优化是一个持续的过程，建议定期使用 Lighthouse 或 Chrome DevTools 的 Performance 面板进行分析，找到瓶颈并逐一击破。</li>
</ol>]]></description>
    <pubDate>Tue, 27 Jan 2026 15:04:09 +0800</pubDate>
    <dc:creator>emer</dc:creator>
    <guid>https://www.kotori.qzz.io/?post=2</guid>
</item>
<item>
    <title>告别 if-else 地狱：如何用策略模式优雅重构代码</title>
    <link>https://www.kotori.qzz.io/?post=1</link>
    <description><![CDATA[<p>在日常开发中，我们经常会遇到复杂的业务逻辑判断。比如，一个电商系统的支付模块，可能需要支持微信支付、支付宝、银联等多种渠道。新手往往会写出这样的代码：</p>
<pre><code class="language-javascript">function pay(type, amount) {
    if (type === 'wechat') {
        // 微信支付逻辑
    } else if (type === 'alipay') {
        // 支付宝支付逻辑
    } else if (type === 'unionpay') {
        // 银联支付逻辑
    }
    // ... 越来越多的 if-else
}</code></pre>
<p>随着业务扩展，这个函数会变得越来越臃肿，难以维护且容易出错。这就是典型的“if-else 地狱”。<br />
解决方案：策略模式<br />
策略模式的核心思想是将不同的算法或逻辑封装成独立的类或函数，使它们可以互相替换。<br />
重构后的代码可以这样写：</p>
<pre><code class="language-javascript">const strategies = {
    wechat: (amount) =&gt; console.log(`使用微信支付：${amount}元`),
    alipay: (amount) =&gt; console.log(`使用支付宝支付：${amount}元`),
    unionpay: (amount) =&gt; console.log(`使用银联支付：${amount}元`)
};

function pay(type, amount) {
    const strategy = strategies[type];
    if (strategy) {
        strategy(amount);
    } else {
        throw new Error('不支持的支付方式');
    }
}</code></pre>
<p>通过这种重构，代码的可读性和扩展性得到了极大的提升。下次新增支付方式时，只需在 strategies 对象中添加一个新的键值对即可，完全不需要修改原有的逻辑判断代码。</p>]]></description>
    <pubDate>Thu, 08 Jan 2026 23:27:39 +0800</pubDate>
    <dc:creator>emer</dc:creator>
    <guid>https://www.kotori.qzz.io/?post=1</guid>
</item>
</channel>
</rss>