{"@attributes":{"version":"2.0"},"channel":{"title":"Ratuthomm","link":"https:\/\/huanglei.rocks\/","description":"Recent content on Ratuthomm","generator":"Hugo","language":"zh","lastBuildDate":"Sun, 28 May 2023 17:43:25 +0800","item":[{"title":"Notes on Amazon Aurora","link":"https:\/\/huanglei.rocks\/posts\/aurora\/","pubDate":"Sun, 28 May 2023 17:43:25 +0800","guid":"https:\/\/huanglei.rocks\/posts\/aurora\/","description":"<h1 id=\"notes-on-amazon-aurora\">Notes on Amazon Aurora<\/h1>\n<h2 id=\"amazon-aurora\">Amazon Aurora<\/h2>\n<ul>\n<li>SQL\u3001\u4e8b\u52a1\u5904\u7406\u7b49\u7b49\u5b8c\u5168\u57fa\u4e8e MySQL<\/li>\n<li>\u5c06 page \u8fd9\u4e2a\u5c42\u9762\u7684 IO \u59d4\u6258\u7ed9\u57fa\u4e8e quorum-replication \u7684\u5b58\u50a8\u7cfb\u7edf<\/li>\n<li>\u57fa\u4e8e redo log \u505a\u6570\u636e\u590d\u5236\uff0c\u907f\u514d\u4e86 MySQL \u6b63\u5e38\u590d\u5236\u573a\u666f\u4e0b\u7684\u5927\u91cf IO<\/li>\n<li>\u652f\u6301 AZ+1 \u7684\u5bb9\u707e\uff0c\u7b80\u5316\u4e86\u8fd0\u7ef4<\/li>\n<\/ul>\n<h2 id=\"the-log-is-the-database\">The log is the database<\/h2>\n<ul>\n<li>MySQL \u7684 IO \u592a\u591a\u5bfc\u81f4\u5728\u4e91\u573a\u666f\u4e0b\u5199\u653e\u5927\u4e25\u91cd\uff083.1\uff09\n<ul>\n<li>page \u9700\u8981\u5199\u5230 heap file \u91cc\u9762<\/li>\n<li>redo log \u9700\u8981\u5199\u5230 WAL \u91cc\u9762<\/li>\n<li>\u771f\u5b9e\u4e16\u754c\u7684 HA \u96c6\u7fa4\u8fd8\u9700\u8981\u4e00\u4e9b\u5176\u4ed6\u7684\u6570\u636e\u540c\u6b65\uff0c\u6bd4\u5982 binlog \u7b49\u7b49<\/li>\n<li>\u6700\u7cdf\u7cd5\u7684\u662f\u8fd9\u4e9b\u5199\u5165\u90fd\u662f\u540c\u6b65\u7684\uff08\u56fe\u4e2d\u7684 1,2,3,4,5\uff09\uff0c\u53ef\u80fd\u5bfc\u81f4\u5ef6\u8fdf\u7684\u6210\u500d\u653e\u5927<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><img src=\"https:\/\/assets.huanglei.co\/20230528175431.png\"><\/p>"},{"title":"\u4e09\u4e2a\u5b57\u6bcd\u5f15\u53d1\u7684\u60e8\u6848","link":"https:\/\/huanglei.rocks\/posts\/send-sync\/","pubDate":"Sun, 19 Feb 2023 18:28:33 +0800","guid":"https:\/\/huanglei.rocks\/posts\/send-sync\/","description":"<h2 id=\"\u95ee\u9898\">\u95ee\u9898<\/h2>\n<p>\u5728 <a href=\"https:\/\/github.com\/GreptimeTeam\/greptimedb\/pull\/997\">feat: compaction integration - GreptimeTeam\/greptimedb #997<\/a> \u4e2d\uff0c\u6211\u4eec\u5c1d\u8bd5\u628a table compaction \u4f5c\u4e3a flush \u7684\u540e\u7f6e\u4efb\u52a1\u89e6\u53d1\uff0c\u56e0\u6b64\u9700\u8981\u4e3a <code>FlushJob<\/code>\u589e\u52a0\u4e00\u4e2a callback\uff0c\u56e0\u4e3a\u6d89\u53ca\u5230\u5f02\u6b65\u64cd\u4f5c\uff0c\u6240\u4ee5\u8fd9\u4e2a callback \u7684\u5b9a\u4e49\u662f\uff1a<\/p>"},{"title":"2023","link":"https:\/\/huanglei.rocks\/gallery\/2023\/","pubDate":"Fri, 10 Feb 2023 19:30:39 +0800","guid":"https:\/\/huanglei.rocks\/gallery\/2023\/","description":"<style>\n.content img {\n max-width:100%;\n}\n<\/style>\n<p><img alt=\"spring.jpeg\" src=\"https:\/\/assets.huanglei.co\/2023\/spring.jpeg\"><\/p>\n<div style=\"text-align: center; margin-bottom: 1em; margin-top: -0.5em; opacity: .5;\">\n<i>\n<p>Ricoh GR3 24mm, f\/5, 1\/320s, ISO 200<\/p>\n<\/i>\n<\/div>\n<br>\n<p><img alt=\"sunset.jpeg\" src=\"https:\/\/assets.huanglei.co\/2023\/sunset.jpeg\"><\/p>\n<div style=\"text-align: center; margin-bottom: 1em; margin-top: -0.5em; opacity: .5;\">\n<i>\n<p>Ricoh GR3 24mm, f\/5, 1\/100s, ISO 160<\/p>\n<\/i>\n<\/div>\n<br>\n<p><img alt=\"early-summer.jpeg\" src=\"https:\/\/assets.huanglei.co\/2023\/early-summer.jpeg\"><\/p>\n<div style=\"text-align: center; margin-bottom: 1em; margin-top: -0.5em; opacity: .5;\">\n<i>\n<p>ILCE-7RM4 150mm, f\/7.1, 1\/250s, ISO 100<\/p>\n<\/i>\n<\/div>\n<br>\n<p><img alt=\"red-rock.jpeg\" src=\"https:\/\/assets.huanglei.co\/2023\/red-rock.jpeg\"><\/p>\n<div style=\"text-align: center; margin-bottom: 1em; margin-top: -0.5em; opacity: .5;\">\n<i>\n<p>ILCE-7RM4 70mm, f\/4.5, 1\/600s, ISO 100<\/p>\n<\/i>\n<\/div>\n<br>\n<p><img alt=\"jade.jpeg\" src=\"https:\/\/assets.huanglei.co\/2023\/jade.jpeg\"><\/p>\n<div style=\"text-align: center; margin-bottom: 1em; margin-top: -0.5em; opacity: .5;\">\n<i>\n<p>Ricoh GR3 24mm, f\/5.6 1\/30s ISO200<\/p>"},{"title":"\u5982\u4f55\u5728\u540c\u6b65\u7684 Rust \u65b9\u6cd5\u4e2d\u8c03\u7528\u5f02\u6b65\u4ee3\u7801\uff1f","link":"https:\/\/huanglei.rocks\/posts\/bridging-sync-and-async-rust\/","pubDate":"Sun, 30 Oct 2022 21:42:33 +0800","guid":"https:\/\/huanglei.rocks\/posts\/bridging-sync-and-async-rust\/","description":"<h2 id=\"\u80cc\u666f\u548c\u95ee\u9898\">\u80cc\u666f\u548c\u95ee\u9898<\/h2>\n<p>\u6700\u8fd1\u5728\u505a\u6211\u4eec\u7684 <a href=\"https:\/\/greptime.com\/\">GreptimeDB<\/a> \u9879\u76ee\u7684\u65f6\u5019\u9047\u5230\u4e00\u4e2a\u5173\u4e8e\u5728\u540c\u6b65 Rust \u65b9\u6cd5\u4e2d\u8c03\u7528\u5f02\u6b65\u4ee3\u7801\u7684\u95ee\u9898\uff0c\u6392\u67e5\u6e05\u695a\u4e4b\u540e\u5927\u5927\u52a0\u6df1\u4e86\u5bf9\u5f02\u6b65 Rust \u7684\u7406\u89e3\uff0c\u56e0\u6b64\u5728\u8fd9\u7bc7\u6587\u7ae0\u4e2d\u8bb0\u5f55\u4e00\u4e0b\u3002<\/p>\n<p>\u6211\u4eec\u7684\u6574\u4e2a\u9879\u76ee\u662f\u57fa\u4e8e <a href=\"https:\/\/tokio.rs\/\">Tokio<\/a> \u8fd9\u4e2a\u5f02\u6b65 Rust runtime \u7684\uff0c\u5b83\u5c06\u534f\u4f5c\u5f0f\u7684\u4efb\u52a1\u8fd0\u884c\u548c\u8c03\u5ea6\u65b9\u4fbf\u5730\u5c01\u88c5\u5728 <code>.await<\/code> \u8c03\u7528\u4e2d\uff0c\u975e\u5e38\u7b80\u6d01\u4f18\u96c5\u3002\u4f46\u662f\u8fd9\u6837\u4e5f\u8ba9\u4e0d\u719f\u6089 Tokio \u5e95\u5c42\u539f\u7406\u7684\u7528\u6237\u4e00\u4e0d\u5c0f\u5fc3\u5c31\u6389\u5165\u5230\u5751\u91cc\u3002<\/p>"},{"title":"2022","link":"https:\/\/huanglei.rocks\/gallery\/2022\/","pubDate":"Sat, 23 Jul 2022 15:47:39 +0800","guid":"https:\/\/huanglei.rocks\/gallery\/2022\/","description":"<style>\n.content img {\n max-width:100%;\n}\n<\/style>\n<p><img src=\"https:\/\/assets.huanglei.co\/shenxianju.jpeg\"><\/p>\n<div style=\"text-align: center; margin-bottom: 1em; margin-top: -0.5em; opacity: .5;\">\n<i>\n<p>SONY ILCE-7RM4, Sigma 24-70 f\/2.8, 24mm, f\/5.6, 1\/400s, ISO 200<\/p>\n<\/i>\n<\/div>\n<hr>\n<p><img src=\"https:\/\/assets.huanglei.co\/qiandaohu.jpeg\"><\/p>\n<div style=\"text-align: center; margin-bottom: 1em; margin-top: -0.5em; opacity: .5;\">\n<i>\n<p>SONY ILCE-7RM4, Tamron 70-180 f\/2.8, 180mm, f\/7.1, 1\/640, ISO 100<\/p>\n<\/i>\n<\/div>"},{"title":"Notes on InfluxDB Storage Engine","link":"https:\/\/huanglei.rocks\/posts\/notes-on-influxdb-storage\/","pubDate":"Sat, 12 Mar 2022 17:42:25 +0800","guid":"https:\/\/huanglei.rocks\/posts\/notes-on-influxdb-storage\/","description":"<blockquote>\n<p>InfluxDB \u7684\u5b58\u50a8\u5f15\u64ce\u7ecf\u8fc7\u591a\u6b21\u4fee\u6539\uff0c\u672c\u6587\u63cf\u8ff0\u7684\u7cfb\u7edf\u7ed3\u6784\u57fa\u4e8e InfluxDB \u622a\u6b62 2022-02-24 \u7684 <code>adf29dfedfc785620db0e104652544ce9f67cb6e<\/code> \u7248\u672c\u3002\u5f53\u524d\u7248\u672c\u5df2\u7ecf\u652f\u6301 TSI \u7d22\u5f15\u7ed3\u6784\u3002<\/p>\n<\/blockquote>\n<p><img alt=\"image.png\" src=\"https:\/\/cdn.jsdelivr.net\/gh\/RayneHwang\/img-repo\/influxdb-overview.svg\"><\/p>\n<div style=\"text-align: center; margin-bottom: 1em; margin-top: -0.5em; opacity: .5;\">\n<i>\n InfluxDB \u7684\u5b58\u50a8\u7cfb\u7edf \n<\/i>\n<\/div>\n<p>InfluxDB \u7684\u5b58\u50a8\u5c42\u6709\u4e09\u4e2a\u5b50\u7cfb\u7edf\uff1a<\/p>"},{"title":"Apache Parquet \u683c\u5f0f\u7b80\u4ecb","link":"https:\/\/huanglei.rocks\/posts\/parquet\/","pubDate":"Sat, 05 Mar 2022 15:44:33 +0800","guid":"https:\/\/huanglei.rocks\/posts\/parquet\/","description":"<h2 id=\"\u7b80\u4ecb\">\u7b80\u4ecb<\/h2>\n<p>Parquet \u662f\u4e00\u79cd\u9762\u5411\u5217\u7684\u6570\u636e\u5b58\u50a8\u683c\u5f0f\uff0c\u5728 Hadoop \u751f\u6001\u4e2d\u4f7f\u7528\u5e7f\u6cdb\u3002Parquet \u6587\u4ef6\u662f\u4e0d\u53ef\u53d8\u7684\uff0c\u5982\u679c\u9700\u8981\u4fee\u6539\uff0c\u53ea\u80fd\u901a\u8fc7 rewrite \u7684\u65b9\u5f0f\u5b9e\u73b0\u3002<\/p>\n<h2 id=\"\u6570\u636e-layout\">\u6570\u636e layout<\/h2>\n<p>\u4e00\u4e2a Parquet \u6587\u4ef6\u7684\u6570\u636e\u5e03\u5c40\u5982\u4e0b\u56fe\u6240\u793a\u3002\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u5b98\u7f51\u4e0a\u7684\u8fd9\u4e2a\u56fe\u5e76\u6ca1\u6709\u5305\u542b index pages\u3002<\/p>"},{"title":"Apache BookKeeper \u7b14\u8bb0","link":"https:\/\/huanglei.rocks\/posts\/bookkeeper-note\/","pubDate":"Thu, 24 Feb 2022 01:18:35 +0800","guid":"https:\/\/huanglei.rocks\/posts\/bookkeeper-note\/","description":"<h1 id=\"bookkeeper-\u7684\u4f7f\u7528\u573a\u666f\">BookKeeper \u7684\u4f7f\u7528\u573a\u666f<\/h1>\n<ul>\n<li>WAL\uff1a\u6bd4\u5982 HDFS Namenode \u7684 EditLog\uff08\u8981\u6c42\u9ad8\u53ef\u9760\uff09<\/li>\n<li>\u5206\u5e03\u5f0f\u5b58\u50a8\uff1a\u6bd4\u5982 Pulsar \u7684\u6d88\u606f\u5b58\u50a8\u3001DistributedLog \u7b49<\/li>\n<\/ul>\n<h1 id=\"\u6838\u5fc3\u7406\u5ff5\">\u6838\u5fc3\u7406\u5ff5<\/h1>\n<ul>\n<li>\u901a\u8fc7\u6761\u5e26\u5316\u5199\uff08Data Striping\uff09\u5b9e\u73b0\u6570\u636e\u7684\u591a\u526f\u672c\uff0c\u6240\u6709\u5b58\u50a8\u8282\u70b9\u89d2\u8272\u5bf9\u7b49\uff1b<\/li>\n<li>\u901a\u8fc7\u5176\u4ed6\u7684\u5b58\u50a8\u7ec4\u4ef6\uff08ZooKeeper\uff09\u5b9e\u73b0\u5143\u6570\u636e\u9ad8\u53ef\u9760\uff0c\u6545\u969c\u6062\u590d\uff08recover\uff09\u6d41\u7a0b\u5f3a\u4f9d\u8d56 ZK \u7684\u5143\u6570\u636e\uff1b\n<ul>\n<li>\u4e5f\u53ef\u4ee5\u9009\u7528\u5176\u4ed6\u7684\u5b58\u50a8\u670d\u52a1\uff0c\u8981\u6c42 1. CP \u7cfb\u7edf\uff1b2. \u63d0\u4f9b CAS \u539f\u8bed<\/li>\n<\/ul>\n<\/li>\n<li>\u57fa\u4e8e RocksDB \u63d0\u4f9b <code>(ledger, sequence) -&gt; (file, physicalOffset)<\/code> \u7684\u7d22\u5f15\uff08<code>SingleDirectoryDbLedgerStorage#ledgerIndex<\/code>\uff09\uff1b<\/li>\n<li>\u540c\u4e00\u65f6\u523b\u53ea\u6709\u4e00\u4e2a writer \u548c\u591a\u4e2a reader\uff0c\u901a\u8fc7 fencing \u673a\u5236\u907f\u514d\u51fa\u73b0\u591a writer\uff0c\u907f\u514d sequence \u4e71\u5e8f\uff1b<\/li>\n<li>\u8bfb\u5199\u5206\u79bb\uff0c\u51b7\u70ed\u5206\u79bb\uff08tailing read\/catch-up read\uff09\u63d0\u9ad8\u541e\u5410\uff1b<\/li>\n<\/ul>\n<h1 id=\"bookkeeper-\u7684\u672f\u8bed\">BookKeeper \u7684\u672f\u8bed<\/h1>\n<ul>\n<li>ledger\uff1a\u4e00\u5199\u591a\u8bfb\u7684 append-only \u6587\u4ef6\uff0cledger \u7684\u6700\u5c0f\u6570\u636e\u5355\u5143\u662f fragment\uff1b<\/li>\n<li>bookie\uff1a\u5b58\u50a8 ledger \u7684\u8282\u70b9\uff1b<\/li>\n<li>ledger has many records\uff0c called\uff1aentry\uff0c\u6bcf\u4e2aentry\u90fd\u6709\u4e00\u4e2a sequence number\uff0c\u53ef\u4ee5\u6839\u636e ledger + seq \u6765\u8bfb\u53d6\u4e00\u90e8\u5206 entry\u3002<\/li>\n<li>quorum\uff1a\u51e0\u4e2a bookie \u7ec4\u6210\u4e00\u4e2a quorum\uff0c\u901a\u8fc7\u590d\u5236\u63d0\u9ad8\u53ef\u7528\u6027\u3002<\/li>\n<li>data striping\uff1a\u6570\u636e\u5757\u4ea4\u7ec7\u5199\u5165\u5230\u5404\u4e2a\u8bbe\u5907\uff0c\u63d0\u9ad8\u5199\u5165\u7684\u6027\u80fd\u3002\u7c7b\u4f3c RAID1 \u7684\u673a\u5236\u3002<\/li>\n<\/ul>\n<p><img src=\"https:\/\/cdn.jsdelivr.net\/gh\/RayneHwang\/img-repo\/bookkeeper-quorum-writes.svg\"><\/p>"},{"title":"LSM Tree \u7b14\u8bb0","link":"https:\/\/huanglei.rocks\/posts\/note-on-lsmt\/","pubDate":"Thu, 10 Feb 2022 22:34:39 +0800","guid":"https:\/\/huanglei.rocks\/posts\/note-on-lsmt\/","description":"<h2 id=\"\u5199\u5165write-path\">\u5199\u5165\uff08Write path\uff09<\/h2>\n<ul>\n<li>\n<p>\u5148\u4ece\u78c1\u76d8\uff08HDD\uff09\u5199\u5165\u7684\u7279\u6027\u5f15\u5165 append-only \u7684 WAL\u3002<\/p>\n<\/li>\n<li>\n<p>\u5bf9\u4e8e KV \u7ed3\u6784\uff0c\u5982\u679c\u5199\u5165\u662f append only\u7684\uff0c\u90a3\u4e48\u5c31\u9700\u8981\u5408\u5e76\uff0c\u4e0d\u7136\u8bfb\u53d6\u6027\u80fd\u592a\u5dee\u3002<\/p>\n<\/li>\n<li>\n<p>\u5355\u6587\u4ef6\u5408\u5e76\u6027\u80fd\u5dee\uff0c\u56e0\u6b64\u9700\u8981\u6309\u9608\u503c\u5207\u5206\u4e3a\u591a\u4e2a\u5c0f\u6587\u4ef6\uff0c\u901a\u8fc7\u5f52\u5e76\u6392\u5e8f\u7684\u601d\u8def\u4f18\u5316\u5408\u5e76\u7684\u6548\u7387\u3002<\/p>"},{"title":"\u4f7f\u7528 GitHub Issue \u4f5c\u4e3a Hugo \u7684\u8bc4\u8bba\u7cfb\u7edf","link":"https:\/\/huanglei.rocks\/posts\/hugo-comment-with-github-issues\/","pubDate":"Thu, 10 Feb 2022 15:07:10 +0800","guid":"https:\/\/huanglei.rocks\/posts\/hugo-comment-with-github-issues\/","description":"<h1 id=\"\u5b89\u88c5-octomments\">\u5b89\u88c5 Octomments<\/h1>\n<p>\u6309\u7167 <a href=\"https:\/\/ocs.vercel.app\/\">Octomments<\/a> \u7684\u4ecb\u7ecd\uff0c\u5c06 Octomments \u5b89\u88c5\u5230\u60a8\u7684 GitHub \u8d26\u6237\uff0c\u786e\u4fdd\u5b83\u62e5\u6709\u8bbf\u95ee\u60a8\u7684\u76ee\u6807 repo \u7684 issue \u7684\u6743\u9650\u3002<\/p>\n<h1 id=\"\u914d\u7f6e-github-issue\">\u914d\u7f6e GitHub issue<\/h1>\n<p>\u5728\u914d\u7f6e\u6587\u4ef6\u4e2d\u589e\u52a0\u914d\u7f6e\u9879\uff1a<\/p>\n<ul>\n<li><code>comment.owner<\/code>\uff1aIssue repo \u7684\u62e5\u6709\u8005<\/li>\n<li><code>comment.repo<\/code>\uff1aIssue repo \u7684\u540d\u5b57<\/li>\n<\/ul>\n<h1 id=\"\u914d\u7f6e-comment-\u7ec4\u4ef6\">\u914d\u7f6e Comment \u7ec4\u4ef6<\/h1>\n<p>\u5728\u60a8\u7684\u535a\u5ba2\u7ad9\u70b9\u6839\u76ee\u5f55\u4e0b\u7684<code>layouts\/partials\/comments.html<\/code> \u6a21\u677f\u4e2d\u589e\u52a0\uff1a<\/p>"},{"title":"\u7406\u89e3 Rust \u7684 Pin \u673a\u5236","link":"https:\/\/huanglei.rocks\/posts\/rust-pinning\/","pubDate":"Sat, 29 Jan 2022 22:41:37 +0800","guid":"https:\/\/huanglei.rocks\/posts\/rust-pinning\/","description":"<p>Pin \u4e4b\u6240\u4ee5\u96be\u4ee5\u7406\u89e3\uff0c\u662f\u56e0\u4e3a\u5176\u662f\u540c\u65f6\u6d89\u53ca\u5230\u79fb\u52a8\u8bed\u4e49\u3001\u6240\u6709\u6743\u3001\u5f02\u6b65\u7684\u4e00\u4e2a\u6982\u5ff5\u3002\u53ef\u4ee5\u8bf4\uff0cPin \u662f\u4e3a\u4e86\u89e3\u51b3\u81ea\u5f15\u7528\u6570\u636e\u7ed3\u6784\u7684\u79fb\u52a8\u95ee\u9898\uff0c\u800c\u8fd9\u4e2a\u95ee\u9898\u5728 Rust \u7684\u57fa\u4e8e Future \u7684\u5f02\u6b65\u7f16\u7a0b\u4e2d\u8f83\u4e3a\u5e38\u89c1\u3002<\/p>"},{"title":"Rust \u5bf9\u8c61\u5b89\u5168\u8be6\u89e3","link":"https:\/\/huanglei.rocks\/posts\/object-safety\/","pubDate":"Thu, 09 Dec 2021 21:57:33 +0800","guid":"https:\/\/huanglei.rocks\/posts\/object-safety\/","description":"<p>Rust \u7684 <a href=\"https:\/\/rust-lang.github.io\/rfcs\/0255-object-safety.html\">RFC<\/a> \u4e0a\u53ea\u7ed9\u51fa\u4e86 object-safety \u7684\u5b9a\u4e49\uff0c\u4f46\u662f\u6ca1\u6709\u89e3\u91ca\u4e3a\u4f55\u5728\u6ee1\u8db3\u8fd9\u4e9b\u6761\u4ef6\u7684\u65f6\u5019 trait \u662f object safe \u7684\uff0c\u4ee5\u53ca\u4e3a\u5565\u9700\u8981 object safety\uff0c\u8fd9\u53cd\u800c\u662f\u521d\u5b66\u8005\u6700\u4e3a\u56f0\u60d1\u7684\u70b9\u3002<\/p>\n<h1 id=\"\u4e3a\u4ec0\u4e48\u9700\u8981-object-safety\">\u4e3a\u4ec0\u4e48\u9700\u8981 object safety\uff1f<\/h1>\n<p>Rust \u901a\u8fc7 trait object \u63d0\u4f9b\u4e86\u7c7b\u578b\u64e6\u9664\u3001\u52a8\u6001\u5206\u6d3e\u7684\u80fd\u529b\uff0c\u4f46\u662f\u8fd9\u4e2a\u80fd\u529b\u662f\u6709\u9650\u5236\u7684\uff0c\u4e0d\u662f\u6240\u6709\u7684 trait \u90fd\u80fd\u81ea\u52a8\u751f\u6210\u5b9e\u73b0\u3002\n<strong>Trait object \u672c\u8d28\u4e0a\u662f\u5bf9\u67d0\u4e2a trait \u7684\u81ea\u52a8\u9ed8\u8ba4\u5b9e\u73b0\uff0c\u5305\u62ec\u4e00\u4e2a\u6570\u636e\u533a\u548c\u4e00\u4e2a\u65b9\u6cd5\u8868\u3002<u>Object-safety \u5c31\u662f\u4e3a\u4e86\u4fdd\u8bc1 Rust \u7f16\u8bd1\u5668\u80fd\u591f\u4e3a\u67d0\u4e2a trait \u751f\u6210\u5408\u6cd5\u81ea\u52a8\u5b9e\u73b0\u3002<\/u><\/strong><\/p>"},{"title":"December 2021","link":"https:\/\/huanglei.rocks\/gallery\/2021\/","pubDate":"Sun, 05 Dec 2021 12:15:59 +0800","guid":"https:\/\/huanglei.rocks\/gallery\/2021\/","description":"<style>\n.content img {\n max-width:100%;\n}\n<\/style>\n<p><img src=\"https:\/\/gw.alipayobjects.com\/zos\/antfincdn\/ue9t3z3vOQ\/1636803450.jpg\"><\/p>\n<div style=\"text-align: center; margin-bottom: 1em; margin-top: -0.5em; opacity: .5;\">\n<i>\n<p>SONY ILCE-7RM4, Tamron 70-180 f\/2.8, 130mm, f\/2.8, 1\/2000s, ISO 100<\/p>\n<\/i>\n<\/div>\n<hr>\n<p><img src=\"https:\/\/gw.alipayobjects.com\/zos\/antfincdn\/THbfwYWMtK\/DSC08350-01.jpg\"><\/p>\n<div style=\"text-align: center; margin-bottom: 1em; margin-top: -0.5em; opacity: .5;\">\n<i>\n<p>SONY ILCE-7RM4, Sigma 24-70 f\/2.8, 45mm, f\/3.2, 1\/30s, ISO 200<\/p>\n<\/i>\n<\/div>\n<hr>\n<p><img src=\"https:\/\/gw.alipayobjects.com\/zos\/antfincdn\/jy5MvFmmtL\/DSC08396-02-01.jpeg\"><\/p>\n<div style=\"text-align: center; margin-bottom: 1em; margin-top: -0.5em; opacity: .5;\">\n<i>\n<p>SONY ILCE-7RM4, Sigma 24-70 f\/2.8, 45mm, f\/2.8, 1\/30sec, ISO 400<\/p>\n<\/i>\n<\/div>"},{"title":"\ud835\udc73\ud835\udc90\ud835\udc97\ud835\udc86 \ud835\udc95\ud835\udc89\ud835\udc82\ud835\udc95 \ud835\udc83\ud835\udc96\ud835\udc93\ud835\udc8f\ud835\udc94","link":"https:\/\/huanglei.rocks\/scribbles\/love-that-burns\/","pubDate":"Fri, 18 Jun 2021 22:06:37 +0800","guid":"https:\/\/huanglei.rocks\/scribbles\/love-that-burns\/","description":"<div style=\"text-align: center;\">\n<iframe frameborder=\"no\" border=\"0\" marginwidth=\"0\" marginheight=\"0\" width=80% height=86 src=\"\/\/music.163.com\/outchain\/player?type=2&id=17785791&auto=1&height=66\"><\/iframe>\n<\/div>\n<p>\u5f53\u6211\u4eec\u5728\u8ba8\u8bba Fleetwood Mac \u7684\u65f6\u5019\uff0c\u4e25\u683c\u610f\u4e49\u4e0a\u8bf4\u8ba8\u8bba\u7684\u662f\u4e24\u4e2a\u4e50\u961f\u3002<\/p>\n<p>1975 \u5e74\u4e4b\u540e\u7684 Fleetwood Mac \u5728 Stevie Nicks \u548c Lindsey Buckingham \u8fd9\u4e24\u4e2a\u7f8e\u56fd\u4eba\u52a0\u5165\u540e\uff0c\u4e50\u961f\u7684\u6b4c\u66f4\u52a0\u60a6\u8033\uff0c\u66f4\u52a0 Soft Rock\u3002\u5f53\u7136 Stevie Nicks \u672c\u8eab\u4e5f\u662f\u5f88\u6709\u8bdd\u9898\u6027\u7684\uff0c\u8c01\u80fd\u62d2\u7edd\u4e00\u4e2a\u6f02\u4eae\u3001\u5531\u6b4c\u597d\u542c\u7684\u6eda\u6447\u5973\u5deb\u5462\u3002\u8fd9\u6bb5\u65f6\u95f4\u7684 Fleetwood Mac \u662f\u975e\u5e38\u6210\u529f\u7684\uff0c1977 \u5e74\u7684\u4e13\u8f91 Rumours \u662f\u97f3\u4e50\u6eda\u6447\u53f2\u4e0a\u5356\u5f97\u6700\u597d\u7684\u4e13\u8f91\u4e4b\u4e00\uff0c\u6bd4 The Beattles \u7684 Abbey Road \u548c Eagles \u7684 Hotel California \u9500\u91cf\u8fd8\u597d\u3002\u800c Stevie Nicks \u672c\u4eba\u4e5f\u662f\u552f\u4e00\u4e00\u4e2a\u4e24\u6b21\u5165\u9009\u6447\u6eda\u540d\u4eba\u5802\uff081998\u30012019\uff09\u7684\u5973\u6027\uff0c\u5230\u5982\u4eca 73 \u5c81\u4ecd\u7136\u6d3b\u8dc3\u5728\u6f14\u51fa\u4e00\u7ebf\u3002<\/p>"},{"title":"Paxos Made Simple \u7b14\u8bb0 (WIP)","link":"https:\/\/huanglei.rocks\/posts\/notes-on-paxos-made-simple\/","pubDate":"Mon, 14 Jun 2021 11:24:18 +0800","guid":"https:\/\/huanglei.rocks\/posts\/notes-on-paxos-made-simple\/","description":"<h1 id=\"\u5173\u4e8e-p2c\">\u5173\u4e8e P2c<\/h1>\n<p>P2c \u662f P2b \u7684\u5145\u5206\u4e0d\u5fc5\u8981\u6761\u4ef6\uff0cwhy\uff1f<\/p>\n<blockquote>\n<ul>\n<li>P2b: If a proposal with value v is chosen, then every higher-numbered proposal issued by any proposer has value <code>v<\/code>.<\/li>\n<li>P2c: For any <code>v<\/code> and <code>n<\/code>, if a proposal with value <code>v<\/code> and number <code>n<\/code> is issued, then there is a set S consisting of a majority of acceptors such that either\n<ul>\n<li>(a) no acceptor in S has accepted any proposal numbered less than <code>n<\/code>, or<\/li>\n<li>(b) <code>v<\/code> is the value of the highest-numbered proposal among all proposals numbered less than <code>n<\/code> accepted by the acceptors in S.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/blockquote>\n<p>\u5df2\u77e5 proposal:<code>(m,v)<\/code>\u88ab\u9009\u4e2d\uff0c\u8981\u6ee1\u8db3\u4efb\u610f proposer \u63d0\u51fa\u5e8f\u53f7 n \uff08n &gt; m\uff09\u7684 proposal \u7684\u503c\u90fd\u662f <code>v<\/code>\uff0c\u90a3\u4e48\u53ea\u8981\u6ee1\u8db3\u6761\u4ef6\uff1a<u> \\( \\forall i\\in [m,\\ n-1]\\) \uff0c\u6709 proposal <code>i<\/code> \u7684\u503c\u662f <code>v<\/code> 1<\/u>\uff0c\u90a3\u4e48\u6839\u636e\u6570\u5b66\u5f52\u7eb3\u6cd5\uff0cproposal <code>n<\/code>\u7684\u503c\u4e5f\u5fc5\u7136\u662f <code>v<\/code>\u3002<\/p>"},{"title":"\u73b0\u4ee3 Java \u6349\u866b\u6307\u5357","link":"https:\/\/huanglei.rocks\/posts\/java-debug-manual\/","pubDate":"Fri, 12 Feb 2021 22:01:27 +0800","guid":"https:\/\/huanglei.rocks\/posts\/java-debug-manual\/","description":"<p><img src=\"https:\/\/gw.alipayobjects.com\/zos\/antfincdn\/Se%26jyp0zs1\/fe9fd884-3cb2-4cf7-b060-cd8d704cb03e.png#crop=0&crop=0&crop=1&crop=1&id=HK8X9&originHeight=1634&originWidth=2419&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=\"><\/p>\n<div style=\"text-align: center; margin-bottom: 1em; margin-top: -0.5em; opacity: .5;\">\n<i>\n <a href=\"mailto:gnu.hl@antgroup.com\">gnu.hl@antgroup.com<\/a> \n<\/i>\n<\/div>\n<div style=\"text-align: center; margin-bottom: 1em; margin-top: -0.5em; opacity: .5;\">\n<i>\n<p><strong>2020-12-01<\/strong><\/p>\n<\/i>\n<\/div>\n<hr>\n<blockquote>\n<p>\u672c\u6587\u662f\u4f5c\u8005 2021 \u5e74\u5728\u8682\u8681\u5185\u90e8\u5206\u4eab\u65f6\u7684 slides \u7ecf\u8fc7\u8131\u654f\u4e4b\u540e\u7684\u7248\u672c\u3002<\/p>\n<\/blockquote>\n<h2 id=\"\u5f53\u6211\u4eec\u6392\u67e5\u95ee\u9898\u7684\u65f6\u5019\u6211\u4eec\u5173\u6ce8\u4ec0\u4e48\">\u5f53\u6211\u4eec\u6392\u67e5\u95ee\u9898\u7684\u65f6\u5019\uff0c\u6211\u4eec\u5173\u6ce8\u4ec0\u4e48\uff1f<\/h2>\n<p>\u6a2a\u5411\u6765\u770b:<\/p>\n<ul>\n<li>context\/critical path\/caller\/callee (tracing)<\/li>\n<li>statistics\/metrics (profiling)<\/li>\n<\/ul>\n<p>\u7eb5\u5411\u6765\u770b:<\/p>\n<ul>\n<li>application<\/li>\n<li>runtime<\/li>\n<li>kernel<\/li>\n<\/ul>\n<hr>\n<h2 id=\"arthas\">Arthas<\/h2>\n<blockquote>\n<p>Arthas \u662f\u57fa\u4e8e\u5b57\u8282\u7801\u589e\u5f3a\u7684\u8c03\u8bd5\u5de5\u5177.<\/p>"},{"title":"\u5386\u53f2\u7684\u5faa\u73af","link":"https:\/\/huanglei.rocks\/scribbles\/repeating-history\/","pubDate":"Tue, 04 Aug 2020 05:58:37 +0800","guid":"https:\/\/huanglei.rocks\/scribbles\/repeating-history\/","description":"<p>\u7ee7\u7eed\u8bf4 1986 \u5e74\uff0c\u6311\u6218\u8005\u53f7\u822a\u5929\u98de\u673a\u5931\u4e8b\u4e4b\u540e\uff0c\u91cc\u6839\u53d1\u8868\u7684\u60bc\u5ff5\u6f14\u8bb2\u4e2d\u63d0\u5230\u6311\u6218\u8005\u53f7\u4e0a\u7f79\u96be\u7684\u4e03\u540d\u822a\u5929\u5458\u7684\u8d21\u732e\u50cf\u5fb7\u96f7\u514b\u4e00\u6837\u6beb\u65e0\u4fdd\u7559:<\/p>\n<blockquote>\n<p>&ldquo;Their (the Challenger crew) dedication was, like\u00a0Drake&rsquo;s, complete.&rdquo;<\/p>\n<\/blockquote>\n<p>\u770b\u8fc7\u6d77\u8d3c\u738b\u7684\u5e94\u8be5\u5bf9\u201c\u5815\u843d\u7684\u6d77\u519b\u5c11\u5c06\u201d\u5fb7\u96f7\u514b\u8239\u957f\u4e0d\u964c\u751f\uff0c\u4e8b\u5b9e\u4e0a\u6d77\u8d3c\u738b\u4e2d\u7684\u5fb7\u96f7\u514b\u548c\u91cc\u6839\u6240\u6307\u7684\u90fd\u662f\u5927\u5624\u5e1d\u56fd\u7684\u5f17\u6717\u897f\u65af\u00b7\u5fb7\u96f7\u514b(Sir Francis Drake)\u3002\u9ad8\u4e2d\u5730\u7406\u5b66\u5f97\u597d\u7684\u540c\u5b66\u5e94\u8be5\u4e5f\u542c\u8bf4\u8fc7\u5357\u7f8e\u6d32\u548c\u5357\u6781\u6d32\u4e4b\u95f4\u7684\u5730\u7403\u4e0a\u6700\u5bbd\u7684\u5fb7\u96f7\u514b\u6d77\u5ce1\uff0c\u8fd9\u4e2a\u5fb7\u96f7\u514b\u4e5f\u662f\u4ed6\u3002<\/p>"},{"title":"Add MathJax and Graphviz support for HUGO","link":"https:\/\/huanglei.rocks\/posts\/add-math-and-dot-for-hugo\/","pubDate":"Sun, 12 Apr 2020 14:22:22 +0800","guid":"https:\/\/huanglei.rocks\/posts\/add-math-and-dot-for-hugo\/","description":"<ol>\n<li>\n<p>Get into your theme folder<\/p>\n<\/li>\n<li>\n<p>Find some directory named <code>layouts\/posts\/single.html<\/code><\/p>\n<\/li>\n<li>\n<p>Inside the <code>{{ define main }}<\/code> block, paste following snippets<\/p>\n<\/li>\n<\/ol>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-js\" data-lang=\"js\"><span style=\"display:flex;\"><span>{{ <span style=\"color:#66d9ef\">if<\/span> .<span style=\"color:#a6e22e\">Params<\/span>.<span style=\"color:#a6e22e\">viz<\/span> }}\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#f92672\">&lt;<\/span><span style=\"color:#a6e22e\">script<\/span> <span style=\"color:#a6e22e\">type<\/span><span style=\"color:#f92672\">=<\/span><span style=\"color:#e6db74\">&#34;text\/javascript&#34;<\/span> <span style=\"color:#a6e22e\">src<\/span><span style=\"color:#f92672\">=<\/span><span style=\"color:#e6db74\">&#34;https:\/\/cdn.bootcss.com\/viz.js\/1.8.2\/viz.js&#34;<\/span><span style=\"color:#f92672\">&gt;<\/span> <span style=\"color:#f92672\">&lt;<\/span><span style=\"color:#960050;background-color:#1e0010\">\/script&gt;<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#f92672\">&lt;<\/span><span style=\"color:#a6e22e\">script<\/span> <span style=\"color:#a6e22e\">type<\/span><span style=\"color:#f92672\">=<\/span><span style=\"color:#e6db74\">&#34;text\/javascript&#34;<\/span><span style=\"color:#f92672\">&gt;<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span> (<span style=\"color:#66d9ef\">function<\/span>(){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">var<\/span> <span style=\"color:#a6e22e\">vizPrefix<\/span> <span style=\"color:#f92672\">=<\/span> <span style=\"color:#e6db74\">&#34;language-viz-&#34;<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> Array.<span style=\"color:#a6e22e\">prototype<\/span>.<span style=\"color:#a6e22e\">forEach<\/span>.<span style=\"color:#a6e22e\">call<\/span>(document.<span style=\"color:#a6e22e\">querySelectorAll<\/span>(<span style=\"color:#e6db74\">&#34;[class^=&#34;<\/span> <span style=\"color:#f92672\">+<\/span> <span style=\"color:#a6e22e\">vizPrefix<\/span> <span style=\"color:#f92672\">+<\/span> <span style=\"color:#e6db74\">&#34;]&#34;<\/span>), <span style=\"color:#66d9ef\">function<\/span>(<span style=\"color:#a6e22e\">x<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">var<\/span> <span style=\"color:#a6e22e\">engine<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#a6e22e\">x<\/span>.<span style=\"color:#a6e22e\">getAttribute<\/span>(<span style=\"color:#e6db74\">&#34;class&#34;<\/span>).<span style=\"color:#a6e22e\">split<\/span>(<span style=\"color:#e6db74\">&#34; &#34;<\/span>).<span style=\"color:#a6e22e\">forEach<\/span>(<span style=\"color:#66d9ef\">function<\/span>(<span style=\"color:#a6e22e\">cls<\/span>){\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">if<\/span> (<span style=\"color:#a6e22e\">cls<\/span>.<span style=\"color:#a6e22e\">startsWith<\/span>(<span style=\"color:#a6e22e\">vizPrefix<\/span>)) {\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#a6e22e\">engine<\/span> <span style=\"color:#f92672\">=<\/span> <span style=\"color:#a6e22e\">cls<\/span>.<span style=\"color:#a6e22e\">substr<\/span>(<span style=\"color:#a6e22e\">vizPrefix<\/span>.<span style=\"color:#a6e22e\">length<\/span>);\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> });\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">var<\/span> <span style=\"color:#a6e22e\">image<\/span> <span style=\"color:#f92672\">=<\/span> <span style=\"color:#66d9ef\">new<\/span> <span style=\"color:#a6e22e\">DOMParser<\/span>().<span style=\"color:#a6e22e\">parseFromString<\/span>(<span style=\"color:#a6e22e\">Viz<\/span>(<span style=\"color:#a6e22e\">x<\/span>.<span style=\"color:#a6e22e\">innerText<\/span>, {<span style=\"color:#a6e22e\">format<\/span><span style=\"color:#f92672\">:<\/span><span style=\"color:#e6db74\">&#34;svg&#34;<\/span>, <span style=\"color:#a6e22e\">engine<\/span><span style=\"color:#f92672\">:<\/span><span style=\"color:#a6e22e\">engine<\/span>}), <span style=\"color:#e6db74\">&#34;image\/svg+xml&#34;<\/span>);\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#a6e22e\">x<\/span>.<span style=\"color:#a6e22e\">parentNode<\/span>.<span style=\"color:#a6e22e\">insertBefore<\/span>(<span style=\"color:#a6e22e\">image<\/span>.<span style=\"color:#a6e22e\">documentElement<\/span>, <span style=\"color:#a6e22e\">x<\/span>);\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#a6e22e\">x<\/span>.<span style=\"color:#a6e22e\">style<\/span>.<span style=\"color:#a6e22e\">display<\/span> <span style=\"color:#f92672\">=<\/span> <span style=\"color:#e6db74\">&#39;none&#39;<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#a6e22e\">x<\/span>.<span style=\"color:#a6e22e\">parentNode<\/span>.<span style=\"color:#a6e22e\">style<\/span>.<span style=\"color:#a6e22e\">backgroundColor<\/span> <span style=\"color:#f92672\">=<\/span> <span style=\"color:#e6db74\">&#34;white&#34;<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span> });\n<\/span><\/span><span style=\"display:flex;\"><span> })();\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#f92672\">&lt;<\/span><span style=\"color:#960050;background-color:#1e0010\">\/script&gt;<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>{{ <span style=\"color:#a6e22e\">end<\/span> }}\n<\/span><\/span><span style=\"display:flex;\"><span>\n<\/span><\/span><span style=\"display:flex;\"><span>{{ <span style=\"color:#66d9ef\">if<\/span> .<span style=\"color:#a6e22e\">Params<\/span>.<span style=\"color:#a6e22e\">math<\/span> }}\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#f92672\">&lt;<\/span><span style=\"color:#a6e22e\">script<\/span> <span style=\"color:#a6e22e\">type<\/span><span style=\"color:#f92672\">=<\/span><span style=\"color:#e6db74\">&#34;text\/javascript&#34;<\/span><span style=\"color:#f92672\">&gt;<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span> window.<span style=\"color:#a6e22e\">MathJax<\/span> <span style=\"color:#f92672\">=<\/span> {\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#a6e22e\">tex2jax<\/span><span style=\"color:#f92672\">:<\/span> {\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#a6e22e\">inlineMath<\/span><span style=\"color:#f92672\">:<\/span> [[<span style=\"color:#e6db74\">&#39;$&#39;<\/span>,<span style=\"color:#e6db74\">&#39;$&#39;<\/span>], [<span style=\"color:#e6db74\">&#39;\\\\(&#39;<\/span>,<span style=\"color:#e6db74\">&#39;\\\\)&#39;<\/span>]],\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#a6e22e\">displayMath<\/span><span style=\"color:#f92672\">:<\/span> [[<span style=\"color:#e6db74\">&#39;$$&#39;<\/span>,<span style=\"color:#e6db74\">&#39;$$&#39;<\/span>], [<span style=\"color:#e6db74\">&#39;\\[&#39;<\/span>,<span style=\"color:#e6db74\">&#39;\\]&#39;<\/span>]],\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#a6e22e\">processEscapes<\/span><span style=\"color:#f92672\">:<\/span> <span style=\"color:#66d9ef\">true<\/span>,\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#a6e22e\">processEnvironments<\/span><span style=\"color:#f92672\">:<\/span> <span style=\"color:#66d9ef\">true<\/span>,\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#a6e22e\">skipTags<\/span><span style=\"color:#f92672\">:<\/span> [<span style=\"color:#e6db74\">&#39;script&#39;<\/span>, <span style=\"color:#e6db74\">&#39;noscript&#39;<\/span>, <span style=\"color:#e6db74\">&#39;style&#39;<\/span>, <span style=\"color:#e6db74\">&#39;textarea&#39;<\/span>, <span style=\"color:#e6db74\">&#39;pre&#39;<\/span>],\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#a6e22e\">TeX<\/span><span style=\"color:#f92672\">:<\/span> { <span style=\"color:#a6e22e\">equationNumbers<\/span><span style=\"color:#f92672\">:<\/span> { <span style=\"color:#a6e22e\">autoNumber<\/span><span style=\"color:#f92672\">:<\/span> <span style=\"color:#e6db74\">&#34;AMS&#34;<\/span> },\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#a6e22e\">extensions<\/span><span style=\"color:#f92672\">:<\/span> [<span style=\"color:#e6db74\">&#34;AMSmath.js&#34;<\/span>, <span style=\"color:#e6db74\">&#34;AMSsymbols.js&#34;<\/span>, <span style=\"color:#e6db74\">&#34;color.js&#34;<\/span>] }\n<\/span><\/span><span style=\"display:flex;\"><span> },\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#a6e22e\">AuthorInit<\/span><span style=\"color:#f92672\">:<\/span> <span style=\"color:#66d9ef\">function<\/span> () {\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#a6e22e\">MathJax<\/span>.<span style=\"color:#a6e22e\">Hub<\/span>.<span style=\"color:#a6e22e\">Register<\/span>.<span style=\"color:#a6e22e\">StartupHook<\/span>(<span style=\"color:#e6db74\">&#34;Begin&#34;<\/span>,<span style=\"color:#66d9ef\">function<\/span> () {\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#a6e22e\">MathJax<\/span>.<span style=\"color:#a6e22e\">Hub<\/span>.<span style=\"color:#a6e22e\">Queue<\/span>(<span style=\"color:#66d9ef\">function<\/span>() {\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">var<\/span> <span style=\"color:#a6e22e\">all<\/span> <span style=\"color:#f92672\">=<\/span> <span style=\"color:#a6e22e\">MathJax<\/span>.<span style=\"color:#a6e22e\">Hub<\/span>.<span style=\"color:#a6e22e\">getAllJax<\/span>(), <span style=\"color:#a6e22e\">i<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#66d9ef\">for<\/span>(<span style=\"color:#a6e22e\">i<\/span> <span style=\"color:#f92672\">=<\/span> <span style=\"color:#ae81ff\">0<\/span>; <span style=\"color:#a6e22e\">i<\/span> <span style=\"color:#f92672\">&lt;<\/span> <span style=\"color:#a6e22e\">all<\/span>.<span style=\"color:#a6e22e\">length<\/span>; <span style=\"color:#a6e22e\">i<\/span> <span style=\"color:#f92672\">+=<\/span> <span style=\"color:#ae81ff\">1<\/span>) {\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#a6e22e\">all<\/span>[<span style=\"color:#a6e22e\">i<\/span>].<span style=\"color:#a6e22e\">SourceElement<\/span>().<span style=\"color:#a6e22e\">parentNode<\/span>.<span style=\"color:#a6e22e\">className<\/span> <span style=\"color:#f92672\">+=<\/span> <span style=\"color:#e6db74\">&#39; has-jax&#39;<\/span>;\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> })\n<\/span><\/span><span style=\"display:flex;\"><span> });\n<\/span><\/span><span style=\"display:flex;\"><span> }\n<\/span><\/span><span style=\"display:flex;\"><span> };\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#f92672\">&lt;<\/span><span style=\"color:#960050;background-color:#1e0010\">\/script&gt;<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#f92672\">&lt;<\/span><span style=\"color:#a6e22e\">script<\/span> <span style=\"color:#a6e22e\">type<\/span><span style=\"color:#f92672\">=<\/span><span style=\"color:#e6db74\">&#34;text\/javascript&#34;<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#a6e22e\">src<\/span><span style=\"color:#f92672\">=<\/span><span style=\"color:#e6db74\">&#34;https:\/\/cdn.bootcss.com\/mathjax\/2.7.7\/MathJax.js?config=TeX-MML-AM_CHTML&#34;<\/span><span style=\"color:#f92672\">&gt;<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span> <span style=\"color:#f92672\">&lt;<\/span><span style=\"color:#960050;background-color:#1e0010\">\/script&gt;<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>{{ <span style=\"color:#a6e22e\">end<\/span> }}\n<\/span><\/span><\/code><\/pre><\/div><ol start=\"4\">\n<li>Create some posts and add following config inside front-matter<\/li>\n<\/ol>\n<pre tabindex=\"0\"><code>viz: true\nmath: true\n<\/code><\/pre><p>And try some graphviz and mathjax stuff!<\/p>"},{"title":"About Me","link":"https:\/\/huanglei.rocks\/about-me\/","pubDate":"Sun, 12 Apr 2020 11:37:42 +0800","guid":"https:\/\/huanglei.rocks\/about-me\/","description":"<style>\n.content img{\n max-width: 100%;\n}\n<\/style>\n<p><img alt=\"banner\" src=\"https:\/\/gw.alipayobjects.com\/zos\/antfincdn\/oCf%26nwiV%26R\/XQARE1908-small.jpg\"><\/p>\n<blockquote>\n<p>River Drina, border between Bosnia-Herzegovina and Serbia<\/p>\n<\/blockquote>\n<p>Hello, world!\nThis is Lei, an Alfista\/keyboard racer\/part-time photographer\/full-time programmer.<\/p>\n<h2 id=\"experience\">Experience<\/h2>\n<h3 id=\"202204--nowgreptimedbhttpsgreptimecom\">2022.04 ~ Now\uff1a<a href=\"https:\/\/greptime.com\/\">GreptimeDB<\/a><\/h3>\n<p>Battling wits with the Rust compiler every day.<\/p>\n<h3 id=\"201907--202204infrastructure-team-at-alipay\">2019.07 ~ 2022.04\uff1aInfrastructure Team at Alipay<\/h3>\n<p>Did a bit of minor work in rewriting Alipay&rsquo;s message queue, but I left before finishing all the work (XD<\/p>\n<h2 id=\"footprints\">Footprints<\/h2>\n<ul>\n<li>PEK\/PVG\/SHA\/SZX\/HGH\/NKG<\/li>\n<li>NRT<\/li>\n<li>SIN<\/li>\n<li>SGN<\/li>\n<li>CDG\/ORY<\/li>\n<li>MAD\/BCN<\/li>\n<li>SVO\/LED<\/li>\n<li>KBP\/ODS<\/li>\n<li>BEG<\/li>\n<li>REP<\/li>\n<li>KIX<\/li>\n<li>SFO\/SJC<\/li>\n<\/ul>\n<h2 id=\"gpg-public-key\">GPG public key<\/h2>\n<ul>\n<li>Fingerprint: <code>168AF07A606CD0C3DCF079020C6F8831B4C981E1<\/code><\/li>\n<li>Import: <code>curl https:\/\/keybase.io\/v0y4g3r\/key.asc | gpg --import<\/code><\/li>\n<\/ul>"},{"title":"About Me","link":"https:\/\/huanglei.rocks\/en\/about-me\/","pubDate":"Sun, 12 Apr 2020 11:37:42 +0800","guid":"https:\/\/huanglei.rocks\/en\/about-me\/","description":"<style>\n.content img{\n max-width: 100%;\n}\n<\/style>\n<p><img alt=\"banner\" src=\"https:\/\/gw.alipayobjects.com\/zos\/antfincdn\/oCf%26nwiV%26R\/XQARE1908-small.jpg\"><\/p>\n<blockquote>\n<p>River Drina, border between Bosnia-Herzegovina and Serbia<\/p>\n<\/blockquote>\n<p>Hello, world!\nThis is Lei, an Alfista\/keyboard racer\/part-time photographer\/full-time programmer.<\/p>\n<h2 id=\"experience\">Experience<\/h2>\n<h3 id=\"202204--nowgreptimedbhttpsgreptimecom\">2022.04 ~ Now\uff1a<a href=\"https:\/\/greptime.com\/\">GreptimeDB<\/a><\/h3>\n<p>Battling wits with the Rust compiler every day.<\/p>\n<h3 id=\"201907--202204infrastructure-team-at-alipay\">2019.07 ~ 2022.04\uff1aInfrastructure Team at Alipay<\/h3>\n<p>Did a bit of minor work in rewriting Alipay&rsquo;s message queue, but I left before finishing all the work (XD<\/p>\n<h2 id=\"footprints\">Footprints<\/h2>\n<ul>\n<li>PEK\/PVG\/SHA\/SZX\/HGH\/NKG<\/li>\n<li>NRT<\/li>\n<li>SIN<\/li>\n<li>SGN<\/li>\n<li>CDG\/ORY<\/li>\n<li>MAD\/BCN<\/li>\n<li>SVO\/LED<\/li>\n<li>KBP\/ODS<\/li>\n<li>BEG<\/li>\n<li>REP<\/li>\n<li>KIX<\/li>\n<li>SFO\/SJC<\/li>\n<\/ul>\n<h2 id=\"gpg-public-key\">GPG public key<\/h2>\n<ul>\n<li>Fingerprint: <code>168AF07A606CD0C3DCF079020C6F8831B4C981E1<\/code><\/li>\n<li>Import: <code>curl https:\/\/keybase.io\/v0y4g3r\/key.asc | gpg --import<\/code><\/li>\n<\/ul>"},{"title":"Graphviz and mathjax demo","link":"https:\/\/huanglei.rocks\/posts\/math-and-dot-demo\/","pubDate":"Sat, 11 Apr 2020 23:26:41 +0800","guid":"https:\/\/huanglei.rocks\/posts\/math-and-dot-demo\/","description":"<pre tabindex=\"0\"><code class=\"language-viz-dot\" data-lang=\"viz-dot\">digraph g{\n rankdir=LR;\n node [shape=record,width=01,height=.1];\n\ta[label=&#34;&lt;1&gt;Hash Table|&lt;2&gt;Node|&lt;3&gt;Node|...|&lt;4&gt;TreeNode&#34;];\n {\n \/\/ graph[rankdir=LR] \n node1[label=&#34;{&lt;1&gt;A1|&lt;2&gt;A2|...|An}&#34;]\n node2[label=&#34;{&lt;1&gt;B1|&lt;2&gt;B2|...|Bn}&#34;]\n \/\/ node3[label=&#34;{&lt;1&gt;C1|&lt;2&gt;C2}&#34;]\n subgraph cluster_treenode{\n penwidth=0;\n node[shape=circle];\n root[label=&#34;&#34;, style=filled,fillcolor=black,width=.2];\n n1[label=&#34;&#34;, style=filled,fillcolor=red,width=.2]\n n2[label=&#34;&#34;, style=filled,fillcolor=black,width=.2]\n n3[label=&#34;&#34;, style=filled,fillcolor=black,width=.2]\n n4[label=&#34;&#34;, style=filled,fillcolor=red,width=.2]\n n5[label=&#34;&#34;, style=filled,fillcolor=black,width=.2]\n n6[label=&#34;&#34;, style=filled,fillcolor=black,width=.2]\n root-&gt;n1;\n n1-&gt;n2;\n n1-&gt;n3;\n root-&gt;n4;\n n4-&gt;n5;\n n4-&gt;n6;\n }\n }\n \n a:2:e-&gt;node1:1 [style=dashed];\n a:3:e-&gt;node2:1; \n a:4:e-&gt;root; \n\n \/\/ node3:d-&gt;node3:sa2;\n}\n<\/code><\/pre>$$f(a) = \\frac{1}{2\\pi i} \\oint\\frac{f(z)}{z-a}dz$$"},{"title":"April 2020","link":"https:\/\/huanglei.rocks\/gallery\/2020\/","pubDate":"Sat, 04 Apr 2020 12:00:00 +0800","guid":"https:\/\/huanglei.rocks\/gallery\/2020\/","description":"<h2 id=\"longjing-village-hangzhou-04apr2020\">Longjing Village, Hangzhou, 04\/Apr\/2020<\/h2>\n<p><img alt=\"longjing-village\" src=\"https:\/\/gw.alipayobjects.com\/zos\/antfincdn\/98fP7Mb3BS\/hangzhou.jpg\"><\/p>\n<h2 id=\"silent-spring-hangzhou-25feb2020\">Silent Spring, Hangzhou, 25\/Feb\/2020<\/h2>\n<p><img alt=\"roads\" src=\"https:\/\/cdn.jsdelivr.net\/gh\/RayneHwang\/img-repo\/silent-spring.jpg\"><\/p>\n<h2 id=\"xixi-national-wetland-park-hangzhou-11apr2020\">Xixi National Wetland Park, Hangzhou, 11\/Apr\/2020<\/h2>\n<p><img src=\"https:\/\/gw.alipayobjects.com\/zos\/antfincdn\/ctQBetaLin\/xixi3.JPG\"><\/p>"},{"title":"2019","link":"https:\/\/huanglei.rocks\/gallery\/2019\/","pubDate":"Tue, 31 Dec 2019 23:59:59 +0800","guid":"https:\/\/huanglei.rocks\/gallery\/2019\/","description":"<style>\n.content img{\n max-width: 100%;\n}\n<\/style>\n<p><img alt=\"moscow\" src=\"https:\/\/huanglei-rocks-blog.oss-cn-shanghai.aliyuncs.com\/blog\/moscow-city-sunset.jpg\"><\/p>\n<div style=\"text-align: center; margin-bottom: 1em; margin-top: -0.5em; opacity: .5;\">\n<i>\n<p>Sunset, Moscow City<\/p>\n<\/i>\n<\/div>\n<hr>\n<p><img alt=\"Chernobyl\" src=\"https:\/\/huanglei-rocks-blog.oss-cn-shanghai.aliyuncs.com\/blog\/IMG_20190609_194811.JPG\"><\/p>\n<div style=\"text-align: center; margin-bottom: 1em; margin-top: -0.5em; opacity: .5;\">\n<i>\n<p>Chernobyl, Ukraine<\/p>\n<\/i>\n<\/div>\n<hr>\n<p><img alt=\"Qiyun Moutian, Anhui, China\" src=\"https:\/\/gw.alipayobjects.com\/zos\/antfincdn\/Mm%26v36WntS\/anhui.JPG\"><\/p>\n<div style=\"text-align: center; margin-bottom: 1em; margin-top: -0.5em; opacity: .5;\">\n<i>\n<p>Temple, Qiyun Moutain<\/p>\n<\/i>\n<\/div>\n<hr>\n<p><img alt=\"Shenzhen\" src=\"https:\/\/gw.alipayobjects.com\/zos\/antfincdn\/rgZ15T87q%24\/shenzhen.jpg\"><\/p>\n<div style=\"text-align: center; margin-bottom: 1em; margin-top: -0.5em; opacity: .5;\">\n<i>\n<p>Sunset, Shenzhen<\/p>\n<\/i>\n<\/div>"},{"title":"\u4f60\u7684\u95ee\u9898\u662f\u4ec0\u4e48\uff1f","link":"https:\/\/huanglei.rocks\/scribbles\/defining-problem\/","pubDate":"Tue, 19 Mar 2019 22:41:37 +0800","guid":"https:\/\/huanglei.rocks\/scribbles\/defining-problem\/","description":"<p>\u5ff5\u7814\u7a76\u751f\u7684\u65f6\u5019\uff0c\u6211\u5bfc\u5e08\u5f00\u7ec4\u4f1a\u6700\u559c\u6b22\u95ee\u7684\u4e00\u4e2a\u95ee\u9898\u5c31\u662f\u201c\u4f60(\u7814\u7a76)\u7684\u95ee\u9898\u662f\u4ec0\u4e48\u201d\u3002<\/p>\n<p>\u4ee5\u524d\u89c9\u5f97\u8fd9\u4e2a\u95ee\u9898\u975e\u5e38\u65e0\u5398\u5934\uff0c\u800c\u4e14\u56de\u7b54\u4ed6\u7684\u65f6\u5019\u4e00\u5b9a\u8981\u5b57\u659f\u53e5\u914c\uff0c\u4e00\u4e2a\u4e0d\u5c0f\u5fc3\u5c31\u4f1a\u88ab\u4ed6\u603c\u3002<\/p>"},{"title":"\u540c\u6b65\/\u5f02\u6b65\u548c\u963b\u585e\/\u975e\u963b\u585e","link":"https:\/\/huanglei.rocks\/posts\/synchronicity-and-blocking\/","pubDate":"Tue, 19 Mar 2019 22:41:37 +0800","guid":"https:\/\/huanglei.rocks\/posts\/synchronicity-and-blocking\/","description":"<p>\u540c\u6b65\/\u5f02\u6b65\u4ee5\u53ca\u963b\u585e\/\u975e\u963b\u585e\u8fd9\u51e0\u4e2a\u6982\u5ff5\u7f51\u7edc\u4e0a\u7684\u89e3\u91ca\u5f88\u591a\uff0c\u4e0d\u5c11\u89e3\u91ca\u8bd5\u56fe\u901a\u8fc7\u4e3e\u62ff\u5feb\u9012\/\u53bb\u4e66\u5e97\u4e70\u4e66\u7b49\u4f8b\u5b50\u6765\u89e3\u91ca\u8fd9\u4e9b\u6982\u5ff5\u3002\u4e4d\u4e00\u770b\u975e\u5e38\u901a\u4fd7\u6613\u61c2\uff0c\u4f46\u662f\u4efb\u4f55\u4e00\u4e2a\u6982\u5ff5\uff0c\u5b83\u7684\u4fe1\u606f\u91cf\u662f\u4e00\u5b9a\u7684\uff0c\u5982\u679c\u4e3e\u4f8b\u5b50\u80fd\u591f\u8ba9\u4eba\u66f4\u52a0\u5bb9\u6613\u660e\u767d\uff0c\u90a3\u4e48\u4e00\u5b9a\u635f\u5931\u4e86\u76f8\u5f53\u7a0b\u5ea6\u7684\u4fe1\u606f\u91cf\u3002<\/p>"},{"title":"\u4e3a\u4ec0\u4e48\u6211\u7684 Netty \u5e94\u7528\u6ca1\u6709\u54cd\u5e94\uff1f","link":"https:\/\/huanglei.rocks\/posts\/why-netty-not-responding\/","pubDate":"Tue, 19 Mar 2019 22:41:37 +0800","guid":"https:\/\/huanglei.rocks\/posts\/why-netty-not-responding\/","description":"<blockquote>\n<p>\u6700\u7ec8\u95ee\u9898\u7684\u6839\u672c\u539f\u56e0\u8fd8\u662f\u6ca1\u6709\u6df1\u5165\u7406\u89e3 Netty \u7684\u7ebf\u7a0b\u6a21\u578b\u3002<\/p>\n<\/blockquote>\n<p>\u60f3\u6cd5\u5c31\u662f\u7b49\u670d\u52a1\u5668\u7aef\u542f\u52a8\uff0c bind\u6210\u529f\u540e\u518d\u542f\u52a8client\u3002\u8981\u60f3\u76d1\u542cserver\u7aefbind\u6210\u529f\u7684\u72b6\u6001\u53d8\u5316\uff0c\u5f53\u7136\u7b2c\u4e00\u53cd\u5e94\u5c31\u662f\u5728<code>server.bind().sync()<\/code>\u8fd4\u56de\u7684<code>ChannelFuture<\/code>\u4e2d\u6ce8\u518c\u4e00\u4e2a\u56de\u8c03\u51fd\u6570\uff0cbind\u6210\u529f\u4e4b\u540e\u5728\u8fd9\u4e2a\u56de\u8c03\u51fd\u6570\u4e2d\u542f\u52a8client\u5c31\u884c\u4e86\u3002\u90a3\u4e48 APP\u5165\u53e3\uff1a<\/p>"},{"title":"2018","link":"https:\/\/huanglei.rocks\/gallery\/2018\/","pubDate":"Mon, 31 Dec 2018 23:59:59 +0800","guid":"https:\/\/huanglei.rocks\/gallery\/2018\/","description":"<style>\n.content img{\n max-width: 100%;\n}\n<\/style>\n<p><img alt=\"Le Centre Pompidou\" src=\"https:\/\/huanglei-rocks-blog.oss-cn-shanghai.aliyuncs.com\/blog\/IMG_20181201_210058_DiskStation_Feb-20-2233-2022_CaseConflict.jpg\"><\/p>\n<div style=\"text-align: center; margin-bottom: 1em; margin-top: -0.5em; opacity: .5;\">\n<i>\n<p>Le Centre Pompidou, Paris, 2018\/12\/01<\/p>\n<\/i>\n<\/div>\n<hr>\n<p><img alt=\"Mus\u00e9e du Louvre\" src=\"https:\/\/huanglei-rocks-blog.oss-cn-shanghai.aliyuncs.com\/blog\/IMG_20181209_152951.jpg\"><\/p>\n<div style=\"text-align: center; margin-bottom: 1em; margin-top: -0.5em; opacity: .5;\">\n<i>\n<p>Mus\u00e9e du Louvre, Paris, 2018\/12\/09<\/p>\n<\/i>\n<\/div>\n<hr>\n<p><img alt=\"La tour Eiffel\" src=\"https:\/\/huanglei-rocks-blog.oss-cn-shanghai.aliyuncs.com\/blog\/2018-11-30%20202248.jpg\"><\/p>\n<div style=\"text-align: center; margin-bottom: 1em; margin-top: -0.5em; opacity: .5;\">\n<i>\n<p>La tour Eiffel, Paris, 2018\/11\/30<\/p>\n<\/i>\n<\/div>"},{"title":"Manjaro \u914d\u7f6e\u6307\u5357","link":"https:\/\/huanglei.rocks\/posts\/manjaro-config-manual\/","pubDate":"Tue, 03 Apr 2018 05:58:37 +0800","guid":"https:\/\/huanglei.rocks\/posts\/manjaro-config-manual\/","description":"<p>Manjaro \u662f\u57fa\u4e8e ArchLinux \u7684\u53d1\u884c\u7248, \u65e2\u5177\u5907\u4e86\u5f00\u7bb1\u5373\u7528\u7684\u7528\u6237\u53cb\u597d\u6027, \u53c8\u7ee7\u627f\u4e86 ArchLinux \u6eda\u52a8\u66f4\u65b0\u7684\u7279\u6027\u548c\u5185\u5bb9\u4e30\u5bcc\u7684 AUR \u8f6f\u4ef6\u5305, \u5e76\u4e14\u5185\u7f6e\u4e86 MHWD ,\u65b9\u4fbf\u7528\u6237\u7ba1\u7406\u786c\u4ef6\u9a71\u52a8. Manjaro \u5177\u6709GNOME\/i3\/xfce\/KDE\u7b49\u591a\u79cd\u56fe\u5f62\u754c\u9762\u53ef\u4f9b\u9009\u62e9. \u4ee5\u4e0b\u662f Manjaro with KDE \u7684\u57fa\u672c\u914d\u7f6e\u9009\u9879.<\/p>"},{"title":"\u518d\u8c08\u70ed\u98ce","link":"https:\/\/huanglei.rocks\/scribbles\/vive-la-revolution\/","pubDate":"Thu, 03 Mar 2016 23:29:37 +0800","guid":"https:\/\/huanglei.rocks\/scribbles\/vive-la-revolution\/","description":"<style>\n.content img{\n max-width: 100%;\n}\n<\/style>\n<p><img src=\"https:\/\/cdn.jsdelivr.net\/gh\/RayneHwang\/img-repo\/revolution.png\"><\/p>\n<hr>\n<p>\u6b63\u5982\u5927\u5bb6\u90fd\u77e5\u9053\u7684\uff0c\u4eca\u5929\u662f\u4e94\u56db\uff0c\u6211\u4ece\u672a\u5bf9\u8fd9\u4e2a\u65e5\u671f\u62b1\u6709\u50cf\u4eca\u5929\u8fd9\u6837\u5f3a\u70c8\u7684\u7d27\u8feb\u611f\uff0c\u6cf0\u534a\u56e0\u4e3a\u867d\u8bf4\u662f\u521a\u521a\u5165\u590f\uff0c\u5374\u611f\u89c9\u7a7a\u6c14\u6108\u53d1\u5730\u7a00\u8584\u3002<\/p>\n<p>\u5728\u5982\u4eca\uff0c\u201c\u9752\u5e74\u201d\u4e00\u8bcd\u9010\u6e10\u4ece\u6211\u4eec\u7684\u751f\u6d3b\u4e2d\u6d88\u5931\u3002\u62dc\u8fd9\u4e2a\u65f6\u4ee3\u7ed9\u4e88\u6c49\u5b57\u7684\u5f3a\u5927\u521b\u9020\u529b\u6240\u8d50\uff0c\u5341\u51e0\u5c81\u4e8c\u5341\u591a\u5c81\u7684\u6211\u4eec\u6709\u66f4\u591a\u7684\u9009\u62e9\u6765\u63cf\u8ff0\u81ea\u5df1\u3002\u201c\u9752\u5e74\u201d\u4e00\u8bcd\u4f3c\u4e4e\u53ea\u662f\u5b98\u65b9\u7684\u5b8f\u5927\u53d9\u4e8b\u4e2d\u4f9d\u7167\u5e74\u9f84\u5212\u5206\u7684\u4e00\u4e2a\u7279\u5f81\u9c9c\u660e\u800c\u9762\u76ee\u6a21\u7cca\u7684\u7fa4\u4f53\uff0c\u8fd8\u5e38\u5e38\u4e0e\u4e00\u8154\u83bd\u649e\u7684\u70ed\u8840\u8054\u7cfb\uff1a\u6240\u6709\u4eba\u90fd\u544a\u8bc9\u6211\u4eec\uff0c\u4f60\u8fd8\u5e74\u8f7b\uff0c\u7b49\u4f60\u6210\u719f\u4e86\u5c31\u4e0d\u4f1a\u8fd9\u4e48\u5e7c\u7a1a\u4e86\u3002\u8fd9\u8ba9\u6211\u60f3\u8d77\u300a\u94a2\u94c1\u300b\u4e2d\uff0c\u5206\u79bb\u82e5\u5e72\u5e74\u540e\uff0c\u4fdd\u5c14\u67ef\u5bdf\u91d1\u5728\u8f66\u7ad9\u5bf9\u51ac\u5c3c\u4e9a\u8bf4\uff1a\u201c\u6211\u6ca1\u60f3\u5230\u4f60\u53d8\u5f97&hellip;&hellip;\u90a3\u4e48\u9178\u81ed\u3002\u201d\u4e0d\u5fc5\u53bb\u4e89\u8bba\u201c\u9178\u81ed\u201d\u4e0e\u201c\u6210\u719f\u201d\u7684\u5b9a\u4e49\uff0c\u7a00\u8584\u7684\u7a7a\u6c14\u4e0e\u4e0d\u5b9c\u8ba8\u8bba\u7684\u5185\u5bb9\u6bc1\u706d\u7684\u7ec8\u5c06\u662f\u6bcf\u4e00\u4e2a\u4f60\u6211\uff0c\u5c60\u5200\u843d\u4e0b\u7684\u65f6\u5019\u54ea\u7ba1\u4f60\u7a76\u7adf\u662f\u9752\u5e74\u4e0e\u5426\uff1f<\/p>"}]}}