<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>GuguMelon&#39;s Blog</title>
  
  <subtitle>今天所做之事勿候明天，自己所做之事勿候他人。</subtitle>
  <link href="https://maydaytyh.github.io/blog/atom.xml" rel="self"/>
  
  <link href="https://maydaytyh.github.io/blog/"/>
  <updated>2022-07-19T14:31:26.470Z</updated>
  <id>https://maydaytyh.github.io/blog/</id>
  
  <author>
    <name>GuGuMelon</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>Windows 推荐软件</title>
    <link href="https://maydaytyh.github.io/blog/2022/07/19/Windows-%E6%95%88%E7%8E%87%E5%B7%A5%E5%85%B7/"/>
    <id>https://maydaytyh.github.io/blog/2022/07/19/Windows-%E6%95%88%E7%8E%87%E5%B7%A5%E5%85%B7/</id>
    <published>2022-07-19T13:50:50.000Z</published>
    <updated>2022-07-19T14:31:26.470Z</updated>
    
    <content type="html"><![CDATA[<p>For 玉米米.</p><a id="more"></a><p>新电脑要来了！我们来看看 Windows 下有什么好用的工具吧！</p><h2 id="效率工具"><a href="#效率工具" class="headerlink" title="效率工具"></a>效率工具</h2><p>1、剪切板神器—<strong>Ditto</strong></p><p><strong>主要用途</strong>：记录剪切板历史，可以找到之前复制的内容，这样，有的东西就不需要反复复制啦</p><p><strong>优点</strong>：</p><ul><li>Ditto使用默认快捷键（Ctrl + `）调出主页面后，可以看到Ditto按照剪切顺序倒叙保存所有剪贴项，还支持为剪贴项分组，方便管理。</li><li>此外Ditto支持多种格式的数据，包括富文本、图片和文件路径，可以自定义添加或删除。</li></ul><p>2、截屏工具—<strong>Snipaste</strong></p><p><strong>主要用途</strong>：系统截屏，截图简单快捷、也可以将截图的结果固定在桌面上，用完销毁即可</p><p>3、预览工具—<strong>Quicklook</strong></p><p><strong>主要用途：</strong>空格可以预览文件内容、文件夹大小等信息，比如 word、 txt、markdown 文件，无需打开，按一下空格即可预览文件内容</p><p><strong>优点</strong>：</p><ul><li>支持的格式有<ul><li>图片：.png, .jpg, .bmp, .gif, .psd, .apng 压缩包：.zip, .rar, .tar.gz, .7z</li><li>文档：.pdf, .txt, .html, .htm, .md, .markdown, .csv, .eml Office</li><li>全家桶：Word (.doc, .docx), Excel (.xls, .xlsx), PowerPoint (.ppt, .pptx)</li><li>视频文件：.mp4, .mkv, .m2ts</li><li>音频文件：.mp3, .ogg, .m4a</li></ul></li></ul><p>4、压缩软件—7zip</p><p><strong>主要用途</strong>：可用于解压、压缩文件，轻便快捷</p><p><strong>优点</strong>：</p><ul><li>小巧、免费、干净无广告、开源；</li><li>功能强大，所有压缩软件有的功能，都有；</li><li>压缩比高、占用资源少；</li><li>典型的用完即走模式</li></ul><p>5、本地查找神器—<strong>Everything</strong></p><p><strong>主要用途</strong>：基于名称快速定位文件和文件夹；可以光速找到你想在电脑中想找的文件；速度比 Windows 自带的文件搜索快无数倍</p><p><strong>优点</strong>：</p><ul><li>轻量安装文件、干净简洁的用户界面、快速文件索引、快速搜索、快速启动、最小资源使用、轻量数据库、实时更新</li><li>速度非常快</li><li>支持正则表达式</li></ul><h2 id="视频工具"><a href="#视频工具" class="headerlink" title="视频工具"></a>视频工具</h2><p>1、本地播放器—<strong>Potplayer</strong></p><p><strong>主要用途</strong>：本地播放视频，倍速调节、字幕查找等功能很实用</p><p><strong>优点</strong>:</p><ul><li>拥有强大的解码库，各种格式的视频都能够播放，而且对电脑的要求也比较低，播放起来十分流畅！</li></ul><h2 id="系统相关"><a href="#系统相关" class="headerlink" title="系统相关"></a>系统相关</h2><p>1、火绒</p><ul><li>不解释，无广告，最舒心的杀毒软件</li></ul><p>2、CCleaner</p><ul><li>可以大量释放磁盘空间</li></ul><p>后续再更新推荐的 Chrome 插件</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;For 玉米米.&lt;/p&gt;</summary>
    
    
    
    <category term="Tools" scheme="https://maydaytyh.github.io/blog/categories/Tools/"/>
    
    
    <category term="工具" scheme="https://maydaytyh.github.io/blog/tags/工具/"/>
    
  </entry>
  
  <entry>
    <title>Git 多行提交信息的简单方法</title>
    <link href="https://maydaytyh.github.io/blog/2022/05/29/Git-%E5%A4%9A%E8%A1%8C%E6%8F%90%E4%BA%A4%E4%BF%A1%E6%81%AF%E7%9A%84%E7%AE%80%E5%8D%95%E6%96%B9%E6%B3%95/"/>
    <id>https://maydaytyh.github.io/blog/2022/05/29/Git-%E5%A4%9A%E8%A1%8C%E6%8F%90%E4%BA%A4%E4%BF%A1%E6%81%AF%E7%9A%84%E7%AE%80%E5%8D%95%E6%96%B9%E6%B3%95/</id>
    <published>2022-05-29T09:26:31.000Z</published>
    <updated>2022-05-29T09:50:31.806Z</updated>
    
    <content type="html"><![CDATA[<a id="more"></a><p>虽然被安利了<code>Pycharm</code>中的集成化<code>Git</code>，但很多时候命令行更加直接。<br>在命令行中我们提交<code>git commit</code>时采用的命令为</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git commit -m <span class="string">"commit message"</span></span><br></pre></td></tr></table></figure><p>但是这样只能写一行说明语句，若想写多行说明语句，则可以多次使用<code>-m</code>选项<br>如</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git commit -m <span class="string">"commit title"</span> -m <span class="string">"commit description"</span></span><br></pre></td></tr></table></figure><p>则会导致如下结果</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">Author: Maydaytyh</span><br><span class="line">Date:   Sun June  17:46:21 2022</span><br><span class="line"></span><br><span class="line">    commit title</span><br><span class="line"></span><br><span class="line">    commit description</span><br><span class="line"></span><br><span class="line"> test.txt | 0</span><br><span class="line"> 1 file changed, 0 insertions(+), 0 deletions(-)</span><br></pre></td></tr></table></figure><p>此外，可以通过不封闭引号来达到相同的提交结构，也可以达到相同的目的，如下所示。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">git commit -m <span class="string">"commit title</span></span><br><span class="line"><span class="string">&gt;</span></span><br><span class="line"><span class="string">&gt; commit description"</span></span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;a id=&quot;more&quot;&gt;&lt;/a&gt;
&lt;p&gt;虽然被安利了&lt;code&gt;Pycharm&lt;/code&gt;中的集成化&lt;code&gt;Git&lt;/code&gt;，但很多时候命令行更加直接。&lt;br&gt;在命令行中我们提交&lt;code&gt;git commit&lt;/code&gt;时采用的命令为&lt;/p&gt;
&lt;figure cl</summary>
      
    
    
    
    
  </entry>
  
  <entry>
    <title>中文技术文档写作风格指南阅读报告</title>
    <link href="https://maydaytyh.github.io/blog/2022/05/16/%E4%B8%AD%E6%96%87%E6%8A%80%E6%9C%AF%E6%96%87%E6%A1%A3%E5%86%99%E4%BD%9C%E9%A3%8E%E6%A0%BC%E6%8C%87%E5%8D%97%E9%98%85%E8%AF%BB%E6%8A%A5%E5%91%8A/"/>
    <id>https://maydaytyh.github.io/blog/2022/05/16/%E4%B8%AD%E6%96%87%E6%8A%80%E6%9C%AF%E6%96%87%E6%A1%A3%E5%86%99%E4%BD%9C%E9%A3%8E%E6%A0%BC%E6%8C%87%E5%8D%97%E9%98%85%E8%AF%BB%E6%8A%A5%E5%91%8A/</id>
    <published>2022-05-16T14:20:36.000Z</published>
    <updated>2022-05-22T13:02:43.465Z</updated>
    
    <content type="html"><![CDATA[<a id="more"></a><p>记录一些好的文档书写习惯。</p><h1 id="语言风格"><a href="#语言风格" class="headerlink" title="语言风格"></a>语言风格</h1><ul><li>技术文档中不推荐使用只有特定人群才了解的语词，如行业黑话或网络流行语</li><li>正确使用的、地、得</li><li>不使用该、其等指代词，要说清楚</li><li>不使用较好、很好等修饰词，要详细说明衡量指标<h1 id="文档结构样式"><a href="#文档结构样式" class="headerlink" title="文档结构样式"></a>文档结构样式</h1><h2 id="标题"><a href="#标题" class="headerlink" title="标题"></a>标题</h2></li><li>一级扣一级，不跳用标题样式</li><li>若非必要，不使用四级及以上标题，可采用<code>list</code>代替</li><li>标题包括不限于<ul><li>名词词组 “…概述”</li><li>主题词+动词</li><li>动词+主题词</li><li>定语+主题词</li><li>介词+定语+主题词</li></ul></li><li>标题中不以标点符号结尾</li><li>标题与标题之间应有引导性语言</li></ul><h2 id="段落"><a href="#段落" class="headerlink" title="段落"></a>段落</h2><ul><li>一个段落长度在 50-200 字之间，尽量不超过 250 字</li><li>避免只有一个句子，合理断句，避免一逗到底</li><li>开头不缩进，顶格开始即可</li><li>技术描述类主题，考虑先图表后句子</li></ul><h1 id="文档内容描述"><a href="#文档内容描述" class="headerlink" title="文档内容描述"></a>文档内容描述</h1><h2 id="空白符号"><a href="#空白符号" class="headerlink" title="空白符号"></a>空白符号</h2><ul><li>禁止出现全角空格</li><li>中文字符之间禁止出现半角空格</li><li>英文字符和阿拉伯数字应背半角空格包围，但在句首或右侧为半角空格时，则省略</li><li>不同段落、不同排版格式之间建议使用一个空行分开<h2 id="Tab-和空格的使用"><a href="#Tab-和空格的使用" class="headerlink" title="Tab 和空格的使用"></a>Tab 和空格的使用</h2></li><li>禁止混用 Tab 和空格进行缩进<h2 id="列表"><a href="#列表" class="headerlink" title="列表"></a>列表</h2></li><li>当元素间顺序不重要时，使用无序列表；当元素间顺序重要时，使用有序列表</li><li>使用有序列表的几个场景<ul><li>必须按照顺序操作的步骤</li><li>排名分先后</li><li>需要在下文明确引用的规则或其他信息</li></ul></li><li>并列列表项中采用相似的句子结构</li><li>每一项长度尽量接近</li><li>不在每一项开头采用相同的词语</li><li>并列列表要保持标点一致<ul><li>若为句子，则以句号结尾</li><li>若为词组，则结尾不加标点</li><li>若既有句子也有词组，则统一采用句号结尾<h2 id="代码块"><a href="#代码块" class="headerlink" title="代码块"></a>代码块</h2></li></ul></li><li>前后需要加空行</li><li>若在列表缩进中，则在原先缩进基础上再缩进四格</li><li>尽量提供复制按钮，提高可用性</li><li>注释不应太长，一般以句号结尾<h2 id="链接"><a href="#链接" class="headerlink" title="链接"></a>链接</h2></li><li>链接格式<ul><li>若链接到同一文档其他标题，则应为<code>[文档标题](#具体标题)</code></li><li>若链接到相邻文档，则应为<code>[文档标题](../文档路径)</code></li><li>若链接到外部站点，则应为<code>[文档标题](文档链接)</code></li></ul></li><li>若链接到相邻文档，且链接的文档篇幅很长，则应定位到具体引用的部分<h2 id="缩略语"><a href="#缩略语" class="headerlink" title="缩略语"></a>缩略语</h2><h3 id="汉语缩略语"><a href="#汉语缩略语" class="headerlink" title="汉语缩略语"></a>汉语缩略语</h3></li><li>在第一次使用时说明情况<h3 id="英语缩略语"><a href="#英语缩略语" class="headerlink" title="英语缩略语"></a>英语缩略语</h3></li><li>首次使用解释完整含义</li><li>禁止使用无规则、不规范的缩略语<h2 id="单位符号"><a href="#单位符号" class="headerlink" title="单位符号"></a>单位符号</h2></li><li>为避免指代不明，建议用汉字名称代替单位符号</li><li>除了摄氏度、度、百分号、英尺英寸等符号外，其他情况下，数值与单位符号之间需要空一个半角空格<h2 id="标点符号"><a href="#标点符号" class="headerlink" title="标点符号"></a>标点符号</h2></li><li>方括号表示窗口名、菜单名，如“弹出[新建任务]窗口”</li><li>带尖括号表示按钮名、键名等</li><li>英文手册名称用中文双引号或斜体表示，不使用书名号</li><li>连接号<ul><li>一字线——表示起止</li><li>浪纹线~表示范围</li><li>复合名词用短横线-</li></ul></li><li>破折号————表示解释</li><li>中文语境下的标点符号必须使用全角形式</li><li>中英文括号的使用<ul><li>括号里全为英文时，使用半角括号，并在括号前后各空一个半角空格</li><li>括号里既有中文又有英文时，使用全角括号，括号前后不空格</li></ul></li></ul><h1 id="名称与命名"><a href="#名称与命名" class="headerlink" title="名称与命名"></a>名称与命名</h1><h2 id="文件命名"><a href="#文件命名" class="headerlink" title="文件命名"></a>文件命名</h2><ul><li>文件名由多个英文单词组成时，使用-隔开</li><li>不建议在文件名中使用下划线</li><li>禁止大小写混用</li></ul>]]></content>
    
    
      
      
    <summary type="html">&lt;a id=&quot;more&quot;&gt;&lt;/a&gt;
&lt;p&gt;记录一些好的文档书写习惯。&lt;/p&gt;
&lt;h1 id=&quot;语言风格&quot;&gt;&lt;a href=&quot;#语言风格&quot; class=&quot;headerlink&quot; title=&quot;语言风格&quot;&gt;&lt;/a&gt;语言风格&lt;/h1&gt;&lt;ul&gt;
&lt;li&gt;技术文档中不推荐使用只有特定人群才</summary>
      
    
    
    
    <category term="阅读" scheme="https://maydaytyh.github.io/blog/categories/阅读/"/>
    
    
    <category term="阅读" scheme="https://maydaytyh.github.io/blog/tags/阅读/"/>
    
  </entry>
  
  <entry>
    <title>The Missing Semester of Your CS Education</title>
    <link href="https://maydaytyh.github.io/blog/2022/03/21/The_Missing_Semester_of_MIT/"/>
    <id>https://maydaytyh.github.io/blog/2022/03/21/The_Missing_Semester_of_MIT/</id>
    <published>2022-03-21T13:45:06.000Z</published>
    <updated>2022-05-16T14:10:42.511Z</updated>
    
    <content type="html"><![CDATA[<a id="more"></a><p>用于记录<a href="https://missing.csail.mit.edu/" target="_blank" rel="noopener">The Missing Semester of Your CS Education</a></p><h1 id="Lecture1–The-Shell"><a href="#Lecture1–The-Shell" class="headerlink" title="Lecture1–The Shell"></a>Lecture1–The Shell</h1><h4 id="ls"><a href="#ls" class="headerlink" title="ls"></a>ls</h4><p><code>-l</code> indicates use a long listing format</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">missing:~$ ls -l /home</span><br><span class="line">drwxr-xr-x 1 missing  users  4096 Jun 15  2019 missing</span><br></pre></td></tr></table></figure><p>第一个参数表示文件类型</p><table><thead><tr><th align="center">-</th><th align="center">代表普通文件</th></tr></thead><tbody><tr><td align="center">d</td><td align="center">代表目录</td></tr><tr><td align="center">c</td><td align="center">代表字符型文件</td></tr><tr><td align="center">l</td><td align="center">代表链接文件</td></tr></tbody></table><p>后面三组共9个参数用来表示不同用户对该文件的操作权限</p><p>| 属主权限 | 属组权限 | 其他人权限 | 属主 | 属组</p><table><thead><tr><th>权限项</th><th>读</th><th>写</th><th>执行</th><th>读</th><th>写</th><th>执行</th><th>读</th><th>写</th><th>执行</th></tr></thead><tbody><tr><td>字符表示</td><td>r</td><td>w</td><td>x</td><td>r</td><td>w</td><td>x</td><td>r</td><td>w</td><td>x</td></tr><tr><td>数字表示</td><td>4</td><td>2</td><td>1</td><td>4</td><td>2</td><td>1</td><td>4</td><td>2</td><td>1</td></tr><tr><td>权限分配</td><td>文件所有者(属主)</td><td>文件所有者(属主)</td><td>文件所有者(属主)</td><td>文件所属组(属组)</td><td>文件所属组(属组)</td><td>文件所属组(属组)</td><td>其他用户</td><td>其他用户</td><td>其他用户</td></tr></tbody></table><h4 id="find"><a href="#find" class="headerlink" title="find"></a>find</h4><h4 id="Shebang"><a href="#Shebang" class="headerlink" title="Shebang"></a>Shebang</h4><p>在<a href="https://zh.wikipedia.org/wiki/计算" target="_blank" rel="noopener">计算</a>领域中，<strong>Shebang</strong>（也称为<strong>Hashbang</strong>）是一个由<a href="https://zh.wikipedia.org/wiki/井号" target="_blank" rel="noopener">井号</a>和<a href="https://zh.wikipedia.org/wiki/叹号" target="_blank" rel="noopener">叹号</a>构成的字符序列<em><code>#!</code></em>，其出现在文本文件的第一行的前两个字符。 在文件中存在Shebang的情况下，<a href="https://zh.wikipedia.org/wiki/类Unix操作系统" target="_blank" rel="noopener">类Unix操作系统</a>的<a href="https://zh.wikipedia.org/w/index.php?title=程序载入器&action=edit&redlink=1" target="_blank" rel="noopener">程序加载器</a>会分析Shebang后的内容，将这些内容作为解释器指令，并调用该指令，并将载有Shebang的文件路径作为该解释器的参数</p><p>例如，以指令<code>#!/bin/sh</code>开头的文件在执行时会实际调用<em>/bin/sh</em>程序（通常是<a href="https://zh.wikipedia.org/wiki/Bourne_shell" target="_blank" rel="noopener">Bourne shell</a>或兼容的<a href="https://zh.wikipedia.org/wiki/Unix_shell" target="_blank" rel="noopener">shell</a>，例如<a href="https://zh.wikipedia.org/wiki/Bash" target="_blank" rel="noopener">bash</a>、<a href="https://zh.wikipedia.org/wiki/Debian_Almquist_shell" target="_blank" rel="noopener">dash</a>等）来执行。这行内容也是<a href="https://zh.wikipedia.org/wiki/Shell脚本" target="_blank" rel="noopener">shell脚本</a>的标准起始行</p><p>这也是为什么<code>bash</code>文件前面会添加一个<code>#!/bin/sh</code></p>]]></content>
    
    
      
      
    <summary type="html">&lt;a id=&quot;more&quot;&gt;&lt;/a&gt;

&lt;p&gt;用于记录&lt;a href=&quot;https://missing.csail.mit.edu/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;The Missing Semester of Your CS Education&lt;</summary>
      
    
    
    
    
  </entry>
  
  <entry>
    <title>tmux笔记</title>
    <link href="https://maydaytyh.github.io/blog/2022/03/20/tmux%E7%AC%94%E8%AE%B0/"/>
    <id>https://maydaytyh.github.io/blog/2022/03/20/tmux%E7%AC%94%E8%AE%B0/</id>
    <published>2022-03-20T10:30:03.000Z</published>
    <updated>2022-03-21T13:31:57.514Z</updated>
    
    <content type="html"><![CDATA[<p>记录一下tmux的使用。</p><a id="more"></a><h1 id="基本用法"><a href="#基本用法" class="headerlink" title="基本用法"></a>基本用法</h1><h2 id="前缀键"><a href="#前缀键" class="headerlink" title="前缀键"></a>前缀键</h2><p>Tmux 窗口有大量的快捷键。所有快捷键都要通过前缀键唤起。默认的前缀键是<code>Ctrl+b</code>，即先按下<code>Ctrl+b</code>，快捷键才会生效。</p><h2 id="启动会话"><a href="#启动会话" class="headerlink" title="启动会话"></a>启动会话</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ tmux</span><br></pre></td></tr></table></figure><p>上面指令直接创建会话，会以0、1、2等来对会话进行编号，不太容易区分，若想对会话起名，可采用如下指令</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ tmux new -s &lt;session-name&gt;</span><br></pre></td></tr></table></figure><h2 id="分离会话"><a href="#分离会话" class="headerlink" title="分离会话"></a>分离会话</h2><p>可使用<code>Ctrl+b d</code>或者输入<code>tmux detach</code>指令来分离当前会话，并不关闭</p><h2 id="接入会话"><a href="#接入会话" class="headerlink" title="接入会话"></a>接入会话</h2><p><code>tmux attach</code>指令用于重新接入某个已存在的会话</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 使用编号</span></span><br><span class="line">$ tmux attach -t 0</span><br><span class="line"><span class="comment"># 使用名称</span></span><br><span class="line">$ tmux attach -t &lt;session-name&gt;</span><br></pre></td></tr></table></figure><h2 id="杀死会话"><a href="#杀死会话" class="headerlink" title="杀死会话"></a>杀死会话</h2><p><code>tmux kill-session</code>命令用于杀死某个会话</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ tmux <span class="built_in">kill</span>-session -t 0/&lt;session-name&gt;</span><br></pre></td></tr></table></figure><h2 id="切换会话"><a href="#切换会话" class="headerlink" title="切换会话"></a>切换会话</h2><p><code>tmux switch</code>命令用于切换会话</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ tmux switch -t 0/&lt;session-name&gt;</span><br></pre></td></tr></table></figure><h2 id="重命名会话"><a href="#重命名会话" class="headerlink" title="重命名会话"></a>重命名会话</h2><p><code>tmux rename-session</code>命令用于重命名会话</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ tmux rename-session -t 0 &lt;new-name&gt;</span><br></pre></td></tr></table></figure><p>这条指令会将0号会话重命名为new-name</p><h2 id="快捷键"><a href="#快捷键" class="headerlink" title="快捷键"></a>快捷键</h2><p><code>Ctrl+b d</code>用于分离当前会话</p><p><code>Ctrl+b s</code>：列出所有会话</p><p><code>Ctrl+b $</code>：重命名当前会话</p><h1 id="窗格操作"><a href="#窗格操作" class="headerlink" title="窗格操作"></a>窗格操作</h1><h2 id="划分窗格"><a href="#划分窗格" class="headerlink" title="划分窗格"></a>划分窗格</h2><p><code>tmux split-window</code>命令用于划分窗格</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 划分为上下两个窗格</span></span><br><span class="line">$ tmux split-window</span><br><span class="line"><span class="comment"># 划分为左右两个窗格</span></span><br><span class="line">$ tmux split-window -h</span><br></pre></td></tr></table></figure><h2 id="移动光标"><a href="#移动光标" class="headerlink" title="移动光标"></a>移动光标</h2><p><code>tmux select-pane</code>命令用来移动光标的位置</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 光标切换到上方窗格</span></span><br><span class="line">$ tmux select-pane -U</span><br><span class="line"><span class="comment"># 光标切换到下方窗格</span></span><br><span class="line">$ tmux select-pane -D</span><br><span class="line"><span class="comment"># 光标切换到左边窗格</span></span><br><span class="line">$ tmux select-pane -L</span><br><span class="line"><span class="comment"># 光标切换到右边窗格</span></span><br><span class="line">$ tmux select-pane -R</span><br></pre></td></tr></table></figure><h2 id="切换窗口"><a href="#切换窗口" class="headerlink" title="切换窗口"></a>切换窗口</h2><p><code>tmux select-window</code>命令用来切换窗口</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 切换到指定编号的窗口</span></span><br><span class="line">$ tmux select-window -t &lt;window-number&gt;</span><br><span class="line"><span class="comment"># 切换到指定名称的窗口</span></span><br><span class="line">$ tmux select-window -t &lt;window-name&gt;</span><br></pre></td></tr></table></figure><h2 id="重命名窗格"><a href="#重命名窗格" class="headerlink" title="重命名窗格"></a>重命名窗格</h2><p><code>tmux rename-window</code>命令用于为当前窗口起名</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ tmux rename-window &lt;new-name&gt;</span><br></pre></td></tr></table></figure><h2 id="窗口快捷键"><a href="#窗口快捷键" class="headerlink" title="窗口快捷键"></a>窗口快捷键</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">Ctrl+b c：创建一个新窗口，状态栏会显示多个窗口的信息</span><br><span class="line">Ctrl+b p：切换到上一个窗口（按照状态栏上的顺序）</span><br><span class="line">Ctrl+b n：切换到下一个窗口</span><br><span class="line">Ctrl+b &lt;number&gt;：切换到指定编号的窗口，其中的&lt;number&gt;是状态栏上的窗口编号</span><br><span class="line">Ctrl+b w：从列表中选择窗口</span><br><span class="line">Ctrl+b ,：窗口重命名</span><br></pre></td></tr></table></figure><h1 id="快捷键-1"><a href="#快捷键-1" class="headerlink" title="快捷键"></a>快捷键</h1><h2 id="系统指令"><a href="#系统指令" class="headerlink" title="系统指令"></a>系统指令</h2><table><thead><tr><th align="center">前缀</th><th align="center">指令</th><th align="center">描述</th></tr></thead><tbody><tr><td align="center"><code>Ctrl+b</code></td><td align="center"><code>?</code></td><td align="center">显示快捷键帮助文档</td></tr><tr><td align="center"><code>Ctrl+b</code></td><td align="center"><code>d</code></td><td align="center">断开当前会话</td></tr><tr><td align="center"><code>Ctrl+b</code></td><td align="center"><code>D</code></td><td align="center">选择要断开的会话</td></tr><tr><td align="center"><code>Ctrl+b</code></td><td align="center"><code>Ctrl+z</code></td><td align="center">挂起当前会话</td></tr><tr><td align="center"><code>Ctrl+b</code></td><td align="center"><code>r</code></td><td align="center">强制重载当前会话</td></tr><tr><td align="center"><code>Ctrl+b</code></td><td align="center"><code>s</code></td><td align="center">显示会话列表用于选择并切换</td></tr><tr><td align="center"><code>Ctrl+b</code></td><td align="center"><code>:</code></td><td align="center">进入命令行模式，此时可直接输入<code>ls</code>等命令</td></tr><tr><td align="center"><code>Ctrl+b</code></td><td align="center"><code>[</code></td><td align="center">进入复制模式，按<code>q</code>退出</td></tr><tr><td align="center"><code>Ctrl+b</code></td><td align="center"><code>]</code></td><td align="center">粘贴复制模式中复制的文本</td></tr><tr><td align="center"><code>Ctrl+b</code></td><td align="center"><code>~</code></td><td align="center">列出提示信息缓存</td></tr></tbody></table><h2 id="窗口指令"><a href="#窗口指令" class="headerlink" title="窗口指令"></a>窗口指令</h2><table><thead><tr><th align="center">前缀</th><th align="center">指令</th><th align="center">描述</th></tr></thead><tbody><tr><td align="center"><code>Ctrl+b</code></td><td align="center"><code>c</code></td><td align="center">新建窗口</td></tr><tr><td align="center"><code>Ctrl+b</code></td><td align="center"><code>&amp;</code></td><td align="center">关闭当前窗口（关闭前需输入<code>y</code> or <code>n</code>确认）</td></tr><tr><td align="center"><code>Ctrl+b</code></td><td align="center"><code>0~9</code></td><td align="center">切换到指定窗口</td></tr><tr><td align="center"><code>Ctrl+b</code></td><td align="center"><code>p</code></td><td align="center">切换到上一窗口</td></tr><tr><td align="center"><code>Ctrl+b</code></td><td align="center"><code>n</code></td><td align="center">切换到下一窗口</td></tr><tr><td align="center"><code>Ctrl+b</code></td><td align="center"><code>w</code></td><td align="center">打开窗口列表，用于且切换窗口</td></tr><tr><td align="center"><code>Ctrl+b</code></td><td align="center"><code>,</code></td><td align="center">重命名当前窗口</td></tr><tr><td align="center"><code>Ctrl+b</code></td><td align="center"><code>.</code></td><td align="center">修改当前窗口编号（适用于窗口重新排序）</td></tr><tr><td align="center"><code>Ctrl+b</code></td><td align="center"><code>f</code></td><td align="center">快速定位到窗口（输入关键字匹配窗口名称）</td></tr></tbody></table><h2 id="面板指令"><a href="#面板指令" class="headerlink" title="面板指令"></a>面板指令</h2><table><thead><tr><th align="center">前缀</th><th align="center">指令</th><th align="center">描述</th></tr></thead><tbody><tr><td align="center"><code>Ctrl+b</code></td><td align="center"><code>&quot;</code></td><td align="center">当前面板上下一分为二，下侧新建面板</td></tr><tr><td align="center"><code>Ctrl+b</code></td><td align="center"><code>%</code></td><td align="center">当前面板左右一分为二，右侧新建面板</td></tr><tr><td align="center"><code>Ctrl+b</code></td><td align="center"><code>x</code></td><td align="center">关闭当前面板（关闭前需输入<code>y</code> or <code>n</code>确认）</td></tr><tr><td align="center"><code>Ctrl+b</code></td><td align="center"><code>z</code></td><td align="center">最大化当前面板，再重复一次按键后恢复正常（v1.8版本新增）</td></tr><tr><td align="center"><code>Ctrl+b</code></td><td align="center"><code>!</code></td><td align="center">将当前面板移动到新的窗口打开（原窗口中存在两个及以上面板有效）</td></tr><tr><td align="center"><code>Ctrl+b</code></td><td align="center"><code>;</code></td><td align="center">切换到最后一次使用的面板</td></tr><tr><td align="center"><code>Ctrl+b</code></td><td align="center"><code>q</code></td><td align="center">显示面板编号，在编号消失前输入对应的数字可切换到相应的面板</td></tr><tr><td align="center"><code>Ctrl+b</code></td><td align="center"><code>{</code></td><td align="center">向前置换当前面板</td></tr><tr><td align="center"><code>Ctrl+b</code></td><td align="center"><code>}</code></td><td align="center">向后置换当前面板</td></tr><tr><td align="center"><code>Ctrl+b</code></td><td align="center"><code>Ctrl+o</code></td><td align="center">顺时针旋转当前窗口中的所有面板</td></tr><tr><td align="center"><code>Ctrl+b</code></td><td align="center"><code>方向键</code></td><td align="center">移动光标切换面板</td></tr><tr><td align="center"><code>Ctrl+b</code></td><td align="center"><code>o</code></td><td align="center">选择下一面板</td></tr><tr><td align="center"><code>Ctrl+b</code></td><td align="center"><code>空格键</code></td><td align="center">在自带的面板布局中循环切换</td></tr><tr><td align="center"><code>Ctrl+b</code></td><td align="center"><code>Alt+方向键</code></td><td align="center">以5个单元格为单位调整当前面板边缘</td></tr><tr><td align="center"><code>Ctrl+b</code></td><td align="center"><code>Ctrl+方向键</code></td><td align="center">以1个单元格为单位调整当前面板边缘（Mac下被系统快捷键覆盖）</td></tr><tr><td align="center"><code>Ctrl+b</code></td><td align="center"><code>t</code></td><td align="center">显示时钟</td></tr></tbody></table><h1 id="参考文献"><a href="#参考文献" class="headerlink" title="参考文献"></a>参考文献</h1><p>1、<a href="http://louiszhai.github.io/2017/09/30/tmux/" target="_blank" rel="noopener">Tmux使用手册</a></p><p>2、<a href="https://www.ruanyifeng.com/blog/2019/10/tmux.html" target="_blank" rel="noopener">Tmux 使用教程- 阮一峰的网络日志</a></p>]]></content>
    
    
    <summary type="html">&lt;p&gt;记录一下tmux的使用。&lt;/p&gt;</summary>
    
    
    
    <category term="实用工具" scheme="https://maydaytyh.github.io/blog/categories/实用工具/"/>
    
    
    <category term="工具" scheme="https://maydaytyh.github.io/blog/tags/工具/"/>
    
  </entry>
  
  <entry>
    <title>李宏毅机器学习笔记-Week1</title>
    <link href="https://maydaytyh.github.io/blog/2021/11/10/%E6%9D%8E%E5%AE%8F%E6%AF%85%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
    <id>https://maydaytyh.github.io/blog/2021/11/10/%E6%9D%8E%E5%AE%8F%E6%AF%85%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/</id>
    <published>2021-11-10T12:18:27.000Z</published>
    <updated>2021-11-11T02:41:27.871Z</updated>
    
    <content type="html"><![CDATA[<p>搭建简单的DNN来解决一个回归问题，感觉学到了很多。</p><a id="more"></a><h2 id="LHY-ML-HW1-Regression"><a href="#LHY-ML-HW1-Regression" class="headerlink" title="LHY_ML_HW1_Regression"></a>LHY_ML_HW1_Regression</h2><p>重新熟悉了一下Colab的使用方式，还是挺好用的。</p><h3 id="Baseline"><a href="#Baseline" class="headerlink" title="Baseline"></a>Baseline</h3><p>直接运行给出的Sample Code即可通过Baseline，不得不说这倒是给了同学们选择，想躺平的起码能学会最基本的操作，也能获得一些分数，但是如果想获得更多的分数，就得自己进行进一步优化咯。</p><h3 id="Medium"><a href="#Medium" class="headerlink" title="Medium"></a>Medium</h3><p>Sample Code中也给出了提示，可以通过减少特征数目来增强模型的学习能力，这里选择前40列，第57列以及第75列，作为训练数据，这样便能获取更好的效果</p><h3 id="Strong"><a href="#Strong" class="headerlink" title="Strong"></a>Strong</h3><p>上一步中我们特征削减这件事情做的有些过分，因此可以从增加特征数目入手，参考别人的做法，进行以下几个方面的改进：</p><h4 id="特征选取"><a href="#特征选取" class="headerlink" title="特征选取"></a>特征选取</h4><p>使用sklearn的f_regression方法来获取影响最大的特征，示例代码如下</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> pandas <span class="keyword">as</span> pd</span><br><span class="line"><span class="keyword">import</span> numpy <span class="keyword">as</span> np</span><br><span class="line"></span><br><span class="line">data = pd.read_csv(<span class="string">'/kaggle/input/ml2021spring-hw1/covid.train.csv'</span>)</span><br><span class="line">x = data[data.columns[<span class="number">1</span>:<span class="number">94</span>]] <span class="comment">#这里是利用columns函数获取1:94列或94列的索引</span></span><br><span class="line">y = data[data.columns[<span class="number">94</span>]]</span><br><span class="line"></span><br><span class="line"><span class="keyword">from</span> sklearn.feature_selection <span class="keyword">import</span> SelectKBest</span><br><span class="line"><span class="keyword">from</span> sklearn.feature_selection <span class="keyword">import</span> f_regression</span><br><span class="line"></span><br><span class="line"><span class="keyword">from</span> sklearn <span class="keyword">import</span> preprocessing</span><br><span class="line">x = (x - x.min()) / (x.max() - x.min())</span><br><span class="line"></span><br><span class="line">bestfeatures = SelectKBest(score_func=f_regression, k=<span class="number">5</span>)</span><br><span class="line">fit = bestfeatures.fit(x,y)</span><br><span class="line">dfscores = pd.DataFrame(fit.scores_)</span><br><span class="line">dfcolumns = pd.DataFrame(x.columns)</span><br><span class="line"><span class="comment">#concat two dataframes for better visualization </span></span><br><span class="line">featureScores = pd.concat([dfcolumns,dfscores],axis=<span class="number">1</span>)</span><br><span class="line">featureScores.columns = [<span class="string">'Specs'</span>,<span class="string">'Score'</span>]  <span class="comment">#naming the dataframe columns</span></span><br><span class="line">print(featureScores.nlargest(<span class="number">15</span>,<span class="string">'Score'</span>))  <span class="comment">#print 15 best features</span></span><br></pre></td></tr></table></figure><p>下面附上这个类的官方文档。</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">SelectKBest</span><span class="params">(_BaseFilter)</span>:</span></span><br><span class="line">    <span class="string">"""Select features according to the k highest scores.</span></span><br><span class="line"><span class="string">    Read more in the :ref:`User Guide &lt;univariate_feature_selection&gt;`.</span></span><br><span class="line"><span class="string">    Parameters</span></span><br><span class="line"><span class="string">    ----------</span></span><br><span class="line"><span class="string">    score_func : callable</span></span><br><span class="line"><span class="string">        Function taking two arrays X and y, and returning a pair of arrays</span></span><br><span class="line"><span class="string">        (scores, pvalues) or a single array with scores.</span></span><br><span class="line"><span class="string">        Default is f_classif (see below "See also"). The default function only works with classification tasks.</span></span><br><span class="line"><span class="string">    k : int or "all", optional, default=10</span></span><br><span class="line"><span class="string">        Number of top features to select.</span></span><br><span class="line"><span class="string">        The "all" option bypasses selection, for use in a parameter search.</span></span><br><span class="line"><span class="string">    Attributes</span></span><br><span class="line"><span class="string">    ----------</span></span><br><span class="line"><span class="string">    scores_ : array-like, shape=(n_features,)</span></span><br><span class="line"><span class="string">        Scores of features.</span></span><br><span class="line"><span class="string">    pvalues_ : array-like, shape=(n_features,)</span></span><br><span class="line"><span class="string">        p-values of feature scores, None if `score_func` returned only scores.</span></span><br><span class="line"><span class="string">    Notes</span></span><br><span class="line"><span class="string">    -----</span></span><br><span class="line"><span class="string">    Ties between features with equal scores will be broken in an unspecified</span></span><br><span class="line"><span class="string">    way.</span></span><br><span class="line"><span class="string">    See also</span></span><br><span class="line"><span class="string">    --------</span></span><br><span class="line"><span class="string">    f_classif: ANOVA F-value between label/feature for classification tasks.</span></span><br><span class="line"><span class="string">    mutual_info_classif: Mutual information for a discrete target.</span></span><br><span class="line"><span class="string">    chi2: Chi-squared stats of non-negative features for classification tasks.</span></span><br><span class="line"><span class="string">    f_regression: F-value between label/feature for regression tasks.</span></span><br><span class="line"><span class="string">    mutual_info_regression: Mutual information for a continuous target.</span></span><br><span class="line"><span class="string">    SelectPercentile: Select features based on percentile of the highest scores.</span></span><br><span class="line"><span class="string">    SelectFpr: Select features based on a false positive rate test.</span></span><br><span class="line"><span class="string">    SelectFdr: Select features based on an estimated false discovery rate.</span></span><br><span class="line"><span class="string">    SelectFwe: Select features based on family-wise error rate.</span></span><br><span class="line"><span class="string">    GenericUnivariateSelect: Univariate feature selector with configurable mode.</span></span><br><span class="line"><span class="string">    """</span></span><br></pre></td></tr></table></figure><h3 id="网络结构改进"><a href="#网络结构改进" class="headerlink" title="网络结构改进"></a>网络结构改进</h3><ul><li>使用BN，在防止过拟合的同时，加速模型训练</li><li>使用Dropout，减小过拟合</li><li>更换激活函数为LeakyReLU</li><li>损失函数添加L2正则</li><li>更换优化器<h3 id="防止过拟合的几种办法总结"><a href="#防止过拟合的几种办法总结" class="headerlink" title="防止过拟合的几种办法总结"></a>防止过拟合的几种办法总结</h3></li><li>L1正则<ul><li>增加了参数矩阵的稀疏表达(参数矩阵中一部分参数为0),可以进行特征选择,通过保留重要的特征,舍弃不重要特征,达到防止过拟合效果</li></ul></li><li>L2正则<ul><li>衰减了参数的值，从而有效地完成过拟合</li></ul></li><li>Batch Normalization<ul><li>在训练中，BN的使用使得一个mini-batch中的所有样本都被关联在了一起，因此网络不会从某一个训练样本中生成确定的结果。就是一个batch数据中每张图片对应的输出都受到一个batch所有数据影响,这样相当于一个间接的数据增强,达到防止过拟合作用.</li><li>此外，BN还具有加速模型训练的速度，BN在训练时候,会把每一层的Feature值约束到均值为0,方差为1,这样每一层的数据分布都会一样,在二维等值线上的表现就是圆形,能加快梯度下降法的收敛速度,而且,数据被约束到均值为0 ,方差为1,相当于把数据从饱和区约束到了非饱和区,这样求得的梯度值会更大,加速收敛,也避免了梯度消失和梯度爆炸问题</li></ul></li><li>Dropout<ul><li>随机丢掉网络的一部分,相当于每次都有一个新的残缺网络,每个残缺网络都学到不同的局部特征,多个残缺网络就能充分学到数据的局部特征,这样,测试数据不论怎么变,只要有局部特征,网络就能起作用(我都认识你),这样比总要比仅在单个健全网络上进行特征学习，其泛化能力来得更加健壮<h3 id="激活函数总结"><a href="#激活函数总结" class="headerlink" title="激活函数总结"></a>激活函数总结</h3></li></ul></li></ul><p>TODO</p><h4 id="Sigmoid函数"><a href="#Sigmoid函数" class="headerlink" title="Sigmoid函数"></a>Sigmoid函数</h4><h4 id="tanh函数"><a href="#tanh函数" class="headerlink" title="tanh函数"></a>tanh函数</h4><h4 id="ReLU函数"><a href="#ReLU函数" class="headerlink" title="ReLU函数"></a>ReLU函数</h4><h4 id="Leaky-ReLU函数"><a href="#Leaky-ReLU函数" class="headerlink" title="Leaky ReLU函数"></a>Leaky ReLU函数</h4><h4 id="ELU-Exponential-Linear-Units-函数"><a href="#ELU-Exponential-Linear-Units-函数" class="headerlink" title="ELU (Exponential Linear Units) 函数"></a>ELU (Exponential Linear Units) 函数</h4><h4 id="MaxOut函数"><a href="#MaxOut函数" class="headerlink" title="MaxOut函数"></a>MaxOut函数</h4><h4 id="如何选用"><a href="#如何选用" class="headerlink" title="如何选用"></a>如何选用</h4><h3 id="L1、L2详解"><a href="#L1、L2详解" class="headerlink" title="L1、L2详解"></a>L1、L2详解</h3><p>常见的最优化问题只是考虑了对于数据的拟合，却忽略了模型本身的复杂度，因此我们引入了正则项，用于描述模型本身的复杂度，最优化目标便成为损失与正则项的加和。</p><p><img src="https://i.loli.net/2021/11/11/OSuljcI52afEqDB.png" alt="image.png"></p><p>上图为西瓜书中的插图，用于解释$L1$、$L2$正则化各自的特点。</p><p>首先说明，$L1$正则化适用于使得参数稀疏化，而$L2$正则化适用于使得参数稠密的接近于0️⃣。</p><p>从公式角度分析的已经太多，这里从等值线角度进行分析。</p><p>上图中$w_1$以及$w_2$为模型的两个参数。图中存在三组等值线，位于同一条等值线的参数，具有同样的误差、$L2$、$L1$范数。而我们优化的目标在于找到范数与误差的加和最小的参数。</p><p>对于$L1$范数，其等值线为菱形，因此与误差等值线的交点更容易出现在坐标轴上，此时有参数的值为0，从而实现了参数的稀疏化。</p><p>对于$L2$范数，其等值线为圆形，与误差等值线的交点的位置无规律性，无法实现稀疏性；但由于交点在圆上，根据圆的优良性质，参数的值会比较接近，也就实现了参数在0️⃣附近稠密且平滑。</p><p>下面为Pytorch的实现。</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">for</span> param <span class="keyword">in</span> model.parameters():</span><br><span class="line">            <span class="comment"># regularization_loss += torch.sum(abs(param))</span></span><br><span class="line">        regularization_loss += torch.sum(param ** <span class="number">2</span>)</span><br></pre></td></tr></table></figure><h3 id="优化器总结"><a href="#优化器总结" class="headerlink" title="优化器总结"></a>优化器总结</h3><p><a href="https://zhuanlan.zhihu.com/p/58236906" target="_blank" rel="noopener">https://zhuanlan.zhihu.com/p/58236906</a></p><h3 id="反向传播算法"><a href="#反向传播算法" class="headerlink" title="反向传播算法"></a>反向传播算法</h3><p>todo</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;搭建简单的DNN来解决一个回归问题，感觉学到了很多。&lt;/p&gt;</summary>
    
    
    
    <category term="机器学习" scheme="https://maydaytyh.github.io/blog/categories/机器学习/"/>
    
    
    <category term="学习、李宏毅" scheme="https://maydaytyh.github.io/blog/tags/学习、李宏毅/"/>
    
  </entry>
  
  <entry>
    <title>nohup后台运行程序</title>
    <link href="https://maydaytyh.github.io/blog/2021/04/29/nohup%E5%90%8E%E5%8F%B0%E8%BF%90%E8%A1%8C%E7%A8%8B%E5%BA%8F/"/>
    <id>https://maydaytyh.github.io/blog/2021/04/29/nohup%E5%90%8E%E5%8F%B0%E8%BF%90%E8%A1%8C%E7%A8%8B%E5%BA%8F/</id>
    <published>2021-04-29T13:39:51.000Z</published>
    <updated>2021-04-29T13:53:05.292Z</updated>
    
    <content type="html"><![CDATA[<p>再也不用担心断网服务器连接失败从而功夫全废啦！</p><a id="more"></a><p>在运行一个数据预处理的代码时，估算了一下时间，发现没10个小时跑不完，而我又不可能一直开着电脑（走动+晚上断电)，于是想起之前看到的后台运行程序，运行开始后，不用担心本地机关机或断网，可以说很舒服了。</p><h2 id="screen指令"><a href="#screen指令" class="headerlink" title="screen指令"></a>screen指令</h2><p>一开始看到的是screen指令，但是服务器的机子并没有安装……但还是记录一下用法吧</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">screen -S name 创建一个新的screen</span><br><span class="line"></span><br><span class="line">输入你想要的运行的内容</span><br><span class="line"></span><br><span class="line">ctrl<span class="_">-a</span> d 先按ctrl+a，再按d，dettach，此时你可以关闭连接了</span><br><span class="line"></span><br><span class="line">screen -ls 查看当前有哪些会话，并显示id</span><br><span class="line"></span><br><span class="line">screen -r id 恢复会话</span><br><span class="line"></span><br><span class="line">screen -S id -X quit 删除会话</span><br></pre></td></tr></table></figure><h2 id="nohup指令"><a href="#nohup指令" class="headerlink" title="nohup指令"></a>nohup指令</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">nohup ./start-dishi.sh &gt;output 2&gt;&amp;1 &amp;</span><br><span class="line"></span><br><span class="line"><span class="built_in">jobs</span> 查看后台运行的任务</span><br></pre></td></tr></table></figure><p>操作系统中有三个常用的流：<br>　　0：标准输入流 stdin<br>　　1：标准输出流 stdout<br>　　2：标准错误流 stderr<br>一般当我们用 &gt; console.txt，实际是 1&gt;console.txt的省略用法；&lt; console.txt ，实际是 0 &lt; console.txt的省略用法。</p><p>2&gt;&amp;1意思是把标准错误（2）重定向到标准输出中（1），而标准输出又导入文件output里面，所以结果是标准错误和标准输出都导入文件output里面了。</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;再也不用担心断网服务器连接失败从而功夫全废啦！&lt;/p&gt;</summary>
    
    
    
    <category term="linux" scheme="https://maydaytyh.github.io/blog/categories/linux/"/>
    
    
    <category term="服务器" scheme="https://maydaytyh.github.io/blog/tags/服务器/"/>
    
  </entry>
  
  <entry>
    <title>毕设代码阅读笔记</title>
    <link href="https://maydaytyh.github.io/blog/2021/04/14/%E6%AF%95%E8%AE%BE%E4%BB%A3%E7%A0%81%E9%98%85%E8%AF%BB%E7%AC%94%E8%AE%B0/"/>
    <id>https://maydaytyh.github.io/blog/2021/04/14/%E6%AF%95%E8%AE%BE%E4%BB%A3%E7%A0%81%E9%98%85%E8%AF%BB%E7%AC%94%E8%AE%B0/</id>
    <published>2021-04-14T08:08:33.000Z</published>
    <updated>2023-01-01T12:36:53.427Z</updated>
    
    <content type="html"><![CDATA[<p>常读常新。</p><a id="more"></a><h1 id="一、所调用的库"><a href="#一、所调用的库" class="headerlink" title="一、所调用的库"></a>一、所调用的库</h1><h3 id="argparse库"><a href="#argparse库" class="headerlink" title="argparse库"></a>argparse库</h3><p>argparse 是 Python 内置的一个用于命令项选项与参数解析的模块，通过在程序中定义好我们需要的参数，argparse 将会从 sys.argv 中解析出这些参数，并自动生成帮助和使用信息。当然，Python 也有第三方的库可用于命令行解析，而且功能也更加强大，比如 docopt，Click。</p><h3 id="logging库"><a href="#logging库" class="headerlink" title="logging库"></a>logging库</h3><p>这个模块为应用与库实现了灵活的事件日志系统的函数与类。</p><p>使用标准库提提供的 logging API 最主要的好处是，所有的 Python 模块都可能参与日志输出，包括你自己的日志消息和第三方模块的日志消息。</p><h3 id="time和datetime库"><a href="#time和datetime库" class="headerlink" title="time和datetime库"></a>time和datetime库</h3><p>在python文档中，time是归类在常规操作系统服务中，它提供的功能更加接近于操作系统层面。其所能表述的日期范围被限定在1970-2038之间，如果需要表述范围之外的日期，可能需要考虑使用datetime模块更好。</p><p>datetime比time高级了不少，可以理解为datetime基于time进行了封装，提供了更多实用的函数</p><h3 id="pickle库"><a href="#pickle库" class="headerlink" title="pickle库"></a>pickle库</h3><p>pickle模块实现了基本的数据序列化和反序列化。通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去，永久存储；通过pickle模块的反序列化操作，我们能够从文件中创建上一次程序保存的对象</p><p>pickle模块是以二进制的形式序列化后保存到文件中（保存文件的后缀为”.pkl”），不能直接打开进行预览。而python的另一个序列化标准模块json，则是human-readable的，可以直接打开查看（例如在notepad++中查看）。</p><p>pickle模块有两类主要的接口，即序列化和反序列化。</p><h3 id="numpy库"><a href="#numpy库" class="headerlink" title="numpy库"></a>numpy库</h3><p>机器学习算法中大部分都是调用Numpy库来完成基础数值计算的。</p><h4 id="数组的创建与使用"><a href="#数组的创建与使用" class="headerlink" title="数组的创建与使用"></a>数组的创建与使用</h4><h5 id="数组的创建"><a href="#数组的创建" class="headerlink" title="数组的创建"></a>数组的创建</h5><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&gt;&gt;&gt; </span>x=np.array([[<span class="number">1.0</span>,<span class="number">0.0</span>,<span class="number">0.0</span>],[<span class="number">0.</span>,<span class="number">1.</span>,<span class="number">2.</span>]]) <span class="comment">#定义了一个二维数组，大小为（2，3）</span></span><br><span class="line"><span class="meta">&gt;&gt;&gt; </span>x</span><br><span class="line">array([[<span class="number">1.</span>, <span class="number">0.</span>, <span class="number">0.</span>],</span><br><span class="line">       [<span class="number">0.</span>, <span class="number">1.</span>, <span class="number">2.</span>]])</span><br><span class="line"><span class="meta">&gt;&gt;&gt; </span>x.ndim   <span class="comment">#数组维度数</span></span><br><span class="line"><span class="number">2</span></span><br><span class="line"><span class="meta">&gt;&gt;&gt; </span>x.shape    <span class="comment">#数组的维数，返回的格式(n,m),其中n为行数，m为列数</span></span><br><span class="line">(<span class="number">2</span>, <span class="number">3</span>)</span><br><span class="line"><span class="meta">&gt;&gt;&gt; </span>x.size    <span class="comment">#数组元素的总数</span></span><br><span class="line"><span class="number">6</span></span><br><span class="line"><span class="meta">&gt;&gt;&gt; </span>x.dtype   <span class="comment">#数组元素类型</span></span><br><span class="line">dtype(<span class="string">'float64'</span>)  <span class="comment">#64位浮点型</span></span><br><span class="line"><span class="meta">&gt;&gt;&gt; </span>x.itemsize  <span class="comment">#每个元素占有的字节大小</span></span><br><span class="line"><span class="number">8</span></span><br><span class="line"><span class="meta">&gt;&gt;&gt; </span>x.data    <span class="comment">#数组元素的缓冲区</span></span><br><span class="line">&lt;memory at <span class="number">0x00000205227DAC18</span>&gt;</span><br></pre></td></tr></table></figure><p>还有两种创建序列数组的函数arrange和linspace，和range函数类似，但它们都属于Numpy里面。<br>arange(a,b,c) 参数分别表示开始值，结束值，步长<br>linspace(a,b,c) 参数分别表示开始值，结束值，元素数量<br>还可以调用它们自身的方法reshape()指定形状</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&gt;&gt;&gt; </span>arange(<span class="number">15</span>).reshape(<span class="number">3</span>,<span class="number">5</span>)</span><br><span class="line">array([[ <span class="number">0</span>,  <span class="number">1</span>,  <span class="number">2</span>,  <span class="number">3</span>,  <span class="number">4</span>],</span><br><span class="line">       [ <span class="number">5</span>,  <span class="number">6</span>,  <span class="number">7</span>,  <span class="number">8</span>,  <span class="number">9</span>],</span><br><span class="line">       [<span class="number">10</span>, <span class="number">11</span>, <span class="number">12</span>, <span class="number">13</span>, <span class="number">14</span>]])</span><br><span class="line"><span class="meta">&gt;&gt;&gt; </span>arange(<span class="number">10</span>,<span class="number">30</span>,<span class="number">5</span>)</span><br><span class="line">array([<span class="number">10</span>, <span class="number">15</span>, <span class="number">20</span>, <span class="number">25</span>])</span><br><span class="line"><span class="meta">&gt;&gt;&gt; </span>arange(<span class="number">0</span>,<span class="number">2</span>,<span class="number">0.3</span>)</span><br><span class="line">array([<span class="number">0.</span> , <span class="number">0.3</span>, <span class="number">0.6</span>, <span class="number">0.9</span>, <span class="number">1.2</span>, <span class="number">1.5</span>, <span class="number">1.8</span>])</span><br><span class="line"><span class="meta">&gt;&gt;&gt; </span>linspace(<span class="number">0</span>,<span class="number">2</span>,<span class="number">9</span>) <span class="comment"># 0~2之间生成9个数字</span></span><br><span class="line">array([<span class="number">0.</span>  , <span class="number">0.25</span>, <span class="number">0.5</span> , <span class="number">0.75</span>, <span class="number">1.</span>  , <span class="number">1.25</span>, <span class="number">1.5</span> , <span class="number">1.75</span>, <span class="number">2.</span>  ])</span><br></pre></td></tr></table></figure><p>还有创建概率分布的形式创建ndarray数组</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#高斯分布</span></span><br><span class="line">np.random.randn(shape)<span class="comment">#生成对应形状（shape）的高斯分布</span></span><br><span class="line">np.random.normal(loc, scale, size)<span class="comment">#生成均值为loc，标准差为scale，形状（shape）为size的高斯分布</span></span><br><span class="line"></span><br><span class="line"><span class="comment">#均匀分布</span></span><br><span class="line">np.random.rand(shape)<span class="comment">#生成对应形状（shape）的均匀分布</span></span><br><span class="line">np.random.uniform(low, high, size)<span class="comment">#生成一个从[low, high)中随即采样的，样本数量为size的均匀分布</span></span><br></pre></td></tr></table></figure><p>还有特殊数组</p><ul><li>zeros数组：全零数组，元素全为零。</li><li>ones数组：全1数组，元素全为1。</li><li>empty数组：空数组，元素全近似为0。</li></ul><h5 id="数组的使用"><a href="#数组的使用" class="headerlink" title="数组的使用"></a>数组的使用</h5><h6 id="数组的拷贝"><a href="#数组的拷贝" class="headerlink" title="数组的拷贝"></a>数组的拷贝</h6><p>数组拷贝分为浅拷贝和深拷贝，浅拷贝是复制数组的地址，如果对拷贝进行修改，则源数组也会被修改；而深拷贝是使用copy()函数，相当于重建了一个数组，修改不会对源数组产生影响</p><h6 id="数组的合并与分割"><a href="#数组的合并与分割" class="headerlink" title="数组的合并与分割"></a>数组的合并与分割</h6><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">np.hstack((a,b))<span class="comment">#按行合并，要求a和b的行数相同</span></span><br><span class="line">np.vstack((a,b))<span class="comment">#按列合并，要求a和b的列数相同</span></span><br><span class="line">np.c_[a,b]<span class="comment">#用法如同np.hstack((a,b))</span></span><br><span class="line">np.r_[a,b]<span class="comment">#用法如同np.vstack((a,b))</span></span><br><span class="line">np.concatenate((a,b), axis = <span class="number">1</span>)<span class="comment">#按行合并，要求a和b的行数相同</span></span><br><span class="line">np.concatenate((a,b), axis = <span class="number">0</span>)<span class="comment">#按列合并，要求a和b的列数相同</span></span><br><span class="line"><span class="comment">#若concatenate函数不指定axis，则默认为0，默认按列合并；而一维数组只能按行合并</span></span><br><span class="line"></span><br><span class="line">np.split(arr, n)<span class="comment">#n要么是整数，要么是列表，用来进行划分，n为整数时必须是能均匀划分</span></span><br><span class="line">np.array_split(arr, n)<span class="comment">#类似上面的用法，但是可以不均等划分</span></span><br></pre></td></tr></table></figure><h6 id="数组降维"><a href="#数组降维" class="headerlink" title="数组降维"></a>数组降维</h6><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">ravel()<span class="comment">#返回一维数组，但是改变返回的一维数组内容后，原数组的值也会相应改变</span></span><br><span class="line">flatten()<span class="comment">#返回一维数组，改变返回的数组不影响原数组</span></span><br></pre></td></tr></table></figure><h4 id="矩阵相关"><a href="#矩阵相关" class="headerlink" title="矩阵相关"></a>矩阵相关</h4><h5 id="创建矩阵"><a href="#创建矩阵" class="headerlink" title="创建矩阵"></a>创建矩阵</h5><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&gt;&gt;&gt; </span>A=matrix(<span class="string">'1.0 2.0;3.0 4.0'</span>)</span><br><span class="line"><span class="meta">&gt;&gt;&gt; </span>A</span><br><span class="line">matrix([[<span class="number">1.</span>, <span class="number">2.</span>],</span><br><span class="line">        [<span class="number">3.</span>, <span class="number">4.</span>]])</span><br><span class="line"><span class="meta">&gt;&gt;&gt; </span>b=matrix([[<span class="number">1.0</span>,<span class="number">2.0</span>],[<span class="number">3.0</span>,<span class="number">4.0</span>]])</span><br><span class="line"><span class="meta">&gt;&gt;&gt; </span>b</span><br><span class="line">matrix([[<span class="number">1.</span>, <span class="number">2.</span>],</span><br><span class="line">        [<span class="number">3.</span>, <span class="number">4.</span>]])</span><br><span class="line"><span class="meta">&gt;&gt;&gt; </span>type(A)</span><br><span class="line">&lt;<span class="class"><span class="keyword">class</span> '<span class="title">numpy</span>.<span class="title">matrixlib</span>.<span class="title">defmatrix</span>.<span class="title">matrix</span>'&gt;</span></span><br></pre></td></tr></table></figure><h5 id="矩阵运算"><a href="#矩阵运算" class="headerlink" title="矩阵运算"></a>矩阵运算</h5><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&gt;&gt;&gt; </span>A.T      <span class="comment">#转置</span></span><br><span class="line">matrix([[<span class="number">1.</span>, <span class="number">3.</span>],</span><br><span class="line">        [<span class="number">2.</span>, <span class="number">4.</span>]])</span><br><span class="line"><span class="meta">&gt;&gt;&gt; </span>x=matrix(<span class="string">'5.0 7.0'</span>)</span><br><span class="line"><span class="meta">&gt;&gt;&gt; </span>y=x.T</span><br><span class="line"><span class="meta">&gt;&gt;&gt; </span>y</span><br><span class="line">matrix([[<span class="number">5.</span>],</span><br><span class="line">            [<span class="number">7.</span>]])</span><br><span class="line"><span class="meta">&gt;&gt;&gt; </span>print(A*y)   <span class="comment">#矩阵乘法</span></span><br><span class="line">[[<span class="number">19.</span>]</span><br><span class="line"> [<span class="number">43.</span>]]</span><br><span class="line"><span class="meta">&gt;&gt;&gt; </span>print(A.I)   <span class="comment">#逆矩阵</span></span><br><span class="line">[[<span class="number">-2.</span>   <span class="number">1.</span> ]</span><br><span class="line"> [ <span class="number">1.5</span> <span class="number">-0.5</span>]]</span><br></pre></td></tr></table></figure><h4 id="LA相关函数"><a href="#LA相关函数" class="headerlink" title="LA相关函数"></a>LA相关函数</h4><ul><li>numpy.dot()<br>此函数返回两个数组的点积。 对于二维向量，其等效于矩阵乘法。 对于一维数组，它是向量的内积。 对于 N 维数组，它是a的最后一个轴上的和与b的倒数第二个轴的乘积。</li><li>numpy.vdot()<br>此函数返回两个向量的点积。 如果第一个参数是复数，那么它的共轭复数会用于计算。 如果参数id是多维数组，它会被展开。</li><li>numpy.inner()<br>此函数返回一维数组的向量内积。 对于更高的维度，它返回最后一个轴上的和的乘积。</li><li>numpy.linalg.det()<br>计算输入矩阵的行列式</li><li>numpy.linalg.solve()<br>该函数给出了矩阵形式的线性方程的解</li><li>numpy.matmul()<br>函数返回两个数组的矩阵乘积。当两个数组都是二维数组的时候，就是数学上的两个矩阵的乘积。</li></ul><h3 id="pytorch学习"><a href="#pytorch学习" class="headerlink" title="pytorch学习"></a>pytorch学习</h3><h5 id="clamp-和clamp-的区别"><a href="#clamp-和clamp-的区别" class="headerlink" title="clamp()和clamp_()的区别"></a>clamp()和clamp_()的区别</h5><p>clamp()函数的作用是将a数组的每个元素的值压缩到[min,max]之间，并返回一个新的张量<br>而clamp_()函数是直接在原张量上进行操作，而不是返回一个新的张量</p><h1 id="二、机器学习常用函数"><a href="#二、机器学习常用函数" class="headerlink" title="二、机器学习常用函数"></a>二、机器学习常用函数</h1><h3 id="train-test-split"><a href="#train-test-split" class="headerlink" title="train_test_split()"></a>train_test_split()</h3><p>train_test_split()函数是用来随机划分样本数据为训练集和测试集的，当然也可以人为的切片划分。</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">train_X,test_X,train_y,test_y = train_test_split(train_data,train_target,test_size=<span class="number">0.3</span>,random_state=<span class="number">5</span>)</span><br><span class="line"></span><br><span class="line">参数解释：</span><br><span class="line"></span><br><span class="line">train_data：待划分样本数据</span><br><span class="line"></span><br><span class="line">train_target：待划分样本数据的结果（标签）</span><br><span class="line"></span><br><span class="line">test_size：测试数据占样本数据的比例，若整数则样本数量</span><br><span class="line"></span><br><span class="line">random_state：设置随机数种子，保证每次都是同一个随机数。若为<span class="number">0</span>或不填，则每次得到数据都不一样</span><br></pre></td></tr></table></figure>]]></content>
    
    
    <summary type="html">&lt;p&gt;常读常新。&lt;/p&gt;</summary>
    
    
    
    <category term="Python" scheme="https://maydaytyh.github.io/blog/categories/Python/"/>
    
    <category term="代码阅读" scheme="https://maydaytyh.github.io/blog/categories/代码阅读/"/>
    
    
    <category term="Pytorch" scheme="https://maydaytyh.github.io/blog/tags/Pytorch/"/>
    
    <category term="毕设" scheme="https://maydaytyh.github.io/blog/tags/毕设/"/>
    
  </entry>
  
  <entry>
    <title>生成学习算法</title>
    <link href="https://maydaytyh.github.io/blog/2021/04/13/%E7%94%9F%E6%88%90%E5%AD%A6%E4%B9%A0%E7%AE%97%E6%B3%95/"/>
    <id>https://maydaytyh.github.io/blog/2021/04/13/%E7%94%9F%E6%88%90%E5%AD%A6%E4%B9%A0%E7%AE%97%E6%B3%95/</id>
    <published>2021-04-13T08:47:44.000Z</published>
    <updated>2021-04-14T07:52:49.471Z</updated>
    
    <content type="html"><![CDATA[<p>判别学习算法的模型是通过一条分隔线把两种类别区分开，而生成学习算法是对两种可能的结果分别进行建模，然后分别和输入进行比对，计算出相应的概率.</p><a id="more"></a><h1 id="一、引言"><a href="#一、引言" class="headerlink" title="一、引言"></a>一、引言</h1><p>我们常用的算法是逻辑回归，判别模型，即找到0和1之间的界限，找到一个决策边界，来区分0和1，而生成学习算法是通过0的特征学习出一个0的模型，根据1的特征学习出一个1的模型，对于一个新的样本，分别放入0 1的模型中，先求得是0的概率，再求是1的概率，进行比较，即可确定类型。这里计算概率使用的是贝叶斯公式。主要完成对$p(x|y)$和$p(y)$的建模</p><h1 id="二、高斯判别分析（Gaussian-Discriminant-Analysis）"><a href="#二、高斯判别分析（Gaussian-Discriminant-Analysis）" class="headerlink" title="二、高斯判别分析（Gaussian Discriminant Analysis）"></a>二、高斯判别分析（Gaussian Discriminant Analysis）</h1><p>假设$p(x|y)$满足多维正态分布<br><img src="https://i.loli.net/2021/04/13/TRWUmFtn3zkEeAr.png" alt="image.png"></p><p>概率分布为<br><img src="https://i.loli.net/2021/04/13/XaSEhYct9eJKRl3.png" alt="image.png"><br>极大似然估计求得所有的参数<br><img src="https://i.loli.net/2021/04/14/CV4r56NKAXZhvMU.png" alt="image.png"><br>其中，$ϕ$ 是训练样本中结果y=1占有的比例，$μ_0$是y=0的样本中特征均值，$μ_1$ 是y=1的样本中特征均值，$Σ$ 是样本特征方差均值。</p><p>注意这里的参数有$μ_0$和$μ_1$，表示在不同的结果模型下，特征均值不同，但我们假设协方差相同。反映在图上就是不同模型中心位置不同，但形状相同。这样就可以用直线来进行分隔判别。</p><p>所以我们得到这样的图像<br><img src="https://i.loli.net/2021/04/13/RndUHTPAOmJFz7V.png" alt="image.png"></p><h1 id="三、朴素贝叶斯（Naive-Bayes）"><a href="#三、朴素贝叶斯（Naive-Bayes）" class="headerlink" title="三、朴素贝叶斯（Naive Bayes）"></a>三、朴素贝叶斯（Naive Bayes）</h1><p>当$x$是离散值时，我们假设垃圾邮件分类的情况。将一封邮件作为输入向量，如果字典中第$i$个词在字典中出现，则$x_i$=1，反之$x_i$=0，这样我们得到所需的特征向量。</p><p>现在对$p(x|y)$建模，假设字典中有50000个词，$x \in{0,1}^{50000}$，如果采用多项式建模， 将会有$2^{50000}$种结果，$2^{50000}$−1维的参数向量，这样明显参数过多，很难进行计算。所以为了对$p(x|y)$建模，需要做一个强假设，假设x的特征是条件独立的，这个假设称为朴素贝叶斯假设(Naive Bayes (NB) assumption),这个算法就称为朴素贝叶斯分类(Naive Bayes classifier).</p><p>根据概率论的链式法则性质和朴素贝叶斯假设，我们可以得到如下等式<br><img src="https://i.loli.net/2021/04/14/UhLlwdFQGpriZ32.png" alt="image.png"></p><p>根据联合似然函数，再依次得到参数的最大似然估计值，我们对一个全新的样本进行预测，特征为$x$，则有<br><img src="https://i.loli.net/2021/04/14/vna2tAU735JVwZI.png" alt="image.png"></p><p>因为分母对于y取0或1是一样的，所以只需要计算比较分子即可确定分类。</p><h1 id="四、拉普拉斯平滑（Laplace-smoothing）"><a href="#四、拉普拉斯平滑（Laplace-smoothing）" class="headerlink" title="四、拉普拉斯平滑（Laplace smoothing）"></a>四、拉普拉斯平滑（Laplace smoothing）</h1><p>朴素贝叶斯模型已经能不错的解决离散值的问题，可是对于数据稀疏问题，朴素贝叶斯模型并不能很好的解决，还是针对邮件分类问题，假设收到了一封含有NIPS的邮件，但是NIPS从未在垃圾邮件或者正常邮件中出现过，假设NIPS在字典中位子伟35000，则计算概率时，<img src="https://i.loli.net/2021/04/14/DmwZnKpdGavJBjy.png" alt="image.png"><br>而后验概率计算得到的为$\frac{0}0$，也就不知道该如何预测了。</p><p>这里我们引入拉普拉斯平滑，将估计替换为</p><p><img src="https://i.loli.net/2021/04/14/mriZuhLe2sbWIJA.png" alt="image.png"></p><p>这里首先是对分子加1，然后对分母加k，要注意$\sum^k_{j=1} \phi_j = 1$依然成立（自己检验一下），这是一个必须有的性质，因为$\phi_j$<br>是对概率的估计，然后所有的概率加到一起必然等于1。另外对于所有的$j$值，都有$\phi_j \neq 0$，这就解决了刚刚的概率估计为零的问题了。在某些特定的条件下（相当强的假设条件下，arguably quite strong），可以发现拉普拉斯平滑还真能给出对参数$\phi_j$ 的最佳估计（optimal estimator）</p><p>在朴素贝叶斯问题上，使用拉普拉斯平滑后得到的公式则为<br><img src="https://i.loli.net/2021/04/14/WpkzK7cf4hrBH1F.png" alt="image.png"></p><p>注：在实际应用中，是否对$\phi_y$使用拉普拉斯平滑影响不大，因为$\phi_y$是对$p(y=1)$的一个合理估计，而垃圾邮件与正常邮件是成一定比例的，所以$\phi_y$与零点存在一定的距离。</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;判别学习算法的模型是通过一条分隔线把两种类别区分开，而生成学习算法是对两种可能的结果分别进行建模，然后分别和输入进行比对，计算出相应的概率.&lt;/p&gt;</summary>
    
    
    
    <category term="cs229" scheme="https://maydaytyh.github.io/blog/categories/cs229/"/>
    
    
    <category term="算法" scheme="https://maydaytyh.github.io/blog/tags/算法/"/>
    
  </entry>
  
  <entry>
    <title>MACOS配置终端代理</title>
    <link href="https://maydaytyh.github.io/blog/2021/03/05/MACOS%E9%85%8D%E7%BD%AE%E7%BB%88%E7%AB%AF%E4%BB%A3%E7%90%86/"/>
    <id>https://maydaytyh.github.io/blog/2021/03/05/MACOS%E9%85%8D%E7%BD%AE%E7%BB%88%E7%AB%AF%E4%BB%A3%E7%90%86/</id>
    <published>2021-03-05T01:50:30.000Z</published>
    <updated>2021-03-10T08:30:10.364Z</updated>
    
    <content type="html"><![CDATA[<a id="more"></a><p>在<code>~/.zshrc</code> 中添加如下内容（如果是是<code>bash</code>用户那么配置文件为<code>~/.bash_profile</code>）</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 为终端设置代理</span></span><br><span class="line"><span class="built_in">alias</span> proxy=<span class="string">'export all_proxy=socks5://127.0.0.1:1080'</span></span><br><span class="line"><span class="built_in">alias</span> unproxy=<span class="string">'unset all_proxy'</span></span><br></pre></td></tr></table></figure><p>修改完成后<code>source</code>对应的文件即可</p><p>其中，<code>1080</code>为端口号，需要和自己的代理软件的设置保持一致。</p><p>这样在终端中使用<code>proxy</code>命令就可以打开代理，使用<code>unproxy</code>就可以关闭代理。</p><p>效果如图</p><p><a href="https://imgtu.com/i/6JUgqU" target="_blank" rel="noopener"><img src="https://s3.ax1x.com/2021/03/10/6JUgqU.png" alt="6JUgqU.png"></a></p>]]></content>
    
    
      
      
    <summary type="html">&lt;a id=&quot;more&quot;&gt;&lt;/a&gt;

&lt;p&gt;在&lt;code&gt;~/.zshrc&lt;/code&gt; 中添加如下内容（如果是是&lt;code&gt;bash&lt;/code&gt;用户那么配置文件为&lt;code&gt;~/.bash_profile&lt;/code&gt;）&lt;/p&gt;
&lt;figure class=&quot;highligh</summary>
      
    
    
    
    <category term="MACOS" scheme="https://maydaytyh.github.io/blog/categories/MACOS/"/>
    
    
    <category term="技巧" scheme="https://maydaytyh.github.io/blog/tags/技巧/"/>
    
  </entry>
  
  <entry>
    <title>网页视频倍速的小技巧</title>
    <link href="https://maydaytyh.github.io/blog/2021/02/17/%E7%BD%91%E9%A1%B5%E8%A7%86%E9%A2%91%E5%80%8D%E9%80%9F%E7%9A%84%E5%B0%8F%E6%8A%80%E5%B7%A7/"/>
    <id>https://maydaytyh.github.io/blog/2021/02/17/%E7%BD%91%E9%A1%B5%E8%A7%86%E9%A2%91%E5%80%8D%E9%80%9F%E7%9A%84%E5%B0%8F%E6%8A%80%E5%B7%A7/</id>
    <published>2021-02-17T13:02:33.000Z</published>
    <updated>2021-02-17T13:14:08.994Z</updated>
    
    <content type="html"><![CDATA[<p>今天玉米问到延河课堂上的视频能不能倍速，想到当时防疫大课堂时的操作，便想直接复现，但是却失败了</p><p>于是开始检查网页的代码有什么猫腻</p><p><img src="https://i.loli.net/2021/02/17/jx8hNQEyGpZkt4z.png" alt="image.png"></p><p>一开始看到注释中写着Flash添加处，还以为是flash播放器，便去寻找flash倍速的方法，感觉还是很麻烦</p><p>接着看代码，发现了好几个video标签，便猜测是不能准确捕获video标签的原因，找到视频对应的真实标签，然后通过ID获取此标签，再调整倍速即可</p><p><img src="https://i.loli.net/2021/02/17/49P3LfGa8E6IjkQ.png" alt="image.png"></p><p>如上图，发现所有的视频都是存在ID为”Video2_html5_api”的Video中，使用如下代码即可</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">var video= document.getElementById('Video2_html5_api');</span><br><span class="line">video.playbackRate=<span class="number">16</span></span><br></pre></td></tr></table></figure><p>注：播放速率可为0.025～16</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;今天玉米问到延河课堂上的视频能不能倍速，想到当时防疫大课堂时的操作，便想直接复现，但是却失败了&lt;/p&gt;
&lt;p&gt;于是开始检查网页的代码有什么猫腻&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://i.loli.net/2021/02/17/jx8hNQEyGpZkt4z.pn</summary>
      
    
    
    
    <category term="JS" scheme="https://maydaytyh.github.io/blog/categories/JS/"/>
    
    
    <category term="技巧" scheme="https://maydaytyh.github.io/blog/tags/技巧/"/>
    
  </entry>
  
  <entry>
    <title>MACOS更新后提示xcrun: error</title>
    <link href="https://maydaytyh.github.io/blog/2021/02/09/MACOS%E6%9B%B4%E6%96%B0%E5%90%8E%E6%8F%90%E7%A4%BAxcrun-error/"/>
    <id>https://maydaytyh.github.io/blog/2021/02/09/MACOS%E6%9B%B4%E6%96%B0%E5%90%8E%E6%8F%90%E7%A4%BAxcrun-error/</id>
    <published>2021-02-09T10:37:31.000Z</published>
    <updated>2021-02-09T10:59:21.583Z</updated>
    
    <content type="html"><![CDATA[<a id="more"></a><p>第一次更新BigSur，在命令行运行gcc出现了xcrun: error: invalid active developer path, missing xcrun的报错。</p><p>经搜索，需要重新安装命令行工具Command Line Tools，是因为更新系统时原来的 <strong>Command Line Tools</strong> 被自动卸载了，所以重新安装即可。</p><p>在终端中执行如下指令即可</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">xcode-select --install</span><br></pre></td></tr></table></figure><p>Command Line Tools包含的工具很多，如下所示</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br></pre></td><td class="code"><pre><span class="line">ar</span><br><span class="line">as</span><br><span class="line">asa</span><br><span class="line">bison</span><br><span class="line">BuildStrings</span><br><span class="line">c++</span><br><span class="line">c89</span><br><span class="line">c99</span><br><span class="line">cc</span><br><span class="line">clang</span><br><span class="line">clang++</span><br><span class="line">cmpdylib</span><br><span class="line">codesign_allocate</span><br><span class="line">CpMac</span><br><span class="line">cpp</span><br><span class="line">ctags</span><br><span class="line">ctf_insert</span><br><span class="line">DeRez</span><br><span class="line">dsymutil</span><br><span class="line">dwarfdump</span><br><span class="line">dyldinfo</span><br><span class="line">flex</span><br><span class="line">flex++</span><br><span class="line">g++</span><br><span class="line">gatherheaderdoc</span><br><span class="line">gcc</span><br><span class="line">gcov</span><br><span class="line">GetFileInfo</span><br><span class="line">git</span><br><span class="line">git-cvsserver</span><br><span class="line">git-receive-pack</span><br><span class="line">git-shell</span><br><span class="line">git-upload-archive</span><br><span class="line">git-upload-pack</span><br><span class="line">gm4</span><br><span class="line">gnumake</span><br><span class="line">gperf</span><br><span class="line">hdxml2manxml</span><br><span class="line">headerdoc2html</span><br><span class="line">indent</span><br><span class="line">install_name_tool</span><br><span class="line">ld</span><br><span class="line">lex</span><br><span class="line">libtool</span><br><span class="line">lipo</span><br><span class="line">lldb</span><br><span class="line">lorder</span><br><span class="line">m4</span><br><span class="line">make</span><br><span class="line">MergePef</span><br><span class="line">mig</span><br><span class="line">mkdep</span><br><span class="line">MvMac</span><br><span class="line">nasm</span><br><span class="line">ndisasm</span><br><span class="line">nm</span><br><span class="line">nmedit</span><br><span class="line">otool</span><br><span class="line">pagestuff</span><br><span class="line">projectInfo</span><br><span class="line">ranlib</span><br><span class="line">rebase</span><br><span class="line">redo_prebinding</span><br><span class="line">ResMerger</span><br><span class="line">resolveLinks</span><br><span class="line">Rez</span><br><span class="line">RezDet</span><br><span class="line">RezWack</span><br><span class="line">rpcgen</span><br><span class="line">segedit</span><br><span class="line">SetFile</span><br><span class="line">size</span><br><span class="line">SplitForks</span><br><span class="line">strings</span><br><span class="line">strip</span><br><span class="line">svn</span><br><span class="line">svnadmin</span><br><span class="line">svndumpfilter</span><br><span class="line">svnlook</span><br><span class="line">svnrdump</span><br><span class="line">svnserve</span><br><span class="line">svnsync</span><br><span class="line">svnversion</span><br><span class="line">unifdef</span><br><span class="line">unifdefall</span><br><span class="line">UnRezWack</span><br><span class="line">unwinddump</span><br><span class="line">what</span><br><span class="line">xml2man</span><br><span class="line">yacc</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;a id=&quot;more&quot;&gt;&lt;/a&gt;

&lt;p&gt;第一次更新BigSur，在命令行运行gcc出现了xcrun: error: invalid active developer path, missing xcrun的报错。&lt;/p&gt;
&lt;p&gt;经搜索，需要重新安装命令行工具Command L</summary>
      
    
    
    
    <category term="MACOS" scheme="https://maydaytyh.github.io/blog/categories/MACOS/"/>
    
    
    <category term="Bug" scheme="https://maydaytyh.github.io/blog/tags/Bug/"/>
    
  </entry>
  
  <entry>
    <title>数学结论</title>
    <link href="https://maydaytyh.github.io/blog/2021/02/04/%E6%95%B0%E5%AD%A6%E7%BB%93%E8%AE%BA/"/>
    <id>https://maydaytyh.github.io/blog/2021/02/04/%E6%95%B0%E5%AD%A6%E7%BB%93%E8%AE%BA/</id>
    <published>2021-02-04T13:44:07.000Z</published>
    <updated>2021-03-10T08:31:23.855Z</updated>
    
    <content type="html"><![CDATA[<a id="more"></a><h2 id="均值不等式"><a href="#均值不等式" class="headerlink" title="均值不等式"></a>均值不等式</h2><p><a href="https://zhuanlan.zhihu.com/p/58362884" target="_blank" rel="noopener">均值不等式证明</a></p><h3 id="整数拆分问题"><a href="#整数拆分问题" class="headerlink" title="整数拆分问题"></a>整数拆分问题</h3><p>即将一个数$ $拆分为$k$个数，使得$k$个数乘积最大。</p><p>由均值不等式易得$k$个数相等时 乘积是最大的，那么这$k$个数应该等于多少呢？</p><p>即求$f(x)=x^{\left(\frac{n}{x}\right)}$的最大值</p><p>$f(x)=x^{\left(\frac{n}{x}\right)}=e^{\frac{n}{x} \ln x}$</p><p>易得$h(x)=\frac{1}{x} \ln x$ 与$f(x)$有相同的单调性</p><p>$h^{\prime}(x)=\frac{1-\ln x}{x^{2}}$</p><p>可知，x=e时，$f(x)$取得最大值，由于2不是整数，所以可以是2或3.</p><p>则将$n$拆分为尽量多的3以及少量2即可。</p><p>总结可得</p><p><img src="https://i.loli.net/2021/02/06/K5jFsLWkHzJ7tgx.png" alt="image.png"></p><h2 id="线性代数性质"><a href="#线性代数性质" class="headerlink" title="线性代数性质"></a>线性代数性质</h2><p>$$<br>\operatorname{tr}(A B)=\operatorname{tr}(B A)<br>$$</p><p>证明：<br>$$<br>\operatorname{tr}(A B)=\sum_{i=1}^{m}(A B)<em>{i i}=\sum</em>{i=1}^{m} \sum_{j=1}^{n} a_{i j} b_{j i}=\sum_{i=1}^{m} \sum_{j=1}^{n} b_{j i} a_{i j}=\sum_{i=1}^{n}(B A)_{i i}=\operatorname{tr}(B A)<br>$$</p>]]></content>
    
    
      
      
    <summary type="html">&lt;a id=&quot;more&quot;&gt;&lt;/a&gt;

&lt;h2 id=&quot;均值不等式&quot;&gt;&lt;a href=&quot;#均值不等式&quot; class=&quot;headerlink&quot; title=&quot;均值不等式&quot;&gt;&lt;/a&gt;均值不等式&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://zhuanlan.zhihu.com/p/5</summary>
      
    
    
    
    <category term="数学" scheme="https://maydaytyh.github.io/blog/categories/数学/"/>
    
    
    <category term="数学" scheme="https://maydaytyh.github.io/blog/tags/数学/"/>
    
  </entry>
  
  <entry>
    <title>引用参数与形参区别</title>
    <link href="https://maydaytyh.github.io/blog/2021/02/04/%E5%BC%95%E7%94%A8%E5%8F%82%E6%95%B0%E4%B8%8E%E5%BD%A2%E5%8F%82%E5%8C%BA%E5%88%AB/"/>
    <id>https://maydaytyh.github.io/blog/2021/02/04/%E5%BC%95%E7%94%A8%E5%8F%82%E6%95%B0%E4%B8%8E%E5%BD%A2%E5%8F%82%E5%8C%BA%E5%88%AB/</id>
    <published>2021-02-04T03:38:15.000Z</published>
    <updated>2021-02-04T07:18:50.000Z</updated>
    
    <content type="html"><![CDATA[<p>发现引用传值真的要快很多。</p><a id="more"></a><p>在函数进行参数传递时，如果采用形式参数传递，则需要进行拷贝，将会有额外的时间和空间的开销，而使用引用类型传递，因为自始自终使用的都是一个东西，只是起了几个名字而已，所以就没有额外的开销，时间和空间上都有不小的提升。</p><p>引用传递本质是指针，对于基本数据类型 ，引用传递和非引用基本没有区别（基本类型复制较快）， 而对于<strong>容器</strong>或者<strong>自定义类型</strong> 复制成本非常高（因为这里会调用 拷贝构造函数，具体是深拷贝还是浅拷贝，需要取决于你是否重写拷贝构造函数）</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;发现引用传值真的要快很多。&lt;/p&gt;</summary>
    
    
    
    <category term="语言" scheme="https://maydaytyh.github.io/blog/categories/语言/"/>
    
    <category term="C++" scheme="https://maydaytyh.github.io/blog/categories/语言/C/"/>
    
    
    <category term="坑点" scheme="https://maydaytyh.github.io/blog/tags/坑点/"/>
    
  </entry>
  
  <entry>
    <title>hexo博客的一点经验</title>
    <link href="https://maydaytyh.github.io/blog/2021/01/30/%E8%BF%81%E7%A7%BBhexo%E5%8D%9A%E5%AE%A2%E7%9A%84%E4%B8%80%E7%82%B9%E7%BB%8F%E9%AA%8C/"/>
    <id>https://maydaytyh.github.io/blog/2021/01/30/%E8%BF%81%E7%A7%BBhexo%E5%8D%9A%E5%AE%A2%E7%9A%84%E4%B8%80%E7%82%B9%E7%BB%8F%E9%AA%8C/</id>
    <published>2021-01-30T02:32:39.000Z</published>
    <updated>2021-01-30T03:29:28.000Z</updated>
    
    <content type="html"><![CDATA[<p>多次折腾hexo博客的一点心得</p><a id="more"></a><h2 id="迁移hexo博客相关"><a href="#迁移hexo博客相关" class="headerlink" title="迁移hexo博客相关"></a>迁移hexo博客相关</h2><p>要做的事情无非就是下面几步</p><ul><li>在新环境中安装git</li><li>在新环境中安装node</li><li>在新环境中安装hexo</li><li>复制Blog文件夹的全部内容到新环境</li><li>配置ssh，添加密钥到github</li><li>测试即可完成</li></ul><h2 id="hexo博客如何给一篇文章设立多个分类"><a href="#hexo博客如何给一篇文章设立多个分类" class="headerlink" title="hexo博客如何给一篇文章设立多个分类"></a>hexo博客如何给一篇文章设立多个分类</h2><p>从前以为下面的方式就是给一篇文章设置多个分类，最近才发现这样设置的是多级目录</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">categories: </span><br><span class="line">            - 技术</span><br><span class="line">            - Blog</span><br></pre></td></tr></table></figure><p>要想设置多个目录，只需要给分类加上[]即可，如下所示</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">categories: </span><br><span class="line">            - [技术]</span><br><span class="line">            - [Blog]</span><br></pre></td></tr></table></figure>]]></content>
    
    
    <summary type="html">&lt;p&gt;多次折腾hexo博客的一点心得&lt;/p&gt;</summary>
    
    
    
    <category term="技术" scheme="https://maydaytyh.github.io/blog/categories/技术/"/>
    
    <category term="Blog" scheme="https://maydaytyh.github.io/blog/categories/Blog/"/>
    
    
    <category term="Hexo" scheme="https://maydaytyh.github.io/blog/tags/Hexo/"/>
    
  </entry>
  
  <entry>
    <title>田宇航定理</title>
    <link href="https://maydaytyh.github.io/blog/2021/01/29/%E7%94%B0%E5%AE%87%E8%88%AA%E5%AE%9A%E7%90%86/"/>
    <id>https://maydaytyh.github.io/blog/2021/01/29/%E7%94%B0%E5%AE%87%E8%88%AA%E5%AE%9A%E7%90%86/</id>
    <published>2021-01-29T10:11:49.000Z</published>
    <updated>2021-02-04T09:02:24.000Z</updated>
    
    <content type="html"><![CDATA[<h3 id="电脑使用定理"><a href="#电脑使用定理" class="headerlink" title="电脑使用定理"></a>电脑使用定理</h3><ul><li><p>不要花时间折腾一些对于使用没什么大影响的东西，要看重内容</p></li><li><p>不影响使用的bug，如今天遇到的“体系结构 arm64 不受支持”这一C/C++扩展的bug，而且网上也找不到解决方案，不必折腾，让子弹飞一会儿</p></li><li><p>面对问题，要克制自己的冲动，选择bug最少的解决方案</p></li></ul>]]></content>
    
    
      
      
    <summary type="html">&lt;h3 id=&quot;电脑使用定理&quot;&gt;&lt;a href=&quot;#电脑使用定理&quot; class=&quot;headerlink&quot; title=&quot;电脑使用定理&quot;&gt;&lt;/a&gt;电脑使用定理&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;p&gt;不要花时间折腾一些对于使用没什么大影响的东西，要看重内容&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p</summary>
      
    
    
    
    <category term="随笔" scheme="https://maydaytyh.github.io/blog/categories/随笔/"/>
    
    
    <category term="个人思考" scheme="https://maydaytyh.github.io/blog/tags/个人思考/"/>
    
  </entry>
  
  <entry>
    <title>Pyquery 403 Frobidden</title>
    <link href="https://maydaytyh.github.io/blog/2021/01/22/Pyquery-403-Frobidden/"/>
    <id>https://maydaytyh.github.io/blog/2021/01/22/Pyquery-403-Frobidden/</id>
    <published>2021-01-22T02:52:39.000Z</published>
    <updated>2021-01-29T15:40:12.000Z</updated>
    
    <content type="html"><![CDATA[<p>自己电脑没事，别人电脑403Forbidden？来，解决这个问题</p><a id="more"></a><p>使用Pyquery爬虫时，在自己的Windwos下运行没有问题，但是别人那里爬不到任何信息，而且爬两次就会报错403 Forbidden。</p><p>我很是迷惑，因为报错信息是urllib库的内容，而我没有使用urllib库，检查发现，Pyquery库在解析网页时会调用Requests库</p><p>这时，学长让我加个Header，感觉是被反爬虫机制干了，我提议先装一个Reuqests库试试，果然，是换了个编译器忘了装Requests库了，而我也加上了Header，问题得到了解决。</p><p>附：Agent代码</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">headers = &#123;</span><br><span class="line">    <span class="string">'User-Agent'</span>: <span class="string">'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36'</span></span><br><span class="line">&#125;</span><br><span class="line">webBase += str(year) + <span class="string">"-"</span> + str(month) + <span class="string">"-"</span> + str(day) + <span class="string">"/"</span></span><br><span class="line">doc=pq(webBase, encoding=<span class="string">"utf-8"</span>, headers=headers)</span><br></pre></td></tr></table></figure>]]></content>
    
    
    <summary type="html">&lt;p&gt;自己电脑没事，别人电脑403Forbidden？来，解决这个问题&lt;/p&gt;</summary>
    
    
    
    <category term="语言" scheme="https://maydaytyh.github.io/blog/categories/语言/"/>
    
    <category term="Python" scheme="https://maydaytyh.github.io/blog/categories/语言/Python/"/>
    
    
    <category term="爬虫" scheme="https://maydaytyh.github.io/blog/tags/爬虫/"/>
    
    <category term="坑点" scheme="https://maydaytyh.github.io/blog/tags/坑点/"/>
    
  </entry>
  
  <entry>
    <title>回首2020</title>
    <link href="https://maydaytyh.github.io/blog/2021/01/07/%E5%9B%9E%E9%A6%962020/"/>
    <id>https://maydaytyh.github.io/blog/2021/01/07/%E5%9B%9E%E9%A6%962020/</id>
    <published>2021-01-07T13:23:21.000Z</published>
    <updated>2021-01-29T15:40:13.000Z</updated>
    
    <content type="html"><![CDATA[<p>荒诞却又值得纪念的2020。</p><a id="more"></a><p>2020年初，我还在欢乐地带着玉米接待sjy和wsy，那几天真的好快乐喔，尽管sjy这个闷骚的家伙在玉米在的时候就能憋着不说话，晚上回去又属他话多，但还是真的好快乐，记得和他们在大学城北站告别的时候，我在回学校的路上一直在想，为什么无比欢乐的时光总是这么短暂呢？不由想起来，两年前清明节他们俩来找我，结果wsy因为要上军理先溜了，sjy因为要回去数学建模培训也先溜了，那个时候就在想，无忧无虑的时光早已一去不复返了，我们身上都已经背上了一份份责任，对自己，对别人。</p><p>快乐有在变少吗？其实也未必，只是我们获得快乐越来越难了。生活中也许还有百般简单的快乐，但是真正的大快乐在于我们一直担心的事情有了好结果那一瞬间，那一个如释重负的瞬间，或许是在阳光微醺的午后，或许是在星空寂语的深夜，一天中的时时刻刻，都可能会带给我们惊喜。每个接到惊喜的人，怎么能抑制住心中的兴奋呢？所以，其实我们快乐的能力并没有丧失，只是我们获得快乐越来越难了。</p><p>这怎么就扯远了呢。</p><p>软测考试是元旦之前还是之后我都记不清了，只是依稀记得有一个1.4的考试，那应该就是了吧。那这里不得不提前说一下之后的软测大作业，真的离谱，让我们自己爬代码，写自动化测试程序，测试java7和java8的输入、形式都相同，但是结果不同的API。。虽然这门课最后得分还挺好的，但是写大作业的那几天想做点东西却不知道做什么的无力感是真的难受。</p><p>时间来到了每年年前期末的生病阶段，肠胃型感冒，一晚上起来七八次，校医院医生只是直说赶紧转诊急救去，别来找我。生病并不可怕，可怕的是几天之后考试。那几天也几乎没怎么复习，在床上躺尸。不过那几天每天喝粥，吃自己和玉米整的一大堆药，还是挺印象深刻的。考完试搞了几天软测的大作业就回家了，回家当天是生日，回家前一天和玉米在图书馆提前过了一个生日，吃了一个可可爱爱的小蛋糕，火车上了度过了一天，晚上回去又吃了一个大大的大蛋糕，吃了两个蛋糕还是蛮开心的。</p><p>生活总是这么有趣。</p><p>而之后的日子却一天天灰暗了起来。</p><p>某天清晨惊醒看到的科比去世的消息消息，一天天增长的疫情人数，惶惶终日。其实也猜到了开不了学，但是没想到这开不了学的日子一直持续到了9月。在家的日子谈不上索然无味，就是总少了点东西，这里折腾两天，那里折腾两天，不是很如意。而生活也好像喜欢和我开玩笑，上半年光快递就丢了4次，买本旧书还折腾了好多天，电脑还三天两头出问题，课程的作业一天天的堆积着，本来说着复习考研，可是在家的低效率，计网的一堆堆作业，编译原理每周让我焦头烂额的实验，以及家里的一些事情，生活突然就变得不那么有期待了……不过也好在我还是熬过来了，并且完成的还不错。整个暑假其实还是比较扯的，虽然还是完成了些东西，但现在看来我对这个暑假是极其不满意的，但是已经过去了，大概是7月还处于焦虑不安的时期，进了8月就开始每天想着开学了吧，安不下心来。</p><p>8.29抵达北京，阔别良久的良乡，却要在31号就搬离，玉米30号到，晚上见了从1.15以来的第一面，真是难忘的一年啊，这么难都熬过来了，还有什么害怕的呢？未来可期～收拾宿舍发现自己真是一个怀旧的人啊，太多太多的东西都舍不得扔，导致最后我的行李是比别人多一些。当断则断，还是扔了不少东西的，以及好像不小心把自己的录取通知书等等资料给弄丢了……记得当时告诉自己，这是要给你发一个新的录取通知书呢，好兆头。可能确实人在最无助的时候就会turn to 老天爷吧，总把一些东西当成老天爷的馈赠。搬到村里后，地方是真的小啊，慢慢倒是也习惯了，刚开学那会儿每天就想着往良乡跑，确实学不进去，就这我还以为来了学校生活的旋律就慢慢到学习上来了。小学期开始后，生活确实转移到学习上来了，但是我却发现自己没有时间学习考研的东西……每天忙于造CPU，大家都说大四了水一水水一水，可是一个个的还是牟足了劲的做，可能是习惯了把作业完成的很好吧，虽然确实划水了，但是还是用了很大的力气去完成这个作业，以为大四的小学期不用熬夜了，可是还是每天熬夜到一两点；顺便顺便，以为小学期结束就不用熬夜了，可是考研期间其实也是一两点才睡，小学期终于结束了，也就10月了，以为生活的重心终于要转移到考研上来了，不过也确实，中间因为入党材料的事情耽搁了加起来几天的时间吧，不过这件事情好在最后有了好结果。</p><p>十一期间也没怎么学习，十一之后好像才慢慢有了学习的状态吧，那个时候学习还不是很苦，每天7点多点起来，吃个饭就去图书馆学习，晚上学到10.30回来，每天看上去游刃有余，其实看到别人的进度，自己心里还是很慌的，自己确实进度慢慢，也不知道怎么就进入了资料收集的大误区，每天沉迷于收集资料，把自己的百度网盘塞的满满的，各种pdf层出不穷，却没有细看其中哪怕就一份。</p><p>10.31玉米21岁生日生日，本来想着去故宫，吃海底捞完美规划，谁知道地铁上手机被狗东西给偷了，于是去派出所做了一上午笔录笔录，虽然也根本找不回来，可是对于丢手机这个流程，是很熟悉了，该冻结什么，改什么密码，也进一步提醒了自己备份的重要性，还好之前大部分照片都备份了，就是损失了手机，用了两年1个月，结果换了个新手机，是该高兴高兴，还是该哭泣呢？不知道……:( 反正，我自己的资金–了</p><p>11月就这样悄无声息的来临了，还是按部就班的学习，每天给自己打打气，到了到了11月中旬吧，发现大家都开始找导师找毕设了，惊觉与导师的重要性，我觉得找个好导师比较重要，四处打听，其实也没打听到什么，大家好像都不怎么了解，想着要不找那个很push的老师算了，想起来pyq还有一个老师，但是感觉这个老师好厉害，估计保研的都招满了吧，不管了，先试一下，抱着试一试的态度我问了老师招不招考研的学生，没想到老师回复了我招。然后在玉米的教导下，我给老师发了我的基本信息，并表明了我想跟着老师做毕设，以后也想读老师的研究生，老师秒回，欢迎欢迎。然后老师让我去找她聊聊，这一聊，就从不到一点聊到了两点，虽然外卖凉了，但是心里好踏实，我告诉自己我告诉自己，又多了一条上岸的理由。之后老师的种种言行举止都让我觉得自己好幸运，当然我要是考上的话，那我真的好幸运。</p><p>进入进入12月后，开始变得焦虑起来，时间越来越短，而感觉自己的复习毫无进展，简单来说，就是感觉自己啥都不会，唉，现在我还是忘不了那二十多天的煎熬，疲惫的身体已经不支持7点多起来了，而身体问题频出，晚上焦虑的睡不着觉，头疼，不过我还是坚持了下来，坚持学习。12月初其实还好，每天都在做数学卷子赶进度，大概是六级之后，十五天左右，我的眼睛开始废了，每天眼睛肿胀睁不开，而压力也真的好大，自己一个人坐在一楼的沙发那里，看着书，看着看着头就炸掉了，眼泪止不住的往下流，但是我告诉自己千万不能放弃，都坚持到这里了，走下去，一定要走下去，现在想起来，我都忘不了那最后15天昏暗的日子。理了个发，去了趟校医院，医生很温柔，让我注意用眼，坚持下去，眼睛满满的好了，后脑勺又出了一个大疙瘩，根本不能抬头，觉得自己真是倒霉啊那会儿，不过现在都过去了就看起来觉得没什么了。</p><p>最后一周，王晗喊我调整作息，于是每天中午回去午睡，结果没有一天是考试时间起来的。。。不过也保证了身体不会再出现什么问题了，休息好比什么都强强。</p><p>考试前，心情却异常的平静，也不是有多平静，就是这两天一直在积极调整自己的心态，所以从发挥上来看，是没有太大的问题的，数学也算是尽力了吧，粗心的分数不会太多，能拿多少分全看老师大题怎么给分，好了好了，不说这些，总之这一年就这样以考试结束了，果然，结束的时候并不会有什么仪式感，平淡的像什么都没发生什么都没发生。一切都挺好都挺好。</p><p>感谢一直陪伴着我的人儿，自己一个人真的顶不住的，有一群和你每天哈哈哈哈的人不容易，有一个永远陪着你听你诉说的人不容易，这样看来，我还真是幸运的！</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;荒诞却又值得纪念的2020。&lt;/p&gt;</summary>
    
    
    
    <category term="随笔" scheme="https://maydaytyh.github.io/blog/categories/随笔/"/>
    
    
    <category term="个人思考" scheme="https://maydaytyh.github.io/blog/tags/个人思考/"/>
    
  </entry>
  
  <entry>
    <title>对过去以及未来学习的一些思考</title>
    <link href="https://maydaytyh.github.io/blog/2020/07/07/%E5%AF%B9%E8%BF%87%E5%8E%BB%E4%BB%A5%E5%8F%8A%E6%9C%AA%E6%9D%A5%E5%AD%A6%E4%B9%A0%E7%9A%84%E4%B8%80%E4%BA%9B%E6%80%9D%E8%80%83-md/"/>
    <id>https://maydaytyh.github.io/blog/2020/07/07/%E5%AF%B9%E8%BF%87%E5%8E%BB%E4%BB%A5%E5%8F%8A%E6%9C%AA%E6%9D%A5%E5%AD%A6%E4%B9%A0%E7%9A%84%E4%B8%80%E4%BA%9B%E6%80%9D%E8%80%83-md/</id>
    <published>2020-07-07T14:33:17.000Z</published>
    <updated>2023-01-01T12:37:26.968Z</updated>
    
    <content type="html"><![CDATA[<p>近来突然意识到自己快要步入社会了，学习确实是一件终身的事情啊。</p><a id="more"></a><p>大学三年的时光一眨眼就过去了，要说遗憾，感觉还是有的……但是毕竟都过去了，嘛，所以就总结一下，继续向前吧。</p><h2 id="关于学习"><a href="#关于学习" class="headerlink" title="关于学习"></a>关于学习</h2><p>过去的这么多年，似乎学习一直是为了考试，大学以前不必说，小城市没有太多的娱乐活动，也没有老师会教你某一门课背后蕴含的无穷奥妙，有的只是小考、中考、高考。喜欢某一门课？不排除有的朋友真的是从枯燥的应试教育背后发现某门学科的真正含义，比如有些同学对于英语、语文的热爱是真的可以上升到语言、文学层次的，这样的热爱足以支撑枯燥的应试时光。那么其他科目呢，其实刷题把这门课刷高是没有灵魂的，比如我现在慢慢意识到自己对于历史、地理都是很喜欢的，也就对政治一门不是太感兴趣，因为感觉要背的东西太多了，但是就本人而言，还是对政治方面的东西很感兴趣的（确信！）。那为什么当初不选择文科冲一冲某校呢，可能一方面是自己内心不太愿意去做这个决定，另一方面是自己当时对计算机比较感兴趣吧。好吧，上面有些扯远了，我想说的其实就是应试教育似乎也吞噬了我的大学三年，这真的是一件很可怕的事情啊。似乎对很多课失去了兴趣，而是单纯的等考试前看一看，这也造成了一次滑铁卢啊。但是也正是从那时候开始，似乎对学习更加上心了，虽然不如大佬们对待学习的热情，但是在作业层次还是尽心尽力的。但是啊，还是以分数为导向，我觉得不算好好学习。</p><p>这几天看dl的博客，发现了一句个人认为很有价值的话。</p><blockquote><p>大学课程同之前的课程一样，具备课程的基本属性：给你继续自由探索的勇气和能力。也就是说，课程的结束只是起点而已。</p></blockquote><p>所以，大学的课程，并不是这学期学完就结束了，并不是老师教你的东西就是全部，更广阔的世界是需要自己去探索的，这一个过程会耗费大量的时间，会让你娱乐的时间变少，但是确实是值得的啊。可惜我明白的太迟了。浪费了大量的时间。</p><p>所以，从现在开始，学习对我来说意义发生了变化，学习不是你获取高分的工具，学习是自己不断探索的过程，不断成长，学习不能停啊！！</p><h2 id="关于知识管理"><a href="#关于知识管理" class="headerlink" title="关于知识管理"></a>关于知识管理</h2><p>还是学习方面，自己从前的学习其实是没有层次的，学了就忘，mark的东西都是积灰，小孩子这样子可以，但是一个成年人是不是需要拥有一个属于自己的知识体系呢？其实也可以说是自己的生活轨迹。</p><p>斟酌再三，我选用了notion这款软件，page可以任意嵌套，block可以任意排列，这确实是一个理想的人生轨迹软件。</p><p>不出意外的话，日后的学习记录，精彩mark我会保存在notion中。</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;近来突然意识到自己快要步入社会了，学习确实是一件终身的事情啊。&lt;/p&gt;</summary>
    
    
    
    <category term="随笔" scheme="https://maydaytyh.github.io/blog/categories/随笔/"/>
    
    
    <category term="个人思考" scheme="https://maydaytyh.github.io/blog/tags/个人思考/"/>
    
  </entry>
  
  <entry>
    <title>操作系统实验二进程控制</title>
    <link href="https://maydaytyh.github.io/blog/2019/11/15/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E5%AE%9E%E9%AA%8C%E4%BA%8C%E8%BF%9B%E7%A8%8B%E6%8E%A7%E5%88%B6/"/>
    <id>https://maydaytyh.github.io/blog/2019/11/15/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E5%AE%9E%E9%AA%8C%E4%BA%8C%E8%BF%9B%E7%A8%8B%E6%8E%A7%E5%88%B6/</id>
    <published>2019-11-15T14:32:55.000Z</published>
    <updated>2023-01-01T12:37:17.331Z</updated>
    
    <content type="html"><![CDATA[<h2 id="操作系统课程设计实验二-进程控制"><a href="#操作系统课程设计实验二-进程控制" class="headerlink" title="操作系统课程设计实验二 进程控制"></a>操作系统课程设计实验二 进程控制</h2><h3 id="一些基本的东西"><a href="#一些基本的东西" class="headerlink" title="一些基本的东西"></a>一些基本的东西</h3><h5 id="C语言获取系统时间的函数"><a href="#C语言获取系统时间的函数" class="headerlink" title="C语言获取系统时间的函数"></a>C语言获取系统时间的函数</h5><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string">&lt;sys/time.h&gt;</span></span></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">gettimeofday</span><span class="params">(struct  timeval*tv,struct  timezone *tz )</span></span></span><br><span class="line"><span class="function"><span class="comment">//其中，时间会返回到结构体tv中，tv的结构如下</span></span></span><br><span class="line"><span class="function">    struct  timeval</span>&#123;</span><br><span class="line">       <span class="keyword">long</span>  tv_sec;<span class="comment">/*秒*/</span></span><br><span class="line">       <span class="keyword">long</span>  tv_usec;<span class="comment">/*微妙*/</span></span><br><span class="line">&#125;；</span><br><span class="line"><span class="comment">//同时，timezone为当前时区的信息，一般第二个参数置为NULL，结构体如下。</span></span><br><span class="line">    <span class="class"><span class="keyword">struct</span> <span class="title">timezone</span>&#123;</span></span><br><span class="line">        <span class="keyword">int</span> tz_minuteswest;<span class="comment">//和greenwich时间差的分钟数</span></span><br><span class="line">        <span class="keyword">int</span> tz_dsttime;<span class="comment">//夏令时校正</span></span><br><span class="line">    &#125;</span><br></pre></td></tr></table></figure><h5 id="Linux系统编程wait-函数"><a href="#Linux系统编程wait-函数" class="headerlink" title="Linux系统编程wait()函数"></a>Linux系统编程wait()函数</h5><p> wait()函数用于使父进程（也就是调用wait()的进程）阻塞，直到一个子进程结束或者该进程接收到了一个指定的信号为止。如果该父进程没有子进程或者它的子进程已经结束，则wait()函数就会立即返回。 </p><h5 id="Windows进程相关结构体-STARTUPINFO"><a href="#Windows进程相关结构体-STARTUPINFO" class="headerlink" title="Windows进程相关结构体 STARTUPINFO"></a>Windows进程相关结构体 STARTUPINFO</h5><p> 用于指定新进程的主窗口特性的一个结构。 </p>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;操作系统课程设计实验二-进程控制&quot;&gt;&lt;a href=&quot;#操作系统课程设计实验二-进程控制&quot; class=&quot;headerlink&quot; title=&quot;操作系统课程设计实验二 进程控制&quot;&gt;&lt;/a&gt;操作系统课程设计实验二 进程控制&lt;/h2&gt;&lt;h3 id=&quot;一些基本的东西&quot;&gt;</summary>
      
    
    
    
    <category term="课程" scheme="https://maydaytyh.github.io/blog/categories/课程/"/>
    
    <category term="操作系统" scheme="https://maydaytyh.github.io/blog/categories/课程/操作系统/"/>
    
    
    <category term="进程控制" scheme="https://maydaytyh.github.io/blog/tags/进程控制/"/>
    
  </entry>
  
</feed>
