<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>KANIKIG BLOG</title>
    <link>https://blog.kanikig.xyz/</link>
    <description>Recent content on KANIKIG BLOG</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>zh-cn</language>
    <lastBuildDate>Thu, 12 Jan 2023 21:46:51 +0800</lastBuildDate><atom:link href="https://blog.kanikig.xyz/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>我的2022年-聊聊玩NFT几天赚十几万最后归零的故事</title>
      <link>https://blog.kanikig.xyz/2022-sum/</link>
      <pubDate>Thu, 12 Jan 2023 21:46:51 +0800</pubDate>
      
      <guid>https://blog.kanikig.xyz/2022-sum/</guid>
      <description>本来不太想写的，2022年就两个字：水逆。博客太久没更新，今年又发生了很多事，有很多感悟，总结一下。炒币的事放到最后，先聊聊生活的其他方面。</description>
      <content:encoded><![CDATA[<p>本来不太想写的，2022年就两个字：水逆。博客太久没更新，今年又发生了很多事，有很多感悟，总结一下。炒币的事放到最后，先聊聊生活的其他方面。</p>
<p>今年总的可以概括为：上半年在上海被关在学校坐牢，下半年进币圈爆赚之后逐渐归零，7月去厦门旅游放松了一下，8月到11月因为导师的垃圾项目出差在外面3个月，12月各种项目结题天天爆肝。</p>
<p>总体过的不太开心，有的说本命年前一年运势普遍不好，不知道是不是这个原因。</p>
<h2 id="工作">工作</h2>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2023/01/11/12406B5F-72FF-4B21-8F01-0A4383C46F42_1_105_c.jpg" alt=""  /></p>
<blockquote>
<p><em>宝山的一处废弃铁轨和火车</em></p>
</blockquote>
<p>今年被项目折磨，对读研（博）有了更深的认识。国内读研是一种工作，和本科完全不同，是给老师（老板）廉价打工，来换取一个学位。</p>
<p>老师也是人，不论他是偏学术型、赚钱型还是行政型，都需要申项目来支撑他的发展（评上教授就彻底摆烂的除外），才能晋升，申x青长江甚至院士。有了各种帽子，各种额外收入也就更多（基本工资都是冰山一角）。需要学生帮他干活，才能发展，跟公司是一样的。</p>
<p>对于硕士和毕业后不从事科研工作的博士，帮导师干活基本只对导师有益，对自己而言的最有价值的就只有拿到学位。更别说现在的就业环境，很多博士毕业都得转行，用人单位对你在象牙塔里的成就和成果根本不感兴趣。</p>
<p>大四加研一两年也参与了很多项目，但角色和硕士差不多，老师让干啥就干啥，搞砸了跟我也没太大关系。今年开始作为主力才感觉到压力，重大项目搞不好的话影响老板前途，老板不高兴了就有可能卡毕业，国内博士的压力多来源于此。当没有作为主力承担项目，没有和导师的利益直接挂钩的时候，体会没这么深，就好像在b站云别人玩游戏，和自己花几十个小时慢慢玩的区别。</p>
<p>大部分高校老师的心思不在正经的学术研究上，光想着怎么写本子申项目了，不管能不能做，先把钱弄到手再说，结果做还是学生来做，想办法擦屁股。每年国家的科研经费大部分都被这种项目骗了去，真正对科技进步有用的，推动技术发展的是少数。学术圈有自己的一套游戏规则，不是一朝一夕能改变的，很多老师也是屠龙者终成恶龙。</p>
<p>另外就是现在年轻老师的待遇问题，本来挺天真想毕业争取留校的，但看了看小老师们每天工作强度巨大工资还低，还不如出去上班香。如果不是是家里有钱能允许30岁之前低收入（硕士生工资极低，国内博士生待遇最好的差不多跟送外卖一样），或者真正有理想有天赋的大佬，否则不适合把科研当作职业，混到学位还是赶紧上班赚钱吧。</p>
<p>今年累惨了，好在出差拿满了补贴，额外的钱赚了不少。原计划下半年要投的论文忙得一直没投，明年只会更忙，左手是自己的毕业和前途，右手是老师的帽子和钱，真难。</p>
<h2 id="学习">学习</h2>
<img src="https://pic.kanikig.xyz/images/2023/01/11/B6D60E04-A493-4663-A8A9-3BE116AA8F0B_1_105_c.jpg" style="zoom:50%;" />
<blockquote>
<p><em>大学生集体返乡时的上海虹桥站</em></p>
</blockquote>
<p>上课基本都在腾讯会议。上半年（研一下学期）被关导致线上，下半年（研二上）3个月出差所以线上，最后两个月回学校后解封放开了，全国劝返学生，最后还是线上&hellip;有一门居然还要考试，因为一直忙项目这门课根本没学，最后考的感觉不妙，不过总算把课程的学分修完了。</p>
<p>上半年的前两个月学了一段时间cs61b，后来3月开始疫情被关，彻底摆烂。下半年忙到根本没有精力学自己感兴趣的东西，初入币圈，对智能合约开发产生兴趣，北大的区块链基础和solidity开坑学了点，也因为太忙被打断了。</p>
<h2 id="娱乐">娱乐</h2>
<p>看的影视作品和玩的游戏都整理在<a href="https://kanikig.notion.site/My-Home-1475d676ab464fab8143f8160691caff">notion</a></p>
<h3 id="番剧">番剧</h3>
<p>每个季度我一般挑三四个看，能看下来的不多。巨人鬼灭这些大制作的就不说了，中规中矩，几个比较惊喜的：《不存在的战区》（21年的番补了一下）、《高达水星的魔女》、《死神千年血战篇》、《无职转生》，无职动漫和漫画各看了两遍，可惜国内不让看了。</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2023/01/11/image-20230110230835501.png" alt="image-20230110230835501"  /></p>
<h3 id="电视剧">电视剧</h3>
<p>一些是新剧，一些是补的。特别喜欢的有《风骚律师》、《权游》（没错我居然2022年才看）、《赛博朋克边缘行者》</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2023/01/11/image-20230110232018294.png" alt="image-20230110232018294"  /></p>
<h3 id="电影">电影</h3>
<p>基本是补一些经典作品，最震撼的当属《出租车司机》，讲韩国民主运动的，国内被禁。补了EVA全系列。《阿凡达2》，放开后时隔3年去电影院看的第一部电影，虽然时长有点长，总体挺不错的。</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2023/01/11/image-20230110232934524.png" alt="image-20230110232934524"  /></p>
<h3 id="游戏">游戏</h3>
<p>上半年封在宿舍高强度通了大镖客，确实是次世代最佳游戏。战神4也认真打完了。两部蜘蛛侠流程都不长，游戏主要爽点就是荡来荡去。底特律小时候就一直想玩，算是补票了，质量放到今天也很能打。血源个人比只狼和黑魂更喜欢，玩到了中后期，因为太忙断掉了。最近主要在塞尔达，希望能玩到第二部出来无缝衔接。其他的都只开了个头就吃灰了，以后有空再说。</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2023/01/11/iShot_2023-01-11_16.38.00.png" alt="iShot_2023-01-11_16.38.00"  /></p>
<h2 id="旅游">旅游</h2>
<p>7月跟女朋友去厦门玩了几天，是一年中最开心的时间了。攻略做的比较充分，吃和玩体验都不错，就是每天白天40多度太难顶，鼓浪屿走了一半实在受不了就坐船回去了。</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2023/01/11/B06413B8-9ECC-412A-98F5-0388BEAB2820_1_105_c.jpg" alt=""  /></p>
<blockquote>
<p><em>墙上的涂鸦</em></p>
</blockquote>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2023/01/11/E3C364D8-83E0-4E49-98D8-C91EFD879CC5_1_105_c26efab57a95a67bd.jpg" alt=""  /></p>
<blockquote>
<p><em>南普陀寺</em></p>
</blockquote>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2023/01/11/54C23734-05DD-41D4-96A6-CE54B50DA91E_1_105_c.jpg" alt=""  /></p>
<blockquote>
<p><em>海边日落</em></p>
</blockquote>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2023/01/11/08CFCA47-73E1-4E51-9FB2-367936D58DB7_1_105_c.jpg" alt=""  /></p>
<blockquote>
<p><em>鼓浪屿</em></p>
</blockquote>
<h2 id="设备">设备</h2>
<p>上半年因为封校一分钱没花，加上下半年出差做项目额外收入挺多，攒了点小钱，买了些一直想要的设备。</p>
<p>6月返乡入了airpods pro，结果下半年就出了新款，价格不变，买早了。。</p>
<img src="https://pic.kanikig.xyz/images/2023/01/11/44C61450-9944-4930-A75B-A17C85AAF956_1_105_cc89be06471d39b20.jpg" style="zoom:50%;" />
<p>10月买了macbookair m2，听网上说的买了16+512，挺满意的</p>
<img src="https://pic.kanikig.xyz/images/2023/01/11/4B49D95E-0BAC-4728-9478-E7861D247ADC_1_105_c.jpg" style="zoom:50%;" />
<p>11月入了applewatch，实际体验没啥用，主要提供一个装饰功能</p>
<img src="https://pic.kanikig.xyz/images/2023/01/11/iShot_2023-01-11_00.25.06.png" alt="11月入了applewatch" style="zoom: 33%;" />
<p>12月入了switch，为了补一下塞尔达，毕竟2023年国王之泪要来了</p>
<h2 id="开源">开源</h2>
<p><a href="https://github.com/KANIKIG/Multi-EasyGost">
  <img loading="lazy" src="https://github-readme-stats.vercel.app/api/pin/?username=KANIKIG&amp;repo=Multi-EasyGost&amp;theme=tokyonight" alt="Readme Card"  /></a></p>
<p>脚本今年收获400+🌟，居然还挺多人在用的&hellip;</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2023/01/11/iShot_2023-01-11_20.57.02.png" alt="iShot_2023-01-11_20.57.02"  /></p>
<p><a href="https://github.com/KANIKIG/picgo-plugin-ipfs">
  <img loading="lazy" src="https://github-readme-stats.vercel.app/api/pin/?username=KANIKIG&amp;repo=picgo-plugin-ipfs&amp;theme=tokyonight" alt="Readme Card"  /></a></p>
<p>picgo搭配typora自动上传图床特别方便，那几天对IPFS感兴趣，就拿别人的插件改了一个，可以自动上传至IPFS，也得到了picgo官方插件库收录。但过了一周多发现通过上传的图都失效了，不知道是什么问题&hellip;</p>
<h2 id="投资">投资</h2>
<p>先说一句，本人还没毕业工作，也只是初入币圈的新韭菜，小本金玩，富哥和大佬就别喷我了，突然赚这么多对我来说跟中彩票一样。</p>
<h3 id="入坑">入坑</h3>
<p>正式进圈是luna暴雷那几天，网上看到盛传的一个消息，好像是腾讯某女员工高倍做空luna直接一波自由了，无数人眼红。luna币价死亡螺旋一天加一个0，吓人。</p>
<p>手里也攒了点钱，就开始研究虚拟币市场。2020年的时候为了给页端充值用火币买过0.0x个BTC，那时候价格好像是1wu左右。自己平时用USDT也比较多，所以就入金币安看看行情，冲了100u的现货想抄底，结果第二天就腰斩了。</p>
<img src="https://pic.kanikig.xyz/images/2023/01/11/IMG_1952.jpg" alt="IMG_1952" style="zoom:25%;" />
<p>首战告负肯定不死心，但这时候我连看线都不会，各种指标也不懂，就看币安学院的资料学了些基础知识，看了些cx百倍币的软文（事实证明没有一个预言正确，后来币圈深熊&hellip;）研究了一圈，感觉生态比较好的就ETH，还买了点near。</p>
<h3 id="nft">NFT</h3>
<p>最开始玩图片是在NEAR上玩了几天，这个链挺牛逼的，可惜不懂得炒作。很多东南亚艺术家在上面发项目，有点类似于国内数藏，大部分没有投资价值，只有艺术价值。</p>
<p>让我彻底入坑的项目是shit，重点说下这个项目，现象级的土狗盘。5月底哥布林掀起一波“反蓝筹”热潮，彻底将NFT市场领入freemint时代，同时期还有精灵、矮人等仿盘割据混战，仿佛中土世界。</p>
<p>我推特关注了一个freemint合约监控机器人，盯新出的盘子（那时一天得有四五十个项目，gas都是几十u随便拉，怀念..）。先是打了几个归零项目，那时候我只看图片好不好看，不懂怎么分析项目，突然看到一个觉得很有意思的图，就打了（就这玩意）。</p>
<p><nft-card    contractAddress="0x9f9b2b8e268d06dc67f0f76627654b80e219e1d6"    tokenId="2281">    </nft-card>    <script src="https://unpkg.com/embeddable-nfts/dist/nft-card.min.js"></script></p>
<p>当晚加了两个shit群，第一个是全网1群。这个项目后来最多的时候得有几十个500人群，这还只是国人区，足见热度。第二天差点归零，第三还是第四天出了创新玩法：燃烧一代生二代同时空投代币，直接暴涨起飞。发币上交易所，出第4个collection才不过一周时间，史无前例。运营特别会搞事，各种meme，每天高强度几百条推，加上玩法非常新颖，吸引了大量资金入场。</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2023/01/11/FCB30EDF-DEC9-4918-8EF2-12ECD03207FB_1_105_ca2320373817625f8.jpg" alt="FCB30EDF-DEC9-4918-8EF2-12ECD03207FB_1_105_c"  /></p>
<blockquote>
<p>巅峰时刻。反观现在的NFT市场，几十E日交易量就能上榜，一声叹息&hellip;</p>
</blockquote>
<img src="https://pic.kanikig.xyz/images/2023/01/11/AE5D1DEC-A4E5-4790-88C1-FA060D78DA1F_1_105_c.jpg" alt="AE5D1DEC-A4E5-4790-88C1-FA060D78DA1F_1_105_c" style="zoom:33%;" />
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2023/01/11/iShot_2023-01-11_22.15.09.png" alt="iShot_2023-01-11_22.15.09"  /></p>
<p>浮盈也在燃烧发币后的6月10日达到顶点（图只计算了代币和以太）。加上NFT和二代创世（稀有）的价格，大约有2wu左右的浮盈。最开始是freemint的，这些钱完全相当于白捡，我这时候已经完全飘了，穷学生哪里见过这么多钱，想着后续的玩法能赚更多，没能逃顶。</p>
<p>后面3个月一边玩别的项目一边等shit的新消息，结果团队只是一次又一次画饼。我还傻傻地花0.4E加仓了一个一代&hellip;币圈暴跌三箭暴雷等事件，市场深熊，团队基本软RUG，代币还被V神砸盘直接加0。项目方又联合BNX搞链游发第二个币，骂声一片还继续发新项目，割韭菜吃相太难看。我居然一直熬到了9月才忍无可忍出货。</p>
<p>本来这时候还剩0.5E左右的盈利，结果第二天被盗钱包归零。我被盗总共三次，第一次是6月被盗0.0几e，第二次7月被盗走的是shit的土地NFT，我还跟傻逼一样联系到了买家花0.3E买回来了&hellip;第三次对我打击特别大，经过前两次的被盗已经非常谨慎，安装了防盗插件。结果这次技术非常高明，通过合约funcion转给Lasercat等NFT大佬，骗我们这种有监控习惯的人。防盗插件也不报，仔细看了metadata也不是approve的，我放心点下去，E就全部转走了，气到头疼，人抑郁了两天。</p>
<p>9月前就一直用一个钱包，赚的比较多的两个项目也是shit的仿盘：老虎和火炬，利润约0.4e，主要是通过shit学会了逃顶时机，都跑在发币的时候。</p>
<p>这之后开始分钱包，一个主钱包用来二级交易，其他钱包通过机器人跟单批量mint，胜率还可以。可惜深熊太长，NFT行情凉凉，都没人发项目割韭菜，最后也没赚多少。</p>
<p>统计常用的5个钱包（包括前面被盗的钱包）玩NFT的盈亏（第一行那个是今天冲权游官方NFT刚亏的，难受）。gas查的链上总燃烧，把NFT之外的tx也给多算进去了，所以最终总利润差不多1E。</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2023/01/11/iShot_2023-01-11_20.29.39.png" alt="iShot_2023-01-11_20.29.39"  /></p>
<h3 id="撸毛">撸毛</h3>
<p>低本金的散户赚钱方法只有NFT、土狗、撸毛、合约，其中撸毛是成本最低且最累的。</p>
<p>6月开始跟着几个博主每天撸一点，但没有多号，这个时期链上gas还比较高，我初入圈对项目还比较盲目，啥都去交互一下，光gas就亏了得有几百u。8到10月几个大毛项目带火了撸毛圈，可惜行情随着熊市越来越差，撸毛又累且收益期望极低，还在坚持输出的撸毛博主不多了。</p>
<p>我赚钱的就两个项目，第一个是6月YSL的艺术家代币平台项目P00Ls，8月还是9月代币提出来卖了200多u。</p>
<p>第二个就是spaceid（.bnb域名）八九月大热的DID域名赛道，前期撸齐了OAT，可以提前mint抢数字域名，可惜抢不过科学家，只抢到了几个特殊5位跟6位。后来几天发现了一个搬砖的方法，部分emoji显示一位但实际上是2位，有隐藏字符。4位以下的mint价格是5位以上的好几倍，因此打这种特殊的3位emoji实际按6位的收费，0.02bnb一个。我陆续打了30多个，挂两三倍的价格卖掉了一大半，因为总有人觉得自己捡到便宜会去买。算上卖掉的几个5位特殊号共盈利1.3bnb左右。</p>
<img src="https://pic.kanikig.xyz/images/2023/01/11/iShot_2023-01-11_23.19.55.png" alt="iShot_2023-01-11_23.19.55" style="zoom:33%;" />
<h3 id="合约">合约</h3>
<p>前面赚到的钱全亏在合约里了。不算不要紧，一算倒亏了3000u，把玩图片和其他赚的全吐回去了。</p>
<p>从七月开始陆续玩了六七次，每次入几百u玩，都是先翻2～3倍尝到甜头，最后爆仓归零收场。反省自己不太适合玩这个，合约本质是赌博，我又特别容易上头梭哈，盈利亏掉马上就会把本金再冲进去抗，没有保护本金的意识。</p>
<p>还好因为7月那次被盗没钱了，自己立了规矩，绝对不再入金，不影响现实生活，只用剩下的玩。8月到9月行情稍微回暖，用钱包仅剩的几十u玩图片赚到1000多u，最后两个月NFT行情跟死了一样，没东西玩，所以忍不住玩合约。也学了很多东西，看美联储消息和一些数据指标。</p>
<p>经过多次实践，个人观点：数据指标只在庄没有动作的理想行情下有用。几次盈利是美联储出数据随大行情开单，还有做震荡行情的短线，指标都挺准的。但是一旦庄出手操控，看数据就没用了（比如这几天把我拉爆的gala），这时候是庄与散户的博弈，没有分析庄家意图的能力，一根针就把我爆了（瞬间插针止盈止损会失败）。</p>
<h3 id="总结">总结</h3>
<p>我是标准的韭菜。不怕一开始亏，最怕先尝到甜头，等深陷进去被一波割走。我基本都是先赚再亏，等反应过来已经亏完了。不过也说明了币圈给散户赚钱的机会比较多，我这样的都能赚到一些。玩NFT还算有点经验和手感，总体在赚钱。说说几点这半年学到的东西：</p>
<ol>
<li>大多数是旁氏。大部分项目都是包装画饼，跟现实中的各种项目一样。千万不要相信“去中心化”、“web3.0”、“元宇宙”等，90%都是炒概念的，现在的技术水平根本支撑不了上述场景。咱是来赚钱的，真正想推动技术发展让有钱的大佬去投就行。</li>
<li>警惕国人kol（推特博主）。优质的很少，大部分都是收钱搞抽奖推项目，很多垃圾项目也推，一开始啥也不懂关注了很多烂人，很多盘子是国人用英文搞的，包装的很好，kol喊单韭菜冲进去就被割。看得多了也就终于想明白了：老外圈子一直不爱带国人玩，所以国人kol发的大部分都是国人（英文）项目，割韭菜的占90%以上。</li>
<li>远离合约。合约赚钱最快，亏钱更快。币圈赚大钱的没几个是玩合约的。</li>
<li>不做NFT钻石手。就不说钻shit的下场，看看无聊猿那些大蓝筹2022年都跌成啥样了。NFT流动性很差，开盘涨了就卖是最佳时机，后面可能会拍大腿，但至少一定不会亏。</li>
<li>做好防盗。用开源钱包和硬件钱包，浏览器安装防盗插件。</li>
</ol>
<h2 id="对2023年的期望">对2023年的期望</h2>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2023/01/12/1E8C5F94-0B75-4BEF-9333-AB5B8B21DAE1_1_105_c.jpg" alt="1E8C5F94-0B75-4BEF-9333-AB5B8B21DAE1_1_105_c"  /></p>
<ol>
<li>生活：希望厄运退散，过的开心一些，能多出去旅游几次</li>
<li>工作/学习：项目能少点折磨，多点自己研究和学习的时间</li>
<li>开源：脚本重写，适配v3版本</li>
<li>投资：只玩NFT，坚定履行交易策略，不冲动，不再碰合约</li>
</ol>
]]></content:encoded>
    </item>
    
    <item>
      <title>Oracle甲骨文巴西服务器测评</title>
      <link>https://blog.kanikig.xyz/oracle-vps-brazil/</link>
      <pubDate>Sun, 03 Jul 2022 13:50:24 +0800</pubDate>
      
      <guid>https://blog.kanikig.xyz/oracle-vps-brazil/</guid>
      <description>测评 测试使用的是巴西免费AMD LemonBench 完整测试报告 系统信息 -&amp;gt; System Information OS Release: Ubuntu 20.04.4 LTS (Focal Fossa) (x86_64) CPU Model: AMD EPYC 7551 32-Core Processor 2.00 GHz CPU Cache Size: 512 KB CPU Number: 2 vCPU Virt Type: KVM Memory Usage: 405.82 MB / 973.41 MB Swap Usage: [ No Swapfile</description>
      <content:encoded><![CDATA[<h2 id="测评">测评</h2>
<p>测试使用的是巴西免费AMD</p>
<h3 id="lemonbench">LemonBench</h3>
<p><a href="https://paste.ubuntu.com/p/XQVGfbPqBm/">完整测试报告</a></p>
<h4 id="系统信息">系统信息</h4>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"> -&gt; System Information
</span></span><span class="line"><span class="cl"> 
</span></span><span class="line"><span class="cl"> OS Release:		Ubuntu 20.04.4 LTS <span class="o">(</span>Focal Fossa<span class="o">)</span>  <span class="o">(</span>x86_64<span class="o">)</span>
</span></span><span class="line"><span class="cl"> CPU Model:		AMD EPYC <span class="m">7551</span> 32-Core Processor  2.00 GHz
</span></span><span class="line"><span class="cl"> CPU Cache Size:	<span class="m">512</span> KB
</span></span><span class="line"><span class="cl"> CPU Number:		<span class="m">2</span> vCPU
</span></span><span class="line"><span class="cl"> Virt Type:		KVM
</span></span><span class="line"><span class="cl"> Memory Usage:		405.82 MB / 973.41 MB
</span></span><span class="line"><span class="cl"> Swap Usage:		<span class="o">[</span> No Swapfile / Swap partition <span class="o">]</span>
</span></span><span class="line"><span class="cl"> Disk Usage:		5.69 GB / 47.14 GB
</span></span><span class="line"><span class="cl"> Boot Device:		/dev/sda1
</span></span><span class="line"><span class="cl"> Load <span class="o">(</span>1/5/15min<span class="o">)</span>:	1.16 0.37 0.13 
</span></span><span class="line"><span class="cl"> CPU Usage:		0.0% used, 0.0% iowait, % steal
</span></span><span class="line"><span class="cl"> Kernel Version:	5.17.5
</span></span><span class="line"><span class="cl"> Network CC Method:	bbr + fq
</span></span></code></pre></div><h4 id="网络">网络</h4>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">168.138.*.*
</span></span><span class="line"><span class="cl">BR / Brazil
</span></span><span class="line"><span class="cl">AS31898 / ORACLE-BMC-31898
</span></span></code></pre></div><h4 id="性能">性能</h4>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"> -&gt; CPU Performance Test <span class="o">(</span>Fast Mode, 1-Pass @ 5sec<span class="o">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="m">1</span> Thread Test:			<span class="m">552</span> Scores
</span></span><span class="line"><span class="cl"> <span class="m">2</span> Threads Test:		<span class="m">526</span> Scores
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> -&gt; Memory Performance Test <span class="o">(</span>Fast Mode, 1-Pass @ 5sec<span class="o">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="m">1</span> Thread - Read Test :		15098.55 MB/s
</span></span><span class="line"><span class="cl"> <span class="m">1</span> Thread - Write Test:		6828.23 MB/s
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> -&gt; Disk Speed Test <span class="o">(</span>4K Block/1M Block, Direct Mode<span class="o">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> Test Name		Write Speed				Read Speed
</span></span><span class="line"><span class="cl"> 100MB-4K Block		9.0 MB/s <span class="o">(</span><span class="m">2185</span> IOPS, 11.71 s<span class="o">)</span>		9.1 MB/s <span class="o">(</span><span class="m">2230</span> IOPS, 11.48 s<span class="o">)</span>
</span></span><span class="line"><span class="cl"> 1GB-1M Block		54.0 MB/s <span class="o">(</span><span class="m">51</span> IOPS, 19.41 s<span class="o">)</span>		49.7 MB/s <span class="o">(</span><span class="m">47</span> IOPS, 21.08 s<span class="o">)</span>
</span></span></code></pre></div><h3 id="geekbench">Geekbench</h3>
<p>geekbench4</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">Geekbench <span class="m">4</span> Benchmark Test:
</span></span><span class="line"><span class="cl">---------------------------------
</span></span><span class="line"><span class="cl">Test            <span class="p">|</span> Value                         
</span></span><span class="line"><span class="cl">                <span class="p">|</span>                               
</span></span><span class="line"><span class="cl">Single Core     <span class="p">|</span> <span class="m">1737</span>                          
</span></span><span class="line"><span class="cl">Multi Core      <span class="p">|</span> <span class="m">1517</span>                          
</span></span><span class="line"><span class="cl">Full Test       <span class="p">|</span> https://browser.geekbench.com/v4/cpu/16579146
</span></span></code></pre></div><h3 id="speedtest">Speedtest</h3>
<p>本地速度：500M</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">   Speedtest by Ookla
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">     Server: UPX Technologies - São Paulo <span class="o">(</span><span class="nv">id</span> <span class="o">=</span> 14754<span class="o">)</span>
</span></span><span class="line"><span class="cl">        ISP: Oracle Cloud
</span></span><span class="line"><span class="cl">    Latency:     1.54 ms   <span class="o">(</span>1.58 ms jitter<span class="o">)</span>
</span></span><span class="line"><span class="cl">   Download:   462.00 Mbps <span class="o">(</span>data used: 679.8 MB<span class="o">)</span>                               
</span></span><span class="line"><span class="cl">     Upload:   464.55 Mbps <span class="o">(</span>data used: 290.1 MB<span class="o">)</span>                               
</span></span><span class="line"><span class="cl">Packet Loss: Not available.
</span></span><span class="line"><span class="cl"> Result URL: https://www.speedtest.net/result/c/df745e7d-a2ca-411a-b892-addc0cd25cec
</span></span></code></pre></div><h3 id="superspeed">superspeed</h3>
<p>移动有速度，但是延迟都太高了</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2022/07/03/iShot2022-07-03-14.13.18.png" alt="iShot2022-07-03 14.13.18"  /></p>
<h3 id="traceroute">TraceRoute</h3>
<p>都要经过美国的，延迟都很高</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="o">[</span>Info<span class="o">]</span> 测试路由 到 上海电信 中 ...
</span></span><span class="line"><span class="cl">traceroute to 101.95.110.149 <span class="o">(</span>101.95.110.149<span class="o">)</span>, <span class="m">30</span> hops max, <span class="m">32</span> byte packets
</span></span><span class="line"><span class="cl"> <span class="m">1</span>  140.91.208.27  0.34 ms  AS31898  巴西, 圣保罗州, 圣保罗, oracle.com
</span></span><span class="line"><span class="cl"> <span class="m">2</span>  8.243.148.238  55.09 ms  AS3356  巴西, level3.com
</span></span><span class="line"><span class="cl"> <span class="m">3</span>  8.243.148.237  2.36 ms  AS3356  巴西, level3.com
</span></span><span class="line"><span class="cl"> <span class="m">4</span>  ae1.3505.edge9.SanJose1.level3.net <span class="o">(</span>4.69.219.61<span class="o">)</span>  192.06 ms  AS3356  美国, 加利福尼亚州, 圣何塞, level3.com
</span></span><span class="line"><span class="cl"> <span class="m">5</span>  4.15.125.54  194.27 ms  AS3356  美国, 加利福尼亚州, 圣何塞, level3.com
</span></span><span class="line"><span class="cl"> <span class="m">6</span>  202.97.89.134  346.46 ms  AS4134  中国, 上海, chinatelecom.com.cn, 电信
</span></span><span class="line"><span class="cl"> <span class="m">7</span>  202.97.12.193  327.23 ms  AS4134  中国, 上海, chinatelecom.com.cn, 电信
</span></span><span class="line"><span class="cl"> <span class="m">8</span>  202.97.57.26  338.07 ms  AS4134  中国, 上海, chinatelecom.com.cn, 电信
</span></span><span class="line"><span class="cl"> <span class="m">9</span>  101.95.88.73  340.16 ms  AS4812  中国, 上海, chinatelecom.com.cn, 电信
</span></span><span class="line"><span class="cl"><span class="m">10</span>  101.95.89.38  349.77 ms  AS4812  中国, 上海, chinatelecom.com.cn, 电信
</span></span><span class="line"><span class="cl"><span class="m">11</span>  101.95.110.149  335.26 ms  AS4812  中国, 上海, chinatelecom.com.cn, 电信
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="o">[</span>Info<span class="o">]</span> 测试路由 到 上海电信 完成 ！
</span></span><span class="line"><span class="cl"><span class="o">[</span>Info<span class="o">]</span> 测试路由 到 江苏宿迁联通 中 ...
</span></span><span class="line"><span class="cl">traceroute to 153.36.202.5 <span class="o">(</span>153.36.202.5<span class="o">)</span>, <span class="m">30</span> hops max, <span class="m">32</span> byte packets
</span></span><span class="line"><span class="cl"> <span class="m">1</span>  140.91.208.30  0.36 ms  AS31898  巴西, 圣保罗州, 圣保罗, oracle.com
</span></span><span class="line"><span class="cl"> <span class="m">2</span>  81.173.106.130  0.60 ms  AS12956  巴西, 圣保罗州, 圣保罗, telefonica.com
</span></span><span class="line"><span class="cl"> <span class="m">3</span>  81.173.106.129  1.34 ms  AS12956  巴西, 圣保罗州, 圣保罗, telefonica.com
</span></span><span class="line"><span class="cl"> <span class="m">4</span>  5.53.3.223  3.10 ms  AS12956  巴西, telefonica.com
</span></span><span class="line"><span class="cl"> <span class="m">5</span>  94.142.99.177  114.80 ms  AS12956  美国, telefonica.com
</span></span><span class="line"><span class="cl"> <span class="m">6</span>  84.16.15.67  123.71 ms  AS12956  美国, 弗吉尼亚州, 阿什本, telefonica.com
</span></span><span class="line"><span class="cl"> <span class="m">7</span>  219.158.42.53  352.02 ms  AS4837  美国, chinaunicom.com, 联通
</span></span><span class="line"><span class="cl"> <span class="m">8</span>  219.158.29.137  353.04 ms  AS4837  美国, 加利福尼亚州, 圣何塞, chinaunicom.com, 联通
</span></span><span class="line"><span class="cl"> <span class="m">9</span>  219.158.6.5  362.10 ms  AS4837  中国, 上海, chinaunicom.com, 联通
</span></span><span class="line"><span class="cl"><span class="m">10</span>  219.158.19.86  349.20 ms  AS4837  中国, 上海, chinaunicom.com, 联通
</span></span><span class="line"><span class="cl"><span class="m">11</span>  219.158.19.81  346.28 ms  AS4837  中国, 上海, chinaunicom.com, 联通
</span></span><span class="line"><span class="cl"><span class="m">12</span>  219.158.17.18  341.92 ms  AS4837  中国, 江苏, 南京, chinaunicom.com, 联通
</span></span><span class="line"><span class="cl"><span class="m">13</span>  221.6.174.94  348.35 ms  AS4837  中国, 江苏, 宿迁, chinaunicom.com, 联通
</span></span><span class="line"><span class="cl"><span class="m">14</span>  *
</span></span><span class="line"><span class="cl"><span class="m">15</span>  *
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="o">[</span>Info<span class="o">]</span> 测试路由 到 江苏宿迁联通 完成 ！
</span></span><span class="line"><span class="cl"><span class="o">[</span>Info<span class="o">]</span> 测试路由 到 浙江杭州移动 中 ...
</span></span><span class="line"><span class="cl">traceroute to 120.199.239.1 <span class="o">(</span>120.199.239.1<span class="o">)</span>, <span class="m">30</span> hops max, <span class="m">32</span> byte packets
</span></span><span class="line"><span class="cl"> <span class="m">1</span>  140.91.208.26  0.28 ms  AS31898  巴西, 圣保罗州, 圣保罗, oracle.com
</span></span><span class="line"><span class="cl"> <span class="m">2</span>  8.243.148.238  0.82 ms  AS3356  巴西, level3.com
</span></span><span class="line"><span class="cl"> <span class="m">3</span>  8.243.148.237  2.76 ms  AS3356  巴西, level3.com
</span></span><span class="line"><span class="cl"> <span class="m">4</span>  4.69.219.210  174.29 ms  AS3356  美国, 华盛顿州, 西雅图, level3.com
</span></span><span class="line"><span class="cl"> <span class="m">5</span>  ChinaMobile-level3-Seattle1.Level3.net <span class="o">(</span>4.68.39.222<span class="o">)</span>  174.62 ms  AS3356  美国, 华盛顿州, 西雅图, level3.com
</span></span><span class="line"><span class="cl"> <span class="m">6</span>  223.120.6.53  174.60 ms  AS58453  美国, 华盛顿州, 西雅图, chinamobile.com, 移动
</span></span><span class="line"><span class="cl"> <span class="m">7</span>  223.120.22.34  369.68 ms  AS58453  中国, 上海, chinamobile.com, 移动
</span></span><span class="line"><span class="cl"> <span class="m">8</span>  221.183.55.46  358.33 ms  AS9808  中国, 上海, chinamobile.com, 移动
</span></span><span class="line"><span class="cl"> <span class="m">9</span>  221.183.25.189  366.26 ms  AS9808  中国, 上海, chinamobile.com, 移动
</span></span><span class="line"><span class="cl"><span class="m">10</span>  221.176.22.29  359.09 ms  AS9808  中国, 上海, chinamobile.com, 移动
</span></span><span class="line"><span class="cl"><span class="m">11</span>  111.24.17.61  371.04 ms  AS9808  中国, 上海, chinamobile.com, 移动
</span></span><span class="line"><span class="cl"><span class="m">12</span>  221.176.22.122  377.29 ms  AS9808  中国, 浙江, 杭州, chinamobile.com, 移动
</span></span><span class="line"><span class="cl"><span class="m">13</span>  120.199.239.1  375.23 ms  AS56041  中国, 浙江, 杭州, chinamobile.com, 移动
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="o">[</span>Info<span class="o">]</span> 测试路由 到 浙江杭州移动 完成 ！
</span></span></code></pre></div><h3 id="iperf3">iperf3</h3>
<p>广州移动111.45单线程</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="o">[</span>  5<span class="o">]</span> <span class="nb">local</span> 10.0.0.122 port <span class="m">52014</span> connected to 111.45.32.36 port <span class="m">20020</span>
</span></span><span class="line"><span class="cl"><span class="o">[</span> ID<span class="o">]</span> Interval           Transfer     Bitrate         Retr  Cwnd
</span></span><span class="line"><span class="cl"><span class="o">[</span>  5<span class="o">]</span>   0.00-1.00   sec   <span class="m">253</span> KBytes  2.07 Mbits/sec    <span class="m">0</span>   33.9 KBytes       
</span></span><span class="line"><span class="cl"><span class="o">[</span>  5<span class="o">]</span>   1.00-2.00   sec  1.21 MBytes  10.1 Mbits/sec    <span class="m">0</span>    <span class="m">209</span> KBytes       
</span></span><span class="line"><span class="cl"><span class="o">[</span>  5<span class="o">]</span>   2.00-3.00   sec  9.30 MBytes  78.0 Mbits/sec    <span class="m">0</span>   1.56 MBytes       
</span></span><span class="line"><span class="cl"><span class="o">[</span>  5<span class="o">]</span>   3.00-4.00   sec  8.75 MBytes  73.4 Mbits/sec    <span class="m">7</span>   5.09 MBytes       
</span></span><span class="line"><span class="cl"><span class="o">[</span>  5<span class="o">]</span>   4.00-5.00   sec  18.8 MBytes   <span class="m">157</span> Mbits/sec    <span class="m">0</span>   23.1 MBytes       
</span></span><span class="line"><span class="cl"><span class="o">[</span>  5<span class="o">]</span>   5.00-6.00   sec  32.5 MBytes   <span class="m">273</span> Mbits/sec    <span class="m">0</span>   31.6 MBytes       
</span></span><span class="line"><span class="cl"><span class="o">[</span>  5<span class="o">]</span>   6.00-7.00   sec  32.5 MBytes   <span class="m">273</span> Mbits/sec    <span class="m">0</span>   31.6 MBytes       
</span></span><span class="line"><span class="cl"><span class="o">[</span>  5<span class="o">]</span>   7.00-8.00   sec  32.5 MBytes   <span class="m">273</span> Mbits/sec    <span class="m">0</span>   31.6 MBytes       
</span></span><span class="line"><span class="cl"><span class="o">[</span>  5<span class="o">]</span>   8.00-9.00   sec  32.5 MBytes   <span class="m">273</span> Mbits/sec    <span class="m">0</span>   31.9 MBytes       
</span></span><span class="line"><span class="cl"><span class="o">[</span>  5<span class="o">]</span>   9.00-10.00  sec  32.5 MBytes   <span class="m">273</span> Mbits/sec    <span class="m">0</span>   31.9 MBytes       
</span></span><span class="line"><span class="cl">- - - - - - - - - - - - - - - - - - - - - - - - -
</span></span><span class="line"><span class="cl"><span class="o">[</span> ID<span class="o">]</span> Interval           Transfer     Bitrate         Retr
</span></span><span class="line"><span class="cl"><span class="o">[</span>  5<span class="o">]</span>   0.00-10.00  sec   <span class="m">201</span> MBytes   <span class="m">168</span> Mbits/sec    <span class="m">7</span>             sender
</span></span><span class="line"><span class="cl"><span class="o">[</span>  5<span class="o">]</span>   0.00-10.36  sec   <span class="m">200</span> MBytes   <span class="m">162</span> Mbits/sec                  receiver
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">iperf Done.
</span></span></code></pre></div><h3 id="流媒体解锁">流媒体解锁</h3>
<p>支持Netflix</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">** 测试时间: Sun Jul  <span class="m">3</span> 14:14:34 CST <span class="m">2022</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> ** 正在测试IPv4解锁情况 
</span></span><span class="line"><span class="cl">--------------------------------
</span></span><span class="line"><span class="cl"> ** 您的网络为: Oracle Cloud <span class="o">(</span>140.238.*.*<span class="o">)</span> 
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="o">============[</span> Multination <span class="o">]============</span>
</span></span><span class="line"><span class="cl"> Dazn:                                  No
</span></span><span class="line"><span class="cl"> HotStar:                               No
</span></span><span class="line"><span class="cl"> Disney+:                               No
</span></span><span class="line"><span class="cl"> Netflix:                               Yes <span class="o">(</span>Region: BR<span class="o">)</span>
</span></span><span class="line"><span class="cl"> YouTube Premium:                       Yes <span class="o">(</span>Region: BR<span class="o">)</span>
</span></span><span class="line"><span class="cl"> Amazon Prime Video:                    Yes <span class="o">(</span>Region: BR<span class="o">)</span>
</span></span><span class="line"><span class="cl"> TVBAnywhere+:                          Yes
</span></span><span class="line"><span class="cl"> iQyi Oversea Region:                   BR
</span></span><span class="line"><span class="cl"> Viu.com:                               No
</span></span><span class="line"><span class="cl"> YouTube CDN:                           Associated with <span class="o">[</span>IXBR<span class="o">]</span>
</span></span><span class="line"><span class="cl"> Netflix Preferred CDN:                 Sao Paulo  
</span></span><span class="line"><span class="cl"> Spotify Registration:                  No
</span></span><span class="line"><span class="cl"> Steam Currency:                        <span class="nv">BRL</span>
</span></span><span class="line"><span class="cl"><span class="o">=======================================</span>
</span></span><span class="line"><span class="cl"><span class="o">===========[</span> South America <span class="o">]===========</span>
</span></span><span class="line"><span class="cl"> Star+:                                 No
</span></span><span class="line"><span class="cl"> HBO Max:                               Yes <span class="o">(</span>Region: BR<span class="o">)</span>
</span></span><span class="line"><span class="cl"> DirecTV Go:                            Yes <span class="o">(</span>Region: BR<span class="o">)</span>
</span></span><span class="line"><span class="cl"> Funimation:                            Yes <span class="o">(</span>Region: BR<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">=======================================</span>
</span></span></code></pre></div><h2 id="玩法">玩法</h2>
<p>流媒体解锁不错，就是到国内延迟太高了</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Hugo添加不蒜子Busuanzi站点访问量与阅读量统计</title>
      <link>https://blog.kanikig.xyz/hugo-busuanzi/</link>
      <pubDate>Sat, 02 Jul 2022 15:06:51 +0800</pubDate>
      
      <guid>https://blog.kanikig.xyz/hugo-busuanzi/</guid>
      <description>对任意hugo主题均适用，只需要改4个地方，以papermod主题为例 head 找到主题文件夹内的head.html，例如papermod的路径为t</description>
      <content:encoded><![CDATA[<p>对任意hugo主题均适用，只需要改4个地方，以<code>papermod</code>主题为例</p>
<h2 id="head">head</h2>
<p>找到主题文件夹内的<code>head.html</code>，例如<code>papermod</code>的路径为<code>themes/PaperModX/layouts/partials/head.html</code></p>
<p>添加如下代码</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="c">&lt;!-- busuanzi --&gt;</span>
</span></span><span class="line"><span class="cl">{{- if .Site.Params.busuanzi.enable -}}
</span></span><span class="line"><span class="cl">  <span class="p">&lt;</span><span class="nt">script</span> <span class="na">async</span> <span class="na">src</span><span class="o">=</span><span class="s">&#34;//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js&#34;</span><span class="p">&gt;&lt;/</span><span class="nt">script</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;</span><span class="nt">meta</span> <span class="na">name</span><span class="o">=</span><span class="s">&#34;referrer&#34;</span> <span class="na">content</span><span class="o">=</span><span class="s">&#34;no-referrer-when-downgrade&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">{{- end -}}
</span></span></code></pre></div><p>可以添加在<code>google-site-verification</code>那块后面，<code>Styles</code>前面，方便寻找</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2022/07/02/iShot2022-07-02-15.43.42.png" alt="iShot2022-07-02 15.43.42"  /></p>
<h2 id="footer">footer</h2>
<p>在站点底部显示总访问量与访客数，一般和<code>head</code>同目录，添加如下代码，注意添加在<code>&lt;footer&gt;</code>代码块里</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="c">&lt;!-- busuanzi --&gt;</span>
</span></span><span class="line"><span class="cl">{{ if .Site.Params.busuanzi.enable -}}
</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">div</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;busuanzi-footer&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;</span><span class="nt">span</span> <span class="na">id</span><span class="o">=</span><span class="s">&#34;busuanzi_container_site_pv&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    本站总访问量<span class="p">&lt;</span><span class="nt">span</span> <span class="na">id</span><span class="o">=</span><span class="s">&#34;busuanzi_value_site_pv&#34;</span><span class="p">&gt;&lt;/</span><span class="nt">span</span><span class="p">&gt;</span>次
</span></span><span class="line"><span class="cl">  <span class="p">&lt;/</span><span class="nt">span</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;</span><span class="nt">span</span> <span class="na">id</span><span class="o">=</span><span class="s">&#34;busuanzi_container_site_uv&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    本站访客数<span class="p">&lt;</span><span class="nt">span</span> <span class="na">id</span><span class="o">=</span><span class="s">&#34;busuanzi_value_site_uv&#34;</span><span class="p">&gt;&lt;/</span><span class="nt">span</span><span class="p">&gt;</span>人次
</span></span><span class="line"><span class="cl">  <span class="p">&lt;/</span><span class="nt">span</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">{{- end -}}
</span></span></code></pre></div><p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2022/07/02/iShot2022-07-02-15.43.22.png" alt="iShot2022-07-02 15.43.22"  /></p>
<h2 id="single">single</h2>
<p>用于显示每篇文章阅读量，有的主题是和上面两个同目录，有的不是，自己搜索下，<code>papermod</code>是在<code>themes/PaperModX/layouts/_default/single.html</code>，一样注意加在<code>&lt;header&gt;</code>代码块内</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="c">&lt;!-- busuanzi --&gt;</span>
</span></span><span class="line"><span class="cl">{{ if .Site.Params.busuanzi.enable -}}
</span></span><span class="line"><span class="cl">  <span class="p">&lt;</span><span class="nt">span</span> <span class="na">id</span><span class="o">=</span><span class="s">&#34;busuanzi_container_page_pv&#34;</span><span class="p">&gt;</span>本文阅读量<span class="p">&lt;</span><span class="nt">span</span> <span class="na">id</span><span class="o">=</span><span class="s">&#34;busuanzi_value_page_pv&#34;</span><span class="p">&gt;&lt;/</span><span class="nt">span</span><span class="p">&gt;</span>次<span class="p">&lt;/</span><span class="nt">span</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">{{- end }}
</span></span></code></pre></div><p>这里要根据不同主题自己改动，如<code>papermod</code>是在<code>post-meta</code>这块，为了套用它的颜色和格式在外面套了<code>&lt;div&gt;</code>，加了个分隔符</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="c">&lt;!-- busuanzi --&gt;</span>
</span></span><span class="line"><span class="cl">{{ if .Site.Params.busuanzi.enable -}}
</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">div</span>  <span class="na">class</span><span class="o">=</span><span class="s">&#34;meta-item&#34;</span><span class="p">&gt;</span><span class="err">&amp;</span>nbsp·<span class="err">&amp;</span>nbsp
</span></span><span class="line"><span class="cl">  <span class="p">&lt;</span><span class="nt">span</span> <span class="na">id</span><span class="o">=</span><span class="s">&#34;busuanzi_container_page_pv&#34;</span><span class="p">&gt;</span>本文阅读量<span class="p">&lt;</span><span class="nt">span</span> <span class="na">id</span><span class="o">=</span><span class="s">&#34;busuanzi_value_page_pv&#34;</span><span class="p">&gt;&lt;/</span><span class="nt">span</span><span class="p">&gt;</span>次<span class="p">&lt;/</span><span class="nt">span</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">{{- end }}
</span></span></code></pre></div><p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2022/07/02/iShot2022-07-02-15.44.16.png" alt="iShot2022-07-02 15.44.16"  /></p>
<h2 id="config">config</h2>
<p>回到根目录改<code>config.yml</code>，在<code>params</code>里加上两行</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">params</span><span class="p">:</span><span class="w">  
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">busuanzi</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">enable</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span></span></span></code></pre></div><p>不想显示统计改成false就行了</p>
<p>如果是<code>toml</code>的配置文件自己按格式改就行，属性都一样</p>
<h2 id="效果">效果</h2>
<p>全站</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2022/07/02/iShot2022-07-02-15.53.57.png" alt="iShot2022-07-02 15.53.57"  /></p>
<p>单页</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2022/07/02/iShot2022-07-02-15.54.52.png" alt="iShot2022-07-02 15.54.52"  /></p>
<p>效果如上</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Oracle甲骨文悉尼服务器测评</title>
      <link>https://blog.kanikig.xyz/oracle-vps-sydney/</link>
      <pubDate>Fri, 01 Jul 2022 20:53:04 +0800</pubDate>
      
      <guid>https://blog.kanikig.xyz/oracle-vps-sydney/</guid>
      <description>前言 两个多月没更新了，不是懒，是上海疫情被封了，用来写博客的电脑在办公室，断电整整两个月。最近终于通电可以远程连上了，顺便把博客系统从臃肿的</description>
      <content:encoded><![CDATA[<h2 id="前言">前言</h2>
<p>两个多月没更新了，不是懒，是上海疫情被封了，用来写博客的电脑在办公室，断电整整两个月。最近终于通电可以远程连上了，顺便把博客系统从臃肿的hexo更换到hugo。</p>
<p>这次给大家带来已经过保质期很久的甲骨文悉尼测评。。</p>
<h2 id="测评">测评</h2>
<p>测试使用的是悉尼免费AMD</p>
<h3 id="lemonbench">LemonBench</h3>
<p><a href="https://paste.ubuntu.com/p/6PVZ2V5kPG/">完整测试报告</a></p>
<h4 id="系统信息">系统信息</h4>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"> -&gt; System Information
</span></span><span class="line"><span class="cl"> 
</span></span><span class="line"><span class="cl"> OS Release:		Ubuntu 20.04.4 LTS <span class="o">(</span>Focal Fossa<span class="o">)</span>  <span class="o">(</span>x86_64<span class="o">)</span>
</span></span><span class="line"><span class="cl"> CPU Model:		AMD EPYC <span class="m">7551</span> 32-Core Processor  2.00 GHz
</span></span><span class="line"><span class="cl"> CPU Cache Size:	<span class="m">512</span> KB
</span></span><span class="line"><span class="cl"> CPU Number:		<span class="m">2</span> vCPU
</span></span><span class="line"><span class="cl"> Virt Type:		KVM
</span></span><span class="line"><span class="cl"> Memory Usage:		546.27 MB / 975.36 MB
</span></span><span class="line"><span class="cl"> Swap Usage:		<span class="o">[</span> No Swapfile / Swap partition <span class="o">]</span>
</span></span><span class="line"><span class="cl"> Disk Usage:		7.39 GB / 47.16 GB
</span></span><span class="line"><span class="cl"> Boot Device:		/dev/sda1
</span></span><span class="line"><span class="cl"> Load <span class="o">(</span>1/5/15min<span class="o">)</span>:	0.55 0.20 0.07 
</span></span><span class="line"><span class="cl"> CPU Usage:		0.0% used, 0.0% iowait, % steal
</span></span><span class="line"><span class="cl"> Kernel Version:	5.17.1
</span></span><span class="line"><span class="cl"> Network CC Method:	bbr + fq
</span></span></code></pre></div><h4 id="网络">网络</h4>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">152.67.*.*
</span></span><span class="line"><span class="cl">AU / Australia
</span></span><span class="line"><span class="cl">AS31898 / ORACLE-BMC-31898
</span></span></code></pre></div><h4 id="性能">性能</h4>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"> -&gt; CPU Performance Test <span class="o">(</span>Fast Mode, 1-Pass @ 5sec<span class="o">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="m">1</span> Thread Test:			<span class="m">550</span> Scores
</span></span><span class="line"><span class="cl"> <span class="m">2</span> Threads Test:		<span class="m">437</span> Scores
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> -&gt; Memory Performance Test <span class="o">(</span>Fast Mode, 1-Pass @ 5sec<span class="o">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="m">1</span> Thread - Read Test :		14981.24 MB/s
</span></span><span class="line"><span class="cl"> <span class="m">1</span> Thread - Write Test:		6698.71 MB/s
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> -&gt; Disk Speed Test <span class="o">(</span>4K Block/1M Block, Direct Mode<span class="o">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> Test Name		Write Speed				Read Speed
</span></span><span class="line"><span class="cl"> 100MB-4K Block		8.2 MB/s <span class="o">(</span><span class="m">2012</span> IOPS, 12.72 s<span class="o">)</span>		10.3 MB/s <span class="o">(</span><span class="m">2510</span> IOPS, 10.20 s<span class="o">)</span>
</span></span><span class="line"><span class="cl"> 1GB-1M Block		53.8 MB/s <span class="o">(</span><span class="m">51</span> IOPS, 19.50 s<span class="o">)</span>		52.0 MB/s <span class="o">(</span><span class="m">49</span> IOPS, 20.17 s<span class="o">)</span>
</span></span></code></pre></div><h3 id="geekbench">Geekbench</h3>
<p>geekbench4</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">Geekbench <span class="m">4</span> Benchmark Test:
</span></span><span class="line"><span class="cl">---------------------------------
</span></span><span class="line"><span class="cl">Test            <span class="p">|</span> Value                         
</span></span><span class="line"><span class="cl">                <span class="p">|</span>                               
</span></span><span class="line"><span class="cl">Single Core     <span class="p">|</span> <span class="m">1614</span>                          
</span></span><span class="line"><span class="cl">Multi Core      <span class="p">|</span> <span class="m">1499</span>                          
</span></span><span class="line"><span class="cl">Full Test       <span class="p">|</span> https://browser.geekbench.com/v4/cpu/16578306
</span></span></code></pre></div><h3 id="speedtest">Speedtest</h3>
<p>本地速度：500M</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">   Speedtest by Ookla
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">     Server: Optus - Sydney <span class="o">(</span><span class="nv">id</span> <span class="o">=</span> 1267<span class="o">)</span>
</span></span><span class="line"><span class="cl">        ISP: Oracle Cloud
</span></span><span class="line"><span class="cl">    Latency:     1.00 ms   <span class="o">(</span>0.04 ms jitter<span class="o">)</span>
</span></span><span class="line"><span class="cl">   Download:   455.41 Mbps <span class="o">(</span>data used: 652.6 MB<span class="o">)</span>                               
</span></span><span class="line"><span class="cl">     Upload:   466.32 Mbps <span class="o">(</span>data used: 216.5 MB<span class="o">)</span>                               
</span></span><span class="line"><span class="cl">Packet Loss:     0.0%
</span></span><span class="line"><span class="cl"> Result URL: https://www.speedtest.net/result/c/e52f9380-9d9d-4951-b332-95efbdf2d197
</span></span></code></pre></div><h3 id="superspeed">superspeed</h3>
<p>移动速度不错，电信不太行。</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2022/07/01/image-20220701203722081.png" alt="image-20220701203722081"  /></p>
<h3 id="traceroute">TraceRoute</h3>
<p>移动直连，电信联通绕美</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="o">[</span>Info<span class="o">]</span> 测试路由 到 广州移动 中 ...
</span></span><span class="line"><span class="cl"> <span class="m">1</span>  140.91.212.43  0.71 ms  AS31898  澳大利亚, 新南威尔士州, 悉尼, oracle.com
</span></span><span class="line"><span class="cl"> <span class="m">2</span>  ip-30.189.241.43.vocus.net.au <span class="o">(</span>43.241.189.30<span class="o">)</span>  1.02 ms  AS4826  澳大利亚, 新南威尔士州, 悉尼, vocus.com.au
</span></span><span class="line"><span class="cl"> <span class="m">3</span>  ip-29.189.241.43.vocus.net.au <span class="o">(</span>43.241.189.29<span class="o">)</span>  1.41 ms  AS4826  澳大利亚, 新南威尔士州, 悉尼, vocus.com.au
</span></span><span class="line"><span class="cl"> <span class="m">4</span>  be114.cor02.syd04.nsw.vocus.network <span class="o">(</span>114.31.192.44<span class="o">)</span>  1.50 ms  AS4826  澳大利亚, 新南威尔士州, 悉尼, vocus.com.au
</span></span><span class="line"><span class="cl"> <span class="m">5</span>  be101.bdr02.syd03.nsw.vocus.network <span class="o">(</span>114.31.192.37<span class="o">)</span>  1.62 ms  AS4826  澳大利亚, 新南威尔士州, 悉尼, vocus.com.au
</span></span><span class="line"><span class="cl"> <span class="m">6</span>  223.119.48.10  1.95 ms  AS58453  澳大利亚, 新南威尔士州, 悉尼, chinamobile.com, 移动
</span></span><span class="line"><span class="cl"> <span class="m">7</span>  223.118.4.86  93.42 ms  AS58453  澳大利亚, 新南威尔士州, 悉尼, chinamobile.com, 移动
</span></span><span class="line"><span class="cl"> <span class="m">8</span>  223.120.2.82  159.99 ms  AS58453  中国, 广东, 广州, chinamobile.com, 移动
</span></span><span class="line"><span class="cl"> <span class="m">9</span>  221.183.55.86  176.14 ms  AS9808  中国, 广东, 广州, chinamobile.com, 移动
</span></span><span class="line"><span class="cl"><span class="m">10</span>  221.176.24.133  161.53 ms  AS9808  中国, 广东, 广州, chinamobile.com, 移动
</span></span><span class="line"><span class="cl"><span class="m">11</span>  221.176.22.109  172.41 ms  AS9808  中国, 广东, 广州, chinamobile.com, 移动
</span></span><span class="line"><span class="cl"><span class="m">12</span>  111.24.4.233  154.18 ms  AS9808  中国, 广东, 广州, chinamobile.com, 移动
</span></span><span class="line"><span class="cl"><span class="m">13</span>  *
</span></span><span class="line"><span class="cl"><span class="m">14</span>  120.197.29.150  135.04 ms  AS56040  中国, 广东, 广州, chinamobile.com, 移动
</span></span><span class="line"><span class="cl"><span class="o">[</span>Info<span class="o">]</span> 测试路由 到 广州移动 完成 ！
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="o">[</span>Info<span class="o">]</span> 测试路由 到 浙江杭州移动 中 ...
</span></span><span class="line"><span class="cl">traceroute to 120.199.239.1 <span class="o">(</span>120.199.239.1<span class="o">)</span>, <span class="m">30</span> hops max, <span class="m">32</span> byte packets
</span></span><span class="line"><span class="cl"> <span class="m">1</span>  140.91.212.50  0.23 ms  AS31898  澳大利亚, 新南威尔士州, 悉尼, oracle.com
</span></span><span class="line"><span class="cl"> <span class="m">2</span>  ip-30.189.241.43.vocus.net.au <span class="o">(</span>43.241.189.30<span class="o">)</span>  1.18 ms  AS4826  澳大利亚, 新南威尔士州, 悉尼, vocus.com.au
</span></span><span class="line"><span class="cl"> <span class="m">3</span>  ip-29.189.241.43.vocus.net.au <span class="o">(</span>43.241.189.29<span class="o">)</span>  1.40 ms  AS4826  澳大利亚, 新南威尔士州, 悉尼, vocus.com.au
</span></span><span class="line"><span class="cl"> <span class="m">4</span>  be114.cor02.syd04.nsw.vocus.network <span class="o">(</span>114.31.192.44<span class="o">)</span>  1.60 ms  AS4826  澳大利亚, 新南威尔士州, 悉尼, vocus.com.au
</span></span><span class="line"><span class="cl"> <span class="m">5</span>  be101.bdr02.syd03.nsw.vocus.network <span class="o">(</span>114.31.192.37<span class="o">)</span>  1.58 ms  AS4826  澳大利亚, 新南威尔士州, 悉尼, vocus.com.au
</span></span><span class="line"><span class="cl"> <span class="m">6</span>  223.119.48.10  2.20 ms  AS58453  澳大利亚, 新南威尔士州, 悉尼, chinamobile.com, 移动
</span></span><span class="line"><span class="cl"> <span class="m">7</span>  223.118.4.86  93.50 ms  AS58453  澳大利亚, 新南威尔士州, 悉尼, chinamobile.com, 移动
</span></span><span class="line"><span class="cl"> <span class="m">8</span>  223.118.3.117  128.26 ms  AS58453  中国, 香港, chinamobile.com, 移动
</span></span><span class="line"><span class="cl"> <span class="m">9</span>  221.183.30.141  131.83 ms  AS9808  中国, 广东, 广州, chinamobile.com, 移动
</span></span><span class="line"><span class="cl"><span class="m">10</span>  221.176.24.57  134.92 ms  AS9808  中国, 广东, 广州, chinamobile.com, 移动
</span></span><span class="line"><span class="cl"><span class="m">11</span>  221.176.22.113  191.87 ms  AS9808  中国, 广东, 广州, chinamobile.com, 移动
</span></span><span class="line"><span class="cl"><span class="m">12</span>  111.24.5.173  134.64 ms  AS9808  中国, 广东, 广州, chinamobile.com, 移动
</span></span><span class="line"><span class="cl"><span class="m">13</span>  221.183.109.230  180.06 ms  AS9808  中国, 浙江, 杭州, chinamobile.com, 移动
</span></span><span class="line"><span class="cl"><span class="m">14</span>  120.199.239.1  179.62 ms  AS56041  中国, 浙江, 杭州, chinamobile.com, 移动
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="o">[</span>Info<span class="o">]</span> 测试路由 到 浙江杭州移动 完成 ！
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="o">[</span>Info<span class="o">]</span> 测试路由 到 上海电信 中 ...
</span></span><span class="line"><span class="cl">traceroute to 101.95.110.149 <span class="o">(</span>101.95.110.149<span class="o">)</span>, <span class="m">30</span> hops max, <span class="m">32</span> byte packets
</span></span><span class="line"><span class="cl"> <span class="m">1</span>  140.91.212.43  0.93 ms  AS31898  澳大利亚, 新南威尔士州, 悉尼, oracle.com
</span></span><span class="line"><span class="cl"> <span class="m">2</span>  ip-30.189.241.43.vocus.net.au <span class="o">(</span>43.241.189.30<span class="o">)</span>  1.08 ms  AS4826  澳大利亚, 新南威尔士州, 悉尼, vocus.com.au
</span></span><span class="line"><span class="cl"> <span class="m">3</span>  ip-29.189.241.43.vocus.net.au <span class="o">(</span>43.241.189.29<span class="o">)</span>  1.35 ms  AS4826  澳大利亚, 新南威尔士州, 悉尼, vocus.com.au
</span></span><span class="line"><span class="cl"> <span class="m">4</span>  be114.cor02.syd04.nsw.vocus.network <span class="o">(</span>114.31.192.44<span class="o">)</span>  149.48 ms  AS4826  澳大利亚, 新南威尔士州, 悉尼, vocus.com.au
</span></span><span class="line"><span class="cl"> <span class="m">5</span>  *
</span></span><span class="line"><span class="cl"> <span class="m">6</span>  173.205.35.1  149.53 ms  AS3257  美国, 加利福尼亚州, 圣何塞, gtt.net
</span></span><span class="line"><span class="cl"> <span class="m">7</span>  ae6.cr6-sjc1.ip4.gtt.net <span class="o">(</span>89.149.180.78<span class="o">)</span>  152.75 ms  AS3257  美国, 加利福尼亚州, 圣何塞, gtt.net
</span></span><span class="line"><span class="cl"> <span class="m">8</span>  *
</span></span><span class="line"><span class="cl"> <span class="m">9</span>  *
</span></span><span class="line"><span class="cl"><span class="m">10</span>  202.97.33.153  317.05 ms  AS4134  中国, 上海, chinatelecom.com.cn, 电信
</span></span><span class="line"><span class="cl"><span class="m">11</span>  202.97.24.241  291.26 ms  AS4134  中国, 上海, chinatelecom.com.cn, 电信
</span></span><span class="line"><span class="cl"><span class="m">12</span>  *
</span></span><span class="line"><span class="cl"><span class="m">13</span>  101.95.89.34  294.34 ms  AS4812  中国, 上海, chinatelecom.com.cn, 电信
</span></span><span class="line"><span class="cl"><span class="m">14</span>  101.95.110.149  292.79 ms  AS4812  中国, 上海, chinatelecom.com.cn, 电信
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="o">[</span>Info<span class="o">]</span> 测试路由 到 上海电信 完成 ！
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="o">[</span>Info<span class="o">]</span> 测试路由 到 江苏宿迁联通 中 ...
</span></span><span class="line"><span class="cl">traceroute to 153.36.202.5 <span class="o">(</span>153.36.202.5<span class="o">)</span>, <span class="m">30</span> hops max, <span class="m">32</span> byte packets
</span></span><span class="line"><span class="cl"> <span class="m">1</span>  140.91.212.51  0.27 ms  AS31898  澳大利亚, 新南威尔士州, 悉尼, oracle.com
</span></span><span class="line"><span class="cl"> <span class="m">2</span>  ip-30.189.241.43.vocus.net.au <span class="o">(</span>43.241.189.30<span class="o">)</span>  1.35 ms  AS4826  澳大利亚, 新南威尔士州, 悉尼, vocus.com.au
</span></span><span class="line"><span class="cl"> <span class="m">3</span>  ip-29.189.241.43.vocus.net.au <span class="o">(</span>43.241.189.29<span class="o">)</span>  1.46 ms  AS4826  澳大利亚, 新南威尔士州, 悉尼, vocus.com.au
</span></span><span class="line"><span class="cl"> <span class="m">4</span>  be114.cor02.syd04.nsw.vocus.network <span class="o">(</span>114.31.192.44<span class="o">)</span>  149.59 ms  AS4826  澳大利亚, 新南威尔士州, 悉尼, vocus.com.au
</span></span><span class="line"><span class="cl"> <span class="m">5</span>  be202.bdr03.sjc01.ca.us.vocus.network <span class="o">(</span>114.31.199.43<span class="o">)</span>  152.88 ms  AS4826  美国, 加利福尼亚州, 圣何塞, vocus.com.au
</span></span><span class="line"><span class="cl"> <span class="m">6</span>  173.205.35.1  210.39 ms  AS3257  美国, 加利福尼亚州, 圣何塞, gtt.net
</span></span><span class="line"><span class="cl"> <span class="m">7</span>  ae20.cr2-sjc1.ip4.gtt.net <span class="o">(</span>89.149.183.9<span class="o">)</span>  152.57 ms  AS3257  美国, 加利福尼亚州, 圣何塞, gtt.net
</span></span><span class="line"><span class="cl"> <span class="m">8</span>  as4837.cr5-sjc1.ip4.gtt.net <span class="o">(</span>173.205.56.210<span class="o">)</span>  361.20 ms  AS3257  美国, 加利福尼亚州, 圣何塞, gtt.net
</span></span><span class="line"><span class="cl"> <span class="m">9</span>  *
</span></span><span class="line"><span class="cl"><span class="m">10</span>  219.158.8.181  347.69 ms  AS4837  中国, 上海, chinaunicom.com, 联通
</span></span><span class="line"><span class="cl"><span class="m">11</span>  219.158.7.125  245.67 ms  AS4837  中国, 上海, chinaunicom.com, 联通
</span></span><span class="line"><span class="cl"><span class="m">12</span>  *
</span></span><span class="line"><span class="cl"><span class="m">13</span>  221.6.174.82  357.66 ms  AS4837  中国, 江苏, 宿迁, chinaunicom.com, 联通
</span></span></code></pre></div><h3 id="iperf3">iperf3</h3>
<p>广州移动111.45晚高峰单线程</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="o">[</span>  5<span class="o">]</span> <span class="nb">local</span> 10.0.0.78 port <span class="m">43392</span> connected to 111.45.32.36 port <span class="m">20020</span>
</span></span><span class="line"><span class="cl"><span class="o">[</span> ID<span class="o">]</span> Interval           Transfer     Bitrate         Retr  Cwnd
</span></span><span class="line"><span class="cl"><span class="o">[</span>  5<span class="o">]</span>   0.00-1.00   sec  1.90 MBytes  15.9 Mbits/sec    <span class="m">0</span>    <span class="m">206</span> KBytes       
</span></span><span class="line"><span class="cl"><span class="o">[</span>  5<span class="o">]</span>   1.00-2.00   sec  17.2 MBytes   <span class="m">144</span> Mbits/sec    <span class="m">0</span>   8.51 MBytes       
</span></span><span class="line"><span class="cl"><span class="o">[</span>  5<span class="o">]</span>   2.00-3.00   sec  50.0 MBytes   <span class="m">419</span> Mbits/sec    <span class="m">0</span>   24.9 MBytes       
</span></span><span class="line"><span class="cl"><span class="o">[</span>  5<span class="o">]</span>   3.00-4.00   sec  48.8 MBytes   <span class="m">409</span> Mbits/sec    <span class="m">0</span>   24.9 MBytes       
</span></span><span class="line"><span class="cl"><span class="o">[</span>  5<span class="o">]</span>   4.00-5.00   sec  47.5 MBytes   <span class="m">398</span> Mbits/sec    <span class="m">0</span>   24.9 MBytes       
</span></span><span class="line"><span class="cl"><span class="o">[</span>  5<span class="o">]</span>   5.00-6.00   sec  48.8 MBytes   <span class="m">409</span> Mbits/sec    <span class="m">0</span>   24.9 MBytes       
</span></span><span class="line"><span class="cl"><span class="o">[</span>  5<span class="o">]</span>   6.00-7.00   sec  50.0 MBytes   <span class="m">419</span> Mbits/sec    <span class="m">0</span>   25.1 MBytes       
</span></span><span class="line"><span class="cl"><span class="o">[</span>  5<span class="o">]</span>   7.00-8.00   sec  55.0 MBytes   <span class="m">461</span> Mbits/sec    <span class="m">0</span>   26.7 MBytes       
</span></span><span class="line"><span class="cl"><span class="o">[</span>  5<span class="o">]</span>   8.00-9.00   sec  56.2 MBytes   <span class="m">472</span> Mbits/sec    <span class="m">0</span>   27.8 MBytes       
</span></span><span class="line"><span class="cl"><span class="o">[</span>  5<span class="o">]</span>   9.00-10.00  sec  56.2 MBytes   <span class="m">472</span> Mbits/sec    <span class="m">0</span>   27.8 MBytes       
</span></span><span class="line"><span class="cl">- - - - - - - - - - - - - - - - - - - - - - - - -
</span></span><span class="line"><span class="cl"><span class="o">[</span> ID<span class="o">]</span> Interval           Transfer     Bitrate         Retr
</span></span><span class="line"><span class="cl"><span class="o">[</span>  5<span class="o">]</span>   0.00-10.00  sec   <span class="m">432</span> MBytes   <span class="m">362</span> Mbits/sec    <span class="m">0</span>             sender
</span></span><span class="line"><span class="cl"><span class="o">[</span>  5<span class="o">]</span>   0.00-10.22  sec   <span class="m">432</span> MBytes   <span class="m">354</span> Mbits/sec                  receiver
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">iperf Done.
</span></span></code></pre></div><h3 id="流媒体解锁">流媒体解锁</h3>
<p>168.138支持Netflix</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"> ** 测试时间: Fri Jul  <span class="m">1</span> 20:46:03 CST <span class="m">2022</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> ** 正在测试IPv4解锁情况 
</span></span><span class="line"><span class="cl">--------------------------------
</span></span><span class="line"><span class="cl"> ** 您的网络为: Oracle Cloud <span class="o">(</span>168.138.*.*<span class="o">)</span> 
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="o">============[</span> Multination <span class="o">]============</span>
</span></span><span class="line"><span class="cl"> Dazn:                                  No
</span></span><span class="line"><span class="cl"> HotStar:                               No
</span></span><span class="line"><span class="cl"> Disney+:                               No
</span></span><span class="line"><span class="cl"> Netflix:                               Yes <span class="o">(</span>Region: AU<span class="o">)</span>
</span></span><span class="line"><span class="cl"> YouTube Premium:                       No 
</span></span><span class="line"><span class="cl"> Amazon Prime Video:                    Yes <span class="o">(</span>Region: AU<span class="o">)</span>
</span></span><span class="line"><span class="cl"> TVBAnywhere+:                          Yes
</span></span><span class="line"><span class="cl"> iQyi Oversea Region:                   AU
</span></span><span class="line"><span class="cl"> Viu.com:                               No
</span></span><span class="line"><span class="cl"> YouTube CDN:                           Sydney, N.S.W. 
</span></span><span class="line"><span class="cl"> Netflix Preferred CDN:                 Sydney, N.S.W.  
</span></span><span class="line"><span class="cl"> Spotify Registration:                  No
</span></span><span class="line"><span class="cl"> Steam Currency:                        <span class="nv">AUD</span>
</span></span><span class="line"><span class="cl"><span class="o">=======================================</span>
</span></span><span class="line"><span class="cl"><span class="o">==============[</span> Oceania <span class="o">]==============</span>
</span></span><span class="line"><span class="cl"> NBA TV:                                No
</span></span><span class="line"><span class="cl"> Acorn TV:                              Yes
</span></span><span class="line"><span class="cl"> SHOWTIME:                              Yes
</span></span><span class="line"><span class="cl"> BritBox:                               Yes
</span></span><span class="line"><span class="cl"> Funimation:                            Yes <span class="o">(</span>Region: AU<span class="o">)</span>
</span></span><span class="line"><span class="cl"> Paramount+:                            Yes
</span></span><span class="line"><span class="cl"> ---AU---
</span></span><span class="line"><span class="cl"> Stan:                                  Yes
</span></span><span class="line"><span class="cl"> Binge:                                 Yes
</span></span><span class="line"><span class="cl"> Docplay:                               Yes
</span></span><span class="line"><span class="cl"> Channel 7:                             -&gt;curl: no URL specified!
</span></span><span class="line"><span class="cl">curl: try <span class="s1">&#39;curl --help&#39;</span> or <span class="s1">&#39;curl --manual&#39;</span> <span class="k">for</span> more information
</span></span><span class="line"><span class="cl"> Channel 7:                             Failed <span class="o">(</span>Network Connection<span class="o">)</span>
</span></span><span class="line"><span class="cl"> Channel 9:                             Yes
</span></span><span class="line"><span class="cl"> Channel 10:                            No
</span></span><span class="line"><span class="cl"> ABC iView:                             Yes
</span></span><span class="line"><span class="cl"> Kayo Sports:                           Yes
</span></span><span class="line"><span class="cl"> Optus Sports:                          No
</span></span><span class="line"><span class="cl"> SBS on Demand:                         Yes
</span></span><span class="line"><span class="cl"> ---NZ---
</span></span><span class="line"><span class="cl"> Neon TV:                               No
</span></span><span class="line"><span class="cl"> SkyGo NZ:                              Failed <span class="o">(</span>Unexpected Result: 404<span class="o">)</span>
</span></span><span class="line"><span class="cl"> ThreeNow:                              No
</span></span><span class="line"><span class="cl"> Maori TV:                              <span class="nv">No</span>
</span></span><span class="line"><span class="cl"><span class="o">=======================================</span>
</span></span></code></pre></div><h2 id="玩法">玩法</h2>
<p>流媒体解锁不错，移动可以拉</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Oracle甲骨文阿联酋迪拜服务器测评</title>
      <link>https://blog.kanikig.xyz/Oracle%E7%94%B2%E9%AA%A8%E6%96%87%E9%98%BF%E8%81%94%E9%85%8B%E8%BF%AA%E6%8B%9C%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%B5%8B%E8%AF%84/</link>
      <pubDate>Sat, 16 Apr 2022 15:03:40 +0000</pubDate>
      
      <guid>https://blog.kanikig.xyz/Oracle%E7%94%B2%E9%AA%A8%E6%96%87%E9%98%BF%E8%81%94%E9%85%8B%E8%BF%AA%E6%8B%9C%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%B5%8B%E8%AF%84/</guid>
      <description>前言 自从去年甲骨文开放免费ARM服务器后，大家对带宽仅50M的AMD免费服务器热情明显下降。今年甲骨文又放大招，一声不吭地把春川和迪拜AMD</description>
      <content:encoded><![CDATA[<h2 id="前言">前言</h2>
<p>自从去年甲骨文开放免费ARM服务器后，大家对带宽仅50M的AMD免费服务器热情明显下降。今年甲骨文又放大招，一声不吭地把春川和迪拜AMD带宽一下提到500M，并且目前全区域都在逐渐放开！</p>
<p>ARM虽然配置高，但除了做代理基本上都吃灰，AMD带宽的提升无疑让甲骨文又一次火爆起来。</p>
<h2 id="测评">测评</h2>
<p>测试使用的是迪拜免费AMD</p>
<h3 id="lemonbench">LemonBench</h3>
<p><a href="https://paste.ubuntu.com/p/HjNXNwXyxZ/">完整测试报告</a></p>
<h4 id="系统信息">系统信息</h4>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">-&gt; System Information
</span></span><span class="line"><span class="cl"> 
</span></span><span class="line"><span class="cl"> OS Release:		Ubuntu 20.04.4 LTS <span class="o">(</span>Focal Fossa<span class="o">)</span>  <span class="o">(</span>x86_64<span class="o">)</span>
</span></span><span class="line"><span class="cl"> CPU Model:		AMD EPYC <span class="m">7551</span> 32-Core Processor  2.00 GHz
</span></span><span class="line"><span class="cl"> CPU Cache Size:	<span class="m">512</span> KB
</span></span><span class="line"><span class="cl"> CPU Number:		<span class="m">2</span> vCPU
</span></span><span class="line"><span class="cl"> Virt Type:		KVM
</span></span><span class="line"><span class="cl"> Memory Usage:		256.05 MB / 973.40 MB
</span></span><span class="line"><span class="cl"> Swap Usage:		<span class="o">[</span> No Swapfile / Swap partition <span class="o">]</span>
</span></span><span class="line"><span class="cl"> Disk Usage:		2.64 GB / 47.16 GB
</span></span><span class="line"><span class="cl"> Boot Device:		/dev/sda1
</span></span><span class="line"><span class="cl"> Load <span class="o">(</span>1/5/15min<span class="o">)</span>:	0.18 0.09 0.09 
</span></span><span class="line"><span class="cl"> CPU Usage:		0.0% used, 0.0% iowait, 0.0% steal
</span></span><span class="line"><span class="cl"> Kernel Version:	5.17.1
</span></span><span class="line"><span class="cl"> Network CC Method:	cubic + fq_codel
</span></span></code></pre></div><h4 id="网络">网络</h4>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">139.185.*.*
</span></span><span class="line"><span class="cl">AE / United Arab Emirates
</span></span><span class="line"><span class="cl">AS31898 / ORACLE-BMC-31898
</span></span></code></pre></div><h4 id="性能">性能</h4>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"> -&gt; CPU Performance Test <span class="o">(</span>Fast Mode, 1-Pass @ 5sec<span class="o">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="m">1</span> Thread Test:			<span class="m">573</span> Scores
</span></span><span class="line"><span class="cl"> <span class="m">2</span> Threads Test:		<span class="m">591</span> Scores
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> -&gt; Memory Performance Test <span class="o">(</span>Fast Mode, 1-Pass @ 5sec<span class="o">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="m">1</span> Thread - Read Test :		15541.91 MB/s
</span></span><span class="line"><span class="cl"> <span class="m">1</span> Thread - Write Test:		7057.15 MB/s
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> -&gt; Disk Speed Test <span class="o">(</span>4K Block/1M Block, Direct Mode<span class="o">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> Test Name		Write Speed				Read Speed
</span></span><span class="line"><span class="cl"> 100MB-4K Block		9.2 MB/s <span class="o">(</span><span class="m">2236</span> IOPS, 11.45 s<span class="o">)</span>		9.8 MB/s <span class="o">(</span><span class="m">2384</span> IOPS, 10.74 s<span class="o">)</span>
</span></span><span class="line"><span class="cl"> 1GB-1M Block		55.0 MB/s <span class="o">(</span><span class="m">52</span> IOPS, 19.06 s<span class="o">)</span>		52.6 MB/s <span class="o">(</span><span class="m">50</span> IOPS, 19.93 s<span class="o">)</span>
</span></span></code></pre></div><h3 id="geekbench">Geekbench</h3>
<p>GB5不知道为什么一直失败，拿GB4应付下。注意4和5评分标准不同，没有可比性。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">Geekbench <span class="m">4</span> Benchmark Test:
</span></span><span class="line"><span class="cl">---------------------------------
</span></span><span class="line"><span class="cl">Test            <span class="p">|</span> Value                         
</span></span><span class="line"><span class="cl">                <span class="p">|</span>                               
</span></span><span class="line"><span class="cl">Single Core     <span class="p">|</span> <span class="m">1655</span>                          
</span></span><span class="line"><span class="cl">Multi Core      <span class="p">|</span> <span class="m">1513</span>                          
</span></span><span class="line"><span class="cl">Full Test       <span class="p">|</span> https://browser.geekbench.com/v4/cpu/16533138
</span></span></code></pre></div><h3 id="speedtest">Speedtest</h3>
<p>本地速度：500M</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">   Speedtest by Ookla
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">     Server: datamena - Dubai <span class="o">(</span><span class="nv">id</span> <span class="o">=</span> 41947<span class="o">)</span>
</span></span><span class="line"><span class="cl">        ISP: Oracle Corporation
</span></span><span class="line"><span class="cl">    Latency:     3.19 ms   <span class="o">(</span>0.02 ms jitter<span class="o">)</span>
</span></span><span class="line"><span class="cl">   Download:   458.76 Mbps <span class="o">(</span>data used: 669.4 MB<span class="o">)</span>                               
</span></span><span class="line"><span class="cl">     Upload:   480.55 Mbps <span class="o">(</span>data used: 217.0 MB<span class="o">)</span>                               
</span></span><span class="line"><span class="cl">Packet Loss:     0.0%
</span></span><span class="line"><span class="cl"> Result URL: https://www.speedtest.net/result/c/f0ee1e30-b1a1-4a2c-a03e-922c21d39f96
</span></span></code></pre></div><h3 id="superspeed">superspeed</h3>
<p>延迟都差不多，联通速度较差，电信移动都不错。</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2022/04/16/iShot2022-04-16-15.42.08.png" alt="iShot2022-04-16-15.42.08.png"  /></p>
<h3 id="traceroute">TraceRoute</h3>
<p>广州移动是拿我自己的<code>120.232.*.*</code>测的</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="o">[</span>Info<span class="o">]</span> 测试路由 到 广州移动 中 ...
</span></span><span class="line"><span class="cl"> <span class="m">1</span>  140.91.236.7  0.19 ms  AS31898  United Arab Emirates, Emirate of Dubai, Dubai, oracle.com
</span></span><span class="line"><span class="cl"> <span class="m">2</span>  94.203.76.154  1.16 ms  AS15802  United Arab Emirates, du.ae
</span></span><span class="line"><span class="cl"> <span class="m">3</span>  94.203.76.153  2.32 ms  AS15802  United Arab Emirates, du.ae
</span></span><span class="line"><span class="cl"> <span class="m">4</span>  *
</span></span><span class="line"><span class="cl"> <span class="m">5</span>  *
</span></span><span class="line"><span class="cl"> <span class="m">6</span>  223.119.65.241  74.64 ms  AS58453  United Arab Emirates, Emirate of Dubai, Dubai, ChinaMobile
</span></span><span class="line"><span class="cl"> <span class="m">7</span>  223.118.4.9  75.60 ms  AS58453  United Arab Emirates, Emirate of Dubai, Dubai, ChinaMobile
</span></span><span class="line"><span class="cl"> <span class="m">8</span>  223.118.3.33  282.29 ms  AS58453  China, Hong Kong, ChinaMobile
</span></span><span class="line"><span class="cl"> <span class="m">9</span>  223.120.2.6  265.00 ms  AS58453  China, Guangdong, Guangzhou, ChinaMobile
</span></span><span class="line"><span class="cl"><span class="m">10</span>  221.183.55.58  260.46 ms  AS9808  China, Guangdong, Guangzhou, ChinaMobile
</span></span><span class="line"><span class="cl"><span class="m">11</span>  221.183.25.122  244.56 ms  AS9808  China, Guangdong, Guangzhou, ChinaMobile
</span></span><span class="line"><span class="cl"><span class="m">12</span>  221.176.22.157  261.77 ms  AS9808  China, Guangdong, Guangzhou, ChinaMobile
</span></span><span class="line"><span class="cl"><span class="m">13</span>  111.24.5.189  278.82 ms  AS9808  China, Guangdong, Guangzhou, ChinaMobile
</span></span><span class="line"><span class="cl"><span class="m">14</span>  *
</span></span><span class="line"><span class="cl"><span class="m">15</span>  *
</span></span><span class="line"><span class="cl"><span class="m">16</span>  120.241.242.78  267.78 ms  AS56040  China, Guangdong, Guangzhou, ChinaMobile
</span></span><span class="line"><span class="cl"><span class="m">17</span>  *
</span></span><span class="line"><span class="cl"><span class="m">18</span>  *
</span></span><span class="line"><span class="cl"><span class="o">[</span>Info<span class="o">]</span> 测试路由 到 广州移动 完成 ！
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="o">[</span>Info<span class="o">]</span> 测试路由 到 浙江杭州移动 中 ...
</span></span><span class="line"><span class="cl">traceroute to 120.199.239.1 <span class="o">(</span>120.199.239.1<span class="o">)</span>, <span class="m">30</span> hops max, <span class="m">32</span> byte packets
</span></span><span class="line"><span class="cl"> <span class="m">1</span>  140.91.236.13  0.51 ms  AS31898  United Arab Emirates, Emirate of Dubai, Dubai, oracle.com
</span></span><span class="line"><span class="cl"> <span class="m">2</span>  94.203.76.154  1.12 ms  AS15802  United Arab Emirates, du.ae
</span></span><span class="line"><span class="cl"> <span class="m">3</span>  94.203.76.153  2.39 ms  AS15802  United Arab Emirates, du.ae
</span></span><span class="line"><span class="cl"> <span class="m">4</span>  *
</span></span><span class="line"><span class="cl"> <span class="m">5</span>  *
</span></span><span class="line"><span class="cl"> <span class="m">6</span>  223.119.65.241  74.56 ms  AS58453  United Arab Emirates, Emirate of Dubai, Dubai, ChinaMobile
</span></span><span class="line"><span class="cl"> <span class="m">7</span>  223.118.4.9  75.54 ms  AS58453  United Arab Emirates, Emirate of Dubai, Dubai, ChinaMobile
</span></span><span class="line"><span class="cl"> <span class="m">8</span>  223.118.3.33  268.92 ms  AS58453  China, Hong Kong, ChinaMobile
</span></span><span class="line"><span class="cl"> <span class="m">9</span>  221.183.21.5  246.90 ms  AS9808  China, Hong Kong, ChinaMobile
</span></span><span class="line"><span class="cl"><span class="m">10</span>  221.176.24.57  262.39 ms  AS9808  China, Guangdong, Guangzhou, ChinaMobile
</span></span><span class="line"><span class="cl"><span class="m">11</span>  221.176.24.157  263.10 ms  AS9808  China, Guangdong, Guangzhou, ChinaMobile
</span></span><span class="line"><span class="cl"><span class="m">12</span>  111.24.5.173  253.61 ms  AS9808  China, Guangdong, Guangzhou, ChinaMobile
</span></span><span class="line"><span class="cl"><span class="m">13</span>  221.176.15.130  269.31 ms  AS9808  China, Zhejiang, Hangzhou, ChinaMobile
</span></span><span class="line"><span class="cl"><span class="m">14</span>  *
</span></span><span class="line"><span class="cl"><span class="m">15</span>  120.199.239.1  268.74 ms  AS56041  China, Zhejiang, Hangzhou, ChinaMobile
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="o">[</span>Info<span class="o">]</span> 测试路由 到 浙江杭州移动 完成 ！
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="o">[</span>Info<span class="o">]</span> 测试路由 到 江苏宿迁联通 中 ...
</span></span><span class="line"><span class="cl">traceroute to 153.36.202.5 <span class="o">(</span>153.36.202.5<span class="o">)</span>, <span class="m">30</span> hops max, <span class="m">32</span> byte packets
</span></span><span class="line"><span class="cl"> <span class="m">1</span>  140.91.236.7  0.41 ms  AS31898  United Arab Emirates, Emirate of Dubai, Dubai, oracle.com
</span></span><span class="line"><span class="cl"> <span class="m">2</span>  94.203.76.154  1.23 ms  AS15802  United Arab Emirates, du.ae
</span></span><span class="line"><span class="cl"> <span class="m">3</span>  94.203.76.153  2.33 ms  AS15802  United Arab Emirates, du.ae
</span></span><span class="line"><span class="cl"> <span class="m">4</span>  *
</span></span><span class="line"><span class="cl"> <span class="m">5</span>  ae-42.a01.sngpsi07.sg.bb.gin.ntt.net <span class="o">(</span>116.51.26.81<span class="o">)</span>  93.86 ms  AS2914  Singapore, ntt.com
</span></span><span class="line"><span class="cl"> <span class="m">6</span>  ae-12.r22.sngpsi07.sg.bb.gin.ntt.net <span class="o">(</span>129.250.2.123<span class="o">)</span>  87.32 ms  AS2914  Singapore, ntt.com
</span></span><span class="line"><span class="cl"> <span class="m">7</span>  *
</span></span><span class="line"><span class="cl"> <span class="m">8</span>  ae-2.r02.osakjp02.jp.bb.gin.ntt.net <span class="o">(</span>129.250.2.128<span class="o">)</span>  152.49 ms  AS2914  Japan, Osaka, ntt.com
</span></span><span class="line"><span class="cl"> <span class="m">9</span>  219.158.43.145  251.26 ms  AS4837  China, Shanghai, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="m">10</span>  219.158.6.205  221.05 ms  AS4837  China, Shanghai, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="m">11</span>  219.158.7.125  233.02 ms  AS4837  China, Shanghai, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="m">12</span>  219.158.97.54  209.14 ms  AS4837  China, Jiangsu, Nanjing, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="m">13</span>  221.6.174.90  247.56 ms  AS4837  China, Jiangsu, Suqian, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="o">[</span>Info<span class="o">]</span> 测试路由 到 江苏宿迁联通 完成 ！
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="o">[</span>Info<span class="o">]</span> 测试路由 到 上海电信 中 ...
</span></span><span class="line"><span class="cl">traceroute to 101.95.110.149 <span class="o">(</span>101.95.110.149<span class="o">)</span>, <span class="m">30</span> hops max, <span class="m">32</span> byte packets
</span></span><span class="line"><span class="cl"> <span class="m">1</span>  140.91.236.12  0.16 ms  AS31898  United Arab Emirates, Emirate of Dubai, Dubai, oracle.com
</span></span><span class="line"><span class="cl"> <span class="m">2</span>  94.203.76.154  1.28 ms  AS15802  United Arab Emirates, du.ae
</span></span><span class="line"><span class="cl"> <span class="m">3</span>  94.203.76.153  2.62 ms  AS15802  United Arab Emirates, du.ae
</span></span><span class="line"><span class="cl"> <span class="m">4</span>  *
</span></span><span class="line"><span class="cl"> <span class="m">5</span>  *
</span></span><span class="line"><span class="cl"> <span class="m">6</span>  *
</span></span><span class="line"><span class="cl"> <span class="m">7</span>  *
</span></span><span class="line"><span class="cl"> <span class="m">8</span>  ae9.palermo3.pal.seabone.net <span class="o">(</span>195.22.197.54<span class="o">)</span>  91.34 ms  AS6762  Italy, Sicily, Metropolitan city of Palermo, tisparkle.com
</span></span><span class="line"><span class="cl"> <span class="m">9</span>  ae31.franco71.fra.seabone.net <span class="o">(</span>195.22.208.75<span class="o">)</span>  121.66 ms  AS6762  Germany, Hesse, Frankfurt, tisparkle.com
</span></span><span class="line"><span class="cl"><span class="m">10</span>  china-telecom.franco71.fra.seabone.net <span class="o">(</span>89.221.34.161<span class="o">)</span>  130.55 ms  AS6762  Germany, Hesse, Frankfurt, tisparkle.com
</span></span><span class="line"><span class="cl"><span class="m">11</span>  *
</span></span><span class="line"><span class="cl"><span class="m">12</span>  202.97.33.133  239.21 ms  AS4134  China, Shanghai, ChinaTelecom
</span></span><span class="line"><span class="cl"><span class="m">13</span>  202.97.57.26  240.33 ms  AS4134  China, Shanghai, ChinaTelecom
</span></span><span class="line"><span class="cl"><span class="m">14</span>  61.152.26.21  253.48 ms  AS4812  China, Shanghai, ChinaTelecom
</span></span><span class="line"><span class="cl"><span class="m">15</span>  101.95.89.114  250.67 ms  AS4812  China, Shanghai, ChinaTelecom
</span></span><span class="line"><span class="cl"><span class="m">16</span>  *
</span></span><span class="line"><span class="cl"><span class="m">17</span>  101.95.110.149  252.47 ms  AS4812  China, Shanghai, ChinaTelecom
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="o">[</span>Info<span class="o">]</span> 测试路由 到 上海电信 完成 ！
</span></span></code></pre></div><h3 id="iperf3">iperf3</h3>
<p>广州移动单线程，多线程可跑满。这里用了nekoneko的优化脚本，优化前只能50M左右。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">Connecting to host 120.232.*.*, port <span class="m">20012</span>
</span></span><span class="line"><span class="cl"><span class="o">[</span>  5<span class="o">]</span> <span class="nb">local</span> 10.0.0.26 port <span class="m">54996</span> connected to 120.232.173.119 port <span class="m">20012</span>
</span></span><span class="line"><span class="cl"><span class="o">[</span> ID<span class="o">]</span> Interval           Transfer     Bitrate         Retr  Cwnd
</span></span><span class="line"><span class="cl"><span class="o">[</span>  5<span class="o">]</span>   0.00-1.00   sec   <span class="m">506</span> KBytes  4.15 Mbits/sec    <span class="m">0</span>   55.1 KBytes       
</span></span><span class="line"><span class="cl"><span class="o">[</span>  5<span class="o">]</span>   1.00-2.00   sec  3.35 MBytes  28.1 Mbits/sec    <span class="m">0</span>    <span class="m">444</span> KBytes       
</span></span><span class="line"><span class="cl"><span class="o">[</span>  5<span class="o">]</span>   2.00-3.00   sec  12.5 MBytes   <span class="m">105</span> Mbits/sec    <span class="m">0</span>   5.18 MBytes       
</span></span><span class="line"><span class="cl"><span class="o">[</span>  5<span class="o">]</span>   3.00-4.00   sec  32.5 MBytes   <span class="m">273</span> Mbits/sec    <span class="m">0</span>   31.6 MBytes       
</span></span><span class="line"><span class="cl"><span class="o">[</span>  5<span class="o">]</span>   4.00-5.00   sec  37.5 MBytes   <span class="m">315</span> Mbits/sec    <span class="m">5</span>   31.6 MBytes       
</span></span><span class="line"><span class="cl"><span class="o">[</span>  5<span class="o">]</span>   5.00-6.00   sec  18.8 MBytes   <span class="m">157</span> Mbits/sec    <span class="m">0</span>   31.6 MBytes       
</span></span><span class="line"><span class="cl"><span class="o">[</span>  5<span class="o">]</span>   6.00-7.00   sec  38.8 MBytes   <span class="m">325</span> Mbits/sec    <span class="m">0</span>   31.6 MBytes       
</span></span><span class="line"><span class="cl"><span class="o">[</span>  5<span class="o">]</span>   7.00-8.00   sec  40.0 MBytes   <span class="m">336</span> Mbits/sec    <span class="m">0</span>   31.6 MBytes       
</span></span><span class="line"><span class="cl"><span class="o">[</span>  5<span class="o">]</span>   8.00-9.00   sec  38.8 MBytes   <span class="m">325</span> Mbits/sec    <span class="m">0</span>   31.6 MBytes       
</span></span><span class="line"><span class="cl"><span class="o">[</span>  5<span class="o">]</span>   9.00-10.00  sec  40.0 MBytes   <span class="m">336</span> Mbits/sec    <span class="m">0</span>   31.6 MBytes       
</span></span><span class="line"><span class="cl">- - - - - - - - - - - - - - - - - - - - - - - - -
</span></span><span class="line"><span class="cl"><span class="o">[</span> ID<span class="o">]</span> Interval           Transfer     Bitrate         Retr
</span></span><span class="line"><span class="cl"><span class="o">[</span>  5<span class="o">]</span>   0.00-10.00  sec   <span class="m">263</span> MBytes   <span class="m">220</span> Mbits/sec    <span class="m">5</span>             sender
</span></span><span class="line"><span class="cl"><span class="o">[</span>  5<span class="o">]</span>   0.00-10.27  sec   <span class="m">263</span> MBytes   <span class="m">215</span> Mbits/sec                  receiver
</span></span></code></pre></div><h3 id="流媒体解锁">流媒体解锁</h3>
<p>支持Netflix和D+，解锁很香</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"> ** 正在测试IPv4解锁情况 
</span></span><span class="line"><span class="cl">--------------------------------
</span></span><span class="line"><span class="cl"> ** 您的网络为: Oracle Cloud <span class="o">(</span>139.185.*.*<span class="o">)</span> 
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="o">============[</span> Multination <span class="o">]============</span>
</span></span><span class="line"><span class="cl"> Dazn:                                  No
</span></span><span class="line"><span class="cl"> HotStar:                               No
</span></span><span class="line"><span class="cl"> Disney+:                               Yes <span class="o">(</span>Region: US<span class="o">)</span>
</span></span><span class="line"><span class="cl"> Netflix:                               Yes <span class="o">(</span>Region: AE<span class="o">)</span>
</span></span><span class="line"><span class="cl"> YouTube Premium:                       Yes <span class="o">(</span>Region: AE<span class="o">)</span>
</span></span><span class="line"><span class="cl"> Amazon Prime Video:                    Yes <span class="o">(</span>Region: AE<span class="o">)</span>
</span></span><span class="line"><span class="cl"> TVBAnywhere+:                          Yes
</span></span><span class="line"><span class="cl"> iQyi Oversea Region:                   AE
</span></span><span class="line"><span class="cl"> Viu.com:                               Yes <span class="o">(</span>Region: AE<span class="o">)</span>
</span></span><span class="line"><span class="cl"> YouTube CDN:                           Associated with <span class="o">[</span>DU<span class="o">]</span>
</span></span><span class="line"><span class="cl"> Netflix Preferred CDN:                 Dubai  
</span></span><span class="line"><span class="cl"> Spotify Registration:                  No
</span></span><span class="line"><span class="cl"> Steam Currency:                        <span class="nv">AED</span>
</span></span><span class="line"><span class="cl"><span class="o">=======================================</span>
</span></span></code></pre></div><h2 id="玩法">玩法</h2>
<p>流媒体解锁，延迟和速度都很不错，可作代理。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>OneVPS香港2022最新测评</title>
      <link>https://blog.kanikig.xyz/OneVPS%E9%A6%99%E6%B8%AF2022%E6%9C%80%E6%96%B0%E6%B5%8B%E8%AF%84/</link>
      <pubDate>Sat, 16 Apr 2022 00:04:28 +0000</pubDate>
      
      <guid>https://blog.kanikig.xyz/OneVPS%E9%A6%99%E6%B8%AF2022%E6%9C%80%E6%96%B0%E6%B5%8B%E8%AF%84/</guid>
      <description>商家简介 OneVPS是Think Huge Ltd旗下子品牌，于2012年在香港注册。近期官网还专门增加了中文，非常重视中国市场。 OneVPS香港是m</description>
      <content:encoded><![CDATA[<h2 id="商家简介">商家简介</h2>
<p>OneVPS是Think Huge Ltd旗下子品牌，于2012年在香港注册。近期官网还专门增加了中文，非常重视中国市场。</p>
<p>OneVPS香港是m247机房产品2020年推出到现在已经过了快2年了，让我们一起看看这款机器的最新情况。</p>
<p>官网：https://www.onevps.cloud</p>
<h2 id="套餐">套餐</h2>
<p><strong>购买链接：</strong> <a href="https://www.onevps.cloud/vps-plans">https://www.onevps.cloud/vps-plans</a></p>
<table>
<thead>
<tr>
<th>套餐</th>
<th>内存</th>
<th>CPU</th>
<th>硬盘</th>
<th>IP</th>
<th>流量</th>
<th>价格</th>
</tr>
</thead>
<tbody>
<tr>
<td>Basic</td>
<td>512 MB</td>
<td>1 CPU</td>
<td>20 GB SSD</td>
<td>1 (IPv4)</td>
<td>Unlimited</td>
<td><a href="https://onevpshosting.com/onevps-redirect.php?type=checkout&amp;pid=2&amp;currency=1&amp;language=english">$4/mo</a></td>
</tr>
<tr>
<td>Standard</td>
<td>768 MB</td>
<td>1 CPU</td>
<td>50 GB SSD</td>
<td>1 (IPv4)</td>
<td>Unlimited</td>
<td><a href="https://onevpshosting.com/onevps-redirect.php?type=checkout&amp;pid=3&amp;currency=1&amp;language=english">$6/mo</a></td>
</tr>
<tr>
<td>Premium</td>
<td>1024 MB</td>
<td>2 CPU</td>
<td>80 GB SSD</td>
<td>1 (IPv4)</td>
<td>Unlimited</td>
<td><a href="https://onevpshosting.com/onevps-redirect.php?type=checkout&amp;pid=4&amp;currency=1&amp;language=english">$9/mo</a></td>
</tr>
<tr>
<td>Professional</td>
<td>1536 MB</td>
<td>2 CPU</td>
<td>100 GB SSD</td>
<td>1 (IPv4)</td>
<td>Unlimited</td>
<td><a href="https://onevpshosting.com/onevps-redirect.php?type=checkout&amp;pid=5&amp;currency=1&amp;language=english">$13/mo</a></td>
</tr>
<tr>
<td>Executive</td>
<td>2048 MB</td>
<td>4 CPU</td>
<td>125 GB SSD</td>
<td>3 (IPv4)</td>
<td>Unlimited</td>
<td><a href="https://onevpshosting.com/onevps-redirect.php?type=checkout&amp;pid=6&amp;currency=1&amp;language=english">$20/mo</a></td>
</tr>
<tr>
<td>Custom</td>
<td>Up to 8192 MB</td>
<td>4 CPU</td>
<td>Up to 150 GB SSD</td>
<td>Up to 5 (IPv4)</td>
<td>Unlimited</td>
<td><a href="https://onevpshosting.com/onevps-redirect.php?type=checkout&amp;pid=7&amp;currency=1&amp;language=english">$20/mo</a></td>
</tr>
</tbody>
</table>
<p>选择自己所需配置即可，带宽标1G但实际上下行统一限速200M，流量写无限，实际为10T。其中部分区域需要加 $6，例如香港区。</p>
<p>购买记得用85折循环优惠码！<code>15offonevps</code></p>
<p>因此香港区最便宜为8.5刀，也有卡2.5刀bug机的，但是据说会被转移。</p>
<p>付款后自动开机，注意root信息会发到邮箱，ssh端口不是22！</p>
<h2 id="测评">测评</h2>
<p>测试使用的是Premium香港。</p>
<h3 id="lemonbench">LemonBench</h3>
<p><a href="https://paste.ubuntu.com/p/JKwV4C5YYC/">完整测试报告</a></p>
<h4 id="系统信息">系统信息</h4>
<p>Network Information不知道为啥测不出来，反正大家知道是M247就行了。我开到的ip段是<code>2.56.149.*</code></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"> -&gt; System Information
</span></span><span class="line"><span class="cl"> 
</span></span><span class="line"><span class="cl"> OS Release:		Debian GNU/Linux <span class="s2">&#34;Buster&#34;</span> 10.9 <span class="o">(</span>x86_64<span class="o">)</span>
</span></span><span class="line"><span class="cl"> CPU Model:		Intel<span class="o">(</span>R<span class="o">)</span> Xeon<span class="o">(</span>R<span class="o">)</span> CPU E5-2699 v3 @ 2.30GHz  2.30 GHz
</span></span><span class="line"><span class="cl"> CPU Cache Size:	<span class="m">16384</span> KB
</span></span><span class="line"><span class="cl"> CPU Number:		<span class="m">2</span> vCPU
</span></span><span class="line"><span class="cl"> Virt Type:		KVM
</span></span><span class="line"><span class="cl"> Memory Usage:		90.08 MB / 1.94 GB
</span></span><span class="line"><span class="cl"> Swap Usage:		<span class="o">[</span> No Swapfile / Swap partition <span class="o">]</span>
</span></span><span class="line"><span class="cl"> Disk Usage:		1.47 GB / 19.59 GB
</span></span><span class="line"><span class="cl"> Boot Device:		/dev/vda2
</span></span><span class="line"><span class="cl"> Load <span class="o">(</span>1/5/15min<span class="o">)</span>:	0.19 0.30 0.20 
</span></span><span class="line"><span class="cl"> CPU Usage:		3.1% used, 0.0% iowait, 0.0% steal
</span></span><span class="line"><span class="cl"> Kernel Version:	5.13.0
</span></span><span class="line"><span class="cl"> Network CC Method:	bbr + fq_pie
</span></span></code></pre></div><h4 id="性能">性能</h4>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"> -&gt; CPU Performance Test <span class="o">(</span>Fast Mode, 1-Pass @ 5sec<span class="o">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="m">1</span> Thread Test:			<span class="m">924</span> Scores
</span></span><span class="line"><span class="cl"> <span class="m">2</span> Threads Test:		<span class="m">1833</span> Scores
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> -&gt; Memory Performance Test <span class="o">(</span>Fast Mode, 1-Pass @ 5sec<span class="o">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="m">1</span> Thread - Read Test :		18944.40 MB/s
</span></span><span class="line"><span class="cl"> <span class="m">1</span> Thread - Write Test:		15562.10 MB/s
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> -&gt; Disk Speed Test <span class="o">(</span>4K Block/1M Block, Direct Mode<span class="o">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> Test Name		Write Speed				Read Speed
</span></span><span class="line"><span class="cl"> 100MB-4K Block		48.8 MB/s <span class="o">(</span>0.08 IOPS, 2.15 s<span class="o">)</span>		56.1 MB/s <span class="o">(</span><span class="m">13684</span> IOPS, 1.87 s<span class="o">)</span>
</span></span><span class="line"><span class="cl"> 1GB-1M Block		1.7 GB/s <span class="o">(</span><span class="m">1638</span> IOPS, 0.61 s<span class="o">)</span>		2.2 GB/s <span class="o">(</span><span class="m">2080</span> IOPS, 0.48 s<span class="o">)</span>
</span></span></code></pre></div><h3 id="geekbench">Geekbench</h3>
<p>出乎意料的不错</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">Running GB5 benchmark test... *cue elevator music*
</span></span><span class="line"><span class="cl">Geekbench <span class="m">5</span> Benchmark Test:
</span></span><span class="line"><span class="cl">---------------------------------
</span></span><span class="line"><span class="cl">Test            <span class="p">|</span> Value                         
</span></span><span class="line"><span class="cl">                <span class="p">|</span>                               
</span></span><span class="line"><span class="cl">Single Core     <span class="p">|</span> <span class="m">780</span>                           
</span></span><span class="line"><span class="cl">Multi Core      <span class="p">|</span> <span class="m">1522</span>                          
</span></span><span class="line"><span class="cl">Full Test       <span class="p">|</span> https://browser.geekbench.com/v5/cpu/14336261
</span></span></code></pre></div><h3 id="speedtest">Speedtest</h3>
<p>本地速度：200M</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">   Speedtest by Ookla
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">     Server: HGC環電 - Central <span class="o">(</span><span class="nv">id</span> <span class="o">=</span> 37390<span class="o">)</span>
</span></span><span class="line"><span class="cl">        ISP: M247 Ltd
</span></span><span class="line"><span class="cl">    Latency:   154.41 ms   <span class="o">(</span>0.79 ms jitter<span class="o">)</span>
</span></span><span class="line"><span class="cl">   Download:   193.75 Mbps <span class="o">(</span>data used: 97.1 MB<span class="o">)</span>                               
</span></span><span class="line"><span class="cl">     Upload:   191.83 Mbps <span class="o">(</span>data used: 117.5 MB<span class="o">)</span>                               
</span></span><span class="line"><span class="cl">Packet Loss:     0.0%
</span></span><span class="line"><span class="cl"> Result URL: https://www.speedtest.net/result/c/28d0398f-d05c-4f31-bc0c-8921bd4a10b2
</span></span></code></pre></div><h3 id="superspeed">superspeed</h3>
<p>适合移动</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2022/04/16/iShot2022-04-16-01.09.14.png" alt="iShot2022-04-16-01.09.14.png"  /></p>
<h3 id="traceroute">TraceRoute</h3>
<p>到广州移动延迟很低，三网回程如下</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="o">[</span>Info<span class="o">]</span> 测试路由 到 广州移动 中 ...
</span></span><span class="line"><span class="cl">traceroute to 120.232.*.*, <span class="m">30</span> hops max, <span class="m">32</span> byte packets
</span></span><span class="line"><span class="cl"> <span class="m">1</span>  2.56.149.1  1.89 ms  AS9009  China, Hong Kong, ppman.ro
</span></span><span class="line"><span class="cl"> <span class="m">2</span>  89.44.212.60  10.30 ms  *  m247.com
</span></span><span class="line"><span class="cl"> <span class="m">3</span>  89.44.212.59  0.73 ms  *  China, Hong Kong, m247.com
</span></span><span class="line"><span class="cl"> <span class="m">4</span>  113.29.92.9  2.80 ms  AS3549  China, Hong Kong, level3.com
</span></span><span class="line"><span class="cl"> <span class="m">5</span>  ae3.3502.edge1.HongKong3.level3.net <span class="o">(</span>4.69.218.146<span class="o">)</span>  1.12 ms  AS3356  China, Hong Kong, level3.com
</span></span><span class="line"><span class="cl"> <span class="m">6</span>  *
</span></span><span class="line"><span class="cl"> <span class="m">7</span>  223.120.2.117  2.46 ms  AS58453  China, Hong Kong, ChinaMobile
</span></span><span class="line"><span class="cl"> <span class="m">8</span>  223.120.2.86  7.45 ms  AS58453  China, Guangdong, Guangzhou, ChinaMobile
</span></span><span class="line"><span class="cl"> <span class="m">9</span>  221.183.68.129  60.67 ms  AS9808  China, Guangdong, Guangzhou, ChinaMobile
</span></span><span class="line"><span class="cl"><span class="m">10</span>  221.183.52.85  25.19 ms  AS9808  China, Guangdong, Guangzhou, ChinaMobile
</span></span><span class="line"><span class="cl"><span class="m">11</span>  221.176.24.5  62.48 ms  AS9808  China, Guangdong, Guangzhou, ChinaMobile
</span></span><span class="line"><span class="cl"><span class="m">12</span>  111.24.5.177  61.48 ms  AS9808  China, Guangdong, Guangzhou, ChinaMobile
</span></span><span class="line"><span class="cl"><span class="m">13</span>  *
</span></span><span class="line"><span class="cl"><span class="m">14</span>  *
</span></span><span class="line"><span class="cl"><span class="m">15</span>  120.241.242.230  14.41 ms  AS56040  China, Guangdong, Guangzhou, ChinaMobile
</span></span><span class="line"><span class="cl"><span class="o">[</span>Info<span class="o">]</span> 测试路由 到 广州移动 完成 ！
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="o">[</span>Info<span class="o">]</span> 测试路由 到 上海电信 中 ...
</span></span><span class="line"><span class="cl">traceroute to 101.95.110.149 <span class="o">(</span>101.95.110.149<span class="o">)</span>, <span class="m">30</span> hops max, <span class="m">32</span> byte packets
</span></span><span class="line"><span class="cl"> <span class="m">1</span>  2.56.149.1  1.31 ms  AS9009  China, Hong Kong, ppman.ro
</span></span><span class="line"><span class="cl"> <span class="m">2</span>  89.44.212.68  3.49 ms  *  China, Hong Kong, m247.com
</span></span><span class="line"><span class="cl"> <span class="m">3</span>  89.44.212.65  0.73 ms  *  China, Hong Kong, m247.com
</span></span><span class="line"><span class="cl"> <span class="m">4</span>  89.44.212.81  0.73 ms  *  m247.com
</span></span><span class="line"><span class="cl"> <span class="m">5</span>  Hu0-0-0-1-11.clbr02.hkg12.pccwbtn.net <span class="o">(</span>63.216.176.165<span class="o">)</span>  1.74 ms  AS3491,AS31713  China, Hong Kong, pccw.com
</span></span><span class="line"><span class="cl"> <span class="m">6</span>  TenGE0-4-0-14.cr01.hkg15.pccwbtn.net <span class="o">(</span>63.223.17.141<span class="o">)</span>  173.40 ms  AS3491,AS31713  China, Hong Kong, pccw.com
</span></span><span class="line"><span class="cl"> <span class="m">7</span>  218.30.53.84  165.33 ms  AS4134  United States, California, San Jose, ChinaTelecom
</span></span><span class="line"><span class="cl"> <span class="m">8</span>  202.97.43.113  186.61 ms  AS4134  China, Shanghai, ChinaTelecom
</span></span><span class="line"><span class="cl"> <span class="m">9</span>  *
</span></span><span class="line"><span class="cl"><span class="m">10</span>  202.97.50.161  201.62 ms  AS4134  China, Shanghai, ChinaTelecom
</span></span><span class="line"><span class="cl"><span class="m">11</span>  61.152.24.225  190.64 ms  AS4812  China, Shanghai, ChinaTelecom
</span></span><span class="line"><span class="cl"><span class="m">12</span>  101.95.95.77  222.72 ms  AS4812  China, Shanghai, ChinaTelecom
</span></span><span class="line"><span class="cl"><span class="m">13</span>  *
</span></span><span class="line"><span class="cl"><span class="m">14</span>  *
</span></span><span class="line"><span class="cl"><span class="m">15</span>  101.95.110.149  202.65 ms  AS4812  China, Shanghai, ChinaTelecom
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="o">[</span>Info<span class="o">]</span> 测试路由 到 上海电信 完成 ！
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="o">[</span>Info<span class="o">]</span> 测试路由 到 江苏宿迁联通 中 ...
</span></span><span class="line"><span class="cl">traceroute to 153.36.202.5 <span class="o">(</span>153.36.202.5<span class="o">)</span>, <span class="m">30</span> hops max, <span class="m">32</span> byte packets
</span></span><span class="line"><span class="cl"> <span class="m">1</span>  2.56.149.1  0.58 ms  AS9009  China, Hong Kong, ppman.ro
</span></span><span class="line"><span class="cl"> <span class="m">2</span>  89.44.212.60  1.59 ms  *  m247.com
</span></span><span class="line"><span class="cl"> <span class="m">3</span>  89.44.212.59  0.80 ms  *  China, Hong Kong, m247.com
</span></span><span class="line"><span class="cl"> <span class="m">4</span>  Hu0-0-0-1-11.clbr02.hkg12.pccwbtn.net <span class="o">(</span>63.216.176.165<span class="o">)</span>  1.85 ms  AS3491,AS31713  China, Hong Kong, pccw.com
</span></span><span class="line"><span class="cl"> <span class="m">5</span>  TenGE0-4-0-14.cr01.hkg15.pccwbtn.net <span class="o">(</span>63.223.17.141<span class="o">)</span>  165.33 ms  AS3491,AS31713  China, Hong Kong, pccw.com
</span></span><span class="line"><span class="cl"> <span class="m">6</span>  Bundle-Ether41.br06.sjo01.pccwbtn.net <span class="o">(</span>63.223.60.138<span class="o">)</span>  155.89 ms  AS3491,AS31713  United States, California, San Jose, pccw.com
</span></span><span class="line"><span class="cl"> <span class="m">7</span>  63-217-21-126.static.pccwglobal.net <span class="o">(</span>63.217.21.126<span class="o">)</span>  155.97 ms  AS3491,AS31713  United States, California, San Jose, pccw.com
</span></span><span class="line"><span class="cl"> <span class="m">8</span>  *
</span></span><span class="line"><span class="cl"> <span class="m">9</span>  <span class="p">&amp;</span><span class="c1">#10.48.179.152.in-addr.arpa (152.179.48.218)  179.42 ms  AS701  United States, California, San Jose, verizon.com</span>
</span></span><span class="line"><span class="cl"><span class="m">10</span>  219.158.116.237  193.27 ms  AS4837  China, Shanghai, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="m">11</span>  219.158.8.189  195.94 ms  AS4837  China, Shanghai, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="m">12</span>  219.158.7.125  190.22 ms  AS4837  China, Shanghai, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="m">13</span>  219.158.17.18  191.21 ms  AS4837  China, Jiangsu, Nanjing, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="m">14</span>  221.6.174.82  193.39 ms  AS4837  China, Jiangsu, Suqian, ChinaUnicom
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="o">[</span>Info<span class="o">]</span> 测试路由 到 江苏宿迁联通 完成 ！
</span></span></code></pre></div><h3 id="iperf3">iperf3</h3>
<p>广州移动轻松拉满</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">Connecting to host 120.232.*.*, port <span class="m">20011</span>
</span></span><span class="line"><span class="cl"><span class="o">[</span>  5<span class="o">]</span> <span class="nb">local</span> 2.56.149.32 port <span class="m">57646</span> connected to 120.232.173.119 port <span class="m">20011</span>
</span></span><span class="line"><span class="cl"><span class="o">[</span> ID<span class="o">]</span> Interval           Transfer     Bitrate         Retr  Cwnd
</span></span><span class="line"><span class="cl"><span class="o">[</span>  5<span class="o">]</span>   0.00-1.00   sec  24.8 MBytes   <span class="m">208</span> Mbits/sec    <span class="m">1</span>    <span class="m">908</span> KBytes       
</span></span><span class="line"><span class="cl"><span class="o">[</span>  5<span class="o">]</span>   1.00-2.00   sec  22.5 MBytes   <span class="m">189</span> Mbits/sec    <span class="m">0</span>    <span class="m">865</span> KBytes       
</span></span><span class="line"><span class="cl"><span class="o">[</span>  5<span class="o">]</span>   2.00-3.00   sec  23.8 MBytes   <span class="m">199</span> Mbits/sec    <span class="m">1</span>    <span class="m">868</span> KBytes       
</span></span><span class="line"><span class="cl"><span class="o">[</span>  5<span class="o">]</span>   3.00-4.00   sec  23.8 MBytes   <span class="m">199</span> Mbits/sec    <span class="m">0</span>    <span class="m">874</span> KBytes       
</span></span><span class="line"><span class="cl"><span class="o">[</span>  5<span class="o">]</span>   4.00-5.00   sec  22.5 MBytes   <span class="m">189</span> Mbits/sec    <span class="m">0</span>    <span class="m">865</span> KBytes       
</span></span><span class="line"><span class="cl"><span class="o">[</span>  5<span class="o">]</span>   5.00-6.00   sec  23.8 MBytes   <span class="m">199</span> Mbits/sec    <span class="m">0</span>    <span class="m">913</span> KBytes       
</span></span><span class="line"><span class="cl"><span class="o">[</span>  5<span class="o">]</span>   6.00-7.00   sec  23.8 MBytes   <span class="m">199</span> Mbits/sec    <span class="m">0</span>    <span class="m">919</span> KBytes       
</span></span><span class="line"><span class="cl"><span class="o">[</span>  5<span class="o">]</span>   7.00-8.00   sec  22.5 MBytes   <span class="m">189</span> Mbits/sec    <span class="m">0</span>   1.02 MBytes       
</span></span><span class="line"><span class="cl"><span class="o">[</span>  5<span class="o">]</span>   8.00-9.00   sec  22.5 MBytes   <span class="m">189</span> Mbits/sec    <span class="m">0</span>    <span class="m">868</span> KBytes       
</span></span><span class="line"><span class="cl"><span class="o">[</span>  5<span class="o">]</span>   9.00-10.00  sec  23.8 MBytes   <span class="m">199</span> Mbits/sec    <span class="m">0</span>   1.07 MBytes       
</span></span><span class="line"><span class="cl">- - - - - - - - - - - - - - - - - - - - - - - - -
</span></span><span class="line"><span class="cl"><span class="o">[</span> ID<span class="o">]</span> Interval           Transfer     Bitrate         Retr
</span></span><span class="line"><span class="cl"><span class="o">[</span>  5<span class="o">]</span>   0.00-10.00  sec   <span class="m">234</span> MBytes   <span class="m">196</span> Mbits/sec    <span class="m">2</span>             sender
</span></span><span class="line"><span class="cl"><span class="o">[</span>  5<span class="o">]</span>   0.00-10.02  sec   <span class="m">230</span> MBytes   <span class="m">193</span> Mbits/sec                  receiver
</span></span></code></pre></div><h3 id="流媒体解锁">流媒体解锁</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"> ** 正在测试IPv4解锁情况 
</span></span><span class="line"><span class="cl">--------------------------------
</span></span><span class="line"><span class="cl"> ** 您的网络为: M247 Ltd <span class="o">(</span>2.56.*.*<span class="o">)</span> 
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="o">============[</span> Multination <span class="o">]============</span>
</span></span><span class="line"><span class="cl"> Dazn:                                  No
</span></span><span class="line"><span class="cl"> HotStar:                               No
</span></span><span class="line"><span class="cl"> Disney+:                               No
</span></span><span class="line"><span class="cl"> Netflix:                               Originals Only
</span></span><span class="line"><span class="cl"> YouTube Premium:                       Yes <span class="o">(</span>Region: HK<span class="o">)</span>
</span></span><span class="line"><span class="cl"> Amazon Prime Video:                    Yes <span class="o">(</span>Region: HK<span class="o">)</span>
</span></span><span class="line"><span class="cl"> TVBAnywhere+:                          No
</span></span><span class="line"><span class="cl"> iQyi Oversea Region:                   HK
</span></span><span class="line"><span class="cl"> Viu.com:                               Yes <span class="o">(</span>Region: HK<span class="o">)</span>
</span></span><span class="line"><span class="cl"> YouTube CDN:                           Hong Kong 
</span></span><span class="line"><span class="cl"> Netflix Preferred CDN:                 Hong Kong  
</span></span><span class="line"><span class="cl"> Spotify Registration:                  No
</span></span><span class="line"><span class="cl"> Steam Currency:                        <span class="nv">HKD</span>
</span></span><span class="line"><span class="cl"><span class="o">=======================================</span>
</span></span><span class="line"><span class="cl"><span class="o">=============[</span> Hong Kong <span class="o">]=============</span>
</span></span><span class="line"><span class="cl"> Now E:                                 Yes
</span></span><span class="line"><span class="cl"> Viu.TV:                                Yes
</span></span><span class="line"><span class="cl"> MyTVSuper:                             No
</span></span><span class="line"><span class="cl"> HBO GO Asia:                           Yes <span class="o">(</span>Region: HK<span class="o">)</span>
</span></span><span class="line"><span class="cl"> BiliBili Hongkong/Macau/Taiwan:        <span class="nv">Yes</span>
</span></span><span class="line"><span class="cl"><span class="o">=======================================</span>
</span></span></code></pre></div><h2 id="玩法">玩法</h2>
<p>移动友好，强烈推荐搭配广州移动使用。虽然200M带宽不算很大，但是10T流量性价比还是非常高的，没有流媒体需求的话这家香港是非常便宜了。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>懒人技巧-模型训练完成时发通知到手机</title>
      <link>https://blog.kanikig.xyz/%E6%87%92%E4%BA%BA%E6%8A%80%E5%B7%A7-%E6%A8%A1%E5%9E%8B%E8%AE%AD%E7%BB%83%E5%AE%8C%E6%88%90%E6%97%B6%E5%8F%91%E9%80%9A%E7%9F%A5%E5%88%B0%E6%89%8B%E6%9C%BA/</link>
      <pubDate>Mon, 04 Apr 2022 14:22:56 +0000</pubDate>
      
      <guid>https://blog.kanikig.xyz/%E6%87%92%E4%BA%BA%E6%8A%80%E5%B7%A7-%E6%A8%A1%E5%9E%8B%E8%AE%AD%E7%BB%83%E5%AE%8C%E6%88%90%E6%97%B6%E5%8F%91%E9%80%9A%E7%9F%A5%E5%88%B0%E6%89%8B%E6%9C%BA/</guid>
      <description>前言 现在进行大型数值计算，或训练机器学习模型的时间可以长达数十小时甚至数天。我们自然是希望跑完的时候能够收到通知，这样就不用反复上去查看了。</description>
      <content:encoded><![CDATA[<h2 id="前言">前言</h2>
<p>现在进行大型数值计算，或训练机器学习模型的时间可以长达数十小时甚至数天。我们自然是希望跑完的时候能够收到通知，这样就不用反复上去查看了。</p>
<p>查了下网上居然相关教程非常少，本文提供<code>bark</code>和<code>wxpusher</code>两个免费推送服务的使用方法，实现脚本跑完时自动发通知到手机或微信。</p>
<h2 id="bark">bark</h2>
<p><a href="https://github.com/Finb/Bark">bark</a>是一款开源免费的推送服务，仅支持<code>ios</code>。</p>
<h3 id="下载安装">下载安装</h3>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2022/04/04/iShot2022-04-04-15.14.24.png" alt="iShot2022-04-04 15.14.24"  /></p>
<p>进入app后复制如上图的链接即可</p>
<h3 id="python调用">python调用</h3>
<p>首先需要requests包</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">requests</span>
</span></span></code></pre></div><p>在模型训练的代码块后面加上这行</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">ret</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;https://api.day.app/8BZtwxVav***********/报警滴滴滴/测试消息&#39;</span><span class="p">)</span>
</span></span></code></pre></div><p>上面链接换成你自己的，内容可以自己修改。</p>
<p>程序运行到这行就会发送通知到你的手机了。</p>
<h2 id="wxpusher">wxpusher</h2>
<p>如果是安卓手机，可以用<a href="https://wxpusher.zjiecode.com/admin/login">wxpusher</a>推送消息到微信，目前完全免费。类似的比较有名的server酱现在每天仅提供5次免费推送，不建议使用。</p>
<h3 id="创建应用">创建应用</h3>
<p>微信扫码自动注册，很方便。进去后创建应用，只要填必填项就可以，创建完成后会给你一个appToken，务必保存好。格式形如</p>
<pre tabindex="0"><code>AT_yn7Xsvz**********
</code></pre><p>应用创建完成后会显示一个二维码，一样用微信扫一下，你与应用就关联上了。然后点击左侧用户列表，复制你的UID</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2022/04/04/iShot2022-04-04-14.57.23.png" alt="iShot2022-04-04 14.57.23"  /></p>
<p>格式形如</p>
<pre tabindex="0"><code>UID_VO8eFt***********
</code></pre><h3 id="python调用-1">python调用</h3>
<p>相比于上面的<code>bark</code>，微信接口有一些限制，需要用<code>json</code>格式传输。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">requests</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">json</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># wxpusher</span>
</span></span><span class="line"><span class="cl"><span class="n">headers</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;content-type&#39;</span><span class="p">:</span> <span class="s2">&#34;application/json&#34;</span><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="n">body</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;appToken&#34;</span><span class="p">:</span><span class="s2">&#34;AT_yn7Xsvz**********&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;content&#34;</span><span class="p">:</span><span class="s2">&#34;这是一条测试消息&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;summary&#34;</span><span class="p">:</span><span class="s2">&#34;报警滴滴滴&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;contentType&#34;</span><span class="p">:</span><span class="mi">1</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;topicIds&#34;</span><span class="p">:[],</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;uids&#34;</span><span class="p">:[</span><span class="s2">&#34;UID_VO8eFt***********&#34;</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>把<code>appToken</code>和<code>uids</code>替换成你的就可以了。</p>
<p>在模型训练的代码块后面加上</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">ret</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s1">&#39;http://wxpusher.zjiecode.com/api/send/message&#39;</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">body</span><span class="p">),</span> <span class="n">headers</span><span class="o">=</span><span class="n">headers</span><span class="p">)</span>
</span></span></code></pre></div><p>这样跑完的时候就会<code>post</code>请求到api，即时发送通知到你的微信了。</p>
<h2 id="最终效果">最终效果</h2>
<p>非常快，基本上一执行就立刻接到通知了。</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2022/04/04/IMG_1722.jpg" alt="IMG_1722"  /></p>
<p>唯一美中不足的就是<code>wxpusher</code>受微信官方一些限制，通知没法直接显示内容，需要点进去才能查看。</p>
<h2 id="进阶">进阶</h2>
<ol>
<li>不仅适用于模型训练，可以用于任何长时间运行的程序</li>
<li>可以开发更多用法，例如程序运行时抛出异常，发通知。</li>
<li>本文仅给出python示例，如果是matlab可以<a href="https://ww2.mathworks.cn/help/matlab/ref/matlab.net.http.requestmessage-class.html">参考这里</a>，其他脚本语言也可以，只要能发送http请求。</li>
</ol>
]]></content:encoded>
    </item>
    
    <item>
      <title>Golang基础笔记</title>
      <link>https://blog.kanikig.xyz/Golang%E5%9F%BA%E7%A1%80%E7%AC%94%E8%AE%B0/</link>
      <pubDate>Thu, 13 Jan 2022 16:12:37 +0000</pubDate>
      
      <guid>https://blog.kanikig.xyz/Golang%E5%9F%BA%E7%A1%80%E7%AC%94%E8%AE%B0/</guid>
      <description>前言 Go简介 Google开源 编译型语言 21世界的C语言 2005年出现多核处理器，其他语言都是单核时代诞生的。Go天生考虑了多核并发。 特点： 语</description>
      <content:encoded><![CDATA[<h2 id="前言">前言</h2>
<h3 id="go简介">Go简介</h3>
<ul>
<li>Google开源</li>
<li>编译型语言</li>
<li>21世界的C语言</li>
</ul>
<p>2005年出现多核处理器，其他语言都是单核时代诞生的。Go天生考虑了多核并发。</p>
<p>特点：</p>
<ul>
<li>语法简洁（只有25个关键字，比Python更简洁，自带格式化，互相阅读容易）</li>
<li>开发效率高</li>
<li>执行性能好（接近java）</li>
</ul>
<p>发展：</p>
<p>百度自动驾驶，小程序</p>
<p>腾讯蓝鲸，微服务框架</p>
<p>知乎最早用python写，后期承受不了负载，用go重构节约了80%资源。</p>
<h3 id="课程简介">课程简介</h3>
<p><a href="https://www.liwenzhou.com">李文周博客</a></p>
<p><a href="https://github.com/Q1mi/go_tutorial">仓库</a></p>
<p>8周基础</p>
<p>3个实战项目</p>
<h3 id="go项目结构">Go项目结构</h3>
<p>个人开发者</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2022/01/13/image-20220113164729380.png" alt="image-20220113164729380"  /></p>
<p>流行方式</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2022/01/13/image-20220113165000771.png" alt="image-20220113165000771"  /></p>
<h2 id="helloworld">Helloworld</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">go build
</span></span></code></pre></div><p>win编译得exe，macos得可执行文件</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">go install
</span></span></code></pre></div><p>install相当于build后再移到bin</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">go run
</span></span></code></pre></div><p>当脚本运行</p>
<p>支持跨平台交叉编译</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">// wincmd SET, macos <span class="nb">export</span>
</span></span><span class="line"><span class="cl"><span class="nb">export</span> <span class="nv">CGO_ENABLED</span><span class="o">=</span>0	//禁用CGO
</span></span><span class="line"><span class="cl"><span class="nb">export</span> <span class="nv">GOOS</span><span class="o">=</span>linux	//设置目标平台linux,windows,darwin
</span></span><span class="line"><span class="cl"><span class="nb">export</span> <span class="nv">GOARCH</span><span class="o">=</span>amd64//目标处理器架构是amd64
</span></span><span class="line"><span class="cl">go build
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="nb">export</span> <span class="nv">CGO_ENABLED</span><span class="o">=</span><span class="m">0</span> <span class="nv">GOOS</span><span class="o">=</span>linux <span class="nv">GOARCH</span><span class="o">=</span>amd64
</span></span><span class="line"><span class="cl">go build
</span></span></code></pre></div><h2 id="变量与常量">变量与常量</h2>
<p>函数外不能写语句</p>
<p>标识符：字母数字下划线，不以数字开头</p>
<p>关键字与保留字不建议用于变量名</p>
<h3 id="变量">变量</h3>
<h4 id="初始化">初始化</h4>
<p>数字默认<code>0</code>，字符串默认空，布尔默认<code>false</code>，切片、函数、指针默认<code>nil</code>。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="kd">var</span> <span class="nx">变量名</span> <span class="nx">类型</span> <span class="p">=</span> <span class="nx">表达式</span>
</span></span><span class="line"><span class="cl"><span class="kd">var</span> <span class="nx">name</span> <span class="kt">string</span> <span class="p">=</span> <span class="s">&#34;Q1mi&#34;</span>
</span></span><span class="line"><span class="cl"><span class="kd">var</span> <span class="nx">age</span> <span class="kt">int</span> <span class="p">=</span> <span class="mi">18</span>
</span></span><span class="line"><span class="cl"><span class="kd">var</span> <span class="nx">name</span><span class="p">,</span> <span class="nx">age</span> <span class="p">=</span> <span class="s">&#34;Q1mi&#34;</span><span class="p">,</span> <span class="mi">20</span>	<span class="c1">//会根据值推导类型
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kd">var</span> <span class="p">(</span>
</span></span><span class="line"><span class="cl">    <span class="nx">a</span> <span class="kt">string</span>
</span></span><span class="line"><span class="cl">    <span class="nx">b</span> <span class="kt">int</span>
</span></span><span class="line"><span class="cl">    <span class="nx">c</span> <span class="kt">bool</span>
</span></span><span class="line"><span class="cl">    <span class="nx">d</span> <span class="kt">float32</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span></code></pre></div><p>写在函数外为全局变量</p>
<p>函数内声明局部变量简写为</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl">	<span class="nx">n</span> <span class="o">:=</span> <span class="mi">10</span>
</span></span><span class="line"><span class="cl">	<span class="nx">m</span> <span class="o">:=</span> <span class="mi">200</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="nx">m</span><span class="p">,</span> <span class="nx">n</span><span class="p">)</span>
</span></span></code></pre></div><blockquote>
<p>注意：在Golang里非全局变量声明必须使用，不然编译不通过！</p>
</blockquote>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="nx">fmt</span><span class="p">.</span><span class="nf">Print</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="nx">fmt</span><span class="p">.</span><span class="nf">Printf</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">()</span> <span class="c1">//换行
</span></span></span></code></pre></div><blockquote>
<p>保存时会自动格式化</p>
</blockquote>
<h4 id="命名规则">命名规则</h4>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="kd">var</span> <span class="nx">studentName</span> <span class="kt">string</span>
</span></span></code></pre></div><blockquote>
<p>Golang使用小驼峰命名</p>
</blockquote>
<h4 id="匿名变量">匿名变量</h4>
<p>用短下划线接收，不占命名空间，不分配内存</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="nx">x</span><span class="p">,</span> <span class="nx">_</span> <span class="p">=</span> <span class="nf">foo</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="nx">_</span><span class="p">,</span> <span class="nx">y</span> <span class="p">=</span> <span class="nf">foo</span><span class="p">()</span>
</span></span></code></pre></div><h3 id="常量">常量</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="kd">const</span> <span class="nx">pi</span> <span class="p">=</span> <span class="mf">3.14</span>
</span></span></code></pre></div><h4 id="iota">iota</h4>
<p>常量计数器，每新增<strong>一行</strong>常量声明则计数，注意是一行</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="kd">const</span> <span class="p">(</span>
</span></span><span class="line"><span class="cl">  <span class="nx">n1</span> <span class="p">=</span> <span class="kc">iota</span> <span class="c1">//0
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>  <span class="nx">n2</span>	<span class="c1">//1
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>  <span class="nx">n3</span>	<span class="c1">//2
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>  <span class="nx">n4</span>	<span class="c1">//3
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="p">)</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="kd">const</span> <span class="p">(</span>
</span></span><span class="line"><span class="cl">  <span class="nx">n1</span> <span class="p">=</span> <span class="kc">iota</span> <span class="c1">//0
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>  <span class="nx">n2</span>	<span class="c1">//1
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>  <span class="nx">_</span>	<span class="c1">//2 但是被丢弃
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>  <span class="nx">n3</span>	<span class="c1">//3
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="p">)</span>
</span></span></code></pre></div><h4 id="定义数量级">定义数量级</h4>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="kd">const</span> <span class="p">(</span>
</span></span><span class="line"><span class="cl">  <span class="nx">_</span> <span class="p">=</span> <span class="kc">iota</span>
</span></span><span class="line"><span class="cl">  <span class="nx">KB</span> <span class="p">=</span> <span class="mi">1</span> <span class="o">&lt;&lt;</span> <span class="p">(</span><span class="mi">10</span> <span class="o">*</span> <span class="kc">iota</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="nx">MB</span> <span class="p">=</span> <span class="mi">1</span> <span class="o">&lt;&lt;</span> <span class="p">(</span><span class="mi">10</span> <span class="o">*</span> <span class="kc">iota</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="nx">GB</span> <span class="p">=</span> <span class="mi">1</span> <span class="o">&lt;&lt;</span> <span class="p">(</span><span class="mi">10</span> <span class="o">*</span> <span class="kc">iota</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="nx">TB</span> <span class="p">=</span> <span class="mi">1</span> <span class="o">&lt;&lt;</span> <span class="p">(</span><span class="mi">10</span> <span class="o">*</span> <span class="kc">iota</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="nx">PB</span> <span class="p">=</span> <span class="mi">1</span> <span class="o">&lt;&lt;</span> <span class="p">(</span><span class="mi">10</span> <span class="o">*</span> <span class="kc">iota</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span></code></pre></div><p>&laquo; 左移符号，二进制1左移10位是1024</p>
<h2 id="基本数据类型">基本数据类型</h2>
<p>整型分为以下两个大类：按长度分为：int8、int16、int32、int64</p>
<p>对应的无符号整型：uint8、uint16、uint32、uint64</p>
<p>uint8就是byte，int16就是short，int64是long</p>
<h3 id="特殊整型">特殊整型</h3>
<p><code>uint int</code> 会根据系统判别是32还是64</p>
<p><code>uintptr</code> 指针，存放内存地址</p>
<h3 id="进制">进制</h3>
<blockquote>
<p>Golang无法直接定义二进制数，八、十六均可</p>
</blockquote>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl">	<span class="c1">// 十进制
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="kd">var</span> <span class="nx">a</span> <span class="kt">int</span> <span class="p">=</span> <span class="mi">10</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Printf</span><span class="p">(</span><span class="s">&#34;%d \n&#34;</span><span class="p">,</span> <span class="nx">a</span><span class="p">)</span>  <span class="c1">// 10
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Printf</span><span class="p">(</span><span class="s">&#34;%b \n&#34;</span><span class="p">,</span> <span class="nx">a</span><span class="p">)</span>  <span class="c1">// 1010  占位符%b表示二进制
</span></span></span><span class="line"><span class="cl"><span class="c1"></span> 
</span></span><span class="line"><span class="cl">	<span class="c1">// 八进制  以0开头
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="kd">var</span> <span class="nx">b</span> <span class="kt">int</span> <span class="p">=</span> <span class="mo">077</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Printf</span><span class="p">(</span><span class="s">&#34;%o \n&#34;</span><span class="p">,</span> <span class="nx">b</span><span class="p">)</span>  <span class="c1">// 77
</span></span></span><span class="line"><span class="cl"><span class="c1"></span> 
</span></span><span class="line"><span class="cl">	<span class="c1">// 十六进制  以0x开头
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="kd">var</span> <span class="nx">c</span> <span class="kt">int</span> <span class="p">=</span> <span class="mh">0xff</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Printf</span><span class="p">(</span><span class="s">&#34;%x \n&#34;</span><span class="p">,</span> <span class="nx">c</span><span class="p">)</span>  <span class="c1">// ff
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Printf</span><span class="p">(</span><span class="s">&#34;%X \n&#34;</span><span class="p">,</span> <span class="nx">c</span><span class="p">)</span>  <span class="c1">// FF
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Printf</span><span class="p">(</span><span class="s">&#34;%T \n&#34;</span><span class="p">,</span> <span class="nx">c</span><span class="p">)</span>  <span class="c1">// 输出类型
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Printf</span><span class="p">(</span><span class="s">&#34;%v \n&#34;</span><span class="p">,</span> <span class="nx">c</span><span class="p">)</span>  <span class="c1">// 输出变量值，任意类型
</span></span></span></code></pre></div><h3 id="浮点数">浮点数</h3>
<p>golang中小数默认<code>float64</code></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="nx">math</span><span class="p">.</span><span class="nx">MaxFloat64</span> <span class="c1">// float64最大值
</span></span></span></code></pre></div><h3 id="布尔">布尔</h3>
<p>默认false，不允许转换</p>
<h3 id="字符串">字符串</h3>
<p>只能双引号，单引号为字符</p>
<table>
<thead>
<tr>
<th>转义</th>
<th>含义</th>
</tr>
</thead>
<tbody>
<tr>
<td>\r</td>
<td>返回行首</td>
</tr>
<tr>
<td>\n</td>
<td>换行（下行同列）</td>
</tr>
<tr>
<td>\t</td>
<td>制表</td>
</tr>
</tbody>
</table>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="c1">// 在win中路径转义
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="nx">s</span> <span class="o">:=</span> <span class="s">&#34;D:\\Documents\\A&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// 反引号原样输出, 多行字符串
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="nx">s</span> <span class="o">:=</span> <span class="s">`
</span></span></span><span class="line"><span class="cl"><span class="s">asda
</span></span></span><span class="line"><span class="cl"><span class="s">		asd
</span></span></span><span class="line"><span class="cl"><span class="s">`</span>
</span></span><span class="line"><span class="cl"><span class="nx">s</span> <span class="o">:=</span> <span class="s">&#34;D:\Documents\A&#34;</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="nb">len</span><span class="p">(</span><span class="nx">str</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nx">ss</span> <span class="o">:=</span> <span class="nx">s1</span> <span class="o">+</span> <span class="nx">s2</span>
</span></span><span class="line"><span class="cl"><span class="nx">ret</span> <span class="o">:=</span> <span class="nx">strings</span><span class="p">.</span><span class="nf">Split</span><span class="p">(</span><span class="nx">s3</span><span class="p">,</span> <span class="s">&#34;\\&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nx">ret</span> <span class="p">=</span> <span class="nx">strings</span><span class="p">.</span><span class="nf">Contains</span><span class="p">(</span><span class="nx">s3</span><span class="p">,</span> <span class="s">&#34;abcd&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nx">ret</span> <span class="p">=</span> <span class="nx">strings</span><span class="p">.</span><span class="nf">HasPrefix</span><span class="p">(</span><span class="nx">s3</span><span class="p">,</span> <span class="s">&#34;abcd&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nx">ret</span> <span class="p">=</span> <span class="nx">strings</span><span class="p">.</span><span class="nf">HasSufix</span><span class="p">(</span><span class="nx">s3</span><span class="p">,</span> <span class="s">&#34;abcd&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nx">ret</span> <span class="p">=</span> <span class="nx">strings</span><span class="p">.</span><span class="nf">Index</span><span class="p">(</span><span class="nx">s3</span><span class="p">,</span> <span class="s">&#34;c&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nx">ret</span> <span class="p">=</span> <span class="nx">strings</span><span class="p">.</span><span class="nf">LastIndex</span><span class="p">(</span><span class="nx">s3</span><span class="p">,</span> <span class="s">&#34;c&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nx">ret</span> <span class="p">=</span> <span class="nx">strings</span><span class="p">.</span><span class="nf">Join</span><span class="p">(</span><span class="nx">a</span><span class="p">,</span> <span class="nx">b</span><span class="p">)</span>
</span></span></code></pre></div><p>英文字符为<code>byte</code>，其他语系如中文字符为<code>rune</code>，实际为<code>int32</code>，占3位</p>
<p>字符串遍历</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="k">for</span> <span class="nx">_</span><span class="p">,</span> <span class="nx">char</span> <span class="o">:=</span> <span class="k">range</span> <span class="nx">str</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nx">fmt</span><span class="p">.</span><span class="nf">Printf</span><span class="p">(</span><span class="s">&#34;%c&#34;</span><span class="p">,</span> <span class="nx">char</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>字符串没法直接修改，只能转换为其他类型处理</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="nx">s3</span> <span class="o">:=</span> <span class="p">[]</span><span class="nb">rune</span><span class="p">(</span><span class="nx">s2</span><span class="p">)</span>	<span class="c1">//切片
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="nx">s3</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="p">=</span> <span class="sc">&#39;e&#39;</span>	<span class="c1">//修改
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="nx">s4</span> <span class="o">:=</span> <span class="nb">string</span><span class="p">(</span><span class="nx">s3</span><span class="p">)</span>
</span></span></code></pre></div><h2 id="流程控制">流程控制</h2>
<h3 id="if">if</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="k">if</span> <span class="nx">表达式1</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nx">分支1</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="nx">表达式2</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nx">分支2</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span> <span class="k">else</span><span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nx">分支3</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="c1">// 局部变量score只在if中生效，减少内存占用
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="k">if</span> <span class="nx">score</span> <span class="o">:=</span> <span class="mi">65</span><span class="p">;</span> <span class="nx">score</span> <span class="o">&gt;=</span> <span class="mi">90</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;A&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="nx">score</span> <span class="p">&gt;</span> <span class="mi">75</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;B&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;C&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span></code></pre></div><h3 id="for">for</h3>
<p>golang只有for</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="k">for</span> <span class="nx">初始语句</span><span class="p">;</span><span class="nx">条件表达式</span><span class="p">;</span><span class="nx">结束语句</span><span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nx">循环体语句</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="k">for</span> <span class="nx">i</span> <span class="o">:=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">i</span> <span class="p">&lt;</span> <span class="mi">10</span><span class="p">;</span> <span class="nx">i</span><span class="o">++</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="nx">i</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>初始语句和结束语句可省略，相当于while</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="nx">i</span> <span class="o">:=</span> <span class="mi">0</span>
</span></span><span class="line"><span class="cl">	<span class="k">for</span> <span class="nx">i</span> <span class="p">&lt;</span> <span class="mi">10</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="nx">i</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">		<span class="nx">i</span><span class="o">++</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span></code></pre></div><p>无限循环</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="k">for</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nx">循环体语句</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>通过<code>break</code>、<code>goto</code>、<code>return</code>、<code>panic</code>语句强制退出循环</p>
<h3 id="遍历">遍历</h3>
<p><code>for range</code>遍历数组、切片、字符串、map 及通道（channel）</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="k">for</span> <span class="nx">i</span><span class="p">,</span><span class="nx">v</span> <span class="o">:=</span> <span class="k">range</span> <span class="nx">s</span><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="nx">i</span><span class="p">,</span> <span class="nx">v</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><ol>
<li>数组、切片、字符串返回索引和值。</li>
<li>map返回键和值。</li>
<li>通道（channel）只返回通道内的值。</li>
</ol>
<h3 id="switch">switch</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="nx">finger</span> <span class="o">:=</span> <span class="mi">3</span>
</span></span><span class="line"><span class="cl">	<span class="k">switch</span> <span class="nx">finger</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="k">case</span> <span class="mi">1</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">		<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;大拇指&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">fallthrough</span>
</span></span><span class="line"><span class="cl">	<span class="k">case</span> <span class="mi">2</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">		<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;食指&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="k">case</span> <span class="mi">3</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">		<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;中指&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="k">case</span> <span class="mi">4</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">		<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;无名指&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="k">case</span> <span class="mi">5</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">		<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;小拇指&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="k">default</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">		<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;无效的输入！&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span></code></pre></div><p><code>fallthrough</code>语法可以执行满足条件的case的下一个case，是为了兼容C语言中的case设计的</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="k">switch</span> <span class="nx">n</span> <span class="o">:=</span> <span class="mi">7</span><span class="p">;</span> <span class="nx">n</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="k">case</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">9</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">		<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;奇数&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="k">case</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">8</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">		<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;偶数&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="k">default</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">		<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="nx">n</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span></code></pre></div><h3 id="goto">goto</h3>
<p><code>goto</code>语句通过标签进行代码间的无条件跳转。<code>goto</code>语句可以在快速跳出循环、避免重复退出上有一定的帮助。Go语言中使用<code>goto</code>语句能简化一些代码的实现过程。 例如双层嵌套的for循环要退出时</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="kd">var</span> <span class="nx">breakFlag</span> <span class="kt">bool</span>
</span></span><span class="line"><span class="cl">	<span class="k">for</span> <span class="nx">i</span> <span class="o">:=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">i</span> <span class="p">&lt;</span> <span class="mi">10</span><span class="p">;</span> <span class="nx">i</span><span class="o">++</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="k">for</span> <span class="nx">j</span> <span class="o">:=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">j</span> <span class="p">&lt;</span> <span class="mi">10</span><span class="p">;</span> <span class="nx">j</span><span class="o">++</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">			<span class="k">if</span> <span class="nx">j</span> <span class="o">==</span> <span class="mi">2</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">				<span class="c1">// 设置退出标签
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>				<span class="nx">breakFlag</span> <span class="p">=</span> <span class="kc">true</span>
</span></span><span class="line"><span class="cl">				<span class="k">break</span>
</span></span><span class="line"><span class="cl">			<span class="p">}</span>
</span></span><span class="line"><span class="cl">			<span class="nx">fmt</span><span class="p">.</span><span class="nf">Printf</span><span class="p">(</span><span class="s">&#34;%v-%v\n&#34;</span><span class="p">,</span> <span class="nx">i</span><span class="p">,</span> <span class="nx">j</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">		<span class="p">}</span>
</span></span><span class="line"><span class="cl">		<span class="c1">// 外层for循环判断
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>		<span class="k">if</span> <span class="nx">breakFlag</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">			<span class="k">break</span>
</span></span><span class="line"><span class="cl">		<span class="p">}</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span></code></pre></div><p>简化为</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="k">for</span> <span class="nx">i</span> <span class="o">:=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">i</span> <span class="p">&lt;</span> <span class="mi">10</span><span class="p">;</span> <span class="nx">i</span><span class="o">++</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="k">for</span> <span class="nx">j</span> <span class="o">:=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">j</span> <span class="p">&lt;</span> <span class="mi">10</span><span class="p">;</span> <span class="nx">j</span><span class="o">++</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">			<span class="k">if</span> <span class="nx">j</span> <span class="o">==</span> <span class="mi">2</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">				<span class="c1">// 设置退出标签
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>				<span class="k">goto</span> <span class="nx">breakTag</span>
</span></span><span class="line"><span class="cl">			<span class="p">}</span>
</span></span><span class="line"><span class="cl">			<span class="nx">fmt</span><span class="p">.</span><span class="nf">Printf</span><span class="p">(</span><span class="s">&#34;%v-%v\n&#34;</span><span class="p">,</span> <span class="nx">i</span><span class="p">,</span> <span class="nx">j</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">		<span class="p">}</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span><span class="line"><span class="cl">	<span class="k">return</span>
</span></span><span class="line"><span class="cl">	<span class="c1">// 标签
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="nx">breakTag</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;结束for循环&#34;</span><span class="p">)</span>
</span></span></code></pre></div><h2 id="运算符">运算符</h2>
<p><code>++</code>（自增）和<code>--</code>（自减）在Go语言中是单独的语句，并不是运算符。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="c1">// 逻辑运算
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="o">&amp;&amp;</span>
</span></span><span class="line"><span class="cl"><span class="o">||</span>
</span></span><span class="line"><span class="cl"><span class="p">!</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// 位运算
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="o">&amp;</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">^</span>
</span></span><span class="line"><span class="cl"><span class="o">&lt;&lt;</span>
</span></span><span class="line"><span class="cl"><span class="o">&gt;&gt;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// 赋值
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="o">+=</span>
</span></span><span class="line"><span class="cl"><span class="o">-=</span>
</span></span><span class="line"><span class="cl"><span class="o">&lt;&lt;=</span>
</span></span></code></pre></div><h2 id="数组">数组</h2>
<h3 id="初始化-1">初始化</h3>
<p>数组从声明时就确定，使用时可以修改数组成员，但是数组大小不可变化</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="kd">var</span> <span class="nx">a</span> <span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="kt">int</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">var</span> <span class="nx">a</span> <span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="kt">int</span>
</span></span><span class="line"><span class="cl"><span class="kd">var</span> <span class="nx">b</span> <span class="p">[</span><span class="mi">4</span><span class="p">]</span><span class="kt">int</span>
</span></span><span class="line"><span class="cl"><span class="nx">a</span> <span class="p">=</span> <span class="nx">b</span> <span class="c1">//不可以这样做，因为此时a和b是不同的类型
</span></span></span></code></pre></div><p>数组可以通过下标进行访问，下标是从<code>0</code>开始，最后一个元素下标是：<code>len-1</code>，访问越界（下标在合法范围之外），则触发访问越界，panic</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl">	<span class="kd">var</span> <span class="nx">testArray</span> <span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="kt">int</span>	<span class="c1">//数组会初始化为int类型的零值
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="kd">var</span> <span class="nx">numArray</span> <span class="p">=</span> <span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="kt">int</span><span class="p">{</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">}</span>	<span class="c1">//使用指定的初始值完成初始化
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="kd">var</span> <span class="nx">cityArray</span> <span class="p">=</span> <span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="kt">string</span><span class="p">{</span><span class="s">&#34;北京&#34;</span><span class="p">,</span> <span class="s">&#34;上海&#34;</span><span class="p">,</span> <span class="s">&#34;深圳&#34;</span><span class="p">}</span> <span class="c1">//使用指定的初始值完成初始化
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="kd">var</span> <span class="nx">numArray</span> <span class="p">=</span> <span class="p">[</span><span class="o">...</span><span class="p">]</span><span class="kt">int</span><span class="p">{</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">}</span> <span class="c1">//根据值推断数组长度
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="kd">var</span> <span class="nx">cityArray</span> <span class="p">=</span> <span class="p">[</span><span class="o">...</span><span class="p">]</span><span class="kt">string</span><span class="p">{</span><span class="s">&#34;北京&#34;</span><span class="p">,</span> <span class="s">&#34;上海&#34;</span><span class="p">,</span> <span class="s">&#34;深圳&#34;</span><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="nx">a</span> <span class="o">:=</span> <span class="p">[</span><span class="o">...</span><span class="p">]</span><span class="kt">int</span><span class="p">{</span><span class="mi">1</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">3</span><span class="p">:</span> <span class="mi">5</span><span class="p">}</span>	<span class="c1">//指定索引初始化
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="nx">a</span><span class="p">)</span>                  <span class="c1">// [0 1 0 5]
</span></span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="k">for</span> <span class="nx">index</span><span class="p">,</span> <span class="nx">value</span> <span class="o">:=</span> <span class="k">range</span> <span class="nx">a</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="nx">index</span><span class="p">,</span> <span class="nx">value</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span></code></pre></div><h3 id="多维数组">多维数组</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="nx">a</span> <span class="o">:=</span> <span class="p">[</span><span class="mi">3</span><span class="p">][</span><span class="mi">2</span><span class="p">]</span><span class="kt">string</span><span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="p">{</span><span class="s">&#34;北京&#34;</span><span class="p">,</span> <span class="s">&#34;上海&#34;</span><span class="p">},</span>
</span></span><span class="line"><span class="cl">		<span class="p">{</span><span class="s">&#34;广州&#34;</span><span class="p">,</span> <span class="s">&#34;深圳&#34;</span><span class="p">},</span>
</span></span><span class="line"><span class="cl">		<span class="p">{</span><span class="s">&#34;成都&#34;</span><span class="p">,</span> <span class="s">&#34;重庆&#34;</span><span class="p">},</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span></code></pre></div><blockquote>
<p>多维数组<strong>只有第一层</strong>可以使用<code>...</code>来让编译器推导数组长度</p>
</blockquote>
<p>数组是<strong>值类型</strong>，赋值和传参会复制整个数组。因此改变副本的值，不会改变本身的值。</p>
<ol>
<li>数组支持 “==“、”!=” 操作符，因为内存总是被初始化过的。</li>
<li><code>[n]*T</code>表示指针数组，<code>*[n]T</code>表示数组指针 。</li>
</ol>
<h2 id="切片">切片</h2>
<p>数组的局限性，长度固定。</p>
<p>切片（Slice）是一个拥有相同类型元素的可变长度的序列。它是基于数组类型做的一层封装。它非常灵活，支持自动扩容。</p>
<p>切片是一个<strong>引用类型</strong>，它的内部结构包含<code>地址</code>、<code>长度</code>和<code>容量</code>。切片一般用于快速地操作一块数据集合。</p>
<h3 id="初始化-2">初始化</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl">	<span class="kd">var</span> <span class="nx">a</span> <span class="p">=</span> <span class="p">[]</span><span class="kt">string</span>              <span class="c1">//声明一个字符串切片
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="kd">var</span> <span class="nx">b</span> <span class="p">=</span> <span class="p">[]</span><span class="kt">int</span><span class="p">{}</span>             <span class="c1">//声明一个整型切片并初始化
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="kd">var</span> <span class="nx">c</span> <span class="p">=</span> <span class="p">[]</span><span class="kt">bool</span><span class="p">{</span><span class="kc">false</span><span class="p">,</span> <span class="kc">true</span><span class="p">}</span> <span class="c1">//声明一个布尔切片并初始化
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="kd">var</span> <span class="nx">d</span> <span class="p">=</span> <span class="p">[]</span><span class="kt">bool</span><span class="p">{</span><span class="kc">false</span><span class="p">,</span> <span class="kc">true</span><span class="p">}</span> <span class="c1">//声明一个布尔切片并初始化
</span></span></span></code></pre></div><p>切片有指向时值就不为空了。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="nx">a1</span> <span class="o">:=</span> <span class="p">[</span><span class="o">...</span><span class="p">]</span><span class="kt">int</span><span class="p">{</span><span class="mi">1</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">9</span><span class="p">,</span> <span class="mi">11</span><span class="p">,</span> <span class="mi">13</span><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="nx">s3</span> <span class="o">:=</span> <span class="nx">a1</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">4</span><span class="p">]</span> <span class="c1">//左包右不包，索引为0-3切片
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>
</span></span><span class="line"><span class="cl"><span class="nb">len</span><span class="p">(</span><span class="nx">s3</span><span class="p">)</span> <span class="c1">// 4 切片长度
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="nb">cap</span><span class="p">(</span><span class="nx">s3</span><span class="p">)</span>	<span class="c1">// 7 容量=原数组切片点到末尾的长度
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>
</span></span><span class="line"><span class="cl"><span class="nx">a</span><span class="p">[</span><span class="mi">2</span><span class="p">:]</span>  <span class="c1">// 等同于 a[2:len(a)]
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="nx">a</span><span class="p">[:</span><span class="mi">3</span><span class="p">]</span>  <span class="c1">// 等同于 a[0:3]
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="nx">a</span><span class="p">[:]</span>   <span class="c1">// 等同于 a[0:len(a)]
</span></span></span></code></pre></div><p>原数组元素改了切片也变，引用类型。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="nx">a</span><span class="p">[</span><span class="nx">low</span> <span class="p">:</span> <span class="nx">high</span> <span class="p">:</span> <span class="nx">max</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="nx">a</span> <span class="o">:=</span> <span class="p">[</span><span class="mi">5</span><span class="p">]</span><span class="kt">int</span><span class="p">{</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">5</span><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="nx">t</span> <span class="o">:=</span> <span class="nx">a</span><span class="p">[</span><span class="mi">1</span><span class="p">:</span><span class="mi">3</span><span class="p">:</span><span class="mi">5</span><span class="p">]</span> <span class="c1">//t:[2 3] len(t):2 cap(t):4
</span></span></span></code></pre></div><p>构造与简单切片表达式<code>a[low: high]</code>相同类型、相同长度和元素的切片。另外，它会将得到的结果切片的容量设置为<code>max-low</code>。在完整切片表达式中只有第一个索引值（low）可以省略；它默认为0。</p>
<h3 id="make">make()</h3>
<p>动态创建一个切片</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="nb">make</span><span class="p">([]</span><span class="nx">T</span><span class="p">,</span> <span class="nx">size</span><span class="p">,</span> <span class="nx">cap</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nx">a</span> <span class="o">:=</span> <span class="nb">make</span><span class="p">([]</span><span class="kt">int</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">10</span><span class="p">)</span> <span class="c1">// 初始化值为0
</span></span></span></code></pre></div><h3 id="空切片判断">空切片判断</h3>
<p>要检查切片是否为空，使用<code>len(s) == 0</code>来判断，而不应该使用<code>s == nil</code>来判断。</p>
<p>切片之间是不能比较的，我们不能使用<code>==</code>操作符来判断两个切片是否含有全部相等元素。 切片唯一合法的比较操作是和<code>nil</code>比较。 一个<code>nil</code>值的切片并没有底层数组，一个<code>nil</code>值的切片的长度和容量都是0。但是我们不能说一个长度和容量都是0的切片一定是<code>nil</code></p>
<h3 id="赋值">赋值</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl">	<span class="nx">s1</span> <span class="o">:=</span> <span class="nb">make</span><span class="p">([]</span><span class="kt">int</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span> <span class="c1">//[0 0 0]
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="nx">s2</span> <span class="o">:=</span> <span class="nx">s1</span>             <span class="c1">//将s1直接赋值给s2，s1和s2共用一个底层数组
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="nx">s2</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="p">=</span> <span class="mi">100</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="nx">s1</span><span class="p">)</span> <span class="c1">//[100 0 0]
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="nx">s2</span><span class="p">)</span> <span class="c1">//[100 0 0]
</span></span></span></code></pre></div><h3 id="append">append()</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl">	<span class="kd">var</span> <span class="nx">s</span> <span class="p">[]</span><span class="kt">int</span>
</span></span><span class="line"><span class="cl">	<span class="nx">s</span> <span class="p">=</span> <span class="nb">append</span><span class="p">(</span><span class="nx">s</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>        <span class="c1">// [1]
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="nx">s</span> <span class="p">=</span> <span class="nb">append</span><span class="p">(</span><span class="nx">s</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">)</span>  <span class="c1">// [1 2 3 4
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="nx">s2</span> <span class="o">:=</span> <span class="p">[]</span><span class="kt">int</span><span class="p">{</span><span class="mi">5</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">7</span><span class="p">}</span>  
</span></span><span class="line"><span class="cl">	<span class="nx">s</span> <span class="p">=</span> <span class="nb">append</span><span class="p">(</span><span class="nx">s</span><span class="p">,</span> <span class="nx">s2</span><span class="o">...</span><span class="p">)</span>    <span class="c1">// [1 2 3 4 5 6 7]
</span></span></span></code></pre></div><blockquote>
<p>var声明的零值切片可以在<code>append()</code>函数直接使用，无需初始化</p>
</blockquote>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="kd">var</span> <span class="nx">s</span> <span class="p">[]</span><span class="kt">int</span>
</span></span><span class="line"><span class="cl"><span class="nx">s</span> <span class="p">=</span> <span class="nb">append</span><span class="p">(</span><span class="nx">s</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span>
</span></span></code></pre></div><p>每个切片会指向一个底层数组，这个数组的容量够用就添加新增元素。当底层数组不能容纳新增的元素时，切片就会自动按照一定的策略进行“扩容”，此时该切片指向的底层数组就会更换。“扩容”操作往往发生在<code>append()</code>函数调用时，所以我们通常都需要用原变量接收append函数的返回值。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="c1">//append()添加元素和切片扩容
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="kd">var</span> <span class="nx">numSlice</span> <span class="p">[]</span><span class="kt">int</span>
</span></span><span class="line"><span class="cl">	<span class="k">for</span> <span class="nx">i</span> <span class="o">:=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">i</span> <span class="p">&lt;</span> <span class="mi">10</span><span class="p">;</span> <span class="nx">i</span><span class="o">++</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="nx">numSlice</span> <span class="p">=</span> <span class="nb">append</span><span class="p">(</span><span class="nx">numSlice</span><span class="p">,</span> <span class="nx">i</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">		<span class="nx">fmt</span><span class="p">.</span><span class="nf">Printf</span><span class="p">(</span><span class="s">&#34;%v  len:%d  cap:%d  ptr:%p\n&#34;</span><span class="p">,</span> <span class="nx">numSlice</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="nx">numSlice</span><span class="p">),</span> <span class="nb">cap</span><span class="p">(</span><span class="nx">numSlice</span><span class="p">),</span> <span class="nx">numSlice</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>输出</p>
<pre tabindex="0"><code>[0]  len:1  cap:1  ptr:0xc0000a8000
[0 1]  len:2  cap:2  ptr:0xc0000a8040
[0 1 2]  len:3  cap:4  ptr:0xc0000b2020
[0 1 2 3]  len:4  cap:4  ptr:0xc0000b2020
[0 1 2 3 4]  len:5  cap:8  ptr:0xc0000b6000
[0 1 2 3 4 5]  len:6  cap:8  ptr:0xc0000b6000
[0 1 2 3 4 5 6]  len:7  cap:8  ptr:0xc0000b6000
[0 1 2 3 4 5 6 7]  len:8  cap:8  ptr:0xc0000b6000
[0 1 2 3 4 5 6 7 8]  len:9  cap:16  ptr:0xc0000b8000
[0 1 2 3 4 5 6 7 8 9]  len:10  cap:16  ptr:0xc0000b8000
</code></pre><p>从上面的结果可以看出：</p>
<ol>
<li><code>append()</code>函数将元素追加到切片的最后并返回该切片。</li>
<li>切片numSlice的容量按照1，2，4，8，16这样的规则自动进行扩容，每次扩容后都是扩容前的2倍。</li>
</ol>
<p><code>$GOROOT/src/runtime/slice.go</code>源码:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="nx">newcap</span> <span class="o">:=</span> <span class="nx">old</span><span class="p">.</span><span class="nx">cap</span>
</span></span><span class="line"><span class="cl"><span class="nx">doublecap</span> <span class="o">:=</span> <span class="nx">newcap</span> <span class="o">+</span> <span class="nx">newcap</span>
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="nx">cap</span> <span class="p">&gt;</span> <span class="nx">doublecap</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="nx">newcap</span> <span class="p">=</span> <span class="nx">cap</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="k">if</span> <span class="nx">old</span><span class="p">.</span><span class="nx">len</span> <span class="p">&lt;</span> <span class="mi">1024</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="nx">newcap</span> <span class="p">=</span> <span class="nx">doublecap</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="c1">// Check 0 &lt; newcap to detect overflow
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>		<span class="c1">// and prevent an infinite loop.
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>		<span class="k">for</span> <span class="mi">0</span> <span class="p">&lt;</span> <span class="nx">newcap</span> <span class="o">&amp;&amp;</span> <span class="nx">newcap</span> <span class="p">&lt;</span> <span class="nx">cap</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">			<span class="nx">newcap</span> <span class="o">+=</span> <span class="nx">newcap</span> <span class="o">/</span> <span class="mi">4</span>
</span></span><span class="line"><span class="cl">		<span class="p">}</span>
</span></span><span class="line"><span class="cl">		<span class="c1">// Set newcap to the requested cap when
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>		<span class="c1">// the newcap calculation overflowed.
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>		<span class="k">if</span> <span class="nx">newcap</span> <span class="o">&lt;=</span> <span class="mi">0</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">			<span class="nx">newcap</span> <span class="p">=</span> <span class="nx">cap</span>
</span></span><span class="line"><span class="cl">		<span class="p">}</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><ul>
<li>首先判断，如果新申请容量（cap）大于2倍的旧容量（old.cap），最终容量（newcap）就是新申请的容量（cap）。</li>
<li>否则判断，如果旧切片的长度小于1024，则最终容量(newcap)就是旧容量(old.cap)的两倍，即（newcap=doublecap），</li>
<li>否则判断，如果旧切片长度大于等于1024，则最终容量（newcap）从旧容量（old.cap）开始循环增加原来的1/4，即（newcap=old.cap,for {newcap += newcap/4}）直到最终容量（newcap）大于等于新申请的容量(cap)，即（newcap &gt;= cap）</li>
<li>如果最终容量（cap）计算值溢出，则最终容量（cap）就是新申请容量（cap）。</li>
</ul>
<p>中文字符串是3*2^n</p>
<h3 id="copy">copy()</h3>
<p>切片是引用类型，所以a和b其实都指向了同一块内存地址。修改b的同时a的值也会发生变化。</p>
<p>Go语言内建的<code>copy()</code>函数可以迅速地将一个切片的数据复制到另外一个切片空间中。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl">	<span class="nx">a</span> <span class="o">:=</span> <span class="p">[]</span><span class="kt">int</span><span class="p">{</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">5</span><span class="p">}</span>
</span></span><span class="line"><span class="cl">	<span class="nx">c</span> <span class="o">:=</span> <span class="nb">make</span><span class="p">([]</span><span class="kt">int</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="nb">copy</span><span class="p">(</span><span class="nx">c</span><span class="p">,</span> <span class="nx">a</span><span class="p">)</span>     <span class="c1">//使用copy()函数将切片a中的元素复制到切片c
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="nx">a</span><span class="p">)</span> <span class="c1">//[1 2 3 4 5]
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="nx">c</span><span class="p">)</span> <span class="c1">//[1 2 3 4 5]
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="nx">c</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="p">=</span> <span class="mi">1000</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="nx">a</span><span class="p">)</span> <span class="c1">//[1 2 3 4 5]
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="nx">c</span><span class="p">)</span> <span class="c1">//[1000 2 3 4 5]
</span></span></span></code></pre></div><h3 id="删除元素">删除元素</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl">	<span class="nx">a</span> <span class="p">=</span> <span class="nb">append</span><span class="p">(</span><span class="nx">a</span><span class="p">[:</span><span class="nx">index</span><span class="p">],</span> <span class="nx">a</span><span class="p">[</span><span class="nx">index</span><span class="o">+</span><span class="mi">1</span><span class="p">:]</span><span class="o">...</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="nx">a</span> <span class="o">:=</span> <span class="p">[]</span><span class="kt">int</span><span class="p">{</span><span class="mi">30</span><span class="p">,</span> <span class="mi">31</span><span class="p">,</span> <span class="mi">32</span><span class="p">,</span> <span class="mi">33</span><span class="p">,</span> <span class="mi">34</span><span class="p">,</span> <span class="mi">35</span><span class="p">,</span> <span class="mi">36</span><span class="p">,</span> <span class="mi">37</span><span class="p">}</span>
</span></span><span class="line"><span class="cl">	<span class="c1">// 要删除索引为2的元素
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="nx">a</span> <span class="p">=</span> <span class="nb">append</span><span class="p">(</span><span class="nx">a</span><span class="p">[:</span><span class="mi">2</span><span class="p">],</span> <span class="nx">a</span><span class="p">[</span><span class="mi">3</span><span class="p">:]</span><span class="o">...</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="nx">a</span><span class="p">)</span> <span class="c1">//[30 31 33 34 35 36 37]
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>
</span></span><span class="line"><span class="cl">	<span class="c1">//底层数组长度不变，元素左移，右边的由最右元素补全
</span></span></span></code></pre></div><p>排序对切片排</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="nx">sort</span><span class="p">.</span><span class="nf">Ints</span><span class="p">(</span><span class="nx">a</span><span class="p">[:])</span>
</span></span></code></pre></div><h2 id="指针">指针</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="nx">ptr</span> <span class="o">:=</span> <span class="o">&amp;</span><span class="nx">v</span> <span class="c1">// v的类型为T 输出指针类型*T 如 *string *int
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>
</span></span><span class="line"><span class="cl">	<span class="nx">a</span> <span class="o">:=</span> <span class="mi">10</span>
</span></span><span class="line"><span class="cl">	<span class="nx">b</span> <span class="o">:=</span> <span class="o">&amp;</span><span class="nx">a</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Printf</span><span class="p">(</span><span class="s">&#34;a:%d ptr:%p\n&#34;</span><span class="p">,</span> <span class="nx">a</span><span class="p">,</span> <span class="o">&amp;</span><span class="nx">a</span><span class="p">)</span> <span class="c1">// a:10 ptr:0xc00001a078
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Printf</span><span class="p">(</span><span class="s">&#34;b:%p type:%T\n&#34;</span><span class="p">,</span> <span class="nx">b</span><span class="p">,</span> <span class="nx">b</span><span class="p">)</span> <span class="c1">// b:0xc00001a078 type:*int
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="o">&amp;</span><span class="nx">b</span><span class="p">)</span>                    <span class="c1">// 0xc00000e018
</span></span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl">	<span class="nx">c</span> <span class="o">:=</span> <span class="o">*</span><span class="nx">b</span> <span class="c1">// 指针取值（根据指针去内存取值）
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Printf</span><span class="p">(</span><span class="s">&#34;type of c:%T\n&#34;</span><span class="p">,</span> <span class="nx">c</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Printf</span><span class="p">(</span><span class="s">&#34;value of c:%v\n&#34;</span><span class="p">,</span> <span class="nx">c</span><span class="p">)</span>
</span></span></code></pre></div><p>&amp;与*互补</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">modify1</span><span class="p">(</span><span class="nx">x</span> <span class="kt">int</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="nx">x</span> <span class="p">=</span> <span class="mi">100</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">modify2</span><span class="p">(</span><span class="nx">x</span> <span class="o">*</span><span class="kt">int</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="o">*</span><span class="nx">x</span> <span class="p">=</span> <span class="mi">100</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="nx">a</span> <span class="o">:=</span> <span class="mi">10</span>
</span></span><span class="line"><span class="cl">	<span class="nf">modify1</span><span class="p">(</span><span class="nx">a</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="nx">a</span><span class="p">)</span> <span class="c1">// 10
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="nf">modify2</span><span class="p">(</span><span class="o">&amp;</span><span class="nx">a</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="nx">a</span><span class="p">)</span> <span class="c1">// 100
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="p">}</span>
</span></span></code></pre></div><h3 id="new与make">new与make</h3>
<p>new函数不太常用，使用new函数得到的是一个类型的指针，并且该指针对应的值为该类型的零值</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl">	<span class="nx">a</span> <span class="o">:=</span> <span class="nb">new</span><span class="p">(</span><span class="kt">int</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="nx">b</span> <span class="o">:=</span> <span class="nb">new</span><span class="p">(</span><span class="kt">bool</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Printf</span><span class="p">(</span><span class="s">&#34;%T\n&#34;</span><span class="p">,</span> <span class="nx">a</span><span class="p">)</span> <span class="c1">// *int
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Printf</span><span class="p">(</span><span class="s">&#34;%T\n&#34;</span><span class="p">,</span> <span class="nx">b</span><span class="p">)</span> <span class="c1">// *bool
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="o">*</span><span class="nx">a</span><span class="p">)</span>       <span class="c1">// 0
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="o">*</span><span class="nx">b</span><span class="p">)</span>       <span class="c1">// false
</span></span></span></code></pre></div><p>make也是用于内存分配的，区别于new，它只用于slice、map以及chan的内存创建，而且它返回的类型就是这三个类型变量本身，而不是他们的指针类型，因为这三种类型就是引用类型</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl">	<span class="kd">var</span> <span class="nx">b</span> <span class="kd">map</span><span class="p">[</span><span class="kt">string</span><span class="p">]</span><span class="kt">int</span>
</span></span><span class="line"><span class="cl">	<span class="nx">b</span> <span class="p">=</span> <span class="nb">make</span><span class="p">(</span><span class="kd">map</span><span class="p">[</span><span class="kt">string</span><span class="p">]</span><span class="kt">int</span><span class="p">,</span> <span class="mi">10</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="nx">b</span><span class="p">[</span><span class="s">&#34;沙河娜扎&#34;</span><span class="p">]</span> <span class="p">=</span> <span class="mi">100</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="nx">b</span><span class="p">)</span>
</span></span></code></pre></div><h2 id="map">map</h2>
<p>Go语言中提供的映射关系容器为<code>map</code>，其内部使用<code>散列表（hash）</code>实现，类似python的字典</p>
<p>map是一种<strong>无序</strong>的基于<code>key-value</code>的数据结构，Go语言中的map是<strong>引用类型</strong>，必须初始化才能使用</p>
<p>map类型的变量默认初始值为nil，需要使用make()函数来分配内存</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl">	<span class="kd">map</span><span class="p">[</span><span class="nx">KeyType</span><span class="p">]</span><span class="nx">ValueType</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="nx">scoreMap</span> <span class="o">:=</span> <span class="nb">make</span><span class="p">(</span><span class="kd">map</span><span class="p">[</span><span class="kt">string</span><span class="p">]</span><span class="kt">int</span><span class="p">,</span> <span class="mi">8</span><span class="p">)</span> <span class="c1">// 初始化才能用，避免动态扩容！
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="nx">scoreMap</span><span class="p">[</span><span class="s">&#34;张三&#34;</span><span class="p">]</span> <span class="p">=</span> <span class="mi">90</span>
</span></span><span class="line"><span class="cl">	<span class="nx">scoreMap</span><span class="p">[</span><span class="s">&#34;小明&#34;</span><span class="p">]</span> <span class="p">=</span> <span class="mi">100</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="nx">scoreMap</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="nx">scoreMap</span><span class="p">[</span><span class="s">&#34;小明&#34;</span><span class="p">])</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Printf</span><span class="p">(</span><span class="s">&#34;type of a:%T\n&#34;</span><span class="p">,</span> <span class="nx">scoreMap</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="nx">userInfo</span> <span class="o">:=</span> <span class="kd">map</span><span class="p">[</span><span class="kt">string</span><span class="p">]</span><span class="kt">string</span><span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="s">&#34;username&#34;</span><span class="p">:</span> <span class="s">&#34;沙河小王子&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">		<span class="s">&#34;password&#34;</span><span class="p">:</span> <span class="s">&#34;123456&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span></code></pre></div><h3 id="判断键值是否存在">判断键值是否存在</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="nx">value</span><span class="p">,</span> <span class="nx">ok</span> <span class="o">:=</span> <span class="kd">map</span><span class="p">[</span><span class="nx">key</span><span class="p">]</span> <span class="c1">// ok返回key是否存在的bool值
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>
</span></span><span class="line"><span class="cl">	<span class="nx">v</span><span class="p">,</span> <span class="nx">ok</span> <span class="o">:=</span> <span class="nx">scoreMap</span><span class="p">[</span><span class="s">&#34;张三&#34;</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">	<span class="k">if</span> <span class="nx">ok</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="nx">v</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;查无此人&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span></code></pre></div><h3 id="map的遍历">map的遍历</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="k">for</span> <span class="nx">k</span><span class="p">,</span> <span class="nx">v</span> <span class="o">:=</span> <span class="k">range</span> <span class="nx">scoreMap</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="nx">k</span><span class="p">,</span> <span class="nx">v</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="nx">k</span> <span class="o">:=</span> <span class="k">range</span> <span class="nx">scoreMap</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="nx">k</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="nx">_</span><span class="p">,</span> <span class="nx">v</span> <span class="o">:=</span> <span class="k">range</span> <span class="nx">scoreMap</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="nx">v</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><blockquote>
<p>注意：遍历map时的元素顺序与添加键值对的顺序无关</p>
</blockquote>
<h3 id="删除键值对">删除键值对</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="nb">delete</span><span class="p">(</span><span class="kd">map</span><span class="p">,</span> <span class="nx">key</span><span class="p">)</span>
</span></span></code></pre></div><h3 id="按照指定顺序遍历">按照指定顺序遍历</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="nx">rand</span><span class="p">.</span><span class="nf">Seed</span><span class="p">(</span><span class="nx">time</span><span class="p">.</span><span class="nf">Now</span><span class="p">().</span><span class="nf">UnixNano</span><span class="p">())</span> <span class="c1">//初始化随机数种子
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>
</span></span><span class="line"><span class="cl">	<span class="kd">var</span> <span class="nx">scoreMap</span> <span class="p">=</span> <span class="nb">make</span><span class="p">(</span><span class="kd">map</span><span class="p">[</span><span class="kt">string</span><span class="p">]</span><span class="kt">int</span><span class="p">,</span> <span class="mi">200</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="k">for</span> <span class="nx">i</span> <span class="o">:=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">i</span> <span class="p">&lt;</span> <span class="mi">100</span><span class="p">;</span> <span class="nx">i</span><span class="o">++</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="nx">key</span> <span class="o">:=</span> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Sprintf</span><span class="p">(</span><span class="s">&#34;stu%02d&#34;</span><span class="p">,</span> <span class="nx">i</span><span class="p">)</span> <span class="c1">//生成stu开头的字符串
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>		<span class="nx">value</span> <span class="o">:=</span> <span class="nx">rand</span><span class="p">.</span><span class="nf">Intn</span><span class="p">(</span><span class="mi">100</span><span class="p">)</span>          <span class="c1">//生成0~99的随机整数
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>		<span class="nx">scoreMap</span><span class="p">[</span><span class="nx">key</span><span class="p">]</span> <span class="p">=</span> <span class="nx">value</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span><span class="line"><span class="cl">	<span class="c1">//取出map中的所有key存入切片keys
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="kd">var</span> <span class="nx">keys</span> <span class="p">=</span> <span class="nb">make</span><span class="p">([]</span><span class="kt">string</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">200</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="k">for</span> <span class="nx">key</span> <span class="o">:=</span> <span class="k">range</span> <span class="nx">scoreMap</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="nx">keys</span> <span class="p">=</span> <span class="nb">append</span><span class="p">(</span><span class="nx">keys</span><span class="p">,</span> <span class="nx">key</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span><span class="line"><span class="cl">	<span class="c1">//对切片进行排序
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="nx">sort</span><span class="p">.</span><span class="nf">Strings</span><span class="p">(</span><span class="nx">keys</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="c1">//按照排序后的key遍历map
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="k">for</span> <span class="nx">_</span><span class="p">,</span> <span class="nx">key</span> <span class="o">:=</span> <span class="k">range</span> <span class="nx">keys</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="nx">key</span><span class="p">,</span> <span class="nx">scoreMap</span><span class="p">[</span><span class="nx">key</span><span class="p">])</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><h3 id="元素为map类型的切片">元素为map类型的切片</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl">	<span class="kd">var</span> <span class="nx">mapSlice</span> <span class="p">=</span> <span class="nb">make</span><span class="p">([]</span><span class="kd">map</span><span class="p">[</span><span class="kt">string</span><span class="p">]</span><span class="kt">string</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span> <span class="c1">// 切片初始化，每个元素都是一个map
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="k">for</span> <span class="nx">index</span><span class="p">,</span> <span class="nx">value</span> <span class="o">:=</span> <span class="k">range</span> <span class="nx">mapSlice</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="nx">fmt</span><span class="p">.</span><span class="nf">Printf</span><span class="p">(</span><span class="s">&#34;index:%d value:%v\n&#34;</span><span class="p">,</span> <span class="nx">index</span><span class="p">,</span> <span class="nx">value</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;after init&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="c1">// 对切片中的map元素进行初始化
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="nx">mapSlice</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="p">=</span> <span class="nb">make</span><span class="p">(</span><span class="kd">map</span><span class="p">[</span><span class="kt">string</span><span class="p">]</span><span class="kt">string</span><span class="p">,</span> <span class="mi">10</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="nx">mapSlice</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s">&#34;name&#34;</span><span class="p">]</span> <span class="p">=</span> <span class="s">&#34;小王子&#34;</span>
</span></span><span class="line"><span class="cl">	<span class="nx">mapSlice</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s">&#34;password&#34;</span><span class="p">]</span> <span class="p">=</span> <span class="s">&#34;123456&#34;</span>
</span></span><span class="line"><span class="cl">	<span class="nx">mapSlice</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s">&#34;address&#34;</span><span class="p">]</span> <span class="p">=</span> <span class="s">&#34;沙河&#34;</span>
</span></span><span class="line"><span class="cl">	<span class="k">for</span> <span class="nx">index</span><span class="p">,</span> <span class="nx">value</span> <span class="o">:=</span> <span class="k">range</span> <span class="nx">mapSlice</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="nx">fmt</span><span class="p">.</span><span class="nf">Printf</span><span class="p">(</span><span class="s">&#34;index:%d value:%v\n&#34;</span><span class="p">,</span> <span class="nx">index</span><span class="p">,</span> <span class="nx">value</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span></code></pre></div><h3 id="值为切片类型的map">值为切片类型的map</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="kd">var</span> <span class="nx">sliceMap</span> <span class="p">=</span> <span class="nb">make</span><span class="p">(</span><span class="kd">map</span><span class="p">[</span><span class="kt">string</span><span class="p">][]</span><span class="kt">string</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="nx">sliceMap</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;after init&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="nx">key</span> <span class="o">:=</span> <span class="s">&#34;中国&#34;</span>
</span></span><span class="line"><span class="cl">	<span class="nx">value</span><span class="p">,</span> <span class="nx">ok</span> <span class="o">:=</span> <span class="nx">sliceMap</span><span class="p">[</span><span class="nx">key</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">	<span class="k">if</span> <span class="p">!</span><span class="nx">ok</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="nx">value</span> <span class="p">=</span> <span class="nb">make</span><span class="p">([]</span><span class="kt">string</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span><span class="line"><span class="cl">	<span class="nx">value</span> <span class="p">=</span> <span class="nb">append</span><span class="p">(</span><span class="nx">value</span><span class="p">,</span> <span class="s">&#34;北京&#34;</span><span class="p">,</span> <span class="s">&#34;上海&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="nx">sliceMap</span><span class="p">[</span><span class="nx">key</span><span class="p">]</span> <span class="p">=</span> <span class="nx">value</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="nx">sliceMap</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><h2 id="函数">函数</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="kd">func</span> <span class="nx">函数名</span><span class="p">(</span><span class="nx">参数</span> <span class="nx">类型</span><span class="p">)</span> <span class="nx">返回值类型</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nx">函数体</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">intSum</span><span class="p">(</span><span class="nx">x</span> <span class="kt">int</span><span class="p">,</span> <span class="nx">y</span> <span class="kt">int</span><span class="p">)</span> <span class="kt">int</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="k">return</span> <span class="nx">x</span> <span class="o">+</span> <span class="nx">y</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><h3 id="参数同类型简写">参数同类型简写</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">intSum</span><span class="p">(</span><span class="nx">x</span><span class="p">,</span> <span class="nx">y</span> <span class="kt">int</span><span class="p">)</span> <span class="kt">int</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="k">return</span> <span class="nx">x</span> <span class="o">+</span> <span class="nx">y</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><h3 id="可变参数">可变参数</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">intSum2</span><span class="p">(</span><span class="nx">x</span> <span class="o">...</span><span class="kt">int</span><span class="p">)</span> <span class="kt">int</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="nx">x</span><span class="p">)</span> <span class="c1">//x是一个切片
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="nx">sum</span> <span class="o">:=</span> <span class="mi">0</span>
</span></span><span class="line"><span class="cl">	<span class="k">for</span> <span class="nx">_</span><span class="p">,</span> <span class="nx">v</span> <span class="o">:=</span> <span class="k">range</span> <span class="nx">x</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="nx">sum</span> <span class="p">=</span> <span class="nx">sum</span> <span class="o">+</span> <span class="nx">v</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span><span class="line"><span class="cl">	<span class="k">return</span> <span class="nx">sum</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><h3 id="返回值">返回值</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="c1">//有命名的返回
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kd">func</span> <span class="nf">calc</span><span class="p">(</span><span class="nx">x</span><span class="p">,</span> <span class="nx">y</span> <span class="kt">int</span><span class="p">)</span> <span class="p">(</span><span class="nx">sum</span><span class="p">,</span> <span class="nx">sub</span> <span class="kt">int</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="nx">sum</span> <span class="p">=</span> <span class="nx">x</span> <span class="o">+</span> <span class="nx">y</span>
</span></span><span class="line"><span class="cl">	<span class="nx">sub</span> <span class="p">=</span> <span class="nx">x</span> <span class="o">-</span> <span class="nx">y</span>
</span></span><span class="line"><span class="cl">	<span class="k">return</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="c1">//切片
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kd">func</span> <span class="nf">someFunc</span><span class="p">(</span><span class="nx">x</span> <span class="kt">string</span><span class="p">)</span> <span class="p">[]</span><span class="kt">int</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="k">if</span> <span class="nx">x</span> <span class="o">==</span> <span class="s">&#34;&#34;</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="k">return</span> <span class="kc">nil</span> <span class="c1">// 没必要返回[]int{}
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="p">}</span>
</span></span><span class="line"><span class="cl">	<span class="o">...</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>如果局部变量和全局变量重名，优先访问局部变量</p>
<h3 id="函数类型与变量">函数类型与变量</h3>
<p>我们可以使用<code>type</code>关键字来定义一个函数类型，具体格式如下：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="kd">type</span> <span class="nx">calculation</span> <span class="kd">func</span><span class="p">(</span><span class="kt">int</span><span class="p">,</span> <span class="kt">int</span><span class="p">)</span> <span class="kt">int</span>
</span></span></code></pre></div><p>上面语句定义了一个<code>calculation</code>类型，它是一种函数类型，这种函数接收两个int类型的参数并且返回一个int类型的返回值。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="kd">var</span> <span class="nx">c</span> <span class="nx">calculation</span>               <span class="c1">// 声明一个calculation类型的变量c
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="nx">c</span> <span class="p">=</span> <span class="nx">add</span>                         <span class="c1">// 把add赋值给c
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Printf</span><span class="p">(</span><span class="s">&#34;type of c:%T\n&#34;</span><span class="p">,</span> <span class="nx">c</span><span class="p">)</span> <span class="c1">// type of c:main.calculation
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="nf">c</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">))</span>            <span class="c1">// 像调用add一样调用c
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>
</span></span><span class="line"><span class="cl">	<span class="nx">f</span> <span class="o">:=</span> <span class="nx">add</span>                        <span class="c1">// 将函数add赋值给变量f1
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Printf</span><span class="p">(</span><span class="s">&#34;type of f:%T\n&#34;</span><span class="p">,</span> <span class="nx">f</span><span class="p">)</span> <span class="c1">// type of f:func(int, int) int
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="nf">f</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="mi">20</span><span class="p">))</span>          <span class="c1">// 像调用add一样调用f
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="p">}</span>
</span></span></code></pre></div><h3 id="函数作参数与返回值">函数作参数与返回值</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">add</span><span class="p">(</span><span class="nx">x</span><span class="p">,</span> <span class="nx">y</span> <span class="kt">int</span><span class="p">)</span> <span class="kt">int</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="k">return</span> <span class="nx">x</span> <span class="o">+</span> <span class="nx">y</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">calc</span><span class="p">(</span><span class="nx">x</span><span class="p">,</span> <span class="nx">y</span> <span class="kt">int</span><span class="p">,</span> <span class="nx">op</span> <span class="kd">func</span><span class="p">(</span><span class="kt">int</span><span class="p">,</span> <span class="kt">int</span><span class="p">)</span> <span class="kt">int</span><span class="p">)</span> <span class="kt">int</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="k">return</span> <span class="nf">op</span><span class="p">(</span><span class="nx">x</span><span class="p">,</span> <span class="nx">y</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="nx">ret2</span> <span class="o">:=</span> <span class="nf">calc</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="mi">20</span><span class="p">,</span> <span class="nx">add</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="nx">ret2</span><span class="p">)</span> <span class="c1">//30
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="p">}</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">do</span><span class="p">(</span><span class="nx">s</span> <span class="kt">string</span><span class="p">)</span> <span class="p">(</span><span class="kd">func</span><span class="p">(</span><span class="kt">int</span><span class="p">,</span> <span class="kt">int</span><span class="p">)</span> <span class="kt">int</span><span class="p">,</span> <span class="kt">error</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="k">switch</span> <span class="nx">s</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="k">case</span> <span class="s">&#34;+&#34;</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">		<span class="k">return</span> <span class="nx">add</span><span class="p">,</span> <span class="kc">nil</span>
</span></span><span class="line"><span class="cl">	<span class="k">case</span> <span class="s">&#34;-&#34;</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">		<span class="k">return</span> <span class="nx">sub</span><span class="p">,</span> <span class="kc">nil</span>
</span></span><span class="line"><span class="cl">	<span class="k">default</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">		<span class="nx">err</span> <span class="o">:=</span> <span class="nx">errors</span><span class="p">.</span><span class="nf">New</span><span class="p">(</span><span class="s">&#34;无法识别的操作符&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">		<span class="k">return</span> <span class="kc">nil</span><span class="p">,</span> <span class="nx">err</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><h3 id="匿名函数">匿名函数</h3>
<p>函数内部定义函数</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="c1">// 将匿名函数保存到变量
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="nx">add</span> <span class="o">:=</span> <span class="kd">func</span><span class="p">(</span><span class="nx">x</span><span class="p">,</span> <span class="nx">y</span> <span class="kt">int</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="nx">x</span> <span class="o">+</span> <span class="nx">y</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span><span class="line"><span class="cl">	<span class="nf">add</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="mi">20</span><span class="p">)</span> <span class="c1">// 通过变量调用匿名函数
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>
</span></span><span class="line"><span class="cl">	<span class="c1">//自执行函数：匿名函数定义完加()直接执行
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="kd">func</span><span class="p">(</span><span class="nx">x</span><span class="p">,</span> <span class="nx">y</span> <span class="kt">int</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="nx">x</span> <span class="o">+</span> <span class="nx">y</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="p">}(</span><span class="mi">10</span><span class="p">,</span> <span class="mi">20</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><h3 id="闭包">闭包</h3>
<p>闭包指的是一个函数和与其相关的引用环境组合而成的实体。简单来说，<code>闭包=函数+引用环境</code></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">adder</span><span class="p">()</span> <span class="kd">func</span><span class="p">(</span><span class="kt">int</span><span class="p">)</span> <span class="kt">int</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="kd">var</span> <span class="nx">x</span> <span class="kt">int</span>
</span></span><span class="line"><span class="cl">	<span class="k">return</span> <span class="kd">func</span><span class="p">(</span><span class="nx">y</span> <span class="kt">int</span><span class="p">)</span> <span class="kt">int</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="nx">x</span> <span class="o">+=</span> <span class="nx">y</span>
</span></span><span class="line"><span class="cl">		<span class="k">return</span> <span class="nx">x</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="kd">var</span> <span class="nx">f</span> <span class="p">=</span> <span class="nf">adder</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="nf">f</span><span class="p">(</span><span class="mi">10</span><span class="p">))</span> <span class="c1">//10
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="nf">f</span><span class="p">(</span><span class="mi">20</span><span class="p">))</span> <span class="c1">//30
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="nf">f</span><span class="p">(</span><span class="mi">30</span><span class="p">))</span> <span class="c1">//60
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>
</span></span><span class="line"><span class="cl">	<span class="nx">f1</span> <span class="o">:=</span> <span class="nf">adder</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="nf">f1</span><span class="p">(</span><span class="mi">40</span><span class="p">))</span> <span class="c1">//40
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="nf">f1</span><span class="p">(</span><span class="mi">50</span><span class="p">))</span> <span class="c1">//90
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="p">}</span>
</span></span></code></pre></div><h3 id="defer">defer</h3>
<p><code>defer</code>语句会将其后面跟随的语句进行延迟处理。在<code>defer</code>归属的函数即将返回时，将延迟处理的语句按<code>defer</code>定义的逆序进行执行，也就是说，先被<code>defer</code>的语句最后被执行，最后被<code>defer</code>的语句，最先被执行</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;start&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="k">defer</span> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="k">defer</span> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="k">defer</span> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;end&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="cm">/*
</span></span></span><span class="line"><span class="cl"><span class="cm">start
</span></span></span><span class="line"><span class="cl"><span class="cm">end
</span></span></span><span class="line"><span class="cl"><span class="cm">3
</span></span></span><span class="line"><span class="cl"><span class="cm">2
</span></span></span><span class="line"><span class="cl"><span class="cm">1
</span></span></span><span class="line"><span class="cl"><span class="cm">*/</span>
</span></span></code></pre></div><p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2022/01/20/image-20220120184447325.png" alt="image-20220120184447325"  /></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="c1">//面试题 defer注册要延迟执行的函数时,该函数所有的参数都需要确定其值
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kd">func</span> <span class="nf">calc</span><span class="p">(</span><span class="nx">index</span> <span class="kt">string</span><span class="p">,</span> <span class="nx">a</span><span class="p">,</span> <span class="nx">b</span> <span class="kt">int</span><span class="p">)</span> <span class="kt">int</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="nx">ret</span> <span class="o">:=</span> <span class="nx">a</span> <span class="o">+</span> <span class="nx">b</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="nx">index</span><span class="p">,</span> <span class="nx">a</span><span class="p">,</span> <span class="nx">b</span><span class="p">,</span> <span class="nx">ret</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="k">return</span> <span class="nx">ret</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="nx">x</span> <span class="o">:=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl">	<span class="nx">y</span> <span class="o">:=</span> <span class="mi">2</span>
</span></span><span class="line"><span class="cl">	<span class="k">defer</span> <span class="nf">calc</span><span class="p">(</span><span class="s">&#34;AA&#34;</span><span class="p">,</span> <span class="nx">x</span><span class="p">,</span> <span class="nf">calc</span><span class="p">(</span><span class="s">&#34;A&#34;</span><span class="p">,</span> <span class="nx">x</span><span class="p">,</span> <span class="nx">y</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">	<span class="nx">x</span> <span class="p">=</span> <span class="mi">10</span>
</span></span><span class="line"><span class="cl">	<span class="k">defer</span> <span class="nf">calc</span><span class="p">(</span><span class="s">&#34;BB&#34;</span><span class="p">,</span> <span class="nx">x</span><span class="p">,</span> <span class="nf">calc</span><span class="p">(</span><span class="s">&#34;B&#34;</span><span class="p">,</span> <span class="nx">x</span><span class="p">,</span> <span class="nx">y</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">	<span class="nx">y</span> <span class="p">=</span> <span class="mi">20</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="cm">/*
</span></span></span><span class="line"><span class="cl"><span class="cm">A 1 2 3 //defer calc(&#34;AA&#34;, 1, 3)
</span></span></span><span class="line"><span class="cl"><span class="cm">B 10 2 12 //defer calc(&#34;BB&#34;, 10, 12)
</span></span></span><span class="line"><span class="cl"><span class="cm">BB 10 12 22
</span></span></span><span class="line"><span class="cl"><span class="cm">AA 1 3 4
</span></span></span><span class="line"><span class="cl"><span class="cm">*/</span>
</span></span></code></pre></div><h3 id="内置函数">内置函数</h3>
<table>
<thead>
<tr>
<th style="text-align:center">内置函数</th>
<th style="text-align:center">介绍</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">close</td>
<td style="text-align:center">主要用来关闭channel</td>
</tr>
<tr>
<td style="text-align:center">len</td>
<td style="text-align:center">用来求长度，比如string、array、slice、map、channel</td>
</tr>
<tr>
<td style="text-align:center">new</td>
<td style="text-align:center">用来分配内存，主要用来分配值类型，比如int、struct。返回的是指针</td>
</tr>
<tr>
<td style="text-align:center">make</td>
<td style="text-align:center">用来分配内存，主要用来分配引用类型，比如chan、map、slice</td>
</tr>
<tr>
<td style="text-align:center">append</td>
<td style="text-align:center">用来追加元素到数组、slice中</td>
</tr>
<tr>
<td style="text-align:center">panic和recover</td>
<td style="text-align:center">用来做错误处理</td>
</tr>
</tbody>
</table>
<p>Go语言中目前（Go1.12）是没有异常机制，但是使用<code>panic/recover</code>模式来处理错误。 <code>panic</code>可以在任何地方引发，但<code>recover</code>只有在<code>defer</code>调用的函数中有效</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">funcA</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;func A&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">funcB</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="k">defer</span> <span class="kd">func</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="nx">err</span> <span class="o">:=</span> <span class="nb">recover</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">		<span class="c1">//如果程序出出现了panic错误,可以通过recover恢复过来
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>		<span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">			<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;recover in B&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">		<span class="p">}</span>
</span></span><span class="line"><span class="cl">	<span class="p">}()</span>
</span></span><span class="line"><span class="cl">	<span class="nb">panic</span><span class="p">(</span><span class="s">&#34;panic in B&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">funcC</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;func C&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="nf">funcA</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">	<span class="nf">funcB</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">	<span class="nf">funcC</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><blockquote>
<ol>
<li><code>recover()</code>必须搭配<code>defer</code>使用。</li>
<li><code>defer</code>一定要在可能引发<code>panic</code>的语句之前定义。</li>
</ol>
</blockquote>
<h2 id="fmt标准库">fmt标准库</h2>
<p>fmt包实现了类似C语言printf和scanf的格式化I/O。主要分为向外输出内容和获取输入内容两大部分</p>
<h3 id="print">Print</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Print</span><span class="p">(</span><span class="s">&#34;在终端打印该信息。&#34;</span><span class="p">)</span> <span class="c1">//不换行
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="nx">name</span> <span class="o">:=</span> <span class="s">&#34;沙河小王子&#34;</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Printf</span><span class="p">(</span><span class="s">&#34;我是：%s\n&#34;</span><span class="p">,</span> <span class="nx">name</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;在终端打印单独一行显示&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><h3 id="fprint">FPrint</h3>
<p><code>Fprint</code>系列函数会将内容输出到一个<code>io.Writer</code>接口类型的变量<code>w</code>中，我们通常用这个函数往文件中写入内容</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="c1">// 向标准输出写入内容
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="nx">fmt</span><span class="p">.</span><span class="nf">Fprintln</span><span class="p">(</span><span class="nx">os</span><span class="p">.</span><span class="nx">Stdout</span><span class="p">,</span> <span class="s">&#34;向标准输出写入内容&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nx">fileObj</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">os</span><span class="p">.</span><span class="nf">OpenFile</span><span class="p">(</span><span class="s">&#34;./xx.txt&#34;</span><span class="p">,</span> <span class="nx">os</span><span class="p">.</span><span class="nx">O_CREATE</span><span class="p">|</span><span class="nx">os</span><span class="p">.</span><span class="nx">O_WRONLY</span><span class="p">|</span><span class="nx">os</span><span class="p">.</span><span class="nx">O_APPEND</span><span class="p">,</span> <span class="mo">0644</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;打开文件出错，err:&#34;</span><span class="p">,</span> <span class="nx">err</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="k">return</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="nx">name</span> <span class="o">:=</span> <span class="s">&#34;沙河小王子&#34;</span>
</span></span><span class="line"><span class="cl"><span class="c1">// 向打开的文件句柄中写入内容
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="nx">fmt</span><span class="p">.</span><span class="nf">Fprintf</span><span class="p">(</span><span class="nx">fileObj</span><span class="p">,</span> <span class="s">&#34;往文件中写如信息：%s&#34;</span><span class="p">,</span> <span class="nx">name</span><span class="p">)</span>
</span></span></code></pre></div><blockquote>
<p>只要满足<code>io.Writer</code>接口的类型都支持写入</p>
</blockquote>
<h3 id="sprint">Sprint</h3>
<p><code>Sprint</code>系列函数会把传入的数据生成并返回一个字符串</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="nx">s3</span> <span class="o">:=</span> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Sprintln</span><span class="p">(</span><span class="s">&#34;沙河小王子&#34;</span><span class="p">)</span>
</span></span></code></pre></div><h3 id="errorf">Errorf</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="nx">e</span> <span class="o">:=</span> <span class="nx">errors</span><span class="p">.</span><span class="nf">New</span><span class="p">(</span><span class="s">&#34;原始错误e&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nx">w</span> <span class="o">:=</span> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Errorf</span><span class="p">(</span><span class="s">&#34;Wrap了一个错误%w&#34;</span><span class="p">,</span> <span class="nx">e</span><span class="p">)</span>
</span></span></code></pre></div><h3 id="scan">Scan</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="nx">fmt</span><span class="p">.</span><span class="nf">Scan</span><span class="p">(</span><span class="o">&amp;</span><span class="nx">name</span><span class="p">,</span> <span class="o">&amp;</span><span class="nx">age</span><span class="p">,</span> <span class="o">&amp;</span><span class="nx">married</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nx">fmt</span><span class="p">.</span><span class="nf">Scanf</span><span class="p">(</span><span class="s">&#34;1:%s 2:%d 3:%t&#34;</span><span class="p">,</span> <span class="o">&amp;</span><span class="nx">name</span><span class="p">,</span> <span class="o">&amp;</span><span class="nx">age</span><span class="p">,</span> <span class="o">&amp;</span><span class="nx">married</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nx">fmt</span><span class="p">.</span><span class="nf">Scanln</span><span class="p">(</span><span class="o">&amp;</span><span class="nx">name</span><span class="p">,</span> <span class="o">&amp;</span><span class="nx">age</span><span class="p">,</span> <span class="o">&amp;</span><span class="nx">married</span><span class="p">)</span>
</span></span></code></pre></div><p>另有Fscan，Sscan</p>
<h3 id="bufionewreader">bufio.NewReader</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">bufioDemo</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="nx">reader</span> <span class="o">:=</span> <span class="nx">bufio</span><span class="p">.</span><span class="nf">NewReader</span><span class="p">(</span><span class="nx">os</span><span class="p">.</span><span class="nx">Stdin</span><span class="p">)</span> <span class="c1">// 从标准输入生成读对象
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Print</span><span class="p">(</span><span class="s">&#34;请输入内容：&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="nx">text</span><span class="p">,</span> <span class="nx">_</span> <span class="o">:=</span> <span class="nx">reader</span><span class="p">.</span><span class="nf">ReadString</span><span class="p">(</span><span class="sc">&#39;\n&#39;</span><span class="p">)</span> <span class="c1">// 读到换行终止 空格也读入
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="nx">text</span> <span class="p">=</span> <span class="nx">strings</span><span class="p">.</span><span class="nf">TrimSpace</span><span class="p">(</span><span class="nx">text</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Printf</span><span class="p">(</span><span class="s">&#34;%#v\n&#34;</span><span class="p">,</span> <span class="nx">text</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><h2 id="结构体">结构体</h2>
<p>Go语言中没有“类”的概念，也不支持“类”的继承等面向对象的概念。Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性。</p>
<h3 id="自定义类型">自定义类型</h3>
<p>自定义类型是定义了一个全新的类型。我们可以基于内置的基本类型定义，也可以通过struct定义</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="c1">//将MyInt定义为int类型
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kd">type</span> <span class="nx">MyInt</span> <span class="kt">int</span>
</span></span></code></pre></div><p>通过<code>type</code>关键字的定义，<code>MyInt</code>就是一种新的类型，它具有<code>int</code>的特性。</p>
<h3 id="类型别名">类型别名</h3>
<p>类型别名规定：TypeAlias只是Type的别名，本质上TypeAlias与Type是同一个类型</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="kd">type</span> <span class="nx">TypeAlias</span> <span class="p">=</span> <span class="nx">Type</span>
</span></span></code></pre></div><p>我们之前见过的<code>rune</code>和<code>byte</code>就是类型别名</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="kd">type</span> <span class="kt">byte</span> <span class="p">=</span> <span class="kt">uint8</span>
</span></span><span class="line"><span class="cl"><span class="kd">type</span> <span class="kt">rune</span> <span class="p">=</span> <span class="kt">int32</span>
</span></span></code></pre></div><h3 id="结构体定义">结构体定义</h3>
<p>使用<code>type</code>和<code>struct</code>关键字来定义结构体，具体代码格式如下：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="kd">type</span> <span class="nx">类型名</span> <span class="kd">struct</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nx">字段名</span> <span class="nx">字段类型</span>
</span></span><span class="line"><span class="cl">    <span class="nx">字段名</span> <span class="nx">字段类型</span>
</span></span><span class="line"><span class="cl">    <span class="err">…</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">type</span> <span class="nx">person</span> <span class="kd">struct</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="nx">name</span> <span class="kt">string</span>
</span></span><span class="line"><span class="cl">	<span class="nx">city</span> <span class="kt">string</span>
</span></span><span class="line"><span class="cl">	<span class="nx">age</span>  <span class="kt">int8</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">type</span> <span class="nx">person1</span> <span class="kd">struct</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="nx">name</span><span class="p">,</span> <span class="nx">city</span> <span class="kt">string</span>
</span></span><span class="line"><span class="cl">	<span class="nx">age</span>        <span class="kt">int8</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>其中：</p>
<ul>
<li>类型名：标识自定义结构体的名称，在同一个包内不能重复。</li>
<li>字段名：表示结构体字段名。结构体中的字段名必须唯一。</li>
<li>字段类型：表示结构体字段的具体类型。</li>
</ul>
<h3 id="实例化">实例化</h3>
<p>只有当结构体实例化时，才会真正地分配内存。必须实例化后才能使用结构体的字段。</p>
<p>结构体本身也是一种类型，我们可以像声明内置类型一样使用<code>var</code>关键字声明结构体类型。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="kd">var</span> <span class="nx">结构体实例</span> <span class="nx">结构体类型</span>
</span></span></code></pre></div><p>基本实例化</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="kd">type</span> <span class="nx">person</span> <span class="kd">struct</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="nx">name</span> <span class="kt">string</span>
</span></span><span class="line"><span class="cl">	<span class="nx">city</span> <span class="kt">string</span>
</span></span><span class="line"><span class="cl">	<span class="nx">age</span>  <span class="kt">int8</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="kd">var</span> <span class="nx">p1</span> <span class="nx">person</span>
</span></span><span class="line"><span class="cl">	<span class="nx">p1</span><span class="p">.</span><span class="nx">name</span> <span class="p">=</span> <span class="s">&#34;沙河娜扎&#34;</span>
</span></span><span class="line"><span class="cl">	<span class="nx">p1</span><span class="p">.</span><span class="nx">city</span> <span class="p">=</span> <span class="s">&#34;北京&#34;</span>
</span></span><span class="line"><span class="cl">	<span class="nx">p1</span><span class="p">.</span><span class="nx">age</span> <span class="p">=</span> <span class="mi">18</span>
</span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Printf</span><span class="p">(</span><span class="s">&#34;p1=%v\n&#34;</span><span class="p">,</span> <span class="nx">p1</span><span class="p">)</span>  <span class="c1">//p1={沙河娜扎 北京 18}
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Printf</span><span class="p">(</span><span class="s">&#34;p1=%#v\n&#34;</span><span class="p">,</span> <span class="nx">p1</span><span class="p">)</span> <span class="c1">//p1=main.person{name:&#34;沙河娜扎&#34;, city:&#34;北京&#34;, age:18}
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="p">}</span>
</span></span></code></pre></div><p>匿名结构体，用于临时数据结构</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="kd">var</span> <span class="nx">user</span> <span class="kd">struct</span><span class="p">{</span><span class="nx">Name</span> <span class="kt">string</span><span class="p">;</span> <span class="nx">Age</span> <span class="kt">int</span><span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="nx">user</span><span class="p">.</span><span class="nx">Name</span> <span class="p">=</span> <span class="s">&#34;小王子&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="nx">user</span><span class="p">.</span><span class="nx">Age</span> <span class="p">=</span> <span class="mi">18</span>
</span></span><span class="line"><span class="cl">    <span class="nx">fmt</span><span class="p">.</span><span class="nf">Printf</span><span class="p">(</span><span class="s">&#34;%#v\n&#34;</span><span class="p">,</span> <span class="nx">user</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>指针类型结构体，使用new分配地址</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="kd">var</span> <span class="nx">p2</span> <span class="p">=</span> <span class="nb">new</span><span class="p">(</span><span class="nx">person</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="c1">//使用&amp;对结构体进行取地址操作相当于对该结构体类型进行了一次new实例化操作
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="nx">p3</span> <span class="o">:=</span> <span class="o">&amp;</span><span class="nx">person</span><span class="p">{}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nx">fmt</span><span class="p">.</span><span class="nf">Printf</span><span class="p">(</span><span class="s">&#34;%T\n&#34;</span><span class="p">,</span> <span class="nx">p2</span><span class="p">)</span>     <span class="c1">//*main.person
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="nx">fmt</span><span class="p">.</span><span class="nf">Printf</span><span class="p">(</span><span class="s">&#34;p2=%#v\n&#34;</span><span class="p">,</span> <span class="nx">p2</span><span class="p">)</span> <span class="c1">//p2=&amp;main.person{name:&#34;&#34;, city:&#34;&#34;, age:0}
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>
</span></span><span class="line"><span class="cl"><span class="c1">//支持对结构体指针直接使用.来访问结构体的成员
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="nx">p2</span><span class="p">.</span><span class="nx">name</span> <span class="p">=</span> <span class="s">&#34;小王子&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nx">p2</span><span class="p">.</span><span class="nx">age</span> <span class="p">=</span> <span class="mi">28</span>
</span></span><span class="line"><span class="cl"><span class="nx">p2</span><span class="p">.</span><span class="nx">city</span> <span class="p">=</span> <span class="s">&#34;上海&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nx">fmt</span><span class="p">.</span><span class="nf">Printf</span><span class="p">(</span><span class="s">&#34;p2=%#v\n&#34;</span><span class="p">,</span> <span class="nx">p2</span><span class="p">)</span> <span class="c1">//p2=&amp;main.person{name:&#34;小王子&#34;, city:&#34;上海&#34;, age:28}
</span></span></span></code></pre></div><h3 id="初始化-3">初始化</h3>
<p>没有初始化的结构体，其成员变量都是对应其类型的零值。初始化是赋值的实例化。</p>
<p>使用键值对初始化</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="nx">p5</span> <span class="o">:=</span> <span class="nx">person</span><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nx">name</span><span class="p">:</span> <span class="s">&#34;小王子&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">	<span class="nx">city</span><span class="p">:</span> <span class="s">&#34;北京&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">	<span class="nx">age</span><span class="p">:</span>  <span class="mi">18</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>对结构体指针初始化</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="nx">p6</span> <span class="o">:=</span> <span class="o">&amp;</span><span class="nx">person</span><span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="nx">name</span><span class="p">:</span> <span class="s">&#34;小王子&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">	<span class="nx">city</span><span class="p">:</span> <span class="s">&#34;北京&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">	<span class="nx">age</span><span class="p">:</span>  <span class="mi">18</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>用列表初始化</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="nx">p8</span> <span class="o">:=</span> <span class="o">&amp;</span><span class="nx">person</span><span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="s">&#34;沙河娜扎&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">	<span class="s">&#34;北京&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">	<span class="mi">28</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><h3 id="内存布局">内存布局</h3>
<p>结构体占用一块连续的内存，空结构体不占空间</p>
<h3 id="构造函数">构造函数</h3>
<p>实现类似其他语言面向对象的构造函数，Go是面向接口编程。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>白丝云CloudSilk美国圣何塞AS9929精品网VPS测评</title>
      <link>https://blog.kanikig.xyz/%E7%99%BD%E4%B8%9D%E4%BA%91CloudSilk%E7%BE%8E%E5%9B%BD%E5%9C%A3%E4%BD%95%E5%A1%9EAS9929%E7%B2%BE%E5%93%81%E7%BD%91VPS%E6%B5%8B%E8%AF%84/</link>
      <pubDate>Thu, 09 Sep 2021 01:29:22 +0000</pubDate>
      
      <guid>https://blog.kanikig.xyz/%E7%99%BD%E4%B8%9D%E4%BA%91CloudSilk%E7%BE%8E%E5%9B%BD%E5%9C%A3%E4%BD%95%E5%A1%9EAS9929%E7%B2%BE%E5%93%81%E7%BD%91VPS%E6%B5%8B%E8%AF%84/</guid>
      <description>商家简介 白丝云，国人新商家，主营德国、美国精品网VPS。经过几个月的观察才入手，用户较少，带宽有保证。 官网：https://idc.best</description>
      <content:encoded><![CDATA[<h2 id="商家简介">商家简介</h2>
<p>白丝云，国人新商家，主营德国、美国精品网VPS。经过几个月的观察才入手，用户较少，带宽有保证。</p>
<p>官网：https://idc.best</p>
<h2 id="套餐">套餐</h2>
<p>圣何塞-精品大陆优化BGP，三网回程AS9929，到大陆带宽500M，美国本地带宽2.5G以上。CPU是E5-2699 v3，硬盘为SSD，流量为双向。</p>
<p>**购买链接：**<a href="https://idc.best/cart.php?gid=3">https://idc.best/cart.php?gid=3</a></p>
<table>
<thead>
<tr>
<th>套餐</th>
<th>价格/月</th>
<th>核心</th>
<th>内存</th>
<th>硬盘</th>
<th>流量</th>
</tr>
</thead>
<tbody>
<tr>
<td>A</td>
<td><strong>￥39</strong></td>
<td>1</td>
<td>512 MB</td>
<td>10 GB</td>
<td>800 GB</td>
</tr>
<tr>
<td>B</td>
<td><strong>￥79</strong></td>
<td>1</td>
<td>512 MB</td>
<td>10 GB</td>
<td>2 TB</td>
</tr>
<tr>
<td>C</td>
<td><strong>￥129</strong></td>
<td>2</td>
<td>2 GB</td>
<td>20 GB</td>
<td>4 TB</td>
</tr>
<tr>
<td>D</td>
<td><strong>￥229</strong></td>
<td>2</td>
<td>4 GB</td>
<td>20 GB</td>
<td>8 TB</td>
</tr>
<tr>
<td>E</td>
<td><strong>￥449</strong></td>
<td>4</td>
<td>4 GB</td>
<td>40 GB</td>
<td>12 TB</td>
</tr>
<tr>
<td>F</td>
<td><strong>￥749</strong></td>
<td>4</td>
<td>8 GB</td>
<td>80 GB</td>
<td>16 TB</td>
</tr>
<tr>
<td>G</td>
<td><strong>￥1280</strong></td>
<td>8</td>
<td>16 GB</td>
<td>80 GB</td>
<td>20 TB</td>
</tr>
</tbody>
</table>
<h2 id="测评">测评</h2>
<p>测试使用的是套餐C。</p>
<h3 id="lemonbench">LemonBench</h3>
<p><a href="https://paste.ubuntu.com/p/CGfzmBxc6P/">完整测试报告</a></p>
<h4 id="系统信息">系统信息</h4>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"> -&gt; System Information
</span></span><span class="line"><span class="cl"> 
</span></span><span class="line"><span class="cl"> OS Release:		Debian GNU/Linux <span class="s2">&#34;Buster&#34;</span> 10.9 <span class="o">(</span>x86_64<span class="o">)</span>
</span></span><span class="line"><span class="cl"> CPU Model:		Intel<span class="o">(</span>R<span class="o">)</span> Xeon<span class="o">(</span>R<span class="o">)</span> CPU E5-2699 v3 @ 2.30GHz  2.30 GHz
</span></span><span class="line"><span class="cl"> CPU Cache Size:	<span class="m">16384</span> KB
</span></span><span class="line"><span class="cl"> CPU Number:		<span class="m">2</span> vCPU
</span></span><span class="line"><span class="cl"> Virt Type:		KVM
</span></span><span class="line"><span class="cl"> Memory Usage:		90.08 MB / 1.94 GB
</span></span><span class="line"><span class="cl"> Swap Usage:		<span class="o">[</span> No Swapfile / Swap partition <span class="o">]</span>
</span></span><span class="line"><span class="cl"> Disk Usage:		1.47 GB / 19.59 GB
</span></span><span class="line"><span class="cl"> Boot Device:		/dev/vda2
</span></span><span class="line"><span class="cl"> Load <span class="o">(</span>1/5/15min<span class="o">)</span>:	0.19 0.30 0.20 
</span></span><span class="line"><span class="cl"> CPU Usage:		3.1% used, 0.0% iowait, 0.0% steal
</span></span><span class="line"><span class="cl"> Kernel Version:	5.13.0
</span></span><span class="line"><span class="cl"> Network CC Method:	bbr + fq_pie
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> -&gt; Network Information
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> IPV4 - IP Address:	<span class="o">[</span>US<span class="o">]</span> 185.148.14.*
</span></span><span class="line"><span class="cl"> IPV4 - ASN Info:	<span class="m">41378</span> <span class="o">(</span>KirinoNET - Kirino LLC, US<span class="o">)</span>
</span></span><span class="line"><span class="cl"> IPV4 - Region:		United States California San Jose
</span></span></code></pre></div><h4 id="性能">性能</h4>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"> -&gt; CPU Performance Test <span class="o">(</span>Fast Mode, 1-Pass @ 5sec<span class="o">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="m">1</span> Thread Test:			<span class="m">721</span> Scores
</span></span><span class="line"><span class="cl"> <span class="m">2</span> Threads Test:		<span class="m">1452</span> Scores
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> -&gt; Memory Performance Test <span class="o">(</span>Fast Mode, 1-Pass @ 5sec<span class="o">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="m">1</span> Thread - Read Test :		15659.01 MB/s
</span></span><span class="line"><span class="cl"> <span class="m">1</span> Thread - Write Test:		10723.85 MB/s
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> -&gt; Disk Speed Test <span class="o">(</span>4K Block/1M Block, Direct Mode<span class="o">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> Test Name		Write Speed				Read Speed
</span></span><span class="line"><span class="cl"> 100MB-4K Block		19.3 MB/s <span class="o">(</span><span class="m">4702</span> IOPS, 5.44 s<span class="o">)</span>		26.4 MB/s <span class="o">(</span><span class="m">6454</span> IOPS, 3.97 s<span class="o">)</span>
</span></span><span class="line"><span class="cl"> 1GB-1M Block		<span class="m">616</span> MB/s <span class="o">(</span><span class="m">587</span> IOPS, 1.70 s<span class="o">)</span>		2.1 GB/s <span class="o">(</span><span class="m">2010</span> IOPS, 0.50 s<span class="o">)</span>
</span></span></code></pre></div><h3 id="geekbench">Geekbench</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">Performing Geekbench v5 CPU Benchmark test. Please wait...
</span></span><span class="line"><span class="cl"> <span class="c1">## Geekbench v5 CPU Benchmark:</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  Single Core : <span class="m">508</span>  <span class="o">(</span>GOOD<span class="o">)</span>
</span></span><span class="line"><span class="cl">   Multi Core : <span class="m">1048</span>
</span></span></code></pre></div><h3 id="speedtest">Speedtest</h3>
<p>本地速度：至少2.5G口</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">Selecting best server based on ping...
</span></span><span class="line"><span class="cl">Hosted by EGI Hosting <span class="o">(</span>Santa Clara, CA<span class="o">)</span> <span class="o">[</span>6.29 km<span class="o">]</span>: 2.883 ms
</span></span><span class="line"><span class="cl">Testing download speed................................................................................
</span></span><span class="line"><span class="cl">Download: 3199.98 Mbit/s
</span></span><span class="line"><span class="cl">Testing upload speed................................................................................................
</span></span><span class="line"><span class="cl">Upload: 2012.33 Mbit/s
</span></span></code></pre></div><h3 id="superspeed">superspeed</h3>
<p>到大陆限速500M。测试过多家的4837，一般最多300M，而9929能够跑满500M。</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2021/09/09/image-202109090129555336dadb1888b9c0274.png" alt="image-20210909012955533"  /></p>
<h3 id="traceroute">TraceRoute</h3>
<p>三网AS9929回程</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">Traceroute to China, Beijing CU <span class="o">(</span>TCP Mode, Max <span class="m">30</span> Hop<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">============================================================</span>
</span></span><span class="line"><span class="cl">traceroute to 123.125.99.1 <span class="o">(</span>123.125.99.1<span class="o">)</span>, <span class="m">30</span> hops max, <span class="m">32</span> byte packets
</span></span><span class="line"><span class="cl"> <span class="m">1</span>  185.148.14.1  0.58 ms  AS41378  United States, California, San Jose, kirino.co
</span></span><span class="line"><span class="cl"> <span class="m">2</span>  162.219.85.245  0.79 ms  AS10099  United States, California, San Jose, ChinaUnicom
</span></span><span class="line"><span class="cl"> <span class="m">3</span>  203.160.75.222  126.09 ms  AS10099  China, Hong Kong, ChinaUnicom
</span></span><span class="line"><span class="cl"> <span class="m">4</span>  210.14.186.141  134.68 ms  *  China, ChinaUnicom
</span></span><span class="line"><span class="cl"> <span class="m">5</span>  218.105.131.125  157.59 ms  AS9929  China, Beijing, ChinaUnicom
</span></span><span class="line"><span class="cl"> <span class="m">6</span>  210.78.28.82  158.40 ms  *  China, Beijing, ChinaUnicom
</span></span><span class="line"><span class="cl"> <span class="m">7</span>  219.158.35.45  151.38 ms  AS4837  China, Beijing, ChinaUnicom
</span></span><span class="line"><span class="cl"> <span class="m">8</span>  219.158.5.129  151.58 ms  AS4837  China, Beijing, ChinaUnicom
</span></span><span class="line"><span class="cl"> <span class="m">9</span>  202.96.12.62  161.08 ms  AS4808  China, Beijing, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="m">10</span>  124.65.63.234  153.95 ms  AS4808  China, Beijing, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="m">11</span>  124.65.194.50  169.64 ms  AS4808  China, Beijing, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="m">12</span>  61.135.113.158  165.25 ms  AS4808  China, Beijing, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="m">13</span>  *
</span></span><span class="line"><span class="cl"><span class="m">14</span>  123.125.99.1  159.01 ms  AS4808  China, Beijing, ChinaUnicom
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Traceroute to China, Beijing CT <span class="o">(</span>TCP Mode, Max <span class="m">30</span> Hop<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">============================================================</span>
</span></span><span class="line"><span class="cl">traceroute to 180.149.128.9 <span class="o">(</span>180.149.128.9<span class="o">)</span>, <span class="m">30</span> hops max, <span class="m">32</span> byte packets
</span></span><span class="line"><span class="cl"> <span class="m">1</span>  185.148.14.1  0.38 ms  AS41378  United States, California, San Jose, kirino.co
</span></span><span class="line"><span class="cl"> <span class="m">2</span>  162.219.85.245  1.08 ms  AS10099  United States, California, San Jose, ChinaUnicom
</span></span><span class="line"><span class="cl"> <span class="m">3</span>  162.219.85.21  129.23 ms  AS10099  United States, California, ChinaUnicom
</span></span><span class="line"><span class="cl"> <span class="m">4</span>  210.14.186.145  135.94 ms  *  China, ChinaUnicom
</span></span><span class="line"><span class="cl"> <span class="m">5</span>  218.105.131.125  163.01 ms  AS9929  China, Beijing, ChinaUnicom
</span></span><span class="line"><span class="cl"> <span class="m">6</span>  210.78.28.78  150.65 ms  *  China, Beijing, ChinaUnicom
</span></span><span class="line"><span class="cl"> <span class="m">7</span>  202.97.16.61  163.88 ms  AS4134  China, Beijing, ChinaTelecom
</span></span><span class="line"><span class="cl"> <span class="m">8</span>  202.97.17.61  153.99 ms  AS4134  China, Beijing, ChinaTelecom
</span></span><span class="line"><span class="cl"> <span class="m">9</span>  36.110.246.130  156.10 ms  AS23724  China, Beijing, ChinaTelecom
</span></span><span class="line"><span class="cl"><span class="m">10</span>  36.110.246.198  162.85 ms  AS23724  China, Beijing, ChinaTelecom
</span></span><span class="line"><span class="cl"><span class="m">11</span>  180.149.128.9  161.96 ms  AS23724  China, Beijing, ChinaTelecom
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Traceroute to China, Beijing CM <span class="o">(</span>TCP Mode, Max <span class="m">30</span> Hop<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">============================================================</span>
</span></span><span class="line"><span class="cl">traceroute to 211.136.25.153 <span class="o">(</span>211.136.25.153<span class="o">)</span>, <span class="m">30</span> hops max, <span class="m">32</span> byte packets
</span></span><span class="line"><span class="cl"> <span class="m">1</span>  185.148.14.1  0.41 ms  AS41378  United States, California, San Jose, kirino.co
</span></span><span class="line"><span class="cl"> <span class="m">2</span>  162.219.85.245  0.82 ms  AS10099  United States, California, San Jose, ChinaUnicom
</span></span><span class="line"><span class="cl"> <span class="m">3</span>  203.160.75.222  125.34 ms  AS10099  China, Hong Kong, ChinaUnicom
</span></span><span class="line"><span class="cl"> <span class="m">4</span>  210.14.186.137  136.93 ms  *  China, ChinaUnicom
</span></span><span class="line"><span class="cl"> <span class="m">5</span>  218.105.131.101  150.78 ms  AS9929  China, Beijing, ChinaUnicom
</span></span><span class="line"><span class="cl"> <span class="m">6</span>  210.78.28.70  151.57 ms  *  China, Beijing, ChinaUnicom
</span></span><span class="line"><span class="cl"> <span class="m">7</span>  219.158.35.45  152.30 ms  AS4837  China, Beijing, ChinaUnicom
</span></span><span class="line"><span class="cl"> <span class="m">8</span>  *
</span></span><span class="line"><span class="cl"> <span class="m">9</span>  221.183.94.41  174.04 ms  AS9808  China, Beijing, ChinaMobile
</span></span><span class="line"><span class="cl"><span class="m">10</span>  221.183.39.118  181.84 ms  AS9808  China, Beijing, ChinaMobile
</span></span><span class="line"><span class="cl"><span class="m">11</span>  *
</span></span><span class="line"><span class="cl"><span class="m">12</span>  211.136.63.66  179.56 ms  AS56048  China, Beijing, ChinaMobile
</span></span><span class="line"><span class="cl"><span class="m">13</span>  211.136.63.66  185.26 ms  AS56048  China, Beijing, ChinaMobile
</span></span><span class="line"><span class="cl"><span class="m">14</span>  211.136.95.226  172.94 ms  AS56048  China, Beijing, ChinaMobile
</span></span><span class="line"><span class="cl"><span class="m">15</span>  *
</span></span><span class="line"><span class="cl"><span class="m">16</span>  211.136.25.153  169.73 ms  AS56048  China, Beijing, ChinaMobile
</span></span></code></pre></div><h3 id="流媒体解锁">流媒体解锁</h3>
<p>解锁Netflix、Disney等，还是不错的</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">** 测试时间: Wed Sep  <span class="m">8</span> 17:56:34 UTC <span class="m">2021</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> ** 正在测试IPv4解锁情况 
</span></span><span class="line"><span class="cl">--------------------------------
</span></span><span class="line"><span class="cl"> ** 您的网络为: Parsun Network Solutions PTY <span class="nv">LTD</span> 
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="o">============[</span> Multination <span class="o">]============</span>
</span></span><span class="line"><span class="cl"> Dazn:                                  No
</span></span><span class="line"><span class="cl"> HotStar:                               Yes <span class="o">(</span>Region: US<span class="o">)</span>
</span></span><span class="line"><span class="cl"> Disney+:                               Yes <span class="o">(</span>Region: US<span class="o">)</span>
</span></span><span class="line"><span class="cl"> Netflix:                               Yes <span class="o">(</span>Region: US<span class="o">)</span>
</span></span><span class="line"><span class="cl"> YouTube Premium:                       Yes <span class="o">(</span>Region: US<span class="o">)</span>
</span></span><span class="line"><span class="cl"> Amazon Prime Video:                    Yes <span class="o">(</span>Region: US<span class="o">)</span>
</span></span><span class="line"><span class="cl"> TVBAnywhere+:                          Yes
</span></span><span class="line"><span class="cl"> Tiktok Region:                         US <span class="o">(</span>IDC IP Detected<span class="o">)</span>
</span></span><span class="line"><span class="cl"> iQyi Oversea Region:                   US
</span></span><span class="line"><span class="cl"> Viu.com:                               No
</span></span><span class="line"><span class="cl"> YouTube CDN:                           San Jose
</span></span><span class="line"><span class="cl"> Netflix Preferred CDN:                 Associated with <span class="o">[]</span> in <span class="o">[</span>San Jose<span class="o">]</span>
</span></span><span class="line"><span class="cl"> Steam Currency:                        <span class="nv">USD</span>
</span></span><span class="line"><span class="cl"><span class="o">=======================================</span>
</span></span><span class="line"><span class="cl"><span class="o">===========[</span> North America <span class="o">]===========</span>
</span></span><span class="line"><span class="cl"> FOX:                                   Yes
</span></span><span class="line"><span class="cl"> Hulu:                                  No
</span></span><span class="line"><span class="cl"> Epix:                                  No
</span></span><span class="line"><span class="cl"> Starz:                                 No
</span></span><span class="line"><span class="cl"> HBO Now:                               Yes
</span></span><span class="line"><span class="cl"> HBO Max:                               Yes
</span></span><span class="line"><span class="cl"> BritBox:                               Yes
</span></span><span class="line"><span class="cl"> NBA TV:                                Yes
</span></span><span class="line"><span class="cl"> Fubo TV:                               Yes
</span></span><span class="line"><span class="cl"> Sling TV:                              No
</span></span><span class="line"><span class="cl"> Pluto TV:                              No
</span></span><span class="line"><span class="cl"> SHOWTIME:                              Yes
</span></span><span class="line"><span class="cl"> AT<span class="p">&amp;</span>T NOW:                              Yes
</span></span><span class="line"><span class="cl"> encoreTVB:                             Yes
</span></span><span class="line"><span class="cl"> CineMax Go:                            Yes
</span></span><span class="line"><span class="cl"> Paramount+:                            Yes
</span></span><span class="line"><span class="cl"> Peacock TV:                            Yes
</span></span><span class="line"><span class="cl"> ---CA---
</span></span><span class="line"><span class="cl"> CBC Gem:                               No
</span></span><span class="line"><span class="cl"> Acorn TV:                              Failed <span class="o">(</span>Network Connection<span class="o">)</span>
</span></span><span class="line"><span class="cl"> Crave:                                 <span class="nv">No</span>
</span></span><span class="line"><span class="cl"><span class="o">=======================================</span>
</span></span><span class="line"><span class="cl">当前主机不支持IPv6,跳过...
</span></span></code></pre></div><h2 id="玩法">玩法</h2>
<p>AS9929大陆精品线路，速度非常稳定，适合中转美洲的各地机器。流媒体解锁较全，也适合直接落地。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Avoro德国 独享AMD Epyc 7452 高性能VPS测评</title>
      <link>https://blog.kanikig.xyz/Avoro%E5%BE%B7%E5%9B%BD-%E7%8B%AC%E4%BA%ABAMD-Epyc-7452-%E9%AB%98%E6%80%A7%E8%83%BDVPS%E6%B5%8B%E8%AF%84/</link>
      <pubDate>Sat, 21 Aug 2021 17:30:05 +0000</pubDate>
      
      <guid>https://blog.kanikig.xyz/Avoro%E5%BE%B7%E5%9B%BD-%E7%8B%AC%E4%BA%ABAMD-Epyc-7452-%E9%AB%98%E6%80%A7%E8%83%BDVPS%E6%B5%8B%E8%AF%84/</guid>
      <description>商家简介 Avoro是成立于2016年的德国商家，提供德国主机。往往德国商家会有一些高性能但性价比极高的机器。这家比较冷门，是我在CPU跑分网</description>
      <content:encoded><![CDATA[<h2 id="商家简介">商家简介</h2>
<p>Avoro是成立于2016年的德国商家，提供德国主机。往往德国商家会有一些高性能但性价比极高的机器。这家比较冷门，是我在CPU跑分网站上看到的。</p>
<p>官网：https://avoro.eu/</p>
<h2 id="套餐">套餐</h2>
<p>该套餐使用 <strong>AMD Epyc 7452</strong> 处理器，为<strong>独享</strong>核心。内存使用 DDR4 ECC RAM，KVM虚拟化，NVMe-SSD硬盘，免费200 Gbit/s DDOS防护，带IPv6。</p>
<p>**购买链接：**<a href="https://avoro.eu/de/nvme-vserver/">https://avoro.eu/de/nvme-vserver/</a></p>
<table>
<thead>
<tr>
<th>套餐</th>
<th>价格/月</th>
<th>核心</th>
<th>内存</th>
<th>硬盘</th>
<th>流量</th>
</tr>
</thead>
<tbody>
<tr>
<td>NVME VSERVER S</td>
<td><strong>€9.00</strong></td>
<td>2</td>
<td>8GB</td>
<td>40 GB</td>
<td>20 TB</td>
</tr>
<tr>
<td>NVME VSERVER M</td>
<td><strong>€18.00</strong></td>
<td>4</td>
<td>16 GB</td>
<td>80 GB</td>
<td>20 TB</td>
</tr>
<tr>
<td>NVME VSERVER L</td>
<td><strong>€36.00</strong></td>
<td>8</td>
<td>32 GB</td>
<td>160 GB</td>
<td>40 TB</td>
</tr>
<tr>
<td>NVME VSERVER XL</td>
<td><strong>€72.00</strong></td>
<td>12</td>
<td>64 GB</td>
<td>320 GB</td>
<td>40 TB</td>
</tr>
</tbody>
</table>
<h2 id="测评">测评</h2>
<p>测试使用的是 NVME VSERVER S。</p>
<p>比较难受的是开到一台ip被墙的，大家购买前考虑好。我用一台德国CN2反代的，所以还是起飞。</p>
<h3 id="lemonbench">LemonBench</h3>
<p><a href="https://paste.ubuntu.com/p/hYdmNTTn4J/">完整测试报告</a></p>
<h4 id="系统信息">系统信息</h4>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"> -&gt; System Information
</span></span><span class="line"><span class="cl"> 
</span></span><span class="line"><span class="cl"> OS Release:		Debian GNU/Linux <span class="s2">&#34;Buster&#34;</span> 10.0 <span class="o">(</span>x86_64<span class="o">)</span>
</span></span><span class="line"><span class="cl"> CPU Model:		AMD EPYC <span class="m">7452</span> 32-Core Processor  2.35 GHz
</span></span><span class="line"><span class="cl"> CPU Cache Size:	<span class="m">512</span> KB
</span></span><span class="line"><span class="cl"> CPU Number:		<span class="m">2</span> vCPU
</span></span><span class="line"><span class="cl"> Virt Type:		KVM
</span></span><span class="line"><span class="cl"> Memory Usage:		113.83 MB / 7.79 GB
</span></span><span class="line"><span class="cl"> Swap Usage:		<span class="o">[</span> No Swapfile / Swap partition <span class="o">]</span>
</span></span><span class="line"><span class="cl"> Disk Usage:		1.12 GB / 41.24 GB
</span></span><span class="line"><span class="cl"> Boot Device:		/dev/vda1
</span></span><span class="line"><span class="cl"> Load <span class="o">(</span>1/5/15min<span class="o">)</span>:	0.34 0.10 0.03 
</span></span><span class="line"><span class="cl"> CPU Usage:		0.0% used, 0.0% iowait, 0.0% steal
</span></span><span class="line"><span class="cl"> Kernel Version:	4.19.0-5-amd64
</span></span><span class="line"><span class="cl"> Network CC Method:	cubic + pfifo_fast
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> -&gt; Network Information
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> IPV4 - IP Address:	<span class="o">[</span>DE<span class="o">]</span> 45.157.235.*
</span></span><span class="line"><span class="cl"> IPV4 - ASN Info:	<span class="m">60548</span> <span class="o">(</span>Avoro - Harmony Solutions GmbH, DE<span class="o">)</span>
</span></span><span class="line"><span class="cl"> IPV4 - Region:		Germany Hesse Frankfurt
</span></span><span class="line"><span class="cl"> IPV6 - IP Address:	<span class="o">[</span>DE<span class="o">]</span> 2a0c:4ac0:1200:184::*
</span></span><span class="line"><span class="cl"> IPV6 - ASN Info:	<span class="m">60548</span> <span class="o">(</span>Avoro - Harmony Solutions GmbH, DE<span class="o">)</span>
</span></span><span class="line"><span class="cl"> IPV6 - Region:		Germany Germany 
</span></span></code></pre></div><h4 id="性能">性能</h4>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">-&gt; CPU Performance Test <span class="o">(</span>Fast Mode, 1-Pass @ 5sec<span class="o">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="m">1</span> Thread Test:			<span class="m">1519</span> Scores
</span></span><span class="line"><span class="cl"> <span class="m">2</span> Threads Test:		<span class="m">3039</span> Scores
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> -&gt; Memory Performance Test <span class="o">(</span>Fast Mode, 1-Pass @ 5sec<span class="o">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="m">1</span> Thread - Read Test :		39224.49 MB/s
</span></span><span class="line"><span class="cl"> <span class="m">1</span> Thread - Write Test:		16865.01 MB/s
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> -&gt; Disk Speed Test <span class="o">(</span>4K Block/1M Block, Direct Mode<span class="o">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> Test Name		Write Speed				Read Speed
</span></span><span class="line"><span class="cl"> 100MB-4K Block		19.5 MB/s <span class="o">(</span><span class="m">4766</span> IOPS, 5.37 s<span class="o">)</span>		13.6 MB/s <span class="o">(</span><span class="m">3313</span> IOPS, 7.73 s<span class="o">)</span>
</span></span><span class="line"><span class="cl"> 1GB-1M Block		<span class="m">171</span> MB/s <span class="o">(</span><span class="m">162</span> IOPS, 6.15 s<span class="o">)</span>		<span class="m">183</span> MB/s <span class="o">(</span><span class="m">174</span> IOPS, 5.74 s<span class="o">)</span>
</span></span></code></pre></div><h3 id="geekbench">Geekbench</h3>
<p>AMD YES!</p>
<p><a href="https://browser.geekbench.com/v5/cpu/9407692">完整测试报告</a></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">Performing Geekbench v5 CPU Benchmark test. Please wait...
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="c1">## Geekbench v5 CPU Benchmark:</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  Single Core : <span class="m">877</span>  <span class="o">(</span>VERY GOOD<span class="o">)</span>
</span></span><span class="line"><span class="cl">   Multi Core : <span class="m">1698</span>
</span></span></code></pre></div><h3 id="speedtest">Speedtest</h3>
<p>本地速度：G口的</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">Selecting best server based on ping...
</span></span><span class="line"><span class="cl">Hosted by Spacken.net <span class="o">(</span>Hagen<span class="o">)</span> <span class="o">[</span>141.07 km<span class="o">]</span>: 9.721 ms
</span></span><span class="line"><span class="cl">Testing download speed................................................................................
</span></span><span class="line"><span class="cl">Download: 903.09 Mbit/s
</span></span><span class="line"><span class="cl">Testing upload speed................................................................................................
</span></span><span class="line"><span class="cl">Upload: 728.46 Mbit/s
</span></span></code></pre></div><h3 id="superspeed">superspeed</h3>
<p>德国机器大部分都这样，到联通速度很猛，其他没速度。</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2021/08/21/image-20210821181427479.png" alt="image-20210821181427479"  /></p>
<h3 id="traceroute">TraceRoute</h3>
<p>联通和CN2延迟还可以，其他都不行</p>
<pre tabindex="0"><code>Traceroute to China, Beijing CU (TCP Mode, Max 30 Hop)
============================================================
traceroute to 123.125.99.1 (123.125.99.1), 30 hops max, 32 byte packets
 1  31.40.212.1  1.36 ms  http: error  http: error
 2  45.135.203.113  0.54 ms  http: error  http: error
 3  45.135.200.14  0.57 ms  http: error  http: error
 4  84.17.33.58  0.65 ms  http: error  http: error
 5  *
 6  *
 7  149.14.89.2  3.26 ms  http: error  http: error
 8  *
 9  *
10  *
11  *
12  219.232.11.198  136.35 ms  http: error  http: error
13  124.65.194.50  129.10 ms  http: error  http: error
14  61.135.113.158  131.27 ms  http: error  http: error
15  *
16  123.125.99.1  119.25 ms  http: error  http: error
</code></pre><h3 id="流媒体解锁">流媒体解锁</h3>
<p>挺多解锁的</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="o">=============</span><span class="nv">跨国平台解锁</span><span class="o">==============</span>
</span></span><span class="line"><span class="cl"> Dazn:                                  No
</span></span><span class="line"><span class="cl"> HotStar:                               No
</span></span><span class="line"><span class="cl"> Netflix:                               Originals Only
</span></span><span class="line"><span class="cl"> DisneyPlus:                            Yes <span class="o">(</span>Region: DE<span class="o">)</span>
</span></span><span class="line"><span class="cl"> YouTube Premium:                       Yes <span class="o">(</span>Region: DE<span class="o">)</span>
</span></span><span class="line"><span class="cl"> Amazon Prime Video:                    Yes <span class="o">(</span>Region: DE<span class="o">)</span>
</span></span><span class="line"><span class="cl"> TVBAnywhere+:                          Yes
</span></span><span class="line"><span class="cl"> Tiktok Region:                         Failed
</span></span><span class="line"><span class="cl"> iQyi Oversea Region:                   DE
</span></span><span class="line"><span class="cl"> Viu.com:                               No
</span></span><span class="line"><span class="cl"> YouTube CDN:                           Associated with RETNUKR
</span></span><span class="line"><span class="cl"> Netflix Preferred CDN:                 Frankfurt 
</span></span><span class="line"><span class="cl"> Steam Currency:                        <span class="nv">EUR</span>
</span></span><span class="line"><span class="cl"><span class="o">=======================================</span>
</span></span><span class="line"><span class="cl"><span class="o">=============</span><span class="nv">欧洲地区解锁</span><span class="o">==============</span>
</span></span><span class="line"><span class="cl"> Rakuten TV:                            Yes
</span></span><span class="line"><span class="cl"> HBO Nordic:                            No
</span></span><span class="line"><span class="cl"> HBO GO Europe:                         No
</span></span><span class="line"><span class="cl"> ---GB---
</span></span><span class="line"><span class="cl"> Sky Go:                                Yes
</span></span><span class="line"><span class="cl"> BritBox:                               No
</span></span><span class="line"><span class="cl"> ITV Hub:                               No
</span></span><span class="line"><span class="cl"> Channel 4:                             No
</span></span><span class="line"><span class="cl"> BBC iPLAYER:                           No
</span></span><span class="line"><span class="cl"> ---FR---
</span></span><span class="line"><span class="cl"> Salto:                                 No
</span></span><span class="line"><span class="cl"> Canal+:                                No
</span></span><span class="line"><span class="cl"> Molotov:                               No
</span></span><span class="line"><span class="cl"> ---DE---
</span></span><span class="line"><span class="cl"> Joyn:                                  Yes
</span></span><span class="line"><span class="cl"> Sky:                                   Yes
</span></span><span class="line"><span class="cl"> ZDF:                                   Yes
</span></span><span class="line"><span class="cl"> ---NL---
</span></span><span class="line"><span class="cl"> NLZIET:                                Failed
</span></span><span class="line"><span class="cl"> videoland:                             Yes
</span></span><span class="line"><span class="cl"> NPO Start Plus:                        No
</span></span><span class="line"><span class="cl"> ---ES---
</span></span><span class="line"><span class="cl"> HBO Spain:                             No
</span></span><span class="line"><span class="cl"> PANTAYA:                               No
</span></span><span class="line"><span class="cl"> ---IT---
</span></span><span class="line"><span class="cl"> Rai Play:                              No
</span></span><span class="line"><span class="cl"> ---RU---
</span></span><span class="line"><span class="cl"> Amediateka:                            No
</span></span><span class="line"><span class="cl"> ---PT---
</span></span><span class="line"><span class="cl"> HBO Portugal:                          <span class="nv">No</span>
</span></span><span class="line"><span class="cl"><span class="o">=======================================</span>
</span></span></code></pre></div><h2 id="玩法">玩法</h2>
<p>性能非常强劲，跑分是我目前用过的机器里面最高的。建议用于开发，编译，计算等等。安装jupyter notebook和vscode-server，可以随时用浏览器编写代码。缺点是到大陆延迟不太友好，建议用德国CN2反代，或者套个CDN。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>pandas笔记</title>
      <link>https://blog.kanikig.xyz/pandas%E7%AC%94%E8%AE%B0/</link>
      <pubDate>Tue, 17 Aug 2021 18:32:08 +0000</pubDate>
      
      <guid>https://blog.kanikig.xyz/pandas%E7%AC%94%E8%AE%B0/</guid>
      <description>https://www.youtube.com/watch?v=yzIMircGU5I&amp;amp;list=PL5-da3qGB5ICCsgW1MxlZ0Hq8LL5U3u9y&amp;amp;index=1 read a tabular data file cols = [&amp;#39;col1&amp;#39;, &amp;#39;col2&amp;#39;] pd.read_table(path, sep=&amp;#39;|&amp;#39;, headers=None, names=cols) pd.head() # first five rows commands end with parentheses df.describe() #show mean, std, max, min... rename columns df.rename(columns = {&amp;#39;old_col_name&amp;#39;:&amp;#39;new_col_name&amp;#39;}, inplace=True) cols = new_col_list df.columns = cols df.columns = df.columns.str.replace(&amp;#39; &amp;#39;, &amp;#39;_&amp;#39;) remove columns df.drop(&amp;#39;col&amp;#39;, axis=1, inplace=True) df.drop([rows], axis=0, inplace=True) sort df[&amp;#39;col&amp;#39;].sort_values(ascending=False) # series df.sort_values(&amp;#39;col&amp;#39;) # return dataframe df.sort_values([&amp;#39;col1&amp;#39;, &amp;#39;col2&amp;#39;]) filter rows of a pandas DataFrame</description>
      <content:encoded><![CDATA[<blockquote>
<p><a href="https://www.youtube.com/watch?v=yzIMircGU5I&amp;list=PL5-da3qGB5ICCsgW1MxlZ0Hq8LL5U3u9y&amp;index=1">https://www.youtube.com/watch?v=yzIMircGU5I&amp;list=PL5-da3qGB5ICCsgW1MxlZ0Hq8LL5U3u9y&amp;index=1</a></p>
</blockquote>
<h2 id="read-a-tabular-data-file">read a tabular data file</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">cols</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;col1&#39;</span><span class="p">,</span> <span class="s1">&#39;col2&#39;</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="n">pd</span><span class="o">.</span><span class="n">read_table</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s1">&#39;|&#39;</span><span class="p">,</span> <span class="n">headers</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">names</span><span class="o">=</span><span class="n">cols</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">pd</span><span class="o">.</span><span class="n">head</span><span class="p">()</span>	<span class="c1"># first five rows</span>
</span></span></code></pre></div><h2 id="commands-end-with-parentheses">commands end with parentheses</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">df</span><span class="o">.</span><span class="n">describe</span><span class="p">()</span>	<span class="c1">#show mean, std, max, min...</span>
</span></span></code></pre></div><h2 id="rename-columns">rename columns</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;old_col_name&#39;</span><span class="p">:</span><span class="s1">&#39;new_col_name&#39;</span><span class="p">},</span> <span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">cols</span> <span class="o">=</span> <span class="n">new_col_list</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="o">.</span><span class="n">columns</span> <span class="o">=</span> <span class="n">cols</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="o">.</span><span class="n">columns</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">columns</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39; &#39;</span><span class="p">,</span> <span class="s1">&#39;_&#39;</span><span class="p">)</span>
</span></span></code></pre></div><h2 id="remove-columns">remove columns</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">df</span><span class="o">.</span><span class="n">drop</span><span class="p">(</span><span class="s1">&#39;col&#39;</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">df</span><span class="o">.</span><span class="n">drop</span><span class="p">([</span><span class="n">rows</span><span class="p">],</span> <span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span></span></code></pre></div><h2 id="sort">sort</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">df</span><span class="p">[</span><span class="s1">&#39;col&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">sort_values</span><span class="p">(</span><span class="n">ascending</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>	<span class="c1"># series</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">df</span><span class="o">.</span><span class="n">sort_values</span><span class="p">(</span><span class="s1">&#39;col&#39;</span><span class="p">)</span>	<span class="c1"># return dataframe</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="o">.</span><span class="n">sort_values</span><span class="p">([</span><span class="s1">&#39;col1&#39;</span><span class="p">,</span> <span class="s1">&#39;col2&#39;</span><span class="p">])</span>	
</span></span></code></pre></div><h2 id="filter-rows-of-a-pandas-dataframe">filter rows of a pandas DataFrame</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">pd</span><span class="o">.</span><span class="n">Series</span><span class="p">([])</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">df</span><span class="p">[</span><span class="n">df</span><span class="p">[</span><span class="s1">&#39;col&#39;</span><span class="p">]</span> <span class="o">&gt;=</span> <span class="mi">200</span><span class="p">]</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1">#	df[df[&#39;col&#39;] &gt;= 200][&#39;col2&#39;]</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="o">.</span><span class="n">loc</span><span class="p">[</span><span class="n">df</span><span class="p">[</span><span class="s1">&#39;col&#39;</span><span class="p">]</span> <span class="o">&gt;=</span> <span class="mi">200</span><span class="p">,</span> <span class="s1">&#39;col2&#39;</span><span class="p">]</span>	<span class="c1">#	loc select cols or rows with labels</span>
</span></span></code></pre></div><h2 id="multiple-filter-criteria">multiple filter criteria</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">df</span><span class="p">[(</span><span class="n">df</span><span class="p">[</span><span class="s1">&#39;col&#39;</span><span class="p">]</span> <span class="o">&gt;=</span> <span class="mi">200</span><span class="p">)</span> <span class="o">|</span> <span class="p">(</span><span class="n">df</span><span class="p">[</span><span class="s1">&#39;col1&#39;</span><span class="p">]</span> <span class="o">==</span> <span class="s1">&#39;a&#39;</span><span class="p">)]</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">df</span><span class="p">[</span><span class="s1">&#39;col&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">isin</span><span class="p">([</span><span class="s1">&#39;a&#39;</span><span class="p">,</span> <span class="s1">&#39;b&#39;</span><span class="p">,</span> <span class="s1">&#39;c&#39;</span><span class="p">])</span>
</span></span></code></pre></div><h2 id="read-two-columns">read two columns</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">usecols</span><span class="o">=</span><span class="p">[</span><span class="s1">&#39;a&#39;</span><span class="p">,</span> <span class="s1">&#39;b&#39;</span><span class="p">])</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">nrows</span><span class="o">=</span><span class="mi">3</span><span class="p">)</span>
</span></span></code></pre></div><h2 id="iteration">iteration</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">df</span><span class="p">[</span><span class="s1">&#39;col&#39;</span><span class="p">]:</span>
</span></span><span class="line"><span class="cl">	<span class="nb">print</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">for</span> <span class="n">index</span><span class="p">,</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">df</span><span class="o">.</span><span class="n">iterrows</span><span class="p">():</span>
</span></span><span class="line"><span class="cl">  <span class="nb">print</span><span class="p">(</span><span class="n">index</span><span class="p">,</span> <span class="n">row</span><span class="p">[</span><span class="s1">&#39;a&#39;</span><span class="p">],</span> <span class="n">row</span><span class="p">[</span><span class="s1">&#39;b&#39;</span><span class="p">])</span>
</span></span></code></pre></div><h2 id="filter-numerical-columns">filter numerical columns</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="o">.</span><span class="n">select_dtypes</span><span class="p">(</span><span class="n">include</span><span class="o">=</span><span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">number</span><span class="p">])</span><span class="o">.</span><span class="n">dtypes</span>
</span></span></code></pre></div><h2 id="describe-method">describe method</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">df</span><span class="o">.</span><span class="n">describe</span><span class="p">(</span><span class="n">include</span><span class="o">=</span><span class="p">[</span><span class="s1">&#39;object&#39;</span><span class="p">,</span> <span class="s1">&#39;float64&#39;</span><span class="p">])</span>
</span></span></code></pre></div><h2 id="axis-parameter">&ldquo;axis&rdquo; parameter</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">df</span><span class="o">.</span><span class="n">mean</span><span class="p">()</span>	<span class="c1"># mean value for serires</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="o">.</span><span class="n">mean</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>	<span class="c1"># row mean</span>
</span></span></code></pre></div><h2 id="string-methods">string methods</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">df</span><span class="p">[</span><span class="s1">&#39;col&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>	<span class="c1"># uppercase </span>
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="p">[</span><span class="s1">&#39;col&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">contains</span><span class="p">(</span><span class="s1">&#39;str&#39;</span><span class="p">)</span>	<span class="c1">#	return series of t/f</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="p">[</span><span class="n">df</span><span class="p">[</span><span class="s1">&#39;col&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">contains</span><span class="p">(</span><span class="s1">&#39;str&#39;</span><span class="p">)]</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="p">[</span><span class="s1">&#39;col&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;a&#39;</span><span class="p">,</span> <span class="s1">&#39;b&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;c&#39;</span><span class="p">,</span> <span class="s1">&#39;d&#39;</span><span class="p">)</span>	<span class="c1"># support regex</span>
</span></span></code></pre></div><h2 id="change-the-data-type">change the data type</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">df</span><span class="o">.</span><span class="n">dtypes</span>
</span></span><span class="line"><span class="cl"><span class="n">serires</span><span class="o">.</span><span class="n">dtype</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="p">[</span><span class="s1">&#39;col&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="s1">&#39;col&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="s1">&#39;float64&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="p">(</span><span class="s1">&#39;col1&#39;</span><span class="p">:</span><span class="nb">float</span><span class="p">))</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="p">[</span><span class="s1">&#39;col&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;$&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="nb">float</span><span class="p">)</span><span class="o">.</span><span class="n">mean</span><span class="p">()</span>
</span></span></code></pre></div><h2 id="groupby">groupby</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">df</span><span class="o">.</span><span class="n">groupby</span><span class="p">(</span><span class="s1">&#39;col1&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">mean</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="o">.</span><span class="n">groupby</span><span class="p">(</span><span class="s1">&#39;col1&#39;</span><span class="p">)[</span><span class="s1">&#39;col2&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">mean</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="o">.</span><span class="n">groupby</span><span class="p">(</span><span class="s1">&#39;col1&#39;</span><span class="p">)[</span><span class="s1">&#39;col2&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">agg</span><span class="p">([</span><span class="s1">&#39;count&#39;</span><span class="p">,</span> <span class="s1">&#39;min&#39;</span><span class="p">,</span> <span class="s1">&#39;max&#39;</span><span class="p">,</span> <span class="s1">&#39;mean&#39;</span><span class="p">])</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="o">%</span><span class="n">matplotlib</span> <span class="n">inline</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="o">.</span><span class="n">groupby</span><span class="p">(</span><span class="s1">&#39;col1&#39;</span><span class="p">)[</span><span class="s1">&#39;col2&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">mean</span><span class="p">()</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="s1">&#39;bar&#39;</span><span class="p">)</span>
</span></span></code></pre></div><h2 id="pandas-series">pandas Series</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">df</span><span class="p">[</span><span class="s1">&#39;col&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">describe</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="p">[</span><span class="s1">&#39;col&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">value_counts</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="p">[</span><span class="s1">&#39;col&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">value_counts</span><span class="p">(</span><span class="n">normalize</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="p">[</span><span class="s1">&#39;col&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">unique</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="p">[</span><span class="s1">&#39;col&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">nunique</span><span class="p">()</span>	<span class="c1"># number of unique values</span>
</span></span><span class="line"><span class="cl"><span class="n">pd</span><span class="o">.</span><span class="n">crosstab</span><span class="p">(</span><span class="n">df</span><span class="p">[</span><span class="s1">&#39;col1&#39;</span><span class="p">],</span> <span class="n">df</span><span class="p">[</span><span class="s1">&#39;col2&#39;</span><span class="p">])</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="p">[</span><span class="s1">&#39;col1&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="s1">&#39;hist&#39;</span><span class="p">)</span>
</span></span></code></pre></div><h2 id="handle-missing-values">handle missing values</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">df</span><span class="o">.</span><span class="n">tail</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="o">.</span><span class="n">isnull</span><span class="p">()</span><span class="o">.</span><span class="n">head</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="o">.</span><span class="n">isnull</span><span class="p">()</span><span class="o">.</span><span class="n">sum</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="o">.</span><span class="n">dropna</span><span class="p">(</span><span class="n">how</span><span class="o">=</span><span class="s1">&#39;any&#39;</span><span class="p">,</span> <span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>	<span class="c1"># drop a row if it contains null</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="o">.</span><span class="n">dropna</span><span class="p">(</span><span class="n">subset</span><span class="o">=</span><span class="p">[</span><span class="s1">&#39;col1&#39;</span><span class="p">,</span> <span class="s1">&#39;col2&#39;</span><span class="p">],</span> <span class="n">how</span><span class="o">=</span><span class="s1">&#39;any&#39;</span><span class="p">)</span>	<span class="c1"># drop a row if col1 or col2 is null</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="p">[</span><span class="s1">&#39;col&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">value_counts</span><span class="p">(</span><span class="n">dropna</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="p">[</span><span class="s1">&#39;col&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">fillna</span><span class="p">(</span><span class="n">value</span><span class="o">=</span><span class="s1">&#39;A&#39;</span><span class="p">,</span> <span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span></span></code></pre></div><h2 id="pandas-index">pandas index</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">df</span><span class="o">.</span><span class="n">index</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="o">.</span><span class="n">columns</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="o">.</span><span class="n">shape</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="o">.</span><span class="n">loc</span><span class="p">[</span><span class="mi">23</span><span class="p">,</span> <span class="s1">&#39;a&#39;</span><span class="p">]</span>	<span class="c1">#	fetch value</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="o">.</span><span class="n">decribe</span><span class="p">()</span><span class="o">.</span><span class="n">loc</span><span class="p">[</span><span class="s1">&#39;25%&#39;</span><span class="p">,</span> <span class="s1">&#39;col&#39;</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="o">.</span><span class="n">set_index</span><span class="p">(</span><span class="n">Series</span><span class="p">,</span> <span class="n">inplace</span><span class="o">-</span><span class="kc">True</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="p">[</span><span class="s1">&#39;col&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">value_counts</span><span class="p">()[</span><span class="s1">&#39;value1&#39;</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="p">[</span><span class="s1">&#39;col&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">value_counts</span><span class="p">()</span><span class="o">.</span><span class="n">sort_values</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="p">[</span><span class="s1">&#39;col&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">value_counts</span><span class="p">()</span><span class="o">.</span><span class="n">sort_index</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">pd</span><span class="o">.</span><span class="n">Series</span><span class="p">(</span><span class="n">value</span> <span class="n">array</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="p">[</span><span class="n">indices</span><span class="p">])</span>
</span></span><span class="line"><span class="cl"><span class="n">pd</span><span class="o">.</span><span class="n">concat</span><span class="p">([</span><span class="n">df1</span><span class="p">,</span> <span class="n">df2</span><span class="p">],</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
</span></span></code></pre></div><h2 id="select-multiple-rows-and-columns">select multiple rows and columns</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">df</span><span class="o">.</span><span class="n">loc</span><span class="p">[</span><span class="n">index</span><span class="p">,</span> <span class="n">col_name</span><span class="p">]</span>	<span class="c1"># by label</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="o">.</span><span class="n">iloc</span><span class="p">[:,</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">3</span><span class="p">]]</span>	<span class="c1"># by indices</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">index_col</span><span class="o">=</span><span class="s1">&#39;col1&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="o">.</span><span class="n">ix</span><span class="p">[</span><span class="s1">&#39;row_label&#39;</span><span class="p">,</span> <span class="mi">0</span><span class="p">]</span>	<span class="c1"># mix labels and indices (not recommend)</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="o">.</span><span class="n">ix</span><span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="s1">&#39;col_label&#39;</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="o">.</span><span class="n">ix</span><span class="p">[</span><span class="s1">&#39;col1&#39;</span><span class="p">:</span><span class="s1">&#39;col3&#39;</span><span class="p">,</span> <span class="mi">0</span><span class="p">:</span><span class="mi">2</span><span class="p">]</span>
</span></span></code></pre></div><h2 id="make-dataframe-smaller-and-faster">make DataFrame smaller and faster</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">df</span><span class="o">.</span><span class="n">memory_usage</span><span class="p">(</span><span class="n">deep</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="p">[</span><span class="s1">&#39;col&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="s1">&#39;category&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="p">[</span><span class="s1">&#39;col&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="s1">&#39;col&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="s1">&#39;category&#39;</span><span class="p">,</span> <span class="n">categories</span><span class="o">=</span><span class="p">[</span><span class="s1">&#39;good&#39;</span><span class="p">,</span> <span class="s1">&#39;veray good&#39;</span><span class="p">,</span> <span class="s1">&#39;excellent&#39;</span><span class="p">,</span> <span class="n">ordered</span><span class="o">=</span><span class="kc">True</span><span class="p">])</span>
</span></span></code></pre></div><h2 id="pandas-with-scikit-learn">pandas with scikit-learn</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">({</span><span class="s1">&#39;id&#39;</span><span class="p">:</span><span class="n">array1</span><span class="p">,</span> <span class="s1">&#39;col&#39;</span><span class="p">:</span><span class="n">array2</span><span class="p">})</span><span class="o">.</span><span class="n">set_index</span><span class="p">(</span><span class="s1">&#39;id&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">to_csv</span><span class="p">(</span><span class="s1">&#39;1.csv&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="o">.</span><span class="n">to_pickle</span><span class="p">(</span><span class="s1">&#39;1.pkl&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="o">.</span><span class="n">read_pickle</span><span class="p">(</span><span class="s1">&#39;1.pkl&#39;</span><span class="p">)</span>
</span></span></code></pre></div><h2 id="loc-and-iloc">loc and iloc</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">df</span><span class="o">.</span><span class="n">loc</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">4</span><span class="p">,</span> <span class="p">:]</span>	<span class="c1">#	inclusive-label</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="o">.</span><span class="n">iloc</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">4</span><span class="p">,</span> <span class="p">:]</span>	<span class="c1"># exclusive-index</span>
</span></span></code></pre></div><h2 id="large-csv">large csv</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">df</span><span class="o">.</span><span class="n">sample</span><span class="p">(</span><span class="n">n</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span> <span class="n">random_state</span><span class="o">=</span><span class="mi">42</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="o">.</span><span class="n">sample</span><span class="p">(</span><span class="n">frac</span><span class="o">=</span><span class="mf">0.75</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">train</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">sample</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="n">test</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">loc</span><span class="p">[</span><span class="o">~</span><span class="n">df</span><span class="o">.</span><span class="n">index</span><span class="o">.</span><span class="n">isin</span><span class="p">(</span><span class="n">train</span><span class="o">.</span><span class="n">index</span><span class="p">),</span> <span class="p">:]</span>
</span></span></code></pre></div><h2 id="dummy-variables">dummy variables</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">df</span><span class="p">[</span><span class="s1">&#39;sex_male&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="s1">&#39;sex&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">map</span><span class="p">({</span><span class="s1">&#39;female&#39;</span><span class="p">:</span><span class="mi">0</span><span class="p">,</span> <span class="s1">&#39;male&#39;</span><span class="p">:</span><span class="mi">1</span><span class="p">})</span>
</span></span><span class="line"><span class="cl"><span class="n">pd</span><span class="o">.</span><span class="n">get_dummies</span><span class="p">(</span><span class="n">df</span><span class="p">[</span><span class="s1">&#39;sex&#39;</span><span class="p">],</span> <span class="n">prefix</span><span class="o">=</span><span class="s1">&#39;sex&#39;</span><span class="p">)</span>
</span></span></code></pre></div><h2 id="date-and-times">date and times</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">df</span><span class="p">[</span><span class="s1">&#39;time&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">to_datetime</span><span class="p">(</span><span class="n">df</span><span class="p">[</span><span class="s1">&#39;time&#39;</span><span class="p">])</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="p">[</span><span class="s1">&#39;time&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">dt</span><span class="o">.</span><span class="n">weekday_name</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="p">[</span><span class="s1">&#39;time&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">dt</span><span class="o">.</span><span class="n">dayofyear</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="o">.</span><span class="n">loc</span><span class="p">[</span><span class="n">df</span><span class="p">[</span><span class="s1">&#39;time&#39;</span><span class="p">]</span> <span class="o">&gt;</span> <span class="n">pd</span><span class="o">.</span><span class="n">to_datetime</span><span class="p">(</span><span class="s1">&#39;1/1/1999&#39;</span><span class="p">),</span> <span class="p">:]</span>
</span></span><span class="line"><span class="cl"><span class="p">(</span><span class="n">df</span><span class="p">[</span><span class="s1">&#39;time&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">max</span><span class="p">()</span> <span class="o">-</span> <span class="n">df</span><span class="p">[</span><span class="s1">&#39;time&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">min</span><span class="p">())</span><span class="o">.</span><span class="n">days</span>
</span></span></code></pre></div><h2 id="find-and-remove-duplicate-rows">find and remove duplicate rows</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">df</span><span class="p">[</span><span class="s1">&#39;col&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">duplicated</span><span class="p">()</span><span class="o">.</span><span class="n">sum</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="o">.</span><span class="n">loc</span><span class="p">[</span><span class="n">df</span><span class="o">.</span><span class="n">duplicated</span><span class="p">(</span><span class="n">keep</span><span class="o">=</span><span class="s1">&#39;first&#39;</span><span class="p">),</span> <span class="p">:]</span>	<span class="c1">#	&#39;last&#39; False</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="o">.</span><span class="n">duplicated</span><span class="p">(</span><span class="n">subset</span><span class="o">=</span><span class="p">[</span><span class="s1">&#39;col1&#39;</span><span class="p">,</span> <span class="s1">&#39;col2&#39;</span><span class="p">])</span>
</span></span></code></pre></div><h2 id="avoid-a-settingwithcopywarning">avoid a SettingWithCopyWarning</h2>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2021/08/19/image-20210819221914496.png" alt="image-20210819221914496"  /></p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2021/08/19/image-20210819222207602.png" alt="image-20210819222207602"  /></p>
<p>Not sure if it is a copy or a view.</p>
<h2 id="change-display-options">change display options</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">pd</span><span class="o">.</span><span class="n">set_option</span><span class="p">(</span><span class="s1">&#39;display.max_rows&#39;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">pd</span><span class="o">.</span><span class="n">reset_option</span><span class="p">(</span><span class="s1">&#39;display.max_rows&#39;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">pd</span><span class="o">.</span><span class="n">set_option</span><span class="p">(</span><span class="s1">&#39;display.max_colwidth, None)</span>
</span></span><span class="line"><span class="cl"><span class="n">pd</span><span class="o">.</span><span class="n">set_option</span><span class="p">(</span><span class="s1">&#39;display.precision, 2)</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="p">[</span><span class="s1">&#39;new_col&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="s1">&#39;col&#39;</span><span class="p">]</span> <span class="o">*</span> <span class="mi">1000</span>
</span></span><span class="line"><span class="cl"><span class="n">pd</span><span class="o">.</span><span class="n">set_option</span><span class="p">(</span><span class="s1">&#39;display.float_format&#39;</span><span class="p">,</span> <span class="s1">&#39;</span><span class="si">{:,}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">)</span>
</span></span></code></pre></div><h2 id="create-a-pandas-dataframe-from-another-object">create a pandas DataFrame from another object</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span><span class="nb">dict</span><span class="p">,</span> <span class="n">columns</span><span class="o">=</span><span class="p">[</span><span class="s1">&#39;a&#39;</span><span class="p">,</span> <span class="s1">&#39;b&#39;</span><span class="p">])</span>
</span></span><span class="line"><span class="cl"><span class="n">s</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">Series</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">],</span> <span class="n">index</span><span class="o">=</span><span class="p">[</span><span class="s1">&#39;c&#39;</span><span class="p">,</span> <span class="s1">&#39;d&#39;</span><span class="p">],</span> <span class="n">name</span><span class="o">=</span><span class="n">shape</span><span class="p">)</span>
</span></span></code></pre></div><h2 id="apply-a-function-to-a-pandas-series-or-dataframe">apply a function to a pandas Series or DataFrame</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">df</span><span class="p">[</span><span class="s1">&#39;col1&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="s1">&#39;col2&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">apply</span><span class="p">(</span><span class="n">function</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="p">[</span><span class="s1">&#39;col1&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="s1">&#39;col2&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">apply</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">ceil</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="p">[</span><span class="s1">&#39;col&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">apply</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="p">[</span><span class="s1">&#39;col1&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="s1">&#39;col2&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">apply</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">argmax</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
</span></span></code></pre></div><h2 id="multiindex">MultiIndex</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">ser</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">groupby</span><span class="p">([</span><span class="s1">&#39;col1&#39;</span><span class="p">,</span> <span class="s1">&#39;col2&#39;</span><span class="p">])</span><span class="o">.</span><span class="n">col3</span><span class="o">.</span><span class="n">mean</span><span class="p">()</span>	<span class="c1"># series with multiindex</span>
</span></span><span class="line"><span class="cl"><span class="n">ser</span><span class="o">.</span><span class="n">unstack</span><span class="p">()</span>	<span class="c1"># dataframe</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="o">.</span><span class="n">pivot_table</span><span class="p">(</span><span class="n">values</span><span class="o">=</span><span class="s1">&#39;col1&#39;</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="s1">&#39;col2&#39;</span><span class="p">,</span> <span class="n">columns</span><span class="o">=</span><span class="s1">&#39;col3&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="o">.</span><span class="n">set_index</span><span class="p">([</span><span class="s1">&#39;col1&#39;</span><span class="p">,</span> <span class="s1">&#39;col2&#39;</span><span class="p">],</span> <span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="o">.</span><span class="n">sort_index</span><span class="p">(</span><span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span></span></code></pre></div><h2 id="merge-dataframes">merge DataFrames</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">pd</span><span class="o">.</span><span class="n">concat</span><span class="p">([</span><span class="n">df1</span><span class="p">,</span> <span class="n">df2</span><span class="p">])</span>
</span></span><span class="line"><span class="cl"><span class="n">pd</span><span class="o">.</span><span class="n">merge</span><span class="p">([</span><span class="n">df1</span><span class="p">,</span> <span class="n">df2</span><span class="p">])</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">pd</span><span class="o">.</span><span class="n">merge</span><span class="p">(</span><span class="n">df1</span><span class="p">,</span> <span class="n">df2</span><span class="p">,</span> <span class="n">left_on</span><span class="o">=</span><span class="s1">&#39;col1&#39;</span><span class="p">,</span> <span class="n">right_on</span><span class="o">=</span><span class="s1">&#39;col2&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">pd</span><span class="o">.</span><span class="n">merge</span><span class="p">(</span><span class="n">df1</span><span class="p">,</span> <span class="n">df2</span><span class="p">,</span> <span class="n">how</span><span class="o">=</span><span class="s1">&#39;inner&#39;</span><span class="p">)</span>	<span class="c1">#	outer left right</span>
</span></span></code></pre></div>]]></content:encoded>
    </item>
    
    <item>
      <title>AWS Wavelength 全网最简单开机教程-只需3步</title>
      <link>https://blog.kanikig.xyz/AWS-Wavelength-%E5%85%A8%E7%BD%91%E6%9C%80%E7%AE%80%E5%8D%95%E5%BC%80%E6%9C%BA%E6%95%99%E7%A8%8B-%E5%8F%AA%E9%9C%803%E6%AD%A5/</link>
      <pubDate>Sun, 08 Aug 2021 16:46:09 +0000</pubDate>
      
      <guid>https://blog.kanikig.xyz/AWS-Wavelength-%E5%85%A8%E7%BD%91%E6%9C%80%E7%AE%80%E5%8D%95%E5%BC%80%E6%9C%BA%E6%95%99%E7%A8%8B-%E5%8F%AA%E9%9C%803%E6%AD%A5/</guid>
      <description>只需三步就可以完成aws wavelength开机。目前网上的教程，甚至官方教程都描述的过于繁琐了。对于只是有流媒体观看需求的个人用户，这篇文</description>
      <content:encoded><![CDATA[<p>只需三步就可以完成aws wavelength开机。目前网上的教程，甚至官方教程都描述的过于繁琐了。对于只是有流媒体观看需求的个人用户，这篇文章能帮助您省去许多不必要的步骤。</p>
<h2 id="aws-wavelength-简介">AWS Wavelength 简介</h2>
<blockquote>
<p>官方介绍：https://aws.amazon.com/cn/wavelength/</p>
<p>目前可用区：https://aws.amazon.com/cn/wavelength/locations/</p>
</blockquote>
<p>简单来说就是让服务器流量走运营商网关。对于我们用作代理的情景，运营商ip非常纯净，可以享受到原生本土的互联网访问。</p>
<h2 id="开机三步走">开机三步走</h2>
<p>本文以日本区KDDI开机为例。网上的教程，包括官方指南都有新建VPC这步。其实直接用默认的VPC就行，能省去后面许多步骤。</p>
<h3 id="1-配置网关">1. 配置网关</h3>
<p>搜索框输入VPC，进入VPC控制面板，进入运营商网关，打开Wavelength可用区。</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2021/08/08/iShot2021-08-08-17.05.01.png" alt="iShot2021-08-08 17.05.01"  /></p>
<p>开启kddi可用区后，再进入运营商网关配置，点击创建运营商网关。因为没有新建VPC，这里选默认那个即可。勾选<strong>将子网流量路由到运营商网关</strong>，创建Wavelength子网。IPV4 CIDR块把VPC的块复制过来，填个/24，把C段的数字改大一些，不报错了就行。
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2021/08/08/iShot2021-08-08-17.17.00.png" alt="iShot2021-08-08 17.17.00"  /></p>
<h3 id="2-创建ec2实例">2. 创建EC2实例</h3>
<p>回到EC2控制面板，创建Wavelength的EC2实例。注意实例只能选择t3.medium, t3.xlarge, r5.2xlarge, g4dn.2xlarge这几种。这里我们选 <strong>t3.medium</strong>。实例配置需要选择刚刚创建的kddi子网，配置如下。其他的配置和平时相同，记得安全组开放所有流量。</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2021/08/08/iShot2021-08-08-16.07.40.png" alt="iShot2021-08-08 16.07.40"  /></p>
<p>因为Wavelength实例是不能分配外网ip的，所以我们需要额外创建一个普通ec2来内网转发它，保持默认配置即可。这里我们选用免费的 <strong>t2.micro</strong>。</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2021/08/08/iShot2021-08-08-16.12.33.png" alt="iShot2021-08-08 16.12.33"  /></p>
<p>两个实例创建成功。记录Wavelength实例的内网ip和普通EC2的外网ip。</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2021/08/08/iShot2021-08-08-16.18.58.png" alt="iShot2021-08-08 16.18.58"  /></p>
<h3 id="3-配置实例转发">3. 配置实例转发</h3>
<p>先连接普通EC2，使用iptables或者brook配置转发，目标ip是Wavelength实例的<strong>内网ip</strong>，目标端口是它的ssh端口。转发完成后，只需将ssh端口改为转发的监听端口，就能连上Wavelength实例了。</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2021/08/08/iShot2021-08-08-16.21.59.png" alt="iShot2021-08-08 16.21.59"  /></p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2021/08/08/iShot2021-08-08-16.22.16.png" alt="iShot2021-08-08 16.22.16"  /></p>
<p>流媒体测试，没毛病。</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2021/08/08/iShot2021-08-08-16.24.00.png" alt="iShot2021-08-08 16.24.00"  /></p>
<h2 id="总结">总结</h2>
<p>面板开机的步骤如上所述。当然还有更简便的开机方法，许多大佬开发了AWS的开机bot，使用api开机，更加快捷，只不过都需要购买授权，适合需要批量开机的商家。对于没有批量开机需求的个人用户，可以参考本文的开机方法。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Oracle甲骨文首尔ARM架构服务器测评</title>
      <link>https://blog.kanikig.xyz/Oracle%E7%94%B2%E9%AA%A8%E6%96%87%E9%A6%96%E5%B0%94ARM%E6%9E%B6%E6%9E%84%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%B5%8B%E8%AF%84/</link>
      <pubDate>Thu, 05 Aug 2021 20:16:07 +0000</pubDate>
      
      <guid>https://blog.kanikig.xyz/Oracle%E7%94%B2%E9%AA%A8%E6%96%87%E9%A6%96%E5%B0%94ARM%E6%9E%B6%E6%9E%84%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%B5%8B%E8%AF%84/</guid>
      <description>商家简介 大名鼎鼎的甲骨文，就不多说了。只要通过信用卡验证，就可以拥有终身免费的云服务器。今年甲骨文推出了ARM架构的服务器，羊毛大军异常火爆</description>
      <content:encoded><![CDATA[<h2 id="商家简介">商家简介</h2>
<p>大名鼎鼎的甲骨文，就不多说了。只要通过信用卡验证，就可以拥有<strong>终身免费</strong>的云服务器。今年甲骨文推出了ARM架构的服务器，羊毛大军异常火爆，开放当天资源就直接被开完，后续只能通过脚本刷出来。直到数月后的今天，甲骨文大量补充了首尔区的资源，长久的等待终于如愿以偿。</p>
<p>官网：https://oracle.com</p>
<h2 id="机器配置与开机技巧">机器配置与开机技巧</h2>
<p><strong>如有乐享</strong>大佬的文章讲的很清晰了，谷歌搜索就有。</p>
<blockquote>
<p>参考：</p>
<p><a href="https://51.ruyo.net/17163.html">https://51.ruyo.net/17163.html</a></p>
<p><a href="https://51.ruyo.net/14288.html">https://51.ruyo.net/14288.html</a></p>
</blockquote>
<p>这里强调几点容易踩的坑。</p>
<ol>
<li>选系统：推荐Ubuntu20。在选系统那里点<em>Canonical</em> 进去能看到Ubuntu20，但是注意不要选默认的 <strong>Minimal</strong> 版本，手动选完整版。</li>
<li>大佬们推荐开两台 <strong>2h12g</strong> 的，貌似这样能把硬盘用完。</li>
<li>如果遇到一开机就被终止，则在创建时网络那项选不分配公网ip。这样可以成功创建，然后再到 <strong>附加的 VNIC</strong> 里配置公网ip，可以选择预留ip和临时ip。</li>
</ol>
<h2 id="测评">测评</h2>
<p>测试使用的是2h12g配置。</p>
<h3 id="lemonbench">LemonBench</h3>
<h4 id="系统信息">系统信息</h4>
<p>cpu看不到。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"> -&gt; System Information
</span></span><span class="line"><span class="cl"> 
</span></span><span class="line"><span class="cl"> OS Release:		Ubuntu 20.04.2 LTS <span class="o">(</span>Focal Fossa<span class="o">)</span>  <span class="o">(</span>aarch64<span class="o">)</span>
</span></span><span class="line"><span class="cl"> CPU Model:		  0.00 GHz
</span></span><span class="line"><span class="cl"> CPU Cache Size:	
</span></span><span class="line"><span class="cl"> CPU Number:		<span class="m">0</span> vCPU
</span></span><span class="line"><span class="cl"> Virt Type:		KVM
</span></span><span class="line"><span class="cl"> Memory Usage:		288.33 MB / 11.55 GB
</span></span><span class="line"><span class="cl"> Swap Usage:		<span class="o">[</span> No Swapfile / Swap partition <span class="o">]</span>
</span></span><span class="line"><span class="cl"> Disk Usage:		1.55 GB / 47.16 GB
</span></span><span class="line"><span class="cl"> Boot Device:		/dev/sda1
</span></span><span class="line"><span class="cl"> Load <span class="o">(</span>1/5/15min<span class="o">)</span>:	0.37 0.12 0.03 
</span></span><span class="line"><span class="cl"> CPU Usage:		0.0% used, 0.0% iowait, 0.0% steal
</span></span><span class="line"><span class="cl"> Kernel Version:	5.8.0-1037-oracle
</span></span><span class="line"><span class="cl"> Network CC Method:	bbr + fq_pie
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> -&gt; Network Information
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> IPV4 - IP Address:	<span class="o">[</span>KR<span class="o">]</span> 152.70.251.*
</span></span><span class="line"><span class="cl"> IPV4 - ASN Info:	<span class="m">31898</span> <span class="o">(</span>ORACLE-BMC-31898 - Oracle Corporation, US<span class="o">)</span>
</span></span><span class="line"><span class="cl"> IPV4 - Region:		Republic of Korea Seoul 
</span></span></code></pre></div><h4 id="性能">性能</h4>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">-&gt; CPU Performance Test <span class="o">(</span>Fast Mode, 1-Pass @ 5sec<span class="o">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="m">1</span> Thread Test:			<span class="m">3499</span> Scores
</span></span><span class="line"><span class="cl"> <span class="m">2</span> Threads Test:		<span class="m">4763</span> Scores
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> -&gt; Memory Performance Test <span class="o">(</span>Fast Mode, 1-Pass @ 5sec<span class="o">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="m">1</span> Thread - Read Test :		29444.79 MB/s
</span></span><span class="line"><span class="cl"> <span class="m">1</span> Thread - Write Test:		14507.62 MB/s
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> -&gt; Disk Speed Test <span class="o">(</span>4K Block/1M Block, Direct Mode<span class="o">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> Test Name		Write Speed				Read Speed
</span></span><span class="line"><span class="cl"> 100MB-4K Block		8.6 MB/s <span class="o">(</span><span class="m">2097</span> IOPS, 12.20 s<span class="o">)</span>		11.1 MB/s <span class="o">(</span><span class="m">2717</span> IOPS, 9.42 s<span class="o">)</span>
</span></span><span class="line"><span class="cl"> 1GB-1M Block		57.8 MB/s <span class="o">(</span><span class="m">55</span> IOPS, 18.15 s<span class="o">)</span>		52.5 MB/s <span class="o">(</span><span class="m">50</span> IOPS, 19.96 s<span class="o">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> -&gt; Speedtest.net Network Speed Test
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> Node Name			Upload Speed	Download Speed	Ping Latency	Server Name
</span></span><span class="line"><span class="cl"> Speedtest Default		68.85 MB/s	44.66 MB/s	4.57 ms		kdatacenter.com <span class="o">(</span>South Korea Seoul<span class="o">)</span>
</span></span><span class="line"><span class="cl"> China, Beijing CU  		Fail: Timeout Exceeded after <span class="m">60</span> seconds
</span></span><span class="line"><span class="cl"> China, Shanghai CT 		2.15 MB/s	58.06 MB/s	98.59 ms	China Telecom <span class="o">(</span>China Shanghai<span class="o">)</span>
</span></span><span class="line"><span class="cl"> China, Hangzhou CM 		15.21 MB/s	71.26 MB/s	122.87 ms	China Mobile Group Zhejiang Co.,Ltd <span class="o">(</span>China Hangzhou<span class="o">)</span>
</span></span></code></pre></div><h3 id="yab性能测试">YAB性能测试</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">Basic System Information:
</span></span><span class="line"><span class="cl">---------------------------------
</span></span><span class="line"><span class="cl">Processor  : Neoverse-N1
</span></span><span class="line"><span class="cl">CPU cores  : <span class="m">2</span> @ ??? MHz
</span></span><span class="line"><span class="cl">AES-NI     : ✔ Enabled
</span></span><span class="line"><span class="cl">VM-x/AMD-V : ❌ Disabled
</span></span><span class="line"><span class="cl">RAM        : 11.5 GiB
</span></span><span class="line"><span class="cl">Swap       : 0.0 KiB
</span></span><span class="line"><span class="cl">Disk       : 45.1 GiB
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Running fio random mixed R+W disk <span class="nb">test</span> with 64k block size...
</span></span><span class="line"><span class="cl">fio Disk Speed Tests <span class="o">(</span>Mixed R/W 50/50<span class="o">)</span>:
</span></span><span class="line"><span class="cl">---------------------------------
</span></span><span class="line"><span class="cl">Block Size <span class="p">|</span> 4k            <span class="o">(</span>IOPS<span class="o">)</span> <span class="p">|</span> 64k           <span class="o">(</span>IOPS<span class="o">)</span>
</span></span><span class="line"><span class="cl">  ------   <span class="p">|</span> ---            ----  <span class="p">|</span> ----           ---- 
</span></span><span class="line"><span class="cl">Read       <span class="p">|</span> 6.40 MB/s     <span class="o">(</span>1.6k<span class="o">)</span> <span class="p">|</span> 26.99 MB/s     <span class="o">(</span>421<span class="o">)</span>
</span></span><span class="line"><span class="cl">Write      <span class="p">|</span> 6.41 MB/s     <span class="o">(</span>1.6k<span class="o">)</span> <span class="p">|</span> 27.79 MB/s     <span class="o">(</span>434<span class="o">)</span>
</span></span><span class="line"><span class="cl">Total      <span class="p">|</span> 12.81 MB/s    <span class="o">(</span>3.2k<span class="o">)</span> <span class="p">|</span> 54.78 MB/s     <span class="o">(</span>855<span class="o">)</span>
</span></span><span class="line"><span class="cl">           <span class="p">|</span>                      <span class="p">|</span>                     
</span></span><span class="line"><span class="cl">Block Size <span class="p">|</span> 512k          <span class="o">(</span>IOPS<span class="o">)</span> <span class="p">|</span> 1m            <span class="o">(</span>IOPS<span class="o">)</span>
</span></span><span class="line"><span class="cl">  ------   <span class="p">|</span> ---            ----  <span class="p">|</span> ----           ---- 
</span></span><span class="line"><span class="cl">Read       <span class="p">|</span> 24.20 MB/s      <span class="o">(</span>47<span class="o">)</span> <span class="p">|</span> 23.91 MB/s      <span class="o">(</span>23<span class="o">)</span>
</span></span><span class="line"><span class="cl">Write      <span class="p">|</span> 26.27 MB/s      <span class="o">(</span>51<span class="o">)</span> <span class="p">|</span> 26.67 MB/s      <span class="o">(</span>26<span class="o">)</span>
</span></span><span class="line"><span class="cl">Total      <span class="p">|</span> 50.48 MB/s      <span class="o">(</span>98<span class="o">)</span> <span class="p">|</span> 50.59 MB/s      <span class="o">(</span>49<span class="o">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">iperf3 Network Speed Tests <span class="o">(</span>IPv4<span class="o">)</span>:
</span></span><span class="line"><span class="cl">---------------------------------
</span></span><span class="line"><span class="cl">Provider        <span class="p">|</span> Location <span class="o">(</span>Link<span class="o">)</span>           <span class="p">|</span> Send Speed      <span class="p">|</span> Recv Speed     
</span></span><span class="line"><span class="cl">                <span class="p">|</span>                           <span class="p">|</span>                 <span class="p">|</span>                
</span></span><span class="line"><span class="cl">Clouvider       <span class="p">|</span> London, UK <span class="o">(</span>10G<span class="o">)</span>          <span class="p">|</span> <span class="m">604</span> Mbits/sec   <span class="p">|</span> <span class="m">447</span> Mbits/sec  
</span></span><span class="line"><span class="cl">Online.net      <span class="p">|</span> Paris, FR <span class="o">(</span>10G<span class="o">)</span>           <span class="p">|</span> busy            <span class="p">|</span> 33.2 Mbits/sec 
</span></span><span class="line"><span class="cl">WorldStream     <span class="p">|</span> The Netherlands <span class="o">(</span>10G<span class="o">)</span>     <span class="p">|</span> <span class="m">694</span> Mbits/sec   <span class="p">|</span> <span class="m">449</span> Mbits/sec  
</span></span><span class="line"><span class="cl">Biznet          <span class="p">|</span> Jakarta, Indonesia <span class="o">(</span>1G<span class="o">)</span>   <span class="p">|</span> <span class="m">489</span> Mbits/sec   <span class="p">|</span> 24.9 Mbits/sec 
</span></span><span class="line"><span class="cl">Clouvider       <span class="p">|</span> NYC, NY, US <span class="o">(</span>10G<span class="o">)</span>         <span class="p">|</span> <span class="m">683</span> Mbits/sec   <span class="p">|</span> <span class="m">461</span> Mbits/sec  
</span></span><span class="line"><span class="cl">Velocity Online <span class="p">|</span> Tallahassee, FL, US <span class="o">(</span>10G<span class="o">)</span> <span class="p">|</span> <span class="m">751</span> Mbits/sec   <span class="p">|</span> <span class="m">417</span> Mbits/sec  
</span></span><span class="line"><span class="cl">Clouvider       <span class="p">|</span> Los Angeles, CA, US <span class="o">(</span>10G<span class="o">)</span> <span class="p">|</span> <span class="m">852</span> Mbits/sec   <span class="p">|</span> <span class="m">558</span> Mbits/sec  
</span></span><span class="line"><span class="cl">Iveloz Telecom  <span class="p">|</span> Sao Paulo, BR <span class="o">(</span>2G<span class="o">)</span>        <span class="p">|</span> busy            <span class="p">|</span> <span class="m">150</span> Mbits/sec  
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Running GB5 benchmark test... *cue elevator music*
</span></span><span class="line"><span class="cl">Geekbench <span class="m">5</span> Benchmark Test:
</span></span><span class="line"><span class="cl">---------------------------------
</span></span><span class="line"><span class="cl">Test            <span class="p">|</span> Value                         
</span></span><span class="line"><span class="cl">                <span class="p">|</span>                               
</span></span><span class="line"><span class="cl">Single Core     <span class="p">|</span> <span class="m">853</span>                           
</span></span><span class="line"><span class="cl">Multi Core      <span class="p">|</span> <span class="m">1686</span>                          
</span></span><span class="line"><span class="cl">Full Test       <span class="p">|</span> https://browser.geekbench.com/v5/cpu/9173922
</span></span></code></pre></div><h3 id="speedtest">Speedtest</h3>
<p>本地应该是G口：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">Retrieving speedtest.net server list...
</span></span><span class="line"><span class="cl">Selecting best server based on ping...
</span></span><span class="line"><span class="cl">Hosted by kdatacenter.com <span class="o">(</span>Seoul<span class="o">)</span> <span class="o">[</span>1.72 km<span class="o">]</span>: 54.474 ms
</span></span><span class="line"><span class="cl">Testing download speed................................................................................
</span></span><span class="line"><span class="cl">Download: 450.81 Mbit/s
</span></span><span class="line"><span class="cl">Testing upload speed................................................................................................
</span></span><span class="line"><span class="cl">Upload: 743.60 Mbit/s
</span></span></code></pre></div><h3 id="superspeed">superspeed</h3>
<p>可能是今天开的人比较多，比网上之前测评的下降非常大。不过白嫖的嘛，能用就行。</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2021/08/05/iShot2021-08-05-20.36.30.png" alt="iShot2021-08-05 20.36.30"  /></p>
<h3 id="traceroute">TraceRoute</h3>
<p>电信联通走CN2，移动直连。线路其实很好，适合建站，就是速度现在有点被蓐坏了。。</p>
<pre tabindex="0"><code>Traceroute to China, Beijing CU (TCP Mode, Max 30 Hop)
============================================================
traceroute to 123.125.99.1 (123.125.99.1), 30 hops max, 32 byte packets
 1  140.91.214.1  0.22 ms  AS31898  Republic of Korea, Seoul, oracle.com
 2  121.78.30.14  1.04 ms  AS9286  Republic of Korea, Seoul, kinx.net
 3  121.78.30.13  0.90 ms  AS9286  Republic of Korea, Seoul, kinx.net
 4  121.78.30.73  1.87 ms  AS9286  Republic of Korea, Seoul, kinx.net
 5  218.185.245.61  5.69 ms  AS4809  Republic of Korea, Seoul, ChinaTelecom
 6  59.43.187.209  23.37 ms  *  China, Shanghai, ChinaTelecom
 7  59.43.186.245  26.05 ms  *  China, Shanghai, ChinaTelecom
 8  59.43.130.197  30.28 ms  *  China, Shanghai, ChinaTelecom
 9  59.43.80.106  34.96 ms  *  China, Shanghai, ChinaTelecom
10  *
11  202.97.85.90  56.94 ms  AS4134  China, Beijing, ChinaTelecom
12  219.158.44.109  69.42 ms  AS4837  China, Beijing, ChinaUnicom
13  *
14  *
15  125.33.187.218  64.18 ms  AS4808  China, Beijing, ChinaUnicom
16  124.65.194.138  56.76 ms  AS4808  China, Beijing, ChinaUnicom
17  61.135.113.154  51.40 ms  AS4808  China, Beijing, ChinaUnicom
18  *
19  123.125.99.1  56.77 ms  AS4808  China, Beijing, ChinaUnicom


Traceroute to China, Beijing CT (TCP Mode, Max 30 Hop)
============================================================
traceroute to 180.149.128.9 (180.149.128.9), 30 hops max, 32 byte packets
 1  140.91.214.29  0.54 ms  AS31898  Republic of Korea, Seoul, oracle.com
 2  121.78.30.14  1.13 ms  AS9286  Republic of Korea, Seoul, kinx.net
 3  121.78.30.13  0.95 ms  AS9286  Republic of Korea, Seoul, kinx.net
 4  203.195.115.17  100.22 ms  AS4809  Republic of Korea, Seoul, ChinaTelecom
 5  *
 6  59.43.182.225  166.40 ms  *  China, Beijing, ChinaTelecom
 7  *
 8  59.43.132.17  159.91 ms  *  China, Beijing, ChinaTelecom
 9  *
10  36.110.244.46  165.35 ms  AS23724  China, Beijing, ChinaTelecom
11  36.110.246.198  153.94 ms  AS23724  China, Beijing, ChinaTelecom
12  180.149.128.9  163.54 ms  AS23724  China, Beijing, ChinaTelecom


Traceroute to China, Beijing CM (TCP Mode, Max 30 Hop)
============================================================
traceroute to 211.136.25.153 (211.136.25.153), 30 hops max, 32 byte packets
 1  140.91.214.26  0.65 ms  AS31898  Republic of Korea, Seoul, oracle.com
 2  121.78.30.14  0.73 ms  AS9286  Republic of Korea, Seoul, kinx.net
 3  121.78.30.13  21.29 ms  AS9286  Republic of Korea, Seoul, kinx.net
 4  223.119.19.153  51.04 ms  AS58453  Republic of Korea, Seoul, ChinaMobile
 5  223.120.3.117  64.67 ms  AS58453  Republic of Korea, Seoul, ChinaMobile
 6  *
 7  *
 8  *
 9  *
10  *
11  111.24.2.249  99.80 ms  AS9808  China, Beijing, ChinaMobile
12  *
13  211.136.67.113  109.53 ms  AS56048  China, Beijing, ChinaMobile
14  *
15  211.136.95.226  89.45 ms  AS56048  China, Beijing, ChinaMobile
16  211.136.95.226  109.77 ms  AS56048  China, Beijing, ChinaMobile
17  *
18  *
19  211.136.25.153  90.44 ms  AS56048  China, Beijing, ChinaMobile
</code></pre><p>Lemonbench：<a href="https://paste.ubuntu.com/p/tYG36Ckx4t/">Ubuntu Pastebin</a></p>
<h3 id="流媒体解锁">流媒体解锁</h3>
<p>现在基本啥也不解，原来是解Netflix的。刚刚经过8.4惨案，全球服务器解锁奈飞的寥寥无几了。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="o">=============</span><span class="nv">跨国平台解锁</span><span class="o">==============</span>
</span></span><span class="line"><span class="cl"> Dazn:                                  No
</span></span><span class="line"><span class="cl"> HotStar:                               No
</span></span><span class="line"><span class="cl"> Netflix:                               <span class="o">[</span>N<span class="o">]</span> Mark Only
</span></span><span class="line"><span class="cl"> DisneyPlus:                            No
</span></span><span class="line"><span class="cl"> YouTube Premium:                       No  <span class="o">(</span>Region: CN<span class="o">)</span> 
</span></span><span class="line"><span class="cl"> Amazon Prime Video:                    Yes <span class="o">(</span>Region: KR<span class="o">)</span>
</span></span><span class="line"><span class="cl"> TVBAnywhere+:                          Yes
</span></span><span class="line"><span class="cl"> Tiktok Region:                         KR
</span></span><span class="line"><span class="cl"> iQyi Oversea Region:                   KR
</span></span><span class="line"><span class="cl"> Viu.com:                               No
</span></span><span class="line"><span class="cl"> YouTube CDN:                           Associated with LGUPLUSWIRELINE
</span></span><span class="line"><span class="cl"> Steam Currency:                        <span class="nv">KRW</span>
</span></span><span class="line"><span class="cl"><span class="o">=======================================</span>
</span></span></code></pre></div><h2 id="玩法">玩法</h2>
<p>ARM架构很多东西跑不了，目前到大陆速度也不佳，建议用来建站或者折腾。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>AthaHost 新加坡&amp;印尼VPS全网首发测评</title>
      <link>https://blog.kanikig.xyz/AthaHost%E6%96%B0%E5%8A%A0%E5%9D%A1%E5%8D%B0%E5%B0%BCVPS%E5%85%A8%E7%BD%91%E9%A6%96%E5%8F%91%E6%B5%8B%E8%AF%84/</link>
      <pubDate>Mon, 12 Apr 2021 00:09:14 +0000</pubDate>
      
      <guid>https://blog.kanikig.xyz/AthaHost%E6%96%B0%E5%8A%A0%E5%9D%A1%E5%8D%B0%E5%B0%BCVPS%E5%85%A8%E7%BD%91%E9%A6%96%E5%8F%91%E6%B5%8B%E8%AF%84/</guid>
      <description>商家简介 Atha Host是印度尼西亚主机商家，相关资料甚少。AS139989 Atha Media Prima，也不知道和马来那个Media Prima有没有关系。 官网</description>
      <content:encoded><![CDATA[<h2 id="商家简介">商家简介</h2>
<p>Atha Host是印度尼西亚主机商家，相关资料甚少。AS139989 Atha Media Prima，也不知道和马来那个Media Prima有没有关系。</p>
<p>官网：https://athamedia.co.id/</p>
<h2 id="套餐">套餐</h2>
<p>这次测评套餐为 Cloud VPS SSD 10Gbps Indonesia Singapore，包含新加坡和印尼两款Vmware主机。</p>
<p><em><strong>Cloud VMWare VPS Singapore</strong></em></p>
<p>Sesuaikan Kebutuhanmu
Spesifikasi singkat
VMWare HyperVisor
BGP Session Available
Basic Package
2 Core E5 Cpu
2 GB ram
20 GB Storage
1 TB bandwidth on 10G Port</p>
<p>价格：$10.50/月付</p>
<p><a href="https://athamedia.co.id/portal/store/cloud-vps-ssd"><strong>点击购买</strong></a></p>
<p><em><strong>Cloud VMWare VPS Indonesia</strong></em></p>
<p>Sesuaikan Kebutuhanmu
Spesifikasi singkat
VMWare HyperVisor
BGP Session Available
Basic Package
2 Core
2 GB Ram
20GB SSD
10G Port unmetered bandwidth</p>
<p>价格：$10.50/月付</p>
<p><a href="https://athamedia.co.id/portal/store/cloud-vps-ssd"><strong>点击购买</strong></a></p>
<h2 id="测评">测评</h2>
<p>两款套餐都进行了测试。</p>
<h3 id="lemonbench">LemonBench</h3>
<p><a href="https://paste.ubuntu.com/p/qwymXTkPzK/">新加坡VPS完整测试链接</a></p>
<h4 id="系统信息">系统信息</h4>
<p>新加坡：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"> -&gt; System Information
</span></span><span class="line"><span class="cl"> 
</span></span><span class="line"><span class="cl"> OS Release:		Debian GNU/Linux <span class="s2">&#34;Buster&#34;</span> 10.7 <span class="o">(</span>x86_64<span class="o">)</span>
</span></span><span class="line"><span class="cl"> CPU Model:		Intel<span class="o">(</span>R<span class="o">)</span> Xeon<span class="o">(</span>R<span class="o">)</span> CPU E5-2680 v4 @ 2.40GHz  2.40 GHz
</span></span><span class="line"><span class="cl"> CPU Cache Size:	<span class="m">35840</span> KB
</span></span><span class="line"><span class="cl"> CPU Number:		<span class="m">1</span> vCPU
</span></span><span class="line"><span class="cl"> Virt Type:		VMware
</span></span><span class="line"><span class="cl"> Memory Usage:		201.37 MB / 955.20 MB
</span></span><span class="line"><span class="cl"> Swap Usage:		<span class="m">0</span> KB / 975.00 MB
</span></span><span class="line"><span class="cl"> Disk Usage:		1.47 GB / 15.46 GB
</span></span><span class="line"><span class="cl"> Boot Device:		/dev/sda1
</span></span><span class="line"><span class="cl"> Load <span class="o">(</span>1/5/15min<span class="o">)</span>:	0.00 0.01 0.00 
</span></span><span class="line"><span class="cl"> CPU Usage:		0.0% used, 0.0% iowait, 0.0% steal
</span></span><span class="line"><span class="cl"> Kernel Version:	5.9.6
</span></span><span class="line"><span class="cl"> Network CC Method:	bbr + fq_pie
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> -&gt; Network Information
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> IPV4 - IP Address:	<span class="o">[</span>SG<span class="o">]</span> 103.148.77.*
</span></span><span class="line"><span class="cl"> IPV4 - ASN Info:	<span class="m">139989</span> <span class="o">(</span>IDNIC-ATHAMEDIANET-AS-ID - CV Atha Media Prima, ID<span class="o">)</span>
</span></span><span class="line"><span class="cl"> IPV4 - Region:		Singapore Singapore 
</span></span></code></pre></div><h4 id="性能">性能</h4>
<p>新加坡：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">-&gt; CPU Performance Test <span class="o">(</span>Fast Mode, 1-Pass @ 5sec<span class="o">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="m">1</span> Thread Test:			<span class="m">827</span> Scores
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> -&gt; Memory Performance Test <span class="o">(</span>Fast Mode, 1-Pass @ 5sec<span class="o">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="m">1</span> Thread - Read Test :		16940.86 MB/s
</span></span><span class="line"><span class="cl"> <span class="m">1</span> Thread - Write Test:		10037.01 MB/s
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> -&gt; Disk Speed Test <span class="o">(</span>4K Block/1M Block, Direct Mode<span class="o">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> Test Name		Write Speed				Read Speed
</span></span><span class="line"><span class="cl"> 100MB-4K Block		18.1 MB/s <span class="o">(</span><span class="m">4427</span> IOPS, 5.78 s<span class="o">)</span>		19.6 MB/s <span class="o">(</span><span class="m">4787</span> IOPS, 5.35 s<span class="o">)</span>
</span></span><span class="line"><span class="cl"> 1GB-1M Block		<span class="m">337</span> MB/s <span class="o">(</span><span class="m">321</span> IOPS, 3.11 s<span class="o">)</span>		<span class="m">386</span> MB/s <span class="o">(</span><span class="m">368</span> IOPS, 2.72 s<span class="o">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> -&gt; Speedtest.net Network Speed Test
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> Node Name			Upload Speed	Download Speed	Ping Latency	Server Name
</span></span><span class="line"><span class="cl"> Speedtest Default		33.22 MB/s	12.64 MB/s	34.22 ms	WIFINAN.COM <span class="o">(</span>Indonesia Cepu<span class="o">)</span>
</span></span><span class="line"><span class="cl"> China, Beijing CU  		Fail: Timeout Exceeded after <span class="m">60</span> seconds
</span></span><span class="line"><span class="cl"> China, Shanghai CT 		3.45 MB/s	59.69 MB/s	344.10 ms	China Telecom <span class="o">(</span>China Shanghai<span class="o">)</span>
</span></span><span class="line"><span class="cl"> China, Hangzhou CM 		Fail: Timeout Exceeded after <span class="m">60</span> seconds
</span></span></code></pre></div><h3 id="speedtest">Speedtest</h3>
<p>新加坡本地速度：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">Retrieving speedtest.net server list...
</span></span><span class="line"><span class="cl">Selecting best server based on ping...
</span></span><span class="line"><span class="cl">Hosted by PT. Telekomunikasi Indonesia <span class="o">(</span>Bandung<span class="o">)</span> <span class="o">[</span>379.99 km<span class="o">]</span>: 20.955 ms
</span></span><span class="line"><span class="cl">Testing download speed................................................................................
</span></span><span class="line"><span class="cl">Download: 249.29 Mbit/s
</span></span><span class="line"><span class="cl">Testing upload speed................................................................................................
</span></span><span class="line"><span class="cl">Upload: 830.68 Mbit/s
</span></span></code></pre></div><h3 id="superspeed">superspeed</h3>
<p>联通还不错，移动直接测不出来。</p>
<p>新加坡：</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2021/04/13/iShot2021-04-12-16.18.42.png" alt="iShot2021-04-12 16.18.42"  /></p>
<h3 id="traceroute">TraceRoute</h3>
<p>三网走HE，到大陆路由不太行。</p>
<p>新加坡：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">Traceroute to China, Guangzhou CT <span class="o">(</span>TCP Mode, Max <span class="m">30</span> Hop<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">============================================================</span>
</span></span><span class="line"><span class="cl">traceroute to 113.108.209.1 <span class="o">(</span>113.108.209.1<span class="o">)</span>, <span class="m">30</span> hops max, <span class="m">32</span> byte packets
</span></span><span class="line"><span class="cl"> <span class="m">1</span>  103.148.77.129  0.26 ms  AS139989  Singapore, athamedia.net
</span></span><span class="line"><span class="cl"> <span class="m">2</span>  10.0.1.1  0.21 ms  *  LAN Address
</span></span><span class="line"><span class="cl"> <span class="m">3</span>  27.50.33.29  0.36 ms  AS6939  China, Hong Kong, he.net
</span></span><span class="line"><span class="cl"> <span class="m">4</span>  184.105.65.14  134.88 ms  AS6939  United States, he.net
</span></span><span class="line"><span class="cl"> <span class="m">5</span>  184.105.81.29  151.13 ms  AS6939  United States, he.net
</span></span><span class="line"><span class="cl"> <span class="m">6</span>  184.105.223.253  150.40 ms  AS6939  United States, he.net
</span></span><span class="line"><span class="cl"> <span class="m">7</span>  118.85.205.25  221.47 ms  AS4134  China, ChinaTelecom
</span></span><span class="line"><span class="cl"> <span class="m">8</span>  202.97.70.38  339.09 ms  *  China, ChinaTelecom
</span></span><span class="line"><span class="cl"> <span class="m">9</span>  202.97.94.113  339.02 ms  AS4134  China, ChinaTelecom
</span></span><span class="line"><span class="cl"><span class="m">10</span>  202.97.94.145  353.25 ms  AS4134  China, ChinaTelecom
</span></span><span class="line"><span class="cl"><span class="m">11</span>  113.96.0.97  351.54 ms  AS58466  China, Guangdong, Guangzhou, ChinaTelecom
</span></span><span class="line"><span class="cl"><span class="m">12</span>  113.108.209.1  347.44 ms  AS58466  China, Guangdong, Guangzhou, ChinaTelecom
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Traceroute to China, Guangzhou CM <span class="o">(</span>TCP Mode, Max <span class="m">30</span> Hop<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">============================================================</span>
</span></span><span class="line"><span class="cl">traceroute to 120.196.212.25 <span class="o">(</span>120.196.212.25<span class="o">)</span>, <span class="m">30</span> hops max, <span class="m">32</span> byte packets
</span></span><span class="line"><span class="cl"> <span class="m">1</span>  103.148.77.129  0.31 ms  AS139989  Singapore, athamedia.net
</span></span><span class="line"><span class="cl"> <span class="m">2</span>  10.0.1.1  0.12 ms  *  LAN Address
</span></span><span class="line"><span class="cl"> <span class="m">3</span>  27.50.33.29  0.36 ms  AS6939  China, Hong Kong, he.net
</span></span><span class="line"><span class="cl"> <span class="m">4</span>  184.105.64.254  74.77 ms  AS6939  United States, he.net
</span></span><span class="line"><span class="cl"> <span class="m">5</span>  184.105.213.117  147.96 ms  AS6939  United States, he.net
</span></span><span class="line"><span class="cl"> <span class="m">6</span>  62.115.181.197  225.43 ms  AS1299  Sweden, Stockholm County, Stockholm, telia.com
</span></span><span class="line"><span class="cl"> <span class="m">7</span>  62.115.171.221  171.33 ms  AS1299  Sweden, Stockholm County, Stockholm, telia.com
</span></span><span class="line"><span class="cl"> <span class="m">8</span>  223.120.6.53  170.29 ms  AS58453  China, ChinaMobile
</span></span><span class="line"><span class="cl"> <span class="m">9</span>  *
</span></span><span class="line"><span class="cl"><span class="m">10</span>  *
</span></span><span class="line"><span class="cl"><span class="m">11</span>  221.176.24.61  317.60 ms  AS9808  China, ChinaMobile
</span></span><span class="line"><span class="cl"><span class="m">12</span>  221.176.22.233  314.01 ms  AS9808  China, ChinaMobile
</span></span><span class="line"><span class="cl"><span class="m">13</span>  111.24.14.149  315.75 ms  AS9808  China, ChinaMobile
</span></span><span class="line"><span class="cl"><span class="m">14</span>  111.24.14.86  323.27 ms  AS9808  China, ChinaMobile
</span></span><span class="line"><span class="cl"><span class="m">15</span>  211.136.196.250  317.75 ms  AS56040  China, Guangdong, Guangzhou, ChinaMobile
</span></span><span class="line"><span class="cl"><span class="m">16</span>  211.136.196.198  324.18 ms  AS56040  China, Guangdong, Guangzhou, ChinaMobile
</span></span><span class="line"><span class="cl"><span class="m">17</span>  211.136.203.18  323.36 ms  AS56040  China, Guangdong, Guangzhou, ChinaMobile
</span></span><span class="line"><span class="cl"><span class="m">18</span>  *
</span></span><span class="line"><span class="cl"><span class="m">19</span>  *
</span></span><span class="line"><span class="cl"><span class="m">20</span>  120.196.212.25  320.49 ms  AS56040  China, Guangdong, Guangzhou, ChinaMobile
</span></span></code></pre></div><p>具体路由看完整bench报告。</p>
<h3 id="流媒体解锁">流媒体解锁</h3>
<p>新加坡：解锁印尼Netflix，油管显示印尼。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"> ** 正在测试IPv4解锁情况
</span></span><span class="line"><span class="cl"> HBO Now:                               No
</span></span><span class="line"><span class="cl"> Bahamut Anime:                         No
</span></span><span class="line"><span class="cl"> Abema.TV:                              Yes
</span></span><span class="line"><span class="cl"> Princess Connect Re:Dive Japan:        Yes
</span></span><span class="line"><span class="cl"> BBC:                                   No
</span></span><span class="line"><span class="cl"> BiliBili China Mainland Only:          No
</span></span><span class="line"><span class="cl"> BiliBili HongKong/Macau/Taiwan:        No
</span></span><span class="line"><span class="cl"> Bilibili Taiwan Only:                  No
</span></span><span class="line"><span class="cl"> Netflix:                               Yes<span class="o">(</span>Region: ID<span class="o">)</span>
</span></span><span class="line"><span class="cl"> YouTube Region:                        ID
</span></span><span class="line"><span class="cl"> DisneyPlus:                            No
</span></span><span class="line"><span class="cl"> ** 正在测试IPv6解锁情况
</span></span><span class="line"><span class="cl">当前主机不支持IPv6,跳过...
</span></span></code></pre></div><h2 id="玩法">玩法</h2>
<p>对印尼服务器有需求的可以看看这家，也有kvm虚拟化的，价格还可以。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Datapacket德州VPS测评</title>
      <link>https://blog.kanikig.xyz/datapacket%E5%BE%B7%E5%B7%9Evps%E6%B5%8B%E8%AF%84/</link>
      <pubDate>Sun, 28 Mar 2021 22:53:20 +0000</pubDate>
      
      <guid>https://blog.kanikig.xyz/datapacket%E5%BE%B7%E5%B7%9Evps%E6%B5%8B%E8%AF%84/</guid>
      <description>商家简介 Datapacket是成立于2001年的美国德克萨斯州主机商家。特点是核心给的很多，统一16核，很罕见。下面测评看看真实水平。 官网：</description>
      <content:encoded><![CDATA[<h2 id="商家简介">商家简介</h2>
<p>Datapacket是成立于2001年的美国德克萨斯州主机商家。特点是核心给的很多，统一16核，很罕见。下面测评看看真实水平。</p>
<p>官网：www.datapacket.net</p>
<h2 id="套餐">套餐</h2>
<p>年付只需付9个月费用，同时可以用下面的85折优惠码。</p>
<p>85折<strong>优惠码</strong>： DPN15</p>
<p>Instant Deployment
7 Day Money Back Guarantee
99.9% Uptime Guarantee
24/7 Customer Support
KVM Cloud Hypervisor
USA Data Center (<strong>Texas</strong>)</p>
<p><em><strong>VSERVER 1GB</strong></em></p>
<p>16 Intel Xeon vCPU Cores
50 GB NVMe SSD (Disk)
1 GB Ram (Memory)
1 Dedicated IPv4 Address
1 Gbps Network Port
30 TB Monthly Transfer
Linux, Windows ISOs</p>
<p>价格：$3.46/月付</p>
<p><a href="https://datapacket.net/cart.php?a=add&amp;pid=73"><strong>点击购买</strong></a></p>
<p><em><strong>VSERVER 2GB</strong></em></p>
<p>16 Intel Xeon vCPU Cores
100 GB NVMe SSD (Disk)
2 GB Ram (Memory)
1 Dedicated IPv4 Address
1 Gbps Network Port
30 TB Monthly Transfer
Linux, Windows ISOs</p>
<p>价格：$6.48/月付</p>
<p><a href="https://datapacket.net/cart.php?a=add&amp;pid=75"><strong>点击购买</strong></a></p>
<p><em><strong>VSERVER 4GB</strong></em></p>
<p>16 Intel Xeon vCPU Cores
150 GB NVMe SSD (Disk)
4 GB Ram (Memory)
1 Dedicated IPv4 Address
1 Gbps Network Port
30 TB Monthly Transfer
Linux, Windows ISOs</p>
<p>价格： $9.57/月付</p>
<p><a href="https://datapacket.net/cart.php?a=add&amp;pid=74"><strong>点击购买</strong></a></p>
<p><em><strong>VSERVER 6GB</strong></em></p>
<p>16 Intel Xeon vCPU Cores
200 GB NVMe SSD (Disk)
6 GB Ram (Memory)
1 Dedicated IPv4 Address
1 Gbps Network Port
30 TB Monthly Transfer
Linux, Windows ISOs</p>
<p>价格：$12.66/月付</p>
<p><a href="https://datapacket.net/cart.php?a=add&amp;pid=76"><strong>点击购买</strong></a></p>
<p><em><strong>VSERVER 8GB</strong></em></p>
<p>16 Intel Xeon vCPU Cores
250 GB NVMe SSD (Disk)
8 GB Ram (Memory)
1 Dedicated IPv4 Address
1 Gbps Network Port
30 TB Monthly Transfer
Linux, Windows ISOs</p>
<p>价格：$15.75/月付</p>
<p><a href="https://datapacket.net/cart.php?a=add&amp;pid=77"><strong>点击购买</strong></a></p>
<p>测试 IP：</p>
<p>155.94.254.1</p>
<h2 id="测评">测评</h2>
<p>测试使用的是VSERVER 1GB。</p>
<h3 id="lemonbench">LemonBench</h3>
<p><a href="https://paste.ubuntu.com/p/5MjfCFPh5R/">完整测试链接</a></p>
<h4 id="系统信息">系统信息</h4>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">-&gt; System Information
</span></span><span class="line"><span class="cl"> 
</span></span><span class="line"><span class="cl"> OS Release:		Debian GNU/Linux <span class="s2">&#34;Buster&#34;</span> 10.9 <span class="o">(</span>x86_64<span class="o">)</span>
</span></span><span class="line"><span class="cl"> CPU Model:		Intel<span class="o">(</span>R<span class="o">)</span> Xeon<span class="o">(</span>R<span class="o">)</span> CPU E5-2690 <span class="m">0</span> @ 2.90GHz  2.89 GHz
</span></span><span class="line"><span class="cl"> CPU Cache Size:	<span class="m">16384</span> KB
</span></span><span class="line"><span class="cl"> CPU Number:		<span class="m">16</span> vCPU
</span></span><span class="line"><span class="cl"> Virt Type:		KVM
</span></span><span class="line"><span class="cl"> Memory Usage:		118.38 MB / 980.32 MB
</span></span><span class="line"><span class="cl"> Swap Usage:		<span class="o">[</span> No Swapfile / Swap partition <span class="o">]</span>
</span></span><span class="line"><span class="cl"> Disk Usage:		1.32 GB / 51.54 GB
</span></span><span class="line"><span class="cl"> Boot Device:		/dev/sda1
</span></span><span class="line"><span class="cl"> Load <span class="o">(</span>1/5/15min<span class="o">)</span>:	0.10 0.04 0.01 
</span></span><span class="line"><span class="cl"> CPU Usage:		0.8% used, 0.0% iowait, 0.0% steal
</span></span><span class="line"><span class="cl"> Kernel Version:	5.9.6
</span></span><span class="line"><span class="cl"> Network CC Method:	bbr + fq_pie
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> -&gt; Network Information
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> IPV4 - IP Address:	<span class="o">[</span>US<span class="o">]</span> 169.197.183.*
</span></span><span class="line"><span class="cl"> IPV4 - ASN Info:	null <span class="o">(</span>null<span class="o">)</span>
</span></span><span class="line"><span class="cl"> IPV4 - Region:		United States Texas 
</span></span></code></pre></div><h4 id="性能">性能</h4>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"> -&gt; CPU Performance Test <span class="o">(</span>Fast Mode, 1-Pass @ 5sec<span class="o">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="m">1</span> Thread Test:			<span class="m">842</span> Scores
</span></span><span class="line"><span class="cl"> <span class="m">16</span> Threads Test:		<span class="m">8261</span> Scores
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> -&gt; Memory Performance Test <span class="o">(</span>Fast Mode, 1-Pass @ 5sec<span class="o">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="m">1</span> Thread - Read Test :		16534.60 MB/s
</span></span><span class="line"><span class="cl"> <span class="m">1</span> Thread - Write Test:		12320.34 MB/s
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> -&gt; Disk Speed Test <span class="o">(</span>4K Block/1M Block, Direct Mode<span class="o">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> Test Name		Write Speed				Read Speed
</span></span><span class="line"><span class="cl"> 100MB-4K Block		30.3 MB/s <span class="o">(</span><span class="m">7408</span> IOPS, 3.46 s<span class="o">)</span>		47.3 MB/s <span class="o">(</span><span class="m">11541</span> IOPS, 2.22 s<span class="o">)</span>
</span></span><span class="line"><span class="cl"> 1GB-1M Block		<span class="m">792</span> MB/s <span class="o">(</span><span class="m">755</span> IOPS, 1.32 s<span class="o">)</span>		2.4 GB/s <span class="o">(</span><span class="m">2260</span> IOPS, 0.44 s<span class="o">)</span>
</span></span><span class="line"><span class="cl">  -&gt; Speedtest.net Network Speed Test
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> Node Name			Upload Speed	Download Speed	Ping Latency	Server Name
</span></span><span class="line"><span class="cl"> Speedtest Default		52.56 MB/s	10.42 MB/s	23.57 ms	CenturyLink <span class="o">(</span>United States Killeen, TX<span class="o">)</span>
</span></span><span class="line"><span class="cl"> China, Beijing CU  		16.63 MB/s	1.75 MB/s	241.99 ms	Beijing Unicom <span class="o">(</span>China Beijing<span class="o">)</span>
</span></span><span class="line"><span class="cl"> China, Shanghai CT 		3.44 MB/s	22.40 MB/s	194.88 ms	China Telecom <span class="o">(</span>China Shanghai<span class="o">)</span>
</span></span><span class="line"><span class="cl"> China, Hangzhou CM 		Fail: Timeout Exceeded after <span class="m">60</span> seconds
</span></span></code></pre></div><h3 id="speedtest">Speedtest</h3>
<p>本地速度：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">Retrieving speedtest.net server list...
</span></span><span class="line"><span class="cl">Selecting best server based on ping...
</span></span><span class="line"><span class="cl">Hosted by Suddenlink Communications LLC <span class="o">(</span>Georgetown, TX<span class="o">)</span> <span class="o">[</span>42.34 km<span class="o">]</span>: 32.734 ms
</span></span><span class="line"><span class="cl">Testing download speed................................................................................
</span></span><span class="line"><span class="cl">Download: 99.05 Mbit/s
</span></span><span class="line"><span class="cl">Testing upload speed................................................................................................
</span></span><span class="line"><span class="cl">Upload: 325.17 Mbit/s
</span></span></code></pre></div><h3 id="superspeed">superspeed</h3>
<p>联通速度还可以，电信移动比较垮。</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2021/03/29/iShot2021-03-29-00.07.56.png" alt="iShot2021-03-29 00.07.56"  /></p>
<h3 id="traceroute">TraceRoute</h3>
<p>联通回程CUVIP AS4837。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">Traceroute to China, Guangzhou CU <span class="o">(</span>TCP Mode, Max <span class="m">30</span> Hop<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">============================================================</span>
</span></span><span class="line"><span class="cl">traceroute to 210.21.4.130 <span class="o">(</span>210.21.4.130<span class="o">)</span>, <span class="m">30</span> hops max, <span class="m">32</span> byte packets
</span></span><span class="line"><span class="cl"> <span class="m">1</span>  169.197.183.1  0.91 ms  AS209  United States, Texas, omgitsfast.com
</span></span><span class="line"><span class="cl"> <span class="m">2</span>  67.135.15.49  12.91 ms  AS209  United States, Texas, Houston, centurylink.com
</span></span><span class="line"><span class="cl"> <span class="m">3</span>  67.14.134.174  29.34 ms  AS209  United States, Texas, Dallas, centurylink.com
</span></span><span class="line"><span class="cl"> <span class="m">4</span>  4.68.63.221  18.33 ms  AS3356  United States, level3.com
</span></span><span class="line"><span class="cl"> <span class="m">5</span>  4.69.209.249  50.58 ms  AS3356  United States, level3.com
</span></span><span class="line"><span class="cl"> <span class="m">6</span>  4.26.1.134  86.64 ms  AS3356  United States, California, Los Angeles, level3.com
</span></span><span class="line"><span class="cl"> <span class="m">7</span>  219.158.96.33  253.09 ms  AS4837  China, ChinaUnicom
</span></span><span class="line"><span class="cl"> <span class="m">8</span>  219.158.98.93  262.61 ms  AS4837  China, ChinaUnicom
</span></span><span class="line"><span class="cl"> <span class="m">9</span>  219.158.8.113  271.24 ms  AS4837  China, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="m">10</span>  112.92.0.62  275.33 ms  AS17816  China, Guangdong, Guangzhou, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="m">11</span>  120.80.175.78  273.35 ms  AS17622  China, Guangdong, Guangzhou, ChinaUnicom
</span></span></code></pre></div><p>电信和移动直连，具体看完整bench报告。</p>
<h3 id="流媒体解锁">流媒体解锁</h3>
<p>解锁美国Netflix、HBO now和Disney+。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"> ** 正在测试IPv4解锁情况
</span></span><span class="line"><span class="cl"> HBO Now:                               Yes
</span></span><span class="line"><span class="cl"> Bahamut Anime:                         No
</span></span><span class="line"><span class="cl"> Abema.TV:                              Yes
</span></span><span class="line"><span class="cl"> Princess Connect Re:Dive Japan:        Yes
</span></span><span class="line"><span class="cl"> BBC:                                   No
</span></span><span class="line"><span class="cl"> BiliBili China Mainland Only:          No
</span></span><span class="line"><span class="cl"> BiliBili HongKong/Macau/Taiwan:        No
</span></span><span class="line"><span class="cl"> Bilibili Taiwan Only:                  No
</span></span><span class="line"><span class="cl"> Netflix:                               Yes<span class="o">(</span>Region: US<span class="o">)</span>
</span></span><span class="line"><span class="cl"> YouTube Region:                        No
</span></span><span class="line"><span class="cl"> DisneyPlus:                            Yes
</span></span></code></pre></div><h2 id="玩法">玩法</h2>
<p>核心多流量大，但是速度差，比较鸡肋，拿来挖矿或者挂着跑下载还可以。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Recloud马来西亚NAT VPS测评</title>
      <link>https://blog.kanikig.xyz/recloud%E9%A9%AC%E6%9D%A5%E8%A5%BF%E4%BA%9Avps%E6%B5%8B%E8%AF%84/</link>
      <pubDate>Wed, 17 Mar 2021 21:38:01 +0000</pubDate>
      
      <guid>https://blog.kanikig.xyz/recloud%E9%A9%AC%E6%9D%A5%E8%A5%BF%E4%BA%9Avps%E6%B5%8B%E8%AF%84/</guid>
      <description>商家简介 Recloud主营香港HGC、美西NTT、台湾HINET、马来西亚TMNET等大带宽原生ip服务器，主站经营VDS产品，特点是性价比</description>
      <content:encoded><![CDATA[<h2 id="商家简介">商家简介</h2>
<p>Recloud主营香港HGC、美西NTT、台湾HINET、马来西亚TMNET等大带宽原生ip服务器，主站经营VDS产品，特点是性价比高，经常缺货。这次开设NAT分站，进驻低端市场。</p>
<p>主站官网：https://oneprovide.net</p>
<p>nat专用站官网：https://nat.recloud.pw</p>
<h2 id="套餐">套餐</h2>
<p>NAT请到分站购买。移动直连效果极佳，适合移动中转，解锁超多流媒体NF spofity kkbox steam 等等 严管SPAM和Bt 严管儿童色情存储 严管金融诈骗。</p>
<p>月付9折优惠码：SY6PP85F3K，年付7折优惠码：1Y4HONEOU0</p>
<p><em><strong>马来西亚NAT - 小</strong></em>
CPU：1C
内存：512MB
磁盘：20G
带宽：50M
流量：512G （双向）
IP：共享
端口：1SSH+10Port
价格：<strong>25/月付</strong></p>
<p><a href="https://nat.recloud.pw/cart.php?a=add&amp;pid=4"><strong>点击购买</strong></a></p>
<p><em><strong>马来西亚NAT - 中</strong></em>
CPU：1C
内存：1024MB
磁盘：20G
带宽：100M
流量：1024G (双向）
IP：共享
端口：1SSH+10Port
价格：<strong>45.00/月付</strong>
<a href="https://nat.recloud.pw/cart.php?a=add&amp;pid=5"><strong>点击购买</strong></a></p>
<p><em><strong>马来西亚NAT - 大</strong></em>
CPU：2C
内存：2048MB
磁盘：20G
带宽：200M
流量：2048G （双向）
IP：共享
端口：1SSH+10Port
价格：<strong>80.00/月付</strong>
<a href="https://nat.recloud.pw/cart.php?a=add&amp;pid=6"><strong>点击购买</strong></a></p>
<p>测试IP：115.135.82.1</p>
<p>双倍流量限量款已售罄，以上为正价套餐价格。</p>
<h2 id="测评">测评</h2>
<p>测试使用的是 马来西亚NAT - 大 款。</p>
<h3 id="lemonbench">LemonBench</h3>
<p><a href="https://paste.ubuntu.com/p/H6pkZS4znk/">完整测试链接</a></p>
<h4 id="系统信息">系统信息</h4>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">-&gt; System Information
</span></span><span class="line"><span class="cl"> 
</span></span><span class="line"><span class="cl"> OS Release:		Debian GNU/Linux <span class="s2">&#34;Buster&#34;</span> 10.3 <span class="o">(</span>x86_64<span class="o">)</span>
</span></span><span class="line"><span class="cl"> CPU Model:		Intel<span class="o">(</span>R<span class="o">)</span> Xeon<span class="o">(</span>R<span class="o">)</span> CPU E5-2450 v2 @ 2.50GHz  2.50 GHz
</span></span><span class="line"><span class="cl"> CPU Cache Size:	<span class="m">4096</span> KB
</span></span><span class="line"><span class="cl"> CPU Number:		<span class="m">2</span> vCPU
</span></span><span class="line"><span class="cl"> Virt Type:		KVM
</span></span><span class="line"><span class="cl"> Memory Usage:		299.68 MB / 1.94 GB
</span></span><span class="line"><span class="cl"> Swap Usage:		<span class="o">[</span> No Swapfile / Swap partition <span class="o">]</span>
</span></span><span class="line"><span class="cl"> Disk Usage:		2.05 GB / 20.61 GB
</span></span><span class="line"><span class="cl"> Boot Device:		/dev/vda1
</span></span><span class="line"><span class="cl"> Load <span class="o">(</span>1/5/15min<span class="o">)</span>:	0.00 0.01 0.03 
</span></span><span class="line"><span class="cl"> CPU Usage:		21.9% used, 0.0% iowait, 0.0% steal
</span></span><span class="line"><span class="cl"> Kernel Version:	5.9.6
</span></span><span class="line"><span class="cl"> Network CC Method:	bbr + fq_pie
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> -&gt; Network Information
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> IPV4 - IP Address:	<span class="o">[</span>MY<span class="o">]</span> 115.135.82.*
</span></span><span class="line"><span class="cl"> IPV4 - ASN Info:	<span class="m">4788</span> <span class="o">(</span>TMNET-AS-AP - Tmnet, Telekom Malaysia Bhd., MY<span class="o">)</span>
</span></span><span class="line"><span class="cl"> IPV4 - Region:		Malaysia Kuala Lumpur 
</span></span></code></pre></div><h4 id="性能">性能</h4>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"> -&gt; CPU Performance Test <span class="o">(</span>Fast Mode, 1-Pass @ 5sec<span class="o">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="m">1</span> Thread Test:			<span class="m">854</span> Scores
</span></span><span class="line"><span class="cl"> <span class="m">2</span> Threads Test:		<span class="m">1658</span> Scores
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> -&gt; Memory Performance Test <span class="o">(</span>Fast Mode, 1-Pass @ 5sec<span class="o">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="m">1</span> Thread - Read Test :		15942.73 MB/s
</span></span><span class="line"><span class="cl"> <span class="m">1</span> Thread - Write Test:		14160.20 MB/s
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> -&gt; Disk Speed Test <span class="o">(</span>4K Block/1M Block, Direct Mode<span class="o">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> Test Name		Write Speed				Read Speed
</span></span><span class="line"><span class="cl"> 100MB-4K Block		7.8 MB/s <span class="o">(</span><span class="m">1916</span> IOPS, 13.36 s<span class="o">)</span>		9.7 MB/s <span class="o">(</span><span class="m">2359</span> IOPS, 10.85 s<span class="o">)</span>
</span></span><span class="line"><span class="cl"> 1GB-1M Block		36.9 MB/s <span class="o">(</span><span class="m">35</span> IOPS, 28.40 s<span class="o">)</span>		<span class="m">173</span> MB/s <span class="o">(</span><span class="m">165</span> IOPS, 6.06 s<span class="o">)</span>
</span></span></code></pre></div><h3 id="speedtest">Speedtest</h3>
<p>本地速度，200M跑满了：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">Retrieving speedtest.net configuration...
</span></span><span class="line"><span class="cl">Testing from TM Net <span class="o">(</span>115.135.82.*<span class="o">)</span>...
</span></span><span class="line"><span class="cl">Retrieving speedtest.net server list...
</span></span><span class="line"><span class="cl">Selecting best server based on ping...
</span></span><span class="line"><span class="cl">Hosted by Telekom Malaysia Berhad <span class="o">(</span>Kuala Lumpur<span class="o">)</span> <span class="o">[</span>177.65 km<span class="o">]</span>: 14.103 ms
</span></span><span class="line"><span class="cl">Testing download speed................................................................................
</span></span><span class="line"><span class="cl">Download: 242.58 Mbit/s
</span></span><span class="line"><span class="cl">Testing upload speed................................................................................................
</span></span><span class="line"><span class="cl">Upload: 195.27 Mbit/s
</span></span></code></pre></div><h3 id="superspeed">superspeed</h3>
<p>很明显，适合移动。</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2021/03/17/iShot2021-03-17-23.15.08.png" alt="iShot2021-03-17 23.15.08"  /></p>
<h3 id="traceroute">TraceRoute</h3>
<p>联通回程AS4837，有点东西。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">Traceroute to China, Beijing CU <span class="o">(</span>TCP Mode, Max <span class="m">30</span> Hop<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">============================================================</span>
</span></span><span class="line"><span class="cl">traceroute to 123.125.99.1 <span class="o">(</span>123.125.99.1<span class="o">)</span>, <span class="m">30</span> hops max, <span class="m">32</span> byte packets
</span></span><span class="line"><span class="cl"> <span class="m">1</span>  192.168.88.10  3.99 ms  *  LAN Address
</span></span><span class="line"><span class="cl"> <span class="m">2</span>  115.135.82.254  3.17 ms  AS4788  Malaysia, Kuala Lumpur, tm.com.my
</span></span><span class="line"><span class="cl"> <span class="m">3</span>  10.55.74.59  40.33 ms  *  LAN Address
</span></span><span class="line"><span class="cl"> <span class="m">4</span>  10.55.135.49  44.23 ms  *  LAN Address
</span></span><span class="line"><span class="cl"> <span class="m">5</span>  10.55.100.126  13.24 ms  *  LAN Address
</span></span><span class="line"><span class="cl"> <span class="m">6</span>  10.55.209.45  53.64 ms  *  LAN Address
</span></span><span class="line"><span class="cl"> <span class="m">7</span>  219.158.33.41  214.31 ms  AS4837  China, ChinaUnicom
</span></span><span class="line"><span class="cl"> <span class="m">8</span>  219.158.10.29  216.33 ms  AS4837  China, ChinaUnicom
</span></span><span class="line"><span class="cl"> <span class="m">9</span>  219.158.20.221  198.23 ms  AS4837  China, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="m">10</span>  219.158.24.125  215.72 ms  AS4837  China, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="m">11</span>  219.158.8.81  201.79 ms  AS4837  China, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="m">12</span>  *
</span></span><span class="line"><span class="cl"><span class="m">13</span>  61.148.159.50  208.34 ms  AS4808  China, Beijing, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="m">14</span>  61.148.158.102  200.76 ms  AS4808  China, Beijing, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="m">15</span>  61.135.113.158  208.98 ms  AS4808  China, Beijing, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="m">16</span>  *
</span></span><span class="line"><span class="cl"><span class="m">17</span>  *
</span></span><span class="line"><span class="cl"><span class="m">18</span>  123.125.99.1  209.71 ms  AS4808  China, Beijing, ChinaUnicom
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Traceroute to China, Guangzhou CU <span class="o">(</span>TCP Mode, Max <span class="m">30</span> Hop<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">============================================================</span>
</span></span><span class="line"><span class="cl">traceroute to 210.21.4.130 <span class="o">(</span>210.21.4.130<span class="o">)</span>, <span class="m">30</span> hops max, <span class="m">32</span> byte packets
</span></span><span class="line"><span class="cl"> <span class="m">1</span>  192.168.88.10  0.74 ms  *  LAN Address
</span></span><span class="line"><span class="cl"> <span class="m">2</span>  115.135.82.254  2.75 ms  AS4788  Malaysia, Kuala Lumpur, tm.com.my
</span></span><span class="line"><span class="cl"> <span class="m">3</span>  10.55.74.59  172.13 ms  *  LAN Address
</span></span><span class="line"><span class="cl"> <span class="m">4</span>  10.55.39.142  195.80 ms  *  LAN Address
</span></span><span class="line"><span class="cl"> <span class="m">5</span>  10.55.99.178  12.50 ms  *  LAN Address
</span></span><span class="line"><span class="cl"> <span class="m">6</span>  10.55.192.63  193.98 ms  *  LAN Address
</span></span><span class="line"><span class="cl"> <span class="m">7</span>  219.158.40.201  184.29 ms  AS4837  China, ChinaUnicom
</span></span><span class="line"><span class="cl"> <span class="m">8</span>  219.158.16.93  331.83 ms  AS4837  China, ChinaUnicom
</span></span><span class="line"><span class="cl"> <span class="m">9</span>  219.158.16.93  337.07 ms  AS4837  China, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="m">10</span>  219.158.5.157  376.92 ms  AS4837  China, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="m">11</span>  219.158.15.34  431.31 ms  AS4837  China, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="m">12</span>  120.82.0.158  422.19 ms  AS17816  China, Guangdong, Guangzhou, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="m">13</span>  120.80.91.66  415.04 ms  AS17816  China, Guangdong, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="m">14</span>  *
</span></span><span class="line"><span class="cl"><span class="m">15</span>  *
</span></span><span class="line"><span class="cl"><span class="m">16</span>  *
</span></span><span class="line"><span class="cl"><span class="m">17</span>  *
</span></span></code></pre></div><p>电信直连</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">Traceroute to China, Guangzhou CT <span class="o">(</span>TCP Mode, Max <span class="m">30</span> Hop<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">============================================================</span>
</span></span><span class="line"><span class="cl">traceroute to 113.108.209.1 <span class="o">(</span>113.108.209.1<span class="o">)</span>, <span class="m">30</span> hops max, <span class="m">32</span> byte packets
</span></span><span class="line"><span class="cl"> <span class="m">1</span>  192.168.88.10  0.71 ms  *  LAN Address
</span></span><span class="line"><span class="cl"> <span class="m">2</span>  115.135.82.254  2.00 ms  AS4788  Malaysia, Kuala Lumpur, tm.com.my
</span></span><span class="line"><span class="cl"> <span class="m">3</span>  10.55.74.59  12.63 ms  *  LAN Address
</span></span><span class="line"><span class="cl"> <span class="m">4</span>  10.55.68.59  11.03 ms  *  LAN Address
</span></span><span class="line"><span class="cl"> <span class="m">5</span>  10.55.100.56  7.50 ms  *  LAN Address
</span></span><span class="line"><span class="cl"> <span class="m">6</span>  10.55.208.215  20.93 ms  *  LAN Address
</span></span><span class="line"><span class="cl"> <span class="m">7</span>  202.97.4.81  85.52 ms  AS4134  China, ChinaTelecom
</span></span><span class="line"><span class="cl"> <span class="m">8</span>  202.97.41.102  93.14 ms  AS4134  China, ChinaTelecom
</span></span><span class="line"><span class="cl"> <span class="m">9</span>  202.97.94.89  91.00 ms  AS4134  China, ChinaTelecom
</span></span><span class="line"><span class="cl"><span class="m">10</span>  202.97.94.129  100.70 ms  AS4134  China, ChinaTelecom
</span></span><span class="line"><span class="cl"><span class="m">11</span>  113.108.209.1  98.31 ms  AS58466  China, Guangdong, Guangzhou, ChinaTelecom
</span></span></code></pre></div><p>移动延迟非常低</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">Traceroute to China, Guangzhou CM <span class="o">(</span>TCP Mode, Max <span class="m">30</span> Hop<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">============================================================</span>
</span></span><span class="line"><span class="cl">traceroute to 120.196.212.25 <span class="o">(</span>120.196.212.25<span class="o">)</span>, <span class="m">30</span> hops max, <span class="m">32</span> byte packets
</span></span><span class="line"><span class="cl"> <span class="m">1</span>  192.168.88.10  0.60 ms  *  LAN Address
</span></span><span class="line"><span class="cl"> <span class="m">2</span>  115.135.82.254  27.16 ms  AS4788  Malaysia, Kuala Lumpur, tm.com.my
</span></span><span class="line"><span class="cl"> <span class="m">3</span>  10.55.74.57  23.93 ms  *  LAN Address
</span></span><span class="line"><span class="cl"> <span class="m">4</span>  10.55.68.65  14.00 ms  *  LAN Address
</span></span><span class="line"><span class="cl"> <span class="m">5</span>  10.55.100.56  7.53 ms  *  LAN Address
</span></span><span class="line"><span class="cl"> <span class="m">6</span>  10.55.208.215  10.41 ms  *  LAN Address
</span></span><span class="line"><span class="cl"> <span class="m">7</span>  27.111.228.228  11.45 ms  *  Singapore, equinix.com
</span></span><span class="line"><span class="cl"> <span class="m">8</span>  223.120.2.105  56.14 ms  AS58453  China, ChinaMobile
</span></span><span class="line"><span class="cl"> <span class="m">9</span>  *
</span></span><span class="line"><span class="cl"><span class="m">10</span>  *
</span></span><span class="line"><span class="cl"><span class="m">11</span>  221.176.24.57  61.04 ms  AS9808  China, ChinaMobile
</span></span><span class="line"><span class="cl"><span class="m">12</span>  221.176.22.157  62.27 ms  AS9808  China, ChinaMobile
</span></span><span class="line"><span class="cl"><span class="m">13</span>  111.24.5.169  63.99 ms  AS9808  China, ChinaMobile
</span></span><span class="line"><span class="cl"><span class="m">14</span>  111.24.14.74  59.22 ms  AS9808  China, ChinaMobile
</span></span><span class="line"><span class="cl"><span class="m">15</span>  183.235.232.97  60.89 ms  AS56040  China, Guangdong, Guangzhou, ChinaMobile
</span></span><span class="line"><span class="cl"><span class="m">16</span>  211.139.180.110  57.11 ms  AS56040  China, Guangdong, Guangzhou, ChinaMobile
</span></span><span class="line"><span class="cl"><span class="m">17</span>  *
</span></span><span class="line"><span class="cl"><span class="m">18</span>  211.139.180.110  59.99 ms  AS56040  China, Guangdong, Guangzhou, ChinaMobile
</span></span><span class="line"><span class="cl"><span class="m">19</span>  *
</span></span><span class="line"><span class="cl"><span class="m">20</span>  120.196.212.25  63.26 ms  AS56040  China, Guangdong, Guangzhou, ChinaMobile
</span></span></code></pre></div><p>详细结果可见上面lemonbench完整测试链接。</p>
<h3 id="流媒体解锁">流媒体解锁</h3>
<p>解锁马来西亚Netflix。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"> ** 正在测试IPv4解锁情况
</span></span><span class="line"><span class="cl"> HBO Now:                               No
</span></span><span class="line"><span class="cl"> Bahamut Anime:                         No
</span></span><span class="line"><span class="cl"> Abema.TV:                              Yes
</span></span><span class="line"><span class="cl"> Princess Connect Re:Dive Japan:        Yes
</span></span><span class="line"><span class="cl"> BBC:                                   No
</span></span><span class="line"><span class="cl"> BiliBili China Mainland Only:          No
</span></span><span class="line"><span class="cl"> BiliBili HongKong/Macau/Taiwan:        No
</span></span><span class="line"><span class="cl"> Bilibili Taiwan Only:                  No
</span></span><span class="line"><span class="cl"> Netflix:                               Yes<span class="o">(</span>Region: MY<span class="o">)</span>
</span></span><span class="line"><span class="cl"> YouTube Region:                        MY
</span></span><span class="line"><span class="cl"> DisneyPlus:                            No
</span></span></code></pre></div><h2 id="玩法">玩法</h2>
<p>移动用户直连，其他建议用广东移动中转。马来区Netflix片库也很大，当新加坡用就行。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>edgeNAT洛杉矶CERA VPS测评</title>
      <link>https://blog.kanikig.xyz/edgenat%E6%B4%9B%E6%9D%89%E7%9F%B6cera%E6%B5%8B%E8%AF%84/</link>
      <pubDate>Mon, 15 Mar 2021 19:48:01 +0000</pubDate>
      
      <guid>https://blog.kanikig.xyz/edgenat%E6%B4%9B%E6%9D%89%E7%9F%B6cera%E6%B5%8B%E8%AF%84/</guid>
      <description>商家简介 edgeNAT是成立于2019年的国人商家，APNIC会员单位，ASN139803。主营香港CN2、韩国CN2、美国CN2等服务器，</description>
      <content:encoded><![CDATA[<h2 id="商家简介">商家简介</h2>
<p>edgeNAT是成立于2019年的国人商家，APNIC会员单位，ASN139803。主营香港CN2、韩国CN2、美国CN2等服务器，适合建站等常规用途，提供7天无理由退款。</p>
<p>最近美国cera机房回程CUVIP（as4837）线路非常火，已经有近十家国人商家销售，购买尽量选择运营时间较长、技术过硬的商家，谨防跑路。</p>
<p>官网：www.edgenat.com</p>
<h2 id="套餐">套餐</h2>
<p>edgeNAT新上美国西海岸洛杉矶机房，去程直连，回程三网强制走联通CUVIP线路，大带宽，中国地区访问速度优异。新品促销期间（3.11-3.21）提供6折优惠码，折后最低月付30起。</p>
<p>6折<strong>优惠码</strong>： CUVIP</p>
<p><em><strong>CeRa limit</strong></em>（不可用优惠码）
Core：1 vCPU
Memory：512 MB
Storage：10 GB SSD
宽带：1000 Mbps
流量：1000 G
IPv4地址：1个
架构：KVM
DDOS防御：2G
系统：仅限linux
价格：<strong>240.00/年付</strong></p>
<p><a href="https://www.edgenat.com/cart/add/45"><strong>点击购买</strong></a></p>
<p><em><strong>CeRa D1</strong></em>
Core：1 vCPU
Memory：1 GB
Storage：20 GB SSD
宽带：1000 Mbps
流量：1500 G
IPv4地址：1个
架构：KVM
DDOS防御：2G
系统：仅限linux
价格：<del>50.00/月付</del> 	<strong>30.00/月付</strong>
<a href="https://www.edgenat.com/cart/add/5"><strong>点击购买</strong></a></p>
<p><em><strong>CeRa D2</strong></em>
Core：2 vCPU
Memory：2 GB
Storage：50 GB SSD
宽带：2000 Mbps
流量：3000 G
IPv4地址：1个
架构：KVM
DDOS防御：2G
系统：linux&amp;windows
价格：<del>120.00/月付</del> 	<strong>72.00/月付</strong>
<a href="https://www.edgenat.com/cart/add/6"><strong>点击购买</strong></a></p>
<p><em><strong>CeRa D3</strong></em>
Core：4 vCPU
Memory：4 GB
Storage：100 GB SSD
宽带：2000 Mbps
流量：5000 G
IPv4地址：1个
架构：KVM
DDOS防御：2G
系统：linux&amp;windows
价格：<del>240.00/月付</del> 	<strong>144.00/月付</strong>
<a href="https://www.edgenat.com/cart/add/10"><strong>点击购买</strong></a></p>
<p><em><strong>CeRa D4</strong></em>
Core：6 vCPU
Memory：8 GB
Storage：200 GB SSD
宽带：3000 Mbps
流量：10000 G
IPv4地址：1个
架构：KVM
DDOS防御：2G
系统：linux&amp;windows
价格：<del>400.00/月付</del> 	<strong>240.00/月付</strong>
<a href="https://www.edgenat.com/cart/add/17"><strong>点击购买</strong></a></p>
<p>TOS/AUP 服务条款（购买前请先查看）</p>
<p><a href="https://www.edgenat.com/tos">https://www.edgenat.com/tos</a></p>
<p>Looking Glass：</p>
<p><a href="http://lg.ceracuvip.edgenat.com/">http://lg.ceracuvip.edgenat.com/</a></p>
<p>edgeNAT 机房的测试 IP：</p>
<ul>
<li>edgeNAT 韩国机房测试 IP：103.145.106.112</li>
<li>edgeNAT 香港机房测试 IP：103.145.107.134</li>
<li>edgeNAT 洛杉矶机房测试 IP：41.216.177.64</li>
<li>edgeNAT 美国 Cera 机房测试 IP：156.251.191.11</li>
</ul>
<h2 id="测评">测评</h2>
<p>测试使用的是CeRa D1款。</p>
<h3 id="lemonbench">LemonBench</h3>
<p><a href="https://paste.ubuntu.com/p/Jd4GWvhTdJ/">完整测试链接</a></p>
<h4 id="系统信息">系统信息</h4>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">-&gt; System Information
</span></span><span class="line"><span class="cl"> 
</span></span><span class="line"><span class="cl"> OS Release:		Debian GNU/Linux <span class="s2">&#34;Buster&#34;</span> 10.3 <span class="o">(</span>x86_64<span class="o">)</span>
</span></span><span class="line"><span class="cl"> CPU Model:		AMD Ryzen <span class="m">9</span> 3950X 16-Core Processor  3.49 GHz
</span></span><span class="line"><span class="cl"> CPU Cache Size:	<span class="m">512</span> KB
</span></span><span class="line"><span class="cl"> CPU Number:		<span class="m">1</span> vCPU
</span></span><span class="line"><span class="cl"> Virt Type:		KVM
</span></span><span class="line"><span class="cl"> Memory Usage:		358.04 MB / 983.66 MB
</span></span><span class="line"><span class="cl"> Swap Usage:		3.54 MB / 1024.00 MB
</span></span><span class="line"><span class="cl"> Disk Usage:		3.26 GB / 20.61 GB
</span></span><span class="line"><span class="cl"> Boot Device:		/dev/vda1
</span></span><span class="line"><span class="cl"> Load <span class="o">(</span>1/5/15min<span class="o">)</span>:	0.18 0.05 0.01 
</span></span><span class="line"><span class="cl"> CPU Usage:		0.0% used, 0.0% iowait, 0.0% steal
</span></span><span class="line"><span class="cl"> Kernel Version:	5.9.6
</span></span><span class="line"><span class="cl"> Network CC Method:	bbr + fq_pie
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> -&gt; Network Information
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> IPV4 - IP Address:	<span class="o">[</span>US<span class="o">]</span> 156.251.191.*
</span></span><span class="line"><span class="cl"> IPV4 - ASN Info:	<span class="m">40065</span> <span class="o">(</span>CNSERVERS - CNSERVERS LLC, US<span class="o">)</span>
</span></span><span class="line"><span class="cl"> IPV4 - Region:		United States California Los Angeles
</span></span></code></pre></div><h4 id="性能">性能</h4>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">-&gt; CPU Performance Test <span class="o">(</span>Fast Mode, 1-Pass @ 5sec<span class="o">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="m">1</span> Thread Test:			<span class="m">1982</span> Scores
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> -&gt; Memory Performance Test <span class="o">(</span>Fast Mode, 1-Pass @ 5sec<span class="o">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="m">1</span> Thread - Read Test :		53916.33 MB/s
</span></span><span class="line"><span class="cl"> <span class="m">1</span> Thread - Write Test:		22769.50 MB/s
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> -&gt; Disk Speed Test <span class="o">(</span>4K Block/1M Block, Direct Mode<span class="o">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> Test Name		Write Speed				Read Speed
</span></span><span class="line"><span class="cl"> 100MB-4K Block		9.8 MB/s <span class="o">(</span><span class="m">2391</span> IOPS, 10.70 s<span class="o">)</span>		9.8 MB/s <span class="o">(</span><span class="m">2392</span> IOPS, 10.70 s<span class="o">)</span>
</span></span><span class="line"><span class="cl"> 1GB-1M Block		<span class="m">201</span> MB/s <span class="o">(</span><span class="m">191</span> IOPS, 5.21 s<span class="o">)</span>		<span class="m">210</span> MB/s <span class="o">(</span><span class="m">199</span> IOPS, 5.00 s<span class="o">)</span>
</span></span><span class="line"><span class="cl"> 
</span></span><span class="line"><span class="cl"> -&gt; Speedtest.net Network Speed Test
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> Node Name			Upload Speed	Download Speed	Ping Latency	Server Name
</span></span><span class="line"><span class="cl"> Speedtest Default		32.66 MB/s	79.40 MB/s	292.45 ms	Afrihost <span class="o">(</span>South Africa Johannesburg<span class="o">)</span>
</span></span><span class="line"><span class="cl"> China, Beijing CU  		41.16 MB/s	70.57 MB/s	209.71 ms	Beijing Unicom <span class="o">(</span>China Beijing<span class="o">)</span>
</span></span><span class="line"><span class="cl"> China, Shanghai CT 		43.64 MB/s	98.47 MB/s	140.87 ms	China Telecom <span class="o">(</span>China Shanghai<span class="o">)</span>
</span></span><span class="line"><span class="cl"> China, Hangzhou CM 		23.93 MB/s	76.63 MB/s	196.74 ms	China Mobile Group Zhejiang Co.,Ltd <span class="o">(</span>China Hangzhou<span class="o">)</span>
</span></span></code></pre></div><h3 id="geekbench">Geekbench</h3>
<p>cpu非常好</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">Performing Geekbench v5 CPU Benchmark test. Please wait...
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="c1">## Geekbench v5 CPU Benchmark:</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  Single Core : <span class="m">831</span>  <span class="o">(</span>VERY GOOD<span class="o">)</span>
</span></span><span class="line"><span class="cl">   Multi Core : <span class="m">846</span>
</span></span></code></pre></div><h3 id="speedtest">Speedtest</h3>
<p>本地速度：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">Retrieving speedtest.net configuration...
</span></span><span class="line"><span class="cl">Testing from Multacom Corporation <span class="o">(</span>156.251.191.*<span class="o">)</span>...
</span></span><span class="line"><span class="cl">Retrieving speedtest.net server list...
</span></span><span class="line"><span class="cl">Selecting best server based on ping...
</span></span><span class="line"><span class="cl">Hosted by CenturyLink <span class="o">(</span>Little Rock, AR<span class="o">)</span> <span class="o">[</span>14304.58 km<span class="o">]</span>: 45.257 ms
</span></span><span class="line"><span class="cl">Testing download speed................................................................................
</span></span><span class="line"><span class="cl">Download: 418.11 Mbit/s
</span></span><span class="line"><span class="cl">Testing upload speed................................................................................................
</span></span><span class="line"><span class="cl">Upload: 342.18 Mbit/s
</span></span></code></pre></div><h3 id="superspeed">superspeed</h3>
<p>三网速度都很优秀。</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2021/03/15/iShot2021-03-15-21.00.49.png" alt="iShot2021-03-15 21.00.49"  /></p>
<h3 id="traceroute">TraceRoute</h3>
<p>三网回程4837，延迟优秀。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">-&gt; Traceroute Test <span class="o">(</span>IPV4<span class="o">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Traceroute to China, Beijing CU <span class="o">(</span>TCP Mode, Max <span class="m">30</span> Hop<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">============================================================</span>
</span></span><span class="line"><span class="cl">traceroute to 123.125.99.1 <span class="o">(</span>123.125.99.1<span class="o">)</span>, <span class="m">30</span> hops max, <span class="m">32</span> byte packets
</span></span><span class="line"><span class="cl"> <span class="m">1</span>  198.16.50.145  0.39 ms  AS40065  United States, California, Los Angeles, ceranetworks.com
</span></span><span class="line"><span class="cl"> <span class="m">2</span>  23.224.21.60  0.33 ms  AS40065  United States, California, Los Angeles, ceranetworks.com
</span></span><span class="line"><span class="cl"> <span class="m">3</span>  192.168.101.201  1.06 ms  *  LAN Address
</span></span><span class="line"><span class="cl"> <span class="m">4</span>  192.168.101.62  0.44 ms  *  LAN Address
</span></span><span class="line"><span class="cl"> <span class="m">5</span>  *
</span></span><span class="line"><span class="cl"> <span class="m">6</span>  23.225.225.65  177.61 ms  AS40065  United States, California, Los Angeles, ceranetworks.com
</span></span><span class="line"><span class="cl"> <span class="m">7</span>  219.158.97.177  178.61 ms  AS4837  China, ChinaUnicom
</span></span><span class="line"><span class="cl"> <span class="m">8</span>  219.158.113.122  155.21 ms  AS4837  China, ChinaUnicom
</span></span><span class="line"><span class="cl"> <span class="m">9</span>  219.158.113.105  151.16 ms  AS4837  China, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="m">10</span>  219.158.6.169  193.08 ms  AS4837  China, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="m">11</span>  124.65.194.98  203.00 ms  AS4808  China, Beijing, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="m">12</span>  61.148.7.110  190.34 ms  AS4808  China, Beijing, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="m">13</span>  124.65.194.50  182.45 ms  AS4808  China, Beijing, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="m">14</span>  61.135.113.154  182.51 ms  AS4808  China, Beijing, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="m">15</span>  *
</span></span><span class="line"><span class="cl"><span class="m">16</span>  *
</span></span><span class="line"><span class="cl"><span class="m">17</span>  123.125.99.1  190.54 ms  AS4808  China, Beijing, ChinaUnicom
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Traceroute to China, Beijing CT <span class="o">(</span>TCP Mode, Max <span class="m">30</span> Hop<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">============================================================</span>
</span></span><span class="line"><span class="cl">traceroute to 180.149.128.9 <span class="o">(</span>180.149.128.9<span class="o">)</span>, <span class="m">30</span> hops max, <span class="m">32</span> byte packets
</span></span><span class="line"><span class="cl"> <span class="m">1</span>  198.16.50.145  0.37 ms  AS40065  United States, California, Los Angeles, ceranetworks.com
</span></span><span class="line"><span class="cl"> <span class="m">2</span>  23.224.21.60  0.37 ms  AS40065  United States, California, Los Angeles, ceranetworks.com
</span></span><span class="line"><span class="cl"> <span class="m">3</span>  192.168.101.201  0.98 ms  *  LAN Address
</span></span><span class="line"><span class="cl"> <span class="m">4</span>  192.168.101.62  0.50 ms  *  LAN Address
</span></span><span class="line"><span class="cl"> <span class="m">5</span>  *
</span></span><span class="line"><span class="cl"> <span class="m">6</span>  23.225.225.65  173.35 ms  AS40065  United States, California, Los Angeles, ceranetworks.com
</span></span><span class="line"><span class="cl"> <span class="m">7</span>  219.158.97.177  184.56 ms  AS4837  China, ChinaUnicom
</span></span><span class="line"><span class="cl"> <span class="m">8</span>  219.158.113.122  206.48 ms  AS4837  China, ChinaUnicom
</span></span><span class="line"><span class="cl"> <span class="m">9</span>  219.158.113.105  151.67 ms  AS4837  China, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="m">10</span>  219.158.6.161  210.97 ms  AS4837  China, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="m">11</span>  219.158.5.138  196.31 ms  AS4837  China, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="m">12</span>  *
</span></span><span class="line"><span class="cl"><span class="m">13</span>  *
</span></span><span class="line"><span class="cl"><span class="m">14</span>  36.110.246.150  173.53 ms  AS23724  China, Beijing, ChinaTelecom
</span></span><span class="line"><span class="cl"><span class="m">15</span>  36.110.248.254  172.85 ms  AS23724  China, Beijing, ChinaTelecom
</span></span><span class="line"><span class="cl"><span class="m">16</span>  180.149.128.9  169.86 ms  AS23724  China, Beijing, ChinaTelecom
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Traceroute to China, Beijing CM <span class="o">(</span>TCP Mode, Max <span class="m">30</span> Hop<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">============================================================</span>
</span></span><span class="line"><span class="cl">traceroute to 211.136.25.153 <span class="o">(</span>211.136.25.153<span class="o">)</span>, <span class="m">30</span> hops max, <span class="m">32</span> byte packets
</span></span><span class="line"><span class="cl"> <span class="m">1</span>  198.16.50.145  0.40 ms  AS40065  United States, California, Los Angeles, ceranetworks.com
</span></span><span class="line"><span class="cl"> <span class="m">2</span>  23.224.21.60  0.71 ms  AS40065  United States, California, Los Angeles, ceranetworks.com
</span></span><span class="line"><span class="cl"> <span class="m">3</span>  192.168.101.201  0.62 ms  *  LAN Address
</span></span><span class="line"><span class="cl"> <span class="m">4</span>  192.168.101.62  0.44 ms  *  LAN Address
</span></span><span class="line"><span class="cl"> <span class="m">5</span>  *
</span></span><span class="line"><span class="cl"> <span class="m">6</span>  23.225.225.65  174.02 ms  AS40065  United States, California, Los Angeles, ceranetworks.com
</span></span><span class="line"><span class="cl"> <span class="m">7</span>  219.158.97.177  174.88 ms  AS4837  China, ChinaUnicom
</span></span><span class="line"><span class="cl"> <span class="m">8</span>  219.158.19.74  185.94 ms  AS4837  China, ChinaUnicom
</span></span><span class="line"><span class="cl"> <span class="m">9</span>  219.158.19.69  200.16 ms  AS4837  China, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="m">10</span>  219.158.16.85  224.69 ms  AS4837  China, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="m">11</span>  219.158.3.66  236.13 ms  AS4837  China, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="m">12</span>  *
</span></span><span class="line"><span class="cl"><span class="m">13</span>  *
</span></span><span class="line"><span class="cl"><span class="m">14</span>  *
</span></span><span class="line"><span class="cl"><span class="m">15</span>  111.24.14.46  232.21 ms  AS9808  China, ChinaMobile
</span></span><span class="line"><span class="cl"><span class="m">16</span>  *
</span></span><span class="line"><span class="cl"><span class="m">17</span>  211.136.63.66  242.55 ms  AS56048  China, Beijing, ChinaMobile
</span></span><span class="line"><span class="cl"><span class="m">18</span>  211.136.63.66  246.09 ms  AS56048  China, Beijing, ChinaMobile
</span></span><span class="line"><span class="cl"><span class="m">19</span>  *
</span></span><span class="line"><span class="cl"><span class="m">20</span>  *
</span></span><span class="line"><span class="cl"><span class="m">21</span>  211.136.25.153  237.56 ms  AS56048  China, Beijing, ChinaMobile
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Traceroute to China, Shanghai CU <span class="o">(</span>TCP Mode, Max <span class="m">30</span> Hop<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">============================================================</span>
</span></span><span class="line"><span class="cl">traceroute to 58.247.8.158 <span class="o">(</span>58.247.8.158<span class="o">)</span>, <span class="m">30</span> hops max, <span class="m">32</span> byte packets
</span></span><span class="line"><span class="cl"> <span class="m">1</span>  198.16.50.145  0.39 ms  AS40065  United States, California, Los Angeles, ceranetworks.com
</span></span><span class="line"><span class="cl"> <span class="m">2</span>  23.224.21.60  0.33 ms  AS40065  United States, California, Los Angeles, ceranetworks.com
</span></span><span class="line"><span class="cl"> <span class="m">3</span>  192.168.101.201  0.72 ms  *  LAN Address
</span></span><span class="line"><span class="cl"> <span class="m">4</span>  192.168.101.62  0.59 ms  *  LAN Address
</span></span><span class="line"><span class="cl"> <span class="m">5</span>  *
</span></span><span class="line"><span class="cl"> <span class="m">6</span>  23.225.225.65  176.54 ms  AS40065  United States, California, Los Angeles, ceranetworks.com
</span></span><span class="line"><span class="cl"> <span class="m">7</span>  219.158.116.237  144.06 ms  AS4837  China, ChinaUnicom
</span></span><span class="line"><span class="cl"> <span class="m">8</span>  219.158.19.90  179.49 ms  AS4837  China, ChinaUnicom
</span></span><span class="line"><span class="cl"> <span class="m">9</span>  219.158.19.69  193.84 ms  AS4837  China, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="m">10</span>  *
</span></span><span class="line"><span class="cl"><span class="m">11</span>  139.226.228.46  234.62 ms  AS17621  China, Shanghai, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="m">12</span>  139.226.225.22  186.05 ms  AS17621  China, Shanghai, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="m">13</span>  58.247.8.153  223.39 ms  AS17621  China, Shanghai, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="m">14</span>  *
</span></span><span class="line"><span class="cl"><span class="m">15</span>  *
</span></span><span class="line"><span class="cl"><span class="m">16</span>  *
</span></span><span class="line"><span class="cl"><span class="m">17</span>  *
</span></span><span class="line"><span class="cl"><span class="m">18</span>  *
</span></span><span class="line"><span class="cl"><span class="m">19</span>  *
</span></span><span class="line"><span class="cl"><span class="m">20</span>  *
</span></span><span class="line"><span class="cl"><span class="m">21</span>  *
</span></span><span class="line"><span class="cl"><span class="m">22</span>  *
</span></span><span class="line"><span class="cl"><span class="m">23</span>  *
</span></span><span class="line"><span class="cl"><span class="m">24</span>  *
</span></span><span class="line"><span class="cl"><span class="m">25</span>  *
</span></span><span class="line"><span class="cl"><span class="m">26</span>  *
</span></span><span class="line"><span class="cl"><span class="m">27</span>  *
</span></span><span class="line"><span class="cl"><span class="m">28</span>  *
</span></span><span class="line"><span class="cl"><span class="m">29</span>  *
</span></span><span class="line"><span class="cl"><span class="m">30</span>  *
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Traceroute to China, Shanghai CT <span class="o">(</span>TCP Mode, Max <span class="m">30</span> Hop<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">============================================================</span>
</span></span><span class="line"><span class="cl">traceroute to 180.153.28.5 <span class="o">(</span>180.153.28.5<span class="o">)</span>, <span class="m">30</span> hops max, <span class="m">32</span> byte packets
</span></span><span class="line"><span class="cl"> <span class="m">1</span>  198.16.50.145  0.46 ms  AS40065  United States, California, Los Angeles, ceranetworks.com
</span></span><span class="line"><span class="cl"> <span class="m">2</span>  23.224.21.60  0.47 ms  AS40065  United States, California, Los Angeles, ceranetworks.com
</span></span><span class="line"><span class="cl"> <span class="m">3</span>  *
</span></span><span class="line"><span class="cl"> <span class="m">4</span>  192.168.101.62  0.48 ms  *  LAN Address
</span></span><span class="line"><span class="cl"> <span class="m">5</span>  *
</span></span><span class="line"><span class="cl"> <span class="m">6</span>  23.225.225.65  177.84 ms  AS40065  United States, California, Los Angeles, ceranetworks.com
</span></span><span class="line"><span class="cl"> <span class="m">7</span>  219.158.116.237  140.02 ms  AS4837  China, ChinaUnicom
</span></span><span class="line"><span class="cl"> <span class="m">8</span>  219.158.113.138  145.33 ms  AS4837  China, ChinaUnicom
</span></span><span class="line"><span class="cl"> <span class="m">9</span>  219.158.113.109  149.87 ms  AS4837  China, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="m">10</span>  219.158.109.174  143.62 ms  AS4837  China, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="m">11</span>  202.97.16.33  152.92 ms  AS4134  China, ChinaTelecom
</span></span><span class="line"><span class="cl"><span class="m">12</span>  *
</span></span><span class="line"><span class="cl"><span class="m">13</span>  101.95.88.89  152.63 ms  AS4812  China, Shanghai, ChinaTelecom
</span></span><span class="line"><span class="cl"><span class="m">14</span>  *
</span></span><span class="line"><span class="cl"><span class="m">15</span>  101.95.225.34  144.88 ms  AS4811  China, Shanghai, ChinaTelecom
</span></span><span class="line"><span class="cl"><span class="m">16</span>  101.227.255.46  159.40 ms  AS4812  China, Shanghai, ChinaTelecom
</span></span><span class="line"><span class="cl"><span class="m">17</span>  180.153.28.5  142.96 ms  AS4812  China, Shanghai, ChinaTelecom
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Traceroute to China, Shanghai CM <span class="o">(</span>TCP Mode, Max <span class="m">30</span> Hop<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">============================================================</span>
</span></span><span class="line"><span class="cl">traceroute to 221.183.55.22 <span class="o">(</span>221.183.55.22<span class="o">)</span>, <span class="m">30</span> hops max, <span class="m">32</span> byte packets
</span></span><span class="line"><span class="cl"> <span class="m">1</span>  198.16.50.145  0.46 ms  AS40065  United States, California, Los Angeles, ceranetworks.com
</span></span><span class="line"><span class="cl"> <span class="m">2</span>  23.224.21.60  0.35 ms  AS40065  United States, California, Los Angeles, ceranetworks.com
</span></span><span class="line"><span class="cl"> <span class="m">3</span>  192.168.101.201  0.66 ms  *  LAN Address
</span></span><span class="line"><span class="cl"> <span class="m">4</span>  192.168.101.62  0.45 ms  *  LAN Address
</span></span><span class="line"><span class="cl"> <span class="m">5</span>  *
</span></span><span class="line"><span class="cl"> <span class="m">6</span>  23.225.225.65  174.25 ms  AS40065  United States, California, Los Angeles, ceranetworks.com
</span></span><span class="line"><span class="cl"> <span class="m">7</span>  219.158.97.177  176.83 ms  AS4837  China, ChinaUnicom
</span></span><span class="line"><span class="cl"> <span class="m">8</span>  219.158.113.118  153.60 ms  AS4837  China, ChinaUnicom
</span></span><span class="line"><span class="cl"> <span class="m">9</span>  219.158.113.105  150.10 ms  AS4837  China, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="m">10</span>  219.158.113.198  152.19 ms  AS4837  China, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="m">11</span>  219.158.45.170  176.12 ms  AS4837  China, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="m">12</span>  *
</span></span><span class="line"><span class="cl"><span class="m">13</span>  221.176.17.178  244.28 ms  AS9808  China, ChinaMobile
</span></span><span class="line"><span class="cl"><span class="m">14</span>  *
</span></span><span class="line"><span class="cl"><span class="m">15</span>  *
</span></span><span class="line"><span class="cl"><span class="m">16</span>  *
</span></span><span class="line"><span class="cl"><span class="m">17</span>  *
</span></span><span class="line"><span class="cl"><span class="m">18</span>  *
</span></span><span class="line"><span class="cl"><span class="m">19</span>  *
</span></span><span class="line"><span class="cl"><span class="m">20</span>  *
</span></span><span class="line"><span class="cl"><span class="m">21</span>  *
</span></span><span class="line"><span class="cl"><span class="m">22</span>  *
</span></span><span class="line"><span class="cl"><span class="m">23</span>  *
</span></span><span class="line"><span class="cl"><span class="m">24</span>  *
</span></span><span class="line"><span class="cl"><span class="m">25</span>  *
</span></span><span class="line"><span class="cl"><span class="m">26</span>  *
</span></span><span class="line"><span class="cl"><span class="m">27</span>  *
</span></span><span class="line"><span class="cl"><span class="m">28</span>  *
</span></span><span class="line"><span class="cl"><span class="m">29</span>  *
</span></span><span class="line"><span class="cl"><span class="m">30</span>  *
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Traceroute to China, Guangzhou CU <span class="o">(</span>TCP Mode, Max <span class="m">30</span> Hop<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">============================================================</span>
</span></span><span class="line"><span class="cl">traceroute to 210.21.4.130 <span class="o">(</span>210.21.4.130<span class="o">)</span>, <span class="m">30</span> hops max, <span class="m">32</span> byte packets
</span></span><span class="line"><span class="cl"> <span class="m">1</span>  198.16.50.145  0.53 ms  AS40065  United States, California, Los Angeles, ceranetworks.com
</span></span><span class="line"><span class="cl"> <span class="m">2</span>  23.224.21.60  0.30 ms  AS40065  United States, California, Los Angeles, ceranetworks.com
</span></span><span class="line"><span class="cl"> <span class="m">3</span>  192.168.101.201  0.53 ms  *  LAN Address
</span></span><span class="line"><span class="cl"> <span class="m">4</span>  192.168.101.62  0.58 ms  *  LAN Address
</span></span><span class="line"><span class="cl"> <span class="m">5</span>  *
</span></span><span class="line"><span class="cl"> <span class="m">6</span>  23.225.225.65  175.28 ms  AS40065  United States, California, Los Angeles, ceranetworks.com
</span></span><span class="line"><span class="cl"> <span class="m">7</span>  219.158.102.109  160.56 ms  AS4837  China, ChinaUnicom
</span></span><span class="line"><span class="cl"> <span class="m">8</span>  219.158.19.74  174.02 ms  AS4837  China, ChinaUnicom
</span></span><span class="line"><span class="cl"> <span class="m">9</span>  219.158.19.81  164.51 ms  AS4837  China, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="m">10</span>  *
</span></span><span class="line"><span class="cl"><span class="m">11</span>  112.89.0.58  208.55 ms  AS17816  China, Guangdong, Guangzhou, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="m">12</span>  120.80.170.254  192.45 ms  AS17622  China, Guangdong, Guangzhou, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="m">13</span>  *
</span></span><span class="line"><span class="cl"><span class="m">14</span>  *
</span></span><span class="line"><span class="cl"><span class="m">15</span>  *
</span></span><span class="line"><span class="cl"><span class="m">16</span>  *
</span></span><span class="line"><span class="cl"><span class="m">17</span>  *
</span></span><span class="line"><span class="cl"><span class="m">18</span>  *
</span></span><span class="line"><span class="cl"><span class="m">19</span>  *
</span></span><span class="line"><span class="cl"><span class="m">20</span>  *
</span></span><span class="line"><span class="cl"><span class="m">21</span>  *
</span></span><span class="line"><span class="cl"><span class="m">22</span>  *
</span></span><span class="line"><span class="cl"><span class="m">23</span>  *
</span></span><span class="line"><span class="cl"><span class="m">24</span>  *
</span></span><span class="line"><span class="cl"><span class="m">25</span>  *
</span></span><span class="line"><span class="cl"><span class="m">26</span>  *
</span></span><span class="line"><span class="cl"><span class="m">27</span>  *
</span></span><span class="line"><span class="cl"><span class="m">28</span>  *
</span></span><span class="line"><span class="cl"><span class="m">29</span>  *
</span></span><span class="line"><span class="cl"><span class="m">30</span>  *
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Traceroute to China, Guangzhou CT <span class="o">(</span>TCP Mode, Max <span class="m">30</span> Hop<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="o">============================================================</span>
</span></span><span class="line"><span class="cl">traceroute to 113.108.209.1 <span class="o">(</span>113.108.209.1<span class="o">)</span>, <span class="m">30</span> hops max, <span class="m">32</span> byte packets
</span></span><span class="line"><span class="cl"> <span class="m">1</span>  198.16.50.145  0.47 ms  AS40065  United States, California, Los Angeles, ceranetworks.com
</span></span><span class="line"><span class="cl"> <span class="m">2</span>  *
</span></span><span class="line"><span class="cl"> <span class="m">3</span>  192.168.101.201  0.76 ms  *  LAN Address
</span></span><span class="line"><span class="cl"> <span class="m">4</span>  192.168.101.62  0.58 ms  *  LAN Address
</span></span><span class="line"><span class="cl"> <span class="m">5</span>  *
</span></span><span class="line"><span class="cl"> <span class="m">6</span>  23.225.225.65  176.60 ms  AS40065  United States, California, Los Angeles, ceranetworks.com
</span></span><span class="line"><span class="cl"> <span class="m">7</span>  219.158.116.237  140.09 ms  AS4837  China, ChinaUnicom
</span></span><span class="line"><span class="cl"> <span class="m">8</span>  219.158.113.142  139.89 ms  AS4837  China, ChinaUnicom
</span></span><span class="line"><span class="cl"> <span class="m">9</span>  219.158.113.101  152.37 ms  AS4837  China, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="m">10</span>  219.158.107.30  185.44 ms  AS4837  China, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="m">11</span>  219.158.24.14  174.48 ms  AS4837  China, ChinaUnicom
</span></span><span class="line"><span class="cl"><span class="m">12</span>  202.97.17.157  169.23 ms  AS4134  China, ChinaTelecom
</span></span><span class="line"><span class="cl"><span class="m">13</span>  *
</span></span><span class="line"><span class="cl"><span class="m">14</span>  *
</span></span><span class="line"><span class="cl"><span class="m">15</span>  113.108.209.1  168.98 ms  AS58466  China, Guangdong, Guangzhou, ChinaTelecom
</span></span></code></pre></div><h3 id="流媒体解锁">流媒体解锁</h3>
<p>不解锁流媒体，但根据脚本貌似HBO和Disney可以看</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"> ** 正在测试IPv4解锁情况
</span></span><span class="line"><span class="cl"> HBO Now:                               Yes
</span></span><span class="line"><span class="cl"> Bahamut Anime:                         No
</span></span><span class="line"><span class="cl"> Abema.TV:                              No
</span></span><span class="line"><span class="cl"> Princess Connect Re:Dive Japan:        Yes
</span></span><span class="line"><span class="cl"> BBC:                                   No
</span></span><span class="line"><span class="cl"> BiliBili China Mainland Only:          No
</span></span><span class="line"><span class="cl"> BiliBili HongKong/Macau/Taiwan:        No
</span></span><span class="line"><span class="cl"> Bilibili Taiwan Only:                  No
</span></span><span class="line"><span class="cl"> Netflix:                               Only Homemade
</span></span><span class="line"><span class="cl"> YouTube Region:                        No
</span></span><span class="line"><span class="cl"> DisneyPlus:                            Yes
</span></span></code></pre></div><h2 id="玩法">玩法</h2>
<p>速度与延迟均优秀，直连使用就很舒适了。与其他的多家美西服务器做过比较，4837的延迟是最低的，其他同地区服务器到大陆延迟比cera高几十ms。中转的话用国内大带宽联通即可。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Misaka/ZeptoVM 堪萨斯VPS测评</title>
      <link>https://blog.kanikig.xyz/Misaka%E5%A0%AA%E8%90%A8%E6%96%AFVPS%E6%B5%8B%E8%AF%84/</link>
      <pubDate>Tue, 02 Feb 2021 23:18:54 +0000</pubDate>
      
      <guid>https://blog.kanikig.xyz/Misaka%E5%A0%AA%E8%90%A8%E6%96%AFVPS%E6%B5%8B%E8%AF%84/</guid>
      <description>商家简介 Misaka（即ZeptoVM）是成立于2017年的国人商家，技术实力强劲，拥有自己的AS号（大部分国人商家是下游分销，不具备AS）</description>
      <content:encoded><![CDATA[<h2 id="商家简介">商家简介</h2>
<p>Misaka（即ZeptoVM）是成立于2017年的国人商家，技术实力强劲，拥有自己的AS号（大部分国人商家是下游分销，不具备AS）！主营俄罗斯圣彼得堡CN2及美国的VPS。</p>
<p>官网：www.misaka.io</p>
<h2 id="套餐">套餐</h2>
<p>这次的Kansas有两款套餐，价格都不高：</p>
<p><strong>T2-512M</strong>
1 vCores
512 MB Memory
10 GB SSD
512 GB Transfer Data
2.5Gbps Port Speed
Location: Kansas City, MO
$14.24 /yr
<a href="https://app.misaka.io/iaas/vm/create/mci01/t2-512m"><strong>点击购买</strong></a></p>
<p><strong>T2-1G</strong>
2 vCores
1 GB Memory
20 GB SSD
1 TB Transfer Data
10Gbps Port Speed
Location: Kansas City, MO
$23.75 /yr
<a href="https://www.misaka.io/pricing/mc2/mci01"><strong>点击购买</strong></a></p>
<p>Test IP: 170.39.225.130</p>
<p>TOS/AUP 服务条款（购买前请先查看）</p>
<p><a href="https://www.misaka.io/legal/tos">https://www.misaka.io/legal/tos</a></p>
<p>流量均为单向计算，带宽很足，个人使用的话买小流量即可。</p>
<blockquote>
<p>**注意！！**若要使用支付宝支付，注册时务必选择中国，填大陆手机号！</p>
</blockquote>
<h2 id="测评">测评</h2>
<p>测试使用的是T2-1G款。</p>
<h3 id="lemonbench">LemonBench</h3>
<h4 id="系统信息">系统信息</h4>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">-&gt; System Information
</span></span><span class="line"><span class="cl"> 
</span></span><span class="line"><span class="cl"> OS Release:		CentOS Linux 7.9.2009 <span class="o">(</span>x86_64<span class="o">)</span>
</span></span><span class="line"><span class="cl"> CPU Model:		Intel Xeon Processor <span class="o">(</span>Skylake, IBRS<span class="o">)</span>  2.50 GHz
</span></span><span class="line"><span class="cl"> CPU Cache Size:	<span class="m">16384</span> KB
</span></span><span class="line"><span class="cl"> CPU Number:		<span class="m">2</span> vCPU
</span></span><span class="line"><span class="cl"> Virt Type:		KVM
</span></span><span class="line"><span class="cl"> Memory Usage:		579.86 MB / 967.45 MB
</span></span><span class="line"><span class="cl"> Swap Usage:		<span class="o">[</span> No Swapfile / Swap partition <span class="o">]</span>
</span></span><span class="line"><span class="cl"> Disk Usage:		11.67 GB / 19.63 GB
</span></span><span class="line"><span class="cl"> Boot Device:		/dev/vda1
</span></span><span class="line"><span class="cl"> Load <span class="o">(</span>1/5/15min<span class="o">)</span>:	0.14 0.10 0.04 
</span></span><span class="line"><span class="cl"> CPU Usage:		0.0% used, 0.0% iowait, 0.0% steal
</span></span><span class="line"><span class="cl"> Kernel Version:	5.9.6
</span></span><span class="line"><span class="cl"> Network CC Method:	bbr + fq_pie
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> -&gt; Network Information
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> IPV4 - IP Address:	<span class="o">[</span>US<span class="o">]</span> 170.39.225.*
</span></span><span class="line"><span class="cl"> IPV4 - ASN Info:	null <span class="o">(</span>null<span class="o">)</span>
</span></span><span class="line"><span class="cl"> IPV4 - Region:		United States Missouri Kansas City
</span></span></code></pre></div><h4 id="性能">性能</h4>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"> -&gt; CPU Performance Test <span class="o">(</span>Fast Mode, 1-Pass @ 5sec<span class="o">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="m">1</span> Thread Test:			<span class="m">824</span> Scores
</span></span><span class="line"><span class="cl"> <span class="m">2</span> Threads Test:		<span class="m">1609</span> Scores
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> -&gt; Memory Performance Test <span class="o">(</span>Fast Mode, 1-Pass @ 5sec<span class="o">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="m">1</span> Thread - Read Test :		18876.43 MB/s
</span></span><span class="line"><span class="cl"> <span class="m">1</span> Thread - Write Test:		13487.62 MB/s
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> -&gt; Disk Speed Test <span class="o">(</span>4K Block/1M Block, Direct Mode<span class="o">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> Test Name		Write Speed				Read Speed
</span></span><span class="line"><span class="cl"> 100MB-4K Block		45.3 MB/s <span class="o">(</span>0.09 IOPS, 2.32 s<span class="o">)</span>		86.5 MB/秒 <span class="o">(</span><span class="m">21108</span> IOPS, 1.21 s<span class="o">)</span>
</span></span><span class="line"><span class="cl"> 1GB-1M Block		<span class="m">537</span> MB/s <span class="o">(</span><span class="m">512</span> IOPS, 1.95 s<span class="o">)</span>		<span class="m">298</span> MB/秒 <span class="o">(</span><span class="m">284</span> IOPS, 3.52 s<span class="o">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> -&gt; Speedtest.net Network Speed Test
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> Node Name			Upload Speed	Download Speed	Ping Latency	Server Name
</span></span><span class="line"><span class="cl"> Speedtest Default		1058.63 MB/s	874.12 MB/s	0.31 ms		Nocix <span class="o">(</span>United States Kansas City, MO<span class="o">)</span>
</span></span><span class="line"><span class="cl"> China, Beijing CU  		Fail: Latency <span class="nb">test</span> failed <span class="k">for</span> both TCP, and no HTTP URL available.
</span></span><span class="line"><span class="cl"> China, Shanghai CT 		1.59 MB/s	322.33 MB/s	170.58 ms	China Telecom <span class="o">(</span>China Shanghai<span class="o">)</span>
</span></span><span class="line"><span class="cl"> China, Hangzhou CM 		Fail: Timeout Exceeded after <span class="m">60</span> seconds
</span></span></code></pre></div><h3 id="speedtest">Speedtest</h3>
<p>本地速度表现惊人：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">Retrieving speedtest.net configuration...
</span></span><span class="line"><span class="cl">Testing from Misaka Network, Inc. <span class="o">(</span>170.39.225.*<span class="o">)</span>...
</span></span><span class="line"><span class="cl">Retrieving speedtest.net server list...
</span></span><span class="line"><span class="cl">Selecting best server based on ping...
</span></span><span class="line"><span class="cl">Hosted by Unite Private Networks <span class="o">(</span>Kansas City, MO<span class="o">)</span> <span class="o">[</span>5.48 km<span class="o">]</span>: 1.331 ms
</span></span><span class="line"><span class="cl">Testing download speed................................................................................
</span></span><span class="line"><span class="cl">Download: 3426.48 Mbit/s
</span></span><span class="line"><span class="cl">Testing upload speed................................................................................................
</span></span><span class="line"><span class="cl">Upload: 2005.30 Mbit/s
</span></span></code></pre></div><h3 id="superspeed">superspeed</h3>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2021/03/15/iShot2021-03-15-21.06.22.png" alt="iShot2021-03-15 21.06.22"  /></p>
<h3 id="traceroute">TraceRoute</h3>
<p>到大陆线路稀烂，故这里不列举了。。具体看完整的report ↓</p>
<p>Lemonbench：<a href="https://paste.ubuntu.com/p/DxbRQgXz9q/">Ubuntu Pastebin</a></p>
<h3 id="流媒体解锁">流媒体解锁</h3>
<p>实测解锁Netflix、HBO now、Disney+ 等所有美国原生流媒体！</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"> ** 正在测试IPv4解锁情况
</span></span><span class="line"><span class="cl"> HBO Now:                               Yes
</span></span><span class="line"><span class="cl"> Bahamut Anime:                         No
</span></span><span class="line"><span class="cl"> Abema.TV:                              No
</span></span><span class="line"><span class="cl"> Princess Connect Re:Dive Japan:        Yes
</span></span><span class="line"><span class="cl"> BBC:                                   No
</span></span><span class="line"><span class="cl"> BiliBili China Mainland Only:          No
</span></span><span class="line"><span class="cl"> BiliBili HongKong/Macau/Taiwan:        No
</span></span><span class="line"><span class="cl"> Bilibili Taiwan Only:                  No
</span></span><span class="line"><span class="cl"> Netflix:                               Yes<span class="o">(</span>Region: US<span class="o">)</span>
</span></span><span class="line"><span class="cl"> YouTube Region:                        No
</span></span><span class="line"><span class="cl"> DisneyPlus:                            Yes
</span></span></code></pre></div><h2 id="玩法">玩法</h2>
<p>比较建议用来当下载机和解锁机，少见的美国原生，作为小鸡来说带宽大的离谱，而且能全天跑满。</p>
<p>如果要用来当落地机，鉴于到国内线路实在太差，可以使用香港或日本中转，再用国内中转机器转发，有不错的效果。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Python全栈学习笔记</title>
      <link>https://blog.kanikig.xyz/Python%E5%85%A8%E6%A0%88%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/</link>
      <pubDate>Tue, 02 Feb 2021 15:34:12 +0000</pubDate>
      
      <guid>https://blog.kanikig.xyz/Python%E5%85%A8%E6%A0%88%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/</guid>
      <description>课程介绍 阶段一：基础到高级 三个项目 ATM+购物车：面向过程 选课系统：面向对象 计算机病毒：程序、服务端、客户端 阶段二：商业项目 BBS 路飞学城 微信小</description>
      <content:encoded><![CDATA[<h2 id="课程介绍">课程介绍</h2>
<h3 id="阶段一基础到高级">阶段一：基础到高级</h3>
<p>三个项目</p>
<ul>
<li>ATM+购物车：面向过程</li>
<li>选课系统：面向对象</li>
<li>计算机病毒：程序、服务端、客户端</li>
</ul>
<h3 id="阶段二商业项目">阶段二：商业项目</h3>
<ul>
<li>BBS</li>
<li>路飞学城</li>
<li>微信小程序</li>
<li>爬虫</li>
<li>数据分析：金融量化交易</li>
<li>自动化运维：cmdb、代码发布</li>
<li>GO语言开发</li>
<li>人工智能方向</li>
</ul>
<h2 id="计算机">计算机</h2>
<h3 id="计算机五大组成">计算机五大组成</h3>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2021/02/04/dcc451da81cb39dbf8fed5fad5160924ab18305b.jpg" alt="dcc451da81cb39dbf8fed5fad5160924ab18305b.jpg"  /></p>
<ul>
<li>CPU中央处理器
<ul>
<li>控制器：控制所有其他组件</li>
<li>运算器：数学运算与逻辑运算</li>
</ul>
</li>
<li>存储器io设备：数据存取
<ul>
<li>内存：基于电，断电丢失数据，用于临时存取</li>
<li>外存：硬盘，基于磁，存取慢，永久保存</li>
</ul>
</li>
<li>输入设备：键盘鼠标</li>
<li>输出设备：显示器打印机</li>
</ul>
<h3 id="操作系统">操作系统</h3>
<h4 id="概念">概念</h4>
<ul>
<li>控制计算机硬件</li>
<li>硬件的复杂操作封装</li>
</ul>
<p>软件</p>
<ul>
<li>应用软件</li>
<li>系统软件</li>
</ul>
<h4 id="计算机体系三层结构">计算机体系三层结构</h4>
<ul>
<li>应用程序</li>
<li>操作系统</li>
<li>计算机硬件</li>
</ul>
<h4 id="平台与跨平台">平台与跨平台</h4>
<p>平台：</p>
<ul>
<li>操作系统</li>
<li>计算机硬件</li>
</ul>
<h3 id="其他">其他</h3>
<h4 id="程序与三大核心硬件">程序与三大核心硬件</h4>
<p>程序:硬盘-&gt;内存</p>
<p>cpu从内存读取指令执行</p>
<h4 id="cpu详解">cpu详解</h4>
<h5 id="cpu分类与指令集">cpu分类与指令集</h5>
<ul>
<li>X86-32bit：intel</li>
<li>x86-64bit：AMD</li>
</ul>
<p><em>指令集</em>，就是CPU中用来计算和控制计算机系统的一套指令的集合</p>
<ul>
<li>精简指令集RISC：指令短，稳定</li>
<li>复杂指令集CISC：指令长，丰富</li>
</ul>
<h5 id="x86-64">X86-64</h5>
<ul>
<li>
<p>x86：intel发明世界第一个cpu8086，故将这种架构型号统称为x86。</p>
</li>
<li>
<p>64位：cpu能一次性从内存中取出多少位二进制指令。</p>
</li>
</ul>
<p>cpu有向下兼容性。</p>
<h5 id="寄存器">寄存器</h5>
<p>和cpu同材质，速度比内存快。存cpu要用的关键数据，提升CPU取数据的速度。</p>
<h5 id="内核态与用户态">内核态与用户态</h5>
<p>两种程序</p>
<ul>
<li>操作系统：内核态，调用控制硬件的指令集与运算指令集</li>
<li>应用程序：用户态，只调用运算相关指令集</li>
</ul>
<p>故两种状态频繁切换。</p>
<h5 id="多线程与多核芯片">多线程与多核芯片</h5>
<p>moore定律。</p>
<p>单核双线程，即一个cpu干两个cpu的工作，伪并行，假双核。</p>
<p>4核8线程：每个cpu2线程。</p>
<ul>
<li>intel：所有核调用一个L2缓存</li>
<li>AMD：每个核分配单独L2缓存</li>
</ul>
<h4 id="存储器io相关">存储器io相关</h4>
<ul>
<li>寄存器L1：32位32x32，64位64x64</li>
<li>高速缓存L2：cpu先在高速缓存找，高速缓存命中，未命中再找内存</li>
<li>内存</li>
<li>磁盘</li>
<li>磁带</li>
</ul>
<p>速度快-慢</p>
<h5 id="ram">RAM</h5>
<p>随机存取存储器</p>
<h5 id="rom">ROM</h5>
<p>只读内存，速度和内存一样。故一般用于出厂关键程序存储，例如BIOS</p>
<h5 id="cmos">CMOS</h5>
<p>也是易失性。速度慢。耗电极低。主板有个主板电池，给时钟芯片供电，计算后存到cmos</p>
<h5 id="磁盘结构">磁盘结构</h5>
<p><a href="https://pic.kanikig.xyz/image/YKcR">
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2021/02/04/v2-dc762f4e4037b261d0134171213c94a0_1440w.jpg" alt="v2-dc762f4e4037b261d0134171213c94a0_1440w.jpg"  /></a></p>
<p>硬盘：</p>
<ul>
<li>机械硬盘，即磁盘，依赖于机械转动。
<ul>
<li>磁道：一圈数据 bit（二进制位）-Byte（字节）-kB，实际上硬盘厂商是按1000记位</li>
<li>扇区：512字节，即硬盘一次性读写最小单位。操作系统一次读取一个block，即8个扇区=4096字节</li>
<li>柱面：相同半径的磁道叠在一起形成虚拟柱面</li>
<li>分区：即两个柱面之间的部分</li>
</ul>
</li>
<li>固态硬盘</li>
</ul>
<h5 id="io延迟">IO延迟</h5>
<p>硬盘读写速度很快，慢是在找数据的时间。</p>
<ul>
<li>平均寻道时间</li>
<li>平均延迟时间：最低为硬盘转半圈的时间</li>
</ul>
<p>io延迟为以上两者之和。</p>
<p>优化程序核心方法就是减少从硬盘读写，尽量从内存。</p>
<h5 id="虚拟内存swap">虚拟内存swap</h5>
<p>物理内存不足时在磁盘上划取。会带来io延迟。</p>
<h5 id="io设备">IO设备</h5>
<p>包含</p>
<ul>
<li>设备控制：驱动程序</li>
<li>设备本身</li>
</ul>
<h4 id="总线">总线</h4>
<p>连接主板上各组件交互。</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2021/02/04/t01696027505b77ec8c.jpg" alt="t01696027505b77ec8c.jpg"  /></p>
<ul>
<li>PCI桥：北桥，连接高速设备</li>
<li>ISA桥：南桥，连接慢速设备</li>
</ul>
<h4 id="操作系统启动流程">操作系统启动流程</h4>
<p>BIOS:  Basic Input Output System，出厂被写入ROM设备。</p>
<p>启动流程：</p>
<ol>
<li>计算机加电</li>
<li>BIOS运行监测硬件正常</li>
<li>BIOS读取CMOS存储器的参数，选择启动设备</li>
<li>从启动设备上读取第一个扇区的内容（MBR主引导记录512字节，前446位引导信息，后64为分区信息，最后两个为标志位）</li>
<li>根据分区信息读入BootLoader启动装载模块，启动操作系统</li>
<li>操作系统询问BIOS获得配置信息，加载驱动。</li>
</ol>
<h2 id="python入门">Python入门</h2>
<h3 id="编程语言介绍">编程语言介绍</h3>
<ol>
<li>机器语言</li>
<li>汇编语言</li>
<li>高级语言
<ol>
<li>编译型：c-&gt;gcc编译器-&gt;机器语言，执行效率高</li>
<li>解释型：py-&gt;字节码-&gt;解释器（一行一行）-&gt;机器，跨平台性强</li>
</ol>
</li>
</ol>
<h3 id="python介绍">python介绍</h3>
<ul>
<li>解释型</li>
<li>语法风格：PEP8规范</li>
</ul>
<h3 id="解释器">解释器</h3>
<p>解释器可以用任意语言写，CPython，Jpython。</p>
<p>2.6-2008</p>
<p>2.7-2010 后推出的过渡版本</p>
<p>3.0-2008</p>
<p>3.1-2009</p>
<p>3.2-2011</p>
<h3 id="运行python程序的两种方式">运行python程序的两种方式</h3>
<ul>
<li>交互式</li>
<li>脚本</li>
</ul>
<h3 id="程序运行三步骤">程序运行三步骤</h3>
<ol>
<li>启动解释器</li>
<li>解释器读取py进内存</li>
<li>解释器解释执行</li>
</ol>
<h2 id="变量与基本数据类型">变量与基本数据类型</h2>
<h3 id="变量">变量</h3>
<h4 id="三大组成部分">三大组成部分</h4>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">变量名</span> <span class="n">赋值符号</span> <span class="n">变量名</span>
</span></span></code></pre></div><h4 id="变量名">变量名</h4>
<p>推荐小写加下划线</p>
<h4 id="变量值三个特征">变量值三个特征</h4>
<ul>
<li>id：变量值的内存地址</li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="nb">id</span><span class="p">()</span>
</span></span></code></pre></div><ul>
<li>type</li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="nb">type</span><span class="p">()</span>
</span></span></code></pre></div><ul>
<li>value</li>
</ul>
<h4 id="可变与不可变类型">可变与不可变类型</h4>
<ul>
<li>可变类型：改value，内存地址id不变
<ul>
<li>set</li>
<li>list</li>
<li>dict</li>
</ul>
</li>
<li>不可变：改value，id也变
<ul>
<li>number</li>
<li>bool</li>
<li>string</li>
<li>tuple</li>
</ul>
</li>
</ul>
<h4 id="is与">is与==</h4>
<ul>
<li>is比较的是左右变量的内存地址是否相同</li>
<li>==比较变量值</li>
</ul>
<h4 id="小整数对象池">小整数对象池</h4>
<p>从解释器启动会在内存中事先申请一系列内存空间存放常用整数（-5, 256)</p>
<p>IDE的小整数池会更大。</p>
<h3 id="常量">常量</h3>
<p>python语法没有常量概念！</p>
<p>全大写代表常量，只是一种规范写法，实际还是变量。</p>
<h3 id="基本数据类型">基本数据类型</h3>
<h4 id="字符串">字符串</h4>
<p>单、双、三引号定义均可，嵌套时单双应相反，或转义</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="s1">&#39;-&#39;</span> <span class="o">*</span> <span class="mi">10</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="c1"># -----------</span>
</span></span></code></pre></div><h4 id="列表">列表</h4>
<p>内存中存的是值的内存地址，不存值！</p>
<p>如果list2 = list1，即两者指向同一个堆，改变值，两个都会改。</p>
<p><strong>深浅拷贝</strong>：</p>
<ul>
<li>浅拷贝：将列表第一层内存地址拷贝，但若有可变类型，还是会连在一起</li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">list2</span> <span class="o">=</span> <span class="n">list1</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
</span></span></code></pre></div><ul>
<li>深拷贝：完全独立拷贝一份，不可变类型id不变，可变类型id改变</li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">copy</span>
</span></span><span class="line"><span class="cl"><span class="n">list3</span> <span class="o">=</span> <span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="n">list1</span><span class="p">)</span>
</span></span></code></pre></div><h4 id="字典">字典</h4>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">a</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;key&#34;</span><span class="p">:</span><span class="s2">&#34;value&#34;</span>
</span></span><span class="line"><span class="cl">	<span class="s2">&#34;1&#34;</span><span class="p">:</span><span class="mi">1</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;2&#34;</span><span class="p">:</span><span class="s2">&#34;qwe&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><h3 id="垃圾回收机制gc">垃圾回收机制GC</h3>
<h4 id="引用计数">引用计数</h4>
<p>垃圾：变量值没有绑定变量名</p>
<p>引用计数：绑定某值的变量个数，python会清除计数为0的值</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">del</span> <span class="n">x</span>	<span class="c1"># 解除变量与值的绑定</span>
</span></span></code></pre></div><p>直接引用，间接引用</p>
<h4 id="标记清除">标记清除</h4>
<p>循环引用问题，可能导致内存泄漏</p>
<p>内存栈区存变量名，堆区存值</p>
<h4 id="分代回收">分代回收</h4>
<p>多次扫描都没有被回收的变量，会认为是常用变量，对他的扫描频率会降低</p>
<h3 id="用户交互">用户交互</h3>
<h4 id="输入">输入</h4>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="nb">input</span><span class="p">()</span> <span class="c1"># 存为str</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># python2</span>
</span></span><span class="line"><span class="cl"><span class="n">raw_input</span><span class="p">()</span>	<span class="c1"># 存为str</span>
</span></span><span class="line"><span class="cl"><span class="nb">input</span><span class="p">()</span>	<span class="c1"># 要求用户输入明确数据类型，输入的是什么类型就为什么类型</span>
</span></span></code></pre></div><h4 id="格式化输出">格式化输出</h4>
<ul>
<li>%格式化输出</li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="s2">&#34;name: </span><span class="si">%(name)s</span><span class="s2">, age:</span><span class="si">%(age)d</span><span class="s2">&#34;</span> <span class="o">%</span> <span class="p">{</span><span class="s2">&#34;name&#34;</span><span class="p">:</span> <span class="s2">&#34;a&#34;</span><span class="p">,</span> <span class="s2">&#34;age&#34;</span><span class="p">:</span> <span class="mi">10</span><span class="p">})</span>
</span></span><span class="line"><span class="cl"><span class="c1"># %s可以接受任何类型</span>
</span></span></code></pre></div><ul>
<li>str.format</li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="s2">&#34;name: </span><span class="si">{name}</span><span class="s2">, age:</span><span class="si">{age}</span><span class="s2">&#34;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">name</span> <span class="o">=</span> <span class="s2">&#34;a&#34;</span><span class="p">,</span> <span class="n">age</span> <span class="o">=</span> <span class="mi">10</span><span class="p">))</span>
</span></span></code></pre></div><ul>
<li>f</li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;name: </span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">, age:</span><span class="si">{</span><span class="n">age</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span></code></pre></div><h2 id="基本运算符">基本运算符</h2>
<h3 id="算数运算符">算数运算符</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="mi">10</span> <span class="o">//</span> <span class="mi">3</span>	<span class="c1">#只保留整数部分，即整除</span>
</span></span><span class="line"><span class="cl"><span class="mi">3</span> <span class="o">**</span> <span class="mi">10</span>	<span class="c1">#指数</span>
</span></span><span class="line"><span class="cl"><span class="mi">10</span> <span class="o">%</span> <span class="mi">3</span> <span class="c1">#取余数</span>
</span></span></code></pre></div><h3 id="比较运算符">比较运算符</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="mi">1</span> <span class="o">!=</span> <span class="mi">2</span>
</span></span><span class="line"><span class="cl"><span class="mi">1</span> <span class="o">&lt;</span> <span class="n">x</span> <span class="o">&lt;</span> <span class="mi">3</span>
</span></span></code></pre></div><h3 id="赋值运算符">赋值运算符</h3>
<ul>
<li>变量赋值</li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">a</span> <span class="o">=</span> <span class="mi">1</span>
</span></span></code></pre></div><ul>
<li>增量赋值</li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"> <span class="n">a</span> <span class="o">+=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl"> <span class="n">b</span> <span class="o">*=</span> <span class="mi">1</span>
</span></span></code></pre></div><ul>
<li>链式赋值</li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">z</span> <span class="o">=</span> <span class="n">y</span> <span class="o">=</span> <span class="n">x</span> <span class="o">=</span> <span class="mi">10</span> 
</span></span></code></pre></div><ul>
<li>交叉赋值</li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="n">m</span><span class="p">,</span> <span class="n">n</span> <span class="o">=</span> <span class="n">n</span><span class="p">,</span> <span class="n">m</span>
</span></span></code></pre></div><ul>
<li>解压赋值</li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="nb">list</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">,</span> <span class="n">d</span> <span class="o">=</span> <span class="nb">list</span>
</span></span><span class="line"><span class="cl"><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="o">*</span><span class="n">_</span> <span class="o">=</span> <span class="nb">list</span>	<span class="c1">#取前两个</span>
</span></span><span class="line"><span class="cl"><span class="o">*</span><span class="n">_</span> <span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="nb">list</span>	<span class="c1">#取后两个</span>
</span></span><span class="line"><span class="cl"><span class="c1"># 字典解压取值的是key</span>
</span></span></code></pre></div><h3 id="逻辑运算符">逻辑运算符</h3>
<p>隐式布尔：所有值，除了0，None， False，Null，空值 都是True</p>
<p>优先级 not&gt;and&gt;or</p>
<p><strong>短路运算</strong>：从左至右读取条件，连续and有一个false就不再往右读，并返回该位置的值</p>
<h3 id="成员运算符-in">成员运算符 in</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="s2">&#34;a&#34;</span> <span class="ow">in</span> <span class="s2">&#34;abc&#34;</span>
</span></span><span class="line"><span class="cl"><span class="mi">1</span> <span class="ow">in</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">]</span>
</span></span></code></pre></div><h3 id="身份运算符-is">身份运算符 is</h3>
<h2 id="流程控制">流程控制</h2>
<h3 id="if">if</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">if</span> <span class="mi">16</span> <span class="o">&lt;</span> <span class="n">a</span> <span class="o">&lt;</span> <span class="mi">20</span><span class="p">:</span>
</span></span></code></pre></div><p>elif 条件从上到下，上面的不满足才进下一个条件</p>
<h3 id="while">while</h3>
<p>条件循环</p>
<h4 id="whileelse">while+else</h4>
<p>循环正常结束，没有被break，运行else</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">	<span class="o">...</span>
</span></span><span class="line"><span class="cl"><span class="k">else</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">	<span class="o">...</span>
</span></span></code></pre></div><h3 id="for">for</h3>
<p>迭代循环</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">for</span> <span class="n">variable</span> <span class="ow">in</span> <span class="n">Iterable</span> <span class="nb">object</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">	<span class="o">...</span>
</span></span><span class="line"><span class="cl">  
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">100</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">	<span class="o">...</span>
</span></span><span class="line"><span class="cl">  
</span></span></code></pre></div><h4 id="forelse">for+else</h4>
<h4 id="range">range</h4>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># py2</span>
</span></span><span class="line"><span class="cl"><span class="o">&gt;&gt;&gt;</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="c1">#py3 优化</span>
</span></span><span class="line"><span class="cl"><span class="o">&gt;&gt;&gt;</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">5</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">5</span><span class="p">)</span>
</span></span></code></pre></div><h4 id="print">print</h4>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="s2">&#34;hello&#34;</span><span class="p">,</span> <span class="n">end</span><span class="o">=</span><span class="s2">&#34;*&#34;</span><span class="p">)</span>	<span class="c1"># 自定义结束，默认为换行</span>
</span></span></code></pre></div><h2 id="基本数据类型及内置方法">基本数据类型及内置方法</h2>
<h3 id="数字类型">数字类型</h3>
<h4 id="int">int</h4>
<p>python3没有long长整型了</p>
<pre tabindex="0"><code>int(&#39;10&#39;)
bin(11) # 0b1011  0b开头即二进制
oct(11) # 0o13	8进制
hex(11)	# 0xb	16进制
int(int(&#39;0b1011&#39;, 2))	# 二进制转10进制
</code></pre><h4 id="float">float</h4>
<pre tabindex="0"><code>float(&#39;11&#39;)
</code></pre><h4 id="虚数">虚数</h4>
<pre tabindex="0"><code>x = 10 + 2j
x.real	#10
x.imag	#2
</code></pre><h3 id="字符串-1">字符串</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># 不可变，是一个整体，不可单独改某个字符</span>
</span></span><span class="line"><span class="cl"><span class="nb">str</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">msg</span> <span class="o">=</span> <span class="s2">&#34;hello&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 切片</span>
</span></span><span class="line"><span class="cl"><span class="n">msg</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="c1"># h</span>
</span></span><span class="line"><span class="cl"><span class="n">msg</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="c1"># o</span>
</span></span><span class="line"><span class="cl"><span class="n">msg</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">5</span><span class="p">]</span> <span class="c1"># hello 顾头不顾尾</span>
</span></span><span class="line"><span class="cl"><span class="n">msg</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">5</span><span class="p">:</span><span class="mi">2</span><span class="p">]</span> <span class="c1"># hlo</span>
</span></span><span class="line"><span class="cl"><span class="n">msg</span><span class="p">[</span><span class="mi">5</span><span class="p">:</span><span class="mi">0</span><span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="c1"># olle</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="s2">&#34;alex&#34;</span> <span class="ow">in</span> <span class="err">”</span><span class="n">alexxxx</span><span class="s2">&#34;	# true</span>
</span></span><span class="line"><span class="cl"><span class="s2">&#34;alex&#34;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="err">”</span><span class="n">alexxxx</span><span class="s2">&#34;	# false</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">msg</span> <span class="o">=</span> <span class="s2">&#34;    eee   &#34;</span>
</span></span><span class="line"><span class="cl"><span class="n">res</span> <span class="o">=</span> <span class="n">msg</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>	<span class="c1"># 默认去除两边空格 字符串不可变，故需要新赋值</span>
</span></span><span class="line"><span class="cl"><span class="n">msg</span> <span class="o">=</span> <span class="s2">&#34;***eee***&#34;</span>
</span></span><span class="line"><span class="cl"><span class="n">res</span> <span class="o">=</span> <span class="n">msg</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="err">“</span><span class="o">*</span><span class="err">”</span><span class="p">)</span>  <span class="c1"># strip只去两边，不去中间</span>
</span></span><span class="line"><span class="cl"><span class="n">res</span> <span class="o">=</span> <span class="n">msg</span><span class="o">.</span><span class="n">lstrip</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="n">res</span> <span class="o">=</span> <span class="n">msg</span><span class="o">.</span><span class="n">rstrip</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 切分：按某字符分割字符串，返回列表</span>
</span></span><span class="line"><span class="cl"><span class="n">res</span> <span class="o">=</span> <span class="n">msg</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&#34;:&#34;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> <span class="c1"># 默认按空格为分隔符 分割次数，从左往右算</span>
</span></span><span class="line"><span class="cl"><span class="n">res</span> <span class="o">=</span> <span class="n">msg</span><span class="o">.</span><span class="n">lsplit</span><span class="p">(</span><span class="s2">&#34;:&#34;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">res</span> <span class="o">=</span> <span class="n">msg</span><span class="o">.</span><span class="n">rsplit</span><span class="p">(</span><span class="s2">&#34;:&#34;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> <span class="c1">#从右往左</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">res2</span> <span class="o">=</span> <span class="s2">&#34;:&#34;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">res</span><span class="p">)</span> <span class="c1"># 以：为分隔符拼接</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">res</span> <span class="o">=</span> <span class="n">msg</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="c1"># 小写</span>
</span></span><span class="line"><span class="cl"><span class="n">res</span> <span class="o">=</span> <span class="n">msg</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="n">res</span> <span class="o">=</span> <span class="n">msg</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&#34;aaa&#34;</span><span class="p">)</span> <span class="c1"># True 以什么开头</span>
</span></span><span class="line"><span class="cl"><span class="n">res</span> <span class="o">=</span> <span class="n">msg</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s2">&#34;aaa&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">res</span> <span class="o">=</span> <span class="n">msg</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&#34;you&#34;</span><span class="p">,</span> <span class="s2">&#34;me&#34;</span> <span class="p">,</span><span class="mi">1</span><span class="p">)</span> <span class="c1">#字符串替换，次数</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="err">“</span><span class="mi">123</span><span class="err">”</span><span class="o">.</span><span class="n">isdigit</span><span class="p">()</span> <span class="c1"># 纯数字</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">msg</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">&#34;e&#34;</span><span class="p">)</span> <span class="c1"># 返回索引，找不到返回-1</span>
</span></span><span class="line"><span class="cl"><span class="n">msg</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="s2">&#34;e&#34;</span><span class="p">)</span> <span class="c1"># 返回索引，找不到程序报错</span>
</span></span><span class="line"><span class="cl"><span class="n">msg</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="s2">&#34;e&#34;</span><span class="p">)</span> <span class="c1"># 数子串出现次数</span>
</span></span><span class="line"><span class="cl"><span class="s2">&#34;分割线&#34;</span><span class="o">.</span><span class="n">center</span><span class="p">(</span><span class="mi">50</span><span class="p">,</span> <span class="s2">&#34;*&#34;</span><span class="p">)</span> <span class="c1">#两侧用*填充</span>
</span></span><span class="line"><span class="cl"><span class="s2">&#34;分割线&#34;</span><span class="o">.</span><span class="n">ljust</span><span class="p">(</span><span class="mi">50</span><span class="p">,</span> <span class="s2">&#34;*&#34;</span><span class="p">)</span> <span class="c1">#右侧填充</span>
</span></span><span class="line"><span class="cl"><span class="s2">&#34;分割线&#34;</span><span class="o">.</span><span class="n">rjust</span><span class="p">(</span><span class="mi">50</span><span class="p">,</span> <span class="s2">&#34;*&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="s2">&#34;分割线&#34;</span><span class="o">.</span><span class="n">zfill</span><span class="p">(</span><span class="mi">50</span><span class="p">)</span> <span class="c1"># 左侧用0填充</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># is 判断系列 查文档</span>
</span></span><span class="line"><span class="cl"><span class="n">isalpha</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="n">isdigit</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="n">isdecimal</span><span class="p">()</span> <span class="c1"># 只识别阿拉伯数字 py3 默认unicode</span>
</span></span><span class="line"><span class="cl"><span class="n">isnumeric</span><span class="p">()</span> <span class="c1"># 可以识别汉字，阿拉伯数字</span>
</span></span></code></pre></div><h3 id="列表-1">列表</h3>
<h3 id="元组">元组</h3>
<h3 id="字典-1">字典</h3>
<h3 id="集合">集合</h3>
]]></content:encoded>
    </item>
    
    <item>
      <title>2021_新的开始</title>
      <link>https://blog.kanikig.xyz/2021-%E6%96%B0%E7%9A%84%E5%BC%80%E5%A7%8B/</link>
      <pubDate>Mon, 18 Jan 2021 18:37:12 +0000</pubDate>
      
      <guid>https://blog.kanikig.xyz/2021-%E6%96%B0%E7%9A%84%E5%BC%80%E5%A7%8B/</guid>
      <description>碎碎念 一年过去，经历了许多。 每当审视过去的自己，总感觉太过浮躁，可能这就是成长的过程吧。 总是没时间写博客，要么是太忙，要么就是没心情，找不到</description>
      <content:encoded><![CDATA[<h2 id="碎碎念">碎碎念</h2>
<p>一年过去，经历了许多。</p>
<p>每当审视过去的自己，总感觉太过浮躁，可能这就是成长的过程吧。</p>
<p>总是没时间写博客，要么是太忙，要么就是没心情，找不到合适的时间，偶尔更新一篇也是给自己看的学习笔记。</p>
<p>希望今年争取多更新几篇文章，写作是一种和自己对话的方式，我已经太久没有好好和自己对话了。</p>
<p><del>域名续费好贵，换了个域名发现不装蒜子的统计就清空了，舍不得之前的几千访客阅读量，还是老老实实续费了</del>🙄</p>
<h2 id="小目标">小目标</h2>
<ul>
<li>闲下来多更新博客</li>
<li>学习一些新东西</li>
</ul>
<h2 id="今年想写的内容">今年想写的内容</h2>
<ul>
<li>VPS测评</li>
<li>番剧、影视、漫画等推荐</li>
<li>各种技术教程</li>
<li>软件推荐</li>
</ul>
]]></content:encoded>
    </item>
    
    <item>
      <title>正则表达式入门</title>
      <link>https://blog.kanikig.xyz/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%85%A5%E9%97%A8/</link>
      <pubDate>Thu, 07 Jan 2021 19:20:31 +0000</pubDate>
      
      <guid>https://blog.kanikig.xyz/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%85%A5%E9%97%A8/</guid>
      <description>参考：https://deerchao.cn/tutorials/regex/regex.htm 正则表达式是什么 正则表达式就是记录文本规则的</description>
      <content:encoded><![CDATA[<blockquote>
<p>参考：https://deerchao.cn/tutorials/regex/regex.htm</p>
</blockquote>
<h2 id="正则表达式是什么">正则表达式是什么</h2>
<p>正则表达式就是记录文本规则的代码。</p>
<h2 id="测试正则表达式">测试正则表达式</h2>
<p>在线测试工具：<a href="https://deerchao.cn/tools/wegester/">wegester</a></p>
<h2 id="元字符">元字符</h2>
<table>
<thead>
<tr>
<th>代码</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>.</td>
<td>匹配除换行符以外的任意字符</td>
</tr>
<tr>
<td>\w</td>
<td>匹配字母或数字或下划线或汉字</td>
</tr>
<tr>
<td>\s</td>
<td>匹配任意的空白符</td>
</tr>
<tr>
<td>\d</td>
<td>匹配数字</td>
</tr>
<tr>
<td>\b</td>
<td>匹配单词的开始或结束</td>
</tr>
<tr>
<td>^</td>
<td>匹配字符串的开始</td>
</tr>
<tr>
<td>$</td>
<td>匹配字符串的结束</td>
</tr>
</tbody>
</table>
<p><strong>例</strong>:</p>
<table>
<thead>
<tr>
<th>查找目标</th>
<th>正则表达式</th>
</tr>
</thead>
<tbody>
<tr>
<td>hi后面不远处跟着一个Lucy</td>
<td>\bhi\b.*\bLucy\b</td>
</tr>
<tr>
<td>以0开头，然后是两个数字，然后是一个连字号“-”，最后是8个数字</td>
<td>0\d\d-\d\d\d\d\d\d\d\d 或 0\d{2}-\d{8}</td>
</tr>
<tr>
<td>匹配以字母a开头的单词</td>
<td>\ba\w*\b</td>
</tr>
<tr>
<td>1个或更多连续的数字</td>
<td>\d+</td>
</tr>
<tr>
<td>刚好6个字符的单词</td>
<td>\b\w{6}\b</td>
</tr>
<tr>
<td>整个字符串是5到12位数字</td>
<td>^\d{5,12}$</td>
</tr>
</tbody>
</table>
<h2 id="字符转义">字符转义</h2>
<p><strong>例：</strong></p>
<table>
<thead>
<tr>
<th>查找目标</th>
<th>正则表达式</th>
</tr>
</thead>
<tbody>
<tr>
<td>deerchao.cn</td>
<td>deerchao\.cn</td>
</tr>
<tr>
<td>C:\Windows</td>
<td>C:\\Windows</td>
</tr>
</tbody>
</table>
<h2 id="重复">重复</h2>
<table>
<thead>
<tr>
<th>代码/语法</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>*</td>
<td>重复零次或更多次</td>
</tr>
<tr>
<td>+</td>
<td>重复一次或更多次</td>
</tr>
<tr>
<td>?</td>
<td>重复零次或一次</td>
</tr>
<tr>
<td>{n}</td>
<td>重复n次</td>
</tr>
<tr>
<td>{n,}</td>
<td>重复n次或更多次</td>
</tr>
<tr>
<td>{n,m}</td>
<td>重复n到m次</td>
</tr>
</tbody>
</table>
<p><strong>例：</strong></p>
<table>
<thead>
<tr>
<th>正则表达式</th>
<th>查找目标</th>
</tr>
</thead>
<tbody>
<tr>
<td>Windows\d+</td>
<td>Windows后面跟1个或更多数字</td>
</tr>
<tr>
<td>^\w+</td>
<td>一行的第一个单词</td>
</tr>
</tbody>
</table>
<h2 id="字符类">字符类</h2>
<p><strong>例：</strong></p>
<table>
<thead>
<tr>
<th>正则表达式</th>
<th>查找目标</th>
</tr>
</thead>
<tbody>
<tr>
<td>[aeiou]</td>
<td>任何一个英文元音字母</td>
</tr>
<tr>
<td>[0-9]</td>
<td>一位数字</td>
</tr>
<tr>
<td>(?0\d{2}[) -]?\d{8}</td>
<td>几种格式的电话号码</td>
</tr>
</tbody>
</table>
<h2 id="分枝条件">分枝条件</h2>
<p>匹配分枝条件时，将会从左到右地测试每个条件，如果满足了某个分枝的话，就不会去再管其它的条件了。</p>
<p><strong>例：</strong></p>
<table>
<thead>
<tr>
<th>正则表达式</th>
<th>查找目标</th>
</tr>
</thead>
<tbody>
<tr>
<td>0\d{2}-\d{8}|0\d{3}-\d{7}</td>
<td>三位区号，8位本地号 或 4位区号，7位本地号</td>
</tr>
<tr>
<td>\d{5}-\d{4}|\d{5}</td>
<td>美国邮编的规则是5位数字，或者用连字号间隔的9位数字</td>
</tr>
</tbody>
</table>
<h2 id="分组">分组</h2>
<p>可以用小括号来指定<strong>子表达式</strong>(也叫做<strong>分组</strong>)</p>
<p><strong>例：</strong></p>
<table>
<thead>
<tr>
<th>正则表达式</th>
<th>查找目标</th>
</tr>
</thead>
<tbody>
<tr>
<td>(\d{1,3}.){3}\d{1,3}</td>
<td>简单的IP地址匹配</td>
</tr>
<tr>
<td>((2[0-4]\d|25[0-5]|[01]?\d\d?).){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)</td>
<td>正确的IP地址</td>
</tr>
</tbody>
</table>
<h2 id="反义">反义</h2>
<table>
<thead>
<tr>
<th>代码</th>
<th><strong>说明</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td>\W</td>
<td>匹配任意不是字母，数字，下划线，汉字的字符</td>
</tr>
<tr>
<td>\S</td>
<td>匹配任意不是空白符的字符</td>
</tr>
<tr>
<td>\D</td>
<td>匹配任意非数字的字符</td>
</tr>
<tr>
<td>\B</td>
<td>匹配不是单词开头或结束的位置</td>
</tr>
<tr>
<td>[^x]</td>
<td>匹配除了x以外的任意字符</td>
</tr>
<tr>
<td>[^aeiou]</td>
<td>匹配除了aeiou这几个字母以外的任意字符</td>
</tr>
</tbody>
</table>
<p><strong>例：</strong></p>
<table>
<thead>
<tr>
<th>正则表达式</th>
<th>查找目标</th>
</tr>
</thead>
<tbody>
<tr>
<td>\S+</td>
<td>不包含空白符的字符串</td>
</tr>
<tr>
<td>&lt;a[^&gt;]+&gt;</td>
<td>用尖括号括起来的以a开头的字符串</td>
</tr>
</tbody>
</table>
<h2 id="后向引用">后向引用</h2>
]]></content:encoded>
    </item>
    
    <item>
      <title>OpenCV基础笔记</title>
      <link>https://blog.kanikig.xyz/opencv%E5%9F%BA%E7%A1%80%E7%AC%94%E8%AE%B0/</link>
      <pubDate>Sun, 20 Sep 2020 10:25:22 +0000</pubDate>
      
      <guid>https://blog.kanikig.xyz/opencv%E5%9F%BA%E7%A1%80%E7%AC%94%E8%AE%B0/</guid>
      <description>概述：OpenCV介绍与环境 OpenCV介绍 opencv计算机视觉开源库，算法涉及图像处理与机器学习。 Intel公司贡献，俄罗斯工程师贡献大</description>
      <content:encoded><![CDATA[<h2 id="概述opencv介绍与环境">概述：OpenCV介绍与环境</h2>
<h3 id="opencv介绍">OpenCV介绍</h3>
<ul>
<li>opencv计算机视觉开源库，算法涉及图像处理与机器学习。</li>
<li>Intel公司贡献，俄罗斯工程师贡献大部分C/C++代码。</li>
<li>BSD许可，可免费商用。</li>
<li>SDK支持Java，Python，IOS，Android。</li>
</ul>
<h3 id="opencv框架">OpenCV框架</h3>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-09-2402.26.26.png" alt="iShot2020-09-2402.26.26.png"  /></p>
<h3 id="示例代码">示例代码</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&lt;iostream&gt;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&lt;opencv2/opencv.hpp&gt;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp"></span>
</span></span><span class="line"><span class="cl"><span class="k">using</span> <span class="k">namespace</span> <span class="n">std</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="k">using</span> <span class="k">namespace</span> <span class="n">cv</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kt">int</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">Mat</span> <span class="n">srcImage</span> <span class="o">=</span> <span class="n">imread</span><span class="p">(</span><span class="s">&#34;/Users/kanikig/Documents/CProjects/test/test.jpg&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">srcImage</span><span class="p">.</span><span class="n">data</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="s">&#34;Image not loaded&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="n">imshow</span><span class="p">(</span><span class="s">&#34;[img]&#34;</span><span class="p">,</span> <span class="n">srcImage</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="n">waitKey</span><span class="p">(</span><span class="mi">0</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><h2 id="加载修改保存图像">加载、修改、保存图像</h2>
<p><a href="https://blog.csdn.net/weixin_42730667/article/details/102299280">色彩空间</a>：</p>
<ul>
<li>位图</li>
<li>灰度</li>
<li>RGB真彩色</li>
<li>CMYK</li>
<li>HSV</li>
<li>YUV</li>
</ul>
<h3 id="加载图像">加载图像</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="n">Mat</span> <span class="n">srcImage</span> <span class="o">=</span> <span class="n">imread</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="kt">int</span> <span class="n">flags</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">flags</span> <span class="o">=</span> 
</span></span><span class="line"><span class="cl"><span class="n">IMREAD_UNCHANGED</span> <span class="p">(</span><span class="o">&lt;</span><span class="mi">0</span><span class="p">)</span> <span class="err">表示加载原图，不做任何改变</span>
</span></span><span class="line"><span class="cl"><span class="n">IMREAD_GRAYSCALE</span> <span class="p">(</span><span class="mi">0</span><span class="p">)</span><span class="err">表示把原图作为灰度图像加载进来</span>
</span></span><span class="line"><span class="cl"><span class="n">IMREAD_COLOR</span> <span class="p">(</span><span class="o">&gt;</span><span class="mi">0</span><span class="p">)</span> <span class="err">表示把原图作为</span><span class="n">RGB图像加载进来</span><span class="p">(</span><span class="k">default</span><span class="p">)</span>
</span></span></code></pre></div><h3 id="显示图像">显示图像</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="n">namedWindow</span><span class="p">(</span><span class="s">&#34;窗口1&#34;</span><span class="p">,</span> <span class="n">CV_WINDOW_NORMAL</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">	<span class="cm">/*
</span></span></span><span class="line"><span class="cl"><span class="cm">	参数1：窗口的名字
</span></span></span><span class="line"><span class="cl"><span class="cm">	参数2：窗口类型，CV_WINDOW_AUTOSIZE 时表明窗口大小等于图片大小。不可以被拖动改变大小。
</span></span></span><span class="line"><span class="cl"><span class="cm">	CV_WINDOW_NORMAL 时，表明窗口可以被随意拖动改变大小。
</span></span></span><span class="line"><span class="cl"><span class="cm">	*/</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">imshow</span><span class="p">(</span><span class="s">&#34;窗口1&#34;</span><span class="p">,</span> <span class="n">srcImage</span><span class="p">);</span>	<span class="c1">//在“窗口1”这个窗口输出图片。
</span></span></span></code></pre></div><h3 id="修改图像">修改图像</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="n">Mat</span> <span class="n">gray_image</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="n">cvtColor</span><span class="p">(</span><span class="n">image</span><span class="p">,</span> <span class="n">gray_image</span><span class="p">,</span> <span class="n">COLOR_RGB2GRAY</span><span class="p">);</span>
</span></span></code></pre></div><h3 id="保存图像">保存图像</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="n">imwrite</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="n">Input_img</span><span class="p">,</span> <span class="n">param</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">	<span class="cm">/*
</span></span></span><span class="line"><span class="cl"><span class="cm">	保存图像文件到指定目录路径
</span></span></span><span class="line"><span class="cl"><span class="cm">	只有8位、16位的PNG、JPG、Tiff文件格式而且是单通道或者三通道的BGB的图像才可以通过这种方式保存
</span></span></span><span class="line"><span class="cl"><span class="cm">	保存PNG格式的时候可以保存透明通道的图片
</span></span></span><span class="line"><span class="cl"><span class="cm">	可以指定压缩参数
</span></span></span><span class="line"><span class="cl"><span class="cm">	*/</span>
</span></span></code></pre></div><h2 id="矩阵的掩膜操作">矩阵的掩膜操作</h2>
<h3 id="获取像素指针">获取像素指针</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="c1">//确定图像深度，若为false报错
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">CV_Assert</span><span class="p">(</span><span class="n">myImage</span><span class="p">.</span><span class="n">depth</span><span class="p">()</span> <span class="o">==</span> <span class="n">CV_8U</span><span class="p">);</span> 
</span></span><span class="line"><span class="cl"><span class="c1">//获取当前行指针（row从0开始）
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="k">const</span> <span class="n">uchar</span><span class="o">*</span>  <span class="n">current</span><span class="o">=</span> <span class="n">Image</span><span class="p">.</span><span class="n">ptr</span><span class="o">&lt;</span><span class="n">uchar</span><span class="o">&gt;</span><span class="p">(</span><span class="n">row</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="c1">//获得当前像素点像素值
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">p</span><span class="p">(</span><span class="n">row</span><span class="p">,</span><span class="n">col</span><span class="p">)</span> <span class="o">=</span><span class="n">current</span><span class="p">[</span><span class="n">col</span><span class="p">];</span>
</span></span><span class="line"><span class="cl"><span class="c1">//像素范围处理，保证RGB在0-255
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">saturate_cast</span><span class="o">&lt;</span><span class="n">ucahr</span><span class="o">&gt;</span><span class="p">();</span>
</span></span></code></pre></div><h3 id="掩膜mask操作">掩膜（mask）操作</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="c1">//定义掩膜
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">Mat</span> <span class="n">kernel</span> <span class="o">=</span> <span class="p">(</span><span class="n">Mat_</span><span class="o">&lt;</span><span class="kt">char</span><span class="o">&gt;</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mi">3</span><span class="p">)</span> <span class="o">&lt;&lt;</span> <span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="c1">//掩膜操作
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">filter2D</span><span class="p">(</span><span class="n">src</span><span class="p">,</span> <span class="n">dst</span><span class="p">,</span> <span class="n">src</span><span class="p">.</span><span class="n">depth</span><span class="p">(),</span> <span class="n">kernel</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">//程序计时
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">t</span> <span class="o">=</span> <span class="p">(</span><span class="kt">double</span><span class="p">)</span><span class="n">getTickCount</span><span class="p">();</span>
</span></span><span class="line"><span class="cl"><span class="n">t</span> <span class="o">=</span> <span class="err">（</span><span class="p">(</span><span class="kt">double</span><span class="p">)</span><span class="n">getTickCount</span><span class="p">()</span> <span class="o">-</span> <span class="n">t</span><span class="p">)</span><span class="o">/</span><span class="n">getTickFrequency</span><span class="p">();</span>
</span></span></code></pre></div><h2 id="mat对象">Mat对象</h2>
<h3 id="mat对象使用">Mat对象使用</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="c1">//构造函数
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">Mat</span> <span class="n">dst</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="n">dst</span> <span class="o">=</span> <span class="n">Mat</span><span class="p">(</span><span class="kt">int</span> <span class="n">rows</span><span class="p">,</span> <span class="kt">int</span> <span class="n">cols</span><span class="p">,</span> <span class="kt">int</span> <span class="n">type</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="n">dst</span> <span class="o">=</span> <span class="n">Mat</span><span class="p">(</span><span class="n">Size</span> <span class="n">size</span><span class="p">,</span> <span class="kt">int</span> <span class="n">type</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="c1">//等价于
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">dst</span><span class="p">.</span><span class="n">create</span><span class="p">(</span><span class="n">Size</span> <span class="n">size</span><span class="p">,</span> <span class="kt">int</span> <span class="n">type</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="c1">//其中前两个参数分别表示行(row)跟列(column)、第三个CV_8UC3中的8表示每个通道占8位、U表示无符号、C表示Char类型、3表示通道数目是3，第四个参数是向量表示初始化每个像素值是多少，向量长度对应通道数目一致
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">dst</span> <span class="o">=</span> <span class="n">Mat</span> <span class="n">M</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="n">CV_8UC3</span><span class="p">,</span> <span class="n">Scalar</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">255</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">dst</span> <span class="o">=</span> <span class="n">Scalar</span><span class="p">(</span><span class="mi">127</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">255</span><span class="p">);</span> <span class="c1">//将图像设置成单一灰度和颜色
</span></span></span><span class="line"><span class="cl"><span class="c1">//常用方法
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">Image</span><span class="p">.</span><span class="n">cols</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="n">Image</span><span class="p">.</span><span class="n">rows</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="n">Image</span><span class="p">.</span><span class="n">copyTo</span><span class="p">(</span><span class="n">mat</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="n">Image</span><span class="p">.</span><span class="n">clone</span><span class="p">();</span>
</span></span><span class="line"><span class="cl"><span class="n">Image</span><span class="p">.</span><span class="n">convertTo</span><span class="p">(</span><span class="n">Mat</span> <span class="n">dst</span><span class="p">,</span> <span class="kt">int</span> <span class="n">type</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="n">Image</span><span class="p">.</span><span class="n">channels</span><span class="p">();</span> <span class="c1">//RGB=3, 灰度图=1
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">Image</span><span class="p">.</span><span class="n">depth</span><span class="p">();</span> <span class="c1">//一般写-1
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">Image</span><span class="p">.</span><span class="n">empty</span><span class="p">();</span>
</span></span><span class="line"><span class="cl"><span class="n">uchar</span><span class="o">*</span> <span class="nf">ptr</span><span class="p">(</span><span class="n">row</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">Mat</span> <span class="n">dst</span> <span class="o">=</span> <span class="n">src</span><span class="p">.</span><span class="n">clone</span><span class="p">();</span>
</span></span><span class="line"><span class="cl"><span class="n">src</span><span class="p">.</span><span class="n">copyTo</span><span class="p">(</span><span class="n">dst</span><span class="p">);</span>
</span></span></code></pre></div><h3 id="mat定义数组">Mat定义数组</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="n">Mat</span> <span class="n">C</span> <span class="o">=</span> <span class="p">(</span><span class="n">Mat_</span><span class="o">&lt;</span><span class="kt">double</span><span class="o">&gt;</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mi">3</span><span class="p">)</span> <span class="o">&lt;&lt;</span> <span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="n">eye</span><span class="p">(</span><span class="kt">int</span> <span class="n">rows</span><span class="p">,</span> <span class="kt">int</span> <span class="n">cols</span><span class="p">,</span> <span class="kt">int</span> <span class="n">type</span><span class="p">)</span><span class="err">；</span> <span class="c1">//生产单位矩阵
</span></span></span></code></pre></div><h2 id="图像操作">图像操作</h2>
<h3 id="读写图像">读写图像</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="n">imread</span><span class="p">();</span>
</span></span><span class="line"><span class="cl"><span class="n">imwrite</span><span class="p">();</span>
</span></span></code></pre></div><h3 id="读写像素">读写像素</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="kt">int</span> <span class="n">px</span> <span class="o">=</span> <span class="n">Image</span><span class="p">.</span><span class="n">at</span><span class="o">&lt;</span><span class="n">uchar</span><span class="o">&gt;</span><span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="n">col</span><span class="p">);</span>
</span></span></code></pre></div><h3 id="修改像素">修改像素</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="kt">int</span> <span class="n">height</span> <span class="o">=</span> <span class="n">image</span><span class="p">.</span><span class="n">rows</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="kt">int</span> <span class="n">width</span> <span class="o">=</span> <span class="n">image</span><span class="p">.</span><span class="n">cols</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="kt">int</span> <span class="n">channels</span> <span class="o">=</span> <span class="n">image</span><span class="p">.</span><span class="n">channels</span><span class="p">();</span>
</span></span><span class="line"><span class="cl"><span class="n">printf</span><span class="p">(</span><span class="s">&#34;height=%d width=%d channels=%d&#34;</span><span class="p">,</span> <span class="n">height</span><span class="p">,</span> <span class="n">width</span><span class="p">,</span> <span class="n">channels</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="p">(</span><span class="kt">int</span> <span class="n">row</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">row</span> <span class="o">&lt;</span> <span class="n">height</span><span class="p">;</span> <span class="n">row</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="k">for</span> <span class="p">(</span><span class="kt">int</span> <span class="n">col</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">col</span> <span class="o">&lt;</span> <span class="n">width</span><span class="p">;</span> <span class="n">col</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="p">(</span><span class="n">channels</span> <span class="o">==</span> <span class="mi">3</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="n">image</span><span class="p">.</span><span class="n">at</span><span class="o">&lt;</span><span class="n">Vec3b</span><span class="o">&gt;</span><span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="n">col</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="c1">// blue
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>      <span class="n">image</span><span class="p">.</span><span class="n">at</span><span class="o">&lt;</span><span class="n">Vec3b</span><span class="o">&gt;</span><span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="n">col</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="c1">// green
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>    <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="c1">//Vec3b对应三通道的顺序是blue、green、red的uchar类型数据。Vec3f对应三通道的float类型数据
</span></span></span><span class="line"><span class="cl"><span class="c1">//把CV_8UC1转换到CV32F1实现如下：src.convertTo(dst, CV_32F);
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>
</span></span><span class="line"><span class="cl"><span class="c1">//反色
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">bitwise_not</span><span class="p">(</span><span class="n">src</span><span class="p">,</span> <span class="n">dst</span><span class="p">);</span>
</span></span></code></pre></div><h2 id="图像混合">图像混合</h2>
<h3 id="线性混合理论">线性混合理论</h3>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-09-2402.22.30.png" alt="iShot2020-09-2402.22.30.png"  /></p>
<h3 id="相关api">相关API</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="n">AddWeighted</span><span class="p">(</span> <span class="k">const</span> <span class="n">CvArr</span><span class="o">*</span> <span class="n">src1</span><span class="p">,</span> <span class="kt">double</span> <span class="n">alpha</span><span class="p">,</span><span class="k">const</span> <span class="n">CvArr</span><span class="o">*</span> <span class="n">src2</span><span class="p">,</span> <span class="kt">double</span> <span class="n">beta</span><span class="p">,</span><span class="kt">double</span> <span class="n">gamma</span><span class="p">,</span> <span class="n">CvArr</span><span class="o">*</span> <span class="n">dst</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="cm">/*
</span></span></span><span class="line"><span class="cl"><span class="cm">参数1：src1，第一个原数组
</span></span></span><span class="line"><span class="cl"><span class="cm">参数2：alpha，第一个数组元素权重
</span></span></span><span class="line"><span class="cl"><span class="cm">参数3：src2第二个原数组
</span></span></span><span class="line"><span class="cl"><span class="cm">参数4：beta，第二个数组元素权重
</span></span></span><span class="line"><span class="cl"><span class="cm">参数5：gamma，图1与图2作和后添加的数值(默认0）。不要太大，不然图片一片白。总和等于255以上就是纯白色了。
</span></span></span><span class="line"><span class="cl"><span class="cm">参数6：dst，输出图片
</span></span></span><span class="line"><span class="cl"><span class="cm">*/</span>
</span></span></code></pre></div><h2 id="调整亮度与对比度">调整亮度与对比度</h2>
<h3 id="理论">理论</h3>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-09-2402.22.16.png" alt="iShot2020-09-2402.22.16.png"  /></p>
<h3 id="示例">示例</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="n">Mat</span> <span class="n">new_image</span> <span class="o">=</span> <span class="n">Mat</span><span class="o">::</span><span class="n">zeros</span><span class="p">(</span> <span class="n">image</span><span class="p">.</span><span class="n">size</span><span class="p">(),</span> <span class="n">image</span><span class="p">.</span><span class="n">type</span><span class="p">()</span> <span class="p">);</span> <span class="c1">//创建一张跟原图像大小和类型一致的空白图像、像素值初始化为0
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">saturate_cast</span><span class="o">&lt;</span><span class="n">uchar</span><span class="o">&gt;</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="c1">//确保值大小范围为0~255之间
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">Mat</span><span class="p">.</span><span class="n">at</span><span class="o">&lt;</span><span class="n">Vec3b</span><span class="o">&gt;</span><span class="p">(</span><span class="n">y</span><span class="p">,</span><span class="n">x</span><span class="p">)[</span><span class="n">index</span><span class="p">]</span><span class="o">=</span><span class="n">value</span> <span class="c1">//给每个像素点每个通道赋值
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kt">int</span> <span class="n">height</span> <span class="o">=</span> <span class="n">image</span><span class="p">.</span><span class="n">rows</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="kt">int</span> <span class="n">width</span> <span class="o">=</span> <span class="n">image</span><span class="p">.</span><span class="n">cols</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="kt">double</span> <span class="n">alpha</span> <span class="o">=</span> <span class="mf">1.2</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="kt">double</span> <span class="n">beta</span> <span class="o">=</span> <span class="mi">50</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="n">output</span> <span class="o">=</span> <span class="n">Mat</span><span class="o">::</span><span class="n">zeros</span><span class="p">(</span><span class="n">image</span><span class="p">.</span><span class="n">size</span><span class="p">(),</span> <span class="n">image</span><span class="p">.</span><span class="n">type</span><span class="p">());</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="p">(</span><span class="kt">int</span> <span class="n">row</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">row</span> <span class="o">&lt;</span> <span class="n">height</span><span class="p">;</span> <span class="n">row</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="k">for</span> <span class="p">(</span><span class="kt">int</span> <span class="n">col</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">col</span> <span class="o">&lt;</span> <span class="n">width</span><span class="p">;</span> <span class="n">col</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">output</span><span class="p">.</span><span class="n">at</span><span class="o">&lt;</span><span class="n">Vec3b</span><span class="o">&gt;</span><span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="n">col</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">saturate_cast</span><span class="o">&lt;</span><span class="n">uchar</span><span class="o">&gt;</span><span class="p">(</span><span class="n">alpha</span> <span class="o">*</span> <span class="n">image</span><span class="p">.</span><span class="n">at</span><span class="o">&lt;</span><span class="n">Vec3b</span><span class="o">&gt;</span><span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="n">col</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">beta</span><span class="p">);</span> <span class="c1">//blue
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>    <span class="n">output</span><span class="p">.</span><span class="n">at</span><span class="o">&lt;</span><span class="n">Vec3b</span><span class="o">&gt;</span><span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="n">col</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">saturate_cast</span><span class="o">&lt;</span><span class="n">uchar</span><span class="o">&gt;</span><span class="p">(</span><span class="n">alpha</span> <span class="o">*</span> <span class="n">image</span><span class="p">.</span><span class="n">at</span><span class="o">&lt;</span><span class="n">Vec3b</span><span class="o">&gt;</span><span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="n">col</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="n">beta</span><span class="p">);</span> <span class="c1">//green
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>    <span class="n">output</span><span class="p">.</span><span class="n">at</span><span class="o">&lt;</span><span class="n">Vec3b</span><span class="o">&gt;</span><span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="n">col</span><span class="p">)[</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="n">saturate_cast</span><span class="o">&lt;</span><span class="n">uchar</span><span class="o">&gt;</span><span class="p">(</span><span class="n">alpha</span> <span class="o">*</span> <span class="n">image</span><span class="p">.</span><span class="n">at</span><span class="o">&lt;</span><span class="n">Vec3b</span><span class="o">&gt;</span><span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="n">col</span><span class="p">)[</span><span class="mi">2</span><span class="p">]</span> <span class="o">+</span> <span class="n">beta</span><span class="p">);</span> <span class="c1">//red
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>    <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><h2 id="绘制形状和文字">绘制形状和文字</h2>
<h3 id="point与scalar">Point与Scalar</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="n">Point</span> <span class="n">p</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="n">p</span><span class="p">.</span><span class="n">x</span> <span class="o">=</span> <span class="mi">10</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="n">p</span><span class="p">.</span><span class="n">y</span> <span class="o">=</span> <span class="mi">8</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="c1">//等价于
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">p</span> <span class="o">=</span> <span class="n">Point</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span><span class="mi">8</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">Scalar</span><span class="p">(</span><span class="n">B</span><span class="p">,</span> <span class="n">G</span><span class="p">,</span> <span class="n">R</span><span class="p">);</span>
</span></span></code></pre></div><h3 id="绘制形状">绘制形状</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="p">(</span><span class="n">LINE_4</span><span class="p">,</span> <span class="n">LINE_8</span><span class="p">,</span> <span class="n">LINE_AA</span><span class="p">)</span> <span class="c1">//AA反锯齿
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">line</span><span class="p">(</span><span class="n">frame</span><span class="p">,</span> <span class="n">beginPoint</span><span class="p">,</span> <span class="n">endPoint</span><span class="p">,</span> <span class="n">Scalar</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">255</span><span class="p">),</span> <span class="mi">2</span><span class="p">);</span> <span class="c1">//起点为beginPoint,终点是endPoint,颜色是红色，线宽是2，shift为默认值
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>
</span></span><span class="line"><span class="cl"><span class="n">Rect</span> <span class="n">rect</span> <span class="o">=</span> <span class="n">Rect</span><span class="p">(</span><span class="mi">200</span><span class="p">,</span> <span class="mi">100</span><span class="p">,</span> <span class="mi">300</span><span class="p">,</span> <span class="mi">300</span><span class="p">);</span> <span class="c1">// 起始xy，宽高
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">rectangle</span><span class="p">(</span><span class="n">Image</span><span class="p">,</span> <span class="n">rect</span><span class="p">,</span> <span class="n">color</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="n">LINE_8</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">eclipse</span><span class="p">(</span><span class="n">Image</span><span class="p">,</span> <span class="n">Point</span><span class="p">(</span><span class="n">Image</span><span class="p">.</span><span class="n">cols</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span> <span class="n">Image</span><span class="p">.</span><span class="n">rows</span><span class="o">/</span><span class="mi">2</span><span class="p">),</span> <span class="n">Size</span><span class="p">,</span> <span class="mi">90</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">360</span><span class="p">,</span> <span class="n">color</span><span class="p">,</span> <span class="mi">2</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">circle</span><span class="p">(</span><span class="n">central</span> <span class="n">point</span><span class="p">,</span> <span class="n">radius</span><span class="p">,</span> <span class="n">color</span><span class="p">,</span> <span class="mi">2</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">//多边形
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">Point</span> <span class="n">pts</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">5</span><span class="p">];</span>
</span></span><span class="line"><span class="cl"><span class="n">pts</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">Point</span><span class="p">(</span><span class="mi">100</span><span class="p">,</span><span class="mi">100</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="n">fillpoly</span><span class="p">(</span><span class="n">Image</span><span class="p">,</span> <span class="n">in</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">color</span><span class="p">,</span> <span class="mi">8</span><span class="p">);</span>
</span></span></code></pre></div><h3 id="文字">文字</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="n">putText</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">		<span class="n">cv</span><span class="o">::</span><span class="n">Mat</span><span class="o">&amp;</span> <span class="n">img</span><span class="p">,</span> <span class="c1">// 待绘制的图像
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>		<span class="k">const</span> <span class="n">string</span><span class="o">&amp;</span> <span class="n">text</span><span class="p">,</span> <span class="c1">// 待绘制的文字
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>		<span class="n">cv</span><span class="o">::</span><span class="n">Point</span> <span class="n">origin</span><span class="p">,</span> <span class="c1">// 文本框的左下角
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>		<span class="kt">int</span> <span class="n">fontFace</span><span class="p">,</span> <span class="c1">// 字体 (如cv::FONT_HERSHEY_PLAIN)
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>		<span class="kt">double</span> <span class="n">fontScale</span><span class="p">,</span> <span class="c1">// 尺寸因子，值越大文字越大
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>		<span class="n">cv</span><span class="o">::</span><span class="n">Scalar</span> <span class="n">color</span><span class="p">,</span> <span class="c1">// 线条的颜色（RGB）
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>		<span class="kt">int</span> <span class="n">thickness</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="c1">// 线条宽度
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>		<span class="kt">int</span> <span class="n">lineType</span> <span class="o">=</span> <span class="mi">8</span><span class="p">,</span> <span class="c1">// 线型（4邻域或8邻域，默认8邻域）
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>		<span class="kt">bool</span> <span class="n">bottomLeftOrigin</span> <span class="o">=</span> <span class="nb">false</span> <span class="c1">// true=&#39;origin at lower left&#39;
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="p">);</span>
</span></span></code></pre></div><h3 id="随机绘制">随机绘制</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="n">RNG</span> <span class="nf">rng</span><span class="p">(</span><span class="mi">12345</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="n">Point</span> <span class="n">pt1</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="n">Point</span> <span class="n">pt2</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="p">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span><span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="mi">1000</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">){</span>
</span></span><span class="line"><span class="cl">  <span class="n">pt1</span><span class="p">.</span><span class="n">x</span> <span class="o">=</span> <span class="n">rng</span><span class="p">.</span><span class="n">uniform</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">Image</span><span class="p">.</span><span class="n">cols</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">  <span class="n">pt1</span><span class="p">.</span><span class="n">y</span> <span class="o">=</span> <span class="n">rng</span><span class="p">.</span><span class="n">uniform</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">Image</span><span class="p">.</span><span class="n">rows</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">  <span class="n">pt2</span><span class="p">.</span><span class="n">x</span> <span class="o">=</span> <span class="n">rng</span><span class="p">.</span><span class="n">uniform</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">Image</span><span class="p">.</span><span class="n">cols</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">  <span class="n">pt2</span><span class="p">.</span><span class="n">y</span> <span class="o">=</span> <span class="n">rng</span><span class="p">.</span><span class="n">uniform</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">Image</span><span class="p">.</span><span class="n">rows</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">  <span class="n">Scalar</span> <span class="n">color</span> <span class="o">=</span> <span class="n">Scalar</span><span class="p">(</span><span class="n">rng</span><span class="p">.</span><span class="n">uniform</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">255</span><span class="p">),</span> <span class="n">rng</span><span class="p">.</span><span class="n">uniform</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">255</span><span class="p">),</span> <span class="n">rng</span><span class="p">.</span><span class="n">uniform</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">255</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">  <span class="k">if</span> <span class="p">(</span><span class="n">wairKey</span><span class="p">(</span><span class="mi">50</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">){</span>
</span></span><span class="line"><span class="cl">    <span class="k">break</span><span class="p">;</span> <span class="c1">//50秒循环一次，直到按键
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>  <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="n">line</span><span class="p">(</span><span class="n">Image</span><span class="p">,</span> <span class="n">pt1</span><span class="p">,</span> <span class="n">pt2</span><span class="p">,</span> <span class="n">color</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">8</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><h2 id="模糊图像一">模糊图像一</h2>
<h3 id="原理">原理</h3>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-09-2403.32.36.png" alt="iShot2020-09-2403.32.36.png"  /></p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-09-2403.32.43.png" alt="iShot2020-09-2403.32.43.png"  /></p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-09-2403.32.48.png" alt="iShot2020-09-2403.32.48.png"  /></p>
<h3 id="示例-1">示例</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="n">blur</span><span class="p">(</span><span class="n">Mat</span> <span class="n">src</span><span class="p">,</span> <span class="n">Mat</span> <span class="n">dst</span><span class="p">,</span> <span class="n">Size</span><span class="p">(</span><span class="n">xradius</span><span class="p">,</span> <span class="n">yradius</span><span class="p">),</span> <span class="n">Point</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">));</span>
</span></span><span class="line"><span class="cl"><span class="n">GaussianBlur</span><span class="p">(</span><span class="n">Mat</span> <span class="n">src</span><span class="p">,</span> <span class="n">Mat</span> <span class="n">dst</span><span class="p">,</span> <span class="n">Size</span><span class="p">(</span><span class="mi">11</span><span class="p">,</span> <span class="mi">11</span><span class="p">),</span> <span class="n">sigmax</span><span class="p">,</span> <span class="n">sigmay</span><span class="p">);</span> <span class="c1">//Size（x, y）, x, y 必须是正数而且是奇数
</span></span></span></code></pre></div><h2 id="图像模糊二">图像模糊二</h2>
<h3 id="中值滤波">中值滤波</h3>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-09-2404.20.14.png" alt="iShot2020-09-2404.20.14.png"  /></p>
<h3 id="双边滤波">双边滤波</h3>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-09-2404.23.30.png" alt="iShot2020-09-2404.23.30.png"  /></p>
<h3 id="示例-2">示例</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="n">medianBlur</span><span class="p">(</span><span class="n">Mat</span> <span class="n">src</span><span class="p">,</span> <span class="n">Mat</span> <span class="n">dest</span><span class="p">,</span> <span class="n">ksize</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="n">bilateralFilter</span><span class="p">(</span><span class="n">src</span><span class="p">,</span> <span class="n">dest</span><span class="p">,</span> <span class="mi">15</span><span class="p">,</span> <span class="mi">100</span><span class="p">,</span> <span class="mi">3</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="cm">/* 15 –计算的半径d，半径之内的像数都会被纳入计算，如果提供-1 则根据sigma space参数取值
</span></span></span><span class="line"><span class="cl"><span class="cm">	 100 – sigma color 决定多少差值之内的像素会被计算
</span></span></span><span class="line"><span class="cl"><span class="cm"> 	 3 – sigma space 如果d的值大于0则声明无效，否则根据它来计算d值
</span></span></span><span class="line"><span class="cl"><span class="cm">中值模糊的ksize大小必须是大于1而且必须是奇数。
</span></span></span><span class="line"><span class="cl"><span class="cm">*/</span>
</span></span></code></pre></div><h2 id="膨胀与腐蚀">膨胀与腐蚀</h2>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-09-2803.40.02.png" alt="iShot2020-09-2803.40.02.png"  /></p>
<h3 id="腐蚀">腐蚀</h3>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-09-2803.40.14.png" alt="iShot2020-09-2803.40.14.png"  /></p>
<h3 id="膨胀">膨胀</h3>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-09-2803.40.09.png" alt="iShot2020-09-2803.40.09.png"  /></p>
<h3 id="示例-3">示例</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="n">kernel</span> <span class="o">=</span> <span class="n">getStructuringElement</span><span class="p">(</span><span class="kt">int</span> <span class="n">shape</span><span class="p">,</span> <span class="n">Size</span> <span class="n">ksize</span><span class="p">,</span> <span class="n">Point</span> <span class="n">anchor</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="cm">/*
</span></span></span><span class="line"><span class="cl"><span class="cm"> - 形状 (MORPH_RECT \MORPH_CROSS \MORPH_ELLIPSE)
</span></span></span><span class="line"><span class="cl"><span class="cm"> - 大小 奇数 Size(1,1);
</span></span></span><span class="line"><span class="cl"><span class="cm"> - 锚点 默认是Point(-1, -1)意思就是中心像素
</span></span></span><span class="line"><span class="cl"><span class="cm">*/</span>
</span></span><span class="line"><span class="cl"><span class="n">dilate</span><span class="p">(</span><span class="n">src</span><span class="p">,</span> <span class="n">dst</span><span class="p">,</span> <span class="n">kernel</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="n">erode</span><span class="p">(</span><span class="n">src</span><span class="p">,</span> <span class="n">dst</span><span class="p">,</span> <span class="n">kernel</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">//动态调整结构元素大小
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">createTrackbar</span><span class="p">(</span><span class="k">const</span> <span class="n">String</span> <span class="o">&amp;</span> <span class="n">trackbarname</span><span class="p">,</span> <span class="k">const</span> <span class="n">String</span> <span class="n">winName</span><span class="p">,</span>  <span class="kt">int</span><span class="o">*</span> <span class="n">value</span><span class="p">,</span> <span class="kt">int</span> <span class="n">count</span><span class="p">,</span> <span class="n">Trackbarcallback</span> <span class="n">func</span><span class="p">,</span> <span class="kt">void</span><span class="o">*</span> <span class="n">userdata</span><span class="o">=</span><span class="mi">0</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="cm">/*
</span></span></span><span class="line"><span class="cl"><span class="cm">形式参数一、trackbarname：滑动空间的名称；
</span></span></span><span class="line"><span class="cl"><span class="cm">形式参数二、winname：滑动空间用于依附的图像窗口的名称；
</span></span></span><span class="line"><span class="cl"><span class="cm">形式参数三、value：初始化阈值；
</span></span></span><span class="line"><span class="cl"><span class="cm">形式参数四、count：滑动控件的刻度范围；
</span></span></span><span class="line"><span class="cl"><span class="cm">形式参数五、TrackbarCallback是回调函数，其定义如下：
</span></span></span><span class="line"><span class="cl"><span class="cm">*/</span>
</span></span><span class="line"><span class="cl"><span class="kt">void</span> <span class="p">(</span><span class="n">CV_CDECL</span> <span class="o">*</span><span class="n">TrackbarCallback</span><span class="p">)(</span><span class="kt">int</span> <span class="n">pos</span><span class="p">,</span> <span class="kt">void</span><span class="o">*</span> <span class="n">userdata</span><span class="p">);</span>
</span></span></code></pre></div><h3 id="demo">demo</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&lt;opencv2/opencv.hpp&gt; </span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&lt;iostream&gt; </span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp"></span><span class="k">using</span> <span class="k">namespace</span> <span class="n">cv</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">Mat</span> <span class="n">src</span><span class="p">,</span> <span class="n">dst</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="kt">char</span> <span class="n">OUTPUT_WIN</span><span class="p">[]</span> <span class="o">=</span> <span class="s">&#34;output image&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="kt">int</span> <span class="n">element_size</span> <span class="o">=</span> <span class="mi">3</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="kt">int</span> <span class="n">max_size</span> <span class="o">=</span> <span class="mi">21</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="kt">void</span> <span class="nf">CallBack_Demo</span><span class="p">(</span><span class="kt">int</span><span class="p">,</span> <span class="kt">void</span><span class="o">*</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span><span class="o">**</span> <span class="n">argv</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	
</span></span><span class="line"><span class="cl">	<span class="n">src</span> <span class="o">=</span> <span class="n">imread</span><span class="p">(</span><span class="s">&#34;D:/vcprojects/images/test1.png&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">	<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">src</span><span class="p">.</span><span class="n">data</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="n">printf</span><span class="p">(</span><span class="s">&#34;could not load image...</span><span class="se">\n</span><span class="s">&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">		<span class="k">return</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span><span class="line"><span class="cl">	<span class="n">namedWindow</span><span class="p">(</span><span class="s">&#34;input image&#34;</span><span class="p">,</span> <span class="n">CV_WINDOW_AUTOSIZE</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">	<span class="n">imshow</span><span class="p">(</span><span class="s">&#34;input image&#34;</span><span class="p">,</span> <span class="n">src</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="n">namedWindow</span><span class="p">(</span><span class="n">OUTPUT_WIN</span><span class="p">,</span> <span class="n">CV_WINDOW_AUTOSIZE</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">  <span class="c1">//上一与下二参数必须一致
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="n">createTrackbar</span><span class="p">(</span><span class="s">&#34;Element Size :&#34;</span><span class="p">,</span> <span class="n">OUTPUT_WIN</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">element_size</span><span class="p">,</span> <span class="n">max_size</span><span class="p">,</span> <span class="n">CallBack_Demo</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">	<span class="n">CallBack_Demo</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="n">waitKey</span><span class="p">(</span><span class="mi">0</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">	<span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kt">void</span> <span class="nf">CallBack_Demo</span><span class="p">(</span><span class="kt">int</span><span class="p">,</span> <span class="kt">void</span><span class="o">*</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">	<span class="kt">int</span> <span class="n">s</span> <span class="o">=</span> <span class="n">element_size</span> <span class="o">*</span> <span class="mi">2</span> <span class="o">+</span> <span class="mi">1</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">	<span class="n">Mat</span> <span class="n">structureElement</span> <span class="o">=</span> <span class="n">getStructuringElement</span><span class="p">(</span><span class="n">MORPH_RECT</span><span class="p">,</span> <span class="n">Size</span><span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="n">s</span><span class="p">),</span> <span class="n">Point</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">	<span class="c1">// dilate(src, dst, structureElement, Point(-1, -1), 1);
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="n">erode</span><span class="p">(</span><span class="n">src</span><span class="p">,</span> <span class="n">dst</span><span class="p">,</span> <span class="n">structureElement</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">	<span class="n">imshow</span><span class="p">(</span><span class="n">OUTPUT_WIN</span><span class="p">,</span> <span class="n">dst</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">	<span class="k">return</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><h2 id="形态学操作">形态学操作</h2>
<h3 id="开-open">开 open</h3>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-09-2804.12.31.png" alt="iShot2020-09-2804.12.31.png"  /></p>
<h3 id="闭-close">闭 close</h3>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-09-2804.12.46.png" alt="iShot2020-09-2804.12.46.png"  /></p>
<h3 id="形态学梯度-morphological-gradient">形态学梯度 Morphological Gradient</h3>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-09-2804.23.08.png" alt="iShot2020-09-2804.23.08.png"  /></p>
<h3 id="顶帽-top-hat">顶帽 top hat</h3>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-09-2804.23.13.png" alt="iShot2020-09-2804.23.13.png"  /></p>
<h3 id="黑帽-black-hat">黑帽 black hat</h3>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-09-2804.23.19.png" alt="iShot2020-09-2804.23.19.png"  /></p>
<h3 id="示例-4">示例</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="n">Mat</span> <span class="n">kernel</span> <span class="o">=</span> <span class="n">getStructuringElement</span><span class="p">(</span><span class="n">MORPH_RECT</span><span class="p">,</span> <span class="n">Size</span><span class="p">(</span><span class="mi">11</span><span class="p">,</span><span class="mi">11</span><span class="p">),</span> <span class="n">Point</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">));</span>
</span></span><span class="line"><span class="cl"><span class="n">morphologyEx</span><span class="p">(</span><span class="n">src</span><span class="p">,</span> <span class="n">dst</span><span class="p">,</span> <span class="n">CV_MOP_BLACKHAT</span><span class="p">,</span> <span class="n">kernel</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="cm">/*
</span></span></span><span class="line"><span class="cl"><span class="cm">- Mat src – 输入图像
</span></span></span><span class="line"><span class="cl"><span class="cm"> - Mat dest – 输出结果
</span></span></span><span class="line"><span class="cl"><span class="cm"> - int OPT – CV_MOP_OPEN/ CV_MOP_CLOSE/ CV_MOP_GRADIENT / CV_MOP_TOPHAT/ CV_MOP_BLACKHAT 形态学操作类型
</span></span></span><span class="line"><span class="cl"><span class="cm">Mat kernel 结构元素
</span></span></span><span class="line"><span class="cl"><span class="cm">int Iteration 迭代次数，默认是1
</span></span></span><span class="line"><span class="cl"><span class="cm">*/</span>
</span></span></code></pre></div><h2 id="形态学操作-提取水平垂直线">形态学操作 提取水平垂直线</h2>
<h3 id="原理-1">原理</h3>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-09-2902.29.04.png" alt="iShot2020-09-2902.29.04.png"  /></p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-09-2902.29.10.png" alt="iShot2020-09-2902.29.10.png"  /></p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-09-2902.29.15.png" alt="iShot2020-09-2902.29.15.png"  /></p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-09-2902.29.22.png" alt="iShot2020-09-2902.29.22.png"  /></p>
<h3 id="实现思路">实现思路</h3>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-09-2902.29.32.png" alt="iShot2020-09-2902.29.32.png"  /></p>
<h3 id="示例-5">示例</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="c1">//二值化
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">adaptiveThreshold</span><span class="p">(</span>
</span></span><span class="line"><span class="cl"><span class="n">Mat</span> <span class="n">src</span><span class="p">,</span> <span class="c1">// 输入的灰度图像
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">Mat</span> <span class="n">dest</span><span class="p">,</span> <span class="c1">// 二值图像
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kt">double</span> <span class="n">maxValue</span><span class="p">,</span> <span class="c1">// 二值图像最大值
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kt">int</span> <span class="n">adaptiveMethod</span> <span class="c1">// 自适应方法，只能其中之一 – 
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>		         <span class="c1">// ADAPTIVE_THRESH_MEAN_C ， ADAPTIVE_THRESH_GAUSSIAN_C 
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kt">int</span> <span class="n">thresholdType</span><span class="p">,</span><span class="c1">// 阈值类型
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kt">int</span> <span class="n">blockSize</span><span class="p">,</span> <span class="c1">// 块大小
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kt">double</span> <span class="n">C</span> <span class="c1">// 常量C 可以是正数，0，负数
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="p">);</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="n">adaptiveThreshold</span><span class="p">(</span><span class="o">~</span><span class="n">gray_src</span><span class="p">,</span> <span class="n">binImg</span><span class="p">,</span> <span class="mi">255</span><span class="p">,</span> <span class="n">ADAPTIVE_THRESH_MEAN_C</span><span class="p">,</span> <span class="n">THRESH_BINARY</span><span class="p">,</span> <span class="mi">15</span><span class="p">,</span> <span class="o">-</span><span class="mi">2</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="c1">// ~ 反色 bitwise_not(src, dst);
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>
</span></span><span class="line"><span class="cl">	<span class="c1">// 水平结构元素
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">Mat</span> <span class="n">hline</span> <span class="o">=</span> <span class="n">getStructuringElement</span><span class="p">(</span><span class="n">MORPH_RECT</span><span class="p">,</span> <span class="n">Size</span><span class="p">(</span><span class="n">src</span><span class="p">.</span><span class="n">cols</span> <span class="o">/</span> <span class="mi">16</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">Point</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">	<span class="c1">// 垂直结构元素
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">Mat</span> <span class="n">vline</span> <span class="o">=</span> <span class="n">getStructuringElement</span><span class="p">(</span><span class="n">MORPH_RECT</span><span class="p">,</span> <span class="n">Size</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">src</span><span class="p">.</span><span class="n">rows</span> <span class="o">/</span> <span class="mi">16</span><span class="p">),</span> <span class="n">Point</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">	<span class="c1">// 矩形结构，可以用于OCR
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">Mat</span> <span class="n">kernel</span> <span class="o">=</span> <span class="n">getStructuringElement</span><span class="p">(</span><span class="n">MORPH_RECT</span><span class="p">,</span> <span class="n">Size</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">3</span><span class="p">),</span> <span class="n">Point</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">morphologyEx</span><span class="p">(</span><span class="n">src</span><span class="p">,</span> <span class="n">dst</span><span class="p">,</span> <span class="n">CV_MOP_BLACKHAT</span><span class="p">,</span> <span class="n">hline</span><span class="p">);</span>
</span></span></code></pre></div><h2 id="图像上采样和下采样">图像上采样和下采样</h2>
<h3 id="图像金字塔">图像金字塔</h3>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-09-2903.07.24.png" alt="iShot2020-09-2903.07.24.png"  /></p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-09-2903.08.01.png" alt="iShot2020-09-2903.08.01.png"  /></p>
<p><a href="https://pic.kanikig.xyz/image/RRFz">
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-09-2903.07.36.png" alt="iShot2020-09-2903.07.36.png"  /></a></p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-09-2903.07.49.png" alt="iShot2020-09-2903.07.49.png"  /></p>
<h3 id="示例-6">示例</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="n">pyrUp</span><span class="p">(</span><span class="n">Mat</span> <span class="n">src</span><span class="p">,</span> <span class="n">Mat</span> <span class="n">dst</span><span class="p">,</span> <span class="n">Size</span><span class="p">(</span><span class="n">src</span><span class="p">.</span><span class="n">cols</span><span class="o">*</span><span class="mi">2</span><span class="p">,</span> <span class="n">src</span><span class="p">.</span><span class="n">rows</span><span class="o">*</span><span class="mi">2</span><span class="p">))</span> 
</span></span><span class="line"><span class="cl"><span class="c1">//生成的图像是原图在宽与高各放大两倍
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">pyrDown</span><span class="p">(</span><span class="n">Mat</span> <span class="n">src</span><span class="p">,</span> <span class="n">Mat</span> <span class="n">dst</span><span class="p">,</span> <span class="n">Size</span><span class="p">(</span><span class="n">src</span><span class="p">.</span><span class="n">cols</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span> <span class="n">src</span><span class="p">.</span><span class="n">rows</span><span class="o">/</span><span class="mi">2</span><span class="p">))</span>
</span></span><span class="line"><span class="cl"><span class="c1">//生成的图像是原图在宽与高各缩小1/2
</span></span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="c1">// DOG
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="n">Mat</span> <span class="n">gray_src</span><span class="p">,</span> <span class="n">g1</span><span class="p">,</span> <span class="n">g2</span><span class="p">,</span> <span class="n">dogImg</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">	<span class="n">cvtColor</span><span class="p">(</span><span class="n">src</span><span class="p">,</span> <span class="n">gray_src</span><span class="p">,</span> <span class="n">CV_BGR2GRAY</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">	<span class="n">GaussianBlur</span><span class="p">(</span><span class="n">gray_src</span><span class="p">,</span> <span class="n">g1</span><span class="p">,</span> <span class="n">Size</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="mi">5</span><span class="p">),</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">	<span class="n">GaussianBlur</span><span class="p">(</span><span class="n">g1</span><span class="p">,</span> <span class="n">g2</span><span class="p">,</span> <span class="n">Size</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="mi">5</span><span class="p">),</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">	<span class="n">subtract</span><span class="p">(</span><span class="n">g1</span><span class="p">,</span> <span class="n">g2</span><span class="p">,</span> <span class="n">dogImg</span><span class="p">,</span> <span class="n">Mat</span><span class="p">());</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">	<span class="c1">// 归一化显示
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>	<span class="n">normalize</span><span class="p">(</span><span class="n">dogImg</span><span class="p">,</span> <span class="n">dogImg</span><span class="p">,</span> <span class="mi">255</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">NORM_MINMAX</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">	<span class="n">imshow</span><span class="p">(</span><span class="s">&#34;DOG Image&#34;</span><span class="p">,</span> <span class="n">dogImg</span><span class="p">);</span>
</span></span></code></pre></div><h2 id="基本阈值操作">基本阈值操作</h2>
<h3 id="阈值概念">阈值概念</h3>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-09-2903.25.07.png" alt="iShot2020-09-2903.25.07.png"  /></p>
<h3 id="阈值类型">阈值类型</h3>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-09-2903.25.56.png" alt="iShot2020-09-2903.25.56.png"  /></p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-09-2903.26.08.png" alt="iShot2020-09-2903.26.08.png"  /></p>
<p><a href="https://pic.kanikig.xyz/image/RcmM">
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-09-2903.26.14.png" alt="iShot2020-09-2903.26.14.png"  /></a></p>
<p><a href="https://pic.kanikig.xyz/image/RKws">
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-09-2903.26.46.png" alt="iShot2020-09-2903.26.46.png"  /></a></p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-09-2903.26.52.png" alt="iShot2020-09-2903.26.52.png"  /></p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-09-2903.27.06.png" alt="iShot2020-09-2903.27.06.png"  /></p>
<h3 id="示例-7">示例</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="n">cvtColor</span><span class="p">(</span><span class="n">src</span><span class="p">,</span> <span class="n">gray_src</span><span class="p">,</span> <span class="n">CV_BGR2GRAY</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="n">threshold</span><span class="p">(</span><span class="n">src</span><span class="p">,</span> <span class="n">dst</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">255</span><span class="p">,</span> <span class="n">THRESH_TRIANGLE</span> <span class="o">|</span> <span class="n">type_value</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="c1">//OISU和TRIANGLE自动计算阈值，故dst后阈值写0被忽略
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>
</span></span><span class="line"><span class="cl"><span class="k">enum</span> <span class="nc">ThresholdTypes</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">THRESH_BINARY</span>     <span class="o">=</span> <span class="mi">0</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="n">THRESH_BINARY_INV</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="n">THRESH_TRUNC</span>      <span class="o">=</span> <span class="mi">2</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="n">THRESH_TOZERO</span>     <span class="o">=</span> <span class="mi">3</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="n">THRESH_TOZERO_INV</span> <span class="o">=</span> <span class="mi">4</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="n">THRESH_MASK</span>       <span class="o">=</span> <span class="mi">7</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="n">THRESH_OTSU</span>       <span class="o">=</span> <span class="mi">8</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="n">THRESH_TRIANGLE</span>   <span class="o">=</span> <span class="mi">16</span>
</span></span><span class="line"><span class="cl"><span class="p">};</span>
</span></span></code></pre></div><h2 id="自定义线型滤波">自定义线型滤波</h2>
<h3 id="卷积概念">卷积概念</h3>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-09-2904.00.29.png" alt="iShot2020-09-2904.00.29.png"  /></p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-09-2904.00.43.png" alt="iShot2020-09-2904.00.43.png"  /></p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-09-2904.02.52.png" alt="iShot2020-09-2904.02.52.png"  /></p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-09-2904.02.15.png" alt="iShot2020-09-2904.02.15.png"  /></p>
<h3 id="常见算子">常见算子</h3>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-09-2904.03.02.png" alt="iShot2020-09-2904.03.02.png"  /></p>
<h3 id="自定义卷积模糊">自定义卷积模糊</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="n">filter2D</span><span class="p">(</span>
</span></span><span class="line"><span class="cl"><span class="n">Mat</span> <span class="n">src</span><span class="p">,</span> <span class="c1">//输入图像
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">Mat</span> <span class="n">dst</span><span class="p">,</span> <span class="c1">// 模糊图像
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kt">int</span> <span class="n">depth</span><span class="p">,</span> <span class="c1">// 图像深度32/8
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">Mat</span> <span class="n">kernel</span><span class="p">,</span> <span class="c1">// 卷积核/模板
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">Point</span> <span class="n">anchor</span><span class="p">,</span> <span class="c1">// 锚点位置
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kt">double</span> <span class="n">delta</span> <span class="c1">// 计算出来的像素+delta
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="p">)</span>
</span></span></code></pre></div><h3 id="示例-8">示例</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl">	<span class="c1">// Sobel X 方向
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">Mat</span> <span class="n">kernel_x</span> <span class="o">=</span> <span class="p">(</span><span class="n">Mat_</span><span class="o">&lt;</span><span class="kt">int</span><span class="o">&gt;</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span> <span class="o">&lt;&lt;</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">2</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">//Sobel Y 方向
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">Mat</span> <span class="n">kernel_y</span> <span class="o">=</span> <span class="p">(</span><span class="n">Mat_</span><span class="o">&lt;</span><span class="kt">int</span><span class="o">&gt;</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span> <span class="o">&lt;&lt;</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">2</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">1</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// 拉普拉斯算子
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">Mat</span> <span class="n">kernel</span> <span class="o">=</span> <span class="p">(</span><span class="n">Mat_</span><span class="o">&lt;</span><span class="kt">int</span><span class="o">&gt;</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span> <span class="o">&lt;&lt;</span> <span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">filter2D</span><span class="p">(</span><span class="n">src</span><span class="p">,</span> <span class="n">dst</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="n">kernel_x</span><span class="p">,</span> <span class="n">Point</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">),</span> <span class="mf">0.0</span><span class="p">);</span>
</span></span></code></pre></div><h2 id="边缘处理">边缘处理</h2>
<h3 id="卷积边缘问题">卷积边缘问题</h3>
<p><a href="https://pic.kanikig.xyz/image/ROJS">
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-09-2904.13.20.png" alt="iShot2020-09-2904.13.20.png"  /></a></p>
<h3 id="处理边缘">处理边缘</h3>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-09-2904.13.34.png" alt="iShot2020-09-2904.13.34.png"  /></p>
<h3 id="示例-9">示例</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="n">copyMakeBorder</span><span class="err">（</span>
</span></span><span class="line"><span class="cl"> <span class="n">Mat</span> <span class="n">src</span><span class="p">,</span> <span class="c1">// 输入图像
</span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="n">Mat</span> <span class="n">dst</span><span class="p">,</span> <span class="c1">// 添加边缘图像
</span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="kt">int</span> <span class="n">top</span><span class="p">,</span> <span class="c1">// 边缘长度，一般上下左右都取相同值，
</span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="kt">int</span> <span class="n">bottom</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="kt">int</span> <span class="n">left</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="kt">int</span> <span class="n">right</span><span class="p">,</span> 
</span></span><span class="line"><span class="cl"> <span class="kt">int</span> <span class="n">borderType</span> <span class="c1">// 边缘类型
</span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="n">Scalar</span> <span class="n">value</span> 
</span></span><span class="line"><span class="cl"><span class="err">）</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="k">while</span><span class="p">(</span><span class="nb">true</span><span class="p">){</span>
</span></span><span class="line"><span class="cl">  <span class="n">c</span> <span class="o">=</span> <span class="n">waitKey</span><span class="p">(</span><span class="mi">500</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">  <span class="c1">//esc
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>  <span class="k">if</span><span class="p">((</span><span class="kt">char</span><span class="p">)</span><span class="n">c</span> <span class="o">==</span> <span class="mi">27</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="p">{</span><span class="k">break</span><span class="p">;}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><h2 id="sobel算子">Sobel算子</h2>
<h3 id="卷积应用-边缘提取">卷积应用-边缘提取</h3>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-10-0204.39.29.png" alt="iShot2020-10-0204.39.29.png"  /></p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-10-0204.39.51.png" alt="iShot2020-10-0204.39.51.png"  /></p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-10-0204.40.04.png" alt="iShot2020-10-0204.40.04.png"  /></p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-10-0204.40.15.png" alt="iShot2020-10-0204.40.15.png"  /></p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-10-0204.49.30.png" alt="iShot2020-10-0204.49.30.png"  /></p>
<h3 id="示例-10">示例</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="n">Sobel</span> <span class="p">(</span>
</span></span><span class="line"><span class="cl"><span class="n">InputArray</span> <span class="n">Src</span> <span class="c1">// 输入图像
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">OutputArray</span> <span class="n">dst</span><span class="c1">// 输出图像，大小与输入图像一致
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kt">int</span> <span class="n">depth</span> <span class="c1">// 输出图像深度. 
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">Int</span> <span class="n">dx</span><span class="p">.</span>  <span class="c1">// X方向，几阶导数
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kt">int</span> <span class="n">dy</span> <span class="c1">// Y方向，几阶导数. 
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kt">int</span> <span class="n">ksize</span><span class="p">,</span> <span class="n">SOBEL算子kernel大小</span><span class="err">，必须是</span><span class="mi">1</span><span class="err">、</span><span class="mi">3</span><span class="err">、</span><span class="mi">5</span><span class="err">、</span><span class="mi">7</span><span class="err">、</span>
</span></span><span class="line"><span class="cl"><span class="kt">double</span> <span class="n">scale</span>  <span class="o">=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl"><span class="kt">double</span> <span class="n">delta</span> <span class="o">=</span> <span class="mi">0</span>
</span></span><span class="line"><span class="cl"><span class="kt">int</span> <span class="n">borderType</span> <span class="o">=</span> <span class="n">BORDER_DEFAULT</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">//Sobel 的改进
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">Scharr</span> <span class="p">(</span>
</span></span><span class="line"><span class="cl"><span class="n">InputArray</span> <span class="n">Src</span> <span class="c1">// 输入图像
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">OutputArray</span> <span class="n">dst</span><span class="c1">// 输出图像，大小与输入图像一致
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kt">int</span> <span class="n">depth</span> <span class="c1">// 输出图像深度. 
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">Int</span> <span class="n">dx</span><span class="p">.</span>  <span class="c1">// X方向，几阶导数
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kt">int</span> <span class="n">dy</span> <span class="c1">// Y方向，几阶导数. 
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kt">double</span> <span class="n">scale</span>  <span class="o">=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl"><span class="kt">double</span> <span class="n">delta</span> <span class="o">=</span> <span class="mi">0</span>
</span></span><span class="line"><span class="cl"><span class="kt">int</span> <span class="n">borderType</span> <span class="o">=</span> <span class="n">BORDER_DEFAULT</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="c1">//步骤
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">GaussianBlur</span><span class="p">(</span> <span class="n">src</span><span class="p">,</span> <span class="n">dst</span><span class="p">,</span> <span class="n">Size</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mi">3</span><span class="p">),</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">BORDER_DEFAULT</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="n">cvtColor</span><span class="p">(</span> <span class="n">src</span><span class="p">,</span>  <span class="n">gray</span><span class="p">,</span> <span class="n">COLOR_RGB2GRAY</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="n">Scharr</span><span class="p">(</span><span class="n">gray_src</span><span class="p">,</span> <span class="n">xgrad</span><span class="p">,</span> <span class="n">CV_16S</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="n">Scharr</span><span class="p">(</span><span class="n">gray_src</span><span class="p">,</span> <span class="n">ygrad</span><span class="p">,</span> <span class="n">CV_16S</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Sobel(gray_src, xgrad, CV_16S, 1, 0, 3);
</span></span></span><span class="line"><span class="cl"><span class="c1">// Sobel(gray_src, ygrad, CV_16S, 0, 1, 3);
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">convertScaleAbs</span><span class="p">(</span><span class="n">xgrad</span><span class="p">,</span> <span class="n">xgrad</span><span class="p">);</span><span class="c1">// 计算图像A的像素绝对值，输出到图像B
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">convertScaleAbs</span><span class="p">(</span><span class="n">ygrad</span><span class="p">,</span> <span class="n">ygrad</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="n">addWeighted</span><span class="p">(</span> <span class="n">xgrad</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">,</span><span class="n">ygrad</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">xygrad</span><span class="p">);</span>
</span></span></code></pre></div><h2 id="laplance算子">Laplance算子</h2>
<h3 id="理论-1">理论</h3>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-10-0308.21.04.png" alt="iShot2020-10-0308.21.04.png"  /></p>
<p><a href="https://pic.kanikig.xyz/image/R6PE">
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-10-0308.21.20.png" alt="iShot2020-10-0308.21.20.png"  /></a></p>
<h3 id="示例-11">示例</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="n">Laplacian</span><span class="p">(</span>
</span></span><span class="line"><span class="cl"><span class="n">InputArray</span> <span class="n">src</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"><span class="n">OutputArray</span> <span class="n">dst</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"><span class="kt">int</span> <span class="n">depth</span><span class="p">,</span> <span class="c1">//深度CV_16S
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kt">int</span> <span class="n">kisze</span><span class="p">,</span> <span class="c1">// 3
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kt">double</span> <span class="n">scale</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"><span class="kt">double</span> <span class="n">delta</span> <span class="o">=</span><span class="mf">0.0</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"><span class="kt">int</span> <span class="n">borderType</span> <span class="o">=</span> <span class="mi">4</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="n">Mat</span> <span class="n">gray_src</span><span class="p">,</span> <span class="n">edge_image</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="n">GaussianBlur</span><span class="p">(</span><span class="n">src</span><span class="p">,</span> <span class="n">dst</span><span class="p">,</span> <span class="n">Size</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">3</span><span class="p">),</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="n">cvtColor</span><span class="p">(</span><span class="n">dst</span><span class="p">,</span> <span class="n">gray_src</span><span class="p">,</span> <span class="n">CV_BGR2GRAY</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="n">Laplacian</span><span class="p">(</span><span class="n">gray_src</span><span class="p">,</span> <span class="n">edge_image</span><span class="p">,</span> <span class="n">CV_16S</span><span class="p">,</span> <span class="mi">3</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="n">convertScaleAbs</span><span class="p">(</span><span class="n">edge_image</span><span class="p">,</span> <span class="n">edge_image</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="n">threshold</span><span class="p">(</span><span class="n">edge_image</span><span class="p">,</span> <span class="n">edge_image</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">255</span><span class="p">,</span> <span class="n">THRESH_OTSU</span> <span class="o">|</span> <span class="n">THRESH_BINARY</span><span class="p">);</span>
</span></span></code></pre></div><h2 id="canny边缘检测">Canny边缘检测</h2>
<h3 id="算法介绍">算法介绍</h3>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-10-0308.33.22.png" alt="iShot2020-10-0308.33.22.png"  /></p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-10-0308.33.30.png" alt="iShot2020-10-0308.33.30.png"  /></p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-10-0308.33.36.png" alt="iShot2020-10-0308.33.36.png"  /></p>
<p><a href="https://pic.kanikig.xyz/image/R4rH">
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-10-0308.40.36.png" alt="iShot2020-10-0308.40.36.png"  /></a></p>
<h3 id="示例-12">示例</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="n">Canny</span><span class="err">（</span>
</span></span><span class="line"><span class="cl"><span class="n">InputArray</span> <span class="n">src</span><span class="p">,</span> <span class="c1">// 8-bit的输入图像
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">OutputArray</span> <span class="n">edges</span><span class="p">,</span><span class="c1">// 输出边缘图像， 一般都是二值图像，背景是黑色
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kt">double</span> <span class="n">threshold1</span><span class="p">,</span><span class="c1">// 低阈值，常取高阈值的1/2或者1/3
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kt">double</span> <span class="n">threshold2</span><span class="p">,</span><span class="c1">// 高阈值
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kt">int</span> <span class="n">aptertureSize</span><span class="p">,</span><span class="c1">// Soble算子的size，通常3x3，取值3
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kt">bool</span> <span class="n">L2gradient</span> <span class="c1">// 选择 true表示是L2来归一化，否则用L1归一化
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="err">）</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="n">cvtColor</span><span class="p">(</span><span class="n">src</span><span class="p">,</span> <span class="n">gray_src</span><span class="p">,</span> <span class="n">CV_BGR2GRAY</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="n">blur</span><span class="p">(</span><span class="n">gray_src</span><span class="p">,</span> <span class="n">gray_src</span><span class="p">,</span> <span class="n">Size</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">3</span><span class="p">),</span> <span class="n">Point</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">),</span> <span class="n">BORDER_DEFAULT</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="n">Canny</span><span class="p">(</span><span class="n">gray_src</span><span class="p">,</span> <span class="n">edge_output</span><span class="p">,</span> <span class="n">t1_value</span><span class="p">,</span> <span class="n">t1_value</span> <span class="o">*</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="nb">false</span><span class="p">);</span>
</span></span></code></pre></div><h2 id="霍夫变换-直线检测">霍夫变换-直线检测</h2>
<h3 id="理论-2">理论</h3>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-10-0308.48.47.png" alt="iShot2020-10-0308.48.47.png"  /></p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-10-0308.49.31.png" alt="iShot2020-10-0308.49.31.png"  /></p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-10-0308.49.25.png" alt="iShot2020-10-0308.49.25.png"  /></p>
<p><a href="https://pic.kanikig.xyz/image/RJiz">
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/iShot2020-10-0308.50.04.md.png" alt="iShot2020-10-0308.50.04.md.png"  /></a></p>
<blockquote>
<p>补充资料：https://blog.csdn.net/leonardohaig/article/details/87907462?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_weight&amp;depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_weight</p>
</blockquote>
<h3 id="示例-13">示例</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="n">HoughLines</span><span class="p">(</span>
</span></span><span class="line"><span class="cl"><span class="n">InputArray</span> <span class="n">src</span><span class="p">,</span> <span class="c1">// 输入图像，必须8-bit的灰度图像
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">OutputArray</span> <span class="n">lines</span><span class="p">,</span> <span class="c1">// 输出的极坐标来表示直线
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kt">double</span> <span class="n">rho</span><span class="p">,</span> <span class="c1">// 生成极坐标时候的像素扫描步长
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kt">double</span> <span class="n">theta</span><span class="p">,</span> <span class="c1">//生成极坐标时候的角度步长，一般取值CV_PI/180
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kt">int</span> <span class="n">threshold</span><span class="p">,</span> <span class="c1">// 阈值，只有获得足够交点的极坐标点才被看成是直线
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kt">double</span> <span class="n">srn</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span><span class="c1">// 是否应用多尺度的霍夫变换，如果不是设置0表示经典霍夫变换
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kt">double</span> <span class="n">stn</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span><span class="c1">//是否应用多尺度的霍夫变换，如果不是设置0表示经典霍夫变换
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kt">double</span> <span class="n">min_theta</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span> <span class="c1">// 表示角度扫描范围 0 ~180之间， 默认即可
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kt">double</span> <span class="n">max_theta</span><span class="o">=</span><span class="n">CV_PI</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span> <span class="c1">// 一般情况是有经验的开发者使用，需要自己反变换到平面空间
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>
</span></span><span class="line"><span class="cl"><span class="n">HoughLinesP</span><span class="p">(</span>
</span></span><span class="line"><span class="cl"><span class="n">InputArray</span> <span class="n">src</span><span class="p">,</span> <span class="c1">// 输入图像，必须8-bit的灰度图像
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">OutputArray</span> <span class="n">lines</span><span class="p">,</span> <span class="c1">// 输出的极坐标来表示直线
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kt">double</span> <span class="n">rho</span><span class="p">,</span> <span class="c1">// 生成极坐标时候的像素扫描步长，一般为1
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kt">double</span> <span class="n">theta</span><span class="p">,</span> <span class="c1">//生成极坐标时候的角度步长，一般取值CV_PI/180
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kt">int</span> <span class="n">threshold</span><span class="p">,</span> <span class="c1">// 阈值，只有获得足够交点的极坐标点才被看成是直线
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kt">double</span> <span class="n">minLineLength</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span><span class="c1">// 最小直线长度
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kt">double</span> <span class="n">maxLineGap</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span><span class="c1">// 最大间隔
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="p">)</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="c1">// extract edge
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">Canny</span><span class="p">(</span><span class="n">src</span><span class="p">,</span> <span class="n">src_gray</span><span class="p">,</span> <span class="mi">150</span><span class="p">,</span> <span class="mi">200</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="n">cvtColor</span><span class="p">(</span><span class="n">src_gray</span><span class="p">,</span> <span class="n">dst</span><span class="p">,</span> <span class="n">CV_GRAY2BGR</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="n">imshow</span><span class="p">(</span><span class="s">&#34;edge image&#34;</span><span class="p">,</span> <span class="n">src_gray</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">vector</span><span class="o">&lt;</span><span class="n">Vec4f</span><span class="o">&gt;</span> <span class="n">plines</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="n">HoughLinesP</span><span class="p">(</span><span class="n">src_gray</span><span class="p">,</span> <span class="n">plines</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">CV_PI</span> <span class="o">/</span> <span class="mf">180.0</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">10</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="n">Scalar</span> <span class="n">color</span> <span class="o">=</span> <span class="n">Scalar</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">255</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="p">(</span><span class="n">size_t</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="n">plines</span><span class="p">.</span><span class="n">size</span><span class="p">();</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="n">Vec4f</span> <span class="n">hline</span> <span class="o">=</span> <span class="n">plines</span><span class="p">[</span><span class="n">i</span><span class="p">];</span>
</span></span><span class="line"><span class="cl">		<span class="n">line</span><span class="p">(</span><span class="n">dst</span><span class="p">,</span> <span class="n">Point</span><span class="p">(</span><span class="n">hline</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">hline</span><span class="p">[</span><span class="mi">1</span><span class="p">]),</span> <span class="n">Point</span><span class="p">(</span><span class="n">hline</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span> <span class="n">hline</span><span class="p">[</span><span class="mi">3</span><span class="p">]),</span> <span class="n">color</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="n">LINE_AA</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div>]]></content:encoded>
    </item>
    
    <item>
      <title>目前最稳！使用Gost隧道中转搭建Telegram代理</title>
      <link>https://blog.kanikig.xyz/%E7%9B%AE%E5%89%8D%E6%9C%80%E7%A8%B3%E4%BD%BF%E7%94%A8Gost%E9%9A%A7%E9%81%93%E4%B8%AD%E8%BD%AC%E6%90%AD%E5%BB%BATelegram%E4%BB%A3%E7%90%86/</link>
      <pubDate>Sat, 01 Aug 2020 22:21:38 +0000</pubDate>
      
      <guid>https://blog.kanikig.xyz/%E7%9B%AE%E5%89%8D%E6%9C%80%E7%A8%B3%E4%BD%BF%E7%94%A8Gost%E9%9A%A7%E9%81%93%E4%B8%AD%E8%BD%AC%E6%90%AD%E5%BB%BATelegram%E4%BB%A3%E7%90%86/</guid>
      <description>前言 阅读本文需要有一定linux知识，懂一点linux命令。 本文完全原创，转载请注明。 为什么要采用隧道中转搭建？ 现有的几种常用Telegra</description>
      <content:encoded><![CDATA[<h2 id="前言">前言</h2>
<blockquote>
<p>阅读本文需要有一定linux知识，懂一点linux命令。</p>
<p>本文完全原创，转载请注明。</p>
</blockquote>
<h3 id="为什么要采用隧道中转搭建">为什么要采用隧道中转搭建？</h3>
<p>现有的几种常用Telegram代理方式有如下问题：</p>
<ul>
<li>socks直连：秒封</li>
<li>mtproto直连：基本秒封</li>
<li>mtproto+tls：能有效抗封锁，但是限于直连线路的情况，延迟一般较高</li>
<li>mtproto+中转：mtp流量在国内是会被识别的，NAT商家一般都严禁走mtp</li>
</ul>
<p>那么有没有一种方式能够避免以上所有问题？就是采用隧道中转搭建socks代理。</p>
<p>基本原理如下：</p>
<p>在国外落地机搭建socks代理，国内中转机器使用gost，在两机器间建立加密隧道过墙（隧道是目前最佳的抗封锁形式）。</p>
<h2 id="搭建教程">搭建教程</h2>
<h3 id="示例">示例</h3>
<p>下文演示按照如下假设：</p>
<ul>
<li>国内nat：
<ul>
<li>ip：A.A.A.A</li>
<li>内网端口：11360</li>
<li>外网端口：49698（部分商家支持映射内外网端口一致，这里以不一致做示范，请手动创建好映射）</li>
</ul>
</li>
<li>落地socks5：
<ul>
<li>落地ip：B.B.B.B</li>
<li>socks端口：7891</li>
<li>socks用户名：123456</li>
<li>socks密码：654321</li>
</ul>
</li>
</ul>
<p>自己的各项参数请与示例一一对应，不要照抄。</p>
<h3 id="安装gost">安装gost</h3>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2021/01/19/68747470733a2f2f692e6c6f6c692e6e65742f323032302f31322f31342f713735504f367332444d4963554b422e706e67.png" alt="68747470733a2f2f692e6c6f6c692e6e65742f323032302f31322f31342f713735504f367332444d4963554b422e706e67.png"  /></p>
<p>本人基于原EasyGost脚本进行了修改增强，增加了许多功能，具体功能可以看项目页：</p>
<p><a href="https://github.com/KANIKIG/Multi-EasyGost">项目地址</a></p>
<p>一键脚本：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">wget --no-check-certificate -O gost.sh https://raw.githubusercontent.com/KANIKIG/Multi-EasyGost/master/gost.sh <span class="o">&amp;&amp;</span> chmod +x gost.sh <span class="o">&amp;&amp;</span> ./gost.sh
</span></span></code></pre></div><p>再次运行本脚本只需要输入<code>./gost.sh</code>回车即可</p>
<p>我们在<strong>落地机与国内NAT</strong>均运行此脚本，选1，安装gost。</p>
<p><a href="https://pic.kanikig.xyz/image/XoNz">
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2021/01/18/iShot2021-01-1809.35.59.png" alt="iShot2021-01-1809.35.59.png"  /></a></p>
<p>国内机器安装gost请选择国内加速源，不然从GitHub拉取很慢。</p>
<h3 id="国内nat配置">国内NAT配置</h3>
<p>我们使用脚本添加gost加密转发</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="c1">#启动脚本</span>
</span></span><span class="line"><span class="cl">./gost.sh
</span></span></code></pre></div><p>接下来按照指示操作即可，我按照前文的示例填写，请自行对应。隧道传输类型选哪个都可以，但是中转和落地选择必须一致。</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2021/01/18/iShot2021-01-1809.46.55.png" alt="iShot2021-01-1809.46.55.png"  /></p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2021/01/18/iShot2021-01-1809.51.34.png" alt="iShot2021-01-1809.51.34.png"  /></p>
<p>注意这里的目的地端口不能是落地的socks端口，应当是它之外的任意一个空闲端口，仅用于解密隧道流量，具体可以见下一步。上文我选的443，如果落地机器443被站点占用，可以更换为任意端口，不影响安全性。</p>
<h3 id="落地机配置">落地机配置</h3>
<p>脚本内置了socks代理一键安装（gost内置）</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="c1">#启动脚本</span>
</span></span><span class="line"><span class="cl">./gost.sh
</span></span></code></pre></div><p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2021/01/18/iShot2021-01-1809.39.54.png" alt="iShot2021-01-1809.39.54.png"  /></p>
<p>安装好后先用tg直连一下这个socks代理，确定直连能通再进行隧道转发。（确认通了就关掉，socks裸奔很快就会被封）</p>
<p>接下来对接隧道落地端，按照指示操作即可，我按照前文的示例填写，请自行对应。</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2021/01/18/iShot2021-01-1809.50.03.png" alt="iShot2021-01-1809.50.03.png"  /></p>
<p><a href="https://pic.kanikig.xyz/image/XZ7y">
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2021/01/18/iShot2021-01-1809.51.59.png" alt="iShot2021-01-1809.51.59.png"  /></a></p>
<p>注意流量入口和国内机填的目的地端口必须一致，ip填127.0.0.1，也就是本机ip，这里的目的地端口即为socks代理监听的端口。</p>
<h3 id="tg连接测试">TG连接测试</h3>
<p>填写如下</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/Screenshot_2020-08-01-23-22-14.jpg" alt="Screenshot_2020-08-01-23-22-14.jpg"  /></p>
<p>如果发现没通，请仔细检查自己参数与示例的对应关系。</p>
<h2 id="后记">后记</h2>
<p>个人体验延迟非常低，并且视频加载速度很快，使用已基本接近在国内使用微信。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>R语言使用Plotly进行3D可视化</title>
      <link>https://blog.kanikig.xyz/R%E8%AF%AD%E8%A8%80%E4%BD%BF%E7%94%A8plotly%E8%BF%9B%E8%A1%8C3D%E5%8F%AF%E8%A7%86%E5%8C%96/</link>
      <pubDate>Thu, 23 Apr 2020 12:21:13 +0000</pubDate>
      
      <guid>https://blog.kanikig.xyz/R%E8%AF%AD%E8%A8%80%E4%BD%BF%E7%94%A8plotly%E8%BF%9B%E8%A1%8C3D%E5%8F%AF%E8%A7%86%E5%8C%96/</guid>
      <description>前言 对于简单的多维矩阵数据处理，用R还是比较方便的，语法也很简洁. 在做的过程有了解到通过等高线图或热力图的方式表现应力应变的平面分布，我在找</description>
      <content:encoded><![CDATA[<h2 id="前言">前言</h2>
<p>对于简单的多维矩阵数据处理，用R还是比较方便的，语法也很简洁.</p>
<p>在做的过程有了解到通过等高线图或热力图的方式表现应力应变的平面分布，我在找这种图的实现方式时，在人大经济论坛上看有到大佬提到R语言Plotly这么个包。</p>
<p>了解之后被他的表现力吸引了，原来可视化能用这么简单的方式做的这么漂亮。就决定是你了！</p>
<p>这是官网给出的3D Surface Plot 的 Demo：<strong>Volcano</strong></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-R" data-lang="R"><span class="line"><span class="cl"><span class="nf">library</span><span class="p">(</span><span class="n">plotly</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="c1"># volcano is a numeric matrix that ships with R</span>
</span></span><span class="line"><span class="cl"><span class="n">fig</span> <span class="o">&lt;-</span> <span class="nf">plot_ly</span><span class="p">(</span><span class="n">z</span> <span class="o">=</span> <span class="o">~</span><span class="n">volcano</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">fig</span> <span class="o">&lt;-</span> <span class="n">fig</span> <span class="o">%&gt;%</span> <span class="nf">add_surface</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">fig</span>
</span></span></code></pre></div><p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/pl2.png" alt="pl2.png"  /></p>
<p><a href="https://plotly.com/r/3d-surface-plots/">点这前往</a></p>
<p>3D模型是交互性的，可以用鼠标拖动，指针的位置还会显示数据。</p>
<h2 id="关于plotly">关于Plotly</h2>
<p>Plotly是一个非常强大的开源<strong>交互式</strong>可视化包，支持Python，R，Matlab（貌似是非官方）。大概阅读了官方文档后感觉对Python的功能支持更好，对于R的话部分功能实现仍存在一定困难。</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/pl3.png" alt="pl3.png"  /></p>
<p>有在线和离线模式，在线模式是注册官网账户以后，可以把你的可视化结果上传到官方平台，在线保存查看。我用的是离线模式。</p>
<h2 id="可视化实现">可视化实现</h2>
<p>Plotly绘制3D曲面图需要一个<strong>二维纯数值矩阵</strong>，所以组员处理完原始数据后，给我的是一系列不同深度z上的水平面的应力（应变）矩阵（矩阵的i即为x轴，j即为y轴）。</p>
<p>由于我们划分实际水平面是按2cm*2cm划分，所以矩阵所有ij点需要乘2才是实际坐标。</p>
<p>单个图参照官网给的Demo就能实现，Rstudio不仅可以导出静态图片，还可以以html的形式输出整个三维模型，用浏览器能交互式查看。前文给出的官方Demo页面就能体验一下。</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/pl1.png" alt="pl1.png"  /></p>
<p>而我们需要做的是一个初始参数变化时，他的应力应变分布的变化，这就需要gif动画来实现了。</p>
<p>我阅读了Plotly官方文档后，R的包貌似不支持通过代码输出html，也不支持生成三维动画（我尝试用for循环输出结果，但是并没有实现动画）。</p>
<p>也可能是我研究不够深入，最后采取了比较笨的方法。</p>
<p>循环输出jpeg图片，然后用gif制作软件拼接实现动画。（至少不用思考怎么代码实现动画了）</p>
<p>代码如下：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-R" data-lang="R"><span class="line"><span class="cl"><span class="nf">library</span><span class="p">(</span><span class="n">stringr</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nf">library</span><span class="p">(</span><span class="n">dplyr</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nf">library</span><span class="p">(</span><span class="n">plotly</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nf">library</span><span class="p">(</span><span class="n">processx</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">#将矩阵ij转换为实际坐标</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">x1</span> <span class="o">&lt;-</span> <span class="nf">seq</span><span class="p">(</span><span class="m">0</span><span class="p">,</span><span class="n">by</span><span class="o">=</span><span class="m">2</span><span class="p">,</span><span class="n">length.out</span><span class="o">=</span><span class="m">100</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">y1</span> <span class="o">&lt;-</span> <span class="nf">seq</span><span class="p">(</span><span class="m">0</span><span class="p">,</span><span class="n">by</span><span class="o">=</span><span class="m">2</span><span class="p">,</span><span class="n">length.out</span><span class="o">=</span><span class="m">100</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">#获取文件夹路径下的所有文件名，用于循环遍历</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">strdir</span> <span class="o">&lt;-</span> <span class="s">&#34;./3D/data-z/ txy (kPa)&#34;</span>
</span></span><span class="line"><span class="cl"><span class="n">dir</span> <span class="o">&lt;-</span> <span class="nf">dir</span><span class="p">(</span><span class="n">strdir</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">#遍历文件夹下所有csv数据文件，每个文件输出一张图</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nf">for </span><span class="p">(</span><span class="n">i</span> <span class="n">in</span> <span class="m">1</span><span class="o">:</span><span class="nf">length</span><span class="p">(</span><span class="n">dir</span><span class="p">))</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl"><span class="n">stress</span> <span class="o">&lt;-</span> <span class="nf">as.matrix</span><span class="p">(</span><span class="nf">read.csv</span><span class="p">(</span><span class="n">file</span> <span class="o">=</span> <span class="nf">str_c</span><span class="p">(</span><span class="n">strdir</span><span class="p">,</span><span class="s">&#34;/&#34;</span><span class="p">,</span><span class="n">dir[i]</span><span class="p">)))</span>  <span class="c1">#读取的文件转换为纯数值矩阵</span>
</span></span><span class="line"><span class="cl"><span class="n">stress</span> <span class="o">&lt;-</span> <span class="n">stress[</span><span class="p">,</span><span class="m">-1</span><span class="n">]</span>  <span class="c1">#给我的csv文件第一列是序号，不需要用，故删除</span>
</span></span><span class="line"><span class="cl"><span class="n">fig</span> <span class="o">&lt;-</span> <span class="nf">plot_ly</span><span class="p">(</span><span class="n">z</span><span class="o">=~</span><span class="n">stress</span><span class="p">,</span> <span class="n">x</span><span class="o">=</span><span class="n">x1</span><span class="p">,</span> <span class="n">y</span><span class="o">=</span><span class="n">y1</span><span class="p">)</span><span class="o">%&gt;%</span><span class="nf">add_surface</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="n">fig</span> <span class="o">&lt;-</span> <span class="n">fig</span> <span class="o">%&gt;%</span> <span class="nf">layout</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">  <span class="n">title</span> <span class="o">&lt;-</span> <span class="n">dir[i]</span><span class="p">,</span> 
</span></span><span class="line"><span class="cl">  <span class="n">scene</span> <span class="o">&lt;-</span> <span class="nf">list</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">    <span class="n">yaxis</span> <span class="o">&lt;-</span> <span class="nf">list</span><span class="p">(</span><span class="n">autorange</span> <span class="o">=</span> <span class="s">&#34;reversed&#34;</span><span class="p">),</span> <span class="c1">#我们定的坐标系y轴是反转的</span>
</span></span><span class="line"><span class="cl">    <span class="n">zaxis</span> <span class="o">&lt;-</span> <span class="nf">list</span><span class="p">(</span><span class="n">title</span> <span class="o">=</span> <span class="s">&#34;剪应力&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="p">))</span>
</span></span><span class="line"><span class="cl"><span class="nf">orca</span><span class="p">(</span><span class="n">fig</span><span class="p">,</span> <span class="nf">str_c</span><span class="p">(</span><span class="n">dir[i]</span><span class="p">,</span><span class="s">&#34;.jpeg&#34;</span><span class="p">))</span> <span class="c1">#orca是官方文档给出的图片输出方式，需要另外安装</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>用gif软件拼接图片后，最后实现动画效果如图：</p>
<p><a href="https://pic.kanikig.xyz/image/X661">
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/pl4.gif" alt="pl4.gif"  /></a></p>
<p>以上。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>奈飞如何强制看1080p？</title>
      <link>https://blog.kanikig.xyz/%E5%A5%88%E9%A3%9E%E5%A6%82%E4%BD%95%E5%BC%BA%E5%88%B6%E7%9C%8B1080p/</link>
      <pubDate>Tue, 21 Apr 2020 13:30:29 +0000</pubDate>
      
      <guid>https://blog.kanikig.xyz/%E5%A5%88%E9%A3%9E%E5%A6%82%E4%BD%95%E5%BC%BA%E5%88%B6%E7%9C%8B1080p/</guid>
      <description>前言 相关文章：小白也能看奈飞 之前的教程讲了如何成功观看奈飞，但是很多人又遇到新的问题：无法观看1080p清晰度，最高只到720p。那我们买的</description>
      <content:encoded><![CDATA[<h2 id="前言">前言</h2>
<blockquote>
<p>相关文章：<a href="https://blog.kanikig.xyz/%E5%B0%8F%E7%99%BD%E4%B9%9F%E8%83%BD%E7%9C%8B%E5%A5%88%E9%A3%9E/">小白也能看奈飞</a></p>
</blockquote>
<p>之前的教程讲了如何成功观看奈飞，但是很多人又遇到新的问题：无法观看1080p清晰度，最高只到720p。那我们买的支持1080p的标准套餐岂不是浪费了？</p>
<p>为了帮助大家，首先我们要了解为什么你只能观看720p清晰度。</p>
<h3 id="为什么我无法看1080p">为什么我无法看1080p？</h3>
<p>这是因为Netflix对设备及浏览器都有进行认证，而大名鼎鼎的Chrome与Firefox没有申请认证，导致最高只能支持720p。微软的旧版edge有认证，但是新版的chromium内核edge仍只能默认支持720p。</p>
<h3 id="奈飞对各浏览器的清晰度支持列表">奈飞对各浏览器的清晰度支持列表</h3>
<ul>
<li>Google Chrome
<ul>
<li>Windows、Mac 与 Linux  720p</li>
<li>Chrome OS  1080p</li>
</ul>
</li>
<li>Internet Explorer  1080p</li>
<li>Microsoft Edge（旧版） 4K*</li>
<li>Microsoft Edge（新版chromium内核） 720p</li>
<li>Mozilla Firefox  720p</li>
<li>Opera 可達 720p</li>
<li>Mac OS X 10.10.3 或更新版本上的 Safari  1080p</li>
</ul>
<h2 id="如何观看netflix1080p">如何观看Netflix1080p？</h2>
<p>Chrome及基于chromium内核开发的浏览器（新edge）都不支持1080p，但是它们的用户群体非常大，不能观看1080p也未免太过遗憾。</p>
<p>实际上步骤很简单，很快就能搞定。</p>
<h3 id="下载netflix-1080p扩展">下载Netflix 1080p扩展</h3>
<p>谷歌扩展商店已经无法下载，我们需要从开发者那里直接下载包</p>
<p>下载地址：https://github.com/truedread/netflix-1080p/releases</p>
<p><a href="https://pic.kanikig.xyz/image/R3xJ">
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/nfp1.png" alt="nfp1.png"  /></a></p>
<p>这里要下载第二个<strong>Source Code（zip）</strong></p>
<p>下载完成后放到一个自己不会乱删除的地方，<strong>解压</strong></p>
<p><a href="https://pic.kanikig.xyz/image/Rl1m">
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/nfp2.png" alt="nfp2.png"  /></a></p>
<h3 id="安装扩展">安装扩展</h3>
<p>安装步骤为：</p>
<ul>
<li>打开chrome或新edge的扩展管理</li>
<li>开启开发人员模式</li>
<li>将刚解压好的插件<strong>文件夹</strong>直接拖入窗口</li>
</ul>
<p>安装成功！</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/nfp3.png" alt="nfp3.png"  /></p>
<h3 id="测试播放">测试播放</h3>
<p>打开一个奈飞视频，按住Ctrl+Alt+Shift+D，可以查看详细播放数据。</p>
<p>刚打开清晰度较低，需要播放一会儿，等速度跑起来。</p>
<p>可以看到已经成功解锁1080p了！</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/nfp4.png" alt="nfp4.png"  /></p>
<blockquote>
<p>参考文章：</p>
<p>疯先生：https://mrmad.com.tw/chrome-netflix-1080p</p>
</blockquote>
<blockquote>
<p><strong>如果您觉得有帮助，可以在下面打赏请我喝可乐</strong>🥤🥤🥤</p>
</blockquote>
]]></content:encoded>
    </item>
    
    <item>
      <title>Linux基础笔记</title>
      <link>https://blog.kanikig.xyz/Linux%E5%9F%BA%E7%A1%80%E7%AC%94%E8%AE%B0/</link>
      <pubDate>Sat, 18 Apr 2020 22:37:02 +0000</pubDate>
      
      <guid>https://blog.kanikig.xyz/Linux%E5%9F%BA%E7%A1%80%E7%AC%94%E8%AE%B0/</guid>
      <description>去年学习python基础课时包含的linux基础课程笔记 记得很简略基本上只有自己看得懂。。 一、操作系统与Linux 1. Operating System 1）操作硬件 2）将操</description>
      <content:encoded><![CDATA[<blockquote>
<p>去年学习python基础课时包含的linux基础课程笔记</p>
<p>记得很简略基本上只有自己看得懂。。</p>
</blockquote>
<h2 id="一操作系统与linux">一、操作系统与Linux</h2>
<h3 id="1-operating-system">1. Operating System</h3>
<p>1）操作硬件
2）将操作硬件的方法封装为系统调用</p>
<h4 id="11-操作系统分类">1.1 操作系统分类</h4>
<ul>
<li>桌面操作系统</li>
<li>服务器操作系统</li>
<li>嵌入式操作系统</li>
<li>移动设备操作系统</li>
</ul>
<h3 id="2操作系统发展史">2.操作系统发展史</h3>
<h4 id="21-unix">2.1 Unix</h4>
<p>星际旅行
BCPL-&gt;B语言-&gt;C语言
Unix
多用户</p>
<h4 id="22-linux">2.2 Linux</h4>
<p>在minix基础上
内核</p>
<h4 id="23-linux内核与发行版">2.3 Linux内核与发行版</h4>
<p>增加了终端命令
内核是封装好的系统调用
发行版是在内核基础上开发的一套应用程序</p>
<h4 id="24-linux文件系统">2.4 Linux文件系统</h4>
<p>win 盘符
因为xp之前都是单用户</p>
<p>linux
home下放着各个用户的文件夹</p>
<p>etc 系统配置文件
bin 可执行二进制文件
home 用户目录</p>
<h2 id="二linux终端命令">二、Linux终端命令</h2>
<p>掌握常用的十几个即可,不常用的查表</p>
<p>ctrl +/- 放大终端字体</p>
<h3 id="1最常见的7个命令">1.最常见的7个命令:</h3>
<ol>
<li><strong>ls</strong>      list 查看当前文件夹下的内容</li>
<li><strong>pwd</strong>     print work directoty 查看当前文件夹</li>
<li><strong>cd</strong>      change directory 切换文件夹</li>
<li><strong>touch</strong>   touch  如果文件不存在则新建文件</li>
<li><strong>mkdir</strong>   make directory 创建目录</li>
<li><strong>rm</strong>      remove 删除文件</li>
<li><strong>clear</strong>   清屏</li>
</ol>
<h3 id="2终端命令格式">2.终端命令格式</h3>
<p>command [-option][parameter]</p>
<p>rm -r 文件夹</p>
<h3 id="3查阅命令帮助信息">3.查阅命令帮助信息</h3>
<p>两种方式</p>
<p><strong>command &ndash;help</strong></p>
<p><strong>man command</strong>
空格 翻页
回车 下一行
b 回滚一页
f 翻页
q 退出</p>
<p>(command 为对应命令）</p>
<h3 id="4文件和目录常用命令">4.文件和目录常用命令</h3>
<p>ls cd touch rm mkdir</p>
<p>tab自动补全文件名 如果有其他选择，再按一次，系统会提示可能命令</p>
<p>上下可以切换至以前的命令
ctrl c 直接回到最下</p>
<p>拷贝和移动
tree cp mv</p>
<p>查看文件内容
cat more grep</p>
<h4 id="1-ls">1) ls</h4>
<p>.开头为隐藏文件 ls需要-a (all)
如果需要创建隐藏文件，只需要加.</p>
<p>. 当前目录
.. 上级目录</p>
<p>ls -a   显示全部文件
ls -l   列表方式显示文件全部信息
ls -h   配合-l人性化显示文件大小</p>
<p>drwxr-xr-x 4 kanikig kanikig    4096 5月  19 18:02 AppWebCache
drwxr-xr-x 3 kanikig kanikig    4096 6月  16 22:55 Audio
drwxr-xr-x 2 kanikig kanikig    4096 5月  18 18:13 CloudRes
-rw-r&ndash;r&ndash; 1 kanikig kanikig   33280 5月  26 15:05 CustomFace.db
-rw-r&ndash;r&ndash; 1 kanikig kanikig  494509 7月   9 14:01 CustomFace.dbc
-rw-r&ndash;r&ndash; 1 kanikig kanikig  132096 7月   9 14:01 DingDongStorage.db
-rw-r&ndash;r&ndash; 1 kanikig kanikig       0 5月  18 18:08 DingDongStorage.db-journal
-rw-r&ndash;r&ndash; 1 kanikig kanikig   25600 7月   9 14:01 DocImport.db</p>
<p>d代表目录</p>
<p>ls -l -h
文件大小更直观
drwxr-xr-x 4 kanikig kanikig 4.0K 5月  19 18:02 AppWebCache
drwxr-xr-x 3 kanikig kanikig 4.0K 6月  16 22:55 Audio
drwxr-xr-x 2 kanikig kanikig 4.0K 5月  18 18:13 CloudRes
-rw-r&ndash;r&ndash; 1 kanikig kanikig  33K 5月  26 15:05 CustomFace.db
-rw-r&ndash;r&ndash; 1 kanikig kanikig 483K 7月   9 14:01 CustomFace.dbc</p>
<p>选项可以连写 如
ls -alh</p>
<p>ls与通配符</p>
<ul>
<li>任意字符串
?   任意字符
[]  匹配字符组任意一个 [1-9] [abc]</li>
</ul>
<p>如 ls m* 找m开头的</p>
<h4 id="2-cd">2) cd</h4>
<p>常用参数</p>
<p>cd 直接回家
或者加波浪号 ~ 直接返回家目录
cd - 在最近两次目录切换</p>
<p>相对路径
绝对路径 /或者~开头</p>
<h4 id="3--touch">3)  touch</h4>
<p>如果已经存在，则修改日期更新</p>
<h4 id="4--mkdir">4)  mkdir</h4>
<p>-p 连续创建目录</p>
<p>mkdir -p a/b/c/d</p>
<p>(linux 一个目录下 文件夹和文件也不可重名)</p>
<h4 id="5--rm">5)  rm</h4>
<p>-f 强制删除
-r 递归删除</p>
<p>同样可使用通配符</p>
<h4 id="6--tree">6)  tree</h4>
<p>树状图列出文件系统</p>
<p>-d 只显示目录</p>
<h4 id="7--cp">7)  cp</h4>
<p>cd 源文件 目标文件</p>
<p>文本编辑器 ctrl s 快速保存</p>
<p>后面可以指定文件名
不改的话可以只写目录</p>
<p>-i 覆盖文件前提示
-r 递归复制整个文件夹</p>
<h4 id="8--mv">8)  mv</h4>
<p>mv 源文件 目标文件
-i 覆盖前提示</p>
<h4 id="9--cat">9)  cat</h4>
<p>concatenate
查看文件内容</p>
<p>-b 对非空输出行编号
-n 对全部输出行编号</p>
<h4 id="10-more">10) more</h4>
<p>分页显示
用来查看大文件</p>
<p>操作快捷键和man一样</p>
<h4 id="11-grep">11） grep</h4>
<p>强大的文本搜索工具</p>
<p>-n 显示行号
-v 不包含文本内容的行（求反
-i 忽略大小写</p>
<p>模式查找
^asdasd  行开头匹配
asdasd$  行尾匹配</p>
<h4 id="12-echo">12) echo</h4>
<p>在终端输出</p>
<p>重定向：把本应该在终端输出的内容输出到文件里</p>
<p>&lsquo;&gt;&lsquo;输出到文件（覆盖）</p>
<p>&lsquo;&raquo;&lsquo;追加</p>
<p>\就是换行
不仅可以用与echo
ls也可重定向</p>
<p>ls -lh &raquo;a</p>
<h4 id="13-">13) |</h4>
<p>管道
一个命令的输出通过管道作为另一个命令的输入</p>
<p>ls -lha | more  分页显示
ls -lha | grep ds 筛选输出</p>
<h2 id="三远程管理">三、远程管理</h2>
<h3 id="1shutdown">1.shutdown</h3>
<p>shutdown 选项 时间</p>
<p>默认是一分钟后关机
now 立即重启</p>
<p>shutdown 20:25
shutdown +10 十分钟后关机</p>
<p>-r 重启</p>
<h3 id="2查看配置网卡">2.查看配置网卡</h3>
<p>网卡
负责网络通讯的硬件设备
ip地址是设置在网卡上的地址信息</p>
<p><strong>ifconfig</strong> 查看/配置网卡信息
<strong>ping</strong> 测试连接是否正常</p>
<p>ifconfig | grep inet 快速看ip
一个物理网卡和多个虚拟网卡
物理网卡 ens..</p>
<p>ping
ctrl c 停止</p>
<h3 id="3远程登录和复制">3.远程登录和复制</h3>
<h4 id="1--ssh">1)  ssh</h4>
<p>Secure Shell</p>
<p>域名 ip地址别名
端口号 通过端口号可以找到计算机运行的应用程序
ssh端口号默认22 可缺省
ftp 21
web服务器 80</p>
<p><strong>ssh [-p port] user@remote</strong>
remote为远程ip
port 默认22</p>
<p>exit退出登录</p>
<h4 id="2--scp">2)  scp</h4>
<p>远程拷贝文件</p>
<p>从远程下到本地 scp -P(大写！) 22 源文件 user@remote:目标文件
从本地传到远程 scp user@remote:源文件 目标文件
-r 传送文件夹
-P指定端口</p>
<h4 id="3--ssh高级">3)  ssh高级</h4>
<p>免密码登录
配置别名</p>
<p>ssh的配置信息都在.ssh下</p>
<p>免密码登录：
本地 .ssh目录下执行ssh-keygen 一路回车 生成两个文件 （公钥，私钥）
然后ssh-copy-id [-p] user@remote 会把一个授权文件传到服务器的.ssh下</p>
<p>非对称加密算法
使用公钥加密的数据，需要用私钥解密
用私钥加密的数据，用公钥解密</p>
<p>在本地通过私钥加密数据，在服务器的公钥对数据解密</p>
<p>配置别名：
在.ssh下创建config文件
在其中写入</p>
<p>Host h1
HostName 202.182.115.91
User root
Port 22</p>
<h2 id="四用户与权限">四、用户与权限</h2>
<p>用户与权限的概念
用户管理
组管理
修改权限</p>
<h3 id="1用户与权限">1.用户与权限</h3>
<p>读 r 4
写 w 2
执行 x 1</p>
<p>用户组</p>
<h4 id="1">1）</h4>
<p>​     权限       用户     组
drwxr-xr-x 3 kanikig kanikig 4.0K 5月  18 16:45 Music
drwxr-xr-x 2 kanikig kanikig 4.0K 5月  18 22:17 Pictures
drwxr-xr-x 3 kanikig kanikig 4.0K 7月   8 22:58 PycharmProjects
-rw-r&ndash;r&ndash; 1 kanikig kanikig  485 7月  11 15:39 shadowsocks.json
-rw-r&ndash;r&ndash; 1 kanikig kanikig  485 7月  11 15:25 shadowsocs.json
-rw-r&ndash;r&ndash; 1 kanikig kanikig    0 5月  18 16:44 stale_outputs_checked
drwxr-xr-x 2 kanikig kanikig 4.0K 5月  18 14:25 Videos</p>
<p>硬链接数 有多少种方式能够访问一个文件或目录
文件一般是1 即绝对路径
文件夹 2或以上 因为可以cd. 或者从子目录cd..（这里可以无数个）</p>
<p>所以硬链接数可以判断子目录个数</p>
<p>第一列 文件或文件夹
之后每3个字符一组
第一组 文件或目录的拥有者
第二组 用户组的权限
第三组 其他用户</p>
<h4 id="2-chmod">2) chmod</h4>
<p>修改文件或目录权限
changemod</p>
<p><strong>chmod +/-rwx 文件或目录</strong></p>
<p>对于目录 可读是阅读目录内容 可写是修改目录内容 可执行是在目录下执行终端命令</p>
<h4 id="3root">3)root</h4>
<p>sudo
substitute user do
5分钟有效期限</p>
<h3 id="2组管理">2.组管理</h3>
<p>groupadd 组名
groupdel 组名
cat /etc/group 确认组信息
chagrp -R 组名 文件/目录  修改文件目录所属的组</p>
<h3 id="3用户管理">3.用户管理</h3>
<p>useradd -m -g 组 用户名
-m 自动建立用户目录
-g 指定用户的组，否则自动建立一个同名组</p>
<p>passwd 设置用户密码
userdel -r 用户名
-r 删除用户家目录
cat /etc/passwd | grep 用户名     确认用户信息
passwd文件
1用户名
2密码 x
3uid
4gid
5用户全名
6家目录
7登录使用的shell</p>
<p>查看用户信息
id 用户名  查看用户id和组id
who 查看当前登录的用户列表
whoami 查看当前登录的用户名</p>
<p>usermod
设置用户主组、附加组和登录shell</p>
<p>主组 建立用户时指定的组
附加组 指定附加组</p>
<p>usermod -g 组 用户名   修改用户主组
usermod -G 组 用户名   修改附加组
usermod -s /bin/bash  修改shell</p>
<p>usermod -G sudo 用户名  将用户添加到sudo</p>
<p>shell 输入终端命令的软件</p>
<p>dash
bash</p>
<p>which
查看执行命令的所在位置</p>
<p>/etc/passwd 保存用户信息
/usr/bin/passwd 修改密码的程序</p>
<p>su 用户名 切换用户
exit 退出</p>
<h3 id="4修改文件权限">4.修改文件权限</h3>
<p>chown 修改拥有者
chagrp 修改组
chmod 修改权限</p>
<p>chown 用户名 文件或目录
chgrp -R 组名 文件或目录
chmod -R 755 文件或目录</p>
<p>7 拥有者的权限
5 组成员权限
5 其他用户权限</p>
<p>r=4
w=2
x=1</p>
<p>所以可以推测</p>
<h2 id="五系统信息">五、系统信息</h2>
<h3 id="1时间日期">1.时间日期</h3>
<p>cal  本月日历  -y 一年的日历
date 当前系统时间</p>
<h3 id="2磁盘信息">2.磁盘信息</h3>
<p>df -h  disk free 显示磁盘剩余空间
du -h  [目录名]  查看目录的占用空间</p>
<h3 id="3进程信息">3.进程信息</h3>
<p>进程：当前正在执行的程序</p>
<p>ps aux   process status查看进程详细情况
top 动态显示进程并排序 q 退出
kill [-9] 进程代号  -9强行停止</p>
<p>ps默认只能看到终端启动的程序
a 所有用户的进程
u 显示进程详细状态
x 显示没有控制终端的进程</p>
<p>最好不要kill root的进程</p>
<h3 id="4其他命令">4.其他命令</h3>
<ul>
<li>find 查找文件</li>
<li>ln   软连接(相当于快捷方式)</li>
<li>tar  打包压缩</li>
<li>apt-get 软件安装</li>
</ul>
<p>find [路径] -name “*.py”
ln -s 源文件 链接文件
源文件要用绝对路径
如果没有-s 会创建一个硬链接</p>
<p>对于软连接，如果源文件被移动或删除，则会失效，硬链接不会</p>
<p>硬链接：
linux中，文件名和文件数据是分开存储的
通过文件名访问数据
而硬链接是和文件名等价的，直接访问数据，相当于别名
软连接是通过软连接文件数据，访问源文件的文件名，间接访问数据
日常基本不会建立硬链接
硬链接数为0时，文件的数据才会删除</p>
<h3 id="5打包压缩">5.打包压缩</h3>
<p>linux常用tar.gz
tar只是打包，不压缩</p>
<p>tar -cvf 打包文件.tar 被打包文件/路径   打包
tar -xvf 打包文件.tar  解包</p>
<p>-v列出打包详细过程
-f指定文件名（f必须放最后）</p>
<p>gzip
压缩打包后的文件</p>
<p>tar -zcvf 打包文件.tar.gz 被压缩文件
tar -zxvf 打包文件.tar.gz   解压缩
tar -zxvf 打包文件.tar.gz -C 目标路径   解压到指定路径</p>
<p>bzip2(two)</p>
<p>tar.bz2</p>
<p>在选项最前加-j</p>
<h3 id="6apt">6.apt</h3>
<p>advanced packaging tool</p>
<p>sudo apt install 软件包
sudo apt remove 软件包
sudo apt upgrade 更新软件包</p>
<p>sl 小火车
htop top的升级版
linuxlogo
screenfetch</p>
<p>让终端变得有意思
在终端输入sudo visudo
在“Defaults”末尾（文件的前半部分）添加一行“Defaults insults”。
保存
之后当你使用sudo，在输入密码的时候，如果输入错误了，那么终端开始胡说八道了</p>
<p>cmatrix 黑客帝国
rev 逆序输出 一般用于管道后
lolcat 彩色输出
cowsay 一头牛说出输出结果
aptitude moo 也是一头牛，但是是用来玩的
fortune 随机输出一段话 -zh 输出中国诗
toilet 打印出大字母
figlet 同上
aafire  这个会在屏幕上显示除一团燃烧着的火焰   sudo apt install libaa-bin
oneko 一只小猫追着鼠标跑
factor 分解质因数
espeak 朗读</p>
<p>fork炸弹。。指数自乘直到占用所有系统资源</p>
<p>bb 一个不太一样的播放器
ASCIIquarium 水族馆</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Ins账号消失？教你迅速找回</title>
      <link>https://blog.kanikig.xyz/Ins%E8%B4%A6%E5%8F%B7%E6%B6%88%E5%A4%B1%E6%95%99%E4%BD%A0%E8%BF%85%E9%80%9F%E6%89%BE%E5%9B%9E/</link>
      <pubDate>Sat, 18 Apr 2020 18:49:16 +0000</pubDate>
      
      <guid>https://blog.kanikig.xyz/Ins%E8%B4%A6%E5%8F%B7%E6%B6%88%E5%A4%B1%E6%95%99%E4%BD%A0%E8%BF%85%E9%80%9F%E6%89%BE%E5%9B%9E/</guid>
      <description>Ins被停用的征兆 当天我下午打开ins时，提示我账户存在问题，需要我验证手机号，我也没多想就填了，如下图显示。 我打开ins他就会弹出上面这个</description>
      <content:encoded><![CDATA[<h2 id="ins被停用的征兆">Ins被停用的征兆</h2>
<p>当天我下午打开ins时，提示我账户存在问题，需要我验证<strong>手机号</strong>，我也没多想就填了，如下图显示。</p>
<p><a href="https://pic.kanikig.xyz/image/QCc7">
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/ins1.md.jpg" alt="ins1.md.jpg"  /></a></p>
<p>我打开ins他就会弹出上面这个页面，不让我进入app。</p>
<p>于是等到晚上，我等不及了就退出了账户，想重新登录试试。结果不论怎么试都无法登录：</p>
<ul>
<li>使用Facebook账户登陆：我ins账户和脸书是绑定的，之前登陆也都是这样登陆的。但是现在登陆却无法进入。</li>
<li>使用账号密码登陆：我有把账号密码记在备忘录的习惯，账号和密码不可能搞错，但是登陆却一直说我密码错误。</li>
</ul>
<p>匪夷所思的我用网页直接搜索我的用户名进入个人主页，结果发现已经找不到用户。</p>
<p>你也可能遇到以下提示，都说明账号已被停用。（图片源于网络）</p>
<p><a href="https://pic.kanikig.xyz/image/QLs6">
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/ins4.jpg" alt="ins4.jpg"  /></a></p>
<p><a href="https://pic.kanikig.xyz/image/QiO0">
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/ins5.md.jpg" alt="ins5.md.jpg"  /></a></p>
<h2 id="如何找回账户">如何找回账户？</h2>
<p>找回非常简单，而且如果在下午（北京时间）很快就能找回。</p>
<p>登陆网址：</p>
<p><a href="https://help.instagram.com/contact/1652567838289083">instagram帮助中心</a></p>
<p>填写表单</p>
<p><a href="https://pic.kanikig.xyz/image/QEL5">
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/ins2.jpg" alt="ins2.jpg"  /></a></p>
<p><strong>注意：</strong></p>
<ul>
<li>邮箱可以不是账户之前绑定的邮箱，他会帮你重新绑定到这个新填写的。</li>
<li>不要填<strong>国内</strong>邮箱！很可能收不到邮件。</li>
<li>账号名如果忘了那就没辙了</li>
<li>姓名可以不是真名</li>
<li>填的信息建议截个图，后面要用到的</li>
<li>国家就填中国即可</li>
</ul>
<p>填写完后很快你会收到如下邮件：</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/ins3.jpg" alt="ins3.jpg"  /></p>
<p>在纸上依次写下他给的：</p>
<ul>
<li>数字代码</li>
<li>全名（就是前面网页填写的姓名，一致即可）</li>
<li>用户名</li>
</ul>
<p>最好用粗的笔写大一点，之后拿着自拍即可。</p>
<p>有的手机相机拍出来是左右镜像的。。自己翻转一下。</p>
<p>直接回复那封邮件，以<strong>附件</strong>形式上传照片。</p>
<p>可以说几句话，我是用英文请他尽快恢复我的账户，语气客气些。</p>
<p>不用等很久，就会收到账户恢复的邮件了！</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/ins6.jpg" alt="ins6.jpg"  /></p>
<h2 id="后记">后记</h2>
<p>最开始我还恶意揣测ins是因为我填的大陆手机号所以封我号，事实证明他们对用户是一视同仁的，邮件也使用的中文，恢复很快，很贴心。</p>
<p>账号丢失让人很难受，关注的人，还有帖子，丢失的是回忆。</p>
<p>希望大家都能尽快找回账号。</p>
<blockquote>
<p><strong>如果您觉得有帮助，可以在下面打赏请我喝可乐</strong>🥤🥤🥤</p>
</blockquote>
]]></content:encoded>
    </item>
    
    <item>
      <title>最强浏览器插件——油猴Tampermonkey</title>
      <link>https://blog.kanikig.xyz/%E6%9C%80%E5%BC%BA%E6%B5%8F%E8%A7%88%E5%99%A8%E6%8F%92%E4%BB%B6%E6%B2%B9%E7%8C%B4Tampermonkey/</link>
      <pubDate>Fri, 10 Apr 2020 15:27:09 +0000</pubDate>
      
      <guid>https://blog.kanikig.xyz/%E6%9C%80%E5%BC%BA%E6%B5%8F%E8%A7%88%E5%99%A8%E6%8F%92%E4%BB%B6%E6%B2%B9%E7%8C%B4Tampermonkey/</guid>
      <description>什么是油猴？ 来看看官方的介绍吧： Tampermonkey 是一款免费的浏览器扩展和最为流行的用户脚本管理器，它适用于 Chrome, Microsoft Edge, Safari, Opera Next, 和 Firefox。 虽然有些受支持的浏</description>
      <content:encoded><![CDATA[<h2 id="什么是油猴">什么是油猴？</h2>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/tampermonkey.png" alt="tampermonkey.png"  /></p>
<p>来看看官方的介绍吧：</p>
<blockquote>
<p><strong>Tampermonkey</strong> 是一款免费的浏览器扩展和最为流行的用户脚本管理器，它适用于 Chrome, Microsoft Edge, Safari, Opera Next, 和 Firefox。</p>
<p>虽然有些受支持的浏览器拥有原生的用户脚本支持，但 Tampermonkey 将在您的用户脚本管理方面提供更多的便利。 它提供了诸如便捷脚本安装、自动更新检查、标签中的脚本运行状况速览、内置的编辑器等众多功能， 同时Tampermonkey还有可能正常运行原本并不兼容的脚本。</p>
<p>它可以很快的安装好，来试一试吧！</p>
</blockquote>
<p>开发者将脚本上传到开放平台，通过油猴能够方便地安装并管理各种脚本，有些脚本的功能堪称<strong>黑科技</strong>。</p>
<p>我个人很喜欢的有：</p>
<ul>
<li>解除B站港澳台区域限制（简称壁外调查🙂）</li>
<li>百度网盘直链下载</li>
<li>百度网盘自动填验证码</li>
<li>各网站去广告</li>
<li>知网pdf下载（这个对大学生来说真的太有用了，我从来没用过caj阅读）</li>
<li>YTB视频下载</li>
<li>HTML5播放</li>
<li>知乎自动展开折叠</li>
<li>&hellip;&hellip;.</li>
</ul>
<p><strong>高度定制你的浏览器，大大提升浏览体验！</strong></p>
<h2 id="如何安装使用油猴">如何安装使用油猴？</h2>
<p>非常简单，去<a href="https://chrome.google.com/webstore/">chrome商店</a>安装即可，微软的edge商店也已经上架。</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/yh2.png" alt="yh2.png"  /></p>
<p><a href="https://pic.kanikig.xyz/image/XB0z">
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/yh3.png" alt="yh3.png"  /></a></p>
<p>安装以后浏览器就出现了猴子标志，点击它，选择获取脚本</p>
<p><a href="https://pic.kanikig.xyz/image/XhC5">
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/yh4.png" alt="yh4.png"  /></a></p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/yh5.png" alt="yh5.png"  /></p>
<p>这里建议选Greasyfork，脚本比较多</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/yh6.png" alt="yh6.png"  /></p>
<p>搜索你想要的脚本关键词，比如我搜索知网CNKI</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/yh7.png" alt="yh7.png"  /></p>
<p>第二个就是我正在用的脚本，点击进去安装。</p>
<p>安装瞬间完成，再次点击猴子进入管理面板，可以看到已经安装并开启了</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/yh8.png" alt="yh8.png"  /></p>
<p><a href="https://pic.kanikig.xyz/image/XMVM">
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/yh9.png" alt="yh9.png"  /></a></p>
<p>进入知网测试，随便找个论文，可以发现页面上多出了pdf下载。知网的学位论文很多不提供pdf，用这个脚本也能下载pdf格式。</p>
<p><a href="https://pic.kanikig.xyz/image/Xuks">
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/yh10.md.png" alt="yh10.md.png"  /></a></p>
<h2 id="脚本推荐">脚本推荐</h2>
<p>好用的脚本很多，下面的参考文章就有大量推荐。</p>
<p>我脚本装的不多，只留了个人常用的</p>
<p>[
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/yh9.png" alt="yh9.png"  /></p>
<p>更多好用的就留给你自己去发现了!</p>
<blockquote>
<p>本文参考以下文章部分内容：</p>
<p>少数派Eric_hong：https://sspai.com/post/40485</p>
<p>少数派Eric_hong：https://sspai.com/post/42380</p>
</blockquote>
<blockquote>
<p><strong>如果您觉得有帮助，可以在下面打赏请我喝可乐</strong>🥤🥤🥤</p>
</blockquote>
]]></content:encoded>
    </item>
    
    <item>
      <title>小白也能看奈飞</title>
      <link>https://blog.kanikig.xyz/%E5%B0%8F%E7%99%BD%E4%B9%9F%E8%83%BD%E7%9C%8B%E5%A5%88%E9%A3%9E/</link>
      <pubDate>Thu, 09 Apr 2020 18:43:29 +0000</pubDate>
      
      <guid>https://blog.kanikig.xyz/%E5%B0%8F%E7%99%BD%E4%B9%9F%E8%83%BD%E7%9C%8B%E5%A5%88%E9%A3%9E/</guid>
      <description>前言 相关文章：奈飞如何强制看1080p？ 什么是奈飞Netflix？ Wikipedia： 奈飞（英语：Netflix（/ˈnɛtflɪks/），</description>
      <content:encoded><![CDATA[<h2 id="前言">前言</h2>
<blockquote>
<p>相关文章：<a href="https://blog.kanikig.xyz/%E5%A5%88%E9%A3%9E%E5%A6%82%E4%BD%95%E5%BC%BA%E5%88%B6%E7%9C%8B1080p%EF%BC%9F/">奈飞如何强制看1080p？</a></p>
</blockquote>
<h3 id="什么是奈飞netflix">什么是奈飞Netflix？</h3>
<p><a href="https://pic.kanikig.xyz/image/R24q">
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/nf5.png" alt="nf5.png"  /></a></p>
<blockquote>
<p><a href="https://zh.wikipedia.org/wiki/Netflix">Wikipedia</a>：</p>
<p><strong>奈飞</strong>（英语：Netflix（/ˈnɛtflɪks/），官方繁体中文名：网飞）是起源于美国、在多国提供网络视频点播的OTT服务公司。</p>
<p>除了光盘出租服务外，奈飞另外提供在线视频流服务，能使用各种网络设备链接到奈飞的在线内容数据库，单一订阅者的账号能同时让多人使用，即使在非订阅者的电脑或设备上也能登录服务。</p>
<p>奈飞在2010年首次对国际市场提供网络流服务，该服务于9月22日在加拿大推出。</p>
<p>如今，奈飞在流媒体平台上已是世界数一数二的佼佼者，主要的竞争对手有HBO、亚马逊视频、Disney+、YouTube、Apple TV+及AT&amp;T。</p>
<p><strong>广电总局规定</strong>，境外公司<strong>不得</strong>在中国<strong>大陆</strong>境内开展视听服务，再加上该地区严厉苛刻的网络审查制度，导致奈飞至今仍未进入中国大陆市场。</p>
<p>奈飞虽然没有进入中国大陆市场，但有购入该国部分的电影和剧集海外播映权。</p>
</blockquote>
<h3 id="为什么选择netflix">为什么选择Netflix？</h3>
<ul>
<li><strong>巨大的影视资源库</strong></li>
</ul>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/nf1.png" alt="nf1.png"  /></p>
<p>奈飞有许多<strong>独家</strong>影视剧集，无法在其他平台观看，其中著名的如：《毒枭》、《纸房子》、《十三个理由》、《瑞克和莫蒂》等等，还有刚刚火热的《王国》（李尸朝鲜）第二季。</p>
<p>除了独家剧集之外，它同时购买了大量<strong>其他</strong>资源，如宫崎骏系列电影、《泰坦尼克号》等经典电影、《老友记》、《生活大爆炸》、《摩登家庭》等经典美剧。</p>
<p>不同地区享有部分地区独享资源，如日本区就有当季新番动漫和日本院线电影，其他区是无法观看的。</p>
<ul>
<li><strong>良好的语言支持</strong></li>
</ul>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/nf4.png" alt="nf4.png"  /></p>
<p>奈飞独家剧集的配音和字幕支持各种语言，满足全球各地区的播放需求。支持中文字幕的有<strong>香港、台湾、新加坡</strong>区，这三个区的资源量差别不大，并且基本所有资源都配有中文字幕。（其他区只有奈飞独家剧集会提供中文，大部分其他资源都不支持中文）</p>
<ul>
<li><strong>高清舒适的播放</strong></li>
</ul>
<p>奈飞支持各种设备，并且提供4k级别的清晰度，带给用户舒适的观看体验。</p>
<h3 id="如何才能看netflix">如何才能看Netflix？</h3>
<h4 id="必要条件">必要条件</h4>
<p>简而言之，只需要3个条件：</p>
<ul>
<li><strong>支持奈飞播放的节点</strong></li>
</ul>
<p>大部分服务器节点是不支持奈飞播放的，所以首先需要确认自己拥有一个支持奈飞播放的节点。具体获取方式这里不提供。</p>
<ul>
<li><strong>奈飞账号</strong></li>
</ul>
<p>不建议自己注册充值，因为奈飞不支持国内支付方式，并且自己购买会很贵。建议的方式是找代充或者买共享号。下节会详细讨论这两种方式。</p>
<ul>
<li><strong>支持奈飞的设备</strong></li>
</ul>
<p>几乎所有设备都可播放，电脑手机上手简单，但是电视较难，后文会具体讨论各种设备如何看奈飞。</p>
<h4 id="操作步骤">操作步骤</h4>
<h5 id="获取账号">获取账号</h5>
<p>前文已经提到，建议的方式是购买<strong>共享号</strong>和找<strong>代充</strong>，本文不提供渠道。</p>
<p>如果是代充一定要<strong>注意</strong>不要自己先去注册，把邮箱和自己想设定的密码交给代充的人让他帮你操作。因为如果你已经注册到支付那一步的话，他是无法正常帮你完成的。完成之后自己修改密码即可，很安全。</p>
<p>共享号较便宜，比较建议按月买每月换，因为毕竟不是自己的号。</p>
<h5 id="套餐选择">套餐选择</h5>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/20451.png" alt="20451.png"  /></p>
<p>奈飞共有三档套餐，具体如上图。正常选择<strong>标准</strong>即可，因为就算选了高级4k，国内大部分设备也都是不支持的。个人体验1080完全足够了。 不同区价格不同，土耳其价格是全球最低，但是也因此奈飞作出了限制措施，现在不好搞到。如果是代充应当了解一下是哪个区的，比较一下价格，共享号不需要了解，因为都很便宜。</p>
<h5 id="播放测试">播放测试</h5>
<p>账号和必要的工具都有了以后，登陆奈飞网站，打开一个<strong>非奈飞独家剧集</strong>（封面上有奈飞的N标志的为奈飞独家）。这是因为奈飞独家剧集不会检测代理工具，普通节点也可以正常播放，但是海量其他资源是会进行探测的。如果播放不幸显示如下，则此节点不支持奈飞：</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/nf2.png" alt="nf2.png"  /></p>
<p><a href="https://pic.kanikig.xyz/image/RtUF">
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/nf3.png" alt="nf3.png"  /></a></p>
<p>只能更换支持奈飞的节点，在浏览器输入 <a href="https://www.netflix.com/clearcookies">https://www.netflix.com/clearcookies</a> ，<strong>清除cookie</strong>后重新登录再测试，直到成功。</p>
<h4 id="新手容易遇到的问题">新手容易遇到的问题</h4>
<ul>
<li><strong>播放清晰度很低</strong></li>
</ul>
<p>这是正常的，除非你的网络快到飞起，一般视频刚开始播放清晰度较低，播放一会儿就逐渐达到清晰度了。</p>
<p>也可能是你忘了设置默认播放清晰度，在<strong>账户</strong>里可以设置默认清晰度，也可对字幕大小、字体等进行设置。</p>
<p>Chrome及新edge无法1080p播放，具体解锁方法见：</p>
<p><a href="https://blog.kanikig.xyz/%E5%A5%88%E9%A3%9E%E5%A6%82%E4%BD%95%E5%BC%BA%E5%88%B6%E7%9C%8B1080p%EF%BC%9F/">奈飞如何强制看1080p？</a></p>
<ul>
<li><strong>提示使用解锁工具</strong></li>
</ul>
<p>上文说过，基本是因为该节点不支持奈飞。如果你确认该节点支持，就清理cookie重新登录试试。</p>
<ul>
<li><strong>如何将账号共享给他人</strong></li>
</ul>
<p><a href="https://pic.kanikig.xyz/image/R24q">
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/nf5.png" alt="nf5.png"  /></a></p>
<p>个人账号可以建立5个账户，互相独立，但是标准套餐只能两个设备同时观看。</p>
<p>如果有多人同时多设备观看，可以购买家庭版。</p>
<h2 id="在不同设备观看netflix">在不同设备观看Netflix</h2>
<h3 id="windows">Windows</h3>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/edge1.jpg" alt="edge1.jpg"  /></p>
<p>建议使用微软的新edge（chromium内核）或者谷歌的chrome。</p>
<p>chrome只支持720p播放</p>
<p>如果使用edge观看出现错误（非提示代理），请在edge的设置里关闭<strong>硬件加速</strong>。</p>
<p>不建议使用uwp应用。</p>
<h3 id="macos">Macos</h3>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/safari.png" alt="safari.png"  /></p>
<p>safari支持1080p清晰度。</p>
<p>个人因为喜欢edge所以macos也用的edge，使用和windows一样。</p>
<h3 id="android">Android</h3>
<p>如果play商店搜不到NF或者提示不支持你的地区，不用慌，很正常。</p>
<p>谷歌搜索apkure，这是个应用下载站，可以下载。</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/apkure.jpg" alt="apkure.jpg"  /></p>
<p>但是必然会遇到一个问题，apkure下载的NF格式是xapk格式，不是传统的apk，无法直接安装。这是比较新的安卓包格式，手动安装需要按如下步骤：</p>
<ol>
<li>
<p>在文件管理器把xapk后缀名改为<strong>zip</strong>然后解压，会发现是一个文件夹，包含了一堆apk。</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/nf6.jpg" alt="nf6.jpg"  /></p>
</li>
<li>
<p>在酷安或者play商店下载<strong>SAI安装器</strong></p>
<p><a href="https://pic.kanikig.xyz/image/R5K1">
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/nf7.md.jpg" alt="nf7.md.jpg"  /></a></p>
</li>
<li>
<p>如果你是MIUI系统（不是的话跳过这步），请进入开发者选项，拉到最下面，关闭<strong>MIUI优化</strong>。完成安装后回来<strong>再开启</strong>即可。</p>
</li>
<li>
<p>使用SAI，点击安装apk，选择进入刚刚一堆apk的文件夹，选中里面<strong>所有</strong>的apk，确认<strong>一个不漏</strong>，然后安装。</p>
<p><a href="https://pic.kanikig.xyz/image/RAuR">
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/nf9.jpg" alt="nf9.jpg"  /></a></p>
</li>
<li>
<p>稍微等待一会儿，安装完成！用上了最新的奈飞app！</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/nf8.jpg" alt="nf8.jpg"  /></p>
</li>
</ol>
<h3 id="ios">ios</h3>
<p>ios需要外区账号，具体获取方式本文不提供。获取到外区账号后，在appstore内切换到该账号即可下载app。</p>
<h3 id="电视">电视</h3>
<p>国内大部分电视不支持NF，而且你必须拥有一个软路由给电视提供代理。如果你一定要在电视上看，除了你必须自备软路由，有以下几种方法：</p>
<ol>
<li>
<p>购买支持NF的电视</p>
</li>
<li>
<p>购买类似于苹果盒子的电视盒</p>
</li>
<li>
<p>这个方法比较巧，是我个人研究出来的。当你能够在电脑正常播放NF后，某宝几十块买一个USB转HDMI线（如果你的电脑自带HDMI口，直接买HDMI线，更便宜）。电视一般有3个HDMI口，把电脑接上去就可以用了。因为是有线连接，投到电视上效果很好，个人体验极佳。</p>
<p><a href="https://pic.kanikig.xyz/image/XR4j">
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/nf11.jpg" alt="nf11.jpg"  /></a></p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/nf12.jpg" alt="nf12.jpg"  /></p>
</li>
</ol>
<blockquote>
<p>本文参考以下文章部分内容：</p>
<p>少数派 JmPotato：https://sspai.com/post/40619</p>
<p>数字移民：https://blog.shuziyimin.org/16</p>
<p>微跨境：https://vkuajing.net/netflix-in-china</p>
</blockquote>
<blockquote>
<p><strong>如果您觉得有帮助，可以在下面打赏请我喝可乐</strong>🥤🥤🥤</p>
</blockquote>
]]></content:encoded>
    </item>
    
    <item>
      <title>沉痛悼念</title>
      <link>https://blog.kanikig.xyz/%E6%B2%89%E7%97%9B%E6%82%BC%E5%BF%B5/</link>
      <pubDate>Sat, 04 Apr 2020 14:09:51 +0000</pubDate>
      
      <guid>https://blog.kanikig.xyz/%E6%B2%89%E7%97%9B%E6%82%BC%E5%BF%B5/</guid>
      <description>愿逝者安息 沉痛缅怀烈士与同胞 愿逝者安息，愿生者奋发，愿祖国昌盛。</description>
      <content:encoded><![CDATA[<h2 id="愿逝者安息">愿逝者安息</h2>
<h3 id="沉痛缅怀烈士与同胞">沉痛缅怀烈士与同胞</h3>
<h3 id="愿逝者安息愿生者奋发愿祖国昌盛">愿逝者安息，愿生者奋发，愿祖国昌盛。</h3>
]]></content:encoded>
    </item>
    
    <item>
      <title>开始你的GitHub之旅</title>
      <link>https://blog.kanikig.xyz/%E5%BC%80%E5%A7%8B%E4%BD%A0%E7%9A%84GitHub%E4%B9%8B%E6%97%85/</link>
      <pubDate>Fri, 03 Apr 2020 19:26:30 +0000</pubDate>
      
      <guid>https://blog.kanikig.xyz/%E5%BC%80%E5%A7%8B%E4%BD%A0%E7%9A%84GitHub%E4%B9%8B%E6%97%85/</guid>
      <description>前言 适合系统：linux和macos 阅读本文需要有一定linux知识，懂一点linux命令。 什么是Github? 要了解什么是GitHub，首</description>
      <content:encoded><![CDATA[<h2 id="前言">前言</h2>
<blockquote>
<p>适合系统：linux和macos</p>
<p>阅读本文需要有一定linux知识，懂一点linux命令。</p>
</blockquote>
<h3 id="什么是github">什么是Github?</h3>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/git.png" alt="git.png"  /></p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/github.jpg" alt="github.jpg"  /></p>
<p>要了解什么是<strong>GitHub</strong>，首先要了解什么是<strong>Git</strong>：</p>
<blockquote>
<p>Git（读音为/gɪt/）是一个开源的分布式版本控制系统，可以有效、高速地处理从很小到非常大的项目版本管理。相比于集中式的最大区别在于开发者可以提交到本地，每个开发者通过克隆（git clone），在本地机器上拷贝一个完整的Git仓库。</p>
</blockquote>
<p><strong>GitHub</strong>：</p>
<blockquote>
<p>GitHub是一个面向<a href="https://baike.baidu.com/item/%E5%BC%80%E6%BA%90/20720669">开源</a>及私有<a href="https://baike.baidu.com/item/%E8%BD%AF%E4%BB%B6/12053">软件</a>项目的托管平台，因为只支持git 作为唯一的版本库格式进行托管，故名GitHub。</p>
</blockquote>
<p>简单来说，就是能把你写的代码项目在任何设备随时上传，可以在任何设备再下载下来，实现多端同步。</p>
<h2 id="正文">正文</h2>
<h3 id="创建你自己的git项目仓库">创建你自己的git项目仓库</h3>
<p>注册github后，进入个人账户页面，有个<strong>New</strong>按钮。点击以后创建<strong>Repository</strong>仓库。</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/img20431.png" alt="img20431.png"  /></p>
<p>命名自己能懂即可，最好和你本地的项目文件夹相似，后面会用到，比如我这里创建的是自己R语言学习的内容</p>
<h3 id="本地部署git">本地部署git</h3>
<p>安装非常简单，只要懂一些命令即可。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">$ sudo apt install git-all <span class="c1">#debian系</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">$ git --version <span class="c1">#macos安装Xcode Command Line Tools后运行该命令即可。Xcode Command Line Tools的安装方式也十分简单，请自行查找。</span>
</span></span></code></pre></div><p>其余系统安装请参考git官网：<a href="https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git">GIT起步</a></p>
<h3 id="将机器与github关联">将机器与Github关联</h3>
<p>相信玩过服务器的朋友应该都知道ssh是什么。由于git是通过ssh完成文件上传下载的，所以需要将一个ssh秘钥文件填到GitHub，完成你的机器的认证。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">$ <span class="nb">cd</span> .ssh 
</span></span></code></pre></div><blockquote>
<p>如果提示No such file or directory，说明本机还没有生成过sshkey，执行下面的命令</p>
</blockquote>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">$ ssh-keygen -t rsa -C <span class="s2">&#34;你的邮箱地址&#34;</span>
</span></span></code></pre></div><p>这步运行结束出现长方形字符画即成功，申请的sshkey已经保存在.ssh文件夹里了。</p>
<p>之后打开秘钥文件复制里面的全部内容：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">$ cat ~/.ssh/id_rsa.pub
</span></span><span class="line"><span class="cl"><span class="c1">#或者如果你会用vim</span>
</span></span><span class="line"><span class="cl">$ vim ~/.ssh/id_rsa.pub
</span></span></code></pre></div><p>当然也可以直接用文本编辑器打开，.ssh隐藏文件夹在你的用户文件夹下。macos显示隐藏文件快捷键为Ctrl+shift+.</p>
<p><a href="https://pic.kanikig.xyz/image/Qgfb">
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/img20433.png" alt="img20433.png"  /></a></p>
<p>回到你的GitHub用户页，点击右上角，进入settings，点击左侧SSH and GPG keys</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/20434.png" alt="20434.png"  /></p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/20435.png" alt="20435.png"  /></p>
<p>点击右上角newsshkeys，标题随意，把复制的秘钥文件内容粘贴进下面的框里保存，就完成的GitHub认证。</p>
<p>
  <img loading="lazy" src="https://pic.kanikig.xyz/images/2020/11/26/20436.png" alt="20436.png"  /></p>
<p>完成之后终端通过以下命令确认SSH key是否成功</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">$ ssh -T git@GitHub.com
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">#最后出现以下内容即成功</span>
</span></span><span class="line"><span class="cl">Hi 你的用户名! You<span class="err">&#39;</span>ve successfully authenticated, but GitHub does not provide shell access.
</span></span></code></pre></div><h3 id="将项目文件夹进行git配置并上传">将项目文件夹进行git配置并上传</h3>
<p>终端通过<strong>cd</strong>进入你想要同步的<strong>项目文件夹</strong>，运行如下命令：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">$ git init <span class="c1">#初始化,这步运行后你的终端会显示git:(master) ✗ </span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">$ git add . <span class="c1">#官网给的指导里写的是README.md，那只是个示范，是只把README.md这个文件上传。这里的意义是同步这个文件夹的所有内容</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">$ git commit -m <span class="s2">&#34;first commit&#34;</span> <span class="c1">#引号内的内容是写你上传更新的原因</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">$ git branch -M main
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">$ git remote add origin https://github.com/你的用户名/你刚刚设置的仓库名.git 
</span></span><span class="line"><span class="cl"><span class="c1">#忘记仓库名的话浏览器进你仓库页面，网址复制下来后面加上.git即可</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">$ git push -u origin main <span class="c1">#push上传</span>
</span></span></code></pre></div><p>完成！现在重新进入仓库页面，可以看到文件夹下的内容已经在里面了！</p>
<p>以后只需要cd到<strong>项目文件夹</strong>，执行<strong>以下的命令</strong>就能上传更新了。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">$ git add .
</span></span><span class="line"><span class="cl">$ git commit -m <span class="s2">&#34;更新原因&#34;</span>
</span></span><span class="line"><span class="cl">git push -u origin main
</span></span></code></pre></div><p>若要将云端代码<strong>同步到本地</strong>，命令：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">$ git pull --rebase origin master
</span></span></code></pre></div><p>然后你就可以愉快地把自己的所有项目进行上传到github了！</p>
<blockquote>
<p>参考3y的文章的部分内容：https://github.com/ZhongFuCheng3y/3y 并作出一定修正改进。</p>
</blockquote>
]]></content:encoded>
    </item>
    
  </channel>
</rss>
