<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>浅小兮の梦</title>
    <link>https://zxwlove.de5.net</link>
    <description>多喜乐，常安宁</description>
    <language>zh-CN</language>
    <lastBuildDate>Sun, 13 Sep 2026 07:49:11 GMT</lastBuildDate>
    <atom:link href="https://zxwlove.de5.net/rss.xml" rel="self" type="application/rss+xml"/>
    <item>
      <title>博客重构：从 VitePress 到 Vue 3 SPA</title>
      <link>https://zxwlove.de5.net/posts/2026/博客重构</link>
      <guid isPermaLink="true">https://zxwlove.de5.net/posts/2026/博客重构</guid>
      <pubDate>Tue, 01 Sep 2026 00:00:00 GMT</pubDate>
      <author>浅小兮</author>
      <description>记录本站从 VitePress 静态站点迁移为纯 Vue 3 + Vite 单页应用的过程与取舍。</description>
      <content:encoded><![CDATA[<p><img src="https://api.elaina.cat/random/pc" alt="封面"></p>
<h2>一、重构动机：为何要打破静态？</h2>
<p>随着内容复杂度的提升（日均新增 Markdown 文章 15+篇），原有 VitePress 架构逐渐暴露以下问题：</p>
<ol>
<li><strong>路由限制</strong>：静态文件系统无法实现动态路由参数</li>
<li><strong>状态管理缺陷</strong>：缺乏集中式状态管理方案</li>
<li><strong>SEO 瓶颈</strong>：服务端渲染能力不足影响搜索引擎收录</li>
<li><strong>扩展性天花板</strong>：插件体系无法满足个性化需求</li>
</ol>
<p>本次重构通过引入 Vue 3 + Pinia + Vite 生态，实现了：
✅ 声明式路由控制<br>
✅ 原子化组件体系<br>
✅ 构建期数据预渲染<br>
✅ 完全可控的 SEO 策略</p>
<hr>
<h2>二、架构演进对比矩阵</h2>
<table>
<thead>
<tr>
<th>维度</th>
<th>VitePress</th>
<th>Vue 3 SPA</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>路由机制</strong></td>
<td>文件系统即路由</td>
<td>vue-router 声明式路由表</td>
</tr>
<tr>
<td><strong>数据流</strong></td>
<td>构建期 config 注入</td>
<td>Vite 插件产出 virtual:blog-data</td>
</tr>
<tr>
<td><strong>渲染策略</strong></td>
<td>服务端 SSR</td>
<td>构建期预渲染 + v-html 动态插值</td>
</tr>
<tr>
<td><strong>状态管理</strong></td>
<td>-</td>
<td>Pinia + shim 适配 useData</td>
</tr>
<tr>
<td><strong>性能优化</strong></td>
<td>CDN 静态资源</td>
<td>路由级代码分割 + 动态导入</td>
</tr>
</tbody>
</table>
<hr>
<h2>三、核心技术实现解析</h2>
<h3>1. 构建期数据管道设计</h3>
<pre><code class="language-javascript">// vite-plugin-posts.js
const postData = await getAllPosts(); // 聚合原始数据
export default {
  postData,
  tagsData: getAllType(postData),    // 自动生成标签云
  categoriesData: getAllCategories(postData), // 智能分类系统
  archivesData: getAllArchives(postData),   // 按时间轴归档
};
</code></pre>
<p>该插件通过 <code>vite-plugin-pages</code> 实现：</p>
<ul>
<li>自动生成基于数据的导航菜单</li>
<li>支持多维度数据联动查询</li>
<li>构建期完成 SEO Meta 信息注入</li>
</ul>
<h3>2. 渐进式加载策略</h3>
<pre><code class="language-javascript">// views/Music.vue
const Music = () =&gt; import(&quot;@/views/Music.vue&quot;); // 路由级代码分割
&lt;template&gt;
  &lt;div v-html=&quot;musicContent&quot;&gt;&lt;/div&gt; // 构建期预渲染音乐模块
&lt;/template&gt;
</code></pre>
<p>优化点：</p>
<ul>
<li>首屏仅加载关键路径资源（LCP）</li>
<li>非可见区域图片延迟加载（Intersection Observer API）</li>
<li>第三方库按需动态导入（如 ECharts）</li>
</ul>
<hr>
<h2>四、用户体验增强设计</h2>
<h3>1. 智能加载动效系统</h3>
<pre><code class="language-css">/* loading-animation.css */
@keyframes pulse {
  0% { transform: scale(0.8); }
  50% { transform: scale(1.05); }
  100% { transform: scale(0.8); }
}
</code></pre>
<p>通过 Web Vitals 监控实现：</p>
<ul>
<li>随机化动画时长（260-800ms）消除卡顿感知</li>
<li>配合 CSS will-change 属性优化合成层</li>
<li>FPS 敏感型降级策略（低于 30fps 切换为骨架屏）</li>
</ul>
<h3>2. 语义化导航交互</h3>
<pre><code class="language-javascript">// toc-highlight.js
function throttledScroll() {
  const currentSection = document.querySelector('.active');
  tocElement.style.setProperty('--offset', window.scrollY);
}
window.addEventListener('scroll', throttledScroll);
</code></pre>
<p>实现效果：</p>
<ul>
<li>平滑跟随式目录高亮（滚动节流控制）</li>
<li>自定义伪元素游标动画（CSS Paint API）</li>
<li>无障碍兼容（ARIA live region）</li>
</ul>
<hr>
<h2>五、性能优化实践</h2>
<ol>
<li>
<p><strong>字体优化方案</strong>：</p>
<ul>
<li>HarmonyOS Sans + 霞鹜文楷 CDN 子集化（WOFF2 + WOFF）</li>
<li>CSS font-display: swap; 保证文本渲染连续性</li>
<li>首次访问预加载字体缓存</li>
</ul>
</li>
<li>
<p><strong>图标管理系统</strong>：</p>
<pre><code class="language-javascript">// dynamic-icons.js
const icons = await import('@/assets/icons.json');
return HmrIcon({ icons, defaultSet: 'material' });
</code></pre>
</li>
</ol>
<pre><code> - 按需加载 iconfont JSON 配置
 - Webpack SplitChunks 自动分离图标库
 - CDN 缓存策略设置（smaxage=31536000）

3. **可视化监控**：
 ```bash
 # Lighthouse CI 配置示例
 lhci --config .lhci.yaml --output html --report html --url https://yoursite.com
</code></pre>
<p>持续集成流程：</p>
<ul>
<li>自动化生成 Performance Report</li>
<li>Web Vitals 阈值告警（FID &lt; 2ms, LCP &lt; 2.5s）</li>
<li>Rollup Bundle Analyzer 依赖分析</li>
</ul>
<hr>
<h2>六、未来演进路线图</h2>
<pre><code class="language-mermaid">gantt
    title 技术演进里程碑
    section 第一阶段（已完成）
    SPA 架构迁移 :done, des1, 2026-09, 2w
    SEO 方案落地 :active, des2, after des1, 4w
    section 第二阶段（进行中）
    PWA 离线支持 : des3, after des2, 6w
    AI RSS 生成器 : des4, after des3, 8w
</code></pre>
<hr>
<h2>七、最佳实践总结</h2>
<ol>
<li><strong>第一性原理验证</strong>：所有优化决策需通过 Lighthouse CI 验证</li>
<li><strong>模块化思维</strong>：将复杂系统拆解为独立插件单元（Posts/TOC/Lazyload）</li>
<li><strong>渐进增强策略</strong>：始终优先保障核心功能的稳定性与兼容性</li>
<li><strong>数据驱动决策</strong>：建立完整的性能指标看板（RUM + Server Timing）</li>
</ol>
<p>本次重构不仅提升了技术栈的现代化水平，更重要的是建立了一套可复用的前端工程化方法论。后续将持续探索 Web Components、SSG 混合渲染等前沿方案，敬请关注！</p>
]]></content:encoded>
      <category>技术分享</category>
      <category>Vue3</category>
      <category>主题</category>
    </item>
    <item>
      <title>读《深度工作》：注意力是这个时代最稀缺的东西</title>
      <link>https://zxwlove.de5.net/posts/2026/深度工作</link>
      <guid isPermaLink="true">https://zxwlove.de5.net/posts/2026/深度工作</guid>
      <pubDate>Tue, 30 Jun 2026 00:00:00 GMT</pubDate>
      <author>浅小兮</author>
      <description>一本真的让我把手机从书桌上移走的书。</description>
      <content:encoded><![CDATA[<h2>核心观点</h2>
<blockquote>
<p>只有在完全没有干扰的状态下做需要动脑的事，才能把智力产出拉到最大。</p>
</blockquote>
<h2>我的实践</h2>
<ol>
<li>写作的时候直接开勿扰模式，消息一概等写完再看</li>
<li>把刷手机这件事固定到晚饭后的二十分钟，其他时间不碰</li>
<li>每工作九十分钟就真的休息一次——不是换个屏幕继续看</li>
</ol>
<h2>编辑器与终端</h2>
<p>每天打开次数最多的两个东西。快捷键练成肌肉记忆，比什么主题配色、插件花活都有用。</p>
<ul>
<li><strong>编辑器</strong>：配置一次能用一年，插件只装真正用得上的</li>
<li><strong>终端</strong>：tmux 分屏加一份顺手的 zsh 配置就够了</li>
</ul>
<h2>笔记系统</h2>
<pre><code class="language-text">收集箱 → 每周整理一次 → 长期归档
</code></pre>
<blockquote>
<p>别迷信工具。换了三套笔记软件之后我才承认：问题从来不在工具上。</p>
</blockquote>
<h2>一句话总结</h2>
<blockquote>
<p>工具用到最后就是不用工具——流程顺了，拿纸笔也能把生活管明白。</p>
</blockquote>
<p><img src="https://picsum.photos/seed/starlight-note/800/450" alt="工作桌面"></p>
<h2>散步三则</h2>
<p>七月底的风已经带了点凉意。沿着河边走了一个小时，回来就把卡了两天的 bug 写完了。</p>
<p>第二次出门散步是为了绕开奶茶店，第三次纯粹是坐得腰硬了，想起来走走。</p>
<p>结论：多出门，比什么效率方法都管用。</p>
<p><img src="https://picsum.photos/seed/starlight-walk/900/500" alt="河边傍晚"></p>
<p>最近读的书后续会单独开一个标签页慢慢记录。</p>
]]></content:encoded>
      <category>随笔杂谈</category>
      <category>读书</category>
      <category>效率</category>
    </item>
    <item>
      <title>年度总结</title>
      <link>https://zxwlove.de5.net/posts/2026/2025年度总结</link>
      <guid isPermaLink="true">https://zxwlove.de5.net/posts/2026/2025年度总结</guid>
      <pubDate>Thu, 01 Jan 2026 00:00:00 GMT</pubDate>
      <author>浅小兮</author>
      <description>2025年度总结与回顾——浑浑噩噩又一年，有得有失，在迷茫中寻找方向</description>
      <content:encoded><![CDATA[<h2>回望2025，眺望2026</h2>
<blockquote>
<p>题记——醉里不知天在水，满船清梦压星河。
——唐珙</p>
</blockquote>
<p>现在是2026年下半年，我坐下来写2025年的总结。因为种种原因所以导致2025年计划没有任何写作计划。</p>
<p>2025年给我的感觉，就两个字：糊涂。</p>
<p>稀里糊涂就过完了。年初写的那些计划，年底翻出来看，完成的没几样。有的做了一半嫌麻烦，扔了；有的连头都没开，就没了。时间跑得比我快，我在后面追，追着追着，一年就没影了。</p>
<p>这一年代码写得少。以前敲键盘敲到手指发麻的劲头，淡了。连自己折腾了好几年的站点域名，都忘了续费，稀里糊涂就丢了。说心疼吧，也没多心疼，就是有点空落落的，像丢了件穿了很久的旧衣服。</p>
<p>工作上接了几个项目，踩了不少坑，也扛过来了。生活还是老样子，吃饭睡觉，偶尔出去走走。晚霞看过几场，都挺好看的，看完也就忘了。</p>
<p>得到一些，失去一些。算不清楚哪边多。</p>
<p>有些人走着走着就散了，有些想法想着想着就变了。以前觉得非怎么样不可的事，现在觉得也就那样。</p>
<p>最熬人的是自我怀疑。</p>
<p>半夜躺在床上睡不着，就想：我活着图什么？我干这些有什么意义？我是不是真的很没用？想不出答案，越想越慌，越慌越想。第二天太阳一出来，还得老老实实去上班。</p>
<p>迷茫。说出来有点矫情，但事实就是这么回事。</p>
<p>不知道自己想要什么。想辞职，怕找不到更好的；想转行，不知道能干什么；想躺平，又不甘心；想拼一把，又不知道往哪儿使劲。就这么僵着，往前迈一步都费劲。</p>
<p>以前以为迷茫是年轻人的事，过了三十就好了。现在才知道，每个年纪有每个年纪的迷茫，一个都逃不掉。</p>
<p>也不是全是灰的。</p>
<p>也有过几个亮堂的瞬间。比如熬了几个通宵终于把问题解决的时候，比如跟老朋友喝酒喝到半夜的时候，比如某本书里某句话突然戳中我的时候。这些瞬间很短，短得像眨了一下眼，但它们是真的。</p>
<p>这一年学会了一件事：跟自己和解。</p>
<p>接受自己不是天才，接受努力了也不一定有结果，接受迷茫和焦虑就是生活的一部分。累了就歇着，饿了就吃点好的，想不通的事先放一放。</p>
<p>这些道理听着像鸡汤，真的想通了，日子确实好过很多。</p>
<p>往后的日子，没列什么目标。</p>
<p>不是没有期待，是终于明白了——路是走出来的，不是站在原地想出来的。与其纠结该往哪走，不如先走起来再说。走错了？大不了绕回来。</p>
<p>愿望就三个：少想点，多做点，对自己好点。</p>
<p>2025年就这样吧。好的坏的，都收着。</p>
<p>日子还长，慢慢过。</p>
]]></content:encoded>
      <category>生活日常</category>
      <category>生活日常</category>
    </item>
    <item>
      <title>关于我最近记忆衰退</title>
      <link>https://zxwlove.de5.net/posts/2024/记忆力衰退</link>
      <guid isPermaLink="true">https://zxwlove.de5.net/posts/2024/记忆力衰退</guid>
      <pubDate>Thu, 31 Oct 2024 17:59:59 GMT</pubDate>
      <author>浅小兮</author>
      <description>生活</description>
      <content:encoded><![CDATA[<h2>前言</h2>
<p>最近发现老是容易忘东忘西，记东西也记不住，记单词一天就差不多忘了，各种语法呀什么什么的都是，我怀疑我是刷抖音把自己刷傻了┭┮﹏┭┮，记忆力下降，也不太想动脑，懒~~~。不过现在，觉得我有必要恢复一下脑瓜子，不然会真的变傻的！！！重要的事情说三遍，提升记忆力！提升记忆力！提升记忆力！</p>
<h2>记忆衰退原因</h2>
<ol>
<li>睡眠不足：我严重怀疑是我睡眠不足导致的！！！为什么这么说，因为室友老是凌晨休息（很吵的好吧！和对象打电话声音喋喋不休，打游戏的声音此起彼伏）</li>
<li>运动不足：最近运动很少，起床晚嘛，晨跑没有跑了</li>
<li>认知活动减少：缺乏足够的认知挑战和大脑训练可能导致记忆力下降o(╥﹏╥)o。少刷抖音等短视频吧，尤其是那种无脑使用。</li>
<li>情绪问题：强烈的情绪波动，如悲伤、恐惧或愤怒，可能会暂时影响记忆力。</li>
<li>心理压力：长期的心理压力和焦虑可以影响记忆力，因为压力激素（如皮质醇）对大脑有负面影响。</li>
<li>多任务处理：频繁地进行多任务处理可能会分散注意力，做事感觉容易被分散注意力，还是专一些好。</li>
</ol>
<h2>解决方法：</h2>
<ol>
<li>制定合理的学习计划：
<ul>
<li>确定学习目标：明确短期和长期的学习目标，使学习更有方向性。</li>
<li>分配学习时间：合理规划每天的学习时间，保持学习的连续性和规律性。</li>
<li>设定学习任务：将学习内容分解成小块，设定每天的具体学习任务。</li>
<li>定期复习：每周至少安排一次复习时间，巩固已学知识。</li>
</ul>
</li>
<li>采用有效的记忆技巧：
<ul>
<li>联想记忆：将新信息与已知信息相联系，通过联想加强记忆。</li>
<li>图像记忆：利用思维导图或图表，将抽象信息转化为图像，提高记忆效果。</li>
<li>编故事法：将信息编织成故事，通过故事情节来记忆。</li>
<li>分散学习法：将学习时间分散在不同的时间段，避免长时间连续学习导致的疲劳。</li>
</ul>
</li>
<li>增强身体健康：
<ul>
<li>保持充足的睡眠：保证每天有7-8小时的睡眠时间，有助于记忆力的提升。</li>
<li>健康饮食：摄入富含Omega-3脂肪酸的食物，如鱼类，以及富含抗氧化剂的水果和蔬菜。</li>
<li>适量运动：每周进行至少150分钟的中等强度运动，如快走、游泳等。</li>
</ul>
</li>
<li>创造良好的学习环境：
<ul>
<li>安静舒适：选择一个安静、光线适宜的地方学习，减少干扰。</li>
<li>有组织：保持学习环境的整洁，有助于集中注意力。</li>
<li>正面激励：在学习空间放置激励自己的话语或图像，保持积极心态。</li>
</ul>
</li>
<li>使用记忆工具和技术：
<ul>
<li>制作笔记：使用彩色笔标记重点，整理归纳关键信息。</li>
<li>使用记忆软件：利用闪卡、记忆游戏等软件辅助记忆。</li>
<li>多感官学习：结合视觉、听觉和触觉等多感官进行学习，增强记忆。</li>
</ul>
</li>
</ol>
<h2>总结</h2>
<p>加油，让我们在此伟大！！！
调整好心情，重新开始运动，好好睡觉，未来可期
<img src="https://cdn.nlark.com/yuque/0/2024/jpeg/29368235/1719808162615-1d24a186-ff4f-4d35-8fd6-ffc1cf8bb45e.jpeg#averageHue=%2394928d&amp;clientId=ua09e6411-6789-4&amp;from=ui&amp;id=u3caeb91c&amp;originHeight=1874&amp;originWidth=996&amp;originalType=binary&amp;ratio=2&amp;rotation=0&amp;showTitle=false&amp;size=669605&amp;status=done&amp;style=none&amp;taskId=u12728ff0-933c-40b9-a42a-9e1042c535a&amp;title=" alt="beauty_20210818161112_edit_893980156840149_mh1629303389537.jpg"></p>
]]></content:encoded>
      <category>随笔杂谈</category>
      <category>生活日常</category>
    </item>
    <item>
      <title>PS基础使用知识及快捷键</title>
      <link>https://zxwlove.de5.net/posts/2024/PS基础</link>
      <guid isPermaLink="true">https://zxwlove.de5.net/posts/2024/PS基础</guid>
      <pubDate>Thu, 12 Sep 2024 13:04:10 GMT</pubDate>
      <author>浅小兮</author>
      <description>PS基础使用知识及快捷键</description>
      <content:encoded><![CDATA[<h3><strong>PS</strong>的基础使用知识（快捷键）</h3>
<h4>【1】CTRL+SHIFT+单击 (选择多个对象)</h4>
<p>【选择工具】非”自动选择“状态下：</p>
<ol>
<li>按 CTRL + 左键可以选择对象</li>
<li>按 CTRL + SHIFT + 左键可以选择多个对象
<img src="https://cdn.nlark.com/yuque/0/2024/png/29368235/1718066623772-c5fb42d0-d6f7-4dd0-a964-7278b4bf2031.png#averageHue=%23569b11&amp;id=toxxy&amp;originHeight=390&amp;originWidth=523&amp;originalType=binary&amp;ratio=1&amp;rotation=0&amp;showTitle=false&amp;status=done&amp;style=none&amp;title=" alt="">
注意：【选择工具】的”自动选择“是没有勾选的，如果已经勾选，那么不需要加入Ctrl，直接按Shift来进行多选。</li>
</ol>
<h4>【2】CTRL + H （隐藏额外内容)</h4>
<p>绘制图像经常会用到栅格线、网格线，但有时候为了看效果图，可能需要隐藏它们，这里就可以直接用CTRL+H快速隐藏了，反之，再按一次就会显示。
<a href="https://gss0.baidu.com/-Po3dSag_xI4khGko9WTAnF6hhy/zhidao/pic/item/bba1cd11728b47100201ca82c9cec3fdfc032355.jpg"><img src="https://cdn.nlark.com/yuque/0/2024/png/29368235/1718066624116-6cb61ca3-69ec-4331-9dab-2a3097cd2edf.png#averageHue=%239e8f7c&amp;id=Ne6Tp&amp;originHeight=486&amp;originWidth=519&amp;originalType=binary&amp;ratio=1&amp;rotation=0&amp;showTitle=false&amp;status=done&amp;style=none&amp;title=" alt=""></a></p>
<h4>【3】空格 + 点击（按住状态）（可移动选区）</h4>
<p>绘制一个选框、矢量矩形时，可以通过按住空格键对这些选区或矢量选区进行移动，移动后，还可以继续拉伸这个选区。
<a href="https://gss0.baidu.com/-fo3dSag_xI4khGko9WTAnF6hhy/zhidao/pic/item/8cb1cb13495409234ba557309858d109b2de49ab.jpg"><img src="https://cdn.nlark.com/yuque/0/2024/png/29368235/1718066624335-2aa699ab-ba74-4d4d-bb5d-1c2a0f283f57.png#averageHue=%2363ab21&amp;id=m5UTe&amp;originHeight=322&amp;originWidth=543&amp;originalType=binary&amp;ratio=1&amp;rotation=0&amp;showTitle=false&amp;status=done&amp;style=none&amp;title=" alt=""></a></p>
<h4>【4】调整画笔硬度和尺寸</h4>
<p>Ctrl+Alt+鼠标右击（Windows）或者Control+Option+单击（Mac），此时不要放开鼠标，向左/右拖动鼠标以缩小/放大画笔尺寸，向上/下拖动鼠标以增加/减少画笔的硬度。在Photoshop CS5中尺寸和硬度均可以调整，而在CS4中只能调整画笔的尺寸。
<a href="https://gss0.baidu.com/-Po3dSag_xI4khGko9WTAnF6hhy/zhidao/pic/item/6d81800a19d8bc3ed2867384888ba61ea9d345f5.jpg"><img src="https://cdn.nlark.com/yuque/0/2024/png/29368235/1718066624606-918636e5-ba1b-4d4c-a7bf-3316bb54deb0.png#averageHue=%23f8dcdc&amp;id=g27Zv&amp;originHeight=320&amp;originWidth=529&amp;originalType=binary&amp;ratio=1&amp;rotation=0&amp;showTitle=false&amp;status=done&amp;style=none&amp;title=" alt=""></a></p>
<h4>【5】CTRL+ ENTER （退出文本编辑状态）</h4>
<p>退出文本编辑状态可以方法：</p>
<ol>
<li>点击小键盘的ENTER</li>
<li>按 CTRL + ENTER 键（这个方法对于笔记本电脑会比较常用）。
<a href="https://gss0.baidu.com/9fo3dSag_xI4khGko9WTAnF6hhy/zhidao/pic/item/b151f8198618367a18b00b9324738bd4b31ce547.jpg"><img src="https://cdn.nlark.com/yuque/0/2024/png/29368235/1718066624788-4bbb16d3-aad5-423b-a147-f50d37b606e2.png#averageHue=%23fcfcfc&amp;id=t5eS7&amp;originHeight=395&amp;originWidth=537&amp;originalType=binary&amp;ratio=1&amp;rotation=0&amp;showTitle=false&amp;status=done&amp;style=none&amp;title=" alt=""></a></li>
</ol>
<h4>【6】ALT + 上下方向键 （调整字体行距）</h4>
<p>选取多行文本，按下ALT + 上下方向键 可以增大或减少字体行距。
Tips: 按左右方向键可以调整文字的间距。
<a href="https://gss0.baidu.com/-vo3dSag_xI4khGko9WTAnF6hhy/zhidao/pic/item/9f510fb30f2442a7441c89ebdb43ad4bd1130269.jpg"><img src="https://cdn.nlark.com/yuque/0/2024/png/29368235/1718066624990-10cd566c-416f-429c-a0bd-e7ef97afc056.png#averageHue=%23d1d1d1&amp;id=F783i&amp;originHeight=343&amp;originWidth=542&amp;originalType=binary&amp;ratio=1&amp;rotation=0&amp;showTitle=false&amp;status=done&amp;style=none&amp;title=" alt=""></a></p>
<h4>【7】ALT/CTRL + DEL 快速填充</h4>
<p>这个快速填充十分好用，不仅可以用于选区，还可以用于文本、矢量图形、线条。如果不是矢量图形，可以这样快速填充。同时按下SHIFT即可，即：ALT + SHIFT + DEL或 CTRL + SHIFT + DEL
<a href="https://gss0.baidu.com/-Po3dSag_xI4khGko9WTAnF6hhy/zhidao/pic/item/b7003af33a87e950268987221a385343faf2b4e5.jpg"><img src="https://cdn.nlark.com/yuque/0/2024/png/29368235/1718066625203-d5aa0652-e845-4a5a-8e80-0ede6fd41954.png#averageHue=%23cbcbcb&amp;id=vnvwC&amp;originHeight=388&amp;originWidth=510&amp;originalType=binary&amp;ratio=1&amp;rotation=0&amp;showTitle=false&amp;status=done&amp;style=none&amp;title=" alt=""></a></p>
<h4>【8】SHIFT + 数字键 （不透明度填充）</h4>
<p>选中一图层后，按Shift+数字键 可以快速填充相应透明度的图层，数字1代表10%，33代表33%透明度。
Tips: 在PS CS5以后版本，可以同时对多个图层进行填充。
<a href="https://gss0.baidu.com/-4o3dSag_xI4khGko9WTAnF6hhy/zhidao/pic/item/3c6d55fbb2fb431681790e342aa4462309f7d31e.jpg"><img src="https://cdn.nlark.com/yuque/0/2024/png/29368235/1718066625424-9328d6e8-5f6a-40cd-9f6a-badecc003c71.png#averageHue=%23686766&amp;id=GPfOG&amp;originHeight=400&amp;originWidth=536&amp;originalType=binary&amp;ratio=1&amp;rotation=0&amp;showTitle=false&amp;status=done&amp;style=none&amp;title=" alt=""></a></p>
<h4>【9】ALT + 中键滚动 （快速放大缩小）</h4>
<p><a href="https://gss0.baidu.com/-4o3dSag_xI4khGko9WTAnF6hhy/zhidao/pic/item/3c6d55fbb2fb431681e30e342aa4462308f7d384.jpg"><img src="https://cdn.nlark.com/yuque/0/2024/png/29368235/1718066625633-51b9035a-a943-4b68-8f6a-01b2674281bd.png#averageHue=%23545454&amp;id=NOGXI&amp;originHeight=299&amp;originWidth=549&amp;originalType=binary&amp;ratio=1&amp;rotation=0&amp;showTitle=false&amp;status=done&amp;style=none&amp;title=" alt=""></a></p>
<h4>【10】CTRL+ALT+SHIFT+E (合并所有可见图层到新层，即盖印图层)</h4>
<p>如果想保持当前所有图层不变，同时又要一个合并所有图层之后的效果，可以使用该快捷键。
<a href="https://gss0.baidu.com/94o3dSag_xI4khGko9WTAnF6hhy/zhidao/pic/item/11385343fbf2b2118b09f200c08065380cd78e5c.jpg"><img src="https://cdn.nlark.com/yuque/0/2024/png/29368235/1718066625849-0bf3e9b5-75e2-4864-88ac-4cc887289688.png#averageHue=%23606060&amp;id=LjftC&amp;originHeight=359&amp;originWidth=525&amp;originalType=binary&amp;ratio=1&amp;rotation=0&amp;showTitle=false&amp;status=done&amp;style=none&amp;title=" alt=""></a></p>
<h4>【11】ALT + 点击图层眼睛图标（用于隐藏其它图层）</h4>
<p>当按住ALT键，并点击图层的眼睛图标，这时除了刚点的图层外，其它图层会被隐藏。
<a href="https://gss0.baidu.com/94o3dSag_xI4khGko9WTAnF6hhy/zhidao/pic/item/a2cc7cd98d1001e909de6041b20e7bec55e79799.jpg"><img src="https://cdn.nlark.com/yuque/0/2024/png/29368235/1718066626123-b8890c98-639b-48e0-901d-a20583a57b94.png#averageHue=%23717171&amp;id=ErDXO&amp;originHeight=320&amp;originWidth=562&amp;originalType=binary&amp;ratio=1&amp;rotation=0&amp;showTitle=false&amp;status=done&amp;style=none&amp;title=" alt=""></a></p>
<h3>PHOTOSHOP常用快捷键大全</h3>
<h4>一、文件</h4>
<ul>
<li>新建 CTRL+N</li>
<li>打开 CTRL+O
打开为 ALT+CTRL+O
关闭 CTRL+W
保存 CTRL+S
另存为 CTRL+SHIFT+S
另存为网页格式 CTRL+ALT+S
打印设置 CTRL+ALT+P
页面设置 CTRL+SHIFT+P
打印 CTRL+P
退出 CTRL+Q</li>
</ul>
<h4>二、编辑</h4>
<p>撤消 CTRL+Z
向前一步 CTRL+SHIFT+Z
向后一步 CTRL+ALT+Z
退取 CTRL+SHIFT+F
剪切 CTRL+X
复制 CTRL+C
合并复制 CTRL+SHIFT+C
粘贴 CTRL+V
原位粘贴 CTRL+SHIFT+V
自由变换 CTRL+T
再次变换 CTRL+SHIFT+T
色彩设置 CTRL+SHIFT+K</p>
<h4>三、图象</h4>
<p>调整→色阶 CTRL+L
调整→<a href="https://www.baidu.com/s?wd=%E8%87%AA%E5%8A%A8%E8%89%B2%E9%98%B6&amp;tn=SE_PcZhidaonwhc_ngpagmjz&amp;rsv_dl=gh_pc_zhidao">自动色阶</a> CTRL+SHIFT+L
调整→自动对比度 CTRL+SHIFT+ALT+L
调整→曲线 CTRL+M
调整→<a href="https://www.baidu.com/s?wd=%E8%89%B2%E5%BD%A9%E5%B9%B3%E8%A1%A1&amp;tn=SE_PcZhidaonwhc_ngpagmjz&amp;rsv_dl=gh_pc_zhidao">色彩平衡</a> CTRL+B
调整→色相/饱和度CTRL+U
调整→去色 CTRL+SHIFT+U
调整→反向 CTRL+I
提取 CTRL+ALT+X
液化 CTRL+SHIFT+X</p>
<h4>四、图层</h4>
<p>新建图层 CTRL+SHIFT+N
新建通过复制的图层 CTRL+J
与前一图层编组 CTRL+G
取消编组 CTRL+SHIFT+G
合并图层 CTRL+E
合并可见图层 CTRL+SHIFT+E</p>
<h4>五、选择</h4>
<p>全选 CTRL+A
取消选择 CTRL+D
全部选择 CTRL+SHIFT+D
反选 CTRL+SHIFT+I
羽化 CTRL+ALT+D</p>
<h4>六、滤镜</h4>
<p>上次滤镜操作 CTRL+F</p>
<h4>七、视图</h4>
<p>校验颜色 CTRL+Y
色域警告 CTRL+SHIFT+Y
放大 CTRL++
缩小 CTRL+-
满画布显示 CTRL+0
实际像素 CTRL+ALT+0
显示附加 CTRL+H
显示网格 CTRL+ALT+'
显示标尺 CTRL+R
启用对齐 CTRL+；
琐定参考线 CTRL+ALT+；</p>
<h4>八、窗口</h4>
<p>关闭全部 CTRL+SHIFT+W</p>
<h4>九、帮助</h4>
<h5>目录 <a href="https://www.baidu.com/s?wd=F1&amp;tn=SE_PcZhidaonwhc_ngpagmjz&amp;rsv_dl=gh_pc_zhidao">F1</a></h5>
<ul>
<li>矩形、椭圆选框工具 【M】</li>
<li>裁剪工具 【C】</li>
<li><a href="https://www.baidu.com/s?wd=%E7%A7%BB%E5%8A%A8%E5%B7%A5%E5%85%B7&amp;tn=SE_PcZhidaonwhc_ngpagmjz&amp;rsv_dl=gh_pc_zhidao">移动工具</a> 【V】</li>
<li>套索、多边形套索、磁性套索 【L】</li>
<li><a href="https://www.baidu.com/s?wd=%E9%AD%94%E6%A3%92%E5%B7%A5%E5%85%B7&amp;tn=SE_PcZhidaonwhc_ngpagmjz&amp;rsv_dl=gh_pc_zhidao">魔棒工具</a> 【W】</li>
<li>喷枪工具 【J】</li>
<li>画笔工具 【B】</li>
<li>像皮图章、图案图章 【S】</li>
<li><a href="https://www.baidu.com/s?wd=%E5%8E%86%E5%8F%B2%E8%AE%B0%E5%BD%95%E7%94%BB%E7%AC%94&amp;tn=SE_PcZhidaonwhc_ngpagmjz&amp;rsv_dl=gh_pc_zhidao">历史记录画笔</a>工具 【Y】</li>
<li>像皮擦工具 【E】</li>
<li>铅笔、直线工具 【N】</li>
<li>模糊、锐化、涂抹工具 【R】</li>
<li>减淡、加深、海棉工具 【O】</li>
<li>钢笔、自由钢笔、磁性钢笔 【P】</li>
<li>添加锚点工具 【+】</li>
<li>删除锚点工具 【-】</li>
<li>直接选取工具 【A】</li>
<li>文字、文字蒙板、直排文字、直排文字蒙板 【T】</li>
<li><a href="https://www.baidu.com/s?wd=%E5%BA%A6%E9%87%8F%E5%B7%A5%E5%85%B7&amp;tn=SE_PcZhidaonwhc_ngpagmjz&amp;rsv_dl=gh_pc_zhidao">度量工具</a> 【U】</li>
<li>直线渐变、径向渐变、对称渐变、角度渐变、菱形渐变 【G】</li>
<li><a href="https://www.baidu.com/s?wd=%E6%B2%B9%E6%BC%86%E6%A1%B6%E5%B7%A5%E5%85%B7&amp;tn=SE_PcZhidaonwhc_ngpagmjz&amp;rsv_dl=gh_pc_zhidao">油漆桶工具</a> 【K】</li>
<li>吸管、<a href="https://www.baidu.com/s?wd=%E9%A2%9C%E8%89%B2%E5%8F%96%E6%A0%B7%E5%99%A8&amp;tn=SE_PcZhidaonwhc_ngpagmjz&amp;rsv_dl=gh_pc_zhidao">颜色取样器</a> 【I】</li>
<li>抓手工具 【H】</li>
<li><a href="https://www.baidu.com/s?wd=%E7%BC%A9%E6%94%BE%E5%B7%A5%E5%85%B7&amp;tn=SE_PcZhidaonwhc_ngpagmjz&amp;rsv_dl=gh_pc_zhidao">缩放工具</a> 【Z】</li>
<li>默认前景色和背景色 【D】</li>
<li>切换前景色和背景色 【X】</li>
<li>切换标准模式和快速蒙板模式 【Q】</li>
<li>标准屏幕模式、带有菜单栏的全屏模式、全屏模式 【F】</li>
<li>临时使用<a href="https://www.baidu.com/s?wd=%E7%A7%BB%E5%8A%A8%E5%B7%A5%E5%85%B7&amp;tn=SE_PcZhidaonwhc_ngpagmjz&amp;rsv_dl=gh_pc_zhidao">移动工具</a> 【Ctrl】</li>
<li>临时使用吸色工具 【Alt】</li>
<li>临时使用抓手工具 【空格】</li>
<li>打开工具选项面板 【Enter】</li>
<li>快速输入工具选项(当前工具选项面板中至少有一个可调节数字): 【0】至【9】</li>
<li>循环选择画笔 【[】或【]】</li>
<li>选择第一个画笔 【Shift】+【[】</li>
<li>选择最后一个画笔 【Shift】+【]】</li>
<li>建立新渐变(在”渐变编辑器”中) 【Ctrl】+【N】</li>
</ul>
<h5>文件操作</h5>
<ul>
<li>新建图形文件 【Ctrl】+【N】</li>
<li>用默认设置创建新文件 【Ctrl】+【Alt】+【N】</li>
<li>打开已有的图像 【Ctrl】+【O】</li>
<li>打开为... 【Ctrl】+【Alt】+【O】</li>
<li>关闭当前图像 【Ctrl】+【W】</li>
<li>保存当前图像 【Ctrl】+【S】</li>
<li>另存为... 【Ctrl】+【Shift】+【S】</li>
<li>存储副本 【Ctrl】+【Alt】+【S】</li>
<li>页面设置 【Ctrl】+【Shift】+【P】</li>
<li>打印 【Ctrl】+【P】</li>
<li>打开“预置”对话框 【Ctrl】+【K】</li>
<li>显示最后一次显示的“预置”对话框 【Alt】+【Ctrl】+【K】</li>
<li>设置“常规”选项(在预置对话框中) 【Ctrl】+【1】</li>
<li>设置“存储文件”(在预置对话框中) 【Ctrl】+【2】</li>
<li>设置“显示和光标”(在预置对话框中) 【Ctrl】+【3】</li>
<li>设置“透明区域与色域”(在预置对话框中) 【Ctrl】+【4】</li>
<li>设置“单位与标尺”(在预置对话框中) 【Ctrl】+【5】</li>
<li>设置“参考线与网格”(在预置对话框中) 【Ctrl】+【6】</li>
<li>设置“增效工具与暂存盘”(在预置对话框中) 【Ctrl】+【7】</li>
<li>设置“内存与图像高速缓存”(在预置对话框中) 【Ctrl】+【8】</li>
</ul>
<h5>编辑操作</h5>
<ul>
<li>还原/重做前一步操作 【Ctrl】+【Z】</li>
<li>还原两步以上操作 【Ctrl】+【Alt】+【Z】</li>
<li>重做两步以上操作 【Ctrl】+【Shift】+【Z】</li>
<li>剪切选取的图像或路径 【Ctrl】+【X】或【F2】</li>
<li>拷贝选取的图像或路径 【Ctrl】+【C】</li>
<li>合并拷贝 【Ctrl】+【Shift】+【C】</li>
<li>将剪贴板的内容粘到当前图形中 【Ctrl】+【V】或【F4】</li>
<li>将剪贴板的内容粘到选框中 【Ctrl】+【Shift】+【V】</li>
<li>自由变换 【Ctrl】+【T】</li>
<li>应用自由变换(在自由变换模式下) 【Enter】</li>
<li>从中心或对称点开始变换 (在自由变换模式下) 【Alt】</li>
<li>限制(在自由变换模式下) 【Shift】</li>
<li>扭曲(在自由变换模式下) 【Ctrl】</li>
<li>取消变形(在自由变换模式下) 【Esc】</li>
<li>自由变换复制的象素数据 【Ctrl】+【Shift】+【T】</li>
<li>再次变换复制的象素数据并建立一个副本:
【Ctrl】+【Shift】+【Alt】+【T】</li>
<li>删除选框中的图案或选取的路径 【DEL】</li>
<li>用背景色填充所选区域或整个图层 :
【Ctrl】+【BackSpace】或【Ctrl】+【Del】</li>
<li>用前景色填充所选区域或整个图层:
【Alt】+【BackSpace】或【Alt】+【Del】</li>
<li>弹出“填充”对话框 【Shift】+【BackSpace】</li>
<li>从历史记录中填充 【Alt】+【Ctrl】+【Backspace】</li>
</ul>
<h6>图像调整</h6>
<ul>
<li>调整色阶 【Ctrl】+【L】</li>
<li>自动调整色阶 【Ctrl】+【Shift】+【L】</li>
<li>打开曲线调整对话框 【Ctrl】+【M】</li>
<li>取消选择所选通道上的所有点(‘曲线’对话框中) 【Ctrl】+【D】</li>
<li>打开“<a href="https://www.baidu.com/s?wd=%E8%89%B2%E5%BD%A9%E5%B9%B3%E8%A1%A1&amp;tn=SE_PcZhidaonwhc_ngpagmjz&amp;rsv_dl=gh_pc_zhidao">色彩平衡</a>”对话框 【Ctrl】+【B】</li>
<li>打开“色相/饱和度”对话框 【Ctrl】+【U】</li>
<li>全图调整(在色相/饱和度”对话框中) 【Ctrl】+【~】</li>
<li>只调整红色(在色相/饱和度”对话框中) 【Ctrl】+【1】</li>
<li>只调整黄色(在色相/饱和度”对话框中) 【Ctrl】+【2】</li>
<li>只调整绿色(在色相/饱和度”对话框中) 【Ctrl】+【3】</li>
<li>只调整青色(在色相/饱和度”对话框中) 【Ctrl】+【4】</li>
<li>只调整蓝色(在色相/饱和度”对话框中) 【Ctrl】+【5】</li>
<li>只调整洋红(在色相/饱和度”对话框中) 【Ctrl】+【6】</li>
<li>去色 【Ctrl】+【Shift】+【U】</li>
<li>反相 【Ctrl】+【I】</li>
</ul>
<h5>图层操作</h5>
<ul>
<li>从对话框新建一个图层 【Ctrl】+【Shift】+【N】</li>
<li>以默认选项建立一个新的图层 【Ctrl】+【Alt】+【Shift】+【N】</li>
<li>通过拷贝建立一个图层 【Ctrl】+【J】</li>
<li>通过剪切建立一个图层 【Ctrl】+【Shift】+【J】</li>
<li>与前一图层编组 【Ctrl】+【G】</li>
<li>取消编组 【Ctrl】+【Shift】+【G】</li>
<li>向下合并或合并联接图层 【Ctrl】+【E】</li>
<li>合并可见图层 【Ctrl】+【Shift】+【E】</li>
<li>盖印或盖印联接图层 【Ctrl】+【Alt】+【E】</li>
<li>盖印可见图层 【Ctrl】+【Alt】+【Shift】+【E】</li>
<li>将当前层下移一层 【Ctrl】+【[】</li>
<li>将当前层上移一层 【Ctrl】+【]】</li>
<li>将当前层移到最下面 【Ctrl】+【Shift】+【[】</li>
<li>将当前层移到最上面 【Ctrl】+【Shift】+【]】</li>
<li>激活下一个图层 【Alt】+【[】</li>
<li>激活上一个图层 【Alt】+【]】</li>
<li>激活底部图层 【Shift】+【Alt】+【[】</li>
<li>激活顶部图层 【Shift】+【Alt】+【]】</li>
<li>调整当前图层的透明度(当前工具为无数字参数的,如<a href="https://www.baidu.com/s?wd=%E7%A7%BB%E5%8A%A8%E5%B7%A5%E5%85%B7&amp;tn=SE_PcZhidaonwhc_ngpagmjz&amp;rsv_dl=gh_pc_zhidao">移动工具</a>) :
【0】至【9】</li>
<li>保留当前图层的透明区域(开关) 【/】</li>
<li>投影效果(在”效果”对话框中) 【Ctrl】+【1】</li>
<li>内阴影效果(在”效果”对话框中) 【Ctrl】+【2】</li>
<li>外发光效果(在”效果”对话框中) 【Ctrl】+【3】</li>
<li>内发光效果(在”效果”对话框中) 【Ctrl】+【4】</li>
<li>斜面和浮雕效果(在”效果”对话框中) 【Ctrl】+【5】</li>
<li>应用当前所选效果并使参数可调(在”效果”对话框中):
【A】</li>
</ul>
<h5>图层混合模式</h5>
<ul>
<li>循环选择混合模式 【Alt】+【-】或【+】</li>
<li>正常 【Ctrl】+【Alt】+【N】</li>
<li>阈值（位图模式） 【Ctrl】+【Alt】+【L】</li>
<li>溶解 【Ctrl】+【Alt】+【I】</li>
<li>背后 【Ctrl】+【Alt】+【Q】</li>
<li>清除 【Ctrl】+【Alt】+【R】</li>
<li>正片叠底 【Ctrl】+【Alt】+【M】</li>
<li>屏幕 【Ctrl】+【Alt】+【S】</li>
<li>叠加 【Ctrl】+【Alt】+【O】</li>
<li>柔光 【Ctrl】+【Alt】+【F】</li>
<li>强光 【Ctrl】+【Alt】+【H】</li>
<li>颜色减淡 【Ctrl】+【Alt】+【D】</li>
<li>颜色加深 【Ctrl】+【Alt】+【B】</li>
<li>变暗 【Ctrl】+【Alt】+【K】</li>
<li>变亮 【Ctrl】+【Alt】+【G】</li>
<li>差值 【Ctrl】+【Alt】+【E】</li>
<li>排除 【Ctrl】+【Alt】+【X】</li>
<li>色相 【Ctrl】+【Alt】+【U】</li>
<li>饱和度 【Ctrl】+【Alt】+【T】</li>
<li>颜色 【Ctrl】+【Alt】+【C】</li>
<li>光度 【Ctrl】+【Alt】+【Y】</li>
<li>去色 海棉工具+【Ctrl】+【Alt】+【J】</li>
<li>加色 海棉工具+【Ctrl】+【Alt】+【A】</li>
<li>暗调 减淡/加深工具+【Ctrl】+【Alt】+【W】</li>
<li>中间调 减淡/加深工具+【Ctrl】+【Alt】+【V】</li>
<li>高光 减淡/加深工具+【Ctrl】+【Alt】+【Z】 选择功能</li>
<li>全部选取 【Ctrl】+【A】</li>
<li>取消选择 【Ctrl】+【D】</li>
<li>重新选择 【Ctrl】+【Shift】+【D】</li>
<li>羽化选择 【Ctrl】+【Alt】+【D】</li>
<li>反向选择 【Ctrl】+【Shift】+【I】</li>
<li>路径变选区 数字键盘的【Enter】</li>
<li>载入选区 【Ctrl】+点按图层、路径、通道面板中的缩约图</li>
<li>按上次的参数再做一次上次的滤镜 【Ctrl】+【F】</li>
<li>退去上次所做滤镜的效果 【Ctrl】+【Shift】+【F】</li>
<li>重复上次所做的滤镜(可调参数) :
【Ctrl】+【Alt】+【F】</li>
<li>选择工具(在“3D变化”滤镜中) 【V】</li>
<li>立方体工具(在“3D变化”滤镜中) 【M】</li>
<li>球体工具(在“3D变化”滤镜中) 【N】</li>
<li>柱体工具(在“3D变化”滤镜中) 【C】</li>
<li>轨迹球(在“3D变化”滤镜中) 【R】</li>
<li>全景相机工具(在“3D变化”滤镜中) 【E】</li>
</ul>
<h5>视图操作</h5>
<ul>
<li>显示彩色通道 【Ctrl】+【~】</li>
<li>显示单色通道 【Ctrl】+【数字】</li>
<li>显示复合通道 【~】</li>
<li>以CMYK方式预览(开关) 【Ctrl】+【Y】</li>
<li>打开/关闭色域警告 【Ctrl】+【Shift】+【Y】</li>
<li>放大视图 【Ctrl】+【+】</li>
<li>缩小视图 【Ctrl】+【-】</li>
<li>满画布显示 【Ctrl】+【0】</li>
<li>实际象素显示 【Ctrl】+【Alt】+【0】</li>
<li>向上卷动一屏 【PageUp】</li>
<li>向下卷动一屏 【PageDown】</li>
<li>向左卷动一屏 【Ctrl】+【PageUp】</li>
<li>向右卷动一屏 【Ctrl】+【PageDown】</li>
<li>向上卷动10 个单位 【Shift】+【PageUp】</li>
<li>向下卷动10 个单位 【Shift】+【PageDown】</li>
<li>向左卷动10 个单位 【Shift】+【Ctrl】+【PageUp】</li>
<li>向右卷动10 个单位 【Shift】+【Ctrl】+【PageDown】</li>
<li>将视图移到左上角 【Home】</li>
<li>将视图移到右下角 【End】</li>
<li>显示/隐藏选择区域 【Ctrl】+【H】</li>
<li>显示/隐藏路径 【Ctrl】+【Shift】+【H】</li>
<li>显示/隐藏标尺 【Ctrl】+【R】</li>
<li>显示/隐藏参考线 【Ctrl】+【;】</li>
<li>显示/隐藏网格 【Ctrl】+【”】</li>
<li>贴紧参考线 【Ctrl】+【Shift】+【;】</li>
<li>锁定参考线 【Ctrl】+【Alt】+【;】</li>
<li>贴紧网格 【Ctrl】+【Shift】+【”】</li>
<li>显示/隐藏“画笔”面板 【F5】</li>
<li>显示/隐藏“颜色”面板 【F6】</li>
<li>显示/隐藏“图层”面板 【F7】</li>
<li>显示/隐藏“信息”面板 【F8】</li>
<li>显示/隐藏“动作”面板 【F9】</li>
<li>显示/隐藏所有命令面板 【TAB】</li>
<li>显示或隐藏工具箱以外的所有调板 【Shift】+【TAB】</li>
<li>文字处理(在”文字工具”对话框中)</li>
<li>左对齐或顶对齐 【Ctrl】+【Shift】+【L】</li>
<li>中对齐 【Ctrl】+【Shift】+【C】</li>
<li>右对齐或底对齐 【Ctrl】+【Shift】+【R】</li>
<li>左／右选择 1 个字符 【Shift】+【←】/【→】</li>
<li>下／上选择 1 行 【Shift】+【↑】/【↓】</li>
<li>选择所有字符 【Ctrl】+【A】</li>
<li>将所选文本的文字大小减小2 点象素 【Ctrl】+【Shift】+【&lt;】</li>
<li>将所选文本的文字大小增大2 点象素 【Ctrl】+【Shift】+【&gt;】</li>
<li>将所选文本的文字大小减小10 点象素 【Ctrl】+【Alt】+【Shift】+【&lt;】</li>
<li>将所选文本的文字大小增大10 点象素 【Ctrl】+【Alt】+【Shift】+【&gt;】</li>
<li>将行距减小2点象素 【Alt】+【↓】</li>
<li>将行距增大2点象素 【Alt】+【↑】</li>
<li>将基线位移减小2点象素 【Shift】+【Alt】+【↓】</li>
<li>将基线位移增加2点象素 【Shift】+【Alt】+【↑】</li>
<li>将字距微调或字距调整减小20/1000ems :
【Alt】+【←】</li>
<li>将字距微调或字距调整增加20/1000ems :
【Alt】+【→】</li>
<li>将字距微调或字距调整减小100/1000ems:
【Ctrl】+【Alt】+【←】</li>
<li>将字距微调或字距调整增加100/1000ems :
【Ctrl】+【Alt】+【→】</li>
<li>选择通道中白的像素（包括半色调）:
【Ctrl】+【Alt】+【1~9】</li>
</ul>
]]></content:encoded>
      <category>技术分享</category>
      <category>PS</category>
      <category>快捷键</category>
      <category>命令</category>
    </item>
    <item>
      <title>DDL数据定义</title>
      <link>https://zxwlove.de5.net/posts/2024/DDL数据定义</link>
      <guid isPermaLink="true">https://zxwlove.de5.net/posts/2024/DDL数据定义</guid>
      <pubDate>Thu, 22 Aug 2024 13:29:34 GMT</pubDate>
      <author>浅小兮</author>
      <description>Hive DDL数据定义语句详解，包括数据库和表的创建、修改、删除操作</description>
      <content:encoded><![CDATA[<blockquote>
<p>先一下唠嗑：最近更新的话会比较慢<s>一个月一次</s>，也是比较忙的。月底有可能会写一个小总结及提一下未来的小目标。博客我也是会偶尔看一下的！
~~言归正传以免忘记，~~以下的数据库都是test，用的是虚拟机直接复制的代码有可能会看起来有点别扭，有啥补充的，可以指点指点！</p>
</blockquote>
<h2>创建数据库</h2>
<p>创建数据库语法：</p>
<pre><code class="language-markdown">CREATE DATABASE [IF NOT EXISTS] database_name 
[COMMENT database_comment] 
[LOCATION hdfs_path] 
[WITH DBPROPERTIES (property_name=property_value, ...)]; 
</code></pre>
<ol>
<li>创建一个数据库，数据库在HDFS上的默认存储路径是<code>/user/hive/warehouse/*.db</code>。</li>
</ol>
<pre><code class="language-markdown">hive (default)&gt; create database test;
</code></pre>
<ol start="2">
<li>避免要创建的数据库已经存在错误，增加<code>if not exists</code>判断。（标准写法）</li>
</ol>
<pre><code class="language-markdown">hive (default)&gt; create database test; 
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Database 
db_hive already exists 
hive (default)&gt; create database if not exists test; 
</code></pre>
<ol start="3">
<li>创建一个数据库，指定数据库在HDFS上存放的位置</li>
</ol>
<pre><code class="language-markdown">hive (default)&gt; create database test2 location '/test2.db';
</code></pre>
<h2>查询数据库</h2>
<h4>显示数据库</h4>
<ul>
<li>显示数据库</li>
</ul>
<p>hive(default)&gt; <code>show databases</code>;</p>
<ul>
<li>过滤显示查询到数据库</li>
</ul>
<p>hive(default)&gt; <code>show databases like 'test*'</code>;</p>
<h4>查看数据库详情</h4>
<ul>
<li>显示数据库信息</li>
</ul>
<p>hive(default)&gt; <code>desc database test</code>;</p>
<ul>
<li>显示数据库详细信息</li>
</ul>
<p>hive(default)&gt; <code>desc database extended test</code>;</p>
<ul>
<li>创建数据库test3，并设置其createtime属性</li>
</ul>
<p>hive(default)&gt; <code>create database test3 with dbproperties('createtime'='20240819')</code>;</p>
<h4>切换当前数据库</h4>
<p>hive (default)&gt; <code>use test</code>;</p>
<h2>修改数据库</h2>
<p>用户可以使用 <code>ALTER DATABASE</code> 命令为某个数据库的 <code>DBPROPERTIES</code> 设置键-值对属性值，来描述这个数据库的属 性信息。数据库其他的元数据信息都是不可以修改的，包括数据库名和数据库所在的目录位置。
hive (default)&gt; <code>alter database test set dbproperties('createtime'='20211022')</code>;</p>
<h2>删除数据库</h2>
<ul>
<li>删除空数据库</li>
</ul>
<p>hive(default)&gt;<code>drop database</code> test2;</p>
<ul>
<li>如果删除的数据库不存在，最好采用 if exists判断数据库是否存在</li>
</ul>
<p>hive(default)&gt; <code>drop database if exists</code> test2;</p>
<ul>
<li>如果数据库不为空，可以采用<code>cascade</code>命令，强制删除</li>
</ul>
<pre><code class="language-markdown">hive(default)&gt; drop database test; (以下是报错！！！)
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. 
InvalidOperationException(message:Database test is not empty. One or more tables exist.) 
hive(default)&gt; drop database test cascade; 
</code></pre>
<h2>创建表</h2>
<ol>
<li>语法 create table ...</li>
</ol>
<pre><code class="language-markdown">CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name  
[(col_name data_type [COMMENT col_comment], ...)]  
[COMMENT table_comment]  
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]  
[CLUSTERED BY (col_name, col_name, ...)  
[SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]  
[ROW FORMAT row_format]  
[STORED AS file_format]  
[LOCATION hdfs_path] 
[TBLPROPERTIES (property_name=property_value, ...)] 
[AS select_statement] 
[LIKES existing_table_or_view_name] 
</code></pre>
<ol start="2">
<li>字段解释说明</li>
</ol>
<table>
<thead>
<tr>
<th>CREATE TABLE</th>
<th>创建一个指定名字的表。如果相同名字的表已经存在，则抛出异常；用户可以用 IF NOT EXISTS 选项来忽略这个异常</th>
</tr>
</thead>
<tbody>
<tr>
<td>EXTERNAL</td>
<td>1. 关键字可以让用户创建一个外部表 在建表的同时可以指定一个指向实际数据的路径（LOCATION）2. 在删除表的时候 内部表的元数据和数据会被一起删除， 外部表只删除元数据，不删除数据。</td>
</tr>
<tr>
<td>COMMENT</td>
<td>为表和列添加注释。</td>
</tr>
<tr>
<td>PARTITIONED BY</td>
<td>创建分区表</td>
</tr>
<tr>
<td>CLUSTERED BY</td>
<td>创建分桶表</td>
</tr>
<tr>
<td>SORTED BY</td>
<td>不常用，对桶中的一个或多个列另外排序</td>
</tr>
<tr>
<td>ROW FROMAT</td>
<td>- ROW FORMAT DELIMITED [FIELDS TERMINATED BY char] [COLLECTION ITEMS TERMINATED BY char] [MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char] | SERDE serde_name [WITH SERDEPROPERTIES (property_name=property_value, property_name=property_value, ... )]- Fields 指定字段之间的分隔符 Collection 用于指定集合中元素间的分隔符 Map 用于指定map集合中键值对间的分隔符 Lines 用于指定每行记录间的分隔符 SerDe是Serialize/Deserialize的简称 用户在建表时可以自定义SerDe或使用自带的 SerDe 若未指定Row Format，则用自带的SerDe</td>
</tr>
<tr>
<td>STORE AS</td>
<td>指定存储文件类型 常用的文件存储类型： SEQUENCEFILE（二进制序列文件）、TEXTFILE（文本）、RCFILE（列式存储格式文件） 如：store as textfile、store as sequencefile</td>
</tr>
<tr>
<td>LOCATION</td>
<td>指定表在HDFS上的存储位置</td>
</tr>
<tr>
<td>AS</td>
<td>后跟查询语句，根据查询语句结果创建表</td>
</tr>
<tr>
<td>LIKE</td>
<td>允许用户复制现有的表结构，但是不复制数据</td>
</tr>
</tbody>
</table>
<h2>管理表</h2>
<h3>内部表</h3>
<h4>理论</h4>
<ol>
<li>默认创建的表都是所谓的<code>管理表</code>，有时也被称为<code>内部表</code>。</li>
<li>管理表，Hive会控制着<code>元数据</code>和<code>真实数据</code>的生命周期。</li>
<li>Hive默认会将这些表的数据存储在<code>hive.metastore.warehouse.dir</code>定义目录的子目录下。</li>
<li>当我们删除一个管理表时，Hive也会删除这个表中数据。</li>
<li>管理表<code>不适合和其他工具共享数据</code>。</li>
</ol>
<h4>案例实操</h4>
<ol>
<li>创建数据文件，在/opt/module/hive/datas目录下创建文件student.txt，编辑如下内容：</li>
</ol>
<pre><code class="language-markdown">[root@hadoop datas]$ vim student.txt 
1001 ss1 
1002 ss2 
1003 ss3 
1004 ss4 
1005 ss5 
1006 ss6 
1007 ss7 
1008 ss8 
1009 ss9 
</code></pre>
<ol start="2">
<li>在hive中创建内部表student</li>
</ol>
<pre><code class="language-markdown">create table if not exists student( 
id int, 
name string 
) 
row format delimited 
fields terminated by '\t' 
stored as textfile 
location '/user/hive/warehouse/student';
</code></pre>
<ol start="3">
<li>查询表的类型</li>
</ol>
<p>hive (default)&gt; <code>desc formatted student;</code></p>
<ol start="4">
<li>根据查询结果创建表（查询的结果会添加到新创建的表中）</li>
</ol>
<p>hive(default)&gt; <code>create table if not exists student2 as select id, name from student;</code></p>
<ol start="5">
<li>根据已经存在的表结构创建表</li>
</ol>
<p>hive(default)&gt; <code>create table if not exists student3 like student;</code></p>
<ol start="6">
<li>查询表的类型</li>
</ol>
<p>hive (default)&gt; <code>desc formatted student2;</code></p>
<ol start="7">
<li>删除表student2后，观察表的元数据和数据文件是否还存在</li>
</ol>
<p>hive(default)&gt; <code>drop table student2;</code></p>
<h3>外部表</h3>
<h4>理论</h4>
<p>因为表是外部表，所以Hive并非认为其完全拥有这份数据。删除该表并不会删除掉这份数据，不过描述表的元数据信息会被删除掉。
使用场景：每天将收集到的网站日志定期流入HDFS文本文件。在<code>外部表（原始日志表）</code>的基础上做大量的统计分析，用到的中间表、结果表使用<code>内部表</code>存储，数据通过 SELECT+INSERT进入内部表。外部表多用于存储原始数据，为多个部门、小组所使用，采用外部表共易<code>共享数据</code>。</p>
<h4>案例实操</h4>
<ol>
<li>在/opt/module/hive/datas路径上，创建teacher.txt文件，并输入如下内容。</li>
</ol>
<pre><code class="language-markdown">1001 teacher1 
1002 teacher2 
1003 teacher3 
1004 teacher4 
1005 teacher5
</code></pre>
<ol start="2">
<li>上传数据到HDFS</li>
</ol>
<pre><code class="language-markdown">[root@hadoop datas]$ hadoop fs -mkdir -p /school/teacher 
[root@hadoop datas]$ hadoop fs -put teacher.txt /school/teacher 
</code></pre>
<ol start="3">
<li>在hive中创建外部表teacher</li>
</ol>
<pre><code class="language-markdown">hive (default)&gt; 
create external table if not exists teacher( 
    id int,  
    name string 
) 
row format delimited fields terminated by '\t' 
location '/school/teacher';
</code></pre>
<ol start="4">
<li>查看创建的表</li>
</ol>
<p>hive (default)&gt; <code>show tables;</code></p>
<ol start="5">
<li>查看表格式化信息</li>
</ol>
<p>hive (default)&gt; <code>desc formatted dept;</code></p>
<ol start="6">
<li>删除外部表，观察表的元数据和相应hdfs中的数据</li>
</ol>
<p>hive (default)&gt; <code>drop table dept;</code></p>
<h3>管理表与外部表的互相转换</h3>
<ol>
<li>查询表的类型</li>
</ol>
<pre><code class="language-markdown">hive (default)&gt; desc formatted student2; 
Table Type:             MANAGED_TABLE
</code></pre>
<ol start="2">
<li>修改内部表student2为外部表</li>
</ol>
<pre><code class="language-markdown">alter table student2 set tblproperties('EXTERNAL'='TRUE');
</code></pre>
<ol start="3">
<li>查询表的类型</li>
</ol>
<pre><code class="language-markdown">hive (default)&gt; desc formatted student2; 
Table Type:             EXTERNAL_TABLE
</code></pre>
<ol start="4">
<li>修改外部表student2为内部表</li>
</ol>
<pre><code class="language-markdown">alter table student2 set tblproperties('EXTERNAL'='FALSE');
</code></pre>
<ol start="5">
<li>查询表的类型</li>
</ol>
<pre><code class="language-markdown">hive (default)&gt; desc formatted student2; 
Table Type:             MANAGED_TABLE
</code></pre>
<h2>修改表</h2>
<h3>重命名表</h3>
<p>语法</p>
<pre><code class="language-markdown">ALTER TABLE table_name RENAME TO new_table_name
</code></pre>
<p>实操案例</p>
<pre><code class="language-markdown">hive (default)&gt; alter table student3 rename to student4;
</code></pre>
<h3>增加、修改和删除表分区</h3>
<p>之后的<a href="https://zxwlove.xyz/posts/hive07.html">分区表基本操作</a>详情</p>
<h3>增加/修改/替换列信息</h3>
<h4>语法</h4>
<p>更新列</p>
<pre><code class="language-markdown">ALTER TABLE table_name CHANGE [COLUMN] col_old_name col_new_name column_type [COMMENT col_comment] [FIRST|AFTER column_name]
</code></pre>
<p>增加和替换列</p>
<pre><code class="language-markdown">ALTER TABLE table_name ADD|REPLACE COLUMNS (col_name data_type [COMMENT col_comment], ...)
</code></pre>
<p>注：ADD是代表新增一字段，字段位置在所有列<code>后面</code>(partition列前)，<code>REPLACE则是表示替换表中所有字段</code>。 REPLACE使用的时候，字段的类型要跟之前的类型对应上，数量可以减少或者增加，其中就包含了更新列、增加 列、删除列的功能。</p>
<h4>实操案例</h4>
<ol>
<li>查询表结构</li>
</ol>
<pre><code class="language-markdown">hive(default)&gt; desc test2; 
OK 
col_name        data_type       comment 
id                      int 
</code></pre>
<ol start="2">
<li>更新列：将列名id修改为student_id，类型不变。</li>
</ol>
<pre><code class="language-markdown">hive(default)&gt; alter table test2 change column id student_id int; 
OK 
Time taken: 0.083 seconds 
hive(default)&gt; desc test2; 
OK 
col_name        data_type       comment 
student_id              int
</code></pre>
<ol start="3">
<li>更新列：不修改列名，仅修改列的类型为string。</li>
</ol>
<pre><code class="language-markdown">hive(default)&gt; alter table test2 change column student_id student_id string; 
OK 
Time taken: 0.083 seconds 
hive(default)&gt; desc test2; 
OK 
col_name        data_type       comment 
student_id
</code></pre>
<ol start="4">
<li>新增列：向test2表中新增一列，列名为name，类型为string。</li>
</ol>
<pre><code class="language-markdown">hive (default)&gt; alter table test2 add columns(name string);
hive(default)&gt; desc test2; 
OK 
col_name        data_type       comment 
student_id              string                                       
name                    string
</code></pre>
<ol start="5">
<li>调整列的位置:现在想让name的列在最前面，做如下操作：</li>
</ol>
<pre><code class="language-markdown">hive(default)&gt; alter table test2 change name name string first; 
OK 
Time taken: 0.139 seconds 
hive (default)&gt; desc test2; 
OK 
col_name        data_type       comment 
name                    string                                       
student_id              string                                       
Time taken: 0.036 seconds, Fetched: 2 row(s)
</code></pre>
<ol start="6">
<li>调整列的位置:将name更新到指定列的后面，操作如下:</li>
</ol>
<pre><code class="language-markdown">hive (default)&gt; alter table test2 change name name string after student_id; 
OK 
Time taken: 0.069 seconds 
hive (default)&gt; desc test2; 
OK 
col_name        data_type       comment 
student_id              string                                       
name                    string                                       
Time taken: 0.033 seconds, Fetched: 2 row(s)
</code></pre>
<ol start="7">
<li>替换列（替换所有的列）</li>
</ol>
<pre><code class="language-markdown">hive (default)&gt; alter table test2 replace columns(id double); 
OK 
Time taken: 0.058 seconds 
hive (default)&gt; desc test2; 
OK 
col_name        data_type       comment 
id                      double                                       
Time taken: 0.032 seconds, Fetched: 1 row(s)
</code></pre>
<h2>删除表</h2>
<p>删除表的操作相对简单
hive (default)&gt; <code>drop table</code> test2;</p>
<h2>清除表中数据（Truncate）</h2>
<p><code>注意</code>：Truncate只能删除<code>管理表</code>，不能删除<code>外部表</code>中数据
hive (default)&gt; <code>truncate table</code> student;</p>
]]></content:encoded>
      <category>学习</category>
      <category>数据库</category>
      <category>Hive</category>
      <category>命令</category>
    </item>
    <item>
      <title>jQuery动画</title>
      <link>https://zxwlove.de5.net/posts/2024/jQuery动画</link>
      <guid isPermaLink="true">https://zxwlove.de5.net/posts/2024/jQuery动画</guid>
      <pubDate>Sat, 20 Jul 2024 14:13:12 GMT</pubDate>
      <author>浅小兮</author>
      <description>jQuery动画基础教程，包含显示隐藏、淡入淡出、滑动、自定义动画等效果</description>
      <content:encoded><![CDATA[<h3>一、显示隐藏</h3>
<p>1、显示：</p>
<pre><code class="language-javascript">show ( [speed], [easing], [fn] );
</code></pre>
<p>2、隐藏：</p>
<pre><code class="language-javascript">hide ( [speed], [easing], [fn] );
</code></pre>
<p>3、显示隐藏切换：</p>
<pre><code class="language-javascript">toggle ( [speed], [easing], [fn] );
</code></pre>
<p>4、参数说明（<a href="http://hemin.cn/jq/">jQuery手册</a>：<a href="https://www.w3school.com.cn/jquery/jquery_reference.asp">w3手册</a>）
1）<code>speed</code>：三种预定速度之一（<code>slow</code>，<code>normal</code>，<code>fast</code>）或者表示动画时长的毫秒数值。
2）<code>easing</code>：用来指定切换效果，默认是swing（慢快慢），可用参数linear（匀速）。
3）<code>fn</code>：回调函数，在动画完成时执行的函数，每个元素执行一次。
4）参数都可以省略，则无动画直接显示隐藏。
5、案例应用：淘宝服饰</p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head lang=&quot;en&quot;&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;title&gt;&lt;/title&gt;
    &lt;style&gt;
      * {
        margin: 0;
        padding: 0;
        font-size: 12px;
      }

      ul {
        list-style: none;
      }

      a {
        text-decoration: none;
      }

      .wrapper {
        width: 250px;
        height: 248px;
        margin: 100px auto 0;
        border: 1px solid pink;
        border-right: 0;
        overflow: hidden;
      }

      #left,
      #content {
        float: left;
      }

      #left li a {
        display: block;
        width: 48px;
        height: 27px;
        border-bottom: 1px solid pink;
        line-height: 27px;
        text-align: center;
        color: black;
      }

      #left li a:hover {
        background-image: url(img/ktlx1/abg.gif);
      }

      #content {
        border-left: 1px solid pink;
        border-right: 1px solid pink;
      }
    &lt;/style&gt;

    &lt;script src=&quot;https://code.jquery.com/jquery-3.7.0.min.js&quot;&gt;&lt;/script&gt;
    &lt;script&gt;
      $(function() {
        $('ul li').mouseover(function() {
          var i = $(this).index();
          $('#content div').eq(i).show().siblings().hide();
        })
      })
    &lt;/script&gt;
  &lt;/head&gt;

  &lt;body&gt;
    &lt;div class=&quot;wrapper&quot;&gt;
      &lt;ul id=&quot;left&quot;&gt;
        &lt;li&gt;&lt;a href=&quot;#&quot;&gt;连衣裙&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&quot;#&quot;&gt;毛衣&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&quot;#&quot;&gt;呢大衣&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&quot;#&quot;&gt;羽绒服&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&quot;#&quot;&gt;围巾&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&quot;#&quot;&gt;包包&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&quot;#&quot;&gt;女靴&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&quot;#&quot;&gt;雪地靴&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&quot;#&quot;&gt;牛仔裤&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
      &lt;div id=&quot;content&quot;&gt;
        &lt;div&gt;
          &lt;a href=&quot;#&quot;&gt;&lt;img src=&quot;https://img.alicdn.com/imgextra/i2/113872824/O1CN01gj83dP1WjRRix3pgv_!!0-saturn_solar.jpg_360x360xzq75.jpg_.webp&quot; width=&quot;200&quot; height=&quot;250&quot; /&gt;&lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;a href=&quot;#&quot;&gt;&lt;img src=&quot;https://img.alicdn.com/imgextra/i2/855590141/O1CN01B5k06Q1Cuco9KmO8Q_!!0-saturn_solar.jpg_360x360xzq75.jpg_.webp&quot; width=&quot;200&quot; height=&quot;250&quot; /&gt;&lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;a href=&quot;#&quot;&gt;&lt;img src=&quot;https://img.alicdn.com/imgextra/i3/11542210/O1CN016Fo5d11SCDtcU6yKP_!!0-saturn_solar.jpg_360x360xzq75.jpg_.webp&quot; width=&quot;200&quot; height=&quot;250&quot; /&gt;&lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;a href=&quot;#&quot;&gt;&lt;img src=&quot;https://img.alicdn.com/imgextra/i2/3354259449/O1CN01sN8U952JfhD9esfKv_!!0-saturn_solar.jpg_360x360xzq75.jpg_.webp&quot; width=&quot;200&quot; height=&quot;250&quot; /&gt;&lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;a href=&quot;#&quot;&gt;&lt;img src=&quot;https://img.alicdn.com/imgextra/i1/28068310/O1CN01IIZj0C2BG283kzOuI_!!0-saturn_solar.jpg_360x360xzq75.jpg_.webp&quot; width=&quot;200&quot; height=&quot;250&quot; /&gt;&lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;a href=&quot;#&quot;&gt;&lt;img src=&quot;https://img.alicdn.com/imgextra/i1/124913381/O1CN01gxu5t61aqY1b0HhZb_!!0-saturn_solar.jpg_360x360xzq75.jpg_.webp&quot; width=&quot;200&quot; height=&quot;250&quot; /&gt;&lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;a href=&quot;#&quot;&gt;&lt;img src=&quot;https://img.alicdn.com/imgextra/i1/111608559/O1CN01mnefpP2D64s8iQXta_!!0-saturn_solar.jpg_360x360xzq75.jpg_.webp&quot; width=&quot;200&quot; height=&quot;250&quot; /&gt;&lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;a href=&quot;#&quot;&gt;&lt;img src=&quot;https://img.alicdn.com/imgextra/i4/4481614776/O1CN01OUPkE91l9SWckDq86_!!0-saturn_solar.jpg_360x360xzq75.jpg_.webp&quot; width=&quot;200&quot; height=&quot;250&quot; /&gt;&lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;a href=&quot;#&quot;&gt;&lt;img src=&quot;https://img.alicdn.com/imgextra/i1/6594444769/O1CN01SHmHyU1l6FnqBREXN_!!0-saturn_solar.jpg_360x360xzq75.jpg_.webp&quot; width=&quot;200&quot; height=&quot;250&quot; /&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/body&gt;
&lt;/html&gt;
</code></pre>
<h3>二、滑动</h3>
<p>1、下滑：</p>
<pre><code class="language-javascript">slideDown ( [speed], [easing], [fn] );   //参数同上
</code></pre>
<p>2、上滑：</p>
<pre><code class="language-javascript">slideUp ( [speed], [easing], [fn] );   //参数同上
</code></pre>
<p>3、滑动切换：</p>
<pre><code class="language-javascript">slideToggle ( [speed], [easing], [fn] );   //参数同上
</code></pre>
<p>4、案例应用：滑动下拉菜单
5、动画队列
1）动画或效果一旦触发就会执行，若多次触发，就造成多个动画或效果排队执行。
2）停止排队：stop()  //停止动画或效果（写到动画或效果的前面，相当于停止结束上一次动画）</p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;

	&lt;head&gt;
		&lt;meta charset=&quot;UTF-8&quot;&gt;
		&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
		&lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;ie=edge&quot;&gt;
		&lt;title&gt;Document&lt;/title&gt;
		&lt;style&gt;
			* {
				margin: 0;
				padding: 0;
			}

			li {
				list-style-type: none;
			}

			a {
				text-decoration: none;
				font-size: 14px;
			}

			.nav {
				margin: 20px;
			}

			.nav&gt;li {
				position: relative;
				float: left;
				width: 80px;
				height: 41px;
				text-align: center;
			}

			.nav li a {
				display: block;
				width: 100%;
				height: 100%;
				line-height: 41px;
				color: #333;
			}

			.nav&gt;li&gt;a:hover {
				background-color: orange;
			}

			.nav ul {
				display: none;
				position: absolute;
				top: 41px;
				left: 0;
				width: 78px;
				border-left: 1px solid #FECC5B;
				border-right: 1px solid #FECC5B;
				border-top: 1px solid #FECC5B;
			}

			.nav ul li {
				border-bottom: 1px solid #FECC5B;
			}

			.nav ul li a:hover {
				background-color: #FFF5DA;
			}
		&lt;/style&gt;

		&lt;script src=&quot;https://code.jquery.com/jquery-3.7.0.min.js&quot;&gt;&lt;/script&gt;
		&lt;script&gt;
			$(function() {
				$('.nav&gt;li').hover(function() {
					$(this).children('ul').stop().slideToggle();
				})
			})
		&lt;/script&gt;
	&lt;/head&gt;

	&lt;body&gt;
		&lt;ul class=&quot;nav&quot;&gt;
			&lt;li&gt;
				&lt;a href=&quot;#&quot;&gt;网站首页&lt;/a&gt;
			&lt;/li&gt;
			&lt;li&gt;
				&lt;a href=&quot;#&quot;&gt;专业建设&lt;/a&gt;
				&lt;ul&gt;
					&lt;li&gt;
						&lt;a href=&quot;&quot;&gt;建设目标&lt;/a&gt;
					&lt;/li&gt;
					&lt;li&gt;
						&lt;a href=&quot;&quot;&gt;建设思路&lt;/a&gt;
					&lt;/li&gt;
					&lt;li&gt;
						&lt;a href=&quot;&quot;&gt;培养方案&lt;/a&gt;
					&lt;/li&gt;
				&lt;/ul&gt;
			&lt;/li&gt;
			&lt;li&gt;
				&lt;a href=&quot;#&quot;&gt;师资队伍&lt;/a&gt;
				&lt;ul&gt;
					&lt;li&gt;
						&lt;a href=&quot;&quot;&gt;负责人&lt;/a&gt;
					&lt;/li&gt;
					&lt;li&gt;
						&lt;a href=&quot;&quot;&gt;队伍结构&lt;/a&gt;
					&lt;/li&gt;
					&lt;li&gt;
						&lt;a href=&quot;&quot;&gt;任课教师&lt;/a&gt;
					&lt;/li&gt;
					&lt;li&gt;
						&lt;a href=&quot;&quot;&gt;教学管理&lt;/a&gt;
					&lt;/li&gt;
					&lt;li&gt;
						&lt;a href=&quot;&quot;&gt;合作办学&lt;/a&gt;
					&lt;/li&gt;
				&lt;/ul&gt;
			&lt;/li&gt;
			&lt;li&gt;
				&lt;a href=&quot;#&quot;&gt;教学条件&lt;/a&gt;
				&lt;ul&gt;
					&lt;li&gt;
						&lt;a href=&quot;&quot;&gt;经费投入&lt;/a&gt;
					&lt;/li&gt;
					&lt;li&gt;
						&lt;a href=&quot;&quot;&gt;实践教学&lt;/a&gt;
					&lt;/li&gt;
					&lt;li&gt;
						&lt;a href=&quot;&quot;&gt;教学改革&lt;/a&gt;
					&lt;/li&gt;
				&lt;/ul&gt;
			&lt;/li&gt;
			&lt;li&gt;
				&lt;a href=&quot;#&quot;&gt;改革建设&lt;/a&gt;
				&lt;ul&gt;
					&lt;li&gt;
						&lt;a href=&quot;&quot;&gt;课程改革&lt;/a&gt;
					&lt;/li&gt;
					&lt;li&gt;
						&lt;a href=&quot;&quot;&gt;教材改革&lt;/a&gt;
					&lt;/li&gt;
				&lt;/ul&gt;
			&lt;/li&gt;
		&lt;/ul&gt;
	&lt;/body&gt;
&lt;/html&gt;
</code></pre>
<p>可以复制上面代码在<a href="https://www.w3ccoo.com/tryit/tryit.asp?">W3Schools 在线代码编辑器</a>上运行查看效果</p>
<h3>三、淡入淡出</h3>
<p>1、淡入：</p>
<pre><code class="language-javascript">fadeIn ( [speed], [easing], [fn] );   //参数同上
</code></pre>
<p>2、淡出：</p>
<pre><code class="language-javascript">fadeOut ( [speed], [easing], [fn] );   //参数同上
</code></pre>
<p>3、淡入淡出切换：</p>
<pre><code class="language-javascript">fadeToggle ( [speed], [easing], [fn] );   //参数同上
</code></pre>
<p>4、渐进方式调整到指定的不透明度：</p>
<pre><code class="language-javascript">fadeTo ( speed, opacity, [easing], [fn] );
</code></pre>
<p>注：opacity透明度必须写，取值0~1；修改透明度时speed也必须写；其余参数同上。
5、案例应用：高亮显示</p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;

  &lt;head lang=&quot;en&quot;&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;title&gt;&lt;/title&gt;
    &lt;style&gt;
      * {
        margin: 0;
        padding: 0;
      }

      ul {
        list-style: none;
      }

      body {
        background: #000;
      }

      .wrap {
        margin: 50px auto 0;
        width: 570px;
        height: 530px;
        padding: 10px 0 0 10px;
        background: #000;
        overflow: hidden;
        border: 1px solid #fff;
      }

      .wrap li {
        float: left;
        margin: 0 10px 10px 0;
      }

      .wrap img {
        display: block;
        border: 0;
        width: 180px;
        height: 254px;
      }
    &lt;/style&gt;

    &lt;script src=&quot;https://code.jquery.com/jquery-3.7.0.min.js&quot;&gt;&lt;/script&gt;
    &lt;script&gt;
      $(function() {
        $('ul li').hover(function() {
          $(this).siblings().stop().fadeTo(300, 0.3);
        }, function() {
          $(this).siblings().stop().fadeTo(300, 1);
        })
      })
    &lt;/script&gt;
  &lt;/head&gt;

  &lt;body&gt;
    &lt;div class=&quot;wrap&quot;&gt;
      &lt;ul&gt;
        &lt;li&gt;
          &lt;a href=&quot;#&quot;&gt;&lt;img src=&quot;https://cdn.pixabay.com/photo/2013/07/13/13/46/playing-card-161495_1280.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
        &lt;/li&gt;
        &lt;li&gt;
          &lt;a href=&quot;#&quot;&gt;&lt;img src=&quot;https://cdn.pixabay.com/photo/2013/07/13/13/46/playing-card-161491_1280.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
        &lt;/li&gt;
        &lt;li&gt;
          &lt;a href=&quot;#&quot;&gt;&lt;img src=&quot;https://cdn.pixabay.com/photo/2012/04/11/13/39/ace-28278_1280.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
        &lt;/li&gt;
        &lt;li&gt;
          &lt;a href=&quot;#&quot;&gt;&lt;img src=&quot;https://cdn.pixabay.com/photo/2012/04/11/14/06/joker-28361_1280.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
        &lt;/li&gt;
        &lt;li&gt;
          &lt;a href=&quot;#&quot;&gt;&lt;img src=&quot;https://cdn.pixabay.com/photo/2012/04/11/13/38/four-28272_1280.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
        &lt;/li&gt;
        &lt;li&gt;
          &lt;a href=&quot;#&quot;&gt;&lt;img src=&quot;https://cdn.pixabay.com/photo/2012/04/11/13/42/six-28287_1280.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
        &lt;/li&gt;
      &lt;/ul&gt;
    &lt;/div&gt;
  &lt;/body&gt;
&lt;/html&gt;
</code></pre>
<p>可以复制上面代码在<a href="https://www.w3ccoo.com/tryit/tryit.asp?">W3Schools 在线代码编辑器</a>上运行查看效果</p>
<h3>四、自定义动画animate</h3>
<p>1、语法：</p>
<pre><code class="language-javascript">animate ( params, [speed], [easing], [fn] );
</code></pre>
<p>注：params表示想要更改的样式属性，必须写，以对象形式传递；其余参数同上。
2、案例应用：手风琴效果</p>
<pre><code class="language-javascript">$(function() {
  // 鼠标经过某个li 有两步操作：
  $('li').mouseover(function() {
    // 1、当前li宽度变为 224px，同时里面的小图片淡出，大图片淡入 (用隐藏显示也可以，但效果没有淡入淡出好)
    $(this).stop().animate({
      width: '224px'
    }).find('.small').stop().fadeOut().siblings('.big').stop().fadeIn();
    // 2、其余兄弟li宽度变为69px，小图片淡入，大图片淡出
    $(this).siblings().stop().animate({
      width: '69px'
    }).find('.small').stop().fadeIn().siblings('.big').stop().fadeOut();
  })
})
</code></pre>
<p>(由于没有图床原因就没有完善了，以上是核心代码)</p>
]]></content:encoded>
      <category>学习</category>
      <category>笔记</category>
      <category>jQuery</category>
      <category>学习</category>
    </item>
    <item>
      <title>jQuery事件</title>
      <link>https://zxwlove.de5.net/posts/2024/jQuery事件</link>
      <guid isPermaLink="true">https://zxwlove.de5.net/posts/2024/jQuery事件</guid>
      <pubDate>Sat, 20 Jul 2024 14:13:03 GMT</pubDate>
      <author>浅小兮</author>
      <description>jQuery事件处理与事件绑定机制详解</description>
      <content:encoded><![CDATA[<h3>一、jQuery事件处理</h3>
<ol>
<li>单个事件绑定：</li>
</ol>
<p>语法：<code>**元素.事件名(function() { 事件处理程序})**</code>**    **//此方法只能绑定单个事件</p>
<ol start="2">
<li>事件处理on()绑定事件：绑定一个或多个事件的事件处理函数。</li>
</ol>
<ul>
<li>一个事件：</li>
</ul>
<p>n  语法：</p>
<pre><code class="language-javascript">元素.on(‘事件名’, function() { 事件处理程序 })
</code></pre>
<ul>
<li>多个事件一个事件处理程序，多个事件名之间用空格分隔</li>
</ul>
<p>n  语法：</p>
<pre><code class="language-javascript">元素.on(‘事件名1  事件名2……’, function() { 事件处理程序 })
</code></pre>
<ul>
<li>多个事件多个事件处理程序，以对象形式绑定多个事件</li>
</ul>
<p>n  语法：</p>
<pre><code class="language-javascript">元素.on({ 
事件名1: function() { 事件处理程序1  },  //事件名与回调函数冒号分隔
事件名2: function() { 事件处理程序2  }, 
……    //多组之间用逗号分隔，最后一组的逗号可以省略
})
</code></pre>
<ol start="3">
<li>事件处理<code>one()</code>绑定事件</li>
</ol>
<ul>
<li><code>one()</code>只能触发事件一次，之后将自动取消绑定（书本264页）</li>
<li>注意：若换成<code>on()</code>方法，则点击一次，事件触发一次。</li>
</ul>
<ol start="4">
<li>解绑事件：<code>off()</code>方法</li>
</ol>
<ul>
<li>解绑元素所有事件处理程序：<code>**元素.off();**</code></li>
<li>解绑元素上面的某个事件：<code>**元素.off(‘事件名’);**</code></li>
</ul>
<h3>二、复合事件（书本266页）</h3>
<ol>
<li>hover(移入事件, 移出事件)</li>
</ol>
<ul>
<li>移入事件：鼠标移到元素上要触发的函数（相当于<code>.mouseenter()</code>）</li>
<li>移出事件：鼠标移出元素要触发的函数（相当于<code>.mouseleave()</code>）</li>
<li><code>hover()</code>是结合<code>.mouseenter()</code>和<code>.mouseleave()</code>，并非<code>.mouseover()</code>和<code>.mouseout()</code>。</li>
</ul>
<ol start="2">
<li>注：如果只写一个函数，则鼠标移入和移出都会触发这个函数。</li>
</ol>
<h3>三、案例应用：DOM中的简易留言板例子</h3>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;meta charset=&quot;utf-8&quot;&gt;
    &lt;title&gt;&lt;/title&gt;
    &lt;style&gt;
      li {
        background-color: yellow;
        width: 300px;
        margin: 10px;
        padding: 5px;
      }

      li a {
        float: right;
      }
    &lt;/style&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;textarea cols=&quot;30&quot; rows=&quot;10&quot;&gt;&lt;/textarea&gt;
    &lt;button id=&quot;bt&quot;&gt;发布&lt;/button&gt;
    &lt;ul&gt;
      &lt;script src=&quot;https://code.jquery.com/jquery-3.7.0.min.js&quot;&gt;&lt;/script&gt;
    &lt;/ul&gt;
    &lt;script&gt;
      // var btn = document.getElementById('bt');
      // var text = document.querySelector('textarea');
      // var uu = document.querySelector('ul');

      // btn.onclick = function() {
      // 	// 1、发布留言
      // 	var newLi = document.createElement('li');
      // 	newLi.innerHTML = text.value + '&lt;a href=&quot;javascript:;&quot;&gt;删除&lt;/a&gt;';
      // 	uu.insertBefore(newLi, uu.children[0]);

      // 	// 2、删除留言
      // 	var dels = document.querySelectorAll('a');
      // 	for (var i = 0; i &lt; dels.length; i++) {
      // 		dels[i].onclick = function() {
      // 			uu.removeChild(this.parentNode);
      // 		}
      // 	}
      // }

      $(function() {
        $('button').on('click', function() {
          // 1、发布留言
          var li = $('&lt;li&gt;&lt;/li&gt;');
          li.html($('textarea').val() + '&lt;a href=&quot;javascript:;&quot;&gt;删除&lt;/a&gt;');
          $('ul').prepend(li);

          // // 2、删除留言
          //因发布留言中动态创建的li(a)在此click事件之前，所以此方法可以
          // $('a').on('click', function() {
          // 	$(this).parent().remove();
          // })

          //若将发布留言的代码放在删除留言代码的后面，或者放在button按钮事件的外面
          //即动态创建的li(a)在此click事件之后创建，就一定要用事件委托
          $('ul').on('click', 'a', function() {
            $(this).parent().remove();
          }) //此处的this指的是实际触发对象a
        })
      })
    &lt;/script&gt;
  &lt;/body&gt;
&lt;/html&gt;
</code></pre>
<p>可以复制上面代码在<a href="https://www.w3ccoo.com/tryit/tryit.asp?">W3Schools 在线代码编辑器</a>上运行查看效果</p>
]]></content:encoded>
      <category>学习</category>
      <category>笔记</category>
      <category>jQuery</category>
      <category>学习</category>
    </item>
    <item>
      <title>jQuery操作</title>
      <link>https://zxwlove.de5.net/posts/2024/jQuery操作</link>
      <guid isPermaLink="true">https://zxwlove.de5.net/posts/2024/jQuery操作</guid>
      <pubDate>Sun, 14 Jul 2024 12:32:00 GMT</pubDate>
      <author>浅小兮</author>
      <description>jQuery操作</description>
      <content:encoded><![CDATA[<h3>一、jQuery样式操作（书本255页 表7-11）</h3>
<p>1、操作CSS的方法</p>
<ol>
<li>获取样式：<code>**元素.css(‘属性名’);**</code></li>
<li>设置样式：<code>**元素.css(‘属性名’,’值’);**</code></li>
<li>设置多组样式：<code>**元素.css({对象});**</code>（不推荐）</li>
</ol>
<p>2、操作类样式的方法</p>
<ol>
<li>添加类：<code>**.addClass('类名')**</code></li>
<li>移除类：<code>**.removeClass('类名')**</code></li>
<li>切换类：<code>**.toggleClass('类名')**</code></li>
</ol>
<p>3、案例应用：DOM中的选项卡切换例子</p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;meta charset=&quot;utf-8&quot;&gt;
    &lt;title&gt;&lt;/title&gt;
    &lt;style&gt;
      body,
      ul,
      li {
        margin: 0;
        padding: 0;
      }

      body {
        font: 12px/1.5 Tahoma;
      }

      #outer {
        width: 450px;
        margin: 10px auto;
      }

      #tab {
        overflow: hidden;
        zoom: 1;
        background: #000;
        border: 1px solid #000;
      }

      #tab li {
        float: left;
        color: #fff;
        height: 30px;
        cursor: pointer;
        line-height: 30px;
        list-style-type: none;
        padding: 0 20px;
      }

      #tab li.current {
        color: #000;
        background: #ccc;
      }

      #content {
        border: 1px solid #000;
        border-top-width: 0;
      }

      #content ul {
        line-height: 25px;
        display: none;
        margin: 0 30px;
        padding: 10px 0;
      }
    &lt;/style&gt;
    &lt;script src=&quot;https://code.jquery.com/jquery-3.7.0.min.js&quot;&gt;&lt;/script&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;div id=&quot;outer&quot;&gt;
      &lt;ul id=&quot;tab&quot;&gt;
        &lt;li class=&quot;current&quot;&gt;第一课&lt;/li&gt;
        &lt;li&gt;第二课&lt;/li&gt;
        &lt;li&gt;第三课&lt;/li&gt;
      &lt;/ul&gt;
      &lt;div id=&quot;content&quot;&gt;
        &lt;ul style=&quot;display:block;&quot;&gt;
          &lt;li&gt;网页特效原理分析&lt;/li&gt;
          &lt;li&gt;响应用户操作&lt;/li&gt;
          &lt;li&gt;提示框效果&lt;/li&gt;
          &lt;li&gt;事件驱动&lt;/li&gt;
          &lt;li&gt;元素属性操作&lt;/li&gt;
          &lt;li&gt;动手编写第一个JS特效&lt;/li&gt;
          &lt;li&gt;引入函数&lt;/li&gt;
          &lt;li&gt;网页换肤效果&lt;/li&gt;
          &lt;li&gt;展开/收缩播放列表效果&lt;/li&gt;
        &lt;/ul&gt;
        &lt;ul&gt;
          &lt;li&gt;改变网页背景颜色&lt;/li&gt;
          &lt;li&gt;函数传参&lt;/li&gt;
          &lt;li&gt;高重用性函数的编写&lt;/li&gt;
          &lt;li&gt;126邮箱全选效果&lt;/li&gt;
          &lt;li&gt;循环及遍历操作&lt;/li&gt;
          &lt;li&gt;调试器的简单使用&lt;/li&gt;
          &lt;li&gt;典型循环的构成&lt;/li&gt;
          &lt;li&gt;for循环配合if判断&lt;/li&gt;
          &lt;li&gt;className的使用&lt;/li&gt;
          &lt;li&gt;innerHTML的使用&lt;/li&gt;
          &lt;li&gt;戛纳印象效果&lt;/li&gt;
          &lt;li&gt;数组&lt;/li&gt;
          &lt;li&gt;字符串连接&lt;/li&gt;
        &lt;/ul&gt;
        &lt;ul&gt;
          &lt;li&gt;JavaScript组成：ECMAScript、DOM、BOM，JavaScript兼容性来源&lt;/li&gt;
          &lt;li&gt;JavaScript出现的位置、优缺点&lt;/li&gt;
          &lt;li&gt;变量、类型、typeof、数据类型转换、变量作用域&lt;/li&gt;
          &lt;li&gt;闭包：什么是闭包、简单应用、闭包缺点&lt;/li&gt;
          &lt;li&gt;运算符：算术、赋值、关系、逻辑、其他运算符&lt;/li&gt;
          &lt;li&gt;程序流程控制：判断、循环、跳出&lt;/li&gt;
          &lt;li&gt;命名规范：命名规范及必要性、匈牙利命名法&lt;/li&gt;
          &lt;li&gt;函数详解：函数构成、调用、事件、传参数、可变参、返回值&lt;/li&gt;
          &lt;li&gt;定时器的使用：setInterval、setTimeout&lt;/li&gt;
          &lt;li&gt;定时器应用：站长站导航效果&lt;/li&gt;
          &lt;li&gt;定时器应用：自动播放的选项卡&lt;/li&gt;
          &lt;li&gt;定时器应用：数码时钟&lt;/li&gt;
          &lt;li&gt;程序调试方法&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;script&gt;
      // var tabLi = document.getElementById('tab').querySelectorAll('li');
      // var contentUl = document.getElementById('content').querySelectorAll('ul');
      // for (var i = 0; i &lt; tabLi.length; i++) {
      // 	tabLi[i].index = i;
      // 	tabLi[i].onclick = function() {
      // 		for (var j = 0; j &lt; tabLi.length; j++) {
      // 			tabLi[j].className = '';
      // 		}
      // 		this.className = 'current';

      // 		for (var k = 0; k &lt; contentUl.length; k++) {
      // 			contentUl[k].style.display = '';
      // 		}
      // 		contentUl[this.index].style.display = 'block';
      // 	}
      // }

      $(function() {
        $('#tab li').click(function() {
          // 1.链式编程，上部里面的当前li添加current类，其余兄弟移除类
          $(this).addClass('current').siblings().removeClass('current');
          // 点击的同时，得到当前li的索引号
          var index = $(this).index();
          // 2.链式编程，让下部里面相应索引号的ul显示，其余的ul隐藏
          $('#content ul').eq(index).show().siblings().hide();
        })
      })
    &lt;/script&gt;
  &lt;/body&gt;
&lt;/html&gt;
</code></pre>
<p>可以复制上面代码在<a href="https://www.w3ccoo.com/tryit/tryit.asp?">W3Schools 在线代码编辑器</a>上运行查看效果</p>
<h3>二、jQuery属性操作（书本254页 表7-9）</h3>
<p>1、获取或设置元素的固有属性值<code>**.prop()**</code>
1）获取属性：<code>**元素.prop(‘属性名’);**</code>
2）设置属性：<code>**元素.prop(‘属性名’, ’值’);**</code>
3）移除属性值：<code>**元素.prop(‘属性名’, ’ ’);**</code>   //只是清空属性值，属性名仍在
2、获取或设置元素的自定义属性值<code>**.attr()**</code>
1）获取属性：<code>**元素.attr(‘属性名’); **</code>
2）设置属性：<code>**元素.attr(‘属性名’, ’值’);** </code>
3）移除属性：<code>**元素.removeAttr(‘属性名’);**</code>  //连属性名一起移除了
4）注：<code>.attr()</code>也可用于元素的固有属性，但一般都用在自定义属性中。
3、案例应用：购物车——全选、选中商品添加背景色</p>
<h3>三、jQuery内容文本操作（书本255页 表7-10）</h3>
<p>1、普通元素内容html()、text()
1）获取元素的内容：<code>**元素.html();** </code> <code>**元素.text();**</code>
2）设置元素的内容：<code>**元素.html(’内容’);** ``**元素.text (’文本内容’);**</code>
2、表单的值val()
1）获取表单的值：<code>**元素.val();** </code>
2）设置表单的值：<code>**元素.val(’内容’);** </code>
3、案例应用：购物车——增减商品数量、修改商品小计（源码同案例5）</p>
<h3>四、jQuery遍历元素</h3>
<p>1、jQuery隐式迭代是对同一类元素做了同样的操作。如果想要给同一类元素做不同的操作，就需要用到遍历元素each方法（书本250页 表7-8）
2、语法1：</p>
<pre><code class="language-javascript">元素.each(function(index, element){……}) 
</code></pre>
<pre><code>  语法2：
</code></pre>
<pre><code class="language-javascript">$.each(object, function(index, element){……})
</code></pre>
<p>3、案例应用：购物车——计算总计、总额
五、jQuery元素操作（书本257页 表7-13）
1、元素创建：<code>**$(‘元素标签’);**</code>
2、元素赋值：<code>**元素.html(’内容’);**``**元素.text (’内容’);**``**元素.val(’内容’);**</code>
**    <strong>注：固定文本也可以在创建的同时就赋值，例如<code>$('&lt;li&gt;'hello'&lt;/li&gt;');</code>
3、元素添加
1）内部添加
① 放入匹配元素内部的最后面</strong>：<strong><code>**父元素.append(‘内容’); **</code>
② 放入匹配元素内部的最前面</strong>：**<code>**父元素.prepend(‘内容’);** </code>
③ 内部添加元素，生成之后，它们是父子关系。
2）外部添加
① 放入目标元素的后面：<code>**目标元素.after(‘内容’);** </code>
② 放入目标元素的前面：<code>**目标元素.before(‘内容’);** </code>
③ 外部添加元素，生成之后，它们是兄弟关系。
4、元素删除
1）删除匹配的元素本身：<code>**元素.remove();**</code>    //自杀式删除
2）删除匹配的元素集合中所有的子节点：<code>**元素.empty();**</code>   //删除孩子</p>
<h3>5、案例应用：购物车——删除商品</h3>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;title&gt;我的购物车-品优购&lt;/title&gt;
    &lt;link rel=&quot;stylesheet&quot; href=&quot;css/base.css&quot;&gt;
    &lt;link rel=&quot;stylesheet&quot; href=&quot;css/common.css&quot;&gt;
    &lt;link rel=&quot;stylesheet&quot; href=&quot;css/car.css&quot;&gt;

    &lt;!-- 引入jquery  --&gt;
    &lt;script src=&quot;https://code.jquery.com/jquery-3.7.0.min.js&quot;&gt;&lt;/script&gt;
    &lt;!-- 引入我们自己的js文件 --&gt;
    &lt;script src=&quot;js/shopping-car.js&quot;&gt;&lt;/script&gt;
  &lt;/head&gt;

  &lt;body&gt;
    &lt;div class=&quot;car-header&quot;&gt;
      &lt;div class=&quot;w&quot;&gt;
        &lt;div class=&quot;car-logo&quot;&gt;
          &lt;img src=&quot;img/logo.png&quot; alt=&quot;&quot;&gt; &lt;b&gt;购物车&lt;/b&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;c-container&quot;&gt;
      &lt;div class=&quot;w&quot;&gt;
        &lt;div class=&quot;cart-filter-bar&quot;&gt;
          &lt;em&gt;全部商品&lt;/em&gt;
        &lt;/div&gt;
        &lt;!-- 购物车主要核心区域 --&gt;
        &lt;div class=&quot;cart-warp&quot;&gt;
          &lt;!-- 头部全选模块 --&gt;
          &lt;div class=&quot;cart-thead&quot;&gt;
            &lt;div class=&quot;t-checkbox&quot;&gt;
              &lt;input type=&quot;checkbox&quot; name=&quot;&quot; id=&quot;&quot; class=&quot;checkall&quot;&gt; 全选
            &lt;/div&gt;
            &lt;div class=&quot;t-goods&quot;&gt;商品&lt;/div&gt;
            &lt;div class=&quot;t-price&quot;&gt;单价&lt;/div&gt;
            &lt;div class=&quot;t-num&quot;&gt;数量&lt;/div&gt;
            &lt;div class=&quot;t-sum&quot;&gt;小计&lt;/div&gt;
            &lt;div class=&quot;t-action&quot;&gt;操作&lt;/div&gt;
          &lt;/div&gt;
          &lt;!-- 商品详细模块 --&gt;
          &lt;div class=&quot;cart-item-list&quot;&gt;
            &lt;div class=&quot;cart-item check-cart-item&quot;&gt;
              &lt;div class=&quot;p-checkbox&quot;&gt;
                &lt;input type=&quot;checkbox&quot; name=&quot;&quot; id=&quot;&quot; checked class=&quot;j-checkbox&quot;&gt;
              &lt;/div&gt;
              &lt;div class=&quot;p-goods&quot;&gt;
                &lt;div class=&quot;p-img&quot;&gt;
                  &lt;img src=&quot;img/p1.jpg&quot; alt=&quot;&quot;&gt;
                &lt;/div&gt;
                &lt;div class=&quot;p-msg&quot;&gt;【5本26.8元】经典儿童文学彩图青少版八十天环游地球中学生语文教学大纲&lt;/div&gt;
              &lt;/div&gt;
              &lt;div class=&quot;p-price&quot;&gt;￥12.60&lt;/div&gt;
              &lt;div class=&quot;p-num&quot;&gt;
                &lt;div class=&quot;quantity-form&quot;&gt;
                  &lt;a href=&quot;javascript:;&quot; class=&quot;decrement&quot;&gt;-&lt;/a&gt;
                  &lt;input type=&quot;text&quot; class=&quot;itxt&quot; value=&quot;1&quot;&gt;
                  &lt;a href=&quot;javascript:;&quot; class=&quot;increment&quot;&gt;+&lt;/a&gt;
                &lt;/div&gt;
              &lt;/div&gt;
              &lt;div class=&quot;p-sum&quot;&gt;￥12.60&lt;/div&gt;
              &lt;div class=&quot;p-action&quot;&gt;&lt;a href=&quot;javascript:;&quot;&gt;删除&lt;/a&gt;&lt;/div&gt;
            &lt;/div&gt;
            &lt;div class=&quot;cart-item&quot;&gt;
              &lt;div class=&quot;p-checkbox&quot;&gt;
                &lt;input type=&quot;checkbox&quot; name=&quot;&quot; id=&quot;&quot; class=&quot;j-checkbox&quot;&gt;
              &lt;/div&gt;
              &lt;div class=&quot;p-goods&quot;&gt;
                &lt;div class=&quot;p-img&quot;&gt;
                  &lt;img src=&quot;img/p2.jpg&quot; alt=&quot;&quot;&gt;
                &lt;/div&gt;
                &lt;div class=&quot;p-msg&quot;&gt;【2000张贴纸】贴纸书 3-6岁 贴画儿童 贴画书全套12册 贴画 贴纸儿童 汽&lt;/div&gt;
              &lt;/div&gt;
              &lt;div class=&quot;p-price&quot;&gt;￥24.80&lt;/div&gt;
              &lt;div class=&quot;p-num&quot;&gt;
                &lt;div class=&quot;quantity-form&quot;&gt;
                  &lt;a href=&quot;javascript:;&quot; class=&quot;decrement&quot;&gt;-&lt;/a&gt;
                  &lt;input type=&quot;text&quot; class=&quot;itxt&quot; value=&quot;1&quot;&gt;
                  &lt;a href=&quot;javascript:;&quot; class=&quot;increment&quot;&gt;+&lt;/a&gt;
                &lt;/div&gt;
              &lt;/div&gt;
              &lt;div class=&quot;p-sum&quot;&gt;￥24.80&lt;/div&gt;
              &lt;div class=&quot;p-action&quot;&gt;&lt;a href=&quot;javascript:;&quot;&gt;删除&lt;/a&gt;&lt;/div&gt;
            &lt;/div&gt;
            &lt;div class=&quot;cart-item&quot;&gt;
              &lt;div class=&quot;p-checkbox&quot;&gt;
                &lt;input type=&quot;checkbox&quot; name=&quot;&quot; id=&quot;&quot; class=&quot;j-checkbox&quot;&gt;
              &lt;/div&gt;
              &lt;div class=&quot;p-goods&quot;&gt;
                &lt;div class=&quot;p-img&quot;&gt;
                  &lt;img src=&quot;img/p3.jpg&quot; alt=&quot;&quot;&gt;
                &lt;/div&gt;
                &lt;div class=&quot;p-msg&quot;&gt;唐诗三百首+成语故事全2册 一年级课外书 精装注音儿童版 小学生二三年级课外阅读书籍&lt;/div&gt;
              &lt;/div&gt;
              &lt;div class=&quot;p-price&quot;&gt;￥29.80&lt;/div&gt;
							&lt;div class=&quot;p-num&quot;&gt;
								&lt;div class=&quot;quantity-form&quot;&gt;
									&lt;a href=&quot;javascript:;&quot; class=&quot;decrement&quot;&gt;-&lt;/a&gt;
									&lt;input type=&quot;text&quot; class=&quot;itxt&quot; value=&quot;1&quot;&gt;
									&lt;a href=&quot;javascript:;&quot; class=&quot;increment&quot;&gt;+&lt;/a&gt;
								&lt;/div&gt;
							&lt;/div&gt;
							&lt;div class=&quot;p-sum&quot;&gt;￥29.80&lt;/div&gt;
							&lt;div class=&quot;p-action&quot;&gt;&lt;a href=&quot;javascript:;&quot;&gt;删除&lt;/a&gt;&lt;/div&gt;
						&lt;/div&gt;
					&lt;/div&gt;

					&lt;!-- 结算模块 --&gt;
					&lt;div class=&quot;cart-floatbar&quot;&gt;
						&lt;div class=&quot;select-all&quot;&gt;
							&lt;input type=&quot;checkbox&quot; name=&quot;&quot; id=&quot;&quot; class=&quot;checkall&quot;&gt;全选
						&lt;/div&gt;
						&lt;div class=&quot;operation&quot;&gt;
							&lt;a href=&quot;javascript:;&quot; class=&quot;remove-batch&quot;&gt; 删除选中商品&lt;/a&gt;
							&lt;a href=&quot;javascript:;&quot; class=&quot;clear-all&quot;&gt;清空购物车&lt;/a&gt;
						&lt;/div&gt;
						&lt;div class=&quot;toolbar-right&quot;&gt;
							&lt;div class=&quot;amount-sum&quot;&gt;已经选&lt;em&gt;1&lt;/em&gt;件商品&lt;/div&gt;
							&lt;div class=&quot;price-sum&quot;&gt;总价： &lt;em&gt;￥12.60&lt;/em&gt;&lt;/div&gt;
							&lt;div class=&quot;btn-area&quot;&gt;去结算&lt;/div&gt;
						&lt;/div&gt;
					&lt;/div&gt;
				&lt;/div&gt;
			&lt;/div&gt;
		&lt;/div&gt;
	&lt;/body&gt;
&lt;/html&gt; 

</code></pre>
<p>以下是css代码base.css</p>
<pre><code class="language-css">/*清除元素默认的内外边距  */
* {
  margin: 0;
  padding: 0
}
/*让所有斜体 不倾斜*/
em,
i {
  font-style: normal;
}
/*去掉列表前面的小点*/
li {
  list-style: none;
}
/*图片没有边框   去掉图片底侧的空白缝隙*/
img {
  border: 0;  /*ie6*/
  vertical-align: middle;
}
/*让button 按钮 变成小手*/
button {
  cursor: pointer;
}
/*取消链接的下划线*/
a {
  color: #666;
  text-decoration: none;
}

a:hover {
  color: #e33333;
}

button,
input {
  font-family: 'Microsoft YaHei', 'Heiti SC', tahoma, arial, 'Hiragino Sans GB', \\5B8B\4F53, sans-serif;
  /*取消轮廓线 蓝色的*/
  outline: none;
}

body {
  background-color: #fff;
  font: 12px/1.5 'Microsoft YaHei', 'Heiti SC', tahoma, arial, 'Hiragino Sans GB', \\5B8B\4F53, sans-serif;
  color: #666
}

.hide,
.none {
  display: none;
}
/*清除浮动*/
.clearfix:after {
  visibility: hidden;
  clear: both;
  display: block;
  content: &quot;.&quot;;
  height: 0
}

.clearfix {
  *zoom: 1
}
</code></pre>
<p>car.css</p>
<pre><code class="language-css">.car-header {
  padding: 20px 0;
}

.car-logo img {
  vertical-align: middle;
}

.car-logo b {
  font-size: 20px;
  margin-top: 20px;
  margin-left: 10px;
}

.cart-filter-bar {
  font-size: 16px;
  color: #E2231A;
  font-weight: 700;
}

.cart-filter-bar em {
  padding: 5px;
  border-bottom: 1px solid #E2231A;
}

.cart-thead {
  height: 32px;
  line-height: 32px;
  margin: 5px 0 10px;
  padding: 5px 0;
  background: #f3f3f3;
  border: 1px solid #e9e9e9;
  border-top: 0;
  position: relative;
}

.cart-thead&gt;div,
.cart-item&gt;div {
  float: left;
}

.t-checkbox,
.p-checkbox {
  height: 18px;
  line-height: 18px;
  padding-top: 7px;
  width: 122px;
  padding-left: 11px;
}

.t-goods {
  width: 400px;
}

.t-price {
  width: 120px;
  padding-right: 40px;
  text-align: right;
}

.t-num {
  width: 150px;
  text-align: center;
}

.t-sum {
  width: 100px;
  text-align: right;
}

.t-action {
  width: 130px;
  text-align: right;
}

.cart-item {
  height: 160px;
  border-style: solid;
  border-width: 2px 1px 1px;
  border-color: #aaa #f1f1f1 #f1f1f1;
  background: #fff;
  padding-top: 14px;
  margin: 15px 0;
}

.check-cart-item {
  background: #fff4e8;
}

.p-checkbox {
  width: 50px;
}

.p-goods {
  margin-top: 8px;
  width: 565px;
}

.p-img {
  float: left;
  border: 1px solid #ccc;
  padding: 5px;
}

.p-msg {
  float: left;
  width: 210px;
  margin: 0 10px;
}

.p-price {
  width: 110px;
}

.quantity-form {
  width: 80px;
  height: 22px;
}

.p-num {
  width: 170px;
}

.decrement,
.increment {
  float: left;
  border: 1px solid #cacbcb;
  height: 18px;
  line-height: 18px;
  padding: 1px 0;
  width: 16px;
  text-align: center;
  color: #666;
  margin: 0;
  background: #fff;
  margin-left: -1px;
}

.itxt {
  float: left;
  border: 1px solid #cacbcb;
  width: 42px;
  height: 18px;
  line-height: 18px;
  text-align: center;
  padding: 1px;
  margin: 0;
  margin-left: -1px;
  font-size: 12px;
  font-family: verdana;
  color: #333;
  -webkit-appearance: none;
}

.p-sum {
  font-weight: 700;
  width: 145px;
}


/* 结算模块 */

.cart-floatbar {
  height: 50px;
  border: 1px solid #f0f0f0;
  background: #fff;
  position: relative;
  margin-bottom: 50px;
  line-height: 50px;
}

.select-all {
  float: left;
  height: 18px;
  line-height: 18px;
  padding: 16px 0 16px 9px;
  white-space: nowrap;
}

.select-all input {
  vertical-align: middle;
  display: inline-block;
  margin-right: 5px;
}

.operation {
  float: left;
  width: 200px;
  margin-left: 40px;
}

.clear-all {
  font-weight: 700;
  margin: 0 20px;
}

.toolbar-right {
  float: right;
}

.amount-sum {
  float: left;
}

.amount-sum em {
  font-weight: 700;
  color: #E2231A;
  padding: 0 3px;
}

.price-sum {
  float: left;
  margin: 0 15px;
}

.price-sum em {
  font-size: 16px;
  color: #E2231A;
  font-weight: 700;
}

.btn-area {
    font-weight: 700;
    width: 94px;
    height: 52px;
    line-height: 52px;
    color: #fff;
    text-align: center;
    font-size: 18px;
    font-family: &quot;Microsoft YaHei&quot;;
    background: #e54346;
    overflow: hidden;
}
</code></pre>
<p>common.css</p>
<pre><code class="language-css">/*公共样式*/

.fl {
  float: left;
}

.fr {
  float: right;
}


.fr .icomoon {
  font-family: 'icomoon';
  font-size: 16px;
  line-height: 26px;
}


/*版心*/

.w {
  width: 1200px;
  margin: 0 auto;
}

.style-red {
  color: #c81623;
}

.spacer {
  width: 1px;
  height: 12px;
  background-color: #666;
  margin: 9px 12px 0;
}


/*顶部快捷导航*/

.shortcut {
  height: 31px;
  background-color: #f1f1f1;
  line-height: 31px;
}

.shortcut li {
  float: left;
}


/*header区域*/

.header {
  position: relative;
  height: 105px;
}

.logo {
  position: absolute;
  top: 25px;
  left: 0;
  width: 175px;
  height: 56px;
}

.logo a {
  display: block;
  /*overflow: hidden;*/
  width: 175px;
  height: 56px;
  background: url(../img/logo.png) no-repeat;
  /*text-indent: -999px;*/
  font-size: 0;
}

.search {
  position: absolute;
  top: 25px;
  left: 348px;
}

.text {
  float: left;
  width: 445px;
  height: 32px;
  border: 2px solid #b1191a;
  padding-left: 10px;
  color: #ccc;
}

.btn {
  float: left;
  width: 82px;
  height: 36px;
  background-color: #b1191a;
  border: 0;
  font-size: 16px;
  color: #fff;
}

.hotwrods {
  position: absolute;
  top: 65px;
  left: 348px;
}

.hotwrods a {
  margin: 0 10px;
}

.shopcar {
  position: absolute;
  top: 25px;
  right: 64px;
  width: 138px;
  height: 34px;
  border: 1px solid #dfdfdf;
  background-color: #f7f7f7;
  line-height: 34px;
  text-align: center;
}

.car {
  font-family: 'icomoon';
  color: #da5555;
}

.arrow {
  font-family: 'icomoon';
  margin-left: 5px;
}

.count {
  position: absolute;
  top: -5px;
  /*应该是左侧对齐 文字才能往右走显示*/
  left: 100px;
  background-color: #e60012;
  height: 14px;
  padding: 0 3px;
  line-height: 14px;
  color: #fff;
  /*border-radius: 左上角 右上角  右下角  左下角;*/
  border-radius: 7px 7px 7px 0;
}


/*nav start*/

.nav {
  height: 45px;
  border-bottom: 2px solid #b1191a;
}

.dropdown {
  width: 209px;
  height: 45px;
}

.dropdown .dt {
  height: 100%;
  background-color: #b1191a;
  font-size: 16px;
  color: #fff;
  text-align: center;
  line-height: 45px;
}

.dropdown .dd {
  height: 465px;
  background-color: #c81623;
  margin-top: 2px;
}

.menu_item:hover {
  background-color: #fff;
}


/*鼠标经过li 里面的 a变颜色*/

.menu_item:hover a {
  color: #c81623;
}

.menu_item {
  height: 31px;
  line-height: 31px;
  margin-left: 1px;
  padding: 0 10px;
  transition: all .5s;
}

.menu_item:hover {
  padding-left: 20px;
}

.menu_item a {
  font-size: 14px;
  color: #fff;
}

.menu_item i {
  float: right;
  font-family: 'icomoon';
  font-size: 18px;
  color: #fff;
}

.navitems {
  margin-left: 10px;
}

.navitems li {
  float: left;
}

.navitems li a {
  display: block;
  height: 45px;
  padding: 0 25px;
  line-height: 45px;
  font-size: 16px;
}


/*footer 部分*/

.footer {
  height: 386px;
  background-color: #f5f5f5;
  padding-top: 30px;
}

.mod_service {
  height: 79px;
  border-bottom: 1px solid #ccc;
}

.mod_service li {
  float: left;
  width: 240px;
  height: 79px;
}

.mod-service-icon {
  /*浮动的盒子 可以直接给大小的 不需要转换*/
  float: left;
  width: 50px;
  height: 50px;
  margin-left: 35px;
  background: url(../img/icons.png) no-repeat;
}

.mod_service_zheng {
  background-position: -253px -3px;
}

.mod_service_tit {
  float: left;
  margin-left: 5px;
}

.mod_service_tit h5 {
  margin: 5px 0;
}

.mod_service_kuai {
  background-position: -255px -54px;
}

.mod_service_bao {
  background-position: -257px -105px;
}

.mod_help {
  height: 187px;
  border-bottom: 1px solid #ccc;
}

.mod_help_item {
  float: left;
  width: 150px;
  padding: 20px 0 0 50px;
}

.mod_help_item dt {
  height: 25px;
  font-size: 16px;
}

.mod_help_item dd {
  height: 22px;
}

.mod_help_app dt,
.mod_help_app p {
  padding-left: 15px;
}

.mod_help_app img {
  margin: 7px 0;
}

.mod_copyright {
  text-align: center;
}

.mod_copyright_links {
  margin: 20px 0 15px 0;
}

.mod_copyright_info {
  line-height: 18px;
}
</code></pre>
<p>以下是shopping-car.js</p>
<pre><code class="language-javascript">$(function() {
  //全选、选中商品添加背景色
  $('.checkall').change(function() {
    $('.j-checkbox,.checkall').prop('checked', $(this).prop('checked'));

    if ($(this).prop('checked') == true) {
      $('.cart-item').addClass('check-cart-item');
    } else {
      $('.cart-item').removeClass('check-cart-item');
    }
  })

  $('.j-checkbox').change(function() {
    if ($('.j-checkbox:checked').length == $('.j-checkbox').length) {
      $('.checkall').prop('checked', true);
    } else {
      $('.checkall').prop('checked', false);
    }

    if ($(this).prop('checked') == true) {
      $(this).parents('.cart-item').addClass('check-cart-item');
    } else {
      $(this).parents('.cart-item').removeClass('check-cart-item');
    }
  })

  //增减商品数量、修改商品小计
  $('.increment').click(function() {
    var n = $(this).siblings('.itxt').val();
    n++;
    $(this).siblings('.itxt').val(n);

    var price = $(this).parents('.p-num').siblings('.p-price').text().substr(1);
    var total = price * n;
    $(this).parents('.p-num').siblings('.p-sum').text('￥' + total.toFixed(2));

    getSum();
  })

  $('.decrement').click(function() {
    var n = $(this).siblings('.itxt').val();
    if (n == 1) {
      return;
    }
    n--;
    $(this).siblings('.itxt').val(n);

    var price = $(this).parents('.p-num').siblings('.p-price').text().substr(1);
    var total = price * n;
    $(this).parents('.p-num').siblings('.p-sum').text('￥' + total.toFixed(2));

    getSum();
  })

  //修改文本框的值 计算小计
  $('.itxt').change(function() {
    var price = $(this).parents('.p-num').siblings('.p-price').text().substr(1);
    var n = $(this).val();
    var total = price * n;
    $(this).parents('.p-num').siblings('.p-sum').text('￥' + total.toFixed(2));

    getSum();
  })

  //计算总计、总额
  function getSum() {
    var count = 0;
    $('.itxt').each(function() {
      count += $(this).val() - 0;
    })
    $('.amount-sum em').text(count);

    var money = 0;
    $('.p-sum').each(function() {
      money += $(this).text().substr(1) - 0;
    })
    $('.price-sum em').text('￥' + money.toFixed(2));
  }

  // 删除商品
  // (1) 商品后面的删除按钮
  $('.p-action a').click(function() {
    $(this).parents('.cart-item').remove();
    getSum();
  })

  // (2) 删除选中商品
  $('.remove-batch').click(function() {
    $('.j-checkbox:checked').parents('.cart-item').remove();
    getSum();
  })

  // (3) 清空购物车
  $('.clear-all').click(function() {
    $('.cart-item').remove();
    getSum();
  })
})
</code></pre>
<p>以上通过<a href="https://www.jyshare.com/front-end/61/">菜鸟在线工具</a>可查看效果</p>
]]></content:encoded>
      <category>学习</category>
      <category>笔记</category>
      <category>jQuery</category>
      <category>学习</category>
    </item>
    <item>
      <title>jQuery概述</title>
      <link>https://zxwlove.de5.net/posts/2024/jQuery概述</link>
      <guid isPermaLink="true">https://zxwlove.de5.net/posts/2024/jQuery概述</guid>
      <pubDate>Sun, 14 Jul 2024 12:30:00 GMT</pubDate>
      <author>浅小兮</author>
      <description>jQuery概述</description>
      <content:encoded><![CDATA[<h3>一、jQuery概述</h3>
<p>1、jQuery是一个快速、简洁的JavaScript库，其设计的宗旨是“Write Less，Do More”，即倡导写更少的代码，做更多的事情。
2、jQuery：j就是JavaScript，Query查询，jQuery意思就是查询JS。jQuery封装了JavaScript常用的功能代码，学习jQuery的本质就是学习调用这些函数（方法）。
3、jQuery的优点</p>
<ul>
<li>1）轻量级。</li>
<li>2）跨浏览器兼容。</li>
<li>3）链式编程、隐式迭代。</li>
<li>4）对事件、样式、动画支持。</li>
<li>5）支持插件扩展开发，有丰富的第三方插件。</li>
<li>6）免费、开源。</li>
</ul>
<h3>二、jQuery的下载</h3>
<p>【官方地址：<a href="https://jquery.com/">https://jquery.com/</a>】</p>
<h3>三、jQuery的基本使用</h3>
<h6>1、jQuery的引入：</h6>
<pre><code class="language-javascript">&lt;script src=&quot;jquery文件路径&quot;&gt;&lt;/script&gt;
</code></pre>
<h6>2、jQuery的入口函数（书本229页）</h6>
<p>推荐写法：</p>
<pre><code class="language-javascript">$(function(){   
  ……
});
</code></pre>
<p>1）<code>$</code>是jQuery的别称，上述入口函数中所有的$均可以用jQuery代替。
2）<code>$</code>同时也是jQuery的顶级对象。</p>
<h6>3、jQuery对象和DOM对象</h6>
<ol>
<li>用原生js方法获取来的元素就是DOM对象。</li>
<li>用jQuery方法获取来的元素就是jQuery对象。</li>
<li>jQuery对象只能使用jQuery方法；DOM对象则只能使用原生的JS属性和方法。</li>
<li>jQuery对象和DOM对象的相互转换（书本232页）</li>
</ol>
<ul>
<li>DOM对象转换为jQuery对象：<code>$(DOM对象);</code></li>
<li>jQuery对象转换为DOM对象：<code>$('button')[index];</code> 或者 <code>$('button').get(index);</code></li>
</ul>
<h3>四、jQuery获取元素</h3>
<h6>1、语法：</h6>
<pre><code class="language-javascript">$('选择器');
</code></pre>
<h6>2、jQuery选择器：</h6>
<p>书本233-247页 表7-1、7-2、7-3、7-4、7-5、7-6、7-7</p>
<table>
<thead>
<tr>
<th>名称</th>
<th>用法</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td>标签选择器</td>
<td>$('div')</td>
<td>获取指定标签名的元素</td>
</tr>
<tr>
<td>类选择器</td>
<td>$('.class')</td>
<td>获取指定class类名的元素</td>
</tr>
<tr>
<td>ID选择器</td>
<td>$('#id')</td>
<td>获取指定ID名的元素</td>
</tr>
<tr>
<td>群组选择器</td>
<td>$('div,p,#id')</td>
<td>获取多个元素</td>
</tr>
<tr>
<td>通配符选择器</td>
<td>$('*')</td>
<td>获取所有元素</td>
</tr>
<tr>
<td>后代选择器</td>
<td>$('ul li')</td>
<td>空格，获取ul下的所有li元素，包括孙子等</td>
</tr>
<tr>
<td>子代选择器</td>
<td>$('ul&gt;li')</td>
<td>&gt; 获取亲儿子层级的元素</td>
</tr>
<tr>
<td>相邻兄弟选择器</td>
<td>$('E+F')</td>
<td>+ 获取紧贴在E元素之后的F元素</td>
</tr>
<tr>
<td>普通兄弟选择器</td>
<td>$('E~F')</td>
<td>~ 获取E元素之后的所有兄弟元素F</td>
</tr>
</tbody>
</table>
<h3>五、jQuery常用的方法（书本250页 表7-7）</h3>
<ol>
<li></li>
</ol>
<ul>
<li>父<code>.parent()</code>：父元素（最近一级的父元素 亲爸爸）</li>
<li>祖<code>.parents()</code>：<strong>所有的</strong>祖先元素（父和父级以上的元素）</li>
<li><code>.parents(['选择器'])</code>：加选择器筛选指定的祖先元素（比一级一级.parent()找上去更简单）</li>
</ul>
<ol start="2">
<li>子</li>
</ol>
<ul>
<li><code>.children()</code>：相当于子代选择器，返回所有的<strong>直接</strong>子元素（最近一级 亲儿子）</li>
<li><code>.children(['选择器'])</code>：加选择器筛选指定的直接子元素。</li>
<li><code>.find('选择器')</code>：相当于后代选择器，返回所有指定选择器的后代（包括儿子和孙子）</li>
</ul>
<ol start="3">
<li>兄</li>
</ol>
<ul>
<li><code>.siblings()</code>：返回除了自身之外的所有<strong>同辈</strong>元素（亲兄弟，不包括自己本身）</li>
<li><code>.siblings(['选择器'])</code>：加选择器筛选指定的同辈元素。</li>
<li><code>.nextAll()</code>、<code>.prevAll()</code>：返回当前元素之后|之前的所有同辈元素</li>
</ul>
<ol start="4">
<li></li>
</ol>
<ul>
<li>第<code>n</code>个元素 <code>.eq(index)</code>：返回指定索引号的元素，索引号index从0开始。</li>
</ul>
<h3>六、jQuery的应用</h3>
<ol>
<li>jQuery设置样式：</li>
</ol>
<pre><code class="language-javascript">$('选择器').css('属性', '值');
</code></pre>
<ol start="2">
<li>jQuery中的排他思想</li>
<li>隐式迭代、链式编程（书本231页）</li>
</ol>
]]></content:encoded>
      <category>学习</category>
      <category>笔记</category>
      <category>jQuery</category>
      <category>学习</category>
    </item>
    <item>
      <title>Hive安装与启动</title>
      <link>https://zxwlove.de5.net/posts/2024/Hive安装</link>
      <guid isPermaLink="true">https://zxwlove.de5.net/posts/2024/Hive安装</guid>
      <pubDate>Thu, 27 Jun 2024 00:00:00 GMT</pubDate>
      <author>浅小兮</author>
      <description>Hive安装与启动教程</description>
      <content:encoded><![CDATA[<h2>修改hadoop相关参数</h2>
<ol>
<li>修改core-site.xml</li>
</ol>
<pre><code class="language-markdown">[atguigu@hadoop hive]$ vim /opt/module/hadoop/etc/hadoop/core-site.xml 
&lt;!-- 配置该atguigu(superUser)允许通过代理访问的主机节点 --&gt; 
    &lt;property&gt; 
        &lt;name&gt;hadoop.proxyuser.atguigu.hosts&lt;/name&gt; 
        &lt;value&gt;*&lt;/value&gt; 
    &lt;/property&gt; 
&lt;!-- 配置该atguigu(superUser)允许通过代理用户所属组 --&gt; 
    &lt;property&gt; 
        &lt;name&gt;hadoop.proxyuser.atguigu.groups&lt;/name&gt; 
        &lt;value&gt;*&lt;/value&gt; 
    &lt;/property&gt; 
&lt;!-- 配置该atguigu(superUser)允许通过代理的用户--&gt; 
    &lt;property&gt; 
        &lt;name&gt;hadoop.proxyuser.atguigu.users&lt;/name&gt; 
        &lt;value&gt;*&lt;/value&gt; 
&lt;/property&gt; 
</code></pre>
<ol start="2">
<li>配置yarn-site.xml</li>
</ol>
<pre><code class="language-markdown">[atguigu@hadoop hive]$ vim /opt/module/hadoop/etc/hadoop/yarn-site.xml 
&lt;!-- NodeManager使用内存数，默认8G，修改为4G内存 --&gt;（16g物理内存的改为2g或者是3g） 
&lt;property&gt; 
  &lt;description&gt;Amount of physical memory, in MB, that can be allocated  
    for containers. If set to -1 and 
    yarn.nodemanager.resource.detect-hardware-capabilities is true, it is 
    automatically calculated(in case of Windows and Linux). 
    In other cases, the default is 8192MB. 
  &lt;/description&gt; 
  &lt;name&gt;yarn.nodemanager.resource.memory-mb&lt;/name&gt; 
  &lt;value&gt;4096&lt;/value&gt; 
&lt;/property&gt; 
&lt;!-- 容器最小内存，默认512M --&gt; 
&lt;property&gt; 
  &lt;description&gt;The minimum allocation for every container request at the RM in MBs.  
    Memory requests lower than this will be set to the value of this property.  
    Additionally, a node manager that is configured to have less memory than this value 
  &lt;/description&gt; 
  &lt;name&gt;yarn.scheduler.minimum-allocation-mb&lt;/name&gt; 
  &lt;value&gt;512&lt;/value&gt; 
&lt;/property&gt; 
 
&lt;!-- 容器最大内存，默认8G，修改为4G --&gt; 
&lt;property&gt; 
  &lt;description&gt;The maximum allocation for every container request at the RM in MBs.  
    Memory requests higher than this will throw an InvalidResourceRequestException. 
  &lt;/description&gt; 
  &lt;name&gt;yarn.scheduler.maximum-allocation-mb&lt;/name&gt; 
  &lt;value&gt;4096&lt;/value&gt; 
&lt;/property&gt; 
 
&lt;!-- 虚拟内存检查，默认打开，修改为关闭 --&gt;（使用虚拟内存）
&lt;property&gt; 
&lt;description&gt;Whether virtual memory limits will be enforced for containers.&lt;/description&gt; 
&lt;name&gt;yarn.nodemanager.vmem-check-enabled&lt;/name&gt; 
&lt;value&gt;false&lt;/value&gt; 
&lt;/property&gt;
</code></pre>
<h2>Hive 解压安装</h2>
<blockquote>
<p>你可以下载自己喜欢的或者适配的版本</p>
</blockquote>
<ol>
<li>把apache-hive-3.1.2-bin.tar.gz 上传到linux 的/opt/software 目录下</li>
<li>将/opt/software/目录下的apache-hive-3.1.2-bin.tar.gz 到/opt/module/目录下面</li>
</ol>
<pre><code class="language-markdown">tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /opt/module/ 
</code></pre>
<ol start="3">
<li>修改解压后的目录名称为hive</li>
</ol>
<pre><code class="language-markdown">mv apache-hive-3.1.2-bin/ /opt/module/hive
</code></pre>
<ol start="4">
<li>修改/etc/profile.d/my_env.sh 文件，将hive 的/bin 目录添加到环境变量</li>
</ol>
<p>[atguigu@hadoop hive]$ <code>sudo vim /etc/profile.d/my_env.sh</code></p>
<pre><code class="language-markdown">……
#HIVE_HOME 
export HIVE_HOME=/opt/module/hive 
export PATH=$PATH:$HIVE_HOME/bin 
</code></pre>
<p>[atguigu@hadoop hive]$ <code>source /etc/profile</code></p>
<h2>Hive 元数据的三种部署方式</h2>
<h3>元数据库之Derby</h3>
<h4>内嵌模式示意图  :</h4>
<p><img src="https://cdn.nlark.com/yuque/0/2024/jpeg/29368235/1719282261908-2decd093-0065-4cea-8c7c-6b097e60fcf7.jpeg" alt=""></p>
<h4>Derby 数据库</h4>
<p>Derby 数据库是Java编写的内存数据库，在内嵌模式中与应用程序共享一个JVM，应用程序负责启动和停止。</p>
<h4>初始化Derby数据库</h4>
<ol>
<li>在hive根目录下，使用/bin目录中的schematool命令初始化hive自带的Derby元数据库</li>
</ol>
<pre><code class="language-markdown">[atguigu@hadoop hive]$ bin/schematool -dbType derby -initSchema
</code></pre>
<ol start="2">
<li>执行上述初始化元数据库时，会发现存在jar包冲突问题，现象如下：hadoop 和hive 下都有这个jar包，以底层的hadoop为主，改了hive的）</li>
</ol>
<pre><code class="language-markdown">SLF4J: Found binding in [jar:file:/opt/module/hive/lib/log4j-slf4j-impl
2.10.0.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: Found binding in [jar:file:/opt/module/hadoop-3.1.3/share/hadoop/common/lib/slf4j
log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
</code></pre>
<ol start="3">
<li>解决jar冲突问题，只需要将hive的/lib目录下的log4j-slf4j-impl-2.10.0.jar重命名即可</li>
</ol>
<pre><code class="language-markdown">[atguigu@hadoop hive]$ mv lib/log4j-slf4j-impl-2.10.0.jar lib/log4j-slf4j-impl-2.10.0.back
</code></pre>
<h4>启动Hive</h4>
<ol>
<li>执行/bin目录下的hive命令，就可以启动hive，并通过cli方式连接到hive</li>
</ol>
<pre><code class="language-markdown"> [atguigu@hadoop hive]$ bin/hive  
</code></pre>
<ol start="2">
<li>使用Hive</li>
</ol>
<pre><code class="language-markdown">hive&gt; show databases;                                      // 查看当前所有的数据库 
OK 
default 
Time taken: 0.472 seconds, Fetched: 1 row(s) 
hive&gt; show tables;                                         // 查看当前所有的表 
OK 
Time taken: 0.044 seconds 
hive&gt; create table test_derby(id int);            // 创建表test_derby，表中只有一个字段，字段类型是
int 
OK 
Time taken: 0.474 seconds 
hive&gt; insert into test_derby values(1001);                 // 向test_derby表中插入数据 
Query ID = atguigu_20211018153727_586935da-100d-4d7e-8a94-063d373cc5dd 
Total jobs = 3 
…… 
Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 1 
…… 
Stage-Stage-1: Map: 1  Reduce: 1   Cumulative CPU: 6.19 sec   HDFS Read: 12769 HDFS Write: 208 
SUCCESS 
Total MapReduce CPU Time Spent: 6 seconds 190 msec 
OK 
Time taken: 31.901 second 
hive&gt; select * from test_derby;                                // 查看test_derby表中所有数据 
OK 
1001 
Time taken: 0.085 seconds, Fetched: 1 row(s) 
hive&gt; exit; 
</code></pre>
<h4>内嵌模式只有一个JVM进程</h4>
<p>在内嵌模式下，命令行执行jps –ml命令，只能看到一个CliDriver进程。</p>
<pre><code class="language-markdown">[atguigu@hadoop hive]$ jps –ml 
7170 sun.tools.jps.Jps -ml 
6127 org.apache.hadoop.util.RunJar /opt/module/hive/lib/hive-cli-3.1.2.jar 
org.apache.hadoop.hive.cli.CliDriver
</code></pre>
<h4>Hive自带的元数据库的问题</h4>
<p>演示采用Derby作为元数据库的问题：
开启另一个会话窗口运行Hive，同时监控/tmp/atguigu目录中的hive.log文件，会观察到如下错误信息。</p>
<pre><code class="language-markdown">Caused by: ERROR XSDB6: Another instance of Derby may have already booted the database 
/opt/module/hive/metastore_db. 
        at org.apache.derby.iapi.error.StandardException.newException(Unknown Source) 
        at org.apache.derby.iapi.error.StandardException.newException(Unknown Source) 
        at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.privGetJBMSLockOnDB(Unknown 
Source) 
        at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.run(Unknown Source) 
... 
</code></pre>
<p>Hive默认使用的元数据库为derby并且部署方式是内嵌式，在开启Hive之后就会独占元数据库，且不与其他 客户端共享数据，如果想多窗口操作就会报错，操作比较局限。为此Hive支持采用MySQL作为元数据库，就可 以支持多窗口操作。</p>
<h3>元数据库之Mysql``</h3>
<h4>元数据服务模式示意图</h4>
<p><img src="https://cdn.nlark.com/yuque/0/2024/png/29368235/1719361584173-3e66b5ef-e4a1-4ce1-8dfc-ce8612afc088.png#averageHue=%23e0e0e0&amp;clientId=u18b79d3f-2c14-4&amp;from=paste&amp;height=354&amp;id=u00f651d3&amp;originHeight=708&amp;originWidth=1834&amp;originalType=binary&amp;ratio=2&amp;rotation=0&amp;showTitle=false&amp;size=104195&amp;status=done&amp;style=none&amp;taskId=uc24eb6a3-81d7-481b-9dfa-1fab1bbdd10&amp;title=&amp;width=917" alt="image.png"></p>
<h4>元数据服务模式</h4>
<p>在服务器端启动MetaStore服务，客户端利用<code>Thrift协议</code>通过<code>MetaStore服务</code>访问元数据库。 元数据服务的访问方式更适合在生产环境中部署使用，相比内嵌式，该方式更加的灵活。（<code>跨网络跨语言跨平台</code>）</p>
<h4>将Mysql 做为元数据库，部署元数据服务</h4>
<ol>
<li>首先，将hive的元数据库配置为Mysql</li>
</ol>
<p>[atguigu@hadoop hive]$ <code>vim conf/hive-site.xml</code></p>
<ol start="2">
<li>在hive-site.xml 文件中添加如下配置信息</li>
</ol>
<pre><code class="language-markdown">&lt;!-- 指定存储元数据要连接的地址 --&gt; 
&lt;property&gt; 
    &lt;name&gt;hive.metastore.uris&lt;/name&gt; 
    &lt;value&gt;thrift://hadoop102:9083&lt;/value&gt; 
&lt;/property&gt; 
</code></pre>
<p><code>注意</code>：在配置了此参数后，启动hive之前必须先启动元数据服务，否则，hive启动后无法连接到元数据服务</p>
<ol start="3">
<li>启动元数据服务</li>
</ol>
<p>[atguigu@hadoop hive]$ <code>bin/hive --service metastore</code>
2024-06-25 18:22:24: Starting Hive Metastore Server<br>
<code>注意</code>: 启动后窗口不能再操作，需打开一个<code>新的shell窗口</code>做别的操作</p>
<ul>
<li>启动 hive，查看表及表中数据，是否是Mysql数据库中的表。</li>
<li>在另一个窗口启动hive，测试多客户端能否同时连接操作。</li>
</ul>
<h2>hive 的两种访问方式</h2>
<h3>命令行的方式</h3>
<h3>HiveServer2 模式</h3>
<h4>JDBC 访问Hive 示意图：</h4>
<h4>JDBC 方式访问Hive</h4>
<p>JDBC 方式，本质上是将hive包装为服务发布出去，开发者使用JDBC的方式连接到服务，从而操作hive。 减少了对hive环境的依赖</p>
<h4>开启Hiveserver2</h4>
<ol>
<li>在hive-site.xml 文件中添加如下配置信息</li>
</ol>
<pre><code class="language-markdown">&lt;!-- 指定hiveserver2 连接的host --&gt; 
&lt;property&gt; 
    &lt;name&gt;hive.server2.thrift.bind.host&lt;/name&gt; 
    &lt;value&gt;hadoop&lt;/value&gt; 
&lt;/property&gt; 
&lt;!-- 指定hiveserver2 连接的端口号 --&gt; 
&lt;property&gt; 
    &lt;name&gt;hive.server2.thrift.port&lt;/name&gt; 
    &lt;value&gt;10000&lt;/value&gt; 
&lt;/property&gt; 
</code></pre>
<ol start="2">
<li>重启MetaStore 服务</li>
</ol>
<pre><code class="language-markdown">bin/hive --service metastore
</code></pre>
<ol start="3">
<li>启动hive服务（这里需要考虑元数据的访问方式，如何使用元数据服务的模式，需要提前开启元数据服务）</li>
</ol>
<pre><code class="language-markdown">bin/hive --service hiveserver2
</code></pre>
<ol start="4">
<li>启动beeline客户端（需要多等待一会，否则会报错连不上）</li>
</ol>
<pre><code class="language-markdown">bin/beeline -u jdbc:hive2://hadoop:10000 -n atguigu
//bin/beeline -u jdbc:hive2://主机用户名:10000 -n root（用户）
</code></pre>
<ol start="5">
<li>使用JDCB 访问时出现异常报错，如atguigu is not allowed to impersonate atguigu</li>
</ol>
<p>解决方案：在core-site.xml 中添加如下：</p>
<pre><code class="language-markdown">&lt;property&gt; 
    &lt;name&gt;hadoop.proxyuser.xxx.hosts&lt;/name&gt; 
    &lt;value&gt;*&lt;/value&gt; 
&lt;/property&gt; 
&lt;property&gt; 
    &lt;name&gt;hadoop.proxyuser.xxx.groups&lt;/name&gt; 
    &lt;value&gt;*&lt;/value&gt; 
&lt;/property&gt;
</code></pre>
<p>“*”表示可通过超级代理“xxx”操作hadoop的用户、用户组和主机</p>
]]></content:encoded>
      <category>学习</category>
      <category>笔记</category>
      <category>Hive</category>
      <category>学习</category>
    </item>
    <item>
      <title>Hive基本概念</title>
      <link>https://zxwlove.de5.net/posts/2024/Hive基本概念</link>
      <guid isPermaLink="true">https://zxwlove.de5.net/posts/2024/Hive基本概念</guid>
      <pubDate>Tue, 25 Jun 2024 10:45:03 GMT</pubDate>
      <author>浅小兮</author>
      <description>hive基本概念</description>
      <content:encoded><![CDATA[<p>Hive 官网地址<a href="">http://hive.apache.org/</a>
文档查看地址<a href="https://cwiki.apache.org/confluence/display/Hive/GettingStarted">https://cwiki.apache.org/confluence/display/Hive/GettingStarted </a>
下 载 地 址 <a href="">http://archive.apache.org/dist/hive/ </a>
github 地 址<a href="">https://github.com/apache/hive</a></p>
<h2>Hive</h2>
<h3>Hive 简介</h3>
<ul>
<li>Hive：由Facebook 开源用于解决海量<code>结构化</code>日志的数据统计工具。</li>
<li>Hive 是基于 Hadoop 的一个<code>数据仓库工具</code>，将结构化的数据文件映射为一张表，并提供类 <code>SQL(HQL)</code>查询功能。</li>
</ul>
<h3>Hive 本质：将HQL（hiveSQL）转化成MapReduce 程序</h3>
<p><img src="https://cdn.nlark.com/yuque/0/2024/png/29368235/1719277640464-89e82cf8-d66f-410b-9e1e-e2eb6b99343a.png#averageHue=%23c8dfb8&amp;clientId=uca2645df-768a-4&amp;from=paste&amp;height=602&amp;id=uc2d648ac&amp;originHeight=1204&amp;originWidth=2346&amp;originalType=binary&amp;ratio=2&amp;rotation=0&amp;showTitle=false&amp;size=530726&amp;status=done&amp;style=none&amp;taskId=u75006f44-91c1-4335-9e50-8f9cd513f14&amp;title=&amp;width=1173" alt="image.png"></p>
<ol>
<li>Hive 处理的<code>数据存储在HDFS </code></li>
<li>Hive 分析<code>数据底层</code>的实现是<code>MapReduce</code></li>
<li>执行程序运行在<code>Yarn</code>上</li>
<li>结构化文件如何映射成一张表的？借助存储在<code>元数据数据库</code>中的元数据来<code>解析结构化文件</code></li>
</ol>
<h2>Hive架构原理</h2>
<p><img src="https://cdn.nlark.com/yuque/0/2024/png/29368235/1719277538344-810dfdf7-2de1-4f1b-b31c-7eb0a0c2ba6e.png#averageHue=%23ededed&amp;clientId=uca2645df-768a-4&amp;from=paste&amp;height=456&amp;id=uf0a0e45b&amp;originHeight=912&amp;originWidth=1298&amp;originalType=binary&amp;ratio=2&amp;rotation=0&amp;showTitle=false&amp;size=95182&amp;status=done&amp;style=none&amp;taskId=uab191bbd-8e50-4f1b-82e5-4703c012fc9&amp;title=&amp;width=649" alt="image.png"></p>
<h3>Hive架构介绍</h3>
<table>
<thead>
<tr>
<th>1）用户接口： Client</th>
<th>CLI（command-line interface）、 JDBC/ODBC(jdbc访问hive)、</th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td>2）元数据： Metastore</td>
<td>元数据包括： 表名、表所属的数据库（默认是default）、表的拥有者、列/分区字段、表的 类型（是否是外部表）、表的数据所在目录等； 默认存储在自带的<code>derby</code>数据库中，推荐使用<code>MySQL</code>存储Metastore</td>
<td></td>
</tr>
<tr>
<td>3）Hadoop</td>
<td>使用HDFS进行存储，使用MapReduce进行计算。</td>
<td></td>
</tr>
<tr>
<td>4）驱动器： Driver</td>
<td>解析器（SQL P arser）：</td>
<td>将SQL字符串转换成<code>抽象语法树AST</code>， 这一步一般都用第三方工具库完成，比如 antlr；对AST进行语法分析，比如表是否存 在、字段是否存在、SQL语义是否有误。</td>
</tr>
<tr>
<td></td>
<td>编译器（Physical Plan）：</td>
<td>将AST编译生成<code>逻辑执行计划</code>。</td>
</tr>
<tr>
<td></td>
<td>优化器（Query Optimizer）：</td>
<td>对逻辑执行计划进行优化。</td>
</tr>
<tr>
<td></td>
<td>执行器（Execution）：</td>
<td>把逻辑执行计划转换成可以运行的物理计 划。对于Hive来说，就是<code>MR/Spark</code>。</td>
</tr>
</tbody>
</table>
<h3>Hive的运行机制</h3>
<p><img src="https://cdn.nlark.com/yuque/0/2024/png/29368235/1719278121708-e9d17492-ec59-44c8-a905-d44b1b4780fe.png#averageHue=%23f7efe8&amp;clientId=uca2645df-768a-4&amp;from=paste&amp;height=512&amp;id=u492b8d2f&amp;originHeight=1024&amp;originWidth=2134&amp;originalType=binary&amp;ratio=2&amp;rotation=0&amp;showTitle=false&amp;size=457167&amp;status=done&amp;style=none&amp;taskId=uc3cbe20a-39f4-4f39-848d-1177a9bffcb&amp;title=&amp;width=1067" alt="image.png">
hive通过给用户提供的一系列交互接口，接收到的用户的指令（SQl），使用自己的Driver，结合元数据 （MetaStore），将这些指令翻译成MapReduce，提交到Hadoop中执行，最后，将执行返回的结果输出到用户 交互接口中。</p>
<h2>Hive和 数据库比较</h2>
<table>
<thead>
<tr>
<th></th>
<th>Hive</th>
<th>MySQL</th>
</tr>
</thead>
<tbody>
<tr>
<td>语言</td>
<td>类sql</td>
<td>sql</td>
</tr>
<tr>
<td>数据规模</td>
<td>大数据pb及以上</td>
<td>数据量小一般百万左右到达单表极限</td>
</tr>
<tr>
<td>数据插入</td>
<td>能增加insert,不能update,delete</td>
<td>能insert,update,delete</td>
</tr>
<tr>
<td>数据存储</td>
<td>Hdfs</td>
<td>拥有自己的存储空间</td>
</tr>
<tr>
<td>计算引擎</td>
<td>Mapreduce/spark/tez</td>
<td>自己的引擎innodb</td>
</tr>
</tbody>
</table>
<h2>Hive的优缺点</h2>
<table>
<thead>
<tr>
<th>优点</th>
<th>缺点</th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td>1. 提供了类SQl语法操作接口， 具备快速开发的能力（简单、易上 手）</td>
<td>Hive的HQL 表达能力有限</td>
<td>1）Hive自动生成MapReduce作业，通常情况下 不够智能化</td>
</tr>
<tr>
<td>2. 避免了去写MapReduce，减少 开发者的学习成本</td>
<td></td>
<td>2）数据挖掘方面不擅长（多个子查询），由于 MapReduce数据处理流程的限制，效率更高的算 法却无法实现</td>
</tr>
<tr>
<td>3. Hive优势在于处理大数据，在 处理小数据时没有优势，因为 Hive的执行延迟较高。</td>
<td>Hive的效率比 较低</td>
<td>1）Hive的执行延迟比较高，因为Hive常用于数 据分析，对实时性要求不高的场合</td>
</tr>
<tr>
<td></td>
<td></td>
<td>2）Hive调优比较困难，粒度较粗</td>
</tr>
<tr>
<td>4. Hive支持用户自定义函数，用 户可以根据自己的需求来实现自己 的函数</td>
<td>Hive不支持实 时查询和行级别更新</td>
<td>hive分析的数据是存储在HDFS上的，而HDFS 仅支持追加写，所以在hive中不能update和 delete，只能select和insert。</td>
</tr>
</tbody>
</table>
]]></content:encoded>
      <category>学习</category>
      <category>笔记</category>
      <category>Hive</category>
      <category>学习</category>
    </item>
    <item>
      <title>Hive数据类型</title>
      <link>https://zxwlove.de5.net/posts/2024/Hive数据类型</link>
      <guid isPermaLink="true">https://zxwlove.de5.net/posts/2024/Hive数据类型</guid>
      <pubDate>Fri, 14 Jun 2024 12:32:00 GMT</pubDate>
      <author>浅小兮</author>
      <description>Hive数据类型</description>
      <content:encoded><![CDATA[<h2>基本数据类型</h2>
<table>
<thead>
<tr>
<th>Hive数据类型</th>
<th>Java数据类型</th>
<th>长度</th>
<th>例子</th>
</tr>
</thead>
<tbody>
<tr>
<td>TINYINT</td>
<td>byte</td>
<td>1byte有符号整数</td>
<td>20</td>
</tr>
<tr>
<td>SMALINT</td>
<td>short</td>
<td>2byte有符号整数</td>
<td>20</td>
</tr>
<tr>
<td><code>INt</code></td>
<td>int</td>
<td>4byte有符号整数</td>
<td>20</td>
</tr>
<tr>
<td><code>BIGINT</code></td>
<td>long</td>
<td>8byte有符号整数</td>
<td>20</td>
</tr>
<tr>
<td>BOOLEAN</td>
<td>boolean</td>
<td>布尔类型，true或者false</td>
<td>TRUE FALSE</td>
</tr>
<tr>
<td>FLOAT</td>
<td>float</td>
<td>单精度浮点数</td>
<td>3.14159</td>
</tr>
<tr>
<td><code>DOUBLE</code></td>
<td>double</td>
<td>双精度浮点数</td>
<td>3.14159</td>
</tr>
<tr>
<td><code>STRING</code></td>
<td>string</td>
<td>字符系列。可以指定字符集。可以使用单引号或者双引号</td>
<td>‘now is the time’ “for all good men“</td>
</tr>
</tbody>
</table>
<p>对于Hive的String类型相当于数据库的varchar类型，该类型是一个可变的字符串，不过它不能声明其中 最多能存储多少个字符，理论上它可以存储2GB的字符数.</p>
<h2>集合数据类型</h2>
<table>
<thead>
<tr>
<th>数据类型</th>
<th>描述</th>
<th>语法示例</th>
</tr>
</thead>
<tbody>
<tr>
<td>STRUCT</td>
<td>和c语言中的struct类似，都可以通过“点”符号访问元素内容。例如：如果某个列的数据类型是STRUCT{first STRING, last STRING},那么第1个元素可以通过字段.first来引用。</td>
<td>struct() 例如： struct&lt; street:string, city:string  &gt;</td>
</tr>
<tr>
<td>MAP</td>
<td>MAP是一组键-值对元组集合，使用数组表示法可以访问数据。例如：如果某个列的数据类型是MAP，其中键-&gt;值对是’first’-&gt;’John’和’last’-&gt;’ Doe’，那么可以通过字段名[‘last’]获取最后一个元素</td>
<td>map() 例如： map&lt; string, int  &gt;</td>
</tr>
<tr>
<td>ARRAY</td>
<td>数组是一组具有相同类型和名称的变量的集合。这些变量称为数组的元素，每个数组元素都有一个编号，编号从零开始。例如： 数组值为[‘John’, ‘Doe’]，那么第2个元素可以通过数组名[1]进行引用。</td>
<td>Array() 例如：array&lt; string  &gt;</td>
</tr>
</tbody>
</table>
<p>Hive有三种复杂数据类型ARRAY、MAP 和 STRUCT。ARRAY和MAP与Java中的Array和Map类似，而 STRUCT与C语言中的Struct类似，它封装了一个命名字段集合，复杂数据类型允许任意层次的嵌套.</p>
<h2>类型转换</h2>
<ol>
<li>Hive 的基本数据类型是可以进行隐式转换的，类似于Java的类型转换</li>
</ol>
<p>例如:某表达式使用INT类型，TINYINT会自动转换为INT类型，但是Hive不会进行反向转化
例如，某表达式使用TINYINT 类型，INT 不会自动转换为TINYINT 类型，它会返回错误，除非使用CAST 操作。</p>
<ol start="2">
<li>隐式类型转换规则如下</li>
</ol>
<ul>
<li>任何整数类型都可以隐式地转换为一个范围更广的类型，如INT可以转换成BIGINT。</li>
<li>所有整数类型、FLOAT和STRING类型都可以隐式地转换成DOUBLE。</li>
<li>TINYINT、SMALLINT、INT 都可以转换为FLOAT。</li>
<li>BOOLEAN 类型不可以转换为任何其它的类型。</li>
</ul>
<ol start="3">
<li>可以使用CAST操作显示进行数据类型转换
例如：CAST('1' AS INT)将把字符串'1' 转换成整数1；
如果强制类型转换失败，如执行CAST('X' AS INT)，表达式返回空值 NULL。</li>
</ol>
<pre><code class="language-markdown">hive(default)&gt; select '1'+2, cast('1'as int) + 2; 
+------+------+--+ 
| _c0  | _c1  | 
+------+------+--+ 
| 3.0  | 3    | 
+------+------+--+ 
</code></pre>
]]></content:encoded>
      <category>学习</category>
      <category>笔记</category>
      <category>Hive</category>
      <category>学习</category>
    </item>
    <item>
      <title>Power BI数据分析与可视化</title>
      <link>https://zxwlove.de5.net/posts/2024/Power-BI</link>
      <guid isPermaLink="true">https://zxwlove.de5.net/posts/2024/Power-BI</guid>
      <pubDate>Wed, 29 May 2024 03:37:03 GMT</pubDate>
      <author>浅小兮</author>
      <description>Power BI数据分析和可视化工具学习笔记</description>
      <content:encoded><![CDATA[<h1>Power BI数据分析与可视化</h1>
<p>Power BI 是由微软开发的一个商业智能工具，用于数据的收集、整理、分析以及可视化。它可以帮助企业和个人用户从多个数据源中提取数据，然后通过各种图表和报表形式进行可视化展示，以便更好地理解和分析数据。</p>
<blockquote>
<p>以下绝大部分参考<a href="https://learn.microsoft.com/zh-cn/power-bi/fundamentals/">Power BI官方文档</a>，转载请标注
--浅小兮</p>
</blockquote>
<h5>Power BI 的主要功能</h5>
<ol>
<li><strong>数据连接</strong>：Power BI 可以连接到各种数据源，包括Excel、SQL数据库、Azure Data Lake、云服务、社交媒体平台等。</li>
<li><strong>数据建模</strong>：用户可以对数据进行转换、计算和建模，以满足特定的分析需求。</li>
<li><strong>数据可视化</strong>：Power BI 提供丰富的图表和仪表板组件，可以创建交互式的可视化图表和仪表板。</li>
<li><strong>仪表板</strong>：用户可以将多个图表和表格组合成一个仪表板，以便在单一界面上查看和分析数据。</li>
<li><strong>协作和共享</strong>：Power BI 支持多用户协作，可以分享和协作仪表板和报告。</li>
<li><strong>移动访问</strong>：Power BI 提供移动应用，用户可以在手机或平板电脑上查看和分析数据。
<img src="https://learn.microsoft.com/zh-cn/power-bi/fundamentals/media/power-bi-overview/power-bi-overview-blocks.png" alt=""></li>
</ol>
<h5>Power BI 的使用场景</h5>
<ol>
<li><strong>企业分析</strong>：帮助企业分析销售、财务、客户关系等关键业务指标。</li>
<li><strong>市场分析</strong>：通过社交媒体和在线数据源分析市场趋势和客户反馈。</li>
<li><strong>项目监控</strong>：监控项目进度和关键绩效指标（KPIs）。</li>
<li><strong>个人分析</strong>：帮助个人用户分析个人财务、健康数据等。</li>
</ol>
<h5>Power BI 的优点</h5>
<ol>
<li><strong>用户友好</strong>：界面直观，不需要深入的编程知识。</li>
<li><strong>功能强大</strong>：支持多种数据源和复杂的数据分析。</li>
<li><strong>跨平台</strong>：可以在Windows、Mac、iOS和Android等平台上使用。</li>
<li><strong>协作能力</strong>：支持多用户协作和共享。</li>
<li><strong>集成能力</strong>：可以与Office 365、Azure和其他微软服务集成。</li>
</ol>
<h5>Power BI 的局限性</h5>
<ol>
<li><strong>学习曲线</strong>：虽然用户友好，但一些高级功能可能需要一定的学习时间。</li>
<li><strong>依赖性</strong>：与Office 365和Azure等微软服务紧密集成，可能需要额外的成本。</li>
<li><strong>移动体验</strong>：虽然提供移动应用，但一些高级功能可能不如桌面版。</li>
<li><strong>数据限制</strong>：某些免费版本可能对数据量有限制。</li>
</ol>
<h2>数据分析和可视化概述</h2>
<p>数据分析和可视化是将数据转换为有意义的见解的过程，它涉及数据的收集、处理、分析和呈现。这一过程对于理解数据模式、趋势和关系至关重要，并为决策制定提供支持。以下是数据分析和可视化的一般概述：</p>
<h3>数据分析</h3>
<p>数据分析是指对数据进行探索和解释的过程，以提取有价值的信息。它包括以下步骤：</p>
<ol>
<li><strong>数据收集</strong>：从不同的源收集数据，如数据库、网络、传感器等。</li>
<li><strong>数据清洗</strong>：处理数据中的缺失值、异常值、重复值等，确保数据的质量。</li>
<li><strong>数据探索</strong>：使用统计方法和可视化工具来探索数据的基本特性，如分布、相关性等。</li>
<li><strong>数据转换</strong>：将数据转换为适合分析的形式，可能包括数据聚合、归一化等。</li>
<li><strong>数据分析</strong>：应用统计和机器学习技术来发现数据中的模式和趋势。</li>
<li><strong>模型建立</strong>：根据分析结果建立预测模型或决策支持模型。</li>
<li><strong>结果解释</strong>：解释分析结果，将数据转换为易于理解的信息。</li>
</ol>
<h3>可视化</h3>
<p>数据可视化是将数据转换为图形或图像的过程，以便更直观地展示数据。它可以帮助人们更好地理解和解释数据。以下是一些常用的数据可视化工具和技术：</p>
<ol>
<li><strong>图表</strong>：包括柱状图、折线图、饼图、散点图等，用于展示数据的分布、趋势和关系。</li>
<li><strong>仪表板</strong>：将多个图表组合在一起，形成一个综合的界面，用于监控和分析关键业务指标。</li>
<li><strong>地图</strong>：用于展示地理位置数据，如人口分布、交通流量等。</li>
<li><strong>时间序列分析</strong>：使用时间轴来展示数据随时间的变化。</li>
<li><strong>3D可视化</strong>：在三维空间中展示数据，用于展示复杂的数据关系。</li>
<li><strong>交互式可视化</strong>：允许用户通过点击、拖拽等操作来探索数据。</li>
</ol>
<h3>数据分析的目的</h3>
<ol>
<li><strong>理解数据</strong>：通过分析数据，可以更好地理解数据集的结构和特征。</li>
<li><strong>发现模式和趋势</strong>：数据分析可以帮助发现数据中的重复模式和趋势，从而揭示潜在的关联和因果关系。</li>
<li><strong>决策支持</strong>：数据分析为决策制定提供数据驱动的见解，帮助个人和企业做出更明智的决策。</li>
<li><strong>优化过程</strong>：通过分析数据，可以识别和改进流程中的瓶颈和问题。</li>
<li><strong>预测未来</strong>：使用统计模型和机器学习技术，可以从历史数据中预测未来的趋势和结果。</li>
</ol>
<h3>数据分析的类型</h3>
<ol>
<li><strong>描述性分析</strong>：描述数据的基本特征，如平均值、中位数、标准差等。</li>
<li><strong>探索性分析</strong>：探索数据集，发现潜在的模式和关系。</li>
<li><strong>预测性分析</strong>：使用统计模型和机器学习算法来预测未来的趋势和结果。</li>
<li><strong>规范性分析</strong>：使用数学模型和统计方法来规范和优化决策过程。</li>
</ol>
<h3>数据分析的工具和技术</h3>
<ol>
<li><strong>统计软件</strong>：如SPSS、SAS、R、Python等，用于执行各种统计分析和机器学习算法。</li>
<li><strong>数据可视化工具</strong>：如Tableau、Power BI、QlikView等，用于将数据转换为图表和仪表板。</li>
<li><strong>数据库管理系统</strong>：如MySQL、Oracle、SQL Server等，用于存储和查询大量数据。</li>
<li><strong>云计算服务</strong>：如Amazon Web Services (AWS)、Microsoft Azure、Google Cloud Platform等，提供强大的计算和存储资源。</li>
<li><strong>编程语言</strong>：如Python、R、Java等，用于编写数据分析脚本和算法。</li>
</ol>
<h3>获取数据</h3>
<ol>
<li><strong>Power BI Desktop 获取数据</strong>：
<ul>
<li><strong>本地文件</strong>：支持连接到 Excel、CSV、文本文件、JSON、XML 等多种本地文件格式。</li>
<li><strong>数据库</strong>：支持连接到 SQL Server、Oracle、MySQL、Teradata、PostgreSQL 等关系型数据库。</li>
<li><strong>云数据库</strong>：支持连接到 Azure SQL Database、Amazon Redshift、Snowflake 等云数据库。</li>
<li><strong>大数据</strong>：支持连接到 Hadoop、Spark 等大数据平台。</li>
<li><strong>数据流</strong>：支持连接到 Azure Data Factory、Azure Event Hubs、Azure IoT Hub 等数据流服务。</li>
<li><strong>服务</strong>：支持连接到 SharePoint、OneDrive、Dropbox 等服务。</li>
<li><strong>社交媒体</strong>：支持从 Twitter、Facebook 等社交媒体平台获取数据。</li>
</ul>
</li>
<li><strong>Power BI Service 获取数据</strong>：
<ul>
<li><strong>导入文件</strong>：用户可以将本地文件上传到 Power BI Service，然后将其导入到 Power BI 仪表板中。</li>
<li><strong>数据集</strong>：用户可以创建和管理数据集，并将其作为数据源连接到仪表板。</li>
<li><strong>Power BI 获取数据工具</strong>：Power BI 提供了专门的获取数据工具，如 Power BI Desktop 和 Power Query，用于从各种数据源中提取、转换和加载数据。</li>
</ul>
</li>
</ol>
<h2>Power Query和M语言</h2>
<h4>Power Query</h4>
<p>Power Query 是一个数据获取、转换和加载（ETL）工具，它允许用户从各种数据源中提取数据，并对数据进行清洗、转换和整合。Power Query 提供了一个图形化的界面，用户可以通过拖放和点击来操作数据，无需编写代码。它支持多种数据源，包括 Excel、文本文件、CSV、数据库、云服务等。</p>
<h4>M 语言（M 表达式）</h4>
<p>M 语言是 Power Query 的背后语言，它是一种基于表格的数据表达语言，用于定义数据转换和加载操作。M 语言允许用户编写更复杂的查询和数据处理逻辑，这些逻辑可以被保存并重复使用。M 语言具有以下特点：</p>
<ul>
<li><strong>表达式语言</strong>：基于表格的语法，类似于 Excel 公式。</li>
<li><strong>功能强大</strong>：可以执行复杂的数据清洗、转换和加载任务。</li>
<li><strong>可重用</strong>：M 语言表达式可以被保存为 M 查询，并在 Power BI Desktop 中重复使用。</li>
<li><strong>编程能力</strong>：允许用户编写自定义函数和模块，以扩展 Power Query 的功能。</li>
</ul>
<h4>使用 M 语言</h4>
<ol>
<li>在 Power BI Desktop 中，点击“获取数据”选项卡。</li>
<li>选择“其他”类别，然后选择“M 查询”。</li>
<li>在弹出的对话框中，输入你的 M 语言表达式。例如，输入 <code>=Table.FromList(List.FromValues([&quot;张三&quot;, &quot;李四&quot;, &quot;王五&quot;], [&quot;姓名&quot;]))</code> 来创建一个包含姓名的表格。</li>
<li>点击“确定”按钮，Power Query 将根据你的 M 语言表达式自动创建一个查询。</li>
<li>你可以在查询编辑器中进一步编辑和优化你的 M 语言表达式。</li>
<li>完成查询后，点击“加载”按钮，数据将被加载到 Power BI Desktop 中。
在 Power BI 中，集成、清洗、转换和规约数据的操作步骤如下：</li>
</ol>
<h3>数据集成</h3>
<blockquote>
<p>以下操作步骤基于Power BI Desktop 2020版本写的，其他版本大差不差吧</p>
</blockquote>
<ol>
<li><strong>打开 Power BI Desktop</strong>：启动 Power BI Desktop 应用程序。</li>
<li><strong>获取数据</strong>：在左侧导航栏中，点击“获取数据”选项卡。</li>
<li><strong>选择数据源</strong>：在“获取数据”选项卡中，选择你想要集成的数据源类型。</li>
<li><strong>连接数据源</strong>：在弹出的对话框中，输入数据源的连接信息，如服务器名称、数据库名称、用户名和密码。</li>
<li><strong>选择数据</strong>：在连接到数据源后，选择你想要集成的数据表和列。</li>
<li><strong>加载数据</strong>：点击“加载”按钮，将数据加载到 Power BI Desktop 中。</li>
</ol>
<h3>数据清洗</h3>
<ol>
<li><strong>数据预览</strong>：在 Power BI Desktop 中，双击数据表，打开数据编辑器。</li>
<li><strong>处理缺失值</strong>：在数据编辑器中，使用“值”选项卡中的“填充”功能来处理缺失值。</li>
<li><strong>处理异常值</strong>：在数据编辑器中，使用“值”选项卡中的“检测异常”功能来识别异常值。</li>
<li><strong>数据清洗规则</strong>：在数据编辑器中，使用“值”选项卡中的“自定义”功能来应用自定义清洗规则。</li>
<li><strong>保存数据</strong>：在数据编辑器中，点击“关闭并加载到 Power BI”按钮，将清洗后的数据加载到 Power BI 中。。</li>
</ol>
<h4>数据清洗通常包括以下几个关键方面：</h4>
<ol>
<li><strong>缺失值处理</strong>：
<ul>
<li>删除：直接删除包含缺失值的记录或字段。</li>
<li>填充：使用特定方法（如平均值、中位数、最频繁值）来填充缺失值。</li>
<li>插值：使用数学方法（如线性插值、样条插值）来估计缺失值。</li>
</ul>
</li>
<li><strong>异常值检测与处理</strong>：
<ul>
<li>检测：使用统计方法（如箱线图、Z分数）来识别异常值。</li>
<li>处理：根据业务规则和数据质量标准决定如何处理异常值，可能包括删除、标记或调整。</li>
</ul>
</li>
<li><strong>数据一致性检查</strong>：
<ul>
<li>检查数据格式的一致性，如日期、时间、货币符号等。</li>
<li>检查数据单位的一致性，如长度、重量、温度等。</li>
<li>检查数据名称和标签的一致性，确保字段和记录的名称清晰、准确。</li>
</ul>
</li>
<li><strong>数据标准化</strong>：
<ul>
<li>将数据转换为一致的格式和单位，如标准化日期格式、货币符号等。</li>
<li>标准化数据范围和分布，如将所有数值转换为同一量级。</li>
</ul>
</li>
<li><strong>数据验证</strong>：
<ul>
<li>验证数据的准确性、完整性和一致性。</li>
<li>进行交叉验证，比较不同数据源中的相同信息，确保数据的一致性。</li>
</ul>
</li>
</ol>
<blockquote>
<p>注意！！！
不完整数据也称为缺失数据或缺失值，是指在数据集中缺少某些数据点。
噪声数据是指数据集中包含的随机或不相关的错误数据，这些数据可能会干扰分析结果，导致错误的结论。</p>
</blockquote>
<h3>数据转换</h3>
<ol>
<li><strong>数据合并</strong>：在 Power BI Desktop 中，使用“获取数据”选项卡中的“合并”功能来合并数据。</li>
<li><strong>数据计算</strong>：在数据编辑器中，使用“值”选项卡中的“计算”功能来创建新的数据字段或计算现有字段的值。</li>
<li><strong>数据格式化</strong>：在数据编辑器中，使用“格式”选项卡中的功能来格式化数据。</li>
<li><strong>数据验证</strong>：在 Power BI Desktop 中，使用“数据”选项卡中的“验证”功能来验证转换后的数据。</li>
<li><strong>保存数据</strong>：在数据编辑器中，点击“关闭并加载到 Power BI”按钮，将转换后的数据加载到 Power BI 中。</li>
</ol>
<h4>（关键步骤）数据转换通常包括以下几个关键方面：</h4>
<ol>
<li><strong>数据合并</strong>：将来自不同数据源的数据合并在一起，形成一个统一的数据集。这可能涉及到数据的关联和匹配。</li>
<li><strong>数据计算</strong>：创建新的数据字段或计算现有字段的值，如计算平均值、总和、比例等。这有助于生成更丰富的数据集，为分析提供更多维度。</li>
<li><strong>数据格式化</strong>：将数据转换为特定的格式，如日期格式、货币格式、百分比格式等。这有助于提高数据的可读性和分析的准确性。</li>
<li><strong>数据标准化</strong>：将数据转换为同一量级或标准格式，以便于比较和分析。例如，将所有数值转换为同一量级，或将分类数据转换为数值数据。</li>
<li><strong>数据验证</strong>：验证转换后的数据是否符合需求，包括数据格式、数据完整性等。这有助于确保数据的质量和一致性。</li>
<li><strong>数据归一化</strong>：将数据缩放到一个特定的范围，以便于比较和分析。例如，将所有数值数据缩放到0到1之间。</li>
</ol>
<h3>数据归约</h3>
<ol>
<li><strong>数据采样</strong>：在 Power BI Desktop 中，使用“数据”选项卡中的“采样”功能来从原始数据中抽取一部分数据。</li>
<li><strong>特征选择</strong>：在 Power BI Desktop 中，使用“建模”选项卡中的“度量值”功能来选择最相关的特征。</li>
<li><strong>维度归约</strong>：在 Power BI Desktop 中，使用“建模”选项卡中的“维度”功能来减少数据集的维度。</li>
<li><strong>数据验证</strong>：在 Power BI Desktop 中，使用“数据”选项卡中的“验证”功能来验证归约后的数据。</li>
<li><strong>保存数据</strong>：在 Power BI Desktop 中，点击“关闭并加载到 Power BI”按钮，将归约后的数据加载到 Power BI 中。</li>
</ol>
<h4>规约数据的方法包括：</h4>
<ol>
<li><strong>数据采样</strong>：从原始数据中抽取一部分数据，以代表整个数据集的特征。这可以用于快速分析和测试。</li>
<li><strong>特征选择</strong>：从数据集中选择最相关的特征，以减少模型的复杂性和提高性能。这可以通过统计方法（如相关性分析）或机器学习算法（如主成分分析）来实现。</li>
<li><strong>维度规约</strong>：通过降维技术来减少数据集的维度。这包括主成分分析（PCA）、线性判别分析（LDA）等方法，它们可以将高维数据转换为低维数据，同时保留数据的主要信息。</li>
<li><strong>数据压缩</strong>：使用数据压缩技术来减少数据的存储空间。这可以通过去除数据中的冗余信息或使用压缩算法来实现。</li>
<li><strong>数据摘要</strong>：创建数据的摘要或概要，以减少数据的大小。这可以通过汇总数据、创建摘要统计量或使用数据摘要技术来实现。</li>
</ol>
<h4>字段归约</h4>
<p>字段归约（Field Reduction）是数据归约（Data Reduction）的一种形式，又称维归约，属性归约或属性子集选着，它专注于减少数据集中字段的数量，同时尽可能保留数据的有用信息。字段归约的目的是减少数据存储和处理的需求，同时确保数据集的完整性和分析的有效性。
在 Power BI 中，字段归约可以通过以下步骤实现：</p>
<ol>
<li><strong>数据导入</strong>：
<ul>
<li>导入原始数据集到 Power BI Desktop。</li>
</ul>
</li>
<li><strong>数据预览</strong>：
<ul>
<li>打开数据集，查看各个字段的值和分布。</li>
</ul>
</li>
<li><strong>特征选择</strong>：
<ul>
<li>确定哪些字段对于分析任务是必要的，哪些是冗余的。</li>
<li>使用统计方法（如相关性分析）或业务知识来评估字段的重要性。</li>
</ul>
</li>
<li><strong>数据转换</strong>：
<ul>
<li>删除不重要的字段，保留关键的字段。</li>
<li>如果有必要，可以将多个相关的字段合并成一个新字段。</li>
</ul>
</li>
<li><strong>数据验证</strong>：
<ul>
<li>验证归约后的数据集是否仍然满足分析需求。</li>
<li>确保关键信息没有被遗漏。</li>
</ul>
</li>
<li><strong>模型评估</strong>：
<ul>
<li>使用归约后的数据集创建模型和报表。</li>
<li>评估模型的性能和分析结果的准确性。</li>
</ul>
</li>
<li><strong>迭代优化</strong>：
<ul>
<li>根据分析结果和业务需求调整字段归约策略。</li>
<li>重复归约过程，直到达到满意的结果。</li>
</ul>
</li>
<li><strong>文档记录</strong>：
<ul>
<li>记录字段归约的步骤、方法和结果。</li>
<li>确保归约数据的处理过程可重复和可审计。</li>
</ul>
</li>
</ol>
<h2>DAX语言数据建模</h2>
<p>DAX（Data Analysis eXpressions）是Power BI和Power Pivot中的一个扩展性语言，用于数据建模和分析。DAX提供了一套丰富的函数和表达式，允许用户创建和管理多维数据模型。
以下是DAX语言数据建模的一些关键概念和功能：</p>
<ol>
<li><strong>度量值（Measures）</strong>：
<ul>
<li>度量值是在Power BI或Power Pivot模型中的计算值。</li>
<li>度量值通常用于计算如总和、平均值、最大值、最小值等聚合函数。</li>
<li>度量值可以基于数据模型中的事实表和维度表。</li>
</ul>
</li>
<li><strong>计算列（Calculated Columns）</strong>：
<ul>
<li>计算列是存储在事实表或维度表中的计算值。</li>
<li>计算列可以包含复杂的计算和逻辑，如日期计算、文本连接等。</li>
<li>计算列可以帮助用户扩展数据模型的功能，但它们不直接用于多维数据集的聚合。</li>
</ul>
</li>
<li><strong>表（Tables）</strong>：
<ul>
<li>表是Power BI或Power Pivot模型中的数据结构。</li>
<li>表可以包含事实数据或维度数据。</li>
<li>表可以与其他表通过关系连接起来。</li>
</ul>
</li>
<li><strong>关系（Relationships）</strong>：
<ul>
<li>关系是表之间的连接，用于确保数据的一致性和准确性。</li>
<li>关系可以基于表之间的键（如外键）来创建。</li>
<li>关系有助于Power BI和Power Pivot在数据集之间创建引用和链接。</li>
</ul>
</li>
<li><strong>KPI（Key Performance Indicators）</strong>：
<ul>
<li>KPI是用于跟踪业务性能的度量值。</li>
<li>KPI可以设置目标值、警告值和目标跟踪线。</li>
<li>KPI有助于用户监控和分析关键业务指标。</li>
</ul>
</li>
<li><strong>时间智能（Time Intelligence）</strong>：
<ul>
<li>时间智能是DAX中的一个功能集，用于处理和分析时间序列数据。</li>
<li>时间智能包括日期时间函数、时间序列聚合函数等。</li>
<li>时间智能有助于用户创建动态的时间序列分析。</li>
</ul>
</li>
<li><strong>层次结构（Hierarchies）</strong>：
<ul>
<li>层次结构是维度表中的结构，用于组织数据。</li>
<li>层次结构可以包含多个级别，如年度、季度、月份等。</li>
<li>层次结构有助于用户在多维数据集中进行多级分析。</li>
</ul>
</li>
<li><strong>集（Sets）</strong>：
<ul>
<li>集是DAX中的一个数据结构，用于存储一组值。</li>
<li>集可以基于查询结果或表达式创建。</li>
<li>集有助于用户进行复杂的分析，如过滤数据、创建动态的计算等。</li>
</ul>
</li>
</ol>
<h3>认识Power Pivot和DAX语言</h3>
<p>Power Pivot 和 DAX（Data Analysis Expressions）语言是 Microsoft Excel 中的两个强大功能，它们允许用户处理大量数据并进行复杂的数据分析。</p>
<h4>Power Pivot</h4>
<p>Power Pivot 是一个免费的 Excel 加载项，它将 Excel 转变成了一个强大的数据分析和处理工具。Power Pivot 允许用户创建数据模型，这些模型可以包含大量的数据，并且可以处理复杂的关系和计算。以下是 Power Pivot 的一些关键特点：</p>
<ol>
<li><strong>内存中处理</strong>：Power Pivot 使用内存中数据库技术（也称为 xVelocity 内存分析引擎），这意味着它可以将大量数据加载到内存中进行快速处理。</li>
<li><strong>数据模型</strong>：Power Pivot 允许用户创建一个关系型数据模型，这个模型可以包含多个表和它们之间的关系。</li>
<li><strong>计算列</strong>：用户可以在 Power Pivot 中创建计算列，这些列的值是基于表中其他列的值计算得出的。</li>
<li><strong>度量值</strong>：度量值是使用 DAX 公式创建的动态计算，它们在查询时实时计算，不存储在模型中。</li>
<li><strong>数据透视表和图表</strong>：Power Pivot 可以与 Excel 的数据透视表和图表集成，使用户能够创建复杂的报告和可视化。</li>
</ol>
<h4>DAX 语言</h4>
<p>DAX 是一种公式语言，用于在 Power Pivot 中创建计算列和度量值。DAX 提供了一系列函数和运算符，用于执行各种数据操作和计算。以下是 DAX 的一些关键特点：</p>
<ol>
<li><strong>函数库</strong>：DAX 提供了大量的内置函数，包括聚合函数（如 SUM、AVERAGE）、日期和时间函数（如 YEAR、MONTH）、逻辑函数（如 IF、 SWITCH）等。</li>
<li><strong>上下文</strong>：DAX 计算依赖于行上下文和筛选上下文。行上下文指的是当前正在处理的行，而筛选上下文是应用于数据模型的筛选条件，它决定了度量值的计算范围。</li>
<li><strong>时间智能</strong>：DAX 包含一系列时间智能函数，这些函数简化了与日期和时间相关的计算，如计算同期比较、年内累计等。</li>
<li><strong>兼容性</strong>：DAX 语言与 Excel 公式语言相似，但它专为 Power Pivot 和数据分析而设计，因此在某些方面与 Excel 公式有所不同。</li>
<li><strong>性能优化</strong>：DAX 允许用户通过编写高效的公式来优化数据模型的性能，这对于处理大量数据尤为重要。</li>
</ol>
<h4>Power Pivot 和 DAX 的应用场景</h4>
<ul>
<li><strong>大数据分析</strong>：当 Excel 中的数据量超过常规处理能力时，Power Pivot 可以处理数百万行的数据。</li>
<li><strong>复杂的数据关系</strong>：Power Pivot 可以轻松处理多个表之间的复杂关系，这对于分析大型企业数据尤其有用。</li>
<li><strong>动态报告</strong>：使用 DAX 度量值可以创建动态报告，这些报告可以根据用户的筛选和交互实时更新。</li>
<li><strong>时间序列分析</strong>：DAX 的时间智能函数使得分析时间序列数据变得简单，如计算 月销售总额、同比增长等。</li>
</ul>
<h3>新建数据表中的元素</h3>
<p>在 Power BI 中新建数据表的步骤如下：</p>
<h5>1. 导入数据</h5>
<ul>
<li>打开 Power BI Desktop。</li>
<li>点击“获取数据”按钮，选择数据源，如 Excel、SQL Server、CSV 文件等。</li>
<li>导入数据，并根据需要进行数据清洗和转换。</li>
</ul>
<h5>2. 创建新表</h5>
<ul>
<li>在“数据视图”中，点击“新建表”按钮。</li>
<li>输入表名称。</li>
</ul>
<h5>3. 添加列</h5>
<ul>
<li>在新建的表中，点击“添加列”按钮。</li>
<li>输入列名称。</li>
<li>选择数据类型，如文本、数字、日期/时间、布尔值等。</li>
</ul>
<h5>4. 设置数据类型</h5>
<ul>
<li>为每列选择合适的数据类型，以确保数据的准确性和性能。</li>
</ul>
<h5>5. 设定主键</h5>
<ul>
<li>选择一个或多个列作为主键，以唯一标识表中的每一行。</li>
</ul>
<h5>6. 数据验证和约束</h5>
<ul>
<li>根据需要设置数据验证规则来限制用户输入的数据类型或值。</li>
<li>约束可以确保数据的准确性和一致性。</li>
</ul>
<h5>7. 建立关系</h5>
<ul>
<li>如果您的数据模型包含多个表，您需要定义表之间的关系。</li>
<li>关系通常基于共同的列（如客户 ID、订单 ID 等）。</li>
</ul>
<h5>8. 添加计算列</h5>
<ul>
<li>如果需要在表中基于现有数据创建新的列，可以使用 DAX 公式来创建计算列。</li>
<li>在“数据视图”中，选择表，然后点击“新建列”按钮，输入 DAX 公式。</li>
</ul>
<h5>9. 定义度量值</h5>
<ul>
<li>度量值是使用 DAX 公式创建的动态计算，它们在查询时实时计算，不存储在模型中。</li>
<li>在“数据视图”中，点击“新建度量值”按钮，输入 DAX 公式。</li>
</ul>
<h5>10. 测试和验证</h5>
<ul>
<li>确保计算列和度量值的计算结果准确无误。</li>
<li>检查数据模型和 DAX 表达式的性能，确保高效运行。</li>
</ul>
<h2>数据分析可视化</h2>
<blockquote>
<p>参考官方文档，就不详细写如何作图的了太麻烦了</p>
</blockquote>
<p>数据分析可视化是将数据转换为图形或图像的过程，以便更容易理解和解释数据中的模式、趋势和关联。良好的数据可视化可以帮助决策者更快地理解复杂的数据集，从而做出更明智的决策。以下是一些常见的数据分析可视化工具和技术：</p>
<h4>常见的数据可视化类型：</h4>
<ol>
<li><strong>柱状图</strong>：用于展示分类数据的不同组之间的比较。</li>
<li><strong>折线图</strong>：用于展示随时间或其他连续变量而变化的数据趋势。</li>
<li><strong>饼图</strong>：用于显示组成整体的部分占比。</li>
<li><strong>散点图</strong>：用于展示两个变量之间的关系。</li>
<li><strong>热力图</strong>：使用颜色来表示数据强度的二维图表。</li>
<li><strong>地图</strong>：用于地理数据的可视化，展示地区之间的比较或分布。</li>
<li><strong>雷达图</strong>：用于显示多个量化变量的数据点。</li>
<li><strong>箱线图</strong>：用于展示数据的分布，包括中位数、四分位数和异常值。</li>
</ol>
<h3>认识可视化设计</h3>
<p>以下是可视化设计的一些关键概念和最佳实践：</p>
<h4>关键概念：</h4>
<ol>
<li><strong>清晰性</strong>：可视化应该清晰、直观，避免混淆或误导用户。</li>
<li><strong>简洁性</strong>：设计应该简洁，避免不必要的装饰，以便用户专注于数据。</li>
<li><strong>一致性</strong>：在整个可视化中保持一致的布局、颜色和字体，以增强用户体验。</li>
<li><strong>色彩运用</strong>：使用颜色来强调重要信息，但要避免使用过多或冲突的颜色。</li>
<li><strong>交互性</strong>：提供交互功能，如筛选、缩放和详细信息显示，以提高用户体验。</li>
<li><strong>适应性</strong>：设计应该能够适应不同的设备和屏幕尺寸。</li>
</ol>
<h4>最佳实践：</h4>
<ol>
<li><strong>了解受众</strong>：在设计可视化之前，了解你的受众和他们需要从数据中得到的信息。</li>
<li><strong>选择合适的图表</strong>：根据数据类型和分析目标选择最合适的图表类型。</li>
<li><strong>避免信息过载</strong>：避免在单个可视化中包含过多的数据点或信息，这可能会使用户感到困惑。</li>
<li><strong>使用标题和标签</strong>：为每个可视化添加清晰的标题和轴标签，以提供上下文。</li>
<li><strong>优化布局</strong>：使用适当的布局来组织可视化，以便用户可以轻松地比较和分析数据。</li>
<li><strong>考虑颜色盲用户</strong>：使用颜色盲友好的颜色方案，以确保所有用户都能理解可视化。</li>
<li><strong>测试和迭代</strong>：在设计过程中进行用户测试，并根据反馈进行调整。</li>
</ol>
<h3>掌握对比分析</h3>
<p>对比分析是一种数据分析方法，用于比较两个或多个数据集以找出它们之间的相似之处和差异。这种分析方法可以帮助决策者识别关键趋势、模式、异常和潜在的原因。以下是掌握对比分析的一些关键步骤和技巧：</p>
<h4>关键步骤：</h4>
<ol>
<li><strong>定义比较目标</strong>：明确你想要通过对比分析达到的目的或解决的问题。</li>
<li><strong>选择数据集</strong>：选择需要比较的数据集。这些数据集可能来自不同的时间点、不同的地区、不同的产品等。</li>
<li><strong>清洗和准备数据</strong>：确保所有数据集都是干净的、格式一致的，并且具有可比性。</li>
<li><strong>选择比较维度</strong>：确定你将如何比较这些数据集。这可能包括定量指标（如销售额、利润）和定性指标（如客户满意度、品牌知名度）。</li>
<li><strong>进行对比分析</strong>：使用统计方法、可视化工具或仪表板来比较数据集。</li>
<li><strong>识别差异和相似性</strong>：分析结果，找出数据集之间的关键差异和相似性。</li>
<li><strong>解释和分析原因</strong>：探讨导致这些差异和相似性的可能原因。</li>
<li><strong>制定行动计划</strong>：根据分析结果，制定改进策略或行动计划。</li>
</ol>
<h4>技巧和工具：</h4>
<ol>
<li><strong>使用图表和可视化</strong>：利用柱状图、折线图、散点图等可视化工具来直观地展示数据集之间的比较。</li>
<li><strong>计算关键指标</strong>：计算平均值、中位数、标准差等统计指标来量化数据集之间的差异。</li>
<li><strong>趋势分析</strong>：查看随时间的变化趋势，以了解数据集随时间的变化情况。</li>
<li><strong>细分市场</strong>：将数据集细分为不同的子集或市场，以深入了解特定群体或产品类别的表现。</li>
<li><strong>使用比率分析</strong>：计算比率（如利润率、回报率）来比较不同数据集的效率。</li>
<li><strong>进行交叉分析</strong>：结合多个维度进行分析，以获得更全面的理解。</li>
<li><strong>考虑外部因素</strong>：分析外部因素（如经济环境、竞争对手行为）如何影响数据集。</li>
<li><strong>使用专业工具</strong>：利用Excel、Power BI、Tableau等数据分析工具来简化对比分析过程。</li>
</ol>
<h3>掌握结构分析</h3>
<p>结构分析是一种数据分析方法，它涉及对数据集的内部组成和结构进行研究，以理解各部分如何相互关联和影响整体。结构分析可以帮助决策者识别关键组成部分、比例、分布和趋势，从而做出更明智的决策。以下是掌握结构分析的一些关键步骤和技巧：</p>
<h4>关键步骤：</h4>
<ol>
<li><strong>定义分析目标</strong>：明确你想要通过结构分析达到的目的或解决的问题。</li>
<li><strong>收集和准备数据</strong>：确保所有需要的数据都是可用的，并且是干净、格式一致的。</li>
<li><strong>确定分析维度</strong>：选择你将分析的维度，例如产品、地区、客户群体等。</li>
<li><strong>计算组成部分</strong>：计算每个组成部分的数值，如销售额、市场份额等。</li>
<li><strong>分析比例和分布</strong>：研究各组成部分在整体中的比例和分布，以识别关键趋势和模式。</li>
<li><strong>进行趋势分析</strong>：查看随时间的变化趋势，以了解各组成部分随时间的变化情况。</li>
<li><strong>解释和分析原因</strong>：探讨导致这些比例和分布的原因，以及它们对整体的影响。</li>
<li><strong>制定行动计划</strong>：根据分析结果，制定改进策略或行动计划。</li>
</ol>
<h4>技巧和工具：</h4>
<ol>
<li><strong>使用图表和可视化</strong>：利用饼图、堆叠柱状图、树状图等可视化工具来直观地展示数据的结构和比例。</li>
<li><strong>计算关键指标</strong>：计算百分比、增长率、集中度等指标来量化各组成部分的重要性。</li>
<li><strong>细分市场</strong>：将数据细分为不同的子集或市场，以深入了解特定群体或产品类别的表现。</li>
<li><strong>进行交叉分析</strong>：结合多个维度进行分析，以获得更全面的理解。</li>
<li><strong>考虑外部因素</strong>：分析外部因素（如经济环境、竞争对手行为）如何影响数据的结构。</li>
<li><strong>使用专业工具</strong>：利用Excel、Power BI、Tableau等数据分析工具来简化结构分析过程。</li>
</ol>
<h3>掌握相关分析</h3>
<p>相关分析是一种统计方法，用于衡量两个变量之间的线性关系强度和方向。它可以帮助我们理解变量是如何一起变化的，以及一个变量的变化是否与另一个变量的变化有关。以下是掌握相关分析的一些关键步骤和技巧：</p>
<h4>关键步骤：</h4>
<ol>
<li><strong>定义研究目标</strong>：明确你想要通过相关分析探究的问题或假设。</li>
<li><strong>选择变量</strong>：选择你想要分析的变量。这些变量应该是可量化的，并且你有足够的数据来进行分析。</li>
<li><strong>收集数据</strong>：确保所有需要的数据都是可用的，并且是干净、格式一致的。</li>
<li><strong>检查数据质量</strong>：在进行相关分析之前，检查数据是否存在缺失值、异常值或错误。</li>
<li><strong>计算相关系数</strong>：使用相关系数（如皮尔逊相关系数）来计算两个变量之间的线性关系。相关系数的值范围从-1到1，其中1表示完全正相关，-1表示完全负相关，0表示没有线性相关。</li>
<li><strong>解释相关系数</strong>：根据相关系数的值和符号，解释两个变量之间的关系强度和方向。</li>
<li><strong>进行显著性检验</strong>：通常需要检验相关系数的显著性，以确定观察到的相关是否具有统计学意义。</li>
<li><strong>考虑其他因素</strong>：相关分析只能告诉我们变量之间的线性关系，它可能隐藏了非线性关系或其他因素的影响。</li>
</ol>
<h4>技巧和工具：</h4>
<ol>
<li><strong>使用散点图</strong>：通过散点图可视化两个变量之间的关系，可以帮助直观地理解数据。</li>
<li><strong>检查假设条件</strong>：皮尔逊相关系数要求变量是连续的、正态分布的，并且之间的关系是线性的。确保这些假设条件得到满足。</li>
<li><strong>考虑替代相关系数</strong>：如果数据不满足皮尔逊相关系数的假设，可以考虑使用斯皮尔曼等级相关系数或肯德尔等级相关系数。</li>
<li><strong>进行多重比较</strong>：如果分析中涉及多个变量，考虑进行多重比较，以控制错误发现率。</li>
<li><strong>使用专业工具</strong>：利用Excel、R、Python、SPSS等统计软件进行相关分析，这些工具提供了相关系数的计算和显著性检验。</li>
</ol>
<h3>认识描述性分析</h3>
<p>描述性分析是一种数据分析方法，用于总结和描述数据集的主要特征和属性。它通常涉及计算各种统计量，如均值、中位数、标准差、最小值、最大值等，以及创建可视化图表，如柱状图、饼图、散点图等，来帮助人们更好地理解数据。以下是描述性分析的一些关键组成部分：</p>
<h4>关键组成部分：</h4>
<ol>
<li><strong>中心趋势度量</strong>：这些统计量帮助我们了解数据的中心位置，包括：
<ul>
<li><strong>均值</strong>（平均数）：所有数据点的总和除以数据点的数量。</li>
<li><strong>中位数</strong>：将数据集分为两部分的中间值。</li>
<li><strong>众数</strong>：数据集中出现次数最多的值。</li>
</ul>
</li>
<li><strong>离散度度量</strong>：这些统计量描述数据的分散程度，包括：
<ul>
<li><strong>标准差</strong>：衡量数据点与均值的平均距离。</li>
<li><strong>方差</strong>：标准差的平方，表示数据点与均值的平均偏差的平方。</li>
<li><strong>四分位数</strong>：将数据分为四个部分，用于描述数据的分布。</li>
</ul>
</li>
<li><strong>分布形状</strong>：描述数据分布的形状，如是否对称、偏斜程度等。</li>
<li><strong>可视化图表</strong>：通过图表来直观地展示数据的特征，如：
<ul>
<li><strong>柱状图</strong>：用于展示分类数据的分布。</li>
<li><strong>饼图</strong>：用于显示各部分在整体中的占比。</li>
<li><strong>散点图</strong>：用于展示两个变量之间的关系。</li>
<li><strong>箱线图</strong>：用于展示数据的分布，包括中位数、四分位数和异常值。</li>
</ul>
</li>
</ol>
<h4>描述性分析的应用：</h4>
<ul>
<li><strong>数据探索</strong>：在开始更深入的分析之前，通过描述性分析来熟悉数据集。</li>
<li><strong>报告制作</strong>：使用描述性统计和图表来制作业务报告，向非技术受众传达信息。</li>
<li><strong>异常检测</strong>：通过描述性分析识别数据中的异常值或离群点，为进一步的调查提供线索。</li>
<li><strong>决策支持</strong>：提供数据支持，帮助决策者基于数据特征做出更合理的决策。</li>
</ul>
<h4>工具和技术：</h4>
<ul>
<li><strong>Excel</strong>：提供了一系列的统计函数和图表工具，用于进行描述性分析。</li>
<li><strong>Power BI</strong>：提供了丰富的可视化选项和简单的数据操作界面，适合商业智能报告。</li>
<li><strong>R</strong>：一个编程语言和软件环境，专门用于统计分析、图形表示和报告。</li>
<li><strong>Python</strong>：通过各种库（如Pandas、Matplotlib、Seaborn）进行数据处理和可视化。</li>
</ul>
<h3>认识KPI分析</h3>
<p>KPI（Key Performance Indicator，关键绩效指标）分析是一种评估和监控组织、项目或业务流程表现的方法。KPI 是一组定量的、可衡量的指标，用于衡量关键业务目标或结果的达成情况。这些指标通常与组织的战略目标和业务计划紧密相关，并且是衡量组织绩效和进展的重要工具。</p>
<h4>KPI 的关键特征：</h4>
<ol>
<li><strong>相关性</strong>：KPI 应该与组织的战略目标和业务计划直接相关。</li>
<li><strong>可量化性</strong>：KPI 应该是可衡量的，以便于数据收集和分析。</li>
<li><strong>可实现性</strong>：KPI 应该是实际可行的，能够通过组织的努力实现。</li>
<li><strong>时限性</strong>：KPI 应该有时间限制，以便于跟踪和评估进展。</li>
</ol>
<h4>KPI 的类型：</h4>
<ol>
<li><strong>财务 KPI</strong>：如收入、利润、成本等。</li>
<li><strong>运营 KPI</strong>：如生产率、库存水平、交货时间等。</li>
<li><strong>客户 KPI</strong>：如客户满意度、客户保留率、客户获取成本等。</li>
<li><strong>员工 KPI</strong>：如员工满意度、员工流失率、培训投资回报率等。</li>
<li><strong>质量 KPI</strong>：如缺陷率、返工率、客户投诉率等。</li>
</ol>
<h4>KPI 分析的步骤：</h4>
<ol>
<li><strong>确定目标</strong>：明确组织想要实现的目标和战略方向。</li>
<li><strong>选择 KPI</strong>：根据目标选择相关的 KPI，确保它们能够有效地衡量目标的进展。</li>
<li><strong>数据收集</strong>：收集用于计算 KPI 的数据。</li>
<li><strong>计算 KPI</strong>：使用收集到的数据计算 KPI 的值。</li>
<li><strong>分析和解释</strong>：分析 KPI 的结果，解释它们如何反映组织的表现和进展。</li>
<li><strong>报告和沟通</strong>：将 KPI 结果以报告的形式呈现，并与利益相关者沟通。</li>
<li><strong>采取行动</strong>：基于 KPI 分析的结果，制定改进策略和行动计划。</li>
</ol>
<h4>KPI 分析的工具：</h4>
<ul>
<li><strong>Excel</strong>：提供强大的数据分析和报告功能。</li>
<li><strong>Power BI</strong>：微软的商业智能工具，用于创建 KPI 仪表板和报告。</li>
<li><strong>KPI 管理软件</strong>：专门用于管理和分析 KPI 的软件，如 Perigon、Hyperion 等。</li>
</ul>
<h3>Power BI数据分析报表</h3>
<h5>1. 数据准备</h5>
<ul>
<li>导入数据：从各种数据源（如 Excel、SQL Server、CSV 文件等）导入数据。</li>
<li>数据清洗和转换：使用 Power BI 的数据导入工具（Power Query）对数据进行清洗、转换和整合。</li>
</ul>
<h5>2. 数据模型构建</h5>
<ul>
<li>创建表和关系：在 Power BI 中创建表，并建立表之间的关系。</li>
<li>添加计算列：使用 DAX 公式创建计算列，对数据进行计算和转换。</li>
<li>定义度量值：使用 DAX 公式创建度量值，用于在报表中进行聚合计算。</li>
</ul>
<h5>3. 创建报表</h5>
<ul>
<li>切换到“报表视图”：在 Power BI Desktop 中，点击“新建报表”按钮，进入报表视图。</li>
<li>添加视觉元素：从左侧的视觉化元素面板中，将度量值和计算列拖放到报表中。</li>
<li>调整视觉元素：根据需要调整视觉元素的样式和布局，以创建清晰、直观的报告。</li>
</ul>
<h5>4. 创建仪表板</h5>
<ul>
<li>切换到“仪表板视图”：在报表视图下，点击“新建仪表板”按钮，进入仪表板视图。</li>
<li>添加视觉元素：将报表中的视觉元素拖放到仪表板中。</li>
<li>调整布局和样式：根据需要调整视觉元素的布局和样式，以创建整洁、一致的仪表板。</li>
</ul>
<h5>5. 分享和发布</h5>
<ul>
<li>完成报表和仪表板的设计后，可以将其发布到 Power BI 服务。</li>
<li>其他用户可以通过 Power BI 网站或移动应用访问这些报表和仪表板。</li>
</ul>
<h3>数据部署</h3>
<h5>1. 数据导入</h5>
<ul>
<li>打开 Power BI Desktop。</li>
<li>点击“获取数据”按钮，选择数据源，如 Excel、SQL Server、CSV 文件等。</li>
<li>导入数据，并根据需要进行数据清洗和转换。</li>
</ul>
<h5>2. 数据模型构建</h5>
<ul>
<li>在 Power BI 中创建表，并建立表之间的关系。</li>
<li>添加计算列，使用 DAX 公式对数据进行计算和转换。</li>
<li>定义度量值，用于在报表中进行聚合计算。</li>
</ul>
<h5>3. 创建报表和仪表板</h5>
<ul>
<li>切换到“报表视图”，将度量值和计算列拖放到报表中。</li>
<li>切换到“仪表板视图”，将报表中的视觉元素拖放到仪表板中。</li>
</ul>
<h5>4. 数据部署</h5>
<ul>
<li>完成报表和仪表板的设计后，点击“文件” &gt; “发布” &gt; “发布到 Power BI 服务”。</li>
<li>登录 Power BI 服务，选择要发布到的组或工作区。</li>
<li>选择要发布的报表和仪表板，点击“发布”。</li>
</ul>
<h5>5. 访问和共享</h5>
<ul>
<li>发布完成后，其他用户可以通过 Power BI 网站或移动应用访问这些报表和仪表板。</li>
<li>可以设置访问权限，控制谁可以查看和交互报表和仪表板。</li>
</ul>
]]></content:encoded>
      <category>学习</category>
      <category>笔记</category>
    </item>
    <item>
      <title>Excel数据分析与实战</title>
      <link>https://zxwlove.de5.net/posts/2024/Excel</link>
      <guid isPermaLink="true">https://zxwlove.de5.net/posts/2024/Excel</guid>
      <pubDate>Tue, 28 May 2024 00:00:00 GMT</pubDate>
      <author>浅小兮</author>
      <description>Excel数据分析与实战技巧</description>
      <content:encoded><![CDATA[<h1>Excel数据分析与实战</h1>
<h2>（一）数据分析</h2>
<p>Excel数据分析是指使用Excel软件对数据进行整理、分析、可视化和解读，以便于做出基于数据的决策。（主流为Excel2016，国家大部分考试接使用此版本）
以下是一些Excel数据分析的基本步骤和工具：</p>
<h4>数据准备</h4>
<ol>
<li><strong>数据清洗</strong>：删除重复记录、修正错误、填补缺失值。</li>
<li><strong>数据排序</strong>：按照特定列的值对数据进行排序。</li>
<li><strong>数据筛选</strong>：根据特定条件筛选出需要分析的数据子集。</li>
</ol>
<h4>数据分析</h4>
<ol>
<li><strong>描述性统计分析</strong>：使用<code>AVERAGE</code>、<code>SUM</code>、<code>MIN</code>、<code>MAX</code>、<code>COUNT</code>、<code>STDEV</code>等函数来概括数据的基本特征。</li>
<li><strong>函数应用</strong>：使用<code>VLOOKUP</code>、<code>HLOOKUP</code>、<code>INDEX</code>、<code>MATCH</code>等进行数据查找；使用<code>IF</code>、<code>SUMIF</code>、<code>COUNTIF</code>等进行条件计算。</li>
<li><strong>数据分析工具包</strong>：使用Excel的分析工具包（Analysis ToolPak）进行假设检验、回归分析、时间序列分析等。</li>
</ol>
<h4>数据可视化</h4>
<ol>
<li><strong>图表制作</strong>：创建柱状图、折线图、饼图、散点图等来直观展示数据。</li>
<li><strong>条件格式</strong>：使用颜色、图标等视觉元素来强调数据的某些方面。</li>
<li><strong>数据透视表</strong>：动态地汇总、分析和探索大量数据。</li>
</ol>
<h4>数据建模</h4>
<ol>
<li><strong>预测分析</strong>：使用趋势线、线性回归等方法进行预测。</li>
<li><strong>优化问题</strong>：使用 Solver 插件来解决最优化问题。</li>
<li><strong>模拟分析</strong>：使用数据表、单变量求解、规划求解器等进行模拟。</li>
</ol>
<h4>实战应用</h4>
<ol>
<li><strong>市场分析</strong>：分析销售数据、客户数据来识别市场趋势和客户偏好。</li>
<li><strong>财务分析</strong>：进行财务报表分析、预算编制、成本分析等。</li>
<li><strong>运营分析</strong>：分析生产数据、库存数据来优化运营流程。</li>
<li><strong>人力资源分析</strong>：分析员工数据、绩效数据来进行人力资源规划。</li>
</ol>
<h4>高级功能</h4>
<ol>
<li><strong>宏和VBA</strong>：自动化重复性任务，创建自定义函数和工具。</li>
<li><strong>Power Query</strong>：用于数据清洗和转换的强大工具。</li>
<li><strong>Power Pivot</strong>：提供数据建模和复杂分析的高级功能。</li>
</ol>
<h3>（二）认识Excel</h3>
<p>认知Excel指的是理解并掌握Excel软件的基本特性和功能，以及如何使用Excel进行数据处理和分析。
（博主使用的是Excel2024介绍，大部分按键相同，也可以自行了解）
以下是一些认知Excel的基础知识和技能：</p>
<ol>
<li><strong>界面和基本操作</strong>：熟悉Excel的界面布局，包括菜单、工具栏、单元格、工作表和工作簿。掌握基本的操作，如打开、保存、关闭工作簿，以及如何创建、删除和重命名工作表。</li>
<li><strong>数据输入和编辑</strong>：学习如何在单元格中输入数据，包括文本、数字、日期和时间。了解如何编辑单元格内容，如复制、粘贴、剪切和删除数据。</li>
<li><strong>单元格格式</strong>：掌握如何设置单元格格式，包括字体、颜色、对齐方式、边框和背景。了解如何调整行高和列宽，以及如何隐藏或显示行和列。</li>
<li><strong>使用公式和函数</strong>：学习如何使用Excel的公式和函数来执行计算。了解常用的函数，如SUM、AVERAGE、MIN、MAX、COUNT、VLOOKUP和HLOOKUP等。</li>
<li><strong>数据排序和筛选</strong>：掌握如何对数据进行排序和筛选，以便于分析和查找信息。</li>
<li><strong>数据透视表</strong>：了解如何创建和使用数据透视表来汇总和分析大量数据。</li>
<li><strong>图表制作</strong>：学习如何根据数据创建不同类型的图表，如柱状图、折线图、饼图等，以便于直观展示分析结果。</li>
<li><strong>条件格式</strong>：了解如何使用条件格式来高亮显示特定条件的数据。</li>
<li><strong>宏和VBA</strong>：了解宏的概念和如何录制宏来自动化重复性任务。对于高级用户，学习VBA（Visual Basic for Applications）编程，以便于创建自定义的Excel工具和功能。</li>
<li><strong>数据分析和高级功能</strong>：探索Excel的高级分析功能，如数据分析工具包（Analysis ToolPak）、假设检验、回归分析等。
通过学习和实践，认知Excel将帮助您更高效地处理和分析数据，提高工作效率，并为决策提供支持。</li>
</ol>
<h2>（三）数据的获取</h2>
<h3>外部数据的获取</h3>
<p>获取文本数据是数据分析的第一步，尤其是在使用Excel进行数据分析时。以下是一些常见的文本数据获取方法：详细写文本获取和数据库获取</p>
<h5>1. <strong>手动输入</strong>：</h5>
<ul>
<li>直接在Excel中手动输入数据。这种方法适用于数据量较小的情况。</li>
</ul>
<h5>2. <strong>复制和粘贴</strong>：</h5>
<ul>
<li>从其他应用程序（如文本编辑器、网页、PDF等）复制文本数据，然后粘贴到Excel中。</li>
</ul>
<h5>3. <strong>从网络获取</strong>：</h5>
<ul>
<li>使用Excel的<code>数据</code>功能中的<code>获取数据</code>选项，可以从网络上的表格数据源（如HTML表格）直接导入数据。</li>
</ul>
<h5>4. <strong>从数据库获取</strong>：</h5>
<ul>
<li>通过Excel的外部数据工具，可以连接到各种数据库（如SQL Server、MySQL、Oracle等），并导入数据。
从数据库获取数据到Excel通常涉及以下步骤：</li>
</ul>
<ol>
<li><strong>打开Excel</strong>：
<ul>
<li>打开Excel程序，并创建一个新的工作簿或打开一个现有工作簿。</li>
</ul>
</li>
<li><strong>访问数据菜单</strong>：
<ul>
<li>在Excel的菜单栏中，找到并点击“数据”标签，这通常位于界面的顶部。</li>
</ul>
</li>
<li><strong>获取数据</strong>：
<ul>
<li>在“数据”菜单中，找到“获取数据”组，点击“从数据库”按钮。在某些版本的Excel中，这个选项可能直接显示为“从其他源”或类似名称。</li>
</ul>
</li>
<li><strong>选择数据库类型</strong>：
<ul>
<li>在弹出的“获取数据”窗口中，选择您要连接的数据库类型，例如SQL Server、MySQL、Oracle、Access等。</li>
</ul>
</li>
<li><strong>建立数据库连接</strong>：
<ul>
<li>点击“连接”按钮，弹出“连接属性”对话框。在这里，您需要输入数据库的连接信息，包括服务器地址、数据库名称、用户名和密码等。</li>
</ul>
</li>
<li><strong>测试连接</strong>：
<ul>
<li>输入连接信息后，点击“测试连接”按钮以确保Excel能够成功连接到数据库。</li>
</ul>
</li>
<li><strong>选择查询类型</strong>：
<ul>
<li>在连接成功后，您可以选择“使用SQL语句”来编写自定义的SQL查询，或者使用“表、视图或SQL查询”来选择数据库中的表或视图。</li>
</ul>
</li>
<li><strong>编写SQL查询（可选）</strong>：
<ul>
<li>如果您选择了“使用SQL语句”，在弹出的SQL查询编辑器中编写您的SQL查询。例如，<code>SELECT * FROM table_name</code>。</li>
</ul>
</li>
<li><strong>导入数据</strong>：
<ul>
<li>确认查询或表选择后，点击“确定”按钮。Excel将执行查询并将结果导入到新的工作表中。</li>
</ul>
</li>
<li><strong>调整数据</strong>：
<ul>
<li>导入完成后，您可能需要对数据进行进一步的调整，比如调整列宽、设置单元格格式、删除不必要的列等，以确保数据的可读性和准确性。</li>
</ul>
</li>
<li><strong>保存工作簿</strong>：
<ul>
<li>在完成所有必要的调整后，不要忘记保存您的工作簿。
请注意，从数据库获取数据到Excel可能需要安装适当的数据库驱动程序或使用Excel的数据库连接功能。此外，某些数据库可能需要特定的权限才能访问。如果您在连接过程中遇到问题，可能需要联系数据库管理员或检查您的连接设置。</li>
</ul>
</li>
</ol>
<h5>5. <strong>使用Power Query</strong>：</h5>
<ul>
<li>Power Query是Excel的一个强大功能，可以用来从各种数据源（包括文本文件、网页、数据库等）中获取和转换数据。</li>
</ul>
<h5>6. <strong>导入文本文件</strong>：</h5>
<ul>
<li>Excel支持导入多种文本文件格式，如CSV（逗号分隔值）、TXT（纯文本文件）等。可以通过<code>数据</code>菜单中的<code>从文本/CSV</code>导入数据。
在Excel中导入文本文件是一个相对简单的过程。以下是在Excel中导入文本文件的详细步骤：</li>
</ul>
<ol>
<li><strong>打开Excel</strong>：
<ul>
<li>打开Excel程序，并创建一个新的工作簿或打开一个现有工作簿。</li>
</ul>
</li>
<li><strong>访问数据菜单</strong>：
<ul>
<li>在Excel的菜单栏中，找到并点击“数据”标签，这通常位于界面的顶部。</li>
</ul>
</li>
<li><strong>从文本/CSV导入</strong>：
<ul>
<li>在“数据”菜单中，找到“获取数据”组，点击“从文本/CSV”按钮。在某些版本的Excel中，这个选项可能直接显示为“从文本文件”或类似名称。</li>
</ul>
</li>
<li><strong>选择文件</strong>：
<ul>
<li>浏览并选择您想要导入的文本文件（如CSV、TXT等）。点击“导入”按钮。</li>
</ul>
</li>
<li><strong>配置文件导入</strong>：
<ul>
<li>在弹出的“导入数据”对话框中，您可以预览文件内容，并配置导入选项，如分隔符、列格式、数据类型等。</li>
</ul>
</li>
<li><strong>指定数据格式</strong>：
<ul>
<li>如果Excel没有正确识别列的格式，您可以通过点击列标题旁边的下拉菜单来指定正确的数据格式（如文本、日期、数字等）。</li>
</ul>
</li>
<li><strong>选择导入位置</strong>：
<ul>
<li>在对话框的底部，选择您希望数据导入的位置。您可以选择将数据导入当前工作表的一个新区域，或者创建一个新的工作表来放置数据。</li>
</ul>
</li>
<li><strong>完成导入</strong>：
<ul>
<li>确认所有设置都正确后，点击“导入”按钮。Excel将开始导入过程，并将文本文件的数据加载到指定的工作表中。</li>
</ul>
</li>
<li><strong>调整数据</strong>：
<ul>
<li>导入完成后，您可能需要对数据进行进一步的调整，比如调整列宽、设置单元格格式、删除不必要的列等，以确保数据的可读性和准确性。</li>
</ul>
</li>
<li><strong>保存工作簿</strong>：
<ul>
<li>在完成所有必要的调整后，不要忘记保存您的工作簿。</li>
</ul>
</li>
</ol>
<h5>7. <strong>使用VBA脚本</strong>：</h5>
<ul>
<li>对于高级用户，可以使用Excel的VBA（Visual Basic for Applications）来编写自定义的脚本来获取文本数据。</li>
</ul>
<h5>8. <strong>使用API</strong>：</h5>
<ul>
<li>对于需要定期更新的数据，可以使用应用程序编程接口（API）来获取数据。这通常需要一些编程知识，但可以通过编写脚本或使用专门的工具来实现。</li>
</ul>
<h5>9. <strong>扫描和OCR</strong>：</h5>
<ul>
<li>对于纸质文档，可以使用扫描仪进行数字化，然后使用光学字符识别（OCR）软件将扫描的图像转换为可编辑的文本数据。</li>
</ul>
<h5>10. <strong>其他数据集成工具</strong>：</h5>
<pre><code>- 使用第三方数据集成工具，如Tableau、Alteryx等，可以连接到不同的数据源，并将数据导入Excel。
</code></pre>
<p>获取文本数据时，需要注意数据的格式和质量。数据可能需要进行清洗和格式化，以确保在Excel中的可用性和准确性。此外，还需要考虑数据的更新频率和来源的可靠性。</p>
<h2>（四）公式和函数</h2>
<p>在Excel中输入公式和函数是进行数据计算和分析的基础。
公式和函数在此不详细介绍，博主只处理个人笔记所需要的，详细的会写在另一篇文章中。
以下是一些基本的步骤和提示：</p>
<h4>输入公式</h4>
<ol>
<li><strong>选择单元格</strong>：
<ul>
<li>首先，点击您想要输入公式的单元格。</li>
</ul>
</li>
<li><strong>输入等号</strong>：
<ul>
<li>开始输入公式前，首先输入一个等号 <code>=</code>。这是告诉Excel接下来输入的是公式，而不是文本。</li>
</ul>
</li>
<li><strong>输入公式内容</strong>：
<ul>
<li>接着输入您的公式。公式可以包括数字、单元格引用、运算符（如 <code>+</code>、<code>-</code>、<code>*</code>、<code>/</code>）和其他函数。</li>
</ul>
</li>
<li><strong>引用单元格</strong>：
<ul>
<li>您可以通过点击单元格或手动输入单元格引用（如 <code>A1</code>）来引用单元格。</li>
</ul>
</li>
<li><strong>使用自动完成</strong>：
<ul>
<li>在输入公式的过程中，Excel会提供自动完成建议。您可以使用箭头键和Tab键来浏览建议，并按Enter键选择一个建议。</li>
</ul>
</li>
<li><strong>查看公式结果</strong>：
<ul>
<li>输入完公式后，单元格将显示计算结果。如果您想查看公式本身，只需点击该单元格即可。</li>
</ul>
</li>
</ol>
<h4>输入函数</h4>
<ol>
<li><strong>选择单元格</strong>：
<ul>
<li>点击您想要输入函数的单元格。</li>
</ul>
</li>
<li><strong>插入函数</strong>：
<ul>
<li>您可以手动输入函数，或者使用“公式”菜单中的“插入函数”选项。点击“插入函数”后，会弹出一个对话框，您可以在其中选择所需的函数。</li>
</ul>
</li>
<li><strong>选择函数</strong>：
<ul>
<li>在对话框中，从列表中选择一个函数，或者搜索特定的函数。</li>
</ul>
</li>
<li><strong>填写函数参数</strong>：
<ul>
<li>选定函数后，Excel会显示一个函数参数输入框。在这里，您需要输入函数的参数。参数可以是数字、文本、单元格引用或其他函数。</li>
</ul>
</li>
<li><strong>确认函数</strong>：
<ul>
<li>输入所有必要的参数后，点击“确定”或按Enter键，Excel将计算函数的结果并将其显示在单元格中。</li>
</ul>
</li>
</ol>
<h4>公式和函数的常见操作</h4>
<ul>
<li><strong>拖动填充柄</strong>：使用鼠标拖动单元格的填充柄（小方块），可以快速将公式应用到相邻的单元格。</li>
<li><strong>复制和粘贴公式</strong>：您可以通过复制和粘贴来重复使用公式，但请注意，单元格引用可能会相对或绝对变化。</li>
<li><strong>编辑公式</strong>：双击单元格或选中单元格后按F2键，可以编辑现有的公式。
通过掌握公式和函数的输入，您可以充分利用Excel的计算和分析能力来处理数据。</li>
</ul>
<h3>一，使用数组公式</h3>
<p>在Excel中，数组公式可以用来对多个数据执行计算，并将结果作为一个数组返回。数组公式可以用于单个单元格，也可以用于多个单元格（称为多单元格数组公式）。以下是如何在Excel中使用数组公式的步骤：</p>
<h5>单个单元格数组公式</h5>
<ol>
<li><strong>选择单元格</strong>：
<ul>
<li>点击您想要输入数组公式的单元格。</li>
</ul>
</li>
<li><strong>输入公式</strong>：
<ul>
<li>输入数组公式，通常涉及到区域（多个单元格）的计算。例如，如果您想计算A1到A10的和的平方，您可以使用数组公式 <code>{=SUM(A1:A10)^2}</code>。</li>
</ul>
</li>
<li><strong>输入数组公式</strong>：
<ul>
<li>使用Ctrl+Shift+Enter而不是单独的Enter键来完成数组公式的输入。Excel将在公式周围添加大括号 <code>{}</code> 来表示这是一个数组公式。</li>
</ul>
</li>
<li><strong>查看结果</strong>：
<ul>
<li>单元格将显示数组公式的计算结果。</li>
</ul>
</li>
</ol>
<h5>多单元格数组公式</h5>
<ol>
<li><strong>选择单元格区域</strong>：
<ul>
<li>选择您想要输入多单元格数组公式的区域。</li>
</ul>
</li>
<li><strong>输入公式</strong>：
<ul>
<li>在区域的一个角落的单元格中输入数组公式。例如，如果您想在一列中计算A1到A10的和的平方，您可以在B1中输入数组公式 <code>=SUM(A1:A10)^2</code>。</li>
</ul>
</li>
<li><strong>输入数组公式</strong>：
<ul>
<li>使用Ctrl+Shift+Enter而不是单独的Enter键来完成数组公式的输入。Excel将在公式周围添加大括号 <code>{}</code> 来表示这是一个数组公式，并将结果扩展到所选区域的所有单元格。</li>
</ul>
</li>
<li><strong>查看结果</strong>：
<ul>
<li>所选区域中的每个单元格将显示数组公式的计算结果。</li>
</ul>
</li>
</ol>
<h5>数组公式的注意事项</h5>
<ul>
<li><strong>内存和性能</strong>：数组公式可能会占用大量内存，尤其是在处理大型数据集时。这可能会导致Excel的运行速度变慢。</li>
<li><strong>编辑数组公式</strong>：要编辑数组公式，您需要双击包含公式的单元格或选择该单元格并按下F2键。然后，您可以像编辑普通公式一样编辑数组公式。</li>
<li><strong>错误值</strong>：如果数组公式中包含错误，Excel可能会显示一个错误值，如#N/A、#VALUE!等。</li>
</ul>
<h3>二，设置日期和时间数据</h3>
<p>在Excel中设置日期和时间数据是管理数据的重要组成部分。以下是一些关于如何在Excel中设置和使用日期和时间数据的步骤和提示：</p>
<h5>输入日期和时间</h5>
<ol>
<li><strong>输入日期</strong>：
<ul>
<li>在单元格中直接输入日期，例如“2023-01-01”或“01/01/2023”，取决于您的区域设置。</li>
<li>使用Excel的日期序列功能，只需输入“1/1/2023”并按Enter键，Excel会自动将其格式化为日期。</li>
</ul>
</li>
<li><strong>输入时间</strong>：
<ul>
<li>在单元格中直接输入时间，例如“12:30 PM”或“12:30:00”，取决于您的时间格式。</li>
<li>要输入当前时间，按下Ctrl+Shift+；组合键。</li>
</ul>
</li>
</ol>
<h5>设置日期和时间格式</h5>
<ol>
<li><strong>选择单元格</strong>：
<ul>
<li>选择包含日期或时间的单元格。</li>
</ul>
</li>
<li><strong>打开格式设置</strong>：
<ul>
<li>右击选定的单元格，然后选择“格式单元格”，或者使用快捷键Ctrl+1。</li>
</ul>
</li>
<li><strong>选择日期或时间格式</strong>：
<ul>
<li>在“格式单元格”对话框中，选择“日期”或“时间”类别，然后从提供的格式中选择一个。</li>
</ul>
</li>
<li><strong>自定义格式</strong>：
<ul>
<li>如果预设的格式不符合您的需求，您可以选择“自定义”类别，并输入自定义的格式代码。例如，输入“yyyy-mm-dd”来显示日期为“2023-01-01”。</li>
</ul>
</li>
</ol>
<h5>使用日期和时间函数</h5>
<ol>
<li><strong>TODAY()</strong>：
<ul>
<li>输入公式<code>=TODAY()</code>来获取当前的日期。</li>
</ul>
</li>
<li><strong>NOW()</strong>：
<ul>
<li>输入公式<code>=NOW()</code>来获取当前的日期和时间。</li>
</ul>
</li>
<li><strong>DATE()</strong>：
<ul>
<li>使用<code>=DATE(year, month, day)</code>函数来创建特定的日期。</li>
</ul>
</li>
<li><strong>TIME()</strong>：
<ul>
<li>使用<code>=TIME(hour, minute, second)</code>函数来创建特定的时间。</li>
</ul>
</li>
<li><strong>DATEDIF()</strong>：
<ul>
<li>使用<code>=DATEDIF(start_date, end_date, unit)</code>函数来计算两个日期之间的差异。</li>
</ul>
</li>
</ol>
<h5>其他日期和时间功能</h5>
<ul>
<li><strong>自动填充日期序列</strong>：选择一个日期单元格，然后将鼠标指针放在单元格的右下角填充柄上，拖动以创建日期序列。</li>
<li><strong>排序和筛选日期</strong>：可以对日期进行排序和筛选，以便于分析。</li>
<li><strong>条件格式</strong>：可以使用条件格式根据日期或时间的高亮显示数据。</li>
</ul>
<h3>三，认识数学函数</h3>
<p>在Excel中，数学函数是一类用于执行数学运算的函数，它们可以帮助您对数据进行计算和分析。以下是一些常用的Excel数学函数及其用途：</p>
<ol>
<li><strong>SUM（求和）</strong>：
<ul>
<li>用于计算一组数值的总和。</li>
<li>语法：<code>SUM(number1, [number2], ...)</code></li>
<li>示例：<code>=SUM(A1:A10)</code> 计算A1到A10单元格的数值总和。</li>
</ul>
</li>
<li><strong>SUMIF（条件求和）</strong>：
<ul>
<li>根据指定条件对范围内的数值进行求和。</li>
<li>语法：<code>SUMIF(range, criteria, [sum_range])</code></li>
<li>示例：<code>=SUMIF(B1:B10, &quot;&gt;50&quot;, A1:A10)</code> 对A1到A10中与B1到B10中大于50的单元格对应的单元格进行求和。</li>
</ul>
</li>
<li><strong>SUMIFS（多条件求和）</strong>：
<ul>
<li>根据多个条件对范围内的数值进行求和。</li>
<li>语法：<code>SUMIFS(sum_range, criteria_range1, criteria1, [criteria_range2, criteria2], ...)</code></li>
<li>示例：<code>=SUMIFS(A1:A10, B1:B10, &quot;&gt;50&quot;, C1:C10, &quot;=1&quot;)</code> 对A1到A10中满足B1到B10大于50且C1到C10等于1的条件的单元格进行求和。</li>
</ul>
</li>
<li><strong>AVERAGE（平均值）</strong>：
<ul>
<li>用于计算一组数值的平均值。</li>
<li>语法：<code>AVERAGE(number1, [number2], ...)</code></li>
<li>示例：<code>=AVERAGE(A1:A10)</code> 计算A1到A10单元格的数值平均值。</li>
</ul>
</li>
<li><strong>COUNT（计数）</strong>：
<ul>
<li>用于计算一组数值中有多少个数字。</li>
<li>语法：<code>COUNT(value1, [value2], ...)</code></li>
<li>示例：<code>=COUNT(A1:A10)</code> 计算A1到A10单元格中的数字数量。</li>
</ul>
</li>
<li><strong>COUNTIF（条件计数）</strong>：
<ul>
<li>根据指定条件对范围内的数值进行计数。</li>
<li>语法：<code>COUNTIF(range, criteria)</code></li>
<li>示例：<code>=COUNTIF(A1:A10, &quot;&gt;50&quot;)</code> 计算A1到A10中大于50的单元格数量。</li>
</ul>
</li>
<li><strong>COUNTIFS（多条件计数）</strong>：
<ul>
<li>根据多个条件对范围内的数值进行计数。</li>
<li>语法：<code>COUNTIFS(criteria_range1, criteria1, [criteria_range2, criteria2], ...)</code></li>
<li>示例：<code>=COUNTIFS(A1:A10, &quot;&gt;50&quot;, B1:B10, &quot;=1&quot;)</code> 计算A1到A10中大于50且B1到B10等于1的单元格数量。</li>
</ul>
</li>
<li><strong>MIN（最小值）</strong>：
<ul>
<li>用于找出一组数值中的最小值。</li>
<li>语法：<code>MIN(number1, [number2], ...)</code></li>
<li>示例：<code>=MIN(A1:A10)</code> 找出A1到A10单元格中的最小数值。</li>
</ul>
</li>
<li><strong>MAX（最大值）</strong>：
<ul>
<li>用于找出一组数值中的最大值。</li>
<li>语法：<code>MAX(number1, [number2], ...)</code></li>
<li>示例：<code>=MAX(A1:A10)</code> 找出A1到A10单元格中的最大数值。</li>
</ul>
</li>
<li><strong>RAND（随机数）</strong>：
<ul>
<li>用于生成一个大于等于0且小于1的随机数。</li>
<li>语法：<code>RAND()</code></li>
<li>示例：<code>=RAND()</code> 生成一个随机数。</li>
</ul>
</li>
<li><strong>ABS（绝对值）</strong>：
<ul>
<li>返回数值的绝对值。</li>
<li>语法：<code>ABS(number)</code></li>
<li>示例：<code>=ABS(-5)</code> 返回5。</li>
</ul>
</li>
<li><strong>CEILING（向上取整）</strong>：
<ul>
<li>将数字向上舍入到最接近的指定基数的倍数。</li>
<li>语法：<code>CEILING(number, significance)</code></li>
<li>示例：<code>=CEILING(2.5, 1)</code> 返回3。</li>
</ul>
</li>
<li><strong>FLOOR（向下取整）</strong>：
<ul>
<li>将数字向下舍入到最接近的指定基数的倍数。</li>
<li>语法：<code>FLOOR(number, significance)</code></li>
<li>示例：<code>=FLOOR(2.5, 1)</code> 返回2。</li>
</ul>
</li>
<li><strong>ROUND（四舍五入）</strong>：
<ul>
<li>将数字四舍五入到指定的位数。</li>
<li>语法：<code>ROUND(number, num_digits)</code></li>
<li>示例：<code>=ROUND(2.55, 1)</code> 返回2.5。</li>
</ul>
</li>
<li><strong>RANK.EQ（等级）</strong>：
<ul>
<li>返回某个数值在一列数值中的排位。</li>
<li>语法：<code>RANK.EQ(number, ref, [order])</code></li>
<li>示例：<code>=RANK.EQ(A2, A:A)</code> 返回A2在A列中的排位。</li>
</ul>
</li>
<li><strong>INT（取整）</strong>：
<ul>
<li>返回数值的整数部分。</li>
<li>语法：<code>INT(number)</code></li>
<li>示例：<code>=INT(8.9)</code> 返回8。</li>
</ul>
</li>
<li><strong>MOD（取余）</strong>：
<ul>
<li>返回两个数值相除后的余数。</li>
<li>语法：<code>MOD(dividend, divisor)</code></li>
<li>示例：<code>=MOD(10, 3)</code> 返回1。</li>
</ul>
</li>
<li><strong>PI（圆周率）</strong>：
<ul>
<li>返回圆周率的值。</li>
<li>语法：<code>PI()</code></li>
<li>示例：<code>=PI()</code> 返回3.14159...</li>
</ul>
</li>
<li><strong>POWER（幂）</strong>：
<ul>
<li>返回一个数的指定幂次方。</li>
<li>语法：<code>POWER(number, power)</code></li>
<li>示例：<code>=POWER(2, 3)</code> 返回8。</li>
</ul>
</li>
<li><strong>SQRT（平方根）</strong>：
<ul>
<li>返回数值的平方根。</li>
<li>语法：<code>SQRT(number)</code></li>
<li>示例：<code>=SQRT(16)</code> 返回4。</li>
</ul>
</li>
<li><strong>SUMPRODUCT（乘积和）</strong>：
<ul>
<li>计算两组数值的乘积之和。</li>
<li>语法：<code>SUMPRODUCT(array1, [array2], ...)</code></li>
<li>示例：<code>=SUMPRODUCT(A1:A5, B1:B5)</code> 返回A1<em>B1到A5</em>B5的总和。</li>
</ul>
</li>
<li><strong>TRUNC（截断）</strong>：
<ul>
<li>返回数值的小数部分被截断后的整数。</li>
<li>语法：<code>TRUNC(number)</code></li>
<li>示例：<code>=TRUNC(8.9)</code> 返回8。</li>
</ul>
</li>
</ol>
<h3>四，认识统计函数</h3>
<p>Excel中的统计函数主要用于处理和分析数据集，包括计算平均值、标准差、方差、频率分布、概率分布等。以下是一些常用的统计函数及其用途：</p>
<ol>
<li><strong>AVERAGE（平均值）</strong>：
<ul>
<li>用于计算一组数值的平均值。</li>
<li>语法：<code>AVERAGE(number1, [number2], ...)</code></li>
<li>示例：<code>=AVERAGE(A1:A10)</code> 计算A1到A10单元格的数值平均值。</li>
</ul>
</li>
<li><strong>AVERAGEA（包含文本的平均值）</strong>：
<ul>
<li>类似于AVERAGE函数，但它计算包括文本在内的所有单元格的平均值。</li>
<li>语法：<code>AVERAGEA(value1, [value2], ...)</code></li>
<li>示例：<code>=AVERAGEA(A1:A10)</code> 计算A1到A10单元格的数值和文本的平均值。</li>
</ul>
</li>
<li><strong>STDEV（标准差）</strong>：
<ul>
<li>用于计算一组数值的标准差。</li>
<li>语法：<code>STDEV(number1, [number2], ...)</code></li>
<li>示例：<code>=STDEV(A1:A10)</code> 计算A1到A10单元格的标准差。</li>
</ul>
</li>
<li><strong>STDEVA（包含文本的标准差）</strong>：
<ul>
<li>类似于STDEV函数，但它计算包括文本在内的所有单元格的标准差。</li>
<li>语法：<code>STDEVA(value1, [value2], ...)</code></li>
<li>示例：<code>=STDEVA(A1:A10)</code> 计算A1到A10单元格的标准差，包括文本。</li>
</ul>
</li>
<li><strong>VAR（方差）</strong>：
<ul>
<li>用于计算一组数值的方差。</li>
<li>语法：<code>VAR(number1, [number2], ...)</code></li>
<li>示例：<code>=VAR(A1:A10)</code> 计算A1到A10单元格的方差。</li>
</ul>
</li>
<li><strong>VARA（包含文本的方差）</strong>：
<ul>
<li>类似于VAR函数，但它计算包括文本在内的所有单元格的方差。</li>
<li>语法：<code>VARA(value1, [value2], ...)</code></li>
<li>示例：<code>=VARA(A1:A10)</code> 计算A1到A10单元格的方差，包括文本。</li>
</ul>
</li>
<li><strong>COUNTIF（条件计数）</strong>：
<ul>
<li>根据指定条件对范围内的数值进行计数。</li>
<li>语法：<code>COUNTIF(range, criteria)</code></li>
<li>示例：<code>=COUNTIF(A1:A10, &quot;&gt;50&quot;)</code> 计算A1到A10中大于50的单元格数量。</li>
</ul>
</li>
<li><strong>COUNTIFS（多条件计数）</strong>：
<ul>
<li>根据多个条件对范围内的数值进行计数。</li>
<li>语法：<code>COUNTIFS(criteria_range1, criteria1, [criteria_range2, criteria2], ...)</code></li>
<li>示例：<code>=COUNTIFS(A1:A10, &quot;&gt;50&quot;, B1:B10, &quot;=1&quot;)</code> 计算A1到A10中大于50且B1到B10等于1的单元格数量。</li>
</ul>
</li>
<li><strong>FREQUENCY（频率分布）</strong>：
<ul>
<li>返回数值的频率分布。</li>
<li>语法：<code>FREQUENCY(data_array, bins_array)</code></li>
<li>示例：<code>=FREQUENCY(A1:A10, B1:B10)</code> 返回A1到A10的频率分布。</li>
</ul>
</li>
<li><strong>NORM.DIST（正态分布）</strong>：
<ul>
<li>返回指定平均值和标准差的正态分布概率。</li>
<li>语法：<code>NORM.DIST(x, mean, standard_dev, [true])</code></li>
<li>示例：<code>=NORM.DIST(50, 75, 10, TRUE)</code> 返回50位于平均值为75、标准差为10的正态分布中的概率。
抱歉，似乎我之前的回答被截断了。让我继续完成关于统计函数的介绍。</li>
</ul>
</li>
<li><strong>NORM.S.DIST（标准正态分布）</strong>：</li>
</ol>
<ul>
<li>返回指定z分数的标准正态分布概率。</li>
<li>语法：<code>NORM.S.DIST(z, [cumulative])</code></li>
<li>示例：<code>=NORM.S.DIST(1.645, TRUE)</code> 返回z分数为1.645的累积概率，这通常用于确定置信区间。</li>
</ul>
<ol start="12">
<li><strong>NORM.INV（逆正态分布）</strong>：</li>
</ol>
<ul>
<li>返回指定概率的正态分布的z分数。</li>
<li>语法：<code>NORM.INV(probability, mean, standard_dev)</code></li>
<li>示例：<code>=NORM.INV(0.95, 75, 10)</code> 返回平均值为75、标准差为10的正态分布中概率为95%的z分数。</li>
</ul>
<ol start="13">
<li><strong>POISSON.DIST（泊松分布）</strong>：</li>
</ol>
<ul>
<li>返回泊松分布的概率值。</li>
<li>语法：<code>POISSON.DIST(x, mean, [cumulative])</code></li>
<li>示例：<code>=POISSON.DIST(5, 3, TRUE)</code> 返回平均值为3的泊松分布中，5个事件发生的累积概率。</li>
</ul>
<ol start="14">
<li><strong>BINOM.DIST（二项分布）</strong>：</li>
</ol>
<ul>
<li>返回二项分布的概率值。</li>
<li>语法：<code>BINOM.DIST(number_s, trials, probability_s, [cumulative])</code></li>
<li>示例：<code>=BINOM.DIST(5, 10, 0.2, TRUE)</code> 返回10次试验中成功5次的累积概率。</li>
</ul>
<ol start="15">
<li><strong>CONFIDENCE.T（t分布置信区间）</strong>：</li>
</ol>
<ul>
<li>返回t分布的置信区间。</li>
<li>语法：<code>CONFIDENCE.T(alpha, standard_dev, size)</code></li>
<li>示例：<code>=CONFIDENCE.T(0.05, 10, 25)</code> 返回平均值为10、标准差为25的t分布的95%置信区间。</li>
</ul>
<ol start="16">
<li><strong>CONFIDENCE.NORM（正态分布置信区间）</strong>：</li>
</ol>
<ul>
<li>返回正态分布的置信区间。</li>
<li>语法：<code>CONFIDENCE.NORM(alpha, standard_dev, size)</code></li>
<li>示例：<code>=CONFIDENCE.NORM(0.05, 10, 25)</code> 返回平均值为10、标准差为25的正态分布的95%置信区间。</li>
</ul>
<ol start="17">
<li><strong>DEVSQ（方差的平方）</strong>：</li>
</ol>
<ul>
<li>计算数值的方差的平方。</li>
<li>语法：<code>DEVSQ(number1, [number2], ...)</code></li>
<li>示例：<code>=DEVSQ(A1:A10)</code> 计算A1到A10单元格的数值方差的平方。</li>
</ul>
<ol start="18">
<li><strong>EXPON.DIST（指数分布）</strong>：</li>
</ol>
<ul>
<li>返回指定参数的指数分布的概率值。</li>
<li>语法：<code>EXPON.DIST(x, lambda, [cumulative])</code></li>
<li>示例：<code>=EXPON.DIST(3, 0.5, TRUE)</code> 返回参数为0.5的指数分布中，x为3的概率。</li>
</ul>
<ol start="19">
<li><strong>LOGNORM.DIST（对数正态分布）</strong>：
<ul>
<li>返回指定平均值和标准差的正态分布的概率。</li>
<li>语法：<code>LOGNORM.DIST(x, mean, standard_dev, [cumulative])</code></li>
<li>示例：<code>=LOGNORM.DIST(100, 5, 1, TRUE)</code> 返回对数正态分布中，x为100的概率。</li>
</ul>
</li>
</ol>
<h3>认识文本函数</h3>
<p>Excel中的文本函数主要用于处理和分析文本数据。这些函数可以用于查找、替换、格式化、转换和操作文本字符串。以下是一些常用的文本函数及其用途：</p>
<ol>
<li><strong>CONCATENATE（连接）</strong>：
<ul>
<li>将多个文本字符串或单元格文本合并为一个连续的文本字符串。</li>
<li>语法：<code>CONCATENATE(text1, text2, ...)</code></li>
<li>示例：<code>=CONCATENATE(&quot;姓名: &quot;, A1, &quot; 性别: &quot;, B1)</code> 将A1和B1单元格的文本合并。</li>
</ul>
</li>
<li><strong>TEXTJOIN（文本连接）</strong>：
<ul>
<li>与CONCATENATE类似，但提供更多灵活性，可以指定分隔符和是否忽略空单元格。</li>
<li>语法：<code>TEXTJOIN(delimiter, [concatenate_nulls], text1, [text2], ...)</code></li>
<li>示例：<code>=TEXTJOIN(&quot;, &quot;, TRUE, A1, B1, C1)</code> 将A1、B1和C1单元格的文本合并，并使用逗号分隔，忽略空单元格。</li>
</ul>
</li>
<li><strong>TRIM（去除多余空格）</strong>：
<ul>
<li>去除字符串前后的多余空格。</li>
<li>语法：<code>TRIM(text)</code></li>
<li>示例：<code>=TRIM(&quot;   Hello, World!   &quot;)</code> 返回&quot;Hello, World!&quot;。</li>
</ul>
</li>
<li><strong>PROPER（首字母大写）</strong>：
<ul>
<li>将每个单词的首字母转换为大写，其余字母转换为小写。</li>
<li>语法：<code>PROPER(text)</code></li>
<li>示例：<code>=PROPER(&quot;hello world&quot;)</code> 返回&quot;Hello World&quot;。</li>
</ul>
</li>
<li><strong>UPPER（转换为大写）</strong>：
<ul>
<li>将所有字符转换为大写。</li>
<li>语法：<code>UPPER(text)</code></li>
<li>示例：<code>=UPPER(&quot;hello world&quot;)</code> 返回&quot;HELLO WORLD&quot;。</li>
</ul>
</li>
<li><strong>LOWER（转换为小写）</strong>：
<ul>
<li>将所有字符转换为小写。</li>
<li>语法：<code>LOWER(text)</code></li>
<li>示例：<code>=LOWER(&quot;HELLO WORLD&quot;)</code> 返回&quot;hello world&quot;。</li>
</ul>
</li>
<li><strong>LEN（长度）</strong>：
<ul>
<li>返回文本字符串中字符的数量。</li>
<li>语法：<code>LEN(text)</code></li>
<li>示例：<code>=LEN(&quot;hello world&quot;)</code> 返回11。</li>
</ul>
</li>
<li><strong>REPT（重复）</strong>：
<ul>
<li>重复文本字符串指定的次数。</li>
<li>语法：<code>REPT(text, number)</code></li>
<li>示例：<code>=REPT(&quot;*&quot;, 5)</code> 返回&quot;*****&quot;。</li>
</ul>
</li>
<li><strong>REPLACE（替换）</strong>：
<ul>
<li>在文本字符串中替换指定的字符或字符串。</li>
<li>语法：<code>REPLACE(old_text, start_num, num_chars, new_text)</code></li>
<li>示例：<code>=REPLACE(&quot;hello world&quot;, 1, 1, &quot;x&quot;)</code> 返回&quot;xello world&quot;。</li>
</ul>
</li>
<li><strong>SUBSTITUTE（替换）</strong>：
<ul>
<li>在文本字符串中替换指定的字符或字符串。</li>
<li>语法：<code>SUBSTITUTE(text, old_text, new_text, [instance])</code></li>
<li>示例：<code>=SUBSTITUTE(&quot;hello world&quot;, &quot;o&quot;, &quot;0&quot;, 2)</code> 返回&quot;hell0 w0rld&quot;。</li>
</ul>
</li>
<li><strong>TRANSPOSE（转置）</strong>：
<ul>
<li>转置单元格区域的内容。</li>
<li>语法：<code>TRANSPOSE(array)</code></li>
<li>示例：<code>=TRANSPOSE(A1:B2)</code> 转置A1到B2单元格区域的内容。</li>
</ul>
</li>
<li><strong>VALUE（文本转换为数值）</strong>：
<ul>
<li>将文本转换为数值。</li>
<li>语法：<code>VALUE(text)</code></li>
<li>示例：<code>=VALUE(&quot;123&quot;)</code> 返回123。</li>
</ul>
</li>
</ol>
<h3>认识逻辑函数</h3>
<p>Excel中的逻辑函数主要用于处理和分析条件判断。这些函数可以用于测试真假条件、返回TRUE或FALSE值，以及执行基于条件的计算。以下是一些常用的逻辑函数及其用途：</p>
<ol>
<li><strong>AND（与）</strong>：
<ul>
<li>返回所有给定的条件都为TRUE时，结果为TRUE。</li>
<li>语法：<code>AND(logical1, [logical2], ...)</code></li>
<li>示例：<code>=AND(A1&gt;10, B1&lt;20)</code> 返回A1大于10且B1小于20时的结果。</li>
</ul>
</li>
<li><strong>OR（或）</strong>：
<ul>
<li>返回至少一个给定的条件为TRUE时，结果为TRUE。</li>
<li>语法：<code>OR(logical1, [logical2], ...)</code></li>
<li>示例：<code>=OR(A1&gt;10, B1&lt;20)</code> 返回A1大于10或B1小于20时的结果。</li>
</ul>
</li>
<li><strong>NOT（非）</strong>：
<ul>
<li>反转给定条件的逻辑值。</li>
<li>语法：<code>NOT(logical)</code></li>
<li>示例：<code>=NOT(A1&gt;10)</code> 返回A1不大于10时的结果。</li>
</ul>
</li>
<li><strong>IF（条件判断）</strong>：
<ul>
<li>根据指定的条件返回两个不同的值。</li>
<li>语法：<code>IF(condition, value_if_true, value_if_false)</code></li>
<li>示例：<code>=IF(A1&gt;10, &quot;大于10&quot;, &quot;小于或等于10&quot;)</code> 返回A1大于10时的结果。</li>
</ul>
</li>
<li><strong>IFERROR（错误处理）</strong>：
<ul>
<li>当公式或函数返回错误时，返回指定的值。</li>
<li>语法：<code>IFERROR(value, value_if_error)</code></li>
<li>示例：<code>=IFERROR(A1/B1, &quot;无法计算&quot;)</code> 如果B1为0，则返回&quot;无法计算&quot;。</li>
</ul>
</li>
<li><strong>SWITCH（多条件判断）</strong>：
<ul>
<li>根据不同的条件返回不同的值。</li>
<li>语法：<code>SWITCH(value, case1, result1, [case2, result2], ...)</code></li>
<li>示例：<code>=SWITCH(A1, 1, &quot;一&quot;, 2, &quot;二&quot;, 3, &quot;三&quot;)</code> 返回A1等于1、2或3时的结果。</li>
</ul>
</li>
<li><strong>ISBLANK（测试空白）</strong>：
<ul>
<li>测试单元格是否为空白。</li>
<li>语法：<code>ISBLANK(value)</code></li>
<li>示例：<code>=ISBLANK(A1)</code> 返回A1为空白的真值。</li>
</ul>
</li>
<li><strong>ISTEXT（测试文本）</strong>：
<ul>
<li>测试值是否为文本。</li>
<li>语法：<code>ISTEXT(value)</code></li>
<li>示例：<code>=ISTEXT(A1)</code> 返回A1为文本的真值。</li>
</ul>
</li>
<li><strong>ISNUMBER（测试数字）</strong>：
<ul>
<li>测试值是否为数字。</li>
<li>语法：<code>ISNUMBER(value)</code></li>
<li>示例：<code>=ISNUMBER(A1)</code> 返回A1为数字的真值。</li>
</ul>
</li>
<li><strong>ISNONTEXT（测试非文本）</strong>：
<ul>
<li>测试值是否不为文本。</li>
<li>语法：<code>ISNONTEXT(value)</code></li>
<li>示例：<code>=ISNONTEXT(A1)</code> 返回A1不为文本的真值。</li>
</ul>
</li>
<li><strong>ISERROR（测试错误）</strong>：
<ul>
<li>测试值是否为错误。</li>
<li>语法：<code>ISERROR(value)</code></li>
<li>示例：<code>=ISERROR(A1/B1)</code> 如果B1为0，则返回错误值。</li>
</ul>
</li>
<li><strong>ISEVEN（测试偶数）</strong>：
<ul>
<li>测试值是否为偶数。</li>
<li>语法：<code>ISEVEN(value)</code></li>
<li>示例：<code>=ISEVEN(A1)</code> 返回A1为偶数的真值。</li>
</ul>
</li>
<li><strong>ISODD（测试奇数）</strong>：
<ul>
<li>测试值是否为奇数。</li>
<li>语法：<code>ISODD(value)</code></li>
<li>示例：<code>=ISODD(A1)</code> 返回A1为奇数的真值。</li>
</ul>
</li>
</ol>
<h2>（五）数据的透视表和透视图</h2>
<p>在Excel中，数据透视表（PivotTable）和数据透视图（PivotChart）是强大的数据分析工具，它们允许用户通过拖放操作来重新排列和分析数据。</p>
<h5>数据透视表（PivotTable）</h5>
<p>数据透视表是一种交互式的数据表，它可以根据需要重新组织数据，以提供不同的视角和分析结果。以下是创建数据透视表的基本步骤：</p>
<ol>
<li><strong>选择数据源</strong>：
<ul>
<li>选择您想要分析的数据区域。</li>
</ul>
</li>
<li><strong>插入数据透视表</strong>：
<ul>
<li>在Excel的“插入”菜单中，选择“数据透视表”。</li>
<li>在弹出的对话框中，选择要放置数据透视表的位置，可以选择现有工作表的一个单元格，或者创建一个新工作表。</li>
</ul>
</li>
<li><strong>选择数据透视表位置</strong>：
<ul>
<li>指定数据透视表的位置后，点击“确定”。</li>
</ul>
</li>
<li><strong>添加字段</strong>：
<ul>
<li>在数据透视表的行标签、列标签和值区域中，拖动字段来创建维度和聚合。</li>
<li>行标签通常用于分组数据，列标签用于显示不同的类别，值区域用于计算汇总或聚合。</li>
</ul>
</li>
<li><strong>格式化和自定义</strong>：
<ul>
<li>可以使用格式工具来美化数据透视表，例如调整单元格格式、添加颜色、创建切片器等。</li>
</ul>
</li>
<li><strong>更新和刷新</strong>：
<ul>
<li>数据透视表会随着数据源的更新而更新，但也可以手动刷新数据透视表以获取最新的数据。</li>
</ul>
</li>
<li><strong>编辑和操作</strong>
在Excel中编辑数据透视表包括添加或删除字段、更改数据透视表布局、设置数据透视表样式等操作。以下是一些基本的编辑数据透视表的步骤：
-1. <strong>添加或删除字段</strong>：
<ul>
<li>在数据透视表的“数据透视表字段列表”中，您可以看到所有可用的字段。</li>
<li>要添加字段到行标签、列标签或值区域，只需将字段从“数据透视表字段列表”拖动到相应的区域。</li>
<li>要删除字段，从行标签、列标签或值区域中拖动字段到“数据透视表字段列表”中的“&lt;字段列表&gt;”区域。
-2. <strong>更改数据透视表布局</strong>：</li>
<li>在数据透视表的“数据透视表字段列表”中，您可以重新排列字段。</li>
<li>拖动字段以改变它们在行标签、列标签和值区域中的顺序。
-3. <strong>设置数据透视表样式</strong>：</li>
<li>在数据透视表的“设计”选项卡中，您可以找到“数据透视表样式”组。</li>
<li>点击“数据透视表样式”组中的“其他”按钮，选择一个样式来改变数据透视表的外观。
-4. <strong>刷新数据透视表或更新数据源</strong>：</li>
<li>在数据透视表的“分析”选项卡中，找到“刷新”按钮。</li>
<li>点击“刷新”按钮来更新数据透视表中的数据，以反映数据源中的任何更改。
-5. <strong>重新选择数据源</strong>：</li>
<li>如果数据源发生了变化，您可以重新选择新的数据区域作为数据透视表的数据源。</li>
<li>在数据透视表的“分析”选项卡中，找到“数据”组，点击“选择数据”按钮。</li>
<li>在弹出的“选择数据源”对话框中，选择新的数据区域，然后点击“确定”。
-6. <strong>更改数据透视表的布局和格式</strong>：</li>
<li>在数据透视表的“设计”选项卡中，您可以找到“数据透视表样式”组，这里可以更改数据透视表的外观。</li>
<li>在“数据透视表工具”中的“分析”选项卡中，您可以找到“数据透视表选项”组，这里可以设置数据透视表的行为，例如名称、布局、筛选条件等。
-7. <strong>使用切片器</strong>：</li>
<li>切片器是一种控件，可以用来快速筛选数据透视表中的数据。</li>
<li>在数据透视表的“分析”选项卡中，找到“插入切片器”按钮，点击它来创建切片器。</li>
<li>拖动字段到切片器中，然后使用切片器来筛选数据透视表中的数据。
-8. <strong>使用筛选器</strong>：</li>
<li>在数据透视表的“分析”选项卡中，找到“字段列表”按钮，点击它来打开“数据透视表字段列表”对话框。</li>
<li>在“数据透视表字段列表”中，您可以拖动字段到“筛选”区域，然后使用下拉列表来筛选数据透视表中的数据。
-9. <strong>使用钻取和下拉列表</strong>：</li>
<li>钻取是一种操作，允许您在数据透视表中查看更详细的数据。</li>
<li>下拉列表是数据透视表中的一个控件，可以用来快速选择不同的值。</li>
<li>在数据透视表中，右键点击单元格，选择“下拉列表”或“钻取”选项来使用这些功能。</li>
</ul>
</li>
</ol>
<h5>数据透视图（PivotChart）</h5>
<p>数据透视图是数据透视表的图形表示形式，它可以帮助用户更直观地理解数据。以下是创建数据透视图的基本步骤：</p>
<ol>
<li><strong>选择数据透视表</strong>：
<ul>
<li>在数据透视表中，确保数据已经正确分组和聚合。</li>
</ul>
</li>
<li><strong>插入数据透视图</strong>：
<ul>
<li>在数据透视表的“插入”菜单中，选择“数据透视图”。</li>
<li>在弹出的对话框中，选择图表类型，然后点击“确定”。</li>
</ul>
</li>
<li><strong>选择图表类型</strong>：
<ul>
<li>在图表类型对话框中，选择您想要的图表类型，如柱状图、折线图、饼图等。</li>
</ul>
</li>
<li><strong>自定义图表</strong>：
<ul>
<li>数据透视图会自动创建，但您可以使用图表工具来自定义图表的外观，例如添加标题、轴标签、图例、数据标签等。</li>
</ul>
</li>
<li><strong>更新和刷新</strong>：
<ul>
<li>数据透视图会随着数据透视表的更新而更新，但也可以手动刷新数据透视图以获取最新的数据。</li>
</ul>
</li>
</ol>
<h2>（六）数据分析与可视化</h2>
<p>在Excel中绘制图形，您通常指的是创建图表来可视化数据。图表是数据的可视化表示，可以帮助您更直观地理解和分析数据。以下是创建图表的基本步骤：</p>
<ol>
<li><strong>选择数据源</strong>：
<ul>
<li>打开Excel工作簿，选择您想要分析的数据区域。这个区域可以是连续的单元格，也可以是已有的数据表。</li>
</ul>
</li>
<li><strong>插入图表</strong>：
<ul>
<li>在Excel的“插入”菜单中，找到“图表”选项，点击它。</li>
<li>在弹出的图表选择器中，您将看到各种图表类型，如柱形图、折线图、饼图、散点图等。</li>
<li>选择您想要的图表类型，然后点击“确定”以创建图表。</li>
</ul>
</li>
<li><strong>调整图表</strong>：
<ul>
<li>创建图表后，您可以使用图表工具来调整图表的外观和布局。</li>
<li>例如，您可以更改图表的标题、轴标签、图例、数据标签等。</li>
</ul>
</li>
<li><strong>格式化图表</strong>：
<ul>
<li>使用格式工具来美化图表，例如调整单元格格式、添加颜色、创建切片器等。</li>
</ul>
</li>
<li><strong>更新和刷新</strong>：
<ul>
<li>数据透视表会随着数据源的更新而更新，但也可以手动刷新数据透视表以获取最新的数据。</li>
<li>在图表的“图表工具”中的“设计”选项卡中，找到“数据”组，点击“选择数据”按钮。</li>
<li>在弹出的“选择数据源”对话框中，选择新的数据区域，然后点击“确定”。</li>
</ul>
</li>
</ol>
]]></content:encoded>
      <category>学习</category>
      <category>笔记</category>
    </item>
    <item>
      <title>实习AND租房</title>
      <link>https://zxwlove.de5.net/posts/2024/实习</link>
      <guid isPermaLink="true">https://zxwlove.de5.net/posts/2024/实习</guid>
      <pubDate>Tue, 28 May 2024 00:00:00 GMT</pubDate>
      <author>浅小兮</author>
      <description>实习和租房经验分享</description>
      <content:encoded><![CDATA[<h2>前言</h2>
<blockquote>
<p>关于省教育厅下大命令要求大学生需要实习慢6个月我深感无奈（部分地区有所不同，以自己那边政策为主吧ヽ(ー_ー)ノ）。其实这也是利大于弊的事情，就是吐槽为啥一定要满6个月啊，有的地方3个月就拿实习章结束了(；´д｀)ゞ，关键我还有论文答辩要搞呀！！！
然后暑假租房的避险也记录一下下！</p>
</blockquote>
<h2>实习</h2>
<h3>为什么要去找实习</h3>
<p>先聊聊个人见解，因为我所学的相关专业是与计算机，大数据等有关，所以实习是对个人来说提升有非常大的作用（最总要的还是学分的诱惑(*￣︶￣)），而是为了校招进大厂有准备，毕竟谁也不行一毕业就失业，那可悲催了。对于其他专业家里有矿就另说，也是一个很好的锻炼自己的工作！
再就是网上的各种帖子，如：实践专业知识，探索职业方向，积累人脉，让简历更丰富等等
我更建议暑假就去实习！</p>
<h3>怎么去找实习</h3>
<blockquote>
<p>找实习的方式有很多以下是我总结分析的</p>
</blockquote>
<ol>
<li>校招</li>
</ol>
<p>校招大厂的话建议先去小厂实习个把月在投简历这样被看上的几率更大，这个就需要自己去关注学校官网和或问自己导员。</p>
<ol start="2">
<li>网络招聘</li>
</ol>
<p>在网上招聘有五花八门，有真实的也要虚假的</p>
<ul>
<li>求职网站</li>
</ul>
<p>现在市面上的求职网站也是非常多</p>
<ol start="3">
<li>亲友介绍</li>
</ol>
<p><strong>明确目标</strong>：
首先确定你想要在哪个行业或领域实习，这将帮助你集中精力和资源。
<strong>制作简历</strong>：
准备一份清晰、简洁、专业的简历，强调与实习职位相关的技能和经验。
<strong>建立人脉</strong>：
利用职业社交平台如领英（LinkedIn）来建立和扩展职业网络。参加行业相关的活动和讲座，与行业内的人士建立联系。
<strong>寻找实习机会</strong>：
可以通过学校提供的资源、招聘网站、公司官网等途径寻找实习机会。
<strong>准备面试</strong>：
一旦有面试机会，就要做好充分准备。研究公司背景，准备常见面试问题的答案，并练习自我介绍。
<strong>申请</strong>：
根据职位要求提交申请，包括简历、求职信以及可能要求的其它材料。
<strong>跟进</strong>：
面试后，可以发送感谢信表示对职位的兴趣，并询问下一步的流程。
<strong>持续学习</strong>：
在找实习的同时，不断提升自己的专业技能和软技能，使自己更具竞争力。
<strong>保持积极态度</strong>：
找实习可能会有挫折，重要的是保持积极和坚持不懈的态度。</p>
<h2>租房</h2>
<h3>租房准备或检查</h3>
<ol>
<li>下午看房，要查看小区氛围，小区是否有人在装修</li>
<li>电器能耗功率</li>
<li>关于屋内添置的东西，装修的房东的态度</li>
<li>定金不超过月租的30%-50%</li>
<li>多看房加中介！</li>
<li>检查马桶冲水，检查水压和热水效果，下水道和地漏等基础设施</li>
<li>检查房屋隔音，窗户是否是双层，是否带纱窗，灯的亮度，开关，插座，墙体是否是实心的</li>
<li>水电费怎么算？（民用or商用）水电网燃气等费用是否均摊，没有大概是多少钱，怎么交？以及物业费用怎么算？</li>
<li>检查房屋家具，装修等质量问题，测甲醛含量，闻家具是否含有气味，避免串串房！</li>
<li>小区快递外卖怎么取，超市，水果蔬菜市场远不远</li>
<li>合同期限，合同签多久？有没有优惠什么的。签合同检查中介与房东的合同</li>
<li>监测房东身份证，房产证等信息，避免被二房东卷钱跑路</li>
<li>测试网络流畅度</li>
<li>合租的话合租的舍友是否带异性回家，其他租客的租期什么时候到期</li>
<li>摄像头监测</li>
<li>是否会有蟑螂老鼠蚊子等等</li>
</ol>
<blockquote>
<p>以上如有不全，欢迎小伙伴提醒我。</p>
</blockquote>
]]></content:encoded>
      <category>生活日常</category>
      <category>生活日常</category>
    </item>
    <item>
      <title>Markdown图片显示问题解决</title>
      <link>https://zxwlove.de5.net/posts/2024/图片防盗链</link>
      <guid isPermaLink="true">https://zxwlove.de5.net/posts/2024/图片防盗链</guid>
      <pubDate>Tue, 12 Mar 2024 07:52:23 GMT</pubDate>
      <author>浅小兮</author>
      <description>图片防盗链技术详解，保护网站图片资源不被恶意引用</description>
      <content:encoded><![CDATA[<h3>解决百度贴吧和bilibili等多个网站图片无法显示的问题</h3>
<h5>图片的防盗链</h5>
<p>随着互联网的普及，网站之间的图片资源共享变得越来越普遍。然而，一些不法分子会试图盗用其他网站的优质图片，将其嵌入自己的网站中，以增加网站的吸引力和流量。为了保护自己的图片资源，许多网站采用了图片防盗链技术。</p>
<p>图片防盗链的实现原理基于HTTP协议中的Referer字段。当一个网页请求另一个网页时，HTTP请求头中会包含一个Referer字段，该字段记录了发起请求的原始网页地址。图片服务器可以通过检测Referer字段来判断请求是否来自指定的域名范围。如果请求的Referer值不符合预设的条件，图片服务器可以拒绝提供图片资源，从而防止盗链行为的发生。</p>
<h4>解决的方案</h4>
<ol>
<li>修改图片服务器的配置文件，将Referer字段设置为允许访问的域名。或者删除 Header 中的 Referrer</li>
</ol>
<p>content 有四个值可以选择 never,always,origin,default 这是来自于 whatwg 标准，浏览器对他的支持还是很好的。MDN 标准，还多了一个 no-referrer</p>
<pre><code>&lt;meta name=&quot;referrer&quot; content=&quot;never&quot;&gt;
</code></pre>
<ol start="2">
<li>在网页中添加Referer字段的验证逻辑，只有当Referer字段的值符合预设的条件时，才允许加载图片。</li>
</ol>
<pre><code>&lt;img src=&quot;xxxx.jpg&quot; referrerPolicy=&quot;no-referrer&quot; /&gt;
</code></pre>
<ol start="3">
<li>使用后台的预下载（把图片下载下来放到服务器下）</li>
</ol>
<h3>语雀</h3>
<p>转成md文件导出，图片无法正常显示。把url地址中png后面的部分，即#clientId开始全部删掉即可</p>
<h3>hexo上传博客时</h3>
<p>在md文件中加上meta标签即可保证图片都能正常显示，标签如下。</p>
<pre><code class="language-markdown">$ &lt;meta name=&quot;referrer&quot; content=&quot;no-referrer&quot; /&gt;
</code></pre>
]]></content:encoded>
      <category>技术分享</category>
      <category>技术分享</category>
    </item>
    <item>
      <title>Hadoop大数据开发基础</title>
      <link>https://zxwlove.de5.net/posts/2024/hadoop</link>
      <guid isPermaLink="true">https://zxwlove.de5.net/posts/2024/hadoop</guid>
      <pubDate>Fri, 01 Mar 2024 02:48:42 GMT</pubDate>
      <author>浅小兮</author>
      <description>Hadoop大数据开发基础入门教程</description>
      <content:encoded><![CDATA[<h1>Hadoop大数据开发基础</h1>
<blockquote>
<p>题外话：关于Hadoop的知识点非常多，总结都不一定全面，有可能需要分非常多的部分组成一大类还要延生到Hive相关的知识点还有数据库等等，需要用到的工具部署起来也是非常复杂的，此篇仅供本人复习使用，如有需要你也可以参考我的知识点----浅小兮</p>
</blockquote>
<blockquote>
<p><a href="https://hadoop.apache.org/">Hadoop官网</a>地址https://hadoop.apache.org/</p>
</blockquote>
<h4>Hadoop系列导航</h4>
<blockquote>
<p><a href="https://hadoop.apache.org/">Hadoop基础介绍</a>→当前页面
2.Hadoop环境搭建
3.待更新中…………</p>
</blockquote>
<h4>1. Hadoop 生态系统</h4>
<p>Hadoop 生态系统包含多个组件，每个组件都有其特定的功能。以下是一些主要的组件：</p>
<ul>
<li><strong>Hadoop Distributed File System (HDFS)</strong>：Hadoop 的文件系统，用于存储大数据集。</li>
<li><strong>YARN (Yet Another Resource Negotiator)</strong>：资源管理器，负责集群中的资源分配和管理。</li>
<li><strong>Hadoop MapReduce</strong>：分布式计算框架，用于处理大规模数据集的并行计算。</li>
<li><strong>Hadoop Common</strong>：提供 Hadoop 生态系统中其他组件所共用的库和工具。</li>
<li><strong>Hadoop 生态系统中的其他组件</strong>：如 Hive (数据仓库)、HBase (分布式存储)、ZooKeeper (分布式协调服务) 等。</li>
</ul>
<h4>2. HDFS (Hadoop Distributed File System)</h4>
<p>HDFS 是 Hadoop 的文件系统，它将数据分成多个块（默认大小为 128MB），并存储在不同的服务器上。HDFS 提供了高吞吐量和容错能力，适合存储大量数据。</p>
<h4>3. YARN (Yet Another Resource Negotiator)</h4>
<p>YARN 是 Hadoop 的资源管理器，它负责集群中的资源分配和管理。YARN 允许用户运行多种类型的分布式应用程序，而不仅仅是 MapReduce 应用程序。</p>
<h4>4. Hadoop MapReduce</h4>
<p>MapReduce 是 Hadoop 的分布式计算框架，用于处理大规模数据集的并行计算。MapReduce 包含两个主要阶段：Map 阶段和 Reduce 阶段。</p>
<ul>
<li><strong>Map 阶段</strong>：对输入数据进行分割，并将其分发给集群中的多个节点进行处理。每个节点处理一部分数据，并生成中间结果。</li>
<li><strong>Reduce 阶段</strong>：将 Map 阶段生成的中间结果合并，生成最终结果。</li>
</ul>
<h4>5. Hadoop 生态系统中的其他组件</h4>
<ul>
<li><strong>Hive</strong>：是一个数据仓库工具，用于数据提取、转换和加载（ETL）。它允许用户使用类似 SQL 的查询语言（HQL）来处理大规模数据集。</li>
<li><strong>HBase</strong>：是一个分布式的、可扩展的、面向列的数据库，用于存储大量结构化和半结构化数据。</li>
<li><strong>ZooKeeper</strong>：是一个分布式协调服务，用于维护配置信息、命名服务、分布式同步和提供其他一些基础服务。</li>
</ul>
<h4>6.Hadoop特点</h4>
<ol>
<li><strong>可扩展性</strong>：Hadoop 设计为可扩展的，允许用户根据需要添加更多的节点来处理更多的数据。它支持从几个节点到数千个节点的扩展。</li>
<li><strong>容错性</strong>：Hadoop 设计时考虑了容错性，当集群中的某个节点出现故障时，Hadoop 能够自动重新分配任务到其他健康的节点上，确保数据处理不会中断。</li>
<li><strong>高吞吐量</strong>：Hadoop 能够并行处理数据，因此在处理大量数据时具有很高的吞吐量。</li>
<li><strong>低成本</strong>：Hadoop 可以使用廉价的服务器来构建集群，这使得它成为处理大数据集的低成本解决方案。</li>
<li><strong>灵活性</strong>：Hadoop 支持多种数据格式，包括文本、结构化数据、半结构化数据和非结构化数据。</li>
<li><strong>可移植性</strong>：Hadoop 是开源的，可以在多种操作系统上运行，包括 Linux、Windows 和 macOS。</li>
</ol>
]]></content:encoded>
      <category>学习</category>
      <category>笔记</category>
      <category>Hadoop</category>
    </item>
    <item>
      <title>年度总结</title>
      <link>https://zxwlove.de5.net/posts/2024/2024年度总结</link>
      <guid isPermaLink="true">https://zxwlove.de5.net/posts/2024/2024年度总结</guid>
      <pubDate>Mon, 01 Jan 2024 00:00:00 GMT</pubDate>
      <author>浅小兮</author>
      <description>2024年度总结与回顾</description>
      <content:encoded><![CDATA[<h2>回望2023，展望2024</h2>
<blockquote>
<p>题记——卅载光阴弹指过 未应磨染是初心。
——叶嘉莹</p>
</blockquote>
<p>回首2023年，我在学习上获得了丰富的收获。我努力学习了Java、Python、MySQL、PHP、大数据、运维、区块链等各个领域的知识。这些技术的学习让我拓宽了视野，提升了自己的专业能力。同时，我还参加了CET4和普通话考试，通过努力取得了不错的成绩。这些学习和考试经历让我明白了付出努力的重要性，也让我更加坚定了学习的决心。
然而，生活中的经历却是起伏不定，充满了情感的起伏。我不得不承认，2023年对我来说并不是一个顺利的一年。生活上的困难和挫折让我感到压力和困惑。许多事情不如自己所愿，这让我深感无奈和沮丧。回想起童年的时光，我不禁怀念起那个无忧无虑、单纯快乐的时光。
然而，即使经历了挫折和困难，我对2024年充满了期待和计划。首先，我希望能够在事业上取得更大的成功，赚取更多的财富。我计划考取计算机二级证书，同时也准备参加教师资格证考试，为自己的未来发展打下坚实的基础。此外，我还计划在寒假期间拿到驾照，这将为我的出行提供更多的便利。
对于2024年，我的期望很简单：平平安安，顺顺利利。我希望能够远离烦恼和困扰，享受宁静和平和的生活。我希望自己能够克服困难，勇往直前，实现自己的目标和梦想。
时光荏苒，岁月如梭。2023年已经成为过去，留下了宝贵的经历和教训。2024年即将到来，我将带着对过去的回忆和对未来的期许，迎接新的挑战和机遇。
<img src="https://cdn.nlark.com/yuque/0/2024/jpeg/29368235/1718375649265-33467199-2d6a-4a36-a6c5-ef6b9bd1e088.jpeg#averageHue=%23542515&amp;clientId=uf32f6f74-383a-4&amp;from=drop&amp;id=u0fcc618b&amp;originHeight=1018&amp;originWidth=1080&amp;originalType=binary&amp;ratio=2&amp;rotation=0&amp;showTitle=false&amp;size=325514&amp;status=done&amp;style=none&amp;taskId=udd2c7cc2-da85-4136-8037-9874d92ada8&amp;title=" alt="52526046636041075761704036095133_edit_631039382502666.jpg"></p>
]]></content:encoded>
      <category>生活日常</category>
      <category>生活日常</category>
    </item>
    <item>
      <title>文章加密测试</title>
      <link>https://zxwlove.de5.net/posts/2023/加密测试</link>
      <guid isPermaLink="true">https://zxwlove.de5.net/posts/2023/加密测试</guid>
      <pubDate>Sun, 31 Dec 2023 13:59:59 GMT</pubDate>
      <author>浅小兮</author>
      <description>Hexo博客文章加密测试页面</description>
      <content:encoded><![CDATA[<h3>前言</h3>
<blockquote>
<p>因为想写一些私人内容所以就去网上搜了一下怎么加密文章，以防忘记就把这篇文章搬到自己博客上啦，本篇密码123456简单吧</p>
</blockquote>
<h3>安装Hexo-Blog-Encrypt</h3>
<p>hexo的博客添加密码其实只需要安装一个插件就可以了。
通过npm在hexo博客目录安装Hexo-Blog-Encrypt</p>
<pre><code class="language-bash">npm install --save hexo-blog-encrypt
</code></pre>
<p>或 <code>yarn add hexo-blog-encrypt</code> (需要) Yarn)</p>
<h3>快速使用</h3>
<h4>只需要在博客的开头使用</h4>
<pre><code class="language-bash">---
title: 加密文章
date: 2024-06-29 19:03:45
password: 密码
---
</code></pre>
<h4>高级设置</h4>
<blockquote>
<p>优先级：Post Front-matter&gt;按标签加密</p>
</blockquote>
<pre><code class="language-Post">---
title: 加密文章
tags:
- 加密文章的tag
date: 2024-06-29 19:03:45
password: 密码
abstract: 这里有东西被加密了，需要输入密码查看哦。
message: 您好，这里需要密码。
wrong_pass_message: 抱歉，这个密码看着不太对，请再试试。
wrong_hash_message: 抱歉，这个文章不能被纠正，不过您还是能看看解密后的内容。
---
</code></pre>
<p>根目录添加配置文件<code>_config.yml</code>（示例）</p>
<pre><code class="language-bash"># Security安全
encrypt: # hexo-blog-encrypt
  abstract: 这里有东西被加密了，需要输入密码查看哦。
  message: 您好, 这里需要密码.
  tags:
  - {name: tagName, password: 密码A}
  - {name: tagName, password: 密码B}
  #密码主题 https://github.com/D0n9X1n/hexo-blog-encrypt#encrypt-theme
  theme: wave	
  wrong_pass_message: 抱歉, 这个密码看着不太对, 请再试试.
  wrong_hash_message: 抱歉, 这个文章不能被校验, 不过您还是能看看解密后的内容.
</code></pre>
<h4>对文章禁用 Tag 加密</h4>
<p>只需要将博文头部的<code>password</code>设置为<code>&quot;&quot;</code>即可取消 Tag 加密。</p>
<pre><code class="language-bash">---
title: 测试
date: 2024-06-29 19:34:07
tags:
    - 标签应该加密
password: &quot;&quot;
---

使用&quot;&quot;可禁用标签加密。
</code></pre>
<blockquote>
<p>优先级：Post Front-matter &gt;<code>_config.yml</code>(站点根目录下的) &gt; 默认配置</p>
</blockquote>
<h4>关于 Callback 函数</h4>
<p>在部分博客中, 解密后部分元素可能无法正常显示或者表现, 这属于已知问题. 目前的解决办法是通过自行查阅自己的博客中的代码, 了解到在 onload 事件发生时调用了哪些函数, 并将这些函数挑选后写入到博客内容中. 如:</p>
<pre><code class="language-bash">---
title: 回调测试
date: 2024-06-29 19:36:09
tags:
- 加密
---

这是一个测试回调函数的博客。您只需要在帖子的最后添加代码，如下所示：
它将在博客解密后被调用。

&lt;script&gt;
    // 添加一个 script tag 与代码在文章末尾.
    alert(&quot;Hello World&quot;);
&lt;/script&gt; 
</code></pre>
<h4>禁用Log</h4>
<p>如果你想要禁止使用 Log, 你可以在<code>_config.yml</code>中增加一个 silent 属性, 并将其设置为 true.</p>
<pre><code class="language-bash"># Security安全
encrypt: # hexo-blog-encrypt
silent: true
</code></pre>
<h4>加密主题</h4>
<p>可以简单的使用<code>theme</code>在<code>_config.yml</code>里或者文章头, 如下:</p>
<pre><code class="language-bash">---
title: Hello World
tags:
- 作为日记加密
date: 2024-06-29 19:46:21
password: 123456
abstract: 有东西被加密了, 请输入密码查看.
message: 您好, 这里需要密码.
theme: butterfly
wrong_pass_message: 抱歉, 这个密码看着不太对, 请再试试.
wrong_hash_message: 抱歉, 这个文章不能被校验, 不过您还是能看看解密后的内容.
---
</code></pre>
<pre><code class="language-bash"># Security安全
encrypt: # hexo-blog-encrypt
  abstract: 有东西被加密了, 请输入密码查看.
  message: 您好, 这里需要密码.
  tags:
  - {name: tagName, password: 密码A}
  - {name: tagName, password: 密码B}
  theme: butterfly
  wrong_pass_message: 抱歉, 这个密码看着不太对, 请再试试.
  wrong_hash_message: 抱歉, 这个文章不能被校验, 不过您还是能看看解密后的内容.
</code></pre>
]]></content:encoded>
      <category>技术分享</category>
      <category>技术分享</category>
    </item>
    <item>
      <title>宝塔面板安装Hexo博客</title>
      <link>https://zxwlove.de5.net/posts/2023/宝塔安装Hexo</link>
      <guid isPermaLink="true">https://zxwlove.de5.net/posts/2023/宝塔安装Hexo</guid>
      <pubDate>Sun, 31 Dec 2023 12:59:59 GMT</pubDate>
      <author>浅小兮</author>
      <description>宝塔面板安装Hexo博客教程</description>
      <content:encoded><![CDATA[<h3>Hexo是一个使用nodejs 编写的博客类型的网站，本篇教程就是如何使用面板部署Hexo</h3>
<p>1、安装nodejs，我这里选择的是稳定版V20.13.1
<img src="https://cdn.nlark.com/yuque/0/2024/png/29368235/1718075272118-a86c1232-2bcb-48ed-8e7a-a514de5be027.png" alt="2024-05-26140959.png">
2、在网站目录创建网站目录hexo
在/www/wwwroot/文件夹下创建hexo文件夹
3、创建完成后，使用npm安装（在hexo文件夹下运行）</p>
<pre><code class="language-bash">$ npm install hexo -g
</code></pre>
<p>4、设置hexo的环境变量（注意与node.js版本对于）</p>
<pre><code class="language-bash">$ ln -s /www/server/nodejs/v20.13.1/lib/node_modules/hexo/bin/hexo /usr/bin/hexo
</code></pre>
<p>5、安装好后，进行初始化</p>
<pre><code class="language-bash">$ hexo init
</code></pre>
<p>6、生成静态文件</p>
<pre><code class="language-bash">$ hexo generate
</code></pre>
<p>或者是</p>
<pre><code class="language-bash">$ hexo g
</code></pre>
<p>7、新建网站
<img src="https://cdn.nlark.com/yuque/0/2024/png/29368235/1718075300350-36609424-9e02-4d99-a07c-6d1facff890b.png#averageHue=%23fdfdfd&amp;clientId=u648e44ca-36ee-4&amp;from=paste&amp;height=638&amp;id=u84e610d0&amp;originHeight=1275&amp;originWidth=1573&amp;originalType=binary&amp;ratio=2&amp;rotation=0&amp;showTitle=false&amp;size=69927&amp;status=done&amp;style=none&amp;taskId=u7c3403c6-75a1-4413-b886-7ec55ab266b&amp;title=&amp;width=786.5" alt="2024-05-26193150.png">
8、设置网站运行目录
<img src="https://cdn.nlark.com/yuque/0/2024/png/29368235/1718075306507-84033593-620a-422d-bf54-f209ffc717db.png#averageHue=%23fbfbfb&amp;clientId=u648e44ca-36ee-4&amp;from=paste&amp;height=431&amp;id=u3cf9383e&amp;originHeight=862&amp;originWidth=1589&amp;originalType=binary&amp;ratio=2&amp;rotation=0&amp;showTitle=false&amp;size=118949&amp;status=done&amp;style=none&amp;taskId=uce5e9056-bf4a-4d0e-8c51-64b6ac88452&amp;title=&amp;width=794.5" alt="2024-05-26192939.png">
9、然后就可以访问网站啦</p>
]]></content:encoded>
      <category>前端开发</category>
      <category>技术分享</category>
    </item>
    <item>
      <title>ubuntu系统基本操作命令</title>
      <link>https://zxwlove.de5.net/posts/2023/ubuntu命令</link>
      <guid isPermaLink="true">https://zxwlove.de5.net/posts/2023/ubuntu命令</guid>
      <pubDate>Sun, 31 Dec 2023 08:28:00 GMT</pubDate>
      <author>浅小兮</author>
      <description>Ubuntu系统基本操作命令速查手册</description>
      <content:encoded><![CDATA[<ol>
<li><code>ls</code> - 列出当前目录下的文件和文件夹。</li>
<li><code>ls -l</code> - 以详细列表形式显示当前目录下的文件和文件夹。</li>
<li><code>cd [目录名]</code> - 改变当前目录到指定目录。</li>
<li><code>pwd</code> - 显示当前目录的路径。</li>
<li><code>mkdir [目录名]</code> - 创建一个新的目录。</li>
<li><code>rm [文件名]</code> - 删除指定的文件。</li>
<li><code>rm -r [目录名]</code> - 递归删除指定的目录及其内部的所有内容。</li>
<li><code>cp [源文件/目录] [目标文件/目录]</code> - 复制文件或目录。</li>
<li><code>mv [源文件/目录] [目标文件/目录]</code> - 移动或重命名文件或目录。</li>
<li><code>touch [文件名]</code> - 创建一个空的文件或修改文件的时间戳。</li>
<li><code>cat [文件名]</code> - 查看文件内容。</li>
<li><code>nano [文件名]</code> - 使用nano文本编辑器编辑文件。</li>
<li><code>gedit [文件名]</code> - 使用gedit文本编辑器编辑文件。</li>
<li><code>chmod [权限] [文件名]</code> - 更改文件或目录的权限。</li>
<li><code>chown [用户:组] [文件名]</code> - 更改文件或目录的所有者和组。</li>
<li><code>sudo [命令]</code> - 以超级用户权限执行命令。</li>
<li><code>apt-get update</code> - 更新软件包列表。</li>
<li><code>apt-get upgrade</code> - 升级所有已安装的软件包。</li>
<li><code>apt-get install [软件包名]</code> - 安装指定的软件包。</li>
<li><code>apt-get remove [软件包名]</code> - 删除指定的软件包。</li>
<li><code>ps</code> - 显示当前运行的进程。</li>
<li><code>kill [进程号]</code> - 结束指定的进程。</li>
<li><code>logout</code> - 登出当前会话。</li>
<li><code>reboot</code> - 重新启动计算机。</li>
<li><code>shutdown -h now</code> - 立即关机。</li>
<li><code>history</code> - 显示在当前会话中执行过的命令历史。</li>
<li><code>man [命令名]</code> - 显示指定命令的帮助手册。</li>
<li><code>help</code> - 显示内置命令的帮助信息。</li>
<li><code>df -h</code> - 显示磁盘空间使用情况。</li>
<li><code>du -h [目录名]</code> - 显示指定目录的磁盘使用情况。</li>
<li><code>free -m</code> - 显示内存使用情况。</li>
<li><code>top</code> - 显示当前系统中运行的进程及其资源使用情况。</li>
<li><code>htop</code>（需要安装）- 类似于<code>top</code>，但提供了更丰富的功能和更好的界面。</li>
<li><code>ping [网址]</code> - 检查与指定网址的连接情况。</li>
<li><code>ifconfig</code> - 显示网络接口的配置信息。</li>
<li><code>iwconfig</code> - 显示无线网络接口的配置信息。</li>
<li><code>scp [源文件] [用户名]@[IP地址]:[目标路径]</code> - 安全地复制文件到另一台计算机。</li>
<li><code>ssh [用户名]@[IP地址]</code> - 安全地远程登录到另一台计算机。</li>
<li><code>tar -cvzf [压缩文件名].tar.gz [要压缩的文件/目录]</code> - 创建一个gzip格式的tar压缩文件。</li>
<li><code>tar -xvzf [压缩文件名].tar.gz</code> - 解压一个gzip格式的tar压缩文件。</li>
<li><code>grep [关键词] [文件名]</code> - 在文件中搜索指定的关键词。</li>
<li><code>find [路径] -name [文件名]</code> - 在指定路径下查找文件。</li>
<li><code>locate [文件名]</code> - 快速查找文件，使用前需要更新数据库（<code>sudo updatedb</code>）。</li>
<li><code>mount</code> - 显示已挂载的文件系统。</li>
<li><code>umount [设备名或挂载点]</code> - 卸载挂载的文件系统。</li>
<li><code>fdisk -l</code> - 显示磁盘分区信息。</li>
<li><code>lsblk</code> - 显示块设备的信息。</li>
<li><code>parted [设备名]</code> - 启动parted分区编辑器。</li>
<li><code>curl [网址]</code> - 从网络上下载文件或获取网页内容。</li>
<li><code>wget [网址]</code> - 另一个用于下载文件的工具。</li>
</ol>
]]></content:encoded>
      <category>学习</category>
      <category>笔记</category>
      <category>ubuntu</category>
      <category>命令</category>
    </item>
    <item>
      <title>Starlight 主题</title>
      <link>https://zxwlove.de5.net/posts/2023/hello-world</link>
      <guid isPermaLink="true">https://zxwlove.de5.net/posts/2023/hello-world</guid>
      <pubDate>Sun, 31 Dec 2023 00:00:00 GMT</pubDate>
      <author>浅小兮</author>
      <description>Starlight 主题使用文档，包含 YAML 元数据说明和快速入门指南</description>
      <content:encoded><![CDATA[<h1>欢迎来到 Starlight 主题</h1>
<p>🎉 你好啊，很高兴你选择了 <a href="https://github.com/stawei/vitepress-theme-curve">Starlight</a> ！这将是你的第一篇文章，你可以查看 <a href="https://github.com/stawei/vitepress-theme-curve">主题文档</a> 以了解更多，如果你在使用本主题时遇到问题，你可以在 <a href="https://github.com/stawei/vitepress-theme-curve">GitHub</a> 中正确提交 <a href="https://github.com/stawei/vitepress-theme-curve/issues">issues</a> 以获取社区的帮助。</p>
<p>::: info 若您有修改主题的需求，请确保您拥有基础的前端知识，最好能掌握 <a href="https://vuejs.org/">Vue.js</a> 框架的相关知识，并确保阅读了 <code>VitePress</code> 的 <a href="https://vitepress.dev/zh/guide/what-is-vitepress">官方文档</a>:::</p>
<h2>一、Hello 入门</h2>
<p>这是你在 Starlight 主题里创建的第一篇文章，从这里开始，你可以完全按照自己的想法搭建个人博客、技术笔记站或者内容分享站点。主题已经帮你预置好了基础的页面样式、文章布局和交互效果，不需要从零开始写大量重复代码。</p>
<p>你只需要专注于内容创作，剩下的排版、展示和基础优化，Starlight 都会自动帮你完成。</p>
<h2>二、快速开始</h2>
<h3>书写新的文章</h3>
<p>你可以直接在站点根目录中的 <code>posts</code> 文件夹中直接新建 <code>markdown</code> 文件来书写，你的文件路径即为实际生成的网址路径，不需要额外手动配置路由。</p>
<h3>添加新的页面</h3>
<p>你可以直接在站点根目录中的 <code>pages</code> 文件夹中直接新建 <code>markdown</code> 文件来实现新建页面，文件路径会自动映射为站点的访问路径。主题中已经内置了几个常用页面作为参考，你可以直接修改或者新增。</p>
<h3>主题配置</h3>
<p>本主题提供了一个 <code>themeConfig.mjs</code> 文件用来配置，它位于 <code>.vitepress\theme\assets\themeConfig.mjs</code>，你可以将它复制一份并移动至根目录中，在这里面的修改将会覆盖初始配置。请注意，<strong>请不要更改文件名或者删除原配置文件，否则它将会不起作用！</strong></p>
<h3>静态文件</h3>
<p>通常情况下，静态文件处于根目录下的 <code>public</code> 文件夹中，用于存放字体、图片等资源文件。了解更多：<a href="https://vitepress.dev/zh/guide/asset-handling#asset-handling">资源处理</a></p>
<h2>三、快速部署</h2>
<p>如果你之前使用过 Hexo 这类静态站点生成器，你会发现 Starlight 的部署逻辑和它非常相似：都是先构建生成纯静态文件，再上传到任意支持静态资源托管的平台即可访问。</p>
<p>你也可以借助 GitHub Actions 实现自动部署，提交代码后站点会自动完成构建和更新，不需要每次手动操作。</p>
<p>基础构建命令如下：</p>
<h3>安装依赖</h3>
<pre><code class="language-language">npm install  
</code></pre>
<h3>构建静态文件</h3>
<pre><code class="language-language">npm run build  
</code></pre>
<p>更推荐使用 pnpm 来管理依赖，安装和构建速度会更快：</p>
<h3>全局安装 pnpm</h3>
<pre><code class="language-language">npm install pnpm -g  
</code></pre>
<h3>安装项目依赖</h3>
<pre><code class="language-language">pnpm install  
</code></pre>
<h3>构建静态文件</h3>
<pre><code class="language-language">pnpm build  
</code></pre>
<p>默认配置下，打包后的静态文件会生成在根目录的 <code>.vitepress\dist</code> 文件夹中，你可以把这个文件夹里的全部内容上传到服务器、对象存储或者免费静态托管平台，就能直接访问你的站点了。</p>
<h2>四、元数据说明</h2>
<p>这部分是 Starlight 主题的核心配置规则，每篇文章顶部的 YAML 元数据，决定了文章的标题、链接、分类标签等核心属性，所有支持的字段说明如下：</p>
<h3>基础必填元数据</h3>
<table>
<thead>
<tr>
<th style="text-align:left">字段</th>
<th style="text-align:left">说明</th>
<th style="text-align:left">示例</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>title</code></td>
<td style="text-align:left">文章标题，会显示在文章列表和文章页顶部</td>
<td style="text-align:left"><code>title: 我的第一篇技术笔记</code></td>
</tr>
<tr>
<td style="text-align:left"><code>abbrlink</code></td>
<td style="text-align:left">文章短链接，用于生成固定的唯一URL，避免路径变动导致链接失效</td>
<td style="text-align:left"><code>abbrlink: first-note</code></td>
</tr>
<tr>
<td style="text-align:left"><code>date</code></td>
<td style="text-align:left">文章发布日期，支持精确到时分秒</td>
<td style="text-align:left"><code>date: 2023-12-31</code> 或 <code>date: 2023-12-31 23:59:59</code></td>
</tr>
</tbody>
</table>
<h3>分类和标签</h3>
<table>
<thead>
<tr>
<th style="text-align:left">字段</th>
<th style="text-align:left">说明</th>
<th style="text-align:left">示例</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>categories</code></td>
<td style="text-align:left">文章分类，支持设置单个或多个分类</td>
<td style="text-align:left"><code>categories: [技术笔记, 云原生]</code></td>
</tr>
<tr>
<td style="text-align:left"><code>tags</code></td>
<td style="text-align:left">文章标签，支持设置多个标签用于内容归类</td>
<td style="text-align:left"><code>tags: [Docker, 部署教程]</code></td>
</tr>
</tbody>
</table>
<h3>描述和摘要</h3>
<table>
<thead>
<tr>
<th style="text-align:left">字段</th>
<th style="text-align:left">说明</th>
<th style="text-align:left">示例</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>description</code></td>
<td style="text-align:left">文章简介，会展示在文章列表页，也会作为页面的SEO描述使用</td>
<td style="text-align:left"><code>description: 本文详细讲解了Docker容器化部署的基础步骤</code></td>
</tr>
<tr>
<td style="text-align:left"><code>articleGPT</code></td>
<td style="text-align:left">AI摘要，会自动展示在文章页顶部，帮助读者快速了解全文内容</td>
<td style="text-align:left"><code>articleGPT: 这是一篇面向新手的Docker入门部署教程，覆盖环境搭建到上线全流程</code></td>
</tr>
</tbody>
</table>
<h3>其他可选配置</h3>
<table>
<thead>
<tr>
<th style="text-align:left">字段</th>
<th style="text-align:left">说明</th>
<th style="text-align:left">示例</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>cover</code></td>
<td style="text-align:left">文章封面图片URL，不填写则自动使用主题配置的默认封面</td>
<td style="text-align:left"><code>cover: https://example.com/cover.jpg</code></td>
</tr>
<tr>
<td style="text-align:left"><code>top</code></td>
<td style="text-align:left">设置文章是否在列表页置顶展示</td>
<td style="text-align:left"><code>top: true</code></td>
</tr>
<tr>
<td style="text-align:left"><code>aside</code></td>
<td style="text-align:left">控制当前文章是否显示侧边栏，默认开启</td>
<td style="text-align:left"><code>aside: false</code></td>
</tr>
<tr>
<td style="text-align:left"><code>copyright</code></td>
<td style="text-align:left">控制当前文章是否显示底部版权声明，默认开启</td>
<td style="text-align:left"><code>copyright: false</code></td>
</tr>
<tr>
<td style="text-align:left"><code>password</code></td>
<td style="text-align:left">给当前文章设置访问密码，设置后需要输入正确密码才能查看内容</td>
<td style="text-align:left"><code>password: 123456</code></td>
</tr>
<tr>
<td style="text-align:left"><code>references</code></td>
<td style="text-align:left">文章底部的参考资料链接列表，支持添加多个参考链接</td>
<td style="text-align:left">格式示例见下方</td>
</tr>
</tbody>
</table>
<p>参考资料配置格式示例：</p>
<p>`references:</p>
<ul>
<li>title: VitePress 官方文档<br>
url: https://vitepress.dev/</li>
<li>title: Docker 官方教程<br>
url: https://docs.docker.com/<br>
`</li>
</ul>
<h2>更多信息</h2>
<p>更多主题使用细节请参考官方文档：<a href="https://github.com/stawei/">Starlight 主题文档</a></p>
]]></content:encoded>
      <category>文档</category>
      <category>Starlight</category>
      <category>主题</category>
    </item>
  </channel>
</rss>