<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Pgm on HA</title>
    <link>https://deletefromuser.github.io/pgm/</link>
    <description>Recent content in Pgm on HA</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Mon, 28 Sep 2026 08:00:00 +0800</lastBuildDate>
    <atom:link href="https://deletefromuser.github.io/pgm/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>win10/11 家庭版中使用Hyper-V虚拟机</title>
      <link>https://deletefromuser.github.io/pgm/2026092801/</link>
      <pubDate>Mon, 28 Sep 2026 08:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2026092801/</guid>
      <description>&lt;h3 id=&#34;开启hyper-v&#34;&gt;开启Hyper-V&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 执行命令后重启&lt;/span&gt;
pushd &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%~dp0&amp;#34;&lt;/span&gt;
dir /b %SystemRoot%&lt;span style=&#34;color:#ae81ff&#34;&gt;\s&lt;/span&gt;ervicing&lt;span style=&#34;color:#ae81ff&#34;&gt;\P&lt;/span&gt;ackages&lt;span style=&#34;color:#ae81ff&#34;&gt;\*&lt;/span&gt;Hyper-V*.mum &amp;gt;hyper-v.txt
&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; /f %%i in &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;findstr /i . hyper-v.txt 2^&amp;gt;nul&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt; dism /online /norestart /add-package:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%SystemRoot%\servicing\Packages\%%i&amp;#34;&lt;/span&gt;
del hyper-v.txt
Dism /online /enable-feature /featurename:Microsoft-Hyper-V -All /LimitAccess /ALL
pause
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;将windows普通用户加入hyper-v用户组中&#34;&gt;将windows普通用户加入Hyper-V用户组中&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;如果不加的话就只能在管理员账户中使用Hyper-V
管理员模式打开powershell,执行下面命令&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;$loggedInUser &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;get-wmiobject  win32_computersystem&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;.username
Add-LocalGroupMember -group &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Hyper-V Administrators&amp;#34;&lt;/span&gt; -member $loggedInUser -ErrorAction SilentlyContinue
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;将vbox虚拟机实例转换为hyper-v支持的vhd格式&#34;&gt;将vbox虚拟机实例转换为Hyper-V支持的vhd格式&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;VBoxManage.exe clonehd &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;D:\path\ubuntu20_0124-disk1.vdi&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;D:\path\ubuntu22.vhd&amp;#34;&lt;/span&gt; --format VHD
&lt;span style=&#34;color:#75715e&#34;&gt;# 转换完成后,在Hyper-V管理器中新建虚拟机时选择磁盘时选中已存在的vhd文件&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;连接到hyper-v虚拟机中的服务&#34;&gt;连接到Hyper-V虚拟机中的服务&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;ifconfig&lt;/code&gt;查看eth0的对应的ip&lt;/li&gt;
&lt;li&gt;在宿主机上使用1中的ip进行连接即可&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;让虚拟机获得固定ip&#34;&gt;让虚拟机获得固定IP&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;虚拟机每次重启都会通过DHCP拿到新的IP,可以给虚拟机分配静态MAC地址,然后在路由器上将该MAC地址绑定到固定IP&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;VM Settings -&amp;gt; Hardware -&amp;gt; Network Adapter -&amp;gt; Advanced Features -&amp;gt; MAC address&lt;/code&gt; 中选择&lt;code&gt;Static&lt;/code&gt;并填入一个MAC地址&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;需要虚拟机关机状态下才能修改&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;虚拟机和宿主机中共享文件夹&#34;&gt;虚拟机和宿主机中共享文件夹&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;虚拟机中安装smaba &lt;code&gt;sudo apt install samba&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;虚拟机中设置smb密码 &lt;code&gt;sudo smbpasswd -a linux用户名&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;虚拟机中在想要共享的文件夹中的Properties中的Local Network Share中启用共享&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;调整虚拟机分辨率&#34;&gt;调整虚拟机分辨率&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;set-vmvideo 虚拟机名 -horizontalresolution:1920 -verticalresolution:1080 -resolutiontype single
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;参考&#34;&gt;参考&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://gist.github.com/HimDek/6edde284203a620745fad3f762be603b&#34;&gt;Hyper-V in Windows 10 and Windows 11 Home Edition&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://superuser.com/a/1504633&#34;&gt;How to add a Static IP-Adress to a Virtual Machine in Hyper V&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>使用pdfbox将文字pdf转换为图片pdf</title>
      <link>https://deletefromuser.github.io/pgm/2025082001/</link>
      <pubDate>Wed, 20 Aug 2025 20:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2025082001/</guid>
      <description>&lt;h3 id=&#34;添加pdfbox&#34;&gt;添加pdfbox&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-xml&#34; data-lang=&#34;xml&#34;&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.apache.pdfbox&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;pdfbox&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;3.0.5&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.apache.pdfbox&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;fontbox&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;3.0.5&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;使用pdfbox将文字pdf转换为图片pdf&#34;&gt;使用pdfbox将文字pdf转换为图片pdf&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;String inputPath &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;input.pdf&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;// 输入 PDF
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;String outputPath &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;output_image_pdf.pdf&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;// 输出图片 PDF
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;float&lt;/span&gt; dpi &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; 300&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;// 渲染分辨率
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;try&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;PDDocument document &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Loader&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;loadPDF&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; File&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;inputPath&lt;span style=&#34;color:#f92672&#34;&gt;)))&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
    PDFRenderer pdfRenderer &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; PDFRenderer&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;document&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;
    PDDocument imagePdf &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; PDDocument&lt;span style=&#34;color:#f92672&#34;&gt;();&lt;/span&gt;

    &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; pageIndex &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; 0&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt; pageIndex &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; document&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;getNumberOfPages&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;();&lt;/span&gt; pageIndex&lt;span style=&#34;color:#f92672&#34;&gt;++)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
        &lt;span style=&#34;color:#75715e&#34;&gt;// 1. 渲染为 BufferedImage
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;        BufferedImage bim &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; pdfRenderer&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;renderImageWithDPI&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;pageIndex&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; dpi&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;

        &lt;span style=&#34;color:#75715e&#34;&gt;// 2. 新建 PDF 页面，尺寸与原图一致
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;        PDPage page &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; PDPage&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; PDRectangle&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;bim&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;getWidth&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(),&lt;/span&gt; bim&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;getHeight&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;()));&lt;/span&gt;
        imagePdf&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;addPage&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;page&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;

        &lt;span style=&#34;color:#75715e&#34;&gt;// 3. 把图片画到新 PDF 页面
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;try&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;PDPageContentStream contentStream &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; PDPageContentStream&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;imagePdf&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; page&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
            contentStream&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;drawImage&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;
                    LosslessFactory&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;createFromImage&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;imagePdf&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; bim&lt;span style=&#34;color:#f92672&#34;&gt;),&lt;/span&gt;
                    0&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; 0&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; bim&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;getWidth&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(),&lt;/span&gt; bim&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;getHeight&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt;
            &lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;
        &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
    &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;

    imagePdf&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;save&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;outputPath&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;
    imagePdf&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;close&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;();&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;catch&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;IOException e&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
    &lt;span style=&#34;color:#66d9ef&#34;&gt;throw&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; RuntimeException&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;e&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;

System&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;out&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;println&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;转换完成，输出文件：&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; outputPath&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>使用handshake转换视频时利用gpu</title>
      <link>https://deletefromuser.github.io/pgm/2025060801/</link>
      <pubDate>Sun, 08 Jun 2025 20:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2025060801/</guid>
      <description>&lt;p&gt;视频分页设置中的编解码器选择&lt;code&gt;H.264/H.265 (NVEnc)&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&#34;使用ffmpeg将mp4转换为mp3&#34;&gt;使用ffmpeg将mp4转换为MP3&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;ffmpeg -i myfile.mp4 myfile.mp3
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;参考&#34;&gt;参考&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.reddit.com/r/handbrake/comments/11ikwdd/comment/l3ejtjd/&#34;&gt;How to enable hardware acceleration?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.reddit.com/r/handbrake/comments/ylf78t/comment/iuyw11j/?utm_source=share&amp;amp;utm_medium=web3x&amp;amp;utm_name=web3xcss&amp;amp;utm_term=1&amp;amp;utm_content=share_button&#34;&gt;how_do_i_convert_to_mp3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>Firefox多用户</title>
      <link>https://deletefromuser.github.io/pgm/2025041901/</link>
      <pubDate>Sat, 19 Apr 2025 20:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2025041901/</guid>
      <description>&lt;ol&gt;
&lt;li&gt;进入&lt;a href=&#34;about:profiles&#34;&gt;about:profiles&lt;/a&gt;, 创建新用户(比如tom)&lt;/li&gt;
&lt;li&gt;点击【Launch profile in new browser】按钮启动&lt;/li&gt;
&lt;li&gt;windows快捷方式进入&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;复制出一个新的快捷方式，右键属性，在目标属性值中添加&lt;code&gt; -p tom&lt;/code&gt;即可&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;参考&#34;&gt;参考&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://support.mozilla.org/en-US/kb/profile-manager-create-remove-switch-firefox-profiles&#34;&gt;Profile Manager - Create, remove or switch Firefox profiles&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>迁移mariadb/mysql数据库到pgsql</title>
      <link>https://deletefromuser.github.io/pgm/2024121401/</link>
      <pubDate>Sat, 14 Dec 2024 14:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2024121401/</guid>
      <description>&lt;h3 id=&#34;0-修改mysql数据库中tinyint为smallint&#34;&gt;0. 修改mysql数据库中tinyint为smallint&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;pgloader默认会把mysql的tinyint字段转为boolean字段，如果需要整型，需要事先转换&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- 1. 查询tinyint字段并组装为更新表字段语句
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt;
	CONCAT(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;ALTER TABLE &amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;table_name&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39; MODIFY &amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;column_name&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39; SMALLINT;&amp;#39;&lt;/span&gt;)
&lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt;
	INFORMATION_SCHEMA.COLUMNS
&lt;span style=&#34;color:#66d9ef&#34;&gt;WHERE&lt;/span&gt;
	TABLE_SCHEMA &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;database_name&amp;#39;&lt;/span&gt;
	&lt;span style=&#34;color:#66d9ef&#34;&gt;AND&lt;/span&gt; DATA_TYPE &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;tinyint&amp;#39;&lt;/span&gt;;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 2. 复制查询结果并执行
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;1-安装最新版pgloader迁移数据&#34;&gt;1. 安装最新版pgloader迁移数据&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;apt-get install sbcl unzip libsqlite3-dev make curl gawk freetds-dev libzip-dev
git clone https://github.com/dimitri/pgloader
cd pgloader
make save
./build/bin/pgloader --help
./build/bin/pgloader mysql://mysqluser:password@&amp;lt;mysql-server&amp;gt;:&amp;lt;mysql-port&amp;gt;/&amp;lt;source-database&amp;gt; postgresql://&amp;lt;pgsql-user&amp;gt;:password@&amp;lt;pgsql_server&amp;gt;:&amp;lt;postgresql-port&amp;gt;/&amp;lt;target-database&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;2-修改schema&#34;&gt;2. 修改schema&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;迁移成功后, 默认会在pg指定数据库中创建名为mysql数据库名的schema, 因此需要迁移数据到public的schema中&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- 连接数据库
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;BEGIN&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;TRANSACTION&lt;/span&gt;;
  &lt;span style=&#34;color:#66d9ef&#34;&gt;ALTER&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;SCHEMA&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt;          &lt;span style=&#34;color:#66d9ef&#34;&gt;RENAME&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;TO&lt;/span&gt; public_original;
  &lt;span style=&#34;color:#66d9ef&#34;&gt;ALTER&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;SCHEMA&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;source&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;database&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;           &lt;span style=&#34;color:#66d9ef&#34;&gt;RENAME&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;TO&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt;;
  &lt;span style=&#34;color:#66d9ef&#34;&gt;DROP&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;SCHEMA&lt;/span&gt;  public_original &lt;span style=&#34;color:#66d9ef&#34;&gt;CASCADE&lt;/span&gt;;
&lt;span style=&#34;color:#66d9ef&#34;&gt;COMMIT&lt;/span&gt;;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;3-修改pgsql中的timestamp类型字段&#34;&gt;3. 修改pgsql中的timestamp类型字段&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;将timestamp with time zone类型字段修改为timestamp&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; 
&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;alter table &amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;table_name&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39; alter column &amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;column_name&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39; type timestamp;&amp;#39;&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; information_schema.columns
&lt;span style=&#34;color:#66d9ef&#34;&gt;where&lt;/span&gt; table_schema &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;public&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;and&lt;/span&gt; data_type&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;timestamp with time zone&amp;#39;&lt;/span&gt;
;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 复制出查询结果并执行
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://estuary.dev/mariadb-to-postgres/&#34;&gt;How to Migrate MariaDB to Postgres: A Step-By-Step Guide | Estuary&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/dimitri/pgloader/issues/1183#issuecomment-1715995515&#34;&gt;pgloader 10 fell through ECASE expression · Issue #1183 · dimitri/pgloader&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://pgloader.readthedocs.io/en/latest/install.html#building-from-sources-on-debian&#34;&gt;Installing pgloader — pgloader 3.6.9 documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/dimitri/pgloader/issues/645&#34;&gt;How to import into public schema&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    
    <item>
      <title>控制台出现不明log，如何排查</title>
      <link>https://deletefromuser.github.io/pgm/2024112201/</link>
      <pubDate>Fri, 22 Nov 2024 20:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2024112201/</guid>
      <description>&lt;h3 id=&#34;1-定位控制台中的未知log-并抑制输出&#34;&gt;1. 定位控制台中的未知log, 并抑制输出&lt;/h3&gt;
&lt;p&gt;历史遗留项目中依赖很多, 有时会有很多不同的日志框架被整合进来, 就有可能会遇到某些依赖包中的日志输出没有被日志设置覆盖,
在调试过程中会出现一些未知log, 无论怎么调整日志设置都还是不停出现(比如quartz)&lt;/p&gt;
&lt;h3 id=&#34;2-定位log输出位置及log接口类jcl-slf4j等&#34;&gt;2. 定位log输出位置及log接口类(jcl, slf4j等)&lt;/h3&gt;
&lt;p&gt;一般log前都会有类名输出, 这种很好找(类似 xxx.xxx.Logger)
如果没有,则可能要拿log关键字全局搜索, 可能存在于依赖包中
还是找不到的话则需要反编译依赖包后再全局检索&lt;/p&gt;
&lt;h3 id=&#34;3-定位log实现类-确定log实现框架&#34;&gt;3. 定位log实现类, 确定log实现框架&lt;/h3&gt;
&lt;p&gt;新建测试类, 使用1中找的logger创建log, debug测试类, 查看logger的实现类(log4j, log4j2, logback, simplelogger)&lt;/p&gt;
&lt;h3 id=&#34;4-添加或修改log配置&#34;&gt;4. 添加或修改log配置&lt;/h3&gt;
&lt;p&gt;项目内未知log实现框架的配置文件如果没有配置的话, 新增配置并抑制输出即可&lt;/p&gt;
&lt;h4 id=&#34;抑制quartz-log&#34;&gt;抑制quartz log&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;simplelogger.properties&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-properties&#34; data-lang=&#34;properties&#34;&gt;org.slf4j.simpleLogger.defaultLogLevel=warn
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/21091536/stop-quartz-debug-logging-log4j&#34;&gt;https://stackoverflow.com/questions/21091536/stop-quartz-debug-logging-log4j&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/14544991/how-to-configure-slf4j-simple&#34;&gt;How to configure slf4j-simple&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>测试包含truncate table的方法(oracle数据库)</title>
      <link>https://deletefromuser.github.io/pgm/2024112202/</link>
      <pubDate>Fri, 22 Nov 2024 20:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2024112202/</guid>
      <description>&lt;h3 id=&#34;测试方法&#34;&gt;测试方法&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;@BeforeEach 备份表&lt;/li&gt;
&lt;li&gt;执行方法&lt;/li&gt;
&lt;li&gt;@AfterEach 从备份表恢复数据并删除备份表&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;示例代码:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
    &lt;span style=&#34;color:#a6e22e&#34;&gt;@Autowired&lt;/span&gt;
    &lt;span style=&#34;color:#66d9ef&#34;&gt;private&lt;/span&gt; JdbcTemplate jdbcTemplate&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;

    &lt;span style=&#34;color:#a6e22e&#34;&gt;@BeforeEach&lt;/span&gt;
    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;before&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
        &lt;span style=&#34;color:#75715e&#34;&gt;// 备份表
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;        String today &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; LocalDate&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;now&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;().&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;format&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;DateTimeFormatter&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ofPattern&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;uuMMdd&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;));&lt;/span&gt;
        template&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;execute&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;String&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;format&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;create table test_table_%s as select * from test_table&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; today&lt;span style=&#34;color:#f92672&#34;&gt;));&lt;/span&gt;
    &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;

    &lt;span style=&#34;color:#a6e22e&#34;&gt;@AfterEach&lt;/span&gt;
    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;after&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
        String today &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; LocalDate&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;now&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;().&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;format&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;DateTimeFormatter&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ofPattern&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;uuMMdd&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;));&lt;/span&gt;
        template&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;execute&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;String&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;format&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;insert into test_table select * from test_table_%s&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; today&lt;span style=&#34;color:#f92672&#34;&gt;));&lt;/span&gt;
        template&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;execute&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;String&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;format&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;drop table test_table_%s&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; today&lt;span style=&#34;color:#f92672&#34;&gt;));&lt;/span&gt;
    &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;

    &lt;span style=&#34;color:#a6e22e&#34;&gt;@Test&lt;/span&gt;
	&lt;span style=&#34;color:#a6e22e&#34;&gt;@Transactional&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;readOnly &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
	&lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;test&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
		&lt;span style=&#34;color:#75715e&#34;&gt;// 测试包含truncate的方法
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;        log&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;info&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;1. &amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; template&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;queryForList&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;select * from test_table&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;
        template&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;execute&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;truncate table test_table&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;
        log&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;info&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;2. &amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; template&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;queryForList&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;select * from test_table&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;
	&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;只适用于oracle数据库-postgresql数据库的话会报错-不能在只读事务中执行create-table操作&#34;&gt;只适用于oracle数据库, postgresql数据库的话会报错 &amp;ldquo;不能在只读事务中执行create table操作&amp;rdquo;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Mega &#43; nginx搭建webdav服务</title>
      <link>https://deletefromuser.github.io/pgm/2023092401/</link>
      <pubDate>Sun, 24 Sep 2023 15:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2023092401/</guid>
      <description>&lt;h3 id=&#34;需求&#34;&gt;需求&lt;/h3&gt;
&lt;p&gt;电子书阅读一直都是用的moonreader, 但是一直都是分别下载到每个设备里, 同步阅读进度很不方便,&lt;/p&gt;
&lt;p&gt;以前也没想过这些, 这两年折腾docker, 发现很多服务都可以自己部署, 于是想到可以自己部署一个webdav服务&lt;/p&gt;
&lt;p&gt;搜索了一番, 尝试了&lt;a href=&#34;https://github.com/seaweedfs/seaweedfs&#34;&gt;seaweedfs&lt;/a&gt;, &lt;a href=&#34;https://github.com/micromata/dave&#34;&gt;dave&lt;/a&gt;, 这两个都是本地部署的, 指定文件夹就好, 缺点是迁移的话有点麻烦, 还要备份文件夹重新部署&lt;/p&gt;
&lt;p&gt;后来发现mega提供了工具可以实现webdav, 刚好我也在使用mega, 刚好符合要求, 目前只是同步了阅读进度, 考虑以后把电子书也转移过去&lt;/p&gt;
&lt;h3 id=&#34;使用mega-cmd搭建webdav超级简单&#34;&gt;使用mega-cmd搭建webdav(超级简单)&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 0. 需要先注册一个mega账户, 免费版有20G容量, 还是不错的&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# 1. 安装[MEGAcmd](https://mega.io/zh-hans/cmd#downloadapps)&lt;/span&gt;
mega-cmd
&lt;span style=&#34;color:#75715e&#34;&gt;# 输入账户密码, 2FA码(如果设置了的话)&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# 成功后退出&lt;/span&gt;
quit
&lt;span style=&#34;color:#75715e&#34;&gt;# 选择一个mega目录, 配置webdav&lt;/span&gt;
mega-webdav /mega-path
&lt;span style=&#34;color:#75715e&#34;&gt;# 输出类似于 http://127.0.0.1:4443/TuGwbDVb/mega-path&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;配置nginx反向代理&#34;&gt;配置nginx反向代理&lt;/h3&gt;
&lt;h4 id=&#34;创建密码&#34;&gt;创建密码&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;怎么想也不能搭建一个任何人都可以访问修改的webdav吧, 所以要配置反向代理时设置允许访问的账户和密码, 要事先创建密码文件&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;sudo htpasswd -c /etc/apache2/.htpasswd user1
&lt;span style=&#34;color:#75715e&#34;&gt;# 根据提示输入账号和密码即可&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# htpasswd不存在的话, 说明需要安装apache2-utils或httpd-tools&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;配置nginx&#34;&gt;配置nginx&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&#34;language-conf&#34; data-lang=&#34;conf&#34;&gt;    location /webdavblah/ {
        auth_basic           &amp;quot;moonreader webdav&amp;quot;;
        auth_basic_user_file /etc/apache2/.htpasswd;
        client_max_body_size 100M;

        # 替换PROPFIND方法的body
        proxy_set_header Accept-Encoding &amp;quot;&amp;quot;;
        sub_filter_types *;
        sub_filter &#39;http://127.0.0.1:4443/TuGwbDVb/&#39; &#39;/webdavblah/&#39;;
        sub_filter_once off;
        proxy_pass http://127.0.0.1:4443/TuGwbDVb/;
    }
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;测试&#34;&gt;测试&lt;/h4&gt;
&lt;p&gt;浏览器访问&lt;code&gt;https://example.com/webdavblah/mega-path&lt;/code&gt;, 输入账号密码后看能否访问成功&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 或者可以使用命令行测试&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# 查看列表&lt;/span&gt;
curl --user &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;user:pass&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;https://example.com/webdavblah/mega-path&amp;#39;&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# 创建test目录&lt;/span&gt;
curl --user &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;user:pass&amp;#39;&lt;/span&gt; -X MKCOL &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;https://example.com/webdavblah/mega-path/test&amp;#39;&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# 往test目录上传文件&lt;/span&gt;
curl --user &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;user:pass&amp;#39;&lt;/span&gt; -T &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;/path/to/local/file.txt&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;https://example.com/webdavblah/mega-path/test/&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;其他问题&#34;&gt;其他问题&lt;/h3&gt;
&lt;h3 id=&#34;nginx的上传文件限制&#34;&gt;nginx的上传文件限制&lt;/h3&gt;
&lt;p&gt;nginx的默认文件上传大小限制是1M, 要修改需要的配置文件的http, server, location都添加&lt;code&gt;client_max_body_size 100M;&lt;/code&gt;, 之后重启&lt;/p&gt;
&lt;h3 id=&#34;添加webdav到windows的文件管理器&#34;&gt;添加webdav到windows的文件管理器&lt;/h3&gt;
&lt;p&gt;我的电脑 -&amp;gt; 右键&amp;quot;添加一个网络位置&amp;rdquo; -&amp;gt; 输入&lt;code&gt;https://example.com/webdavblah/mega-path&lt;/code&gt;, 之后输入账号密码即可&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.dimoulis.net/posts/webdav-behind-reverse-proxy/&#34;&gt;WebDAV Behind A Nginx Reverse Proxy - Tech Blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.qed42.com/insights/coe/drupal/using-curl-commands-webdav&#34;&gt;Using Curl commands with Webdav | QED42&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.nginx.com/nginx/admin-guide/security-controls/configuring-http-basic-authentication/&#34;&gt;Restricting Access with HTTP Basic Authentication | NGINX Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.rackspace.com/docs/limit-file-upload-size-in-nginx&#34;&gt;Limit File Upload Size in NGINX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://superuser.com/questions/254113/how-to-connect-to-an-https-webdav-folder-on-windows-7&#34;&gt;How to connect to an HTTPS WebDAV Folder on Windows 7?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://nginx.org/en/docs/http/ngx_http_sub_module.html&#34;&gt;Module ngx_http_sub_module&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://superuser.com/questions/254113/how-to-connect-to-an-https-webdav-folder-on-windows-7&#34;&gt;http_sub_module / sub_filter of nginx and reverse proxy not working&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>绕过前端强制手动输入限制</title>
      <link>https://deletefromuser.github.io/pgm/2023090801/</link>
      <pubDate>Fri, 08 Sep 2023 20:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2023090801/</guid>
      <description>&lt;h3 id=&#34;问题&#34;&gt;问题&lt;/h3&gt;
&lt;p&gt;在客户的系统里登陆，要求填写一个保证书一样的东西，最后有几个输入框不允许复制粘贴，只允许手动输入，而且通过控制台设置的值还通不过检查，因为画面也不是原生html+js的，是前端框架写出来的代码，没找到检查的逻辑，最后只能手动输入了。&lt;/p&gt;
&lt;p&gt;但是等输入完了之后，突然想到了一个解法&lt;/p&gt;
&lt;h3 id=&#34;解法&#34;&gt;解法&lt;/h3&gt;
&lt;p&gt;利用输入法的自定义短语功能，把要输入的一坨东西加到短语里，然后快捷键输入进去，感觉应该是可以的&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>windows使用记录</title>
      <link>https://deletefromuser.github.io/pgm/2023090501/</link>
      <pubDate>Tue, 05 Sep 2023 22:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2023090501/</guid>
      <description>&lt;h2 id=&#34;使用命令行控制屏幕亮度声音&#34;&gt;使用命令行控制屏幕亮度，声音&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;# 下载nircmd - https://www.nirsoft.net/utils/nircmd.html
# 设置亮度（最大100？）
nircmd.exe setbrightness 100
# 修改音量（最大65535）
nircmd.exe setsysvolume 15000
# 静音，取消静音设为1
nircmd.exe mutesysvolume 0
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;目录软链接&#34;&gt;目录软链接&lt;/h2&gt;
&lt;p&gt;以前不小心把一些文件放到C盘里，现在想转移下，但是有些软件关联了这里的文件，重新搞太麻烦，想到可以用类似linux的软链接，就找了方法&lt;/p&gt;
&lt;p&gt;这种方法可以实现无痛把我的文档, 我的视频这些转移到别的盘中&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;mv /c/Users/tom/Documents/doc /d/doc
mv /c/Users/tom/3D&lt;span style=&#34;color:#ae81ff&#34;&gt;\ &lt;/span&gt;Objects /d/win10_user/3D&lt;span style=&#34;color:#ae81ff&#34;&gt;\ &lt;/span&gt;Objects
mv /c/Users/tom/Videos /d/win10_user/Videos
mv /c/Users/tom/Music /d/win10_user/Music
mv /c/Users/tom/Pictures /d/win10_user/Pictures
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 需管理员模式打开powershell&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# 转移资料后, 创建软链接（将原先在C盘的目录转移到D盘后，创建软链接）&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# 第一个路径是虚拟路径&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# -ta 物理路径&lt;/span&gt;
ni C:\Users\tom\Documents\doc -i SymbolicLink -ta &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;D:\doc&amp;#34;&lt;/span&gt;
ni &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;C:\Users\tom\3D Objects&amp;#34;&lt;/span&gt; -i SymbolicLink -ta &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;D:\win10_user\3D_Objects&amp;#34;&lt;/span&gt;
ni &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;C:\Users\tom\Music&amp;#34;&lt;/span&gt; -i SymbolicLink -ta &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;D:\win10_user\Music&amp;#34;&lt;/span&gt;
ni &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;C:\Users\tom\Videos&amp;#34;&lt;/span&gt; -i SymbolicLink -ta &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;D:\win10_user\Videos&amp;#34;&lt;/span&gt;
ni &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;C:\Users\tom\Pictures&amp;#34;&lt;/span&gt; -i SymbolicLink -ta &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;D:\win10_user\Pictures&amp;#34;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;删除服务&#34;&gt;删除服务&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 使用管理员身份打开powershell&lt;/span&gt;
sc.exe delete &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;服务名&amp;#34;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;查询占用某个文件的进程&#34;&gt;查询占用某个文件的进程&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;任务管理器 -&amp;gt; 资源管理器 -&amp;gt; cpu -&amp;gt; 选中进程中的checkbox -&amp;gt; 在关联的句柄区域搜索文件名&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.nirsoft.net/utils/nircmd.html&#34;&gt;NirCmd - Windows command line tool&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://superuser.com/questions/1020821/how-can-i-create-a-symbolic-link-on-windows-10&#34;&gt;How can I create a symbolic link on Windows 10? - Super User&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/76074/how-can-i-delete-a-service-in-windows&#34;&gt;How can I delete a service in Windows?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://superuser.com/questions/117902/find-out-which-process-is-locking-a-file-or-folder-in-windows&#34;&gt;Find out which process is locking a file or folder in Windows&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>V2Ray &#43; WebSocket &#43; TLS &#43; CloudFlare配置代理</title>
      <link>https://deletefromuser.github.io/pgm/2023090201/</link>
      <pubDate>Sat, 02 Sep 2023 15:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2023090201/</guid>
      <description>&lt;h3 id=&#34;1-使用docker安装-v2ray&#34;&gt;1. 使用docker安装 V2Ray&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;准备工作&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;安装docker&lt;/li&gt;
&lt;li&gt;找个目录, cd进去, 新建&lt;code&gt;config.json&lt;/code&gt;文件, 写入下列内容&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;{
  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;inbounds&amp;#34;&lt;/span&gt;: [{
    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;port&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;10086&lt;/span&gt;,
    &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;//&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;因为还要用&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;Nginx&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;反代，这里直接监听本地就行&lt;/span&gt;
    &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;//&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;listen&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;127.0.0.1&amp;#34;&lt;/span&gt;,
    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;protocol&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;vmess&amp;#34;&lt;/span&gt;,
    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;settings&amp;#34;&lt;/span&gt;: {
      &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;clients&amp;#34;&lt;/span&gt;: [
        {
          &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;//&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;用户&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;UUID，自己随机弄一个&lt;/span&gt;
          &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;id&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;23ad6b10-8d1a-40f7-8ad0-e3e35cd38297&amp;#34;&lt;/span&gt;,
          &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;level&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;,
          &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;alterId&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;64&lt;/span&gt;
        }
      ]
    },
    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;streamSettings&amp;#34;&lt;/span&gt;: {
      &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;//&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;指定底层传输方式为&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;WebSocket&lt;/span&gt;
      &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;network&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ws&amp;#34;&lt;/span&gt;,
      &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;wsSettings&amp;#34;&lt;/span&gt;: {
        &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;//&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;在哪个路径上提供&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;WS&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;服务，可自定义&lt;/span&gt;
        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;path&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/whatever&amp;#34;&lt;/span&gt;
      }
    }
  }],
  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;outbounds&amp;#34;&lt;/span&gt;: [{
    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;protocol&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;freedom&amp;#34;&lt;/span&gt;,
    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;settings&amp;#34;&lt;/span&gt;: {}
  },{
    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;protocol&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;blackhole&amp;#34;&lt;/span&gt;,
    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;settings&amp;#34;&lt;/span&gt;: {},
    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;tag&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;blocked&amp;#34;&lt;/span&gt;
  }],
  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;routing&amp;#34;&lt;/span&gt;: {
    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;rules&amp;#34;&lt;/span&gt;: [
      {
        &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;//&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;默认规则，禁止访问服务器内网&lt;/span&gt;
        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;field&amp;#34;&lt;/span&gt;,
        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;ip&amp;#34;&lt;/span&gt;: [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;geoip:private&amp;#34;&lt;/span&gt;],
        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;outboundTag&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;blocked&amp;#34;&lt;/span&gt;
      }
    ]
  }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;2-运行-v2ray&#34;&gt;2. 运行 V2Ray&lt;/h3&gt;
&lt;p&gt;在1中的文件夹内运行下列命令&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;docker run -d --name v2ray -v &lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;PWD&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;/config.json:/etc/v2ray/config.json -p 10086:10086 v2fly/v2fly-core:v5.4.1 run -c /etc/v2ray/config.json
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;3-配置-nginx&#34;&gt;3. 配置 Nginx&lt;/h3&gt;
&lt;p&gt;在nginx的配置中添加下列内容&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-conf&#34; data-lang=&#34;conf&#34;&gt;location /whatever {
    proxy_redirect off;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection &amp;quot;upgrade&amp;quot;;
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    set $is_v2ray 0;
    if ($http_upgrade = &amp;quot;websocket&amp;quot;) {
        set $is_v2ray 1;
    }

    if ($is_v2ray = 1) {
        # 仅当请求为 WebSocket 时才反代到 V2Ray
        proxy_pass http://127.0.0.1:10086;
    }

    if ($is_v2ray = 0) {
        # 否则显示正常网页
        rewrite ^/(.*)$ /mask-page last;
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;完成后测试&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;curl -i http://127.0.0.1:10086/whatever
&lt;span style=&#34;color:#75715e&#34;&gt;# 400 Bad Request 则为配置成功&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;4-配置-cloudflare&#34;&gt;4. 配置 CloudFlare&lt;/h3&gt;
&lt;p&gt;使用cloudflare dns, 并开启dns proxy&lt;/p&gt;
&lt;p&gt;完成后测试&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 安装wscat, `sudo npm install -g wscat`&lt;/span&gt;
wscat -c wss://example.com/whatever
&lt;span style=&#34;color:#75715e&#34;&gt;# Connected (press CTRL+C to quit) 则为成功&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;5-配置-v2rayn-客户端&#34;&gt;5. 配置 V2RayN 客户端&lt;/h3&gt;
&lt;p&gt;&lt;img src=&#34;../../images/v2rayN_setting.png&#34; alt=&#34;V2RayN 客户端截图&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://printempw.github.io/v2ray-ws-tls-cloudflare/&#34;&gt;搭建备用梯子：V2Ray + WebSocket + TLS + CloudFlare - PRIN BLOG&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://medium.com/@coorpee/docker-v2ray-caddy-3e484d6c84bc&#34;&gt;Docker v2ray + caddy. 说明 | by Coorpee | Medium&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/v2fly/v2ray-core/discussions/1508&#34;&gt;failed to read response header &amp;gt; websocket: close 1000 (normal)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>使用Cloudflare &#43; Gmail创建自定义邮件地址, 收发邮件</title>
      <link>https://deletefromuser.github.io/pgm/2023082902/</link>
      <pubDate>Tue, 29 Aug 2023 19:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2023082902/</guid>
      <description>&lt;h3 id=&#34;使用cloudflare的电子邮件路由功能接收邮件&#34;&gt;使用Cloudflare的电子邮件路由功能接收邮件&lt;/h3&gt;
&lt;p&gt;进入站点 -&amp;gt; 电子邮件 -&amp;gt; 电子邮件路由 -&amp;gt; 创建, 设置下自定义邮件地址和转发邮箱地址即可&lt;/p&gt;
&lt;h3 id=&#34;使用gmail以自定义邮件地址发送邮件&#34;&gt;使用Gmail以自定义邮件地址发送邮件&lt;/h3&gt;
&lt;p&gt;Gmail -&amp;gt; 设置 -&amp;gt; 全部设置 -&amp;gt; 账号和导入 -&amp;gt; 名字 -&amp;gt; 添加其他的电子邮箱地址&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;输入名字和在Cloudflare上创建的自定义邮寄地址, 下一步&lt;/li&gt;
&lt;li&gt;依次输入smtp.gmail.com, 端口号无需修改, gmail邮箱地址@前的部分, gmail密码即google账户密码(如果开启了2FA, 会登陆失败, 这时需要设置一个APP密码, 后述), 点确定没问题即可&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;设置google-app密码&#34;&gt;设置google app密码&lt;/h3&gt;
&lt;p&gt;点击头像进入账户 -&amp;gt; 安全 -&amp;gt; 两步验证 -&amp;gt; app密码 -&amp;gt; 生成即可&lt;/p&gt;
&lt;h3 id=&#34;其他疑难杂症&#34;&gt;其他疑难杂症&lt;/h3&gt;
&lt;h4 id=&#34;还是收不到邮件&#34;&gt;还是收不到邮件!&lt;/h4&gt;
&lt;p&gt;看看垃圾箱&lt;/p&gt;
&lt;h4 id=&#34;还是收不到邮件-1&#34;&gt;还是收不到邮件!!&lt;/h4&gt;
&lt;p&gt;在DNS记录里添加下面值的TXT记录&lt;/p&gt;
&lt;p&gt;&lt;code&gt;v=spf1 [IP ADDRESS] include:_spf.google.com include:[DOMAIN] ~all&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://prantalks.com/how-to-create-free-business-email-using-cloudflare-and-use-smtp-on-gmail/&#34;&gt;Send mail using Cloudflare email address&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/60701936/error-invalid-login-application-specific-password-required&#34;&gt;node.js - Error: Invalid login: Application-specific password required - Stack Overflow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://support.google.com/accounts/answer/185833?hl=en&#34;&gt;Create &amp;amp; use app passwords&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://support.google.com/googlecloud/answer/10756302&#34;&gt;I need to set up SPF on my domain to send emails with Gmail, not receive&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    
    <item>
      <title>在启用Cloudflare DNS Proxy的情况下使用certbot自动更新letsencrypt证书</title>
      <link>https://deletefromuser.github.io/pgm/2023082901/</link>
      <pubDate>Tue, 29 Aug 2023 19:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2023082901/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;结论是不能, 但是Cloudflare提供了API可以开关DNS Proxy, certbot提供了hook&lt;/p&gt;
&lt;p&gt;于是就可以先关闭DNS Proxy, 再更新证书, 完成后再开启DNS Proxy&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;获取cloudflare-dns记录id&#34;&gt;获取Cloudflare DNS记录ID&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 区域ID 可以在Cloudflare中站点主页的右下角找到, 并且有申请API令牌的快捷入口&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# 返回的结果是json, 找到A记录和CNAME记录的ID&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# https://developers.cloudflare.com/api/operations/dns-records-for-a-zone-list-dns-records&lt;/span&gt;
curl -X GET &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://api.cloudflare.com/client/v4/zones/[区域ID zoneId]/dns_records&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;     -H &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Authorization: Bearer [API令牌]&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;     -H &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Content-Type:application/json&amp;#34;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;关闭dns-proxy&#34;&gt;关闭DNS Proxy&lt;/h3&gt;
&lt;p&gt;把下面脚本写入&lt;code&gt;/etc/letsencrypt/renewal-hooks/pre/pre.sh&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# https://developers.cloudflare.com/api/operations/dns-records-for-a-zone-patch-dns-record&lt;/span&gt;
curl -sS --request PATCH &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  --url https://api.cloudflare.com/client/v4/zones/&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;区域ID zoneId&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;/dns_records/&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;A记录ID&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  --header &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Content-Type: application/json&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  --header &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Authorization: Bearer [API令牌]&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  --data &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;{
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  &amp;#34;content&amp;#34;: &amp;#34;112.112.113.114&amp;#34;,
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  &amp;#34;name&amp;#34;: &amp;#34;example.com&amp;#34;,
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  &amp;#34;proxied&amp;#34;: false,
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  &amp;#34;type&amp;#34;: &amp;#34;A&amp;#34;,
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  &amp;#34;comment&amp;#34;: &amp;#34;&amp;#34;,
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  &amp;#34;tags&amp;#34;: [
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  ],
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  &amp;#34;ttl&amp;#34;: 3600
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&amp;#39;&lt;/span&gt; &amp;gt; test.log
curl --request PATCH &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  --url https://api.cloudflare.com/client/v4/zones/&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;区域ID zoneId&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;/dns_records/&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;CNAME记录ID&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  --header &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Content-Type: application/json&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  --header &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Authorization: Bearer [API令牌]&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  --data &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;{
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  &amp;#34;content&amp;#34;: &amp;#34;example.com&amp;#34;,
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  &amp;#34;name&amp;#34;: &amp;#34;www&amp;#34;,
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  &amp;#34;proxied&amp;#34;: false,
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  &amp;#34;type&amp;#34;: &amp;#34;CNAME&amp;#34;,
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  &amp;#34;comment&amp;#34;: &amp;#34;&amp;#34;,
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  &amp;#34;tags&amp;#34;: [
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  ],
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  &amp;#34;ttl&amp;#34;: 3600
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&amp;#39;&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# 等待五分半, 确保DNS Proxy关闭起效&lt;/span&gt;
sleep &lt;span style=&#34;color:#ae81ff&#34;&gt;330&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;开启dns-proxy&#34;&gt;开启DNS Proxy&lt;/h3&gt;
&lt;p&gt;把下面脚本写入&lt;code&gt;/etc/letsencrypt/renewal-hooks/post/post.sh&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# https://developers.cloudflare.com/api/operations/dns-records-for-a-zone-patch-dns-record&lt;/span&gt;
curl -sS --request PATCH &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  --url https://api.cloudflare.com/client/v4/zones/&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;区域ID zoneId&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;/dns_records/&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;A记录ID&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  --header &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Content-Type: application/json&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  --header &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Authorization: Bearer [API令牌]&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  --data &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;{
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  &amp;#34;content&amp;#34;: &amp;#34;112.112.113.114&amp;#34;,
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  &amp;#34;name&amp;#34;: &amp;#34;example.com&amp;#34;,
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  &amp;#34;proxied&amp;#34;: true,
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  &amp;#34;type&amp;#34;: &amp;#34;A&amp;#34;,
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  &amp;#34;comment&amp;#34;: &amp;#34;&amp;#34;,
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  &amp;#34;tags&amp;#34;: [
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  ],
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  &amp;#34;ttl&amp;#34;: 3600
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&amp;#39;&lt;/span&gt; &amp;gt; test.log
curl --request PATCH &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  --url https://api.cloudflare.com/client/v4/zones/&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;区域ID zoneId&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;/dns_records/&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;CNAME记录ID&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  --header &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Content-Type: application/json&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  --header &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Authorization: Bearer [API令牌]&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  --data &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;{
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  &amp;#34;content&amp;#34;: &amp;#34;example.com&amp;#34;,
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  &amp;#34;name&amp;#34;: &amp;#34;www&amp;#34;,
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  &amp;#34;proxied&amp;#34;: true,
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  &amp;#34;type&amp;#34;: &amp;#34;CNAME&amp;#34;,
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  &amp;#34;comment&amp;#34;: &amp;#34;&amp;#34;,
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  &amp;#34;tags&amp;#34;: [
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  ],
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  &amp;#34;ttl&amp;#34;: 3600
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;测试&#34;&gt;测试&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;certbot renew --dry-run
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://certbot.eff.org/instructions?ws=nginx&amp;amp;os=ubuntufocal&#34;&gt;certbot instructions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://eff-certbot.readthedocs.io/en/stable/using.html#setting-up-automated-renewal&#34;&gt;Setting up automated renewal&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    
    <item>
      <title>sql使用memo</title>
      <link>https://deletefromuser.github.io/pgm/sql-2023060301/</link>
      <pubDate>Sun, 06 Aug 2023 14:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/sql-2023060301/</guid>
      <description>&lt;h3 id=&#34;count1-count-countcolumn区别&#34;&gt;count(1), count(*), count(column)区别&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;count(1)&lt;/code&gt;和&lt;code&gt;count(*)&lt;/code&gt;是相同的, 但&lt;code&gt;count(*)&lt;/code&gt;代表的语义更明确&lt;/p&gt;
&lt;p&gt;&lt;code&gt;COUNT(&amp;lt;expression&amp;gt;)&lt;/code&gt; 统计非空值个数&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;使用in时是否需要先distinct&#34;&gt;使用IN时是否需要先distinct&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;不需要, distinct反而会降低性能&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;exists-vs-in&#34;&gt;EXISTS vs IN&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;由于目前的数据库优化, 对于可以替代的情况下, 性能没有区别&lt;/p&gt;
&lt;p&gt;EXISTS 可以用来进行多列的比较, IN则不行&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;多线程-乐观锁-悲观锁&#34;&gt;多线程, 乐观锁, 悲观锁&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;当存在一条记录可能被很多人同时修改的时候, 需要考虑同步操作的问题,
当不加锁无法达成目标时, 可以使用锁, 悲观锁由于需要锁定记录, 太影响性能, 优先考虑使用乐观锁&lt;/p&gt;
&lt;p&gt;&lt;em&gt;考虑同步更新库存的情况&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;不加锁方案&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;将库存数量放入更新条件中, 如果库存不足, 则更新结果数量为0, 再做相应处理&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;Update&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; Stock &lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt; quantity &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; quantity &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;where&lt;/span&gt; ItemId&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;01&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;and&lt;/span&gt; quantity &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;乐观锁方案&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在处理的最开始先查询记录, 将更新时间(或者版本号)(即事先约定每次更新都要更新的字段)放入更新条件中, 如果更新结果数量为0, 则说明记录已被其他人修改过, 再做相应处理&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;UPDATE&lt;/span&gt; Stock &lt;span style=&#34;color:#66d9ef&#34;&gt;SET&lt;/span&gt; quantity &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;15&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;version&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;version&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;WHERE&lt;/span&gt; itemId &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;01&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;version&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;悲观锁方案&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;处理的最开始先把记录锁住(SELECT FOR UPDATE), 处理完成后再放开&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://www.quora.com/Should-I-use-DISTINCT-in-a-subquery-when-using-IN&#34;&gt;Should I use &amp;lsquo;DISTINCT&amp;rsquo; in a subquery when using &amp;lsquo;IN&amp;rsquo;? - Quora&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://pretius.com/blog/difference-between-count-vs-count1-oracle/&#34;&gt;Count(*) vs Count(1) in Oracle: The ultimate comparison - Pretius&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/7124546/sql-best-practice-count1-or-count&#34;&gt;SQL Best Practice: count(1) or count(*) - Stack Overflow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.sqlinthewild.co.za/index.php/2009/04/14/on-counts/&#34;&gt;On Counts | SQL in the Wild&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.sqlinthewild.co.za/index.php/2009/08/17/exists-vs-in/&#34;&gt;EXISTS vs IN | SQL in the Wild&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/2065329/sql-server-in-vs-exists-performance&#34;&gt;SQL Server IN vs. EXISTS Performance - Stack Overflow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/129329/optimistic-vs-pessimistic-locking&#34;&gt;Optimistic vs. Pessimistic locking - Stack Overflow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.couchbase.com/blog/optimistic-or-pessimistic-locking-which-one-should-you-pick/&#34;&gt;Optimistic or Pessimistic Locking: Which One Should You Pick? | Couchbase Blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://medium.com/@manjulapiyumal/effective-usage-oracle-row-locking-with-spring-jdbc-for-concurrent-data-processing-without-having-9ae55e4331a6&#34;&gt;Effective usage Oracle Row Locking with Spring JDBC for concurrent data processing without having… | by Manjula Piyumal | Medium&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://dba.stackexchange.com/questions/35812/why-is-optimistic-locking-faster-than-pessimistic-locking&#34;&gt;Why is optimistic locking faster than pessimistic locking? - Database Administrators Stack Exchange&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.shift-the-oracle.com/sql/select-for-update.html&#34;&gt;SELECT FOR UPDATE - オラクル・Oracle SQL 入門&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.dba-oracle.com/t_select_update_skip_locked.htm&#34;&gt;SELECT FOR UPDATE SKIP LOCKED Tips (Oracle PL/SQL)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://terasolunaorg.github.io/guideline/public_review/ArchitectureInDetail/ExclusionControl.html&#34;&gt;Exclusion Control | Tutorials | Guidelines | Terasoluna Development Architecture 5.x&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://medium-company.com/mybatis-%E6%A5%BD%E8%A6%B3%E3%83%AD%E3%83%83%E3%82%AF/&#34;&gt;MyBatis 楽観ロック - Qiita&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    
    <item>
      <title>开发软件使用记录</title>
      <link>https://deletefromuser.github.io/pgm/2023071701/</link>
      <pubDate>Mon, 17 Jul 2023 20:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2023071701/</guid>
      <description>&lt;h2 id=&#34;vscode&#34;&gt;VSCODE&lt;/h2&gt;
&lt;h3 id=&#34;切换命令行posershell-git-bash&#34;&gt;切换命令行(PoserShell-&amp;gt;Git Bash)&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;CTRL + SHIFT + P&lt;/code&gt;后，输入&lt;code&gt;Select Default Profile&lt;/code&gt;，选择bash即可&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;大小写转换&#34;&gt;大小写转换&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;CTRL + SHIFT + P&lt;/code&gt;后，输入upper, 选择&lt;code&gt;Transform to Uppercase&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;OR&lt;/p&gt;
&lt;p&gt;&lt;code&gt;CTRL + SHIFT + X&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://neutrondev.com/vs-code-integrate-git-bash-default-terminal/&#34;&gt;VS Code Integrate Git Bash as Default Terminal - Neutron Dev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/35184509/make-selected-block-of-text-uppercase&#34;&gt;visual studio code - Make selected block of text uppercase - Stack Overflow&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>使用Utterances为Hugo添加评论功能</title>
      <link>https://deletefromuser.github.io/pgm/2023070203/</link>
      <pubDate>Sun, 02 Jul 2023 18:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2023070203/</guid>
      <description>&lt;h3 id=&#34;在github中添加uterances&#34;&gt;在github中添加Uterances&lt;/h3&gt;
&lt;p&gt;因为评论是存储在仓库的issue中，所以要给Uterances权限，添加时只需要给一个公有仓库的权限即可（通常是github pages）&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/apps/utterances&#34;&gt;utterances&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;生成产生评论的js脚本&#34;&gt;生成产生评论的js脚本&lt;/h3&gt;
&lt;p&gt;输入repo，theme，点击copy即可&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://utteranc.es/&#34;&gt;utterances&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;设置hugo-theme&#34;&gt;设置hugo theme&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;layouts/partials/comments.html （没有则创建）&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;{{- /* Comments area start */ -}}

&amp;lt;!-- 上一步复制的东西 --&amp;gt;

{{- /* Comments area end */ -}}
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;修改layouts/_default/single.html&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在&lt;code&gt;&amp;lt;/article&amp;gt;&lt;/code&gt;之前添加下列内容&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{{- if (.Param &amp;quot;comments&amp;quot;) }}
  {{- partial &amp;quot;comments.html&amp;quot; . }}
{{- end }}
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;修改config.yml&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;[Params]
  ...
  comments = true
  ...
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.pugillum.com/posts/2021_11_28_github_issues_as_comments/&#34;&gt;Add comments to your Hugo blog linked to Github issues with utterances&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>AI提示词记录</title>
      <link>https://deletefromuser.github.io/pgm/2023071101/</link>
      <pubDate>Sun, 02 Jul 2023 12:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2023071101/</guid>
      <description>&lt;h2 id=&#34;bing-ai&#34;&gt;Bing AI&lt;/h2&gt;
&lt;h3 id=&#34;根据汉字描述生成数据库表字段名&#34;&gt;根据汉字描述，生成数据库表字段名&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;书籍名称&lt;/p&gt;
&lt;p&gt;根据上面的描述，生成oracle数据库表中可用的表字段id，不需要类型，小于25个字符，每行一个给我&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;根据数据库表定义生成测试数据插入sql&#34;&gt;根据数据库表定义，生成测试数据插入SQL&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;[建表语句]&lt;/p&gt;
&lt;p&gt;这是一个数据库建表语句，给我生成一个往这个表里插入一条数据的sql&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;OR&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;this is a oracle table create sql, make a sql script to insert data to this table , i need 20 rows&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;给出一段有规律的数据生成后续&#34;&gt;给出一段有规律的数据，生成后续&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;SELECT 1, 1, 1, 1, &amp;lsquo;&#39;, &amp;lsquo;&#39;, &amp;lsquo;TEST&amp;rsquo;, &amp;lsquo;TEST&amp;rsquo;, 0, &amp;lsquo;&#39;, sysdate, 222, NULL, NULL&lt;/p&gt;
&lt;p&gt;UNION ALL&lt;/p&gt;
&lt;p&gt;SELECT 2, 1, 2, 2, &amp;lsquo;&#39;, &amp;lsquo;&#39;, &amp;lsquo;TEST2&amp;rsquo;, &amp;lsquo;TEST2&amp;rsquo;, 1, &amp;lsquo;&#39;, sysdate, 222, NULL, NULL&lt;/p&gt;
&lt;p&gt;UNION ALL&lt;/p&gt;
&lt;p&gt;续写上面的语句，重复20次&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;把url转换成markdown链接&#34;&gt;把url转换成markdown链接&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://www.cnblogs.com/huangjiandong2012/p/4040030.html&#34;&gt;https://www.cnblogs.com/huangjiandong2012/p/4040030.html&lt;/a&gt;
&lt;a href=&#34;https://docs.spring.io/spring-security/reference/servlet/authentication/session-management.html#session-mgmt&#34;&gt;https://docs.spring.io/spring-security/reference/servlet/authentication/session-management.html#session-mgmt&lt;/a&gt;
&lt;a href=&#34;https://mtyurt.net/post/spring-expiring-all-sessions-of-a-user.html&#34;&gt;https://mtyurt.net/post/spring-expiring-all-sessions-of-a-user.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;提取url的title, 转换成markdown格式的link&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;google-bard&#34;&gt;Google Bard&lt;/h2&gt;
&lt;h3 id=&#34;生成文章重点摘要&#34;&gt;生成文章重点摘要&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://cn.nytimes.com/china/20230711/china-marriage-rate/&#34;&gt;https://cn.nytimes.com/china/20230711/china-marriage-rate/&lt;/a&gt; 给我整理下这篇文章的重点内容&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;chatgpt&#34;&gt;ChatGPT&lt;/h2&gt;
&lt;h3 id=&#34;生成技术文章内的测试代码&#34;&gt;生成技术文章内的测试代码&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://qiita.com/mojihige/items/2cbf9b3ff1d6b743ab17&#34;&gt;https://qiita.com/mojihige/items/2cbf9b3ff1d6b743ab17&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;给我生成这篇文章里的测试用sql&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;中文翻译&#34;&gt;中文翻译&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;I want you to act as an chinese translator, spelling corrector and improver. I will speak to you in any language and you will detect the language, translate it and answer in the corrected and improved version of my text, in chinese.I want you to only reply the translation and nothing else, do not write explanations. My first sentence is &amp;ldquo;ランダムで取り巻きが発生&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;英文翻译&#34;&gt;英文翻译&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;I want you to act as an English translator, spelling corrector and improver. I will speak to you in any language and you will detect the language, translate it and answer in the corrected and improved version of my text, in English.I want you to only reply the translation and nothing else, do not write explanations. My first sentence is &amp;ldquo;istanbulu cok seviyom burada olmak cok guzel&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;日文翻译&#34;&gt;日文翻译&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;I want you to act as an japanese translator, spelling corrector and improver. I will speak to you in any language and you will detect the language, translate it and answer in the corrected and improved version of my text, in japanese.I want you to only reply the translation and nothing else, do not write explanations. My first sentence is &amp;ldquo;good morning&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;java工程师&#34;&gt;JAVA工程师&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;I want you to act as a java software engineer. I will write some programing questions and it will be your job to explain them in easy-to-understand terms. This could contain providing step-by-step instructions for writing code with visuals, or suggesting online resources for further study. My first suggestion request is &amp;ldquo;in java can threadlocal cause memory leak, explain to me with code&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;重置对话&#34;&gt;重置对话&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;ignore all i said above, blah blah&amp;hellip;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;翻译菜名&#34;&gt;翻译菜名&lt;/h3&gt;
&lt;p&gt;你是一个日本料理专家，我给你一个中文菜名，给我对应的日语菜名，同时给出几个做法用料相似的日本料理， 第一个菜名是【青椒炒蛋】&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>暴力破解7z加密文件</title>
      <link>https://deletefromuser.github.io/pgm/2023070201/</link>
      <pubDate>Sun, 02 Jul 2023 12:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2023070201/</guid>
      <description>&lt;h3 id=&#34;前置准备&#34;&gt;前置准备&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/philsmd/7z2hashcat&#34;&gt;7z2hashcat&lt;/a&gt; -&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/hashcat/hashcat&#34;&gt;hashcat&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;使用7z2hashcat获取给hashcat解密用的hash&#34;&gt;使用7z2hashcat获取给hashcat解密用的hash&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;perl 7z2hashcat.pl file.7z &amp;gt; hash.txt&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id=&#34;使用hashcat暴力破解&#34;&gt;使用hashcat暴力破解&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;hashcat -a 3 -m 11600 hash.txt&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&#34;../../images/2023070201_01.jpg&#34; alt=&#34;结果&#34;&gt;&lt;/p&gt;
&lt;p&gt;密码较长的话，花费时间就会很长。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://infinitelogins.com/2020/04/29/how-to-crack-encrypted-7z-archives/&#34;&gt;How to Crack Encrypted 7z Archives&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://hashcat.net/forum/thread-6291.html&#34;&gt;Help with cracking 7zip hash&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://hashcat.net/wiki/doku.php?id=frequently_asked_questions#why_should_i_use_a_mask_attack_i_just_want_to_brute_these_hashes&#34;&gt;Why should I use a mask attack? I just want to &amp;ldquo;brute&amp;rdquo; these hashes!&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>记一次OOM异常解决</title>
      <link>https://deletefromuser.github.io/pgm/2023070801/</link>
      <pubDate>Sun, 04 Jun 2023 20:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2023070801/</guid>
      <description>&lt;h3 id=&#34;问题描述&#34;&gt;问题描述&lt;/h3&gt;
&lt;p&gt;一台服务器出现OOM（为本应用分配了4G内存），挂掉了&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;java.lang.OutOfMemoryError: GC overhead limit exceeded&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;问题排查&#34;&gt;问题排查&lt;/h3&gt;
&lt;p&gt;拿到dump文件，使用jvisualvm打开查看后，发现下面两个对象实例数，占用空间过高&lt;/p&gt;






&lt;table class=&#34;table table-striped table-bordered&#34;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&#34;left&#34;&gt;类名&lt;/th&gt;
&lt;th align=&#34;center&#34;&gt;实例数百分比&lt;/th&gt;
&lt;th align=&#34;center&#34;&gt;实例数&lt;/th&gt;
&lt;th align=&#34;center&#34;&gt;大小&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;org.apache.xmlbeans.impl.store.Xobj$AttrXobj&lt;/td&gt;
&lt;td align=&#34;center&#34;&gt;40%&lt;/td&gt;
&lt;td align=&#34;center&#34;&gt;1500w&lt;/td&gt;
&lt;td align=&#34;center&#34;&gt;2G&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;org.apache.xmlbeans.impl.store.Xobj$ElementXobj&lt;/td&gt;
&lt;td align=&#34;center&#34;&gt;12%&lt;/td&gt;
&lt;td align=&#34;center&#34;&gt;450w&lt;/td&gt;
&lt;td align=&#34;center&#34;&gt;700M&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;问题分析&#34;&gt;问题分析&lt;/h3&gt;
&lt;p&gt;查代码发现疑似是使用poi解析excel文件时解析文件占用过多内存，解析文件的时候会解析整个文件，解析excel其实就是在解析xml，非常的消耗内存&lt;/p&gt;
&lt;h3 id=&#34;问题解决&#34;&gt;问题解决&lt;/h3&gt;
&lt;p&gt;调查发现可以使用流式读取一次只读取特定的行数，降低内存占用&lt;/p&gt;
&lt;p&gt;测试验证，未修改前，设置jvm内存为500M，解析1M以上的excel文件就会报OOM，修改后，问题未出现&lt;/p&gt;
&lt;h3 id=&#34;解决方案&#34;&gt;解决方案&lt;/h3&gt;
&lt;p&gt;使用这位仁兄写成的&lt;a href=&#34;https://github.com/monitorjbl/excel-streaming-reader&#34;&gt;包装库&lt;/a&gt;,因为不想升级项目poi的版本，影响太大，同时又想用到原来的Workbook里面的一些api，所以选择了1.0.2版本，这版的poi依赖版本依然高于我们项目中的poi，于是只好把fork一份之后降低poi版本后重新编译一个包出来用&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/11891851/how-to-load-a-large-xlsx-file-with-apache-poi&#34;&gt;java - How to load a large xlsx file with Apache POI? - Stack Overflow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.baeldung.com/java-heap-dump-capture&#34;&gt;Different Ways to Capture Java Heap Dumps | Baeldung&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.viralpatel.net/setting-tomcat-heap-size-jvm-heap-eclipse/&#34;&gt;Setting Tomcat Heap Size (JVM Heap) in Eclipse. Heap Size Tomcat Eclipse&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://reflectoring.io/create-analyze-heapdump/&#34;&gt;Creating and Analyzing Java Heap Dumps&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>office使用记录</title>
      <link>https://deletefromuser.github.io/pgm/tip-2023060301/</link>
      <pubDate>Sat, 03 Jun 2023 20:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/tip-2023060301/</guid>
      <description>&lt;h4 id=&#34;word中快速粘贴无格式文本&#34;&gt;word中快速粘贴无格式文本&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;Ctrl+Alt+V&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id=&#34;excel中查找重复记录&#34;&gt;excel中查找重复记录&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;Home -&amp;gt; Conditional Formatting -&amp;gt; Highlight Cells Rules, Duplicate Values&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id=&#34;excel中查找相同记录个数为3的&#34;&gt;excel中查找相同记录个数为3的&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;Home -&amp;gt; Conditional Formatting -&amp;gt; New Rule -&amp;gt; Use a formula to determine which cells to format -&amp;gt; COUNTIF($A$1:$C$10,A1)=3&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id=&#34;libreoffice-calc中查找重复记录&#34;&gt;LibreOffice Calc中查找重复记录&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;Format -&amp;gt; Conditional -&amp;gt; Condition -&amp;gt; Cell value is duplicate -&amp;gt; Apply Style&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://superuser.com/questions/1376470/what-is-the-keyboard-shortcut-for-pasting-without-formatting-in-ms-word&#34;&gt;What is the keyboard shortcut for pasting without formatting in MS Word?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.excel-easy.com/examples/find-duplicates.html&#34;&gt;How to Find Duplicates in Excel (In Easy Steps)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://ask.libreoffice.org/t/auto-highlight-duplicate-entries-in-calc/46110&#34;&gt;Auto highlight duplicate entries in calc - English - Ask LibreOffice&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>jenkins使用记录</title>
      <link>https://deletefromuser.github.io/pgm/2023052101/</link>
      <pubDate>Sun, 21 May 2023 18:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2023052101/</guid>
      <description>&lt;h3 id=&#34;使用docker部署jenkins&#34;&gt;使用docker部署jenkins&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 1&lt;/span&gt;
docker network create jenkins
&lt;span style=&#34;color:#75715e&#34;&gt;# 2 为了能在docker的jenkins实例中运行docker命令&lt;/span&gt;
docker run &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  --name jenkins-docker &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  --rm &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  --detach &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  --privileged &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  --network jenkins &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  --network-alias docker &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  --env DOCKER_TLS_CERTDIR&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/certs &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  --volume jenkins-docker-certs:/certs/client &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  --volume jenkins-data:/var/jenkins_home &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  --publish 2376:2376 &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  docker:dind &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  --storage-driver overlay2
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-Dockerfile&#34; data-lang=&#34;Dockerfile&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 创建dockerfile&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; jenkins/jenkins:lts-jdk11&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;USER&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; root&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;ENV&lt;/span&gt; TZ&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;Etc/GMT-8&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;RUN&lt;/span&gt; ln -snf /usr/share/zoneinfo/$TZ /etc/localtime &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; echo $TZ &amp;gt; /etc/timezone&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;RUN&lt;/span&gt; apt-get update &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt-get install -y lsb-release&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;RUN&lt;/span&gt; curl -fsSLo /usr/share/keyrings/docker-archive-keyring.asc &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  https://download.docker.com/linux/debian/gpg&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;RUN&lt;/span&gt; echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;deb [arch=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;dpkg --print-architecture&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; \
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  signed-by=/usr/share/keyrings/docker-archive-keyring.asc] \
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  https://download.docker.com/linux/debian \
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;lsb_release -cs&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; stable&amp;#34;&lt;/span&gt; &amp;gt; /etc/apt/sources.list.d/docker.list&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;RUN&lt;/span&gt; apt-get update &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt-get install -y docker-ce-cli&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;USER&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; jenkins&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;RUN&lt;/span&gt; jenkins-plugin-cli --plugins &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;blueocean docker-workflow&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 3 创建自定义Jenkins Docker image&lt;/span&gt;
docker build -t myjenkins-blueocean:lts-jdk11 .
&lt;span style=&#34;color:#75715e&#34;&gt;# 4 创建Jenkins Docker实例&lt;/span&gt;
docker run &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  --name jenkins-blueocean &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  --restart&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;on-failure &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  --detach &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  --network jenkins &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  --env DOCKER_HOST&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;tcp://docker:2376 &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  --env DOCKER_CERT_PATH&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/certs/client &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  --env DOCKER_TLS_VERIFY&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  --publish 19080:8080 &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  --publish 49000:50000 &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  --volume jenkins-data:/var/jenkins_home &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  --volume jenkins-docker-certs:/certs/client:ro &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  myjenkins-blueocean:lts-jdk11
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;启动报错-an-error-occurred-during-installation-no-such-plugin-cloudbees-folder&#34;&gt;启动报错 &lt;code&gt;An error occurred during installation: No such plugin: cloudbees-folder&lt;/code&gt;&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;重启即可&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;设置代理以访问githubgfw-again&#34;&gt;设置代理以访问github（GFW again）&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Manage Jenkins &amp;gt; Manage Plugins &amp;gt; Advanced &amp;gt; HTTP Proxy Configuration&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/53822806/how-to-configure-proxy-in-jenkins-to-access-git-repository&#34;&gt;How to configure proxy in Jenkins to access Git Repository?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>docker使用记录</title>
      <link>https://deletefromuser.github.io/pgm/2023052001/</link>
      <pubDate>Sat, 20 May 2023 18:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2023052001/</guid>
      <description>&lt;p&gt;使用docker实例命令行&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;docker exec -it spring-cloud-config-server_1 bash
&lt;span style=&#34;color:#75715e&#34;&gt;# 以root实行&lt;/span&gt;
docker exec -u &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; -it mycontainer bash
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;网络配置，使不同的docker实例互相联通&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 连接mysql的docker实例&lt;/span&gt;
docker network create mysql_network
docker network connect mysql_network mysql_instance
docker network connect mysql_network spring-cloud-config-server_1
&lt;span style=&#34;color:#75715e&#34;&gt;# 查看网络列表&lt;/span&gt;
docker network list
&lt;span style=&#34;color:#75715e&#34;&gt;# 查看网络详细，找到gateway地址，加上3306即可访问mysql&lt;/span&gt;
docker network inspect mysql_network

&lt;span style=&#34;color:#75715e&#34;&gt;# 在docker实例中访问host&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# 创建实例时添加下面的参数，即可在实例内通过host.docker.internal访问host&lt;/span&gt;
--add-host&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;host.docker.internal:host-gateway
&lt;span style=&#34;color:#75715e&#34;&gt;# 使用docker compose的时候&lt;/span&gt;
  servicename:
    extra_hosts:
      - &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;host.docker.internal:host-gateway&amp;#34;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;查看实例&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 正在运行中的&lt;/span&gt;
docker ps
&lt;span style=&#34;color:#75715e&#34;&gt;# 全部&lt;/span&gt;
docker ps -a
&lt;span style=&#34;color:#75715e&#34;&gt;# 查看实例运行log&lt;/span&gt;
docker logs containerName
&lt;span style=&#34;color:#75715e&#34;&gt;# 查看实例占用内存等&lt;/span&gt;
docker stats
&lt;span style=&#34;color:#75715e&#34;&gt;# 查看创建实例时的命令&lt;/span&gt;
docker inspect &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt; --format &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;curl -s https://gist.githubusercontent.com/ictus4u/e28b47dc826644412629093d5c9185be/raw/run.tpl&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt; containerName
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;查看image&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;docker image list
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;docker compose&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 创建&lt;/span&gt;
docker compose up
&lt;span style=&#34;color:#75715e&#34;&gt;# 销毁&lt;/span&gt;
docker compose down
&lt;span style=&#34;color:#75715e&#34;&gt;# 启动&lt;/span&gt;
docker compose start
&lt;span style=&#34;color:#75715e&#34;&gt;# 停止&lt;/span&gt;
docker compose stop
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在离线电脑上安装image&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 从有网络的机器上下载image包&lt;/span&gt;
docker save couchbase &amp;gt; couchbase.tar
&lt;span style=&#34;color:#75715e&#34;&gt;# 放到离线机器上安装&lt;/span&gt;
docker load &amp;lt; couchbase.tar.xz
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;非root用户下运行docker&#34;&gt;非root用户下运行docker&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;使用spring的maven插件build image的时候，需要当前用户有docker的运行权限&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker
docker ps
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;自建docker注册中心&#34;&gt;自建docker注册中心&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 生成一个自签名证书&lt;/span&gt;
curl -sS https://raw.githubusercontent.com/antelle/generate-ip-cert/master/generate-ip-cert.sh | bash -s 127.0.0.1
&lt;span style=&#34;color:#75715e&#34;&gt;# 不放心的话可以把脚本下载下来&lt;/span&gt;
sh generate-ip-cert.sh 127.0.0.1
&lt;span style=&#34;color:#75715e&#34;&gt;# 配置证书，把证书放到certs文件夹里&lt;/span&gt;
mkdir -p certs
&lt;span style=&#34;color:#75715e&#34;&gt;# 启动注册中心&lt;/span&gt;
docker run -d &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  --restart&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;always &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  --name registry &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  -v &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;pwd&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;/certs:/certs &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  -e REGISTRY_HTTP_ADDR&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;0.0.0.0:443 &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  -e REGISTRY_HTTP_TLS_CERTIFICATE&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/certs/domain.crt &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  -e REGISTRY_HTTP_TLS_KEY&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/certs/domain.key &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  -p 443:443 &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  registry:2
&lt;span style=&#34;color:#75715e&#34;&gt;# 查看是否启动成功（-k 忽略证书错误）&lt;/span&gt;
curl -k https://127.0.0.1/v2/_catalog
&lt;span style=&#34;color:#75715e&#34;&gt;# 虽然部署成功了，但是在往里面push image的时候，会报证书错误&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# 添加证书到信任列表&lt;/span&gt;
sudo cp domian.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates
&lt;span style=&#34;color:#75715e&#34;&gt;# 重启docker&lt;/span&gt;
sudo systemctl daemon-reload
sudo systemctl restart docker
&lt;span style=&#34;color:#75715e&#34;&gt;# 查看是否添加成功&lt;/span&gt;
curl https://127.0.0.1/v2/_catalog
&lt;span style=&#34;color:#75715e&#34;&gt;# 当使用jenkins的时候，用到了docker:dind，&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# 这时候在docker:dind的实例里添加证书到信任列表&lt;/span&gt;
docker exec -it -u &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; jenkins-docker sh
cat /certs/ca.crt &amp;gt;&amp;gt; /etc/ssl/certs/ca-certificates.crt
&lt;span style=&#34;color:#75715e&#34;&gt;# 当无法把文件传到实例里的时候，可以把证书内容复制出来&lt;/span&gt;
echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;-----BEGIN CERTIFICATE-----
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;...
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;-----END CERTIFICATE-----
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; /etc/ssl/certs/ca-certificates.crt
&lt;span style=&#34;color:#75715e&#34;&gt;# 之后重启实例&lt;/span&gt;
docker restart jenkins-docker
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;复制容器内文件到host&#34;&gt;复制容器内文件到host&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;docker cp mycontainer:/path/to/file file
&lt;span style=&#34;color:#75715e&#34;&gt;# 导出容器内全部文件&lt;/span&gt;
docker export mycontainer -o container_fs.tar
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;清理磁盘空间overlay2目录过大&#34;&gt;清理磁盘空间(overlay2目录过大)&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;/var/lib/docker/overlay2&lt;/code&gt; 过大时,用官方命令逐步清理,不要直接手动删除该目录,否则docker会损坏&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 查看容器,镜像,卷,构建缓存的使用量&lt;/span&gt;
docker system df
&lt;span style=&#34;color:#75715e&#34;&gt;# 删除停止的容器,未使用的网络,无标签的旧镜像(dangling image),构建缓存&lt;/span&gt;
docker system prune
&lt;span style=&#34;color:#75715e&#34;&gt;# 加上-a,删除所有未被使用的镜像(不只是无标签的)&lt;/span&gt;
docker system prune --all
&lt;span style=&#34;color:#75715e&#34;&gt;# 加上--volumes,删除未被使用的卷,卷中数据无法恢复&lt;/span&gt;
docker system prune --volumes
&lt;span style=&#34;color:#75715e&#34;&gt;# 等价于只清理卷&lt;/span&gt;
docker volume prune
&lt;span style=&#34;color:#75715e&#34;&gt;# 清理buildx的构建缓存&lt;/span&gt;
docker buildx prune --all
&lt;span style=&#34;color:#75715e&#34;&gt;# 清理后容量没减少的话,可能是运行中的容器还在占用文件&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# 停掉不需要的容器后重新prune&lt;/span&gt;
docker stop containerName
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.docker.com/engine/install/linux-postinstall/&#34;&gt;Manage Docker as a non-root user&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.spring.io/spring-boot/docs/2.7.5/maven-plugin/reference/htmlsingle/#build-image.examples.builder-configuration&#34;&gt;Spring Boot Maven Plugin Documentation - Builder Configuration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.baeldung.com/spring-boot-docker-start-with-profile&#34;&gt;Starting Spring Boot Application in Docker With Profile&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.baeldung.com/ops/docker-compose&#34;&gt;Introduction to Docker Compose | Baeldung&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://reflectoring.io/spring-boot-docker/&#34;&gt;Creating Optimized Docker Images for a Spring Boot Application&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/68023763/spring-boot-buildpack-always-downloads-latest-packeto-images-from-git&#34;&gt;spring boot buildpack always downloads latest packeto images from git&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/32758793/how-to-show-the-run-command-of-a-docker-container&#34;&gt;How to show the run command of a docker container&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/28721699/root-password-inside-a-docker-container&#34;&gt;Root password inside a Docker container - Stack Overflow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/39901311/docker-ubuntu-bash-ping-command-not-found&#34;&gt;Docker - Ubuntu - bash: ping: command not found - Stack Overflow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/37905763/how-do-i-download-docker-images-without-using-the-pull-command&#34;&gt;How do I download Docker images without using the pull command?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.docker.com/registry/deploying/&#34;&gt;Deploy a registry server | Docker Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://medium.com/@antelle/how-to-generate-a-self-signed-ssl-certificate-for-an-ip-address-f0dd8dddf754&#34;&gt;How to generate a self-signed SSL certificate for an IP address | by Dimitri Witkowski | Medium&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/23733678/how-to-search-images-from-private-1-0-registry-in-docker&#34;&gt;How to search images from private 1.0 registry in docker?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://unix.stackexchange.com/questions/90450/adding-a-self-signed-certificate-to-the-trusted-list/132163#132163&#34;&gt;curl - Adding a self-signed certificate to the &amp;ldquo;trusted list&amp;rdquo; - Unix &amp;amp; Linux Stack Exchange&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/50768317/docker-pull-certificate-signed-by-unknown-authority/50768414#50768414&#34;&gt;ssl - &amp;ldquo;docker pull&amp;rdquo; certificate signed by unknown authority - Stack Overflow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gitlab.com/gitlab-org/gitlab-runner/-/issues/1842&#34;&gt;Problem building with docker-in-docker using gitlab Registry Container with self-signed certificate&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.px.dev/container-filesystems/&#34;&gt;Where are my container&amp;rsquo;s files? Inspecting container filesystems | Pixie Labs Blog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>mariadb(mysql)使用</title>
      <link>https://deletefromuser.github.io/pgm/2023051301/</link>
      <pubDate>Sat, 13 May 2023 19:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2023051301/</guid>
      <description>&lt;h3 id=&#34;导出数据&#34;&gt;导出数据&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;mysqldump -u username -p database_name &amp;gt; data-dump.sql
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.digitalocean.com/community/tutorials/how-to-import-and-export-databases-in-mysql-or-mariadb&#34;&gt;How To Import and Export Databases in MySQL or MariaDB&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>使用gpg加密文件</title>
      <link>https://deletefromuser.github.io/pgm/2023051302/</link>
      <pubDate>Thu, 27 Apr 2023 20:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2023051302/</guid>
      <description>&lt;h4 id=&#34;生成gpg密钥&#34;&gt;生成gpg密钥&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;gpg --gen-key
&lt;span style=&#34;color:#75715e&#34;&gt;# 需要输入姓名和邮箱，之后还需要输入passphase（需要记下来，解密的时候要用）&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;导出私钥私钥和passphase要保管好&#34;&gt;导出私钥(私钥和passphase要保管好)&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;gpg --armor --export-secret-key  --output secret.asc B54A68A0F2AB41B5B9DED944ECE08FA2
&lt;span style=&#34;color:#75715e&#34;&gt;# 导入私钥&lt;/span&gt;
gpg --import secret.asc
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;导出公钥&#34;&gt;导出公钥&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;gpg --armor --output mypubkey.gpg --export your.name@youreamil.com
&lt;span style=&#34;color:#75715e&#34;&gt;# 复制公钥内容&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# cat mypubkey.gpg | clip&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;导入公钥假设加密另一个机器上的文件发送给自己&#34;&gt;导入公钥（假设加密另一个机器上的文件，发送给自己）&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;-----BEGIN PGP PUBLIC KEY BLOCK-----
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;...
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;-----END PGP PUBLIC KEY BLOCK-----
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&lt;/span&gt; &amp;gt; mypubkey.gpg
gpg --import mypubkey.gpg
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;加密文件&#34;&gt;加密文件&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;gpg --output myfile.txt.gpg --encrypt --recipient your.name@youreamil.com  myfile.txt
&lt;span style=&#34;color:#75715e&#34;&gt;# 完成后可以通过https://www.file.io/之类的网站共享文件&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;解密文件&#34;&gt;解密文件&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;gpg --output myfile.txt --decrypt myfile.txt.gpg
&lt;span style=&#34;color:#75715e&#34;&gt;# 需要输入passphase&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;上传公钥到公共服务器&#34;&gt;上传公钥到公共服务器&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;gpg --list-secret-keys
&lt;span style=&#34;color:#75715e&#34;&gt;# sec   rsa3072 2023-05-13 [SC] [expires: 2025-05-12]&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;#       B54A68A0F2AB41B5B9DED944ECE08FA2&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# 找到sec部分里的一串代码&lt;/span&gt;
gpg --send-keys B54A68A0F2AB41B5B9DED944ECE08FA2
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;导入公共服务器中的公钥&#34;&gt;导入公共服务器中的公钥&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;gpg --recv-keys B54A68A0F2AB41B5B9DED944ECE08FA2
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;搜索公共服务器&#34;&gt;搜索公共服务器&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 默认https://keys.openpgp.org，可修改&lt;/span&gt;
gpg --search-key your.name@youreamil.com
gpg --keyserver keys.gnupg.net --search-key your.name@youreamil.com
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;删除本地公钥和私钥&#34;&gt;删除本地公钥和私钥&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 删除公钥&lt;/span&gt;
gpg --delete-keys tom
&lt;span style=&#34;color:#75715e&#34;&gt;# 删除公钥&lt;/span&gt;
gpg --delete-secret-keys tom
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://yanhan.github.io/posts/2017-09-27-how-to-use-gpg-to-encrypt-stuff/&#34;&gt;How to use GPG to encrypt stuff&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://unix.stackexchange.com/questions/334912/how-to-import-keys-from-a-keyserver-using-gpg-in-debian&#34;&gt;How to import keys from a keyserver using gpg in debian? - Unix &amp;amp; Linux Stack Exchange&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://linuxconfig.org/how-to-backup-gpg-keys-on-paper&#34;&gt;How to backup gpg keys on paper - Linux Tutorials - Learn Linux Configuration&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>使用scrcpy在pc上控制android手机</title>
      <link>https://deletefromuser.github.io/pgm/2023042702/</link>
      <pubDate>Thu, 27 Apr 2023 20:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2023042702/</guid>
      <description>&lt;ul&gt;
&lt;li&gt;下载scrcpy，解压&lt;/li&gt;
&lt;li&gt;手机开启USB debuging&lt;/li&gt;
&lt;li&gt;手机连接电脑，手机会弹出确认窗口，点确认&lt;/li&gt;
&lt;li&gt;在解压后的scrcpy目录，打开命令行，输入&lt;code&gt;scrcpy -S&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/Genymobile/scrcpy/blob/master/FAQ.md&#34;&gt;https://github.com/Genymobile/scrcpy/blob/master/FAQ.md&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>spring boot开发记录</title>
      <link>https://deletefromuser.github.io/pgm/2023042501/</link>
      <pubDate>Tue, 25 Apr 2023 20:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2023042501/</guid>
      <description>&lt;h3 id=&#34;热部署&#34;&gt;热部署&lt;/h3&gt;
&lt;p&gt;maven中添加下面的依赖&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-xml&#34; data-lang=&#34;xml&#34;&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.springframework.boot&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;spring-boot-devtools&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;optional&amp;gt;&lt;/span&gt;true&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/optional&amp;gt;&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;启动jar时修改log级别&#34;&gt;启动jar时，修改log级别&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;java -jar myapp.jar --debug
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;切换命令行maven的jdk版本&#34;&gt;切换命令行maven的JDK版本&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 重点在于修改JAVA_HOME环境变量&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# git bash&lt;/span&gt;
export JAVA_HOME&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/c/Program Files/Eclipse Adoptium/jdk-17.0.4.8-hotspot&amp;#34;&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# or&lt;/span&gt;
declare -x JAVA_HOME&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/c/Program Files/Eclipse Adoptium/jdk-17.0.4.8-hotspot&amp;#34;&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# linux&lt;/span&gt;
JAVA_HOME&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/opt/jdk8u265-b01
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;切换命令行java的jdk版本&#34;&gt;切换命令行java的JDK版本&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 重点在于修改PATH环境变量&lt;/span&gt;
export PATH&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/c/Program Files/Eclipse Adoptium/jdk-17.0.4.8-hotspot/bin:&lt;/span&gt;$PATH&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;序列化对象时的jackson设置&#34;&gt;序列化对象时的jackson设置&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// 不输出该字段
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;@com.fasterxml.jackson.annotation.JsonIgnore&lt;/span&gt;
    &lt;span style=&#34;color:#66d9ef&#34;&gt;private&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; intValue&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;// 设置日期的输出格式
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;@com.fasterxml.jackson.annotation.JsonFormat&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;shape &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; JsonFormat&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Shape&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;STRING&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; pattern &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;yyyy-MM-dd&amp;#39;T&amp;#39;HH:mm:ss.SSS&amp;#39;Z&amp;#39;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; timezone &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;UTC&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
    &lt;span style=&#34;color:#66d9ef&#34;&gt;private&lt;/span&gt; Date date&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;// 忽略为null的字段
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;@com.fasterxml.jackson.annotation.JsonInclude&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;Include&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;NON_NULL&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Foo&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
  String bar&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;// 解析日期格式输入
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;@org.springframework.format.annotation.DateTimeFormat&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;pattern &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;yyyy-MM-dd HH:mm:ss&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
    &lt;span style=&#34;color:#66d9ef&#34;&gt;private&lt;/span&gt; Date date&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;输入中包含文件&#34;&gt;输入中包含文件&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// 不使用json形式提交+@RequestBody, 改用传统form
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;git-bash中运行maven时中文乱码&#34;&gt;git bash中运行maven时中文乱码&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 切换编码为utf-8&lt;/span&gt;
export JAVA_TOOL_OPTIONS&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;-Dfile.encoding=UTF-8&amp;#34;&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# 还不行,切换语言&lt;/span&gt;
export JAVA_TOOL_OPTIONS&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;-Duser.language=en&amp;#34;&lt;/span&gt;
export JAVA_TOOL_OPTIONS&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;-Duser.language=en -Dfile.encoding=UTF-8&amp;#34;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/46144346/hot-swapping-in-spring-boot-in-visual-studio-code&#34;&gt;Hot swapping in Spring Boot in Visual Studio Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.spring.io/spring-boot/docs/1.5.22.RELEASE/reference/html/boot-features-logging.html&#34;&gt;26. Logging&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/2503658/specify-jdk-for-maven-to-use&#34;&gt;settings - Specify JDK for Maven to use - Stack Overflow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://superuser.com/questions/821094/what-is-the-difference-between-set-env-declare-and-export-when-setting-a-varia&#34;&gt;bash - What is the difference between set, env, declare and export when setting a variable in a Linux shell? - Super User&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.w3docs.com/snippets/java/date-format-mapping-to-json-jackson.html#:~:text=You%20can%20use%20the%20%40JsonFormat,serializing%20or%20deserializing%20using%20Jackson.&amp;amp;text=This%20will%20format%20the%20date,&#39;HH%3Amm%3Ass.&#34;&gt;Date format Mapping to JSON Jackson&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.baeldung.com/jackson-ignore-properties-on-serialization&#34;&gt;Jackson Ignore Properties on Marshalling | Baeldung&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/11757487/how-to-tell-jackson-to-ignore-a-field-during-serialization-if-its-value-is-null&#34;&gt;java - How to tell Jackson to ignore a field during serialization if its value is null? - Stack Overflow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://reflectoring.io/jackson/&#34;&gt;All You Need To Know About JSON Parsing With Jackson&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/48051177/content-type-multipart-form-databoundary-charset-utf-8-not-supported&#34;&gt;java - Content type &amp;lsquo;multipart/form-data;boundary=&amp;mdash;-&amp;hellip;;charset=UTF-8&amp;rsquo; not supported - Stack Overflow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/71905990/git-bash-terminal-encoding-issue-with-java&#34;&gt;Git Bash Terminal Encoding Issue with Java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/envvars002.html&#34;&gt;The JAVA_TOOL_OPTIONS Environment Variable&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>使用mkvtoolnix批量去除mkv格式视频外挂字幕</title>
      <link>https://deletefromuser.github.io/pgm/2023042503/</link>
      <pubDate>Tue, 25 Apr 2023 20:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2023042503/</guid>
      <description>&lt;h3 id=&#34;前提&#34;&gt;前提&lt;/h3&gt;
&lt;p&gt;视频文件内容必须统一，一般是剧集类的，并且要是mkv格式的&lt;/p&gt;
&lt;h3 id=&#34;打开mkvtoolnix选择某一个视频文件找到不要的字幕轨道取消选择导出optionsjson到视频所在文件夹&#34;&gt;打开mkvtoolnix，选择某一个视频文件，找到不要的字幕轨道取消选择，导出options.json到视频所在文件夹&lt;/h3&gt;
&lt;p&gt;&lt;img src=&#34;../../images/2023042503_01.jpg&#34; alt=&#34;导出options.json&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;编辑optionsjson&#34;&gt;编辑options.json&lt;/h3&gt;
&lt;p&gt;删除跟刚才导入文件有关的参数&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;  &amp;quot;--track-name&amp;quot;,
  &amp;quot;1:[Judas] JAP Stereo (Opus 112Kbps)&amp;quot;,
  &amp;quot;(&amp;quot;,
  &amp;quot;D:\\path\\[Judas] Shirobako (Season 1 + OVAs) [BD 1080p][HEVC x265 10bit][Eng-Subs]\\[Judas] Shirobako - S01E07.mkv&amp;quot;,
  &amp;quot;)&amp;quot;,
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;下载下面的脚本到视频所在文件夹并修改里面的mkvmergeexe位置启动脚本即可&#34;&gt;下载下面的脚本到视频所在文件夹，并修改里面的mkvmerge.exe位置，启动脚本即可&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;https://raw.githubusercontent.com/Serede/mkvtoolnix-batch/master/mkvtoolnix-batch.bat&lt;/code&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>使用nginx和ssh tunneling实现通过公网ip访问本地计算机</title>
      <link>https://deletefromuser.github.io/pgm/2023042502/</link>
      <pubDate>Tue, 25 Apr 2023 20:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2023042502/</guid>
      <description>&lt;h4 id=&#34;假设本地计算机上已开发的应用可通过httplocalhost19080来访问&#34;&gt;假设本地计算机上，已开发的应用可通过http://localhost:19080来访问&lt;/h4&gt;
&lt;h4 id=&#34;在有公网ip的服务器上添加下列配置后部署nginx监听19001端口收到请求后发送到19000端口&#34;&gt;在有公网ip的服务器上添加下列配置后部署nginx（监听19001端口，收到请求后发送到19000端口）&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&#34;language-nginxconf&#34; data-lang=&#34;nginxconf&#34;&gt;server {
    listen       19001;
    location / {
        proxy_pass http://localhost:19000;
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;在本地计算机上设置ssh-tunneling&#34;&gt;在本地计算机上设置SSH tunneling&lt;/h4&gt;
&lt;h4 id=&#34;与远程服务器的19000端口建立连接本地在19080端口响应&#34;&gt;与远程服务器的19000端口建立连接，本地在19080端口响应&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;ssh -f -N -T -R 19000:localhost:19080 -p &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;22&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;username@remote&amp;#39;&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# 直连不行的话（thanks to GFW），可设置代理&lt;/span&gt;
ssh -f -N -T -R 19000:localhost:19080 -p &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;22&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;username@remote&amp;#39;&lt;/span&gt; -o &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ProxyCommand=nc -X connect -x PROXYHOST:PROXYPORT %h %p&amp;#34;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;配置完成后即可访问&#34;&gt;配置完成后即可访问&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;http://远程服务器ip:19001/&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://medium.com/the-software-reliever/expose-localhost-to-the-public-www-with-a-vps-nginx-and-ssh-tunneling-daefc0275757&#34;&gt;Expose localhost to the public WWW with a VPS, nginx and SSH tunneling&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://dev.to/elwin013/how-to-expose-local-service-using-nginx-and-ssh-1jmj&#34;&gt;How to expose local service using nginx and SSH&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/19161960/connect-with-ssh-through-a-proxy&#34;&gt;Connect with SSH through a proxy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>比较两个目录内的同名文件（后缀yml，xml的文件）的非空行数是否一致</title>
      <link>https://deletefromuser.github.io/pgm/2023041801/</link>
      <pubDate>Mon, 24 Apr 2023 21:02:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2023041801/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;chatgpt确实好用，比自己吭哧吭哧google快多了&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#脚本所在目录&lt;/span&gt;
rootDir&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;cd &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;dirname &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;BASH_SOURCE[0]&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; pwd&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;

&lt;span style=&#34;color:#75715e&#34;&gt;# 输出服务器ip&lt;/span&gt;
echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;--- &lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;hostname -i&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;: &lt;/span&gt;$rootDir&lt;span style=&#34;color:#e6db74&#34;&gt; ---&amp;#34;&lt;/span&gt;

dir1&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;$rootDir/old
dir2&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;$rootDir/new

find $dir1 -type f | &lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; read file; &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt;
    filename&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;file#$dir1&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;
    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt; -e $dir2/$filename &lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;; &lt;span style=&#34;color:#66d9ef&#34;&gt;then&lt;/span&gt;
        count1&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;grep -cve &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;^\s*$&amp;#39;&lt;/span&gt; $file&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;
        count2&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;grep -cve &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;^\s*$&amp;#39;&lt;/span&gt; $dir2/$filename&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;
        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt; $count1 -ne $count2 &lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;; &lt;span style=&#34;color:#66d9ef&#34;&gt;then&lt;/span&gt;
            echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;NG &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;filename&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; 非空行数不一致 old-&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;count1&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; : new-&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;count2&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
        &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;
            echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;OK &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;filename&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
        &lt;span style=&#34;color:#66d9ef&#34;&gt;fi&lt;/span&gt;
    &lt;span style=&#34;color:#66d9ef&#34;&gt;fi&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;ssh执行远程服务器上的脚本&#34;&gt;ssh执行远程服务器上的脚本&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 生成ssh密钥&lt;/span&gt;
ssh-keygen
&lt;span style=&#34;color:#75715e&#34;&gt;# 连接目标服务器&lt;/span&gt;
ssh-copy-id userid@hostname
&lt;span style=&#34;color:#75715e&#34;&gt;# 上一步登陆成功后即可执行&lt;/span&gt;
ssh user@remote-server /path/to/script.sh
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://serverfault.com/questions/241588/how-to-automate-ssh-login-with-password&#34;&gt;How to automate SSH login with password?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>java中不常用的语法</title>
      <link>https://deletefromuser.github.io/pgm/2023021802/</link>
      <pubDate>Sat, 18 Feb 2023 20:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2023021802/</guid>
      <description>&lt;h3 id=&#34;双花括号初始化&#34;&gt;双花括号初始化&lt;/h3&gt;
&lt;p&gt;有时候写测试代码，需要新建hashmap或者list并赋值的时候，可以用双花括号初始化简化代码，但是据说有内存泄漏的风险，所以测试以外不要用&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;Set&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;String&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; countries &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; HashSet&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;String&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;()&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
    &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
       add&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;India&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;
       add&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;USSR&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;
       add&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;USA&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;
    &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;初始化内部类&#34;&gt;初始化内部类&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;OuterClass outerObject &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; OuterClass&lt;span style=&#34;color:#f92672&#34;&gt;();&lt;/span&gt;
OuterClass&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;InnerClass&lt;/span&gt; innerObject &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; outerObject&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;new&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;InnerClass&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;初始化静态内部类&#34;&gt;初始化静态内部类&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;StaticNestedClass staticNestedObject &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; StaticNestedClass&lt;span style=&#34;color:#f92672&#34;&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;list和array转换&#34;&gt;List和Array转换&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// List -&amp;gt; Array
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;Foo&lt;span style=&#34;color:#f92672&#34;&gt;[]&lt;/span&gt; array &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; list&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;toArray&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; Foo&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;0&lt;span style=&#34;color:#f92672&#34;&gt;]);&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;// Array -&amp;gt; List
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;Arrays&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;asList&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; String&lt;span style=&#34;color:#f92672&#34;&gt;[]{&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;1&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;2&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;})&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;// 用一个值覆盖array中的所有元素
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;Arrays&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fill&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;array&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;1&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.baeldung.com/java-double-brace-initialization&#34;&gt;Java Double Brace Initialization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.jesperdj.com/2016/07/19/dont-use-the-double-brace-initialization-trick/&#34;&gt;Don’t use the double-brace initialization trick – Jesper de Jong&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html&#34;&gt;Nested Classes (The Java™ Tutorials &amp;gt; Learning the Java Language &amp;gt; Classes and Objects)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/9572795/convert-list-to-array-in-java&#34;&gt;Convert list to array in Java - Stack Overflow)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/10078867/how-to-initialize-all-the-elements-of-an-array-to-any-specific-value-in-java&#34;&gt;How to initialize all the elements of an array to any specific value in java - Stack Overflow)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>记一次多线程异常</title>
      <link>https://deletefromuser.github.io/pgm/2023070202/</link>
      <pubDate>Sat, 18 Feb 2023 20:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2023070202/</guid>
      <description>&lt;h3 id=&#34;问题描述&#34;&gt;问题描述&lt;/h3&gt;
&lt;p&gt;有一个抽数据库数据写入文件的定时任务，发现有些文件数据不全，导入一半就结束了。&lt;/p&gt;
&lt;h3 id=&#34;实现说明&#34;&gt;实现说明&lt;/h3&gt;
&lt;p&gt;service是共用的同一个，在Quartz类中定义多个@Scheduled注解的方法，并分别调用service方法&lt;/p&gt;
&lt;h3 id=&#34;问题代码&#34;&gt;问题代码&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// FileService.java
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;@Service&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;FileService&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;

    &lt;span style=&#34;color:#66d9ef&#34;&gt;private&lt;/span&gt; FileInfo fileInfo &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; FileInfo&lt;span style=&#34;color:#f92672&#34;&gt;();&lt;/span&gt;

    &lt;span style=&#34;color:#66d9ef&#34;&gt;private&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; batchSize &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; 500&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;

    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;boolean&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;export2File&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;Integer type&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
        fileInfo &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; dao&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;getList&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;type&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt; 

        batchSize &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; fileInfo&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;getPageNum&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;();&lt;/span&gt;
        push&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;fileInfo&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;getName&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;());&lt;/span&gt;

        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; result&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;
    &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;

    &lt;span style=&#34;color:#66d9ef&#34;&gt;private&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;boolean&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;push&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;Integer fileName&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
        &lt;span style=&#34;color:#75715e&#34;&gt;// create file with name fileName
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;        
        &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; pageNo &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; 1&lt;span style=&#34;color:#f92672&#34;&gt;;;&lt;/span&gt;i&lt;span style=&#34;color:#f92672&#34;&gt;++)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
            List&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;Row&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; data &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; getPageData&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;pageNo&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; fileName&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;
            &lt;span style=&#34;color:#75715e&#34;&gt;// write to file with data
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;data &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; data&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;size&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; batchSize&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
                &lt;span style=&#34;color:#66d9ef&#34;&gt;break&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;
            &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
        &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;

        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; result&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;
    &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;

    &lt;span style=&#34;color:#66d9ef&#34;&gt;private&lt;/span&gt; List&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;Row&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;getPageData&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; pageNo&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; String fileName&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
        IPage&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;LinkedHashMap&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;String&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; Object&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&amp;gt;&lt;/span&gt; page &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; Page&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&amp;gt;(&lt;/span&gt;pageNo&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; pageSize&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;

        list &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; dataDao&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;select&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;page&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; fileInfo&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;

        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; list&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;
    &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;

&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;

&lt;span style=&#34;color:#75715e&#34;&gt;// FileQuartz.java
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;@Component&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;FileQuartz&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;

    &lt;span style=&#34;color:#a6e22e&#34;&gt;@Autowired&lt;/span&gt;
    &lt;span style=&#34;color:#66d9ef&#34;&gt;private&lt;/span&gt; FileService fileService&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;

    &lt;span style=&#34;color:#a6e22e&#34;&gt;@Scheduled&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;cron &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;0 0 5 * * ?&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;boolean&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;executeType1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; execute&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;1&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;
    &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;

    &lt;span style=&#34;color:#a6e22e&#34;&gt;@Scheduled&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;cron &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;5 0 5 * * ?&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;boolean&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;executeType2&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; execute&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;2&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;
    &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;

    &lt;span style=&#34;color:#a6e22e&#34;&gt;@Scheduled&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;cron &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;10 0 5 * * ?&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;boolean&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;executeType3&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; execute&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;3&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;
    &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;

    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;boolean&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;execute&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;Integer type&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; fileService&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;export2File&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;type&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;
    &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;问题分析&#34;&gt;问题分析&lt;/h3&gt;
&lt;p&gt;问题出在FileService是单例的，运行时里面的成员变量fileInfo和batchSize会被三个线程同时操作，最后启动的线程中赋值的就会起作用，导致导出错误数据，push方法里的for循环的break条件也会很快跳出&lt;/p&gt;
&lt;h3 id=&#34;问题解决&#34;&gt;问题解决&lt;/h3&gt;
&lt;p&gt;使用ThreadLocal包装fileInfo和batchSize&lt;/p&gt;
&lt;h3 id=&#34;threadlocal的内存泄漏问题&#34;&gt;ThreadLocal的内存泄漏问题&lt;/h3&gt;
&lt;p&gt;最佳实践是每次使用完后都调用remove()方法清除对象&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;try&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
    threadlocal&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;set&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;value&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;
    &lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;finally&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
    threadlocal&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;remove&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;();&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;使用线程池时的threadlocal复用问题&#34;&gt;使用线程池时的ThreadLocal复用问题&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;可以线程处理结束时手动清理&lt;/li&gt;
&lt;li&gt;重载ThreadPoolExecutor的afterExecute方法执行清理&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Bing AI生成的示例代码&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;MyTask&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;implements&lt;/span&gt; Runnable &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
    &lt;span style=&#34;color:#66d9ef&#34;&gt;private&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;final&lt;/span&gt; ThreadLocal&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;String&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; local &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; ThreadLocal&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&amp;gt;();&lt;/span&gt;

    &lt;span style=&#34;color:#a6e22e&#34;&gt;@Override&lt;/span&gt;
    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;run&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
        local&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;set&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;some value&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;
        &lt;span style=&#34;color:#75715e&#34;&gt;// do something
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;// method 1 
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;// local.remove();
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;

    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;clean&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
        local&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;remove&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;();&lt;/span&gt;
    &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;

&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;MyThreadPoolExecutor&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;extends&lt;/span&gt; ThreadPoolExecutor &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;MyThreadPoolExecutor&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; corePoolSize&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; maximumPoolSize&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;long&lt;/span&gt; keepAliveTime&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; TimeUnit unit&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt;
                                 BlockingQueue&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;Runnable&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; workQueue&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
        &lt;span style=&#34;color:#66d9ef&#34;&gt;super&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;corePoolSize&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; maximumPoolSize&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; keepAliveTime&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; unit&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; workQueue&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;
    &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;

    &lt;span style=&#34;color:#a6e22e&#34;&gt;@Override&lt;/span&gt;
    &lt;span style=&#34;color:#66d9ef&#34;&gt;protected&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;afterExecute&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;Runnable r&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; Throwable t&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
        &lt;span style=&#34;color:#66d9ef&#34;&gt;super&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;afterExecute&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;r&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; t&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;
        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;r &lt;span style=&#34;color:#66d9ef&#34;&gt;instanceof&lt;/span&gt; MyTask&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
            &lt;span style=&#34;color:#f92672&#34;&gt;((&lt;/span&gt;MyTask&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; r&lt;span style=&#34;color:#f92672&#34;&gt;).&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;clean&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;();&lt;/span&gt;
        &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
    &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://www.baeldung.com/java-threadlocal&#34;&gt;An Introduction to ThreadLocal in Java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://javarevisited.blogspot.com/2012/05/how-to-use-threadlocal-in-java-benefits.html&#34;&gt;ThreadLocal in Java - Example Program and Tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://javarevisited.blogspot.com/2013/01/threadlocal-memory-leak-in-java-web.html&#34;&gt;ThreadLocal Memory Leak in Java web application - Tomcat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://java.jiderhamn.se/2012/01/29/classloader-leaks-iv-threadlocal-dangers-and-why-threadglobal-may-have-been-a-more-appropriate-name/&#34;&gt;Classloader leaks IV – ThreadLocal dangers and why ThreadGlobal may have been a more appropriate name&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://plumbr.io/blog/locked-threads/how-to-shoot-yourself-in-foot-with-threadlocals&#34;&gt;How to shoot yourself in foot with ThreadLocals&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    
    <item>
      <title>使用js手动post数据</title>
      <link>https://deletefromuser.github.io/pgm/2023021801/</link>
      <pubDate>Fri, 17 Feb 2023 20:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2023021801/</guid>
      <description>&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;async&lt;/span&gt; () =&amp;gt; {
  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;rawResponse&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;await&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;fetch&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;https://httpbin.org/post&amp;#39;&lt;/span&gt;, {
    &lt;span style=&#34;color:#a6e22e&#34;&gt;method&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;POST&amp;#39;&lt;/span&gt;,
    &lt;span style=&#34;color:#a6e22e&#34;&gt;headers&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; {
      &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Accept&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;application/json&amp;#39;&lt;/span&gt;,
      &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Content-Type&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;application/json&amp;#39;&lt;/span&gt;
    },
    &lt;span style=&#34;color:#a6e22e&#34;&gt;body&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stringify&lt;/span&gt;({&lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Textual content&amp;#39;&lt;/span&gt;})
  });
&lt;span style=&#34;color:#75715e&#34;&gt;//   const content = await rawResponse.json();
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;content&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;await&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;rawResponse&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;text&lt;/span&gt;();

  &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;content&lt;/span&gt;);
})();
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/29775797/fetch-post-json-data&#34;&gt;Fetch: POST JSON data&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>使用OBS虚拟摄像头</title>
      <link>https://deletefromuser.github.io/pgm/web-2023021101/</link>
      <pubDate>Sat, 11 Feb 2023 20:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/web-2023021101/</guid>
      <description>&lt;p&gt;工作中要测试网页的视频录制功能，但是是在客户的虚拟机上，没有摄像头，这时候可以使用OBS模拟摄像头来测试&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;安装OBS，及FireFox（CHROME无法选择虚拟摄像头）&lt;/li&gt;
&lt;li&gt;启动OBS，在下方来源中添加视频文件，然后点击【启动虚拟摄像机】右边的设置，选择输出类型为来源，选择视频文件，点击【启动虚拟摄像机】&lt;/li&gt;
&lt;li&gt;在Firefox中测试，录制时会弹窗选择摄像头，选择【OBS Virtual Camera】即可&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://obsproject.com/kb/virtual-camera-guide&#34;&gt;Virtual Camera Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.onlinemictest.com/webcam-test/&#34;&gt;Webcam Test&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>使用mybatis的Batch Insert批量插入记录</title>
      <link>https://deletefromuser.github.io/pgm/sql-2023021101/</link>
      <pubDate>Sat, 11 Feb 2023 19:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/sql-2023021101/</guid>
      <description>&lt;h3 id=&#34;不使用batch-insert&#34;&gt;不使用Batch Insert&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- 使用mybatis时，下面的做法当一次插入数量太多时会报错（ORA-00913: too many values），这时需要用batch insert
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- 1 Use a SELECT Query
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;INSERT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;INTO&lt;/span&gt; Products (ProductId, ProductName, Price) 
    &lt;span style=&#34;color:#66d9ef&#34;&gt;WITH&lt;/span&gt; p &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; ( 
        &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Left Handed Screwdriver&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;50&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; dual &lt;span style=&#34;color:#66d9ef&#34;&gt;UNION&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;ALL&lt;/span&gt; 
        &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Right Handed Screwdriver&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;22&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;75&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; dual &lt;span style=&#34;color:#66d9ef&#34;&gt;UNION&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;ALL&lt;/span&gt; 
        &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Bottomless Coffee Cup (4 pack)&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;15&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;00&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; dual &lt;span style=&#34;color:#66d9ef&#34;&gt;UNION&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;ALL&lt;/span&gt; 
        &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Urban Dictionary Version 2.3&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;75&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; dual &lt;span style=&#34;color:#66d9ef&#34;&gt;UNION&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;ALL&lt;/span&gt;
        &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Beer Water&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;15&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; dual
  )
&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; p;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 2 Use INSERT ALL
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;INSERT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;ALL&lt;/span&gt; 
    &lt;span style=&#34;color:#66d9ef&#34;&gt;INTO&lt;/span&gt; Products ( ProductId, ProductName, Price ) &lt;span style=&#34;color:#66d9ef&#34;&gt;VALUES&lt;/span&gt; ( &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Left Handed Screwdriver&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;50&lt;/span&gt; )
    &lt;span style=&#34;color:#66d9ef&#34;&gt;INTO&lt;/span&gt; Products ( ProductId, ProductName, Price ) &lt;span style=&#34;color:#66d9ef&#34;&gt;VALUES&lt;/span&gt; ( &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Right Handed Screwdriver&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;22&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;75&lt;/span&gt; )
    &lt;span style=&#34;color:#66d9ef&#34;&gt;INTO&lt;/span&gt; Products ( ProductId, ProductName, Price ) &lt;span style=&#34;color:#66d9ef&#34;&gt;VALUES&lt;/span&gt; ( &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Bottomless Coffee Cup (4 pack)&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;15&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;00&lt;/span&gt; )
    &lt;span style=&#34;color:#66d9ef&#34;&gt;INTO&lt;/span&gt; Products ( ProductId, ProductName, Price ) &lt;span style=&#34;color:#66d9ef&#34;&gt;VALUES&lt;/span&gt; ( &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Urban Dictionary Version 2.3&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;75&lt;/span&gt; )
    &lt;span style=&#34;color:#66d9ef&#34;&gt;INTO&lt;/span&gt; Products ( ProductId, ProductName, Price ) &lt;span style=&#34;color:#66d9ef&#34;&gt;VALUES&lt;/span&gt; ( &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Beer Water&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;15&lt;/span&gt; )
&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; dual;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;使用batch-insert&#34;&gt;使用Batch Insert&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;@Test&lt;/span&gt;
    &lt;span style=&#34;color:#a6e22e&#34;&gt;@Transactional&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;readOnly &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
    &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;testBatch&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
        &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; batchSize &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; 10&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;
        &lt;span style=&#34;color:#75715e&#34;&gt;// openSession默认关闭自动提交，不需再加false参数
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;try&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;SqlSession sqlSession &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; sqlSessionFactory&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;openSession&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;ExecutorType&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;BATCH&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
            CountriesMapper cmapper &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; sqlSession&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;getMapper&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;CountriesMapper&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;class&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;
            IntStream&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;range&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;1&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; 55&lt;span style=&#34;color:#f92672&#34;&gt;).&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;forEach&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;item &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
                cmapper&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;insert&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; Countries&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; item&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;230211-&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; item &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;-name&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt;
                        &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;short&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;RandomUtils&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;nextInt&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;%&lt;/span&gt; 4 &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; 1&lt;span style=&#34;color:#f92672&#34;&gt;)));&lt;/span&gt;
                &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;item &lt;span style=&#34;color:#f92672&#34;&gt;%&lt;/span&gt; batchSize &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; 0&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
                    sqlSession&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;flushStatements&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;();&lt;/span&gt;
                &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
            &lt;span style=&#34;color:#f92672&#34;&gt;});&lt;/span&gt;
            sqlSession&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;flushStatements&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;();&lt;/span&gt;
            sqlSession&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;commit&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;();&lt;/span&gt;
        &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;

        assertTrue&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;
    &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://database.guide/4-ways-to-insert-multiple-rows-in-oracle/&#34;&gt;4 Ways to Insert Multiple Rows in Oracle&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blogj.harawata.net/2016/04/jdbc-mybatis-multi-row-vs-batch.html&#34;&gt;JDBC と MyBatis でバルク・インサート（multi-row vs batch）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://mybatis.org/mybatis-dynamic-sql/docs/insert.html#batch-insert-support&#34;&gt;Batch Insert Support&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>将SpringBoot应用部署到docker</title>
      <link>https://deletefromuser.github.io/pgm/2023020501/</link>
      <pubDate>Sun, 05 Feb 2023 20:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2023020501/</guid>
      <description>&lt;h3 id=&#34;手动创建image&#34;&gt;手动创建image&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;在项目内创建Dockerfile&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-docker&#34; data-lang=&#34;docker&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; maven:3.8.7-eclipse-temurin-11-focal&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;COPY&lt;/span&gt; . .&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;CMD&lt;/span&gt; [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;mvn&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;spring-boot:run&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;-Dspring-boot.run.profiles=docker&amp;#34;&lt;/span&gt;]&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# ENTRYPOINT [&amp;#34;mvn&amp;#34;, &amp;#34;spring-boot:run&amp;#34;, &amp;#34;-Dspring-boot.run.profiles=docker&amp;#34;]&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;创建Docker Image&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# build过程中下载经常卡住(不知道是不是gfw，因为每次卡住的资源都不一样)，&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# 前面加DOCKER_BUILDKIT=1，使缓存生效，这样重试的时候已经下载过的资源就不会重新下载&lt;/span&gt;
sudo DOCKER_BUILDKIT&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; docker build -t spring-cloud-config-server .
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;运行docker实例&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# -e 设置环境变量（TZ：实例的时区）&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# -d 运行在后台&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# --name spring-cloud-config-server_1 指定实例名&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# -v /home/vu18/.m2:/root/.m2 将主机的maven仓库映射到docker实例，免得再次下载&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# -p8888:8888 主机端口：docker实例端口映射&lt;/span&gt;
sudo docker run -e TZ&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;Etc/GMT-8 -d --name spring-cloud-config-server_1 -v &lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;HOME&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;/.m2:/root/.m2 -v &lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;PWD&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;/logs:/logs -p8888:8888 spring-cloud-config-server
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;使用spring-boot-maven-plugin创建image需要当前用户有执行docker的权限2023052001非root用户下运行docker&#34;&gt;使用spring-boot-maven-plugin创建image(&lt;a href=&#34;../2023052001/#%E9%9D%9Eroot%E7%94%A8%E6%88%B7%E4%B8%8B%E8%BF%90%E8%A1%8Cdocker&#34;&gt;需要当前用户有执行docker的权限&lt;/a&gt;)&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;mvn spring-boot:build-image
sudo docker run -e TZ&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;Etc/GMT-8 -d --name config-server_1 -e &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;SPRING_PROFILES_ACTIVE=docker&amp;#34;&lt;/span&gt; -v &lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;PWD&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;/logs:/logs -p8888:8888 config-server:0.0.1-SNAPSHOT
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;注意事项&#34;&gt;注意事项&lt;/h4&gt;
&lt;p&gt;第一个命令到最后会从github下载jre包，因为gfw会报错，需要在pom.xml中配置代理，而且代理只支持http代理，且不能使用localhost或者127.0.0.1作为ip，而应使用本机的网卡ip地址。（http代理尝试用shadowsocks-rust配了一下没成功，可能哪里配错了，用v2ray配置成功了）&lt;/p&gt;
&lt;p&gt;&lt;code&gt;pom.xml&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-xml&#34; data-lang=&#34;xml&#34;&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;project&amp;gt;&lt;/span&gt;
    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;build&amp;gt;&lt;/span&gt;
        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;plugins&amp;gt;&lt;/span&gt;
            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;plugin&amp;gt;&lt;/span&gt;
                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.springframework.boot&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;spring-boot-maven-plugin&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;
                    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;image&amp;gt;&lt;/span&gt;
                        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;env&amp;gt;&lt;/span&gt;
                            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;HTTP_PROXY&amp;gt;&lt;/span&gt;http://proxy.example.com&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/HTTP_PROXY&amp;gt;&lt;/span&gt;
                            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;HTTPS_PROXY&amp;gt;&lt;/span&gt;https://proxy.example.com&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/HTTPS_PROXY&amp;gt;&lt;/span&gt;
                        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/env&amp;gt;&lt;/span&gt;
                        &lt;span style=&#34;color:#75715e&#34;&gt;&amp;lt;!-- 防止重复下载buildpack --&amp;gt;&lt;/span&gt;
                        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;pullPolicy&amp;gt;&lt;/span&gt;IF_NOT_PRESENT&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/pullPolicy&amp;gt;&lt;/span&gt;
                    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/image&amp;gt;&lt;/span&gt;
                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;
            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/plugin&amp;gt;&lt;/span&gt;
        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/plugins&amp;gt;&lt;/span&gt;
    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/build&amp;gt;&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/project&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;v2ray-config.json&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-jsonc&#34; data-lang=&#34;jsonc&#34;&gt;&amp;quot;inbounds&amp;quot;: [
    {
        {
            &amp;quot;port&amp;quot;: 1086,
            &amp;quot;listen&amp;quot;: &amp;quot;0.0.0.0&amp;quot;,
            &amp;quot;protocol&amp;quot;: &amp;quot;http&amp;quot;,
            &amp;quot;settings&amp;quot;: {
                &amp;quot;udp&amp;quot;: false
            }
        }
    }
]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.baeldung.com/dockerizing-spring-boot-application&#34;&gt;Dockerizing a Spring Boot Application&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.docker.com/get-started/02_our_app/&#34;&gt;Containerize an application&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.docker.com/build/buildkit/&#34;&gt;BuildKit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.cnblogs.com/LucasSong/p/12701357.html&#34;&gt;CMD和ENTRYPOINT的区别&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/36234088/how-do-i-point-a-docker-image-to-my-m2-directory-for-running-maven-in-docker-on&#34;&gt;How do I point a docker image to my .m2 directory for running maven in docker on a mac?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/a/58764482/19120213&#34;&gt;accessing a docker container from another container&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/18861834/mounting-multiple-volumes-on-a-docker-container&#34;&gt;Mounting multiple volumes on a docker container?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>Ubuntu 20.04下tracker-miner-fs进程占用大量内存和cpu</title>
      <link>https://deletefromuser.github.io/pgm/2022122101/</link>
      <pubDate>Wed, 21 Dec 2022 20:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2022122101/</guid>
      <description>&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;systemctl --user mask tracker-store.service tracker-miner-fs.service tracker-miner-rss.service tracker-extract.service tracker-miner-apps.service tracker-writeback.service
tracker reset --hard
sudo reboot
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://askubuntu.com/questions/1187191/tracker-process-taking-lot-of-cpu&#34;&gt;Tracker process taking lot of CPU&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>java删除文件夹</title>
      <link>https://deletefromuser.github.io/pgm/2022121901/</link>
      <pubDate>Mon, 19 Dec 2022 20:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2022121901/</guid>
      <description>&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// use spring
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;FileSystemUtils&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;deleteRecursively&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;file&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;// java 8
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;Files&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;walk&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;path&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
      &lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;sorted&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;Comparator&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;reverseOrder&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;())&lt;/span&gt;
      &lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;Path&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;toFile&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
      &lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;forEach&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;File&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;delete&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://www.baeldung.com/java-delete-directory&#34;&gt;Delete a Directory Recursively in Java | Baeldung&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    
    <item>
      <title>Chrome中运行&amp;保存JS代码</title>
      <link>https://deletefromuser.github.io/pgm/2022121402/</link>
      <pubDate>Wed, 14 Dec 2022 20:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2022121402/</guid>
      <description>&lt;p&gt;F12 -&amp;gt; Sources -&amp;gt; Snippets -&amp;gt; new snippet可新建代码片段，创建完成后右键运行即可&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://developer.chrome.com/docs/devtools/javascript/snippets/&#34;&gt;Run snippets of JavaScript&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>JS库使用问题汇总</title>
      <link>https://deletefromuser.github.io/pgm/2022121401/</link>
      <pubDate>Wed, 14 Dec 2022 20:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2022121401/</guid>
      <description>&lt;h2 id=&#34;___html2canvas___&#34;&gt;&lt;em&gt;&lt;strong&gt;html2canvas&lt;/strong&gt;&lt;/em&gt;&lt;/h2&gt;
&lt;h3 id=&#34;使html2canvas-在ie11中工作&#34;&gt;使html2canvas 在ie11中工作&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;script&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;src&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://cdn.jsdelivr.net/npm/promise-polyfill@8/dist/polyfill.min.js&amp;#34;&lt;/span&gt;&amp;gt;&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;script&lt;/span&gt;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;html2canvas-在ie11中渲染出不明色块&#34;&gt;html2canvas 在ie11中渲染出不明色块&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;html2canvas&lt;/span&gt;(document.&lt;span style=&#34;color:#a6e22e&#34;&gt;querySelector&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;#preview_modal&amp;#39;&lt;/span&gt;), {
    &lt;span style=&#34;color:#a6e22e&#34;&gt;allowTaint&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;,
    &lt;span style=&#34;color:#a6e22e&#34;&gt;useCORS&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,
    &lt;span style=&#34;color:#a6e22e&#34;&gt;scale&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;,
})
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;使用-html2canvas-生成图片在新tab打开&#34;&gt;使用 html2canvas 生成图片在新tab打开&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;image&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Image&lt;/span&gt;();
&lt;span style=&#34;color:#a6e22e&#34;&gt;image&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;src&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;canvas&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;toDataURL&lt;/span&gt;();

&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;wImage&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; window.&lt;span style=&#34;color:#a6e22e&#34;&gt;open&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;);
&lt;span style=&#34;color:#a6e22e&#34;&gt;setTimeout&lt;/span&gt;(() =&amp;gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;wImage&lt;/span&gt;.document.&lt;span style=&#34;color:#a6e22e&#34;&gt;title&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;);
&lt;span style=&#34;color:#a6e22e&#34;&gt;wImage&lt;/span&gt;.document.&lt;span style=&#34;color:#a6e22e&#34;&gt;write&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;image&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;outerHTML&lt;/span&gt;);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;使用-html2canvas-生成图片并下载&#34;&gt;使用 html2canvas 生成图片并下载&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;link&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; document.&lt;span style=&#34;color:#a6e22e&#34;&gt;createElement&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;a&amp;#39;&lt;/span&gt;);
&lt;span style=&#34;color:#a6e22e&#34;&gt;link&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;download&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;filename.png&amp;#39;&lt;/span&gt;;
&lt;span style=&#34;color:#a6e22e&#34;&gt;link&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;href&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;canvas&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;toDataURL&lt;/span&gt;()
&lt;span style=&#34;color:#a6e22e&#34;&gt;link&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;click&lt;/span&gt;();

&lt;span style=&#34;color:#75715e&#34;&gt;// 适配IE11
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;html2canvas&lt;/span&gt;(document.&lt;span style=&#34;color:#a6e22e&#34;&gt;querySelector&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#outImage&amp;#34;&lt;/span&gt;), { &lt;span style=&#34;color:#a6e22e&#34;&gt;scale&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; }).&lt;span style=&#34;color:#a6e22e&#34;&gt;then&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;canvas&lt;/span&gt;) {
    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;canvas&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;msToBlob&lt;/span&gt;) { &lt;span style=&#34;color:#75715e&#34;&gt;// IE
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;blob&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;canvas&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;msToBlob&lt;/span&gt;();
        window.&lt;span style=&#34;color:#a6e22e&#34;&gt;navigator&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;msSaveBlob&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;blob&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;name.png&amp;#39;&lt;/span&gt;);
    } &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; { &lt;span style=&#34;color:#75715e&#34;&gt;// CH, FF
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;link&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; document.&lt;span style=&#34;color:#a6e22e&#34;&gt;createElement&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;a&amp;#39;&lt;/span&gt;);
        &lt;span style=&#34;color:#a6e22e&#34;&gt;link&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;download&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;name.png&amp;#39;&lt;/span&gt;;
        &lt;span style=&#34;color:#a6e22e&#34;&gt;link&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;href&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;canvas&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;toDataURL&lt;/span&gt;()
        &lt;span style=&#34;color:#a6e22e&#34;&gt;link&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;click&lt;/span&gt;();
    }
});
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;获取frame内的元素&#34;&gt;获取frame内的元素&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;window.&lt;span style=&#34;color:#a6e22e&#34;&gt;frames&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;].document.&lt;span style=&#34;color:#a6e22e&#34;&gt;getElementById&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;someElementId&amp;#39;&lt;/span&gt;);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;限制上传文件大小&#34;&gt;限制上传文件大小&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;uploadField&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; document.&lt;span style=&#34;color:#a6e22e&#34;&gt;getElementById&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;file&amp;#34;&lt;/span&gt;);

&lt;span style=&#34;color:#a6e22e&#34;&gt;uploadField&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;onchange&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;() {
    &lt;span style=&#34;color:#75715e&#34;&gt;// 1MB = 1048576 1KB=1024
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;files&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;].&lt;span style=&#34;color:#a6e22e&#34;&gt;size&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2097152&lt;/span&gt;){
       &lt;span style=&#34;color:#a6e22e&#34;&gt;alert&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;File is too big!&amp;#34;&lt;/span&gt;);
       &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;;
    };
};
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;使用js写入文件并下载&#34;&gt;使用js写入文件并下载&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;downloadToFile&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;content&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;filename&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;contentType&lt;/span&gt;) =&amp;gt; {
  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; document.&lt;span style=&#34;color:#a6e22e&#34;&gt;createElement&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;a&amp;#39;&lt;/span&gt;);
  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;file&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Blob&lt;/span&gt;([&lt;span style=&#34;color:#a6e22e&#34;&gt;content&lt;/span&gt;], { &lt;span style=&#34;color:#a6e22e&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;contentType&lt;/span&gt; });

  &lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;href&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;URL&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;createObjectURL&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;file&lt;/span&gt;);
  &lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;download&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;filename&lt;/span&gt;;
  &lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;click&lt;/span&gt;();

  &lt;span style=&#34;color:#a6e22e&#34;&gt;URL&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;revokeObjectURL&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;href&lt;/span&gt;);
};

document.&lt;span style=&#34;color:#a6e22e&#34;&gt;querySelector&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;#btnSave&amp;#39;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;addEventListener&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;click&amp;#39;&lt;/span&gt;, () =&amp;gt; {
  &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;textArea&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; document.&lt;span style=&#34;color:#a6e22e&#34;&gt;querySelector&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;textarea&amp;#39;&lt;/span&gt;);

  &lt;span style=&#34;color:#a6e22e&#34;&gt;downloadToFile&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;textArea&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;my-new-file.txt&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;text/plain&amp;#39;&lt;/span&gt;);
});
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/57992901/html2canvas-not-rendering-properly-overlapping-color&#34;&gt;html2canvas not rendering properly (overlapping color)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://html2canvas.hertzen.com/documentation.html#browser-compatibility&#34;&gt;About html2canvas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/taylorhakes/promise-polyfill&#34;&gt;Promise Polyfill&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/21860633/download-canvas-to-image-in-ie-using-javascript&#34;&gt;Download canvas to Image in IE using Javascript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/2509934/how-can-i-get-an-element-from-within-a-frameset-frame-using-javascript&#34;&gt;How can I get an element from within a frameset frame using JavaScript?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/5697605/limit-the-size-of-a-file-upload-html-input-element&#34;&gt;Limit the size of a file upload (html input element) - Stack Overflow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://robkendal.co.uk/blog/2020-04-17-saving-text-to-client-side-file-using-vanilla-js/&#34;&gt;Saving text to a client-side file using vanilla JS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>工作笔记2016-2021</title>
      <link>https://deletefromuser.github.io/pgm/2022120601/</link>
      <pubDate>Tue, 06 Dec 2022 20:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2022120601/</guid>
      <description>&lt;h3 id=&#34;停止网页重定向&#34;&gt;停止网页重定向&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;window.&lt;span style=&#34;color:#a6e22e&#34;&gt;addEventListener&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;beforeunload&amp;#34;&lt;/span&gt;, () =&amp;gt; { &lt;span style=&#34;color:#66d9ef&#34;&gt;debugger&lt;/span&gt;; }, &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;js转换字符为unicode&#34;&gt;JS转换字符为UNICODE&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;escape&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;转换字符&amp;#34;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;replace&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;/%/g&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;\\&amp;#34;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;toLowerCase&lt;/span&gt;();
&lt;span style=&#34;color:#75715e&#34;&gt;// 十进制unicode字符码转换为字符
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;String.&lt;span style=&#34;color:#a6e22e&#34;&gt;fromCharCode&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;112&lt;/span&gt;)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;js获取一组元素取出属性并组合&#34;&gt;JS获取一组元素取出属性并组合&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// 取得链接url，空格连接
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;[...document.&lt;span style=&#34;color:#a6e22e&#34;&gt;querySelectorAll&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;[id=thumbnail]&amp;#39;&lt;/span&gt;)].&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;item&lt;/span&gt; =&amp;gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;item&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;href&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;join&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt;)
Array.&lt;span style=&#34;color:#a6e22e&#34;&gt;prototype&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;slice&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;call&lt;/span&gt;(document.&lt;span style=&#34;color:#a6e22e&#34;&gt;querySelectorAll&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;[id=thumbnail]&amp;#39;&lt;/span&gt;)).&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;item&lt;/span&gt; =&amp;gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;item&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;href&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;join&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt;)
&lt;span style=&#34;color:#75715e&#34;&gt;// 取得链接url，换行连接
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;[...document.&lt;span style=&#34;color:#a6e22e&#34;&gt;querySelectorAll&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;[id=thumbnail]&amp;#39;&lt;/span&gt;)].&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;item&lt;/span&gt; =&amp;gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;item&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;href&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;reduce&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt;) =&amp;gt; {&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;\n&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt;;})
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;db2-表异常解决办法&#34;&gt;db2 表异常解决办法&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;connect&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;to&lt;/span&gt; dbut &lt;span style=&#34;color:#66d9ef&#34;&gt;user&lt;/span&gt; tom &lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; password01
&lt;span style=&#34;color:#66d9ef&#34;&gt;load&lt;/span&gt; query &lt;span style=&#34;color:#66d9ef&#34;&gt;table&lt;/span&gt; ut.userinfo
reorg &lt;span style=&#34;color:#66d9ef&#34;&gt;table&lt;/span&gt; ut.userinfo
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;db2-导出导入表数据&#34;&gt;db2 导出导入表数据&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;export &lt;span style=&#34;color:#66d9ef&#34;&gt;to&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;path&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;userinfo_data.ixf &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt; ixf &lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; ut.userinfo &lt;span style=&#34;color:#66d9ef&#34;&gt;fetch&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;first&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;50&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;rows&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;only&lt;/span&gt;

import &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;path&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;userinfo_data.ixf &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt; ixf &lt;span style=&#34;color:#66d9ef&#34;&gt;insert&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;into&lt;/span&gt; ut.userinfonew
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;java取得文件行数&#34;&gt;java取得文件行数&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;Files&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;lines&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;Paths&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;get&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/path/file&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)).&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;count&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;根据wsdl文件生成代码&#34;&gt;根据wsdl文件生成代码&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;wsimport -s /path/result/ file:/path/userinfo.wsdl -wsdllocation file:/serverpath/userinfo.wsdl -encoding utf-8 -Xnocompile
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;linux下查看特定文件的实时内容&#34;&gt;linux下查看特定文件的实时内容&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;tail -500f /path/result/info.log
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;ihs启动与停止配置规则删除特定cookie&#34;&gt;IHS启动与停止，配置规则删除特定cookie&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;/usr/IBM/HTTPServer/bin/apachectl -k start -f /usr/IBM/HTTPServer/conf/httpd.conf
/usr/IBM/HTTPServer/bin/apachectl -k stop -f /usr/IBM/HTTPServer/conf/httpd.conf

&lt;span style=&#34;color:#75715e&#34;&gt;# /usr/IBM/HTTPServer/conf/httpd.conf&lt;/span&gt;
Header edit Set-Cookie &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;^(JESSIONID=).*&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$1&lt;span style=&#34;color:#e6db74&#34;&gt;;Path=/;Expires=Thu, 01 Jan 1970 00:00:00 GMT&amp;#34;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;查看linux发行版信息&#34;&gt;查看linux发行版信息&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;cat /proc/version
&lt;span style=&#34;color:#75715e&#34;&gt;# Linux version 5.4.0-132-generic (buildd@lcy02-amd64-059) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)) #148-Ubuntu SMP Mon Oct 17 16:02:06 UTC 2022&lt;/span&gt;
uname -a
&lt;span style=&#34;color:#75715e&#34;&gt;# Linux vu18-VirtualBox 5.4.0-132-generic #148-Ubuntu SMP Mon Oct 17 16:02:06 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux&lt;/span&gt;
lsb_release -a
&lt;span style=&#34;color:#75715e&#34;&gt;# No LSB modules are available.&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# Distributor ID:	Ubuntu&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# Description:	Ubuntu 20.04.5 LTS&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# Release:	20.04&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# Codename:	focal&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;查看linux发行版信息-1&#34;&gt;查看linux发行版信息&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;cat /proc/version
&lt;span style=&#34;color:#75715e&#34;&gt;# Linux version 5.4.0-132-generic (buildd@lcy02-amd64-059) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)) #148-Ubuntu SMP Mon Oct 17 16:02:06 UTC 2022&lt;/span&gt;
uname -a
&lt;span style=&#34;color:#75715e&#34;&gt;# Linux vu18-VirtualBox 5.4.0-132-generic #148-Ubuntu SMP Mon Oct 17 16:02:06 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux&lt;/span&gt;
lsb_release -a
&lt;span style=&#34;color:#75715e&#34;&gt;# No LSB modules are available.&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# Distributor ID:	Ubuntu&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# Description:	Ubuntu 20.04.5 LTS&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# Release:	20.04&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# Codename:	focal&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;计算文件hash值&#34;&gt;计算文件hash值&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;openssl sha1 /path/file
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;vim操作&#34;&gt;vim操作&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 显示行数&lt;/span&gt;
:set nu
&lt;span style=&#34;color:#75715e&#34;&gt;# 搜索&lt;/span&gt;
/keyword
&lt;span style=&#34;color:#75715e&#34;&gt;# ENTER&lt;/span&gt;
n &lt;span style=&#34;color:#75715e&#34;&gt;#to next occurrence&lt;/span&gt; 
N &lt;span style=&#34;color:#75715e&#34;&gt;#to prev occurrence&lt;/span&gt; 
&lt;span style=&#34;color:#75715e&#34;&gt;# 替换&lt;/span&gt;
:s/article/tutorial/g &lt;span style=&#34;color:#75715e&#34;&gt;# 在当前行内全部替换&lt;/span&gt;
:%s/article/tutorial/g &lt;span style=&#34;color:#75715e&#34;&gt;# 在当前文件内全部替换&lt;/span&gt;
:%s/article/tutorial/gi &lt;span style=&#34;color:#75715e&#34;&gt;# 在当前文件内忽略大小写全部替换&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# 删除字符&lt;/span&gt;
x
&lt;span style=&#34;color:#75715e&#34;&gt;# 剪切行，也可用作删除&lt;/span&gt;
dd
&lt;span style=&#34;color:#75715e&#34;&gt;# 复制行&lt;/span&gt;
yy 或者 Y
&lt;span style=&#34;color:#75715e&#34;&gt;# 在当前行前粘贴&lt;/span&gt;
P
&lt;span style=&#34;color:#75715e&#34;&gt;# 在当前行后粘贴&lt;/span&gt;
p

&lt;span style=&#34;color:#75715e&#34;&gt;# 注释多行代码&lt;/span&gt;
Ctrl + V
使用箭头选择多行
Shift + i
输入# 
ESC + ESC

&lt;span style=&#34;color:#75715e&#34;&gt;# 去掉注释&lt;/span&gt;
Ctrl + V
使用箭头选择多行
x
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;find命令查找文件&#34;&gt;find命令查找文件&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 列出所有文件&lt;/span&gt;
find . -type f
&lt;span style=&#34;color:#75715e&#34;&gt;# 查找指定名字的文件，文件夹&lt;/span&gt;
find . -name test.md
find . -name *.md
find . -regex &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;.*.md&amp;#39;&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# 列出所有文件夹，层数1即当前目录&lt;/span&gt;
find . -maxdepth &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; -type d
&lt;span style=&#34;color:#75715e&#34;&gt;# 列出所有层数大于10的文件夹&lt;/span&gt;
find . -mindepth &lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt; -type d
&lt;span style=&#34;color:#75715e&#34;&gt;# 查找文件并替换对应内容（所有文件的修改日期都会变掉）&lt;/span&gt;
find . -type f -exec perl -pi -e &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;s/public/private/g&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{}&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\;&lt;/span&gt;
find . -type f -exec sed -i &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;s/public/private/g&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{}&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\;&lt;/span&gt;
sed -i &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;s/# requirepass foobared/requirepass xxx/&amp;#39;&lt;/span&gt; /etc/redis/redis_6487.conf
sed -i &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;s/# maxmemory &amp;lt;bytes&amp;gt;/maxmemory 52548800/&amp;#39;&lt;/span&gt; /etc/redis/redis_6487.conf
&lt;span style=&#34;color:#75715e&#34;&gt;# 查找文件并替换对应内容（如果没有包含关键字则不修改文件，修改日期不会变）&lt;/span&gt;
grep -rli &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;old-word&amp;#39;&lt;/span&gt; * | xargs -i@ sed -i &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;s/old-word/new-word/g&amp;#39;&lt;/span&gt; @
&lt;span style=&#34;color:#75715e&#34;&gt;# 查找文件并替换对应内容(包含/)&lt;/span&gt;
find . -type f -exec perl -pi -e &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;s#public#private#g&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{}&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\;&lt;/span&gt;
find . -type f -exec sed -i &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;s#public#private#g&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{}&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\;&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# 查找最近被修改过的三个文件&lt;/span&gt;
find . -type f -exec stat -c &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;%Y %n&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{}&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\;&lt;/span&gt; | sort -nr | awk &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;NR==1,NR==3 {print $2}&amp;#39;&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# 查找最近时间段内被修改过的文件&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# 180天&lt;/span&gt;
find . -type f -mtime -180
find . -type f -mtime -180 -exec ls -lrt &lt;span style=&#34;color:#f92672&#34;&gt;{}&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\;&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# 120分钟&lt;/span&gt;
find . -type f -mmin -120 -exec ls -lrt &lt;span style=&#34;color:#f92672&#34;&gt;{}&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\;&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# 复制目录结构&lt;/span&gt;
find . -type d &amp;gt; dirs.txt
xargs mkdir -p &amp;lt; dirs.txt
&lt;span style=&#34;color:#75715e&#34;&gt;# 查找大于100m的文件&lt;/span&gt;
find . -type f -size +100M
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;每隔一段时间执行一段命令&#34;&gt;每隔一段时间执行一段命令&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 每隔五秒钟打印一次磁盘空间信息&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; true; &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt; date; df -h; sleep 5; &lt;span style=&#34;color:#66d9ef&#34;&gt;done&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; true; &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt; date; df -h | grep &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;/dev/sda1&amp;#39;&lt;/span&gt;; sleep 5; &lt;span style=&#34;color:#66d9ef&#34;&gt;done&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# -d 高亮变化的部分 -d 间隔(单位秒)&lt;/span&gt;
watch -d -n &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt; df -h
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;使用scp复制远程服务器到本地复制本地文件到远程服务器&#34;&gt;使用scp复制远程服务器到本地,复制本地文件到远程服务器&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;scp -r -P &lt;span style=&#34;color:#ae81ff&#34;&gt;22&lt;/span&gt; tom@ip:/path/file ./
scp -P &lt;span style=&#34;color:#ae81ff&#34;&gt;22&lt;/span&gt; /local/path/file tom@ip:~/temp
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;复制文件夹保持原来的权限和链接&#34;&gt;复制文件夹，保持原来的权限和链接&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;cp -rpH /path/ ./
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;curl使用&#34;&gt;curl使用&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# -k 忽略证书错误，-c 显示cookie&lt;/span&gt;
curl -k -c - https://www.baeldung.com/linux/vim-search-replace
&lt;span style=&#34;color:#75715e&#34;&gt;# 在未安装curl的机器上请求url&lt;/span&gt;
perl -MLWP::Simple -e &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;getprint &amp;#39;https://www.baeldung.com/linux/vim-search-replace&amp;#39;&amp;#34;&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# 依次请求多个url&lt;/span&gt;
curl https://jsonplaceholder.typicode.com/todos/1 https://jsonplaceholder.typicode.com/todos/12
&lt;span style=&#34;color:#75715e&#34;&gt;# 请求时使用用户名&lt;/span&gt;
curl -u username http://example.com
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;检查机器支持的ssl版本&#34;&gt;检查机器支持的ssl版本&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;openssl ciphers -v | awk &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;{print $2}&amp;#39;&lt;/span&gt; | sort | uniq
&lt;span style=&#34;color:#75715e&#34;&gt;# 检查网站的ssl版本&lt;/span&gt;
openssl s_client -connect bing.com:443
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;正则表达式&#34;&gt;正则表达式&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 大小写转换 
# \U$1 \L$1 全部转换为大写，小写
# \u$1 \l$1 首字母转换为大写，小写
# \p{Lu} \p{Ll} 匹配大写，小写字母
# USER_PET_NAME -&amp;gt; userPetName
([a-zA-Z0-9]+)_([a-zA-Z0-9]+)_([a-zA-Z0-9]+) -&amp;gt; \L$1\u$2\u$3
# USER_PET_NAME &amp;lt;- userPetName
(\p{Ll}+)(\p{Lu}\p{Ll}+)(\p{Lu}\p{Ll}+) -&amp;gt; \U$1_$2_$3
# 常用表达式
\s 空白字符[ \f\n\r\t\v]，会匹配全角空格符
\S 非空白字符[^ \f\n\r\t\v]
\d 数字字符[0-9]，会匹配全角数字字符
\D 非数字字符[^0-9]
\w 包括下划线的任何单词字符[A-Za-z0-9_]，会匹配中文字符
\W 非单词字符[^A-Za-z0-9_]
# 正向肯定预查
(?=pattern)
(?:pattern)
# 正向否定预查
(?!pattern)
# 反向肯定预查
(?&amp;lt;=pattern)
# 反向否定预查
(?&amp;lt;!pattern)
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;查看linux命令位置和内容&#34;&gt;查看linux命令位置和内容&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;whereis vim
type -a vim
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;文件中搜索字符串&#34;&gt;文件中搜索字符串&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# -i 忽略大小写&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# -o 不输出整行，只输出符合搜索样式的部分&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# -n 显示行数&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# -A 显示检索结果行之后的特定行&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# -B 显示检索结果行之前的特定行&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# -e 指定检索字符串，可设置复数个&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# -E 使用正则表达式&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# -R 检索子目录&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# -h 不显示文件名&lt;/span&gt;
grep -ion &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;keyword&amp;#39;&lt;/span&gt; /path/file -A &lt;span style=&#34;color:#ae81ff&#34;&gt;50&lt;/span&gt; -B &lt;span style=&#34;color:#ae81ff&#34;&gt;50&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# 使用正则表达式搜索&lt;/span&gt;
egrep -i &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;public|private&amp;#39;&lt;/span&gt; /path/file
&lt;span style=&#34;color:#75715e&#34;&gt;# 在文件夹内特定后缀的文件中检索&lt;/span&gt;
grep -r &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;cluster&amp;#39;&lt;/span&gt; --include &lt;span style=&#34;color:#ae81ff&#34;&gt;\*&lt;/span&gt;.yml /path/
&lt;span style=&#34;color:#75715e&#34;&gt;# 在压缩文件中检索（过去的log有时会被备份为gz）&lt;/span&gt;
zgrep -e &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;cluster&amp;#39;&lt;/span&gt; -e &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;another pattern&amp;#39;&lt;/span&gt; /path/*
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;查看linux进程&#34;&gt;查看linux进程&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 根据名字查找&lt;/span&gt;
ps -ef | grep java
&lt;span style=&#34;color:#75715e&#34;&gt;# 根据监听端口号&lt;/span&gt;
lsof -i :8080
&lt;span style=&#34;color:#75715e&#34;&gt;# 杀掉监听指定端口好的程序&lt;/span&gt;
kill -9 &lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;lsof -t -i:8080&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# 查找正在使用某一个文件的进程&lt;/span&gt;
fuser /path/file
ps -ef | grep PID
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;解压缩&#34;&gt;解压缩&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Create archive.tar from files foo and bar.&lt;/span&gt;
tar -cf archive.tar foo bar --exclude&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;my-base-dir/target&amp;#39;&lt;/span&gt; --exclude&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;my-base-dir/.git&amp;#39;&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# List all files in archive.tar verbosely.&lt;/span&gt;
tar -tvf archive.tar
&lt;span style=&#34;color:#75715e&#34;&gt;# Extract all files from archive.tar.&lt;/span&gt;
tar -xf archive.tar
&lt;span style=&#34;color:#75715e&#34;&gt;# 提取tar包中的特定文件&lt;/span&gt;
tar -zxvf &amp;lt;tar filename&amp;gt; &amp;lt;file you want to extract&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;excel函数使用&#34;&gt;Excel函数使用&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# google表格也支持下面的函数&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# 搜索 L2 单元格内的内容在 I4:I15 区域内出现的次数&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;SUMPRODUCT&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;len&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;I4:I15&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;-len&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;SUBSTITUTE&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;I4:I15,L2,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)))&lt;/span&gt;/len&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;L2&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# 获取A2单元格内字符2右边的内容&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;RIGHT&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;A4,len&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;A4&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;-find&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;2&amp;#34;&lt;/span&gt;,A4&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# 获取A6单元格内字符2左边的内容&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;LEFT&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;A6,find&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;2&amp;#34;&lt;/span&gt;,A6&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;-1&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# 获取文件后缀名&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;UPPER&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;RIGHT&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;C10,len&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;C10&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;-find&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;,C10&lt;span style=&#34;color:#f92672&#34;&gt;)))&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# 获取所在列(E)所在单元格上面非空的单元格数量（也可从特定行(E1)开始计算）&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;counta&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;E1:INDIRECT&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;E&amp;#34;&lt;/span&gt; &amp;amp; ROW&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt; - 1&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt; + &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# 获取所在列以外特定列(I)中最后一个非空值&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;ARRAY_CONSTRAIN&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;ARRAYFORMULA&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;LOOKUP&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;2,1/&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;I:I&amp;lt;&amp;gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;,I:I&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;, 1, 1&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# 获取特定列(I)中(也适用于所在列)最后一个非空值&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;ARRAY_CONSTRAIN&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;ARRAYFORMULA&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;LOOKUP&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;2,1/&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;INDIRECT&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;I1&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;:INDIRECT&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;I&amp;#34;&lt;/span&gt; &amp;amp; ROW&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt; - 1&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;&amp;lt;&amp;gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;,INDIRECT&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;I1&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;:INDIRECT&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;I&amp;#34;&lt;/span&gt; &amp;amp; ROW&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt; - 1&lt;span style=&#34;color:#f92672&#34;&gt;)))&lt;/span&gt;, 1, 1&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# 获取特定单元格(A2)的值，如果为空，取另一个单元格(B1)的值&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;IF&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;ISBLANK&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;A2&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;,B1,A2&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# 取得两个单元格的值相加&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;A1&amp;amp;B2
&lt;span style=&#34;color:#75715e&#34;&gt;# 比较四列数据, 如果A1中的值在C列中存在(CX),且B1=DX则为1, 在C列存在但B1!=DX否则为0, 在C列不存在则为#N/A&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;IF&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;AND&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;ISNUMBER&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;MATCH&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;A1,C:C,0&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;,B1&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;VLOOKUP&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;A1,C:D,2,0&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;,1,0&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://wangdoc.com/javascript/stdlib/array&#34;&gt;JavaScript 教程 &amp;gt; 标准库 &amp;gt; Array 对象&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.cnblogs.com/paul8339/p/9724738.html&#34;&gt;深入理解 sudo 与 su 之间的区别&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/73319/how-to-duplicate-a-whole-line-in-vim&#34;&gt;How to duplicate a whole line in Vim?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/11392478/how-to-replace-a-string-in-multiple-files-in-linux-command-line&#34;&gt;How to replace a string in multiple files in linux command line&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.howtogeek.com/517098/linux-file-timestamps-explained-atime-mtime-and-ctime&#34;&gt;Linux File Timestamps Explained: atime, mtime, and ctime&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://exceljet.net/formulas/get-value-of-last-non-empty-cell&#34;&gt;Get value of last non-empty cell&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://udemy.benesse.co.jp/business/office/lookup-function.html&#34;&gt;【エクセルのLOOKUP関数の使い方】VLOOKUP関数とLOOKUP関数の違いも&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.ablebits.com/office-addins-blog/excel-lookup-function/&#34;&gt;Excel LOOKUP function with formula examples&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.linuxshelltips.com/run-linux-command-periodically/&#34;&gt;How to Run a Command Periodically in Linux using Watch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://zh.wikipedia.org/wiki/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F#PCRE%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%85%A8%E9%9B%86&#34;&gt;正则表达式&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/12516937/how-can-i-grep-recursively-but-only-in-files-with-certain-extensions&#34;&gt;How can I grep recursively, but only in files with certain extensions?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://unix.stackexchange.com/questions/61461/how-to-extract-specific-files-from-tar-gz&#34;&gt;How to extract specific file(s) from tar.gz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/984204/shell-command-to-tar-directory-excluding-certain-files-folders&#34;&gt;Shell command to tar directory excluding certain files/folders&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://appuals.com/how-to-kill-process-on-port/&#34;&gt;How to Kill Process on Port?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/1676632/whats-a-quick-way-to-comment-uncomment-lines-in-vim&#34;&gt;What&amp;rsquo;s a quick way to comment/uncomment lines in Vim?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/11392478/how-to-replace-a-string-in-multiple-files-in-linux-command-line&#34;&gt;How to replace a string in multiple files in linux command line - Stack Overflow&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>ubuntu使用技巧</title>
      <link>https://deletefromuser.github.io/pgm/2022120301/</link>
      <pubDate>Sat, 03 Dec 2022 20:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2022120301/</guid>
      <description>&lt;h3 id=&#34;为命令行配置代理&#34;&gt;为命令行配置代理&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 注意代理要是http代理，sock代理是不行的
export HTTP_PROXY=&#39;127.0.0.1:1086&#39;
export HTTPS_PROXY=&#39;127.0.0.1:1086&#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;把desktop文件的程序固定到任务栏&#34;&gt;把desktop文件的程序固定到任务栏&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;复制desktop文件到&lt;code&gt;~/.local/share/applications&lt;/code&gt;下，需要确保文件内的路径复制后仍然正确，改为绝对路径&lt;/li&gt;
&lt;li&gt;命令行启动desktop&lt;/li&gt;
&lt;li&gt;任务栏右键add to favorites&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;在新命令行窗口执行命令&#34;&gt;在新命令行窗口执行命令&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;gnome-terminal -x bash -c &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;echo &amp;#39;hello&amp;#39;; exec bash&amp;#34;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;自动安装安全更新&#34;&gt;自动安装安全更新&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;sudo apt-get install unattended-upgrades
sudo dpkg-reconfigure --priority&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;low unattended-upgrades
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;查看安全更新&#34;&gt;查看安全更新&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;apt list --upgradable | grep &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;security&amp;#34;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;升级大版本&#34;&gt;升级大版本&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;less /etc/update-manager/release-upgrades
&lt;span style=&#34;color:#75715e&#34;&gt;# 确认内容为Prompt=lts&lt;/span&gt;
sudo apt-mark showhold
&lt;span style=&#34;color:#75715e&#34;&gt;# 确认为空&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# 如果不为空 sudo apt-mark unhold pkg1 pkg2&lt;/span&gt;
sudo apt-get update
&lt;span style=&#34;color:#75715e&#34;&gt;# 确认报错的源,注释掉&lt;/span&gt;
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
sudo vim /etc/apt/sources.list

sudo apt-get update
sudo apt-get upgrade
sudo reboot
&lt;span style=&#34;color:#75715e&#34;&gt;# 记录升级前版本号&lt;/span&gt;
uname -mrs
lsb_release -a
sudo ufw allow 1022/tcp comment &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Open port ssh tcp port 1022 as failsafe option for upgrades&amp;#39;&lt;/span&gt;
sudo ufw status
&lt;span style=&#34;color:#75715e&#34;&gt;#升级&lt;/span&gt;
sudo &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt;-release-upgrade
sudo ufw delete allow 1022/tcp
&lt;span style=&#34;color:#75715e&#34;&gt;# 确认升级成功&lt;/span&gt;
uname -mrs
lsb_release -a
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;升级后启动失败问题修复&#34;&gt;升级后启动失败问题修复&lt;/h3&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;使用livecd启动系统， 安装boot-repair， &lt;code&gt;open &amp;gt; advanced options &amp;gt; GRUB options &amp;gt; perge GRUB before installing it + purge the kernels then reinstall the latest kernel &amp;gt; Apply&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;virtualbox启动后四分之三区域黑屏-可见区域内鼠标无法操作-只能任务栏可操作&#34;&gt;virtualbox启动后四分之三区域黑屏, 可见区域内鼠标无法操作, 只能任务栏可操作&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;注销用户后重新登陆&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;列出命令行所有可用命令&#34;&gt;列出命令行所有可用命令&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# No 1&lt;/span&gt;
ls &lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;PATH//:/ &lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# No 2&lt;/span&gt;
compgen -c | sort -u &amp;gt; commands &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; less commands
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://askubuntu.com/questions/1026528/adding-custom-programs-to-favourites-of-ubuntu-dock&#34;&gt;Adding custom programs to favourites of Ubuntu Dock&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.delftstack.com/howto/linux/start-a-new-bash-session&#34;&gt;Start a New Terminal Session in Bash&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://unix.stackexchange.com/questions/318619/how-do-i-open-a-terminal-window-and-execute-a-command-after-the-shell-has-opened&#34;&gt;How do I open a terminal window and execute a command after the shell has opened?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://help.ubuntu.com/community/AutomaticSecurityUpdates&#34;&gt;AutomaticSecurityUpdates&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://askubuntu.com/questions/403435/how-to-get-a-list-of-all-the-commands-available-for-ubuntu&#34;&gt;How to get a list of all the commands available for Ubuntu?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.cyberciti.biz/faq/upgrade-ubuntu-20-04-lts-to-22-04-lts/&#34;&gt;How to upgrade to 22.04 LTS from 20.04 LTS using a GUI method&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://askubuntu.com/questions/1231817/invalid-package-information-error-when-upgrading-to-ubuntu-20-04&#34;&gt;&amp;ldquo;Invalid package information&amp;rdquo; error when upgrading to Ubuntu 20.04&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://ohdear.app/news-and-updates/how-to-upgrade-from-ubuntu-2004-lts-to-ubuntu-2204-lts&#34;&gt;How to upgrade from Ubuntu 20.04 LTS to Ubuntu 22.04 LTS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://askubuntu.com/questions/1522289/error-on-boot-kernel-panic-not-syncing&#34;&gt;Error on boot Kernel panic-not syncing:&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://askubuntu.com/questions/851444/configuring-unattended-upgrades-which-option-to-select&#34;&gt;Configuring unattended-upgrades - which option to select?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>使用命令行上传文件到共享网站file.io</title>
      <link>https://deletefromuser.github.io/pgm/2022112601/</link>
      <pubDate>Sat, 26 Nov 2022 20:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2022112601/</guid>
      <description>&lt;p&gt;在&lt;code&gt;~/.bashrc&lt;/code&gt;最后添加下面脚本&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;upload &lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt; $# &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; -o $# &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;;&lt;span style=&#34;color:#66d9ef&#34;&gt;then&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt; -f &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$1&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;;&lt;span style=&#34;color:#66d9ef&#34;&gt;then&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt; $# &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;;&lt;span style=&#34;color:#66d9ef&#34;&gt;then&lt;/span&gt; curl -F &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;file=@&lt;/span&gt;$1&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; https://file.io/ --no-progress-meter | grep -Eo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;http|https://[a-zA-Z0-9./?=_%:-]*&amp;#34;&lt;/span&gt;;&lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;[[&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$2&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;~ ^&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;1-9&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;+&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;wmy&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;$ &lt;span style=&#34;color:#f92672&#34;&gt;]]&lt;/span&gt;;&lt;span style=&#34;color:#66d9ef&#34;&gt;then&lt;/span&gt; curl -F &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;file=@&lt;/span&gt;$1&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; https://file.io/&lt;span style=&#34;color:#ae81ff&#34;&gt;\?&lt;/span&gt;expires&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;$2 --no-progress-meter | grep -Eo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;http|https://[a-zA-Z0-9./?=_%:-]*&amp;#34;&lt;/span&gt;;&lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; echo &lt;span style=&#34;color:#e6db74&#34;&gt;$&amp;#39;Wrong expiration format.\neg. 1(w/m/y), etc.&amp;#39;&lt;/span&gt;;&lt;span style=&#34;color:#66d9ef&#34;&gt;fi&lt;/span&gt;;&lt;span style=&#34;color:#66d9ef&#34;&gt;fi&lt;/span&gt;;&lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;file doesn&amp;#39;t exist&amp;#34;&lt;/span&gt;;&lt;span style=&#34;color:#66d9ef&#34;&gt;fi&lt;/span&gt;;&lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; echo &lt;span style=&#34;color:#e6db74&#34;&gt;$&amp;#39;usage: upload file_name.ext [expiration]\nexpiration format: 1-9(w/m/y) # (w)eeks, m(onths), (y)ear&amp;#39;&lt;/span&gt;;&lt;span style=&#34;color:#66d9ef&#34;&gt;fi&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;source ~/.bashrc

&lt;span style=&#34;color:#75715e&#34;&gt;# 文件太大时分割文件&lt;/span&gt;
zip existing.zip --out new.zip -s 500m

&lt;span style=&#34;color:#75715e&#34;&gt;# 上传&lt;/span&gt;
upload testfile.txt

&lt;span style=&#34;color:#75715e&#34;&gt;# 下载&lt;/span&gt;
wget -O dirs.zip https://file.io/lhQ7adehy7xc
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://amanroy.me/upload-file-from-terminal&#34;&gt;Make terminal upload file using file.io&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://superuser.com/questions/336219/how-do-i-split-a-zip-file-into-multiple-segments&#34;&gt;How do I split a .zip file into multiple segments?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>Spring开发memo</title>
      <link>https://deletefromuser.github.io/pgm/2022111501/</link>
      <pubDate>Tue, 15 Nov 2022 20:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2022111501/</guid>
      <description>&lt;h3 id=&#34;解密jasypt密文&#34;&gt;解密Jasypt密文&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;开发中遇到一些配置的密文，有解密的需要&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;AES256TextEncryptor encryptor &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; AES256TextEncryptor&lt;span style=&#34;color:#f92672&#34;&gt;();&lt;/span&gt;
encryptor&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;setPassword&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;some_salt&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;
String plainText &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; encryptor&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;decrypt&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;myEncryptedText&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;
System&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;out&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;println&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Decrypted: &amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;plainText&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;winmerge-除外特定文件或文件夹&#34;&gt;winmerge 除外特定文件或文件夹&lt;/h3&gt;
&lt;p&gt;进入 Tools | Filters&amp;hellip; | Filefilters选项，编辑&lt;code&gt;Exclude Source Control&lt;/code&gt;(也可以新建，但是编辑这个更方便，内置filter可以除外掉版本管理文件)&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-flt&#34; data-lang=&#34;flt&#34;&gt;## Ignore Java class and jar files
f: \.class$
f: \.jar$

## Ignore target directories
d: \\target$
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;maven运行时出现警告-an-illegal-reflective-access-operation-has-occurred&#34;&gt;maven运行时出现警告: An illegal reflective access operation has occurred&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;wget https://www.apache.org/dist/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz -P /tmp
sudo tar xf /tmp/apache-maven-*.tar.gz -C /opt
sudo update-alternatives --install /usr/bin/mvn mvn /opt/apache-maven-3.6.3/bin/mvn &lt;span style=&#34;color:#ae81ff&#34;&gt;363&lt;/span&gt;
sudo update-alternatives --config mvn
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;手动调用spring组数据校验&#34;&gt;手动调用spring组数据校验&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// 定义SmartValidator
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;@Bean&lt;/span&gt;
    &lt;span style=&#34;color:#a6e22e&#34;&gt;@Primary&lt;/span&gt;
    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; Validator &lt;span style=&#34;color:#a6e22e&#34;&gt;myValidator&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
      &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; LocalValidatorFactoryBean&lt;span style=&#34;color:#f92672&#34;&gt;();&lt;/span&gt;
    &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;

    &lt;span style=&#34;color:#75715e&#34;&gt;// 使用的时候注入SmartValidator, validationHints可以指定group
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;    smartValidator&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;validate&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;target&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; errors&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; validationHints&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;

&lt;span style=&#34;color:#75715e&#34;&gt;// 默认校验只能单层, 如果自定义对象成员变量时, 就需要给成员变量加@Valid, 才能校验自定义对象里的内容
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;并发控制&#34;&gt;并发控制&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// 1. 定义HttpSessionEventPublisher
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;@Bean&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; HttpSessionEventPublisher &lt;span style=&#34;color:#a6e22e&#34;&gt;httpSessionEventPublisher&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; HttpSessionEventPublisher&lt;span style=&#34;color:#f92672&#34;&gt;();&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;// 2. 设置maximumSessions
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;@Bean&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; SecurityFilterChain &lt;span style=&#34;color:#a6e22e&#34;&gt;filterChain&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;HttpSecurity http&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
    http
        &lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;sessionManagement&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;session &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; session
            &lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;maximumSessions&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;1&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
        &lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;
    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; http&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;build&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;();&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;导出svn-patch&#34;&gt;导出svn patch&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;Show Log -&amp;gt; Show differences as unified diff -&amp;gt; copy + save to file
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/22067552/decrypt-using-jasypt&#34;&gt;Decrypt using Jasypt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/a/1477287/19120213&#34;&gt;How to ignore SVN folders in WinMerge&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/a/63876216/19120213&#34;&gt;maven: An illegal reflective access operation has occurred&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.baeldung.com/javax-validation-groups&#34;&gt;Grouping Javax Validation Constraints | Baeldung&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/spring-projects/spring-boot/issues/8495&#34;&gt;Multiple &amp;lsquo;org.springframework.validation.Validator&amp;rsquo; beans are exposed as of Spring Boot 1.5 · Issue #8495 · spring-projects/spring-boot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/28150405/validation-of-a-list-of-objects-in-spring&#34;&gt;java - Validation of a list of objects in Spring - Stack Overflow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/28702809/how-to-manually-trigger-spring-validation&#34;&gt;java - How to manually trigger Spring validation? - Stack Overflow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/35766872/what-type-of-exception-to-throw-in-spring-restcontroller-when-validation-fails&#34;&gt;java - What type of exception to throw in Spring RestController when validation fails? - Stack Overflow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.cnblogs.com/huangjiandong2012/p/4040030.html&#34;&gt;Spring Security Session管理 - 黄建东 - 博客园&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.spring.io/spring-security/reference/servlet/authentication/session-management.html#ns-concurrent-sessions&#34;&gt;Session Management - Spring Security Reference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://mtyurt.net/post/spring-expiring-all-sessions-of-a-user.html&#34;&gt;Spring: Expiring all sessions of a user | Mert Yürtbilir&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/15031729/svn-create-patch-from-committed-code&#34;&gt;diff - SVN create patch from committed code? - Stack Overflow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/1625406/how-to-use-tortoisesvn-via-command-line&#34;&gt;svn - How to use TortoiseSVN via command line? - Stack Overflow&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    
    <item>
      <title>JavaScript POST方式打开新窗口</title>
      <link>https://deletefromuser.github.io/pgm/2022111402/</link>
      <pubDate>Mon, 14 Nov 2022 20:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2022111402/</guid>
      <description>&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;openWindowWithPost&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt;, {
		&lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;1&amp;#34;&lt;/span&gt;,
		&lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;,
	});

&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;openWindowWithPost&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;) {
    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;form&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; document.&lt;span style=&#34;color:#a6e22e&#34;&gt;createElement&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;form&amp;#34;&lt;/span&gt;);
    &lt;span style=&#34;color:#a6e22e&#34;&gt;form&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;target&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;UserInfo&amp;#34;&lt;/span&gt;;
    &lt;span style=&#34;color:#a6e22e&#34;&gt;form&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;method&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;POST&amp;#34;&lt;/span&gt;;
    &lt;span style=&#34;color:#a6e22e&#34;&gt;form&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;action&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt;;

    &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;key&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;) {
        &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;input&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; document.&lt;span style=&#34;color:#a6e22e&#34;&gt;createElement&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;input&amp;#34;&lt;/span&gt;);
        &lt;span style=&#34;color:#a6e22e&#34;&gt;input&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;hidden&amp;#34;&lt;/span&gt;;
        &lt;span style=&#34;color:#a6e22e&#34;&gt;input&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;key&lt;/span&gt;;
        &lt;span style=&#34;color:#a6e22e&#34;&gt;input&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;key&lt;/span&gt;];
        &lt;span style=&#34;color:#a6e22e&#34;&gt;form&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;appendChild&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;input&lt;/span&gt;);
    }
    document.&lt;span style=&#34;color:#a6e22e&#34;&gt;body&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;appendChild&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;form&lt;/span&gt;);
    window.&lt;span style=&#34;color:#a6e22e&#34;&gt;open&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;UserInfo&amp;#39;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;width=1000,height=550,left=100,top=100&amp;#34;&lt;/span&gt;);
    &lt;span style=&#34;color:#a6e22e&#34;&gt;form&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;submit&lt;/span&gt;();
    document.&lt;span style=&#34;color:#a6e22e&#34;&gt;body&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;removeChild&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;form&lt;/span&gt;);
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://codepad.co/snippet/javascript-open-new-window-posting-parameters&#34;&gt;javascript-open-new-window-posting-parameters&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/3951768/window-open-and-pass-parameters-by-post-method&#34;&gt;Window.open and pass parameters by post method&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://thewebdev.info/2021/05/31/how-to-filter-or-map-nodelists-with-javascript/&#34;&gt;How to Filter or Map Nodelists with JavaScript?&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    
    <item>
      <title>linux 命令memo</title>
      <link>https://deletefromuser.github.io/pgm/2022111001/</link>
      <pubDate>Thu, 10 Nov 2022 20:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2022111001/</guid>
      <description>&lt;h3 id=&#34;uuidgen&#34;&gt;&lt;code&gt;uuidgen&lt;/code&gt;&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;生成uuid&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;history&#34;&gt;&lt;code&gt;history&lt;/code&gt;&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;命令行历史&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;修改history容量，&lt;code&gt;~/.bashrc&lt;/code&gt;最后追加&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;export HISTSIZE&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;10000&lt;/span&gt;
export HISTFILESIZE&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;10000&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;df-du&#34;&gt;&lt;code&gt;df du&lt;/code&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 查看磁盘占用&lt;/span&gt;
df -h

&lt;span style=&#34;color:#75715e&#34;&gt;# 查看文件夹大小&lt;/span&gt;
du -h -d &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# 排序&lt;/span&gt;
du -m -d &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; | sort -n

&lt;span style=&#34;color:#75715e&#34;&gt;# ping服务器的特定端口&lt;/span&gt;
nc -vz 192.168.0.1 &lt;span style=&#34;color:#ae81ff&#34;&gt;22&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;shell文件中的脚本生成的文件名末尾有一个问号&#34;&gt;shell文件中的脚本生成的文件名末尾有一个问号&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;检查换行符是否是\n，如果是\r\n需要替换&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;批量修改文件名&#34;&gt;批量修改文件名&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;rename &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;s/^Pre/Post/&amp;#39;&lt;/span&gt; *
rename &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;s/^\D+(\d+)\D+/$1/&amp;#39;&lt;/span&gt; *
rename &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;s/^\D+([cp]\d+.+)/$1/&amp;#39;&lt;/span&gt; *

&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; f in * ; &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt; mv — &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$f&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;PRE_&lt;/span&gt;$f&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; ; &lt;span style=&#34;color:#66d9ef&#34;&gt;done&lt;/span&gt;
counter&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;1; &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; file in *; &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;[[&lt;/span&gt; -f $file &lt;span style=&#34;color:#f92672&#34;&gt;]]&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; echo mv -i &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$file&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; PRE_&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;printf &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;%02d&amp;#39;&lt;/span&gt; $counter&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;.zip &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;((&lt;/span&gt;counter++&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;; &lt;span style=&#34;color:#66d9ef&#34;&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;简单加密文件名&#34;&gt;简单加密文件名&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 不加密后缀&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; file in *; &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt;
  &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt; -f &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$file&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;continue&lt;/span&gt;
  mv -- &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$file&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;printf &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%s&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;file%.*&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; | base32&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;file##*.&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;done&lt;/span&gt;

&lt;span style=&#34;color:#75715e&#34;&gt;# 解密&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; file in *; &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt;
  &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt; -f &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$file&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;continue&lt;/span&gt;
  mv -- &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$file&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;printf &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%s&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;file%.*&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; | base32 -d&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;file##*.&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;done&lt;/span&gt;

&lt;span style=&#34;color:#75715e&#34;&gt;# 加密后缀&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; file in *; &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt;
  &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt; -f &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$file&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;continue&lt;/span&gt;
  mv -- &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$file&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;printf &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%s&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;file&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; | base32&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;done&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# 解密&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; file in *; &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt;
  &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt; -f &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$file&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;continue&lt;/span&gt;
  mv -- &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$file&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;printf &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%s&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;file&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; | base32 -d&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;创建软连接&#34;&gt;创建软连接&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 磁盘满的时候，使用软连接把老数据转移到别的硬盘上个人觉得也是个办法，&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# 就是不知道客户为什么说不稳定&lt;/span&gt;
ln -s &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;真实磁盘路径&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;连接所在位置&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;命令行内容输出到剪贴板&#34;&gt;命令行内容输出到剪贴板&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# git bash（windows）&lt;/span&gt;
find . -typf f | clip

&lt;span style=&#34;color:#75715e&#34;&gt;# linux&lt;/span&gt;
find . -typf f | | xclip -selection clipboard
&lt;span style=&#34;color:#75715e&#34;&gt;# or&lt;/span&gt;
alias clip&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;xclip -selection clipboard&amp;#39;&lt;/span&gt;
find . -typf f | clip
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;查看linux用户所在组&#34;&gt;查看linux用户所在组&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;groups
groups tom
&lt;span style=&#34;color:#75715e&#34;&gt;# 添加用户到某个组&lt;/span&gt;
sudo usermod -a -G groupname username
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;修改系统时区&#34;&gt;修改系统时区&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 检查当前时区&lt;/span&gt;
timedatectl
&lt;span style=&#34;color:#75715e&#34;&gt;# or&lt;/span&gt;
ls -l /etc/localtime
&lt;span style=&#34;color:#75715e&#34;&gt;# 检查时区列表&lt;/span&gt;
timedatectl list-timezones
&lt;span style=&#34;color:#75715e&#34;&gt;# 修改时区&lt;/span&gt;
sudo timedatectl set-timezone America/New_York

&lt;span style=&#34;color:#75715e&#34;&gt;# 没有timedatectl组件时（比如docker）&lt;/span&gt;
sudo rm -rf /etc/localtime
sudo ln -s /usr/share/zoneinfo/America/New_York /etc/localtime
sudo echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;America/New_York&amp;#39;&lt;/span&gt; &amp;gt; /etc/timezone
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;解析url时指定dns&#34;&gt;解析url时指定dns&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;nslookup isc.org 8.8.8.8
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;查看占用端口号的进程&#34;&gt;查看占用端口号的进程&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# linux&lt;/span&gt;
lsof -i :8080
&lt;span style=&#34;color:#75715e&#34;&gt;# windows git bash&lt;/span&gt;
netstat -ano | grep &lt;span style=&#34;color:#ae81ff&#34;&gt;8080&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;ftp命令使用&#34;&gt;ftp命令使用&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 进入ftp&lt;/span&gt;
ftp
&lt;span style=&#34;color:#75715e&#34;&gt;# 连接ftp, 接着输入账号密码&lt;/span&gt;
open 192.168.1.2
&lt;span style=&#34;color:#75715e&#34;&gt;# 下载文件&lt;/span&gt;
get a.txt
&lt;span style=&#34;color:#75715e&#34;&gt;# 上传文件&lt;/span&gt;
put /path/b.txt /ftppath/b.txt
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;unzip&#34;&gt;unzip&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 解压时指定字符编码&lt;/span&gt;
unzip -O shift-jis ~/Downloads/【新入荷ECM】資料.zip
&lt;span style=&#34;color:#75715e&#34;&gt;# rar的话没找到, 可以在virtualbox里装个日文版win7里解压&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;使用git-bash-把文件夹下的所有srt后缀文件编码从big5转换为utf8&#34;&gt;使用git bash 把文件夹下的所有srt后缀文件编码从big5转换为utf8&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; f in *.srt; &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt;
  iconv -f BIG5 -t UTF-8 &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$f&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; &amp;gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$f&lt;span style=&#34;color:#e6db74&#34;&gt;.utf8&amp;#34;&lt;/span&gt;
  mv &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$f&lt;span style=&#34;color:#e6db74&#34;&gt;.utf8&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$f&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://askubuntu.com/questions/307541/how-to-change-history-size-for-ever&#34;&gt;How to change history size for ever?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/37566064/why-questionmark-comes-in-the-end-of-filename-when-i-create-txt-file-through-sh&#34;&gt;why questionmark comes in the end of filename when i create .txt file through shell script?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://suggestcloud.com/add-prefix-suffix-to-all-existing-files-in-linux-directory/&#34;&gt;Add Prefix-Suffix To All Existing Files in Linux Directory&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://linuxhint.com/ping-specific-port-netcat-nmap/&#34;&gt;How do I Ping a Specific Port?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/37445732/bash-rename-files-to-base64-value-of-the-filenames&#34;&gt;Bash - Rename files to base64 value of the filenames&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/3945541/base64-encoding-safe-for-filenames&#34;&gt;Base64 Encoding safe for filenames?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.cnblogs.com/flyingeagle/articles/9219047.html&#34;&gt;Linux运用软链接解决目录空间不足&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.geeksforgeeks.org/how-to-copy-command-output-to-linux-clipboard-directly/&#34;&gt;How To Copy Command Output To Linux Clipboard Directly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.cyberciti.biz/faq/linux-show-groups-for-user/&#34;&gt;Linux Show The Groups a User Is In&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://linuxize.com/post/how-to-set-or-change-timezone-in-linux/&#34;&gt;How to Set or Change the Time Zone in Linux | Linuxize&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://serverfault.com/questions/683605/docker-container-time-timezone-will-not-reflect-changes&#34;&gt;date - Docker Container time &amp;amp; timezone (will not reflect changes) - Server Fault&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.nslookup.io/learning/how-to-specify-a-dns-server-in-nslookup/&#34;&gt;How to specify a DNS server in nslookup?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://tecadmin.net/download-upload-files-using-ftp-command-line/&#34;&gt;How to Download and Upload Files using FTP Command Line&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/ftp-put&#34;&gt;ftp put | Microsoft Learn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://askubuntu.com/questions/935022/how-to-unzip-a-japanese-zip-file-and-avoid-mojibake-garbled-characters&#34;&gt;encoding - How to unzip a Japanese ZIP file, and avoid mojibake/garbled characters - Ask Ubuntu&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>linux下让Java程序运行在后台</title>
      <link>https://deletefromuser.github.io/pgm/2022111002/</link>
      <pubDate>Thu, 10 Nov 2022 20:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2022111002/</guid>
      <description>&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;nohup java -jar /web/server.jar &amp;gt; log.log 2&amp;gt;&amp;amp;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &amp;amp;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/12102270/run-java-jar-file-on-a-server-as-background-process&#34;&gt;Run java jar file on a server as background process&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://programmer.ink/think/launch-springboot-project-in-the-background-on-linux.html&#34;&gt;Launch springboot project in the background on Linux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.cnblogs.com/chanmufeng/p/16727359.html&#34;&gt;2&amp;gt;&amp;amp;1到底是什么意思？&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    
    <item>
      <title>利用RSS自动下载Torrent</title>
      <link>https://deletefromuser.github.io/pgm/2022110901/</link>
      <pubDate>Tue, 08 Nov 2022 20:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2022110901/</guid>
      <description>&lt;p&gt;以前竟然不知道，每周都要上网站手动搜索&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;下载网站找到rss feed url，比如&lt;code&gt;https://nyaa.si/?page=rss&amp;amp;q=ubuntu&amp;amp;c=0_0&amp;amp;f=0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;粘贴到下载软件里下载即可，比如qBittorrent，还需要使用rss downloader设置下载规则即可自动下载，设置里可以调整rss feed的刷新间隔，十分钟即可，不着急一天一次也可以&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.makeuseof.com/tag/how-to-use-rss-feeds-to-download-torrents-easily-and-automatically/&#34;&gt;How to Use RSS Feeds to Download Torrents Automatically&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>weblogic console忘记密码的解决办法</title>
      <link>https://deletefromuser.github.io/pgm/2022110801/</link>
      <pubDate>Tue, 08 Nov 2022 12:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2022110801/</guid>
      <description>&lt;p&gt;重置密码太麻烦了，所以用解密&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;cd /u01/app/oracle/middleware/oracle_common/common/bin
./wlst.sh

domain &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/u01/app/oracle/middleware/user_projects/domains/wl_domain&amp;#34;&lt;/span&gt;
service &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; weblogic.security.internal.SerializedSystemIni.getEncryptionService&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;domain&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
encryption &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; weblogic.security.internal.encryption.ClearOrEncryptedService&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;service&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;

&lt;span style=&#34;color:#75715e&#34;&gt;# 密文中有`\`的话，解密会报错，要去掉&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# find encrptyed username and password in domainnamexxx/servers/AdminServer/security/boot.properties&lt;/span&gt;
print encryption.decrypt&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;{AES}nFIptO4HdY8fxSgLjrS8ZNqsVlcB2zQZzYJQ9o7AbJU=&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://chronicler.tech/simplest-way-to-decrypt-passwords-in-oracle-weblogic-server-12c/&#34;&gt;Quickest way to decrypt passwords in Oracle WebLogic Server 12c&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://syntax213.rssing.com/chan-29978744/article120.html&#34;&gt;Decrypt your boot.properties file using the WebLogic Scripting Tool (wlst) on your JD Edwards EnterpriseOne WebLogic Server&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.freebuf.com/articles/web/220147.html&#34;&gt;一文解密所有WebLogic密文&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>linux下设置定时任务</title>
      <link>https://deletefromuser.github.io/pgm/2022110602/</link>
      <pubDate>Sun, 06 Nov 2022 19:30:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2022110602/</guid>
      <description>&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;crontab -e

A B C D E USERNAME /path/to/command arg1 arg2
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Explanation of above cron syntax:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A: Minutes range: 0 – 59&lt;/li&gt;
&lt;li&gt;B: Hours range: 0 – 23&lt;/li&gt;
&lt;li&gt;C: Days range: 0 – 31&lt;/li&gt;
&lt;li&gt;D: Months range: 0 – 12&lt;/li&gt;
&lt;li&gt;E: Days of the week range: 0 – 7. Starting from Monday, 0 or 7 represents Sunday&lt;/li&gt;
&lt;li&gt;USERNAME: replace this with your username&lt;/li&gt;
&lt;li&gt;/path/to/command – The name of the script or command you want to schedule&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.tecmint.com/create-and-manage-cron-jobs-on-linux/&#34;&gt;How to Create and Manage Cron Jobs on Linux&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>oracle安装后连接问题</title>
      <link>https://deletefromuser.github.io/pgm/2022110603/</link>
      <pubDate>Sun, 06 Nov 2022 19:30:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2022110603/</guid>
      <description>&lt;h2 id=&#34;1-ora-12505-tnslistener-does-not-currently-know-of-sid-given-in-connect-descriptor&#34;&gt;1. ORA-12505: TNS:listener does not currently know of SID given in connect descriptor&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;add to tnsnames.ora file, and run &lt;code&gt;lsnrctl reload&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;ORCL = 
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVICE = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )
&lt;/code&gt;&lt;/pre&gt;&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;excute &lt;code&gt;alter system set local_listener = &#39;(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))&#39; scope = both;&lt;/code&gt;  in sqlplus.(username sys, &lt;code&gt;password, orcl as sysdba&lt;/code&gt;)&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;2-状态-失败--测试失败-io-错误-the-network-adapter-could-not-establish-the-connection&#34;&gt;2. 状态: 失败 -测试失败: IO 错误: The Network Adapter could not establish the connection&lt;/h2&gt;
&lt;p&gt;admin模式打开cmd，运行 &lt;code&gt;lsnrctl start&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/a/24524771&#34;&gt;The Network Adapter could not establish the connection in SQL developer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>virtualbox虚拟机启用宿主机摄像头</title>
      <link>https://deletefromuser.github.io/pgm/2022110604/</link>
      <pubDate>Sun, 06 Nov 2022 19:30:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2022110604/</guid>
      <description>&lt;ol&gt;
&lt;li&gt;Install ‘Oracle VM VirtualBox Extension Pack’&lt;/li&gt;
&lt;li&gt;Attaching webcam to guest OS&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;VBoxManage list webcams
VboxManage controlvm &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Ubuntu 16.04.3&amp;#34;&lt;/span&gt; webcam attach .2
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://scribles.net/using-webcam-in-virtualbox-guest-os-on-windows-host/&#34;&gt;Enabling Webcam in VirtualBox Guest OS on Windows Host&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>oracle常用命令</title>
      <link>https://deletefromuser.github.io/pgm/2022110605/</link>
      <pubDate>Sun, 06 Nov 2022 19:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2022110605/</guid>
      <description>&lt;h3 id=&#34;在线执行环境缺点是需要注册&#34;&gt;在线执行环境，缺点是需要注册&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://livesql.oracle.com&#34;&gt;Oracle live SQL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://sqlfiddle.com/&#34;&gt;http://sqlfiddle.com/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;创建用户&#34;&gt;创建用户&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;alter&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;session&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;_ORACLE_SCRIPT&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;;
&lt;span style=&#34;color:#66d9ef&#34;&gt;CREATE&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;USER&lt;/span&gt; TOM IDENTIFIED &lt;span style=&#34;color:#66d9ef&#34;&gt;BY&lt;/span&gt; a12345678;
&lt;span style=&#34;color:#66d9ef&#34;&gt;GRANT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;CONNECT&lt;/span&gt;, RESOURCE, DBA &lt;span style=&#34;color:#66d9ef&#34;&gt;TO&lt;/span&gt; TOM;
&lt;span style=&#34;color:#66d9ef&#34;&gt;GRANT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;on&lt;/span&gt; tom.contacts &lt;span style=&#34;color:#66d9ef&#34;&gt;TO&lt;/span&gt; TOM;
&lt;span style=&#34;color:#66d9ef&#34;&gt;REVOKE&lt;/span&gt; DBA &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; TOM;
&lt;span style=&#34;color:#66d9ef&#34;&gt;REVOKE&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;on&lt;/span&gt; tom.contacts &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; TOM;
&lt;span style=&#34;color:#66d9ef&#34;&gt;DROP&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;USER&lt;/span&gt; TOM;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 同时删除用户下的所有对象
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;DROP&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;USER&lt;/span&gt; TOM &lt;span style=&#34;color:#66d9ef&#34;&gt;CASCADE&lt;/span&gt;;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 查看权限
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; DBA_ROLE_PRIVS &lt;span style=&#34;color:#66d9ef&#34;&gt;WHERE&lt;/span&gt; GRANTEE &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;TOM&amp;#39;&lt;/span&gt;;
&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; USER_SYS_PRIVS; 
&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; USER_TAB_PRIVS; 
&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; USER_ROLE_PRIVS;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;登录sys用户&#34;&gt;登录sys用户&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;sqlplus / as sysdba
-- 输入sys
-- 输入密码 as sysdba
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;修改数据库编码&#34;&gt;修改数据库编码&lt;/h3&gt;
&lt;p&gt;重要数据记得备份，我导入的数据转码之后汉字全都乱码了&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- 查看oracle数据库的编码
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; nls_database_parameters &lt;span style=&#34;color:#66d9ef&#34;&gt;where&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;parameter&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;NLS_CHARACTERSET&amp;#39;&lt;/span&gt;;
&lt;span style=&#34;color:#75715e&#34;&gt;-- oracle客户端编码
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; nls_instance_parameters &lt;span style=&#34;color:#66d9ef&#34;&gt;where&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;parameter&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;NLS_LANGUAGE&amp;#39;&lt;/span&gt;;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 修改oracle的字符集（-&amp;gt;ZHS16GBK）
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- 以sysdba的身份登录
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;conn &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; sysdba
&lt;span style=&#34;color:#75715e&#34;&gt;-- 关闭数据库
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;shutdown &lt;span style=&#34;color:#66d9ef&#34;&gt;immediate&lt;/span&gt;;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 以mount打来数据库
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;startup mount
&lt;span style=&#34;color:#75715e&#34;&gt;--设置session 
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;ALTER&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;SYSTEM&lt;/span&gt; ENABLE RESTRICTED &lt;span style=&#34;color:#66d9ef&#34;&gt;SESSION&lt;/span&gt;;
&lt;span style=&#34;color:#66d9ef&#34;&gt;ALTER&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;SYSTEM&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;SET&lt;/span&gt; JOB_QUEUE_PROCESSES&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;
&lt;span style=&#34;color:#66d9ef&#34;&gt;ALTER&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;SYSTEM&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;SET&lt;/span&gt; AQ_TM_PROCESSES&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 启动数据库
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;alter&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;database&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;open&lt;/span&gt;;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 修改字符集
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;ALTER&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;DATABASE&lt;/span&gt; CHARACTER &lt;span style=&#34;color:#66d9ef&#34;&gt;SET&lt;/span&gt; ZHS16GBK;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 可能会报错,可以跳过超集的检查做更改
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;ALTER&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;DATABASE&lt;/span&gt; character &lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt; INTERNAL_USE ZHS16GBK;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 关闭，重新启动
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;shutdown &lt;span style=&#34;color:#66d9ef&#34;&gt;immediate&lt;/span&gt;;
startup
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;故障排查&#34;&gt;故障排查&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- 查看数据库连接数
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;COUNT&lt;/span&gt;(&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; v$session;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 查看允许的最大连接数
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; name, value &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; v$parameter &lt;span style=&#34;color:#66d9ef&#34;&gt;WHERE&lt;/span&gt; name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;sessions&amp;#39;&lt;/span&gt;;

&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; current_utilization, limit_value &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; v$resource_limit &lt;span style=&#34;color:#66d9ef&#34;&gt;where&lt;/span&gt; resource_name&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;sessions&amp;#39;&lt;/span&gt;;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;导出数据库&#34;&gt;导出数据库&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- 导出某个用户下全部数据
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;exp tom&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;a12345678&lt;span style=&#34;color:#f92672&#34;&gt;@&lt;/span&gt;orcl file&lt;span style=&#34;color:#f92672&#34;&gt;=/&lt;/span&gt;path&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;backup.dmp &lt;span style=&#34;color:#66d9ef&#34;&gt;owner&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;tom
&lt;span style=&#34;color:#75715e&#34;&gt;-- 导出某个用户下特定表
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;exp tom&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;a12345678&lt;span style=&#34;color:#f92672&#34;&gt;@&lt;/span&gt;orcl file&lt;span style=&#34;color:#f92672&#34;&gt;=/&lt;/span&gt;path&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;backup.dmp tables&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;tableA,tableB
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;导入数据库&#34;&gt;导入数据库&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- 导入的时候确定，导出和导入的数据库编码一致
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;imp tom&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;a12345678&lt;span style=&#34;color:#f92672&#34;&gt;@&lt;/span&gt;orcl file&lt;span style=&#34;color:#f92672&#34;&gt;=/&lt;/span&gt;path&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;backup.dmp fromuser&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;tom touser&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;jack &lt;span style=&#34;color:#66d9ef&#34;&gt;ignore&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 导入特定表
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;imp tom&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;a12345678&lt;span style=&#34;color:#f92672&#34;&gt;@&lt;/span&gt;orcl file&lt;span style=&#34;color:#f92672&#34;&gt;=/&lt;/span&gt;path&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;backup.dmp fromuser&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;tom touser&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;jack tables&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;tableA,tableB &lt;span style=&#34;color:#66d9ef&#34;&gt;ignore&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;-- or
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;CREATE&lt;/span&gt; DIRECTORY MY_DIR &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;/path/&amp;#39;&lt;/span&gt;;
impdb &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#39;sys/sys@orcl as sysdba&amp;#39;&amp;#34;&lt;/span&gt; directory&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;MY_DIR  DUMPFILE&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;backup.dmp TABLES&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;All&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;缩小oracle数据库内存占用&#34;&gt;缩小oracle数据库内存占用&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; v$parameter &lt;span style=&#34;color:#66d9ef&#34;&gt;WHERE&lt;/span&gt; name &lt;span style=&#34;color:#66d9ef&#34;&gt;LIKE&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;%size%&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;OR&lt;/span&gt; name &lt;span style=&#34;color:#66d9ef&#34;&gt;LIKE&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;%target%&amp;#39;&lt;/span&gt;;
&lt;span style=&#34;color:#66d9ef&#34;&gt;show&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;parameter&lt;/span&gt; sga;
&lt;span style=&#34;color:#66d9ef&#34;&gt;alter&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;system&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt; sga_max_size&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1024&lt;/span&gt;M &lt;span style=&#34;color:#66d9ef&#34;&gt;scope&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;spfile;
&lt;span style=&#34;color:#66d9ef&#34;&gt;alter&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;system&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt; sga_target &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1024&lt;/span&gt;M &lt;span style=&#34;color:#66d9ef&#34;&gt;scope&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;spfile;
&lt;span style=&#34;color:#66d9ef&#34;&gt;show&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;parameter&lt;/span&gt; sga;
shut &lt;span style=&#34;color:#66d9ef&#34;&gt;immediate&lt;/span&gt;;
startup &lt;span style=&#34;color:#66d9ef&#34;&gt;force&lt;/span&gt;;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 必须重启服务restart OracleServiceORCL service in windows
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;缩小oracle数据库磁盘占用&#34;&gt;缩小oracle数据库磁盘占用&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- 运行下列查询，并复制结果执行即可
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt; linesize &lt;span style=&#34;color:#ae81ff&#34;&gt;1000&lt;/span&gt; pagesize &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; feedback &lt;span style=&#34;color:#66d9ef&#34;&gt;off&lt;/span&gt; trimspool &lt;span style=&#34;color:#66d9ef&#34;&gt;on&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;with&lt;/span&gt;
 hwm &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; (
  &lt;span style=&#34;color:#75715e&#34;&gt;-- get highest block id from each datafiles ( from x$ktfbue as we don&amp;#39;t need all joins from dba_extents )
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;/*+ materialize */&lt;/span&gt; ktfbuesegtsn ts&lt;span style=&#34;color:#f92672&#34;&gt;#&lt;/span&gt;,ktfbuefno relative_fno,&lt;span style=&#34;color:#66d9ef&#34;&gt;max&lt;/span&gt;(ktfbuebno&lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;ktfbueblks&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;) hwm_blocks
  &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; sys.x$ktfbue &lt;span style=&#34;color:#66d9ef&#34;&gt;group&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; ktfbuefno,ktfbuesegtsn
 ),
 hwmts &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; (
  &lt;span style=&#34;color:#75715e&#34;&gt;-- join ts# with tablespace_name
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; name tablespace_name,relative_fno,hwm_blocks
  &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; hwm &lt;span style=&#34;color:#66d9ef&#34;&gt;join&lt;/span&gt; v$tablespace &lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt;(ts&lt;span style=&#34;color:#f92672&#34;&gt;#&lt;/span&gt;)
 ),
 hwmdf &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; (
  &lt;span style=&#34;color:#75715e&#34;&gt;-- join with datafiles, put 5M minimum for datafiles with no extents
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; file_name,nvl(hwm_blocks&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;(bytes&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;blocks),&lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1024&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1024&lt;/span&gt;) hwm_bytes,bytes,autoextensible,maxbytes
  &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; hwmts &lt;span style=&#34;color:#66d9ef&#34;&gt;right&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;join&lt;/span&gt; dba_data_files &lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt;(tablespace_name,relative_fno)
 )
&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt;
 &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;when&lt;/span&gt; autoextensible&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;YES&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;and&lt;/span&gt; maxbytes&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;=&lt;/span&gt;bytes
 &lt;span style=&#34;color:#66d9ef&#34;&gt;then&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;-- we generate resize statements only if autoextensible can grow back to current size
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;/* reclaim &amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt;to_char(ceil((bytes&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;hwm_bytes)&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1024&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1024&lt;/span&gt;),&lt;span style=&#34;color:#ae81ff&#34;&gt;999999&lt;/span&gt;)
   &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;M from &amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt;to_char(ceil(bytes&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1024&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1024&lt;/span&gt;),&lt;span style=&#34;color:#ae81ff&#34;&gt;999999&lt;/span&gt;)&lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;M */ &amp;#39;&lt;/span&gt;
   &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;alter database datafile &amp;#39;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt;file_name&lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;#39;&amp;#39; resize &amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt;ceil(hwm_bytes&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1024&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1024&lt;/span&gt;)&lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;M;&amp;#39;&lt;/span&gt;
 &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;-- generate only a comment when autoextensible is off
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;/* reclaim &amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt;to_char(ceil((bytes&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;hwm_bytes)&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1024&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1024&lt;/span&gt;),&lt;span style=&#34;color:#ae81ff&#34;&gt;999999&lt;/span&gt;)
   &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;M from &amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt;to_char(ceil(bytes&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1024&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1024&lt;/span&gt;),&lt;span style=&#34;color:#ae81ff&#34;&gt;999999&lt;/span&gt;)
   &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;M after setting autoextensible maxsize higher than current size for file &amp;#39;&lt;/span&gt;
   &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; file_name&lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39; */&amp;#39;&lt;/span&gt;
 &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;SQL&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; hwmdf
&lt;span style=&#34;color:#66d9ef&#34;&gt;where&lt;/span&gt;
 bytes&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;hwm_bytes&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1024&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1024&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;-- resize only if at least 1MB can be reclaimed
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;order&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; bytes&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;hwm_bytes &lt;span style=&#34;color:#66d9ef&#34;&gt;desc&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;搜索表&#34;&gt;搜索表&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;table_name&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;owner&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; all_tables &lt;span style=&#34;color:#66d9ef&#34;&gt;where&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;table_name&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;like&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;%USER%&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;owner&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;TOM&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;ORDER&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;BY&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;owner&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;table_name&lt;/span&gt;;

&lt;span style=&#34;color:#75715e&#34;&gt;--- 查找列
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;owner&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;table_name&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; all_tab_columns &lt;span style=&#34;color:#66d9ef&#34;&gt;where&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;column_name&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;ID&amp;#39;&lt;/span&gt;;

&lt;span style=&#34;color:#75715e&#34;&gt;-- 查看表属性
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;desc&lt;/span&gt; USERINFO;

&lt;span style=&#34;color:#75715e&#34;&gt;-- 表名的最大长度
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- version &amp;lt;= 12.1, 30 bytes
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- version &amp;gt;= 12.2, 128 bytes
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- 可使用describe all_tab_columns查看
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;复制表&#34;&gt;复制表&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- 同时复制数据
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;CREATE&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;TABLE&lt;/span&gt; New_Table_name &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; Existing_table_Name; 
&lt;span style=&#34;color:#75715e&#34;&gt;-- 只复制表结构，不包含索引
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;CREATE&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;TABLE&lt;/span&gt; New_Table_name &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; Existing_table_Name; 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;重命名表&#34;&gt;重命名表&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;ALTER&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;TABLE&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;table_name&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;RENAME&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;TO&lt;/span&gt; new_table_name;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;查看正在运行中的会话sql锁表&#34;&gt;查看正在运行中的会话，sql，锁表&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; sid,
      serial&lt;span style=&#34;color:#f92672&#34;&gt;#&lt;/span&gt;,
      osuser,
      machine,
      program,
      module
&lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; v$session;

&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; to_char(logon_time,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;DD/MM/YYYY HH24:MI:SS&amp;#39;&lt;/span&gt;) logontime
username,terminal,osuser,status,sid,serial&lt;span style=&#34;color:#f92672&#34;&gt;#&lt;/span&gt;,program,floor(last_call_et &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;60&lt;/span&gt;) &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Minutes since active&amp;#34;&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; v$session
&lt;span style=&#34;color:#66d9ef&#34;&gt;WHERE&lt;/span&gt; username &lt;span style=&#34;color:#66d9ef&#34;&gt;IS&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;NOT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;NULL&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;ORDER&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;BY&lt;/span&gt; logon_time &lt;span style=&#34;color:#66d9ef&#34;&gt;DESC&lt;/span&gt;;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 正在运行中sql
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; username,terminal,SID,a.module,ELAPSED_TIME,
SERIAL&lt;span style=&#34;color:#f92672&#34;&gt;#&lt;/span&gt;,SQL_TEXT
&lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; V$SESSION a, V$SQL b
&lt;span style=&#34;color:#66d9ef&#34;&gt;WHERE&lt;/span&gt; a.SQL_ADDRESS &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; b.ADDRESS
&lt;span style=&#34;color:#66d9ef&#34;&gt;AND&lt;/span&gt; a.STATUS &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;ACTIVE&amp;#39;&lt;/span&gt;;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 查看锁表信息
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;Select&lt;/span&gt; substr(nvl(s.USERNAME,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;sys&amp;#39;&lt;/span&gt;),&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;9&lt;/span&gt;) &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;用户名&amp;#34;&lt;/span&gt;,
nvl(s.TERMINAL,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;None&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;终端&amp;#34;&lt;/span&gt;,
decode(l.LMODE,
&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;No Lock&amp;#39;&lt;/span&gt;,
&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Row Share&amp;#39;&lt;/span&gt;,
&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Row Exclusive&amp;#39;&lt;/span&gt;,
&lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Share&amp;#39;&lt;/span&gt;,
&lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Share Row Exclusive&amp;#39;&lt;/span&gt;,
&lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Exclusive&amp;#39;&lt;/span&gt;,
&lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;) &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;持有锁&amp;#34;&lt;/span&gt;,
decode(l.REQUEST,
&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;No Lock&amp;#39;&lt;/span&gt;,
&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Row Share&amp;#39;&lt;/span&gt;,
&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Row Exclusive&amp;#39;&lt;/span&gt;,
&lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Share&amp;#39;&lt;/span&gt;,
&lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Share Row Exclusive&amp;#39;&lt;/span&gt;,
&lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Exclusive&amp;#39;&lt;/span&gt;,
&lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;) &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;申请锁&amp;#34;&lt;/span&gt;,
SUBSTR(T1.NAME,&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;13&lt;/span&gt;) &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;表名&amp;#34;&lt;/span&gt;,
substr(l.SID&lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;,&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt;s.SERIAL&lt;span style=&#34;color:#f92672&#34;&gt;#&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;) &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;SID.SERIAL&amp;#34;&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; V$LOCK L,
V$SESSION S,
SYS.&lt;span style=&#34;color:#66d9ef&#34;&gt;USER&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt; U1,
SYS.OBJ$ T1
&lt;span style=&#34;color:#66d9ef&#34;&gt;where&lt;/span&gt; l.sid&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;s.sid
&lt;span style=&#34;color:#66d9ef&#34;&gt;and&lt;/span&gt; t1.obj&lt;span style=&#34;color:#f92672&#34;&gt;#=&lt;/span&gt;decode(l.id2,&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;,l.id1,l.id2)
&lt;span style=&#34;color:#66d9ef&#34;&gt;and&lt;/span&gt; u1.&lt;span style=&#34;color:#66d9ef&#34;&gt;user&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;#=&lt;/span&gt;t1.&lt;span style=&#34;color:#66d9ef&#34;&gt;owner&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;#&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;and&lt;/span&gt; U1.NAME &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;SYS&amp;#39;&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;and&lt;/span&gt; s.&lt;span style=&#34;color:#66d9ef&#34;&gt;TYPE&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;BACKGROUND&amp;#39;&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;order&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;查看日期&#34;&gt;查看日期&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- 一年前的日期
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; add_months(sysdate, &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;12&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; DUAL;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 昨天的日期
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; sysdate &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; DUAL;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 当天开始时间
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; trunc(sysdate) &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; dual;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 当年第一天
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; trunc(sysdate,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;yy&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; dual;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 当月的第一天
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; trunc(sysdate,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;mm&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; dual;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 本小时的开始时间
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; trunc(sysdate ,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;HH24&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; dual;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 年份
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;extract&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;year&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; to_date(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;20220101&amp;#39;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;YYYYMMDD&amp;#39;&lt;/span&gt;)) &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; dual;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 字符串转日期
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; to_date(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;20220101&amp;#39;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;YYYYMMDD&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; dual;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 日期转字符串
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; to_char(sysdate,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;YYYYMMDD&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; dual;
&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; to_char(sysdate,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;YYYY-MM-DD HH24:MI:SS&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; dual;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 儒略日数(Julian Day)
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; to_char(sysdate,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;J&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; dual;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 这个季度最后一天23点
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; trunc(add_months(sysdate,&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;), &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Q&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;24&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;这个季度最后一天23点&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; dual;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 两分钟后时间
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; sysdate &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; INTERVAL &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;2&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;minute&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; dual;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;null相关&#34;&gt;null相关&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- 返回一个非 null 值
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; nvl(&lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;25&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; dual;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 等于特定值时返回null，可用于被除数为0判断
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nullif&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; dual;
&lt;span style=&#34;color:#66d9ef&#34;&gt;create&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;table&lt;/span&gt; bookinfo (
id number(&lt;span style=&#34;color:#ae81ff&#34;&gt;20&lt;/span&gt;),
name varchar2(&lt;span style=&#34;color:#ae81ff&#34;&gt;50&lt;/span&gt;)
);
&lt;span style=&#34;color:#66d9ef&#34;&gt;insert&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;into&lt;/span&gt; bookinfo &lt;span style=&#34;color:#66d9ef&#34;&gt;values&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;);
&lt;span style=&#34;color:#66d9ef&#34;&gt;insert&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;into&lt;/span&gt; bookinfo &lt;span style=&#34;color:#66d9ef&#34;&gt;values&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;,&lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;);
&lt;span style=&#34;color:#66d9ef&#34;&gt;insert&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;into&lt;/span&gt; bookinfo &lt;span style=&#34;color:#66d9ef&#34;&gt;values&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;,&lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;);
&lt;span style=&#34;color:#66d9ef&#34;&gt;insert&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;into&lt;/span&gt; bookinfo &lt;span style=&#34;color:#66d9ef&#34;&gt;values&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;1 row(s) inserted.&amp;#39;&lt;/span&gt;);
&lt;span style=&#34;color:#75715e&#34;&gt;-- 在oracle中，空字符串会被当做null来处理
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- null比较时，要用is null，is not null
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; bookinfo &lt;span style=&#34;color:#66d9ef&#34;&gt;where&lt;/span&gt; name &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;1 row(s) inserted.&amp;#39;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;--搜索不到为null的数据
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; bookinfo &lt;span style=&#34;color:#66d9ef&#34;&gt;where&lt;/span&gt; name &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;1 row(s) inserted.&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;or&lt;/span&gt; name &lt;span style=&#34;color:#66d9ef&#34;&gt;is&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;--可搜索为null的数据
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- 排序时null的位置
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- 可通过NULLS FIRST，NULLS LAST控制
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; t1 &lt;span style=&#34;color:#66d9ef&#34;&gt;ORDER&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;BY&lt;/span&gt; c1 &lt;span style=&#34;color:#66d9ef&#34;&gt;DESC&lt;/span&gt; NULLS &lt;span style=&#34;color:#66d9ef&#34;&gt;LAST&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 不指定时，升序为NULLS LAST，降序NULLS FIRST（可简易将null视为最大值）
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;修改列属性&#34;&gt;修改列属性&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;alter&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;table&lt;/span&gt; USERINFO &lt;span style=&#34;color:#66d9ef&#34;&gt;modify&lt;/span&gt; address varchar2(&lt;span style=&#34;color:#ae81ff&#34;&gt;350&lt;/span&gt;);
&lt;span style=&#34;color:#75715e&#34;&gt;-- 缩小列长度，改变类型
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;alter&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;table&lt;/span&gt; USERINFO &lt;span style=&#34;color:#66d9ef&#34;&gt;modify&lt;/span&gt; address_temp varchar2(&lt;span style=&#34;color:#ae81ff&#34;&gt;250&lt;/span&gt;);
&lt;span style=&#34;color:#66d9ef&#34;&gt;update&lt;/span&gt; USERINFO &lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt; address &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; address_temp;
&lt;span style=&#34;color:#66d9ef&#34;&gt;alter&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;table&lt;/span&gt; USERINFO &lt;span style=&#34;color:#66d9ef&#34;&gt;drop&lt;/span&gt; address;
&lt;span style=&#34;color:#66d9ef&#34;&gt;rename&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;column&lt;/span&gt; USERINFO.address_temp &lt;span style=&#34;color:#66d9ef&#34;&gt;to&lt;/span&gt; USERINFO.address;
&lt;span style=&#34;color:#66d9ef&#34;&gt;COMMENT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;ON&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;COLUMN&lt;/span&gt; USERINFO.address &lt;span style=&#34;color:#66d9ef&#34;&gt;IS&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;地址&amp;#39;&lt;/span&gt;;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 查看一个复杂查询语句的结果列属性和长度
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- 使用查询语句创建view，然后使用desc即可
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;查看目录&#34;&gt;查看目录&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;CREATE&lt;/span&gt; DIRECTORY MY_DIR &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;/path/mydata/&amp;#39;&lt;/span&gt;;
&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; directory_name, directory_path &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; dba_directories &lt;span style=&#34;color:#66d9ef&#34;&gt;WHERE&lt;/span&gt; directory_name&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;MY_DIR&amp;#39;&lt;/span&gt;;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;批量插入行&#34;&gt;批量插入行&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- 使用循环
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;BEGIN&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;FOR&lt;/span&gt; v_LoopCounter &lt;span style=&#34;color:#66d9ef&#34;&gt;IN&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;..&lt;span style=&#34;color:#ae81ff&#34;&gt;120&lt;/span&gt; LOOP
        &lt;span style=&#34;color:#66d9ef&#34;&gt;INSERT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;INTO&lt;/span&gt; BOOKINFO (ID,NAME) 
            &lt;span style=&#34;color:#66d9ef&#34;&gt;VALUES&lt;/span&gt; (trunc(dbms_random.value(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;e19))&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;test&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt;v_LoopCounter);
&lt;span style=&#34;color:#66d9ef&#34;&gt;END&lt;/span&gt; LOOP;
&lt;span style=&#34;color:#66d9ef&#34;&gt;COMMIT&lt;/span&gt;;
&lt;span style=&#34;color:#66d9ef&#34;&gt;END&lt;/span&gt;;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 使用row generator（dual connect by）
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;INSERT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;INTO&lt;/span&gt; BOOKINFO (ID,NAME)
&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; trunc(dbms_random.value(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;e20))&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, name 
&lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; BOOKINFO main
&lt;span style=&#34;color:#66d9ef&#34;&gt;inner&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;join&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; dual &lt;span style=&#34;color:#66d9ef&#34;&gt;connect&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;level&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;) sub &lt;span style=&#34;color:#66d9ef&#34;&gt;on&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;获取随机数&#34;&gt;获取随机数&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- 小数( 0 ~ 1)
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; dbms_random.value &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; dual ;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 指定范围内的小数 ( 0 ~ 100 )
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; dbms_random.value(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; dual ;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 获取长度为20的随机整型数
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; trunc(dbms_random.value(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;e20&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;)) &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; dual ;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 随机字符串 &amp;#39;u&amp;#39;:大写字母，&amp;#39;l&amp;#39;:小写字母， &amp;#39;a&amp;#39;:大、小写字母，&amp;#39;x&amp;#39;:数字、大写字母，&amp;#39;p&amp;#39;:可打印字符
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; dbms_random.string(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;p&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;30&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; dual ;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 随机日期
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; to_date(to_char(add_months(sysdate, &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;12&lt;/span&gt;),&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;J&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; TRUNC(DBMS_RANDOM.VALUE(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;365&lt;/span&gt;)),&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;J&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; dual ;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 生成GUID(32位)
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; sys_guid() &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; dual ;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;其他&#34;&gt;其他&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- 取得行号
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; rownum &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; dual;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 转大写
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;upper&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;abc&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; dual;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;统计&#34;&gt;统计&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- 建表
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- drop table userinfo;
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;create&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;table&lt;/span&gt; userinfo (
id number(&lt;span style=&#34;color:#ae81ff&#34;&gt;20&lt;/span&gt;),
name varchar2(&lt;span style=&#34;color:#ae81ff&#34;&gt;50&lt;/span&gt;),
dept number(&lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;),
salary number(&lt;span style=&#34;color:#ae81ff&#34;&gt;8&lt;/span&gt;),
createtime date
);
&lt;span style=&#34;color:#75715e&#34;&gt;-- 插入批量数据
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- 构造50条数据
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;insert&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;into&lt;/span&gt; userinfo 
&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; trunc(dbms_random.value(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;e20))&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, dbms_random.string(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;u&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;), 
       trunc(dbms_random.value(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;)),trunc(dbms_random.value(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;e7)),
       to_date(to_char(add_months(sysdate, &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;12&lt;/span&gt;),&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;J&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; TRUNC(DBMS_RANDOM.VALUE(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;365&lt;/span&gt;)),&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;J&amp;#39;&lt;/span&gt;)
&lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; dual &lt;span style=&#34;color:#66d9ef&#34;&gt;connect&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;level&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;50&lt;/span&gt; ;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 根据user表数据为每条记录生成3条userorg表记录插入
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;INSERT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;INTO&lt;/span&gt; userorg (id, user_id, org_id,createdate) 
&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; trunc((sysdate &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; date &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;1970-01-01&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;864000000&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; rownum, user_id, du.abc,
      CREATEDATE &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;  numtodsinterval (rownum ,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;second&amp;#39;&lt;/span&gt;)
&lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;user&lt;/span&gt; 
&lt;span style=&#34;color:#66d9ef&#34;&gt;inner&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;join&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;level&lt;/span&gt; abc &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; dual &lt;span style=&#34;color:#66d9ef&#34;&gt;connect&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;level&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;) du &lt;span style=&#34;color:#66d9ef&#34;&gt;on&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 查询员工id和员工总数
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; id,&lt;span style=&#34;color:#66d9ef&#34;&gt;count&lt;/span&gt;(&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;) over() cnt &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; userinfo &lt;span style=&#34;color:#66d9ef&#34;&gt;order&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; salary &lt;span style=&#34;color:#66d9ef&#34;&gt;desc&lt;/span&gt;;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 按工资排序，同时记录工资排名
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; id,name,dept,salary,createtime,rownum,rowid,row_number() over(&lt;span style=&#34;color:#66d9ef&#34;&gt;order&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; salary &lt;span style=&#34;color:#66d9ef&#34;&gt;desc&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; userinfo &lt;span style=&#34;color:#66d9ef&#34;&gt;order&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; salary &lt;span style=&#34;color:#66d9ef&#34;&gt;desc&lt;/span&gt;;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 查询每个部门工资最高的员工信息
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- rank()/dense_rank() 区别在于排序时遇到相同值时，rank会跳号
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; id,name,dept,salary,createtime,rank() over(partition &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; dept &lt;span style=&#34;color:#66d9ef&#34;&gt;order&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; salary &lt;span style=&#34;color:#66d9ef&#34;&gt;desc&lt;/span&gt;) rank &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; userinfo) sub &lt;span style=&#34;color:#66d9ef&#34;&gt;where&lt;/span&gt; rank &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;order&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; dept;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 查询员工信息的同时，查询所在部门最低、最高工资
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; id,name,dept,salary,createtime,&lt;span style=&#34;color:#66d9ef&#34;&gt;max&lt;/span&gt;(salary) over(partition &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; dept) dept_max_salary,&lt;span style=&#34;color:#66d9ef&#34;&gt;min&lt;/span&gt;(salary) over(partition &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; dept) dept_min_salary &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; userinfo;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 查询员工信息，查询工资比自己高一位，低一位的工资
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; id,name,dept,salary,lead(salary, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;) over(partition &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; dept &lt;span style=&#34;color:#66d9ef&#34;&gt;order&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; salary) higher,lag(salary, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;) over(partition &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; dept &lt;span style=&#34;color:#66d9ef&#34;&gt;order&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; salary) &lt;span style=&#34;color:#66d9ef&#34;&gt;lower&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; userinfo &lt;span style=&#34;color:#66d9ef&#34;&gt;order&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; dept;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 升序排序时，默认是NULLS LAST，降序排序时，默认是NULLS FIRST，如果想null排前面使用nulls first
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; id,name,dept,salary,lead(salary, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;) over(partition &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; dept &lt;span style=&#34;color:#66d9ef&#34;&gt;order&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; salary) higher,lag(salary, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;) over(partition &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; dept &lt;span style=&#34;color:#66d9ef&#34;&gt;order&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; salary) &lt;span style=&#34;color:#66d9ef&#34;&gt;lower&lt;/span&gt; 
&lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; userinfo &lt;span style=&#34;color:#66d9ef&#34;&gt;order&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; higher nulls &lt;span style=&#34;color:#66d9ef&#34;&gt;first&lt;/span&gt;;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 查询员工信息，查询部门总工资，最高工资，人数
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; id,name,dept,salary,&lt;span style=&#34;color:#66d9ef&#34;&gt;sum&lt;/span&gt;(salary) over(partition &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; dept) dept_salary,&lt;span style=&#34;color:#66d9ef&#34;&gt;max&lt;/span&gt;(salary) over(partition &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; dept) dept_max_salary,&lt;span style=&#34;color:#66d9ef&#34;&gt;count&lt;/span&gt;(salary) over(partition &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; dept) dept_staff_num &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; userinfo &lt;span style=&#34;color:#66d9ef&#34;&gt;order&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; dept;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 查询员工信息，查询工资在公司内属于前五分之几，部门内属于前三分之几
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; id,name,dept,salary,ntile(&lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;) over(&lt;span style=&#34;color:#66d9ef&#34;&gt;order&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; salary &lt;span style=&#34;color:#66d9ef&#34;&gt;desc&lt;/span&gt;) comp_rank,ntile(&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;) over(partition &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; dept &lt;span style=&#34;color:#66d9ef&#34;&gt;order&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; salary &lt;span style=&#34;color:#66d9ef&#34;&gt;desc&lt;/span&gt;) dept_rank 
&lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; userinfo &lt;span style=&#34;color:#66d9ef&#34;&gt;order&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; dept,comp_rank;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 查询部门内最晚入职，工资最高的员工
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; dept,&lt;span style=&#34;color:#66d9ef&#34;&gt;max&lt;/span&gt;(name) keep(dense_rank &lt;span style=&#34;color:#66d9ef&#34;&gt;last&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;order&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; createtime),&lt;span style=&#34;color:#66d9ef&#34;&gt;max&lt;/span&gt;(salary) keep(dense_rank &lt;span style=&#34;color:#66d9ef&#34;&gt;last&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;order&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; createtime),&lt;span style=&#34;color:#66d9ef&#34;&gt;max&lt;/span&gt;(createtime) keep(dense_rank &lt;span style=&#34;color:#66d9ef&#34;&gt;last&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;order&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; createtime)
&lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; userinfo &lt;span style=&#34;color:#66d9ef&#34;&gt;group&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; dept;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;使用临时表查询&#34;&gt;使用临时表查询&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- 适用于优化sql，复杂sql中有些共通子查询多次重复出现时，可提取出临时表减少查询次数
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;with&lt;/span&gt; dept1_userinfo &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; userinfo &lt;span style=&#34;color:#66d9ef&#34;&gt;where&lt;/span&gt; dept &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;fetch&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;first&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;rows&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;only&lt;/span&gt;)
&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; dept1_userinfo &lt;span style=&#34;color:#66d9ef&#34;&gt;inner&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;join&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; dual &lt;span style=&#34;color:#66d9ef&#34;&gt;connect&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;level&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;) sub &lt;span style=&#34;color:#66d9ef&#34;&gt;on&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;字符串操作&#34;&gt;字符串操作&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- 字符串连接
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;A&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;B&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; dual;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 换行符 CHR(13) \r, CHR(10) \n
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;A&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; chr(&lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;B&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; dual;
&lt;span style=&#34;color:#75715e&#34;&gt;-- A
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- B
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- 字符串截取
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; substr(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;ABCDEFG&amp;#39;&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; dual;
&lt;span style=&#34;color:#75715e&#34;&gt;-- BCDEF
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; substr(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;ABCDEFG&amp;#39;&lt;/span&gt;,&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; dual;
&lt;span style=&#34;color:#75715e&#34;&gt;-- CD
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- 查看字符串长度
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;length&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;ABCDEFG号码&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; dual;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 9
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- 查看字符串字节长度
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; lengthb(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;ABCDEFG号码&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; dual;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 11
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- 查找字符串
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; instr( &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;oracle pl/sql cheatsheet&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;l&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; dual;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 13 - 从六位开始查找，第二次出现的位置，找不到则返回0
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- 替换字符串
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;replace&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;i am here&amp;#39;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;am&amp;#39;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;am not&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; dual;
&lt;span style=&#34;color:#75715e&#34;&gt;-- i am not here --第三个参数可省略，与设为空字符串等效
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- trim字符串
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;trim&lt;/span&gt; (&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;   removing spaces at both sides     &amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; dual;
&lt;span style=&#34;color:#75715e&#34;&gt;-- removing spaces at both sides
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;|&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;trim&lt;/span&gt; (&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;　   removing spaces at both sides     　&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;|&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; dual;
&lt;span style=&#34;color:#75715e&#34;&gt;-- |　   removing spaces at both sides     　| -- 无法trim全角空格
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;|&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;trim&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;LEADING&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;   removing spaces at both sides     &amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;|&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; dual;
&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;|&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; ltrim (&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;   removing spaces at both sides     &amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;|&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; dual;
&lt;span style=&#34;color:#75715e&#34;&gt;-- |removing spaces at both sides     |
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;|&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;trim&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;TRAILING&lt;/span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;   removing spaces at both sides     &amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;|&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; dual;
&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;|&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; rtrim (&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;   removing spaces at both sides     &amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;|&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; dual;
&lt;span style=&#34;color:#75715e&#34;&gt;-- |   removing spaces at both sides|
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;|&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;trim&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;both&lt;/span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;-&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;---   removing spaces at both sides     ---&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;|&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; dual;
&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;|&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;trim&lt;/span&gt; (&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;-&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;   removing spaces at both sides     &amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;|&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; dual;
&lt;span style=&#34;color:#75715e&#34;&gt;-- |   removing spaces at both sides     |
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- 大小写转换
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;upper&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;removing spaces at both sides&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; dual;
&lt;span style=&#34;color:#75715e&#34;&gt;-- REMOVING SPACES AT BOTH SIDES
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;lower&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;upper&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;removing spaces at both sides&amp;#39;&lt;/span&gt;)) &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; dual;
&lt;span style=&#34;color:#75715e&#34;&gt;-- removing spaces at both sides
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- 忽略大小写搜索字符串
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; my_table &lt;span style=&#34;color:#66d9ef&#34;&gt;where&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;upper&lt;/span&gt;(column_1) &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;upper&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;my_string&amp;#39;&lt;/span&gt;);
&lt;span style=&#34;color:#75715e&#34;&gt;-- 想优化搜索速度的话，可以加索引
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;CREATE&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;INDEX&lt;/span&gt; my_table_idx &lt;span style=&#34;color:#66d9ef&#34;&gt;ON&lt;/span&gt; my_table (&lt;span style=&#34;color:#66d9ef&#34;&gt;UPPER&lt;/span&gt;(column_1));
&lt;span style=&#34;color:#75715e&#34;&gt;-- 注意点是搜索时要确保字段数据中没有null值，索引才能生效
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; my_table &lt;span style=&#34;color:#66d9ef&#34;&gt;where&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;upper&lt;/span&gt;(column_1) &lt;span style=&#34;color:#66d9ef&#34;&gt;is&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;not&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;upper&lt;/span&gt;(column_1) &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;upper&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;my_string&amp;#39;&lt;/span&gt;);
&lt;span style=&#34;color:#75715e&#34;&gt;-- 正则表达式搜索
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- Search for strings that have the word &amp;#34;焼肉&amp;#34; anywhere except at the beginning or the end
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; sample_table &lt;span style=&#34;color:#66d9ef&#34;&gt;WHERE&lt;/span&gt; REGEXP_LIKE(text, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;.焼肉.&amp;#39;&lt;/span&gt;);
&lt;span style=&#34;color:#75715e&#34;&gt;-- 今日は焼肉を食べたい
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- 忽略大小写
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- Search for strings that have the word &amp;#34;yakiniku&amp;#34; in any case
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; sample_table
&lt;span style=&#34;color:#66d9ef&#34;&gt;WHERE&lt;/span&gt; REGEXP_LIKE(text, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;yakiniku&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;i&amp;#39;&lt;/span&gt;);
&lt;span style=&#34;color:#75715e&#34;&gt;-- I love YAKINIKU
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;位运算&#34;&gt;位运算&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- 位与运算
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; bitand(&lt;span style=&#34;color:#ae81ff&#34;&gt;7&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; dual;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 位或运算 BITOR(x,y)  =  x + y - BITAND(x,y)
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; bitand(&lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; dual;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 位与或运算 BITOR(x,y)  =  x + y - 2 * BITAND(x,y)
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; bitand(&lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; dual;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;count函数&#34;&gt;count函数&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- count(1)和count(*)是相同的
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- COUNT (&amp;lt;expression&amp;gt;) 统计非空值个数
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;有则更新无则插入&#34;&gt;有则更新，无则插入&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;BEGIN&lt;/span&gt;
   &lt;span style=&#34;color:#66d9ef&#34;&gt;UPDATE&lt;/span&gt; userinfo &lt;span style=&#34;color:#66d9ef&#34;&gt;SET&lt;/span&gt; salary &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;250&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;WHERE&lt;/span&gt; name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;tom&amp;#39;&lt;/span&gt;;

   &lt;span style=&#34;color:#66d9ef&#34;&gt;IF&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;SQL&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;%&lt;/span&gt;ROWCOUNT &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
   &lt;span style=&#34;color:#66d9ef&#34;&gt;THEN&lt;/span&gt;
      &lt;span style=&#34;color:#66d9ef&#34;&gt;insert&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;into&lt;/span&gt; userinfo(name,salary) &lt;span style=&#34;color:#66d9ef&#34;&gt;values&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;tom&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;);
   &lt;span style=&#34;color:#66d9ef&#34;&gt;END&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;IF&lt;/span&gt;;

&lt;span style=&#34;color:#66d9ef&#34;&gt;END&lt;/span&gt;;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;在更新的时候使用join&#34;&gt;在更新的时候使用join&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;update&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; b.bonus 
        &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; employee_bonus b 
        &lt;span style=&#34;color:#66d9ef&#34;&gt;inner&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;join&lt;/span&gt; employees e &lt;span style=&#34;color:#66d9ef&#34;&gt;on&lt;/span&gt; b.employee_id &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; e.employee_id 
        &lt;span style=&#34;color:#66d9ef&#34;&gt;where&lt;/span&gt; e.bonus_eligible &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;N&amp;#39;&lt;/span&gt;) t
&lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt; t.bonus &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 更新第一条(fetch first会报错)
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;update&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; b.bonus 
        &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; employee_bonus b 
        &lt;span style=&#34;color:#66d9ef&#34;&gt;inner&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;join&lt;/span&gt; employees e &lt;span style=&#34;color:#66d9ef&#34;&gt;on&lt;/span&gt; b.employee_id &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; e.employee_id 
        &lt;span style=&#34;color:#66d9ef&#34;&gt;where&lt;/span&gt; e.bonus_eligible &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;N&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;and&lt;/span&gt; rownum &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;) t
&lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt; t.bonus &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;比较两个表的数据&#34;&gt;比较两个表的数据&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; T1 minus &lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; T2) &lt;span style=&#34;color:#75715e&#34;&gt;-- all rows that are in T1 but not in T2
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;union&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;all&lt;/span&gt;
(&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; T2 minus &lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; T1)  &lt;span style=&#34;color:#75715e&#34;&gt;-- all rows that are in T2 but not in T1
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;使用connect-by抽出层级数据&#34;&gt;使用connect by抽出层级数据&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; lpad(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;-&amp;#39;&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;level&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;),&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;-&amp;#39;&lt;/span&gt;)&lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt;ename ename,rownum,&lt;span style=&#34;color:#66d9ef&#34;&gt;level&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; emp
&lt;span style=&#34;color:#66d9ef&#34;&gt;start&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;with&lt;/span&gt; mgr &lt;span style=&#34;color:#66d9ef&#34;&gt;is&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;connect&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; mgr &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;prior&lt;/span&gt; empno;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;fetch-first-和-rownum比较&#34;&gt;fetch first 和 rownum比较&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;oracle中对rownum有优化，所以优先使用rownum&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;查看执行计划&#34;&gt;查看执行计划&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt; serveroutput &lt;span style=&#34;color:#66d9ef&#34;&gt;off&lt;/span&gt;;
&lt;span style=&#34;color:#66d9ef&#34;&gt;alter&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;session&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt; statistics_level &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;all&lt;/span&gt;;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 执行SQL
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; tableA &lt;span style=&#34;color:#66d9ef&#34;&gt;where&lt;/span&gt; id &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;12&lt;/span&gt;;
&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;table&lt;/span&gt;(dbms_xplan.display_cursor(&lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;,&lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;allstats last cost&amp;#39;&lt;/span&gt;));
&lt;span style=&#34;color:#75715e&#34;&gt;-- 出来表格里E-Rows代表预测值，A-Rows代表实际值
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;数字类型长度&#34;&gt;数字类型长度&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- NUMERIC(6, 2) 表示范围 -9999.99-9999.99
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;sql-developer使用&#34;&gt;sql developer使用&lt;/h3&gt;
&lt;h4 id=&#34;快捷键&#34;&gt;快捷键&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;ctrl+shift+D 复制行&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;数据库格式不是unicode时的生僻字无法显示问题&#34;&gt;数据库格式不是UNICODE时的生僻字无法显示问题&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;把列类型转换为NVARCHAR即可，注意NVARCHAR2的长度是字符&lt;/p&gt;
&lt;p&gt;如果原来是GBK编码VARCHAR2(100)最大存50个汉字，转换后NVARCHAR2(50)即可&lt;/p&gt;
&lt;p&gt;转换完成后需要排查使用sql中用到这个字段case when或者union的情况，这里很可能会报错，union &amp;lsquo;&amp;lsquo;要改成union null或者union N&amp;rsquo;&amp;rsquo;&lt;/p&gt;
&lt;p&gt;用到mybatis的地方也要修改，有可能插入生僻字时，参数类型要改为NVARCHAR(#{value,jdbcType=NVARCHAR})&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://chartio.com/resources/tutorials/how-to-create-a-user-and-grant-permissions-in-oracle/&#34;&gt;How to Create a User and Grant Permissions in Oracle&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/15066408/how-to-find-the-privileges-and-roles-granted-to-a-user-in-oracle&#34;&gt;security - How to find the privileges and roles granted to a user in Oracle? - Stack Overflow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.cnblogs.com/linjiao/p/6394087.html&#34;&gt;ORACLE TRUNC()函数&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.cnblogs.com/jijm123/p/15763010.html&#34;&gt;Oracle：trunc()函数简介&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.cnblogs.com/xianz666/p/13073664.html&#34;&gt;Oracle中除数为0的两种解决办法（decode与nullif）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.oracle.com/javadb/10.6.2.1/ref/rrefsqljrenamecolumnstatement.html&#34;&gt;RENAME COLUMN statement&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_9008.htm&#34;&gt;DROP USER&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.cnblogs.com/fclbky/p/8191326.html&#34;&gt;oracle查看编码以及修改编码&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://dba.stackexchange.com/q/105431&#34;&gt;How do I limit Oracle&amp;rsquo;s memory use?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://smarttechways.com/2013/07/17/what-current-active-session-in-oracle/&#34;&gt;Check session status active, inactive, sql query in Oracle&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.cnblogs.com/Alanf/p/7490983.html&#34;&gt;ORACLE 如何产生一个随机数&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://oracle-base.com/articles/misc/dbms_random&#34;&gt;DBMS_RANDOM : Generating Random Data (Numbers, Strings and Dates) in Oracle&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/53538965/how-to-use-for-loop-for-insert-in-oracle&#34;&gt;How to use for loop for insert in Oracle?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.cnblogs.com/liaoyu/p/oracle-procedure-batch-insert.html&#34;&gt;使用Oracle的存储过程批量插入数据&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements004.htm#i34510&#34;&gt;Format Models&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/34282583/what-is-rowid-rownum-rowid-vs-rownum&#34;&gt;What is rowID &amp;amp; rowNum (ROWID vs ROWNUM)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.cnblogs.com/chinas/p/7058771.html&#34;&gt;Oracle分析函数Over()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://omachizura.com/2016/08/sql-oracle-null.html&#34;&gt;SQL oracleでnullを比較する際の注意点&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://community.oracle.com/tech/developers/discussion/3581149/analytic-functions-first-vs-first-value&#34;&gt;Analytic functions: FIRST vs FIRST_VALUE&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.cnblogs.com/YuyuanNo1/p/9241754.html&#34;&gt;ORACLE WITH AS 用法,创建临时表&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.sqlines.com/oracle-to-mysql/null_order_by&#34;&gt;NULL Values in ORDER BY - Oracle to MySQL Migration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://community.oracle.com/tech/developers/discussion/491165/how-to-insert-if-not-exist-update-when-exist-then-returning-the-value&#34;&gt;How to : Insert If Not Exist, Update When Exist, Then Returning the Value ?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/2446764/update-statement-with-inner-join-on-oracle&#34;&gt;Update statement with inner join on Oracle&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/74189667/sql-developer-shortcut-of-duplicate-line&#34;&gt;SQL developer shortcut of duplicate line&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/74189667/sql-developer-shortcut-of-duplicate-line&#34;&gt;ORDER BY clause&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/756558/what-is-the-maximum-length-of-a-table-name-in-oracle&#34;&gt;What is the maximum length of a table name in Oracle?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/24883153/pass-time-interval-via-variable-in-oracle-sql&#34;&gt;Pass time interval via variable in Oracle SQL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://tanelpoder.com/2008/06/08/generating-lots-of-rows-using-connect-by-safely/&#34;&gt;Generating lots of rows using connect by – safely!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/688537/oracle-diff-how-to-compare-two-tables&#34;&gt;oracle diff: how to compare two tables?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://forums.oracle.com/ords/apexds/post/diffrence-between-rownum-an-d-level-8440&#34;&gt;diffrence between ROWNUM an d LEVEL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.cnblogs.com/jepson6669/p/9437081.html&#34;&gt;Oracle中的层次查询详解 - Jepson6669 - 博客园&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.cnblogs.com/king-xg/p/6794562.html&#34;&gt;oracle进阶之connect by笔记 - 追逐繁星 - 博客园&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/1953239/search-an-oracle-database-for-tables-with-specific-column-names&#34;&gt;Search an Oracle database for tables with specific column names?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/162255/how-to-check-the-maximum-number-of-allowed-connections-to-an-oracle-database&#34;&gt;How to check the maximum number of allowed connections to an Oracle database?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://dba-oracle.com/t_maximum_sessions_allowed.htm&#34;&gt;Oracle maximum sessions allowed&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://dba.stackexchange.com/questions/192625/oracle-shrinking-reclaiming-free-tablespace-space&#34;&gt;Oracle shrinking / reclaiming free tablespace space&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.dbi-services.com/blog/resize-your-oracle-datafiles-down-to-the-minimum-without-ora-03297/&#34;&gt;Resize your Oracle datafiles down to the minimum without ORA-03297&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.support.dbagenesis.com/post/reclaim-unused-space-in-oracle&#34;&gt;Reclaim Unused Space in Oracle&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://en.wikibooks.org/wiki/Oracle_Database/SQL_Cheatsheet&#34;&gt;Oracle Database/SQL Cheatsheet - Wikibooks, open books for an open world&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gist.github.com/deletefromuser/68bfabfa43e266a52b65d1eafaced87f&#34;&gt;test oracle REGEXP_LIKE&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://jonathanlewis.wordpress.com/2020/07/15/fetch-first-vs-rownum/&#34;&gt;Fetch First vs. Rownum | Oracle Scratchpad&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cosol.jp/techdb/2020/04/how_to_read_oracle_sql_execution_plan/&#34;&gt;Oracle SQL実行計画の読み方 | コーソルDatabaseエンジニアのBlog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://qiita.com/mkyz08/items/9dfa4a5ea636238afc3e&#34;&gt;Oracleのヒント句を使いこなす - Qiita&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://zenn.dev/captain_blue/articles/three-types-of-join-algorithms&#34;&gt;[SQL]JOINの3種類のアルゴリズムについて&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.cybertec-postgresql.com/en/postgresql-limit-vs-fetch-first-rows-with-ties/&#34;&gt;PostgreSQL: LIMIT vs FETCH FIRST ROWS &amp;hellip; WITH TIES - CYBERTEC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://zukucode.com/2017/08/sql-over-partition-by.html&#34;&gt;SQL PARTITION BYの基本と効率的に集計する便利な方法&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://zenn.dev/captain_blue/articles/three-types-of-join-algorithms&#34;&gt;[SQL]JOINの3種類のアルゴリズムについて&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.cnblogs.com/zwl715/p/3788070.html&#34;&gt;NESTED LOOPS &amp;amp; HASH JOIN &amp;amp; SORT MERGE JOIN - 凡轩之 - 博客园&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://arkgame.com/2020/09/15/post-117916/&#34;&gt;「Oracle」改行コード(CHR(13)、CHR(10))を取得、更新、置換する方法 - 最新IT技術情報_arkgame.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.oracletutorial.com/oracle-basics/oracle-number-data-type/&#34;&gt;Oracle NUMBER Data Type By Practical Examples&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.cnblogs.com/rainbow--/p/17191491.html&#34;&gt;oracle 生僻字乱码问题 - 小秦的开发梦 - 博客园 ↗&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.cnblogs.com/xuyufeng/p/11251657.html&#34;&gt;SQL Server中生僻字问题存储与查询问题 - 风枫疯 - 博客园 ↗&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://bt.hatenadiary.jp/entry/20060510/1147263152&#34;&gt;NVARCHARの桁数の罠 - bt ↗&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://pg-life.net/db/data-type/&#34;&gt;【SQL Server】データ型の種類｜PG-LIFE ↗&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/75878235/mybatis-text-literal-n-without-tomcat-parameters/75878457#75878457&#34;&gt;sql - mybatis text literal n without Tomcat parameters - Stack Overflow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/2560269/exporting-many-tables-on-oracle&#34;&gt;Exporting many tables on Oracle&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.go-faster.co.uk/2022/10/there-is-no-bitor-in-oracle-sql.html?m=1&#34;&gt;There is no BITOR() in Oracle SQL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/72234118/how-to-use-oracle-bitwise-operators&#34;&gt;How to use Oracle bitwise operators &amp;amp;, |, ^, ~?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.shift-the-oracle.com/sql/functions/binand_xor_or.html&#34;&gt;２つの数値をビットデータとして扱いビット演算を行なう&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>sqlserver常用命令</title>
      <link>https://deletefromuser.github.io/pgm/2023020901/</link>
      <pubDate>Sun, 06 Nov 2022 19:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2023020901/</guid>
      <description>&lt;h3 id=&#34;查找lock&#34;&gt;查找lock&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; master.dbo.sysprocesses 
&lt;span style=&#34;color:#66d9ef&#34;&gt;where&lt;/span&gt; DB_NAME(dbid)&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;’&lt;/span&gt;test&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;’&lt;/span&gt; 
&lt;span style=&#34;color:#66d9ef&#34;&gt;and&lt;/span&gt; spid&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&amp;gt;@@&lt;/span&gt;SPID;

&lt;span style=&#34;color:#66d9ef&#34;&gt;exec&lt;/span&gt; sp_lock
&lt;span style=&#34;color:#66d9ef&#34;&gt;exec&lt;/span&gt; sp_who2 SPID;

&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; request_session_id, resource_type, resource_description, request_mode, request_status, request_owner_type
&lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; sys.dm_tran_locks;

kill SPID;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;查看表结构&#34;&gt;查看表结构&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;COLUMN_NAME&lt;/span&gt;, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH
&lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; INFORMATION_SCHEMA.COLUMNS 
&lt;span style=&#34;color:#66d9ef&#34;&gt;WHERE&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;TABLE_NAME&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;yourTableName&amp;#39;&lt;/span&gt;;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;日期&#34;&gt;日期&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- 当前时间
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; getdate();
&lt;span style=&#34;color:#75715e&#34;&gt;-- 当前日期
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;CAST&lt;/span&gt;( GETDATE() &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; Date ) ;
&lt;span style=&#34;color:#75715e&#34;&gt;-- 日期增减计算
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;DATEADD(&lt;span style=&#34;color:#66d9ef&#34;&gt;DAY&lt;/span&gt;, &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;30&lt;/span&gt;, GETDATE());
&lt;span style=&#34;color:#75715e&#34;&gt;-- 字符串转日期
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;Convert&lt;/span&gt;(DATETIME, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;19990101&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;112&lt;/span&gt;)&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;；&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;-- datetime2和datetime的区别
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- datetime2支持的日期范围更广，00010101-99991231
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- datetime的年支持范围为1753-9999
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- 如果遇到datetime2往datetime里插入的要特别注意
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- 有小于1753年的数据则会报错  The conversion of a datetime2 data type to a datetime data type resulted in an out-of-range
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;字符串&#34;&gt;字符串&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- 查看字符串长度
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; LEN(FirstName) &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;Length&lt;/span&gt;, FirstName, LastName   
&lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; Sales.vIndividualCustomer  
&lt;span style=&#34;color:#66d9ef&#34;&gt;WHERE&lt;/span&gt; CountryRegionName &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Australia&amp;#39;&lt;/span&gt;; 
&lt;span style=&#34;color:#75715e&#34;&gt;-- 查看字节长度
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;length&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; DATALENGTH(EnglishProductName), EnglishProductName  
&lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; dbo.DimProduct  
&lt;span style=&#34;color:#66d9ef&#34;&gt;ORDER&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;BY&lt;/span&gt; EnglishProductName;  
&lt;span style=&#34;color:#75715e&#34;&gt;-- 字符串转换为数字类型
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;cast&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;123&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; int);
&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;convert&lt;/span&gt;(int, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;123&amp;#39;&lt;/span&gt;);
&lt;span style=&#34;color:#75715e&#34;&gt;-- 翻转字符串
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; reverse(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;description&amp;#39;&lt;/span&gt;)
&lt;span style=&#34;color:#75715e&#34;&gt;-- 查找特定字符串位置, 从1开始计数
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; charindex(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;cri&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;description&amp;#39;&lt;/span&gt;); &lt;span style=&#34;color:#75715e&#34;&gt;-- 4
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; charindex(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;i&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;description&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;9&lt;/span&gt;); &lt;span style=&#34;color:#75715e&#34;&gt;-- 9
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- 区分大小写
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; charindex(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;crI&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;description&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;COLLATE&lt;/span&gt; Latin1_General_CS_AS); &lt;span style=&#34;color:#75715e&#34;&gt;-- 0
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- 截取字符串
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;substring&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;description&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;); &lt;span style=&#34;color:#75715e&#34;&gt;-- rip
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- 截取最后一个单词
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;substring&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Robust LDAP server for Java&amp;#39;&lt;/span&gt;, len(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Robust LDAP server for Java&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; charindex(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt;, reverse(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Robust LDAP server for Java&amp;#39;&lt;/span&gt;), &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, charindex(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt;, reverse(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Robust LDAP server for Java&amp;#39;&lt;/span&gt;), &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;))
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;复制表&#34;&gt;复制表&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;INTO&lt;/span&gt; ABC_1 &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; ABC
&lt;span style=&#34;color:#75715e&#34;&gt;-- 只复制表结构
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- where 1 = 2;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;修改字段类型&#34;&gt;修改字段类型&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;ALTER&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;TABLE&lt;/span&gt; dbo.doc_exy &lt;span style=&#34;color:#66d9ef&#34;&gt;ALTER&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;COLUMN&lt;/span&gt; column_a DECIMAL (&lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;);  
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;批量插入&#34;&gt;批量插入&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;INSERT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;into&lt;/span&gt; table2
   &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;
   &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; table1 t1
   &lt;span style=&#34;color:#66d9ef&#34;&gt;WHERE&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;NOT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;EXISTS&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; table2 t2 &lt;span style=&#34;color:#66d9ef&#34;&gt;WHERE&lt;/span&gt; t2.id &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; t1.id);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;在更新的时候使用join&#34;&gt;在更新的时候使用join&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;UPDATE&lt;/span&gt; R 
&lt;span style=&#34;color:#66d9ef&#34;&gt;SET&lt;/span&gt; R.status &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;0&amp;#39;&lt;/span&gt; 
&lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; dbo.ProductReviews &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; R
&lt;span style=&#34;color:#66d9ef&#34;&gt;INNER&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;JOIN&lt;/span&gt; dbo.products &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; P 
       &lt;span style=&#34;color:#66d9ef&#34;&gt;ON&lt;/span&gt; R.pid &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; P.id 
&lt;span style=&#34;color:#66d9ef&#34;&gt;WHERE&lt;/span&gt; R.id &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;17190&amp;#39;&lt;/span&gt; 
  &lt;span style=&#34;color:#66d9ef&#34;&gt;AND&lt;/span&gt; P.shopkeeper &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;89137&amp;#39;&lt;/span&gt;;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;比较两个表的数据&#34;&gt;比较两个表的数据&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- EXCEPT 相当于oracle里的 minus
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; CustId, CustName, CustAddress, CustPhone &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; Original
&lt;span style=&#34;color:#66d9ef&#34;&gt;EXCEPT&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; CustId, CustName, CustAddress, CustPhone &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; Revised
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;生成随机数字&#34;&gt;生成随机数字&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- 时间戳+7位随机数
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; DATEDIFF(s, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;1970-01-01&amp;#39;&lt;/span&gt;, GETUTCDATE()) &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;e7  &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;ABS&lt;/span&gt;(CHECKSUM(NEWID()))&lt;span style=&#34;color:#f92672&#34;&gt;%&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;10000000&lt;/span&gt;)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;导出表的ddl-包括index&#34;&gt;导出表的DDL, 包括INDEX&lt;/h3&gt;
&lt;h4 id=&#34;方法1&#34;&gt;方法1&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;Microsoft SQL Management tool -&amp;gt; Tools/Options/SQL Server Object Explorer/Scripting/Script Indexes -&amp;gt; set to true&lt;/li&gt;
&lt;li&gt;find table -&amp;gt; Script Table as -&amp;gt; Create to&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&#34;方法2&#34;&gt;方法2&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;Microsoft SQL Management tool -&amp;gt; Tasks -&amp;gt; Generate Scripts&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.cnblogs.com/lvdongjie/p/7327006.html&#34;&gt;sqlserver 查询当前阻塞进程 并杀掉&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/59899979/how-to-batch-insert-sql-server&#34;&gt;How to Batch INSERT SQL Server?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://learnsql.com/cookbook/how-to-get-the-current-date-without-time-in-t-sql/&#34;&gt;How to Get the Current Date (Without Time) in T-SQL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://popsql.com/learn-sql/sql-server/how-to-duplicate-a-table-in-sql-server&#34;&gt;How to Duplicate a Table in SQL Server&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/9588423/sql-server-inner-join-when-updating&#34;&gt;SQL Server - inner join when updating&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/27247770/how-to-subtract-30-days-from-the-current-date-using-sql-server&#34;&gt;How to subtract 30 days from the current date using SQL Server&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/1334143/datetime2-vs-datetime-in-sql-server&#34;&gt;DateTime2 vs DateTime in SQL Server&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/207190/sql-server-string-to-date-conversion&#34;&gt;Sql Server string to date conversion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://learn.microsoft.com/en-us/sql/t-sql/functions/len-transact-sql?view=sql-server-ver16&#34;&gt;LEN (Transact-SQL)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/13405572/sql-statement-to-get-column-type&#34;&gt;SQL statement to get column type&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://learn.microsoft.com/en-us/sql/relational-databases/tables/modify-columns-database-engine?view=sql-server-ver16&#34;&gt;Modify Columns (Database Engine) - SQL Server | Microsoft Learn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/707335/t-sql-cast-versus-convert&#34;&gt;sql server - T-SQL Cast versus Convert - Stack Overflow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://learn.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql?view=sql-server-ver16&#34;&gt;CAST and CONVERT (Transact-SQL) - SQL Server | Microsoft Learn&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.sqlshack.com/compare-tables-sql-server/&#34;&gt;4 Ways to Insert Multiple Rows in Oracle&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/2847092/how-to-get-numeric-random-uniqueid-in-sql-server&#34;&gt;How to get numeric random uniqueid in SQL Server - Stack Overflow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/8837225/unix-timestamp-in-sql-server&#34;&gt;UNIX_TIMESTAMP in SQL Server - Stack Overflow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.cnblogs.com/xuelixue/p/8961418.html&#34;&gt;sql server 获取字符串中某字符最后一次出现的位置&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.csdn.net/dlw4656/article/details/101989333&#34;&gt;Sql server中从字符串最后一个特殊字符截取到结尾_dlw4656的博客-CSDN博客&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://learn.microsoft.com/zh-cn/sql/t-sql/functions/charindex-transact-sql?view=sql-server-ver16&#34;&gt;CHARINDEX (Transact-SQL) - SQL Server | Microsoft Learn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/652148/how-to-copy-indexes-from-one-table-to-another-in-sql-server&#34;&gt;How to copy indexes from one table to another in SQL Server - Stack Overflow&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>引用cdn静态资源时添加哈希值验证防篡改</title>
      <link>https://deletefromuser.github.io/pgm/2022071101/</link>
      <pubDate>Mon, 11 Jul 2022 17:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2022071101/</guid>
      <description>&lt;p&gt;例子：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;script&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;src&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://example.com/example-framework.js&amp;#34;&lt;/span&gt;
        &lt;span style=&#34;color:#a6e22e&#34;&gt;integrity&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC&amp;#34;&lt;/span&gt;
        &lt;span style=&#34;color:#a6e22e&#34;&gt;crossorigin&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;anonymous&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;生成-sri-哈希的工具&#34;&gt;生成 SRI 哈希的工具&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;shasum -b -a &lt;span style=&#34;color:#ae81ff&#34;&gt;384&lt;/span&gt; example-framework.js | xxd -r -p | base64
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://developer.mozilla.org/zh-CN/docs/Web/Security/Subresource_Integrity&#34;&gt;Subresource Integrity - Web 安全 | MDN&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    
    <item>
      <title>win10 开始菜单去掉web搜索结果</title>
      <link>https://deletefromuser.github.io/pgm/2022070801/</link>
      <pubDate>Fri, 08 Jul 2022 10:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2022070801/</guid>
      <description>&lt;h2 id=&#34;针对windows-10-version-1909&#34;&gt;针对Windows 10 version 1909&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;打开注册表编辑器 &lt;code&gt;regedit&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;进入 &lt;code&gt;计算机\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Search&lt;/code&gt; 目录&lt;/li&gt;
&lt;li&gt;CortanaConsent 项目值改为0，没有则新建&lt;/li&gt;
&lt;li&gt;新建 BingSearchEnabled 项目值改为0&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://www.bennetrichter.de/en/tutorials/windows-10-disable-web-search/&#34;&gt;Windows 10 - Disable Web Search in Start Menu&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    
    <item>
      <title>bash函数 &amp; user 代行</title>
      <link>https://deletefromuser.github.io/pgm/2022070701/</link>
      <pubDate>Thu, 07 Jul 2022 16:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2022070701/</guid>
      <description>&lt;h2 id=&#34;bash函数&#34;&gt;bash函数&lt;/h2&gt;
&lt;p&gt;将函数追加写入&lt;code&gt;~/.bashrc&lt;/code&gt;文件即可持久化，否则只在当前shell session内有效，关闭即无效&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;不要忘记加完需要&lt;code&gt;source ~/.bashrc&lt;/code&gt;才会生效&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; functionName &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
        &amp;lt;commands&amp;gt;
&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;例子：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; f1 &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
        echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Hello I&amp;#39;m function 1&amp;#34;&lt;/span&gt;
        echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Bye!&amp;#34;&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;linux下root用户指定user执行操作&#34;&gt;linux下root用户指定user执行操作&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;sudo -H -u otheruser bash -c &#39;echo &amp;quot;I am $USER, with uid $UID&amp;quot;&#39;&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;-H 可选，使用&lt;code&gt;bash -c xxx&lt;/code&gt;可执行多条命令，单个命令可直接跟user参数后面&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://phoenixnap.com/kb/bash-function&#34;&gt;Bash Function &amp;amp; How to Use It&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://askubuntu.com/questions/294736/run-a-shell-script-as-another-user-that-has-no-password&#34;&gt;Run a shell script as another user that has no password&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    
    <item>
      <title>virtualbox 虚拟机硬盘扩容</title>
      <link>https://deletefromuser.github.io/pgm/2022070401/</link>
      <pubDate>Mon, 04 Jul 2022 16:00:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2022070401/</guid>
      <description>&lt;ol&gt;
&lt;li&gt;click File &amp;gt; Virtual Media Manager in the main VirtualBox window&lt;/li&gt;
&lt;li&gt;Select a virtual hard disk in the list and use the “Size” slider at the bottom of the window to change its size. Click “Apply” when you’re done&lt;/li&gt;
&lt;li&gt;boot ubuntu virtual machine, use GParted to Resize&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://www.howtogeek.com/124622/how-to-enlarge-a-virtual-machines-disk-in-virtualbox-or-vmware&#34;&gt;How To Enlarge a Virtual Machine’s Disk in VirtualBox or VMware&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    
    <item>
      <title>测试Google Cloud Translation API v2</title>
      <link>https://deletefromuser.github.io/pgm/20220703/</link>
      <pubDate>Sun, 03 Jul 2022 10:33:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/20220703/</guid>
      <description>&lt;ol&gt;
&lt;li&gt;事先申请api key，免费额度足够用了(每月50w字符)&lt;/li&gt;
&lt;li&gt;curl测试&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;curl -s -X POST -H &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Content-Type: application/json&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\ \
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;    --data &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;{
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  &amp;#39;q&amp;#39;: &amp;#39;The Great Pyramid of Giza (also known as the Pyramid of Khufu or the
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;        Pyramid of Cheops) is the oldest and largest of the three pyramids in
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;        the Giza pyramid complex.&amp;#39;,
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  &amp;#39;source&amp;#39;: &amp;#39;en&amp;#39;,
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  &amp;#39;target&amp;#39;: &amp;#39;es&amp;#39;,
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  &amp;#39;format&amp;#39;: &amp;#39;text&amp;#39;
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://translation.googleapis.com/language/translate/v2?key=XXXXXXXXXXXXXXXXXXXXXXXXXX&amp;#34;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/62231731/google-cloud-translation-api-issue&#34;&gt;Google cloud translation API issue&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cloud.google.com/translate/docs/reference/rest/v2/translate&#34;&gt;Method: translate | Cloud Translation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cloud.google.com/translate/pricing&#34;&gt;Pricing | Cloud Translation&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    
    <item>
      <title>将所有文件夹的内容分别打包到同名的zip文件内 &amp; 批量解压rar文件</title>
      <link>https://deletefromuser.github.io/pgm/2021022801/</link>
      <pubDate>Sun, 28 Feb 2021 21:02:00 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2021022801/</guid>
      <description>&lt;p&gt;下载下来的漫画合集是rar格式，放到perfectview里也不能读，只能解压出来把每一卷压缩成zip文件&lt;/p&gt;
&lt;p&gt;以前还写了个sh好像，没想到一行就能搞定&lt;/p&gt;
&lt;h2 id=&#34;将所有文件夹的内容分别打包到同名的zip文件内&#34;&gt;将所有文件夹的内容分别打包到同名的zip文件内&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;for dir in */; do ( cd &amp;quot;$dir&amp;quot; &amp;amp;&amp;amp; zip -r ../&amp;quot;${dir%/}&amp;quot;.zip . ) done&lt;/code&gt;&lt;/p&gt;
&lt;h2 id=&#34;批量解压rar文件&#34;&gt;批量解压rar文件&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;for file in ./*.rar; do ( unrar x &amp;quot;$file&amp;quot; ) done&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&#34;新建子目录&#34;&gt;新建子目录&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;for file in ./*.rar; do ( unrar x &amp;quot;$file&amp;quot; &amp;quot;${file%.rar}/&amp;quot; ) done&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://unix.stackexchange.com/a/441025&#34;&gt;Zip all subfolders inside a folder to individual zip file&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/16623835/remove-a-fixed-prefix-suffix-from-a-string-in-bash&#34;&gt;Remove a fixed prefix/suffix from a string in Bash&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>tomcat安装&amp;let&#39;s encrypt配置</title>
      <link>https://deletefromuser.github.io/pgm/20190620/</link>
      <pubDate>Thu, 20 Jun 2019 01:33:58 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/20190620/</guid>
      <description>&lt;h3 id=&#34;安装java&#34;&gt;安装java&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;cd /home
tar -xf OpenJDK8U-jdk_x64_linux_hotspot_8u212b04.tar.gz
&lt;span style=&#34;color:#75715e&#34;&gt;# temp&lt;/span&gt;
export PATH&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;$PWD/jdk8u212-b04/bin:$PATH
java -version

&lt;span style=&#34;color:#75715e&#34;&gt;# final&lt;/span&gt;
vi /etc/profile
&amp;gt;
JAVA_HOME&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/home/jdk8u212-b04
PATH&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;$PATH:$HOME/bin:$JAVA_HOME/bin
export JAVA_HOME
export PATH
&amp;gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# log out and log in&lt;/span&gt;

wget -O- -q -T &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; -t &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/jdk8u212-b04/OpenJDK8U-jdk_x64_linux_hotspot_8u212b04.tar.gz.sha256.txt | sha256sum -c
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;安装tomcat&#34;&gt;安装tomcat&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;sudo groupadd tomcat
sudo useradd -s /bin/false -g tomcat -d /opt/tomcat tomcat

cd /tmp
curl -O http://apache.mirrors.pair.com/tomcat/tomcat-8/v8.5.42/bin/apache-tomcat-8.5.42.tar.gz
sudo mkdir /opt/tomcat
sudo tar xzvf apache-tomcat-8*tar.gz -C /opt/tomcat --strip-components&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;1

cd /opt/tomcat
sudo chgrp -R tomcat /opt/tomcat
sudo chmod -R g+r conf
sudo chmod g+x conf
sudo chown -R tomcat webapps/ work/ temp/ logs/

sudo nano /etc/systemd/system/tomcat.service
&lt;span style=&#34;color:#75715e&#34;&gt;# 修改Environment=JAVA_HOME=/home/jdk8u212-b04&lt;/span&gt;

sudo systemctl daemon-reload
sudo systemctl start tomcat
sudo systemctl status tomcat

sudo ufw allow 8080

sudo systemctl enable tomcat
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;现在应该可以用8080端口正常访问了&lt;/p&gt;
&lt;h3 id=&#34;转发80端口到8080端口&#34;&gt;转发80端口到8080端口&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;iptables -t nat -I PREROUTING -p tcp --dport &lt;span style=&#34;color:#ae81ff&#34;&gt;80&lt;/span&gt; -j REDIRECT --to-ports 8080
iptables -t nat -I OUTPUT -p tcp -o lo --dport &lt;span style=&#34;color:#ae81ff&#34;&gt;80&lt;/span&gt; -j REDIRECT --to-ports 8080

iptables -t nat -L -n  | grep 8080
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;改完之后应该可以不用加端口号访问了，以后443转发8443也是同样的操作&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;iptables -t nat -I PREROUTING -p tcp --dport &lt;span style=&#34;color:#ae81ff&#34;&gt;443&lt;/span&gt; -j REDIRECT --to-ports 8443
iptables -t nat -I OUTPUT -p tcp -o lo --dport &lt;span style=&#34;color:#ae81ff&#34;&gt;443&lt;/span&gt; -j REDIRECT --to-ports 8443
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;配置letsencrypt&#34;&gt;配置letsencrypt&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository universe
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install certbot

sudo certbot certonly --webroot
&lt;span style=&#34;color:#75715e&#34;&gt;# 这里需要输入两个东西，域名和tomcat ROOT所在地址&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# www.xxx.com&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# /opt/tomcat/webapps/ROOT&lt;/span&gt;

cd /etc/letsencrypt/live/www.xxx.com
cp cert.pem /opt/tomcat/conf
cp chain.pem /opt/tomcat/conf
cp privkey.pem /opt/tomcat/conf

chown tomcat:tomcat *.pem

&lt;span style=&#34;color:#75715e&#34;&gt;# etc/letsencrypt/renewal-hooks/post/copy2tomcat.sh&lt;/span&gt;
cd /etc/letsencrypt/live/www.xxx.cc
cp cert.pem /opt/tomcat/conf
cp chain.pem /opt/tomcat/conf
cp privkey.pem /opt/tomcat/conf

cd /opt/tomcat/conf
chown tomcat:tomcat *.pem

service tomcat restart
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;然后转发443端口到8443端口之后，就可以通过https访问网站了&lt;/p&gt;
&lt;p&gt;###重定向http到https&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;server.xml&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-xml&#34; data-lang=&#34;xml&#34;&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;Connector&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;port=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;8080&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;protocol=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;HTTP/1.1&amp;#34;&lt;/span&gt; 
               &lt;span style=&#34;color:#a6e22e&#34;&gt;redirectPort=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;443&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;web.xml(&lt;code&gt;&amp;lt;/web-app&amp;gt;之前&lt;/code&gt;)&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-xml&#34; data-lang=&#34;xml&#34;&gt; &lt;span style=&#34;color:#75715e&#34;&gt;&amp;lt;!-- Require HTTPS for everything except /img (favicon) and /css. --&amp;gt;&lt;/span&gt;
    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;security-constraint&amp;gt;&lt;/span&gt;
        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;web-resource-collection&amp;gt;&lt;/span&gt;
            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;web-resource-name&amp;gt;&lt;/span&gt;HTTPSOnly&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/web-resource-name&amp;gt;&lt;/span&gt;
            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;url-pattern&amp;gt;&lt;/span&gt;/*&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/url-pattern&amp;gt;&lt;/span&gt;
        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/web-resource-collection&amp;gt;&lt;/span&gt;
        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;user-data-constraint&amp;gt;&lt;/span&gt;
            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;transport-guarantee&amp;gt;&lt;/span&gt;CONFIDENTIAL&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/transport-guarantee&amp;gt;&lt;/span&gt;
        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/user-data-constraint&amp;gt;&lt;/span&gt;
    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/security-constraint&amp;gt;&lt;/span&gt;
    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;security-constraint&amp;gt;&lt;/span&gt;
        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;web-resource-collection&amp;gt;&lt;/span&gt;
            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;web-resource-name&amp;gt;&lt;/span&gt;HTTPSOrHTTP&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/web-resource-name&amp;gt;&lt;/span&gt;
            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;url-pattern&amp;gt;&lt;/span&gt;*.ico&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/url-pattern&amp;gt;&lt;/span&gt;
            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;url-pattern&amp;gt;&lt;/span&gt;/img/*&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/url-pattern&amp;gt;&lt;/span&gt;
            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;url-pattern&amp;gt;&lt;/span&gt;/css/*&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/url-pattern&amp;gt;&lt;/span&gt;
        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/web-resource-collection&amp;gt;&lt;/span&gt;
        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;user-data-constraint&amp;gt;&lt;/span&gt;
            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;transport-guarantee&amp;gt;&lt;/span&gt;NONE&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/transport-guarantee&amp;gt;&lt;/span&gt;
        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/user-data-constraint&amp;gt;&lt;/span&gt;
    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/security-constraint&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ps:修改完之后记得查看文件的权限，如果被改成root的话，需要再修改权限&lt;code&gt;chown tomcat:tomcat web.xml&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&#34;自动更新证书todo&#34;&gt;自动更新证书（todo）&lt;/h3&gt;
&lt;h3 id=&#34;tomcat限制内存使用量&#34;&gt;tomcat限制内存使用量&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# In your /tomcat/bin/setenv.sh file (create if it doesn&amp;#39;t exist)&lt;/span&gt;
export CATALINA_OPTS&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$CATALINA_OPTS&lt;span style=&#34;color:#e6db74&#34;&gt; -Xms156m -Xmx218m -server&amp;#34;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.digitalocean.com/community/tutorials/install-tomcat-9-ubuntu-1804&#34;&gt;https://www.digitalocean.com/community/tutorials/install-tomcat-9-ubuntu-1804&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://adoptopenjdk.net/installation.html#x64_linux-jdk&#34;&gt;https://adoptopenjdk.net/installation.html#x64_linux-jdk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://serverfault.com/questions/211536/iptables-port-redirect-not-working-for-localhost&#34;&gt;https://serverfault.com/questions/211536/iptables-port-redirect-not-working-for-localhost&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://certbot.eff.org/lets-encrypt/ubuntubionic-other&#34;&gt;https://certbot.eff.org/lets-encrypt/ubuntubionic-other&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://medium.com/@raupach/how-to-install-lets-encrypt-with-tomcat-3db8a469e3d2&#34;&gt;https://medium.com/@raupach/how-to-install-lets-encrypt-with-tomcat-3db8a469e3d2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.infoworld.com/article/3304289/how-to-configure-tomcat-to-always-require-https.html&#34;&gt;https://www.infoworld.com/article/3304289/how-to-configure-tomcat-to-always-require-https.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>eclipse中一键全部展开目录树</title>
      <link>https://deletefromuser.github.io/pgm/2019012001/</link>
      <pubDate>Sun, 20 Jan 2019 01:33:58 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2019012001/</guid>
      <description>&lt;h1 id=&#34;eclipse中一键全部展开目录树&#34;&gt;eclipse中一键全部展开目录树&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;在package explorer中使用&lt;code&gt;*&lt;/code&gt;能展开全部的目录树&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;但是会把引用的包也都全部展开，java文件的成员也会展开，大部分时候这些东西对我没有用，所以下一步就是把不需要的东西隐藏掉&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;点击package explorer内右上角的小箭头-&amp;gt;Filters&amp;hellip;&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;选中上方的Name Filter pattern，并在输入框中输入&lt;code&gt;target&lt;/code&gt;，这会把目录树中的target文件夹隐藏掉，当然你也可以设置别的目录，用逗号分隔可以设置多个目录&lt;/li&gt;
&lt;li&gt;接着在下方的&lt;code&gt;Select the elements to exclude from the view&lt;/code&gt;中选中&lt;code&gt;Java Members&lt;/code&gt;、&lt;code&gt;Libraries from external&lt;/code&gt;、&lt;code&gt;Libraries in project&lt;/code&gt;，隐藏掉java成员和引用的包&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
</description>
    </item>
    
    <item>
      <title>使用thymeleaf和spring security提供的csrf方法</title>
      <link>https://deletefromuser.github.io/pgm/20190113/</link>
      <pubDate>Sun, 13 Jan 2019 01:33:58 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/20190113/</guid>
      <description>&lt;h3 id=&#34;使用thymeleaf和spring-security提供的csrf方法&#34;&gt;使用thymeleaf和spring security提供的csrf方法&lt;/h3&gt;
&lt;p&gt;只需要在html内的form在设置action时使用thymeleaf属性th:action即可&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;form&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;th:action&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;@{login}&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;method&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;post&amp;#34;&lt;/span&gt;&amp;gt;
    &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;p&lt;/span&gt;&amp;gt;
        &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;label&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;for&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;username&amp;#34;&lt;/span&gt;&amp;gt;Username&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;label&lt;/span&gt;&amp;gt; &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;input&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;text&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;username&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;username&amp;#34;&lt;/span&gt; /&amp;gt;
    &amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;p&lt;/span&gt;&amp;gt;
    &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;p&lt;/span&gt;&amp;gt;
        &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;label&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;for&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;password&amp;#34;&lt;/span&gt;&amp;gt;Password&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;label&lt;/span&gt;&amp;gt; &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;input&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;password&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;password&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;password&amp;#34;&lt;/span&gt; /&amp;gt;
    &amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;p&lt;/span&gt;&amp;gt;
    &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;button&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;submit&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;class&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;btn&amp;#34;&lt;/span&gt;&amp;gt;Log in&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;button&lt;/span&gt;&amp;gt;
&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;form&lt;/span&gt;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;!-- raw HTML omitted --&gt;
&lt;h3 id=&#34;自定义csrf校验&#34;&gt;自定义csrf校验&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;spring security配置文件中去掉自带的csrf校验&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;@EnableWebSecurity&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;WebSecurityConfig&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;extends&lt;/span&gt; WebSecurityConfigurerAdapter &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
	&lt;span style=&#34;color:#a6e22e&#34;&gt;@Override&lt;/span&gt;
	&lt;span style=&#34;color:#66d9ef&#34;&gt;protected&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;configure&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;HttpSecurity http&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;throws&lt;/span&gt; Exception &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
        &lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;
        http&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;csrf&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;().&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;disable&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;();&lt;/span&gt;
        &lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt; 
    &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
    &lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;

	&lt;span style=&#34;color:#75715e&#34;&gt;/***
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;	 * 说明见步骤2
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;	 * @see &amp;lt;a href=
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;	 *      &amp;#34;https://blog.eyallupu.com/2012/04/csrf-defense-in-spring-mvc-31.html&amp;#34;&amp;gt;New
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;	 *      in Spring MVC 3.1: CSRF Protection using
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;	 *      RequestDataValueProcessor&amp;lt;/a&amp;gt;
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;	 */&lt;/span&gt;
	&lt;span style=&#34;color:#a6e22e&#34;&gt;@Bean&lt;/span&gt;
	&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; CSRFRequestDataValueProcessor &lt;span style=&#34;color:#a6e22e&#34;&gt;requestDataValueProcessor&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
		&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; CSRFRequestDataValueProcessor&lt;span style=&#34;color:#f92672&#34;&gt;();&lt;/span&gt;
	&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;实现RequestDataValueProcessor接口，关键方法是&lt;code&gt;getExtraHiddenFields&lt;/code&gt;，然后把它添加到spring security配置文件中（参照步骤1中代码）&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;color:#f92672&#34;&gt;package&lt;/span&gt; springSecurity.csrf&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;

&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; java.util.HashMap&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; java.util.Map&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;

&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; javax.servlet.http.HttpServletRequest&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;

&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; org.springframework.web.servlet.support.RequestDataValueProcessor&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;

&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;CSRFRequestDataValueProcessor&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;implements&lt;/span&gt; RequestDataValueProcessor &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;

	&lt;span style=&#34;color:#a6e22e&#34;&gt;@Override&lt;/span&gt;
	&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; String &lt;span style=&#34;color:#a6e22e&#34;&gt;processAction&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;HttpServletRequest request&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; String action&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; String httpMethod&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
		&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; action&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;
	&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;

	&lt;span style=&#34;color:#a6e22e&#34;&gt;@Override&lt;/span&gt;
	&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; String &lt;span style=&#34;color:#a6e22e&#34;&gt;processFormFieldValue&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;HttpServletRequest request&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; String name&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; String value&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; String type&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
		&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; value&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;
	&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;

	&lt;span style=&#34;color:#a6e22e&#34;&gt;@Override&lt;/span&gt;
	&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; Map&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;String&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; String&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;getExtraHiddenFields&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;HttpServletRequest request&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
		Map&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;String&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; String&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; hiddenFields &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; HashMap&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;String&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; String&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;();&lt;/span&gt;
		hiddenFields&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;put&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;CSRFTokenManager&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;CSRF_PARAM_NAME&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; CSRFTokenManager&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;getTokenForSession&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;request&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;getSession&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;()));&lt;/span&gt;
		&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; hiddenFields&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;
	&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;

	&lt;span style=&#34;color:#a6e22e&#34;&gt;@Override&lt;/span&gt;
	&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; String &lt;span style=&#34;color:#a6e22e&#34;&gt;processUrl&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;HttpServletRequest request&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; String url&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
		&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; url&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;
	&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;

&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;添加自定义拦截器并添加到spring mvc配置文件中&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;color:#f92672&#34;&gt;package&lt;/span&gt; springSecurity.csrf&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;

&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; javax.servlet.http.HttpServletRequest&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; javax.servlet.http.HttpServletResponse&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;

&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; org.springframework.web.servlet.handler.HandlerInterceptorAdapter&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;

&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; lombok.val&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;

&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;CSRFHandlerInterceptor&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;extends&lt;/span&gt; HandlerInterceptorAdapter &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;

	&lt;span style=&#34;color:#a6e22e&#34;&gt;@Override&lt;/span&gt;
	&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;boolean&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;preHandle&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;HttpServletRequest request&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; HttpServletResponse response&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; Object handler&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
			&lt;span style=&#34;color:#66d9ef&#34;&gt;throws&lt;/span&gt; Exception &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;

		val me &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; request&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;getMethod&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;();&lt;/span&gt;
		&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(!&lt;/span&gt;request&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;getMethod&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;().&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;equalsIgnoreCase&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;POST&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
			&lt;span style=&#34;color:#75715e&#34;&gt;// Not a POST - allow the request
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;			&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;
		&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
			&lt;span style=&#34;color:#75715e&#34;&gt;// This is a POST request - need to check the CSRF token
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;			String sessionToken &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; CSRFTokenManager&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;getTokenForSession&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;request&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;getSession&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;());&lt;/span&gt;
			String requestToken &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; CSRFTokenManager&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;getTokenFromRequest&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;request&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;
			&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;sessionToken&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;equals&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;requestToken&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
				&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;
			&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
				response&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;sendError&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;HttpServletResponse&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;SC_FORBIDDEN&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Bad or missing CSRF value&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;
				&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;
			&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
		&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
	&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;

&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;@Configuration&lt;/span&gt;
&lt;span style=&#34;color:#a6e22e&#34;&gt;@EnableWebMvc&lt;/span&gt;
&lt;span style=&#34;color:#a6e22e&#34;&gt;@EnableGlobalMethodSecurity&lt;/span&gt;
&lt;span style=&#34;color:#a6e22e&#34;&gt;@ComponentScan&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;service,servlet,controller,springSecurity&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;AppcationContextConfig&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;extends&lt;/span&gt; WebMvcConfigurerAdapter &lt;span style=&#34;color:#66d9ef&#34;&gt;implements&lt;/span&gt; ApplicationContextAware &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
    &lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;
	&lt;span style=&#34;color:#a6e22e&#34;&gt;@Override&lt;/span&gt;
	&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;addInterceptors&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;InterceptorRegistry registry&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
		registry&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;addInterceptor&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; CSRFHandlerInterceptor&lt;span style=&#34;color:#f92672&#34;&gt;());&lt;/span&gt;
	&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
    &lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;工具类&lt;code&gt;CSRFTokenManager&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;color:#f92672&#34;&gt;package&lt;/span&gt; springSecurity.csrf&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;

&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; java.util.UUID&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;

&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; javax.servlet.http.HttpServletRequest&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; javax.servlet.http.HttpSession&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;

&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;CSRFTokenManager&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;

	&lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;final&lt;/span&gt; String CSRF_PARAM_NAME &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;CSRFToken&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;

	&lt;span style=&#34;color:#66d9ef&#34;&gt;private&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;final&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; String CSRF_TOKEN_FOR_SESSION_ATTR_NAME &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; CSRFTokenManager&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;class&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;getName&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.tokenval&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;

	&lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; String &lt;span style=&#34;color:#a6e22e&#34;&gt;getTokenForSession&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;HttpSession session&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
		String token &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;
		&lt;span style=&#34;color:#75715e&#34;&gt;// I cannot allow more than one token on a session - in the case of two
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;		&lt;span style=&#34;color:#75715e&#34;&gt;// requests trying to
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;		&lt;span style=&#34;color:#75715e&#34;&gt;// init the token concurrently.
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;		&lt;span style=&#34;color:#75715e&#34;&gt;// Notice: in real life I wouldn&amp;#39;t synchronize on the session instance.
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;		&lt;span style=&#34;color:#75715e&#34;&gt;// This should be done on an attribute on the session. But for the
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;		&lt;span style=&#34;color:#75715e&#34;&gt;// blog demo this is fine
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;		&lt;span style=&#34;color:#66d9ef&#34;&gt;synchronized&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;session&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
			token &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;String&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; session&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;getAttribute&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;CSRF_TOKEN_FOR_SESSION_ATTR_NAME&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;
			&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; token&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
				token &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; UUID&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;randomUUID&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;().&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;toString&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;();&lt;/span&gt;
				session&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;setAttribute&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;CSRF_TOKEN_FOR_SESSION_ATTR_NAME&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; token&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;
			&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
		&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
		&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; token&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;
	&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;

	&lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; String &lt;span style=&#34;color:#a6e22e&#34;&gt;getTokenFromRequest&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;HttpServletRequest request&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
		&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; request&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;getParameter&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;CSRF_PARAM_NAME&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;
	&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;

	&lt;span style=&#34;color:#66d9ef&#34;&gt;private&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;CSRFTokenManager&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
	&lt;span style=&#34;color:#f92672&#34;&gt;};&lt;/span&gt;

&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;参考&lt;a href=&#34;https://blog.eyallupu.com/2012/04/csrf-defense-in-spring-mvc-31.html&#34;&gt;New in Spring MVC 3.1: CSRF Protection using RequestDataValueProcessor&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>windows修改右鍵“發送到”菜單&amp;如何快速打開SendTo文件夾</title>
      <link>https://deletefromuser.github.io/pgm/2017082701/</link>
      <pubDate>Sun, 27 Aug 2017 01:33:58 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2017082701/</guid>
      <description>&lt;p&gt;windows修改右鍵“發送到”菜單&amp;amp;如何快速打開SendTo文件夾&lt;/p&gt;
&lt;h3 id=&#34;右鍵發送到所在的文件夾&#34;&gt;右鍵“發送到”所在的文件夾&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;C:\Users\UserName\AppData\Roaming\Microsoft\Windows\SendTo&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&#34;如何快速打開&#34;&gt;如何快速打開&lt;/h3&gt;
&lt;p&gt;使用&lt;code&gt;shell:sendto&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在文件管理器中輸入上述命令，回車即可&lt;/li&gt;
&lt;li&gt;Win鍵+R，在彈出界面中輸入上述命令亦可&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;ps: &lt;code&gt;shell:startup&lt;/code&gt;命令可以快速打開開機啟動文件夾，將軟件快捷方式放到該文件夾下即可實現開機啟動&lt;/p&gt;
&lt;h3 id=&#34;reference&#34;&gt;Reference&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://superuser.com/questions/673960/shell-shortcuts-in-windows-os&#34;&gt;Shell Shortcuts in Windows OS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.winhelponline.com/blog/shell-commands-to-access-the-special-folders/&#34;&gt;Shell Commands to Access the Special Folders in Windows 10/8/7/Vista/XP&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    
    <item>
      <title>VirtualBox使用问题汇总</title>
      <link>https://deletefromuser.github.io/pgm/2017061501/</link>
      <pubDate>Thu, 15 Jun 2017 01:33:58 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2017061501/</guid>
      <description>&lt;h3 id=&#34;virtualbox主机虚拟机共享剪贴板设置之后没用的问题&#34;&gt;VirtualBox主机虚拟机共享剪贴板设置之后没用的问题&lt;/h3&gt;
&lt;p&gt;在设置中启用共享剪贴板之后，还要虚拟机本身安装增强功能之后才可以使用。&lt;/p&gt;
&lt;p&gt;具体方法为：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在设置-存储-控制器中新增一个虚拟光驱，盘片置空即可，&lt;/li&gt;
&lt;li&gt;开启虚拟机，进入之后，点击上方菜单栏设备-安装增强功能&lt;/li&gt;
&lt;li&gt;第二步没有任何提示和消息，进入虚拟机文件管理器，找到光驱VirtualBox Guest Additions，右键打开后，看到几个exe文件（有平台版本区别），找一个能运行的安装即可，随后重启电脑，end.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;在ubuntu上安装virtualbox-guest-additions&#34;&gt;在ubuntu上安装VirtualBox Guest Additions&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;cd /mnt
./VBoxLinuxAdditions.run
reboot
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;linux虚拟机内非root用户读写共享文件夹&#34;&gt;linux虚拟机内非root用户读写共享文件夹&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;usermod -a -G vboxsf username
&lt;span style=&#34;color:#75715e&#34;&gt;# logout and login again&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;虚拟机磁盘满了后无法启动&#34;&gt;虚拟机磁盘满了后无法启动&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;使用livecd启动系统，删除掉一些文件
需要用sudo删除&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;debian livecd &lt;a href=&#34;https://saimei.ftp.acc.umu.se/debian-cd/current-live/amd64/iso-hybrid/debian-live-12.8.0-amd64-gnome.iso&#34;&gt;download&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;reference:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;http://blog.csdn.net/q1302182594/article/details/8720545&#34;&gt;VirtualBox安装Windows XP——图解&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://jingyan.baidu.com/article/574c521917db806c8d9dc18c.html&#34;&gt;VirtualBox主机与虚拟机不能复制粘贴的解决办法&lt;/a&gt;(这个对我没用，我先设的这个再装的增强功能，不知道这个是不是必须的)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://askubuntu.com/questions/22743/how-do-i-install-guest-additions-in-a-virtualbox-vm&#34;&gt;VirtualBox主机与虚拟机不能复制粘贴的解决办法&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://superuser.com/questions/1646971/ubuntu-can-not-boot-due-to-disk-space-full&#34;&gt;Ubuntu can not boot due to disk space full&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    
    <item>
      <title>Java 将对象序列化为字符串 读取字符串反序列化为对象</title>
      <link>https://deletefromuser.github.io/pgm/2017051901/</link>
      <pubDate>Fri, 19 May 2017 01:33:58 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2017051901/</guid>
      <description>&lt;p&gt;Java 将对象序列化为字符串 读取字符串反序列化为对象&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; java.io.Serializable&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;

&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;test&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; String &lt;span style=&#34;color:#a6e22e&#34;&gt;object2String&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;Object obj&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
        String objBody &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;
        ByteArrayOutputStream baops &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;
        ObjectOutputStream oos &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;

        &lt;span style=&#34;color:#66d9ef&#34;&gt;try&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
            baops &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; ByteArrayOutputStream&lt;span style=&#34;color:#f92672&#34;&gt;();&lt;/span&gt;
            oos &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; ObjectOutputStream&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;baops&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;
            oos&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;writeObject&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;obj&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;
            &lt;span style=&#34;color:#66d9ef&#34;&gt;byte&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[]&lt;/span&gt; bytes &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; baops&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;toByteArray&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;();&lt;/span&gt;
            objBody &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Base64&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;encodeToString&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;bytes&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; Base64&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;DEFAULT&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;
        &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;catch&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;IOException e&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
            Log&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;tag&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; e&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;getMessage&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;());&lt;/span&gt;
        &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;finally&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
            &lt;span style=&#34;color:#66d9ef&#34;&gt;try&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
                &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;oos &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
                    oos&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;close&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;();&lt;/span&gt;
                &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;baops &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
                    baops&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;close&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;();&lt;/span&gt;
            &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;catch&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;IOException e&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
                Log&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;tag&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; e&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;getMessage&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;());&lt;/span&gt;
            &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
        &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; objBody&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;
    &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;

    &lt;span style=&#34;color:#a6e22e&#34;&gt;@SuppressWarnings&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;unchecked&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;T &lt;span style=&#34;color:#66d9ef&#34;&gt;extends&lt;/span&gt; Serializable&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; T &lt;span style=&#34;color:#a6e22e&#34;&gt;getObjectFromString&lt;/span&gt;
            &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;String objBody&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; Class&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;T&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; clazz&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
        &lt;span style=&#34;color:#66d9ef&#34;&gt;byte&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[]&lt;/span&gt; bytes &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Base64&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;decode&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;objBody&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; Base64&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;DEFAULT&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;
        ObjectInputStream ois &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;
        T obj &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;
        &lt;span style=&#34;color:#66d9ef&#34;&gt;try&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
            ois &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; ObjectInputStream&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; ByteArrayInputStream&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;bytes&lt;span style=&#34;color:#f92672&#34;&gt;));&lt;/span&gt;
            obj &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;T&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; ois&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;readObject&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;();&lt;/span&gt;
        &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;catch&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;IOException e&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
            Log&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;tag&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; e&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;getMessage&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;());&lt;/span&gt;
        &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;catch&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;ClassNotFoundException e&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
            Log&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;tag&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; e&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;getMessage&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;());&lt;/span&gt;
        &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;finally&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
            &lt;span style=&#34;color:#66d9ef&#34;&gt;try&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
                &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;ois &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
                    ois&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;close&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;();&lt;/span&gt;
            &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;catch&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;IOException e&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
                Log&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;tag&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; e&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;getMessage&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;());&lt;/span&gt;
            &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
        &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;

        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; obj&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;
    &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;http://blog.csdn.net/cshichao/article/details/8659341&#34;&gt;Java 序列化学习 —— Object序列化成字符串&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://blog.csdn.net/cubesky/article/details/38753861&#34;&gt;解决序列化中的问题java.io.StreamCorruptedException: invalid stream header:EFBFBDEF&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/rsa2063/Timber/blob/master/app/src/main/java/com/naman14/timber/utils/Helpers.java&#34;&gt;code&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    
    <item>
      <title>判断日期是否是工作日(sqlserver)，判断一个月中有多少工作日(C#)</title>
      <link>https://deletefromuser.github.io/pgm/2017042601/</link>
      <pubDate>Wed, 26 Apr 2017 01:33:58 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2017042601/</guid>
      <description>&lt;p&gt;判断日期是否是工作日(sqlserver)，判断一个月中有多少工作日(C#)&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;print (datepart(weekday, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;2017-04-24&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;%&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;7&lt;/span&gt;
print (datepart(weekday, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;2017-04-26&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;%&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;7&lt;/span&gt;
print (datepart(weekday, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;2017-04-30&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;%&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;7&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;--周一到周日 0-6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-C#&#34; data-lang=&#34;C#&#34;&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; GetWeekdayNum(DateTime dt) {
            dt = &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; DateTime(dt.Year, dt.Month, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;);
            &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; monthDays = dt.Subtract(dt.AddMonths(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;));
            &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; num = &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;
            &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; i = &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;; i &amp;lt;= Math.Abs(monthDays.TotalDays) - &lt;span style=&#34;color:#ae81ff&#34;&gt;28&lt;/span&gt;; i++) {
                &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; dtTemp = &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; DateTime(dt.Year, dt.Month, &lt;span style=&#34;color:#ae81ff&#34;&gt;28&lt;/span&gt; + i);
                &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt;(dtTemp.DayOfWeek != DayOfWeek.Saturday &amp;amp;&amp;amp; dtTemp.DayOfWeek != DayOfWeek.Sunday) {
                    num++;
                }
            }
            &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;20&lt;/span&gt; + num;
        }
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>C#重命名文件夹下的文件</title>
      <link>https://deletefromuser.github.io/pgm/2017041001/</link>
      <pubDate>Mon, 10 Apr 2017 01:33:58 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2017041001/</guid>
      <description>&lt;p&gt;C#重命名文件夹下的文件&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-c#&#34; data-lang=&#34;c#&#34;&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; files = System.IO.Directory.EnumerateFiles(desPath);
            &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt;(formatStr.Length == &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) {
                formatStr = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;{0}.jpg&amp;#34;&lt;/span&gt;;
            }
            &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; count = &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;
            &lt;span style=&#34;color:#66d9ef&#34;&gt;foreach&lt;/span&gt;(String fileName &lt;span style=&#34;color:#66d9ef&#34;&gt;in&lt;/span&gt; files) {
                &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; System.IO.FileInfo(fileName).Length &amp;gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1024&lt;/span&gt; * &lt;span style=&#34;color:#ae81ff&#34;&gt;75&lt;/span&gt;) {
                    System.IO.File.Move(fileName, System.IO.Path.Combine(desPath, String.Format(formatStr, count)));&lt;span style=&#34;color:#75715e&#34;&gt;//对文件进行重命名
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;                    count++;
                }
            }
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;判断系统是否是win10&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-c#&#34; data-lang=&#34;c#&#34;&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;bool&lt;/span&gt; IsWindows10() {
            &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; reg = Registry.LocalMachine.OpenSubKey(&lt;span style=&#34;color:#e6db74&#34;&gt;@&amp;#34;SOFTWARE\Microsoft\Windows NT\CurrentVersion&amp;#34;&lt;/span&gt;);
            &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; productName = (&lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;)reg.GetValue(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ProductName&amp;#34;&lt;/span&gt;);
            &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; productName.StartsWith(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Windows 10&amp;#34;&lt;/span&gt;);
        }
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;获取桌面目录路径&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-c#&#34; data-lang=&#34;c#&#34;&gt;        String GetDesktopDirectory() {
            &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
        }
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;创建新文件夹&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-c#&#34; data-lang=&#34;c#&#34;&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; NewDirectory(String path) {
            &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt;(!System.IO.Directory.Exists(path)) {
                System.IO.Directory.CreateDirectory(path);
            }
        }
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;base64编码&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-c#&#34; data-lang=&#34;c#&#34;&gt;        String GetBase64String() {
            &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; Convert.ToBase64String(System.Text.Encoding.Default.GetBytes(DateTime.Now.ToString()));
        }
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;获取win10锁屏壁纸的缓存目录路径&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-c#&#34; data-lang=&#34;c#&#34;&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; String GetWallPaperDirectory() {
            String desPath = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;;
            String doc = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
            doc = doc.Substring(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, doc.LastIndexOf(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;\\&amp;#34;&lt;/span&gt;));
            String desTemp = System.IO.Path.Combine(doc, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;AppData\\Local\\Packages&amp;#34;&lt;/span&gt;);
            &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; files = System.IO.Directory.EnumerateDirectories(desTemp);
            &lt;span style=&#34;color:#66d9ef&#34;&gt;foreach&lt;/span&gt;(String t &lt;span style=&#34;color:#66d9ef&#34;&gt;in&lt;/span&gt; files) {
                &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt;(t.Contains(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Microsoft.Windows.ContentDeliveryManager&amp;#34;&lt;/span&gt;)) {
                    desPath = t;
                    &lt;span style=&#34;color:#66d9ef&#34;&gt;break&lt;/span&gt;;
                }
            }
            &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt;(desPath.Length &amp;gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) {
                desPath = System.IO.Path.Combine(desPath, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;LocalState\\Assets&amp;#34;&lt;/span&gt;);
                &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; desPath;
            }
            &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;;
        }
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;将文件复制并重命名到新路径&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-c#&#34; data-lang=&#34;c#&#34;&gt;System.IO.File.Copy(fileName, System.IO.Path.Combine(newPath, String.Format(formatStr, count)));
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;修改控件字体，可以通过设置窗体的字体实现，因为继承关系，所以子控件的字体也会改变&lt;/p&gt;
&lt;p&gt;ps : 链接10里面的一个评论很搞笑, 说答主用&lt;code&gt;StartsWith(&amp;quot;Windows 10&amp;quot;);&lt;/code&gt;不正确, 在Windows 100上判断会出错, 很有道理&lt;/p&gt;
&lt;p&gt;pps : 感觉用C#写Demo比java方便, 主要是拖控件比较方便, 事件方法就在那里, 找一下就行了.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://help.github.com/articles/adding-an-existing-project-to-github-using-the-command-line/&#34;&gt;Adding an existing project to GitHub using the command line&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://msdn.microsoft.com/en-us/library/07wt70x2(v=vs.110).aspx&#34;&gt;Directory.GetFiles Method (String)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://stackoverflow.com/questions/7140081/how-to-get-only-filenames-within-a-directory-using-c&#34;&gt;How to get only filenames within a directory using c#?&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://stackoverflow.com/questions/22015354/rename-existing-file-name&#34;&gt;Rename existing file name&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://stackoverflow.com/questions/19150333/how-to-rename-a-file-in-net&#34;&gt;How to rename a file in .NET?&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://stackoverflow.com/questions/1380839/how-do-you-get-the-file-size-in-c&#34;&gt;How do you get the file size in C#?&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;http://www.cnblogs.com/yelsea/archive/2007/08/15/856166.html&#34;&gt;C#中将字符串转成 BASE64 编码&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://stackoverflow.com/questions/2906581/scrollbar-on-a-label&#34;&gt;Scrollbar on a Label&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://stackoverflow.com/questions/34131695/windows-10-will-catched-as-windows-8-windows-8-1&#34;&gt;Windows 10 will catched as Windows 8 / Windows 8.1&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://stackoverflow.com/questions/31885302/how-can-i-detect-if-my-app-is-running-on-windows-10&#34;&gt;How can I detect if my app is running on Windows 10&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://stackoverflow.com/questions/2819934/detect-windows-version-in-net&#34;&gt;Detect Windows version in .net&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://stackoverflow.com/questions/577634/how-to-get-the-friendly-os-version-name&#34;&gt;How to get the “friendly” OS Version Name?&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;[C#获取Windows系统特殊文件夹的路径&lt;a href=&#34;http://www.cnblogs.com/mane/archive/2011/08/13/2137215.html&#34;&gt;转]&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://msdn.microsoft.com/en-us/library/system.string(v=vs.110).aspx&#34;&gt;String Class&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/rsa2063/SmallTools/tree/master/RenameFiles&#34;&gt;code&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    
    <item>
      <title>sqlserver 修改主键约束</title>
      <link>https://deletefromuser.github.io/pgm/2017040501/</link>
      <pubDate>Wed, 05 Apr 2017 01:33:58 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2017040501/</guid>
      <description>&lt;p&gt;sqlserver 修改主键约束&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;sp_help book

&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;exists&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; sysobjects &lt;span style=&#34;color:#66d9ef&#34;&gt;where&lt;/span&gt; name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;PK__book__AFEBF550AD55A29F&amp;#39;&lt;/span&gt;)
&lt;span style=&#34;color:#66d9ef&#34;&gt;begin&lt;/span&gt;
	print &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;pk exists&amp;#39;&lt;/span&gt;
	&lt;span style=&#34;color:#66d9ef&#34;&gt;alter&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;table&lt;/span&gt; book &lt;span style=&#34;color:#66d9ef&#34;&gt;drop&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;constraint&lt;/span&gt; PK__book__AFEBF550AD55A29F
&lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;

&lt;span style=&#34;color:#66d9ef&#34;&gt;alter&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;table&lt;/span&gt; book &lt;span style=&#34;color:#66d9ef&#34;&gt;add&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;constraint&lt;/span&gt; PK__book &lt;span style=&#34;color:#66d9ef&#34;&gt;primary&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;key&lt;/span&gt; clustered
(
book_name &lt;span style=&#34;color:#66d9ef&#34;&gt;asc&lt;/span&gt;,
id &lt;span style=&#34;color:#66d9ef&#34;&gt;asc&lt;/span&gt;
)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;http://www.cnblogs.com/sunxuchu/p/5578057.html&#34;&gt;SQL Server 创建表 添加主键 添加列常用SQL语句&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    
    <item>
      <title>win10中去掉资源管理器的OneDrive项目&amp;隐藏工具栏</title>
      <link>https://deletefromuser.github.io/pgm/2017040101/</link>
      <pubDate>Sat, 01 Apr 2017 01:33:58 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2017040101/</guid>
      <description>&lt;p&gt;win10中去掉资源管理器的OneDrive项目\隐藏工具栏&lt;/p&gt;
&lt;p&gt;打开注册表编辑器，修改&lt;code&gt;HKEY_CLASSES_ROOT\CLSID\{018D5C66-4533-4307-9B53-224DE2ED1FE6}\System.IsPinnedToNameSpaceTree&lt;/code&gt;为0&lt;/p&gt;
&lt;p&gt;默认资源管理器工具栏都是点到对应的菜单选项才出来的，不知道为什么突然固定在那不会自动隐藏了。&lt;/p&gt;
&lt;p&gt;使用Ctrl+F1可以显示或隐藏工具栏&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.howtogeek.com/225973/how-to-disable-onedrive-and-remove-it-from-file-explorer-on-windows-10/&#34;&gt;How to Disable OneDrive and Remove It From File Explorer on Windows 10&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>在C#项目中使用sqlite</title>
      <link>https://deletefromuser.github.io/pgm/2017033101/</link>
      <pubDate>Fri, 31 Mar 2017 01:33:58 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2017033101/</guid>
      <description>&lt;p&gt;在C#项目中使用sqlite&lt;/p&gt;
&lt;h3 id=&#34;引入文件&#34;&gt;引入文件&lt;/h3&gt;
&lt;p&gt;从官网下载了几个dll文件都有问题之后，最终放弃，使用VS自带的NuGet包管理工具，搜索安装即可，没有杂七杂八的问题&lt;/p&gt;
&lt;p&gt;列一下关键步骤&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-C#&#34; data-lang=&#34;C#&#34;&gt;String sql = &lt;span style=&#34;color:#e6db74&#34;&gt;@&amp;#34;create table if not exists user(
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;username varchar(40),
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;passward varchar(40)
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;);
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;insert into user(username, passward) values({0}, {1});
&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;select * from user;&amp;#34;&lt;/span&gt;;
&lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; datasource = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;test.db&amp;#34;&lt;/span&gt;;
SQLiteConnection connection = &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;;
&lt;span style=&#34;color:#75715e&#34;&gt;//#1
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;Connection = &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; SQLiteConnection(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;data source = &amp;#34;&lt;/span&gt; + &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.Datasource);
&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (System.IO.File.Exists(Datasource)) {
  SQLiteConnection.CreateFile(datasource);
}
Connection.Open();
&lt;span style=&#34;color:#75715e&#34;&gt;//#2
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; tb = &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; System.Data.DataTable();
SQLiteCommand command = &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; SQLiteCommand(s.Connection);
SQLiteDataAdapter adapter = &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; SQLiteDataAdapter(command);
command.CommandText = String.Format(sql, username.Quote(), password.Quote());
adapter.Fill(tb);
SharpLearn.Program.ShowTable(tb);
&lt;span style=&#34;color:#75715e&#34;&gt;//...
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//utils
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; ShowTable(DataTable tb) {
    System.IO.StreamWriter sw = &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; System.IO.StreamWriter(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;data.txt&amp;#34;&lt;/span&gt;);
    &lt;span style=&#34;color:#66d9ef&#34;&gt;foreach&lt;/span&gt; (DataColumn col &lt;span style=&#34;color:#66d9ef&#34;&gt;in&lt;/span&gt; tb.Columns) {
        sw.Write(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;{0,-20}&amp;#34;&lt;/span&gt;, col.ColumnName);
    }
    sw.WriteLine();
    &lt;span style=&#34;color:#66d9ef&#34;&gt;foreach&lt;/span&gt; (DataRow dr &lt;span style=&#34;color:#66d9ef&#34;&gt;in&lt;/span&gt; tb.Rows) {
        &lt;span style=&#34;color:#66d9ef&#34;&gt;foreach&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;object&lt;/span&gt; o &lt;span style=&#34;color:#66d9ef&#34;&gt;in&lt;/span&gt; dr.ItemArray) {
            sw.Write(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;{0,-20}&amp;#34;&lt;/span&gt;, o.ToString());
        }
        sw.WriteLine();
    }
    sw.Close();
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;reference__&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://www.cnblogs.com/robertzml/archive/2009/08/27/1554874.html&#34;&gt;在.NET C#中使用SQLite&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.cnblogs.com/helloandroid/articles/2150272.html&#34;&gt;Sqlite语法&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://zh.wikipedia.org/wiki/SQLite&#34;&gt;https://zh.wikipedia.org/wiki/SQLite&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[How can I create a new SQLite database, with all tables, on the fly? &lt;a href=&#34;https://stackoverflow.com/questions/3647868/how-can-i-create-a-new-sqlite-database-with-all-tables-on-the-fly&#34;&gt;duplicate]&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Create SQLite Database and table &lt;a href=&#34;https://stackoverflow.com/questions/15292880/create-sqlite-database-and-table&#34;&gt;closed]&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://aasukaa.blogspot.com/2017/02/c.html&#34;&gt;C# 格式化字符串(没几天又忘了)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/NuGet&#34;&gt;https://en.wikipedia.org/wiki/NuGet&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>sqlserver 事务简单使用</title>
      <link>https://deletefromuser.github.io/pgm/2017032901/</link>
      <pubDate>Wed, 29 Mar 2017 01:33:58 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2017032901/</guid>
      <description>&lt;p&gt;sqlserver 事务简单使用&lt;/p&gt;
&lt;p&gt;今天第一次在工作中用到事务，在找一个下数量被条件卡住的错误时，是先更新一个表中的数据，在检查数量有没有小于0的，有就要报错。追踪到语句后，只用最后一句查询卡住的语句查询发现正常，不存在问题。经理提醒才发现是先更新再检查，只查最后一句是查的没更新之前的，不是报错时的状态。&lt;/p&gt;
&lt;p&gt;这时候就用到事务了，想模拟错误时的情况又不想把数据导到临时表里，用完再倒回去，太麻烦。使用事务，更新之前开启事务，更新之后查询表状态，从而找到原因。(上面错误的原因就是更新完之后库存数量变为负值了)&lt;/p&gt;
&lt;p&gt;mysql test&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;start&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;transaction&lt;/span&gt;;

&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; test;
&lt;span style=&#34;color:#66d9ef&#34;&gt;update&lt;/span&gt; test &lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt; name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;1&amp;#39;&lt;/span&gt;;
&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; test;

&lt;span style=&#34;color:#66d9ef&#34;&gt;rollback&lt;/span&gt;;
&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; test;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;mssql&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;begin&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;transaction&lt;/span&gt;

&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; test;
&lt;span style=&#34;color:#66d9ef&#34;&gt;update&lt;/span&gt; test &lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt; name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;1&amp;#39;&lt;/span&gt;;
&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; test;

&lt;span style=&#34;color:#66d9ef&#34;&gt;rollback&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;transaction&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ps:连续三天加班到10点半多，不想说了，浪费我的时间。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;http://www.mysqltutorial.org/mysql-transaction.aspx&#34;&gt;MySQL Transaction&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://dev.mysql.com/doc/refman/5.7/en/commit.html&#34;&gt;14.3.1 START TRANSACTION, COMMIT, and ROLLBACK Syntax&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;http://www.jellythink.com/archives/952&#34;&gt;说说MySQL中的事务&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;http://www.cnblogs.com/knowledgesea/p/3714417.html&#34;&gt;SQL Server中的事务与锁&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://stackoverflow.com/questions/16737910/generating-a-random-unique-8-character-string-using-mysql&#34;&gt;Generating a random &amp;amp; unique 8 character string using MySQL&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://stackoverflow.com/questions/39257391/how-do-i-generate-a-unique-random-string-for-one-of-my-mysql-table-columns&#34;&gt;How do I generate a unique, random string for one of my MySql table columns?&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>使用第三方类库报错Error converting bytecode to dex: Cause: Dex cannot parse version 52 byte code</title>
      <link>https://deletefromuser.github.io/pgm/2017032603/</link>
      <pubDate>Sun, 26 Mar 2017 03:33:58 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2017032603/</guid>
      <description>&lt;p&gt;使用第三方类库报错Error converting bytecode to dex: Cause: Dex cannot parse version 52 byte code&lt;/p&gt;
&lt;p&gt;在Android Studio中加了一个依赖之后，编译出错，解决办法是在项目的属性中设置 sourceCompatibility 和 targetCompatibility 为1.7&lt;/p&gt;
&lt;p&gt;同时在build.gradle中添加jackOptions&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;android {
    defaultConfig {
        ...
        jackOptions{
            enabled true
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://stackoverflow.com/questions/37020413/android-dex-cannot-parse-version-52-byte-code&#34;&gt;Android: Dex cannot parse version 52 byte code&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;http://www.jianshu.com/p/a13c6326671d&#34;&gt;Android进阶之自定义注解&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;http://www.cnblogs.com/ning-blogs/p/5516357.html&#34;&gt;《ANDROID 导入第三方源码JAR包遇到的坑》&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>Android连接电脑新增文件无法显示的问题</title>
      <link>https://deletefromuser.github.io/pgm/2017032602/</link>
      <pubDate>Sun, 26 Mar 2017 02:33:58 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2017032602/</guid>
      <description>&lt;p&gt;Android连接电脑新增文件无法显示的问题&lt;/p&gt;
&lt;p&gt;在调试app时，创建文件，在手机上可以看到文件新建成功，但是在电脑上看不到文件。这个bug不知道为什么好几年都不修复。&lt;/p&gt;
&lt;p&gt;解决办法是在新增文件后&lt;/p&gt;
&lt;p&gt;&lt;code&gt;activity.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + &amp;quot;/cursor.txt&amp;quot;)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;http://blog.csdn.net/saharis/article/details/38818519&#34;&gt;手机插上电脑，看不到新增的文件的解决方案&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://code.google.com/p/android/issues/detail?id=38282&#34;&gt;Android MTP support does not show recent files until the device is rebooted&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://stackoverflow.com/questions/13737261/nexus-4-not-showing-files-via-mtp&#34;&gt;Nexus 4 not showing files via MTP&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>Android Studio 函数描述弹出很慢的问题</title>
      <link>https://deletefromuser.github.io/pgm/2017032601/</link>
      <pubDate>Sun, 26 Mar 2017 01:33:58 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2017032601/</guid>
      <description>&lt;p&gt;Android Studio 函数描述弹出很慢的问题&lt;/p&gt;
&lt;p&gt;找到版本对应的目录，将在线查询替换为本地查询，需要在SDKmanager中先下载SDK文档&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;.AndroidStudio2.2\config\options\jdk.table.xml
将该文件中的http://developer.android.com/reference/全都替换成本地文档的地址
file://C:/DevelopTool/Android/sdk/docs/reference/
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;之后重启，记得将文件编辑界面关掉再重启，不然build会报错com.intellij.openapi.project.IndexNotReadyException。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://stackoverflow.com/questions/16619667/view-method-information-in-android-studio&#34;&gt;View method information in Android Studio&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://stackoverflow.com/questions/23378610/android-studio-quick-documentation-always-fetching-documentation&#34;&gt;Android Studio quick documentation always “fetching documentation”&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>Chrome Keep扩展运行出错的问题解决</title>
      <link>https://deletefromuser.github.io/pgm/2017032501/</link>
      <pubDate>Sat, 25 Mar 2017 01:33:58 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2017032501/</guid>
      <description>&lt;p&gt;Chrome Keep扩展运行出错的问题解决&lt;/p&gt;
&lt;p&gt;主要问题还是扩展连接的网址被墙的原因，将其加入代理即可&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;*.googleapis.com
*.googleusercontent.com
//跟google翻译的扩展问题一样
//不同在于keep使用了第二个网址
//如果只把第一个加入代理的话，也是可以正常使用的
//只不过每次保存的时候都会出现让你登录的提示
//必须点击登录之后才能正常保存
//把第二个网址也加入代理规则就可以正常使用
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;记录一下找到网址的步骤，主要就是要找到插件调用的js文件，在里面找网址：&lt;/p&gt;
&lt;p&gt;在一个网页内点击检查，打开开发者工具，找到Network分页，然后在网页内点击Save To Keep，观察分页内的网络连接，主要关注红色的(应该是代表连接失败的吧)，看到一个index.html，在新标签页打开，是一个点击插件是出现的窗体的html文件，右键查看网页源代码，找到调用的js文件打开，找其中的网址，发现&lt;code&gt;www.googleapis.com|apps.googleusercontent.com|clients4.google.com&lt;/code&gt;几种网址，将其加入代理规则即可&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>git 常用命令</title>
      <link>https://deletefromuser.github.io/pgm/2017032303/</link>
      <pubDate>Thu, 23 Mar 2017 03:33:58 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2017032303/</guid>
      <description>&lt;h3 id=&#34;常用命令&#34;&gt;常用命令&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 拉取代码&lt;/span&gt;
git pull --all
&lt;span style=&#34;color:#75715e&#34;&gt;# 提交dev分支到远程仓库&lt;/span&gt;
git push origin dev
&lt;span style=&#34;color:#75715e&#34;&gt;# 将某一个提交的变更应用到代码库&lt;/span&gt;
git cherry-pick -n bd61ad98
&lt;span style=&#34;color:#75715e&#34;&gt;# 将某区间提交的变更应用到代码库&lt;/span&gt;
git cherry-pick -n bd61ad98^..ade56rq1
&lt;span style=&#34;color:#75715e&#34;&gt;# 强制回退到上一个commit(未push)&lt;/span&gt;
git reset --hard HEAD^
&lt;span style=&#34;color:#75715e&#34;&gt;# 强制回退到上上个commit(未push)&lt;/span&gt;
git reset --hard HEAD~2
&lt;span style=&#34;color:#75715e&#34;&gt;# 回退到上一个commit, 但保留变更后的文件&lt;/span&gt;
git reset HEAD^
&lt;span style=&#34;color:#75715e&#34;&gt;# 取消某个版本的修改&lt;/span&gt;
git revert &amp;lt;commit hash&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;使用ssh连接git&#34;&gt;使用ssh连接git&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 生成ssh key&lt;/span&gt;
ssh-keygen -t ed25519 -C &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;your_email@example.com&amp;#34;&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# 把ssh公钥(pub后缀的文件)加入到git账户&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# 把ssh key加入到ssh-agent&lt;/span&gt;
eval &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;ssh-agent -s&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
ssh-add ~/.ssh/id_ed25519
&lt;span style=&#34;color:#75715e&#34;&gt;# 测试&lt;/span&gt;
ssh -T git@github.com

&lt;span style=&#34;color:#75715e&#34;&gt;# 杀掉所有ssh-agent进程&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# 因为每开一个terminal就要跑这些命令，开始一个ssh-agent，运行一段时间之后，后台就会有很多进程&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# bash&lt;/span&gt;
ps -ef | grep ssh-agent | grep -v grep | awk &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;{print $2}&amp;#39;&lt;/span&gt; | xargs kill -9
&lt;span style=&#34;color:#75715e&#34;&gt;# windows&lt;/span&gt;
taskkill /F /IM ssh-agent.exe /T
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;git-將文件轉移位置&#34;&gt;git 將文件轉移位置&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;git mv 2017032003.md csharp
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;查看某一次提交的文件列表&#34;&gt;查看某一次提交的文件列表&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;git show --pretty&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt; --name-only bd61ad98
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;查看某一个文件的提交历史&#34;&gt;查看某一个文件的提交历史&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;git log --follow -- filename
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;同时在多个分支工作&#34;&gt;同时在多个分支工作&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;git worktree add -b hotfix ../hotfix
git worktree list
pushd ../hotfix
&lt;span style=&#34;color:#75715e&#34;&gt;# working on hotfix branch&lt;/span&gt;
popd
git worktree remove ../hotfix
git worktree prune
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;查看stash的文件具体内容&#34;&gt;查看stash的文件具体内容&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;git stash show -p
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;stash单个文件&#34;&gt;stash单个文件&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;git stash -- filename.ext
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;恢复在以前某个版本被删除的文件&#34;&gt;恢复在以前某个版本被删除的文件&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;### 先找到被删除时的commit&lt;/span&gt;
git log -- &amp;lt;filename&amp;gt;
git checkout &amp;lt;deletion commit hash&amp;gt;~1 -- &amp;lt;filename&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;tortoisegit也是很好用的&#34;&gt;TortoiseGit也是很好用的&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;生成patch，应用patch，以及查看diff，blame，gui还是很好用的&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;删除-git-远程仓库中忘记加入-gitignore-的资源&#34;&gt;删除 git 远程仓库中忘记加入 .gitignore 的资源&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;git rm --cached remove_file
&lt;span style=&#34;color:#75715e&#34;&gt;# add file to gitignore`&lt;/span&gt;
git add .gitignore&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;
git commit -m &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Excluding&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;修改分支和远程分支名&#34;&gt;修改分支和远程分支名&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;git branch -m &amp;lt;old_name&amp;gt; &amp;lt;new_name&amp;gt;
git push &amp;lt;remote&amp;gt; --delete &amp;lt;old_name&amp;gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# OR shorter&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# git push &amp;lt;remote&amp;gt; :&amp;lt;old_name&amp;gt;&lt;/span&gt;
git branch --unset-upstream &amp;lt;new_name&amp;gt;
git push &amp;lt;remote&amp;gt; &amp;lt;new_name&amp;gt;
git push &amp;lt;remote&amp;gt; -u &amp;lt;new_name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;clone时指定用户名&#34;&gt;clone时指定用户名&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;git clone https://username@github.com/username/repository.git

&lt;span style=&#34;color:#75715e&#34;&gt;# 使用token进行clone(其实跟上面没有本质区别，token本来就是用来代替密码的)&lt;/span&gt;
git clone https://username:token@github.com/username/repository.git
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;git-bash中使用sh命令时出现警告__git_ps1-command-not-found&#34;&gt;git bash中使用sh命令时出现警告&amp;rdquo;__git_ps1: command not found&amp;rdquo;&lt;/h3&gt;
&lt;p&gt;找到completion/git-prompt.sh，在~/.bash_profile或者内部引用的配置文件中添加&lt;code&gt;source /path/git-prompt.sh&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&#34;导出svn-patch&#34;&gt;导出svn patch&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;git diff --no-prefix &amp;gt; ~/some-feature.diff
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;git-rebase&#34;&gt;git rebase&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 把多个commit合并成一个&lt;/span&gt;
git rebase -i &amp;lt;待合并commit的前一个commit&amp;gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# 如果已经push到了remote，rebase完成后需要强制push&lt;/span&gt;
git push -f
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://githowto.com/moving_files&#34;&gt;20. Moving files&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/424071/how-do-i-list-all-the-files-in-a-commit&#34;&gt;How do I list all the files in a commit?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/3701404/how-to-list-all-commits-that-changed-a-specific-file&#34;&gt;How to list all commits that changed a specific file?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git-scm.com/docs/git-worktree&#34;&gt;Git - git-worktree Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=s4BTvj1ZVLM&#34;&gt;How to Use Git Worktree | Checkout Multiple Git Branches at Once&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/10725729/see-whats-in-a-stash-without-applying-it&#34;&gt;See what&amp;rsquo;s in a stash without applying it&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/1670970/how-to-cherry-pick-multiple-commits&#34;&gt;How to cherry-pick multiple commits&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/12420924/stash-just-a-single-file&#34;&gt;Stash just a single file&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/a/42141656/19120213&#34;&gt;Git: How to remove file from index without deleting files from any repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/a/10054470/19120213&#34;&gt;How do I provide a username and password when running &amp;ldquo;git clone git@remote.git&amp;rdquo;?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://anotheruiguy.gitbooks.io/gitforeveryone/content/auto/README.html#:~:text=If%20you%20are%20seeing%20this,and%20install%20a%20new%20one.&#34;&gt;-bash: __git_ps1: command not found&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://scribu.net/wordpress/svn-patches-from-git.html&#34;&gt;svn patches from git&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.git-tower.com/learn/git/faq/restoring-deleted-files&#34;&gt;Restoring deleted files in Git&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.quora.com/How-do-I-kill-all-processes-with-the-same-name-in-Windows&#34;&gt;How to kill all processes with the same name in Windows - Quora&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/927358/how-do-i-undo-the-most-recent-local-commits-in-git&#34;&gt;version control - How do I undo the most recent local commits in Git? - Stack Overflow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/30590083/how-do-i-rename-both-a-git-local-and-remote-branch-name&#34;&gt;repository - How do I rename both a Git local and remote branch name? - Stack Overflow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.sejuku.net/blog/71919&#34;&gt;これで完璧! 図解でわかるgit rebaseの2つの使い方!&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    
    <item>
      <title>C# 對一個類進行方法上的擴展 &amp; 為方法添加註釋</title>
      <link>https://deletefromuser.github.io/pgm/2017032302/</link>
      <pubDate>Thu, 23 Mar 2017 02:33:58 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2017032302/</guid>
      <description>&lt;p&gt;C# 對一個類進行方法上的擴展 &amp;amp; 為方法添加註釋&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-C#&#34; data-lang=&#34;C#&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;StringExtension&lt;/span&gt; {
        &lt;span style=&#34;color:#75715e&#34;&gt;/// &amp;lt;summary&amp;gt;
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;/// 將字符串包裝成數據庫查詢時需要的樣式
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;/// 一定程度上防止SQL注入？(我覺得可以達到這個效果)
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;/// &amp;lt;/summary&amp;gt;
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;/// &amp;lt;param name=&amp;#34;str&amp;#34;&amp;gt;
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;/// 需要包裝的字符串
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;/// &amp;lt;/param&amp;gt;
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;/// &amp;lt;returns&amp;gt;包裝後的字符串&amp;lt;/returns&amp;gt;
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; String Quote(&lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt; String str) {
            &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#39;&amp;#34;&lt;/span&gt; + str.Replace(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#39;&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#39;&amp;#39;&amp;#34;&lt;/span&gt;) + &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#39;&amp;#34;&lt;/span&gt;;
        }
}
&lt;span style=&#34;color:#75715e&#34;&gt;//對String類進行擴展，添加一個方法用於組合sql語句
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//方法必須在一個靜態類中定義
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-C#&#34; data-lang=&#34;C#&#34;&gt;String str = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;tom&amp;#39; or (1=1) --&amp;#34;&lt;/span&gt;;
Program.log(String.Format(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;select 1 from user where user = {0} and psd = {1}&amp;#34;&lt;/span&gt;, str, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;));
Program.log(String.Format(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;select 1 from user where user = {0} and psd = {1}&amp;#34;&lt;/span&gt;, str.Quote(), &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;));
&lt;span style=&#34;color:#75715e&#34;&gt;/*
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;select 1 from user where user = tom&amp;#39; or (1=1) -- and psd = 
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;select 1 from user where user = &amp;#39;tom&amp;#39;&amp;#39; or (1=1) --&amp;#39; and psd = 
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;*/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>C#獲取窗體寬度、獲取兩個日期的時間差</title>
      <link>https://deletefromuser.github.io/pgm/2017032201/</link>
      <pubDate>Wed, 22 Mar 2017 01:33:58 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2017032201/</guid>
      <description>&lt;p&gt;C#獲取窗體寬度、獲取兩個日期的時間差&lt;/p&gt;
&lt;h4 id=&#34;在窗體改變時改變控件的寬度&#34;&gt;在窗體改變時改變控件的寬度&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-c#&#34; data-lang=&#34;c#&#34;&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;private&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; FormTemp_Resize(&lt;span style=&#34;color:#66d9ef&#34;&gt;object&lt;/span&gt; sender, EventArgs e) {
            Program.log(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Width of form is &amp;#34;&lt;/span&gt; + &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.Width.ToString());
            &lt;span style=&#34;color:#75715e&#34;&gt;//this.Bounds.Width
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;            &lt;span style=&#34;color:#75715e&#34;&gt;//下面這個不太清楚得到的是什麼寬度
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;            &lt;span style=&#34;color:#75715e&#34;&gt;//System.Windows.Forms.Screen.FromControl(this).Bounds.Width
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;        }
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;獲取兩個日期間的時間差&#34;&gt;獲取兩個日期間的時間差&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-C#&#34; data-lang=&#34;C#&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; DateTime().Subtract(&lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; DateTime().AddDays(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;)).TotalMinutes;&lt;span style=&#34;color:#75715e&#34;&gt;//-1440
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;获取字符串的显示宽度&#34;&gt;获取字符串的显示宽度&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-C#&#34; data-lang=&#34;C#&#34;&gt;            Program.log(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;this.Font is &amp;#34;&lt;/span&gt; + &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.Font.ToString()
                + &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;\r\n 勉強&amp;#39;s width is &amp;#34;&lt;/span&gt;
                + System.Windows.Forms.TextRenderer.MeasureText(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;勉強&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.Font).Width.ToString());
            &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.Font = &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; System.Drawing.Font(
                &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Noto Sans CJK JP Bold&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;9F&lt;/span&gt;
                , System.Drawing.FontStyle.Bold
                , System.Drawing.GraphicsUnit.Point, ((&lt;span style=&#34;color:#66d9ef&#34;&gt;byte&lt;/span&gt;)(&lt;span style=&#34;color:#ae81ff&#34;&gt;134&lt;/span&gt;)));
            Program.log(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;this.Font is &amp;#34;&lt;/span&gt; + &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.Font.ToString()
                + &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;\r\n 勉強&amp;#39;s width is &amp;#34;&lt;/span&gt;
                + System.Windows.Forms.TextRenderer.MeasureText(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;勉強&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.Font).Width.ToString());
&lt;span style=&#34;color:#75715e&#34;&gt;/*
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;this.Font is [Font: Name=宋体, Size=9, Units=3, GdiCharSet=134, GdiVerticalFont=False]
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; 勉強&amp;#39;s width is 29
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;this.Font is [Font: Name=Noto Sans CJK JP Bold, Size=9, Units=3, GdiCharSet=134, GdiVerticalFont=False]
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; 勉強&amp;#39;s width is 32
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;*/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ps:vs快捷键 格式化选定内容Ctrl+K,Ctrl+F，格式化文档Ctrl+K,Ctrl+D&lt;/p&gt;
&lt;p&gt;自定义快捷键：工具-&amp;gt;选项-&amp;gt;环境-&amp;gt;键盘&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://stackoverflow.com/questions/254197/how-can-i-get-the-active-screen-dimensions&#34;&gt;How can I get the active screen dimensions?&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://msdn.microsoft.com/zh-tw/library/system.datetime(v=vs.110).aspx&#34;&gt;DateTime 結構&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://msdn.microsoft.com/zh-tw/library/system.timespan(v=vs.110).aspx&#34;&gt;TimeSpan 結構&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://msdn.microsoft.com/zh-tw/library/bb384267(v=vs.110).aspx&#34;&gt;在 DateTime、DateTimeOffset、 TimeSpan 和 TimeZoneInfo 之間選擇&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://msdn.microsoft.com/en-us/library/y4xdbe66(v=vs.110).aspx&#34;&gt;TextRenderer.MeasureText Method (String, Font)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://stackoverflow.com/questions/9706908/visual-studio-ctrl-k-d-code-formatting-not-working&#34;&gt;Visual Studio Ctrl K + D (code formatting) not working&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>C#判斷DataColumn的字段類型</title>
      <link>https://deletefromuser.github.io/pgm/2017032101/</link>
      <pubDate>Tue, 21 Mar 2017 01:33:58 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2017032101/</guid>
      <description>&lt;p&gt;C#判斷DataColumn的字段類型&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;今天做的一個要把表格型數據導入一個 DataTable 中，讀取都是字符串，table 中有字段是數值類型，讀取時Int32也當作Double解析，因為導入字符串可能為空，所以需要在導入時當前列是否是數值列，如果是進行 Double.TryParse 操作，解析失敗的賦值為0&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-c#&#34; data-lang=&#34;c#&#34;&gt;            DataTable tb = &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; DataTable();
            tb.Columns.Add(&lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; DataColumn(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;id&amp;#34;&lt;/span&gt;, Type.GetType(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;System.Double&amp;#34;&lt;/span&gt;)));

            &lt;span style=&#34;color:#66d9ef&#34;&gt;foreach&lt;/span&gt;(DataColumn d &lt;span style=&#34;color:#66d9ef&#34;&gt;in&lt;/span&gt; tb.Columns) {
                log((d.DataType &lt;span style=&#34;color:#66d9ef&#34;&gt;is&lt;/span&gt; System.Double).ToString());&lt;span style=&#34;color:#75715e&#34;&gt;// 一個是Type，一個是struct
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;                log(d.DataType.ToString());
                log((d.DataType.ToString() == &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;System.Int32&amp;#34;&lt;/span&gt;).ToString());&lt;span style=&#34;color:#75715e&#34;&gt;//這樣可以判斷
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;            }
&lt;span style=&#34;color:#75715e&#34;&gt;/*
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;False
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;System.Double
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;True
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;*/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://msdn.microsoft.com/en-us/library/system.data.datacolumn(v=vs.110).aspx&#34;&gt;DataColumn Class&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;http://www.cnblogs.com/Mysterious/p/3423232.html&#34;&gt;C# DataTable和DataRelation&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>聽說Linq</title>
      <link>https://deletefromuser.github.io/pgm/2017032003/</link>
      <pubDate>Mon, 20 Mar 2017 03:33:58 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2017032003/</guid>
      <description>&lt;p&gt;聽說Linq&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-c#&#34; data-lang=&#34;c#&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; System.Linq;
...
        &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; LinqTest() {
            &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;[] array = { &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;7&lt;/span&gt; };
            &lt;span style=&#34;color:#75715e&#34;&gt;// Select squares of all odd numbers in the array sorted in descending order
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; results = &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; x &lt;span style=&#34;color:#66d9ef&#34;&gt;in&lt;/span&gt; array
                          &lt;span style=&#34;color:#66d9ef&#34;&gt;where&lt;/span&gt; x % &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; == &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
                          &lt;span style=&#34;color:#66d9ef&#34;&gt;orderby&lt;/span&gt; x &lt;span style=&#34;color:#66d9ef&#34;&gt;descending&lt;/span&gt;
                          &lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; x * x;
            &lt;span style=&#34;color:#66d9ef&#34;&gt;foreach&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; result &lt;span style=&#34;color:#66d9ef&#34;&gt;in&lt;/span&gt; results) {
                log(result.ToString());
            }
        }
&lt;span style=&#34;color:#75715e&#34;&gt;//49 25 1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://zh.wikipedia.org/wiki/%E8%AF%AD%E8%A8%80%E9%9B%86%E6%88%90%E6%9F%A5%E8%AF%A2&#34;&gt;语言集成查询&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://blog.jobbole.com/110626/&#34;&gt;为什么说 LINQ 要胜过 SQL&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>Visual Studio使用過程中的問題</title>
      <link>https://deletefromuser.github.io/pgm/2017032002/</link>
      <pubDate>Mon, 20 Mar 2017 02:33:58 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2017032002/</guid>
      <description>&lt;p&gt;Visual Studio使用過程中的問題&lt;/p&gt;
&lt;h4 id=&#34;格式化快捷鍵及樣式&#34;&gt;格式化快捷鍵及樣式&lt;/h4&gt;
&lt;p&gt;快捷鍵為&lt;code&gt;Ctrl+K-&amp;gt;Ctrl+D&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;設置格式化樣式&lt;code&gt;工具-&amp;gt;選項-&amp;gt;文本編輯器-&amp;gt;C#-&amp;gt;代碼樣式-&amp;gt;格式設置-&amp;gt;新行&lt;/code&gt;主要需要設置一下這個，其他還有縮進之類也不需要改&lt;/p&gt;
&lt;h4 id=&#34;隱藏編輯界面的豎虛線&#34;&gt;隱藏編輯界面的豎虛線&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;工具-&amp;gt;選項-&amp;gt;文本編輯器-&amp;gt;常規&lt;/code&gt;去掉顯示結構參考線勾選即可&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://stackoverflow.com/questions/17538208/visual-studio-text-editor-vertical-lines-on-statements&#34;&gt;Visual Studio text editor vertical lines on statements&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://dotblogs.com.tw/ouch1978/2010/10/25/vs2010-format-sour-cecode-automatically&#34;&gt;使用Visual Studio進行Source Code自動格式化&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://msdn.microsoft.com/en-us/library/999b219z(v=vs.71).aspx&#34;&gt;Managing Code Formatting&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://stackoverflow.com/questions/4942113/format-code-shortcut-for-visual-studio&#34;&gt;Format code shortcut for Visual Studio?&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://stackoverflow.com/questions/5755942/how-do-you-auto-format-code-in-visual-studio&#34;&gt;How do you auto format code in Visual Studio?&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;http://blog.csdn.net/sheismylife/article/details/10448493&#34;&gt;Git diff ^M的消除&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://help.github.com/articles/dealing-with-line-endings/&#34;&gt;Dealing with line endings&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://tankle.github.io/2015/03/07/5-ways-to-remove-the-m-character-in-the-file.html&#34;&gt;五种方法用来移除文件中的^M符号&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/cssmagic/blog/issues/22&#34;&gt;GitHub 第一坑：换行符自动转换&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;http://www.cnblogs.com/biGpython/archive/2012/02/12/2347933.html&#34;&gt;linux vi ^M符号&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>Chrome谷歌翻譯擴展沒有網絡連接的問題</title>
      <link>https://deletefromuser.github.io/pgm/2017032001/</link>
      <pubDate>Mon, 20 Mar 2017 01:33:58 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2017032001/</guid>
      <description>&lt;p&gt;Chrome谷歌翻譯擴展沒有網絡連接的問題&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;提取翻译时出错，请检查网络连接。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;在網頁中選中單詞單擊擴展圖標後，出現上述提示，將瀏覽器代理設置為全局後可以正常使用。使用代理規則的話需要把&lt;code&gt;https://translate.googleapis.com/&lt;/code&gt;加入代理規則&lt;code&gt;*.googleapis.com/&lt;/code&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>JSONP跨域獲取JSON數據</title>
      <link>https://deletefromuser.github.io/pgm/2017031901/</link>
      <pubDate>Sun, 19 Mar 2017 01:33:58 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2017031901/</guid>
      <description>&lt;p&gt;JSONP跨域獲取JSON數據&lt;/p&gt;
&lt;p&gt;客戶端請求數據&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&amp;lt;!doctype html&amp;gt;&lt;/span&gt;
&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;html&lt;/span&gt;&amp;gt;
&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;head&lt;/span&gt;&amp;gt;
&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;title&lt;/span&gt;&amp;gt;App Engine Demo&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;title&lt;/span&gt;&amp;gt;
&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;script&lt;/span&gt;
	&lt;span style=&#34;color:#a6e22e&#34;&gt;src&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js&amp;#34;&lt;/span&gt;&amp;gt;&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;script&lt;/span&gt;&amp;gt;
&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;head&lt;/span&gt;&amp;gt;
&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;body&lt;/span&gt;&amp;gt;
	&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;div&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;result&amp;#34;&lt;/span&gt;&amp;gt;Loading...&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;div&lt;/span&gt;&amp;gt;
	&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;br&lt;/span&gt; /&amp;gt;
	&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;p&lt;/span&gt;&amp;gt;add p&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;p&lt;/span&gt;&amp;gt;
	&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;br&lt;/span&gt; /&amp;gt;
	&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;script&lt;/span&gt;&amp;gt;
		&lt;span style=&#34;color:#a6e22e&#34;&gt;$&lt;/span&gt;(document).&lt;span style=&#34;color:#a6e22e&#34;&gt;ready&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;() {
			&lt;span style=&#34;color:#a6e22e&#34;&gt;$&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;ajax&lt;/span&gt;({
				&lt;span style=&#34;color:#a6e22e&#34;&gt;async&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;,
				&lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://hanotfun.appspot.com/demo&amp;#34;&lt;/span&gt;,
				&lt;span style=&#34;color:#a6e22e&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;GET&amp;#34;&lt;/span&gt;,
				&lt;span style=&#34;color:#a6e22e&#34;&gt;dataType&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;jsonp&amp;#39;&lt;/span&gt;,
				&lt;span style=&#34;color:#a6e22e&#34;&gt;jsonp&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;callback&amp;#39;&lt;/span&gt;,
				&lt;span style=&#34;color:#a6e22e&#34;&gt;success&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;) {
					&lt;span style=&#34;color:#a6e22e&#34;&gt;$&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;#result&amp;#39;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;html&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Hello, &amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;);
				}
			});
		});
	&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;script&lt;/span&gt;&amp;gt;
&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;body&lt;/span&gt;&amp;gt;
&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;html&lt;/span&gt;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;服務器端必須對處理請求，不能直接返回json數據，而要用callback參數對數據進行包裝&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/*
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; * Copyright 2016 Google Inc. All Rights Reserved.
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; *
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; * Licensed under the Apache License, Version 2.0 (the &amp;#34;License&amp;#34;);
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; * you may not use this file except in compliance with the License.
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; * You may obtain a copy of the License at
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; *
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; * http://www.apache.org/licenses/LICENSE-2.0
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; *
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; * Unless required by applicable law or agreed to in writing, software
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; * distributed under the License is distributed on an &amp;#34;AS IS&amp;#34; BASIS,
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; * See the License for the specific language governing permissions and
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; * limitations under the License.
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt; */&lt;/span&gt;

&lt;span style=&#34;color:#f92672&#34;&gt;package&lt;/span&gt; myapp&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;

&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; java.io.IOException&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; javax.servlet.http.HttpServlet&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; javax.servlet.http.HttpServletRequest&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; javax.servlet.http.HttpServletResponse&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;

&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;DemoServlet&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;extends&lt;/span&gt; HttpServlet &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
  &lt;span style=&#34;color:#a6e22e&#34;&gt;@Override&lt;/span&gt;
  &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;doGet&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;HttpServletRequest req&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; HttpServletResponse resp&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
      &lt;span style=&#34;color:#66d9ef&#34;&gt;throws&lt;/span&gt; IOException &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
	  String callback &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; req&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;getParameter&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;callback&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;
		&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;callback &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; callback&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; 0&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
			resp&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;setContentType&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;text/plain&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;
			resp&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;getWriter&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;().&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;println&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;callback &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;({ \&amp;#34;name\&amp;#34;: \&amp;#34;World\&amp;#34; })&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;
		&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
			resp&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;setContentType&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;text/plain&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;
			resp&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;getWriter&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;().&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;println&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;{ \&amp;#34;name\&amp;#34;: \&amp;#34;World\&amp;#34; }&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;
		&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
  &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;//如果不包裝會報“Uncaught SyntaxError: Unexpected token :”錯誤
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;檢測到請求中包含callback參數時對返回數據進行包裝，否則直接返回json數據。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;http://www.cnblogs.com/ada-zheng/p/4349840.html&#34;&gt;JSONP跨域请求数据报错 “Unexpected token :”的解决办法&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;http://www.cnblogs.com/ada-zheng/p/4349845.html&#34;&gt;js中几种实用的跨域方法原理详解&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://stackoverflow.com/questions/10507345/ajax-and-jsonp-parseerror-and-uncaught-syntaxerror-unexpected-token&#34;&gt;$.ajax and JSONP. ParseError and Uncaught SyntaxError: Unexpected token :&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://stackoverflow.com/questions/33366992/ajax-with-jsonp-returns-error-callback-is-undefined&#34;&gt;AJAX with JSONP returns error Callback is Undefined&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://stackoverflow.com/questions/14318710/ajax-get-status-was-ok-but-jsonp-callback-returns-undefined-data&#34;&gt;AJAX Get status was Ok but jsonp callback returns undefined data&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;http://crossoverjie.top/2016/10/18/SSM6/&#34;&gt;SSM(六)跨域传输&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;http://8366.iteye.com/blog/744057&#34;&gt;使用Jsonp方式跨域获取json&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://stackoverflow.com/questions/13993385/returning-jsonp-instead-of-json-from-a-jsp&#34;&gt;Returning JSONP instead of JSON from a JSP&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;http://www.fbloggs.com/2010/07/09/how-to-access-cross-domain-data-with-ajax-using-jsonp-jquery-and-php/&#34;&gt;How to access cross-domain data with AJAX using JSONP, jQuery and PHP&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://code-ken.github.io/2016/07/13/jsonp-json-ajax/&#34;&gt;JSONP跨域问题的解决方法&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;http://www.cnblogs.com/dowinning/archive/2012/04/19/json-jsonp-jquery.html&#34;&gt;说说JSON和JSONP，也许你会豁然开朗，含jQuery用例&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://learn.jquery.com/ajax/working-with-jsonp/&#34;&gt;Working with JSONP&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://stackoverflow.com/questions/7936610/json-uncaught-syntaxerror-unexpected-token&#34;&gt;json Uncaught SyntaxError: Unexpected token :&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;http://www.magicsite.cn/blog/web/JS/JS142838.html&#34;&gt;Jsonp完成js跨域请求&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>Tomcat配置問題匯總</title>
      <link>https://deletefromuser.github.io/pgm/2017031902/</link>
      <pubDate>Sun, 19 Mar 2017 01:33:58 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2017031902/</guid>
      <description>&lt;p&gt;Tomcat配置問題匯總&lt;/p&gt;
&lt;h4 id=&#34;解壓後點擊startup運行閃退&#34;&gt;解壓後點擊startup運行閃退&lt;/h4&gt;
&lt;p&gt;原因可能是沒有配置環境變量，JAVA_HOME，JRE_HOME，CLASSPATH幾個，不想配的話在catalina.bat裡手動設置應該也是可以的，我設置了但是還是不行，但是在eclipse裡面可以運行，於是就沒有深究&lt;/p&gt;
&lt;h4 id=&#34;could-not-resolve-xml-resource-null-with-public-id&#34;&gt;Could not resolve XML resource [null] with public ID&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;java.io.FileNotFoundException: Could not resolve XML resource [null] with public ID [-//Oracle Corporation//DTD Web Application 2.3//EN], system ID [http://java.sun.com/dtd/web-app_2_3.dtd] and base URI [file:/C:/Users/Shin.SHINJI-PC2/Documents/Code/Java/jee_eclipse/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/java-gae-quickstart/WEB-INF/web.xml] to a known, local entity.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;解决办法：
a. 在Servers窗口中双击Tomcat，勾选Serve modules without publishing；
b. 修改conf/context.xml，如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-xml&#34; data-lang=&#34;xml&#34;&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;Context&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;xmlBlockExternal=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;false&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;multiple-contexts-have-a-path-of-xxx&#34;&gt;Multiple Contexts have a path of &amp;ldquo;/XXX&amp;rdquo;&lt;/h4&gt;
&lt;p&gt;修改tomcat服務器中conf/server.xml文件，如果發現裡面Context節點有兩個一模一樣的，把其中一個的path改掉，或者把其中一個刪掉應該也可以&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://webcache.googleusercontent.com/search?q=cache:Yx0UPCjh9aoJ:code.zbc.io/gae,tomcat,eclipse/gae-eclipse.html+&amp;amp;cd=1&amp;amp;hl=zh-CN&amp;amp;ct=clnk&amp;amp;gl=us&#34;&gt;用eclipse本地部署GAE的demo时遇到的问题&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://zh.wikipedia.org/wiki/Apache_Tomcat&#34;&gt;Apache Tomcat&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;http://www.zhimengzhe.com/bianchengjiaocheng/Javabiancheng/48679.html&#34;&gt;直接双击启动tomcat中的startup.bat闪退原因及处理步骤&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;http://www.cnblogs.com/hin24/p/3646815.html&#34;&gt;如何解决启动tomcat的startup.bat闪退问题？&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://my.oschina.net/u/2325881/blog/730005&#34;&gt;win10 下tomcat 启动startup.bat闪退解决方法&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;http://www.cnblogs.com/xwdreamer/archive/2010/09/08/2297098.html&#34;&gt;classpath、path、JAVA_HOME的作用及JAVA环境变量配置&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;http://www.cnblogs.com/panxuejun/p/5909408.html&#34;&gt;java classpath作用&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;http://www.jianshu.com/p/74ffa3345bc3&#34;&gt;Java中JDK为何要配Path和ClassPath?&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;http://shiyousan.com/post/635613454610763481&#34;&gt;如何暂停执行中的bat批处理文件？&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;http://www.admin10000.com/document/7089.html&#34;&gt;Windows批处理(cmd/bat)常用命令小结&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;http://www.cnblogs.com/rwxwsblog/p/4960107.html&#34;&gt;tomcat启动是报Multiple Contexts have a path of &amp;ldquo;/XXX&amp;rdquo;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://stackoverflow.com/questions/7239613/multiple-contexts-with-the-same-path-error-running-web-service-in-eclipse-using&#34;&gt;Multiple contexts with the same path error running web service in Eclipse using Tomcat&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>使用Android Studio中遇到的錯誤</title>
      <link>https://deletefromuser.github.io/pgm/2017031602/</link>
      <pubDate>Thu, 16 Mar 2017 02:33:58 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2017031602/</guid>
      <description>&lt;p&gt;使用Android Studio中遇到的錯誤&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Error:Failed to open zip file.
Gradle&#39;s dependency cache may be corrupt (this sometimes occurs after a network connection timeout.)
&amp;lt;a href=&amp;quot;syncProject&amp;quot;&amp;gt;Re-download dependencies and sync project (requires network)&amp;lt;/a&amp;gt;
&amp;lt;a href=&amp;quot;syncProject&amp;quot;&amp;gt;Re-download dependencies and sync project (requires network)&amp;lt;/a&amp;gt;

solved:
1) Manually download Gradle 3.3 binary (direct link: https://services.gradle.org/distributions/gradle-3.3-bin.zip)

2) Open your android studio root directory, and extract the zip to the gradle folder (for example in my Debian machine the full path is /opt/android-studio/gradle/gradle-3.3)

3) Open Android Studio, go to File-&amp;gt;Settings-&amp;gt;Build, Exectution, Deployment-&amp;gt;Gradle and set &amp;quot;Gradle home&amp;quot; to point your new gradle-3.3 folder.

4) Sync and you are ready to go!
https://stackoverflow.com/questions/42652980/errorfailed-to-open-zip-file-gradles-dependency-cache-may-be-corrupt
&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    
    <item>
      <title>文件Hash校驗Hash軟件</title>
      <link>https://deletefromuser.github.io/pgm/2017031601/</link>
      <pubDate>Thu, 16 Mar 2017 01:33:58 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2017031601/</guid>
      <description>&lt;p&gt;文件Hash校驗Hash軟件&lt;/p&gt;
&lt;p&gt;下了個eclipse的安裝包，看了下下載鏈接是http的，於是打算校驗一下hash值，沒想到官網上只給了一個SHA512的值，裝的7Zip只支持到SHA256，於是下了幾個hash校驗軟件。&lt;/p&gt;
&lt;p&gt;本來打算下以前用過的hashcalc，不過好像不是開源軟件，而且上次下載的遊戲安裝包校驗出錯，文件拖進去點擊校驗之後程序就卡死了。就上wiki上找開源的而且最近有更新的校驗軟件，找了幾個試用了一下。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/gurnec/HashCheck&#34;&gt;HashCheck Shell Extension&lt;/a&gt; 安裝需要管理員權限，安裝後會在文件屬性中新增一個分頁，內有文件的CRC-32,SHA-1,SHA256,SHA512的校驗值&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;http://rhash.anz.ru/&#34;&gt;RHash&lt;/a&gt; 不需要管理員權限，但是win10下打不開(打開閃退)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://sourceforge.net/projects/quickhash/files/&#34;&gt;QuickHash&lt;/a&gt; 不需要管理員權限，但是校驗值怪怪的，不太懂為什麼，校驗出來的SHA512值很短但是開頭結尾跟官方提供的文件值也不太一樣&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;http://mirror.rise.ph/eclipse/oomph/epp/neon/R2a/eclipse-inst-win64.exe
官方SHA-512:：7344a1ef157382c68ec3c2674e1a5f42b049aa81545f4c24d68e3c209e2933381575ec4663973830410a7247f9c70e776ef74e6616e56b3259f5d00c51c15f3b
hashcheck:
7344a1ef157382c68ec3c2674e1a5f42b049aa81545f4c24d68e3c209e2933381575ec4663973830410a7247f9c70e776ef74e6616e56b3259f5d00c51c15f3b
QuickHash:
74E6616E56B3259F5D00C51C15F3B
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;​&lt;a href=&#34;https://en.wikipedia.org/wiki/Comparison_of_file_verification_software&#34;&gt;Comparison of file verification software&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>在C#和sqlserver中獲取字符串的真實大小</title>
      <link>https://deletefromuser.github.io/pgm/2017031402/</link>
      <pubDate>Tue, 14 Mar 2017 02:33:58 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2017031402/</guid>
      <description>&lt;p&gt;在C#和sqlserver中獲取字符串的真實大小(要睡覺了沒驗證)&lt;/p&gt;
&lt;p&gt;C#&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-C#&#34; data-lang=&#34;C#&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; len1 = System.Text.Encoding.Default.GetBytes(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;aaa&amp;#34;&lt;/span&gt;).Length; &lt;span style=&#34;color:#75715e&#34;&gt;//结果为 3
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; len2 = System.Text.Encoding.Default.GetBytes(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;张三丰&amp;#34;&lt;/span&gt;).Length; &lt;span style=&#34;color:#75715e&#34;&gt;//结果为 6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;sqlserver&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; len(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;aaa&amp;#39;&lt;/span&gt;)          &lt;span style=&#34;color:#75715e&#34;&gt;--结果为 3
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; len(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;张三丰&amp;#39;&lt;/span&gt;)        &lt;span style=&#34;color:#75715e&#34;&gt;-- 结果依然为 3
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; datalength(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;aaa&amp;#39;&lt;/span&gt;)   &lt;span style=&#34;color:#75715e&#34;&gt;--结果为 3
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; datalength(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;张三丰&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#75715e&#34;&gt;--结果为 6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>編程代碼風格相關文章</title>
      <link>https://deletefromuser.github.io/pgm/2017031203/</link>
      <pubDate>Sun, 12 Mar 2017 12:03:58 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2017031203/</guid>
      <description>&lt;p&gt;編程代碼風格相關文章&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://www.hawstein.com/posts/google-java-style.html&#34;&gt;Google Java编程风格指南&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://coderlmn.github.io/frontEndCourse/unmaintainable.html&#34;&gt;如何编写无法维护的代码&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>使用gcloud source克隆代碼出錯的問題</title>
      <link>https://deletefromuser.github.io/pgm/2017031202/</link>
      <pubDate>Sun, 12 Mar 2017 02:33:58 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2017031202/</guid>
      <description>&lt;p&gt;使用gcloud source克隆代碼出錯的問題&lt;/p&gt;
&lt;p&gt;&lt;code&gt;gcloud source repos clone java-gae-quickstart --project=mytest-161202&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;在Google Cloud Platform中創建好代碼庫，並且在本機安裝好Google Cloud SDK之後，使用上面的語句克隆代碼庫出錯&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Cloning into &#39;C:\Users\Me\default&#39;...
ERROR: (gcloud.auth.git-helper) Invalid input line format: [path=].
fatal: remote error: Invalid username/password.
You may need to use your OAuth token password; Note that generated google.com passwords are not compatible with private repositories
ERROR: (gcloud.source.repos.clone) Command &#39;[&#39;git&#39;, &#39;clone&#39;, &#39;https: //source.developers.google.com/p/project-1234/r/default&#39;, &#39;C:\Users\Me\default&#39;, &#39;--config&#39;, &#39;credential.helper=&amp;quot;gcloud.cmd&amp;quot;&#39;]&#39; returned non-zero exit status 128
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;此時打開git，輸入&lt;code&gt;git config --list&lt;/code&gt;，查看其中的credential.helper屬性是否是manager，如果是，則輸入&lt;code&gt; git config --system --unset credential.helper&lt;/code&gt;，之後再次取出應該就可以了&lt;/p&gt;
&lt;h5 id=&#34;在gcp和git中設置代理的方法取出時提示time-out-443的情況下&#34;&gt;在GCP和git中設置代理的方法(取出時提示time out 443的情況下)&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;git  &lt;code&gt;git config --global http.proxy 127.0.0.1:1080&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;gcloud&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;//查看配置信息
gcloud info
//設置代理
gcloud config set proxy/address 127.0.0.1
gcloud config set proxy/port 1080
gcloud config set proxy/type http
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/36528900/gcloud-git-clone-issues-windows-10&#34;&gt;gcloud git clone issues - windows 10&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://groups.google.com/forum/#!topic/google-cloud-sdk/8SfiaKEYXTM&#34;&gt;Authentication for git google cloud repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git-scm.com/book/zh/v2/Git-%E5%B7%A5%E5%85%B7-%E5%87%AD%E8%AF%81%E5%AD%98%E5%82%A8&#34;&gt;Git 工具 - 凭证存储&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://vjudge1.github.io/2016/10/04/gae.html&#34;&gt;Google App Engine入门（Python）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cloud.google.com/sdk/gcloud/reference/config/set&#34;&gt;gcloud config set&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>MS-Windows下Emacs显示中文卡頓</title>
      <link>https://deletefromuser.github.io/pgm/2017031201/</link>
      <pubDate>Sun, 12 Mar 2017 01:33:58 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2017031201/</guid>
      <description>&lt;p&gt;MS-Windows下Emacs显示中文卡頓&lt;/p&gt;
&lt;p&gt;emacs顯示中文有bug，更換一下默認字體就好了
Options-&amp;gt;Set Default Font&lt;/p&gt;
&lt;p&gt;ps:看wiki的時候發現很多搞笑的話，『vi支持者认为Emacs是&amp;quot;一个伟大的操作系统，只缺个体面的编辑器&amp;rdquo;』&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://emacs-china.org/t/windows10-emacs/992&#34;&gt;Windows10下Emacs只要有中文就非常卡&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://chriszheng.science/2016/08/24/Why-Emacs-lags-when-display-Chinese-under-MS-Windows/&#34;&gt;为什么MS-Windows下的Emacs显示中文这么卡？&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://zh.wikipedia.org/wiki/Emacs&#34;&gt;wiki/Emacs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://zh.wikipedia.org/wiki/%E7%BC%96%E8%BE%91%E5%99%A8%E4%B9%8B%E6%88%98&#34;&gt;编辑器之战&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>解壓大文件提示存儲空間不足</title>
      <link>https://deletefromuser.github.io/pgm/2017030901/</link>
      <pubDate>Thu, 09 Mar 2017 01:33:58 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2017030901/</guid>
      <description>&lt;p&gt;解壓大文件提示存儲空間不足&lt;/p&gt;
&lt;p&gt;下載一個8G大的文件，解壓的時候提示存儲空間不足，一看E盤明明還有20G空間啊，試試解壓到D盤，還是不行，最後不一下全部解壓，把裡面的文件一個一個解壓，這時候沒問題了。這時候終於想到，可能是C盤空間不足的原因(不到7G的剩餘空間)，解壓時會把臨時文件放到C盤，再從臨時文件轉移到目標位置。&lt;/p&gt;
&lt;p&gt;所以說C盤留足空間有時候還是必要的&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>windows遠程桌面設置全屏快捷鍵</title>
      <link>https://deletefromuser.github.io/pgm/2017030801/</link>
      <pubDate>Wed, 08 Mar 2017 01:33:58 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2017030801/</guid>
      <description>&lt;p&gt;windows遠程桌面設置全屏快捷鍵&lt;/p&gt;
&lt;p&gt;在開啟遠程桌面的時候，上方有一個連接欄顯示很煩人，可以通過設置去掉，但是去掉之後就需要使用快捷鍵來返回主機&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;win鍵+R輸入mstsc確定打開遠程桌面設置，點擊左下角顯示選項，來到顯示分頁，將下方全屏時顯示連接欄勾選去掉即可&lt;/li&gt;
&lt;li&gt;在遠程桌面全屏模式下，Ctrl+Alt+Break(筆記本上的pause break)即可將遠程桌面從桌面切換至窗口模式&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://www.moiblog.net/2016/windows-remote-desktop-tools/&#34;&gt;windows远程桌面连接全屏切换快捷键以及其他方便好用的快捷键&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>Git的配置和初级使用</title>
      <link>https://deletefromuser.github.io/pgm/2017030402/</link>
      <pubDate>Sat, 04 Mar 2017 02:33:58 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2017030402/</guid>
      <description>&lt;p&gt;Git的配置和初级使用&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;下载安装Git之后，先把仓库下载下来
&lt;code&gt;git clone https://github.com/rsa2063/rsa2063.github.io&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;在下载下来的文件夹中右键Git Bash Here，当然也有一个Git GUI Here，但是你知道的，有zb需求，还是用命令行吧&lt;/li&gt;
&lt;li&gt;打开命令行后&lt;code&gt;git status&lt;/code&gt;，查看仓库状态，查看仓库是否有未提交的文件，没有的话会显示clean&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;   On branch master
   Your branch is up-to-date with &#39;origin/master&#39;.
   nothing to commit, working tree clean
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;修改或者新增文件后，再调用&lt;code&gt;git status&lt;/code&gt;，untracked files即为还没有添加到仓库的文件&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;On branch master
Your branch is up-to-date with &#39;origin/master&#39;.
Changes not staged for commit:
  (use &amp;quot;git add &amp;lt;file&amp;gt;...&amp;quot; to update what will be committed)
  (use &amp;quot;git checkout -- &amp;lt;file&amp;gt;...&amp;quot; to discard changes in working directory)

        modified:   index2.md

Untracked files:
  (use &amp;quot;git add &amp;lt;file&amp;gt;...&amp;quot; to include in what will be committed)

        post/2017030401.md

no changes added to commit (use &amp;quot;git add&amp;quot; and/or &amp;quot;git commit -a&amp;quot;)
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;添加更改到仓库&lt;code&gt;git add .&lt;/code&gt;，&lt;code&gt;.&lt;/code&gt;表示添加当前文件夹下的所有文件，当然也可以指定文件名
使用默认设置的话，在windows下会有如下警告&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;warning: LF will be replaced by CRLF in index2.md.
The file will have its original line endings in your working directory.
warning: LF will be replaced by CRLF in post/2017030401.md.
The file will have its original line endings in your working directory.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;输入&lt;code&gt;git config --global core.autocrlf false&lt;/code&gt;即可（windows和unix的换行符不一样导致，具体不太清楚）&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;提交到仓库，第一次使用时必须设置邮箱用户名，依照提示设置即可，可随意设置，主要作用好像就是在log里显示提交人，提交时的附加信息是必须的不能为空&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;$ git commit -m &amp;quot;add 2017030401 about wikizh&amp;quot;

*** Please tell me who you are.

Run

  git config --global user.email &amp;quot;you@example.com&amp;quot;
  git config --global user.name &amp;quot;Your Name&amp;quot;

to set your account&#39;s default identity.
Omit --global to set the identity only in this repository.

fatal: empty ident name (for &amp;lt;(NULL)&amp;gt;) not allowed
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;提交到远程仓库&lt;code&gt;git push&lt;/code&gt;,执行后会弹出界面，输入github的用户名密码即可&lt;/li&gt;
&lt;li&gt;总结一下所谓初级使用就是只使用如下几句命令&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;git status
git add .
git commit -m &amp;quot;add 2017030401 about wikizh&amp;quot;
git push
git pull
git clone https://github.com/rsa2063/rsa2063.github.io --这个不太常用
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;ps:markdown使用```代码块的时候上下最好空一行，否则可能显示会有问题&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/git-for-windows/git/releases/download/v2.12.0.windows.1/Git-2.12.0-64-bit.exe&#34;&gt;Git-Windows&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.oschina.net/question/59932_33853&#34;&gt;Git添加文件时出现了一个warning，是什么意思呢？&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;​&lt;a href=&#34;https://stackoverflow.com/questions/5834014/lf-will-be-replaced-by-crlf-in-git-what-is-that-and-is-it-important&#34;&gt;LF will be replaced by CRLF in git - What is that and is it important? &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://zh.wikipedia.org/wiki/%E6%8F%9B%E8%A1%8C&#34;&gt;换行&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://support.ghost.org/installing-ghost-windows/&#34;&gt;在windows中安装ghost&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>如何不翻墙访问维基百科</title>
      <link>https://deletefromuser.github.io/pgm/2017030401/</link>
      <pubDate>Sat, 04 Mar 2017 01:33:58 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2017030401/</guid>
      <description>&lt;p&gt;如何不翻墙访问维基百科&lt;/p&gt;
&lt;p&gt;政府好像没有下定决心要封维基百科，只用了dns污染，其实不用翻墙就可以访问了。办法自然是换一个dns解析服务器，并且使用dnscrypt。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;下载dnscrypt安装，并启用(可安装Simple DNSCrypt)&lt;/li&gt;
&lt;li&gt;设置网络连接的ipv4设置，将dns服务器设为127.0.0.1即可&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://dnscrypt.org&#34;&gt;dnscrypt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://simplednscrypt.org/&#34;&gt;Simple DNSCrypt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://zh.wikipedia.org/wiki/%E5%9F%9F%E5%90%8D%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%BC%93%E5%AD%98%E6%B1%A1%E6%9F%93&#34;&gt;域名服务器缓存污染&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://zh.wikipedia.org/wiki/%E9%98%B2%E7%81%AB%E9%95%BF%E5%9F%8E#.E5.9F.9F.E5.90.8D.E8.A7.A3.E6.9E.90.E6.9C.8D.E5.8A.A1.E7.BC.93.E5.AD.98.E6.B1.A1.E6.9F.93&#34;&gt;防火长城&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://zh.wikipedia.org/wiki/%E5%A1%9E%E5%B0%94%E8%BE%BE%E4%BC%A0%E8%AF%B4_%E8%8D%92%E9%87%8E%E4%B9%8B%E6%81%AF&#34;&gt;塞尔达传说 荒野之息&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>在ubuntu中安裝shadowsocks，美化桌面gdm3</title>
      <link>https://deletefromuser.github.io/pgm/2017030201/</link>
      <pubDate>Thu, 02 Mar 2017 01:33:58 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2017030201/</guid>
      <description>&lt;p&gt;在ubuntu中安裝shadowsocks，美化桌面gdm3&lt;/p&gt;
&lt;h4 id=&#34;安裝shadowsocks&#34;&gt;安裝shadowsocks&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;sudo add-apt-repository ppa:hzwhuang/ss-qt5
sudo apt-get update
sudo apt-get install shadowsocks-qt5
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;gdm3相對原生的來說簡潔一些&#34;&gt;gdm3（相對原生的來說簡潔一些）&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;sudo apt-get install gdm3
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;安裝完後，註銷到登錄界面後點擊登錄框的右上角在選單中選擇gnome即可，登錄後即可看到不一樣的桌面樣式。
gdm3自帶gnome還是怎樣，反正這個可以用，前幾次只裝了gnome，裝完重啟之後系統都啟動不了，一晚上重裝了好幾次系統，直接裝gdm3終於好了&lt;/p&gt;
&lt;p&gt;ps:裝完gdm3之後重啟還是可能開不了機，解決辦法是在開機時按esc進入恢復模式，輸入用戶名密碼之後執行&lt;code&gt;sudo dpkg-reconfigure lightdm&lt;/code&gt;，之後&lt;code&gt;reboot&lt;/code&gt;或者手動重啟即可&lt;/p&gt;
&lt;p&gt;pps：virtualbox中如果ubuntu連不上網，就修改網絡設置改為橋接網卡，直接用主機的網絡，這樣應該就可以了，不過還是不知道為什麼nat為什麼上不了網，前幾次都是可以的&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/shadowsocks/shadowsocks-qt5/wiki/%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97&#34;&gt;ss-qt5安装指南&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://askubuntu.com/questions/829108/what-is-gdm3-kdm-lightdm-how-to-install-and-remove-them&#34;&gt;What is gdm3, kdm, lightdm? How to install and remove them?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://os.51cto.com/art/201403/431720.htm&#34;&gt;如何在 Ubuntu 13.10 中安装 Gnome 3.10？&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://learning-via-master.blogspot.com/2014/11/ubuntu-display-manager.html&#34;&gt;關於 Ubuntu 的 Display Manager 選擇！&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.cnblogs.com/lwm-1988/archive/2011/09/13/2174538.html&#34;&gt;ubuntu创建、删除文件及文件夹，强制清空回收站方法&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://blog.csdn.net/jiangkai_nju/article/details/7418467&#34;&gt; linux下的磁盘状态查看方式&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://askubuntu.com/questions/162075/my-computer-boots-to-a-black-screen-what-options-do-i-have-to-fix-it&#34;&gt;My computer boots to a black screen, what options do I have to fix it?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;​&lt;a href=&#34;https://askubuntu.com/questions/712233/ubuntu-hangs-on-boot-after-installing-gnome&#34;&gt;Ubuntu Hangs on Boot After Installing “gnome”&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://askubuntu.com/questions/336354/virtualbox-suddenly-doesnt-connect-to-networks&#34;&gt;Virtualbox suddenly doesn&amp;rsquo;t connect to networks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>C# using 用法</title>
      <link>https://deletefromuser.github.io/pgm/2017030101/</link>
      <pubDate>Wed, 01 Mar 2017 01:33:58 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2017030101/</guid>
      <description>&lt;p&gt;C# using 用法&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;引入命名空間&lt;code&gt;using System.Threading;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;定義命名空間的別名&lt;code&gt;using Thread = System.Threading;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;using(define class A,B;){use A;}&lt;/code&gt;的形式效果和java中帶資源的try語句很相似
&lt;ul&gt;
&lt;li&gt;using中聲明的對象必須實現IDisposable，且聲明多個對象時類型要一致(也可以直接用IDisposable接口對象來定義對象來規避)；而java中帶資源的try語句也類似，&lt;code&gt;try(define A,B){use A,B}catch(){]&lt;/code&gt;中的對象也必須實現AutoCloseable或者Closeable接口，但是不要求類型一致&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;http://blog.csdn.net/wanderocn/article/details/6659811&#34;&gt;C#-using用法详解&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.cnblogs.com/prince1988/archive/2009/03/29/1424479.html&#34;&gt;c# using 关键字的用法&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.csharp-examples.net/using/&#34;&gt;C# Using Statement Examples&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://msdn.microsoft.com/zh-cn/library/yh598w02.aspx&#34;&gt;using 语句（C# 参考）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://blog.csdn.net/u012421846/article/details/46129237&#34;&gt;带资源的try语句&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Java核心技術 11.2.4 帶資源的try語句&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    
    <item>
      <title>在windows中添加自啟動</title>
      <link>https://deletefromuser.github.io/pgm/2017022704/</link>
      <pubDate>Mon, 27 Feb 2017 04:33:58 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2017022704/</guid>
      <description>&lt;p&gt;在windows中添加自啟動&lt;/p&gt;
&lt;p&gt;在&lt;code&gt;C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup&lt;/code&gt;目錄下放入要開機啟動程序的快捷方式即可&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>ubuntu系統安裝</title>
      <link>https://deletefromuser.github.io/pgm/2017022703/</link>
      <pubDate>Mon, 27 Feb 2017 03:33:58 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2017022703/</guid>
      <description>&lt;p&gt;ubuntu系統安裝&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;下載系統鏡像並製作U盘啟動盤&lt;/li&gt;
&lt;li&gt;插入，按下開機鍵後連按esc鍵，選擇U盘啟動&lt;/li&gt;
&lt;li&gt;第一步選擇語言（不知道為什麼選擇漢語之後看不到下面的按鈕，只好選擇英語）&lt;/li&gt;
&lt;li&gt;第二步一般不勾選安裝第三方軟件，點擊繼續&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;第三步要選擇安裝類型，選擇其他選項，自己選擇安裝分區&lt;/strong&gt;                                         *  &lt;strong&gt;如果已經有了windows系統，會有與windows共存的選項，不要選這個（第一次沒注意選的這個，沒有安裝成功但是grub倒是安裝成功了，重啟時還以為把windows搞掛了）&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;第四部選擇要安裝的分區，點擊更改，選擇ext4，掛載點輸入&lt;code&gt;\&lt;/code&gt;,勾選格式化此分區，安裝之前記得將該分區有用數據備份，點擊確定&lt;/li&gt;
&lt;li&gt;之後一路繼續，選擇地區、鍵盤、用戶名、計算機名、密碼，之後等待系統安裝完成即可&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;安裝之後由於ubuntu系統所在分區是ext4格式分區，所以在windows下能看到盤符但是打不開，可下載 &lt;a href=&#34;http://www.ext2fsd.com/&#34;&gt;Ext2Fsd&lt;/a&gt; 安裝即可&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://teliute.org/linux/Ubsetup/lesson21/lesson21.html&#34;&gt;Ubuntu安装基础教程&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://snailvfx.github.io/2016/03/31/install-ubuntu/&#34;&gt;geek第一步：安装Ubuntu系统&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.ext2fsd.com/&#34;&gt;Ext2Fsd&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.zhihu.com/question/21281805&#34;&gt;如何在Windows系统中访问Linux分区的文件？&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://linuxtoy.org/archives/read-ext4-in-windows.html&#34;&gt;在Windows下读取Ext4分区&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>如何用U盘製作啟動盤</title>
      <link>https://deletefromuser.github.io/pgm/2017022702/</link>
      <pubDate>Mon, 27 Feb 2017 02:33:58 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2017022702/</guid>
      <description>&lt;p&gt;如何用U盘製作啟動盤&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;備份U盘中的文件&lt;/li&gt;
&lt;li&gt;下載Rufus&lt;/li&gt;
&lt;li&gt;插入U盘並打開程序&lt;/li&gt;
&lt;li&gt;選擇分區方案（先選的mbr分區方案用於bios或uefi的計算機，結果啟動時找不到。用第二個用於uefi計算機的mbr分區方案又做了一遍，這次可行）&lt;/li&gt;
&lt;li&gt;選擇系統iso鏡像（下載鏡像時記得校驗SHA256值）&lt;/li&gt;
&lt;li&gt;點擊開始，等待製作完成&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://rufus.akeo.ie/&#34;&gt;Rufus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://elementary.io/zh_CN/docs/installation#creating-an-installation-medium&#34;&gt;elementary OS 安裝指導&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>用網線連接連接兩台電腦進行文件傳輸</title>
      <link>https://deletefromuser.github.io/pgm/2017022701/</link>
      <pubDate>Mon, 27 Feb 2017 01:33:58 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2017022701/</guid>
      <description>&lt;p&gt;用網線連接連接兩台電腦進行文件傳輸&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;修改兩台電腦的本地連接設置，ipv4設置到一個網段下&lt;/li&gt;
&lt;li&gt;關閉防火牆&lt;/li&gt;
&lt;li&gt;在高級共享設置中啟用網絡發現&lt;/li&gt;
&lt;li&gt;連接網線&lt;/li&gt;
&lt;li&gt;將要傳輸的文件所在的文件夾設置為共享&lt;/li&gt;
&lt;li&gt;done 此時就可以在資源管理器的網絡裡找到對應計算機以及文件進行複製了&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;ps:找這個主要是為了把steam遊戲搬到新電腦上，比無線局域網快一些，但是比不是移動硬盤的速度（才11m，我的移動硬盤不是固態的，速度都能達到50m）&lt;/p&gt;
&lt;p&gt;pps:才11m應該是通過無線局域網的速度，網線可以達到50m速度&lt;/p&gt;
&lt;p&gt;&amp;ndash;2017 03-06 22:35 updated&lt;/p&gt;
&lt;p&gt;才幾天時間，照著上面的都搞了一遍還是不行，找到了通過ip來查看的方法&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;輸入&lt;code&gt;\\192.168.3.85&lt;/code&gt;在資源管理器中輸入兩個斜桿加目標電腦的ip&lt;/li&gt;
&lt;li&gt;順利的話可以看到該台電腦的共享目錄，點開其中一些可能會發現有些可以點進去查看，有些不可以，提示不可訪問之類的&lt;/li&gt;
&lt;li&gt;這時可以在目標電腦上設置共享目錄的安全屬性，在目錄上右擊菜單在屬性分頁-安全分頁-點擊編輯-添加組或用戶名-在對象名稱中輸入everyone後確定-應用&lt;/li&gt;
&lt;li&gt;此時應該就可以打開該目錄了&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&#34;通過遠程桌面訪問&#34;&gt;通過遠程桌面訪問&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;在目標電腦中，控制面板-系統與安全-系統-允許遠程訪問-選擇允許任意版本的遠程桌面連接&lt;/li&gt;
&lt;li&gt;在本機上win鍵+R，輸入mstsc&lt;/li&gt;
&lt;li&gt;輸入目標電腦的ip&lt;/li&gt;
&lt;li&gt;點擊連接，會讓你輸入用戶名密碼，輸入即可&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;ps:不知道為什麼連上聽音樂看視頻時有雜音，維基上說有聲音轉向功能，不太清楚怎麼設置&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://hatayikakashi.blog.51cto.com/2145131/1289633&#34;&gt;一根网线连接两台计算机组成局域网——数据传输&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://support.microsoft.com/zh-cn/help/17463/windows-7-connect-to-another-computer-remote-desktop-connection&#34;&gt;使用“远程桌面连接”连接到另一台计算机&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://zh.wikipedia.org/wiki/%E9%81%A0%E7%AB%AF%E6%A1%8C%E9%9D%A2%E5%8D%94%E5%AE%9A&#34;&gt;遠端桌面協定&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://social.technet.microsoft.com/Forums/windows/en-US/04dd2c48-7c37-4f05-9c38-71e4c1c8c8bf/how-to-enable-audio-redirection-in-remote-desktop?forum=w7itprogeneral&#34;&gt;How to enable audio redirection in Remote Desktop&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://support.microsoft.com/en-us/help/2020918/configure-audio-recording-redirection-in-windows-7&#34;&gt;Configure Audio Recording Redirection in Windows 7&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>sqlserver row_number() 函數的用法</title>
      <link>https://deletefromuser.github.io/pgm/2017022301/</link>
      <pubDate>Thu, 23 Feb 2017 01:33:58 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2017022301/</guid>
      <description>&lt;p&gt;sqlserver row_number() 函數的用法&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; fruit_month_price;

&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;
       , row_number() over (partition &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; name &lt;span style=&#34;color:#66d9ef&#34;&gt;order&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;year&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;month&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; sn 
&lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; fruit_month_price
&lt;span style=&#34;color:#66d9ef&#34;&gt;order&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; name,&lt;span style=&#34;color:#66d9ef&#34;&gt;year&lt;/span&gt;,&lt;span style=&#34;color:#66d9ef&#34;&gt;month&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img src=&#34;https://i.imgur.com/zCSwo8C.jpg&#34; alt=&#34;result&#34;&gt;&lt;/p&gt;
&lt;p&gt;上面代碼中意為以字段name分組，每組內部以字段year、month（默認升序）排序為每個記錄順序編號，如果partition by columnName不要的話則會把全部記錄當成一組來編號。&lt;/p&gt;
&lt;p&gt;最大作用就是表示行號，今天寫視圖就碰到了，需要給表格每一行編號，在實際中用過一次對理解有很大幫助啊，這個記得學過好多次，結果用的時候還是需要google。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;http://www.cnblogs.com/fxgachiever/archive/2010/09/15/1826792.html&#34;&gt;ROW_NUMBER() OVER函数的基本用法&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    
    <item>
      <title>outer apply 和 left join 再辨析</title>
      <link>https://deletefromuser.github.io/pgm/2017022001/</link>
      <pubDate>Mon, 20 Feb 2017 01:33:58 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2017022001/</guid>
      <description>&lt;p&gt;outer apply 和 left join 再辨析&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;過濾條件位置不同（看下面例子可以看出來）&lt;/li&gt;
&lt;li&gt;outer apply可以較方便地實現控制參照表參照記錄的個數，left join稍微麻煩一些&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;下面要實現一個需求，現在有兩個表，一個作者表（裡面主要有作者名稱字段、作者id字段）、還有一個書籍表（主要有書籍名稱、作者id、價格）。現在我們需要找出查出作者信息，同時要參照出該作者所寫書籍中價格最高的一本書的名字、價格。&lt;/p&gt;
&lt;p&gt;mssql&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;--加查詢條件是為了顯示效果，去掉沒用的記錄
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;--兩個表的信息 圖一
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; author &lt;span style=&#34;color:#66d9ef&#34;&gt;where&lt;/span&gt; author_id &lt;span style=&#34;color:#66d9ef&#34;&gt;in&lt;/span&gt; (&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;);
&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; book &lt;span style=&#34;color:#66d9ef&#34;&gt;where&lt;/span&gt; author_id &lt;span style=&#34;color:#66d9ef&#34;&gt;in&lt;/span&gt; (&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;) 
&lt;span style=&#34;color:#66d9ef&#34;&gt;order&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; author_id,price &lt;span style=&#34;color:#66d9ef&#34;&gt;desc&lt;/span&gt;;
&lt;span style=&#34;color:#75715e&#34;&gt;--outer apply實現 圖二 上
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; main.&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;isnull&lt;/span&gt;(sub.book_name, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; book_name, &lt;span style=&#34;color:#66d9ef&#34;&gt;isnull&lt;/span&gt;(sub.price, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; price
&lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; author main
&lt;span style=&#34;color:#66d9ef&#34;&gt;outer&lt;/span&gt; apply (&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; top &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; book_name, price 
           &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; book s 
		   &lt;span style=&#34;color:#66d9ef&#34;&gt;where&lt;/span&gt; s.author_id &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; main.author_id
		   &lt;span style=&#34;color:#66d9ef&#34;&gt;order&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; price
) sub
&lt;span style=&#34;color:#66d9ef&#34;&gt;where&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;isnull&lt;/span&gt;(sub.price, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;
&lt;span style=&#34;color:#75715e&#34;&gt;--left join實現 圖二下
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; main.&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;isnull&lt;/span&gt;(sub.book_name, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; book_name, &lt;span style=&#34;color:#66d9ef&#34;&gt;isnull&lt;/span&gt;(sub.price, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; price
&lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; author main
&lt;span style=&#34;color:#66d9ef&#34;&gt;left&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;join&lt;/span&gt; book sub &lt;span style=&#34;color:#66d9ef&#34;&gt;on&lt;/span&gt; sub.author_id &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; main.author_id
                      &lt;span style=&#34;color:#66d9ef&#34;&gt;and&lt;/span&gt; sub.id &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; top &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; s.id 
					                &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; book s
									&lt;span style=&#34;color:#66d9ef&#34;&gt;where&lt;/span&gt; s.author_id &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; main.author_id)
&lt;span style=&#34;color:#66d9ef&#34;&gt;where&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;isnull&lt;/span&gt;(sub.price, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;
&lt;span style=&#34;color:#75715e&#34;&gt;--錯誤語句 
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; main.&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;,sub.book_name
&lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; author main
&lt;span style=&#34;color:#66d9ef&#34;&gt;left&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;join&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; top &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; book_name 
           &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; book s 
		   &lt;span style=&#34;color:#66d9ef&#34;&gt;where&lt;/span&gt; s.author_id &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; main.author_id &lt;span style=&#34;color:#75715e&#34;&gt;--无法绑定由多个部分组成的标识符 &amp;#34;main.author_id&amp;#34;。可看出在這個位置獲取不到主表的數據
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;) sub &lt;span style=&#34;color:#66d9ef&#34;&gt;on&lt;/span&gt; (&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;);
&lt;span style=&#34;color:#75715e&#34;&gt;--在outer apply的別名後也不能再進行過濾了
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; main.&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;isnull&lt;/span&gt;(sub.book_name, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; book_name, &lt;span style=&#34;color:#66d9ef&#34;&gt;isnull&lt;/span&gt;(sub.price, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; price
&lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; author main
&lt;span style=&#34;color:#66d9ef&#34;&gt;outer&lt;/span&gt; apply (&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; top &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; book_name, price 
           &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; book s 
		   &lt;span style=&#34;color:#66d9ef&#34;&gt;where&lt;/span&gt; s.author_id &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; main.author_id
		   &lt;span style=&#34;color:#66d9ef&#34;&gt;order&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; price
) sub &lt;span style=&#34;color:#66d9ef&#34;&gt;on&lt;/span&gt; (&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;)&lt;span style=&#34;color:#75715e&#34;&gt;--該處有語法錯誤
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;where&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;isnull&lt;/span&gt;(sub.price, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;

&lt;span style=&#34;color:#75715e&#34;&gt;--參照表更新表數據的方式 雖然下面語句參照完全沒有必要
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;update&lt;/span&gt; main
&lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt; main.age &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; main.age &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; author main
&lt;span style=&#34;color:#66d9ef&#34;&gt;inner&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;join&lt;/span&gt; book sub &lt;span style=&#34;color:#66d9ef&#34;&gt;on&lt;/span&gt; sub.author_id &lt;span style=&#34;color:#66d9ef&#34;&gt;in&lt;/span&gt; (&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;) 
           &lt;span style=&#34;color:#66d9ef&#34;&gt;and&lt;/span&gt; main.author_id &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; sub.author_id;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img src=&#34;https://i.imgur.com/ODO8msP.jpg&#34; alt=&#34;圖一&#34;&gt;
&lt;img src=&#34;https://i.imgur.com/0IiKvF6.jpg&#34; alt=&#34;圖二&#34;&gt;&lt;/p&gt;
&lt;p&gt;mysql&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;create&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;table&lt;/span&gt; fruit(
fruit_name char(&lt;span style=&#34;color:#ae81ff&#34;&gt;40&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;not&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;,
fruit_id int(&lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;not&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;,
id int &lt;span style=&#34;color:#66d9ef&#34;&gt;not&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt; auto_increment,
&lt;span style=&#34;color:#66d9ef&#34;&gt;primary&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;key&lt;/span&gt;(id)
)
&lt;span style=&#34;color:#75715e&#34;&gt;/*關閉安全更新模式，同時參照子表更新主表*/&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt; sql_safe_updates &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;
&lt;span style=&#34;color:#66d9ef&#34;&gt;update&lt;/span&gt; fruit_month_price main
&lt;span style=&#34;color:#66d9ef&#34;&gt;inner&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;join&lt;/span&gt; fruit sub &lt;span style=&#34;color:#66d9ef&#34;&gt;on&lt;/span&gt; sub.fruit_name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; main.name
&lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt; main.fruit_id &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; sub.fruit_id;
&lt;span style=&#34;color:#75715e&#34;&gt;/*查詢水果表，並參照出價格價格最高所在記錄的數量和價格*/&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; main.&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;, ifnull(sub.num, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; num, ifnull(sub.price, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; price
&lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; fruit main
&lt;span style=&#34;color:#66d9ef&#34;&gt;left&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;join&lt;/span&gt; fruit_month_price sub &lt;span style=&#34;color:#66d9ef&#34;&gt;on&lt;/span&gt; main.fruit_id &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; sub.fruit_id
								   &lt;span style=&#34;color:#66d9ef&#34;&gt;and&lt;/span&gt; sub.id &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; id &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; fruit_month_price s
                                                  &lt;span style=&#34;color:#66d9ef&#34;&gt;where&lt;/span&gt; s.fruit_id &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; main.fruit_id
                                                  &lt;span style=&#34;color:#66d9ef&#34;&gt;order&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; price &lt;span style=&#34;color:#66d9ef&#34;&gt;desc&lt;/span&gt;
                                                  &lt;span style=&#34;color:#66d9ef&#34;&gt;limit&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/3348705/how-to-limit-results-of-a-left-join&#34;&gt;How to limit results of a LEFT JOIN&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/15626493/left-join-only-first-row&#34;&gt;LEFT JOIN only first row&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/9588423/sql-server-inner-join-when-updating&#34;&gt;SQL Server - inner join when updating [duplicate]&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/8057565/mysql-update-statement-inner-join-tables&#34;&gt;MYSQL Update Statement Inner Join Tables&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/11448068/mysql-error-code-1175-during-update-in-mysql-workbench&#34;&gt;MySQL error code: 1175 during UPDATE in MySQL Workbench&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.cnblogs.com/JuneZhang/archive/2010/08/26/1809306.html&#34;&gt;MySql 里的IFNULL、NULLIF和ISNULL用法&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    
    <item>
      <title>java 函数返回多个函数值/引用類型認識</title>
      <link>https://deletefromuser.github.io/pgm/2017021902/</link>
      <pubDate>Sun, 19 Feb 2017 02:33:58 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2017021902/</guid>
      <description>&lt;p&gt;java 函数返回多个函数值/引用類型認識&lt;/p&gt;
&lt;p&gt;開宗明義，Java中函數的參數傳遞都是值傳遞，不存在引用傳遞。基本數據類型傳遞的是本身的值，而引用類型（對象，數組等）傳遞的同樣值，但是是引用的地址的值。同樣，我們知道值傳遞時，在函數內的改變不影響原參數的值，很好理解（在函數內將int類型自增，執行函數後，原值不會改變）。同樣，套用到引用類型參數時，在函數內引用的改變不影響原來對象的引用。也就是說，如果將傳入的對象重新賦值亦即引用改變，不會影響原來的對象。但是如果在函數內部，在不改變傳入參數的引用的同時，修改對象，這種情況下就修改了原對象，亦即實現了引用傳值。&lt;/p&gt;
&lt;p&gt;比如，傳入Integer、String對象時，由於他們沒有改變自身的方法，當重新賦值時，自身的引用發生了改變，因此在函數內改變它們的值，也不會傳遞到函數外。但是如果你傳入一個int或者Object類型的數組（引用類型），並且在函數內改變數組內某一項的值，只要不在函數內重新新建數組（改變了引用），對數組的改變就會導致函數外的數組改變。當對數組某項重新賦值時，就算此時改變了這一個對象的引用，但是整個數組的引用並沒有因此改變。舉例（可能不對，應該是沒錯的）一個大小為2的對象數組，這個數組中三個引用，其中整個對象A的引用為a，其中A指向數組內兩個對象的引用B-&amp;gt;b和C-c，此時對B重新賦值B-&amp;gt;d，傳入對象A的引用仍然是a，這種情況下改變就會作用到數組本身了。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;boolean&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;methodLikeCSharpOutParam&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[]&lt;/span&gt; result&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
	result&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;0&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; 1&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;
	&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;boolean&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;methodLikeCSharpOutParamByO&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;Integer ob&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
	ob &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; 1&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;
	&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;boolean&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;methodLikeCSharpOutParamByOs&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;Object&lt;span style=&#34;color:#f92672&#34;&gt;[]&lt;/span&gt; os&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
	os&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;0&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; 1&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;
	&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;//...
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[]&lt;/span&gt; i &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;1&lt;span style=&#34;color:#f92672&#34;&gt;];&lt;/span&gt;
System&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;out&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;println&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;int[] before i is &amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; i&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;0&lt;span style=&#34;color:#f92672&#34;&gt;]);&lt;/span&gt;
ClassMethodTest&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;methodLikeCSharpOutParam&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;i&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;
System&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;out&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;println&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;int[] after i is &amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; i&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;0&lt;span style=&#34;color:#f92672&#34;&gt;]);&lt;/span&gt;
Integer io &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; Integer&lt;span style=&#34;color:#f92672&#34;&gt;(-&lt;/span&gt;1&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;
System&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;out&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;println&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;object before i is &amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; io&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;
ClassMethodTest&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;methodLikeCSharpOutParamByO&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;io&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;
System&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;out&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;println&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;object after i is &amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; io&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;
Object&lt;span style=&#34;color:#f92672&#34;&gt;[]&lt;/span&gt; os &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; Object&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;2&lt;span style=&#34;color:#f92672&#34;&gt;];&lt;/span&gt;
os&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;0&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;1&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;
System&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;out&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;println&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;object[] before i is &amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; os&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;0&lt;span style=&#34;color:#f92672&#34;&gt;].&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;toString&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;());&lt;/span&gt;
ClassMethodTest&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;methodLikeCSharpOutParamByOs&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;os&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;
System&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;out&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;println&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;object[] after i is &amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; os&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;0&lt;span style=&#34;color:#f92672&#34;&gt;].&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;toString&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;());&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;/* output
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;int[] before i is 0
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;int[] after i is 1
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;object before i is -1
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;object after i is -1
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;object[] before i is -1
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;object[] after i is 1
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;*/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;c++&lt;/p&gt;
&lt;p&gt;不管是基本數據類型還是類，只要不使用引用或者指針，參數傳遞都是值傳遞，函數內的改變不會作用于函數外。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;item&lt;/span&gt; {
&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt;
	&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; x;
	&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; y;
	item() {
		x &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;
		y &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;
	}
};
&lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;add&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; i) {
	i&lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt;;
	&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt;;
}
&lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;addd&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt; i) {
	i &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;;
	&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt;;
}
&lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;adddd&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; i) {
	&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;i &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;;
	&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt;;
}
&lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;change&lt;/span&gt;(item i) {
	i.x &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;;
	cout&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;i.x&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;endl;
}
&lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;changeRef&lt;/span&gt;(item&lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt; i) {
	i.x &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;;
	cout&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;i.x&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;endl;
}
&lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;changePoi&lt;/span&gt;(item&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; i) {
	i&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;x &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;;
	cout&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;i&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;x&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;endl;
}

&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {
	&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; i &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;
	cout&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;before &amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;i&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;endl;
	adddd(&lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;i);
	cout&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;after &amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;i&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;endl;

	item it;
	cout&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;item before &amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;it.x&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;endl;
	&lt;span style=&#34;color:#75715e&#34;&gt;//change(it);
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;	&lt;span style=&#34;color:#75715e&#34;&gt;//changeRef(it);
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;	changePoi(&lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;it);
	cout&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;item after &amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;it.x&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;endl;

	system(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;PAUSE&amp;#34;&lt;/span&gt;);
	&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;2、3年沒寫過C++代碼連helloworld都不會寫了，還要查資料，在這個main文件裡，在main函數中調用的函數必須要在main函數之上定義，不太懂為什麼。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://www.zhihu.com/question/31203609&#34;&gt;java到底是值传递还是引用传递？&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://tjuking.iteye.com/blog/1405532&#34;&gt;Java中参数传递类型只有值传递&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://flyfoxs.iteye.com/blog/2071984&#34;&gt;JAVA函数可以修改传入的变量吗?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://blog.csdn.net/javazejian/article/details/51192130&#34;&gt;java基本数据类型传递与引用传递区别详解&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.cnblogs.com/luosongchao/p/3298150.html&#34;&gt;java对象数组&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://blog.csdn.net/maoyeqiu/article/details/49249871&#34;&gt;java 函数返回多个函数值&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.dewen.net.cn/q/8567/%E5%A6%82%E4%BD%95%E4%B8%8D%E9%80%9A%E8%BF%87%E6%95%B0%E7%BB%84%E8%BF%94%E5%9B%9E%E5%A4%9A%E4%B8%AA%E5%80%BC%EF%BC%9F&#34;&gt;如何不通过数组返回多个值？&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.zhihu.com/question/31203609&#34;&gt;java到底是值传递还是引用传递？&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://flyfoxs.iteye.com/blog/2071984&#34;&gt;JAVA函数可以修改传入的变量吗?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.zhihu.com/question/34904653&#34;&gt;Java对于修改Integer变量值的问题？&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://bbs.csdn.net/topics/360204849&#34;&gt;java中如何将Object类型转换为int类型 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.cnblogs.com/youxin/p/5388436.html&#34;&gt;Java 类型转换以及Object转成其他类型&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://blog.csdn.net/javazejian/article/details/51192130&#34;&gt;java基本数据类型传递与引用传递区别详解&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    
    <item>
      <title>sql獲取水果價格表中每種水果在一年內的最高價格所在月份</title>
      <link>https://deletefromuser.github.io/pgm/2017021901/</link>
      <pubDate>Sun, 19 Feb 2017 01:33:58 +0800</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2017021901/</guid>
      <description>&lt;p&gt;sql獲取水果價格表中每種水果在一年內的最高價格所在月份&lt;/p&gt;
&lt;p&gt;mysql&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;CREATE&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;TABLE&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;`&lt;/span&gt;fruit_month_price&lt;span style=&#34;color:#f92672&#34;&gt;`&lt;/span&gt; (
  &lt;span style=&#34;color:#f92672&#34;&gt;`&lt;/span&gt;name&lt;span style=&#34;color:#f92672&#34;&gt;`&lt;/span&gt; char(&lt;span style=&#34;color:#ae81ff&#34;&gt;20&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;NOT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;NULL&lt;/span&gt;,
  &lt;span style=&#34;color:#f92672&#34;&gt;`&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;year&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;`&lt;/span&gt; int(&lt;span style=&#34;color:#ae81ff&#34;&gt;11&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;NOT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;NULL&lt;/span&gt;,
  &lt;span style=&#34;color:#f92672&#34;&gt;`&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;month&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;`&lt;/span&gt; int(&lt;span style=&#34;color:#ae81ff&#34;&gt;11&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;NOT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;NULL&lt;/span&gt;,
  &lt;span style=&#34;color:#f92672&#34;&gt;`&lt;/span&gt;price&lt;span style=&#34;color:#f92672&#34;&gt;`&lt;/span&gt; float &lt;span style=&#34;color:#66d9ef&#34;&gt;NOT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;NULL&lt;/span&gt;,
  &lt;span style=&#34;color:#f92672&#34;&gt;`&lt;/span&gt;id&lt;span style=&#34;color:#f92672&#34;&gt;`&lt;/span&gt; int(&lt;span style=&#34;color:#ae81ff&#34;&gt;11&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;NOT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;NULL&lt;/span&gt; AUTO_INCREMENT,
  &lt;span style=&#34;color:#66d9ef&#34;&gt;KEY&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;`&lt;/span&gt;id&lt;span style=&#34;color:#f92672&#34;&gt;`&lt;/span&gt; (&lt;span style=&#34;color:#f92672&#34;&gt;`&lt;/span&gt;id&lt;span style=&#34;color:#f92672&#34;&gt;`&lt;/span&gt;)
) ENGINE&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;InnoDB AUTO_INCREMENT&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;17&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;DEFAULT&lt;/span&gt; CHARSET&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;utf8;

&lt;span style=&#34;color:#66d9ef&#34;&gt;insert&lt;/span&gt; fruit_month_price(name, &lt;span style=&#34;color:#66d9ef&#34;&gt;year&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;month&lt;/span&gt;, price)
&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;apple&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;2017&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;11&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;union&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;apple&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;2015&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;8&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;7&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;union&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;apple&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;2017&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;9&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;union&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;apple&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;2015&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;37&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;union&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;orange&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;2011&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;11&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;368&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;union&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;orange&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;2015&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;11&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;14&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;union&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;orange&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;2014&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;11&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;8&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;union&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;banana&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;2016&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;11&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;union&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;banana&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1993&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;11&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;68&lt;/span&gt;
...
&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; main.&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; fruit_month_price main
&lt;span style=&#34;color:#66d9ef&#34;&gt;where&lt;/span&gt; id &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;
(
	&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; id &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; fruit_month_price sub
    &lt;span style=&#34;color:#66d9ef&#34;&gt;where&lt;/span&gt; sub.name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; main.name &lt;span style=&#34;color:#66d9ef&#34;&gt;and&lt;/span&gt; main.&lt;span style=&#34;color:#66d9ef&#34;&gt;year&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; sub.&lt;span style=&#34;color:#66d9ef&#34;&gt;year&lt;/span&gt;
    &lt;span style=&#34;color:#66d9ef&#34;&gt;order&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; price &lt;span style=&#34;color:#66d9ef&#34;&gt;desc&lt;/span&gt;
	&lt;span style=&#34;color:#66d9ef&#34;&gt;limit&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
) 
&lt;span style=&#34;color:#66d9ef&#34;&gt;order&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; name,&lt;span style=&#34;color:#66d9ef&#34;&gt;year&lt;/span&gt;,&lt;span style=&#34;color:#66d9ef&#34;&gt;month&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;/*加字段*/&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;alter&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;table&lt;/span&gt; fruit_month_price &lt;span style=&#34;color:#66d9ef&#34;&gt;add&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;column&lt;/span&gt; num float &lt;span style=&#34;color:#66d9ef&#34;&gt;not&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;default&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;
&lt;span style=&#34;color:#75715e&#34;&gt;/*創建存儲過程，更新字段
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;每個語句結束後都必須加&amp;#39;;&amp;#39;
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;set語句必須位於所有的declare語句的後面，不然會報語法錯誤
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;declare i int(20);
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;set i = 0;
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;declare finished int(2);//報錯
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;declare語句好像只能在只能在存儲過程以及函數裡面使用（cursor確實是，這個好像是）
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;(也就是說享用cursor遍歷一個表必須創建一個存儲過程或函數？)
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;declare聲明變量時不帶@符號，可以用set @i = 3直接聲明變量@i
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;由於不帶@所以變量名盡量不要與查詢的表的列名相同
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;賦值符號有兩種=和:=，set是=即可，select賦值時使用:=（此時=被用作比較運算符）
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;set @i = 2;
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;select @i = 3;#0
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;select @i = 2;#1
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;select @i;    #2
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;select @i := 3;#3
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;select @i;    #3
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;*/&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;drop&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;procedure&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;exists&lt;/span&gt; test;
&lt;span style=&#34;color:#66d9ef&#34;&gt;delimiter&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;//&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;create&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;procedure&lt;/span&gt; test()
&lt;span style=&#34;color:#66d9ef&#34;&gt;begin&lt;/span&gt;

  &lt;span style=&#34;color:#66d9ef&#34;&gt;declare&lt;/span&gt; i int(&lt;span style=&#34;color:#ae81ff&#34;&gt;20&lt;/span&gt;);
  &lt;span style=&#34;color:#66d9ef&#34;&gt;declare&lt;/span&gt; finished int(&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;);
  &lt;span style=&#34;color:#66d9ef&#34;&gt;declare&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;c&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;cursor&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; id &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; fruit_month_price;
  &lt;span style=&#34;color:#66d9ef&#34;&gt;declare&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;continue&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;handler&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;not&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;found&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt; finished &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;
  &lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt; finished &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;
  &lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt; i &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;

  &lt;span style=&#34;color:#66d9ef&#34;&gt;open&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;c&lt;/span&gt;;
  &lt;span style=&#34;color:#66d9ef&#34;&gt;fetch&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;c&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;into&lt;/span&gt; i;
  while finished &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt;
	&lt;span style=&#34;color:#66d9ef&#34;&gt;update&lt;/span&gt; fruit_month_price &lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt; num &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; round(rand() &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;where&lt;/span&gt; id &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; i;
	&lt;span style=&#34;color:#66d9ef&#34;&gt;fetch&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;c&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;into&lt;/span&gt; i;
  &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt; while;
  &lt;span style=&#34;color:#66d9ef&#34;&gt;close&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;c&lt;/span&gt;;
&lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;//&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;delimiter&lt;/span&gt; ;
&lt;span style=&#34;color:#75715e&#34;&gt;/*調用存儲過程*/&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;call&lt;/span&gt; test()
&lt;span style=&#34;color:#75715e&#34;&gt;/*按水果名+年份統計
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;where條件中子查詢加了limit之後報錯
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;This version of MySQL doesn&amp;#39;t yet support &amp;#39;LIMIT &amp;amp; IN/ALL/ANY/SOME subquery&amp;#39;
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;在這裡in和=效果差不多好像*/&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; main.&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;,sumA.amount
&lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; fruit_month_price main
&lt;span style=&#34;color:#66d9ef&#34;&gt;left&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;join&lt;/span&gt; (
    &lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; name,&lt;span style=&#34;color:#66d9ef&#34;&gt;year&lt;/span&gt;,&lt;span style=&#34;color:#66d9ef&#34;&gt;sum&lt;/span&gt;(num &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; price) &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; amount
	&lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; fruit_month_price
	&lt;span style=&#34;color:#66d9ef&#34;&gt;group&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; name,&lt;span style=&#34;color:#66d9ef&#34;&gt;year&lt;/span&gt;
) sumA &lt;span style=&#34;color:#66d9ef&#34;&gt;on&lt;/span&gt; sumA.name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; main.name &lt;span style=&#34;color:#66d9ef&#34;&gt;and&lt;/span&gt; sumA.&lt;span style=&#34;color:#66d9ef&#34;&gt;year&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; main.&lt;span style=&#34;color:#66d9ef&#34;&gt;year&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;where&lt;/span&gt; main.id &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; 
(
	&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; id &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; fruit_month_price sub
    &lt;span style=&#34;color:#66d9ef&#34;&gt;where&lt;/span&gt; sub.name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; main.name &lt;span style=&#34;color:#66d9ef&#34;&gt;and&lt;/span&gt; sub.&lt;span style=&#34;color:#66d9ef&#34;&gt;year&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; main.&lt;span style=&#34;color:#66d9ef&#34;&gt;year&lt;/span&gt;
    &lt;span style=&#34;color:#66d9ef&#34;&gt;order&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; price &lt;span style=&#34;color:#66d9ef&#34;&gt;desc&lt;/span&gt;
    &lt;span style=&#34;color:#66d9ef&#34;&gt;limit&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
)
&lt;span style=&#34;color:#66d9ef&#34;&gt;order&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; main.name,main.&lt;span style=&#34;color:#66d9ef&#34;&gt;year&lt;/span&gt;,main.&lt;span style=&#34;color:#66d9ef&#34;&gt;month&lt;/span&gt;;

&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; main.&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; fruit_month_price main
&lt;span style=&#34;color:#66d9ef&#34;&gt;order&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; name,&lt;span style=&#34;color:#66d9ef&#34;&gt;year&lt;/span&gt;;
&lt;span style=&#34;color:#75715e&#34;&gt;/*具體作用不太清楚，創建語句時出錯，一直在查詢不結束時，重連數據庫
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;運行語句，用id殺掉第一條*/&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;show&lt;/span&gt; processlist;
kill &lt;span style=&#34;color:#ae81ff&#34;&gt;74&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;mssql&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;CREATE&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;TABLE&lt;/span&gt; [dbo].[fruit_month_price](
	[name] [varchar](&lt;span style=&#34;color:#ae81ff&#34;&gt;20&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;NOT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;NULL&lt;/span&gt;,
	[&lt;span style=&#34;color:#66d9ef&#34;&gt;year&lt;/span&gt;] [int] &lt;span style=&#34;color:#66d9ef&#34;&gt;NOT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;NULL&lt;/span&gt;,
	[&lt;span style=&#34;color:#66d9ef&#34;&gt;month&lt;/span&gt;] [int] &lt;span style=&#34;color:#66d9ef&#34;&gt;NOT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;NULL&lt;/span&gt;,
	[price] [float] &lt;span style=&#34;color:#66d9ef&#34;&gt;NOT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;NULL&lt;/span&gt;,
	[id] [int] &lt;span style=&#34;color:#66d9ef&#34;&gt;IDENTITY&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;NOT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;NULL&lt;/span&gt;,
	&lt;span style=&#34;color:#66d9ef&#34;&gt;primary&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;key&lt;/span&gt; clustered(id &lt;span style=&#34;color:#66d9ef&#34;&gt;asc&lt;/span&gt;)
)
&lt;span style=&#34;color:#75715e&#34;&gt;--drop table fruit_month_price
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;--查詢每種水果每年的最高價格
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; main.&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; fruit_month_price main
&lt;span style=&#34;color:#66d9ef&#34;&gt;where&lt;/span&gt; id &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; 
(
	&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; top &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; id &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; fruit_month_price sub
    &lt;span style=&#34;color:#66d9ef&#34;&gt;where&lt;/span&gt; sub.name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; main.name &lt;span style=&#34;color:#66d9ef&#34;&gt;and&lt;/span&gt; sub.&lt;span style=&#34;color:#66d9ef&#34;&gt;year&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; main.&lt;span style=&#34;color:#66d9ef&#34;&gt;year&lt;/span&gt;
    &lt;span style=&#34;color:#66d9ef&#34;&gt;order&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; price &lt;span style=&#34;color:#66d9ef&#34;&gt;desc&lt;/span&gt;
)
&lt;span style=&#34;color:#66d9ef&#34;&gt;order&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; name,&lt;span style=&#34;color:#66d9ef&#34;&gt;year&lt;/span&gt;,&lt;span style=&#34;color:#66d9ef&#34;&gt;month&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;--添加數量字段
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;alter&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;table&lt;/span&gt; fruit_month_price &lt;span style=&#34;color:#66d9ef&#34;&gt;add&lt;/span&gt; num float &lt;span style=&#34;color:#66d9ef&#34;&gt;not&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;default&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;--為數量字段賦隨機值
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;declare&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;@&lt;/span&gt;i int, &lt;span style=&#34;color:#f92672&#34;&gt;@&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;c&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;cursor&lt;/span&gt;;
&lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;@&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;c&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;cursor&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; id &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; fruit_month_price
&lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;@&lt;/span&gt;i &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;open&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;@&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;c&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;fetch&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;next&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;@&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;c&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;into&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;@&lt;/span&gt;i
while(&lt;span style=&#34;color:#f92672&#34;&gt;@@&lt;/span&gt;FETCH_STATUS &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;)
&lt;span style=&#34;color:#66d9ef&#34;&gt;begin&lt;/span&gt;
	&lt;span style=&#34;color:#66d9ef&#34;&gt;update&lt;/span&gt; fruit_month_price &lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt; num &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; round((rand() &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;), &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;)
	&lt;span style=&#34;color:#66d9ef&#34;&gt;where&lt;/span&gt; id &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;@&lt;/span&gt;i;
	&lt;span style=&#34;color:#66d9ef&#34;&gt;fetch&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;next&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;@&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;c&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;into&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;@&lt;/span&gt;i
&lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;close&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;@&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;c&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;deallocate&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;@&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;c&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;--查詢每種水果的最高價格所在行的信息並統計出每種水果的銷售總額
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; main.&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;,sumA.amount
&lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; fruit_month_price main
&lt;span style=&#34;color:#66d9ef&#34;&gt;left&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;join&lt;/span&gt; (
    &lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; name,&lt;span style=&#34;color:#66d9ef&#34;&gt;sum&lt;/span&gt;(num &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; price) &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; amount
	&lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; fruit_month_price
	&lt;span style=&#34;color:#66d9ef&#34;&gt;group&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; name
) sumA &lt;span style=&#34;color:#66d9ef&#34;&gt;on&lt;/span&gt; sumA.name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; main.name
&lt;span style=&#34;color:#66d9ef&#34;&gt;where&lt;/span&gt; id &lt;span style=&#34;color:#66d9ef&#34;&gt;in&lt;/span&gt; 
(
	&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; top &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; id &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; fruit_month_price sub
    &lt;span style=&#34;color:#66d9ef&#34;&gt;where&lt;/span&gt; sub.name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; main.name
    &lt;span style=&#34;color:#66d9ef&#34;&gt;order&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; price &lt;span style=&#34;color:#66d9ef&#34;&gt;desc&lt;/span&gt;
)
&lt;span style=&#34;color:#66d9ef&#34;&gt;order&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; name,&lt;span style=&#34;color:#66d9ef&#34;&gt;year&lt;/span&gt;,&lt;span style=&#34;color:#66d9ef&#34;&gt;month&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;--按水果名+年份統計
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; main.&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;,sumA.amount
&lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; fruit_month_price main
&lt;span style=&#34;color:#66d9ef&#34;&gt;left&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;join&lt;/span&gt; (
    &lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; name,&lt;span style=&#34;color:#66d9ef&#34;&gt;year&lt;/span&gt;,&lt;span style=&#34;color:#66d9ef&#34;&gt;sum&lt;/span&gt;(num &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; price) &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; amount
	&lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; fruit_month_price
	&lt;span style=&#34;color:#66d9ef&#34;&gt;group&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; name,&lt;span style=&#34;color:#66d9ef&#34;&gt;year&lt;/span&gt;
) sumA &lt;span style=&#34;color:#66d9ef&#34;&gt;on&lt;/span&gt; sumA.name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; main.name &lt;span style=&#34;color:#66d9ef&#34;&gt;and&lt;/span&gt; sumA.&lt;span style=&#34;color:#66d9ef&#34;&gt;year&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; main.&lt;span style=&#34;color:#66d9ef&#34;&gt;year&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;where&lt;/span&gt; id &lt;span style=&#34;color:#66d9ef&#34;&gt;in&lt;/span&gt; 
(
	&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; top &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; id &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; fruit_month_price sub
    &lt;span style=&#34;color:#66d9ef&#34;&gt;where&lt;/span&gt; sub.name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; main.name &lt;span style=&#34;color:#66d9ef&#34;&gt;and&lt;/span&gt; sub.&lt;span style=&#34;color:#66d9ef&#34;&gt;year&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; main.&lt;span style=&#34;color:#66d9ef&#34;&gt;year&lt;/span&gt;
    &lt;span style=&#34;color:#66d9ef&#34;&gt;order&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; price &lt;span style=&#34;color:#66d9ef&#34;&gt;desc&lt;/span&gt;
)
&lt;span style=&#34;color:#66d9ef&#34;&gt;order&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; name,&lt;span style=&#34;color:#66d9ef&#34;&gt;year&lt;/span&gt;,&lt;span style=&#34;color:#66d9ef&#34;&gt;month&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;result&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://i.imgur.com/9KOBmS8.jpg&#34; alt=&#34;result&#34;&gt;&lt;/p&gt;
&lt;p&gt;mysql中有一個問題，下面語句中，第二個語句在兩個字段相乘後多了很多小數位&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; main.&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; fruit_month_price main
&lt;span style=&#34;color:#66d9ef&#34;&gt;order&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; name,&lt;span style=&#34;color:#66d9ef&#34;&gt;year&lt;/span&gt;;
&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; name,&lt;span style=&#34;color:#66d9ef&#34;&gt;year&lt;/span&gt;,num&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;price
&lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; fruit_month_price main
&lt;span style=&#34;color:#66d9ef&#34;&gt;order&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; name,&lt;span style=&#34;color:#66d9ef&#34;&gt;year&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img src=&#34;https://i.imgur.com/idKruGe.jpg&#34; alt=&#34;1&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://i.imgur.com/eEfn18k.jpg&#34; alt=&#34;2&#34;&gt;&lt;/p&gt;
&lt;p&gt;選取其中一條記錄舉例，banana 1993中1.68*1本應該是1.68，卻顯示1.6799999475479126，不知道為什麼，mssql據說也有這個問題，但是在這個例子裡沒有。（公司裡經常提到在減少庫存後檢驗的時候要加上round函數之後校驗，不然會出現減少之後庫存數量變為-0.000000000001時，其實是正常的，但是程序卻報錯的情況，據說是數據庫問題，也就是說mysql比mssql情況更嚴重）&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.oschina.net/question/89964_65912&#34;&gt;关于 MySQL LEFT JOIN 你可能需要了解的三点&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://blog.csdn.net/newbie_coder/article/details/9279265&#34;&gt;MySQL SELECT LIMIT指定行数查询&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.cnblogs.com/zhoujinyi/p/3433823.html&#34;&gt;INNODB自增主键的一些问题&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://wzhiju.iteye.com/blog/1507910&#34;&gt;mysql 数据库自增id 的总结&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.cnblogs.com/chenmh/p/5203429.html&#34;&gt;MySQL 变量和条件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://blog.csdn.net/huihuangjiuai/article/details/37881123&#34;&gt;mysql创建存储过程declare 变量时报错&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.cnblogs.com/wangtao_20/archive/2011/02/21/1959734.html&#34;&gt;mysql变量使用总结&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://blog.ihuxu.com/explaination-of-the-mysql-variables-usage-and-the-use-case/&#34;&gt;深入MySQL用户自定义变量：使用详解及其使用场景案例&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://particle128.com/posts/2014/09/MySQL-bug.html&#34;&gt;MySQL存储过程中变量名不能和列名相同&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://blog.csdn.net/u012256142/article/details/40743887&#34;&gt;MySql存储过程—游标使用(Cursor)，（遍历）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://blog.csdn.net/tiana0/article/details/12647777&#34;&gt;SQL Server 2008 游标使用实例&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.cnblogs.com/lyhabc/p/3793524.html&#34;&gt;我的MYSQL学习心得（十） 自定义存储过程和函数&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.mysqltutorial.org/mysql-cursor/&#34;&gt; MySQL Cursor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.cnblogs.com/piaomiao1314/p/mysqli_error_2014.html&#34;&gt;mysql错误之2014&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.cnblogs.com/rootq/archive/2009/05/27/1490523.html&#34;&gt;MySql中delimiter的作用是什么?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>常用软件</title>
      <link>https://deletefromuser.github.io/pgm/2022111103/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2022111103/</guid>
      <description>&lt;h3 id=&#34;eartrumpet&#34;&gt;EarTrumpet&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;windows下单独控制每个应用的音量&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;nircmd&#34;&gt;nircmd&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;使用命令行控制windows系统的音量,屏幕亮度&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;goldendict&#34;&gt;GoldenDict&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;字典应用，支持导入字典文件，选中单词&lt;code&gt;CTRL+C+C&lt;/code&gt;可全局唤出查询结果弹窗&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;proxifier&#34;&gt;Proxifier&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;设置代理规则，针对一些不提供代理选项的应用，选中exe程序设置规则即可&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;qbittorrent&#34;&gt;qBittorrent&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;bt下载工具，同时支持磁力链，rss feed&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;shadowsocksv2ray-v2rayn&#34;&gt;shadowsocks，v2ray, v2rayN&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;fuck gfw&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;calibre&#34;&gt;calibre&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;电子书阅读，转换(格式转换，去DRM，日语书竖排转横排(也可以使用注释里推友制作的工具，也不错))&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;wallabag&#34;&gt;wallabag&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;收藏文章，本地保存（可设置代理，配图也可自动下载本地保存）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;joplin&#34;&gt;joplin&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;笔记软件，也可剪藏文章，还可以只剪藏截图，选择内容&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;miniflux&#34;&gt;miniflux&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;rss订阅&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;snapdrop&#34;&gt;snapdrop&lt;/h3&gt;
&lt;blockquote&gt;
&lt;h1 id=&#34;本地网络内无线文件传送&#34;&gt;本地网络内无线文件传送&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;部署&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;部署 &lt;code&gt;docker run -d --restart=always -p 8001:80 linuxserver/snapdrop&lt;/code&gt;
2. nginx配置&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-conf&#34; data-lang=&#34;conf&#34;&gt;server {
    listen       80;
    listen      443 ssl;
    server_name  snapdrop.example.com;

    location / {
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection &amp;quot;upgrade&amp;quot;;
        proxy_pass http://localhost:8001;
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;证书配置&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;dns服务商中为子域名添加A记录&lt;/li&gt;
&lt;li&gt;certbot中增加子域名配置 &lt;code&gt;certbot --expand -d existing.com,snapdrop.example.com&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;vlc--mpv&#34;&gt;vlc &amp;amp; mpv&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;视频播放&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;ubuntu-桌面自定义&#34;&gt;ubuntu 桌面自定义&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;gnome Dash to Panel&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;图片转换&#34;&gt;图片转换&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;caesium-clt&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;abc
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;h3 id=&#34;游戏镜像文件读取&#34;&gt;游戏镜像文件读取&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;WinCDEmu&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://nerdschalk.com/how-to-mute-an-app-on-windows-10/&#34;&gt;How To Mute an App on Windows 10&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://downloads.freemdict.com/&#34;&gt;Dict file download&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://news.ycombinator.com/item?id=24587059&#34;&gt;Unfortunately Calibre is pretty bad for reading Japanese novels. Every amazon.jp&amp;hellip; | Hacker News&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/yihong0618/epubhv&#34;&gt;yihong0618/epubhv: Make your epub books vertical or horizontal.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/wallabag/wallabag/issues/3273#issuecomment-1678206292&#34;&gt;fetching articles via HTTP(S) proxy · Issue #3273 · wallabag/wallabag&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/wallabag/wallabag/issues/3687&#34;&gt;Download images locally isn’t working · Issue #3687 · wallabag/wallabag&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://discourse.joplinapp.org/t/new-install-invalid-origin-error/17891/13&#34;&gt;New Install - Invalid origin error - Support - Joplin Forum&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://eff-certbot.readthedocs.io/en/latest/using.html#re-creating-and-updating-existing-certificates&#34;&gt;Re-creating and Updating Existing Certificates&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://unix.stackexchange.com/questions/560092/how-can-i-add-subdomains-to-letsencrypt-using-certbots&#34;&gt;How can I add subdomains to letsencrypt using certbots?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.oneworldcoders.com/apprentice-journals/4qmelzy08o0fn4jbcxipekxpd6sufk&#34;&gt;How to setup secure subdomains using nginx and certbot on a digitalocean VPS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/77252403/issue-with-certbot-no-valid-a-records-found-during-certificate-renewal&#34;&gt;Issue with Certbot: &amp;ldquo;no valid A records found&amp;rdquo; during certificate renewal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://ajmaradiaga.com/Allowing-web-sockets-when-using-NGINX-as-reverse-proxy/&#34;&gt;Allowing web socket connection when using NGINX as reverse proxy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>批量下载youtube视频</title>
      <link>https://deletefromuser.github.io/pgm/2022111401/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deletefromuser.github.io/pgm/2022111401/</guid>
      <description>&lt;ol&gt;
&lt;li&gt;获取视频url&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;F12，打开控制台，运行&lt;code&gt;[...document.querySelectorAll(&#39;[id=thumbnail]&#39;)].map(item =&amp;gt; item.href).join(&amp;quot; &amp;quot;)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;从播放列表中获得url，先F12选中整个播放列表，然后运行&lt;code&gt;[...$0.querySelectorAll(&amp;quot;[id=wc-endpoint]&amp;quot;)].map(item =&amp;gt; item.href).join(&amp;quot;\n&amp;quot;)&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;下载&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 下载音频&lt;/span&gt;
youtube-dl -f &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;bestaudio[ext=m4a]&amp;#39;&lt;/span&gt; --verbose --force-ipv4 &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;1.中的url&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# 下载视频&lt;/span&gt;
youtube-dl -f &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best&amp;#39;&lt;/span&gt; --verbose --force-ipv4 &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;1.中的url&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# 可用字幕列表&lt;/span&gt;
youtube-dl --list-subs https://www.youtube.com/watch?v&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;Ye8mB6VsUHw
&lt;span style=&#34;color:#75715e&#34;&gt;# 同时下载字幕&lt;/span&gt;
youtube-dl -f &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best&amp;#39;&lt;/span&gt; --verbose --force-ipv4 --all-subs &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;1.中的url&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# 只下载字幕，不下载视频&lt;/span&gt;
youtube-dl --all-subs --skip-download https://www.youtube.com/watch?v&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;Ye8mB6VsUHw
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;PS: 一次下载太多会遇到403，出现的话等一段时间再下载吧&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;reference&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/ytdl-org/youtube-dl#options&#34;&gt;youtube-dl manual&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://superuser.com/questions/927523/how-to-download-only-subtitles-of-videos-using-youtube-dl&#34;&gt;How to download only subtitles of videos using youtube-dl&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
  </channel>
</rss>
