<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>个人的问题清单</title>
  
  
  <link href="/atom.xml" rel="self"/>
  
  <link href="https://dashage.github.io/"/>
  <updated>2019-01-02T22:50:50.913Z</updated>
  <id>https://dashage.github.io/</id>
  
  <author>
    <name>秦风</name>
    
  </author>
  
  <generator uri="http://hexo.io/">Hexo</generator>
  
  <entry>
    <title>Mac小技巧</title>
    <link href="https://dashage.github.io/2019/01/03/Mac%E5%B0%8F%E6%8A%80%E5%B7%A7/"/>
    <id>https://dashage.github.io/2019/01/03/Mac小技巧/</id>
    <published>2019-01-02T22:50:50.912Z</published>
    <updated>2019-01-02T22:50:50.913Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>如何不间断的播放音频<br> $ mplayer -loop 0 和钉宫理惠一起学习五十音.mp3 </p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;link rel=&quot;stylesheet&quot; class=&quot;aplayer-secondary-style-marker&quot; href=&quot;/assets/css/APlayer.min.css&quot;&gt;&lt;script src=&quot;/assets/js/APlayer.min.js&quot; cla
      
    
    </summary>
    
      <category term="Mac" scheme="https://dashage.github.io/categories/Mac/"/>
    
    
      <category term="Mac" scheme="https://dashage.github.io/tags/Mac/"/>
    
  </entry>
  
  <entry>
    <title>Linux操作审计</title>
    <link href="https://dashage.github.io/2019/01/01/Linux%E6%93%8D%E4%BD%9C%E5%AE%A1%E8%AE%A1/"/>
    <id>https://dashage.github.io/2019/01/01/Linux操作审计/</id>
    <published>2019-01-01T11:37:52.242Z</published>
    <updated>2019-01-01T11:37:52.242Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><h1 id="linux-增加审计功能"><a href="#linux-增加审计功能" class="headerlink" title="linux 增加审计功能"></a>linux 增加审计功能</h1><h2 id="方法1-重新编译bash"><a href="#方法1-重新编译bash" class="headerlink" title="方法1 重新编译bash"></a>方法1 重新编译bash</h2><p>Build Rpm</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">已经验证支持, centos6,7 .</span><br></pre></td></tr></table></figure><p>Create Build User</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">useradd rpmbuilder</span><br></pre></td></tr></table></figure><p>Set Topdir And Directory</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></pre></td><td class="code"><pre><span class="line">su -  rpmbuilder</span><br><span class="line"></span><br><span class="line">cat &gt; .rpmmacros &lt;&lt; &apos;EOF&apos;</span><br><span class="line">%_topdir   /home/rpmbuilder/rpmbuild</span><br><span class="line">EOF</span><br><span class="line"></span><br><span class="line">mkdir -p  ~/rpmbuild/&#123;BUILD,RPMS,SOURCES,SPECS,SRPMS&#125;</span><br></pre></td></tr></table></figure><p>Builder Bash Rpm</p><p>Down Source File</p><figure class="highlight plain"><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">cd  ~/rpmbuild/SOURCES</span><br><span class="line">wget https://ftp.gnu.org/gnu/bash/bash-4.3.30.tar.gz</span><br></pre></td></tr></table></figure><p>Change Source File</p><blockquote><p>1 修改源码包(增加记录功能)</p></blockquote><p>cd /usr/local/src/bash-4.3.30<br>vim bashhist.c</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><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></pre></td><td class="code"><pre><span class="line">#########change##############</span><br><span class="line">#if defined (SYSLOG_HISTORY)</span><br><span class="line">#define SYSLOG_MAXLEN 600</span><br><span class="line"></span><br><span class="line">void</span><br><span class="line">bash_syslog_history (line)</span><br><span class="line">     const char *line;</span><br><span class="line">&#123;</span><br><span class="line">  char trunc[SYSLOG_MAXLEN];</span><br><span class="line"></span><br><span class="line">  if (strlen(line) &lt; SYSLOG_MAXLEN)</span><br><span class="line">    syslog (SYSLOG_FACILITY|SYSLOG_LEVEL, &quot;HISTORY: PID=%d UID=%d %s&quot;, getpid(), current_user.uid, line);</span><br><span class="line">  else</span><br><span class="line">    &#123;</span><br><span class="line">      strncpy (trunc, line, SYSLOG_MAXLEN);</span><br><span class="line">      trunc[SYSLOG_MAXLEN - 1] = &apos;\0&apos;;</span><br><span class="line">      syslog (SYSLOG_FACILITY|SYSLOG_LEVEL, &quot;HISTORY (TRUNCATED): PID=%d UID=%d %s&quot;, getpid(), current_user.uid, trunc);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line">#endif</span><br><span class="line"></span><br><span class="line">########## to  ###########</span><br><span class="line">#if defined (SYSLOG_HISTORY)</span><br><span class="line">#define SYSLOG_MAXLEN 600</span><br><span class="line"></span><br><span class="line">void</span><br><span class="line">bash_syslog_history (line)</span><br><span class="line">     const char *line;</span><br><span class="line">&#123;</span><br><span class="line">  char trunc[SYSLOG_MAXLEN];</span><br><span class="line"></span><br><span class="line">  if (strlen(line) &lt; SYSLOG_MAXLEN)</span><br><span class="line">      syslog (SYSLOG_FACILITY|SYSLOG_LEVEL, &quot;HISTORY: PPID=%d PID=%d SID=%d UID=%d User=%s CMD=%s&quot;, getppid(), getpid(), getsid(getpid()), current_user.uid, current_user.user_name, line);</span><br><span class="line">  else</span><br><span class="line">    &#123;</span><br><span class="line">      strncpy (trunc, line, SYSLOG_MAXLEN);</span><br><span class="line">      trunc[SYSLOG_MAXLEN - 1] = &apos;\0&apos;;</span><br><span class="line">      syslog (SYSLOG_FACILITY|SYSLOG_LEVEL, &quot;HISTORY (TRUNCATED): PPID=%d PID=%d SID=%d UID=%d User=%s %s&quot;, getppid(), getpid(), getsid(getpid()), current_user.uid, current_user.user_name, trunc);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line">#endif</span><br></pre></td></tr></table></figure><p>vim config-top.h</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><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">#######  change #########</span><br><span class="line"></span><br><span class="line">/* Define if you want each line saved to the history list in bashhist.c:</span><br><span class="line">   bash_add_history() to be sent to syslog(). */</span><br><span class="line">/* #define SYSLOG_HISTORY */</span><br><span class="line">#if defined (SYSLOG_HISTORY)</span><br><span class="line">#  define SYSLOG_FACILITY LOG_USER</span><br><span class="line">#  defin</span><br><span class="line"></span><br><span class="line">#######  to #############</span><br><span class="line">/* Define if you want each line saved to the history list in bashhist.c:</span><br><span class="line">   bash_add_history() to be sent to syslog(). */</span><br><span class="line">#define SYSLOG_HISTORY </span><br><span class="line">#if defined (SYSLOG_HISTORY)</span><br><span class="line">#  define SYSLOG_FACILITY LOG_USER</span><br><span class="line">#  defin</span><br></pre></td></tr></table></figure><blockquote><p>2 重新压缩成 tar 包<br><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></pre></td><td class="code"><pre><span class="line">cd /home/rpmbuilder/rpmbuild/SOURCES</span><br><span class="line">rm -rf bash-4.3.30.tar.gz</span><br><span class="line">tar -zcvf bash-4.3.30.tar.gz bash-4.3.30</span><br></pre></td></tr></table></figure></p></blockquote><p>Create Spec File</p><p>rpmbuild命令根据spec文件来制作合适的rpm包,spec文件一般包括以下几个处理阶段</p><blockquote><p>Introduction Section<br>Prep Section<br>Build Section<br>Install Section<br>Clean Section</p></blockquote><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><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></pre></td><td class="code"><pre><span class="line">Name:           bash</span><br><span class="line">Version:        4.3.30</span><br><span class="line">Release:        4%&#123;?dist&#125;</span><br><span class="line">Summary:        bash with recod command</span><br><span class="line"></span><br><span class="line">Group:          System Environment/Base</span><br><span class="line">License:        GPLv2</span><br><span class="line">URL:            https://ftp.gnu.org/gnu/bash/bash-4.3.30.tar.gz</span><br><span class="line">Source0:        %&#123;name&#125;-%&#123;version&#125;.tar.gz</span><br><span class="line">BuildRoot:      %_topdir/BUILDROOT </span><br><span class="line"></span><br><span class="line">BuildRequires:  gcc,make</span><br><span class="line">#Requires:       </span><br><span class="line"></span><br><span class="line">%description</span><br><span class="line">编译 bash 带记录 user command </span><br><span class="line"></span><br><span class="line">%prep</span><br><span class="line">%setup -q</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">%build</span><br><span class="line">./configure</span><br><span class="line"></span><br><span class="line">make %&#123;?_smp_mflags&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">%install</span><br><span class="line">rm -rf %&#123;buildroot&#125;</span><br><span class="line">make install DESTDIR=%&#123;buildroot&#125;</span><br><span class="line"></span><br><span class="line">%pre </span><br><span class="line"></span><br><span class="line">%post </span><br><span class="line">   %&#123;__mv&#125; /bin/bash /bin/bashbak 2&gt; /dev/null </span><br><span class="line">   %&#123;__cp&#125; -f /usr/local/bin/bash /bin/bash 2&gt; /dev/null </span><br><span class="line"></span><br><span class="line">%preun </span><br><span class="line">    %&#123;__rm&#125;  /bin/bash 2&gt; /dev/null</span><br><span class="line">    %&#123;__mv&#125; /bin/bashbak /bin/bash 2&gt; /dev/null</span><br><span class="line"></span><br><span class="line">%postun</span><br><span class="line"></span><br><span class="line">%clean</span><br><span class="line">rm -rf %&#123;buildroot&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">%files</span><br><span class="line">%defattr(-,root,root,-)</span><br><span class="line">/usr/local/</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">%changelog</span><br><span class="line">*  Fri Dec 30 2015 Junun  &lt;470499989@qq.com&gt; - 4.3.30-4</span><br><span class="line">-  change </span><br><span class="line">*  Fri Dec 29 2015 Junun  &lt;470499989@qq.com&gt; - 4.3.30-3</span><br><span class="line">-  add  ln  bash</span><br><span class="line">*  Fri Dec 29 2015 Junun  &lt;470499989@qq.com&gt; - 4.3.30-2</span><br><span class="line">- change not install </span><br><span class="line">*  Fri Dec 29 2015 Junun  &lt;470499989@qq.com&gt; - 4.3.30-1 </span><br><span class="line">- Initial version</span><br></pre></td></tr></table></figure><p>Build RPM</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">rpmbuild -ba  SPECS/bash.spec</span><br></pre></td></tr></table></figure><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">rpm -ivh bash-4.3.30-4.el7.centos.x86_64.rpm</span><br></pre></td></tr></table></figure><p>Bash 操作收集和分析</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">通过日志收集客户端把 bash 执行命令放到日志系统, 如 splunk 或者 ELK, 分析和告警等其他操作.</span><br></pre></td></tr></table></figure><h2 id="方法2-定义bash脚本"><a href="#方法2-定义bash脚本" class="headerlink" title="方法2  定义bash脚本"></a>方法2  定义bash脚本</h2><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><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"># vim /etc/profile.d/bash.sh</span><br><span class="line">export HISTTIMEFORMAT=&quot;[`whoami`] [`who am i 2&gt;/dev/null | awk &apos;&#123;print $NF&#125;&apos;|sed -e &apos;s/[()]//g&apos;`] &quot;</span><br><span class="line">export PROMPT_COMMAND=&apos;\</span><br><span class="line">if [ -z &quot;$OLD_PWD&quot; ];then</span><br><span class="line">        export OLD_PWD=$PWD;</span><br><span class="line">fi;</span><br><span class="line">if [ ! -z &quot;$LAST_CMD&quot; ] &amp;&amp; [ &quot;$(history 1)&quot; != &quot;$LAST_CMD&quot; ]; then</span><br><span class="line">        logger -t shell_cmd &quot;[$OLD_PWD]$(history 1)&quot;;</span><br><span class="line">fi;</span><br><span class="line">export LAST_CMD=&quot;$(history 1)&quot;;</span><br><span class="line">export OLD_PWD=$PWD;&apos;</span><br><span class="line"></span><br><span class="line"># source /etc/profile.d/bash.sh</span><br></pre></td></tr></table></figure>]]></content>
    
    <summary type="html">
    
      
      
        &lt;link rel=&quot;stylesheet&quot; class=&quot;aplayer-secondary-style-marker&quot; href=&quot;/assets/css/APlayer.min.css&quot;&gt;&lt;script src=&quot;/assets/js/APlayer.min.js&quot; cla
      
    
    </summary>
    
      <category term="linux" scheme="https://dashage.github.io/categories/linux/"/>
    
    
      <category term="syslog" scheme="https://dashage.github.io/tags/syslog/"/>
    
  </entry>
  
  <entry>
    <title>MYSQL基础</title>
    <link href="https://dashage.github.io/2019/01/01/MYSQL%E5%9F%BA%E7%A1%80/"/>
    <id>https://dashage.github.io/2019/01/01/MYSQL基础/</id>
    <published>2019-01-01T03:54:36.818Z</published>
    <updated>2019-01-01T08:29:12.633Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><h3 id="SQL-语言分类"><a href="#SQL-语言分类" class="headerlink" title="SQL 语言分类"></a>SQL 语言分类</h3><ul><li>数据定义语言：简称DDL（Data Definition Language），用来定义数据库对象：数据库，表，列等。关键字：create，alter，drop等。</li><li>数据操作语言：简称DML（Data Manipulation Language），用来对数据库中表的记录进行更新。关键字：insert，delete，update等。</li><li>数据控制语言：简称DCL（Data Control Language），用来定义数据库的访问权限和安全级别，及创建用户。</li><li>数据查询语言：简称DQL（Data Query Language），用来查询数据库中表的记录。关键字：select，from，where 等。</li></ul><h3 id="SQL-数据类型分类"><a href="#SQL-数据类型分类" class="headerlink" title="SQL 数据类型分类"></a>SQL 数据类型分类</h3><ul><li>int：整型<ul><li>tinyint：很小的整数</li><li>smallint：小的整数</li><li>mediumint：中等大小的整数</li><li>int：普通大小的整数</li></ul></li><li>double：浮点型<ul><li>float：单精度浮点数</li><li>double：双精度浮点数</li><li>decimal(m,d)：严格压缩的定点数</li></ul></li><li>varchar：可变字符型<ul><li>char(M)：M 为0～255之间的整数</li><li>varchar：M 为0～65535之间的整数</li><li>tinyblob：允许长度为0~255字节</li><li>blob：允许长度为0～65535之间的整数</li></ul></li><li>date：日期类型<ul><li>year：YYYY：1901～2155</li><li>time：HH:MM:SS</li><li>date：YYYY-MM-DD</li><li>datetime：YYYY-MM-DD HH:MM:SS</li><li>timestamp：YYYY-MM-DD HH:MM:SS</li></ul></li></ul><h3 id="数据库常用操作"><a href="#数据库常用操作" class="headerlink" title="数据库常用操作"></a>数据库常用操作</h3><ul><li>创建数据库</li></ul><figure class="highlight"><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"><span class="keyword">create</span> <span class="keyword">database</span> databasename <span class="built_in">character</span> <span class="keyword">set</span> (<span class="built_in">character</span> <span class="keyword">set</span>);//创建数据库并指定字符集</span><br><span class="line">&gt; create database mydatabase character set utf8;</span><br></pre></td></tr></table></figure><ul><li>显示数据库</li></ul><figure class="highlight"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&gt; show databses;</span><br></pre></td></tr></table></figure><ul><li>删除数据库</li></ul><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&gt; drop database mydatabase;</span><br></pre></td></tr></table></figure><ul><li>切换数据库</li></ul><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&gt; use mydatabase;</span><br></pre></td></tr></table></figure><ul><li>表创建</li></ul><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><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">create table tablename(</span><br><span class="line">row_name1  datatype constraint,//row_name1, 列名</span><br><span class="line">row_name2  datatype constraint,//datatype, 数据类型</span><br><span class="line">......</span><br><span class="line">row_name2  datatype constraint//constraint, 约束</span><br><span class="line">  );</span><br><span class="line">  </span><br><span class="line">&gt; create table users(</span><br><span class="line">  uid int,</span><br><span class="line">    uname varchar(20),</span><br><span class="line">    useraddress varchar(200)</span><br><span class="line">  );</span><br></pre></td></tr></table></figure><ul><li>删除表</li></ul><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&gt; drop table users;</span><br></pre></td></tr></table></figure><ul><li>主键约束</li></ul><!--SQL 的主键约束：主键是用来标识当前记录的字段。它的特点是非空，唯一。在开发中一般情况下是不具备任何含义，只是用于标识当前记录。--><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><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">create table tablename(</span><br><span class="line">row_name1 int primary key,//在创建表时创建主键,在字段后面加上 &apos;primary key&apos;</span><br><span class="line">......</span><br><span class="line">);</span><br><span class="line"></span><br><span class="line">create table users(</span><br><span class="line">uid int primary key auto_increment,//auto_increment 实现主键的uid 的自动增长</span><br><span class="line">    uname varchar(20),</span><br><span class="line">    useraddress varchar(200 )</span><br><span class="line">);</span><br></pre></td></tr></table></figure><ul><li>查看表</li></ul><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&gt; show tables;</span><br></pre></td></tr></table></figure><ul><li>查看表格式</li></ul><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&gt; desc users;</span><br></pre></td></tr></table></figure><h4 id="修改表结构"><a href="#修改表结构" class="headerlink" title="修改表结构"></a>修改表结构</h4><ul><li>添加列</li></ul><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></pre></td><td class="code"><pre><span class="line">alter table tablename  add row_name datatype constraint;</span><br><span class="line"></span><br><span class="line">alter table users add tel int;</span><br></pre></td></tr></table></figure><ul><li>修改列</li></ul><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></pre></td><td class="code"><pre><span class="line">alter table tablename modify row_name datatype constraint;</span><br><span class="line"></span><br><span class="line">alter table users modify tel varchar(50);</span><br></pre></td></tr></table></figure><ul><li>修改表明</li></ul><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></pre></td><td class="code"><pre><span class="line">alter table tablename change old_row new_row datatype constraint;</span><br><span class="line"></span><br><span class="line">alter table users change tel telphone double;</span><br></pre></td></tr></table></figure><ul><li>删除列</li></ul><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></pre></td><td class="code"><pre><span class="line">alter table tablename drop row_name;</span><br><span class="line"></span><br><span class="line">alter table users drop telphone;</span><br></pre></td></tr></table></figure><ul><li><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></pre></td><td class="code"><pre><span class="line">rename table old_table to new_table;</span><br><span class="line"></span><br><span class="line">rename table users to user;</span><br></pre></td></tr></table></figure></li><li><p>数据库表中添加数据</p></li></ul><p><strong>商品表</strong>：<code>product</code></p><table><thead><tr><th style="text-align:center">id  (primary key,int)</th><th style="text-align:center">name(varchar(100))</th><th style="text-align:center">price(double)</th></tr></thead><tbody><tr><td style="text-align:center">1</td><td style="text-align:center">笔记本</td><td style="text-align:center">22</td></tr><tr><td style="text-align:center">2</td><td style="text-align:center">Google Pixel3</td><td style="text-align:center">8800</td></tr><tr><td style="text-align:center">3</td><td style="text-align:center">RedMi 5A</td><td style="text-align:center">400</td></tr></tbody></table><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></pre></td><td class="code"><pre><span class="line">&gt; create table product(</span><br><span class="line">id int primary key auto_increment,</span><br><span class="line">name varchar(100) not null,</span><br><span class="line">price double</span><br><span class="line">);</span><br></pre></td></tr></table></figure><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></pre></td><td class="code"><pre><span class="line">insert into table_name(row_name1,row_name2...) values(value1,value2...);</span><br><span class="line"></span><br><span class="line">insert into product(id,name,price) values(1,&apos;笔记本&apos;,&apos;22&apos;);</span><br><span class="line">insert into product(id,name,price) values(2,&apos;Google Pixel3&apos;,&apos;8800&apos;);</span><br><span class="line">insert into product(name,price) values(&apos;RedMi 5A&apos;,&apos;400&apos;);</span><br></pre></td></tr></table></figure><ul><li>数据库表中修改数据</li></ul><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></pre></td><td class="code"><pre><span class="line">update table_name set row1_name=&apos;value1&apos;,row2_name=&apos;value2&apos; where condition</span><br><span class="line"></span><br><span class="line">update product set price=30 where id=1;</span><br><span class="line">update product set price=2000 where id=2 or id=3;</span><br></pre></td></tr></table></figure><ul><li>数据库表中删除数据</li></ul><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></pre></td><td class="code"><pre><span class="line">delete from table_name where condiction;</span><br><span class="line"></span><br><span class="line">delete from product where id=3;</span><br></pre></td></tr></table></figure><ul><li>SQL 查询语句</li></ul><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></pre></td><td class="code"><pre><span class="line">create table zhangwu(</span><br><span class="line">id int primary key auto_increment,</span><br><span class="line">    names varchar(200),</span><br><span class="line">    money double</span><br><span class="line">    );</span><br></pre></td></tr></table></figure><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">insert into zhangwu(names,money)values(&apos;服装支出&apos;,1000),(&apos;吃饭支出&apos;,325),(&apos;股票收入&apos;,8000),(&apos;打麻将支出&apos;,8000);</span><br></pre></td></tr></table></figure><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">select id,names,money from zhangwu;//查询指定列的数据</span><br></pre></td></tr></table></figure><ul><li>条件查询</li></ul><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></pre></td><td class="code"><pre><span class="line">selete row_name from table_name where condition;</span><br><span class="line"></span><br><span class="line">select id,names,money from zhangwu where money &gt; 5000;</span><br></pre></td></tr></table></figure>]]></content>
    
    <summary type="html">
    
      
      
        &lt;link rel=&quot;stylesheet&quot; class=&quot;aplayer-secondary-style-marker&quot; href=&quot;/assets/css/APlayer.min.css&quot;&gt;&lt;script src=&quot;/assets/js/APlayer.min.js&quot; cla
      
    
    </summary>
    
      <category term="数据库" scheme="https://dashage.github.io/categories/%E6%95%B0%E6%8D%AE%E5%BA%93/"/>
    
    
      <category term="MYSQL" scheme="https://dashage.github.io/tags/MYSQL/"/>
    
  </entry>
  
  <entry>
    <title>C++基础</title>
    <link href="https://dashage.github.io/2019/01/01/C++%E5%9F%BA%E7%A1%80/"/>
    <id>https://dashage.github.io/2019/01/01/C++基础/</id>
    <published>2018-12-31T23:21:07.407Z</published>
    <updated>2019-01-01T11:31:02.992Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><h1 id="C-多维数组"><a href="#C-多维数组" class="headerlink" title="C++ 多维数组"></a>C++ 多维数组</h1><p>C++ 支持多维数组。多维数据声明的一般形式如下：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">type name[size1][size2]...[sizeN];</span><br></pre></td></tr></table></figure><p>例如，下面的声明创建了一个三维5.10.4 整型数组:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">int threedim[5][10][4];</span><br></pre></td></tr></table></figure><p>二维数组</p><p>多维数组最简单的形式是二维数据，一个二维数组，在本质上，是一个一维数组的列表。申明一个 x 行 y 列的二维整型数组，形式如下:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">type arrayName [ x ] [ y ];</span><br></pre></td></tr></table></figure><p>其中，type 可以是任意有效的 C++ 数据类型, arrayName 是一个有效的 C++ 标识符。一个二维数组可以被认为是一个带有 x 行和 y 列的表格。下面是一个二维数组，包含 3 行和 4 列:</p><table><thead><tr><th></th><th>Column 0</th><th>Column 1</th><th>Column 2</th><th>Column 3</th></tr></thead><tbody><tr><td>Row 0</td><td>a[0][0]</td><td>a[0][1]</td><td>a[0][2]</td><td>a[0][3]</td></tr><tr><td>Row 1</td><td>a[1][0]</td><td>a[1][1]</td><td>a[1][2]</td><td>a[1][3]</td></tr><tr><td>Row 2</td><td>a[2][0]</td><td>a[2][1]</td><td>a[2][2]</td><td>a[2][3]</td></tr></tbody></table><p>因此，数组中的每个元素是使用形式为a[i,j] 的元素名称来标识，其中 a 是数组名称，i 和 j 是唯一标示 a 中每个元素的下标。</p><p>初始化二维数组</p><p>多维数组可以通过在括号内为每行指定值来进行初始化。下面是一个带有 3 行 4 列的数组。</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></pre></td><td class="code"><pre><span class="line"><span class="keyword">int</span> a[<span class="number">3</span>][<span class="number">4</span>] = &#123;</span><br><span class="line">    &#123;<span class="number">0</span>, <span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>&#125;,<span class="comment">//初始化索引号为 0 的行</span></span><br><span class="line">    &#123;<span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>, <span class="number">7</span>&#125;,<span class="comment">//初始化索引号为 1 的行</span></span><br><span class="line">    &#123;<span class="number">8</span>, <span class="number">9</span>, <span class="number">10</span>, <span class="number">11</span>&#125;<span class="comment">//初始化索引号为 2 的行</span></span><br><span class="line">&#125;;</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></pre></td><td class="code"><pre><span class="line">int a[3][4] = &#123;0,1,2,3,4,5,6,7,8,9,10,11&#125;</span><br></pre></td></tr></table></figure><p>访问二维数组元素</p><p>二维数组中的元素是通过使用下标（即数组的行索引和列索引）来访问的。例如:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">int val = a[2][3];</span><br></pre></td></tr></table></figure><p>上面的语句将获取数组中第3行第4个元素。您可以通过上面的示意图来进行验证。让我们来看看下面的程序，我们将使用嵌套循环来处理二维数组:</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></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">    <span class="keyword">int</span> a[<span class="number">5</span>][<span class="number">2</span>] &#123;</span><br><span class="line">        &#123;<span class="number">0</span>,<span class="number">1</span>&#125;,</span><br><span class="line">        &#123;<span class="number">1</span>,<span class="number">2</span>&#125;,</span><br><span class="line">        &#123;<span class="number">3</span>,<span class="number">4</span>&#125;,</span><br><span class="line">        &#123;<span class="number">5</span>,<span class="number">6</span>&#125;,</span><br><span class="line">        &#123;<span class="number">7</span>,<span class="number">8</span>&#125;</span><br><span class="line">    &#125;;</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">for</span> ( <span class="keyword">int</span> i = <span class="number">0</span>; i &lt; <span class="number">5</span>; i++ )</span><br><span class="line">        <span class="keyword">for</span> ( <span class="keyword">int</span> j = <span class="number">0</span>; j &lt; <span class="number">2</span>; j++ ) &#123;</span><br><span class="line">            <span class="built_in">cout</span> &lt;&lt; <span class="string">"a["</span> &lt;&lt; i &lt;&lt;<span class="string">"] ["</span> &lt;&lt; j &lt;&lt; <span class="string">"]: "</span>;</span><br><span class="line">            <span class="built_in">cout</span> &lt;&lt; a[i][j] &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line">        &#125;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;;</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><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">a[0] [0]: 0</span><br><span class="line">a[0] [1]: 1</span><br><span class="line">a[1] [0]: 1</span><br><span class="line">a[1] [1]: 2</span><br><span class="line">a[2] [0]: 3</span><br><span class="line">a[2] [1]: 4</span><br><span class="line">a[3] [0]: 5</span><br><span class="line">a[3] [1]: 6</span><br><span class="line">a[4] [0]: 7</span><br><span class="line">a[4] [1]: 8</span><br></pre></td></tr></table></figure><p>如上所述，您可以创建任意维度的数组，但是一般情况下，我们创建的数组是一维数组和二维数组。</p><h1 id="C-类成员函数"><a href="#C-类成员函数" class="headerlink" title="C++ 类成员函数"></a>C++ 类成员函数</h1><p>类的成员函数是指那些把定义和原型写在类定义内部的函数，就像类定义中的其他变量一样。类成员函数是类的一个成员，它可以操作类的任意对象，可以访问对象中的所有成员。</p><p>让我们看看之前定义的类 Box，现在我们要使用成员函数来访问类的成员，而不是直接访问这些类的成员：</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></pre></td><td class="code"><pre><span class="line">class Box</span><br><span class="line">&#123;</span><br><span class="line">    public:</span><br><span class="line">    double length;//长度</span><br><span class="line">    double breadth;//宽度</span><br><span class="line">    double height;//高度</span><br><span class="line">    double getVolume(void);//返回体积</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><p>成员函数可以定义在类定义内部，或者单独使用范围解析运算符 <code>::</code> 来定义。在类定义中定义的成员函数把函数声明为内联的，即便没有使用 inline 标识符。所以您可以按照如下方式定义 Volume() 函数:</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><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">class Box</span><br><span class="line">&#123;</span><br><span class="line">    public:</span><br><span class="line">    double length;//长度</span><br><span class="line">    double breadth;//宽度</span><br><span class="line">    double height;//高度</span><br><span class="line">    </span><br><span class="line">    double GetVolume(void)</span><br><span class="line">    &#123;</span><br><span class="line">            return Length * breadth * height;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>您也可以在类的外部使用范围解析运算符 <code>::</code> 定义该函数，如下所示:</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></pre></td><td class="code"><pre><span class="line">double Box::getVolume(void)</span><br><span class="line">&#123;</span><br><span class="line">    return length * breadth * height;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>在这里，需要强调一点，在 <code>::</code> 运算符之前必须使用类名。调用成员函数是在对象上使用点运算符(.)，这样它就能操作与该对象相关的数据，如下所示：</p><figure class="highlight plain"><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">Box myBox;//创建一个对象</span><br><span class="line">myBox.GetVolume();//调用该对象的成员函数</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><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></pre></td><td class="code"><pre><span class="line">#include &lt;iostream&gt;</span><br><span class="line"></span><br><span class="line">using namespace std;</span><br><span class="line"></span><br><span class="line">class Box&#123;</span><br><span class="line">public:</span><br><span class="line">    double length;      //长度</span><br><span class="line">    double breadth;     //宽度</span><br><span class="line">    double height;      //高度</span><br><span class="line">    </span><br><span class="line">    </span><br><span class="line">    //成员函数申明</span><br><span class="line">    double getVolume(void);</span><br><span class="line">    void setLength( double len );</span><br><span class="line">    void setBreadth( double bre );</span><br><span class="line">    void setHeight( double hei );</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line">//成员函数定义</span><br><span class="line"></span><br><span class="line">double Box::getVolume(void)&#123;</span><br><span class="line">    return length * breadth * height;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line">void Box::setLength( double len )&#123;</span><br><span class="line">    length = len;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">void Box::setBreadth( double bre )&#123;</span><br><span class="line">    breadth = bre;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line">void Box::setHeight( double hei )&#123;</span><br><span class="line">    height = hei;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">//程序的主函数</span><br><span class="line"></span><br><span class="line">int main()&#123;</span><br><span class="line">    Box Box1;   //声明 Box1, 类型为 Box</span><br><span class="line">    Box Box2;   //声明 Box2, 类型为 Box</span><br><span class="line">    double volume = 0.0;    //用来存储体积</span><br><span class="line">    </span><br><span class="line">    // box 1 详述</span><br><span class="line">    Box1.setLength(6.0);</span><br><span class="line">    Box1.setBreadth(7.0);</span><br><span class="line">    Box1.setHeight(5.0);</span><br><span class="line">    </span><br><span class="line">    // box 2 详述</span><br><span class="line">    Box2.setLength(12.0);</span><br><span class="line">    Box2.setBreadth(13.0);</span><br><span class="line">    Box2.setHeight(10.0);</span><br><span class="line">    </span><br><span class="line">    // box 1 的体积</span><br><span class="line">    volume = Box1.getVolume();</span><br><span class="line">    cout &lt;&lt; &quot;Box1 的体积: &quot; &lt;&lt; volume &lt;&lt;endl;</span><br><span class="line">    </span><br><span class="line">    // box 2 的体积</span><br><span class="line">    volume = Box2.getVolume();</span><br><span class="line">    cout &lt;&lt; &quot;Box2 的体积: &quot; &lt;&lt; volume &lt;&lt;endl;</span><br><span class="line">    return 0;</span><br><span class="line">&#125;;</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></pre></td><td class="code"><pre><span class="line">Box1 的体积: 210</span><br><span class="line">Box2 的体积: 1560</span><br></pre></td></tr></table></figure><h1 id="C-变量作用域"><a href="#C-变量作用域" class="headerlink" title="C++ 变量作用域"></a>C++ 变量作用域</h1><p>作用域是程序的一个区域，一般来说有三个地方可以声明变量：</p><ul><li>在函数或一个代码块内部声明的变量，称为局部变量。</li><li>在函数参数得定义中声明的变量，称为形式参数。</li><li>在所有函数外部声明的变量，称为全局变量。</li></ul><p>我们将在后续的章节中学习什么是函数和参数。本章我们先来讲解声明是局部变量和全局变量。</p><h2 id="局部变量"><a href="#局部变量" class="headerlink" title="局部变量"></a>局部变量</h2><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">#include &lt;iostream&gt;</span><br><span class="line">using namespace std;</span><br><span class="line"></span><br><span class="line">int main()&#123;</span><br><span class="line">    int a = 10, b = 20, c;</span><br><span class="line">    c = a + b;</span><br><span class="line">    cout &lt;&lt; c &lt;&lt; endl;</span><br><span class="line">    return 0;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h2 id="全局变量"><a href="#全局变量" class="headerlink" title="全局变量"></a>全局变量</h2><p>在所有函数外部定义的变量（通常是在程序的头部），称为全局变量。全局变量的值在程序的整个生命周期内都是有效的。</p><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><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">#include &lt;iostream&gt;</span><br><span class="line">using namespace std;</span><br><span class="line"></span><br><span class="line">int g;</span><br><span class="line"></span><br><span class="line">int main()&#123;</span><br><span class="line">    int a = 10, b = 20;</span><br><span class="line">    g = a + b;</span><br><span class="line">    </span><br><span class="line">    cout &lt;&lt; g &lt;&lt; endl;</span><br><span class="line">    return 0;</span><br><span class="line">&#125;;</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><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">#include &lt;iostream&gt;</span><br><span class="line">using namespace std;</span><br><span class="line"></span><br><span class="line">int g = 20;</span><br><span class="line"></span><br><span class="line">int main()&#123;</span><br><span class="line">    int g = 10;</span><br><span class="line">    </span><br><span class="line">    cout &lt;&lt; g &lt;&lt; endl;</span><br><span class="line">&#125;;</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></pre></td><td class="code"><pre><span class="line">10</span><br></pre></td></tr></table></figure><h2 id="初始化局部变量和全局变量"><a href="#初始化局部变量和全局变量" class="headerlink" title="初始化局部变量和全局变量"></a>初始化局部变量和全局变量</h2><p>当局部变量被定义时，系统不会对其初始化，您必须自行对其初始化。定义全局变量时，系统会自动初始化为下列值：</p><table><thead><tr><th style="text-align:center">数据类型</th><th style="text-align:center">初始化默认值</th></tr></thead><tbody><tr><td style="text-align:center">int</td><td style="text-align:center">0</td></tr><tr><td style="text-align:center">char</td><td style="text-align:center">‘\0’</td></tr><tr><td style="text-align:center">float</td><td style="text-align:center">0</td></tr><tr><td style="text-align:center">double</td><td style="text-align:center">0</td></tr><tr><td style="text-align:center">pointer</td><td style="text-align:center">NULL</td></tr></tbody></table><p>正确地初始化变量是一个良好的编程习惯，否则有时候程序可能会产生意想不到的结果。</p><h1 id="C-指针"><a href="#C-指针" class="headerlink" title="C++ 指针"></a>C++ 指针</h1><p>学习C++ 的指针既简单又有趣。通过指针，可以简化一些C++ 编程任务的执行，还有一些任务，如动态内存分配，没有指针时无法执行的。所以，想要成为一名优秀的C++ 程序员，学习指针时很有必要的。</p><p>正如您所知道的，每一个变量都有一个内存位置，每一个内存位置都定义了可使用连字号（&amp;） 运算符访问的地址，它表示了在内存中的一个地址。请看下面的实例，它将输出定义的变量地址：</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><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">#include &lt;iostream&gt;</span><br><span class="line"></span><br><span class="line">using namespace std;</span><br><span class="line"></span><br><span class="line">int main()&#123;</span><br><span class="line">    int var1;</span><br><span class="line">    char var2[10];</span><br><span class="line">    </span><br><span class="line">    cout &lt;&lt; &quot;var1 变量的地址: &quot; &lt;&lt; &amp;var1 &lt;&lt; endl;</span><br><span class="line">    cout &lt;&lt; &quot;var2 变量的地址: &quot; &lt;&lt; &amp;var2 &lt;&lt; endl;</span><br><span class="line">    </span><br><span class="line">    return 0;</span><br><span class="line">&#125;;</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></pre></td><td class="code"><pre><span class="line">var1 变量的地址: 0x7ffeefbff540</span><br><span class="line">var2 变量的地址: 0x7ffeefbff56e</span><br></pre></td></tr></table></figure><p>通过上面的实例，我们了解了什么是内存地址以及如何访问它。接下来让我们看看什么是指针。</p><h2 id="什么是指针？"><a href="#什么是指针？" class="headerlink" title="什么是指针？"></a>什么是指针？</h2><p>指针是一个变量，其值为另一个变量的地址，即，内存位置的直接地址。就像其他变量或常量一样，您必须在使用指针存储其他变量地址之前，对其进行声明。指针变量声明的一般形式为：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">type *var-name;</span><br></pre></td></tr></table></figure><p>在这里，type是指针的基类型，它必须是一个有效的C++ 数据类型，var-name 是指针变量的名称。用来声明指针的星号 * 与乘法中使用的星号是相同的。但是，在这个语句中，星号是用来指定一个变量是指针。以下是有效的指针声明：</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></pre></td><td class="code"><pre><span class="line">int *ip;</span><br><span class="line">double *dp;</span><br><span class="line">float *fp;</span><br><span class="line">char *ch</span><br></pre></td></tr></table></figure><p>所有指针的值得实际数据类型，不管是整型、浮点型、字符型，还是其他的数据类型，都是一样的，都是一个代表内存地址的长的十六进制数。不同数据类型的指针之间唯一的不同是，指针所指向的变量或者常量的数据类型不同。</p><h2 id="C-中使用指针"><a href="#C-中使用指针" class="headerlink" title="C++ 中使用指针"></a>C++ 中使用指针</h2><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><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></pre></td><td class="code"><pre><span class="line">#include &lt;iostream&gt;</span><br><span class="line"></span><br><span class="line">using namespace std;</span><br><span class="line"></span><br><span class="line">int main()&#123;</span><br><span class="line">    int var = 20;</span><br><span class="line">    int *ip;</span><br><span class="line">    </span><br><span class="line">    ip = &amp;var;</span><br><span class="line">    </span><br><span class="line">    cout &lt;&lt; &quot;Value of var variable: &quot; &lt;&lt; var &lt;&lt; endl;</span><br><span class="line">    </span><br><span class="line">    //输出在指针变量中存储的地址</span><br><span class="line">    cout &lt;&lt; &quot;Address stored in ip variable: &quot; &lt;&lt; ip &lt;&lt; endl;</span><br><span class="line">    </span><br><span class="line">    //访问指针中地址的值</span><br><span class="line">    cout &lt;&lt; &quot;Value of *ip variable: &quot; &lt;&lt; *ip &lt;&lt; endl;</span><br><span class="line">    </span><br><span class="line">    return 0;</span><br><span class="line">&#125;;</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></pre></td><td class="code"><pre><span class="line">Value of var variable: 20</span><br><span class="line">Address stored in ip variable: 0x7ffeefbff548</span><br><span class="line">Value of *ip variable: 20</span><br></pre></td></tr></table></figure><h2 id="C-指针详解"><a href="#C-指针详解" class="headerlink" title="C++ 指针详解"></a>C++ 指针详解</h2><p>在C++ 中，有很多指针相关的概念，这些概念都很简单，但是都很重要。下面列出了 C++ 程序员必须清楚的一些与指针相关的重要概念：</p><table><thead><tr><th>概念</th><th>描述</th></tr></thead><tbody><tr><td>C++ Null 指针</td><td>C++ 支持空指针。NUll 指针时一个定义在标准库中的值为零的常量。</td></tr><tr><td>C++ 指针的算术运算</td><td>可以对指针进行四中算数运算 ++、–、+、-</td></tr><tr><td>C++ 指针 VS 数组</td><td>指针和数组之间有着密切的关系</td></tr><tr><td>C++ 指针数组</td><td>可以定义用来存储指针的数组</td></tr><tr><td>C++ 指向指针的指针</td><td>C++ 允许指向指针的指针</td></tr><tr><td>C++ 传递指针给函数</td><td>通过引用或地址传递参数，使传递的参数在调用函数中被改动</td></tr><tr><td>C++ 从函数返回指针</td><td>C++ 允许韩式返回指针到局部变量、静态变量和动态内存分配</td></tr></tbody></table>]]></content>
    
    <summary type="html">
    
      
      
        &lt;link rel=&quot;stylesheet&quot; class=&quot;aplayer-secondary-style-marker&quot; href=&quot;/assets/css/APlayer.min.css&quot;&gt;&lt;script src=&quot;/assets/js/APlayer.min.js&quot; cla
      
    
    </summary>
    
      <category term="编程" scheme="https://dashage.github.io/categories/%E7%BC%96%E7%A8%8B/"/>
    
    
      <category term="C++" scheme="https://dashage.github.io/tags/C/"/>
    
  </entry>
  
  <entry>
    <title>Redmi 5A global 刷机</title>
    <link href="https://dashage.github.io/2018/12/30/Redmi%205A%20global%20%E5%88%B7%E6%9C%BA/"/>
    <id>https://dashage.github.io/2018/12/30/Redmi 5A global 刷机/</id>
    <published>2018-12-30T10:32:34.610Z</published>
    <updated>2018-12-30T10:32:34.610Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><h1 id="Redmi-5A-global-刷机"><a href="#Redmi-5A-global-刷机" class="headerlink" title="Redmi 5A global 刷机"></a>Redmi 5A global 刷机</h1><p>对我来讲，小米手机 Global 版本相较于 China 版本有以下优点</p><ul><li>移除一些系统软件（自带浏览器、小米视频、小米音乐除外）</li><li>Google 软件原生支持</li></ul><p>刷机过程如下</p><h2 id="解锁手机"><a href="#解锁手机" class="headerlink" title="解锁手机"></a>解锁手机</h2><h2 id="下载-ROM"><a href="#下载-ROM" class="headerlink" title="下载 ROM"></a>下载 ROM</h2><h2 id="下载-platform-tools"><a href="#下载-platform-tools" class="headerlink" title="下载 platform-tools"></a>下载 platform-tools</h2><h2 id="刷机以及完成"><a href="#刷机以及完成" class="headerlink" title="刷机以及完成"></a>刷机以及完成</h2><p>### </p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;link rel=&quot;stylesheet&quot; class=&quot;aplayer-secondary-style-marker&quot; href=&quot;/assets/css/APlayer.min.css&quot;&gt;&lt;script src=&quot;/assets/js/APlayer.min.js&quot; cla
      
    
    </summary>
    
      <category term="刷机" scheme="https://dashage.github.io/categories/%E5%88%B7%E6%9C%BA/"/>
    
    
      <category term="Linux" scheme="https://dashage.github.io/tags/Linux/"/>
    
  </entry>
  
  <entry>
    <title>CentoS6中文乱码</title>
    <link href="https://dashage.github.io/2018/12/28/CentoS6%E4%B8%AD%E6%96%87%E4%B9%B1%E7%A0%81/"/>
    <id>https://dashage.github.io/2018/12/28/CentoS6中文乱码/</id>
    <published>2018-12-28T05:04:03.180Z</published>
    <updated>2018-12-28T05:04:03.180Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><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></pre></td><td class="code"><pre><span class="line"># locale -a | grep utf-8</span><br><span class="line"># vim /etc/sysconfig/i18n </span><br><span class="line">LANG=&quot;en_US.utf8&quot;</span><br><span class="line"></span><br><span class="line"># vim /etc/profile</span><br><span class="line"># Environment locale setting</span><br><span class="line">export LC_ALL=&quot;en_US.utf8&quot;</span><br></pre></td></tr></table></figure>]]></content>
    
    <summary type="html">
    
      
      
        &lt;link rel=&quot;stylesheet&quot; class=&quot;aplayer-secondary-style-marker&quot; href=&quot;/assets/css/APlayer.min.css&quot;&gt;&lt;script src=&quot;/assets/js/APlayer.min.js&quot; cla
      
    
    </summary>
    
      <category term="Books" scheme="https://dashage.github.io/categories/Books/"/>
    
    
      <category term="Books" scheme="https://dashage.github.io/tags/Books/"/>
    
  </entry>
  
  <entry>
    <title>网络流量监控工具</title>
    <link href="https://dashage.github.io/2018/12/24/%E7%BD%91%E7%BB%9C%E6%B5%81%E9%87%8F%E7%9B%91%E6%8E%A7%E5%B7%A5%E5%85%B7/"/>
    <id>https://dashage.github.io/2018/12/24/网络流量监控工具/</id>
    <published>2018-12-24T01:10:47.012Z</published>
    <updated>2018-12-24T01:10:47.012Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><h1 id="nethogs"><a href="#nethogs" class="headerlink" title="nethogs"></a>nethogs</h1><h1 id="trickle"><a href="#trickle" class="headerlink" title="trickle"></a>trickle</h1>]]></content>
    
    <summary type="html">
    
      
      
        &lt;link rel=&quot;stylesheet&quot; class=&quot;aplayer-secondary-style-marker&quot; href=&quot;/assets/css/APlayer.min.css&quot;&gt;&lt;script src=&quot;/assets/js/APlayer.min.js&quot; cla
      
    
    </summary>
    
      <category term="linux" scheme="https://dashage.github.io/categories/linux/"/>
    
    
      <category term="Network" scheme="https://dashage.github.io/tags/Network/"/>
    
  </entry>
  
  <entry>
    <title>Java Web学习路线图</title>
    <link href="https://dashage.github.io/2018/12/23/Java%20Web%E5%AD%A6%E4%B9%A0%E8%B7%AF%E7%BA%BF%E5%9B%BE/"/>
    <id>https://dashage.github.io/2018/12/23/Java Web学习路线图/</id>
    <published>2018-12-23T13:44:39.050Z</published>
    <updated>2018-12-23T13:44:39.050Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><h1 id="Java-Web"><a href="#Java-Web" class="headerlink" title="Java Web"></a>Java Web</h1><h2 id="第一阶段：前端开发阶段"><a href="#第一阶段：前端开发阶段" class="headerlink" title="第一阶段：前端开发阶段"></a>第一阶段：前端开发阶段</h2><ul><li><p>HTML</p></li><li><p>CSS</p></li><li><p>JavaScript</p></li><li><p>BootStrap</p></li><li><p>jQuery</p></li></ul><h2 id="第二阶段：数据库"><a href="#第二阶段：数据库" class="headerlink" title="第二阶段：数据库"></a>第二阶段：数据库</h2><ul><li><p>MYSQL 加强</p></li><li><p>JDBC 加强</p></li></ul><h2 id="第三阶段：服务器端开发"><a href="#第三阶段：服务器端开发" class="headerlink" title="第三阶段：服务器端开发"></a>第三阶段：服务器端开发</h2><ul><li><p>Web 核心技术：servlet</p></li><li><p>Web 核心技术：request&amp;response</p></li><li><p>JSP&amp;EL </p></li><li><p>Web 核心技术：cookie &amp; session</p></li><li><p>XML&amp;Tomcat</p></li></ul><h2 id="第四阶段：数据库高级开发"><a href="#第四阶段：数据库高级开发" class="headerlink" title="第四阶段：数据库高级开发"></a>第四阶段：数据库高级开发</h2><ul><li><p>事务操作</p></li><li><p>分页的操作</p></li></ul><h2 id="第五阶段：服务器高级开发"><a href="#第五阶段：服务器高级开发" class="headerlink" title="第五阶段：服务器高级开发"></a>第五阶段：服务器高级开发</h2><ul><li><p>过滤器和监听器</p></li><li><p>ajax&amp;Jquery的ajax</p></li><li><p>基础知识加强</p></li></ul><h2 id="第六阶段：综合案例"><a href="#第六阶段：综合案例" class="headerlink" title="第六阶段：综合案例"></a>第六阶段：综合案例</h2>]]></content>
    
    <summary type="html">
    
      
      
        &lt;link rel=&quot;stylesheet&quot; class=&quot;aplayer-secondary-style-marker&quot; href=&quot;/assets/css/APlayer.min.css&quot;&gt;&lt;script src=&quot;/assets/js/APlayer.min.js&quot; cla
      
    
    </summary>
    
      <category term="编程语言" scheme="https://dashage.github.io/categories/%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80/"/>
    
    
      <category term="Java" scheme="https://dashage.github.io/tags/Java/"/>
    
  </entry>
  
  <entry>
    <title>日本五十音</title>
    <link href="https://dashage.github.io/2018/12/22/%E6%97%A5%E6%9C%AC%E4%BA%94%E5%8D%81%E9%9F%B3/"/>
    <id>https://dashage.github.io/2018/12/22/日本五十音/</id>
    <published>2018-12-22T14:19:29.615Z</published>
    <updated>2018-12-22T14:19:29.615Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><h1 id="日本五十音"><a href="#日本五十音" class="headerlink" title="日本五十音"></a>日本五十音</h1><h2 id="日本语构成"><a href="#日本语构成" class="headerlink" title="日本语构成"></a>日本语构成</h2><ul><li>罗马音<ul><li>由26个字母构成</li><li>构成日文输入法</li><li>辅助假名发音</li><li>商标，人名，地名【国际范围内使用词汇】</li></ul></li><li>汉字<ul><li>中国汉字的简体</li><li>中国汉字的繁体</li><li>自创的汉字</li><li>由平假名标注发音</li></ul></li><li>平假名<ul><li>来源汉字的草书</li><li>构成单词</li><li>标注汉字发音</li><li>书写助词</li></ul></li><li>片假名<ul><li>来源于汉字偏旁部首</li><li>主要用于书写外来语</li><li>强调</li><li>拟声拟态词</li></ul></li></ul><h2 id="五十音图书写"><a href="#五十音图书写" class="headerlink" title="五十音图书写"></a>五十音图书写</h2><h3 id="平假名"><a href="#平假名" class="headerlink" title="平假名"></a>平假名</h3><table><thead><tr><th>平假名</th><th>あ 段</th><th>い 段</th><th>う 段</th><th>え 段</th><th>お 段</th></tr></thead><tbody><tr><td>あ　行</td><td>あ    a</td><td>い   i</td><td>う   u</td><td>え   e</td><td>お   o</td></tr><tr><td>か   行</td><td>か    ka</td><td>き   ki</td><td>く   ku</td><td>け   ke</td><td>こ  ko</td></tr><tr><td>さ   行</td><td>さ    sa</td><td>し</td><td>す   su</td><td>せ   se</td><td>そ  so</td></tr><tr><td>た   行</td><td>た    ta</td><td>ち   chi</td><td>つ   tsu</td><td>て   te</td><td>と  to</td></tr><tr><td>な   行</td><td>な    na</td><td>に   ni</td><td>ぬ   nu</td><td>ね   ne</td><td>の  no</td></tr><tr><td>は   行</td><td>は    ha</td><td>ひ   hi</td><td>ふ   fu</td><td>へ   he</td><td>ほ  ho</td></tr><tr><td>ま   行</td><td>ま   ma</td><td>み   mi</td><td>む   mu</td><td>め   me</td><td>も  mo</td></tr><tr><td>や  行</td><td>や    ya</td><td>( い   i )</td><td>ゆ   yu</td><td>( え   e )</td><td>よ  yo</td></tr><tr><td>ら  行</td><td>ら    ra</td><td>り   ri</td><td>る   ru</td><td>れ   re</td><td>ろ  ro</td></tr><tr><td>わ  行</td><td>わ   wa</td><td>( い   i )</td><td>( う   u )</td><td>( え   e )</td><td>を  wo</td></tr><tr><td>ん  行</td><td>ん   n</td><td></td><td></td><td></td></tr></tbody></table><h3 id="片假名"><a href="#片假名" class="headerlink" title="片假名"></a>片假名</h3><table><thead><tr><th>片假名</th><th>ア   段</th><th>イ  段</th><th>ウ   段</th><th>エ   段</th><th>オ   段</th></tr></thead><tbody><tr><td>ア   行</td><td>ア a</td><td>イ  i</td><td>ウ  u</td><td>エ  e</td><td>オ  o</td></tr><tr><td>カ   行</td><td>カ ka</td><td>キ   ki</td><td>ク  ku</td><td>ケ  ke</td><td>コ  ko</td></tr><tr><td>サ   行</td><td>サ sa</td><td>シ  shi</td><td>ス  su</td><td>セ  se</td><td>ソ  so</td></tr><tr><td>タ   行</td><td>タ ta</td><td>チ  chi</td><td>ツ  tsu</td><td>テ  te</td><td>ト  to</td></tr><tr><td>ナ   行</td><td>ナ na</td><td>ニ  ni</td><td>ヌ  nu</td><td>ネ  ne</td><td>ノ  no</td></tr><tr><td>ハ   行</td><td>ハ ha</td><td>ヒ  hi</td><td>フ  fu</td><td>ヘ  he</td><td>ホ  ho</td></tr><tr><td>マ   行</td><td>マ ma</td><td>ミ  mi</td><td>ム  mu</td><td>メ  me</td><td>モ  mo</td></tr><tr><td>ヤ   行</td><td>ヤ ya</td><td>( イ  i )</td><td>( ユ  yu )</td><td>( エ e )</td><td>ヨ  yo</td></tr><tr><td>ラ   行</td><td>ラ ra</td><td>リ  ri</td><td>ル  ru</td><td>レ  re</td><td>ロ  ro</td></tr><tr><td>ワ   行</td><td>ワ wa</td><td>( イ  i )</td><td>( ウ  u )</td><td>( エ  e )</td><td>ヲ  wo</td></tr><tr><td>ン   行</td><td>ン n</td><td></td><td></td><td></td></tr></tbody></table>]]></content>
    
    <summary type="html">
    
      
      
        &lt;link rel=&quot;stylesheet&quot; class=&quot;aplayer-secondary-style-marker&quot; href=&quot;/assets/css/APlayer.min.css&quot;&gt;&lt;script src=&quot;/assets/js/APlayer.min.js&quot; cla
      
    
    </summary>
    
      <category term="日语" scheme="https://dashage.github.io/categories/%E6%97%A5%E8%AF%AD/"/>
    
    
      <category term="日本五十音" scheme="https://dashage.github.io/tags/%E6%97%A5%E6%9C%AC%E4%BA%94%E5%8D%81%E9%9F%B3/"/>
    
  </entry>
  
  <entry>
    <title>使用DataV制作实时销售数据可视化大屏</title>
    <link href="https://dashage.github.io/2018/12/22/%E4%BD%BF%E7%94%A8DataV%E5%88%B6%E4%BD%9C%E5%AE%9E%E6%97%B6%E9%94%80%E5%94%AE%E6%95%B0%E6%8D%AE%E5%8F%AF%E8%A7%86%E5%8C%96%E5%A4%A7%E5%B1%8F/"/>
    <id>https://dashage.github.io/2018/12/22/使用DataV制作实时销售数据可视化大屏/</id>
    <published>2018-12-22T10:29:55.725Z</published>
    <updated>2018-12-23T05:01:50.620Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><h1 id="数据可视化介绍"><a href="#数据可视化介绍" class="headerlink" title="数据可视化介绍"></a>数据可视化介绍</h1><h2 id="学习目标"><a href="#学习目标" class="headerlink" title="学习目标"></a>学习目标</h2><ul><li>了解数据可视化的应用场景</li><li>掌握阿里云 DataV 可视化工具</li><li>了解可视化大屏制作的流程</li></ul><p>数据可视化：是指将相对复杂的数据通过可视化的，交互的方式进行展示，从而形象、直观地表达数据蕴含的信息和规律。</p><h2 id="可视化的目的"><a href="#可视化的目的" class="headerlink" title="可视化的目的"></a>可视化的目的</h2><ul><li>展示：用数据展示企业特色<ul><li>企业形象传播</li><li>峰会论坛展示</li><li>嘉宾访客接待</li></ul></li><li>驱动：用数据驱动业务发展<ul><li>查看业务实况</li><li>业务监控预警</li><li>驱动内部响应</li></ul></li><li>洞察：用数据洞察预测未来<ul><li>多维度数据呈现</li><li>辅助数据洞察</li><li>视觉发现新知 </li></ul></li></ul><h2 id="可视化大屏种类"><a href="#可视化大屏种类" class="headerlink" title="可视化大屏种类"></a>可视化大屏种类</h2><ul><li>展示类<ul><li>用于领导、嘉宾接待、或业务交流类活动</li><li>偏重于展示业务信息结构以及业务亮点</li><li>重点需要梳理业务相关的信息架构</li><li>平铺布局，配合视觉元素，串联讲解脚本</li></ul></li><li>分析类<ul><li>展示数据关联及分析结果，为多人员讨论决策提供帮助</li><li>通过页面展示细粒度数据，通过交互实现数据的串联</li><li>展示关联性最高且最为关键的内容，多用于讨论决策</li><li>对整体行业有一定的认知，理解数据之间的相互关系</li></ul></li><li>监控类<ul><li>为公司内部人员或相关的业务运维人员提供监控信息</li><li>展示业务整体概况，达到对业务实时监控及调度的目的</li><li>除概况外还需要展示分析结果，并能给出优化方案</li><li>比较依赖行业经验，在信息设计时会以业务方为主导</li></ul></li></ul><h2 id="大屏案例"><a href="#大屏案例" class="headerlink" title="大屏案例"></a>大屏案例</h2><ul><li>购房数据新闻案例</li></ul><p><img src="https://edu.aliyun.com/files/course/2018/12-22/180655f2ac8b992832.png" alt="img"><img src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==" alt="点击并拖拽以移动"></p><ul><li>游戏业务监控</li></ul><p><img src="https://edu.aliyun.com/files/course/2018/12-22/180938284251738246.png" alt="img"><img src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==" alt="点击并拖拽以移动"></p><ul><li>工业互联网监控</li></ul><p><img src="https://edu.aliyun.com/files/course/2018/12-22/1813139ba10a158634.png" alt="img"><img src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==" alt="点击并拖拽以移动"></p><ul><li>交通可视化作战大屏</li></ul><p><img src="https://edu.aliyun.com/files/course/2018/12-22/181436cb4d07757557.png" alt="img"><img src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==" alt="点击并拖拽以移动"></p><ul><li>通信业务营销看板</li></ul><p><img src="https://edu.aliyun.com/files/course/2018/12-22/1816375915a0741818.png" alt="img"><img src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==" alt="点击并拖拽以移动"></p><ul><li>线下零售数据分析</li></ul><p><img src="https://edu.aliyun.com/files/course/2018/12-22/182027b69356492716.png" alt="img"><img src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==" alt="点击并拖拽以移动"></p><ul><li>全网电商零售监控</li></ul><p><img src="https://edu.aliyun.com/files/course/2018/12-22/182153121e6a428983.png" alt="img"><img src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==" alt="点击并拖拽以移动"></p><ul><li>双创数据大屏</li></ul><p><img src="https://edu.aliyun.com/files/course/2018/12-22/18230152d32d521025.png" alt="img"><img src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==" alt="点击并拖拽以移动"></p><h1 id="DataV介绍"><a href="#DataV介绍" class="headerlink" title="DataV介绍"></a>DataV介绍</h1><h2 id="学习目标-1"><a href="#学习目标-1" class="headerlink" title="学习目标"></a>学习目标</h2><ul><li>数据可视化介绍</li><li>Data V介绍及基本操作</li><li>可视化数据大屏设计</li><li>制作实时销售大屏</li></ul><h2 id="Data-V介绍"><a href="#Data-V介绍" class="headerlink" title="Data V介绍"></a>Data V介绍</h2><p>Data V是一款阿里云提供对的数据可视化在线工具。通过拖拽式的操作，使用数据连接、可视化组件库、行业设计模版库、多终端适配与发布运维于等功能，让非专业人员也可以快速的将数据的价值通过视觉进行传达。</p><ul><li>多种精美模版，可直接使用多种场景下的专业的可视化模版</li><li>多种图表组件，多种图表自由搭配，传统图表、地图、拓扑图等</li><li>多种数据源接入，支持RDS、ADS、静态文本、本地文件csv、在线API等</li><li>播控、多屏适配与发布，针对PC/大屏端的各种分辨率适配与拉伸、播放控制等</li></ul><h2 id="Data-V-特性"><a href="#Data-V-特性" class="headerlink" title="Data V 特性"></a>Data V 特性</h2><ul><li>多种场景模版：Data V提供指挥中心、地理分析、实时监控、汇报展示等多种场景模版，简单修改即可快速投入使用。即便没有设计师，也可以做出高设计水准的可视化作品。</li><li>丰富开放的图标库：除针对业务展示优化过的常规图表外，还能够绘制包括海量数据的地理轨迹、地理飞线、热力分布、地域区块、3D地图、地理数据的多层叠加。此外还接入了Echats，AntV-G2等等第三方开源图标库</li><li>支持多种数据源：能够接入包括阿里云分析型数据库（AnalyticDB，原ADS）、RDS for Mysql、本地CSV上传和在线API的接入，且支持动态请求。可实现各类大数据实时计算、监控的需求，充分发挥大数据计算的能力</li><li>零门槛图形化设计界面：提供多种的业务模块级而非图表组件的Widget，所见即所得式的配置方式，只需要通过拖拖拽拽，无需编程能力，即可创造出专业的可视化应用</li><li>支持数据交互分析：能够图形化地配置图表之间的交互联动，通过图表之间的参数传递实现数据的交互分析</li><li>多种适配与发布方式：特别针对拼接大屏端的展示做了分辨率优化，能够适配非常规拼接分辨率做适配优化。创建的可视化应用能够发布分享，没有购买Data V产品的用户也可以访问到应用，企业版可设置访问密码进行访问权限控制</li><li>其他特性：本地化运行部署、大屏拼接中控系统、支持二次开发</li></ul>]]></content>
    
    <summary type="html">
    
      
      
        &lt;link rel=&quot;stylesheet&quot; class=&quot;aplayer-secondary-style-marker&quot; href=&quot;/assets/css/APlayer.min.css&quot;&gt;&lt;script src=&quot;/assets/js/APlayer.min.js&quot; cla
      
    
    </summary>
    
      <category term="数据可视化" scheme="https://dashage.github.io/categories/%E6%95%B0%E6%8D%AE%E5%8F%AF%E8%A7%86%E5%8C%96/"/>
    
    
      <category term="Data V" scheme="https://dashage.github.io/tags/Data-V/"/>
    
  </entry>
  
  <entry>
    <title>我的书单</title>
    <link href="https://dashage.github.io/2018/12/19/%E6%88%91%E7%9A%84%E4%B9%A6%E5%8D%95/"/>
    <id>https://dashage.github.io/2018/12/19/我的书单/</id>
    <published>2018-12-19T05:45:22.356Z</published>
    <updated>2018-12-19T05:45:22.356Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><h1 id="《步履不停》"><a href="#《步履不停》" class="headerlink" title="《步履不停》"></a>《步履不停》</h1><h1 id="《牧羊少年的奇幻之旅》"><a href="#《牧羊少年的奇幻之旅》" class="headerlink" title="《牧羊少年的奇幻之旅》"></a>《牧羊少年的奇幻之旅》</h1><h1 id="《批判性思维工具》"><a href="#《批判性思维工具》" class="headerlink" title="《批判性思维工具》"></a>《批判性思维工具》</h1>]]></content>
    
    <summary type="html">
    
      
      
        &lt;link rel=&quot;stylesheet&quot; class=&quot;aplayer-secondary-style-marker&quot; href=&quot;/assets/css/APlayer.min.css&quot;&gt;&lt;script src=&quot;/assets/js/APlayer.min.js&quot; cla
      
    
    </summary>
    
      <category term="Books" scheme="https://dashage.github.io/categories/Books/"/>
    
    
      <category term="Books" scheme="https://dashage.github.io/tags/Books/"/>
    
  </entry>
  
  <entry>
    <title>pipe</title>
    <link href="https://dashage.github.io/2018/12/13/pipe/"/>
    <id>https://dashage.github.io/2018/12/13/pipe/</id>
    <published>2018-12-13T05:06:05.620Z</published>
    <updated>2018-12-13T05:06:05.620Z</updated>
    
    <content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>graylog 是一个基于流式计算的框架</p><h2 id="Pipe-日志流解析"><a href="#Pipe-日志流解析" class="headerlink" title="Pipe 日志流解析"></a>Pipe 日志流解析</h2><h3 id="日志规则"><a href="#日志规则" class="headerlink" title="日志规则"></a>日志规则</h3><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></pre></td><td class="code"><pre><span class="line">rule &quot;fhq11&quot;</span><br><span class="line">when</span><br><span class="line">    contains(value: to_string($message.message), search: &quot;&lt;1&gt;rule_id&quot;, ignore_case: false)</span><br><span class="line">then</span><br><span class="line">    let f = key_value(to_string($message.message), &quot;;&quot; , &quot;:&quot;);</span><br><span class="line">    set_fields(f);</span><br><span class="line">end</span><br></pre></td></tr></table></figure><h3 id="日志原文"><a href="#日志原文" class="headerlink" title="日志原文"></a>日志原文</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&lt;1&gt;rule_id:6;time:2018-12-13 09:33:18;module:fw;src_intf:G1/3;dst_intf:G2/1;action:accept;proto:udp;src_addr:192.168.211.168;src_port:64410;dst_addr:59.208.246.9;dst_port:53;src_addr_nat:59.208.75.22;src_port_nat:64410;dst_addr_nat:59.208.246.9;dst_port_nat:53;info:;user:</span><br></pre></td></tr></table></figure><h3 id="日志触发"><a href="#日志触发" class="headerlink" title="日志触发"></a>日志触发</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">echo &quot;&lt;1&gt;rule_id:6;time:2018-12-13 09:33:18;module:fw;src_intf:G1/3;dst_intf:G2/1;action:accept;proto:udp;src_addr:192.168.211.168;src_port:64410;dst_addr:59.208.246.9;dst_port:53;src_addr_nat:59.208.75.22;src_port_nat:64410;dst_addr_nat:59.208.246.9;dst_port_nat:53;info:;user:&quot; | nc -t 10.113.1.26 1234</span><br></pre></td></tr></table></figure>]]></content>
    
    <summary type="html">
    
      
      
        &lt;link rel=&quot;stylesheet&quot; class=&quot;aplayer-secondary-style-marker&quot; href=&quot;/assets/css/APlayer.min.css&quot;&gt;&lt;script src=&quot;/assets/js/APlayer.min.js&quot; cla
      
    
    </summary>
    
      <category term="graylog" scheme="https://dashage.github.io/categories/graylog/"/>
    
    
      <category term="graylog" scheme="https://dashage.github.io/tags/graylog/"/>
    
  </entry>
  
</feed>
