<?xml version="1.0" encoding="utf-8" ?>


<feed xmlns="http://www.w3.org/2005/Atom">
  <title>五百年前</title>

  <description></description>

  <link href="http://www.wanglh.top/"></link>

  <link ref="self" href="http://www.wanglh.top/feed"></link>

  <id></id>


  <updated>2022-08-25T13:32:22Z</updated>


  <entry>


    <title>川藏</title>

    <link href="http://www.wanglh.top/post/travelnotes/chuan-cang-xian"  rel="alternate"></link>

    <updated>2022-08-25T13:32:22Z</updated>
    <id>travelnotes/chuan-cang-xian</id>

    <author>
      <name>五百年前</name>

    </author>
    <summary type="html">&lt;p class="md_block"&gt;
    &lt;span class="md_line md_line_start md_line_end"&gt;两人两车，来一场318摩旅之行。&lt;/span&gt;
&lt;/p&gt;

&lt;h2 id="toc_0" class="h16 md_first_h"&gt;&lt;span class="span_for_h"&gt;装备&lt;/span&gt;&lt;/h2&gt;

&lt;p class="md_block"&gt;
    &lt;span class="md_line md_line_start"&gt;两部摩托车&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line md_line_dom_embed md_line_with_image next_md_line next_img_before next_only_img_before"&gt;&lt;img class="md_compiled " src="/travelNotes/_image/2022-08-08/2022-08-08-17-26-03.png" alt="" title="" &gt;&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line img_before only_img_before"&gt;货架&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;前保险杠&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;萝卜包用来放日常行李，身上小背包放些重要物品&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;手机支架，或者油箱包其实也很方便。&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line md_line_end"&gt;头盔&lt;/span&gt;
&lt;/p&gt;

&lt;h3 id="toc_1" class="h16"&gt;&lt;span class="span_for_h"&gt;生活装备&lt;/span&gt;&lt;/h3&gt;

&lt;p class="md_block"&gt;
    &lt;span class="md_line md_line_start md_line_end"&gt;冲锋衣，轻薄羽绒服，秋裤，墨镜，冰袖，头巾，内衣，短袖，短裤，拖鞋&lt;/span&gt;
&lt;/p&gt;

&lt;h3 id="toc_2" class="h16"&gt;&lt;span class="span_for_h"&gt;常备药品&lt;/span&gt;&lt;/h3&gt;

&lt;p class="md_block"&gt;
    &lt;span class="md_line md_line_start md_line_end"&gt;感冒药、头痛药、预防高反药（口服葡萄糖）、泻立停、便携医用急救包。&lt;/span&gt;
&lt;/p&gt;

&lt;h3 id="toc_3" class="h16"&gt;&lt;span class="span_for_h"&gt;其他证件&lt;/span&gt;&lt;/h3&gt;

&lt;p class="md_block"&gt;
    &lt;span class="md_line md_line_start md_line_end"&gt;身份证、驾驶证、行驶证、年检标、骑行意外险、高危运动意外伤害险。&lt;/span&gt;
&lt;/p&gt;

&lt;h3 id="toc_4" class="h16"&gt;&lt;span class="span_for_h"&gt;车子装备？？？？&lt;/span&gt;&lt;/h3&gt;
&lt;h2 id="toc_5" class="h16"&gt;&lt;span class="span_for_h"&gt;车子托运&lt;/span&gt;&lt;/h2&gt;

&lt;p class="md_block"&gt;
    &lt;span class="md_line md_line_start"&gt;将摩托车从北京托运到成都，然后从成都出发。&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line md_line_end"&gt;整车托运1000元左右。&lt;/span&gt;
&lt;/p&gt;

&lt;h2 id="toc_6" class="h16"&gt;&lt;span class="span_for_h"&gt;路线及规划&lt;/span&gt;&lt;/h2&gt;

&lt;p class="md_block"&gt;
    &lt;span class="md_line md_line_start"&gt;参考攻略&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;&lt;span class="md_line_space_chars md_line_space_chars_1"&gt; &lt;/span&gt;&lt;a class="md_compiled" href="https://zhuanlan.zhihu.com/p/60875167"&gt;摩旅西藏 | 318号公路路书和注意事项&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line md_line_dom_embed"&gt;&lt;a class="md_compiled" href="https://www.mafengwo.cn/i/19688986.html?sys_ver="&gt;川藏南线318摩旅攻略&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line md_line_dom_embed"&gt;&lt;a class="md_compiled" href="http://www.mafengwo.cn/gonglve/ziyouxing/338540.html"&gt;2021川藏线G318超全攻略（附路线图+打卡景点+行程明细）&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;全长2142公里，平均海拔3500米&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;📍 DAY1 成都 - 雅安 150km&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;📍 DAY2 雅安 - 泸定 - 海螺沟 320km&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;📍 DAY3 海螺沟 - 康定 - 新都桥 175km&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;📍 DAY4 新都桥 - 贡嘎 村 110km&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;📍 DAY5 贡嘎 村- 新都桥 - 雅江 180km&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;📍 DAY6 雅江 - 理塘 - 巴塘 230km&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;📍 DAY7 巴塘 - 芒康 - 左贡 220km&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;📍 DAY8 左贡 - 八宿 -然乌湖 231km&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;📍 DAY9 然乌- 波密 -鲁朗- 林芝 357km&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line md_line_end"&gt;📍 DAY10 林芝 - 工布江达 - 拉萨 403km&lt;/span&gt;
&lt;/p&gt;

&lt;span class="md_repeated_n md_repeated_n_1"&gt;&lt;/span&gt;
&lt;p class="md_block last_md_block_in_page"&gt;
    &lt;span class="md_line md_line_start"&gt;海拔图, 平均海拔3500米以上&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line md_line_dom_embed md_line_with_image"&gt;&lt;img class="md_compiled " src="/travelNotes/_image/2022-08-08/2022-08-08-17-47-08.jpg" alt="" title="" &gt;&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line md_line_dom_embed md_line_with_image img_before only_img_before md_line_end"&gt;&lt;img class="md_compiled " src="/travelNotes/_image/2022-08-08/2022-08-08-17-37-14.jpg" alt="" title="" &gt;&lt;/span&gt;
&lt;/p&gt;</summary>

  </entry>


  <entry>


    <title>PlantUML</title>

    <link href="http://www.wanglh.top/post/blog/planuml"  rel="alternate"></link>

    <updated>2022-06-13T13:03:02Z</updated>
    <id>blog/planuml</id>

    <author>
      <name>五百年前</name>

    </author>
    <summary type="html">&lt;blockquote class="blockquote_lines_4 blockquote_without_image"&gt;
&lt;p class="md_block"&gt;
    &lt;span class="md_line md_line_start"&gt;&lt;span class="md_line_space_chars md_line_space_chars_1"&gt; &lt;/span&gt;&lt;a class="md_compiled" href="https://plantuml.com/zh/"&gt;官方文档&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line md_line_end"&gt;&lt;span class="md_line_space_chars md_line_space_chars_1"&gt; &lt;/span&gt;&lt;a class="md_compiled" href="https://excalidraw.com/"&gt;草图工具&lt;/a&gt;&lt;/span&gt;
&lt;/p&gt;

&lt;/blockquote&gt;
&lt;h3 id="toc_0" class="h16 md_first_h"&gt;&lt;span class="span_for_h"&gt;时序图参考案例&lt;/span&gt;&lt;/h3&gt;

&lt;pre&gt;&lt;code&gt;@startuml
title 平台补贴发票主动支付核销时序图
前端 -&amp;gt; SellerInvoiceBill: 1. 选择待核销账单
activate SellerInvoiceBill
SellerInvoiceBill -&amp;gt; SellerInvoiceBillVerifyRecord: 2. 主动支付核销，生成核销记录
activate SellerInvoiceBillVerifyRecord
SellerInvoiceBillVerifyRecord -&amp;gt; 收付中心: 3. 基于核销记录同一个事物内发起申请
activate 收付中心
note left
2,3步骤会控制在同一个事物内部，先2，后3，
如果3已经受理但是timeout等，也不会有影响，因为3幂等
end note
SellerInvoiceBillVerifyRecord &amp;lt;-- 收付中心: 4. 返回结果receiptNo
deactivate 收付中心
SellerInvoiceBill &amp;lt;-- SellerInvoiceBillVerifyRecord: 5. 状态更为核销中，同时透传返回receiptNO
deactivate SellerInvoiceBillVerifyRecord
前端 &amp;lt;-- SellerInvoiceBill: 6. 返回receiptNo
deactivate SellerInvoiceBill
前端 -&amp;gt; 收付中心: 7. 根据receiptNo跳转到收付中心支付页面
activate 收付中心
前端 &amp;lt;-- 收付中心: 8. 支付完成
deactivate 收付中心
SellerInvoiceBillVerifyRecord -&amp;gt; 收付中心: 9. 轮询支付结果
activate SellerInvoiceBillVerifyRecord
activate 收付中心
SellerInvoiceBillVerifyRecord &amp;lt;-- 收付中心: 10. MQ 返回主动支付结果
deactivate 收付中心
deactivate SellerInvoiceBillVerifyRecord
SellerInvoiceBill &amp;lt;-- SellerInvoiceBillVerifyRecord: 11. 更新支付状态
@enduml&lt;/code&gt;&lt;/pre&gt;

&lt;!--block_code_end--&gt;
&lt;p class="md_block last_md_block_in_page"&gt;
    &lt;span class="md_line md_line_dom_embed md_line_with_image md_line_start md_line_end"&gt;&lt;img class="md_compiled " src="/blog/_image/2022-06-13/2022-06-13-20-36-57.png" alt="" title="" &gt;&lt;/span&gt;
&lt;/p&gt;

&lt;span class="md_repeated_n md_repeated_n_1"&gt;&lt;/span&gt;&lt;h3 id="toc_1" class="h16"&gt;&lt;span class="span_for_h"&gt;状态图参考案例&lt;/span&gt;&lt;/h3&gt;</summary>

  </entry>


  <entry>


    <title>Spock单元测试</title>

    <link href="http://www.wanglh.top/post/blog/spock"  rel="alternate"></link>

    <updated>2022-02-22T07:46:24Z</updated>
    <id>blog/spock</id>

    <author>
      <name>五百年前</name>

    </author>
    <summary type="html">&lt;blockquote class="blockquote_lines_2 blockquote_without_image"&gt;
&lt;p class="md_block last_md_block_in_page"&gt;
    &lt;span class="md_line md_line_start"&gt;&lt;span class="md_line_space_chars md_line_space_chars_1"&gt; &lt;/span&gt;&lt;a class="md_compiled" href="https://javakk.com/273.html"&gt;https://javakk.com/273.html&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;
&lt;!--blockquote--&gt;&lt;/p&gt;

&lt;/blockquote&gt;</summary>

  </entry>


  <entry>


    <title>买房日记</title>

    <link href="http://www.wanglh.top/post/blog/mai-fang-ri-ji"  rel="alternate"></link>

    <updated>2022-02-18T12:57:13Z</updated>
    <id>blog/mai-fang-ri-ji</id>

    <author>
      <name>五百年前</name>

    </author>
    <summary type="html">&lt;p class="md_block"&gt;
    &lt;span class="md_line md_line_start md_line_end"&gt;时间匆匆，这周一的时候2.14吧，突然就想买房了。记录下看房记录方便后面比对和筛选。&lt;/span&gt;
&lt;/p&gt;

&lt;h2 id="toc_0" class="h16 md_first_h"&gt;&lt;span class="span_for_h"&gt;回龙观&lt;/span&gt;&lt;/h2&gt;

&lt;p class="md_block"&gt;
    &lt;span class="md_line md_line_start"&gt;首先考虑还是周边一带也就是只能考虑昌平南回龙观了，昌平再北想着以后的发展空间和自己工作的关系也不想太过于偏远了。&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;先上一张大图看看我大回龙观区域位置。&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line md_line_dom_embed md_line_with_image md_line_end"&gt;&lt;img class="md_compiled " src="/blog/_image/2022-02-18/2022-02-18-20-25-16.png" alt="" title="" &gt;&lt;/span&gt;
&lt;/p&gt;

&lt;h3 id="toc_1" class="h16"&gt;&lt;span class="span_for_h"&gt;流行花园三期&lt;/span&gt;&lt;/h3&gt;
&lt;h4 id="toc_2" class="h16"&gt;&lt;span class="span_for_h"&gt;&lt;a class="md_compiled" href="https://bj.ke.com/ershoufang/101113952736.html?fb_expo_id=547154680015298594"&gt;340w精装修房&lt;/a&gt;&lt;/span&gt;&lt;/h4&gt;

&lt;p class="md_block"&gt;
    &lt;span class="md_line md_line_start"&gt;有电梯&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;属于一改二，有个很小的卧室基本只能来人临时趟一下&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;流星花园三区&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;7/11层&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;49平米&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;340万&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;满两年原值247万+30万利息&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;自住装修 保持非常好 看房基本随时 &lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line md_line_dom_embed md_line_with_image"&gt;&lt;img class="md_compiled " src="/blog/_image/2022-02-18/2022-02-18-20-30-29.jpg" alt="" title="" &gt;&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line md_line_dom_embed md_line_with_image img_before only_img_before"&gt;&lt;img class="md_compiled " src="/blog/_image/2022-02-18/2022-02-18-20-30-18.jpg" alt="" title="" &gt;&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line md_line_dom_embed md_line_with_image img_before only_img_before"&gt;&lt;img class="md_compiled " src="/blog/_image/2022-02-18/2022-02-18-20-30-46.jpg" alt="" title="" &gt;&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line md_line_dom_embed md_line_with_image img_before only_img_before"&gt;&lt;img class="md_compiled " src="/blog/_image/2022-02-18/2022-02-18-20-30-53.jpg" alt="" title="" &gt;&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line md_line_dom_embed md_line_with_image img_before only_img_before"&gt;&lt;img class="md_compiled " src="/blog/_image/2022-02-18/2022-02-18-20-31-01.jpg" alt="" title="" &gt;&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line md_line_dom_embed md_line_with_image img_before only_img_before"&gt;&lt;img class="md_compiled " src="/blog/_image/2022-02-18/2022-02-18-20-31-22.jpg" alt="" title="" &gt;&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line md_line_dom_embed md_line_with_image img_before only_img_before next_md_line next_img_before next_only_img_before"&gt;&lt;img class="md_compiled " src="/blog/_image/2022-02-18/2022-02-18-20-31-26.jpg" alt="" title="" &gt;&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line img_before only_img_before"&gt;这个房子整体户型还不错，宽敞明亮大落地窗，精装修可以省一笔装修费。地理位置也还可以，两个地铁站1公里内，临近8号线去市里和西二旗都比较方便。但是房价太高，首付超出预算。&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line md_line_dom_embed md_line_with_image"&gt;&lt;img class="md_compiled " src="/blog/_image/2022-02-18/2022-02-18-20-43-18.png" alt="" title="" &gt;&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line md_line_dom_embed md_line_with_image img_before only_img_before md_line_end"&gt;&lt;img class="md_compiled " src="/blog/_image/2022-02-18/2022-02-18-20-34-53.png" alt="" title="" &gt;&lt;/span&gt;
&lt;/p&gt;

&lt;h2 id="toc_3" class="h16"&gt;&lt;span class="span_for_h"&gt;龙华园&lt;/span&gt;&lt;/h2&gt;
&lt;h3 id="toc_4" class="h16"&gt;&lt;span class="span_for_h"&gt;&lt;a class="md_compiled" href=""&gt;龙华园新上南北通透一居室&lt;/a&gt;&lt;/span&gt;&lt;/h3&gt;

&lt;p class="md_block last_md_block_in_page"&gt;
    &lt;span class="md_line md_line_start"&gt;龙华园新上南北通透一居室，整个小区只有10套！！！&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;报价:346万&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;面积:54.87平米&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;楼层:6/6层，赠送露台&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;性质:商二，原值275万&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;房子精装修，不临街不把边，带13平米露台，南北通透&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line md_line_dom_embed md_line_with_image"&gt;&lt;img class="md_compiled " src="/blog/_image/2022-02-18/2022-02-18-20-43-51.jpg" alt="" title="" &gt;&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line md_line_dom_embed md_line_with_image img_before only_img_before"&gt;&lt;img class="md_compiled " src="/blog/_image/2022-02-18/2022-02-18-20-43-59.jpg" alt="" title="" &gt;&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line md_line_dom_embed md_line_with_image img_before only_img_before"&gt;&lt;img class="md_compiled " src="/blog/_image/2022-02-18/2022-02-18-20-44-04.jpg" alt="" title="" &gt;&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line md_line_dom_embed md_line_with_image img_before only_img_before"&gt;&lt;img class="md_compiled " src="/blog/_image/2022-02-18/2022-02-18-20-44-10.jpg" alt="" title="" &gt;&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line md_line_dom_embed md_line_with_image img_before only_img_before"&gt;&lt;img class="md_compiled " src="/blog/_image/2022-02-18/2022-02-18-20-44-17.jpg" alt="" title="" &gt;&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line md_line_dom_embed md_line_with_image img_before only_img_before next_md_line next_img_before next_only_img_before"&gt;&lt;img class="md_compiled " src="/blog/_image/2022-02-18/2022-02-18-20-44-21.jpg" alt="" title="" &gt;&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line img_before only_img_before"&gt;这个户型长型的，但是南北通透整体也是比较敞亮的，户型还行，顶层有露台可以联通，精装修，距离龙泽地铁站近出行方便。但是首付也够不到。&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line md_line_dom_embed md_line_with_image md_line_end"&gt;&lt;img class="md_compiled " src="/blog/_image/2022-02-18/2022-02-18-20-57-11.png" alt="" title="" &gt;&lt;/span&gt;
&lt;/p&gt;</summary>

  </entry>


  <entry>


    <title>科学上网</title>

    <link href="http://www.wanglh.top/post/blog/ke-xue-shang-wang"  rel="alternate"></link>

    <updated>2021-12-21T03:48:30Z</updated>
    <id>blog/ke-xue-shang-wang</id>

    <author>
      <name>五百年前</name>

    </author>
    <summary type="html">&lt;h2 id="toc_0" class="h16 md_first_h"&gt;&lt;span class="span_for_h"&gt;购买VPS服务器&lt;/span&gt;&lt;/h2&gt;

&lt;p class="md_block"&gt;
    &lt;span class="md_line md_line_start md_line_end"&gt;这里选择了阿里的轻量应用服务器，主要是便宜，最低配置即可。选择香港或者新加坡都可以，貌似只有这两个可选。&lt;/span&gt;
&lt;/p&gt;

&lt;h2 id="toc_1" class="h16"&gt;&lt;span class="span_for_h"&gt;域名&lt;/span&gt;&lt;/h2&gt;

&lt;p class="md_block"&gt;
    &lt;span class="md_line md_line_start md_line_end"&gt;搭建shadowsocks不需要域名，Trojan服务搭建会用到域名，Trojan速度更好，也不容易被封。&lt;/span&gt;
&lt;/p&gt;

&lt;h2 id="toc_2" class="h16"&gt;&lt;span class="span_for_h"&gt;shadowsocks服务端搭建&lt;/span&gt;&lt;/h2&gt;

&lt;p class="md_block"&gt;
    &lt;span class="md_line md_line_start"&gt;首先服务器要有python commond，如果没有可能是没建立软链&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line md_line_end"&gt;ln -s /usr/bin/python3 /usr/bin/python&lt;/span&gt;
&lt;/p&gt;


&lt;p class="md_block"&gt;
    &lt;span class="md_line md_line_start"&gt;执行以下命令&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line md_line_end"&gt;wget https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks.sh&lt;/span&gt;
&lt;/p&gt;


&lt;p class="md_block"&gt;
    &lt;span class="md_line md_line_start md_line_end"&gt;chmod +x shadowsocks.sh&lt;/span&gt;
&lt;/p&gt;


&lt;p class="md_block"&gt;
    &lt;span class="md_line md_line_start md_line_end"&gt;chmod +x shadowsocks.sh&lt;/span&gt;
&lt;/p&gt;


&lt;p class="md_block"&gt;
    &lt;span class="md_line md_line_start md_line_end"&gt;过程中会需要输入密码和端口号，最终配置文件在这里/etc/shadowsocks.json，后续如果端口被封可以在配置里换个端口重新启动即可。&lt;/span&gt;
&lt;/p&gt;


&lt;p class="md_block"&gt;
    &lt;span class="md_line md_line_start"&gt;启动：systemctl start shadowsocks.service &lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;停止：systemctl stop shadowsocks.service &lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;重启：systemctl restart shadowsocks.service &lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line md_line_end"&gt;状态：systemctl status shadowsocks.service&lt;/span&gt;
&lt;/p&gt;

&lt;h3 id="toc_3" class="h16"&gt;&lt;span class="span_for_h"&gt;遇到的问题&lt;/span&gt;&lt;/h3&gt;

&lt;p class="md_block"&gt;
    &lt;span class="md_line md_line_start"&gt;查看服务状态是inactive&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;尝试配置一下防火墙或者重启试试&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;配置防火墙&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;安装 ufw：&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;sudo apt update &amp;amp;&amp;amp; sudo apt install -y ufw&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;允许 SSH 端口：&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;sudo ufw allow ssh&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;允许 shadowsocks-libev 端口，将端口替换为配置文件中指定的端口：&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;sudo ufw allow 12345/tcp&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;启动 ufw，按 Y 确认：&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;sudo ufw enable&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;检查 ufw 的状态：&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line md_line_end"&gt;sudo ufw status&lt;/span&gt;
&lt;/p&gt;

&lt;h3 id="toc_4" class="h16"&gt;&lt;span class="span_for_h"&gt;客户端下载&lt;/span&gt;&lt;/h3&gt;

&lt;p class="md_block"&gt;
    &lt;span class="md_line md_line_start"&gt;macOS：https://github.com/shadowsocks/ShadowsocksX-NG/releases&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line md_line_end"&gt;windows：https://github.com/shadowsocks/shadowsocks-windows/releases&lt;/span&gt;
&lt;/p&gt;


&lt;blockquote class="blockquote_lines_3 blockquote_without_image"&gt;
&lt;p class="md_block"&gt;
    &lt;span class="md_line md_line_start"&gt;&lt;span class="md_line_space_chars md_line_space_chars_1"&gt; &lt;/span&gt;参考文章：https://www.zhanggaoyuan.com/article/4f7e349a.html&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line md_line_end"&gt;https://blog.lingyf.com/build-shadowsocks-server-to-cross-gfw/&lt;/span&gt;
&lt;/p&gt;

&lt;/blockquote&gt;
&lt;h2 id="toc_5" class="h16"&gt;&lt;span class="span_for_h"&gt;Trojan服务端搭建&lt;/span&gt;&lt;/h2&gt;

&lt;blockquote class="blockquote_lines_3 blockquote_without_image"&gt;
&lt;p class="md_block"&gt;
    &lt;span class="md_line md_line_start"&gt;参考文章：https://www.itblogcn.com/article/1257.html&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;https://www.v2rayssr.com/trojanpanel.html/comment-page-2&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line md_line_end"&gt;https://www.v2rayssr.com/&lt;/span&gt;
&lt;/p&gt;

&lt;/blockquote&gt;

&lt;p class="md_block"&gt;
    &lt;span class="md_line md_line_start"&gt;参考这篇文章申请免费域名：https://zhuanlan.zhihu.com/p/115535965&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line md_line_end"&gt;我已经有了阿里的域名，所以直接在那个域名下开了个子域名直接就用了。&lt;/span&gt;
&lt;/p&gt;

&lt;h3 id="toc_6" class="h16"&gt;&lt;span class="span_for_h"&gt;一键搭建&lt;/span&gt;&lt;/h3&gt;

&lt;p class="md_block"&gt;
    &lt;span class="md_line md_line_start"&gt;如果已经有wget，不用安装&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line md_line_end"&gt;yum install -y wget&lt;/span&gt;
&lt;/p&gt;


&lt;p class="md_block"&gt;
    &lt;span class="md_line md_line_start"&gt;执行命令：&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line md_line_end"&gt;wget -N --no-check-certificate -q -O trojan_install.sh &amp;quot;https://raw.githubusercontent.com/V2RaySSR/Trojan/master/trojan_install.sh&amp;quot; &amp;amp;&amp;amp; chmod +x trojan_install.sh &amp;amp;&amp;amp; bash trojan_install.sh&lt;/span&gt;
&lt;/p&gt;


&lt;p class="md_block"&gt;
    &lt;span class="md_line md_line_start md_line_end"&gt;后续按照命令指示执行即可，中间会有一步SSL证书的问题，按照提示注册即可。&lt;/span&gt;
&lt;/p&gt;


&lt;p class="md_block"&gt;
    &lt;span class="md_line md_line_start md_line_end"&gt;安装完成后会有官方客户端下载链接。&lt;/span&gt;
&lt;/p&gt;


&lt;p class="md_block"&gt;
    &lt;span class="md_line md_line_start md_line_end"&gt;配置文件目录：/usr/src/trojan/server.conf&lt;/span&gt;
&lt;/p&gt;

&lt;h3 id="toc_7" class="h16"&gt;&lt;span class="span_for_h"&gt;常用命令&lt;/span&gt;&lt;/h3&gt;

&lt;p class="md_block"&gt;
    &lt;span class="md_line md_line_start"&gt;启动&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;systemctl start trojan&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;重启&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;systemctl restart trojan&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;停止&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;systemctl stop trojan&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;状态查询（如果有显示绿色active(running)，就表示正常运行中）&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;systemctl status trojan&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;错误查询&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;journalctl -e -u trojan.service&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;开机自动启动&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;systemctl enable trojan&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;禁止开机自动启动&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line md_line_end"&gt;systemctl disable trojan&lt;/span&gt;
&lt;/p&gt;

&lt;span class="md_repeated_n md_repeated_n_1"&gt;&lt;/span&gt;&lt;h3 id="toc_8" class="h16"&gt;&lt;span class="span_for_h"&gt;客户端&lt;/span&gt;&lt;/h3&gt;

&lt;p class="md_block last_md_block_in_page"&gt;
    &lt;span class="md_line md_line_start"&gt;客户端不是特别丰富，目前还没找到特比好用的。&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;电脑上，不管是window还是macOs,都是先下载官方客户端服务，让Ta在控制台后台运行，然后再在谷歌浏览器安装SwitchyOmega插件配合使用&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line md_line_dom_embed md_line_with_image md_line_end"&gt;&lt;img class="md_compiled " src="/blog/_image/2021-12-20/2021-12-20-16-49-45.png" alt="" title="" &gt;&lt;/span&gt;
&lt;/p&gt;</summary>

  </entry>


  <entry>


    <title>ElasticSearch数据同步实战</title>

    <link href="http://www.wanglh.top/post/blog/es-in-action"  rel="alternate"></link>

    <updated>2021-12-14T03:58:23Z</updated>
    <id>blog/es-in-action</id>

    <author>
      <name>五百年前</name>

    </author>
    <summary type="html">&lt;h2 id="toc_0" class="h16 md_first_h"&gt;&lt;span class="span_for_h"&gt;写入优化&lt;/span&gt;&lt;/h2&gt;

&lt;p class="md_block"&gt;
    &lt;span class="md_line md_line_start md_line_end"&gt;https://cloud.tencent.com/developer/article/1511890&lt;/span&gt;
&lt;/p&gt;

&lt;h2 id="toc_1" class="h16"&gt;&lt;span class="span_for_h"&gt;索引优化&lt;/span&gt;&lt;/h2&gt;
&lt;h2 id="toc_2" class="h16"&gt;&lt;span class="span_for_h"&gt;乐观锁版本控制&lt;/span&gt;&lt;/h2&gt;

&lt;p class="md_block"&gt;
    &lt;span class="md_line md_line_start md_line_end"&gt;通过版本实现乐观锁，防止数据被低版本的覆盖掉。&lt;/span&gt;
&lt;/p&gt;

&lt;div class="codehilite code_lang_java  highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;org&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;elasticsearch&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;action&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ActionRequestValidationException&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Validation&lt;/span&gt; &lt;span class="n"&gt;Failed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;version&lt;/span&gt; &lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;EXTERNAL_GTE&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="n"&gt;not&lt;/span&gt; &lt;span class="n"&gt;supported&lt;/span&gt; &lt;span class="n"&gt;by&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;update&lt;/span&gt; &lt;span class="n"&gt;API&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ObjectMapperUtils&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;toJSON&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// 目前是双集群，获取当前要写的集群&lt;/span&gt;
&lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;index&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;esIndex&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="na"&gt;shardIndexName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;pickShardFactor&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;esIndex&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="n"&gt;IndexRequest&lt;/span&gt; &lt;span class="n"&gt;indexRequest&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;IndexRequest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getId&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="n"&gt;indexRequest&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;162218455442L&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;indexRequest&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;versionType&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;VersionType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;EXTERNAL_GTE&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;indexRequest&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;source&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;XContentType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="n"&gt;UpdateRequest&lt;/span&gt; &lt;span class="n"&gt;updateRequest&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;UpdateRequest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getId&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getUpdateTime&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="n"&gt;updateRequest&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;162218455442L&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;updateRequest&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;versionType&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;VersionType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;EXTERNAL_GTE&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;updateRequest&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;XContentType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;updateRequest&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;docAsUpsert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="n"&gt;bulkProcessor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;updateRequest&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;!--block_code_end--&gt;&lt;h2 id="toc_3" class="h16"&gt;&lt;span class="span_for_h"&gt;遇到的问题&lt;/span&gt;&lt;/h2&gt;
&lt;h3 id="toc_4" class="h16"&gt;&lt;span class="span_for_h"&gt;indexRequest是覆盖操作&lt;/span&gt;&lt;/h3&gt;

&lt;p class="md_block"&gt;
    &lt;span class="md_line md_line_start md_line_end"&gt;首先要明确概念IndexRequest是覆盖操作，不存在创建，存在直接覆盖（ES内部原理删除再创建）。&lt;/span&gt;
&lt;/p&gt;


&lt;p class="md_block"&gt;
    &lt;span class="md_line md_line_start"&gt;调试记录&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;读表：40个线程，20个processor, 3w一批次&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;1000条一批次查询，0.6s&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;粗略估计&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line md_line_dom_embed md_line_with_image md_line_end"&gt;&lt;img class="md_compiled " src="/blog/_image/2021-11-10/2021-11-22-20-36-09.png" alt="" title="" &gt;&lt;/span&gt;
&lt;/p&gt;


&lt;p class="md_block"&gt;
    &lt;span class="md_line md_line_start"&gt;实际数据&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line md_line_dom_embed md_line_with_image next_md_line next_img_before next_only_img_before next_md_line_end"&gt;&lt;img class="md_compiled " src="/blog/_image/2021-11-10/2021-11-22-20-38-08.png" alt="" title="" &gt;&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line img_before only_img_before md_line_end"&gt;平均qps： 6.6w&lt;/span&gt;
&lt;/p&gt;

&lt;span class="md_repeated_n md_repeated_n_1"&gt;&lt;/span&gt;
&lt;p class="md_block"&gt;
    &lt;span class="md_line md_line_start"&gt;读表：100个线程，20个processor, 3w一批次&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;1000条一批次查询，2s&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;粗略估计&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line md_line_dom_embed md_line_with_image md_line_end"&gt;&lt;img class="md_compiled " src="/blog/_image/2021-11-10/2021-11-22-20-53-26.png" alt="" title="" &gt;&lt;/span&gt;
&lt;/p&gt;


&lt;p class="md_block"&gt;
    &lt;span class="md_line md_line_start"&gt;实际数据&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line md_line_dom_embed md_line_with_image next_md_line next_img_before next_only_img_before next_md_line_end"&gt;&lt;img class="md_compiled " src="/blog/_image/2021-11-10/2021-11-22-20-55-04.png" alt="" title="" &gt;&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line img_before only_img_before md_line_end"&gt;平均qps： 6.6w&lt;/span&gt;
&lt;/p&gt;

&lt;span class="md_repeated_n md_repeated_n_1"&gt;&lt;/span&gt;
&lt;p class="md_block"&gt;
    &lt;span class="md_line md_line_start"&gt;40个processor，gc耗时过长，&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line md_line_end"&gt;G1NewSizePercent 从30%调整到50%， 机器内存调整到64g&lt;/span&gt;
&lt;/p&gt;

&lt;span class="md_repeated_n md_repeated_n_1"&gt;&lt;/span&gt;
&lt;p class="md_block"&gt;
    &lt;span class="md_line md_line_start"&gt;db5. es5&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line md_line_end"&gt;2021-11-23 14:51:12.048 INFO  &lt;a class="md_compiled" href="MerchantFinancialCenterOrderWriteEsTask.java:195"&gt;order-write-es-task-2&lt;/a&gt; - MerchantFinancialCenterOrderWriteEsTask shard-14, total_cost:2 min, progress:548000/0, total_avg:4089/s, cost:212 ms&lt;/span&gt;
&lt;/p&gt;


&lt;p class="md_block"&gt;
    &lt;span class="md_line md_line_start"&gt;db5. es20(10)&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line md_line_end"&gt;2021-11-23 15:21:32.598 INFO  &lt;a class="md_compiled" href="MerchantFinancialCenterOrderWriteEsTask.java:195"&gt;order-write-es-task-2&lt;/a&gt; - MerchantFinancialCenterOrderWriteEsTask shard-14, total_cost:6 min, progress:2497500/0, total_avg:6642/s, cost:55 ms&lt;/span&gt;
&lt;/p&gt;

&lt;span class="md_repeated_n md_repeated_n_1"&gt;&lt;/span&gt;
&lt;p class="md_block"&gt;
    &lt;span class="md_line md_line_start"&gt;db10. es20(10)&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line md_line_end"&gt;2021-11-23 15:52:49.231 INFO  &lt;a class="md_compiled" href="MerchantFinancialCenterOrderWriteEsTask.java:194"&gt;order-write-es-task-3&lt;/a&gt; - MerchantFinancialCenterOrderWriteEsTask shard-15, total_cost:5 min, progress:1781500/0, total_avg:5286/s, read_db_cost:25, process_cost:207 ms&lt;/span&gt;
&lt;/p&gt;

&lt;span class="md_repeated_n md_repeated_n_2"&gt;&lt;/span&gt;
&lt;p class="md_block"&gt;
    &lt;span class="md_line md_line_start md_line_end"&gt;经过查询才知道 删除文档并没有真正删除，仅作了删除标记，从而不能再被搜索到。要想释放磁盘的空间，要使用forcemerge命令合并段减少分片中段数量、删除冗余数据。&lt;/span&gt;
&lt;/p&gt;


&lt;p class="md_block md_block_as_opening"&gt;
    &lt;span class="md_line md_line_start md_line_end"&gt;1、优化所有索引：&lt;/span&gt;
&lt;/p&gt;


&lt;p class="md_block"&gt;
    &lt;span class="md_line md_line_start md_line_end"&gt;POST http://localhost:9200/_forcemerge?only_expunge_deletes=true&lt;/span&gt;
&lt;/p&gt;


&lt;p class="md_block md_block_as_opening"&gt;
    &lt;span class="md_line md_line_start md_line_end"&gt;2、优化单个索引：&lt;/span&gt;
&lt;/p&gt;


&lt;p class="md_block last_md_block_in_page"&gt;
    &lt;span class="md_line md_line_start md_line_end"&gt;POST http://localhost:9200/索引名/_forcemerge?only_expunge_deletes=true&lt;/span&gt;
&lt;/p&gt;</summary>

  </entry>


  <entry>


    <title>Arthas实践</title>

    <link href="http://www.wanglh.top/post/blog/arthas"  rel="alternate"></link>

    <updated>2021-11-24T04:48:51Z</updated>
    <id>blog/arthas</id>

    <author>
      <name>五百年前</name>

    </author>
    <summary type="html">&lt;blockquote class="blockquote_lines_1 blockquote_without_image"&gt;
&lt;p class="md_block"&gt;
    &lt;span class="md_line md_line_start md_line_end"&gt;https://arthas.aliyun.com/doc/&lt;/span&gt;
&lt;/p&gt;

&lt;/blockquote&gt;

&lt;p class="md_block last_md_block_in_page"&gt;
    &lt;span class="md_line md_line_start"&gt;{&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;&lt;span class="md_line_space_chars md_line_space_chars_2"&gt;  &lt;/span&gt;&amp;quot;concurrentRequests&amp;quot; : 40,&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;&lt;span class="md_line_space_chars md_line_space_chars_2"&gt;  &lt;/span&gt;&amp;quot;bulkActions&amp;quot; : 8000,&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;&lt;span class="md_line_space_chars md_line_space_chars_2"&gt;  &lt;/span&gt;&amp;quot;bulkSizeMB&amp;quot; : 10,&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;&lt;span class="md_line_space_chars md_line_space_chars_2"&gt;  &lt;/span&gt;&amp;quot;flushIntervalSeconds&amp;quot; : 10,&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;&lt;span class="md_line_space_chars md_line_space_chars_2"&gt;  &lt;/span&gt;&amp;quot;backoffTimeDelaySeconds&amp;quot; : 3,&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;&lt;span class="md_line_space_chars md_line_space_chars_2"&gt;  &lt;/span&gt;&amp;quot;backoffMaxNumberRetries&amp;quot; : 3&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line md_line_end"&gt;}&lt;/span&gt;
&lt;/p&gt;</summary>

  </entry>


  <entry>


    <title>JVM调优</title>

    <link href="http://www.wanglh.top/post/blog/jvmdiao-you"  rel="alternate"></link>

    <updated>2021-11-23T04:48:41Z</updated>
    <id>blog/jvmdiao-you</id>

    <author>
      <name>五百年前</name>

    </author>
    <summary type="html">&lt;p class="md_block last_md_block_in_page"&gt;
    &lt;span class="md_line md_line_start"&gt;查看gc此时&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;jstat -gc 58 1000&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line md_line_end"&gt;58是进程ID，1000是每隔1s输出一次&lt;/span&gt;
&lt;/p&gt;</summary>

  </entry>


  <entry>


    <title>Maven全局排除依赖</title>

    <link href="http://www.wanglh.top/post/blog/mavenquan-ju-pai-chu-yi-lai"  rel="alternate"></link>

    <updated>2021-11-21T04:21:38Z</updated>
    <id>blog/mavenquan-ju-pai-chu-yi-lai</id>

    <author>
      <name>五百年前</name>

    </author>
    <summary type="html">&lt;p class="md_block"&gt;
    &lt;span class="md_line md_line_start md_line_end"&gt;项目中有很多依赖，某些Jar之间是有冲突的，有些冲突只有在运行时才会报出错误，这样就很危险。比如我使用如下方式去排除依赖。&lt;/span&gt;
&lt;/p&gt;

&lt;div class="codehilite code_lang_xml  highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;kuaishou&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;kuaishou-web-common&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;exclusions&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;exclusion&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;kuaishou&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;kuaishou-es&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/exclusion&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/exclusions&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;!--block_code_end--&gt;
&lt;p class="md_block"&gt;
    &lt;span class="md_line md_line_start md_line_end"&gt;某天项目组其他人引入了个依赖，这个依赖又间接传递了kauishou-es依赖，这样服务部署完才发现错误，回头再加上排除。但如果测试没有覆盖这一点的时候，可能会在线上才会排除错误，就完了。&lt;/span&gt;
&lt;/p&gt;

&lt;div class="codehilite code_lang_xml  highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;kuaishou&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;kuaishou-admin-framework&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;exclusions&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;exclusion&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;kuaishou&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;kuaishou-es&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/exclusion&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/exclusions&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;!--block_code_end--&gt;
&lt;p class="md_block md_block_as_opening"&gt;
    &lt;span class="md_line md_line_start md_line_end"&gt;所以我们想就有没有一种方式来全局的排除依赖呢？我想起了gradle的方式：&lt;/span&gt;
&lt;/p&gt;

&lt;div class="codehilite code_lang_groovy  highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;configurations&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;all&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;exclude&lt;/span&gt; &lt;span class="nl"&gt;group:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;org.springframework.boot&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nl"&gt;module:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;spring-boot-starter-logging&amp;#39;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;!--block_code_end--&gt;
&lt;p class="md_block md_block_as_opening"&gt;
    &lt;span class="md_line md_line_start md_line_end"&gt;所以理所当然想到maven肯定也会有类似的机制，但很不幸没有。Maven提供了一种插件的形式通过黑白名单来控制依赖，如下：&lt;/span&gt;
&lt;/p&gt;


&lt;blockquote class="blockquote_lines_2 blockquote_without_image"&gt;
&lt;p class="md_block"&gt;
    &lt;span class="md_line md_line_start md_line_end"&gt;&lt;span class="md_line_space_chars md_line_space_chars_1"&gt; &lt;/span&gt;官网文档参考 https://maven.apache.org/enforcer/enforcer-rules/bannedDependencies.html&lt;/span&gt;
&lt;/p&gt;

&lt;/blockquote&gt;
&lt;div class="codehilite code_lang_xml  highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;plugin&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.apache.maven.plugins&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;maven-enforcer-plugin&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;3.0.0-M3&lt;span class="nt"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    
    &lt;span class="nt"&gt;&amp;lt;executions&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;execution&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;id&amp;gt;&lt;/span&gt;enforce-banned-dependencies&lt;span class="nt"&gt;&amp;lt;/id&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;goals&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;goal&amp;gt;&lt;/span&gt;enforce&lt;span class="nt"&gt;&amp;lt;/goal&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/goals&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;rules&amp;gt;&lt;/span&gt;
                    &lt;span class="nt"&gt;&amp;lt;bannedDependencies&amp;gt;&lt;/span&gt;
                        &lt;span class="nt"&gt;&amp;lt;searchTransitive&amp;gt;&lt;/span&gt;true&lt;span class="nt"&gt;&amp;lt;/searchTransitive&amp;gt;&lt;/span&gt;
                        &lt;span class="nt"&gt;&amp;lt;excludes&amp;gt;&lt;/span&gt;
                            &lt;span class="nt"&gt;&amp;lt;exclude&amp;gt;&lt;/span&gt;kuaishou:kuaishou-es&lt;span class="nt"&gt;&amp;lt;/exclude&amp;gt;&lt;/span&gt;
                        &lt;span class="nt"&gt;&amp;lt;/excludes&amp;gt;&lt;/span&gt;
                    &lt;span class="nt"&gt;&amp;lt;/bannedDependencies&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;/rules&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;fail&amp;gt;&lt;/span&gt;true&lt;span class="nt"&gt;&amp;lt;/fail&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/execution&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/executions&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/plugin&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;!--block_code_end--&gt;
&lt;p class="md_block"&gt;
    &lt;span class="md_line md_line_start"&gt;然后执行：&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;&lt;span class="md_line_space_chars md_line_space_chars_1"&gt; &lt;/span&gt;mvn validate 这个是全局命令，会覆盖到enforce插件&lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line"&gt;或者是 &lt;br /&gt;&lt;/span&gt;
    &lt;span class="md_line md_line_end"&gt;mvn enforce:enforce 这个只是那个插件的命令，只执行插件的检查功能&lt;/span&gt;
&lt;/p&gt;


&lt;p class="md_block md_block_as_opening"&gt;
    &lt;span class="md_line md_line_start md_line_end"&gt;如果检查到依赖kuaishou-es的包会编译不通过报错：&lt;/span&gt;
&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;[ERROR] Failed to execute goal org.apache.maven.plugins:maven-enforcer-plugin:3.0.0-M3:enforce (enforce-banned-dependencies) on project kuaishou-merchant-financial-center-component: Some Enforcer rules have failed. Look above for specific messages explaining why the rule failed. -&amp;gt; [Help 1]&lt;/code&gt;&lt;/pre&gt;

&lt;!--block_code_end--&gt;
&lt;p class="md_block last_md_block_in_page"&gt;
    &lt;span class="md_line md_line_start md_line_end"&gt;这个只是帮助检查，检查出来问题，还是要自己手动去排除的。&lt;/span&gt;
&lt;/p&gt;</summary>

  </entry>


  <entry>


    <title>互联网专业术语名词</title>

    <link href="http://www.wanglh.top/post/blog/zhuan-ye-zhu-yu-ming-ci"  rel="alternate"></link>

    <updated>2021-11-12T03:51:51Z</updated>
    <id>blog/zhuan-ye-zhu-yu-ming-ci</id>

    <author>
      <name>五百年前</name>

    </author>
    <summary type="html">&lt;h2 id="toc_0" class="h16 md_first_h"&gt;&lt;span class="span_for_h"&gt;技术指标的一些统计&lt;/span&gt;&lt;/h2&gt;
&lt;h2 id="toc_1" class="h16"&gt;&lt;span class="span_for_h"&gt;业务指标的一些统计&lt;/span&gt;&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;名词&lt;/th&gt;
&lt;th style="text-align: left"&gt;名词解释&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;PV&lt;/td&gt;
&lt;td style="text-align: left"&gt;Page View, 页面浏览量, 和DAU数据相除, 大概能评估出用户有多么愿意深入使用&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;UV&lt;/td&gt;
&lt;td style="text-align: left"&gt;Unique Visitor 唯一访客数, 指一个统计周期内, 访问的用户数量&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;CTR&lt;/td&gt;
&lt;td style="text-align: left"&gt;Click Through Rate, 点击率, 用户进入这个页面后, 有多大几率点击某个元素. 元素的点击数量/用户浏览当前页面的数量&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;DAU&lt;/td&gt;
&lt;td style="text-align: left"&gt;Daily Active User 日活跃用户数量, 基本等均于 UV指标限定时间范围为1天即统计一天时间内, 有打开app使用的用户数量, 无论用户的使用时长, 点击次数, 1个用户只记1个数量相对于PV来说能更准确表示运营状况&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;VV&lt;/td&gt;
&lt;td style="text-align: left"&gt;Video View, 播放数, 视频被打开, 并播放的次数, 一般表示用户对此有兴趣&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;CV&lt;/td&gt;
&lt;td style="text-align: left"&gt;Content View, 内容播放数, 主要是针对有前置广告的视频, 开始播放正片内容才记1次数&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;LTV&lt;/td&gt;
&lt;td style="text-align: left"&gt;Life Time Value, 一般是指一段时期内, 用户产生的价值, 所以会携带一个日期长度的数字. 例如:1月1日新增100个用户, 在之后的7天内, 一共花了1000块钱, 那么LTV7 就是 10 = 1000/100&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;ARPU&lt;/td&gt;
&lt;td style="text-align: left"&gt;Average revenue per user, 活跃用户的平均价值, 和LTV很相似, 同样需要引入一段时期, 逐月订阅付费的业务比较常用&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;ARPPU&lt;/td&gt;
&lt;td style="text-align: left"&gt;Average revenue per paying user, 付费用户的平均价值, 主要用于免费+付费用户的产品中&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;ROI&lt;/td&gt;
&lt;td style="text-align: left"&gt;Return On Investment, 投资回报率, 收益和投入成本的比值&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;KOL&lt;/td&gt;
&lt;td style="text-align: left"&gt;Key Opinion Leader, 关键意见领袖, 大V, 网红大号根据 快手中学 → 第二章 快手战略那些事 介绍, 我们分发给大V的流量大概在5%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;KOC&lt;/td&gt;
&lt;td style="text-align: left"&gt;Key Opinion Consumer 关键意见消费者, 能影响自己朋友 粉丝, 产生消费行为的消费者.KOC自己就是消费者，分享的内容多为亲身体验；他们的短视频更受信任；他们距离消费者更近，更加注重和粉丝的互动，由此KOC和粉丝之间形成了更加信任的关系&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</summary>

  </entry>


</feed>