diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..d149654 Binary files /dev/null and b/.DS_Store differ diff --git a/123d-design-manual.pdf b/123d-design-manual.pdf new file mode 100644 index 0000000..c06e0ca Binary files /dev/null and b/123d-design-manual.pdf differ diff --git "a/23\347\247\215java\350\256\276\350\256\241\346\250\241\345\274\217.pdf" "b/23\347\247\215java\350\256\276\350\256\241\346\250\241\345\274\217.pdf" deleted file mode 100644 index fb5cb24..0000000 Binary files "a/23\347\247\215java\350\256\276\350\256\241\346\250\241\345\274\217.pdf" and /dev/null differ diff --git "a/40\344\276\213java\347\273\217\345\205\270\347\256\227\346\263\225\347\240\224\347\251\266.pdf" "b/40\344\276\213java\347\273\217\345\205\270\347\256\227\346\263\225\347\240\224\347\251\266.pdf" deleted file mode 100644 index e271f33..0000000 Binary files "a/40\344\276\213java\347\273\217\345\205\270\347\256\227\346\263\225\347\240\224\347\251\266.pdf" and /dev/null differ diff --git a/Conflict-free Replicated Data Types.pdf b/Conflict-free Replicated Data Types.pdf deleted file mode 100644 index 245ae6f..0000000 Binary files a/Conflict-free Replicated Data Types.pdf and /dev/null differ diff --git "a/C\350\257\255\350\250\200\347\250\213\345\272\217\350\256\276\350\256\241.pdf" "b/C\350\257\255\350\250\200\347\250\213\345\272\217\350\256\276\350\256\241.pdf" deleted file mode 100755 index 6d79e23..0000000 Binary files "a/C\350\257\255\350\250\200\347\250\213\345\272\217\350\256\276\350\256\241.pdf" and /dev/null differ diff --git "a/Dapper\345\210\206\345\270\203\345\274\217\350\267\237\350\270\252\347\263\273\347\273\237_Zh.pdf" "b/Dapper\345\210\206\345\270\203\345\274\217\350\267\237\350\270\252\347\263\273\347\273\237_Zh.pdf" deleted file mode 100644 index 4c66dc7..0000000 Binary files "a/Dapper\345\210\206\345\270\203\345\274\217\350\267\237\350\270\252\347\263\273\347\273\237_Zh.pdf" and /dev/null differ diff --git "a/DevOps\345\256\236\350\267\265\346\214\207\345\215\227.pdf" "b/DevOps\345\256\236\350\267\265\346\214\207\345\215\227.pdf" deleted file mode 100644 index 3a8c898..0000000 Binary files "a/DevOps\345\256\236\350\267\265\346\214\207\345\215\227.pdf" and /dev/null differ diff --git "a/Elasticsearch\346\235\203\345\250\201\346\214\207\345\215\227.pdf" "b/Elasticsearch\346\235\203\345\250\201\346\214\207\345\215\227.pdf" deleted file mode 100755 index b873b6a..0000000 Binary files "a/Elasticsearch\346\235\203\345\250\201\346\214\207\345\215\227.pdf" and /dev/null differ diff --git "a/GO\344\270\223\345\256\266\347\274\226\347\250\213.pdf" "b/GO\344\270\223\345\256\266\347\274\226\347\250\213.pdf" deleted file mode 100644 index 0770c5e..0000000 Binary files "a/GO\344\270\223\345\256\266\347\274\226\347\250\213.pdf" and /dev/null differ diff --git "a/Go\350\257\255\350\250\200\345\256\236\346\210\230(\344\270\255\346\226\207\347\211\210).pdf" "b/Go\350\257\255\350\250\200\345\256\236\346\210\230(\344\270\255\346\226\207\347\211\210).pdf" deleted file mode 100644 index 2a90332..0000000 Binary files "a/Go\350\257\255\350\250\200\345\256\236\346\210\230(\344\270\255\346\226\207\347\211\210).pdf" and /dev/null differ diff --git "a/Java\344\270\216\346\250\241\345\274\217(\346\270\205\346\231\260\344\271\246\347\255\276\347\211\210).pdf" "b/Java\344\270\216\346\250\241\345\274\217(\346\270\205\346\231\260\344\271\246\347\255\276\347\211\210).pdf" deleted file mode 100644 index df8e3ab..0000000 Binary files "a/Java\344\270\216\346\250\241\345\274\217(\346\270\205\346\231\260\344\271\246\347\255\276\347\211\210).pdf" and /dev/null differ diff --git "a/Java\345\217\215\345\260\204\346\234\272\345\210\266\346\200\273\347\273\223.pdf" "b/Java\345\217\215\345\260\204\346\234\272\345\210\266\346\200\273\347\273\223.pdf" deleted file mode 100644 index d642ea6..0000000 Binary files "a/Java\345\217\215\345\260\204\346\234\272\345\210\266\346\200\273\347\273\223.pdf" and /dev/null differ diff --git "a/Java\345\244\232\347\272\277\347\250\213\347\274\226\347\250\213\345\256\236\346\210\230\346\214\207\345\215\227+\350\256\276\350\256\241\346\250\241\345\274\217\347\257\207%40www.java1234.com.pdf" "b/Java\345\244\232\347\272\277\347\250\213\347\274\226\347\250\213\345\256\236\346\210\230\346\214\207\345\215\227+\350\256\276\350\256\241\346\250\241\345\274\217\347\257\207%40www.java1234.com.pdf" deleted file mode 100644 index 55326dc..0000000 Binary files "a/Java\345\244\232\347\272\277\347\250\213\347\274\226\347\250\213\345\256\236\346\210\230\346\214\207\345\215\227+\350\256\276\350\256\241\346\250\241\345\274\217\347\257\207%40www.java1234.com.pdf" and /dev/null differ diff --git "a/Linux\351\253\230\346\200\247\350\203\275\346\234\215\345\212\241\345\231\250\347\274\226\347\250\213.pdf" "b/Linux\351\253\230\346\200\247\350\203\275\346\234\215\345\212\241\345\231\250\347\274\226\347\250\213.pdf" deleted file mode 100755 index 37e93ad..0000000 Binary files "a/Linux\351\253\230\346\200\247\350\203\275\346\234\215\345\212\241\345\231\250\347\274\226\347\250\213.pdf" and /dev/null differ diff --git "a/Lucene\345\256\236\346\210\230.pdf" "b/Lucene\345\256\236\346\210\230.pdf" deleted file mode 100644 index a493dc5..0000000 Binary files "a/Lucene\345\256\236\346\210\230.pdf" and /dev/null differ diff --git "a/MongoDB\346\235\203\345\250\201\346\214\207\345\215\227.pdf" "b/MongoDB\346\235\203\345\250\201\346\214\207\345\215\227.pdf" deleted file mode 100644 index 755cb26..0000000 Binary files "a/MongoDB\346\235\203\345\250\201\346\214\207\345\215\227.pdf" and /dev/null differ diff --git "a/Netty\345\256\236\346\210\230(\347\262\276\351\253\223).pdf" "b/Netty\345\256\236\346\210\230(\347\262\276\351\253\223).pdf" deleted file mode 100644 index 31a41d3..0000000 Binary files "a/Netty\345\256\236\346\210\230(\347\262\276\351\253\223).pdf" and /dev/null differ diff --git "a/Redis\345\256\236\346\210\230.pdf" "b/Redis\345\256\236\346\210\230.pdf" deleted file mode 100644 index 2b0fe80..0000000 Binary files "a/Redis\345\256\236\346\210\230.pdf" and /dev/null differ diff --git "a/Redis\345\274\200\345\217\221\344\270\216\350\277\220\347\273\264(\345\256\214\346\225\264\347\211\210).pdf" "b/Redis\345\274\200\345\217\221\344\270\216\350\277\220\347\273\264(\345\256\214\346\225\264\347\211\210).pdf" deleted file mode 100644 index 853e15e..0000000 Binary files "a/Redis\345\274\200\345\217\221\344\270\216\350\277\220\347\273\264(\345\256\214\346\225\264\347\211\210).pdf" and /dev/null differ diff --git "a/Redis\350\256\276\350\256\241\344\270\216\345\256\236\347\216\260.pdf" "b/Redis\350\256\276\350\256\241\344\270\216\345\256\236\347\216\260.pdf" deleted file mode 100644 index efae89c..0000000 Binary files "a/Redis\350\256\276\350\256\241\344\270\216\345\256\236\347\216\260.pdf" and /dev/null differ diff --git "a/SRE Google\350\277\220\347\273\264\350\247\243\345\257\206.pdf" "b/SRE Google\350\277\220\347\273\264\350\247\243\345\257\206.pdf" deleted file mode 100644 index 5fcd986..0000000 Binary files "a/SRE Google\350\277\220\347\273\264\350\247\243\345\257\206.pdf" and /dev/null differ diff --git "a/[\350\215\220]\346\267\261\345\205\245\346\265\205\345\207\272\350\256\276\350\256\241\346\250\241\345\274\217.pdf" "b/[\350\215\220]\346\267\261\345\205\245\346\265\205\345\207\272\350\256\276\350\256\241\346\250\241\345\274\217.pdf" new file mode 100644 index 0000000..f446e0d Binary files /dev/null and "b/[\350\215\220]\346\267\261\345\205\245\346\265\205\345\207\272\350\256\276\350\256\241\346\250\241\345\274\217.pdf" differ diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1957.pdf" b/buffett's letter to shareholders/1957.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1957.pdf" rename to buffett's letter to shareholders/1957.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1958.pdf" b/buffett's letter to shareholders/1958.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1958.pdf" rename to buffett's letter to shareholders/1958.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1959.pdf" b/buffett's letter to shareholders/1959.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1959.pdf" rename to buffett's letter to shareholders/1959.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1960.pdf" b/buffett's letter to shareholders/1960.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1960.pdf" rename to buffett's letter to shareholders/1960.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1961.pdf" b/buffett's letter to shareholders/1961.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1961.pdf" rename to buffett's letter to shareholders/1961.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1962.pdf" b/buffett's letter to shareholders/1962.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1962.pdf" rename to buffett's letter to shareholders/1962.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1963.pdf" b/buffett's letter to shareholders/1963.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1963.pdf" rename to buffett's letter to shareholders/1963.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1964.pdf" b/buffett's letter to shareholders/1964.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1964.pdf" rename to buffett's letter to shareholders/1964.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1965.pdf" b/buffett's letter to shareholders/1965.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1965.pdf" rename to buffett's letter to shareholders/1965.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1966.pdf" b/buffett's letter to shareholders/1966.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1966.pdf" rename to buffett's letter to shareholders/1966.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1967.pdf" b/buffett's letter to shareholders/1967.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1967.pdf" rename to buffett's letter to shareholders/1967.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1968.pdf" b/buffett's letter to shareholders/1968.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1968.pdf" rename to buffett's letter to shareholders/1968.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1969.pdf" b/buffett's letter to shareholders/1969.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1969.pdf" rename to buffett's letter to shareholders/1969.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1971.pdf" b/buffett's letter to shareholders/1971.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1971.pdf" rename to buffett's letter to shareholders/1971.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1972.pdf" b/buffett's letter to shareholders/1972.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1972.pdf" rename to buffett's letter to shareholders/1972.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1973.pdf" b/buffett's letter to shareholders/1973.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1973.pdf" rename to buffett's letter to shareholders/1973.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1974.pdf" b/buffett's letter to shareholders/1974.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1974.pdf" rename to buffett's letter to shareholders/1974.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1975.pdf" b/buffett's letter to shareholders/1975.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1975.pdf" rename to buffett's letter to shareholders/1975.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1976.pdf" b/buffett's letter to shareholders/1976.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1976.pdf" rename to buffett's letter to shareholders/1976.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1977.pdf" b/buffett's letter to shareholders/1977.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1977.pdf" rename to buffett's letter to shareholders/1977.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1978.pdf" b/buffett's letter to shareholders/1978.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1978.pdf" rename to buffett's letter to shareholders/1978.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1979.pdf" b/buffett's letter to shareholders/1979.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1979.pdf" rename to buffett's letter to shareholders/1979.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1980.pdf" b/buffett's letter to shareholders/1980.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1980.pdf" rename to buffett's letter to shareholders/1980.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1981.pdf" b/buffett's letter to shareholders/1981.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1981.pdf" rename to buffett's letter to shareholders/1981.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1982.pdf" b/buffett's letter to shareholders/1982.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1982.pdf" rename to buffett's letter to shareholders/1982.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1983.pdf" b/buffett's letter to shareholders/1983.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1983.pdf" rename to buffett's letter to shareholders/1983.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1984.pdf" b/buffett's letter to shareholders/1984.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1984.pdf" rename to buffett's letter to shareholders/1984.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1985.pdf" b/buffett's letter to shareholders/1985.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1985.pdf" rename to buffett's letter to shareholders/1985.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1986.pdf" b/buffett's letter to shareholders/1986.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1986.pdf" rename to buffett's letter to shareholders/1986.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1987.pdf" b/buffett's letter to shareholders/1987.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1987.pdf" rename to buffett's letter to shareholders/1987.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1988.pdf" b/buffett's letter to shareholders/1988.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1988.pdf" rename to buffett's letter to shareholders/1988.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1989.pdf" b/buffett's letter to shareholders/1989.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1989.pdf" rename to buffett's letter to shareholders/1989.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1990.pdf" b/buffett's letter to shareholders/1990.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1990.pdf" rename to buffett's letter to shareholders/1990.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1991.pdf" b/buffett's letter to shareholders/1991.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1991.pdf" rename to buffett's letter to shareholders/1991.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1992.pdf" b/buffett's letter to shareholders/1992.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1992.pdf" rename to buffett's letter to shareholders/1992.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1993.pdf" b/buffett's letter to shareholders/1993.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1993.pdf" rename to buffett's letter to shareholders/1993.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1994.pdf" b/buffett's letter to shareholders/1994.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1994.pdf" rename to buffett's letter to shareholders/1994.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1995.pdf" b/buffett's letter to shareholders/1995.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1995.pdf" rename to buffett's letter to shareholders/1995.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1996.pdf" b/buffett's letter to shareholders/1996.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1996.pdf" rename to buffett's letter to shareholders/1996.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1997.pdf" b/buffett's letter to shareholders/1997.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1997.pdf" rename to buffett's letter to shareholders/1997.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1998.pdf" b/buffett's letter to shareholders/1998.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1998.pdf" rename to buffett's letter to shareholders/1998.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1999.pdf" b/buffett's letter to shareholders/1999.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/1999.pdf" rename to buffett's letter to shareholders/1999.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/2000.pdf" b/buffett's letter to shareholders/2000.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/2000.pdf" rename to buffett's letter to shareholders/2000.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/2001.pdf" b/buffett's letter to shareholders/2001.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/2001.pdf" rename to buffett's letter to shareholders/2001.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/2002.pdf" b/buffett's letter to shareholders/2002.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/2002.pdf" rename to buffett's letter to shareholders/2002.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/2003.pdf" b/buffett's letter to shareholders/2003.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/2003.pdf" rename to buffett's letter to shareholders/2003.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/2004.pdf" b/buffett's letter to shareholders/2004.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/2004.pdf" rename to buffett's letter to shareholders/2004.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/2005.pdf" b/buffett's letter to shareholders/2005.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/2005.pdf" rename to buffett's letter to shareholders/2005.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/2006.pdf" b/buffett's letter to shareholders/2006.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/2006.pdf" rename to buffett's letter to shareholders/2006.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/2007.pdf" b/buffett's letter to shareholders/2007.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/2007.pdf" rename to buffett's letter to shareholders/2007.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/2008.pdf" b/buffett's letter to shareholders/2008.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/2008.pdf" rename to buffett's letter to shareholders/2008.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/2009.pdf" b/buffett's letter to shareholders/2009.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/2009.pdf" rename to buffett's letter to shareholders/2009.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/2010.pdf" b/buffett's letter to shareholders/2010.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/2010.pdf" rename to buffett's letter to shareholders/2010.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/2011.pdf" b/buffett's letter to shareholders/2011.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/2011.pdf" rename to buffett's letter to shareholders/2011.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/2012.pdf" b/buffett's letter to shareholders/2012.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/2012.pdf" rename to buffett's letter to shareholders/2012.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/2013.pdf" b/buffett's letter to shareholders/2013.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/2013.pdf" rename to buffett's letter to shareholders/2013.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/2014.pdf" b/buffett's letter to shareholders/2014.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/2014.pdf" rename to buffett's letter to shareholders/2014.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/2015.pdf" b/buffett's letter to shareholders/2015.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/2015.pdf" rename to buffett's letter to shareholders/2015.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/2016.pdf" b/buffett's letter to shareholders/2016.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/2016.pdf" rename to buffett's letter to shareholders/2016.pdf diff --git "a/\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/2017.pdf" b/buffett's letter to shareholders/2017.pdf similarity index 100% rename from "\345\267\264\350\217\262\347\211\271\350\207\264\350\202\241\344\270\234\347\232\204\344\277\241/2017.pdf" rename to buffett's letter to shareholders/2017.pdf diff --git "a/dapper\345\210\206\345\270\203\345\274\217\350\267\237\350\270\252\347\263\273\347\273\237\345\216\237\346\226\207.pdf" "b/dapper\345\210\206\345\270\203\345\274\217\350\267\237\350\270\252\347\263\273\347\273\237\345\216\237\346\226\207.pdf" deleted file mode 100644 index ff14360..0000000 Binary files "a/dapper\345\210\206\345\270\203\345\274\217\350\267\237\350\270\252\347\263\273\347\273\237\345\216\237\346\226\207.pdf" and /dev/null differ diff --git "a/java\350\277\233\347\250\213\351\253\230CPU\345\215\240\347\224\250\346\225\205\351\232\234\346\216\222\346\237\245.txt" "b/java\350\277\233\347\250\213\351\253\230CPU\345\215\240\347\224\250\346\225\205\351\232\234\346\216\222\346\237\245.txt" deleted file mode 100644 index ec6158a..0000000 --- "a/java\350\277\233\347\250\213\351\253\230CPU\345\215\240\347\224\250\346\225\205\351\232\234\346\216\222\346\237\245.txt" +++ /dev/null @@ -1,26 +0,0 @@ -生产环境下JAVA进程高CPU占用故障排查 -解决过程: -1,根据top命令,发现PID为2633的Java进程占用CPU高达300%,出现故障。 - -2,找到该进程后,如何定位具体线程或代码呢,首先显示线程列表,并按照CPU占用高的线程排序: -[root@localhost logs]# ps -mp 2633 -o THREAD,tid,time | sort -rn - -显示结果如下: -USER %CPU PRI SCNT WCHAN USER SYSTEM TID TIME -root 10.5 19 - - - - 3626 00:12:48 -root 10.1 19 - - - - 3593 00:12:16 - -找到了耗时最高的线程3626,占用CPU时间有12分钟了! - -将需要的线程ID转换为16进制格式: -[root@localhost logs]# printf "%x\n" 3626 -e18 - -最后打印线程的堆栈信息: -[root@localhost logs]# jstack 2633 |grep e18 -A 30 - -总结: -1。先使用top命令查询java占用cpu高的进程 -2。使用 ps -mp 查找出该进程下里面耗用时间长的线程 -3. 使用printf "%x\n" 3626 将线程转换为16进制 -4. 使用 jstack 2633 |grep e18 -A 30 使用此命令打印出该进程下面的此线程的堆栈信息 diff --git "a/meituan-backend/2017\345\271\264\347\276\216\345\233\242\347\202\271\350\257\204\346\212\200\346\234\257\345\271\264\350\264\247\357\274\210\345\220\210\357\274\211.pdf" "b/meituan-backend/2017\345\271\264\347\276\216\345\233\242\347\202\271\350\257\204\346\212\200\346\234\257\345\271\264\350\264\247\357\274\210\345\220\210\357\274\211.pdf" deleted file mode 100644 index 84f0685..0000000 Binary files "a/meituan-backend/2017\345\271\264\347\276\216\345\233\242\347\202\271\350\257\204\346\212\200\346\234\257\345\271\264\350\264\247\357\274\210\345\220\210\357\274\211.pdf" and /dev/null differ diff --git a/meituan-backend/2018-ebook-backend.pdf b/meituan-backend/2018-ebook-backend.pdf deleted file mode 100644 index 27e9330..0000000 Binary files a/meituan-backend/2018-ebook-backend.pdf and /dev/null differ diff --git "a/meituan-backend/2019\347\276\216\345\233\242\346\212\200\346\234\257\345\271\264\350\264\247-\345\220\210\351\233\206.pdf" "b/meituan-backend/2019\347\276\216\345\233\242\346\212\200\346\234\257\345\271\264\350\264\247-\345\220\210\351\233\206.pdf" deleted file mode 100644 index 98dd45c..0000000 Binary files "a/meituan-backend/2019\347\276\216\345\233\242\346\212\200\346\234\257\345\271\264\350\264\247-\345\220\210\351\233\206.pdf" and /dev/null differ diff --git "a/meituan-backend/2020\347\276\216\345\233\242\346\212\200\346\234\257\345\271\264\350\264\247-\345\220\216\345\217\260\347\257\207.pdf" "b/meituan-backend/2020\347\276\216\345\233\242\346\212\200\346\234\257\345\271\264\350\264\247-\345\220\216\345\217\260\347\257\207.pdf" deleted file mode 100644 index 1cd75ad..0000000 Binary files "a/meituan-backend/2020\347\276\216\345\233\242\346\212\200\346\234\257\345\271\264\350\264\247-\345\220\216\345\217\260\347\257\207.pdf" and /dev/null differ diff --git a/meituan-backend/meituan-backend-pdf_abstract.md b/meituan-backend/meituan-backend-pdf_abstract.md deleted file mode 100644 index 9f677e8..0000000 --- a/meituan-backend/meituan-backend-pdf_abstract.md +++ /dev/null @@ -1,382 +0,0 @@ -# meituan-backend-pdf_abstract -## [JVM婧愮爜](http://hg.openjdk.java.net/jdk8u) - -## 2018 -### [SLA绋冲畾鎬х悊瑙(https://tech.meituan.com/2018/04/19/trade-high-availability-in-action.html) - -### netty鍫嗗鍐呭瓨娉勬紡锛坣etty-socketio锛 -``` -1. 涓娆 Connect 鍜 Disconnect 涓轰竴娆¤繛鎺ョ殑寤虹珛涓庡叧闂 -2. 鍦 Disconnect浜嬩欢鍓嶅悗鐢宠鐨勫唴瀛樺苟娌℃湁閲婃斁(DIRECT_MEMORY_COUNTER鍫嗗缁熻瀛楁) -3. 鏂偣鎵撳湪client.send() 杩欙▓锛 鐒跺悗鍏抽棴瀹㈡埛绔繛鎺ワ紝涔嬪悗鐩存帴杩涘叆鍒拌繖涓柟娉曪紝鏈変釜閫昏緫 encoder.allocateBuffer鐢宠鍫嗗鍐呭瓨 -4. handleWebsocket 锛氳皟鐢 encoder 鍒嗛厤铴轰竴娈靛唴瀛橈紝璋冪敤瀹屼箣鍚庯紝鎴戜滑鐨勬帶鍒跺彴绔嬮┈灏卞姜铴 256B锛堟鐤戣偗瀹氭槸杩欙З鐢宠鐨勫唴瀛樻病鏈夐噴鏀撅級 -5. encoder.encodePacket() 鏂规硶锛屾妸 packet 铵╅潰涓涓瓧娈电殑鍊艰浆鎹负涓涓 char锛堣繖閲屾姤NPE锛 -6. 璺熻釜鍒癗PE涔嬪墠鐨勪唬鐮侊紝鐪嬬湅涓哄暐娌℃湁璧嬪艰繘鏉ワ紝缁欓檮涓婂 *瑙e喅* -``` -### 铳у彲铳ц鐨凧ava鈥滈攣鈥濅簨 -``` -1. 涔愯閿 VS 鎮茶閿(synchronized鍏抽敭瀛楀拰Lock鐨勫疄鐜扮被閮芥槸鎮茶閿) -2. 鑷棆閿 VS 閫傚簲鎬ц嚜鏃嬮攣(鑷棆閿佺殑瀹炵幇鍘燂Г鍚屾牱涔熸槸CAS锛孉tomicInteger涓皟鐢╱nsafe杩涳▓鑷鎿嶄綔鐨勬簮鐮佷腑鐨刣o-while寰幆灏辨槸涓涓嚜鏃嬫搷浣) -3. 鏃犻攣 VS 鍋忓悜閿 VS 杞伙ゾ绾ч攣 VS 閲嶏ゾ绾ч攣(Mark Word锛氶粯璁ゅ瓨鍌ㄥ璞$殑HashCode锛屽垎浠o榫勫拰閿佹爣蹇椾綅淇℃伅) -4. 鍏钩閿 VS 闈炲叕骞抽攣(AQS AbstractQueuedSynchronizer,hasQueuedPredecessors()锛 -5. 鍙噸鍏ラ攣 VS 闈炲彲閲嶅叆閿(ReentrantLock鍜宻ynchronized閮芥槸鍙噸鍏ラ攣锛孨onReentrantLock) -6. 鐙韩閿 VS 鍏变韩閿(JDK涓殑synchronized鍜孞UC涓璍ock鐨勫疄鐜扮被灏辨槸浜掓枼閿併俁eentrantReadWriteLock鏈変袱鎶婇攣锛歊eadLock鍜學riteLock锛孲tampedLock 鎻愪緵浜嗕竴绉嶄箰瑙傝閿佺殑瀹炵幇) -``` - -## 2019 -### Java Unsafe -``` -1. 鎻愬崌绋嬪簭 I/O 鎿嶄綔鐨勬ц兘銆傞氬父鍦 I/O 閫氫俊杩囩▼涓紝浼氬瓨鍦ㄥ爢鍐呭唴瀛樺埌鍫嗗鍐呭瓨鐨勬暟鎹嫹璐濇搷浣滐紝瀵逛簬闇瑕侀绻佽繘琛屽唴瀛橀棿鏁版嵁鎷疯礉涓旂敓鍛藉懆鏈熻緝鐭殑鏆傚瓨鏁版嵁锛岄兘寤鸿瀛樺偍鍒板爢澶栧唴瀛樸 -2. 鍒 寤 DirectByteBuffer 鐨勬椂鍊欙紝 閫氳繃Unsafe.allocateMemory 鍒嗛厤鍐呭瓨銆乁nsafe.setMemory 杩涜鍐呭瓨鍒濆鍖栵紝鑰屽悗鏋勫缓 Cleaner 瀵硅薄鐢ㄤ簬璺熻釜 DirectByteBuffer 瀵硅薄鐨勫瀮鍦惧洖鏀讹紝浠ュ疄鐜板綋 DirectByteBuffer 琚瀮鍦惧洖鏀舵椂锛屽垎閰嶇殑鍫嗗鍐呭瓨涓璧疯閲婃斁銆傦紙Cleaner 缁ф壙鑷 Java 鍥涘ぇ寮曠敤绫诲瀷涔嬩竴鐨勮櫄寮曠敤 PhantomReference锛堜紬鎵鍛ㄧ煡锛屾棤娉曢氳繃铏氬紩鐢ㄨ幏鍙栦笌涔嬪叧鑱旂殑瀵硅薄瀹炰緥锛屼笖褰撳璞′粎琚櫄寮曠敤寮曠敤鏃讹紝鍦ㄤ换浣曞彂鐢 GC 鐨勬椂鍊欙紝鍏跺潎鍙鍥炴敹锛夛紝锛 -3. 杩欓儴鍒嗭紝鍖呮嫭绾跨▼鎸傝捣銆佹仮澶嶃侀攣鏈哄埗绛夋柟娉曘 -4. allocateInstance 鍦 java.lang.invoke銆丱bjenesis锛堟彁渚涚粫杩囩被鏋勯犲櫒鐨勫璞$敓鎴愭柟寮忥級銆丟son锛堝弽搴忓垪鍖栨椂鐢ㄥ埌锛変腑閮芥湁鐩稿簲鐨勫簲鐢ㄣ -5. 鍦 Java 8 涓紩鍏ワ紝鐢ㄤ簬瀹氫箟鍐呭瓨灞忛殰锛堜篃绉板唴瀛樻爡鏍忥紝鍐呭瓨鏍呴殰锛屽睆闅滄寚浠ょ瓑锛屾槸涓绫诲悓姝ュ睆闅滄寚浠わ紝鏄 CPU 鎴栫紪璇戝櫒鍦ㄥ鍐呭瓨闅忔満璁块棶鐨勬搷浣滀腑鐨勪竴涓悓姝ョ偣锛屼娇寰楁鐐逛箣鍓嶇殑鎵鏈夎鍐欐搷浣滈兘鎵ц鍚庢墠鍙 -``` -### Java鍔ㄦ佽拷韪妧鏈 -``` -1. java.lang.instrument.Instrumentation鏇挎崲宸茬粡瀛樺湪鐨 class 鏂囦欢锛岃繍琛屾椂鐩存帴鏇挎崲绫诲緢涓嶅畨鍏ㄣ傛瘮濡傛柊鐨 class 鏂囦欢寮曠敤浜嗕竴涓笉瀛樺湪鐨勭被锛屾垨鑰呮妸鏌愪釜绫荤殑涓涓 field 缁欏垹闄や簡绛夌瓑 -2. 鍥犱负鏈 BTrace 鐨勫瓨鍦紝鎴戜滑涓嶅繀鑷繁鍐欎竴濂桝SM杩欐牱鐨勫伐鍏蜂簡锛孊Trace 鏈缁堝 Instruments 瀹炵幇 class 鐨勬浛鎹 -``` -### 瀛楄妭鐮佸寮烘妧鏈帰绱 -``` -1. 濡傛灉姣忔鏌ョ湅鍙嶇紪璇戝悗鐨勫瓧鑺傜爜閮戒娇鐢 javap 鍛戒护鐨勮瘽锛屽ソ闈炲父绻佺悙銆傝繖閲屾帹鑽愪竴涓 Idea 鎻掍欢锛歫classlib銆 -2. 鍒╃敤 Javassist 瀹炵幇瀛楄妭鐮佸寮烘椂锛屽彲浠ユ棤椤诲叧娉ㄥ瓧鑺傜爜鍒绘澘鐨勭粨鏋勶紝鍏朵紭鐐瑰氨鍦ㄤ簬缂栫▼绠鍗曘 -3. Attach API 鐨勪綔鐢ㄦ槸鎻愪緵 JVM 杩涚▼闂撮氫俊鐨勮兘鍔涳紝姣斿璇存垜浠负浜嗚鍙﹀涓涓 JVM 杩涚▼鎶婄嚎涓婃湇鍔$殑绾跨▼ Dump 鍑烘潵锛屼細杩愯 jstack 鎴 jmap 鐨勮繘绋嬶紝骞朵紶閫 pid 鐨勫弬鏁帮紝鍛婅瘔瀹冭瀵瑰摢涓繘绋嬭繘琛岀嚎绋 Dump锛岃繖灏辨槸 Attach API 鍋氱殑浜嬫儏 -4. 鐑儴缃诧細涓嶉儴缃叉湇鍔¤屽绾夸笂鏈嶅姟鍋氫慨鏀癸紝鍙互鍋氭墦鐐广佸鍔犳棩蹇楃瓑鎿嶄綔锛孧ock锛氭祴璇曟椂鍊欏鏌愪簺鏈嶅姟鍋 Mock锛屾ц兘璇婃柇宸ュ叿 -``` -### JVM Profiler鎶鏈師鐞嗗拰婧愮爜鎺㈢储 -``` -1. Instrumentation 鏂瑰紡瀵瑰嚑涔庢墍鏈夋柟娉曟坊鍔犱簡棰濆鐨 AOP 閫昏緫锛岃繖浼氬鑷村绾夸笂鏈嶅姟閫犳垚宸ㄩ鐨勬ц兘褰卞搷锛屼絾鍏朵紭鍔挎槸锛氱粷瀵圭簿鍑嗙殑鏂规硶璋冪敤娆℃暟銆佽皟鐢ㄦ椂闂寸粺璁° -2. Sampling 鏂瑰紡鍩轰簬鏃犱镜鍏ョ殑棰濆绾跨▼瀵规墍鏈夌嚎绋嬬殑璋冪敤鏍堝揩鐓ц繘琛屽浐瀹氶鐜囨娊鏍凤紝鐩稿鍓嶈呮潵璇村畠鐨勬ц兘寮閿寰堜綆銆傦紙鍏稿瀷寮婧愬疄鐜版湁 Async-Profiler 鍜 Honest-Profiler锛 -3. FlameGraph 椤圭洰鐨勬牳蹇冨彧鏄竴涓 Perl 鑴氭湰 -``` -### Java鍔ㄦ佽皟璇曟妧鏈師鐞 -``` -1. Java-debug-tool 鐨勫悓绫讳骇鍝佷富瑕佹槸 greys锛屽叾浠栫被浼肩殑宸ュ叿澶ч儴鍒嗛兘鏄熀浜巊reys 杩涜鐨勪簩娆″紑鍙戯紝鎵浠ョ洿鎺ラ夋嫨 greys 鏉ュ拰 Java-debug-tool 杩涜瀵规瘮銆 -``` -### 浠嶳eentrantLOck鐨勫疄鐜扮湅AQS -``` -1. 鏌愪釜绾跨▼鑾峰彇閿佸け璐ョ殑鍚庣画娴佺▼鏄粈涔堝憿锛熷瓨鍦ㄦ煇绉嶆帓闃熺瓑鍊欐満鍒讹紝绾跨▼缁х画绛夊緟锛屼粛鐒朵繚鐣欒幏鍙栭攣鐨勫彲鑳斤紝鑾峰彇閿佹祦绋嬩粛鍦ㄧ户缁 -2. 濡傛灉澶勪簬鎺掗槦绛夊欐満鍒朵腑鐨勭嚎绋嬩竴鐩存棤娉曡幏鍙栭攣锛岄渶瑕佷竴鐩寸瓑寰呬箞锛燂細绾跨▼鎵鍦ㄨ妭鐐圭殑鐘舵佷細鍙樻垚鍙栨秷鐘舵侊紝鍙栨秷鐘舵佺殑鑺傜偣浼氫粠闃熷垪涓噴鏀 -``` -### springboot鍫嗗鍐呭瓨鎺掓煡 -``` -1. Native Code 鎵寮曡捣锛岃 Java 灞傞潰鐨勫伐鍏蜂笉渚夸簬鎺掓煡姝ょ被闂锛屽彧鑳戒娇鐢ㄧ郴缁熷眰闈㈢殑宸ュ叿gperftools鍘诲畾浣嶉棶棰 -2. 浣跨敤鍛戒护鈥渟trace -f -e鈥漛rk,mmap,munmap鈥-p pid鈥濊拷韪悜 OS 鐢宠鍐呭瓨璇锋眰 -3. 鎯崇潃鐪嬬湅鍐呭瓨涓殑鎯呭喌浣跨敤鍛戒护 gdp -pid pid 杩涘叆 GDB 涔嬪悗锛岀劧鍚庝娇鐢ㄥ懡浠 dump memory mem.bin startAddress endAddressdump 鍐呭瓨 -鍏朵腑 startAddress 鍜 endAddress 鍙互浠 /proc/pid/smaps 涓煡鎵俱傜劧鍚庝娇鐢 strings mem.bin 鏌ョ湅 dump 鐨勫唴瀹 -``` - -## 2020 -### 绾跨▼姹犲疄鐜板師鐞 -``` -1. RUNNING銆丼HUTDOWN銆丼TOP銆乀IDYING銆乀ERMINATED -2. 涓嶇敤绾跨▼姹犵殑妗嗘灦锛欴isruptor銆丄ctor銆佸崗绋 -3. 鍔ㄦ佸寲绾跨▼姹犺璁★細绠鍖栫嚎绋嬫睜閰嶇疆銆佸弬鏁板彲鍔ㄦ佷慨鏀广佸鍔犵嚎绋嬫睜鐩戞帶 -``` -### 缇庡洟浜夸竾绾V瀛樺偍 -``` -1. Squirrel 瀹樻柟鎻愪緵鐨勬柟妗堬紝浠讳綍涓涓妭鐐逛粠瀹曟満鍒拌鏍囪涓 FAIL 鎽橀櫎锛屼竴鑸渶瑕佺粡杩 30 绉掋傛洿鏂 ZooKeeper锛岄氱煡瀹㈡埛绔佹坊鍔犳柊node -2. 鎸佷箙鍖栨満鍒讹紝鍐欒姹備細鍏堝啓鍒 DB 閲岋紝鐒跺悗鍐欏埌鍐呭瓨Backlog锛岃繖璺熷畼鏂规槸涓鏍风殑銆傚悓鏃跺畠浼氭妸璇锋眰鍙戠粰寮傛绾跨▼锛屽紓姝ョ嚎绋嬭礋璐f妸鍙樻洿鍒峰埌纭洏鐨 Backlog 閲屻傚綋纭洏 Backlog 杩囧鏃讹紝鎴戜滑浼氫富鍔ㄥ湪涓氬姟浣庡嘲鏈熷仛涓娆DB 锛岀劧鍚庢妸 RDB 涔嬪墠鐢熸垚鐨 Backlog 鍒犻櫎 -3. 濡傛灉鏈夌儹鐐癸紝鐩戞帶鏈嶅姟浼氭妸鐑偣 Key 鎵鍦 Slot 涓婃姤鍒版垜浠殑杩佺Щ鏈嶅姟銆傝縼绉绘湇鍔¤繖鏃朵細鎶婄儹鐐逛富浠庤妭鐐瑰姞鍏ュ埌杩欎釜闆嗙兢涓紝鐒跺悗鎶婄儹鐐 Slot 杩佺Щ鍒拌繖涓儹鐐逛富浠庝笂銆傚洜涓虹儹鐐逛富浠庝笂鍙湁鐑偣 Slot 鐨勮姹傦紝鎵浠ョ儹鐐 Key 鐨勫鐞嗚兘鍔涘緱鍒颁簡澶у箙鎻愬崌 -4. Cellar 璺熼樋閲屽紑婧愮殑 Tair 涓昏鏈変袱涓灦鏋勪笂鐨勪笉鍚屻傜涓涓槸 OB锛岀浜屼釜鏄 ZooKeeper -5. Cellar 蹇參鍒楅槦锛孋ellar 鏅鸿兘杩佺Щ锛孋ellar 寮轰竴鑷 -6. 濡傛灉杩欎釜 Key 鏄竴涓儹鐐癸紝閭d箞瀹冧細鍦ㄥ仛闆嗙兢鍐呭鍒剁殑鍚屾椂锛岃繕浼氭妸杩欎釜鏁版嵁澶嶅埗鏈夌儹鐐瑰尯鍩熺殑鑺傜偣锛屽悓鏃讹紝瀛樺偍鑺傜偣鍦ㄨ繑鍥炵粨鏋滅粰瀹㈡埛绔椂锛屼細鍛婅瘔瀹㈡埛绔紝杩欎釜 Key 鏄儹鐐癸紝杩欐椂瀹㈡埛绔唴浼氱紦瀛樿繖涓儹鐐 Key銆 -``` -### Java甯歌鐨9绉岰MS GC闂鍒嗘瀽鍜岃В鍐 -``` -1. 鍒嗕唬鏀堕泦鍣細ParNew锛氫竴娆惧绾跨▼鐨勬敹闆嗗櫒锛岄噰鐢ㄥ鍒剁畻娉曪紝涓昏宸ヤ綔鍦 Young 鍖猴紱CMS锛氫互鑾峰彇鏈鐭洖鏀跺仠椤挎椂闂翠负鐩爣锛岄噰鐢ㄢ滄爣璁 - 娓呴櫎鈥濈畻娉 -2. 鍒嗗尯鏀堕泦鍣細G1锛氫竴绉嶆湇鍔″櫒绔殑鍨冨溇鏀堕泦鍣紝搴旂敤鍦ㄥ澶勭悊鍣ㄥ拰澶у閲忓唴瀛樼幆澧冧腑锛沍GC锛欽DK11 涓帹鍑虹殑涓娆句綆寤惰繜鍨冨溇鍥炴敹鍣紝閫傜敤浜庡ぇ鍐呭瓨浣庡欢杩熸湇鍔$殑鍐呭瓨绠$悊鍜屽洖鏀讹紱 -3. 璇绘噦 GC Cause: System.gc()锛氭墜鍔ㄨЕ鍙 GC 鎿嶄綔锛汣MS锛欳MS GC 鍦ㄦ墽琛岃繃绋嬩腑鐨勪竴浜涘姩浣滐紱Promotion Failure锛歄ld 鍖烘病鏈夎冻澶熺殑绌洪棿鍒嗛厤缁 Young 鍖猴紱Concurrent Mode Failure锛欳MS GC 杩愯鏈熼棿Old 鍖洪鐣欑殑绌洪棿涓嶈冻锛汫CLocker Initiated GC锛氬鏋滅嚎绋嬫墽琛屽湪 JNI 涓寸晫鍖烘椂锛屽垰濂介渶瑕佽繘琛孏C -4. MetaSpace 鍖 OOM: 缁忓父浼氬嚭闂鐨勫嚑涓偣鏈 Orika鐨 classMap銆丣SON 鐨 ASMSerializer銆丟roovy 鍔ㄦ佸姞杞界被 -5. 杩囨棭鏅嬪崌锛氬垎閰嶉熺巼鎺ヨ繎浜庢檵鍗囬熺巼锛屽璞℃檵鍗囧勾榫勮緝灏忋傚師鍥狅細Young/Eden 鍖鸿繃灏忥紝鍒嗛厤閫熺巼杩囧ぇ -6. CMS Old GC 棰戠箒锛氬垽 鏂 褰撳墠 Old 鍖轰娇鐢ㄧ巼鏄惁澶т簬闃堝硷紝鍒欒Е鍙 CMS GC锛岄粯璁や负 92%銆 -7. 鍐呭瓨娉勬紡锛欴ump Diff 鍜 Leak Suspects 姣旇緝鐩磋灏 -``` -### 鍫嗗鍐呭瓨娉勬紡鎺掓煡 -``` --XX:NativeMemoryTracking=detail JVM 鍙傛暟鍚庨噸鍚」鐩 -jcmd 272662 VM.native_memory detail -濡傛灉 total 涓殑 committed 鍜 top 涓殑 RES 鐩稿樊涓嶅ぇ锛屽垯搴斾负涓诲姩鐢宠鐨勫爢澶栧唴瀛 -鏈噴鏀鹃犳垚鐨勶紝濡傛灉鐩稿樊杈冨ぇ锛屽垯鍩烘湰鍙互纭畾鏄 JNI 璋冪敤閫犳垚鐨 - -鍘熷洜涓锛氫富鍔ㄧ敵璇锋湭閲婃斁: NIO 鍜 Netty 閮戒細鍙 -XX:MaxDirectMemorySize 閰嶇疆鐨勫硷紝鏉ラ檺鍒剁敵璇风殑鍫嗗鍐呭瓨鐨勫ぇ灏 -鍘熷洜浜岋細閫氳繃 JNI 璋冪敤鐨 Native Code 鐢宠鐨勫唴瀛樻湭閲婃斁: 閫氳繃 Google perftools + Btrace 绛夊伐鍏凤紝甯姪鎴戜滑鍒嗘瀽 -棣栧厛鍙互浣跨敤 NMT + jcmd 鍒嗘瀽娉勬紡鐨勫爢澶栧唴瀛樻槸鍝噷鐢宠锛岀‘瀹氬師鍥犲悗锛屼娇鐢ㄤ笉鍚岀殑鎵嬫锛岃繘琛屽師鍥犲畾浣嶃 - -JNI 寮曞彂鐨 GC 闂: 娣诲姞 -XX+PrintJNIGCStalls 鍙傛暟锛屽彲浠ユ墦鍗板嚭鍙戠敓 JNI 璋冪敤鏃剁殑绾跨▼锛 -绂佺敤鍋忓悜閿侊細鍋忓悜閿佸湪鍙湁涓涓嚎绋嬩娇鐢ㄥ埌璇ラ攣鐨勬椂鍊欐晥鐜囧緢楂橈紝浣嗘槸鍦ㄧ珵浜夋縺鐑堟儏鍐典細鍗囩骇鎴愯交閲忕骇閿侊紝姝ゆ椂灏遍渶瑕佸厛娑堥櫎鍋忓悜閿侊紝杩欎釜杩囩▼鏄疭TW 鐨勩 -``` -### ZGC锛圱he Z Garbage Collector锛夋槸 JDK 11 涓帹鍑虹殑涓娆句綆寤惰繜鍨冨溇鍥炴敹鍣 -``` -CMS 鏂扮敓浠g殑 Young GC銆丟1 鍜 ZGC 閮藉熀浜庢爣璁 - 澶嶅埗绠楁硶 -鏍囪闃舵鍋滈】鍒嗘瀽 -鍒濆鏍囪闃舵锛氬垵濮嬫爣璁伴樁娈垫槸鎸囦粠 GC Roots 鍑哄彂鏍囪鍏ㄩ儴鐩存帴瀛愯妭鐐圭殑杩囩▼锛岃闃舵鏄 STW 鐨 (灏遍亶鍘嗕竴灞傦紝蹇) -骞跺彂鏍囪闃舵锛氬苟鍙戞爣璁伴樁娈垫槸鎸囦粠 GC Roots 寮濮嬪鍫嗕腑瀵硅薄杩涜鍙揪鎬у垎鏋愶紝鎵惧嚭瀛樻椿瀵硅薄 锛堝彲杈炬у垎鏋愶紝骞跺彂锛屾參锛 -鍐嶆爣璁伴樁娈碉細閲嶆柊鏍囪閭d簺鍦ㄥ苟鍙戞爣璁伴樁娈靛彂鐢熷彉鍖栫殑瀵硅薄銆傝闃舵鏄 STW 鐨 锛堬紵锛燂紵锛 - -娓呯悊闃舵鍋滈】鍒嗘瀽 -娓呯悊闃舵娓呯偣鍑烘湁瀛樻椿瀵硅薄鐨勫垎鍖哄拰娌℃湁瀛樻椿瀵硅薄鐨勫垎鍖猴紝璇ラ樁娈典笉浼氭竻鐞嗗瀮鍦惧璞★紝涔熶笉浼氭墽琛屽瓨娲诲璞$殑澶嶅埗銆傝闃舵鏄 STW 鐨 -澶嶅埗闃舵鍋滈】鍒嗘瀽 -鐨勮浆绉婚樁娈甸渶瑕佸垎閰嶆柊鍐呭瓨鍜屽鍒跺璞$殑鎴愬憳鍙橀噺銆傝浆绉婚樁娈垫槸STW 鐨勶紝鍏朵腑鍐呭瓨鍒嗛厤閫氬父鑰楁椂闈炲父鐭紝浣嗗璞℃垚鍛樺彉閲忕殑澶嶅埗鑰楁椂鏈夊彲鑳借緝闀 锛堣繖涓氨璺焤edis澶ey浼肩殑锛 -涓轰粈涔堣浆绉婚樁娈典笉鑳藉拰鏍囪闃舵涓鏍峰苟鍙戞墽琛屽憿锛 -涓昏鏄 G1 鏈兘瑙e喅杞Щ杩囩▼涓噯纭畾浣嶅璞″湴鍧鐨勯棶棰樸 -G1 鐨 Young GC 鍜 CMS 鐨 Young GC锛屽叾鏍囪 - 澶嶅埗鍏ㄨ繃绋 STW - -ZGC 鍦ㄦ爣璁般佽浆绉诲拰閲嶅畾浣嶉樁娈靛嚑涔庨兘鏄苟鍙戠殑锛岃繖鏄 ZGC 瀹炵幇鍋滈】鏃堕棿灏忎簬 10ms 鐩爣鐨勬渶鍏抽敭鍘熷洜 -ZGC 閫氳繃鐫鑹叉寚閽堝拰璇诲睆闅滄妧鏈紝瑙e喅浜嗚浆绉昏繃绋嬩腑鍑嗙‘璁块棶瀵硅薄鐨勯棶棰橈紝瀹炵幇浜嗗苟鍙戣浆绉汇 -ZGC 鏈夊绉 GC 瑙﹀彂鏈哄埗 -闃诲鍐呭瓨鍒嗛厤璇锋眰瑙﹀彂锛氬綋鍨冨溇鏉ヤ笉鍙婂洖鏀讹紝鍨冨溇灏嗗爢鍗犳弧鏃讹紝浼氬鑷撮儴鍒嗙嚎绋嬮樆濉炪 -鍩轰簬鍒嗛厤閫熺巼鐨勮嚜閫傚簲绠楁硶锛氭渶涓昏鐨 GC 瑙﹀彂鏂瑰紡 -鍩轰簬鍥哄畾鏃堕棿闂撮殧锛氶氳繃 ZCollectionInterval 鎺у埗锛岄傚悎搴斿绐佸娴侀噺鍦烘櫙銆 -涓诲姩瑙﹀彂瑙勫垯锛氱被浼间簬鍥哄畾闂撮殧瑙勫垯锛屼絾鏃堕棿闂撮殧涓嶅浐瀹氾紝鏄 ZGC 鑷绠楀嚭鏉ョ殑鏃舵満 -棰勭儹瑙勫垯锛氭湇鍔″垰鍚姩鏃跺嚭鐜帮紝涓鑸笉闇瑕佸叧娉 -澶栭儴瑙﹀彂锛氫唬鐮佷腑鏄惧紡璋冪敤 System.gc() 瑙﹀彂 -鍏冩暟鎹垎閰嶈Е鍙戯細鍏冩暟鎹尯涓嶈冻鏃跺鑷达紝涓鑸笉闇瑕佸叧娉 - -鍗囩骇JDK11 -a. 涓 浜 绫 琚 鍒 闄わ細 姣 濡傗渟un.misc.BASE64Encoder鈥濓紝 鎵 鍒 鏇 鎹 绫 java.util.Base64 鍗冲彲銆 -b. 缁勪欢渚濊禆鐗堟湰涓嶅吋瀹 JDK 11 闂锛氭壘鍒板搴斾緷璧栫粍浠讹紝鎼滅储鏈鏂扮増鏈紝涓鑸兘鏀寔 JDK 11銆 -``` -### mybatis鏋勫缓瀹炵幇 -``` -SqlSession锛氫綔涓 MyBatis 宸ヤ綔鐨勪富瑕侀《灞 API锛岃〃绀哄拰鏁版嵁搴撲氦浜掔殑浼氳瘽锛屽畬鎴愬繀瑕佹暟鎹簱澧炲垹鏀规煡鍔熻兘 -Executor锛歁yBatis 鎵ц鍣紝杩欐槸 MyBatis 璋冨害鐨勬牳蹇冿紝璐熻矗 SQL 璇彞鐨勭敓鎴愬拰鏌ヨ缂撳瓨鐨勭淮鎶 -BoundSql锛氳〃绀哄姩鎬佺敓鎴愮殑 SQL 璇彞浠ュ強鐩稿簲鐨勫弬鏁颁俊鎭 -StatementHandler锛 灏 瑁 浜 JDBC Statement 鎿 浣滐紝 璐 璐 瀵 JDBCstatement 鐨勬搷浣滐紝濡傝缃弬鏁般佸皢 Statement 缁撴灉闆嗚浆鎹㈡垚 List 闆嗗悎绛夌瓑 -ParameterHandler锛氳礋璐e鐢ㄦ埛浼犻掔殑鍙傛暟杞崲鎴 JDBC Statement 鎵闇瑕佺殑鍙傛暟 -TypeHandler锛氳礋璐 Java 鏁版嵁绫诲瀷鍜 JDBC 鏁版嵁绫诲瀷涔嬮棿鐨勬槧灏勫拰杞崲 -``` - -## 2020闃块噷 -### 濡備綍姝g‘鍦板疄鐜伴噸璇(Retry) -``` -鍥哄畾寰幆娆℃暟鏂瑰紡: 涓嶅甫 backoff 鐨勯噸璇曪紝瀵逛簬涓嬫父鏉ヨ浼氬湪澶辫触鍙戠敓鏃惰繘涓姝ラ亣鍒版洿澶氱殑璇锋眰鍘嬪姏锛岀户鑰岃繘涓姝ユ伓鍖栥 -甯﹀浐瀹 delay 鐨勬柟寮: -铏界劧杩欐甯︿簡鍥哄畾闂撮殧鐨 backoff锛屼絾鏄瘡娆¢噸璇曠殑闂撮殧鍥哄畾锛屾鏃跺浜庝笅娓歌祫婧愮殑鍐插嚮灏嗕細鍙樻垚闂存瓏鎬х殑鑴夊啿锛 -鐗瑰埆鏄綋闆嗙兢閮介亣鍒扮被浼肩殑闂鏃讹紝姝ヨ皟涓鑷寸殑鑴夊啿锛屽皢浼氭渶缁堝璧勬簮閫犳垚寰堝ぇ鐨勫啿鍑伙紝骞堕櫡鍏ュけ璐ョ殑寰幆涓 -甯﹂殢鏈 delay 鐨勬柟寮: -濡傛灉渚濊禆鐨勫簳灞傛湇鍔℃寔缁湴澶辫触锛屾敼鏂规硶渚濈劧浼氳繘琛屽浐瀹氭鏁扮殑灏濊瘯锛屽苟涓嶈兘璧峰埌寰堝ソ鐨勪繚鎶や綔鐢ㄣ -瀵圭粨鏋滄槸鍚︾鍚堥鏈燂紝鏄惁闇瑕佽繘琛岄噸璇曚緷璧栦簬寮傚父銆 -鏃犳硶閽堝寮傚父杩涜绮剧粏鍖栫殑鎺у埗锛屽鍙拡閮ㄥ垎寮傚父杩涜閲嶈瘯銆 -鍙繘琛岀粏绮掑害鎺у埗鐨勯噸璇: -鎺ㄨ崘浣跨敤 resilience4j-retr y 鎴栧垯spring-retry 绛夊簱鏉ヨ繘琛岀粍鍚 - -鍜屾柇璺櫒缁撳悎 -铏界劧鍙互姣旇緝濂界殑鎺у埗閲嶈瘯绛栫暐锛屼絾鏄浜庝笅娓歌祫婧愭寔缁х殑澶辫触锛屼緷鐒舵病鏈夊緢濂界殑瑙e喅銆傚綋鎸佺画鐨勫け璐ユ椂锛屽涓嬫父涔熶細閫犳垚鎸佺画鎬х殑鍘嬪姏銆 -甯歌鐨勬湁 Hystrix 鎴 resilience4 -``` -### 闃块噷鎶鏈笓瀹惰瑙 DDD 绯诲垪 -#### DDD Domain Primitive -``` -Domain Primitive 鏄竴涓湪鐗瑰畾棰嗗煙閲岋紝鎷ユ湁绮惧噯瀹氫箟鐨勩佸彲鑷垜楠岃瘉鐨勩佹嫢鏈夎涓虹殑 Value Object -DP 鐨勭涓涓師鍒欙細灏嗛殣鎬х殑姒傚康鏄炬у寲 -eg: PhoneNumber 绫荤殑涓涓绠楀睘鎬 getAreaCode - -DP 鐨勭浜屻佷笁涓師鍒欙細灏嗛殣鎬х殑涓婁笅鏂囨樉鎬у寲銆佸皝瑁呭瀵硅薄琛屼负 -eg: 閫氳繃灏嗛粯璁よ揣甯佽繖涓殣鎬х殑涓婁笅鏂囨蹇垫樉鎬у寲锛屽苟涓斿拰閲戦鍚堝苟涓 Money 锛屾垜浠彲浠ラ伩鍏嶅緢澶氬綋鍓嶇湅涓嶅嚭鏉ワ紝浣嗘湭鏉ュ彲鑳戒細鏆撮浄鐨 bug -eg: ExchangeRate 姹囩巼瀵硅薄锛岄氳繃灏佽閲戦璁$畻閫昏緫浠ュ強鍚勭鏍¢獙閫昏緫锛岃鍘熷浠g爜鍙樺緱鏋佸叾绠鍗 - -璁╅殣鎬х殑姒傚康鏄炬у寲 -璁╅殣鎬х殑涓婁笅鏂囨樉鎬у寲 -灏佽澶氬璞¤涓 - -甯歌鐨 DP 鐨勪娇鐢ㄥ満鏅寘鎷: -鏈夋牸寮忛檺鍒剁殑 String锛氭瘮濡 Name锛孭honeNumber锛孫rderNumber锛孼ipCode锛孉ddress 绛夈 -鏈夐檺鍒剁殑 Integer锛氭瘮濡 OrderId锛>0锛夛紝Percentage锛0-100%锛夛紝Quantity锛>=0锛夌瓑銆 -鍙灇涓剧殑 int 锛氭瘮濡 Status锛堜竴鑸笉鐢 Enum 鍥犱负鍙嶅簭鍒楀寲闂锛夈 -Double 鎴 BigDecimal锛氫竴鑸敤鍒扮殑 Double 鎴 BigDecimal 閮芥槸鏈変笟鍔″惈涔夌殑锛屾瘮濡 Temperature銆丮oney銆丄mount銆丒xchangeRate銆丷ating 绛夈 -澶嶆潅鐨勬暟鎹粨鏋勶細姣斿 Map> 绛夛紝灏介噺鑳芥妸 Map 鐨勬墍鏈夋搷浣滃寘瑁呮帀锛屼粎鏆撮湶蹇呰琛屼负銆 - -鎵鏈夋娊绂诲嚭鏉ョ殑鏂规硶瑕佸仛鍒版棤鐘舵, DP 鏈韩涓嶈兘甯︾姸鎬侊紝鎵浠ヤ竴鍒囬渶瑕佹敼鍙樼姸鎬佺殑浠g爜閮戒笉灞炰簬 DP 鐨勮寖鐣淬 -``` -#### DDD 搴旂敤鏋舵瀯 -``` -鍙淮鎶ゆ = 褰撲緷璧栧彉鍖栨椂锛屾湁澶氬皯浠g爜闇瑕侀殢涔嬫敼鍙 -eg锛 - 鏁版嵁缁撴瀯鐨勪笉绋冲畾鎬 - 渚濊禆搴撶殑鍗囩骇 - 绗笁鏂规湇鍔′緷璧栫殑涓嶇‘瀹氭 - 绗笁鏂规湇鍔 API 鐨勬帴鍙e彉鍖 - 涓棿浠舵洿鎹 -鍙墿灞曟 = 鍋氭柊闇姹傛垨鏀归昏緫鏃讹紝闇瑕佹柊澧/淇敼澶氬皯浠g爜 -eg锛 - 鏁版嵁鏉ユ簮琚浐瀹氥佹暟鎹牸寮忎笉鍏煎 - 涓氬姟閫昏緫鏃犳硶澶嶇敤 - 閫昏緫鍜屾暟鎹瓨鍌ㄧ殑鐩镐簰渚濊禆 -鍙祴璇曟 = 杩愯姣忎釜娴嬭瘯鐢ㄤ緥鎵鑺辫垂鐨勬椂闂 * 姣忎釜闇姹傛墍闇瑕佸鍔犵殑娴嬭瘯鐢ㄤ緥鏁伴噺 -eg锛 - 璁炬柦鎼缓鍥伴毦 - 杩愯鑰楁椂闀 - 鑰﹀悎搴﹂珮 - -鍗曚竴鎬у師鍒欙紙Single Responsibility Principle锛夛細 -渚濊禆鍙嶈浆鍘熷垯锛圖ependency Inversion Principle锛夛細 -寮鏀惧皝闂師鍒欙紙Open Closed Principle锛夛細 - -*閲嶆瀯鏂规* -鎶借薄鏁版嵁瀛樺偍灞 -Data Object 鏁版嵁绫伙細锛屼粠鏁版嵁搴撴潵鐨勯兘搴旇鍏堢洿鎺ユ槧灏勫埌 DO 涓婏紝浣嗘槸浠g爜閲屽簲璇ュ畬鍏ㄩ伩鍏嶇洿鎺ユ搷浣 DO銆 -Entity 瀹炰綋绫伙細Domain Primitive 浠f浛锛屽彲浠ラ伩鍏嶅ぇ閲忕殑鏍¢獙浠g爜绛夈 -Repository 瀵瑰簲鐨勬槸 Entity 瀵硅薄璇诲彇鍌ㄥ瓨鐨勬娊璞★紝鍦ㄦ帴鍙e眰闈㈠仛缁熶竴锛屼笉鍏虫敞搴曞眰瀹炵幇銆傞氳繃 Builder/Factory 瀵硅薄瀹炵幇 AccountDO 鍒 Account 涔嬮棿鐨勮浆鍖栥 - -鎶借薄绗笁鏂规湇鍔 -Anti-Corruption Layer锛堥槻鑵愬眰鎴 ACL锛 -寰堝鏃跺欐垜浠殑绯荤粺浼氬幓渚濊禆鍏朵粬鐨勭郴缁燂紝鑰岃渚濊禆鐨勭郴缁熷彲鑳藉寘鍚笉鍚堢悊鐨勬暟鎹粨鏋勩丄PI銆佸崗璁垨鎶鏈疄鐜帮紝濡傛灉瀵瑰閮ㄧ郴缁熷己渚濊禆锛屼細瀵艰嚧鎴戜滑鐨勭郴缁熻鈥濊厫铓鈥溿 -ACL 涓嶄粎浠呭彧鏄浜嗕竴灞傝皟鐢細閫氳繃鍦ㄧ郴缁熼棿鍔犲叆涓涓槻鑵愬眰锛岃兘澶熸湁鏁堢殑闅旂澶栭儴渚濊禆鍜屽唴閮ㄩ昏緫锛屾棤璁哄閮ㄥ浣曞彉鏇达紝鍐呴儴浠g爜鍙互灏藉彲鑳界殑淇濇寔涓嶅彉銆 -閫傞厤鍣細 -缂撳瓨锛 -鍏滃簳锛 -鏄撲簬娴嬭瘯锛 -鍔熻兘寮鍏筹細 - -鎶借薄涓棿浠讹紙绠鍗曞氨鏄疜afkaTemplate鍒洿鎺ョ敤锛 -鐢 Domain Primitive 灏佽璺熷疄浣撴棤鍏崇殑鏃犵姸鎬佽绠楅昏緫 -鐢 Entity 灏佽鍗曞璞$殑鏈夌姸鎬佺殑琛屼负锛屽寘鎷笟鍔℃牎楠 -鐢 Domain Service 灏佽澶氬璞¢昏緫 - -*DDD 鐨勫叚杈瑰舰鏋舵瀯* -鍙堣绉颁箣涓 Ports and Adapters锛堢鍙e拰閫傞厤鍣ㄦ灦鏋勶級 -UI 灞傘丏B 灞傘佸拰鍚勭涓棿浠跺眰瀹為檯涓婃槸娌℃湁鏈川涓婂尯鍒殑锛岄兘鍙槸鏁版嵁鐨勮緭鍏ュ拰杈撳嚭锛岃屼笉鏄湪浼犵粺鏋舵瀯涓殑鏈涓婂眰鍜屾渶涓嬪眰銆 -``` -#### DDD Repository 妯″紡 -``` -Anemic Domain Model锛堣传琛棰嗗煙妯″瀷锛 -鑰 2006 骞寸殑 JPA 鏍囧噯锛岄氳繃@Entity 绛夋敞瑙o紝浠ュ強 Hibernate 绛 ORM 妗嗘灦鐨勫疄鐜帮紝 -璁╁緢澶 Java 寮鍙戝 Entity 鐨勭悊瑙e仠鐣欏湪浜嗘暟鎹槧灏勫眰闈紝蹇界暐浜 Entity 瀹炰綋鐨勬湰韬涓 -eg: - 1. 鏈夊ぇ閲忕殑 XxxDO 瀵硅薄 - 2. 鏈嶅姟鍜 Controller 閲屾湁澶ч噺鐨勪笟鍔¢昏緫 - 3. 澶ч噺鐨 Utils 宸ュ叿绫荤瓑銆 -Repository 鐨勪环鍊 - 鑳藉闅旂鎴戜滑鐨勮蒋浠讹紙涓氬姟閫昏緫锛夊拰鍥轰欢/纭欢锛圖AO銆丏B锛夛紝 - 璁╂垜浠殑杞欢鍙樺緱鏇村姞鍋ュ.锛岃岃繖涓氨鏄 Repository 鐨勬牳蹇冧环鍊笺 -鎵嬪啓 Assembler/Converter 鏄竴浠惰楁椂涓斿鏄撳嚭 bug 鐨勪簨鎯 - MapStruct - -``` -#### DDD 棰嗗煙灞傝璁¤鑼 -``` -OOP 锛圤bject-Oriented Programming锛夐潰瀵瑰璞$▼搴忚璁″疄鐜 - 涓涓瘮杈冪畝鍗曠殑瀹炵幇鏄氳繃绫荤殑缁ф壙鍏崇郴 - 瀵硅薄缁ф壙瀵艰嚧浠g爜寮轰緷璧栫埗绫婚昏緫锛岃繚鍙嶅紑闂師鍒 Open-Closed Principle锛圤CP锛夋渶鏍稿績鐨勫師鍥犲氨鏄竴涓幇鏈夐昏緫鐨勫彉鏇村彲鑳戒細褰卞搷涓浜涘師鏈夌殑浠g爜 -鐩墠棰嗗煙浜嬩欢鐨勭己闄峰拰灞曟湜 - 鍜屾秷鎭槦鍒椾腑闂翠欢涓嶅悓鐨勬槸锛岄鍩熶簨浠堕氬父鏄珛鍗虫墽琛岀殑銆佸湪鍚屼竴涓繘绋嬪唴銆佸彲鑳芥槸鍚屾鎴栧紓姝ャ - 浣嗕細渚靛叆瀹炰綋鏈韩锛屽悓鏃朵篃闇瑕佹瘮杈冨暟鍡︾殑鏄炬у湪璋冪敤鏂筪ispatch 浜嬩欢锛屼篃涓嶆槸涓涓ソ鐨勮В鍐虫柟妗堛 -``` - -## linux鏌ョ湅鍝釜杩涚▼鍗犵敤纾佺洏IO -$ vmstat 2 -鎵цvmstat鍛戒护锛屽彲浠ョ湅鍒皉鍊煎拰b鍊艰緝楂橈紝r 琛ㄧず杩愯鍜岀瓑寰卌pu鏃堕棿鐗囩殑杩涚▼鏁帮紝濡傛灉闀挎湡澶т簬1锛岃鏄巆pu涓嶈冻锛岄渶瑕佸鍔燾pu銆 -b 琛ㄧず鍦ㄧ瓑寰呰祫婧愮殑杩涚▼鏁帮紝姣斿姝e湪绛夊緟I/O銆佹垨鑰呭唴瀛樹氦鎹㈢瓑銆 - -### [IO绛夊緟瀵艰嚧鎬ц兘涓嬮檷](https://serverfault.com/questions/363355/io-wait-causing-so-much-slowdown-ext4-jdb2-at-99-io-during-mysql-commit) -$ iotop -oP -鍛戒护鐨勫惈涔夛細鍙樉绀烘湁I/O琛屼负鐨勮繘绋 - -$ iostat -dtxNm 2 10 -鏌ョ湅纾佺洏io鐘跺喌 - -$ dstat -r -l -t --top-io -鐢╠stat鍛戒护鐪嬩笅io鍓嶅嚑鍚嶇殑杩涚▼ - -$ dstat --top-bio-adv -鎵惧埌閭d釜杩涚▼鍗犵敤IO鏈澶 - -$ pidstat -d 1 -鍛戒护鐨勫惈涔夛細灞曠ずI/O缁熻锛屾瘡绉掓洿鏂颁竴娆 - -### [Linux 鎸傝浇绠$悊(mount)](https://www.cnblogs.com/chenmh/p/5097530.html) -$ vim /etc/fstab -mount鎸傝浇鍒嗗尯鍦ㄧ郴缁熼噸鍚箣鍚庨渶瑕侀噸鏂版寕杞斤紝淇敼/etc/fstab鏂囦欢鍙娇鎸傝浇姘镐箙鐢熸晥 - -$ mount -t ext4 /dev/sdb1 /sdb1 --t:鎸囧畾鏂囦欢绯荤粺绫诲瀷 - -$ mount -o remount,noatime,data=writeback,barrier=0,nobh /dev/sdb -remount:閲嶆柊鎸傝浇鏂囦欢绯荤粺銆 -noatime:姣忔璁块棶鏂囦欢鏃朵笉鏇存柊鏂囦欢鐨勮闂椂闂淬 -async:閫傜敤缂撳瓨锛岄粯璁ゆ柟寮忋 - -$ fuser -m /dev/sdb -鏌ョ湅鏂囦欢绯荤粺鍗犵敤鐨勮繘绋 - -$ lsof /dev/sdb -鏌ョ湅姝e湪琚娇鐢ㄧ殑鏂囦欢锛宭osf鍛戒护鏄痩ist open file鐨勭缉鍐 - -### [Mac涓殑涓浜涚綉缁滃懡浠(https://tonydeng.github.io/2016/07/07/use-lsof-to-replace-netstat/) -$ lsof -itcp -n -褰撳墠鐢ㄦ埛鍚嶄笅鍚姩鐨勯摼鎺ユ暟 - -$ lsof -itcp -stcp:listen -褰撳墠鐢ㄦ埛鍚嶄笅鐩戝惉鐨勭鍙 - -$ netstat -antvp tcp -浣跨敤 netstat 鍛戒护鏌ョ湅杩炴帴鏁 - -/Library/Java/JavaVirtualMachines/jdk-16.0.2.jdk/Contents/Home -/Library/Java/JavaVirtualMachines/jdk-15.0.2.jdk/Contents/Home -/Library/Java/JavaVirtualMachines/jdk-9.0.4.jdk/Contents/Home - -PUT _all/_settings -{ - "index.translog.durability" : "async", - "index.translog.flush_threshold_ops" : 50000 - "index.translog.flush_threshold_size" : "1024mb", - "index.translog.sync_interval" : "60s", - "index.refresh_interval" : "60s" -} - -PUT /_cluster/settings -{ - "transient": { - "cluster": { - "routing": { - "allocation.disk.watermark.high": "95%", - "allocation.disk.watermark.low": "90%" - } - } - } -} - -PUT _cluster/settings -{ - "transient" : { - "cluster.routing.allocation.exclude._ip" : "10.0.0.1" - } -} - -PUT _cluster/settings -{ - "persistent" : { - "indices.store.throttle.max_bytes_per_sec" : "100mb" - } -} - -curl -XPOST http://127.0.0.1:9200/logstash-2015-06.10/_forcemerge?max_num_segments=1 - -/opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server 172.16.1.15:9092,172.16.1.16:9092 --topic xueqiu-push-req --from-beginning --property print.key=true|grep 39171676469 - -/opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server 10.10.106.3:9092,10.10.106.4:9092 --topic usercenter_auth_sep --from-beginning --property print.key=true - -/opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server 10.10.163.10:9092,10.10.163.11:9092 --topic xueqiu_push_user_auth_xy --from-beginning --property print.key=true - -/opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server 10.10.55.2:9092,10.10.55.3:9092,10.10.56.2:9092,10.10.56.3:9092 --topic snowball_analysis_prod --offset 0 --partition 0 --property print.key=true |grep new_symbol > partition0.txt -/opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server 10.10.55.2:9092,10.10.55.3:9092,10.10.56.2:9092,10.10.56.3:9092 --topic snowball_analysis_prod --offset 0 --partition 1 --property print.key=true |grep new_symbol > partition1.txt -/opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server 10.10.55.2:9092,10.10.55.3:9092,10.10.56.2:9092,10.10.56.3:9092 --topic snowball_analysis_prod --offset 0 --partition 2 --property print.key=true |grep new_symbol > partition2.txt -/opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server 10.10.55.2:9092,10.10.55.3:9092,10.10.56.2:9092,10.10.56.3:9092 --topic snowball_analysis_prod --offset 0 --partition 3 --property print.key=true |grep new_symbol > partition3.txt - -/opt/kafka/bin/kafka-consumer-groups.sh --bootstrap-server 10.10.22.7:9092,10.10.22.8:9092,10.10.23.7:9092,10.10.23.8:9092 --group mirror-maker --describe - -/opt/kafka/bin/kafka-consumer-groups.sh --bootstrap-server 10.10.55.7:9092,10.10.56.7:9092,10.10.58.7:9092 --group logging_logstash_ES --reset-offsets --all-topics --to-current --execute -/opt/kafka/bin/kafka-consumer-groups.sh --bootstrap-server 10.10.55.7:9092,10.10.56.7:9092,10.10.58.7:9092 --group logging_logstash_ES --reset-offsets --topic logging_snowflake-usercenter_production --to-latest --execute - -/opt/kafka/bin/kafka-consumer-groups.sh --bootstrap-server 10.10.55.2:9092 --describe --group status_release -/opt/kafka/bin/kafka-consumer-groups.sh --bootstrap-server 10.10.55.2:9092,10.10.55.3:9092,10.10.56.2:9092,10.10.56.3:9092 --list -/opt/kafka/bin/kafka-consumer-groups.sh --bootstrap-server 10.10.55.2:9092,10.10.55.3:9092,10.10.56.2:9092,10.10.56.3:9092 --delete --group rc.screener.option - -/home/op/kafka_2.13-2.8.0/bin/kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list 10.10.22.7:9092 --topic stock_view_recently --time -1 -/home/op/kafka_2.13-2.8.0/bin/kafka-consumer-offset-checker.sh --zookeeper 10.10.31.9:2181 --topic stock_view_recently --group stock_follower - -cat ./grpc.log |sed -n '/2021-03-19 14:00:00.*/,/2021-03-19 14:10:00.*/p' |grep prePay | awk -F '|' '{if ($6>2000) print $6}' -jcmd 239312 GC.class_stats|awk '{print$13}'|sed 's/\(.*\)\.\(.*\)/\1/g'|sort |uniq -c|sort -nrk1 diff --git "a/meituan-backend/\351\230\277\342\276\245\345\267\264\345\267\264\346\267\230\347\263\273\346\212\200\346\234\257 2020\342\274\200\346\225\264\345\271\264\347\232\204\347\262\276\345\215\216\346\212\200\346\234\257.pdf" "b/meituan-backend/\351\230\277\342\276\245\345\267\264\345\267\264\346\267\230\347\263\273\346\212\200\346\234\257 2020\342\274\200\346\225\264\345\271\264\347\232\204\347\262\276\345\215\216\346\212\200\346\234\257.pdf" deleted file mode 100644 index 5df2adc..0000000 Binary files "a/meituan-backend/\351\230\277\342\276\245\345\267\264\345\267\264\346\267\230\347\263\273\346\212\200\346\234\257 2020\342\274\200\346\225\264\345\271\264\347\232\204\347\262\276\345\215\216\346\212\200\346\234\257.pdf" and /dev/null differ diff --git a/modern-cpp-tutorial.pdf b/modern-cpp-tutorial.pdf deleted file mode 100755 index 30ee1cf..0000000 Binary files a/modern-cpp-tutorial.pdf and /dev/null differ diff --git "a/openresty\345\274\200\345\217\221\346\214\207\345\215\227.pdf" "b/openresty\345\274\200\345\217\221\346\214\207\345\215\227.pdf" deleted file mode 100644 index f0eaed7..0000000 Binary files "a/openresty\345\274\200\345\217\221\346\214\207\345\215\227.pdf" and /dev/null differ diff --git "a/opentracing\346\226\207\346\241\243\344\270\255\346\226\207\347\211\210 ( \347\277\273\350\257\221 ) \345\220\264\346\231\237.pdf" "b/opentracing\346\226\207\346\241\243\344\270\255\346\226\207\347\211\210 ( \347\277\273\350\257\221 ) \345\220\264\346\231\237.pdf" deleted file mode 100644 index 191617d..0000000 Binary files "a/opentracing\346\226\207\346\241\243\344\270\255\346\226\207\347\211\210 ( \347\277\273\350\257\221 ) \345\220\264\346\231\237.pdf" and /dev/null differ diff --git "a/spanner\345\210\206\345\270\203\345\274\217\346\225\260\346\215\256\345\272\223.pdf" "b/spanner\345\210\206\345\270\203\345\274\217\346\225\260\346\215\256\345\272\223.pdf" deleted file mode 100644 index e376ea6..0000000 Binary files "a/spanner\345\210\206\345\270\203\345\274\217\346\225\260\346\215\256\345\272\223.pdf" and /dev/null differ diff --git a/think-in-java.pdf b/think-in-java.pdf deleted file mode 100644 index 61890ae..0000000 Binary files a/think-in-java.pdf and /dev/null differ diff --git "a/\343\200\212NoSQL\347\262\276\347\262\271\343\200\213.((\347\276\216)Pramod J. Sadalage).[PDF]@ckook.pdf" "b/\343\200\212NoSQL\347\262\276\347\262\271\343\200\213.((\347\276\216)Pramod J. Sadalage).[PDF]@ckook.pdf" deleted file mode 100755 index d7bcae6..0000000 Binary files "a/\343\200\212NoSQL\347\262\276\347\262\271\343\200\213.((\347\276\216)Pramod J. Sadalage).[PDF]@ckook.pdf" and /dev/null differ diff --git "a/\343\200\212\344\273\2160\345\210\2601\343\200\213\344\270\255\346\226\207\347\211\210.pdf" "b/\343\200\212\344\273\2160\345\210\2601\343\200\213\344\270\255\346\226\207\347\211\210.pdf" deleted file mode 100644 index 75780ba..0000000 Binary files "a/\343\200\212\344\273\2160\345\210\2601\343\200\213\344\270\255\346\226\207\347\211\210.pdf" and /dev/null differ diff --git "a/\343\200\212\345\211\221\346\214\207Offer\343\200\213\351\242\230\347\233\256\345\217\212\344\273\243\347\240\201.pdf" "b/\343\200\212\345\211\221\346\214\207Offer\343\200\213\351\242\230\347\233\256\345\217\212\344\273\243\347\240\201.pdf" deleted file mode 100644 index 87949aa..0000000 Binary files "a/\343\200\212\345\211\221\346\214\207Offer\343\200\213\351\242\230\347\233\256\345\217\212\344\273\243\347\240\201.pdf" and /dev/null differ diff --git "a/\343\200\212\345\215\223\350\266\212\345\237\272\345\233\240\343\200\213\345\220\211\345\247\206\302\267\346\237\257\346\236\227\346\226\257 & \346\257\224\345\260\224\302\267\346\213\211\351\275\220\345\260\224\343\200\220\346\226\207\345\255\227\347\211\210_PDF\347\224\265\345\255\220\344\271\246_\344\270\213\350\275\275\343\200\221.pdf" "b/\343\200\212\345\215\223\350\266\212\345\237\272\345\233\240\343\200\213\345\220\211\345\247\206\302\267\346\237\257\346\236\227\346\226\257 & \346\257\224\345\260\224\302\267\346\213\211\351\275\220\345\260\224\343\200\220\346\226\207\345\255\227\347\211\210_PDF\347\224\265\345\255\220\344\271\246_\344\270\213\350\275\275\343\200\221.pdf" new file mode 100644 index 0000000..857ede3 Binary files /dev/null and "b/\343\200\212\345\215\223\350\266\212\345\237\272\345\233\240\343\200\213\345\220\211\345\247\206\302\267\346\237\257\346\236\227\346\226\257 & \346\257\224\345\260\224\302\267\346\213\211\351\275\220\345\260\224\343\200\220\346\226\207\345\255\227\347\211\210_PDF\347\224\265\345\255\220\344\271\246_\344\270\213\350\275\275\343\200\221.pdf" differ diff --git "a/\343\200\212\345\225\212\345\223\210\357\274\201C\350\257\255\350\250\200\343\200\213.pdf" "b/\343\200\212\345\225\212\345\223\210\357\274\201C\350\257\255\350\250\200\343\200\213.pdf" deleted file mode 100644 index 2014562..0000000 Binary files "a/\343\200\212\345\225\212\345\223\210\357\274\201C\350\257\255\350\250\200\343\200\213.pdf" and /dev/null differ diff --git "a/\343\200\212\345\225\212\345\223\210\357\274\201\347\256\227\346\263\225\343\200\213.pdf" "b/\343\200\212\345\225\212\345\223\210\357\274\201\347\256\227\346\263\225\343\200\213.pdf" deleted file mode 100644 index 9f2a0e0..0000000 Binary files "a/\343\200\212\345\225\212\345\223\210\357\274\201\347\256\227\346\263\225\343\200\213.pdf" and /dev/null differ diff --git "a/\343\200\212\346\265\252\346\275\256\344\271\213\345\267\205\347\254\2544\347\211\210\343\200\213\345\220\264\345\206\233\343\200\220\346\226\207\345\255\227\347\211\210_PDF\347\224\265\345\255\220\344\271\246_\344\270\213\350\275\275\343\200\221.pdf" "b/\343\200\212\346\265\252\346\275\256\344\271\213\345\267\205\347\254\2544\347\211\210\343\200\213\345\220\264\345\206\233\343\200\220\346\226\207\345\255\227\347\211\210_PDF\347\224\265\345\255\220\344\271\246_\344\270\213\350\275\275\343\200\221.pdf" new file mode 100644 index 0000000..b2e5185 Binary files /dev/null and "b/\343\200\212\346\265\252\346\275\256\344\271\213\345\267\205\347\254\2544\347\211\210\343\200\213\345\220\264\345\206\233\343\200\220\346\226\207\345\255\227\347\211\210_PDF\347\224\265\345\255\220\344\271\246_\344\270\213\350\275\275\343\200\221.pdf" differ diff --git "a/\343\200\212\346\267\261\345\205\245\347\220\206\350\247\243Java\350\231\232\346\213\237\346\234\272\357\274\232JVM\351\253\230\347\272\247\347\211\271\346\200\247\344\270\216\346\234\200\344\275\263\345\256\236\350\267\265\343\200\213.pdf" "b/\343\200\212\346\267\261\345\205\245\347\220\206\350\247\243Java\350\231\232\346\213\237\346\234\272\357\274\232JVM\351\253\230\347\272\247\347\211\271\346\200\247\344\270\216\346\234\200\344\275\263\345\256\236\350\267\265\343\200\213.pdf" deleted file mode 100644 index 904811a..0000000 Binary files "a/\343\200\212\346\267\261\345\205\245\347\220\206\350\247\243Java\350\231\232\346\213\237\346\234\272\357\274\232JVM\351\253\230\347\272\247\347\211\271\346\200\247\344\270\216\346\234\200\344\275\263\345\256\236\350\267\265\343\200\213.pdf" and /dev/null differ diff --git "a/\344\270\203\345\221\250\344\270\203\345\271\266\345\217\221\346\250\241\345\236\213_PDF\347\224\265\345\255\220\344\271\246\344\270\213\350\275\275 \345\270\246\344\271\246\347\255\276\347\233\256\345\275\225 \351\253\230\346\270\205\345\256\214\346\225\264\347\211\210.pdf" "b/\344\270\203\345\221\250\344\270\203\345\271\266\345\217\221\346\250\241\345\236\213_PDF\347\224\265\345\255\220\344\271\246\344\270\213\350\275\275 \345\270\246\344\271\246\347\255\276\347\233\256\345\275\225 \351\253\230\346\270\205\345\256\214\346\225\264\347\211\210.pdf" deleted file mode 100644 index d2bdb4b..0000000 Binary files "a/\344\270\203\345\221\250\344\270\203\345\271\266\345\217\221\346\250\241\345\236\213_PDF\347\224\265\345\255\220\344\271\246\344\270\213\350\275\275 \345\270\246\344\271\246\347\255\276\347\233\256\345\275\225 \351\253\230\346\270\205\345\256\214\346\225\264\347\211\210.pdf" and /dev/null differ diff --git "a/\344\272\272\346\200\247\347\232\204\344\274\230\347\202\271.pdf" "b/\344\272\272\346\200\247\347\232\204\344\274\230\347\202\271.pdf" new file mode 100644 index 0000000..36a96b7 Binary files /dev/null and "b/\344\272\272\346\200\247\347\232\204\344\274\230\347\202\271.pdf" differ diff --git "a/\344\272\272\346\200\247\347\232\204\345\274\261\347\202\271.pdf" "b/\344\272\272\346\200\247\347\232\204\345\274\261\347\202\271.pdf" new file mode 100644 index 0000000..666599c Binary files /dev/null and "b/\344\272\272\346\200\247\347\232\204\345\274\261\347\202\271.pdf" differ diff --git "a/\344\273\216\344\270\200\345\210\260\346\227\240\347\251\267\345\244\247.pdf" "b/\344\273\216\344\270\200\345\210\260\346\227\240\347\251\267\345\244\247.pdf" index 26cc79f..def5054 100644 Binary files "a/\344\273\216\344\270\200\345\210\260\346\227\240\347\251\267\345\244\247.pdf" and "b/\344\273\216\344\270\200\345\210\260\346\227\240\347\251\267\345\244\247.pdf" differ diff --git "a/\344\273\216\344\274\230\347\247\200\345\210\260\345\215\223\350\266\212(\344\270\255\346\226\207\345\256\214\346\225\264\347\211\210).pdf" "b/\344\273\216\344\274\230\347\247\200\345\210\260\345\215\223\350\266\212(\344\270\255\346\226\207\345\256\214\346\225\264\347\211\210).pdf" new file mode 100644 index 0000000..149ee46 Binary files /dev/null and "b/\344\273\216\344\274\230\347\247\200\345\210\260\345\215\223\350\266\212(\344\270\255\346\226\207\345\256\214\346\225\264\347\211\210).pdf" differ diff --git "a/\344\273\216\344\274\230\347\247\200\345\210\260\345\215\223\350\266\212.pdf" "b/\344\273\216\344\274\230\347\247\200\345\210\260\345\215\223\350\266\212.pdf" deleted file mode 100644 index ab9983b..0000000 Binary files "a/\344\273\216\344\274\230\347\247\200\345\210\260\345\215\223\350\266\212.pdf" and /dev/null differ diff --git "a/\344\277\256\346\224\271\344\273\243\347\240\201\347\232\204\350\211\272\346\234\257.pdf" "b/\344\277\256\346\224\271\344\273\243\347\240\201\347\232\204\350\211\272\346\234\257.pdf" new file mode 100644 index 0000000..cac8024 Binary files /dev/null and "b/\344\277\256\346\224\271\344\273\243\347\240\201\347\232\204\350\211\272\346\234\257.pdf" differ diff --git "a/\345\210\206\345\270\203\345\274\217\347\263\273\347\273\237\345\216\237\347\220\206\344\270\216\350\214\203\345\236\213 \347\254\254\344\272\214\347\211\210.pdf" "b/\345\210\206\345\270\203\345\274\217\347\263\273\347\273\237\345\216\237\347\220\206\344\270\216\350\214\203\345\236\213 \347\254\254\344\272\214\347\211\210.pdf" deleted file mode 100755 index 3ccb2fe..0000000 Binary files "a/\345\210\206\345\270\203\345\274\217\347\263\273\347\273\237\345\216\237\347\220\206\344\270\216\350\214\203\345\236\213 \347\254\254\344\272\214\347\211\210.pdf" and /dev/null differ diff --git "a/\345\210\206\345\270\203\345\274\217\347\263\273\347\273\237\346\246\202\345\277\265\344\270\216\350\256\276\350\256\241\357\274\210\344\270\255\346\226\207\347\254\2543\347\211\210\357\274\211(jb51.net).pdf" "b/\345\210\206\345\270\203\345\274\217\347\263\273\347\273\237\346\246\202\345\277\265\344\270\216\350\256\276\350\256\241\357\274\210\344\270\255\346\226\207\347\254\2543\347\211\210\357\274\211(jb51.net).pdf" deleted file mode 100755 index 1e51d18..0000000 Binary files "a/\345\210\206\345\270\203\345\274\217\347\263\273\347\273\237\346\246\202\345\277\265\344\270\216\350\256\276\350\256\241\357\274\210\344\270\255\346\226\207\347\254\2543\347\211\210\357\274\211(jb51.net).pdf" and /dev/null differ diff --git "a/\345\215\201\344\272\224\344\270\252\347\273\217\345\205\270\347\256\227\346\263\225\347\240\224\347\251\266\344\270\216\346\200\273\347\273\223\343\200\201\347\233\256\345\275\225+\347\264\242\345\274\225\357\274\210by_....pdf" "b/\345\215\201\344\272\224\344\270\252\347\273\217\345\205\270\347\256\227\346\263\225\347\240\224\347\251\266\344\270\216\346\200\273\347\273\223\343\200\201\347\233\256\345\275\225+\347\264\242\345\274\225\357\274\210by_....pdf" deleted file mode 100644 index 8b7a673..0000000 Binary files "a/\345\215\201\344\272\224\344\270\252\347\273\217\345\205\270\347\256\227\346\263\225\347\240\224\347\251\266\344\270\216\346\200\273\347\273\223\343\200\201\347\233\256\345\275\225+\347\264\242\345\274\225\357\274\210by_....pdf" and /dev/null differ diff --git "a/\345\233\233\351\230\266\351\255\224\346\226\271\347\216\251\346\263\225\350\277\230\345\216\237\346\225\231\347\250\213.pdf" "b/\345\233\233\351\230\266\351\255\224\346\226\271\347\216\251\346\263\225\350\277\230\345\216\237\346\225\231\347\250\213.pdf" new file mode 100644 index 0000000..4a9c9f4 Binary files /dev/null and "b/\345\233\233\351\230\266\351\255\224\346\226\271\347\216\251\346\263\225\350\277\230\345\216\237\346\225\231\347\250\213.pdf" differ diff --git "a/\345\237\272\344\270\232\351\225\277\351\235\222.pdf" "b/\345\237\272\344\270\232\351\225\277\351\235\222.pdf" new file mode 100644 index 0000000..6fbe77e Binary files /dev/null and "b/\345\237\272\344\270\232\351\225\277\351\235\222.pdf" differ diff --git "a/\345\244\247\345\236\213\347\275\221\347\253\231\346\212\200\346\234\257\346\236\266\346\236\204\357\274\232\346\240\270\345\277\203\345\216\237\347\220\206\344\270\216\346\241\210\344\276\213\345\210\206\346\236\220.pdf" "b/\345\244\247\345\236\213\347\275\221\347\253\231\346\212\200\346\234\257\346\236\266\346\236\204\357\274\232\346\240\270\345\277\203\345\216\237\347\220\206\344\270\216\346\241\210\344\276\213\345\210\206\346\236\220.pdf" new file mode 100644 index 0000000..ae95586 Binary files /dev/null and "b/\345\244\247\345\236\213\347\275\221\347\253\231\346\212\200\346\234\257\346\236\266\346\236\204\357\274\232\346\240\270\345\277\203\345\216\237\347\220\206\344\270\216\346\241\210\344\276\213\345\210\206\346\236\220.pdf" differ diff --git "a/\345\244\247\350\247\204\346\250\241\345\210\206\345\270\203\345\274\217\345\255\230\345\202\250\347\263\273\347\273\237\357\274\232\345\216\237\347\220\206\350\247\243\346\236\220\344\270\216\346\236\266\346\236\204\345\256\236\346\210\230-\346\235\250\344\274\240\350\276\211[6\345\257\270PDF mobi epub kindle\347\211\210].pdf" "b/\345\244\247\350\247\204\346\250\241\345\210\206\345\270\203\345\274\217\345\255\230\345\202\250\347\263\273\347\273\237\357\274\232\345\216\237\347\220\206\350\247\243\346\236\220\344\270\216\346\236\266\346\236\204\345\256\236\346\210\230-\346\235\250\344\274\240\350\276\211[6\345\257\270PDF mobi epub kindle\347\211\210].pdf" new file mode 100644 index 0000000..adce964 Binary files /dev/null and "b/\345\244\247\350\247\204\346\250\241\345\210\206\345\270\203\345\274\217\345\255\230\345\202\250\347\263\273\347\273\237\357\274\232\345\216\237\347\220\206\350\247\243\346\236\220\344\270\216\346\236\266\346\236\204\345\256\236\346\210\230-\346\235\250\344\274\240\350\276\211[6\345\257\270PDF mobi epub kindle\347\211\210].pdf" differ diff --git "a/\346\200\247\350\203\275\344\271\213\345\267\205 \346\264\236\346\202\211\347\263\273\347\273\237\343\200\201\344\274\201\344\270\232\344\270\216\344\272\221\350\256\241\347\256\227_PDF\347\224\265\345\255\220\344\271\246\344\270\213\350\275\275 \351\253\230\346\270\205 \345\270\246\347\264\242\345\274\225\344\271\246\347\255\276\347\233\256\345\275\225.pdf" "b/\346\200\247\350\203\275\344\271\213\345\267\205 \346\264\236\346\202\211\347\263\273\347\273\237\343\200\201\344\274\201\344\270\232\344\270\216\344\272\221\350\256\241\347\256\227_PDF\347\224\265\345\255\220\344\271\246\344\270\213\350\275\275 \351\253\230\346\270\205 \345\270\246\347\264\242\345\274\225\344\271\246\347\255\276\347\233\256\345\275\225.pdf" new file mode 100644 index 0000000..0405603 Binary files /dev/null and "b/\346\200\247\350\203\275\344\271\213\345\267\205 \346\264\236\346\202\211\347\263\273\347\273\237\343\200\201\344\274\201\344\270\232\344\270\216\344\272\221\350\256\241\347\256\227_PDF\347\224\265\345\255\220\344\271\246\344\270\213\350\275\275 \351\253\230\346\270\205 \345\270\246\347\264\242\345\274\225\344\271\246\347\255\276\347\233\256\345\275\225.pdf" differ diff --git "a/\346\223\215\344\275\234\347\263\273\347\273\237\346\246\202\345\277\265(Java\345\256\236\347\216\260).pdf" "b/\346\223\215\344\275\234\347\263\273\347\273\237\346\246\202\345\277\265(Java\345\256\236\347\216\260).pdf" deleted file mode 100644 index 2ab3191..0000000 Binary files "a/\346\223\215\344\275\234\347\263\273\347\273\237\346\246\202\345\277\265(Java\345\256\236\347\216\260).pdf" and /dev/null differ diff --git "a/\346\257\233\346\263\275\344\270\234\351\200\211\351\233\206\343\200\220\345\205\250\345\233\233\345\215\267\343\200\221.pdf" "b/\346\257\233\346\263\275\344\270\234\351\200\211\351\233\206\343\200\220\345\205\250\345\233\233\345\215\267\343\200\221.pdf" new file mode 100644 index 0000000..f34e49f Binary files /dev/null and "b/\346\257\233\346\263\275\344\270\234\351\200\211\351\233\206\343\200\220\345\205\250\345\233\233\345\215\267\343\200\221.pdf" differ diff --git "a/\346\257\233\346\263\275\344\270\234\351\200\211\351\233\206\343\200\220\347\254\254\344\272\224\345\215\267\343\200\221.pdf" "b/\346\257\233\346\263\275\344\270\234\351\200\211\351\233\206\343\200\220\347\254\254\344\272\224\345\215\267\343\200\221.pdf" new file mode 100644 index 0000000..a8b3377 Binary files /dev/null and "b/\346\257\233\346\263\275\344\270\234\351\200\211\351\233\206\343\200\220\347\254\254\344\272\224\345\215\267\343\200\221.pdf" differ diff --git "a/\346\265\267\351\207\217\346\225\260\346\215\256\345\272\223\350\247\243\345\206\263\346\226\271\346\241\210.pdf" "b/\346\265\267\351\207\217\346\225\260\346\215\256\345\272\223\350\247\243\345\206\263\346\226\271\346\241\210.pdf" deleted file mode 100644 index 9ed283f..0000000 Binary files "a/\346\265\267\351\207\217\346\225\260\346\215\256\345\272\223\350\247\243\345\206\263\346\226\271\346\241\210.pdf" and /dev/null differ diff --git "a/\347\250\213\345\272\217\345\221\230\347\232\204\350\207\252\346\210\221\344\277\256\345\205\273\342\200\224\351\223\276\346\216\245\343\200\201\350\243\205\350\275\275\344\270\216\345\272\223.pdf" "b/\347\250\213\345\272\217\345\221\230\347\232\204\350\207\252\346\210\221\344\277\256\345\205\273\342\200\224\351\223\276\346\216\245\343\200\201\350\243\205\350\275\275\344\270\216\345\272\223.pdf" deleted file mode 100755 index 6351f1e..0000000 Binary files "a/\347\250\213\345\272\217\345\221\230\347\232\204\350\207\252\346\210\221\344\277\256\345\205\273\342\200\224\351\223\276\346\216\245\343\200\201\350\243\205\350\275\275\344\270\216\345\272\223.pdf" and /dev/null differ diff --git "a/\347\250\213\345\272\217\346\230\257\346\200\216\346\240\267\350\267\221\350\265\267\346\235\245\347\232\204 \346\227\245 \347\237\242\346\263\275\344\271\205\351\233\204 .pdf" "b/\347\250\213\345\272\217\346\230\257\346\200\216\346\240\267\350\267\221\350\265\267\346\235\245\347\232\204 \346\227\245 \347\237\242\346\263\275\344\271\205\351\233\204 .pdf" new file mode 100644 index 0000000..6cd6db8 Binary files /dev/null and "b/\347\250\213\345\272\217\346\230\257\346\200\216\346\240\267\350\267\221\350\265\267\346\235\245\347\232\204 \346\227\245 \347\237\242\346\263\275\344\271\205\351\233\204 .pdf" differ diff --git "a/\347\274\226\347\250\213\344\271\213\346\263\225\351\235\242\350\257\225\345\222\214\347\256\227\346\263\225\345\277\203\345\276\227.pdf" "b/\347\274\226\347\250\213\344\271\213\346\263\225\351\235\242\350\257\225\345\222\214\347\256\227\346\263\225\345\277\203\345\276\227.pdf" deleted file mode 100755 index f72e42b..0000000 Binary files "a/\347\274\226\347\250\213\344\271\213\346\263\225\351\235\242\350\257\225\345\222\214\347\256\227\346\263\225\345\277\203\345\276\227.pdf" and /dev/null differ diff --git "a/\350\275\257\344\273\266\345\267\245\347\250\213\345\217\257\351\235\240\346\200\247.pdf" "b/\350\275\257\344\273\266\345\267\245\347\250\213\345\217\257\351\235\240\346\200\247.pdf" new file mode 100644 index 0000000..5318a4f Binary files /dev/null and "b/\350\275\257\344\273\266\345\267\245\347\250\213\345\217\257\351\235\240\346\200\247.pdf" differ diff --git "a/\351\207\221\345\255\227\345\241\224\345\216\237\347\220\206_\351\253\230\346\270\205\347\211\210.pdf" "b/\351\207\221\345\255\227\345\241\224\345\216\237\347\220\206_\351\253\230\346\270\205\347\211\210.pdf" new file mode 100644 index 0000000..3c90157 Binary files /dev/null and "b/\351\207\221\345\255\227\345\241\224\345\216\237\347\220\206_\351\253\230\346\270\205\347\211\210.pdf" differ diff --git "a/\351\241\271\347\233\256\347\256\241\347\220\206.pdf" "b/\351\241\271\347\233\256\347\256\241\347\220\206.pdf" new file mode 100644 index 0000000..bb4f716 Binary files /dev/null and "b/\351\241\271\347\233\256\347\256\241\347\220\206.pdf" differ diff --git "a/\351\253\230\346\200\247\350\203\275\347\275\221\347\253\231\345\273\272\350\256\276\350\277\233\351\230\266\346\214\207\345\215\227.pdf" "b/\351\253\230\346\200\247\350\203\275\347\275\221\347\253\231\345\273\272\350\256\276\350\277\233\351\230\266\346\214\207\345\215\227.pdf" deleted file mode 100755 index 9c463ee..0000000 Binary files "a/\351\253\230\346\200\247\350\203\275\347\275\221\347\253\231\345\273\272\350\256\276\350\277\233\351\230\266\346\214\207\345\215\227.pdf" and /dev/null differ