提交 bf0bfde0 编写于 作者: F fuzhengwei3
itstack.org
\ No newline at end of file
![logo](_media/tree.png)
# CodeGuide
## 程序员编码指南
- 本代码库是作者小傅哥多年从事一线互联网 `Java` 开发的学习历程技术汇总,旨在为大家提供一个清晰详细的学习教程,侧重点更倾向编写Java核心内容。如果本仓库能为您提供帮助,请给予支持(关注、点赞、分享)!
[![stars](https://badgen.net/github/stars/fuzhengwei/CodeGuide?icon=github&color=4ab8a1)](https://github.com/fuzhengwei/CodeGuide) [![forks](https://badgen.net/github/forks/fuzhengwei/CodeGuide?icon=github&color=4ab8a1)](https://github.com/fuzhengwei/CodeGuide) [<img src="https://itstack.org/_media/wxbugstack.svg">](https://itstack.org/_media/qrcode.png?x-oss-process=style/may)
[GitHub](<https://github.com/fuzhengwei/CodeGuide>)
[开始阅读](README.md)
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg class="icon" width="200px" height="138.85px" viewBox="0 0 1475 1024" version="1.1"
xmlns="http://www.w3.org/2000/svg">
<path d="M1438.175947 987.166567H36.67147l60.675821-758.677015h1279.541492l61.287164 758.677015z" fill="#B2EDA6"/>
<path d="M1438.481619 1024H36.67147a36.833433 36.833433 0 0 1-26.899105-11.768358A36.22209 36.22209 0 0 1 0.143709 984.262687l61.134328-758.677015a36.374925 36.374925 0 0 1 36.374925-33.623881h1279.235821a36.680597 36.680597 0 0 1 36.527761 33.623881l61.134329 754.397612a36.986269 36.986269 0 0 1 0 7.183283A36.527761 36.527761 0 0 1 1438.481619 1024zM76.561619 950.638806h1322.029851l-55.326567-685.621493H131.124007z"
fill="#3C663E"/>
<path d="M280.138932 73.055522s172.093134-22.772537 263.183284-22.772537 187.98806 51.2 187.98806 108.207761v706.712836S749.039231 733.61194 520.549679 733.61194s-285.650149 56.243582-285.65015 56.243582z"
fill="#FFFFFF"/>
<path d="M731.15744 886.447761h-1.681194a24.453731 24.453731 0 0 1-22.772537-24.453731v-11.921194c-2.751045-28.274627-26.899104-91.701493-186.15403-91.701493-210.30209 0-268.532537 49.213134-268.991045 49.671642a25.065075 25.065075 0 0 1-27.05194 3.820896 24.453731 24.453731 0 0 1-13.90806-23.231045l45.850746-717.411343a24.453731 24.453731 0 0 1 20.48-22.31403c7.183284-0.917015 174.691343-23.078209 266.392836-23.078209 100.413134 0 212.136119 53.186866 212.136119 129.604776v692.65194a72.597015 72.597015 0 0 1 0 17.423284A24.300896 24.300896 0 0 1 731.15744 886.447761zM520.549679 709.922388c95.369552 0 152.835821 18.64597 186.459701 45.850746V158.490746c0-35.610746-76.41791-83.906866-163.687164-83.906865-70.457313 0-192.420299 14.213731-240.105075 20.174328l-41.112835 652.608955c42.641194-17.576119 121.198806-37.444776 258.445373-37.444776z"
fill="#3C663E"/>
<path d="M147.630276 886.600597l87.269253-107.596418 45.239403-705.948657-86.65791 113.862687-45.850746 699.682388z"
fill="#FFFFFF"/>
<path d="M147.630276 910.901493a22.31403 22.31403 0 0 1-8.864478-1.681194 24.14806 24.14806 0 0 1-15.283582-24.300896l45.850746-699.529552a24.300896 24.300896 0 0 1 4.890747-13.143881l86.65791-114.015522a24.606567 24.606567 0 0 1 27.968955-7.947463 23.995224 23.995224 0 0 1 15.283582 24.300896L259.964604 780.532537a25.829254 25.829254 0 0 1-5.502089 13.90806l-87.269254 106.985075a23.995224 23.995224 0 0 1-19.562985 9.475821z m69.693134-714.965971l-40.348657 615.928359 34.235224-42.182687L250.641619 152.835821z"
fill="#3C663E"/>
<path d="M146.407589 889.657313h584.902687C729.629082 914.416716 750.109082 733.61194 497.777141 733.61194 214.113858 733.61194 146.407589 889.657313 146.407589 889.657313z"
fill="#FFFFFF"/>
<path d="M731.310276 913.958209c-3.66806 0-7.336119 1.528358-10.392836 0H146.407589a27.968955 27.968955 0 0 1-20.48-14.060896 24.300896 24.300896 0 0 1-1.83403-23.078209c3.056716-7.030448 78.099104-169.953433 373.683582-169.953432 232.004776 0 255.235821 146.111045 257.528359 175.302686a26.899104 26.899104 0 0 1 0 6.113433v1.528358a25.065075 25.065075 0 0 1-23.995224 24.14806z m-536.14806-48.754627h511.847164c-11.768358-39.890149-58.536119-109.583284-209.232239-109.583283-181.263284 0-265.475821 67.859104-302.614925 109.583283z"
fill="#3C663E"/>
<path d="M1189.664903 73.055522s-168.119403-22.772537-258.903881-22.772537-199.756418 48.143284-199.756418 105.151045v718.328358S725.808186 733.61194 953.533559 733.61194s285.650149 56.243582 285.65015 56.243582z"
fill="#FFFFFF"/>
<path d="M707.00938 158.490746c0-80.238806 130.216119-132.661493 223.751642-132.661492A2599.890149 2599.890149 0 0 1 1192.263112 48.907463a24.606567 24.606567 0 0 1 21.091343 22.466865l49.518806 717.411344A24.300896 24.300896 0 0 1 1222.830276 807.890149s-58.383284-49.213134-268.685373-49.213134c-189.210746 0-197.769552 101.482985-198.686568 114.168358v1.528358a24.606567 24.606567 0 0 1-23.995223 24.453732 22.31403 22.31403 0 0 1-23.995224-21.397015v-718.328358m223.293134-84.518209c-88.644776 0-175.302687 45.850746-175.302687 80.850149v614.552836c34.999403-32.55403 95.063881-60.064478 198.686568-60.064478 137.552239 0 215.651343 19.868657 258.292537 37.444776l-45.850746-652.761791c-46.614925-5.807761-165.521194-20.021493-235.825672-20.021492z"
fill="#3C663E"/>
<path d="M1326.758634 886.600597l-87.574925-107.596418-49.518806-705.948657 90.32597 113.862687 46.767761 699.682388z"
fill="#FFFFFF"/>
<path d="M1326.758634 910.901493a24.300896 24.300896 0 0 1-18.951642-9.17015l-87.422089-106.985074a24.300896 24.300896 0 0 1-5.50209-13.755224L1165.211171 74.736716a24.759403 24.759403 0 0 1 15.283582-24.453731 24.300896 24.300896 0 0 1 27.81612 7.641791L1299.248186 171.787463a24.912239 24.912239 0 0 1 5.196418 13.602388l45.850746 696.167164a26.746269 26.746269 0 0 1 0 5.043582 24.453731 24.453731 0 0 1-24.453731 24.300896z m-63.732537-141.220299l34.235224 42.029851-41.112836-615.469851-36.680597-45.850746z"
fill="#3C663E"/>
<path d="M1328.439828 889.657313H731.310276S725.808186 733.61194 976.458932 733.61194c283.05194 0 351.980896 156.045373 351.980896 156.045373z"
fill="#FFFFFF"/>
<path d="M1328.7455 913.958209H731.310276a24.300896 24.300896 0 0 1-24.300896-23.383881 158.643582 158.643582 0 0 1 45.850746-108.054925c45.850746-48.143284 122.268657-72.597015 223.293135-72.597015 275.104478 0 359.469851 140.608955 372.460895 166.132537a23.078209 23.078209 0 0 1 4.126567 13.602388 24.300896 24.300896 0 0 1-23.995223 24.300896z m-569.160597-48.754627h522.545671c-37.444776-41.724179-124.561194-106.985075-305.671642-106.985075-86.046567 0-150.848955 19.562985-187.376716 56.854926a116.919403 116.919403 0 0 0-29.497313 50.130149z"
fill="#3C663E"/>
<path d="M737.882216 175.608358a36.527761 36.527761 0 0 1-36.527761-36.527761c0-24.912239-73.361194-66.025075-157.115224-66.025075-87.727761 0-256.764179 22.31403-258.445373 22.466866a36.527761 36.527761 0 0 1-9.628657-72.444179C283.348485 22.161194 451.773559 0 544.239231 0c111.264478 0 230.170746 55.93791 230.170746 139.080597a36.527761 36.527761 0 0 1-36.527761 36.527761z"
fill="#3C663E"/>
<path d="M152.979529 251.109254a37.29194 37.29194 0 0 1-23.231044-8.253135 36.527761 36.527761 0 0 1-4.890747-51.505671l127.923583-155.281194a36.527761 36.527761 0 0 1 56.396417 45.850746l-127.923582 155.892537a36.22209 36.22209 0 0 1-28.274627 13.296717zM738.035052 175.608358a36.527761 36.527761 0 0 1-36.527761-36.527761C701.507291 55.93791 820.566395 0 932.442216 0a2621.592836 2621.592836 0 0 1 262.877612 23.078209 36.527761 36.527761 0 1 1-9.781493 72.444179c-1.681194 0-166.285373-22.466866-253.860298-22.466866-83.601194 0-157.115224 41.112836-157.115224 66.025075a36.527761 36.527761 0 0 1-36.527761 36.527761z"
fill="#3C663E"/>
<path d="M1328.134156 257.222687a36.986269 36.986269 0 0 1-27.816119-12.685374l-137.552239-161.241791a36.527761 36.527761 0 1 1 55.479403-47.684776l137.552239 161.241791a36.680597 36.680597 0 0 1-3.973731 51.658508 37.29194 37.29194 0 0 1-23.689553 8.711642zM655.962216 669.26806a24.300896 24.300896 0 0 1-20.938507-12.07403c-17.117612-28.274627-170.41194-47.226269-297.418508-16.81194a24.300896 24.300896 0 0 1-11.309851-47.379105c113.709851-27.357612 311.479403-25.523582 350.452538 38.973134a24.453731 24.453731 0 0 1-8.253135 33.471045 23.689552 23.689552 0 0 1-12.532537 3.820896zM655.962216 548.374925a24.300896 24.300896 0 0 1-20.938507-11.768358C618.058932 508.637612 477.755649 489.074627 349.832067 519.641791a24.300896 24.300896 0 0 1-11.309851-47.379104c114.779701-27.510448 298.946866-25.98209 338.225672 38.973134a24.300896 24.300896 0 0 1-8.253135 33.471045 23.689552 23.689552 0 0 1-12.532537 3.668059zM655.962216 432.372537a24.300896 24.300896 0 0 1-20.938507-11.768358c-17.117612-28.427463-146.263881-47.226269-272.964777-16.81194a24.300896 24.300896 0 1 1-11.462686-47.379105c110.80597-26.593433 285.802985-27.816119 326.151642 38.973135a24.300896 24.300896 0 0 1-8.253135 33.471044 23.689552 23.689552 0 0 1-12.532537 3.515224zM816.286992 547.45791a24.912239 24.912239 0 0 1-13.90806-4.432238 24.300896 24.300896 0 0 1-5.960597-33.929553c49.671642-70.915821 152.835821-61.134328 220.847762-55.479403A24.912239 24.912239 0 0 1 1039.427291 480.057313a23.995224 23.995224 0 0 1-25.829254 22.161194c-58.230448-5.196418-144.124179-12.991045-177.74806 34.846568a24.300896 24.300896 0 0 1-19.562985 10.392835zM816.286992 426.564776a25.065075 25.065075 0 0 1-12.532537-3.515224 24.453731 24.453731 0 0 1-8.864478-33.471045c39.278806-64.955224 223.44597-66.483582 338.378508-38.973134a24.300896 24.300896 0 1 1-11.462687 47.379105c-127.923582-30.567164-268.226866-11.157015-285.191642 16.81194a24.606567 24.606567 0 0 1-20.327164 11.768358zM816.286992 310.562388a25.065075 25.065075 0 0 1-12.532537-3.515224A24.453731 24.453731 0 0 1 794.889977 273.576119c40.348657-66.789254 215.345672-65.566567 326.151642-39.12597a24.453731 24.453731 0 0 1-11.309851 47.531941c-126.853731-30.567164-256-11.615522-273.117612 16.81194a24.606567 24.606567 0 0 1-20.327164 11.768358z"
fill="#3C663E"/>
<path d="M548.212962 265.017313l-69.998806-60.828656-76.112238 60.828656 0.152835-216.262686h146.263881l-0.305672 216.262686z"
fill="#B2EDA6"/>
<path d="M548.212962 289.471045a24.759403 24.759403 0 0 1-15.283582-5.960597l-54.715224-47.684776-60.370149 48.296119a24.453731 24.453731 0 0 1-25.829254 2.903881 20.021493 20.021493 0 0 1-13.449552-18.951642V48.754627a24.453731 24.453731 0 0 1 24.300896-24.453731h146.26388a24.300896 24.300896 0 0 1 16.506269 7.183283 24.606567 24.606567 0 0 1 7.183283 17.270448v216.415522a24.14806 24.14806 0 0 1-14.366567 22.008358 23.231045 23.231045 0 0 1-10.24 2.292538zM426.708485 73.055522v146.263881l36.222089-34.235224a24.453731 24.453731 0 0 1 30.567164 0l30.567165 33.623881V73.055522z"
fill="#3C663E"/>
</svg>
\ No newline at end of file
<svg width="101.9" height="20" viewBox="0 0 1019 200" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<linearGradient id="a" x2="0" y2="100%">
<stop offset="0" stop-opacity=".1" stop-color="#EEE"/>
<stop offset="1" stop-opacity=".1"/>
</linearGradient>
<mask id="m">
<rect width="1019" height="200" rx="30" fill="#FFF"/>
</mask>
<g mask="url(#m)">
<rect width="479" height="200" fill="#555"/>
<rect width="540" height="200" fill="#4ab8a1" x="479"/>
<rect width="1019" height="200" fill="url(#a)"/>
</g>
<g fill="#fff" text-anchor="start" font-family="Verdana,DejaVu Sans,sans-serif" font-size="110">
<text x="200" y="148" textLength="265" fill="#000" opacity="0.25">Book</text>
<text x="190" y="138" textLength="265">Book</text>
<text x="534" y="148" textLength="440" fill="#000" opacity="0.25">在线阅读</text>
<text x="524" y="138" textLength="440">在线阅读</text>
</g>
<image x="40" y="35" width="130" height="130"
xlink:href="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA3Ny4wNzUgNzcuNyI+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTQ3LjMyMyA3Ny43Yy0zLjU5NCAwLTYuNzktMi4zOTYtNy43ODctNS45OWwtMTcuMTcyLTYxLjdjLS45OTgtNC4zOTMgMS41OTgtOC43ODYgNS45OS05Ljc4NCA0LjE5My0xIDguMzg3IDEuMzk3IDkuNTg0IDUuMzlsMTYuOTczIDYxLjdjMS4xOTggNC4zOTQtMS4zOTcgOC43ODYtNS41OSA5Ljk4NC0uNi4yLTEuMzk3LjQtMS45OTcuNHoiLz48cGF0aCBmaWxsPSIjRkZGIiBkPSJNMTcuMzcyIDcwLjcxYy00LjM5MyAwLTcuOTg3LTMuNTkzLTcuOTg3LTcuOTg1IDAtMS45OTcuOC0zLjk5NCAxLjk5Ny01LjM5Mkw1NC4xMTIgOS40MWMyLjk5NS0zLjM5MyA3Ljk4Ni0zLjU5MyAxMS4zOC0uNTk4czMuNTk1IDcuOTg3LjYgMTEuMzhsLTQyLjczIDQ3LjcyM2MtMS41OTcgMS43OTgtMy43OTQgMi43OTYtNS45OSAyLjc5NnoiLz48cGF0aCBmaWxsPSIjRkZGIiBkPSJNNjkuMDg3IDU2LjczNGMtLjc5OCAwLTEuNTk3LS4yLTIuNTk2LS40TDUuNTkgMzYuMzY4QzEuNCAzNC45Ny0uOTk3IDMwLjM3Ny40IDI2LjE4NGMxLjM5Ny00LjE5MyA1Ljk5LTYuNTkgMTAuMTgzLTUuMTlsNjAuOSAxOS45NjZjNC4xOTMgMS4zOTcgNi41OSA1Ljk5IDUuMTkgMTAuMTg0LS45OTYgMy4zOTQtMy45OSA1LjU5LTcuNTg2IDUuNTl6Ii8+PC9zdmc+"/>
</svg>
\ No newline at end of file
<svg width="148.0" height="20" viewBox="0 0 1480 200" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<linearGradient id="a" x2="0" y2="100%">
<stop offset="0" stop-opacity=".1" stop-color="#EEE"/>
<stop offset="1" stop-opacity=".1"/>
</linearGradient>
<mask id="m">
<rect width="1480" height="200" rx="30" fill="#FFF"/>
</mask>
<g mask="url(#m)">
<rect width="540" height="200" fill="#07c160"/>
<rect width="940" height="200" fill="#e7232c" x="540"/>
<rect width="1480" height="200" fill="url(#a)"/>
</g>
<g fill="#fff" text-anchor="start" font-family="Verdana,DejaVu Sans,sans-serif" font-size="110">
<text x="200" y="148" textLength="310" fill="#000" opacity="0.25">公众号</text>
<text x="190" y="138" textLength="310">公众号</text>
<text x="594" y="148" textLength="840" fill="#000" opacity="0.25">bugstack虫洞栈</text>
<text x="584" y="138" textLength="840">bugstack虫洞栈</text>
</g>
<image x="40" y="35" width="130" height="130"
xlink:href="data:image/png;base64,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"/>
</svg>
\ No newline at end of file
* [:octocat: 首页](/README)
* :memo: 目录
* [第 1 章 - 引言](/notes/asm-doc/1引言.md)
* `第一部分 核心 API`
* [第 2 章 - 类](notes/asm-doc/2.0类.md)
* [2.1 结构](notes/asm-doc/2.1结构.md)
* [2.2 接口和组件](notes/asm-doc/2.2接口和组件.md)
* [2.3 工具](notes/asm-doc/2.3工具.md)
* [第 3 章 - 方法](/notes/asm-doc/3.0方法.md)
* [3.1 结构](/notes/asm-doc/3.1结构.md)
* [3.2 接口和组件](/notes/asm-doc/3.2接口和组件.md)
* [3.3 工具](/notes/asm-doc/3.3工具.md)
* [第 4 章 - 元数据](/notes/asm-doc/4.0元数据.md)
* [4.1 泛型](/notes/asm-doc/4.1泛型.md)
* [4.2 注释](/notes/asm-doc/4.2注释.md)
* [4.3 调试](/notes/asm-doc/4.3调试.md)
* [第 5 章 - 后向兼容](/notes/asm-doc/5.0后向兼容.md)
* [5.1 引言](/notes/asm-doc/5.1引言.md)
* [5.2 规则](/notes/asm-doc/5.2规则.md)
* `第二部分 树 API`
* [第 6 章 - 类](/notes/asm-doc/6.0类.md)
* [6.1 接口和组件](/notes/asm-doc/6.1接口和组件.md)
* [6.2 组件合成](/notes/asm-doc/6.2组件合成.md)
* [第 7 章 - 方法](/notes/asm-doc/7.0方法.md)
* [7.1 接口和组件](/notes/asm-doc/7.1接口和组件.md)
* [7.2 组件合成](/notes/asm-doc/7.2组件合成.md)
* [第 8 章 - 方法分析](/notes/asm-doc/8.0方法分析.md)
* [8.1 介绍](/notes/asm-doc/8.1介绍.md)
* [8.2 组件与接口](/notes/asm-doc/8.2组件与接口.md)
* [第 9 章 - 元数据](/notes/asm-doc/9.0元数据.md)
* [9.1 泛型](/notes/asm-doc/9.1泛型.md)
* [9.2 注释](/notes/asm-doc/9.2注释.md)
* [9.2 调试](/notes/asm-doc/9.3调试.md)
* [第 10 章 - 后向兼容](/notes/asm-doc/10.0后向兼容.md)
* [10.1 介绍](/notes/asm-doc/10.1介绍.md)
* [10.2 规则](/notes/asm-doc/10.2规则.md)
* [A. 附录](/notes/asm-doc/A.0附录.md)
* [A.1 字节代码指令](/notes/asm-doc/A.1字节代码指.md)
* [A.2 子例程](/notes/asm-doc/A.2子例程.md)
* [A.3 属性](/notes/asm-doc/A.3属性.md)
* [A.4 规则](/notes/asm-doc/A.4规则.md)
* [A.5 性能](/notes/asm-doc/A.5性能.md)
* [JVM指令表](/notes/asm-doc/JVM-指令表.md)
\ No newline at end of file
此差异已折叠。
@import url("https://fonts.googleapis.com/css?family=Roboto+Mono|Source+Sans+Pro:300,400,600");*{-webkit-font-smoothing:antialiased;-webkit-overflow-scrolling:touch;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-text-size-adjust:none;-webkit-touch-callout:none;box-sizing:border-box}body:not(.ready){overflow:hidden}body:not(.ready) .app-nav,body:not(.ready)>nav,body:not(.ready) [data-cloak]{display:none}div#app{font-size:30px;font-weight:lighter;margin:40vh auto;text-align:center}div#app:empty:before{content:"Loading..."}.emoji{height:1.2rem;vertical-align:middle}.progress{background-color:var(--theme-color,#42b983);height:2px;left:0;position:fixed;right:0;top:0;transition:width .2s,opacity .4s;width:0;z-index:999999}.search .search-keyword,.search a:hover{color:var(--theme-color,#42b983)}.search .search-keyword{font-style:normal;font-weight:700}body,html{height:100%}body{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#34495e;font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-size:15px;letter-spacing:0;margin:0;overflow-x:hidden}img{max-width:100%}a[disabled]{cursor:not-allowed;opacity:.6}kbd{border:1px solid #ccc;border-radius:3px;display:inline-block;font-size:12px!important;line-height:12px;margin-bottom:3px;padding:3px 5px;vertical-align:middle}li input[type=checkbox]{margin:0 .2em .25em 0;vertical-align:middle}.app-nav{margin:25px 60px 0 0;position:absolute;right:0;text-align:right;z-index:10}.app-nav.no-badge{margin-right:25px}.app-nav p{margin:0}.app-nav>a{margin:0 1rem;padding:5px 0}.app-nav li,.app-nav ul{display:inline-block;list-style:none;margin:0}.app-nav a{color:inherit;font-size:16px;text-decoration:none;transition:color .3s}.app-nav a.active,.app-nav a:hover{color:var(--theme-color,#42b983)}.app-nav a.active{border-bottom:2px solid var(--theme-color,#42b983)}.app-nav li{display:inline-block;margin:0 1rem;padding:5px 0;position:relative}.app-nav li ul{background-color:#fff;border:1px solid;border-color:#ddd #ddd #ccc;border-radius:4px;box-sizing:border-box;display:none;max-height:calc(100vh - 61px);overflow-y:auto;padding:10px 0;position:absolute;right:-15px;text-align:left;top:100%;white-space:nowrap}.app-nav li ul li{display:block;font-size:14px;line-height:1rem;margin:8px 14px;white-space:nowrap}.app-nav li ul a{display:block;font-size:inherit;margin:0;padding:0}.app-nav li ul a.active{border-bottom:0}.app-nav li:hover ul{display:block}.github-corner{border-bottom:0;position:fixed;right:0;text-decoration:none;top:0;z-index:1}.github-corner:hover .octo-arm{-webkit-animation:octocat-wave .56s ease-in-out;animation:octocat-wave .56s ease-in-out}.github-corner svg{color:#fff;fill:var(--theme-color,#42b983);height:80px;width:80px}main{display:block;position:relative;width:100vw;height:100%;z-index:0}main.hidden{display:none}.anchor{display:inline-block;text-decoration:none;transition:all .3s}.anchor span{color:#34495e}.anchor:hover{text-decoration:underline}.sidebar{border-right:1px solid rgba(0,0,0,.07);overflow-y:auto;padding:40px 0 0;position:absolute;top:0;bottom:0;left:0;transition:transform .25s ease-out;width:300px;z-index:20}.sidebar>h1{margin:0 auto 1rem;font-size:1.5rem;font-weight:300;text-align:center}.sidebar>h1 a{color:inherit;text-decoration:none}.sidebar>h1 .app-nav{display:block;position:static}.sidebar .sidebar-nav{line-height:2em;padding-bottom:40px}.sidebar li.collapse .app-sub-sidebar{display:none}.sidebar ul{margin:0 0 0 15px;padding:0}.sidebar li>p{font-weight:700;margin:0}.sidebar ul,.sidebar ul li{list-style:none}.sidebar ul li a{border-bottom:none;display:block}.sidebar ul li ul{padding-left:20px}.sidebar::-webkit-scrollbar{width:4px}.sidebar::-webkit-scrollbar-thumb{background:transparent;border-radius:4px}.sidebar:hover::-webkit-scrollbar-thumb{background:hsla(0,0%,53.3%,.4)}.sidebar:hover::-webkit-scrollbar-track{background:hsla(0,0%,53.3%,.1)}.sidebar-toggle{background-color:transparent;background-color:hsla(0,0%,100%,.8);border:0;outline:none;padding:10px;position:absolute;bottom:0;left:0;text-align:center;transition:opacity .3s;width:284px;z-index:30}.sidebar-toggle .sidebar-toggle-button:hover{opacity:.4}.sidebar-toggle span{background-color:var(--theme-color,#42b983);display:block;margin-bottom:4px;width:16px;height:2px}body.sticky .sidebar,body.sticky .sidebar-toggle{position:fixed}.content{padding-top:60px;position:absolute;top:0;right:0;bottom:0;left:300px;transition:left .25s ease}.markdown-section{margin:0 auto;max-width:800px;padding:30px 15px 40px;position:relative}.markdown-section>*{box-sizing:border-box;font-size:inherit}.markdown-section>:first-child{margin-top:0!important}.markdown-section hr{border:none;border-bottom:1px solid #eee;margin:2em 0}.markdown-section iframe{border:1px solid #eee;width:1px;min-width:100%}.markdown-section table{border-collapse:collapse;border-spacing:0;display:block;margin-bottom:1rem;overflow:auto;width:100%}.markdown-section th{font-weight:700}.markdown-section td,.markdown-section th{border:1px solid #ddd;padding:6px 13px}.markdown-section tr{border-top:1px solid #ccc}.markdown-section p.tip,.markdown-section tr:nth-child(2n){background-color:#f8f8f8}.markdown-section p.tip{border-bottom-right-radius:2px;border-left:4px solid #f66;border-top-right-radius:2px;margin:2em 0;padding:12px 24px 12px 30px;position:relative}.markdown-section p.tip:before{background-color:#f66;border-radius:100%;color:#fff;content:"!";font-family:Dosis,Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-size:14px;font-weight:700;left:-12px;line-height:20px;position:absolute;height:20px;width:20px;text-align:center;top:14px}.markdown-section p.tip code{background-color:#efefef}.markdown-section p.tip em{color:#34495e}.markdown-section p.warn{background:rgba(66,185,131,.1);border-radius:2px;padding:1rem}.markdown-section ul.task-list>li{list-style-type:none}body.close .sidebar{transform:translateX(-300px)}body.close .sidebar-toggle{width:auto}body.close .content{left:0}@media print{.app-nav,.github-corner,.sidebar,.sidebar-toggle{display:none}}@media screen and (max-width:768px){.github-corner,.sidebar,.sidebar-toggle{position:fixed}.app-nav{margin-top:16px}.app-nav li ul{top:30px}main{height:auto;overflow-x:hidden}.sidebar{left:-300px;transition:transform .25s ease-out}.content{left:0;max-width:100vw;position:static;padding-top:20px;transition:transform .25s ease}.app-nav,.github-corner{transition:transform .25s ease-out}.sidebar-toggle{background-color:transparent;width:auto;padding:30px 30px 10px 10px}body.close .sidebar{transform:translateX(300px)}body.close .sidebar-toggle{background-color:hsla(0,0%,100%,.8);transition:background-color 1s;width:284px;padding:10px}body.close .content{transform:translateX(300px)}body.close .app-nav,body.close .github-corner{display:none}.github-corner:hover .octo-arm{-webkit-animation:none;animation:none}.github-corner .octo-arm{-webkit-animation:octocat-wave .56s ease-in-out;animation:octocat-wave .56s ease-in-out}}@-webkit-keyframes octocat-wave{0%,to{transform:rotate(0)}20%,60%{transform:rotate(-25deg)}40%,80%{transform:rotate(10deg)}}@keyframes octocat-wave{0%,to{transform:rotate(0)}20%,60%{transform:rotate(-25deg)}40%,80%{transform:rotate(10deg)}}section.cover{align-items:center;background-position:50%;background-repeat:no-repeat;background-size:cover;height:100vh;display:none}section.cover.show{display:flex}section.cover.has-mask .mask{background-color:#fff;opacity:.8;position:absolute;top:0;height:100%;width:100%}section.cover .cover-main{flex:1;margin:-20px 16px 0;text-align:center;z-index:1}section.cover a{color:inherit}section.cover a,section.cover a:hover{text-decoration:none}section.cover p{line-height:1.5rem;margin:1em 0}section.cover h1{color:inherit;font-size:2.5rem;font-weight:300;margin:.625rem 0 2.5rem;position:relative;text-align:center}section.cover h1 a{display:block}section.cover h1 small{bottom:-.4375rem;font-size:1rem;position:absolute}section.cover blockquote{font-size:1.5rem;text-align:center}section.cover ul{line-height:1.8;list-style-type:none;margin:1em auto;max-width:500px;padding:0}section.cover .cover-main>p:last-child a{border-radius:2rem;border:1px solid var(--theme-color,#42b983);box-sizing:border-box;color:var(--theme-color,#42b983);display:inline-block;font-size:1.05rem;letter-spacing:.1rem;margin:.5rem 1rem;padding:.75em 2rem;text-decoration:none;transition:all .15s ease}section.cover .cover-main>p:last-child a:last-child{background-color:var(--theme-color,#42b983);color:#fff}section.cover .cover-main>p:last-child a:last-child:hover{color:inherit;opacity:.8}section.cover .cover-main>p:last-child a:hover{color:inherit}section.cover blockquote>p>a{border-bottom:2px solid var(--theme-color,#42b983);transition:color .3s}section.cover blockquote>p>a:hover{color:var(--theme-color,#42b983)}.sidebar,body{background-color:#fff}.sidebar{color:#364149}.sidebar li{margin:6px 0}.sidebar ul li a{color:#505d6b;font-size:14px;font-weight:400;overflow:hidden;text-decoration:none;text-overflow:ellipsis;white-space:nowrap}.sidebar ul li a:hover{text-decoration:underline}.sidebar ul li ul{padding:0}.sidebar ul li.active>a{border-right:2px solid;color:var(--theme-color,#42b983);font-weight:600}.app-sub-sidebar li:before{content:"-";padding-right:4px;float:left}.markdown-section h1,.markdown-section h2,.markdown-section h3,.markdown-section h4,.markdown-section strong{color:#2c3e50;font-weight:600}.markdown-section a{color:var(--theme-color,#42b983);font-weight:600}.markdown-section h1{font-size:2rem;margin:0 0 1rem}.markdown-section h2{font-size:1.75rem;margin:45px 0 .8rem}.markdown-section h3{font-size:1.5rem;margin:40px 0 .6rem}.markdown-section h4{font-size:1.25rem}.markdown-section h5{font-size:1rem}.markdown-section h6{color:#777;font-size:1rem}.markdown-section figure,.markdown-section p{margin:1.2em 0}.markdown-section ol,.markdown-section p,.markdown-section ul{line-height:1.6rem;word-spacing:.05rem}.markdown-section ol,.markdown-section ul{padding-left:1.5rem}.markdown-section blockquote{border-left:4px solid var(--theme-color,#42b983);color:#858585;margin:2em 0;padding-left:20px}.markdown-section blockquote p{font-weight:600;margin-left:0}.markdown-section iframe{margin:1em 0}.markdown-section em{color:#7f8c8d}.markdown-section code{border-radius:2px;color:#e96900;font-size:.8rem;margin:0 2px;padding:3px 5px;white-space:pre-wrap}.markdown-section code,.markdown-section pre{background-color:#f8f8f8;font-family:Roboto Mono,Monaco,courier,monospace}.markdown-section pre{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;line-height:1.5rem;margin:1.2em 0;overflow:auto;padding:0 1.4rem;position:relative;word-wrap:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#8e908c}.token.namespace{opacity:.7}.token.boolean,.token.number{color:#c76b29}.token.punctuation{color:#525252}.token.property{color:#c08b30}.token.tag{color:#2973b7}.token.string{color:var(--theme-color,#42b983)}.token.selector{color:#6679cc}.token.attr-name{color:#2973b7}.language-css .token.string,.style .token.string,.token.entity,.token.url{color:#22a2c9}.token.attr-value,.token.control,.token.directive,.token.unit{color:var(--theme-color,#42b983)}.token.function,.token.keyword{color:#e96900}.token.atrule,.token.regex,.token.statement{color:#22a2c9}.token.placeholder,.token.variable{color:#3d8fd1}.token.deleted{text-decoration:line-through}.token.inserted{border-bottom:1px dotted #202746;text-decoration:none}.token.italic{font-style:italic}.token.bold,.token.important{font-weight:700}.token.important{color:#c94922}.token.entity{cursor:help}.markdown-section pre>code{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;background-color:#f8f8f8;border-radius:2px;color:#525252;display:block;font-family:Roboto Mono,Monaco,courier,monospace;font-size:.8rem;line-height:inherit;margin:0 2px;max-width:inherit;overflow:inherit;padding:2.2em 5px;white-space:inherit}.markdown-section code:after,.markdown-section code:before{letter-spacing:.05rem}code .token{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;min-height:1.5rem;position:relative;left:auto}pre:after{color:#ccc;content:attr(data-lang);font-size:.6rem;font-weight:600;height:15px;line-height:15px;padding:5px 10px 0;position:absolute;right:0;text-align:right;top:0}
\ No newline at end of file
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e():"function"==typeof define&&define.amd?define(e):e()}(0,function(){"use strict";var t,c=(function(t,e){function n(t,e){return e.querySelector(t)}(e=t.exports=function(t,e){return n(t,e=e||document)}).all=function(t,e){return(e=e||document).querySelectorAll(t)},e.engine=function(t){if(!t.one)throw new Error(".one callback required");if(!t.all)throw new Error(".all callback required");return n=t.one,e.all=t.all,e}}(t={exports:{}},t.exports),t.exports);c.all,c.engine;try{var a=c}catch(t){a=c}var e=Element.prototype,r=e.matches||e.webkitMatchesSelector||e.mozMatchesSelector||e.msMatchesSelector||e.oMatchesSelector,s=function(t,e){if(!t||1!==t.nodeType)return!1;if(r)return r.call(t,e);for(var n=a.all(e,t.parentNode),i=0;i<n.length;++i)if(n[i]==t)return!0;return!1};try{var i=s}catch(t){i=s}var p=function(t,e,n){n=n||document.documentElement;for(;t&&t!==n;){if(i(t,e))return t;t=t.parentNode}return i(t,e)?t:null};!function(t,e){void 0===e&&(e={});var n=e.insertAt;if(t&&"undefined"!=typeof document){var i=document.head||document.getElementsByTagName("head")[0],a=document.createElement("style");a.type="text/css","top"===n&&i.firstChild?i.insertBefore(a,i.firstChild):i.appendChild(a),a.styleSheet?a.styleSheet.cssText=t:a.appendChild(document.createTextNode(t))}}(".docsify-pagination-container{display:flex;flex-wrap:wrap;justify-content:space-between;overflow:hidden;margin:5em 0 1em;border-top:1px solid rgba(0,0,0,.07)}.pagination-item{margin-top:2.5em}.pagination-item a,.pagination-item a:hover{text-decoration:none}.pagination-item a{color:currentColor}.pagination-item a:hover .pagination-item-title{text-decoration:underline}.pagination-item:not(:last-child) a .pagination-item-label,.pagination-item:not(:last-child) a .pagination-item-subtitle,.pagination-item:not(:last-child) a .pagination-item-title{opacity:.3;transition:all .2s}.pagination-item:last-child .pagination-item-label,.pagination-item:not(:last-child) a:hover .pagination-item-label{opacity:.6}.pagination-item:not(:last-child) a:hover .pagination-item-title{opacity:1}.pagination-item-label{font-size:.8em}.pagination-item-label>*{line-height:1;vertical-align:middle}.pagination-item-label svg{height:.8em;width:auto;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1px}.pagination-item--next{margin-left:auto;text-align:right}.pagination-item--next svg{margin-left:.5em}.pagination-item--previous svg{margin-right:.5em}.pagination-item-title{font-size:1.6em}.pagination-item-subtitle{text-transform:uppercase;opacity:.3}");var o=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},l=function(){function i(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}return function(t,e,n){return e&&i(t.prototype,e),n&&i(t,n),t}}(),u=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(t[i]=n[i])}return t},f={previousText:"PREVIOUS",nextText:"NEXT",crossChapter:!1,crossChapterText:!1},d="docsify-pagination-container";function h(t){return Array.prototype.slice.call(t)}function m(t){return t.href?t:c("a",t)}function g(e,t){return 1===arguments.length?function(t){return g(e,t)}:decodeURIComponent(t.getAttribute("href").split("?")[0])===decodeURIComponent("#"+e)}var v=function(){function n(t){var e;(o(this,n),t)&&(this.chapter=(e=p(t,"div > ul > li"),c("p",e)),this.hyperlink=m(t))}return l(n,[{key:"toJSON",value:function(){if(this.hyperlink)return{name:this.hyperlink.innerText,href:this.hyperlink.getAttribute("href"),chapterName:this.chapter&&this.chapter.innerText||""}}}]),n}();var x={container:function(){return'<div class="'+d+'"></div>'},inner:function(t,e){return[t.prev&&'\n <div class="pagination-item pagination-item--previous">\n <a href="'+t.prev.href+'">\n <div class="pagination-item-label">\n <svg class="icon" width="10" height="16" viewBox="0 0 10 16" xmlns="http://www.w3.org/2000/svg">\n <polyline fill="none" vector-effect="non-scaling-stroke" points="8,2 2,8 8,14"/>\n </svg>\n <span>'+e.previousText+'</span>\n </div>\n <div class="pagination-item-title">'+t.prev.name+"</div>\n ",t.prev&&e.crossChapterText&&'<div class="pagination-item-subtitle">'+t.prev.chapterName+"</div>",t.prev&&"</a>\n </div>\n ",t.next&&'\n <div class="pagination-item pagination-item--next">\n <a href="'+t.next.href+'">\n <div class="pagination-item-label">\n <span>'+e.nextText+'</span>\n <svg width="10" height="16" viewBox="0 0 10 16" xmlns="http://www.w3.org/2000/svg">\n <polyline fill="none" vector-effect="non-scaling-stroke" points="2,2 8,8 2,14"/>\n </svg>\n </div>\n <div class="pagination-item-title">'+t.next.name+"</div>\n ",t.next&&e.crossChapterText&&'<div class="pagination-item-subtitle">'+t.next.chapterName+"</div>",t.next&&"</a>\n </div>\n "].filter(Boolean).join("")}};window.$docsify=window.$docsify||{},window.$docsify.plugins=[function(t,e){var n=u({},f,e.config.pagination||{});function i(){var t=c("."+d);t&&(t.innerHTML=x.inner(function(t,e){try{var n=t.route.path,i=h(c.all(".sidebar li a")).filter(function(t){return!s(t,".section-link")}),a=i.find(g(n)),r=h((p(a,"ul")||{}).children).filter(function(t){return"LI"===t.tagName.toUpperCase()}),o=e?i.findIndex(g(n)):r.findIndex(function(t){var e=m(t);return e&&g(n,e)}),l=e?i:r;return{prev:new v(l[o-1]).toJSON(),next:new v(l[o+1]).toJSON()}}catch(t){return{}}}(e,n.crossChapter),n))}t.afterEach(function(t){return t+x.container()}),t.doneEach(function(){return i()})}].concat(window.$docsify.plugins||[])});
\ No newline at end of file
此差异已折叠。
此差异已折叠。
/*
* JavaScript MD5
* https://github.com/blueimp/JavaScript-MD5
*
* Copyright 2011, Sebastian Tschan
* https://blueimp.net
*
* Licensed under the MIT license:
* https://opensource.org/licenses/MIT
*
* Based on
* A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
* Digest Algorithm, as defined in RFC 1321.
* Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
* Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
* Distributed under the BSD License
* See http://pajhome.org.uk/crypt/md5 for more info.
*/
/* global define */
/* eslint-disable strict */
;(function($) {
'use strict'
/**
* Add integers, wrapping at 2^32.
* This uses 16-bit operations internally to work around bugs in interpreters.
*
* @param {number} x First integer
* @param {number} y Second integer
* @returns {number} Sum
*/
function safeAdd(x, y) {
var lsw = (x & 0xffff) + (y & 0xffff)
var msw = (x >> 16) + (y >> 16) + (lsw >> 16)
return (msw << 16) | (lsw & 0xffff)
}
/**
* Bitwise rotate a 32-bit number to the left.
*
* @param {number} num 32-bit number
* @param {number} cnt Rotation count
* @returns {number} Rotated number
*/
function bitRotateLeft(num, cnt) {
return (num << cnt) | (num >>> (32 - cnt))
}
/**
* Basic operation the algorithm uses.
*
* @param {number} q q
* @param {number} a a
* @param {number} b b
* @param {number} x x
* @param {number} s s
* @param {number} t t
* @returns {number} Result
*/
function md5cmn(q, a, b, x, s, t) {
return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b)
}
/**
* Basic operation the algorithm uses.
*
* @param {number} a a
* @param {number} b b
* @param {number} c c
* @param {number} d d
* @param {number} x x
* @param {number} s s
* @param {number} t t
* @returns {number} Result
*/
function md5ff(a, b, c, d, x, s, t) {
return md5cmn((b & c) | (~b & d), a, b, x, s, t)
}
/**
* Basic operation the algorithm uses.
*
* @param {number} a a
* @param {number} b b
* @param {number} c c
* @param {number} d d
* @param {number} x x
* @param {number} s s
* @param {number} t t
* @returns {number} Result
*/
function md5gg(a, b, c, d, x, s, t) {
return md5cmn((b & d) | (c & ~d), a, b, x, s, t)
}
/**
* Basic operation the algorithm uses.
*
* @param {number} a a
* @param {number} b b
* @param {number} c c
* @param {number} d d
* @param {number} x x
* @param {number} s s
* @param {number} t t
* @returns {number} Result
*/
function md5hh(a, b, c, d, x, s, t) {
return md5cmn(b ^ c ^ d, a, b, x, s, t)
}
/**
* Basic operation the algorithm uses.
*
* @param {number} a a
* @param {number} b b
* @param {number} c c
* @param {number} d d
* @param {number} x x
* @param {number} s s
* @param {number} t t
* @returns {number} Result
*/
function md5ii(a, b, c, d, x, s, t) {
return md5cmn(c ^ (b | ~d), a, b, x, s, t)
}
/**
* Calculate the MD5 of an array of little-endian words, and a bit length.
*
* @param {Array} x Array of little-endian words
* @param {number} len Bit length
* @returns {Array<number>} MD5 Array
*/
function binlMD5(x, len) {
/* append padding */
x[len >> 5] |= 0x80 << len % 32
x[(((len + 64) >>> 9) << 4) + 14] = len
var i
var olda
var oldb
var oldc
var oldd
var a = 1732584193
var b = -271733879
var c = -1732584194
var d = 271733878
for (i = 0; i < x.length; i += 16) {
olda = a
oldb = b
oldc = c
oldd = d
a = md5ff(a, b, c, d, x[i], 7, -680876936)
d = md5ff(d, a, b, c, x[i + 1], 12, -389564586)
c = md5ff(c, d, a, b, x[i + 2], 17, 606105819)
b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330)
a = md5ff(a, b, c, d, x[i + 4], 7, -176418897)
d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426)
c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341)
b = md5ff(b, c, d, a, x[i + 7], 22, -45705983)
a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416)
d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417)
c = md5ff(c, d, a, b, x[i + 10], 17, -42063)
b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162)
a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682)
d = md5ff(d, a, b, c, x[i + 13], 12, -40341101)
c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290)
b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329)
a = md5gg(a, b, c, d, x[i + 1], 5, -165796510)
d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632)
c = md5gg(c, d, a, b, x[i + 11], 14, 643717713)
b = md5gg(b, c, d, a, x[i], 20, -373897302)
a = md5gg(a, b, c, d, x[i + 5], 5, -701558691)
d = md5gg(d, a, b, c, x[i + 10], 9, 38016083)
c = md5gg(c, d, a, b, x[i + 15], 14, -660478335)
b = md5gg(b, c, d, a, x[i + 4], 20, -405537848)
a = md5gg(a, b, c, d, x[i + 9], 5, 568446438)
d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690)
c = md5gg(c, d, a, b, x[i + 3], 14, -187363961)
b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501)
a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467)
d = md5gg(d, a, b, c, x[i + 2], 9, -51403784)
c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473)
b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734)
a = md5hh(a, b, c, d, x[i + 5], 4, -378558)
d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463)
c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562)
b = md5hh(b, c, d, a, x[i + 14], 23, -35309556)
a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060)
d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353)
c = md5hh(c, d, a, b, x[i + 7], 16, -155497632)
b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640)
a = md5hh(a, b, c, d, x[i + 13], 4, 681279174)
d = md5hh(d, a, b, c, x[i], 11, -358537222)
c = md5hh(c, d, a, b, x[i + 3], 16, -722521979)
b = md5hh(b, c, d, a, x[i + 6], 23, 76029189)
a = md5hh(a, b, c, d, x[i + 9], 4, -640364487)
d = md5hh(d, a, b, c, x[i + 12], 11, -421815835)
c = md5hh(c, d, a, b, x[i + 15], 16, 530742520)
b = md5hh(b, c, d, a, x[i + 2], 23, -995338651)
a = md5ii(a, b, c, d, x[i], 6, -198630844)
d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415)
c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905)
b = md5ii(b, c, d, a, x[i + 5], 21, -57434055)
a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571)
d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606)
c = md5ii(c, d, a, b, x[i + 10], 15, -1051523)
b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799)
a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359)
d = md5ii(d, a, b, c, x[i + 15], 10, -30611744)
c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380)
b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649)
a = md5ii(a, b, c, d, x[i + 4], 6, -145523070)
d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379)
c = md5ii(c, d, a, b, x[i + 2], 15, 718787259)
b = md5ii(b, c, d, a, x[i + 9], 21, -343485551)
a = safeAdd(a, olda)
b = safeAdd(b, oldb)
c = safeAdd(c, oldc)
d = safeAdd(d, oldd)
}
return [a, b, c, d]
}
/**
* Convert an array of little-endian words to a string
*
* @param {Array<number>} input MD5 Array
* @returns {string} MD5 string
*/
function binl2rstr(input) {
var i
var output = ''
var length32 = input.length * 32
for (i = 0; i < length32; i += 8) {
output += String.fromCharCode((input[i >> 5] >>> i % 32) & 0xff)
}
return output
}
/**
* Convert a raw string to an array of little-endian words
* Characters >255 have their high-byte silently ignored.
*
* @param {string} input Raw input string
* @returns {Array<number>} Array of little-endian words
*/
function rstr2binl(input) {
var i
var output = []
output[(input.length >> 2) - 1] = undefined
for (i = 0; i < output.length; i += 1) {
output[i] = 0
}
var length8 = input.length * 8
for (i = 0; i < length8; i += 8) {
output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << i % 32
}
return output
}
/**
* Calculate the MD5 of a raw string
*
* @param {string} s Input string
* @returns {string} Raw MD5 string
*/
function rstrMD5(s) {
return binl2rstr(binlMD5(rstr2binl(s), s.length * 8))
}
/**
* Calculates the HMAC-MD5 of a key and some data (raw strings)
*
* @param {string} key HMAC key
* @param {string} data Raw input string
* @returns {string} Raw MD5 string
*/
function rstrHMACMD5(key, data) {
var i
var bkey = rstr2binl(key)
var ipad = []
var opad = []
var hash
ipad[15] = opad[15] = undefined
if (bkey.length > 16) {
bkey = binlMD5(bkey, key.length * 8)
}
for (i = 0; i < 16; i += 1) {
ipad[i] = bkey[i] ^ 0x36363636
opad[i] = bkey[i] ^ 0x5c5c5c5c
}
hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8)
return binl2rstr(binlMD5(opad.concat(hash), 512 + 128))
}
/**
* Convert a raw string to a hex string
*
* @param {string} input Raw input string
* @returns {string} Hex encoded string
*/
function rstr2hex(input) {
var hexTab = '0123456789abcdef'
var output = ''
var x
var i
for (i = 0; i < input.length; i += 1) {
x = input.charCodeAt(i)
output += hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f)
}
return output
}
/**
* Encode a string as UTF-8
*
* @param {string} input Input string
* @returns {string} UTF8 string
*/
function str2rstrUTF8(input) {
return unescape(encodeURIComponent(input))
}
/**
* Encodes input string as raw MD5 string
*
* @param {string} s Input string
* @returns {string} Raw MD5 string
*/
function rawMD5(s) {
return rstrMD5(str2rstrUTF8(s))
}
/**
* Encodes input string as Hex encoded string
*
* @param {string} s Input string
* @returns {string} Hex encoded string
*/
function hexMD5(s) {
return rstr2hex(rawMD5(s))
}
/**
* Calculates the raw HMAC-MD5 for the given key and data
*
* @param {string} k HMAC key
* @param {string} d Input string
* @returns {string} Raw MD5 string
*/
function rawHMACMD5(k, d) {
return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d))
}
/**
* Calculates the Hex encoded HMAC-MD5 for the given key and data
*
* @param {string} k HMAC key
* @param {string} d Input string
* @returns {string} Raw MD5 string
*/
function hexHMACMD5(k, d) {
return rstr2hex(rawHMACMD5(k, d))
}
/**
* Calculates MD5 value for a given string.
* If a key is provided, calculates the HMAC-MD5 value.
* Returns a Hex encoded string unless the raw argument is given.
*
* @param {string} string Input string
* @param {string} [key] HMAC key
* @param {boolean} [raw] Raw output switch
* @returns {string} MD5 output
*/
function md5(string, key, raw) {
if (!key) {
if (!raw) {
return hexMD5(string)
}
return rawMD5(string)
}
if (!raw) {
return hexHMACMD5(key, string)
}
return rawHMACMD5(key, string)
}
if (typeof define === 'function' && define.amd) {
define(function() {
return md5
})
} else if (typeof module === 'object' && module.exports) {
module.exports = md5
} else {
$.md5 = md5
}
})(this)
(function(Prism) {
// $ set | grep '^[A-Z][^[:space:]]*=' | cut -d= -f1 | tr '\n' '|'
// + LC_ALL, RANDOM, REPLY, SECONDS.
// + make sure PS1..4 are here as they are not always set,
// - some useless things.
var envVars = '\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b';
var insideString = {
'environment': {
pattern: RegExp("\\$" + envVars),
alias: 'constant'
},
'variable': [
// [0]: Arithmetic Environment
{
pattern: /\$?\(\([\s\S]+?\)\)/,
greedy: true,
inside: {
// If there is a $ sign at the beginning highlight $(( and )) as variable
'variable': [
{
pattern: /(^\$\(\([\s\S]+)\)\)/,
lookbehind: true
},
/^\$\(\(/
],
'number': /\b0x[\dA-Fa-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:[Ee]-?\d+)?/,
// Operators according to https://www.gnu.org/software/bash/manual/bashref.html#Shell-Arithmetic
'operator': /--?|-=|\+\+?|\+=|!=?|~|\*\*?|\*=|\/=?|%=?|<<=?|>>=?|<=?|>=?|==?|&&?|&=|\^=?|\|\|?|\|=|\?|:/,
// If there is no $ sign at the beginning highlight (( and )) as punctuation
'punctuation': /\(\(?|\)\)?|,|;/
}
},
// [1]: Command Substitution
{
pattern: /\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,
greedy: true,
inside: {
'variable': /^\$\(|^`|\)$|`$/
}
},
// [2]: Brace expansion
{
pattern: /\$\{[^}]+\}/,
greedy: true,
inside: {
'operator': /:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,
'punctuation': /[\[\]]/,
'environment': {
pattern: RegExp("(\\{)" + envVars),
lookbehind: true,
alias: 'constant'
}
}
},
/\$(?:\w+|[#?*!@$])/
],
// Escape sequences from echo and printf's manuals, and escaped quotes.
'entity': /\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|x[0-9a-fA-F]{1,2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})/
};
Prism.languages.bash = {
'shebang': {
pattern: /^#!\s*\/.*/,
alias: 'important'
},
'comment': {
pattern: /(^|[^"{\\$])#.*/,
lookbehind: true
},
'function-name': [
// a) function foo {
// b) foo() {
// c) function foo() {
// but not “foo {”
{
// a) and c)
pattern: /(\bfunction\s+)\w+(?=(?:\s*\(?:\s*\))?\s*\{)/,
lookbehind: true,
alias: 'function'
},
{
// b)
pattern: /\b\w+(?=\s*\(\s*\)\s*\{)/,
alias: 'function'
}
],
// Highlight variable names as variables in for and select beginnings.
'for-or-select': {
pattern: /(\b(?:for|select)\s+)\w+(?=\s+in\s)/,
alias: 'variable',
lookbehind: true
},
// Highlight variable names as variables in the left-hand part
// of assignments (“=” and “+=”).
'assign-left': {
pattern: /(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,
inside: {
'environment': {
pattern: RegExp("(^|[\\s;|&]|[<>]\\()" + envVars),
lookbehind: true,
alias: 'constant'
}
},
alias: 'variable',
lookbehind: true
},
'string': [
// Support for Here-documents https://en.wikipedia.org/wiki/Here_document
{
pattern: /((?:^|[^<])<<-?\s*)(\w+?)\s*(?:\r?\n|\r)(?:[\s\S])*?(?:\r?\n|\r)\2/,
lookbehind: true,
greedy: true,
inside: insideString
},
// Here-document with quotes around the tag
// → No expansion (so no “inside”).
{
pattern: /((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s*(?:\r?\n|\r)(?:[\s\S])*?(?:\r?\n|\r)\3/,
lookbehind: true,
greedy: true
},
// “Normal” string
{
pattern: /(["'])(?:\\[\s\S]|\$\([^)]+\)|`[^`]+`|(?!\1)[^\\])*\1/,
greedy: true,
inside: insideString
}
],
'environment': {
pattern: RegExp("\\$?" + envVars),
alias: 'constant'
},
'variable': insideString.variable,
'function': {
pattern: /(^|[\s;|&]|[<>]\()(?:add|apropos|apt|aptitude|apt-cache|apt-get|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,
lookbehind: true
},
'keyword': {
pattern: /(^|[\s;|&]|[<>]\()(?:if|then|else|elif|fi|for|while|in|case|esac|function|select|do|done|until)(?=$|[)\s;|&])/,
lookbehind: true
},
// https://www.gnu.org/software/bash/manual/html_node/Shell-Builtin-Commands.html
'builtin': {
pattern: /(^|[\s;|&]|[<>]\()(?:\.|:|break|cd|continue|eval|exec|exit|export|getopts|hash|pwd|readonly|return|shift|test|times|trap|umask|unset|alias|bind|builtin|caller|command|declare|echo|enable|help|let|local|logout|mapfile|printf|read|readarray|source|type|typeset|ulimit|unalias|set|shopt)(?=$|[)\s;|&])/,
lookbehind: true,
// Alias added to make those easier to distinguish from strings.
alias: 'class-name'
},
'boolean': {
pattern: /(^|[\s;|&]|[<>]\()(?:true|false)(?=$|[)\s;|&])/,
lookbehind: true
},
'file-descriptor': {
pattern: /\B&\d\b/,
alias: 'important'
},
'operator': {
// Lots of redirections here, but not just that.
pattern: /\d?<>|>\||\+=|==?|!=?|=~|<<[<-]?|[&\d]?>>|\d?[<>]&?|&[>&]?|\|[&|]?|<=?|>=?/,
inside: {
'file-descriptor': {
pattern: /^\d/,
alias: 'important'
}
}
},
'punctuation': /\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,
'number': {
pattern: /(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,
lookbehind: true
}
};
/* Patterns in command substitution. */
var toBeCopied = [
'comment',
'function-name',
'for-or-select',
'assign-left',
'string',
'environment',
'function',
'keyword',
'builtin',
'boolean',
'file-descriptor',
'operator',
'punctuation',
'number'
];
var inside = insideString.variable[1].inside;
for(var i = 0; i < toBeCopied.length; i++) {
inside[toBeCopied[i]] = Prism.languages.bash[toBeCopied[i]];
}
Prism.languages.shell = Prism.languages.bash;
})(Prism);
!function(e){var t=/\b(?:abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|exports|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|module|native|new|null|open|opens|package|private|protected|provides|public|requires|return|short|static|strictfp|super|switch|synchronized|this|throw|throws|to|transient|transitive|try|uses|var|void|volatile|while|with|yield)\b/,a=/\b[A-Z](?:\w*[a-z]\w*)?\b/;e.languages.java=e.languages.extend("clike",{"class-name":[a,/\b[A-Z]\w*(?=\s+\w+\s*[;,=())])/],keyword:t,function:[e.languages.clike.function,{pattern:/(\:\:)[a-z_]\w*/,lookbehind:!0}],number:/\b0b[01][01_]*L?\b|\b0x[\da-f_]*\.?[\da-f_p+-]+\b|(?:\b\d[\d_]*\.?[\d_]*|\B\.\d[\d_]*)(?:e[+-]?\d[\d_]*)?[dfl]?/i,operator:{pattern:/(^|[^.])(?:<<=?|>>>?=?|->|--|\+\+|&&|\|\||::|[?:~]|[-+*/%&|^!=<>]=?)/m,lookbehind:!0}}),e.languages.insertBefore("java","string",{"triple-quoted-string":{pattern:/"""[ \t]*[\r\n](?:(?:"|"")?(?:\\.|[^"\\]))*"""/,greedy:!0,alias:"string"}}),e.languages.insertBefore("java","class-name",{annotation:{alias:"punctuation",pattern:/(^|[^.])@\w+/,lookbehind:!0},namespace:{pattern:/(\b(?:exports|import(?:\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\s+)[a-z]\w*(?:\.[a-z]\w*)+/,lookbehind:!0,inside:{punctuation:/\./}},generics:{pattern:/<(?:[\w\s,.&?]|<(?:[\w\s,.&?]|<(?:[\w\s,.&?]|<[\w\s,.&?]*>)*>)*>)*>/,inside:{"class-name":a,keyword:t,punctuation:/[<>(),.:]/,operator:/[?&|]/}}})}(Prism);
\ No newline at end of file
(function () {
/*! medium-zoom 1.0.4 | MIT License | https://github.com/francoischalifour/medium-zoom */var _extends=Object.assign||function(a){for(var b,c=1;c<arguments.length;c++){ for(var d in b=arguments[c],b){ Object.prototype.hasOwnProperty.call(b,d)&&(a[d]=b[d]); } }return a},isSupported=function(a){return 'IMG'===a.tagName},isNodeList=function(a){return NodeList.prototype.isPrototypeOf(a)},isNode=function(a){return a&&1===a.nodeType},isSvg=function(a){var b=a.currentSrc||a.src;return '.svg'===b.substr(-4).toLowerCase()},getImagesFromSelector=function(a){try{return Array.isArray(a)?a.filter(isSupported):isNodeList(a)?[].slice.call(a).filter(isSupported):isNode(a)?[a].filter(isSupported):'string'==typeof a?[].slice.call(document.querySelectorAll(a)).filter(isSupported):[]}catch(a){throw new TypeError('The provided selector is invalid.\nExpects a CSS selector, a Node element, a NodeList or an array.\nSee: https://github.com/francoischalifour/medium-zoom')}},createOverlay=function(a){var b=document.createElement('div');return b.classList.add('medium-zoom-overlay'),b.style.background=a,b},cloneTarget=function(a){var b=a.getBoundingClientRect(),c=b.top,d=b.left,e=b.width,f=b.height,g=a.cloneNode(),h=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,i=window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft||0;return g.removeAttribute('id'),g.style.position='absolute',g.style.top=c+h+'px',g.style.left=d+i+'px',g.style.width=e+'px',g.style.height=f+'px',g.style.transform='',g},createCustomEvent=function(a,b){var c=_extends({bubbles:!1,cancelable:!1,detail:void 0},b);if('function'==typeof window.CustomEvent){ return new CustomEvent(a,c); }var d=document.createEvent('CustomEvent');return d.initCustomEvent(a,c.bubbles,c.cancelable,c.detail),d},mediumZoom=function a(b){var c=1<arguments.length&&arguments[1]!==void 0?arguments[1]:{},d=window.Promise||function(a){function b(){}a(b,b);},e=function(a){var b=a.target;return b===x?void n():void(-1===r.indexOf(b)||o({target:b}))},f=function(){if(!t&&w.original){var a=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;Math.abs(u-a)>v.scrollOffset&&setTimeout(n,150);}},g=function(){var a=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},b=a;if(a.background&&(x.style.background=a.background),a.container&&a.container instanceof Object&&(b.container=_extends({},v.container,a.container)),a.template){var c=isNode(a.template)?a.template:document.querySelector(a.template);b.template=c;}return v=_extends({},v,b),r.forEach(function(a){a.dispatchEvent(createCustomEvent('medium-zoom:update',{detail:{zoom:y}}));}),y},h=function(){var b=0<arguments.length&&arguments[0]!==void 0?arguments[0]:{};return a(_extends({},v,b))},i=function(){
var arguments$1 = arguments;
for(var a=arguments.length,b=Array(a),c=0;c<a;c++){ b[c]=arguments$1[c]; }var d=b.reduce(function(a,b){return [].concat(a,getImagesFromSelector(b))},[]);return d.filter(function(a){return -1===r.indexOf(a)}).forEach(function(a){r.push(a),a.classList.add('medium-zoom-image');}),s.forEach(function(a){var b=a.type,c=a.listener,e=a.options;d.forEach(function(a){a.addEventListener(b,c,e);});}),y},j=function(){
var arguments$1 = arguments;
for(var a=arguments.length,b=Array(a),c=0;c<a;c++){ b[c]=arguments$1[c]; }w.zoomed&&n();var d=0<b.length?b.reduce(function(a,b){return [].concat(a,getImagesFromSelector(b))},[]):r;return d.forEach(function(a){a.classList.remove('medium-zoom-image'),a.dispatchEvent(createCustomEvent('medium-zoom:detach',{detail:{zoom:y}}));}),r=r.filter(function(a){return -1===d.indexOf(a)}),y},k=function(a,b){var c=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{};return r.forEach(function(d){d.addEventListener('medium-zoom:'+a,b,c);}),s.push({type:'medium-zoom:'+a,listener:b,options:c}),y},l=function(a,b){var c=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{};return r.forEach(function(d){d.removeEventListener('medium-zoom:'+a,b,c);}),s=s.filter(function(c){return c.type!=='medium-zoom:'+a||c.listener.toString()!==b.toString()}),y},m=function(){var a=0<arguments.length&&arguments[0]!==void 0?arguments[0]:{},b=a.target,c=function(){var a=Math.min,b={width:document.documentElement.clientWidth,height:document.documentElement.clientHeight,left:0,top:0,right:0,bottom:0},c=void 0,d=void 0;if(v.container){ if(v.container instanceof Object){ b=_extends({},b,v.container),c=b.width-b.left-b.right-2*v.margin,d=b.height-b.top-b.bottom-2*v.margin; }else{var e=isNode(v.container)?v.container:document.querySelector(v.container),f=e.getBoundingClientRect(),g=f.width,h=f.height,i=f.left,j=f.top;b=_extends({},b,{width:g,height:h,left:i,top:j});} }c=c||b.width-2*v.margin,d=d||b.height-2*v.margin;var k=w.zoomedHd||w.original,l=isSvg(k)?c:k.naturalWidth||c,m=isSvg(k)?d:k.naturalHeight||d,n=k.getBoundingClientRect(),o=n.top,p=n.left,q=n.width,r=n.height,s=a(l,c)/q,t=a(m,d)/r,u=a(s,t),x=(-p+(c-q)/2+v.margin+b.left)/u,y=(-o+(d-r)/2+v.margin+b.top)/u,z='scale('+u+') translate3d('+x+'px, '+y+'px, 0)';w.zoomed.style.transform=z,w.zoomedHd&&(w.zoomedHd.style.transform=z);};return new d(function(a){if(b&&-1===r.indexOf(b)){ return void a(y); }if(w.zoomed){ return void a(y); }if(b){ w.original=b; }else if(0<r.length){var d=r;w.original=d[0];}else { return void a(y); }if(w.original.dispatchEvent(createCustomEvent('medium-zoom:open',{detail:{zoom:y}})),u=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,t=!0,w.zoomed=cloneTarget(w.original),document.body.appendChild(x),v.template){var e=isNode(v.template)?v.template:document.querySelector(v.template);w.template=document.createElement('div'),w.template.appendChild(e.content.cloneNode(!0)),document.body.appendChild(w.template);}if(document.body.appendChild(w.zoomed),window.requestAnimationFrame(function(){document.body.classList.add('medium-zoom--opened');}),w.original.classList.add('medium-zoom-image--hidden'),w.zoomed.classList.add('medium-zoom-image--opened'),w.zoomed.addEventListener('click',n),w.zoomed.addEventListener('transitionend',function b(){t=!1,w.zoomed.removeEventListener('transitionend',b),w.original.dispatchEvent(createCustomEvent('medium-zoom:opened',{detail:{zoom:y}})),a(y);}),w.original.getAttribute('data-zoom-src')){w.zoomedHd=w.zoomed.cloneNode(),w.zoomedHd.removeAttribute('srcset'),w.zoomedHd.removeAttribute('sizes'),w.zoomedHd.src=w.zoomed.getAttribute('data-zoom-src'),w.zoomedHd.onerror=function(){clearInterval(f),console.warn('Unable to reach the zoom image target '+w.zoomedHd.src),w.zoomedHd=null,c();};var f=setInterval(function(){w.zoomedHd.complete&&(clearInterval(f),w.zoomedHd.classList.add('medium-zoom-image--opened'),w.zoomedHd.addEventListener('click',n),document.body.appendChild(w.zoomedHd),c());},10);}else if(w.original.hasAttribute('srcset')){w.zoomedHd=w.zoomed.cloneNode(),w.zoomedHd.removeAttribute('sizes');var g=w.zoomedHd.addEventListener('load',function(){w.zoomedHd.removeEventListener('load',g),w.zoomedHd.classList.add('medium-zoom-image--opened'),w.zoomedHd.addEventListener('click',n),document.body.appendChild(w.zoomedHd),c();});}else { c(); }})},n=function(){return new d(function(a){if(t||!w.original){ return void a(y); }t=!0,document.body.classList.remove('medium-zoom--opened'),w.zoomed.style.transform='',w.zoomedHd&&(w.zoomedHd.style.transform=''),w.template&&(w.template.style.transition='opacity 150ms',w.template.style.opacity=0),w.original.dispatchEvent(createCustomEvent('medium-zoom:close',{detail:{zoom:y}})),w.zoomed.addEventListener('transitionend',function b(){w.original.classList.remove('medium-zoom-image--hidden'),document.body.removeChild(w.zoomed),w.zoomedHd&&document.body.removeChild(w.zoomedHd),document.body.removeChild(x),w.zoomed.classList.remove('medium-zoom-image--opened'),w.template&&document.body.removeChild(w.template),t=!1,w.zoomed.removeEventListener('transitionend',b),w.original.dispatchEvent(createCustomEvent('medium-zoom:closed',{detail:{zoom:y}})),w.original=null,w.zoomed=null,w.zoomedHd=null,w.template=null,a(y);});})},o=function(){var a=0<arguments.length&&arguments[0]!==void 0?arguments[0]:{},b=a.target;return w.original?n():m({target:b})},p=function(){return v},q=function(){return r},r=[],s=[],t=!1,u=0,v=c,w={original:null,zoomed:null,zoomedHd:null,template:null};'[object Object]'===Object.prototype.toString.call(b)?v=b:(b||'string'==typeof b)&&i(b),v=_extends({margin:0,background:'#fff',scrollOffset:40,container:null,template:null},v);var x=createOverlay(v.background);document.addEventListener('click',e),document.addEventListener('keyup',function(a){27===(a.keyCode||a.which)&&n();}),document.addEventListener('scroll',f),window.addEventListener('resize',n);var y={open:m,close:n,toggle:o,update:g,clone:h,attach:i,detach:j,on:k,off:l,getOptions:p,getImages:q,getZoomedImage:function(){return w.original}};return y};function styleInject(a,b){void 0===b&&(b={});var c=b.insertAt;if(a&&'undefined'!=typeof document){var d=document.head||document.getElementsByTagName('head')[0],e=document.createElement('style');e.type='text/css','top'===c?d.firstChild?d.insertBefore(e,d.firstChild):d.appendChild(e):d.appendChild(e),e.styleSheet?e.styleSheet.cssText=a:e.appendChild(document.createTextNode(a));}}styleInject('.medium-zoom-overlay{position:fixed;top:0;right:0;bottom:0;left:0;opacity:0;transition:opacity .3s;will-change:opacity}.medium-zoom--opened .medium-zoom-overlay{cursor:pointer;cursor:zoom-out;opacity:1}.medium-zoom-image{cursor:pointer;cursor:zoom-in;transition:transform .3s cubic-bezier(.2,0,.2,1)}.medium-zoom-image--hidden{visibility:hidden}.medium-zoom-image--opened{position:relative;cursor:pointer;cursor:zoom-out;will-change:transform}');
var matchesSelector = Element.prototype.matches || Element.prototype.webkitMatchesSelector || Element.prototype.msMatchesSelector;
function install(hook) {
var zoom;
hook.doneEach(function (_) {
var elms = Array.apply(null, document.querySelectorAll('.markdown-section img:not(.emoji):not([data-no-zoom])'));
elms = elms.filter(function (elm) { return matchesSelector.call(elm, 'a img') === false; });
if (zoom) {
zoom.detach();
}
zoom = mediumZoom(elms);
});
}
$docsify.plugins = [].concat(install, $docsify.plugins);
}());
# Java 软件工程师-求职简历
## 个人信息
- 姓名:谢飞机
- 性别:男
- 工作年限:2年
- 学历:本科
- 专业:软件工程
- 院校:长春理工大学
- 联系电话:1520102****
- 通信邮箱:xiefeiji@qq.com
## 求职意向
**目标职能**:Java软件开发工程师
<br/>**目标地点**:长春
<br/>**工作性质**:全职
<br/>**到岗时间**:2周以内
## 技术栈
1. **技能** `Java``Mysql``Redis``Netty``Vue.js``Jquery`
2. **框架** `Spring``SpringMvc``Mybatis``SpringBoot``JFinal`
3. **组件** `Dubbo``ZK``RabbitMQ`
4. **工具** `IDEA``Maven``GIT``postman`
5. **部署** `Linux``Tomcat`
深入学习和使用 *Java* 语言以及相应的服务技能,对部分核心组件以及源码有过了解,其中在 *Netty* 服务设计上有丰富的经验。并且具备面向对象编程思想,可以有效合理的设计代码分层并快速实现功能。
## 工作经验
- 2018年8月 - 至今,长春虫谷科技信息有限公司
- 职位:java后端工程师
- 职责:按照技术经理的功能文档,参与设计并实现功能交付
- 2017年6月 - 2018年7月,长春走码科技有限公司
- 职位:实习开发工程师
- 职责:维护项目系统文档、梳理组织会议、编写简单功能服务
## 项目经验
### 项目一、营销抽奖系统
- 开发环境:Idea+Mac+JDK1.8+Maven3.0+Mysql5.7+Redis+Dubbo+Tomcat7.0+Git
- 系统架构:SSM,三层架构,分布式部署
- 项目描述:这是一个需要整合到目前电商系统中的一个服务模块,主要用于营销抽奖,对用户促活拉动消费。在抽奖服务中使用到了核心模块功能有;防刷、黑白名单、秒杀、发货等。系统在秒杀场景中进行多次优化,目前压测指标为QPS=1500,满足业务发展诉求。
- 工作职责:
1. 负责开发系统服务中的对外提供的统一标准接口,并与外部联调。
2. ERP运营后台开发,针对产品功能不断完善运营操作平台。以及相应的活动配置校验,保证每一个活动的准确性。
3. 参与优化秒杀功能逻辑的设计和开发,对分布式场景下的自动分配库存锁有丰富经验。
### 项目二、数据采集服务
- 开发环境:Idea+JDK1.8+Dubbo+Netty+Mysql+Git+Tomcat7.0
- 系统架构:Spring+Netty+Mybatis+JavaFX,异步分层事务驱动框架
- 项目描述:采集机械设备客户端数据,定时分段回传消息。用于系统的对机房信息监测;温度、湿度、指标、以及系统各项信息。最终对数据进行加工展示到云平台。
- 工作职责:
1. 设计基于Netty编写网络通信模块,对消息协议定制和封装编码解码器。以及对数据传输过程中的业务流程处理,例如;半包年包、弱网分段传输、数据流切块等
2. 开发采集后的数据通过 RPC 框架回传到服务端,并组最终的逻辑处理。
3. 编写工具类以及接口文档的更新,统一维护3个大区域的对接工作。
## 个人评价
1. 有较强的的学习和解决问题的能力,善于通过一些系统问题总结分析根本原因,热爱于技术挑战。
2. 在工作中可以独立承担相关职责,可以较强承受工作压力并愿意不断的提升自我。
3. 性格开朗、积极乐观,可以精神饱满的投入到工作中。有着良好的团队协作能力和责任心,对工作有强烈的使命感。
4. 想要长期从事软件开发行业,希望通过自己不断的努力来提升技术能力,并完成个人的职业发展计划。
\ No newline at end of file
## 😄 个人信息
**姓名**:谢飞机
**性别**:男
**学历**:本科
**专业**:软件工程
**院校**:吉林大学
**联系电话**:1520120****
**通信邮箱**:xiefeiji@qq.com
# Java 软件工程师-求职简历
## 个人信息
- 姓名:谢飞机
- 性别:男
- 工作年限:2年
- 学历:本科
- 专业:软件工程
- 院校:长春理工大学
- 联系电话:1520102****
- 通信邮箱:xiefeiji@qq.com
## 求职意向
**目标职能**:Java软件开发工程师
<br/>**目标地点**:长春
<br/>**工作性质**:全职
<br/>**到岗时间**:2周以内
## 技术栈
1. **技能** `Java``Mysql``Redis``Netty``Vue.js``Jquery`
2. **框架** `Spring``SpringMvc``Mybatis``SpringBoot``JFinal`
3. **组件** `Dubbo``ZK``RabbitMQ`
4. **工具** `IDEA``Maven``GIT``postman`
5. **部署** `Linux``Tomcat`
深入学习和使用 *Java* 语言以及相应的服务技能,对部分核心组件以及源码有过了解,其中在 *Netty* 服务设计上有丰富的经验。并且具备面向对象编程思想,可以有效合理的设计代码分层并快速实现功能。
## 工作经验
- 2018年8月 - 至今,长春虫谷科技信息有限公司
- 职位:java后端工程师
- 职责:按照技术经理的功能文档,参与设计并实现功能交付
- 2017年6月 - 2018年7月,长春走码科技有限公司
- 职位:实习开发工程师
- 职责:维护项目系统文档、梳理组织会议、编写简单功能服务
## 项目经验
### 项目一、营销抽奖系统
- 开发环境:Idea+Mac+JDK1.8+Maven3.0+Mysql5.7+Redis+Dubbo+Tomcat7.0+Git
- 系统架构:SSM,三层架构,分布式部署
- 项目描述:这是一个需要整合到目前电商系统中的一个服务模块,主要用于营销抽奖,对用户促活拉动消费。在抽奖服务中使用到了核心模块功能有;防刷、黑白名单、秒杀、发货等。系统在秒杀场景中进行多次优化,目前压测指标为QPS=1500,满足业务发展诉求。
- 工作职责:
1. 负责开发系统服务中的对外提供的统一标准接口,并与外部联调。
2. ERP运营后台开发,针对产品功能不断完善运营操作平台。以及相应的活动配置校验,保证每一个活动的准确性。
3. 参与优化秒杀功能逻辑的设计和开发,对分布式场景下的自动分配库存锁有丰富经验。
### 项目二、数据采集服务
- 开发环境:Idea+JDK1.8+Dubbo+Netty+Mysql+Git+Tomcat7.0
- 系统架构:Spring+Netty+Mybatis+JavaFX,异步分层事务驱动框架
- 项目描述:采集机械设备客户端数据,定时分段回传消息。用于系统的对机房信息监测;温度、湿度、指标、以及系统各项信息。最终对数据进行加工展示到云平台。
- 工作职责:
1. 设计基于Netty编写网络通信模块,对消息协议定制和封装编码解码器。以及对数据传输过程中的业务流程处理,例如;半包年包、弱网分段传输、数据流切块等
2. 开发采集后的数据通过 RPC 框架回传到服务端,并组最终的逻辑处理。
3. 编写工具类以及接口文档的更新,统一维护3个大区域的对接工作。
## 个人评价
1. 有较强的的学习和解决问题的能力,善于通过一些系统问题总结分析根本原因,热爱于技术挑战。
2. 在工作中可以独立承担相关职责,可以较强承受工作压力并愿意不断的提升自我。
3. 性格开朗、积极乐观,可以精神饱满的投入到工作中。有着良好的团队协作能力和责任心,对工作有强烈的使命感。
4. 想要长期从事软件开发行业,希望通过自己不断的努力来提升技术能力,并完成个人的职业发展计划。
\ No newline at end of file
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>CodeGuide | 程序员编码指南</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="description" content="Description">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<link rel="stylesheet" href="//itstack.org/assets/css/vue.css">
<link rel="stylesheet" href="//itstack.org/assets/css/gitalk.css">
<script>
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?b3354307876925c625a24bb138d2177c";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script>
</head>
<body>
<div id="app"></div>
<script>
var gitalkConfig = {
clientID: '4a24b04c6f616216335e',
clientSecret: '39d764afbe74c8e0176f71ae9396734c32102a1c',
repo: 'CodeGuide',
owner: 'fuzhengwei',
admin: ["fuzhengwei"],
distractionFreeMode: false
};
window.$docsify = {
name: 'CodeGuide',
repo: 'https://github.com/fuzhengwei/CodeGuide',
auto2top: true,
coverpage: true,
loadSidebar: true,
maxLevel: 4,
subMaxLevel: 2,
search: {
paths: 'auto',
placeholder: '🔍 Type to search ',
noData: '😞 No Results! ',
depth: 6
},
pagination: {
previousText: 'PREVIOUS',
nextText: 'NEXT',
crossChapter: true
},
plugins: [
function (hook, vm) {
hook.doneEach(function() {
var label, domObj, main, divEle, gitalk;
label = md5(decodeURI(vm.route.path.split("/").pop()));
domObj = Docsify.dom;
main = domObj.getNode("#main");
Array.apply(
null,
document.querySelectorAll("div.gitalk-container")
).forEach(function(ele) {
ele.remove();
});
divEle = domObj.create("div");
divEle.id = "gitalk-container-" + label;
divEle.className = "gitalk-container";
divEle.style = "width: " + main.clientWidth + "px; margin: 0 auto 20px;";
domObj.appendTo(domObj.find(".content"), divEle);
gitalk = new Gitalk(
Object.assign(gitalkConfig, { id: !label ? "home" : label })
);
gitalk.render("gitalk-container-" + label);
});
}
]
}
</script>
<script src="//itstack.org/assets/js/md5.js"></script>
<script src="//itstack.org/assets/js/docsify.min.js"></script>
<script src="//itstack.org/assets/js/gitalk.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/docsify@4/lib/plugins/search.js"></script>
<script src="//itstack.org/assets/js/docsify-pagination.min.js"></script>
<script src="//itstack.org/assets/js/zoom-image.js"></script>
<script src="//itstack.org/assets/js/prism-bash.js"></script>
<script src="//itstack.org/assets/js/prism-java.min.js"></script>
</body>
</html>
1. 写多少行代码,能在毕业找到工作
2. 最开始写代码会有一种不熟练的感觉
3. 兴趣爱好方面,是否会为了一个运行结果,折腾个几天几夜
4. 能给你一份什么样的资料,让你学习起来更有效果
5. 一些我做过的项目列表
6. 学习的阶段{接触了解编程、熟悉工具、大量写代码、框架学习、功能开发、项目开发、(数据结构、算法逻辑、设计模式)、架构阶段}
7. 你可能压根并不知道,你能找一份什么样的工作。找一份多少钱的工作,什么样的工作,外包、传统、国企、外企、互联网?每一个都决定了你将来会走什么样的路,如果走错了,可能要走弯路了就。市场也确实有内卷现象
8. 关于学习资源,博客、GitHub、哔哩哔哩视频
10. 可能是因为爱好,所以并不觉得自己是因为努力而学习编程
11. 大学最好不要浪费太多的时间,去做一些和自己本身成长没关的事情。如果你并不缺那个钱,而且你又希望在自己本专业上找工作,那么类似发传单等兼职,点到为止,了解下赚钱的辛苦就可以了。还是要多学习自己需要的东西
12. 酒香不怕巷子深,放在现在那是骗人的!
13. 做一件事,就把一件事做好!
14. 如果连技术博客都不看,那么几乎你不会被知识触达到。尤其是现在,你越喜欢看什么,越给你推荐什么
15. 找到学习技巧,非常重要!
## 一、前言
1. 什么样的人更适合做程序员,如果你不能把它当成一种乐趣那么你会很痛苦。做程序员只有乐趣和痛苦
## 二、经历
1. 关于我自己的经历,刚毕业那年月薪7k
2. 参加过培训,还怼过老师
## 三、阶段
## 四、目标
## 五、资料
## 六、总结
想深入学习一个字节码框架,听说了javassit、asm、ByteBuddy、cglib啥的,小傅哥帮忙大概介绍下,想入手ByteBuddy咋样。
框架介绍:
1. ASM 是一个 Java 字节码操控框架。它能被用来动态生成类或者增强既有类的功能。ASM 可以直接产生二进制 class 文件,也可以在类被加载入 Java 虚拟机之前动态改变类行为。Java class 被存储在严格格式定义的 .class 文件里,这些类文件拥有足够的元数据来解析类中的所有元素:类名称、方法、属性以及 Java 字节码(指令)。ASM 从类文件中读入信息后,能够改变类行为,分析类信息,甚至能够根据用户要求生成新类。
2. Javassist 是一个开源的分析、编辑和创建Java字节码的类库。是由东京工业大学的数学和计算机科学系的 Shigeru Chiba (千叶 滋)所创建的。它已加入了开放源代码JBoss 应用服务器项目,通过使用Javassist对字节码操作为JBoss实现动态"AOP"框架。
3. Byte Buddy 是一个代码生成和操作库,用于在 Java 应用程序运行时创建和修改 Java 类,而无需编译器的帮助。除了 Java 类库附带的代码生成实用程序外,Byte Buddy 还允许创建任意类,并且不限于实现用于创建运行时代理的接口。此外,Byte Buddy 提供了一种方便的 API,可以使用 Java 代理或在构建过程中手动更改类。2015年10月,Byte Buddy被 Oracle 授予了 Duke’s Choice大奖。该奖项对Byte Buddy的“ Java技术方面的巨大创新 ”表示赞赏。我们为获得此奖项感到非常荣幸,并感谢所有帮助Byte Buddy取得成功的用户以及其他所有人。我们真的很感激!
使用总结:
1. ASM 纯字节码操作,可以结合 IDEA 插件:ASM Bytecode Outline,进行使用。它能把你的普通 Java 代码转换为使用 ASM 操作时,应该做如何的处理。但 ASM 是使用上最复杂也是功能最强的框架,很多其他框架Cglib、Javassist、Byte-buddy 都是基于 ASM 开发的。
2. Javaassit 市面上很多基于 javaagent 实现的非入侵的全链路监控都是使用的此框架完成,因为它的性能稳定,操作简单,功能丰富,既可以使用提供的 API 也可以操作字节码,所以使用起来会更加方便,遇到问题也可以很快的找到解决方案。
3. Byte Buddy 我是非常喜欢这个框架,因为他可以让对字节码的操作简化为像写普通的程序代码一样,非常容易完成一些需求逻辑的实现,并且它还是一个获奖项目!
最后说明:
其实你可以把几款字节码插桩组件都了解下,完成同一个复杂场景的功能,看看各自的实现是否能满足你的需要,之后选取那个最合适你的。
---
小傅哥你好,我想问一下组件类以聚合工程方式引入还是以自定义start方式引入更好呢,个人感觉以jar包方式总改版本号好麻烦啊
1. 通常我们会把非业务逻辑的共性通用问题,抽取成独立的服务开发成各个领域的技术模块,这类的通常会采用中间件的方式开发。如果是Spring直接开发就行了,SpringBoot 则包装成 Starter。
2. 如果是一些项目中用到的需求逻辑,不具备共性问题的提取,本身就是属于项目的一部分,直接以项目模块 Module 的方式聚合即可,这样引入起来也方便,更符合开发使用。
---
小傅哥,程序员应该有一个副业嘛?
时常焦虑,看到一些优秀的程序员 去做小程序,外卖引流,知乎好物 部分做的好的收益都不错,自己本身没有稳定收入副业。 所以被弄得很焦虑。想向傅哥请教一下 如何去分配这个时间,对抗焦虑
提个背景:上大学的时候,很多同学放假了喜欢去做一些兼职、发发传单、洗洗盘子、当当家教,但其实我并不会支持去做这些,因为所有的此类事情与你的自身长期价值积累并不符,只能带来一点社会体验和分支经历。如果你能把这个时间放在属于你未来想做的事上,积累此类知识、经验、阅历,那么将来会给你带来更大的价值,所以我更推荐做长期有价值的事。
关于副业:其实我一直折腾此类事情,包括之前说的接私活、当网课老师、给人家做网站、还有猪八戒网的需求,折腾过后感觉这类内容的副业,需要你有一个稳定且并不小的时间投入,能赚到一点钱,但不太可能长久,因为毕竟目前你仍然需要以工作为主,在一个能满足你成长的土壤中,不断的加强自己的能力。比如你在职场的职位、收入、人脉,这些可能更是你现阶段的目标,不同的人在不同的阶段有不同的选择,但目前对你来说,搞副业,最好只当练手,提升额外的能力,先不要把赚钱看的太重,并从这些折腾的过程中,找到符合自己想做的事情。
拒绝焦虑:向阳而生、逐光而行,减少没必要的内心焦虑,你做的任何一件事将来都会汇聚在一起,慢慢铺自己的地基,不要着急于快。在时间分配上,也不要想着什么都做,人的精力也是有限的,不要给自己压榨的太狠,适当的放松非常有必要。千万记得要慢下来、慢下来、慢下来!
---
用了 spring security ,如果有权限的动态刷新,不想引入缓存这类东西,也不用主动推送,有没有什么好的办法解决已登陆用户的权限修改?
首先:你的场景是有什么限定吗,权限使用过程中的校验可以直接读库不,因为我感觉你这个体量并不大,如果可以读库验证,直接修改库就可以了。
通常:一个权限的变更,需要走审批流程并要求用户退出登录,验证身份,才可以使用新的权限职责,避免因为权限范围扩大,导致之前账号借用等操作风险的发生(不过这个依赖于不同场景的风险级别而决定设计)。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册