diff --git a/.codeclimate.yml b/.codeclimate.yml new file mode 100644 index 0000000..1894ae1 --- /dev/null +++ b/.codeclimate.yml @@ -0,0 +1,14 @@ +--- +engines: + fixme: + enabled: true + markdownlint: + enabled: true + checks: + MD034: + enabled: true + MD013: + enabled: false +ratings: + paths: [] +exclude_paths: [] \ No newline at end of file diff --git a/.gitignore b/.gitignore index 2038447..729f8b6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,9 @@ +*.swp +.settings/ +*.project + +# jekyll related files _site .sass-cache .jekyll-metadata -Gemfile.lock \ No newline at end of file +Gemfile.lock diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..295430c --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,9 @@ +{ + "files.exclude": { + "**/.classpath": true, + "**/.project": true, + "**/.settings": true, + "**/.factorypath": true + }, + "sarif-viewer.connectToGithubCodeScanning": "off" +} \ No newline at end of file diff --git a/AboutJekyll.md b/AboutJekyll.md new file mode 100644 index 0000000..c58cc88 --- /dev/null +++ b/AboutJekyll.md @@ -0,0 +1,27 @@ +# Minimal Mistakes remote theme starter + +Click [**Use this template**](https://github.com/mmistakes/mm-github-pages-starter/generate) button above for the quickest method of getting started with the [Minimal Mistakes Jekyll theme](https://github.com/mmistakes/minimal-mistakes). + +Contains basic configuration to get you a site with: + +- Sample posts. +- Sample top navigation. +- Sample author sidebar with social links. +- Sample footer links. +- Paginated home page. +- Archive pages for posts grouped by year, category, and tag. +- Sample about page. +- Sample 404 page. +- Site wide search. + +Replace sample content with your own and [configure as necessary](https://mmistakes.github.io/minimal-mistakes/docs/configuration/). + +--- + +## Troubleshooting + +If you have a question about using Jekyll, start a discussion on the [Jekyll Forum](https://talk.jekyllrb.com/) or [StackOverflow](https://stackoverflow.com/questions/tagged/jekyll). Other resources: + +- [Ruby 101](https://jekyllrb.com/docs/ruby-101/) +- [Setting up a Jekyll site with GitHub Pages](https://jekyllrb.com/docs/github-pages/) +- [Configuring GitHub Metadata](https://github.com/jekyll/github-metadata/blob/master/docs/configuration.md#configuration) to work properly when developing locally and avoid `No GitHub API authentication could be found. Some fields may be missing or have incorrect data.` warnings. diff --git a/README.md b/README.md index c58cc88..cfe936b 100644 --- a/README.md +++ b/README.md @@ -1,27 +1,18 @@ -# Minimal Mistakes remote theme starter +# cnblogs -Click [**Use this template**](https://github.com/mmistakes/mm-github-pages-starter/generate) button above for the quickest method of getting started with the [Minimal Mistakes Jekyll theme](https://github.com/mmistakes/minimal-mistakes). +[![Awesome](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/sindresorhus/awesome) +[![Maintenance](https://img.shields.io/maintenance/yes/2025.svg)](https://github.com/jiangxincode/cnblogs) +[![GitHub license](https://img.shields.io/github/license/mashape/apistatus.svg)](http://mit-license.org/) -Contains basic configuration to get you a site with: +一些我在平时工作和学习中积累的编程相关的资源。每个程序员都有自己的学习之路,过程中会学习各种各样的网上知识,学习完最好记录下来,每隔一段时间看一看,会有不一样的收获。 -- Sample posts. -- Sample top navigation. -- Sample author sidebar with social links. -- Sample footer links. -- Paginated home page. -- Archive pages for posts grouped by year, category, and tag. -- Sample about page. -- Sample 404 page. -- Site wide search. +博客地址: -Replace sample content with your own and [configure as necessary](https://mmistakes.github.io/minimal-mistakes/docs/configuration/). +* [原有"学习之路系列博客"](https://jiangxincode.github.io/cnblogs/categories/#the-way-of-learning) +* [Github](https://jiangxincode.github.io/cnblogs/) +* [博客园](https://www.cnblogs.com/jiangxinnju) ---- +如果大家有兴趣可以一起增加,修改。 -## Troubleshooting - -If you have a question about using Jekyll, start a discussion on the [Jekyll Forum](https://talk.jekyllrb.com/) or [StackOverflow](https://stackoverflow.com/questions/tagged/jekyll). Other resources: - -- [Ruby 101](https://jekyllrb.com/docs/ruby-101/) -- [Setting up a Jekyll site with GitHub Pages](https://jekyllrb.com/docs/github-pages/) -- [Configuring GitHub Metadata](https://github.com/jekyll/github-metadata/blob/master/docs/configuration.md#configuration) to work properly when developing locally and avoid `No GitHub API authentication could be found. Some fields may be missing or have incorrect data.` warnings. +* [文章源码目录](https://github.com/jiangxincode/cnblogs/tree/master/_posts) +* [文章依赖图床](https://github.com/jiangxincode/PicGo) diff --git a/_config.yml b/_config.yml index 3b0edc2..2812dfb 100644 --- a/_config.yml +++ b/_config.yml @@ -20,8 +20,11 @@ description: >- # this means to ignore newlines until "baseurl:" line in _config.yml. It will appear in your document head meta (for Google search results) and in your feed.xml site description. twitter_username: username +baseurl: "/cnblogs" +url: "https://jiangxincode.github.io" github_username: jiangxincode -minimal_mistakes_skin: default +#minimal_mistakes_skin: default +minimal_mistakes_skin: sunrise search: true comments: diff --git "a/_drafts/202301072210Doze\346\250\241\345\274\217\346\272\220\347\240\201\350\247\243\346\236\220.md" "b/_drafts/202301072210Doze\346\250\241\345\274\217\346\272\220\347\240\201\350\247\243\346\236\220.md" deleted file mode 100644 index 9ca9459..0000000 --- "a/_drafts/202301072210Doze\346\250\241\345\274\217\346\272\220\347\240\201\350\247\243\346\236\220.md" +++ /dev/null @@ -1,11 +0,0 @@ -## 同步发布平台 - -* 博客园: -* CSDN: -* 掘金: -* 知乎: - -**未经允许,谢绝转载** - -请先阅读谷歌官网对Doze的基础性介绍: 。本文代码分析基于Android R版本。 - diff --git "a/_drafts/Android/202301072210Doze\346\250\241\345\274\217\346\272\220\347\240\201\350\247\243\346\236\220.md" "b/_drafts/Android/202301072210Doze\346\250\241\345\274\217\346\272\220\347\240\201\350\247\243\346\236\220.md" new file mode 100644 index 0000000..ab6f925 --- /dev/null +++ "b/_drafts/Android/202301072210Doze\346\250\241\345\274\217\346\272\220\347\240\201\350\247\243\346\236\220.md" @@ -0,0 +1,3 @@ + +请先阅读谷歌官网对Doze的基础性介绍: 。本文代码分析基于Android R版本。 + diff --git "a/_drafts/202301081324Android\346\272\220\347\240\201\350\247\243\350\257\273-\350\247\246\346\221\270\344\275\215\347\275\256\346\230\276\347\244\272.md" "b/_drafts/Android/202301081324Android\346\272\220\347\240\201\350\247\243\350\257\273-\350\247\246\346\221\270\344\275\215\347\275\256\346\230\276\347\244\272.md" similarity index 100% rename from "_drafts/202301081324Android\346\272\220\347\240\201\350\247\243\350\257\273-\350\247\246\346\221\270\344\275\215\347\275\256\346\230\276\347\244\272.md" rename to "_drafts/Android/202301081324Android\346\272\220\347\240\201\350\247\243\350\257\273-\350\247\246\346\221\270\344\275\215\347\275\256\346\230\276\347\244\272.md" diff --git "a/_drafts/Android/2025-05-25-AOSP\345\274\200\345\217\221\350\247\204\350\214\203.md" "b/_drafts/Android/2025-05-25-AOSP\345\274\200\345\217\221\350\247\204\350\214\203.md" new file mode 100644 index 0000000..c77a09d --- /dev/null +++ "b/_drafts/Android/2025-05-25-AOSP\345\274\200\345\217\221\350\247\204\350\214\203.md" @@ -0,0 +1,18 @@ +--- +title: "AOSP开发规范" +categories: + - Android +tags: + - AOSP + - 开发规范 + - Android +toc: true +--- + +* 在AOSP原生代码函数中增加侵入式修改,需要使用begin/end函数对其进行包裹,避免影响到原生代码的可读性和可维护性。 +* AOSP中尽量仅包含插装代码,避免包含业务逻辑代码。业务逻辑代码应该解耦到特定目录。 +* 禁止在AOSP原生AIDL中添加新的接口。 +* 新增加接口,注意是否需要进行权限控制。 +* 内部接口增加@hide注解,避免被外部反射调用。 +* 新增内容使用特性开关进行隔离。 +* 核心代码修改需要在特定评审会评审通过后才能进行代码提交。 diff --git "a/_drafts/Android OTA\345\215\207\347\272\247.md" "b/_drafts/Android/Android OTA\345\215\207\347\272\247.md" similarity index 100% rename from "_drafts/Android OTA\345\215\207\347\272\247.md" rename to "_drafts/Android/Android OTA\345\215\207\347\272\247.md" diff --git "a/_drafts/Android Studio\345\270\270\347\224\250\346\217\222\344\273\266\346\261\207\346\200\273.md" "b/_drafts/Android/Android Studio\345\270\270\347\224\250\346\217\222\344\273\266\346\261\207\346\200\273.md" similarity index 100% rename from "_drafts/Android Studio\345\270\270\347\224\250\346\217\222\344\273\266\346\261\207\346\200\273.md" rename to "_drafts/Android/Android Studio\345\270\270\347\224\250\346\217\222\344\273\266\346\261\207\346\200\273.md" diff --git "a/_drafts/Android Studio\347\233\270\345\205\263\347\233\256\345\275\225\350\247\243\346\236\220.md" "b/_drafts/Android/Android Studio\347\233\270\345\205\263\347\233\256\345\275\225\350\247\243\346\236\220.md" similarity index 100% rename from "_drafts/Android Studio\347\233\270\345\205\263\347\233\256\345\275\225\350\247\243\346\236\220.md" rename to "_drafts/Android/Android Studio\347\233\270\345\205\263\347\233\256\345\275\225\350\247\243\346\236\220.md" diff --git "a/_drafts/Android Studio\347\247\273\345\212\250\351\274\240\346\240\207\346\230\276\347\244\272\346\202\254\346\265\256\346\217\220\347\244\272\347\232\204\350\256\276\347\275\256\346\226\271\346\263\225.md" "b/_drafts/Android/Android Studio\347\247\273\345\212\250\351\274\240\346\240\207\346\230\276\347\244\272\346\202\254\346\265\256\346\217\220\347\244\272\347\232\204\350\256\276\347\275\256\346\226\271\346\263\225.md" similarity index 83% rename from "_drafts/Android Studio\347\247\273\345\212\250\351\274\240\346\240\207\346\230\276\347\244\272\346\202\254\346\265\256\346\217\220\347\244\272\347\232\204\350\256\276\347\275\256\346\226\271\346\263\225.md" rename to "_drafts/Android/Android Studio\347\247\273\345\212\250\351\274\240\346\240\207\346\230\276\347\244\272\346\202\254\346\265\256\346\217\220\347\244\272\347\232\204\350\256\276\347\275\256\346\226\271\346\263\225.md" index fd343f8..337d823 100644 --- "a/_drafts/Android Studio\347\247\273\345\212\250\351\274\240\346\240\207\346\230\276\347\244\272\346\202\254\346\265\256\346\217\220\347\244\272\347\232\204\350\256\276\347\275\256\346\226\271\346\263\225.md" +++ "b/_drafts/Android/Android Studio\347\247\273\345\212\250\351\274\240\346\240\207\346\230\276\347\244\272\346\202\254\346\265\256\346\217\220\347\244\272\347\232\204\350\256\276\347\275\256\346\226\271\346\263\225.md" @@ -1,8 +1,3 @@ -欢迎和大家交流技术相关问题: -邮箱: jiangxinnju@163.com -博客园地址: http://www.cnblogs.com/jiangxinnju -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju 以Windows 10 + Android Studio 3.0.1为例 diff --git "a/_drafts/Android\345\271\263\345\217\260OpenGL ES_Assimp_OpenCV_GLM\351\233\206\346\210\220\350\257\264\346\230\216.md" "b/_drafts/Android/Android\345\271\263\345\217\260OpenGL ES_Assimp_OpenCV_GLM\351\233\206\346\210\220\350\257\264\346\230\216.md" similarity index 100% rename from "_drafts/Android\345\271\263\345\217\260OpenGL ES_Assimp_OpenCV_GLM\351\233\206\346\210\220\350\257\264\346\230\216.md" rename to "_drafts/Android/Android\345\271\263\345\217\260OpenGL ES_Assimp_OpenCV_GLM\351\233\206\346\210\220\350\257\264\346\230\216.md" diff --git "a/_drafts/Android\347\234\237\346\234\272\345\256\211\350\243\205sqlite3\347\232\204\346\226\271\346\263\225.md" "b/_drafts/Android/Android\347\234\237\346\234\272\345\256\211\350\243\205sqlite3\347\232\204\346\226\271\346\263\225.md" similarity index 89% rename from "_drafts/Android\347\234\237\346\234\272\345\256\211\350\243\205sqlite3\347\232\204\346\226\271\346\263\225.md" rename to "_drafts/Android/Android\347\234\237\346\234\272\345\256\211\350\243\205sqlite3\347\232\204\346\226\271\346\263\225.md" index 482227c..1a0516f 100644 --- "a/_drafts/Android\347\234\237\346\234\272\345\256\211\350\243\205sqlite3\347\232\204\346\226\271\346\263\225.md" +++ "b/_drafts/Android/Android\347\234\237\346\234\272\345\256\211\350\243\205sqlite3\347\232\204\346\226\271\346\263\225.md" @@ -1,8 +1,3 @@ -欢迎和大家交流技术相关问题: -邮箱: jiangxinnju@163.com -博客园地址: http://www.cnblogs.com/jiangxinnju -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju Android版本: 4.4.2 diff --git "a/_drafts/\350\247\243\345\206\263adb push\346\227\266\345\207\272\347\216\260\347\232\204"Read-only file system"\351\227\256\351\242\230.md" "b/_drafts/Android/\350\247\243\345\206\263adb push\346\227\266\345\207\272\347\216\260\347\232\204"Read-only file system"\351\227\256\351\242\230.md" similarity index 86% rename from "_drafts/\350\247\243\345\206\263adb push\346\227\266\345\207\272\347\216\260\347\232\204"Read-only file system"\351\227\256\351\242\230.md" rename to "_drafts/Android/\350\247\243\345\206\263adb push\346\227\266\345\207\272\347\216\260\347\232\204"Read-only file system"\351\227\256\351\242\230.md" index 45e194e..b80fc5d 100644 --- "a/_drafts/\350\247\243\345\206\263adb push\346\227\266\345\207\272\347\216\260\347\232\204"Read-only file system"\351\227\256\351\242\230.md" +++ "b/_drafts/Android/\350\247\243\345\206\263adb push\346\227\266\345\207\272\347\216\260\347\232\204"Read-only file system"\351\227\256\351\242\230.md" @@ -1,9 +1,3 @@ -欢迎和大家交流技术相关问题: -邮箱: jiangxinnju@163.com -博客园地址: http://www.cnblogs.com/jiangxinnju -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju - 出现`Read-only file system`问题,不是因为文件或者文件夹的权限不对,而是要push的目录对应的分区是以只读方式挂载的,网上给出的解决办法是重新以读写方式挂载对应分区,以`/system`分区为例,使用命令:`mount -o remount rw /system`,当然如果你想重新挂载系统分区需要有root权限。 diff --git "a/_drafts/ApkToolBoxGUI 0.0.8\345\217\221\345\270\203\344\272\206\357\274\201\357\274\201.md" "b/_drafts/ApkToolBoxGUI 0.0.8\345\217\221\345\270\203\344\272\206\357\274\201\357\274\201.md" deleted file mode 100644 index b27ae8b..0000000 --- "a/_drafts/ApkToolBoxGUI 0.0.8\345\217\221\345\270\203\344\272\206\357\274\201\357\274\201.md" +++ /dev/null @@ -1,149 +0,0 @@ -GitHub: -Gitee: - -APKToolBoxGUI是一个程序员常用的小工具合集,有个比较友好的交互界面。主要包含编码转换,时间戳转换,颜色拾取器,颜色转换,重复文件查找,批量文件重命名,文件摘要检查等。另外还有些专门为Android开发定制的小工具,比如带界面的Monkey,国际化语言批量处理等。 - -## Why you should try - -* Open source forever -* More powerful features -* Easier to use -* Update more frequently - -## Features - -### File - -#### Convert between different character encodings - -* 支持`UTF-8`,`GB2312`,`GBK`,`Big5`等上百种编码格式间的互相转换 -* 支持多文件夹、多文件批量转换 -* 支持源文件编码自动识别,自动识别采用多引擎方案,识别率高 - -类似工具: - -* 元宝文件编码转换器: -* UltraCodingSwitch: - -![FileEncoding](https://raw.githubusercontent.com/wiki/jiangxincode/ApkToolBoxGUI/FileEncoding_01.png) - -#### Convert between different OS types - -![OSType](https://raw.githubusercontent.com/wiki/jiangxincode/ApkToolBoxGUI/OSType_01.png) - -#### Convert between Simplified Chinese and Traditional Chinese - -![SimpleTraditional](https://raw.githubusercontent.com/wiki/jiangxincode/ApkToolBoxGUI/SimpleTraditional_01.png) - -#### Check files digest - -![CheckDigest](https://raw.githubusercontent.com/wiki/jiangxincode/ApkToolBoxGUI/CheckDigest_01.png) - -#### Find duplicated files(Not Finished) - -![DuplicateFile](https://raw.githubusercontent.com/wiki/jiangxincode/ApkToolBoxGUI/DuplicateFile_01.png) -![DuplicateFile](https://raw.githubusercontent.com/wiki/jiangxincode/ApkToolBoxGUI/DuplicateFile_02.png) - -类似工具: - -RenameIt: - -### Convert - -#### Convert between timestamp and formatted time - -![Timestamp](https://raw.githubusercontent.com/wiki/jiangxincode/ApkToolBoxGUI/Timestamp_01.png) - -#### Convert between color formats - -Convert between common color formats: `RGB`/`HEX`/`CMYK`/`HSB`(`HSV`) - -![ColorConvert](https://raw.githubusercontent.com/wiki/jiangxincode/ApkToolBoxGUI/ColorConvert_01.png) - -类似工具: - -* -* -* -* - -#### Color picker - -A useful little color picker that grabs the pixel under your mouse and transforms it into a number of different color formats. You can use the built-in magnifier to zoom in on your screen, click on a color value to copy it directly to the clipboard. - -类似工具: - -* ColorPix: - -![ColorPicker](https://raw.githubusercontent.com/wiki/jiangxincode/ApkToolBoxGUI/ColorPicker_01.png) - -#### Convert between different base - -![BaseConvert](https://raw.githubusercontent.com/wiki/jiangxincode/ApkToolBoxGUI/BaseConvert_01.png) - -#### Convert between Chinese character and Unicode character - -### Reverse - -Using third-party tools to decompile package like jar, aar, war, apk, dex and so on. - -类似工具: - -* I18NTools: -* TextTools: -* ApkToolBox(C#): -* ApkToolBox(PowerShell): -* APKDB(安卓逆向助手): -* APKIDE(改之理): -* ApkToolkit: -* Android Killer: - -| Name | Version | Website | License -| ------ | ------ | ------ | ------ | -| Apktool | v2.5.0 | | Apache 2.0 | -| GD-GUI | 1.6.6 | | GNU GPL v3 | -| JADX-GUI | v1.2.0 | | Apache 2.0 | -| ApkSigner | 1.3 | | Apache 2.0 | -| AXMLPrinter3 | 0.0.1-SNAPSHOT | | Apache 2.0 | - -### SnapShot - -### Dumpsys - -* adb shell dumpsys alarm - -### Test - -### I18N - -#### Copy Items - -Copy some `` in strings.xml in the `value[.*]` directory of the [A directory] to the strings.xml in the `value[.*]` directory of the [B directory]. It is mainly used to merge translations into several code branches. - -#### Replace Items - -Replace some `` in strings.xml in the `value[.*]` directory of the [A directory] to the strings.xml in the `value[.*]` directory of the [B directory]. It is mainly used to merge translations into several code branches. - -#### Delete Items - -Delete some `` in strings.xml in the `value[.*]` directory of the [A directory] - -#### Find the longest - -Find the longest translation of a ``. Primarily for finding cuts or line breaks. - -## License - -* Apache License V2.0 - -## Contributing - -Any contributing is welcomed. - -1. Fork repository -2. Make changes -3. Ensure tests pass (or hopefully adding tests!) -4. Submit pull request/issue - -* build binary: mvn clean package -* build project documentation: mvn clean package site \ No newline at end of file diff --git "a/_drafts/C_C++\345\244\247\346\225\260\345\272\223\347\256\200\344\273\213.md" "b/_drafts/C_C++\345\244\247\346\225\260\345\272\223\347\256\200\344\273\213.md" deleted file mode 100644 index d6d453d..0000000 --- "a/_drafts/C_C++\345\244\247\346\225\260\345\272\223\347\256\200\344\273\213.md" +++ /dev/null @@ -1,31 +0,0 @@ -在网络安全技术领域中各种加密解密算法的软件实现上始终有一个共同的问题就是如何在普通的PC机上实现大数的运算。我们日常生活中所应用的PC机内部字长多是32位或64位,但是在各种加密解密的算法中为了达到一定的安全强度,都是要求在128位、512位或者是1024位这样的字长下进行加减乘除模逆等各种数学运算,我们称为大数运算。在这样的前提下,如何在PC机上快速高效的实现大数运算就很自然的成为了在PC机上实现加密解密算法最为基础和重要的问题。像Python、Lisp等语言都内建了大数计算机制,但是像C/C++语言既没有内建大数运算机制也没有对应的标准库实现。 - -为了解决C/C++大数运算的问题,许多优秀的大数运算库随之出现。下面对几种优秀的大数库进行简单的介绍: - -GMP:GMP大数库是GNU项目的一部分,诞生于1991年。作为一个任意精度的大整数运算库,它包括了任意精度的整数、浮点数的各种基本运算操作。它是一个C语言的库,但是官方提供了C++的包装类,主要的应用方向是密码学、网络安全、代数系统、计算科学等。GMP库的运行速度非常快,它的官方网站上称自己为地球上最快的大数库,但是GMP库所提供的只是数学运算功能,并没有密码学相关的高级功能。(注:GMP安装如果出现了问题,可能是安装包所在目录太深了,试着换个目录重新安装下) - -Miracl:Miracl库是Shamus Software Ltd开发的一个大数库,它的使用许可针对教育科学研究或者非商业目的的应用是免费的。它是一个C语言的库,同时提供了几个较为简单的c++包装类。在功能上它不但提供了高精度的大整数和分数的各种数学运算操作而且提供了很多密码学算法中的功能模块,如SHA、AES、DSA等中的一些底层操作。最为特别的是它还提供了很多椭圆曲线密码体制中的底层功能模块。由于Miracl库的内部实现采用了很多的汇编代码,故运行速度也非常快。 - -Crypto++:Crypto++库是一个开源项目。由于它是一个纯C++实现的库,所以应用非常的方便,库的结构清晰,文档也很健全。Crypto++库提供了很多密码学算法的实现。 - -OpenSSL:OpenSSL是一个开放源代码的实现了SSL及相关加密技术的软件包,由加拿大的Eric Yang等发起编写的。它可以实现消息摘要、文件的加密和解密、数字证书、数字签名和随机数字等。它的主要用途并不是大数库,而是SSL协议的实现和应用,但是其中也有一些关于大整数的功能,此外它也是基于C语言。 - -下面是一些常用的大数运算库的地址(有些虽然不是专门的大数运算库,但是带有相关的库) - -Crypto++: - -MIRACL: - -GNU MP: - -Piologie: - -cryptlib: - -RSAEuro: - -OpenSSL: - -RSARef: - -GInt:(Delphi) \ No newline at end of file diff --git "a/_drafts/ACM\347\253\236\350\265\233\344\271\213\350\276\223\345\205\245\350\276\223\345\207\272\357\274\210\344\273\245C\344\270\216C++\344\270\272\344\276\213\357\274\211.md" "b/_drafts/C_Cpp/ACM\347\253\236\350\265\233\344\271\213\350\276\223\345\205\245\350\276\223\345\207\272\357\274\210\344\273\245C\344\270\216C++\344\270\272\344\276\213\357\274\211.md" similarity index 100% rename from "_drafts/ACM\347\253\236\350\265\233\344\271\213\350\276\223\345\205\245\350\276\223\345\207\272\357\274\210\344\273\245C\344\270\216C++\344\270\272\344\276\213\357\274\211.md" rename to "_drafts/C_Cpp/ACM\347\253\236\350\265\233\344\271\213\350\276\223\345\205\245\350\276\223\345\207\272\357\274\210\344\273\245C\344\270\216C++\344\270\272\344\276\213\357\274\211.md" diff --git "a/_drafts/C++\344\273\216\351\224\256\347\233\230\350\276\223\345\205\245\346\226\207\344\273\266\347\273\223\346\235\237\347\254\246.md" "b/_drafts/C_Cpp/C++\344\273\216\351\224\256\347\233\230\350\276\223\345\205\245\346\226\207\344\273\266\347\273\223\346\235\237\347\254\246.md" similarity index 100% rename from "_drafts/C++\344\273\216\351\224\256\347\233\230\350\276\223\345\205\245\346\226\207\344\273\266\347\273\223\346\235\237\347\254\246.md" rename to "_drafts/C_Cpp/C++\344\273\216\351\224\256\347\233\230\350\276\223\345\205\245\346\226\207\344\273\266\347\273\223\346\235\237\347\254\246.md" diff --git "a/_drafts/C++\347\274\226\350\257\221\351\224\231\350\257\257cannot have cv-qualifier.md" "b/_drafts/C_Cpp/C++\347\274\226\350\257\221\351\224\231\350\257\257cannot have cv-qualifier.md" similarity index 100% rename from "_drafts/C++\347\274\226\350\257\221\351\224\231\350\257\257cannot have cv-qualifier.md" rename to "_drafts/C_Cpp/C++\347\274\226\350\257\221\351\224\231\350\257\257cannot have cv-qualifier.md" diff --git "a/_drafts/C++\350\257\255\350\250\200\344\270\255cin cin.getline cin.get getline gets getchar \347\232\204\347\224\250\346\263\225\345\256\236\344\276\213.md" "b/_drafts/C_Cpp/C++\350\257\255\350\250\200\344\270\255cin cin.getline cin.get getline gets getchar \347\232\204\347\224\250\346\263\225\345\256\236\344\276\213.md" similarity index 100% rename from "_drafts/C++\350\257\255\350\250\200\344\270\255cin cin.getline cin.get getline gets getchar \347\232\204\347\224\250\346\263\225\345\256\236\344\276\213.md" rename to "_drafts/C_Cpp/C++\350\257\255\350\250\200\344\270\255cin cin.getline cin.get getline gets getchar \347\232\204\347\224\250\346\263\225\345\256\236\344\276\213.md" diff --git "a/_drafts/C_C++\344\270\255\347\232\204abort\343\200\201atexit\343\200\201exit\345\222\214_Exit.md" "b/_drafts/C_Cpp/C_C++\344\270\255\347\232\204abort\343\200\201atexit\343\200\201exit\345\222\214_Exit.md" similarity index 100% rename from "_drafts/C_C++\344\270\255\347\232\204abort\343\200\201atexit\343\200\201exit\345\222\214_Exit.md" rename to "_drafts/C_Cpp/C_C++\344\270\255\347\232\204abort\343\200\201atexit\343\200\201exit\345\222\214_Exit.md" diff --git "a/_drafts/Code Blocks+gtest\347\216\257\345\242\203\351\205\215\347\275\256.md" "b/_drafts/C_Cpp/Code Blocks+gtest\347\216\257\345\242\203\351\205\215\347\275\256.md" similarity index 100% rename from "_drafts/Code Blocks+gtest\347\216\257\345\242\203\351\205\215\347\275\256.md" rename to "_drafts/C_Cpp/Code Blocks+gtest\347\216\257\345\242\203\351\205\215\347\275\256.md" diff --git "a/_drafts/C\350\257\255\350\250\200\344\270\255\351\232\217\346\234\272\346\225\260\347\233\270\345\205\263\351\227\256\351\242\230.md" "b/_drafts/C_Cpp/C\350\257\255\350\250\200\344\270\255\351\232\217\346\234\272\346\225\260\347\233\270\345\205\263\351\227\256\351\242\230.md" similarity index 100% rename from "_drafts/C\350\257\255\350\250\200\344\270\255\351\232\217\346\234\272\346\225\260\347\233\270\345\205\263\351\227\256\351\242\230.md" rename to "_drafts/C_Cpp/C\350\257\255\350\250\200\344\270\255\351\232\217\346\234\272\346\225\260\347\233\270\345\205\263\351\227\256\351\242\230.md" diff --git "a/_drafts/const \344\270\215\345\206\215\350\277\267\350\214\253.md" "b/_drafts/C_Cpp/const \344\270\215\345\206\215\350\277\267\350\214\253.md" similarity index 100% rename from "_drafts/const \344\270\215\345\206\215\350\277\267\350\214\253.md" rename to "_drafts/C_Cpp/const \344\270\215\345\206\215\350\277\267\350\214\253.md" diff --git "a/_drafts/\345\261\217\345\271\225\350\276\223\345\207\272VS\346\226\207\344\273\266\350\276\223\345\207\272.md" "b/_drafts/C_Cpp/\345\261\217\345\271\225\350\276\223\345\207\272VS\346\226\207\344\273\266\350\276\223\345\207\272.md" similarity index 100% rename from "_drafts/\345\261\217\345\271\225\350\276\223\345\207\272VS\346\226\207\344\273\266\350\276\223\345\207\272.md" rename to "_drafts/C_Cpp/\345\261\217\345\271\225\350\276\223\345\207\272VS\346\226\207\344\273\266\350\276\223\345\207\272.md" diff --git "a/_drafts/\347\224\261\345\207\275\346\225\260clock\346\203\263\345\210\260\347\232\204.md" "b/_drafts/C_Cpp/\347\224\261\345\207\275\346\225\260clock\346\203\263\345\210\260\347\232\204.md" similarity index 100% rename from "_drafts/\347\224\261\345\207\275\346\225\260clock\346\203\263\345\210\260\347\232\204.md" rename to "_drafts/C_Cpp/\347\224\261\345\207\275\346\225\260clock\346\203\263\345\210\260\347\232\204.md" diff --git "a/_drafts/\347\274\226\347\250\213\350\216\267\345\276\227CPU\347\232\204\344\270\273\351\242\221.md" "b/_drafts/C_Cpp/\347\274\226\347\250\213\350\216\267\345\276\227CPU\347\232\204\344\270\273\351\242\221.md" similarity index 100% rename from "_drafts/\347\274\226\347\250\213\350\216\267\345\276\227CPU\347\232\204\344\270\273\351\242\221.md" rename to "_drafts/C_Cpp/\347\274\226\347\250\213\350\216\267\345\276\227CPU\347\232\204\344\270\273\351\242\221.md" diff --git "a/_drafts/(\350\275\254)SQLServer\345\256\236\344\276\213\350\256\262\350\247\243.md" "b/_drafts/Database/(\350\275\254)SQLServer\345\256\236\344\276\213\350\256\262\350\247\243.md" similarity index 100% rename from "_drafts/(\350\275\254)SQLServer\345\256\236\344\276\213\350\256\262\350\247\243.md" rename to "_drafts/Database/(\350\275\254)SQLServer\345\256\236\344\276\213\350\256\262\350\247\243.md" diff --git "a/_drafts/DB2\345\270\270\347\224\250\350\257\255\345\217\245.md" "b/_drafts/Database/DB2\345\270\270\347\224\250\350\257\255\345\217\245.md" similarity index 90% rename from "_drafts/DB2\345\270\270\347\224\250\350\257\255\345\217\245.md" rename to "_drafts/Database/DB2\345\270\270\347\224\250\350\257\255\345\217\245.md" index 3af4c9e..9831c0f 100644 --- "a/_drafts/DB2\345\270\270\347\224\250\350\257\255\345\217\245.md" +++ "b/_drafts/Database/DB2\345\270\270\347\224\250\350\257\255\345\217\245.md" @@ -1,9 +1,3 @@ -欢迎和大家交流技术相关问题: -邮箱: jiangxinnju@163.com -博客园地址: http://www.cnblogs.com/jiangxinnju -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju - ```sql CREATE TABLE STAFF_BAK LIKE STAFF; diff --git "a/_drafts/MYSQL\345\270\270\350\247\201\351\224\231\350\257\257\345\217\212\345\205\266\350\247\243\345\206\263\346\226\271\345\274\217.md" "b/_drafts/Database/MYSQL\345\270\270\350\247\201\351\224\231\350\257\257\345\217\212\345\205\266\350\247\243\345\206\263\346\226\271\345\274\217.md" similarity index 93% rename from "_drafts/MYSQL\345\270\270\350\247\201\351\224\231\350\257\257\345\217\212\345\205\266\350\247\243\345\206\263\346\226\271\345\274\217.md" rename to "_drafts/Database/MYSQL\345\270\270\350\247\201\351\224\231\350\257\257\345\217\212\345\205\266\350\247\243\345\206\263\346\226\271\345\274\217.md" index d09a4da..89cd1ad 100644 --- "a/_drafts/MYSQL\345\270\270\350\247\201\351\224\231\350\257\257\345\217\212\345\205\266\350\247\243\345\206\263\346\226\271\345\274\217.md" +++ "b/_drafts/Database/MYSQL\345\270\270\350\247\201\351\224\231\350\257\257\345\217\212\345\205\266\350\247\243\345\206\263\346\226\271\345\274\217.md" @@ -1,8 +1,3 @@ -欢迎和大家交流技术相关问题: -邮箱: jiangxinnju@163.com -博客园地址: http://www.cnblogs.com/jiangxinnju -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju # ERROR 1130: Host 10.0.0.1 is not allowed to connect to this MySQL server diff --git "a/_drafts/MySQL\351\273\230\350\256\244\346\225\260\346\215\256\345\272\223.md" "b/_drafts/Database/MySQL\351\273\230\350\256\244\346\225\260\346\215\256\345\272\223.md" similarity index 88% rename from "_drafts/MySQL\351\273\230\350\256\244\346\225\260\346\215\256\345\272\223.md" rename to "_drafts/Database/MySQL\351\273\230\350\256\244\346\225\260\346\215\256\345\272\223.md" index 2afbf1c..6eff9dd 100644 --- "a/_drafts/MySQL\351\273\230\350\256\244\346\225\260\346\215\256\345\272\223.md" +++ "b/_drafts/Database/MySQL\351\273\230\350\256\244\346\225\260\346\215\256\345\272\223.md" @@ -1,8 +1,3 @@ -欢迎和大家交流技术相关问题: -邮箱: jiangxinnju@163.com -博客园地址: http://www.cnblogs.com/jiangxinnju -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju INFORMATION_SCHEMA:提供了访问数据库元数据的方式。 元数据是关于数据的数据,如数据库名、表名、列的数据类型或访问权限等。有些时候用于表述该信息的其他术语包括“数据词典”和“系统目录”。你可以讲INFORMATION_SCHEMA看成一个信息数据库,其中保存着关于MySQL服务器所维护的所有其他数据库的信息。在INFORMATION_SCHEMA中,有数个只读表。它们实际上是视图,而不是基本表,因此你将无法看到与之相关的任何文件。每位MySQL用户均有权访问这些表,但仅限于表中的特定行,在这类行中含有用户具有恰当访问权限的对象。 diff --git "a/_drafts/Oracle\344\270\255session\345\222\214processes\347\232\204\350\256\276\347\275\256.md" "b/_drafts/Database/Oracle\344\270\255session\345\222\214processes\347\232\204\350\256\276\347\275\256.md" similarity index 88% rename from "_drafts/Oracle\344\270\255session\345\222\214processes\347\232\204\350\256\276\347\275\256.md" rename to "_drafts/Database/Oracle\344\270\255session\345\222\214processes\347\232\204\350\256\276\347\275\256.md" index 4466f7d..3eb9fe0 100644 --- "a/_drafts/Oracle\344\270\255session\345\222\214processes\347\232\204\350\256\276\347\275\256.md" +++ "b/_drafts/Database/Oracle\344\270\255session\345\222\214processes\347\232\204\350\256\276\347\275\256.md" @@ -1,9 +1,3 @@ -欢迎和大家交流技术相关问题: -邮箱: jiangxinnju@163.com -博客园地址: http://www.cnblogs.com/jiangxinnju -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju - * PROCESSES: http://docs.oracle.com/cd/B28359_01/server.111/b28320/initparams188.htm#sthref560 * SESSIONS: http://docs.oracle.com/cd/B28359_01/server.111/b28320/initparams220.htm#sthref647 diff --git "a/_drafts/Oracle\345\257\274\345\205\245\345\257\274\345\207\272\345\270\270\347\224\250\345\221\275\344\273\244.md" "b/_drafts/Database/Oracle\345\257\274\345\205\245\345\257\274\345\207\272\345\270\270\347\224\250\345\221\275\344\273\244.md" similarity index 100% rename from "_drafts/Oracle\345\257\274\345\205\245\345\257\274\345\207\272\345\270\270\347\224\250\345\221\275\344\273\244.md" rename to "_drafts/Database/Oracle\345\257\274\345\205\245\345\257\274\345\207\272\345\270\270\347\224\250\345\221\275\344\273\244.md" diff --git "a/_drafts/Oracle\347\263\273\347\273\237\350\241\250\346\225\264\347\220\206+\345\270\270\347\224\250SQL\350\257\255\345\217\245\346\224\266\351\233\206.md" "b/_drafts/Database/Oracle\347\263\273\347\273\237\350\241\250\346\225\264\347\220\206+\345\270\270\347\224\250SQL\350\257\255\345\217\245\346\224\266\351\233\206.md" similarity index 98% rename from "_drafts/Oracle\347\263\273\347\273\237\350\241\250\346\225\264\347\220\206+\345\270\270\347\224\250SQL\350\257\255\345\217\245\346\224\266\351\233\206.md" rename to "_drafts/Database/Oracle\347\263\273\347\273\237\350\241\250\346\225\264\347\220\206+\345\270\270\347\224\250SQL\350\257\255\345\217\245\346\224\266\351\233\206.md" index a93fd57..8e39d61 100644 --- "a/_drafts/Oracle\347\263\273\347\273\237\350\241\250\346\225\264\347\220\206+\345\270\270\347\224\250SQL\350\257\255\345\217\245\346\224\266\351\233\206.md" +++ "b/_drafts/Database/Oracle\347\263\273\347\273\237\350\241\250\346\225\264\347\220\206+\345\270\270\347\224\250SQL\350\257\255\345\217\245\346\224\266\351\233\206.md" @@ -1,8 +1,3 @@ -欢迎和大家交流技术相关问题: -邮箱: jiangxinnju@163.com -博客园地址: http://www.cnblogs.com/jiangxinnju -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju ``` -- DBA/ALL/USER/V_$/GV_$/SESSION/INDEX开头的绝大部分都是视图 diff --git "a/_drafts/SQL Server\345\270\270\347\224\250\350\257\255\345\217\245.md" "b/_drafts/Database/SQL Server\345\270\270\347\224\250\350\257\255\345\217\245.md" similarity index 96% rename from "_drafts/SQL Server\345\270\270\347\224\250\350\257\255\345\217\245.md" rename to "_drafts/Database/SQL Server\345\270\270\347\224\250\350\257\255\345\217\245.md" index b86d5ee..cefed39 100644 --- "a/_drafts/SQL Server\345\270\270\347\224\250\350\257\255\345\217\245.md" +++ "b/_drafts/Database/SQL Server\345\270\270\347\224\250\350\257\255\345\217\245.md" @@ -1,8 +1,3 @@ -欢迎和大家交流技术相关问题: -邮箱: jiangxinnju@163.com -博客园地址: http://www.cnblogs.com/jiangxinnju -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju ```SQL -- 身份证验证(SQLServer) diff --git "a/_drafts/oracle\350\241\250\347\251\272\351\227\264\344\270\215\350\266\263\347\233\270\345\205\263\351\227\256\351\242\230\350\247\243\345\206\263\345\212\236\346\263\225.md" "b/_drafts/Database/oracle\350\241\250\347\251\272\351\227\264\344\270\215\350\266\263\347\233\270\345\205\263\351\227\256\351\242\230\350\247\243\345\206\263\345\212\236\346\263\225.md" similarity index 96% rename from "_drafts/oracle\350\241\250\347\251\272\351\227\264\344\270\215\350\266\263\347\233\270\345\205\263\351\227\256\351\242\230\350\247\243\345\206\263\345\212\236\346\263\225.md" rename to "_drafts/Database/oracle\350\241\250\347\251\272\351\227\264\344\270\215\350\266\263\347\233\270\345\205\263\351\227\256\351\242\230\350\247\243\345\206\263\345\212\236\346\263\225.md" index 0a4e354..7a23ccf 100644 --- "a/_drafts/oracle\350\241\250\347\251\272\351\227\264\344\270\215\350\266\263\347\233\270\345\205\263\351\227\256\351\242\230\350\247\243\345\206\263\345\212\236\346\263\225.md" +++ "b/_drafts/Database/oracle\350\241\250\347\251\272\351\227\264\344\270\215\350\266\263\347\233\270\345\205\263\351\227\256\351\242\230\350\247\243\345\206\263\345\212\236\346\263\225.md" @@ -1,8 +1,3 @@ -欢迎和大家交流技术相关问题: -邮箱: jiangxinnju@163.com -博客园地址: http://www.cnblogs.com/jiangxinnju -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju ## oracle 临时表空间和数据表空间 diff --git "a/_drafts/oracle\350\241\250\347\251\272\351\227\264\350\241\250\345\210\206\345\214\272\350\257\246\350\247\243\345\217\212oracle\350\241\250\345\210\206\345\214\272\346\237\245\350\257\242\344\275\277\347\224\250\346\226\271\346\263\225(\350\275\254+\346\225\264\347\220\206).md" "b/_drafts/Database/oracle\350\241\250\347\251\272\351\227\264\350\241\250\345\210\206\345\214\272\350\257\246\350\247\243\345\217\212oracle\350\241\250\345\210\206\345\214\272\346\237\245\350\257\242\344\275\277\347\224\250\346\226\271\346\263\225(\350\275\254+\346\225\264\347\220\206).md" similarity index 98% rename from "_drafts/oracle\350\241\250\347\251\272\351\227\264\350\241\250\345\210\206\345\214\272\350\257\246\350\247\243\345\217\212oracle\350\241\250\345\210\206\345\214\272\346\237\245\350\257\242\344\275\277\347\224\250\346\226\271\346\263\225(\350\275\254+\346\225\264\347\220\206).md" rename to "_drafts/Database/oracle\350\241\250\347\251\272\351\227\264\350\241\250\345\210\206\345\214\272\350\257\246\350\247\243\345\217\212oracle\350\241\250\345\210\206\345\214\272\346\237\245\350\257\242\344\275\277\347\224\250\346\226\271\346\263\225(\350\275\254+\346\225\264\347\220\206).md" index 95166de..f763da8 100644 --- "a/_drafts/oracle\350\241\250\347\251\272\351\227\264\350\241\250\345\210\206\345\214\272\350\257\246\350\247\243\345\217\212oracle\350\241\250\345\210\206\345\214\272\346\237\245\350\257\242\344\275\277\347\224\250\346\226\271\346\263\225(\350\275\254+\346\225\264\347\220\206).md" +++ "b/_drafts/Database/oracle\350\241\250\347\251\272\351\227\264\350\241\250\345\210\206\345\214\272\350\257\246\350\247\243\345\217\212oracle\350\241\250\345\210\206\345\214\272\346\237\245\350\257\242\344\275\277\347\224\250\346\226\271\346\263\225(\350\275\254+\346\225\264\347\220\206).md" @@ -1,10 +1,3 @@ -欢迎和大家交流技术相关问题: -邮箱: jiangxinnju@163.com -博客园地址: http://www.cnblogs.com/jiangxinnju -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju - - 此文从以下几个方面来整理关于分区表的概念及操作: diff --git "a/_drafts/\345\246\202\344\275\225\345\273\272\347\253\213DB2\345\210\206\345\214\272\346\225\260\346\215\256\345\272\223\357\274\237\357\274\210\350\275\254\357\274\211.md" "b/_drafts/Database/\345\246\202\344\275\225\345\273\272\347\253\213DB2\345\210\206\345\214\272\346\225\260\346\215\256\345\272\223\357\274\237\357\274\210\350\275\254\357\274\211.md" similarity index 98% rename from "_drafts/\345\246\202\344\275\225\345\273\272\347\253\213DB2\345\210\206\345\214\272\346\225\260\346\215\256\345\272\223\357\274\237\357\274\210\350\275\254\357\274\211.md" rename to "_drafts/Database/\345\246\202\344\275\225\345\273\272\347\253\213DB2\345\210\206\345\214\272\346\225\260\346\215\256\345\272\223\357\274\237\357\274\210\350\275\254\357\274\211.md" index eeb7626..f60e55d 100644 --- "a/_drafts/\345\246\202\344\275\225\345\273\272\347\253\213DB2\345\210\206\345\214\272\346\225\260\346\215\256\345\272\223\357\274\237\357\274\210\350\275\254\357\274\211.md" +++ "b/_drafts/Database/\345\246\202\344\275\225\345\273\272\347\253\213DB2\345\210\206\345\214\272\346\225\260\346\215\256\345\272\223\357\274\237\357\274\210\350\275\254\357\274\211.md" @@ -1,8 +1,3 @@ -欢迎和大家交流技术相关问题: -邮箱: jiangxinnju@163.com -博客园地址: http://www.cnblogs.com/jiangxinnju -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju 原作:陈敏 2008-05-21 diff --git "a/_drafts/\345\277\230\350\256\260oracle\347\232\204sys\347\224\250\346\210\267\345\257\206\347\240\201\346\200\216\344\271\210\344\277\256\346\224\271\344\273\245\345\217\212Oracle 11g \351\273\230\350\256\244\347\224\250\346\210\267\345\220\215\345\222\214\345\257\206\347\240\201.md" "b/_drafts/Database/\345\277\230\350\256\260oracle\347\232\204sys\347\224\250\346\210\267\345\257\206\347\240\201\346\200\216\344\271\210\344\277\256\346\224\271\344\273\245\345\217\212Oracle 11g \351\273\230\350\256\244\347\224\250\346\210\267\345\220\215\345\222\214\345\257\206\347\240\201.md" similarity index 92% rename from "_drafts/\345\277\230\350\256\260oracle\347\232\204sys\347\224\250\346\210\267\345\257\206\347\240\201\346\200\216\344\271\210\344\277\256\346\224\271\344\273\245\345\217\212Oracle 11g \351\273\230\350\256\244\347\224\250\346\210\267\345\220\215\345\222\214\345\257\206\347\240\201.md" rename to "_drafts/Database/\345\277\230\350\256\260oracle\347\232\204sys\347\224\250\346\210\267\345\257\206\347\240\201\346\200\216\344\271\210\344\277\256\346\224\271\344\273\245\345\217\212Oracle 11g \351\273\230\350\256\244\347\224\250\346\210\267\345\220\215\345\222\214\345\257\206\347\240\201.md" index 1b15f81..ad7db48 100644 --- "a/_drafts/\345\277\230\350\256\260oracle\347\232\204sys\347\224\250\346\210\267\345\257\206\347\240\201\346\200\216\344\271\210\344\277\256\346\224\271\344\273\245\345\217\212Oracle 11g \351\273\230\350\256\244\347\224\250\346\210\267\345\220\215\345\222\214\345\257\206\347\240\201.md" +++ "b/_drafts/Database/\345\277\230\350\256\260oracle\347\232\204sys\347\224\250\346\210\267\345\257\206\347\240\201\346\200\216\344\271\210\344\277\256\346\224\271\344\273\245\345\217\212Oracle 11g \351\273\230\350\256\244\347\224\250\346\210\267\345\220\215\345\222\214\345\257\206\347\240\201.md" @@ -1,10 +1,3 @@ -欢迎和大家交流技术相关问题: -邮箱: jiangxinnju@163.com -博客园地址: http://www.cnblogs.com/jiangxinnju -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju - - ## 忘记除SYS、SYSTEM用户之外的用户的登录密码 diff --git "a/_drafts/\346\225\260\346\215\256\345\272\223\347\233\270\345\205\263\346\200\273\347\273\223.md" "b/_drafts/Database/\346\225\260\346\215\256\345\272\223\347\233\270\345\205\263\346\200\273\347\273\223.md" similarity index 94% rename from "_drafts/\346\225\260\346\215\256\345\272\223\347\233\270\345\205\263\346\200\273\347\273\223.md" rename to "_drafts/Database/\346\225\260\346\215\256\345\272\223\347\233\270\345\205\263\346\200\273\347\273\223.md" index 59f3c37..04e0b98 100644 --- "a/_drafts/\346\225\260\346\215\256\345\272\223\347\233\270\345\205\263\346\200\273\347\273\223.md" +++ "b/_drafts/Database/\346\225\260\346\215\256\345\272\223\347\233\270\345\205\263\346\200\273\347\273\223.md" @@ -1,8 +1,3 @@ -欢迎关注我的社交账号: - -博客园地址: http://www.cnblogs.com/jiangxinnju/p/4781259.html -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju # 通用: diff --git "a/_drafts/202110171056\345\246\202\344\275\225\345\260\206cpdetector\345\217\221\345\270\203Maven\344\276\235\350\265\226\345\210\260\344\270\255\345\244\256\344\273\223\345\272\223.md" "b/_drafts/Java/202110171056\345\246\202\344\275\225\345\260\206cpdetector\345\217\221\345\270\203Maven\344\276\235\350\265\226\345\210\260\344\270\255\345\244\256\344\273\223\345\272\223.md" similarity index 100% rename from "_drafts/202110171056\345\246\202\344\275\225\345\260\206cpdetector\345\217\221\345\270\203Maven\344\276\235\350\265\226\345\210\260\344\270\255\345\244\256\344\273\223\345\272\223.md" rename to "_drafts/Java/202110171056\345\246\202\344\275\225\345\260\206cpdetector\345\217\221\345\270\203Maven\344\276\235\350\265\226\345\210\260\344\270\255\345\244\256\344\273\223\345\272\223.md" diff --git "a/_drafts/202209041204\347\203\255\345\210\207\346\215\242Log4j\347\272\247\345\210\253\351\205\215\347\275\256.md" "b/_drafts/Java/202209041204\347\203\255\345\210\207\346\215\242Log4j\347\272\247\345\210\253\351\205\215\347\275\256.md" similarity index 100% rename from "_drafts/202209041204\347\203\255\345\210\207\346\215\242Log4j\347\272\247\345\210\253\351\205\215\347\275\256.md" rename to "_drafts/Java/202209041204\347\203\255\345\210\207\346\215\242Log4j\347\272\247\345\210\253\351\205\215\347\275\256.md" diff --git "a/_drafts/202301072303Java Swing TreeTable\346\240\267\344\276\213\346\214\207\345\257\274.md" "b/_drafts/Java/202301072303Java Swing TreeTable\346\240\267\344\276\213\346\214\207\345\257\274.md" similarity index 100% rename from "_drafts/202301072303Java Swing TreeTable\346\240\267\344\276\213\346\214\207\345\257\274.md" rename to "_drafts/Java/202301072303Java Swing TreeTable\346\240\267\344\276\213\346\214\207\345\257\274.md" diff --git "a/_drafts/20\345\210\206\351\222\237\347\220\206\346\270\205Maven\346\236\204\345\273\272\344\270\255\347\232\204\346\265\213\350\257\225\347\233\270\345\205\263\345\267\245\345\205\267\347\232\204\345\205\263\347\263\273.md" "b/_drafts/Java/20\345\210\206\351\222\237\347\220\206\346\270\205Maven\346\236\204\345\273\272\344\270\255\347\232\204\346\265\213\350\257\225\347\233\270\345\205\263\345\267\245\345\205\267\347\232\204\345\205\263\347\263\273.md" similarity index 100% rename from "_drafts/20\345\210\206\351\222\237\347\220\206\346\270\205Maven\346\236\204\345\273\272\344\270\255\347\232\204\346\265\213\350\257\225\347\233\270\345\205\263\345\267\245\345\205\267\347\232\204\345\205\263\347\263\273.md" rename to "_drafts/Java/20\345\210\206\351\222\237\347\220\206\346\270\205Maven\346\236\204\345\273\272\344\270\255\347\232\204\346\265\213\350\257\225\347\233\270\345\205\263\345\267\245\345\205\267\347\232\204\345\205\263\347\263\273.md" diff --git "a/_drafts/Calendar\347\261\273\344\270\255add_set_roll\346\226\271\346\263\225\347\232\204\345\214\272\345\210\253.md" "b/_drafts/Java/Calendar\347\261\273\344\270\255add_set_roll\346\226\271\346\263\225\347\232\204\345\214\272\345\210\253.md" similarity index 95% rename from "_drafts/Calendar\347\261\273\344\270\255add_set_roll\346\226\271\346\263\225\347\232\204\345\214\272\345\210\253.md" rename to "_drafts/Java/Calendar\347\261\273\344\270\255add_set_roll\346\226\271\346\263\225\347\232\204\345\214\272\345\210\253.md" index 93789bb..79cfa55 100644 --- "a/_drafts/Calendar\347\261\273\344\270\255add_set_roll\346\226\271\346\263\225\347\232\204\345\214\272\345\210\253.md" +++ "b/_drafts/Java/Calendar\347\261\273\344\270\255add_set_roll\346\226\271\346\263\225\347\232\204\345\214\272\345\210\253.md" @@ -1,9 +1,3 @@ -欢迎和大家交流技术相关问题: - -* 邮箱: jiangxinnju@163.com -* 博客园地址: http://www.cnblogs.com/jiangxinnju -* GitHub地址: https://github.com/jiangxincode -* 知乎地址: https://www.zhihu.com/people/jiangxinnju Calendar类中有三个方法更改日期的某个字段:set()、add() 和 roll()。 diff --git "a/_drafts/Eclipse+Spark\346\220\255\345\273\272\346\272\220\347\240\201\345\210\206\346\236\220\347\216\257\345\242\203\351\227\256\351\242\230\345\210\206\346\236\220.md" "b/_drafts/Java/Eclipse+Spark\346\220\255\345\273\272\346\272\220\347\240\201\345\210\206\346\236\220\347\216\257\345\242\203\351\227\256\351\242\230\345\210\206\346\236\220.md" similarity index 86% rename from "_drafts/Eclipse+Spark\346\220\255\345\273\272\346\272\220\347\240\201\345\210\206\346\236\220\347\216\257\345\242\203\351\227\256\351\242\230\345\210\206\346\236\220.md" rename to "_drafts/Java/Eclipse+Spark\346\220\255\345\273\272\346\272\220\347\240\201\345\210\206\346\236\220\347\216\257\345\242\203\351\227\256\351\242\230\345\210\206\346\236\220.md" index 551689e..9fa6e1f 100644 --- "a/_drafts/Eclipse+Spark\346\220\255\345\273\272\346\272\220\347\240\201\345\210\206\346\236\220\347\216\257\345\242\203\351\227\256\351\242\230\345\210\206\346\236\220.md" +++ "b/_drafts/Java/Eclipse+Spark\346\220\255\345\273\272\346\272\220\347\240\201\345\210\206\346\236\220\347\216\257\345\242\203\351\227\256\351\242\230\345\210\206\346\236\220.md" @@ -1,9 +1,3 @@ -欢迎和大家交流技术相关问题: -邮箱: jiangxinnju@163.com -博客园地址: http://www.cnblogs.com/jiangxinnju -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju - # Scala IDE complains about ‘... is cross-compiled with an incompatible version of Scala ...’ diff --git "a/_drafts/Eclipse\344\270\255Ant\347\232\204\351\205\215\347\275\256\344\270\216\346\265\213\350\257\225 \350\275\254.md" "b/_drafts/Java/Eclipse\344\270\255Ant\347\232\204\351\205\215\347\275\256\344\270\216\346\265\213\350\257\225 \350\275\254.md" similarity index 96% rename from "_drafts/Eclipse\344\270\255Ant\347\232\204\351\205\215\347\275\256\344\270\216\346\265\213\350\257\225 \350\275\254.md" rename to "_drafts/Java/Eclipse\344\270\255Ant\347\232\204\351\205\215\347\275\256\344\270\216\346\265\213\350\257\225 \350\275\254.md" index 6fa5a53..1306fc1 100644 --- "a/_drafts/Eclipse\344\270\255Ant\347\232\204\351\205\215\347\275\256\344\270\216\346\265\213\350\257\225 \350\275\254.md" +++ "b/_drafts/Java/Eclipse\344\270\255Ant\347\232\204\351\205\215\347\275\256\344\270\216\346\265\213\350\257\225 \350\275\254.md" @@ -1,9 +1,3 @@ -欢迎关注我的社交账号: - -博客园地址: http://www.cnblogs.com/jiangxinnju/p/4781259.html -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju - Ant是Java平台下非常棒的批处理命令执行程序,能非常方便地自动完成编译,测试,打包,部署等等一系列任务,大大提高开发效率。如果你现在还没有开始使用Ant,那就要赶快开始学习使用,使自己的开发水平上一个新台阶。Eclipse中已经集成了Ant,我们可以直接在Eclipse中运行Ant。以前面建立的Hello工程为例,创建以下目录结构: diff --git "a/_drafts/Eclipse\345\205\250\351\235\242\346\217\220\351\200\237\345\260\217\346\212\200\345\267\247.md" "b/_drafts/Java/Eclipse\345\205\250\351\235\242\346\217\220\351\200\237\345\260\217\346\212\200\345\267\247.md" similarity index 97% rename from "_drafts/Eclipse\345\205\250\351\235\242\346\217\220\351\200\237\345\260\217\346\212\200\345\267\247.md" rename to "_drafts/Java/Eclipse\345\205\250\351\235\242\346\217\220\351\200\237\345\260\217\346\212\200\345\267\247.md" index a11f620..d0efb2d 100644 --- "a/_drafts/Eclipse\345\205\250\351\235\242\346\217\220\351\200\237\345\260\217\346\212\200\345\267\247.md" +++ "b/_drafts/Java/Eclipse\345\205\250\351\235\242\346\217\220\351\200\237\345\260\217\346\212\200\345\267\247.md" @@ -1,12 +1,5 @@ 转自:http://rongmayisheng.com/post/eclipse%E5%85%A8%E9%9D%A2%E6%8F%90%E9%80%9F -欢迎关注我的社交账号: - -博客园地址: http://www.cnblogs.com/jiangxinnju -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju - - 你是否经常在等待eclipse的一些操作完成? 如果你看到这里,说明答案是yes。如果你苦于eclipse中响应很慢的功能,并且想给eclipse提速让开发更舒服些,就请看看下面的内容。 diff --git "a/_drafts/Eclipse\347\233\270\345\205\263\351\227\256\351\242\230.md" "b/_drafts/Java/Eclipse\347\233\270\345\205\263\351\227\256\351\242\230.md" similarity index 99% rename from "_drafts/Eclipse\347\233\270\345\205\263\351\227\256\351\242\230.md" rename to "_drafts/Java/Eclipse\347\233\270\345\205\263\351\227\256\351\242\230.md" index 8a55e32..61eb505 100644 --- "a/_drafts/Eclipse\347\233\270\345\205\263\351\227\256\351\242\230.md" +++ "b/_drafts/Java/Eclipse\347\233\270\345\205\263\351\227\256\351\242\230.md" @@ -1,7 +1,3 @@ -博客园地址: http://www.cnblogs.com/jiangxinnju -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju - ## MANIFEST.MF文件 diff --git "a/_drafts/Eclipse\350\277\234\347\250\213\350\260\203\350\257\225\345\207\272\347\216\260\342\200\234JDWP Transport dt_socket failed to initialize\342\200\235\347\232\204\350\247\243\345\206\263\346\226\271\346\241\210.md" "b/_drafts/Java/Eclipse\350\277\234\347\250\213\350\260\203\350\257\225\345\207\272\347\216\260\342\200\234JDWP Transport dt_socket failed to initialize\342\200\235\347\232\204\350\247\243\345\206\263\346\226\271\346\241\210.md" similarity index 90% rename from "_drafts/Eclipse\350\277\234\347\250\213\350\260\203\350\257\225\345\207\272\347\216\260\342\200\234JDWP Transport dt_socket failed to initialize\342\200\235\347\232\204\350\247\243\345\206\263\346\226\271\346\241\210.md" rename to "_drafts/Java/Eclipse\350\277\234\347\250\213\350\260\203\350\257\225\345\207\272\347\216\260\342\200\234JDWP Transport dt_socket failed to initialize\342\200\235\347\232\204\350\247\243\345\206\263\346\226\271\346\241\210.md" index c74e66b..1817f73 100644 --- "a/_drafts/Eclipse\350\277\234\347\250\213\350\260\203\350\257\225\345\207\272\347\216\260\342\200\234JDWP Transport dt_socket failed to initialize\342\200\235\347\232\204\350\247\243\345\206\263\346\226\271\346\241\210.md" +++ "b/_drafts/Java/Eclipse\350\277\234\347\250\213\350\260\203\350\257\225\345\207\272\347\216\260\342\200\234JDWP Transport dt_socket failed to initialize\342\200\235\347\232\204\350\247\243\345\206\263\346\226\271\346\241\210.md" @@ -1,8 +1,3 @@ -欢迎关注我的社交账号: - -博客园地址: http://www.cnblogs.com/jiangxinnju/p/4781259.html -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju 工作中经常需要使用Eclipse远程连接Tomcat,调试Web应用程序,关于如何进行远程调试,本文不再赘述,可以参考下面的文章: diff --git "a/_drafts/FindBugs\350\257\246\350\247\243.md" "b/_drafts/Java/FindBugs\350\257\246\350\247\243.md" similarity index 93% rename from "_drafts/FindBugs\350\257\246\350\247\243.md" rename to "_drafts/Java/FindBugs\350\257\246\350\247\243.md" index 44ea32f..a365c2f 100644 --- "a/_drafts/FindBugs\350\257\246\350\247\243.md" +++ "b/_drafts/Java/FindBugs\350\257\246\350\247\243.md" @@ -1,9 +1,3 @@ -欢迎和大家交流技术相关问题: -邮箱: jiangxinnju@163.com -博客园地址: http://www.cnblogs.com/jiangxinnju -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju - ## Find bugs误报告警的消除方法 diff --git "a/_drafts/HBase\344\273\213\347\273\215.md" "b/_drafts/Java/HBase\344\273\213\347\273\215.md" similarity index 98% rename from "_drafts/HBase\344\273\213\347\273\215.md" rename to "_drafts/Java/HBase\344\273\213\347\273\215.md" index fb16916..40e9600 100644 --- "a/_drafts/HBase\344\273\213\347\273\215.md" +++ "b/_drafts/Java/HBase\344\273\213\347\273\215.md" @@ -1,10 +1,3 @@ -欢迎和大家交流技术相关问题: -邮箱: jiangxinnju@163.com -博客园地址: http://www.cnblogs.com/jiangxinnju -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju - - 转自:http://jiajun.iteye.com/blog/899632 diff --git "a/_drafts/Hibernate\344\270\216autoCommit.md" "b/_drafts/Java/Hibernate\344\270\216autoCommit.md" similarity index 100% rename from "_drafts/Hibernate\344\270\216autoCommit.md" rename to "_drafts/Java/Hibernate\344\270\216autoCommit.md" diff --git "a/_drafts/Java/JNI\344\275\277\347\224\250\346\226\271\346\263\225.md" "b/_drafts/Java/JNI\344\275\277\347\224\250\346\226\271\346\263\225.md" new file mode 100644 index 0000000..0810570 --- /dev/null +++ "b/_drafts/Java/JNI\344\275\277\347\224\250\346\226\271\346\263\225.md" @@ -0,0 +1,128 @@ +# JNI使用方法 + +Java通过JNI调用本地方法,而本地方法是以库文件的形式存放的(在Windows平台下是dll文件形式,在UNIX机器上是so文件形式)。通过调用本地的库文件的内部方法,使Java可以实现和本地机器的紧密联系,调用系统级的各接口方法。 + +使用的简单流程: + +## Java中所需要做的工作 + +1、在Java程序中,首先需要在类中声明所调用的库名称,如 + +```java +static { + System.loadLibrary(“testdll”); +} +``` + +这里库的扩展名可以不用写出来,究竟是DLL还是SO,由系统自己判断。 + +2、还需要对将要调用的方法做本地声明,关键字为native。且只需要声明,而不需要具体实现 + +```java +public native static void set(int i); +public native static int get(); +``` + +得到的Java程序如下:TestJNI.java + +```java +public class TestJNI { + static { + System.loadLibrary("testdll"); + } + public native static int get(); + public native static void set(int i); + public static void main(String[] args) { + testdll test = new testdll(); + test.set(10); + System.out.println(test.get()); + } +} +``` + +3、使用`javac TestJNI.java`编译它,得到`TestJNI.class`,再用`javah TestJNI`,则会在当前目录下生成`TestJNI.h`文件。 + +注意:用`javah`命令生成相应h头文件的时候有可能会出现无法找到相应class文件的错误,建议使用如下格式在控制台生成.h头文件: `javah -classpath . testdll` + +## C/C++中所需要做的工作 + +1、打开VC++,新建工程->win32 DLL,在向导中选择空工程。然后编写testdll.cpp文件 + +```cpp +#include +#include "TestJNI.h" + +int i = 0; + +JNIEXPORT jint JNICALL Java_testdll_get (JNIEnv *, jclass) +{ + return i; +} +JNIEXPORT void JNICALL Java_testdll_set (JNIEnv *, jclass, jint j) +{ + i = j; +} +int WINAPI DllMain (HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved) +{ + return TRUE; +} +``` + +说明: + +* 必须有DllMain函数,并且DllMain必须返回TRUE,否则系统将终止程序并弹出一个“启动程序时出错”对话框,其他两个为Java中调用的两个函数的实现,解释见最后的补充 +* 把Java编译生成的TestJNI.h加入到C/C++的工程中,否则上面代码的include "TestJNI.h"无法引用到 + +2、编译上面的testdll.cpp文件,可以生成testdll.dll文件,但是这过程通常会出现:在TestJNI.h中找不到jni.h + +解决方法:把Javajdk中的下面这些.h文件复制一份到Microsoft Visual Studio的安装目录下的\VC\include文件夹下,例如笔者的是`D:\Program Files\Microsoft Visual Studio 10.0\VC\include` + +* \jdk\include\jni.h +* \jdk\include\win32\jawt_md.h +* \jdk\include\win32\jni_md.h + +## 结合起来 + +1、生成的DLL文件的名称要跟Java代码中需要调用的testdll一样,如果不同可以修改文件名,这里是testdll.dll + +2、然后把该dll文件拷贝到TestJNI.class文件的目录下。 + +3、使用java testdll 运行它,就可以观察到结果 + +说明:如果运行java testdll 出现错误:“ 找不到或无法加载主类”,可能是环境变量的classpath键值的分号;掉了,一般掉了这个就会出现这种问题 + +## 最后对TestJNI.h的内容理解补充 + +```cpp +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include +/* Header for class TestJNI*/ +#ifndef _Included_TestJNI +#define _Included_TestJNI +#ifdef __cplusplus +extern "C" { +#endif +/* +* Class: TestJNI +* Method: get +* Signature: ()I +*/ +JNIEXPORT jint JNICALL Java_TestJNI_get (JNIEnv *, jclass); +/* +* Class: TestJNI +* Method: set +* Signature: (I)V +*/ +JNIEXPORT void JNICALL Java_TestJNI_set (JNIEnv *, jclass, jint); +#ifdef __cplusplus +} +#endif +#endif +``` + +在具体实现的时候,我们只关心两个函数原型 + +* `JNIEXPORT jint JNICALL Java_TestJNI_get (JNIEnv *, jclass);` +* `JNIEXPORT void JNICALL Java_TestJNI_set (JNIEnv *, jclass, jint);` + +这里JNIEXPORT和JNICALL都是JNI的关键字,表示此函数是要被JNI调用的。而jint是以JNI为中介使JAVA的int类型与本地的int沟通的一种类型,我们可以视而不见,就当做int使用。函数的名称是JAVA_再加上java程序的package路径再加函数名组成的。参数中,我们也只需要关心在JAVA程序中存在的参数,至于JNIEnv*和jclass我们一般没有必要去碰它。 diff --git "a/_drafts/JUnit org.junit.runner.Request.classWithoutSuiteMethod\350\247\243\345\206\263\346\226\271\346\263\225.md" "b/_drafts/Java/JUnit org.junit.runner.Request.classWithoutSuiteMethod\350\247\243\345\206\263\346\226\271\346\263\225.md" similarity index 82% rename from "_drafts/JUnit org.junit.runner.Request.classWithoutSuiteMethod\350\247\243\345\206\263\346\226\271\346\263\225.md" rename to "_drafts/Java/JUnit org.junit.runner.Request.classWithoutSuiteMethod\350\247\243\345\206\263\346\226\271\346\263\225.md" index 132b6f0..d32f600 100644 --- "a/_drafts/JUnit org.junit.runner.Request.classWithoutSuiteMethod\350\247\243\345\206\263\346\226\271\346\263\225.md" +++ "b/_drafts/Java/JUnit org.junit.runner.Request.classWithoutSuiteMethod\350\247\243\345\206\263\346\226\271\346\263\225.md" @@ -1,9 +1,3 @@ -欢迎和大家交流技术相关问题: -邮箱: jiangxinnju@163.com -博客园地址: http://www.cnblogs.com/jiangxinnju -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju - ```java java.lang.NoSuchMethodError: org.junit.runner.Request.classWithoutSuiteMethod(Ljava/lang/Class;)Lorg/junit/runner/Request; diff --git "a/_drafts/JVM\350\260\203\344\274\230\346\200\273\347\273\223\357\274\210\350\275\254\357\274\211.md" "b/_drafts/Java/JVM\350\260\203\344\274\230\346\200\273\347\273\223\357\274\210\350\275\254\357\274\211.md" similarity index 100% rename from "_drafts/JVM\350\260\203\344\274\230\346\200\273\347\273\223\357\274\210\350\275\254\357\274\211.md" rename to "_drafts/Java/JVM\350\260\203\344\274\230\346\200\273\347\273\223\357\274\210\350\275\254\357\274\211.md" diff --git "a/_drafts/Java\346\235\202\351\241\271.md" "b/_drafts/Java/Java\346\235\202\351\241\271.md" similarity index 99% rename from "_drafts/Java\346\235\202\351\241\271.md" rename to "_drafts/Java/Java\346\235\202\351\241\271.md" index 0bad7d1..b0a7486 100644 --- "a/_drafts/Java\346\235\202\351\241\271.md" +++ "b/_drafts/Java/Java\346\235\202\351\241\271.md" @@ -1,10 +1,3 @@ -欢迎和大家交流技术相关问题: -邮箱: jiangxinnju@163.com -博客园地址: http://www.cnblogs.com/jiangxinnju -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju - - # JDK diff --git "a/_drafts/Java\350\277\234\347\250\213\350\260\203\350\257\225\344\273\243\347\240\201\344\270\215\344\270\200\350\207\264\351\227\256\351\242\230\346\261\207\346\200\273.md" "b/_drafts/Java/Java\350\277\234\347\250\213\350\260\203\350\257\225\344\273\243\347\240\201\344\270\215\344\270\200\350\207\264\351\227\256\351\242\230\346\261\207\346\200\273.md" similarity index 78% rename from "_drafts/Java\350\277\234\347\250\213\350\260\203\350\257\225\344\273\243\347\240\201\344\270\215\344\270\200\350\207\264\351\227\256\351\242\230\346\261\207\346\200\273.md" rename to "_drafts/Java/Java\350\277\234\347\250\213\350\260\203\350\257\225\344\273\243\347\240\201\344\270\215\344\270\200\350\207\264\351\227\256\351\242\230\346\261\207\346\200\273.md" index 0068b75..5c93951 100644 --- "a/_drafts/Java\350\277\234\347\250\213\350\260\203\350\257\225\344\273\243\347\240\201\344\270\215\344\270\200\350\207\264\351\227\256\351\242\230\346\261\207\346\200\273.md" +++ "b/_drafts/Java/Java\350\277\234\347\250\213\350\260\203\350\257\225\344\273\243\347\240\201\344\270\215\344\270\200\350\207\264\351\227\256\351\242\230\346\261\207\346\200\273.md" @@ -1,8 +1,3 @@ -欢迎和大家交流技术相关问题: -邮箱: jiangxinnju@163.com -博客园地址: http://www.cnblogs.com/jiangxinnju -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju Java(Eclipse IDE)远程调试Tomcat容器中的代码,经常出现两端代码不一致的情况,下面针对之前出现过的问题进行汇总,作为以后快速排查的依据。 diff --git a/_drafts/Peer Code Reviews Made Easy with Eclipse Plug-In.md b/_drafts/Java/Peer Code Reviews Made Easy with Eclipse Plug-In.md similarity index 99% rename from _drafts/Peer Code Reviews Made Easy with Eclipse Plug-In.md rename to _drafts/Java/Peer Code Reviews Made Easy with Eclipse Plug-In.md index 7cfdf14..b6e25e4 100644 --- a/_drafts/Peer Code Reviews Made Easy with Eclipse Plug-In.md +++ b/_drafts/Java/Peer Code Reviews Made Easy with Eclipse Plug-In.md @@ -1,9 +1,3 @@ -欢迎关注我的社交账号: - -博客园地址: http://www.cnblogs.com/jiangxinnju/p/4781259.html -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju - * Origin Article: Peer Code Reviews Made Easy with Eclipse Plug-In * Origin Author: John Ferguson Smart diff --git "a/_drafts/ServletInputStream\347\232\204\351\207\215\345\244\215\350\257\273\345\217\226\357\274\210\345\244\232\346\254\241\350\257\273\345\217\226\357\274\211\357\274\210\350\275\254\357\274\211.md" "b/_drafts/Java/ServletInputStream\347\232\204\351\207\215\345\244\215\350\257\273\345\217\226\357\274\210\345\244\232\346\254\241\350\257\273\345\217\226\357\274\211\357\274\210\350\275\254\357\274\211.md" similarity index 89% rename from "_drafts/ServletInputStream\347\232\204\351\207\215\345\244\215\350\257\273\345\217\226\357\274\210\345\244\232\346\254\241\350\257\273\345\217\226\357\274\211\357\274\210\350\275\254\357\274\211.md" rename to "_drafts/Java/ServletInputStream\347\232\204\351\207\215\345\244\215\350\257\273\345\217\226\357\274\210\345\244\232\346\254\241\350\257\273\345\217\226\357\274\211\357\274\210\350\275\254\357\274\211.md" index 7ee2018..17d62a5 100644 --- "a/_drafts/ServletInputStream\347\232\204\351\207\215\345\244\215\350\257\273\345\217\226\357\274\210\345\244\232\346\254\241\350\257\273\345\217\226\357\274\211\357\274\210\350\275\254\357\274\211.md" +++ "b/_drafts/Java/ServletInputStream\347\232\204\351\207\215\345\244\215\350\257\273\345\217\226\357\274\210\345\244\232\346\254\241\350\257\273\345\217\226\357\274\211\357\274\210\350\275\254\357\274\211.md" @@ -1,8 +1,3 @@ -欢迎和大家交流技术相关问题: -邮箱: jiangxinnju@163.com -博客园地址: http://www.cnblogs.com/jiangxinnju -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju 在使用Servlet进行Web开发的时候,有时候为了增加必要的业务处理而又不想修改现有的程序,往往采用Filter。这样在各个Filter中可能都要读取ServletInputStream流的内容,而ServletInputStream却只能读一次,这时候必须备份HttpServleRequest。 diff --git "a/_drafts/Spring\346\241\206\346\236\266\347\232\204\345\217\215\345\272\217\345\210\227\345\214\226\350\277\234\347\250\213\344\273\243\347\240\201\346\211\247\350\241\214\346\274\217\346\264\236\345\210\206\346\236\220\357\274\210\350\275\254\357\274\211.md" "b/_drafts/Java/Spring\346\241\206\346\236\266\347\232\204\345\217\215\345\272\217\345\210\227\345\214\226\350\277\234\347\250\213\344\273\243\347\240\201\346\211\247\350\241\214\346\274\217\346\264\236\345\210\206\346\236\220\357\274\210\350\275\254\357\274\211.md" similarity index 95% rename from "_drafts/Spring\346\241\206\346\236\266\347\232\204\345\217\215\345\272\217\345\210\227\345\214\226\350\277\234\347\250\213\344\273\243\347\240\201\346\211\247\350\241\214\346\274\217\346\264\236\345\210\206\346\236\220\357\274\210\350\275\254\357\274\211.md" rename to "_drafts/Java/Spring\346\241\206\346\236\266\347\232\204\345\217\215\345\272\217\345\210\227\345\214\226\350\277\234\347\250\213\344\273\243\347\240\201\346\211\247\350\241\214\346\274\217\346\264\236\345\210\206\346\236\220\357\274\210\350\275\254\357\274\211.md" index 73b746b..22d7c8f 100644 --- "a/_drafts/Spring\346\241\206\346\236\266\347\232\204\345\217\215\345\272\217\345\210\227\345\214\226\350\277\234\347\250\213\344\273\243\347\240\201\346\211\247\350\241\214\346\274\217\346\264\236\345\210\206\346\236\220\357\274\210\350\275\254\357\274\211.md" +++ "b/_drafts/Java/Spring\346\241\206\346\236\266\347\232\204\345\217\215\345\272\217\345\210\227\345\214\226\350\277\234\347\250\213\344\273\243\347\240\201\346\211\247\350\241\214\346\274\217\346\264\236\345\210\206\346\236\220\357\274\210\350\275\254\357\274\211.md" @@ -1,9 +1,3 @@ -欢迎和大家交流技术相关问题: -邮箱: jiangxinnju@163.com -博客园地址: http://www.cnblogs.com/jiangxinnju -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju - ## 漏洞介绍 国外的研究人员zero thoughts发现了一个Spring框架的反序列化远程代码执行漏洞。 diff --git "a/_drafts/[Maven][l10n-maven-plugin]\345\221\212\350\255\246[WARNING] No dictionary file under folder.md" "b/_drafts/Java/[Maven][l10n-maven-plugin]\345\221\212\350\255\246[WARNING] No dictionary file under folder.md" similarity index 100% rename from "_drafts/[Maven][l10n-maven-plugin]\345\221\212\350\255\246[WARNING] No dictionary file under folder.md" rename to "_drafts/Java/[Maven][l10n-maven-plugin]\345\221\212\350\255\246[WARNING] No dictionary file under folder.md" diff --git "a/_drafts/[Maven][maven-shade-plugin]\345\221\212\350\255\246[WARNING] maven-shade-plugin has detected that some class files are present in two or more JARs.md" "b/_drafts/Java/[Maven][maven-shade-plugin]\345\221\212\350\255\246[WARNING] maven-shade-plugin has detected that some class files are present in two or more JARs.md" similarity index 100% rename from "_drafts/[Maven][maven-shade-plugin]\345\221\212\350\255\246[WARNING] maven-shade-plugin has detected that some class files are present in two or more JARs.md" rename to "_drafts/Java/[Maven][maven-shade-plugin]\345\221\212\350\255\246[WARNING] maven-shade-plugin has detected that some class files are present in two or more JARs.md" diff --git "a/_drafts/[Maven][maven-site-plugin]\345\221\212\350\255\246[WARNING] No project URL defined - decoration links will not be relativized.md" "b/_drafts/Java/[Maven][maven-site-plugin]\345\221\212\350\255\246[WARNING] No project URL defined - decoration links will not be relativized.md" similarity index 100% rename from "_drafts/[Maven][maven-site-plugin]\345\221\212\350\255\246[WARNING] No project URL defined - decoration links will not be relativized.md" rename to "_drafts/Java/[Maven][maven-site-plugin]\345\221\212\350\255\246[WARNING] No project URL defined - decoration links will not be relativized.md" diff --git "a/_drafts/[Maven][taglist-maven-plugin]\345\221\212\350\255\246[WARNING] Using legacy tag format.md" "b/_drafts/Java/[Maven][taglist-maven-plugin]\345\221\212\350\255\246[WARNING] Using legacy tag format.md" similarity index 100% rename from "_drafts/[Maven][taglist-maven-plugin]\345\221\212\350\255\246[WARNING] Using legacy tag format.md" rename to "_drafts/Java/[Maven][taglist-maven-plugin]\345\221\212\350\255\246[WARNING] Using legacy tag format.md" diff --git "a/_drafts/[Maven]\345\221\212\350\255\246[WARNING] Unable to create Maven project from repository..md" "b/_drafts/Java/[Maven]\345\221\212\350\255\246[WARNING] Unable to create Maven project from repository..md" similarity index 100% rename from "_drafts/[Maven]\345\221\212\350\255\246[WARNING] Unable to create Maven project from repository..md" rename to "_drafts/Java/[Maven]\345\221\212\350\255\246[WARNING] Unable to create Maven project from repository..md" diff --git a/_drafts/[System.currentTimeMillis]_[Calendar.getInstance().getTimeInMillis()]_[new Date().getTime()].md b/_drafts/Java/[System.currentTimeMillis]_[Calendar.getInstance().getTimeInMillis()]_[new Date().getTime()].md similarity index 100% rename from _drafts/[System.currentTimeMillis]_[Calendar.getInstance().getTimeInMillis()]_[new Date().getTime()].md rename to _drafts/Java/[System.currentTimeMillis]_[Calendar.getInstance().getTimeInMillis()]_[new Date().getTime()].md diff --git "a/_drafts/eclipse\346\217\222\344\273\266\345\234\250\347\272\277\345\217\221\345\270\203\345\217\221\345\270\203\345\222\214\347\211\210\346\234\254\346\233\264\346\226\260(web site) \350\275\254.md" "b/_drafts/Java/eclipse\346\217\222\344\273\266\345\234\250\347\272\277\345\217\221\345\270\203\345\217\221\345\270\203\345\222\214\347\211\210\346\234\254\346\233\264\346\226\260(web site) \350\275\254.md" similarity index 95% rename from "_drafts/eclipse\346\217\222\344\273\266\345\234\250\347\272\277\345\217\221\345\270\203\345\217\221\345\270\203\345\222\214\347\211\210\346\234\254\346\233\264\346\226\260(web site) \350\275\254.md" rename to "_drafts/Java/eclipse\346\217\222\344\273\266\345\234\250\347\272\277\345\217\221\345\270\203\345\217\221\345\270\203\345\222\214\347\211\210\346\234\254\346\233\264\346\226\260(web site) \350\275\254.md" index 6a7b214..b1a185e 100644 --- "a/_drafts/eclipse\346\217\222\344\273\266\345\234\250\347\272\277\345\217\221\345\270\203\345\217\221\345\270\203\345\222\214\347\211\210\346\234\254\346\233\264\346\226\260(web site) \350\275\254.md" +++ "b/_drafts/Java/eclipse\346\217\222\344\273\266\345\234\250\347\272\277\345\217\221\345\270\203\345\217\221\345\270\203\345\222\214\347\211\210\346\234\254\346\233\264\346\226\260(web site) \350\275\254.md" @@ -1,8 +1,3 @@ -欢迎关注我的社交账号: - -博客园地址: http://www.cnblogs.com/jiangxinnju/p/4781259.html -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju eclipse插件在线发布发布和版本更新(web site) diff --git "a/_drafts/javadoc\347\233\270\345\205\263\351\227\256\351\242\230.md" "b/_drafts/Java/javadoc\347\233\270\345\205\263\351\227\256\351\242\230.md" similarity index 100% rename from "_drafts/javadoc\347\233\270\345\205\263\351\227\256\351\242\230.md" rename to "_drafts/Java/javadoc\347\233\270\345\205\263\351\227\256\351\242\230.md" diff --git "a/_drafts/org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter\344\270\216org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter.md" "b/_drafts/Java/org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter\344\270\216org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter.md" similarity index 92% rename from "_drafts/org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter\344\270\216org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter.md" rename to "_drafts/Java/org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter\344\270\216org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter.md" index 1544447..fe963c5 100644 --- "a/_drafts/org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter\344\270\216org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter.md" +++ "b/_drafts/Java/org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter\344\270\216org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter.md" @@ -1,8 +1,3 @@ -欢迎和大家交流技术相关问题: -邮箱: jiangxinnju@163.com -博客园地址: http://www.cnblogs.com/jiangxinnju -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju 使用Eclipse启动Maven+Struts项目报错,报错日志如下: diff --git "a/_drafts/package-info.java\346\226\207\344\273\266\350\257\246\350\247\243.md" "b/_drafts/Java/package-info.java\346\226\207\344\273\266\350\257\246\350\247\243.md" similarity index 91% rename from "_drafts/package-info.java\346\226\207\344\273\266\350\257\246\350\247\243.md" rename to "_drafts/Java/package-info.java\346\226\207\344\273\266\350\257\246\350\247\243.md" index 4e111c3..4af7d54 100644 --- "a/_drafts/package-info.java\346\226\207\344\273\266\350\257\246\350\247\243.md" +++ "b/_drafts/Java/package-info.java\346\226\207\344\273\266\350\257\246\350\247\243.md" @@ -1,8 +1,3 @@ -欢迎关注我的社交账号: - -博客园地址: http://www.cnblogs.com/jiangxinnju/p/4781259.html -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju # pacakge-info.java介绍 diff --git "a/_drafts/\344\270\200\344\270\252\346\257\224\350\276\203\345\205\250\351\235\242\347\232\204java\351\232\217\346\234\272\346\225\260\346\215\256\347\224\237\346\210\220\345\267\245\345\205\267\345\214\205.md" "b/_drafts/Java/\344\270\200\344\270\252\346\257\224\350\276\203\345\205\250\351\235\242\347\232\204java\351\232\217\346\234\272\346\225\260\346\215\256\347\224\237\346\210\220\345\267\245\345\205\267\345\214\205.md" similarity index 100% rename from "_drafts/\344\270\200\344\270\252\346\257\224\350\276\203\345\205\250\351\235\242\347\232\204java\351\232\217\346\234\272\346\225\260\346\215\256\347\224\237\346\210\220\345\267\245\345\205\267\345\214\205.md" rename to "_drafts/Java/\344\270\200\344\270\252\346\257\224\350\276\203\345\205\250\351\235\242\347\232\204java\351\232\217\346\234\272\346\225\260\346\215\256\347\224\237\346\210\220\345\267\245\345\205\267\345\214\205.md" diff --git "a/_drafts/\344\275\277\347\224\250CXF+Spring\345\217\221\345\270\203WebService\357\274\214\345\220\257\345\212\250\346\212\245\351\224\231.md" "b/_drafts/Java/\344\275\277\347\224\250CXF+Spring\345\217\221\345\270\203WebService\357\274\214\345\220\257\345\212\250\346\212\245\351\224\231.md" similarity index 100% rename from "_drafts/\344\275\277\347\224\250CXF+Spring\345\217\221\345\270\203WebService\357\274\214\345\220\257\345\212\250\346\212\245\351\224\231.md" rename to "_drafts/Java/\344\275\277\347\224\250CXF+Spring\345\217\221\345\270\203WebService\357\274\214\345\220\257\345\212\250\346\212\245\351\224\231.md" diff --git "a/_drafts/\345\210\251\347\224\250Spring\344\270\255\345\220\214\345\220\215Bean\347\233\270\344\272\222\350\246\206\347\233\226\347\232\204\347\211\271\346\200\247\357\274\214\345\256\232\345\210\266\345\271\263\345\217\260\347\232\204\347\261\273\345\206\205\345\256\271\343\200\202.md" "b/_drafts/Java/\345\210\251\347\224\250Spring\344\270\255\345\220\214\345\220\215Bean\347\233\270\344\272\222\350\246\206\347\233\226\347\232\204\347\211\271\346\200\247\357\274\214\345\256\232\345\210\266\345\271\263\345\217\260\347\232\204\347\261\273\345\206\205\345\256\271\343\200\202.md" similarity index 91% rename from "_drafts/\345\210\251\347\224\250Spring\344\270\255\345\220\214\345\220\215Bean\347\233\270\344\272\222\350\246\206\347\233\226\347\232\204\347\211\271\346\200\247\357\274\214\345\256\232\345\210\266\345\271\263\345\217\260\347\232\204\347\261\273\345\206\205\345\256\271\343\200\202.md" rename to "_drafts/Java/\345\210\251\347\224\250Spring\344\270\255\345\220\214\345\220\215Bean\347\233\270\344\272\222\350\246\206\347\233\226\347\232\204\347\211\271\346\200\247\357\274\214\345\256\232\345\210\266\345\271\263\345\217\260\347\232\204\347\261\273\345\206\205\345\256\271\343\200\202.md" index 8a43db9..ce95dcc 100644 --- "a/_drafts/\345\210\251\347\224\250Spring\344\270\255\345\220\214\345\220\215Bean\347\233\270\344\272\222\350\246\206\347\233\226\347\232\204\347\211\271\346\200\247\357\274\214\345\256\232\345\210\266\345\271\263\345\217\260\347\232\204\347\261\273\345\206\205\345\256\271\343\200\202.md" +++ "b/_drafts/Java/\345\210\251\347\224\250Spring\344\270\255\345\220\214\345\220\215Bean\347\233\270\344\272\222\350\246\206\347\233\226\347\232\204\347\211\271\346\200\247\357\274\214\345\256\232\345\210\266\345\271\263\345\217\260\347\232\204\347\261\273\345\206\205\345\256\271\343\200\202.md" @@ -1,8 +1,3 @@ -欢迎和大家交流技术相关问题: -邮箱: jiangxinnju@163.com -博客园地址: http://www.cnblogs.com/jiangxinnju -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju 今天处理了一个问题,J2EE项目依赖了底层平台的功能,平台JAR包中配置了一个Bean,对应的实现类也在该平台JAR包中,由于Bean的配置不是懒加载的,所以在Tomcat容器启动时就会调用该Bean对应实现类中的init方法,但是该方法会对我们的业务产生副作用。现在想屏蔽这种副作用,我们肯定不能要求底层平台去修改代码,去除该Bean。所以考虑采取hack的方法解决。 diff --git "a/_drafts/\345\211\224\351\231\244eclipse\347\232\204configuration\347\233\256\345\275\225[\350\275\254].md" "b/_drafts/Java/\345\211\224\351\231\244eclipse\347\232\204configuration\347\233\256\345\275\225[\350\275\254].md" similarity index 91% rename from "_drafts/\345\211\224\351\231\244eclipse\347\232\204configuration\347\233\256\345\275\225[\350\275\254].md" rename to "_drafts/Java/\345\211\224\351\231\244eclipse\347\232\204configuration\347\233\256\345\275\225[\350\275\254].md" index 4a3757a..794cfe6 100644 --- "a/_drafts/\345\211\224\351\231\244eclipse\347\232\204configuration\347\233\256\345\275\225[\350\275\254].md" +++ "b/_drafts/Java/\345\211\224\351\231\244eclipse\347\232\204configuration\347\233\256\345\275\225[\350\275\254].md" @@ -1,9 +1,3 @@ -欢迎和大家交流技术相关问题: -邮箱: jiangxinnju@163.com -博客园地址: http://www.cnblogs.com/jiangxinnju -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju - eclipse 3.4以前的版本,如果出现什么问题了,一般都会选择删除eclipse安装目录下configuration目录下除了config.ini之外的所有文件,同时在删除eclipse工作空间中的.metadata目录,这样就删除掉了eclipse的所有的配置信息,重新得到了一个类似全新安装的eclipse了,通常这种方法能够解决很多eclipse中遇到的错误。 但是,eclipse 3.4 情况就不一样了,一个全新的eclipse/configuration目录下不再是只有一个config.ini文件,另外多了三个目录: diff --git "a/_drafts/\345\246\202\344\275\225\345\234\250\345\244\247\351\207\217jar\345\214\205\344\270\255\346\220\234\347\264\242\347\211\271\345\256\232\345\255\227\347\254\246.md" "b/_drafts/Java/\345\246\202\344\275\225\345\234\250\345\244\247\351\207\217jar\345\214\205\344\270\255\346\220\234\347\264\242\347\211\271\345\256\232\345\255\227\347\254\246.md" similarity index 89% rename from "_drafts/\345\246\202\344\275\225\345\234\250\345\244\247\351\207\217jar\345\214\205\344\270\255\346\220\234\347\264\242\347\211\271\345\256\232\345\255\227\347\254\246.md" rename to "_drafts/Java/\345\246\202\344\275\225\345\234\250\345\244\247\351\207\217jar\345\214\205\344\270\255\346\220\234\347\264\242\347\211\271\345\256\232\345\255\227\347\254\246.md" index d6d9278..d0326b4 100644 --- "a/_drafts/\345\246\202\344\275\225\345\234\250\345\244\247\351\207\217jar\345\214\205\344\270\255\346\220\234\347\264\242\347\211\271\345\256\232\345\255\227\347\254\246.md" +++ "b/_drafts/Java/\345\246\202\344\275\225\345\234\250\345\244\247\351\207\217jar\345\214\205\344\270\255\346\220\234\347\264\242\347\211\271\345\256\232\345\255\227\347\254\246.md" @@ -1,9 +1,3 @@ -欢迎关注我的社交账号: - -博客园地址: http://www.cnblogs.com/jiangxinnju/p/4781259.html -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju -邮箱: jiangxinnju@163.com 工作中定位某些问题时需要在jar包中搜索某些特定的字符。如果jar包数量比较少可以直接使用JD-GUI等反编译软件导出源码,但是如果jar包数目庞大,这种方式工作量就太大了。 diff --git "a/_drafts/\345\246\202\344\275\225\347\274\226\345\206\231\350\267\250\345\271\263\345\217\260\347\232\204Java\344\273\243\347\240\201.md" "b/_drafts/Java/\345\246\202\344\275\225\347\274\226\345\206\231\350\267\250\345\271\263\345\217\260\347\232\204Java\344\273\243\347\240\201.md" similarity index 95% rename from "_drafts/\345\246\202\344\275\225\347\274\226\345\206\231\350\267\250\345\271\263\345\217\260\347\232\204Java\344\273\243\347\240\201.md" rename to "_drafts/Java/\345\246\202\344\275\225\347\274\226\345\206\231\350\267\250\345\271\263\345\217\260\347\232\204Java\344\273\243\347\240\201.md" index db4880b..f4d278e 100644 --- "a/_drafts/\345\246\202\344\275\225\347\274\226\345\206\231\350\267\250\345\271\263\345\217\260\347\232\204Java\344\273\243\347\240\201.md" +++ "b/_drafts/Java/\345\246\202\344\275\225\347\274\226\345\206\231\350\267\250\345\271\263\345\217\260\347\232\204Java\344\273\243\347\240\201.md" @@ -1,9 +1,3 @@ -欢迎和大家交流技术相关问题: -邮箱: jiangxinnju@163.com -博客园地址: http://www.cnblogs.com/jiangxinnju -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju - 使用Java语言编写应用程序最大的优点在于“一次编译,处处运行”,然而这并不是说所有的Java程序都具有跨平台的特性,事实上,相当一部分的Java程序是不能在别的操作系统上正确运行的,那么如何才能编写一个真正的跨平台的Java程序呢? 下面是在编写跨平台的Java程序是需要注意的一些事情: diff --git "a/_drafts/\345\246\202\344\275\225\347\274\226\350\257\221Apache Hadoop2.2.0\346\272\220\344\273\243\347\240\201.md" "b/_drafts/Java/\345\246\202\344\275\225\347\274\226\350\257\221Apache Hadoop2.2.0\346\272\220\344\273\243\347\240\201.md" similarity index 98% rename from "_drafts/\345\246\202\344\275\225\347\274\226\350\257\221Apache Hadoop2.2.0\346\272\220\344\273\243\347\240\201.md" rename to "_drafts/Java/\345\246\202\344\275\225\347\274\226\350\257\221Apache Hadoop2.2.0\346\272\220\344\273\243\347\240\201.md" index 134a409..506f740 100644 --- "a/_drafts/\345\246\202\344\275\225\347\274\226\350\257\221Apache Hadoop2.2.0\346\272\220\344\273\243\347\240\201.md" +++ "b/_drafts/Java/\345\246\202\344\275\225\347\274\226\350\257\221Apache Hadoop2.2.0\346\272\220\344\273\243\347\240\201.md" @@ -1,11 +1,5 @@ 转自(原文图片已丢失,本文修复图片,重新排版,并更正部分原文错误):http://www.superwu.cn/2013/12/26/913 -欢迎和大家交流技术相关问题: -邮箱: jiangxinnju@163.com -博客园地址: http://www.cnblogs.com/jiangxinnju -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju - Hadoop2的学习资料很少,只有官网的少数文档。如果想更深入的研究hadoop2,除了仅看官网的文档外,还要学习如何看源码,通过不断的调试跟踪源码,学习hadoop的运行机制。 # 1.安装CentOS diff --git "a/_drafts/\351\200\232\350\277\207\350\256\276\347\275\256JDK\350\247\243\345\206\263\345\255\230\345\234\250\345\244\232\344\270\252Gradle\345\220\216\345\217\260\350\277\233\347\250\213\347\232\204\351\227\256\351\242\230.md" "b/_drafts/Java/\351\200\232\350\277\207\350\256\276\347\275\256JDK\350\247\243\345\206\263\345\255\230\345\234\250\345\244\232\344\270\252Gradle\345\220\216\345\217\260\350\277\233\347\250\213\347\232\204\351\227\256\351\242\230.md" similarity index 100% rename from "_drafts/\351\200\232\350\277\207\350\256\276\347\275\256JDK\350\247\243\345\206\263\345\255\230\345\234\250\345\244\232\344\270\252Gradle\345\220\216\345\217\260\350\277\233\347\250\213\347\232\204\351\227\256\351\242\230.md" rename to "_drafts/Java/\351\200\232\350\277\207\350\256\276\347\275\256JDK\350\247\243\345\206\263\345\255\230\345\234\250\345\244\232\344\270\252Gradle\345\220\216\345\217\260\350\277\233\347\250\213\347\232\204\351\227\256\351\242\230.md" diff --git "a/_drafts/202317061029VSCode\350\260\203\350\257\225\350\277\234\347\250\213Linux\346\234\272\345\231\250\344\270\212\347\232\204C\344\273\243\347\240\201.md" "b/_drafts/Linux/202317061029VSCode\350\260\203\350\257\225\350\277\234\347\250\213Linux\346\234\272\345\231\250\344\270\212\347\232\204C\344\273\243\347\240\201.md" similarity index 100% rename from "_drafts/202317061029VSCode\350\260\203\350\257\225\350\277\234\347\250\213Linux\346\234\272\345\231\250\344\270\212\347\232\204C\344\273\243\347\240\201.md" rename to "_drafts/Linux/202317061029VSCode\350\260\203\350\257\225\350\277\234\347\250\213Linux\346\234\272\345\231\250\344\270\212\347\232\204C\344\273\243\347\240\201.md" diff --git "a/_drafts/202401011357Ubuntu\346\211\251\345\256\271swap\346\226\207\344\273\266.md" "b/_drafts/Linux/202401011357Ubuntu\346\211\251\345\256\271swap\346\226\207\344\273\266.md" similarity index 100% rename from "_drafts/202401011357Ubuntu\346\211\251\345\256\271swap\346\226\207\344\273\266.md" rename to "_drafts/Linux/202401011357Ubuntu\346\211\251\345\256\271swap\346\226\207\344\273\266.md" diff --git "a/_drafts/Linux\344\270\213\345\256\211\350\243\205\346\234\200\346\226\260\347\232\204Eclipse.md" "b/_drafts/Linux/Linux\344\270\213\345\256\211\350\243\205\346\234\200\346\226\260\347\232\204Eclipse.md" similarity index 86% rename from "_drafts/Linux\344\270\213\345\256\211\350\243\205\346\234\200\346\226\260\347\232\204Eclipse.md" rename to "_drafts/Linux/Linux\344\270\213\345\256\211\350\243\205\346\234\200\346\226\260\347\232\204Eclipse.md" index 9319914..7a913d6 100644 --- "a/_drafts/Linux\344\270\213\345\256\211\350\243\205\346\234\200\346\226\260\347\232\204Eclipse.md" +++ "b/_drafts/Linux/Linux\344\270\213\345\256\211\350\243\205\346\234\200\346\226\260\347\232\204Eclipse.md" @@ -1,9 +1,3 @@ -欢迎关注我的社交账号: - -博客园地址: http://www.cnblogs.com/jiangxinnju/p/4781259.html -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju - 测试环境: diff --git "a/_drafts/Linux\345\216\213\347\274\251\344\270\216\350\247\243\345\216\213\345\270\270\347\224\250\345\221\275\344\273\244.md" "b/_drafts/Linux/Linux\345\216\213\347\274\251\344\270\216\350\247\243\345\216\213\345\270\270\347\224\250\345\221\275\344\273\244.md" similarity index 92% rename from "_drafts/Linux\345\216\213\347\274\251\344\270\216\350\247\243\345\216\213\345\270\270\347\224\250\345\221\275\344\273\244.md" rename to "_drafts/Linux/Linux\345\216\213\347\274\251\344\270\216\350\247\243\345\216\213\345\270\270\347\224\250\345\221\275\344\273\244.md" index 11ecdcf..df339e6 100644 --- "a/_drafts/Linux\345\216\213\347\274\251\344\270\216\350\247\243\345\216\213\345\270\270\347\224\250\345\221\275\344\273\244.md" +++ "b/_drafts/Linux/Linux\345\216\213\347\274\251\344\270\216\350\247\243\345\216\213\345\270\270\347\224\250\345\221\275\344\273\244.md" @@ -1,8 +1,3 @@ -欢迎和大家交流技术相关问题: -邮箱: jiangxinnju@163.com -博客园地址: http://www.cnblogs.com/jiangxinnju -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju ```shell diff --git "a/_drafts/Linux\345\277\253\346\215\267\351\224\256.md" "b/_drafts/Linux/Linux\345\277\253\346\215\267\351\224\256.md" similarity index 89% rename from "_drafts/Linux\345\277\253\346\215\267\351\224\256.md" rename to "_drafts/Linux/Linux\345\277\253\346\215\267\351\224\256.md" index 8d5a312..042bf68 100644 --- "a/_drafts/Linux\345\277\253\346\215\267\351\224\256.md" +++ "b/_drafts/Linux/Linux\345\277\253\346\215\267\351\224\256.md" @@ -1,8 +1,3 @@ -欢迎和大家交流技术相关问题: -邮箱: jiangxinnju@163.com -博客园地址: http://www.cnblogs.com/jiangxinnju -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju ## Shell 快捷键 diff --git "a/_drafts/Linux\347\216\257\345\242\203\344\270\213JDK_Eclipse\344\270\200\351\224\256\345\256\211\350\243\205\350\204\232\346\234\254.md" "b/_drafts/Linux/Linux\347\216\257\345\242\203\344\270\213JDK_Eclipse\344\270\200\351\224\256\345\256\211\350\243\205\350\204\232\346\234\254.md" similarity index 100% rename from "_drafts/Linux\347\216\257\345\242\203\344\270\213JDK_Eclipse\344\270\200\351\224\256\345\256\211\350\243\205\350\204\232\346\234\254.md" rename to "_drafts/Linux/Linux\347\216\257\345\242\203\344\270\213JDK_Eclipse\344\270\200\351\224\256\345\256\211\350\243\205\350\204\232\346\234\254.md" diff --git "a/_drafts/Unix_Linux\346\223\215\344\275\234\347\263\273\347\273\237\344\270\255\345\246\202\344\275\225\345\234\250sqlplus_rman\344\270\255\344\275\277\347\224\250\346\226\271\345\220\221\351\224\256.md" "b/_drafts/Linux/Unix_Linux\346\223\215\344\275\234\347\263\273\347\273\237\344\270\255\345\246\202\344\275\225\345\234\250sqlplus_rman\344\270\255\344\275\277\347\224\250\346\226\271\345\220\221\351\224\256.md" similarity index 100% rename from "_drafts/Unix_Linux\346\223\215\344\275\234\347\263\273\347\273\237\344\270\255\345\246\202\344\275\225\345\234\250sqlplus_rman\344\270\255\344\275\277\347\224\250\346\226\271\345\220\221\351\224\256.md" rename to "_drafts/Linux/Unix_Linux\346\223\215\344\275\234\347\263\273\347\273\237\344\270\255\345\246\202\344\275\225\345\234\250sqlplus_rman\344\270\255\344\275\277\347\224\250\346\226\271\345\220\221\351\224\256.md" diff --git "a/_drafts/linux\344\270\255\346\227\240 conio.h\347\232\204\350\247\243\345\206\263\345\212\236\346\263\225.md" "b/_drafts/Linux/linux\344\270\255\346\227\240 conio.h\347\232\204\350\247\243\345\206\263\345\212\236\346\263\225.md" similarity index 100% rename from "_drafts/linux\344\270\255\346\227\240 conio.h\347\232\204\350\247\243\345\206\263\345\212\236\346\263\225.md" rename to "_drafts/Linux/linux\344\270\255\346\227\240 conio.h\347\232\204\350\247\243\345\206\263\345\212\236\346\263\225.md" diff --git "a/_drafts/ssh\347\233\270\345\205\263\345\216\237\347\220\206\345\255\246\344\271\240\344\270\216\345\270\270\350\247\201\351\224\231\350\257\257\346\200\273\347\273\223.md" "b/_drafts/Linux/ssh\347\233\270\345\205\263\345\216\237\347\220\206\345\255\246\344\271\240\344\270\216\345\270\270\350\247\201\351\224\231\350\257\257\346\200\273\347\273\223.md" similarity index 87% rename from "_drafts/ssh\347\233\270\345\205\263\345\216\237\347\220\206\345\255\246\344\271\240\344\270\216\345\270\270\350\247\201\351\224\231\350\257\257\346\200\273\347\273\223.md" rename to "_drafts/Linux/ssh\347\233\270\345\205\263\345\216\237\347\220\206\345\255\246\344\271\240\344\270\216\345\270\270\350\247\201\351\224\231\350\257\257\346\200\273\347\273\223.md" index 9e59308..c3e36ec 100644 --- "a/_drafts/ssh\347\233\270\345\205\263\345\216\237\347\220\206\345\255\246\344\271\240\344\270\216\345\270\270\350\247\201\351\224\231\350\257\257\346\200\273\347\273\223.md" +++ "b/_drafts/Linux/ssh\347\233\270\345\205\263\345\216\237\347\220\206\345\255\246\344\271\240\344\270\216\345\270\270\350\247\201\351\224\231\350\257\257\346\200\273\347\273\223.md" @@ -1,9 +1,3 @@ -欢迎和大家交流技术相关问题: -邮箱: jiangxinnju@163.com -博客园地址: http://www.cnblogs.com/jiangxinnju -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju - ## SSH基本原理与运用 diff --git "a/_drafts/\351\270\237\345\223\245\347\232\204linux\347\247\201\346\210\277\350\217\234\345\213\230\350\257\257\350\241\250.md" "b/_drafts/Linux/\351\270\237\345\223\245\347\232\204linux\347\247\201\346\210\277\350\217\234\345\213\230\350\257\257\350\241\250.md" similarity index 97% rename from "_drafts/\351\270\237\345\223\245\347\232\204linux\347\247\201\346\210\277\350\217\234\345\213\230\350\257\257\350\241\250.md" rename to "_drafts/Linux/\351\270\237\345\223\245\347\232\204linux\347\247\201\346\210\277\350\217\234\345\213\230\350\257\257\350\241\250.md" index ccadf08..e9fe2b1 100644 --- "a/_drafts/\351\270\237\345\223\245\347\232\204linux\347\247\201\346\210\277\350\217\234\345\213\230\350\257\257\350\241\250.md" +++ "b/_drafts/Linux/\351\270\237\345\223\245\347\232\204linux\347\247\201\346\210\277\350\217\234\345\213\230\350\257\257\350\241\250.md" @@ -1,7 +1,3 @@ -博客园地址: http://www.cnblogs.com/jiangxinnju -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju - 鸟哥的Linux私房菜基础学习篇(第三版)简体中文勘误表(人民邮电出版社) 简体中文版书籍资料: diff --git "a/_drafts/2014-11-04-EXE \346\226\207\344\273\266\350\275\254\346\215\242\346\210\220\345\256\211\350\243\205\347\250\213\345\272\217\346\225\231\347\250\213.md" "b/_drafts/Others/2014-11-04-EXE \346\226\207\344\273\266\350\275\254\346\215\242\346\210\220\345\256\211\350\243\205\347\250\213\345\272\217\346\225\231\347\250\213.md" similarity index 100% rename from "_drafts/2014-11-04-EXE \346\226\207\344\273\266\350\275\254\346\215\242\346\210\220\345\256\211\350\243\205\347\250\213\345\272\217\346\225\231\347\250\213.md" rename to "_drafts/Others/2014-11-04-EXE \346\226\207\344\273\266\350\275\254\346\215\242\346\210\220\345\256\211\350\243\205\347\250\213\345\272\217\346\225\231\347\250\213.md" diff --git "a/_drafts/Others/2015-10-25-\344\273\243\347\240\201\351\243\216\346\240\274\344\270\216\344\273\243\347\240\201\346\240\274\345\274\217\345\214\226\345\267\245\345\205\267.md" "b/_drafts/Others/2015-10-25-\344\273\243\347\240\201\351\243\216\346\240\274\344\270\216\344\273\243\347\240\201\346\240\274\345\274\217\345\214\226\345\267\245\345\205\267.md" new file mode 100644 index 0000000..c5d931a --- /dev/null +++ "b/_drafts/Others/2015-10-25-\344\273\243\347\240\201\351\243\216\346\240\274\344\270\216\344\273\243\347\240\201\346\240\274\345\274\217\345\214\226\345\267\245\345\205\267.md" @@ -0,0 +1,99 @@ +# 代码风格与代码格式化工具 + +* Google Style Guides: +* Google 开源项目风格指南——中文版(Google Style Guide): + +* The tidyverse style guide: +* Google’s R Style Guide: + +## clang-format + +clang-format 位于 clang/tools/clang-format,可用于格式化 C/C++/Java/JavaScript/JSON/Objective-C/Protobuf/C# 代码。 + +* 官网: + +## astyle(Artistic Style) + +astyle是一个免费、快速且小巧的自动格式化工具,适用于 C、C++、C++/CLI、Objective-C、C# 和 Java 源代码。 + +* 官网: +* 文档: + +### 基本命令 + +`astyle --style=ansi main.cs` + +### 格式化目录 + +使用ansi风格格式当前目录下的所有cpp,cs文件,注意在批处理文件时,"%f" 要改为"%%f" + +`for /R %f in (*.cpp;*.cs;) do astyle --style=ansi "%f"` + +### 加入到VS2008,VS2005 + +* 工具——>外部工具——>添加 +* 标题:astyle +* 命令:AStyle.exe (填好astyle.exe的路径) +* 参数:--style=allman -N $(ItemDir)$(ItemFileName)$(ItemExt) +* 初始目录:$(TargetDir) +* 勾上“使用初始目录” +* 点击确定完成,以后就可以在工具菜单中找到“astyle“这一项了,点击它,就可以对当前文件进行格式化操作。 + +### 加入到VS6 + +* Tools——>Customize——>Tools +* 标题:astyle +* 命令:AStyle.exe (填好astyle.exe的路径) +* 参数:--style=ansi -s4 --suffix=.orig $(FileName)$(FileExt) +* 初始目录:$(FileDir) +* 勾上“Using Output Window” +* 点击确定完成。以后就可以在工具菜单中找到“astyle“这一项了,点击它,就可以对当前文件进行格式化操作。 + +### 加入到UltraEdit和UltraStudio + +* 高级-->工具配置——>外部工具——>添加 +* 命令:AStyle.exe -v --style=ansi -s4 --suffix=.orig "%f"(填好astyle.exe的路径) +* Optiones:选择 Windows program和Save Active File. +* Output: 选择output to list box,show dos box 和no replace。 +* 点击确定完成。以后就可以在工具菜单中找到“astyle“这一项了,点击它,就可以对当前文件进行格式化操作。 + +### 加入到Source insight + +* Options-->Custom Command-->Add +* Command:astyle +* Run "D:\soft\astyle\astyle.exe" --style=ansi -f -p -P -U -v -n -N %f(填好astyle.exe的路径) +* Output:不选. +* Control: 选择pause when done和exit to window. +* source links in output:file, then line +* -->menu +* add to work menu. +* 点击确定完成。以后就可以在Work菜单中找到“astyle“这一项了,点击它,就可以对当前文件进行格式化操作。 + +另外可以参考:在source insight中集成astyle: + +### 控制台目录批处理(astyle.bat) + +```Bash +REM 批量将本目录中的所有C++文件用Astyle进行代码美化操作 +REM 设置Astyle命令位置和参数 +@echo off +set astyle="astyle.exe" +REM 循环遍历目录 +for /r . %%a in (*.cpp;*.c) do %astyle% --style=ansi --pad=oper --unpad=paren -s4 -n "%%a" +for /r . %%a in (*.hpp;*.h) do %astyle% --style=ansi --pad=oper --unpad=paren -s4 -n "%%a" +REM 删除所有的astyle生成文件 +for /r . %%a in (*.orig) do del "%%a" +pause +``` + +## CoolFormat + +CoolFormat源代码格式化是一款C\C++\C#\CSS\HTML\Java\JavaScript\JSON\Objective-C\PHP\SQL\Verilog\XML代码格式化工具。软件可以快速多种风格格式化,并对语言进行着色。界面采用Office 2010风格,并有多种样式可以替换。并且支持代码高亮到网页上显示,方便博客文章之类的撰写阅读。 + +* 官网: + +## Adapter for Eclipse Code Formatter + +允许直接从 IntelliJ 使用 Eclipse 的 Java 代码格式化工具。解决了在使用 IDEA 和 Eclipse 的团队环境中维护统一代码风格的问题。 + +* 官网: diff --git "a/_drafts/202301072207LaTeX\345\206\205\345\256\271\346\200\273\347\273\223.md" "b/_drafts/Others/202301072207LaTeX\345\206\205\345\256\271\346\200\273\347\273\223.md" similarity index 100% rename from "_drafts/202301072207LaTeX\345\206\205\345\256\271\346\200\273\347\273\223.md" rename to "_drafts/Others/202301072207LaTeX\345\206\205\345\256\271\346\200\273\347\273\223.md" diff --git "a/_drafts/202302262208StableDiffusionWebui\347\216\257\345\242\203\346\220\255\345\273\272.md" "b/_drafts/Others/202302262208StableDiffusionWebui\347\216\257\345\242\203\346\220\255\345\273\272.md" similarity index 100% rename from "_drafts/202302262208StableDiffusionWebui\347\216\257\345\242\203\346\220\255\345\273\272.md" rename to "_drafts/Others/202302262208StableDiffusionWebui\347\216\257\345\242\203\346\220\255\345\273\272.md" diff --git a/_drafts/Others/ApkToolBoxGUI Release Notes.md b/_drafts/Others/ApkToolBoxGUI Release Notes.md new file mode 100644 index 0000000..09acbf6 --- /dev/null +++ b/_drafts/Others/ApkToolBoxGUI Release Notes.md @@ -0,0 +1,47 @@ + +# ApkToolBoxGUI v1.0.4发布了 + +ApkToolBoxGUI是一个方便程序员使用的工具,具有用户友好的图形界面。它是一个常用工具的集合,包括密码恢复、编码转换、时间戳转换、颜色选择器等,此外还有一些专门用于Android开发的工具(这就是为什么它被命名为ApkToolBoxGUI)。 + +项目地址: + +* GitHub: +* Gitee: + +[![Apache License V2.0](https://img.shields.io/badge/license-Apache%202-green)](http://www.apache.org/licenses/LICENSE-2.0) +[![GitHub all releases](https://img.shields.io/github/downloads/jiangxincode/ApkToolBoxGUI/total)](https://github.com/jiangxincode/ApkToolBoxGUI/releases) +[![Build and Rel +ease](https://github.com/jiangxincode/ApkToolBoxGUI/actions/workflows/BuildAndRelease.yml/badge.svg)](https://github.com/jiangxincode/ApkToolBoxGUI/actions/workflows/BuildAndRelease.yml) +[![Project Reports](https://img.shields.io/badge/ApkToolBoxGUI-Reports-green.svg)](https://jiangxincode.github.io/ApkToolBoxGUI/project-reports.html) +[![Codacy Badge](https://app.codacy.com/project/badge/Grade/dab038ef9ed04bf1b73bd0031422b814)](https://app.codacy.com/gh/jiangxincode/ApkToolBoxGUI/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade) +[![Code Scan](https://img.shields.io/badge/Github-CodeScan-green)](https://github.com/jiangxincode/ApkToolBoxGUI/security/code-scanning) +[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=jiangxincode_ApkToolBoxGUI&metric=alert_status)](https://sonarcloud.io/dashboard?id=jiangxincode_ApkToolBoxGUI) +[![CodeFactor](https://www.codefactor.io/repository/github/jiangxincode/apktoolboxgui/badge)](https://www.codefactor.io/repository/github/jiangxincode/apktoolboxgui) +[![Code Climate Maintainability](https://api.codeclimate.com/v1/badges/fb8d289a4b0ee14f9d8b/maintainability)](https://codeclimate.com/github/jiangxincode/ApkToolBoxGUI/maintainability) +[![Coverage Status](https://coveralls.io/repos/github/jiangxincode/ApkToolBoxGUI/badge.svg?branch=master)](https://coveralls.io/github/jiangxincode/ApkToolBoxGUI?branch=master) +[![Coverity Scan Build Status](https://scan.coverity.com/projects/19016/badge.svg)](https://scan.coverity.com/projects/jiangxincode-apktoolboxgui) + +## Feature and Usage(功能和使用方式) + +[![Documentation](https://img.shields.io/badge/Documentation-文档-green.svg)](https://jiangxincode.github.io/ApkToolBoxGUI) + +* [Password Recovery(密码恢复)](https://jiangxincode.github.io/ApkToolBoxGUI/features/recovery_file_password.html) +* [Batch Rename(批量重命名)](https://jiangxincode.github.io/ApkToolBoxGUI/features/batch_rename.html) +* [Check Summary(文件摘要检查)](https://jiangxincode.github.io/ApkToolBoxGUI/features/check_summary.html) +* [Color Picker(颜色拾取器)](https://jiangxincode.github.io/ApkToolBoxGUI/features/color_picker.html) +* [Base Convert(进制转换)](https://jiangxincode.github.io/ApkToolBoxGUI/features/convert_base.html) +* [OS Pattern Convert(操作系统文件格式转换)](https://jiangxincode.github.io/ApkToolBoxGUI/features/convert_os_pattern.html) +* [Time Convert(时间格式转换)](https://jiangxincode.github.io/ApkToolBoxGUI/features/convert_time_format.html) +* [Decode Protobuf(Protobuf解码)](https://jiangxincode.github.io/ApkToolBoxGUI/features/decode_protobuf.html) +* [Find Duplicate Files(重复文件查找)](https://jiangxincode.github.io/ApkToolBoxGUI/features/find_duplicate_files.html) +* [Reverse Engineer(逆向工程)](https://jiangxincode.github.io/ApkToolBoxGUI/features/reverse_engineer.html) +* [Android Develop(Android开发)](https://jiangxincode.github.io/ApkToolBoxGUI/features/android_i18n_operation.html) +* ... + +## Contribute(共同参与) + +[![Documentation](https://img.shields.io/badge/Contribute-共同参与-green.svg)](https://jiangxincode.github.io/ApkToolBoxGUI/contribute/how_to_contribute.html) + +## Communication Group(交流群) + +![QQ Group](https://raw.githubusercontent.com/wiki/jiangxincode/ApkToolBoxGUI/QQ_Group.png) \ No newline at end of file diff --git "a/_drafts/Cache\346\250\241\346\213\237\345\231\250(CacheSim).md" "b/_drafts/Others/Cache\346\250\241\346\213\237\345\231\250(CacheSim).md" similarity index 100% rename from "_drafts/Cache\346\250\241\346\213\237\345\231\250(CacheSim).md" rename to "_drafts/Others/Cache\346\250\241\346\213\237\345\231\250(CacheSim).md" diff --git "a/_drafts/Input\346\272\220\347\240\201\350\247\243\350\257\273\342\200\224\342\200\224\344\273\216"Show tabs"\345\274\200\345\247\213.md" "b/_drafts/Others/Input\346\272\220\347\240\201\350\247\243\350\257\273\342\200\224\342\200\224\344\273\216"Show tabs"\345\274\200\345\247\213.md" similarity index 100% rename from "_drafts/Input\346\272\220\347\240\201\350\247\243\350\257\273\342\200\224\342\200\224\344\273\216"Show tabs"\345\274\200\345\247\213.md" rename to "_drafts/Others/Input\346\272\220\347\240\201\350\247\243\350\257\273\342\200\224\342\200\224\344\273\216"Show tabs"\345\274\200\345\247\213.md" diff --git a/_drafts/Lecture Notes_ Macros.md b/_drafts/Others/Lecture Notes_ Macros.md similarity index 100% rename from _drafts/Lecture Notes_ Macros.md rename to _drafts/Others/Lecture Notes_ Macros.md diff --git "a/_drafts/MIPSsim\344\275\277\347\224\250\350\257\264\346\230\216.md" "b/_drafts/Others/MIPSsim\344\275\277\347\224\250\350\257\264\346\230\216.md" similarity index 100% rename from "_drafts/MIPSsim\344\275\277\347\224\250\350\257\264\346\230\216.md" rename to "_drafts/Others/MIPSsim\344\275\277\347\224\250\350\257\264\346\230\216.md" diff --git "a/_drafts/OOAD\344\270\216UML\347\254\224\350\256\260.md" "b/_drafts/Others/OOAD\344\270\216UML\347\254\224\350\256\260.md" similarity index 100% rename from "_drafts/OOAD\344\270\216UML\347\254\224\350\256\260.md" rename to "_drafts/Others/OOAD\344\270\216UML\347\254\224\350\256\260.md" diff --git "a/_drafts/Rdseed\344\270\216SAC\347\232\204\345\256\211\350\243\205.md" "b/_drafts/Others/Rdseed\344\270\216SAC\347\232\204\345\256\211\350\243\205.md" similarity index 90% rename from "_drafts/Rdseed\344\270\216SAC\347\232\204\345\256\211\350\243\205.md" rename to "_drafts/Others/Rdseed\344\270\216SAC\347\232\204\345\256\211\350\243\205.md" index 45067ee..872df55 100644 --- "a/_drafts/Rdseed\344\270\216SAC\347\232\204\345\256\211\350\243\205.md" +++ "b/_drafts/Others/Rdseed\344\270\216SAC\347\232\204\345\256\211\350\243\205.md" @@ -1,8 +1,3 @@ -欢迎和大家交流技术相关问题: -邮箱: jiangxinnju@163.com -博客园地址: http://www.cnblogs.com/jiangxinnju -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju ## Rdseed的安装 diff --git "a/_drafts/SVN+Apache\345\237\237\347\224\250\346\210\267\350\256\244\350\257\201\351\205\215\347\275\256\346\226\271\346\263\225_Windows(\350\275\254\357\274\214\351\207\215\346\226\260\346\216\222\347\211\210\357\274\214\351\203\250\345\210\206\345\206\205\345\256\271\346\233\264\346\226\260\344\274\230\345\214\226).md" "b/_drafts/Others/SVN+Apache\345\237\237\347\224\250\346\210\267\350\256\244\350\257\201\351\205\215\347\275\256\346\226\271\346\263\225_Windows(\350\275\254\357\274\214\351\207\215\346\226\260\346\216\222\347\211\210\357\274\214\351\203\250\345\210\206\345\206\205\345\256\271\346\233\264\346\226\260\344\274\230\345\214\226).md" similarity index 96% rename from "_drafts/SVN+Apache\345\237\237\347\224\250\346\210\267\350\256\244\350\257\201\351\205\215\347\275\256\346\226\271\346\263\225_Windows(\350\275\254\357\274\214\351\207\215\346\226\260\346\216\222\347\211\210\357\274\214\351\203\250\345\210\206\345\206\205\345\256\271\346\233\264\346\226\260\344\274\230\345\214\226).md" rename to "_drafts/Others/SVN+Apache\345\237\237\347\224\250\346\210\267\350\256\244\350\257\201\351\205\215\347\275\256\346\226\271\346\263\225_Windows(\350\275\254\357\274\214\351\207\215\346\226\260\346\216\222\347\211\210\357\274\214\351\203\250\345\210\206\345\206\205\345\256\271\346\233\264\346\226\260\344\274\230\345\214\226).md" index 4d1b2a1..df51a06 100644 --- "a/_drafts/SVN+Apache\345\237\237\347\224\250\346\210\267\350\256\244\350\257\201\351\205\215\347\275\256\346\226\271\346\263\225_Windows(\350\275\254\357\274\214\351\207\215\346\226\260\346\216\222\347\211\210\357\274\214\351\203\250\345\210\206\345\206\205\345\256\271\346\233\264\346\226\260\344\274\230\345\214\226).md" +++ "b/_drafts/Others/SVN+Apache\345\237\237\347\224\250\346\210\267\350\256\244\350\257\201\351\205\215\347\275\256\346\226\271\346\263\225_Windows(\350\275\254\357\274\214\351\207\215\346\226\260\346\216\222\347\211\210\357\274\214\351\203\250\345\210\206\345\206\205\345\256\271\346\233\264\346\226\260\344\274\230\345\214\226).md" @@ -1,8 +1,3 @@ -欢迎和大家交流技术相关问题: -邮箱: jiangxinnju@163.com -博客园地址: http://www.cnblogs.com/jiangxinnju -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju # 背景说明 diff --git a/_drafts/Use the SVN command-line tool.md b/_drafts/Others/Use the SVN command-line tool.md similarity index 100% rename from _drafts/Use the SVN command-line tool.md rename to _drafts/Others/Use the SVN command-line tool.md diff --git "a/_drafts/VIM\345\270\270\350\247\201\347\224\250\346\263\225\346\200\273\347\273\223.md" "b/_drafts/Others/VIM\345\270\270\350\247\201\347\224\250\346\263\225\346\200\273\347\273\223.md" similarity index 97% rename from "_drafts/VIM\345\270\270\350\247\201\347\224\250\346\263\225\346\200\273\347\273\223.md" rename to "_drafts/Others/VIM\345\270\270\350\247\201\347\224\250\346\263\225\346\200\273\347\273\223.md" index dadba7f..fc33f0b 100644 --- "a/_drafts/VIM\345\270\270\350\247\201\347\224\250\346\263\225\346\200\273\347\273\223.md" +++ "b/_drafts/Others/VIM\345\270\270\350\247\201\347\224\250\346\263\225\346\200\273\347\273\223.md" @@ -1,8 +1,3 @@ -欢迎和大家交流技术相关问题: -邮箱: jiangxinnju@163.com -博客园地址: http://www.cnblogs.com/jiangxinnju -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju ## vim中光标如何回到上一次位置 diff --git "a/_drafts/VirtualBox\347\233\270\345\205\263\351\227\256\351\242\230\346\200\273\347\273\223.md" "b/_drafts/Others/VirtualBox\347\233\270\345\205\263\351\227\256\351\242\230\346\200\273\347\273\223.md" similarity index 93% rename from "_drafts/VirtualBox\347\233\270\345\205\263\351\227\256\351\242\230\346\200\273\347\273\223.md" rename to "_drafts/Others/VirtualBox\347\233\270\345\205\263\351\227\256\351\242\230\346\200\273\347\273\223.md" index ec01b2a..3248873 100644 --- "a/_drafts/VirtualBox\347\233\270\345\205\263\351\227\256\351\242\230\346\200\273\347\273\223.md" +++ "b/_drafts/Others/VirtualBox\347\233\270\345\205\263\351\227\256\351\242\230\346\200\273\347\273\223.md" @@ -1,10 +1,3 @@ -欢迎关注我的社交账号: - -邮箱: jiangxinnju@163.com -博客园地址: http://www.cnblogs.com/jiangxinnju -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju - * VirtualBox Images: http://www.osboxes.org/virtualbox-images * VirtualBoxes – Free VirtualBox® Images: https://virtualboxes.org/images diff --git "a/_drafts/Windows\345\271\263\345\217\260\344\270\213\345\256\211\350\243\205Eclipse\346\217\222\344\273\266\357\274\214\345\274\200\345\217\221Hadoop\345\272\224\347\224\250.md" "b/_drafts/Others/Windows\345\271\263\345\217\260\344\270\213\345\256\211\350\243\205Eclipse\346\217\222\344\273\266\357\274\214\345\274\200\345\217\221Hadoop\345\272\224\347\224\250.md" similarity index 98% rename from "_drafts/Windows\345\271\263\345\217\260\344\270\213\345\256\211\350\243\205Eclipse\346\217\222\344\273\266\357\274\214\345\274\200\345\217\221Hadoop\345\272\224\347\224\250.md" rename to "_drafts/Others/Windows\345\271\263\345\217\260\344\270\213\345\256\211\350\243\205Eclipse\346\217\222\344\273\266\357\274\214\345\274\200\345\217\221Hadoop\345\272\224\347\224\250.md" index 895e0d8..e256789 100644 --- "a/_drafts/Windows\345\271\263\345\217\260\344\270\213\345\256\211\350\243\205Eclipse\346\217\222\344\273\266\357\274\214\345\274\200\345\217\221Hadoop\345\272\224\347\224\250.md" +++ "b/_drafts/Others/Windows\345\271\263\345\217\260\344\270\213\345\256\211\350\243\205Eclipse\346\217\222\344\273\266\357\274\214\345\274\200\345\217\221Hadoop\345\272\224\347\224\250.md" @@ -1,9 +1,3 @@ -欢迎和大家交流技术相关问题: -邮箱: jiangxinnju@163.com -博客园地址: http://www.cnblogs.com/jiangxinnju -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju - # 安装插件 diff --git "a/_drafts/Windows\346\227\245\345\277\227\346\237\245\347\234\213\345\267\245\345\205\267\345\220\210\351\233\206.md" "b/_drafts/Others/Windows\346\227\245\345\277\227\346\237\245\347\234\213\345\267\245\345\205\267\345\220\210\351\233\206.md" similarity index 86% rename from "_drafts/Windows\346\227\245\345\277\227\346\237\245\347\234\213\345\267\245\345\205\267\345\220\210\351\233\206.md" rename to "_drafts/Others/Windows\346\227\245\345\277\227\346\237\245\347\234\213\345\267\245\345\205\267\345\220\210\351\233\206.md" index e776637..431df56 100644 --- "a/_drafts/Windows\346\227\245\345\277\227\346\237\245\347\234\213\345\267\245\345\205\267\345\220\210\351\233\206.md" +++ "b/_drafts/Others/Windows\346\227\245\345\277\227\346\237\245\347\234\213\345\267\245\345\205\267\345\220\210\351\233\206.md" @@ -1,10 +1,3 @@ -欢迎关注我的社交账号: - -博客园地址: http://www.cnblogs.com/jiangxinnju -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju - -希望可以和大家多多交流。 平时在Linux下查看日志,使用tail、grep、find等命令还比较方便,后来需要在Windows中处理一些问题,发现缺少类似的功能,比如tailf实时输出,于是在网上收集了一些相关的小工具,希望能够帮助到大家。 diff --git "a/_drafts/XShell\344\275\277\347\224\250\351\227\256\351\242\230\346\261\207\346\200\273.md" "b/_drafts/Others/XShell\344\275\277\347\224\250\351\227\256\351\242\230\346\261\207\346\200\273.md" similarity index 100% rename from "_drafts/XShell\344\275\277\347\224\250\351\227\256\351\242\230\346\261\207\346\200\273.md" rename to "_drafts/Others/XShell\344\275\277\347\224\250\351\227\256\351\242\230\346\261\207\346\200\273.md" diff --git "a/_drafts/openmpi\345\207\272\347\216\260Segmentation Fault\350\200\214\347\273\210\346\255\242\350\277\220\347\256\227.md" "b/_drafts/Others/openmpi\345\207\272\347\216\260Segmentation Fault\350\200\214\347\273\210\346\255\242\350\277\220\347\256\227.md" similarity index 70% rename from "_drafts/openmpi\345\207\272\347\216\260Segmentation Fault\350\200\214\347\273\210\346\255\242\350\277\220\347\256\227.md" rename to "_drafts/Others/openmpi\345\207\272\347\216\260Segmentation Fault\350\200\214\347\273\210\346\255\242\350\277\220\347\256\227.md" index 9c74652..07f185a 100644 --- "a/_drafts/openmpi\345\207\272\347\216\260Segmentation Fault\350\200\214\347\273\210\346\255\242\350\277\220\347\256\227.md" +++ "b/_drafts/Others/openmpi\345\207\272\347\216\260Segmentation Fault\350\200\214\347\273\210\346\255\242\350\277\220\347\256\227.md" @@ -1,10 +1,3 @@ -欢迎关注我的社交账号: - -邮箱: jiangxinnju@163.com -博客园地址: http://www.cnblogs.com/jiangxinnju -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju - ``` mpirun noticed that process rank 1 with PID 3716 on node localhost.localdomain exited on signal 11 (Segmentation fault). diff --git "a/_drafts/tcpdump\346\215\225\346\215\211\346\240\267\344\276\213.md" "b/_drafts/Others/tcpdump\346\215\225\346\215\211\346\240\267\344\276\213.md" similarity index 93% rename from "_drafts/tcpdump\346\215\225\346\215\211\346\240\267\344\276\213.md" rename to "_drafts/Others/tcpdump\346\215\225\346\215\211\346\240\267\344\276\213.md" index 2b24dac..c3e0c17 100644 --- "a/_drafts/tcpdump\346\215\225\346\215\211\346\240\267\344\276\213.md" +++ "b/_drafts/Others/tcpdump\346\215\225\346\215\211\346\240\267\344\276\213.md" @@ -1,9 +1,3 @@ -欢迎和大家交流技术相关问题: -邮箱: jiangxinnju@163.com -博客园地址: http://www.cnblogs.com/jiangxinnju -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju - ```shell diff --git "a/_drafts/\344\270\200\344\270\252\347\224\261\344\272\216\347\275\221\347\273\234\351\227\256\351\242\230\345\257\274\350\207\264\347\232\204\346\234\215\345\212\241\346\227\240\346\263\225\344\275\277\347\224\250\342\200\224\342\200\224\350\260\203\350\257\225\350\277\207\347\250\213\346\200\273\347\273\223.md" "b/_drafts/Others/\344\270\200\344\270\252\347\224\261\344\272\216\347\275\221\347\273\234\351\227\256\351\242\230\345\257\274\350\207\264\347\232\204\346\234\215\345\212\241\346\227\240\346\263\225\344\275\277\347\224\250\342\200\224\342\200\224\350\260\203\350\257\225\350\277\207\347\250\213\346\200\273\347\273\223.md" similarity index 93% rename from "_drafts/\344\270\200\344\270\252\347\224\261\344\272\216\347\275\221\347\273\234\351\227\256\351\242\230\345\257\274\350\207\264\347\232\204\346\234\215\345\212\241\346\227\240\346\263\225\344\275\277\347\224\250\342\200\224\342\200\224\350\260\203\350\257\225\350\277\207\347\250\213\346\200\273\347\273\223.md" rename to "_drafts/Others/\344\270\200\344\270\252\347\224\261\344\272\216\347\275\221\347\273\234\351\227\256\351\242\230\345\257\274\350\207\264\347\232\204\346\234\215\345\212\241\346\227\240\346\263\225\344\275\277\347\224\250\342\200\224\342\200\224\350\260\203\350\257\225\350\277\207\347\250\213\346\200\273\347\273\223.md" index 5b93218..aea131b 100644 --- "a/_drafts/\344\270\200\344\270\252\347\224\261\344\272\216\347\275\221\347\273\234\351\227\256\351\242\230\345\257\274\350\207\264\347\232\204\346\234\215\345\212\241\346\227\240\346\263\225\344\275\277\347\224\250\342\200\224\342\200\224\350\260\203\350\257\225\350\277\207\347\250\213\346\200\273\347\273\223.md" +++ "b/_drafts/Others/\344\270\200\344\270\252\347\224\261\344\272\216\347\275\221\347\273\234\351\227\256\351\242\230\345\257\274\350\207\264\347\232\204\346\234\215\345\212\241\346\227\240\346\263\225\344\275\277\347\224\250\342\200\224\342\200\224\350\260\203\350\257\225\350\277\207\347\250\213\346\200\273\347\273\223.md" @@ -1,9 +1,3 @@ -欢迎和大家交流技术相关问题: - -* 邮箱: jiangxinnju@163.com -* 博客园地址: http://www.cnblogs.com/jiangxinnju -* GitHub地址: https://github.com/jiangxincode -* 知乎地址: https://www.zhihu.com/people/jiangxinnju 最近测试经常让我处理一个问题,就是网站服务无法使用,通过Windows跳转机,使用Chrome浏览器访问服务首页,页面什么也没有展示,使用Chrome的F12调试窗口,发现并没有和服务端SLB的任何交互请求。查看后台门户的相关进程,均正常运行。查看后台日志,没有发现明显的错误。访问SLB的页面管理系统,发现所需服务均正常注册。定位无果后所以尝试重启,不定次数重启之后,清除浏览器缓存,继续登录,发现服务又能够正常访问。但是再次重启后,问题复现。 diff --git "a/_drafts/\344\270\200\344\270\252\347\250\213\345\272\217\345\221\230\350\203\275\345\244\237\346\216\247\345\210\266\345\244\232\345\260\221\350\241\214\344\273\243\347\240\201.md" "b/_drafts/Others/\344\270\200\344\270\252\347\250\213\345\272\217\345\221\230\350\203\275\345\244\237\346\216\247\345\210\266\345\244\232\345\260\221\350\241\214\344\273\243\347\240\201.md" similarity index 100% rename from "_drafts/\344\270\200\344\270\252\347\250\213\345\272\217\345\221\230\350\203\275\345\244\237\346\216\247\345\210\266\345\244\232\345\260\221\350\241\214\344\273\243\347\240\201.md" rename to "_drafts/Others/\344\270\200\344\270\252\347\250\213\345\272\217\345\221\230\350\203\275\345\244\237\346\216\247\345\210\266\345\244\232\345\260\221\350\241\214\344\273\243\347\240\201.md" diff --git "a/_drafts/\344\270\215\345\274\225\345\205\245\346\226\260\347\232\204\346\225\260\347\273\204\357\274\214\345\256\236\347\216\260\346\225\260\347\273\204\345\205\203\347\264\240\344\272\244\346\215\242\344\275\215\347\275\256\345\207\275\346\225\260.md" "b/_drafts/Others/\344\270\215\345\274\225\345\205\245\346\226\260\347\232\204\346\225\260\347\273\204\357\274\214\345\256\236\347\216\260\346\225\260\347\273\204\345\205\203\347\264\240\344\272\244\346\215\242\344\275\215\347\275\256\345\207\275\346\225\260.md" similarity index 100% rename from "_drafts/\344\270\215\345\274\225\345\205\245\346\226\260\347\232\204\346\225\260\347\273\204\357\274\214\345\256\236\347\216\260\346\225\260\347\273\204\345\205\203\347\264\240\344\272\244\346\215\242\344\275\215\347\275\256\345\207\275\346\225\260.md" rename to "_drafts/Others/\344\270\215\345\274\225\345\205\245\346\226\260\347\232\204\346\225\260\347\273\204\357\274\214\345\256\236\347\216\260\346\225\260\347\273\204\345\205\203\347\264\240\344\272\244\346\215\242\344\275\215\347\275\256\345\207\275\346\225\260.md" diff --git "a/_drafts/\344\270\272\344\273\200\344\271\210\345\244\247\345\244\232\346\225\260\347\274\226\347\250\213\350\257\255\350\250\200\344\270\255\347\232\204\346\225\260\347\273\204\351\203\275\344\273\2160\345\274\200\345\247\213.md" "b/_drafts/Others/\344\270\272\344\273\200\344\271\210\345\244\247\345\244\232\346\225\260\347\274\226\347\250\213\350\257\255\350\250\200\344\270\255\347\232\204\346\225\260\347\273\204\351\203\275\344\273\2160\345\274\200\345\247\213.md" similarity index 100% rename from "_drafts/\344\270\272\344\273\200\344\271\210\345\244\247\345\244\232\346\225\260\347\274\226\347\250\213\350\257\255\350\250\200\344\270\255\347\232\204\346\225\260\347\273\204\351\203\275\344\273\2160\345\274\200\345\247\213.md" rename to "_drafts/Others/\344\270\272\344\273\200\344\271\210\345\244\247\345\244\232\346\225\260\347\274\226\347\250\213\350\257\255\350\250\200\344\270\255\347\232\204\346\225\260\347\273\204\351\203\275\344\273\2160\345\274\200\345\247\213.md" diff --git "a/_drafts/\344\270\272\344\273\200\344\271\210\346\210\221\344\273\254\346\200\273\346\230\257\345\256\214\344\270\215\346\210\220\347\233\256\346\240\207.md" "b/_drafts/Others/\344\270\272\344\273\200\344\271\210\346\210\221\344\273\254\346\200\273\346\230\257\345\256\214\344\270\215\346\210\220\347\233\256\346\240\207.md" similarity index 100% rename from "_drafts/\344\270\272\344\273\200\344\271\210\346\210\221\344\273\254\346\200\273\346\230\257\345\256\214\344\270\215\346\210\220\347\233\256\346\240\207.md" rename to "_drafts/Others/\344\270\272\344\273\200\344\271\210\346\210\221\344\273\254\346\200\273\346\230\257\345\256\214\344\270\215\346\210\220\347\233\256\346\240\207.md" diff --git "a/_drafts/\344\275\277\347\224\250OpenSSL\345\256\236\347\216\260X25519\347\247\230\351\222\245\345\215\217\345\225\206\345\212\237\350\203\275.md" "b/_drafts/Others/\344\275\277\347\224\250OpenSSL\345\256\236\347\216\260X25519\347\247\230\351\222\245\345\215\217\345\225\206\345\212\237\350\203\275.md" similarity index 100% rename from "_drafts/\344\275\277\347\224\250OpenSSL\345\256\236\347\216\260X25519\347\247\230\351\222\245\345\215\217\345\225\206\345\212\237\350\203\275.md" rename to "_drafts/Others/\344\275\277\347\224\250OpenSSL\345\256\236\347\216\260X25519\347\247\230\351\222\245\345\215\217\345\225\206\345\212\237\350\203\275.md" diff --git "a/_drafts/\344\275\277\347\224\250PowerShell\347\256\200\345\214\226\346\210\221\347\232\204\345\267\245\344\275\234.md" "b/_drafts/Others/\344\275\277\347\224\250PowerShell\347\256\200\345\214\226\346\210\221\347\232\204\345\267\245\344\275\234.md" similarity index 90% rename from "_drafts/\344\275\277\347\224\250PowerShell\347\256\200\345\214\226\346\210\221\347\232\204\345\267\245\344\275\234.md" rename to "_drafts/Others/\344\275\277\347\224\250PowerShell\347\256\200\345\214\226\346\210\221\347\232\204\345\267\245\344\275\234.md" index 403e35a..1480846 100644 --- "a/_drafts/\344\275\277\347\224\250PowerShell\347\256\200\345\214\226\346\210\221\347\232\204\345\267\245\344\275\234.md" +++ "b/_drafts/Others/\344\275\277\347\224\250PowerShell\347\256\200\345\214\226\346\210\221\347\232\204\345\267\245\344\275\234.md" @@ -1,8 +1,3 @@ -欢迎关注我的社交账号: - -博客园地址: http://www.cnblogs.com/jiangxinnju/p/4781259.html -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju 在这几年的编程学习和工作中,我积累的许多轻量级的小工具,比如Everything,BeyondCompare,BatchRename、HperSnap等等,这些软件都是绿色软件,无需安装,即使重装系统也可以很容易的迁移。但是由于工具比较多,不可能在桌面上为这些工具全部设置快捷方式,于是只能使用命令行进行调用。程序员们应该都知道,如果想要在cmd或者powershell中调用这些小工具,就要把这些工具的可执行文件的所在目录添加到系统环境变量Path之中。但是这样手工去添加太麻烦了,因为要添加的目录比较多,而且之后如果还想加入新的工具就必须继续设置环境变量,最重要的一点是每次重装系统还要重新设置一遍。作为一个程序员怎么去做这么笨的事情呢?于是我写了一个powershell配置脚本,让powershell每次启动时都去读该脚本,设置环境变量。 首先介绍一下我的工具集的结构: diff --git "a/_drafts/\345\205\263\344\272\216\345\274\272\345\210\266\345\274\217\357\274\210\345\221\275\344\273\244\345\274\217\357\274\211\350\257\255\350\250\200\345\222\214\345\243\260\346\230\216\345\274\217\350\257\255\350\250\200\347\232\204\345\214\272\345\210\253.md" "b/_drafts/Others/\345\205\263\344\272\216\345\274\272\345\210\266\345\274\217\357\274\210\345\221\275\344\273\244\345\274\217\357\274\211\350\257\255\350\250\200\345\222\214\345\243\260\346\230\216\345\274\217\350\257\255\350\250\200\347\232\204\345\214\272\345\210\253.md" similarity index 100% rename from "_drafts/\345\205\263\344\272\216\345\274\272\345\210\266\345\274\217\357\274\210\345\221\275\344\273\244\345\274\217\357\274\211\350\257\255\350\250\200\345\222\214\345\243\260\346\230\216\345\274\217\350\257\255\350\250\200\347\232\204\345\214\272\345\210\253.md" rename to "_drafts/Others/\345\205\263\344\272\216\345\274\272\345\210\266\345\274\217\357\274\210\345\221\275\344\273\244\345\274\217\357\274\211\350\257\255\350\250\200\345\222\214\345\243\260\346\230\216\345\274\217\350\257\255\350\250\200\347\232\204\345\214\272\345\210\253.md" diff --git "a/_drafts/\345\205\263\344\272\216\350\256\260\345\275\225\346\227\245\345\277\227\347\232\204\345\207\240\344\270\252\345\260\217\345\277\203\345\276\227.md" "b/_drafts/Others/\345\205\263\344\272\216\350\256\260\345\275\225\346\227\245\345\277\227\347\232\204\345\207\240\344\270\252\345\260\217\345\277\203\345\276\227.md" similarity index 82% rename from "_drafts/\345\205\263\344\272\216\350\256\260\345\275\225\346\227\245\345\277\227\347\232\204\345\207\240\344\270\252\345\260\217\345\277\203\345\276\227.md" rename to "_drafts/Others/\345\205\263\344\272\216\350\256\260\345\275\225\346\227\245\345\277\227\347\232\204\345\207\240\344\270\252\345\260\217\345\277\203\345\276\227.md" index 11a9fe5..e13459e 100644 --- "a/_drafts/\345\205\263\344\272\216\350\256\260\345\275\225\346\227\245\345\277\227\347\232\204\345\207\240\344\270\252\345\260\217\345\277\203\345\276\227.md" +++ "b/_drafts/Others/\345\205\263\344\272\216\350\256\260\345\275\225\346\227\245\345\277\227\347\232\204\345\207\240\344\270\252\345\260\217\345\277\203\345\276\227.md" @@ -1,8 +1,3 @@ -欢迎和大家交流技术相关问题: -邮箱: jiangxinnju@163.com -博客园地址: http://www.cnblogs.com/jiangxinnju -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju 如何记录好日志其实是个很值得探讨的事情,下面两篇文章介绍了一些基本的原则: diff --git "a/_drafts/\345\210\206\350\257\215\345\267\245\345\205\267\346\257\224\350\276\203\357\274\210\350\275\254\357\274\211.md" "b/_drafts/Others/\345\210\206\350\257\215\345\267\245\345\205\267\346\257\224\350\276\203\357\274\210\350\275\254\357\274\211.md" similarity index 97% rename from "_drafts/\345\210\206\350\257\215\345\267\245\345\205\267\346\257\224\350\276\203\357\274\210\350\275\254\357\274\211.md" rename to "_drafts/Others/\345\210\206\350\257\215\345\267\245\345\205\267\346\257\224\350\276\203\357\274\210\350\275\254\357\274\211.md" index 01906f9..826d337 100644 --- "a/_drafts/\345\210\206\350\257\215\345\267\245\345\205\267\346\257\224\350\276\203\357\274\210\350\275\254\357\274\211.md" +++ "b/_drafts/Others/\345\210\206\350\257\215\345\267\245\345\205\267\346\257\224\350\276\203\357\274\210\350\275\254\357\274\211.md" @@ -1,6 +1,3 @@ -* 博客园地址: http://www.cnblogs.com/jiangxinnju -* GitHub地址: https://github.com/jiangxincode -* 知乎地址: https://www.zhihu.com/people/jiangxinnju # IKAnalyzer diff --git "a/_drafts/\345\210\244\346\226\255\344\270\200\344\270\252\346\225\260\346\230\257\344\270\215\346\230\2572\347\232\204\345\271\202.md" "b/_drafts/Others/\345\210\244\346\226\255\344\270\200\344\270\252\346\225\260\346\230\257\344\270\215\346\230\2572\347\232\204\345\271\202.md" similarity index 100% rename from "_drafts/\345\210\244\346\226\255\344\270\200\344\270\252\346\225\260\346\230\257\344\270\215\346\230\2572\347\232\204\345\271\202.md" rename to "_drafts/Others/\345\210\244\346\226\255\344\270\200\344\270\252\346\225\260\346\230\257\344\270\215\346\230\2572\347\232\204\345\271\202.md" diff --git "a/_drafts/\345\210\266\344\275\234Aspose CHM\346\226\207\346\241\243\347\232\204\350\277\207\347\250\213\350\256\260\345\275\225.md" "b/_drafts/Others/\345\210\266\344\275\234Aspose CHM\346\226\207\346\241\243\347\232\204\350\277\207\347\250\213\350\256\260\345\275\225.md" similarity index 93% rename from "_drafts/\345\210\266\344\275\234Aspose CHM\346\226\207\346\241\243\347\232\204\350\277\207\347\250\213\350\256\260\345\275\225.md" rename to "_drafts/Others/\345\210\266\344\275\234Aspose CHM\346\226\207\346\241\243\347\232\204\350\277\207\347\250\213\350\256\260\345\275\225.md" index 328ebe1..d782c4e 100644 --- "a/_drafts/\345\210\266\344\275\234Aspose CHM\346\226\207\346\241\243\347\232\204\350\277\207\347\250\213\350\256\260\345\275\225.md" +++ "b/_drafts/Others/\345\210\266\344\275\234Aspose CHM\346\226\207\346\241\243\347\232\204\350\277\207\347\250\213\350\256\260\345\275\225.md" @@ -1,8 +1,3 @@ -欢迎和大家交流技术相关问题: -邮箱: jiangxinnju@163.com -博客园地址: http://www.cnblogs.com/jiangxinnju -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju 最近公司需要使用Aspose组件开发相关内容,但是网上找不到理想的参考文档,官网访问速度也慢的可以。所以打算自己做份CHM文档,做的过程中遇到很多困难,这里记录一下。 第一步是在Aspose官网上把javadoc文档爬取出来,我使用的工具是TeleportPro。爬取的网址是 diff --git "a/_drafts/\345\215\216\344\270\272\351\235\242\350\257\225\351\242\230\342\200\224\342\200\224\344\270\200\351\201\223\345\205\263\344\272\216\346\214\207\351\222\210\346\226\271\351\235\242\347\232\204\347\274\226\347\250\213\351\242\230(C_C++).md" "b/_drafts/Others/\345\215\216\344\270\272\351\235\242\350\257\225\351\242\230\342\200\224\342\200\224\344\270\200\351\201\223\345\205\263\344\272\216\346\214\207\351\222\210\346\226\271\351\235\242\347\232\204\347\274\226\347\250\213\351\242\230(C_C++).md" similarity index 100% rename from "_drafts/\345\215\216\344\270\272\351\235\242\350\257\225\351\242\230\342\200\224\342\200\224\344\270\200\351\201\223\345\205\263\344\272\216\346\214\207\351\222\210\346\226\271\351\235\242\347\232\204\347\274\226\347\250\213\351\242\230(C_C++).md" rename to "_drafts/Others/\345\215\216\344\270\272\351\235\242\350\257\225\351\242\230\342\200\224\342\200\224\344\270\200\351\201\223\345\205\263\344\272\216\346\214\207\351\222\210\346\226\271\351\235\242\347\232\204\347\274\226\347\250\213\351\242\230(C_C++).md" diff --git "a/_drafts/\345\215\216\344\270\272\351\235\242\350\257\225\351\242\230\342\200\224\342\200\224\345\215\225\345\220\221\351\223\276\350\241\250\345\200\222\350\275\254\357\274\210\344\270\200\346\254\241\351\201\215\345\216\206\357\274\211.md" "b/_drafts/Others/\345\215\216\344\270\272\351\235\242\350\257\225\351\242\230\342\200\224\342\200\224\345\215\225\345\220\221\351\223\276\350\241\250\345\200\222\350\275\254\357\274\210\344\270\200\346\254\241\351\201\215\345\216\206\357\274\211.md" similarity index 100% rename from "_drafts/\345\215\216\344\270\272\351\235\242\350\257\225\351\242\230\342\200\224\342\200\224\345\215\225\345\220\221\351\223\276\350\241\250\345\200\222\350\275\254\357\274\210\344\270\200\346\254\241\351\201\215\345\216\206\357\274\211.md" rename to "_drafts/Others/\345\215\216\344\270\272\351\235\242\350\257\225\351\242\230\342\200\224\342\200\224\345\215\225\345\220\221\351\223\276\350\241\250\345\200\222\350\275\254\357\274\210\344\270\200\346\254\241\351\201\215\345\216\206\357\274\211.md" diff --git "a/_drafts/\345\215\216\344\270\272\351\235\242\350\257\225\351\242\230\342\200\224\342\200\224\347\272\246\347\221\237\345\244\253\351\227\256\351\242\230\347\232\204C++\347\256\200\345\215\225\345\256\236\347\216\260\357\274\210\345\276\252\347\216\257\351\223\276\350\241\250\357\274\211.md" "b/_drafts/Others/\345\215\216\344\270\272\351\235\242\350\257\225\351\242\230\342\200\224\342\200\224\347\272\246\347\221\237\345\244\253\351\227\256\351\242\230\347\232\204C++\347\256\200\345\215\225\345\256\236\347\216\260\357\274\210\345\276\252\347\216\257\351\223\276\350\241\250\357\274\211.md" similarity index 100% rename from "_drafts/\345\215\216\344\270\272\351\235\242\350\257\225\351\242\230\342\200\224\342\200\224\347\272\246\347\221\237\345\244\253\351\227\256\351\242\230\347\232\204C++\347\256\200\345\215\225\345\256\236\347\216\260\357\274\210\345\276\252\347\216\257\351\223\276\350\241\250\357\274\211.md" rename to "_drafts/Others/\345\215\216\344\270\272\351\235\242\350\257\225\351\242\230\342\200\224\342\200\224\347\272\246\347\221\237\345\244\253\351\227\256\351\242\230\347\232\204C++\347\256\200\345\215\225\345\256\236\347\216\260\357\274\210\345\276\252\347\216\257\351\223\276\350\241\250\357\274\211.md" diff --git "a/_drafts/\345\234\250 Windows \344\270\212\345\256\211\350\243\205 Hadoop \346\225\231\347\250\213\357\274\210\350\275\254\357\274\211.md" "b/_drafts/Others/\345\234\250 Windows \344\270\212\345\256\211\350\243\205 Hadoop \346\225\231\347\250\213\357\274\210\350\275\254\357\274\211.md" similarity index 97% rename from "_drafts/\345\234\250 Windows \344\270\212\345\256\211\350\243\205 Hadoop \346\225\231\347\250\213\357\274\210\350\275\254\357\274\211.md" rename to "_drafts/Others/\345\234\250 Windows \344\270\212\345\256\211\350\243\205 Hadoop \346\225\231\347\250\213\357\274\210\350\275\254\357\274\211.md" index ee93430..4fd0587 100644 --- "a/_drafts/\345\234\250 Windows \344\270\212\345\256\211\350\243\205 Hadoop \346\225\231\347\250\213\357\274\210\350\275\254\357\274\211.md" +++ "b/_drafts/Others/\345\234\250 Windows \344\270\212\345\256\211\350\243\205 Hadoop \346\225\231\347\250\213\357\274\210\350\275\254\357\274\211.md" @@ -1,10 +1,3 @@ -欢迎和大家交流技术相关问题: -邮箱: jiangxinnju@163.com -博客园地址: http://www.cnblogs.com/jiangxinnju -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju - - 在 Windows 上安装 Hadoop 教程 diff --git "a/_drafts/\345\234\250\345\267\245\344\275\234\344\270\255\351\201\207\345\210\260\347\232\204\351\227\256\351\242\230.md" "b/_drafts/Others/\345\234\250\345\267\245\344\275\234\344\270\255\351\201\207\345\210\260\347\232\204\351\227\256\351\242\230.md" similarity index 95% rename from "_drafts/\345\234\250\345\267\245\344\275\234\344\270\255\351\201\207\345\210\260\347\232\204\351\227\256\351\242\230.md" rename to "_drafts/Others/\345\234\250\345\267\245\344\275\234\344\270\255\351\201\207\345\210\260\347\232\204\351\227\256\351\242\230.md" index b945806..babb72e 100644 --- "a/_drafts/\345\234\250\345\267\245\344\275\234\344\270\255\351\201\207\345\210\260\347\232\204\351\227\256\351\242\230.md" +++ "b/_drafts/Others/\345\234\250\345\267\245\344\275\234\344\270\255\351\201\207\345\210\260\347\232\204\351\227\256\351\242\230.md" @@ -1,8 +1,3 @@ -欢迎和大家交流技术相关问题: -邮箱: jiangxinnju@163.com -博客园地址: http://www.cnblogs.com/jiangxinnju -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju 最近我经常要更改应用中的一些功能,其实要做的事情比较简单,但是也很繁琐,这里记录一下。由于只是实现一些小的功能接口,不会更改网站的显示内容,所以不能或者很难通过网页直接查看,所以我一般是按照下面的步骤进行处理。 diff --git "a/_drafts/\345\237\272\344\272\216\345\257\271\350\261\241\345\222\214\351\235\242\345\220\221\345\257\271\350\261\241\347\232\204\345\214\272\345\210\253.md" "b/_drafts/Others/\345\237\272\344\272\216\345\257\271\350\261\241\345\222\214\351\235\242\345\220\221\345\257\271\350\261\241\347\232\204\345\214\272\345\210\253.md" similarity index 100% rename from "_drafts/\345\237\272\344\272\216\345\257\271\350\261\241\345\222\214\351\235\242\345\220\221\345\257\271\350\261\241\347\232\204\345\214\272\345\210\253.md" rename to "_drafts/Others/\345\237\272\344\272\216\345\257\271\350\261\241\345\222\214\351\235\242\345\220\221\345\257\271\350\261\241\347\232\204\345\214\272\345\210\253.md" diff --git "a/_drafts/\345\255\227\347\254\246\344\271\261\347\240\201\344\270\200\351\224\205\347\202\226.md" "b/_drafts/Others/\345\255\227\347\254\246\344\271\261\347\240\201\344\270\200\351\224\205\347\202\226.md" similarity index 100% rename from "_drafts/\345\255\227\347\254\246\344\271\261\347\240\201\344\270\200\351\224\205\347\202\226.md" rename to "_drafts/Others/\345\255\227\347\254\246\344\271\261\347\240\201\344\270\200\351\224\205\347\202\226.md" diff --git "a/_drafts/\345\257\271\350\261\241\346\261\240\343\200\201\347\272\277\347\250\213\346\261\240\343\200\201\346\225\260\346\215\256\345\272\223\350\277\236\346\216\245\346\261\240\343\200\201\345\206\205\345\255\230\346\261\240\345\211\226\346\236\220.md" "b/_drafts/Others/\345\257\271\350\261\241\346\261\240\343\200\201\347\272\277\347\250\213\346\261\240\343\200\201\346\225\260\346\215\256\345\272\223\350\277\236\346\216\245\346\261\240\343\200\201\345\206\205\345\255\230\346\261\240\345\211\226\346\236\220.md" similarity index 100% rename from "_drafts/\345\257\271\350\261\241\346\261\240\343\200\201\347\272\277\347\250\213\346\261\240\343\200\201\346\225\260\346\215\256\345\272\223\350\277\236\346\216\245\346\261\240\343\200\201\345\206\205\345\255\230\346\261\240\345\211\226\346\236\220.md" rename to "_drafts/Others/\345\257\271\350\261\241\346\261\240\343\200\201\347\272\277\347\250\213\346\261\240\343\200\201\346\225\260\346\215\256\345\272\223\350\277\236\346\216\245\346\261\240\343\200\201\345\206\205\345\255\230\346\261\240\345\211\226\346\236\220.md" diff --git "a/_drafts/Others/\345\267\245\345\205\267\350\275\257\344\273\266\345\244\207\345\277\230.md" "b/_drafts/Others/\345\267\245\345\205\267\350\275\257\344\273\266\345\244\207\345\277\230.md" new file mode 100644 index 0000000..f9fe56a --- /dev/null +++ "b/_drafts/Others/\345\267\245\345\205\267\350\275\257\344\273\266\345\244\207\345\277\230.md" @@ -0,0 +1,271 @@ +# 工具软件备忘 + +## Note App + +|知识库/笔记应用|仍在维护|本地笔记|云同步|跨平台|双链|Markdown|付费|开源|备注| +|-|-|-|-|-|-|-|-|-|-| +|[OneNote](https://www.onenote.com/)|是|支持|支持|除Linux外全平台|不支持|不支持,私有格式|软件收费,服务免费|否|| +|[Notion](https://www.notion.so/)|是|不支持|支持|除Linux外全平台|不支持|不支持,私有格式|高级功能收费|否|| +|[Obsidian](https://obsidian.md/)|是|支持|支持|全平台|支持|使用Markdown存储|高级功能收费|否|| +|[Joplin](https://github.com/laurent22/joplin)|是|支持|支持|全平台|不支持|使用Markdown存储|云端服务需要付费|是|| +|[Logsql](https://github.com/logseq/logseq)|是|支持|支持|全平台|支持|使用Markdown存储|免费|是|| +|[RoamResearch](https://roamresearch.com/)|是|不支持|支持|全平台|支持|支持|收费|否|无免费版本| +|[RoamEdit](http://www.roamedit.com/)|是|不支持|支持|Android/iOS|支持|付费支持|高级功能收费|否|| +|[语雀](https://www.yuque.com/)|是|支持|支持|除Linux外全平台|不支持|支持|高级功能收费|否|| +|[印象笔记](https://www.yinxiang.com/)|是|支持|免费版有流量限制|除Linux外全平台|不支持|支持|高级功能收费|否|| +|[有道云笔记](https://note.youdao.com/)|是|支持|支持|全平台|不支持|支持|高级功能收费|否|1.有广告| +|[WizNote](https://www.wiz.cn/zh-cn)|是|支持|支持|全平台|不支持|支持|高级功能收费|否|| +|[wolai](https://www.wolai.com/)|是|不支持|支持|全平台|支持|不支持,私有格式|高级功能收费|否|1.协作功能比较强大| +|[FlowUs(息流)](https://flowus.cn/)|是|不支持|支持|除Linux外全平台|不支持|支持|高级功能收费|否|| +|[思源笔记](https://b3log.org/siyuan/)|是|支持|收费支持|全平台|支持|支持|云端服务需要付费|是|| +|[AppFlowy](https://github.com/AppFlowy-IO/appflowy)|是|支持|不支持|Windows/Mac/Linux|不支持|不支持|免费|是|| +|[Focalboard](https://github.com/mattermost/focalboard)|是|支持|不支持|Windows/Mac/Linux|不支持|不支持|免费|是|| +|[Notability](https://notability.com/)|是|支持|支持|iOS|不支持|不支持|高级功能收费|否|主攻iPad| +|[GoodNotes](https://www.goodnotes.com/)|是|支持|支持|iOS/Mac/Windows|不支持|不支持|高级功能收费|否|主攻iPad| +|[Springpad](http://springpad.com/)|否|||Android|||||| +|[CatchNotes](https://catch.com)|否|||Android|||||| + +## Mind-Mapping App + +|思维导图软件|仍在维护|平台支持|收费情况|备注| +|---|---|---|---|---| +|[Xmind](https://xmind.cn/)|是|全平台|Pro版收费| | +|[MindManager](https://www.mindmanager.com/cn/)|是|Windows/Mac|收费| | +|[MindMaster](https://www.edrawsoft.cn/mindmaster/)|是|Windows/Mac/Linux|免费导出有水印| | +|[ProcessOn](https://www.processon.com/)|是|Web|收费| | +|[Freeplane](https://sourceforge.net/projects/freeplane/)|是|Windows/Mac/Linux|开源免费 |FreeMind的比较活跃分支| +|[DiagramDesigner](https://github.com/meesoft/DiagramDesigner)|是|Windows|开源免费| | +|[FreeMind](https://freemind.sourceforge.net/)|否|Windows/Mac/Linux|开源免费| | +|[freemind-mmx](https://github.com/jiangxin/freemind-mmx)|否|Windows/Mac/Linux|开源免费| | +|[draw.io](https://www.drawio.com/)|是|Windows/Mac/Linux/Web|开源免费| | + +## Office办公软件 + +* WPS Office: +* WPS Office For Linux: +* LibreOffice: +* 永中Office: +* Prezi: + +## 输入法 + +* 搜狗输入法: +* fcitx5: +* fcitx5-android: +* ibus: +* 深蓝词库转换: + +## 虚拟机软件 + +* Hypervisor: +* VMware Workstation Player: +* VirtualBox: +* VMTransferFiles: +* QEMU: +* Kernel Virtual Machine: + +## PDF + +* 福昕PDF阅读器: +* wondershare(All-in-1 PDF Solution,PDF阅读器,PDF转换到其它文件等): +* PDF-XChange: +* ILovePDF: +* CAJViewer: +* 超星阅读器: +* WinDjView: + +## 浏览器 + +* Chrome: +* Fixefox: +* TorBrowser: + +## 数据恢复工具 + +* DataNumen文件恢复: + +## 图床与图床工具 + +* PicGo: + +## 电脑管理工具 + +* 微PE工具箱: +* ~~大白菜(有大量捆绑): ~~ +* balenaEtcher: +* 图拉丁吧工具箱: +* AIDA: +* CPU-Z: +* AS SSD Benchmark: +* DiskGenius: +* SpaceSniffer: +* UltraISO: +* DAEMON Tools Lite: +* Nero Burning ROM: +* 鲁大师: + +## 地质相关软件 + +* ROCKWORKS(RockWorks是一个综合软件程序,用于为环境、岩土工程、采矿和石油行业创建2D和3D地图、日志和横截面、地质模型、体积报告和一般地质图): +* GeoCorelDRAW: +* SAC(Seismic Analysis Code): +* rdseed: +* Rdseed与SAC的安装: +* Visual MINTEQ: + +## 代理 + +* 自2023年11月2日起,中国开发者在GitHub上删除或存档翻墙工具: +* ~~clash: ~~ +* ~~Clash for Android: ~~ +* ~~Clash for Windows: ~~ +* ~~Clash Verge:~~ +* Shadowsocks: +* proxy: +* ProxyTool: +* v2rayNvpn: +* ~~Freegate: ~~ + +## 网络相关 + +* Connectify Hotspot: + +## 密码管理工具 + +* KeePass: +* keepass2android: +* 1password: +* lastpass: +* authy: +* Microsoft Authenticator: + +## 压缩/解压缩 + +* 7-Zip: +* WinRAR: +* 快压: +* 好压: +* Bitser(exe解压): +* UniExtract2: + +## SSH/FTP + +* MobaXterm(自带rsync等工具,且免费): +* XManager/XShell/XSftp(收费): +* XShell使用问题汇总: +* FileZilla: +* WinSCP: +* PuTTY: +* Pietty: +* SecureCRT(收费): +* SecureFX(收费): +* ~~SSH Secure Shell Client(无官网): ~~ + +## Others + +* tesseract: +* Tesseract User Manual: +* jTessBoxEditor: +* Tess4J: +* VietOCR: + +* 按键精灵: +* sikuli(Deprcated): +* SikuliX1: +* SikuliX Docs: +* AutoHotkey: +* SciTE4AutoHotkey: + +* MotionPro(VPN工具): +* realvnc(安全远程连接): + +* FFmpeg: +* K-Lite Codec Pack: +* Shark007 Codecs: +* KMPlayer: +* potplayer(新版本不支持swf格式): +* QQ影音(播放WMV有时没有声音): +* VLC media player: +* Avidemux: + +* 龙卷风收音机: +* 腾讯视频: +* 爱奇艺: +* 优酷: +* 央视影音: +* 暴风影音: + +* HyperSnap: +* Snipaste: +* PicPick: +* Camtasia: +* Snagit: +* FastStone Capture: +* OBS Studio: +* ScreenToGif: +* screenity(开源免费): +* Awesome Screenshot(高级功能收费): +* ClipMate: +* Sothink SWF Decompiler: +* Sothink Logo Maker: +* Wondershare DVD Slideshow Builder Deluxe: +* Wondershare Flash Gallery Factory Deluxe: +* Action Script Viewer: +* Clementine: +* osdlyrics: +* Switch Audio File Converter: +* Digital Voice Player: + +* babun: +* catdoc ported to Windows: +* install-us: + +* 人人钢琴: + +* Total Commander: +* Rapidee: +* HostsX: +* WizMouse(WizMouse allows you to scroll the window under the mouse with your mouse wheel even if the that window doesn't have input focus. +Windows 10 already has this functionality built in so WizMouse is most useful if you're using earlier versions of Windows): +* ibat: +* Binary Viewer(Binary Viewer can display file contents in binary, hexadecimal, octal, decimal and text formats): +* Windows日志查看工具合集: +* NFOPad(NFOPad is a small, fast and flexible text editor and nfo viewer.): + +* 小Q书桌: +* Wox: + +* P2PSearcher: +* PanDownload: +* amule: +* WebSite eXtractor: +* uTorrent: +* 迅雷(Thunder): +* 硕鼠(bigrats): + +* Convert Between Programming Languages(The Most Accurate and Reliable Source Code Converters): + +* inkscape: +* OpenShot(Video Editor): +* Boilsoft Video Splitter: +* Easy RealMedia Producer & Easy RealMedia Editor: +* Eagle(设计师图片管理工具): +* BusinessCards MX(名片制作工具): + +* GrampsAIO(族谱绘制): +* Asymptote(2D & 3D TeX-Aware Vector Graphics Language): + +* docx2txt: +* txt2tags: + +* Wireshark: +* Omnipeek(Network protocol analyzer): +* httpwatch(HTTP sniffer): +* Fiddler(Http sniffer): +* Burp Suite(用于攻击web 应用程序的集成平台): +* IETester: +* tcpdump: +* tcpdump捕捉样例: +* WinDump: + +* 坚果云: diff --git "a/_drafts/\346\270\205\347\220\206\346\227\240\347\224\250\347\232\204CSS\346\240\267\345\274\217\347\232\204\345\207\240\344\270\252\345\267\245\345\205\267\357\274\210\350\275\254\357\274\211.md" "b/_drafts/Others/\346\270\205\347\220\206\346\227\240\347\224\250\347\232\204CSS\346\240\267\345\274\217\347\232\204\345\207\240\344\270\252\345\267\245\345\205\267\357\274\210\350\275\254\357\274\211.md" similarity index 91% rename from "_drafts/\346\270\205\347\220\206\346\227\240\347\224\250\347\232\204CSS\346\240\267\345\274\217\347\232\204\345\207\240\344\270\252\345\267\245\345\205\267\357\274\210\350\275\254\357\274\211.md" rename to "_drafts/Others/\346\270\205\347\220\206\346\227\240\347\224\250\347\232\204CSS\346\240\267\345\274\217\347\232\204\345\207\240\344\270\252\345\267\245\345\205\267\357\274\210\350\275\254\357\274\211.md" index 623587a..74124c3 100644 --- "a/_drafts/\346\270\205\347\220\206\346\227\240\347\224\250\347\232\204CSS\346\240\267\345\274\217\347\232\204\345\207\240\344\270\252\345\267\245\345\205\267\357\274\210\350\275\254\357\274\211.md" +++ "b/_drafts/Others/\346\270\205\347\220\206\346\227\240\347\224\250\347\232\204CSS\346\240\267\345\274\217\347\232\204\345\207\240\344\270\252\345\267\245\345\205\267\357\274\210\350\275\254\357\274\211.md" @@ -1,8 +1,3 @@ -欢迎和大家交流技术相关问题: -邮箱: jiangxinnju@163.com -博客园地址: http://www.cnblogs.com/jiangxinnju -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju 在我们写样式的时候,页面的CSS在经历几个版本的修改之后,可能有些样式已经用不到了,或许将某些样式更名了而原来的忘了删除,总之页面中可能存在着一些无用的样式。这些无用的浪费了一些服务器空间和带宽消耗,也会增大我们的维护成本。那么有没有一些办法来清理那些无用的样式呢?今天就让我们来了解一下几个比较有用的工具。 diff --git "a/_drafts/\350\203\275\350\256\251\347\250\213\345\272\217\345\201\232\347\232\204\344\272\213\346\203\205\345\235\232\345\206\263\344\270\215\347\224\250\344\272\272\346\235\245\345\201\232\342\200\224\342\200\224\346\211\271\351\207\217\344\277\256\345\244\215markdownlint MD034\350\255\246\345\221\212.md" "b/_drafts/Others/\350\203\275\350\256\251\347\250\213\345\272\217\345\201\232\347\232\204\344\272\213\346\203\205\345\235\232\345\206\263\344\270\215\347\224\250\344\272\272\346\235\245\345\201\232\342\200\224\342\200\224\346\211\271\351\207\217\344\277\256\345\244\215markdownlint MD034\350\255\246\345\221\212.md" similarity index 93% rename from "_drafts/\350\203\275\350\256\251\347\250\213\345\272\217\345\201\232\347\232\204\344\272\213\346\203\205\345\235\232\345\206\263\344\270\215\347\224\250\344\272\272\346\235\245\345\201\232\342\200\224\342\200\224\346\211\271\351\207\217\344\277\256\345\244\215markdownlint MD034\350\255\246\345\221\212.md" rename to "_drafts/Others/\350\203\275\350\256\251\347\250\213\345\272\217\345\201\232\347\232\204\344\272\213\346\203\205\345\235\232\345\206\263\344\270\215\347\224\250\344\272\272\346\235\245\345\201\232\342\200\224\342\200\224\346\211\271\351\207\217\344\277\256\345\244\215markdownlint MD034\350\255\246\345\221\212.md" index c6ec4c6..391dc80 100644 --- "a/_drafts/\350\203\275\350\256\251\347\250\213\345\272\217\345\201\232\347\232\204\344\272\213\346\203\205\345\235\232\345\206\263\344\270\215\347\224\250\344\272\272\346\235\245\345\201\232\342\200\224\342\200\224\346\211\271\351\207\217\344\277\256\345\244\215markdownlint MD034\350\255\246\345\221\212.md" +++ "b/_drafts/Others/\350\203\275\350\256\251\347\250\213\345\272\217\345\201\232\347\232\204\344\272\213\346\203\205\345\235\232\345\206\263\344\270\215\347\224\250\344\272\272\346\235\245\345\201\232\342\200\224\342\200\224\346\211\271\351\207\217\344\277\256\345\244\215markdownlint MD034\350\255\246\345\221\212.md" @@ -1,8 +1,3 @@ -欢迎和大家交流技术相关问题: -邮箱: jiangxinnju@163.com -博客园地址: http://www.cnblogs.com/jiangxinnju -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju 现在各种编程语言都有自己的lint工具来做静态检查,防止一些低级错误并维持统一的风格。Markdown这样的样式标记语言也不例外,现在大家用的比较多的是markdownlint。该项目开源在github:,当前很多实用markdown语言的项目都使用该工具。 diff --git "a/_drafts/\351\253\230\345\217\257\347\224\250\346\200\247\344\270\255\347\232\204\350\204\221\350\243\202\351\227\256\351\242\230(split-brain problem in HA)(\350\275\254).md" "b/_drafts/Others/\351\253\230\345\217\257\347\224\250\346\200\247\344\270\255\347\232\204\350\204\221\350\243\202\351\227\256\351\242\230(split-brain problem in HA)(\350\275\254).md" similarity index 91% rename from "_drafts/\351\253\230\345\217\257\347\224\250\346\200\247\344\270\255\347\232\204\350\204\221\350\243\202\351\227\256\351\242\230(split-brain problem in HA)(\350\275\254).md" rename to "_drafts/Others/\351\253\230\345\217\257\347\224\250\346\200\247\344\270\255\347\232\204\350\204\221\350\243\202\351\227\256\351\242\230(split-brain problem in HA)(\350\275\254).md" index 0277e2b..0149887 100644 --- "a/_drafts/\351\253\230\345\217\257\347\224\250\346\200\247\344\270\255\347\232\204\350\204\221\350\243\202\351\227\256\351\242\230(split-brain problem in HA)(\350\275\254).md" +++ "b/_drafts/Others/\351\253\230\345\217\257\347\224\250\346\200\247\344\270\255\347\232\204\350\204\221\350\243\202\351\227\256\351\242\230(split-brain problem in HA)(\350\275\254).md" @@ -1,10 +1,3 @@ -欢迎关注我的社交账号: - -邮箱: jiangxinnju@163.com -博客园地址: http://www.cnblogs.com/jiangxinnju -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju - 运行于备用主机上的Heartbeat可以通过以太网连接检测主服务器的运行状态,一旦其无法检测到主服务器的“心跳”则自动接管主服务器的资源。通常情况下,主、备服务器间的心跳连接是一个独立的物理连接,这个连接可以是串行线缆、一个由“交叉线”实现的以太网连接。Heartbeat甚至可同时通过多个物理连接检测主服务器的工作状态,而其只要能通过其中一个连接收到主服务器处于活动状态的信息,就会认为主服务器处于正常状态。从实践经验的角度来说,建议为Heartbeat配置多条独立的物理连接,以避免Heartbeat通信线路本身存在单点故障。 diff --git "a/_drafts/Python\347\254\254\344\270\211\346\226\271\345\270\270\347\224\250\345\267\245\345\205\267\343\200\201\345\272\223\343\200\201\346\241\206\346\236\266\347\255\211.md" "b/_drafts/Python\347\254\254\344\270\211\346\226\271\345\270\270\347\224\250\345\267\245\345\205\267\343\200\201\345\272\223\343\200\201\346\241\206\346\236\266\347\255\211.md" deleted file mode 100644 index 13779fb..0000000 --- "a/_drafts/Python\347\254\254\344\270\211\346\226\271\345\270\270\347\224\250\345\267\245\345\205\267\343\200\201\345\272\223\343\200\201\346\241\206\346\236\266\347\255\211.md" +++ /dev/null @@ -1,204 +0,0 @@ - Python ImagingLibrary(PIL):它提供强大的图形处理的能力,并提供广泛的图形文件格式支持,该库能进行图形格式的转换、打印和显示。还能进行一些图形效果的处理,如图形的放大、缩小和旋转等。是用户进行图象处理的强有力工具。 -http://www.pythonware.com/products/pil/ - -matplotlib:一个Python的2D绘图库。 - -http://matplotlib.org/ - -Pmw(Pythonmegawidgets):它是超级GUI组件集————一个利用Tkinter模块构建的高级GUI组件,每个Pmw都合并了一个或多个Tkinter组件,以实现更有用和更复杂的功能。 - -http://sourceforge.net/projects/pmw/ - -PyXML(Python/XML):用Python解析和处理XML文档的工具包,包中的4DOM是完全相容于W3C DOM规范的。它包含以下内容:xmlproc:一个符合规范的XML解析器;Expat: 一个快速的,非验证的XML解析器。遗憾的是该包已经停止更新。其他和他同级别的还有 PyHtml PySGML - -http://sourceforge.net/projects/pyxml/ - -PyGame:用于多媒体开发和游戏软件开发的模块。 - -http://www.pygame.org/news.html - -PyOpenGL:模块封装了“OpenGL应用程序编程接口”,通过该模块python程序员可在程序中集成2D和3D的图形。 - -http://sourceforge.net/projects/pyopengl/ - -NumPy、NumArray和SAGE:NumArray是Python的一个扩展库,主要用于处理任意维数的固定类型数组,简单说就是一个矩阵库。它的低层代码使用C来编写,所以速度的优势很明显。NumPy是Numarray的后继者,用来代替NumArray(目前NumArray已经不再更新)。SAGE是基于NumPy和其他几个工具所整合成的数学软件包,目标是取代Magma, Maple, Mathematica和Matlab 这类工具。 - -http://www.numpy.org/ - -http://www.sagemath.org/ - -SciPy(pronounced “Sigh Pie”) is a Python-based ecosystem of open-source software formathematics, science, and engineering. - -http://www.scipy.org/ - -MySQLdb:用于连接MySQL数据库。还有用于zope的ZMySQLDA模块,通过它就可在zope中连接mysql数据库。 - -http://sourceforge.net/projects/mysql-python/ - -PyGTK:用于GUI程序开发的GTK+库。GTK就是用来实现GIMP和Gnome的那个库。有了它,你完全可以自信的尝试自己制造Photoshop - -http://www.pygtk.org/ - -PyQt:用于Qt开发库。QT就是实现了KDE环境的那个库,由一系列的模块组成,有qt,qtcanvas, qtgl, qtnetwork, qtsql, qttable, qtui and qtxml,包含有300个类和超过5750个的函数和方法。PyQt还支持一个叫qtext的模块,它包含一个QScintilla库。该库是 Scintillar编辑器类的Qt接口。 - -http://www.riverbankcomputing.co.uk/news - -PyMedia:用于多媒体操作的python模块。它提供了丰富而简单的接口用于多媒体处理(wav,mp3, ogg, avi, divx, dvd, cdda etc)。可在Windows和Linux平台下使用。 - -http://pymedia.org/ - -PyPy和Psyco:Psyco是一个代码加速度器,可使代码的执行速度提高到与编译语言一样的水平。目前Psyco已经不再更新,PyPy是Psyco的升级替代品。 - -http://pypy.org/ - -http://sourceforge.jp/projects/sfnet_psyco/ - -Python-ldap:提供一组面向对象的API,可方便地在python中访问ldap目录服务,它基于OpenLDAP2.x。 - -http://www.python-ldap.org/ - -xmpppy:Jabber服务器采用开发的XMPP协议,Google Talk也是采用XMPP协议的IM系统。在中有一个xmpppy模块支持该协议。也就是说,我们可以通过该模块与Jabber服务器通信,是不是很Cool。 - -http://sourceforge.net/projects/xmpppy/ - -  下面这些就不详细介绍,只列出名字和功能 - -adodb:ADO数据库连接组件,主要用于PHP也可用于Python - -http://sourceforge.net/projects/adodb/ - -wxPython :GUI编程框架,熟悉MFC的人会非常喜欢,简直是同一架构(对于初学者或者对设计要求不高的用户来说,使用 Boa Constructor可以方便迅速的进行wxPython的开发) - -http://www.wxpython.org/ - -py2exe:用来生成windows可执行文件 - -http://www.py2exe.org/ - -twisted:巨无霸的网络编程框架 - -https://twistedmatrix.com/trac/ - -Kodos:正则表达式调试工具 - -http://sourceforge.net/projects/kodos/ - -Mechanize:爬虫连接网站常用 - -https://pypi.python.org/pypi/mechanize/ - -winpdb:自己的程序或者用别的库不太明白的时候就靠它了 - -http://winpdb.org/ - -Pyro:实现与JAVA RMI类似的技术 - -http://python-pyro-3-7.updatestar.com/ - -pylint:培养良好的编码习惯 - -http://www.pylint.org/ - -django:一个WEB framework - -https://www.djangoproject.com/ - -docutils:用来写文档的 - -https://pypi.python.org/pypi/docutils/ - -Pylons:又一个web framework - -http://www.pylonsproject.org/ - -pythonwin: Windows扩展 - -http://sourceforge.net/projects/pywin32/ - -reportlab:Python操作PDF的Libary。 - -http://www.reportlab.com/ - -cherrypy:一个WEB framework - -http://www.cherrypy.org/ - -pandas:pandas is an open source, BSD-licensed library providinghigh-performance, easy-to-use data structures and data analysis tools for thePython programming language. - -http://pandas.pydata.org/ - -bsddb3 ————BerkeleyDB的连接组件 - -https://pypi.python.org/pypi/bsddb3/ - -chardet ———— 编码检测 - -https://pypi.python.org/pypi/chardet/ - -scons ———— 项目构建工具,写好了模板用起来还是很方便的 - -http://www.scons.org - -pycurl ———— URL处理工具 - -https://pypi.python.org/pypi/pycurl - -pydot ———— 画图的,graphiz,可以很方便画流程图 - -https://code.google.com/p/pydot/ - -feedparser ————rss解析 - -http://feedparser.luaforge.net/ - -astropy/PyRAF/astroplotlib:天文相关的一些工具: - -http://www.astropy.org/ - -http://www.stsci.edu/institute/software_hardware/pyraf/ - -http://astroplotlib.stsci.edu/ - -scapy ———— 网络包构建分析框架,可编程的wireshark,有兴趣的google “Silver Needle in the Skype” - -http://www.secdev.org/projects/scapy/ - -Cheetah ———— 构建和扩充任何种类的基于文本的内容 - -http://www.cheetahtemplate.org/ - - - -  sendpkt ———— 一个开发包 - -  pyevent ———— 事件支持 - -  pypcap ———— 抓包的 - -  python-dnet ———— 控制网络安全的其他设备 - -  simplejson ———— JSON的支持 - -  sqlalchemy ———— SQL数据库连接池 - -  SQLObject ———— 数据库连接池 - -  ctypes ———— 用来调用动态链接库 - -  Cx-oracle ———— 连接oracle的工具 - -  DBUtils ———— 数据库连接池 - -  DPKT ———— raw-scoket网络编程 - -  dpkt ———— 数据包的解包和组包 - -  pefile ———— windows pe文件解析器 - -  PLY———— 基于LEX、YACC的语言工具 - -  Corepy———— 使用开发编写x86汇编程序 - -  LightCloud———— 实现的分布式的键-值数据库 - -  Parallel Python(PP)———— 轻松开发SMP、集群并行计算的库 \ No newline at end of file diff --git "a/_drafts/astyle \344\275\277\347\224\250\350\257\264\346\230\216.md" "b/_drafts/astyle \344\275\277\347\224\250\350\257\264\346\230\216.md" deleted file mode 100644 index 382138e..0000000 --- "a/_drafts/astyle \344\275\277\347\224\250\350\257\264\346\230\216.md" +++ /dev/null @@ -1,88 +0,0 @@ -欢迎关注我的社交账号: - - -博客园地址: http://www.cnblogs.com/jiangxinnju -GitHub地址: https://github.com/jiangxincode -知乎地址: https://www.zhihu.com/people/jiangxinnju - - -astyle是一款代码格式化工具,它的下载地址是: -http://sourceforge.net/projects/astyle - -项目地址: -http://astyle.sourceforge.net/ - -文档说明: -http://astyle.sourceforge.net/astyle.html - -## 基本命令 - -`astyle --style=ansi main.cs` - -## 格式化目录 - -使用ansi风格格式当前目录下的所有cpp,cs文件,注意在批处理文件时,"%f" 要改为"%%f" - -`for /R %f in (*.cpp;*.cs;) do astyle --style=ansi "%f"` - -## 参数说明: - -http://astyle.sourceforge.net/astyle.html - - -## 加入到VS2008,VS2005 - -+ 工具——>外部工具——>添加 -+ 标题:astyle -+ 命令:AStyle.exe (填好astyle.exe的路径) -+ 参数:--style=allman -N $(ItemDir)$(ItemFileName)$(ItemExt) -+ 初始目录:$(TargetDir) -+ 勾上“使用初始目录” -+ 点击确定完成,以后就可以在工具菜单中找到“astyle“这一项了,点击它,就可以对当前文件进行格式化操作。 - -## 加入到VS6 - -+ Tools——>Customize——>Tools -+ 标题:astyle -+ 命令:AStyle.exe (填好astyle.exe的路径) -+ 参数:--style=ansi -s4 --suffix=.orig $(FileName)$(FileExt) -+ 初始目录:$(FileDir) -+ 勾上“Using Output Window” -+ 点击确定完成。以后就可以在工具菜单中找到“astyle“这一项了,点击它,就可以对当前文件进行格式化操作。 - -## 加入到Ultraedit和UltraStudio - -+ 高级-->工具配置——>外部工具——>添加 -+ 命令:AStyle.exe -v --style=ansi -s4 --suffix=.orig "%f"(填好astyle.exe的路径) -+ Optiones:选择 Windows program和Save Active File. -+ Output: 选择output to list box,show dos box 和no replace。 -+ 点击确定完成。以后就可以在工具菜单中找到“astyle“这一项了,点击它,就可以对当前文件进行格式化操作。 - -## 加入到Source insight - -+ Options-->Custom Command-->Add -+ Command:astyle -+ Run "D:\soft\astyle\astyle.exe" --style=ansi -f -p -P -U -v -n -N %f(填好astyle.exe的路径) -+ Output:不选. -+ Control: 选择pause when done和exit to window. -+ source links in output:file, then line -+ -->menu -+ add to work menu. -+ 点击确定完成。以后就可以在Work菜单中找到“astyle“这一项了,点击它,就可以对当前文件进行格式化操作。 - -另外可以参考:在source insight中集成astyle: - -## 控制台目录批处理(astyle.bat) - -```Bash -REM 批量将本目录中的所有C++文件用Astyle进行代码美化操作 -REM 设置Astyle命令位置和参数 -@echo off -set astyle="astyle.exe" -REM 循环遍历目录 -for /r . %%a in (*.cpp;*.c) do %astyle% --style=ansi --pad=oper --unpad=paren -s4 -n "%%a" -for /r . %%a in (*.hpp;*.h) do %astyle% --style=ansi --pad=oper --unpad=paren -s4 -n "%%a" -REM 删除所有的astyle生成文件 -for /r . %%a in (*.orig) do del "%%a" -pause -``` \ No newline at end of file diff --git a/_pages/about.md b/_pages/about.md index 9ba0655..47325d0 100644 --- a/_pages/about.md +++ b/_pages/about.md @@ -3,6 +3,15 @@ permalink: /about/ title: "About" --- -Tempor velit sint sunt ipsum tempor enim ad qui ullamco. Est dolore anim ad velit duis dolore minim sunt aliquip amet commodo labore. Ut eu pariatur aute ea aute excepteur laborum. Esse ea esse excepteur minim mollit qui cillum excepteur ex dolore magna. Labore deserunt fugiat incididunt incididunt sint ea. Consequat dolore aute laboris quis proident quis non et est consectetur ex eiusmod sit culpa. +一些我在平时工作和学习中积累的编程相关的资源。每个程序员都有自己的学习之路,过程中会学习各种各样的网上知识,学习完最好记录下来,每隔一段时间看一看,会有不一样的收获。 -Cupidatat ea do et in excepteur in. Ad nostrud ut est esse eu duis ea sunt eiusmod. Aliquip tempor veniam sint elit fugiat. Velit incididunt laboris amet incididunt labore dolore irure velit excepteur commodo deserunt laborum. Consectetur eu fugiat veniam veniam Lorem labore magna eiusmod. Ea occaecat reprehenderit pariatur consectetur minim labore ut aliquip. \ No newline at end of file +博客地址: + +* [原有"学习之路系列博客"](https://jiangxincode.github.io/cnblogs/categories/#the-way-of-learning) +* [Github](https://jiangxincode.github.io/cnblogs/) +* [博客园](https://www.cnblogs.com/jiangxinnju) + +如果大家有兴趣可以一起增加,修改。 + +* [文章源码目录](https://github.com/jiangxincode/cnblogs/tree/master/_posts) +* [文章依赖图床](https://github.com/jiangxincode/PicGo) diff --git a/_posts/2021-01-13-Repo-In-Action.md b/_posts/android/2021-01-13-Repo-In-Action.md similarity index 99% rename from _posts/2021-01-13-Repo-In-Action.md rename to _posts/android/2021-01-13-Repo-In-Action.md index 498da54..db3a89d 100644 --- a/_posts/2021-01-13-Repo-In-Action.md +++ b/_posts/android/2021-01-13-Repo-In-Action.md @@ -1,7 +1,7 @@ --- title: "Repo实践指南" categories: - - Blog + - android tags: - Android - Repo diff --git a/_posts/2021-02-14-Android-Build-System.md b/_posts/android/2021-02-14-Android-Build-System.md similarity index 99% rename from _posts/2021-02-14-Android-Build-System.md rename to _posts/android/2021-02-14-Android-Build-System.md index aff4c36..85810f2 100644 --- a/_posts/2021-02-14-Android-Build-System.md +++ b/_posts/android/2021-02-14-Android-Build-System.md @@ -1,7 +1,7 @@ --- title: "Android构建系统" categories: - - Blog + - android tags: - Android - AOSP diff --git a/_posts/2021-02-21-Import-AOSP-To-AS.md b/_posts/android/2021-02-21-Import-AOSP-To-AS.md similarity index 99% rename from _posts/2021-02-21-Import-AOSP-To-AS.md rename to _posts/android/2021-02-21-Import-AOSP-To-AS.md index ec58353..354e3c5 100644 --- a/_posts/2021-02-21-Import-AOSP-To-AS.md +++ b/_posts/android/2021-02-21-Import-AOSP-To-AS.md @@ -1,7 +1,7 @@ --- title: "将AOSP源码导入到Android Studio进行查看" categories: - - Blog + - android tags: - Android - Android Studio diff --git "a/_posts/android/2025-01-05-\346\212\225\345\261\217\347\237\245\350\257\206\345\255\246\344\271\240\344\271\213\350\267\257.md" "b/_posts/android/2025-01-05-\346\212\225\345\261\217\347\237\245\350\257\206\345\255\246\344\271\240\344\271\213\350\267\257.md" new file mode 100644 index 0000000..98b5724 --- /dev/null +++ "b/_posts/android/2025-01-05-\346\212\225\345\261\217\347\237\245\350\257\206\345\255\246\344\271\240\344\271\213\350\267\257.md" @@ -0,0 +1,50 @@ +--- +title: "投屏知识学习之路" +categories: + - the-way-of-learning +tags: + - 学习之路 + - 投屏 +toc: true +--- + +本篇文章汇总了投屏知识学习的相关资源,包括投屏的基本概念、投屏协议、投屏应用等内容,适合投屏开发者参考。 + +## 投屏模式 + +首先了解投屏的模式。 + +### 推送模式 + +主要用于投屏视频和音乐,投屏之后手机可以关闭或聊微信,电视不会停止播放。玩手机看电视两不误。最常见是视频软件里的tv按钮。 + +投屏推送的原理:原理就是,让手机与电视连接同一个wifi后,通过投屏协议传输数据。(就好像蓝牙一样的一个专门通道)。点击投屏按钮,手机就开始搜索wifi内有没有投屏广播服务。 + +手机搜索到电视之后,手机会发送一个视频地址给电视,电视收到地址后,开始播放。投屏后,手机可以控制电视的进度,暂停,下一集,音量之类的指令。 + +### 镜像模式 + +就是投屏手机屏幕或者投屏电脑屏幕;就是同屏显示。主要用于投屏手机PPT、手机桌面、吃鸡王者荣耀等手游;投屏淘宝、微信、抖音等暂时投屏功能的APP。苹果手机的屏幕镜像,安卓手机的多屏互动,都属于镜像模式。 + +原理:一样依靠局域网wifi通道,手机搜索到电视之后,开始镜像后,手机会不断截屏就是录屏。手机一边录屏,一般发送给电视。速度超快每秒60帧以上,电视收到之后再展现出来,就成了同屏功能了。 + +### 拓展模式 + +拓展模式是指将电脑屏幕投射到电视上,同时电脑屏幕也可以显示。这种模式一般用于工作场景,比如在电视上展示PPT,而在电脑上操作PPT。 + +## 投屏协议/应用对比 + +|投屏协议/应用|源平台|目标平台|无线/有线|推送/镜像|厂商|备注| +|-|-|-|-|-|-|-| +|[Miracast](https://www.wi-fi.org/discover-wi-fi/miracast)|支持协议的源设备|支持协议的显示设备|无线/有线|推送/镜像|Wi-Fi联盟|NA| +|[AirPlay](https://www.apple.com/airplay/)|iOS/iPadOS/Mac|AirPlay‑enabled smart TV|无线/有线|推送/镜像|Apple|NA| +|[DLNA](https://www.dlna.org/)|支持协议的源设备|支持协议的显示设备|无线/有线|推送|由索尼、英特尔、微软等企业共同发起|大部分视频软件投屏使用该协议| +|[Cast+](https://developer.huawei.com/consumer/cn/codelab/CastPlusKit)|华为/荣耀手机|Android大屏设备|无线/有线|镜像|华为|NA| +|[Chromecast](https://support.google.com/chromecast)|Android/iOS设备|插入Chromecast的显示设备|无线/有线|镜像|谷歌|NA| +|[WiDi](https://www.intel.cn/content/www/cn/zh/support/articles/000014926/emerging-technologies.html)|Windows设备|支持协议的显示设备|无线/有线|镜像/拓展|Intel|[已停止支持](https://www.intel.cn/content/www/cn/zh/support/articles/000021693/emerging-technologies.html)| +|[Windows手机连接](https://support.microsoft.com/zh-cn/topic/%E6%89%8B%E6%9C%BA%E8%BF%9E%E6%8E%A5%E8%A6%81%E6%B1%82%E5%92%8C%E8%AE%BE%E7%BD%AE-cd2a1ee7-75a7-66a6-9d4e-bf22e735f9e3)|Android/iOS|Windows|无线|推送|微软|NA| +|[scrcpy](https://github.com/Genymobile/scrcpy)|Android|Windows|有线+无线|镜像|开源|NA| +|[AnLink](https://anl.ink/)|Android|Linux/Windows/macOS|有线+无线|镜像|AnLink|NA| +|[Vysor](https://www.vysor.io/#)|Android/iOS|Linux/Windows/macOS|有线+无线|镜像|vysor|NA| + +## 其它链接 diff --git a/_posts/linux/2019-04-22-Linux-Memory-Analysis.md b/_posts/linux/2019-04-22-Linux-Memory-Analysis.md new file mode 100644 index 0000000..f1cbcd2 --- /dev/null +++ b/_posts/linux/2019-04-22-Linux-Memory-Analysis.md @@ -0,0 +1,61 @@ +--- +title: "Linux内存工具解析之RSS/VSS/USS/PSS区别于联系" +categories: + - linux +tags: + - Linux Memory Analysis +--- + +对于Linux系统程序开发人员,经常需要和进程所使用的内存情况打交道,比如,分析程序的内存泄漏问题。这时候我们可能使用ps、top、procrank、dumpsys(后两个命令为Android系统)来跟踪、调试进程内存的使用情况。上述几个工具进程涉及到的几个比较的重要的概念:VSS、RSS、PSS、USS,对于这几个概念,大家总是存在一种似曾相识,却又不甚了解的感觉,这对于真正的把握进程内存使用情况是十分有害的。所以,本文旨在彻底分析这个四个概念,弄清各个量之间的联系和区别,提供有助于解释各种工具的内存报告的信息,以便确定Linux进程和系统的实际内存使用量,为以后分析内存问题提供坚实的理论基础。 + +## 基本概念 + +* VSS:Virtual Set Size 虚拟耗用的内存(包含与其他进程共享占用的虚拟内存) +* RSS:Resident Set Size 实际使用的物理内存(包含与其他进程共享占用的内存) +* PSS:Proportional Set Size 实际使用的物理内存(按比例包含与其他进程共享占用的内存) +* USS:Unique Set Size 进程独自占用的物理内存(不包含与其他进程共享占用的内存) + +对于单个进程,一般来说内存占用大小排序如下:`VSS >= RSS >= PSS >= USS` + +## 概念解析 + +Android有一个名为`procrank`(`/system/xbin/procrank`)的工具,它列出了Linux进程的内存使用量,并按使用量的高低排序。每个进程报告的内存使用情况分为VSS、RSS、PSS和USS。 + +为了简单起见,在这个描述中,内存将用页面而不是字节来表示。像我们这样的Linux系统在最低级别上以4096字节的页面管理内存。 + +下面分别具体解释一下各个概念的含义: + +* VSS(ps工具中表示为VSZ)表示进程总的可访问地址空间。这个大小还包括可能不驻留在RAM中的内存,比如使用malloc分配内存后,尚未写入数据的内存。VSS对于确定进程的实际内存使用量几乎没有什么用处。 +* RSS表示一个进程在RAM中实际拥有的总内存。RSS可能具有误导性,因为它包括了该进程与其他进程共享的实际物理内存使用量,例如,对于共享库,其往往只加载到内存中一次,而不管有多少进程使用它。RSS不能准确地表示单个进程的内存使用情况。 +* PSS与RSS不同之处是,对于进程间共享的内存,其按比例报告其所使用的共享物理内存大小。比如有n进程同时在使用一个共享库,那对于单个进程其占用的该共享库的内存为1/n。如果三个进程都使用一个有30页的共享库,那么这个库将只向每个进程报告的PSS贡献10页。PSS是一个非常有用的数字,因为当系统中所有进程的PSS加在一起时,就可以很好地表示系统中总的内存使用量。当一个进程被终止时,贡献给它的PSS的共享库将按比例分配给仍然使用该库的其他进程的PSS总数。这样,PSS可能有点误导人,因为当进程被终止时,PSS不能准确地表示返回到整个系统的内存。 +* USS表示进程占用的总的物理内存大小,也就是说这部分内存是该进程完全独占的。 USS是一个非常有用的数字,因为它表示运行特定进程的实际增量成本。当进程被终止时,USS是实际返回给系统的总内存。当最初怀疑某个进程存在内存泄漏时,USS是最好的监视数字。 + +对于使用Python的系统,还有一个很好的工具叫做`ledsmem`,它可以报告内存统计信息,包括所有这些类别。 + +NOTE:这里有几个问题需要注意: + +* 两个进程共享的部分,远远不是只有共享库,比如我们在Linux里面开2个bash进程,那么这2个bash,实际是共享1个代码段;其他的mmap()的时候shared的映射当然也是两个进程共享的内存。 +* 共享库里面的内存,也不是都共享,只是代码段等不会做CoW(写时拷贝)的内存才会跨进程共享。 +* USS去掉的是所有跨进程共享的内存,不是只去掉了共享库。 + +## 实例解析 + +下面通过一个实例,具体解析各个量之间的关系。假设Linux下有两个bash进程、一个cat进程,进程ID分别为1044、1045、1054,下面通过公式分别计算VSS、RSS、PSS、USS: + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/20190422144031323.png) + +* VSS = 1 + 2 + 3 +* RSS = 4 + 5 + 6 +* PSS = 4/3 + 5/2 + 6 +* USS = 6 + +上图中的4这片内存,是libc的代码段在内存驻留的部分,被3个进程共享;5这段内存,是bash的代码段,被2个进程(1044和1045)指向。在计算PSS的时候,这些都需要被比例化。 + +## 监测工具 + +对于Linux系统,一般都会提供ps、top两个命令,Android系统还会提供procrank、dumpsys这两个命令。对于ps、top其只能查到VSS、RSS这两个值;procrank、dumpsys可以提供PSS、USS信息,dumpsys meminfo 可以查出native和dalvik分别占用多少内存。另外,dumpsys可以查询到很多有用的系统信息,比如meminfo、cpuinfo、activity、window、wifi、account等信息。 + +## 参考信息 + +* 性能优化工具(十)- Android内存分析命令: +* 内存耗用:VSS/RSS/PSS/USS: \ No newline at end of file diff --git a/_posts/2020-11-21-Package-Manager-In-Ubuntu.md b/_posts/linux/2020-11-21-Package-Manager-In-Ubuntu.md similarity index 99% rename from _posts/2020-11-21-Package-Manager-In-Ubuntu.md rename to _posts/linux/2020-11-21-Package-Manager-In-Ubuntu.md index d00d1d1..b849532 100644 --- a/_posts/2020-11-21-Package-Manager-In-Ubuntu.md +++ b/_posts/linux/2020-11-21-Package-Manager-In-Ubuntu.md @@ -1,7 +1,7 @@ --- title: "彻底搞懂Ubuntu系统上的包管理" categories: - - Blog + - linux tags: - Linux - Ubuntu diff --git a/_posts/2024-01-01-Grep-Sed-Awk-Example.md b/_posts/linux/2024-01-01-Grep-Sed-Awk-Example.md similarity index 99% rename from _posts/2024-01-01-Grep-Sed-Awk-Example.md rename to _posts/linux/2024-01-01-Grep-Sed-Awk-Example.md index fec456d..fb6b55c 100644 --- a/_posts/2024-01-01-Grep-Sed-Awk-Example.md +++ b/_posts/linux/2024-01-01-Grep-Sed-Awk-Example.md @@ -1,7 +1,7 @@ --- title: "一个例子掌握grep, sed, awk" categories: - - Blog + - linux tags: - Linux - Grep diff --git a/_posts/2012-01-19-how-to-learn-r-by-reading-books.md b/_posts/others/2012-01-19-how-to-learn-r-by-reading-books.md similarity index 99% rename from _posts/2012-01-19-how-to-learn-r-by-reading-books.md rename to _posts/others/2012-01-19-how-to-learn-r-by-reading-books.md index 6833395..eaca957 100644 --- a/_posts/2012-01-19-how-to-learn-r-by-reading-books.md +++ b/_posts/others/2012-01-19-how-to-learn-r-by-reading-books.md @@ -1,7 +1,7 @@ --- title: "R语言书籍的学习路线图" categories: - - Blog + - others tags: - R - 书籍 diff --git a/_posts/2016-08-23-j-lo-performance-analysissy-tools.md b/_posts/others/2016-08-23-j-lo-performance-analysissy-tools.md similarity index 99% rename from _posts/2016-08-23-j-lo-performance-analysissy-tools.md rename to _posts/others/2016-08-23-j-lo-performance-analysissy-tools.md index 8587d16..f5c53f9 100644 --- a/_posts/2016-08-23-j-lo-performance-analysissy-tools.md +++ b/_posts/others/2016-08-23-j-lo-performance-analysissy-tools.md @@ -1,7 +1,7 @@ --- title: "Java 性能分析工具,第 1 部分:操作系统工具" categories: - - Blog + - others tags: - Java - 性能分析工具 diff --git a/_posts/2016-08-23-j-lo-performance-analysissy-tools2.md b/_posts/others/2016-08-23-j-lo-performance-analysissy-tools2.md similarity index 99% rename from _posts/2016-08-23-j-lo-performance-analysissy-tools2.md rename to _posts/others/2016-08-23-j-lo-performance-analysissy-tools2.md index 634b8aa..c261fe2 100644 --- a/_posts/2016-08-23-j-lo-performance-analysissy-tools2.md +++ b/_posts/others/2016-08-23-j-lo-performance-analysissy-tools2.md @@ -1,7 +1,7 @@ --- title: "Java 性能分析工具,第 2 部分:Java 内置监控工具" categories: - - Blog + - others tags: - Java - 性能分析工具 diff --git a/_posts/2016-08-23-j-lo-performance-analysissy-tools3.md b/_posts/others/2016-08-23-j-lo-performance-analysissy-tools3.md similarity index 99% rename from _posts/2016-08-23-j-lo-performance-analysissy-tools3.md rename to _posts/others/2016-08-23-j-lo-performance-analysissy-tools3.md index d6e06e8..9afd0e2 100644 --- a/_posts/2016-08-23-j-lo-performance-analysissy-tools3.md +++ b/_posts/others/2016-08-23-j-lo-performance-analysissy-tools3.md @@ -1,7 +1,7 @@ --- title: "Java 性能分析工具,第 3 部分:Java Mission Control" categories: - - Blog + - others tags: - Android - Gradle diff --git a/_posts/2018-01-07-Gradle-GradleWrappe-AndroidPluginForGradle.md b/_posts/others/2018-01-07-Gradle-GradleWrappe-AndroidPluginForGradle.md similarity index 99% rename from _posts/2018-01-07-Gradle-GradleWrappe-AndroidPluginForGradle.md rename to _posts/others/2018-01-07-Gradle-GradleWrappe-AndroidPluginForGradle.md index 997c084..b241db6 100644 --- a/_posts/2018-01-07-Gradle-GradleWrappe-AndroidPluginForGradle.md +++ b/_posts/others/2018-01-07-Gradle-GradleWrappe-AndroidPluginForGradle.md @@ -1,7 +1,7 @@ --- title: "彻底搞懂Gradle_Gradle Wrapper与Android Plugin for Gradle的区别和联系" categories: - - Blog + - others tags: - Android - Gradle diff --git a/_posts/2018-03-11-Groovy-Compiler-Analysis-01.md b/_posts/others/2018-03-11-Groovy-Compiler-Analysis-01.md similarity index 99% rename from _posts/2018-03-11-Groovy-Compiler-Analysis-01.md rename to _posts/others/2018-03-11-Groovy-Compiler-Analysis-01.md index 4843ff8..c78ab00 100644 --- a/_posts/2018-03-11-Groovy-Compiler-Analysis-01.md +++ b/_posts/others/2018-03-11-Groovy-Compiler-Analysis-01.md @@ -1,7 +1,7 @@ --- title: "Groovy实现原理分析——准备工作" categories: - - Blog + - others tags: - Groovy - 源码分析 diff --git a/_posts/2018-03-11-Groovy-Compiler-Analysis-02.md b/_posts/others/2018-03-11-Groovy-Compiler-Analysis-02.md similarity index 99% rename from _posts/2018-03-11-Groovy-Compiler-Analysis-02.md rename to _posts/others/2018-03-11-Groovy-Compiler-Analysis-02.md index 69dc346..14a46d1 100644 --- a/_posts/2018-03-11-Groovy-Compiler-Analysis-02.md +++ b/_posts/others/2018-03-11-Groovy-Compiler-Analysis-02.md @@ -1,7 +1,7 @@ --- title: "Groovy实现原理分析——词法分析、语法分析、生成JVM字节码综述" categories: - - Blog + - others tags: - Groovy - 源码分析 diff --git a/_posts/2018-11-04-Publish-to-Maven-Center.md b/_posts/others/2018-11-04-Publish-to-Maven-Center.md similarity index 99% rename from _posts/2018-11-04-Publish-to-Maven-Center.md rename to _posts/others/2018-11-04-Publish-to-Maven-Center.md index 4e4dbe3..10902eb 100644 --- a/_posts/2018-11-04-Publish-to-Maven-Center.md +++ b/_posts/others/2018-11-04-Publish-to-Maven-Center.md @@ -1,7 +1,7 @@ --- title: "如何发布Maven依赖到中央仓库" categories: - - Blog + - others tags: - Java - Maven diff --git a/_posts/2018-11-23-Java-Code-Check.md b/_posts/others/2018-11-23-Java-Code-Check.md similarity index 99% rename from _posts/2018-11-23-Java-Code-Check.md rename to _posts/others/2018-11-23-Java-Code-Check.md index 09b35ec..3be7427 100644 --- a/_posts/2018-11-23-Java-Code-Check.md +++ b/_posts/others/2018-11-23-Java-Code-Check.md @@ -1,7 +1,7 @@ --- title: "Java代码质量度量工具大阅兵" categories: - - Blog + - others tags: - Java - Code Check diff --git a/_posts/2020-02-10-Cpp-Code-Check.md b/_posts/others/2020-02-10-Cpp-Code-Check.md similarity index 99% rename from _posts/2020-02-10-Cpp-Code-Check.md rename to _posts/others/2020-02-10-Cpp-Code-Check.md index 4440ad1..31ee9fb 100644 --- a/_posts/2020-02-10-Cpp-Code-Check.md +++ b/_posts/others/2020-02-10-Cpp-Code-Check.md @@ -1,7 +1,7 @@ --- title: "Cpp代码质量度量工具大阅兵" categories: - - Blog + - others tags: - Cpp - Code Check diff --git "a/_drafts/202301072208PDF\345\270\270\350\247\201\351\227\256\351\242\230\346\200\273\347\273\223.md" "b/_posts/others/2023-01-07-PDF\345\270\270\350\247\201\351\227\256\351\242\230\350\247\243\345\206\263\346\226\271\346\241\210\346\261\207\346\200\273.md" similarity index 78% rename from "_drafts/202301072208PDF\345\270\270\350\247\201\351\227\256\351\242\230\346\200\273\347\273\223.md" rename to "_posts/others/2023-01-07-PDF\345\270\270\350\247\201\351\227\256\351\242\230\350\247\243\345\206\263\346\226\271\346\241\210\346\261\207\346\200\273.md" index c80f23f..6845c1d 100644 --- "a/_drafts/202301072208PDF\345\270\270\350\247\201\351\227\256\351\242\230\346\200\273\347\273\223.md" +++ "b/_posts/others/2023-01-07-PDF\345\270\270\350\247\201\351\227\256\351\242\230\350\247\243\345\206\263\346\226\271\346\241\210\346\261\207\346\200\273.md" @@ -1,18 +1,30 @@ -# PDF常见问题解决方案汇总 +--- +title: "PDF常见问题解决方案汇总" +categories: + - others +tags: + - PDF + - Adobe Acrobat +toc: true +--- -## Adobe Acrobat修改PDF文档,保存的时候报错“读取本文档时出现问题(135)” +本文针对PDF文件的常见问题及其解决方案进行汇总,主要是Adobe Acrobat的使用问题。 + +## Adobe Acrobat + +### Adobe Acrobat修改PDF文档,保存的时候报错“读取本文档时出现问题(135)” * 导出图片,然后再合并成PDF了。这种方法是可行的,但是缺点是书签就都没了,文字也因为变成图片格式而无法复制为文本了。 * 直接导出PDF,但是试验了一下,此方法不可行。说缺少文件:`The file "PreflightLib.dll" is missing or corrupt` * 另存为其他——优化的PDF——标准设置,对新的文档进行之前的修改即可。 * 先随便找一个PDF文件(1.PDF)(可以先用一张图片转换成PDF,或者Word直接打印为PDF)。然后把需要保存的PDF文件和那个1.pdf一起选中,右键“在Acrobat中合并支持的文件...”。 然后保存为组合1.pdf。这个组合1已经能编辑自如了。把刚才的1.PDF的多余页面删除即可。此方法的优点是:保留了书签,而且保留了文本形式PDF上的文本的可复制性。 -## Adobe Acrobat修改PDF文档,保存的时候报错:“读取本文档时出现问题(110)” +### Adobe Acrobat修改PDF文档,保存的时候报错:“读取本文档时出现问题(110)” 1. 另存为其他——优化的PDF——标准设置,对新的文档进行之前的修改即可。 2. 下载PDF-Viewer,然后用这个软件把问题文件打开,再把问题文件另存为自己随便取个名字的pdf文件。保存好后用之前的文件阅读器打开看看,基本上问题就解决了。最后记得把转存好的文件名字改回需要的名字。把原来的问题文件删除就OK了。 -## 用Adobe Acrobat去除PDF文件的数字签名 +### 用Adobe Acrobat去除PDF文件的数字签名 今天遇到一个PDF,不但加了口令,还用了数字签名。口令很多工具都能对付,但是目前还真没什么工具能去除数字签名。我先把口令去了,现在可以复制内容,可以打印。但是由于数字签名还在,仍然无法进行修改、注释等操作。我尝试把这份文档再打印成PDF,这下数字签名倒是没有了,可原文件的书签也没了。又在网上看到有人说用“提取页面”也可以达到同样效果,但是也无法连书签一起提取。最后在网上找到一个解决方案: @@ -20,7 +32,7 @@ 2. 使用“文档->插入页面”,把有数字签名的文档插入到那一页后面。 3. 使用“文档->删除页面”,删除第一页,然后保存文档。 -## 用Adobe Acrobat批量删除PDF文件中各类水印、背景、文本等 +### 用Adobe Acrobat批量删除PDF文件中各类水印、背景、文本等 下载的 PDF 文件经常被加入许多广告性质的水印等,影响阅读。其删除办法如下: @@ -40,11 +52,11 @@ 注:标记密文前,最好设置密文属性为无填充、100%透明:`工具`-`保护`-`密文属性` -## 用Adobe Acrobat解决pdf页面大小不一致问题 +### 用Adobe Acrobat解决pdf页面大小不一致问题 `视图`-`工具`-`印刷制作`-`设置页面框`。在弹出的“设置页面框”视图里设置`固定大小:页面大小A4`(注:此处请按需设置)、`页面范围:所有页面`。然后点击“确定”。 -## 使用Adobe Acrobat将PDF所有书签批量修改为“适合宽度”显示 +### 使用Adobe Acrobat将PDF所有书签批量修改为“适合宽度”显示 注意:本文所述方法不能自动创建书签,仅仅是修改点击书签后的显示模式。 @@ -53,6 +65,15 @@ 3. 按组合键Shift+/折叠所有书签。注意:组合键中的‘/’必须是数字小键盘上的除号,这意味着:如果您使用的笔记本没有数字小键盘,您需要外接一个带数字小键盘的完整键盘。 4. 最后保存PDF文件的修改即可。 +### Adobe Acrobat防盗版弹框 + +`Adobe Acrobat Pro`打开PDF后,过一会就会弹出盗版保护窗口,提示:`This unlicensed Adobe app has been disabled`。解决方式如下: + +* `C:\Program Files\Adobe\Acrobat DC\Acrobat\AcroCEF\AcroCEF.exe`改名为`AcroCEF.exe.bak` +* `C:\Program Files\Adobe\Acrobat DC\Acrobat\acrocef_1\AcroCEF.exe`改名为`AcroCEF.exe.bak` + +然后重新打开`Adobe Acrobat Pro`,就不会弹出盗版保护窗口了。 + ## 其它问题 * PDF to Word Converter: diff --git a/_posts/2024-04-13-Password-Recovery-Tools-Analysis.md b/_posts/others/2024-04-13-Password-Recovery-Tools-Analysis.md similarity index 99% rename from _posts/2024-04-13-Password-Recovery-Tools-Analysis.md rename to _posts/others/2024-04-13-Password-Recovery-Tools-Analysis.md index 7dd1d4c..cc352d0 100644 --- a/_posts/2024-04-13-Password-Recovery-Tools-Analysis.md +++ b/_posts/others/2024-04-13-Password-Recovery-Tools-Analysis.md @@ -1,7 +1,7 @@ --- title: "密码恢复工具分析" categories: - - Blog + - others tags: - Password Recovery --- diff --git a/_posts/others/2024-06-22-Aloys-Build-Manual.md b/_posts/others/2024-06-22-Aloys-Build-Manual.md new file mode 100644 index 0000000..f90747d --- /dev/null +++ b/_posts/others/2024-06-22-Aloys-Build-Manual.md @@ -0,0 +1,4389 @@ +--- +title: "Aloys的环境搭建手册" +categories: + - others +tags: + - 环境搭建 +toc: true +--- + +Windows信息: + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image001.png) + +将要配置的集群信息: +利用Virtualbox,安装三台Ubuntu 16.04.1版本的虚拟机,其中一台担任DataNode、SecondaryNameNode、ResourceManager的角色,另外两台担任DataNode、NodeManager的角色。具体组网如下: + +主机名|IP|掩码|网关|DNS服务器|角色 +---|---|---|---|---|--- +DESKTOP-LSB0HI4|192.168.1.100|255.255.255.0|192.168.1.1|114.114.114.114|主机 +Ubuntu-01|192.168.1.160|255.255.255.0|192.168.1.1|114.114.114.114|DataNode/SecondaryNameNode/ResourceManager/master/worker/zookeeper/HMaster/hive/pig +Ubuntu-02|192.168.1.170|255.255.255.0|192.168.1.1|114.114.114.114|DataNode/NodeManager/worker/zookeeper/HRegion +Ubuntu-03|192.168.1.180|255.255.255.0|192.168.1.1|114.114.114.114|DataNode/NodeManager/ worker/zookeeper/HRegion + +## 安装VirtualBox + +首先需要在主机中安装虚拟机VirtualBox,此次我安装的版本为VirtualBox-5.1.14-112924-Win。 + +下载地址: + +单机VirtualBox-5.1.14-112924-Win.exe,按照所给的说明进行安装: + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image002.png) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image003.png) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image004.png) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image005.png) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image006.png) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image007.png) + + +## 安装Linux(Ubuntu) + +安装Virtualbox之后,需要在其中安装Linux服务器。我使用的Linux发行版本为:ubuntu-16.04.1-desktop-amd64。 + +下载地址: + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image008.png) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image009.png) + +此处需要为虚拟机分配内存大小,建议内存充足的朋友多分配一些。此处我分配了512MB内存,但是之后又修改为1024MB。 +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image010.png) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image011.png) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image012.png) + +此处需要分配虚拟机的硬盘容量,请硬盘容量充足的朋友多分配一些。另外虚拟硬盘最好存储在SSD这样的高速存取设备上,提升虚拟机相应速度。 +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image013.png) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image014.png) + +将共享剪贴板和拖放功能均选为双向: + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image015.png) + +此处将虚拟机内存修改为1024MB。 + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image016.png) + +点击右侧的关盘图标,选择我们之前下载的ubuntu-16.04.1-desktop-amd64.iso + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image017.png) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image018.png) + + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image019.png) + + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image020.png) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image021.png) +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image022.png) +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image023.png) +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image024.png) +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image025.png) +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image026.png) +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image027.png) +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image028.png) + + +## 复制虚拟机 + +安装Ubuntu-16.04.1-01之后,复制该虚拟机,创建Ubuntu-16.04.1-02、Ubuntu-16.04.1-03 + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image029.png) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image030.png) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image031.png) + +复制之后效果如下图: + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image032.png) + +## 配置各个虚拟机 + +```shell +hadoop@Ubuntu-01:~$ sudo apt-get install lrzsz +hadoop@Ubuntu-01:~$ sudo apt-get install vim +``` + +### 配置网络 + +将服务器的IP分配方式改为固定IP,点击系统设置-网络-选项-IPv4设置。按照下图进行设置。注意不要忘了DNS服务器的配置,否则会导致虚拟机无法上外网。 +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image033.png) +配置完网络之后,尝试主机和虚拟机互相ping,如果均能ping同则说明网络配置正常。否则需要检查防火墙等配置。此次安装过程中,主机可以ping通虚拟机,但是虚拟机无法ping通主机。关闭Windows机器防火墙后,问题解决。 + + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image034.png) + +### 安装openssh-server + +为了之后方便主机与虚拟机之间,以及各个虚拟机之间方便通讯,需要在虚拟机中安装openssh-server。(Ubuntu默认已经安装SSH Client) + +```shell +sudo apt-get install openssh-server +``` + +安装之后就可以在Windows主机上利用XShell登陆各个虚拟机。 + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image035.png) + + +### 开启root用户 + +在之后的某些操作中(比如文件传输)经常需要root用户,但是Ubuntu默认是不开启root用户的,使用下面的命令进行开启: +sudo passwd root + +### 修改主机名 + +复制的虚拟机的主机名均为Ubuntu-01,但为了以后集群中能够容易分辨各台服务器,需要给每台机器取个不同的名字。机器名由 /etc/hostname文件决定。 +sudo vim /etc/hostname + +在三台虚拟机上,分别配置为: +Ubuntu-01 +Ubuntu-02 +Ubuntu-03 +重启三台虚拟机(sudo reboot),重新利用XShell进行登录,效果如下: + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image036.png) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image037.png) + + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image038.png) + +### 修改hosts + +为了让主机与各个虚拟机以及各个虚拟机之间通讯更加方便,需要配置主机和三台虚拟机的hosts文件: + +Windows主机(C:\windows\system32\drivers\etc) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image039.png) + +Ubuntu-01(/etc/hosts) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image040.png) + +Ubuntu-02(/etc/hosts) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image041.png) + +Ubuntu-03(/etc/hosts) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image042.png) + + + +修改之前效果: +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image043.png) + + +修改之后效果: +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image044.png) + +### 创建hadoop用户组和用户 + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image045.png) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image046.png) + +另外还需要给hadoop用户添加权限,打开/etc/sudoers文件,在root ALL=(ALL:ALL) ALL下添加hadoop ALL=(ALL:ALL) ALL, +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image047.png) + +创建hadoop用户之后,su到hadoop用户,进行后续操作。本文之后的所有操作,如无特殊说明均是指在hadoop用户下。 + +### 配置ssh免登陆 + +为了完成分布式计算系统,需要三台机器相互之间可以无密码访问(或者是master可以无密码访问2个slave)。 +在个人目录/home/hadoop下新建.ssh文件夹,在.ssh中执行 +`ssh-keygen -t rsa` +系统会问你一些配置,由于是初次实验,不需要这些内容,点回车继续下去即可。完成后会在.ssh/下生成id_rsa和id_rsa.pub两个文件,三台机器做同样处理。 +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image048.png) + + +接下来把它们的密钥相互交换,这样做的目的是把Ubuntu-01的密钥交给Ubuntu-02和Ubuntu-03,对Ubuntu-02和Ubuntu-03做同样处理,完成后每一个机器的/.ssh/中应该有3个密钥,一个是自己的,另两个是别人的。 + + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image049.png) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image050.png) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image051.png) + +把自己的密钥连同别人的两个密钥加到授权密钥中 + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image052.png) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image053.png) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image054.png) + + + +接下来检验相互之间是否可以通过ssh实现无密码访问 +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image055.png) + +访问成功会显示欢迎信息,初次访问需要yes,之后就可以不直接访问了。 + +### 安装JDK + +首先利用java -version命令,检查系统中有没有openjdk,如果有的话利用下面的命令删除: + +`sudo apt-get purge openjdk*` + +在此次安装的权限系统中没有发现openjdk。 + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image056.png) + +此次安装的jdk版本为jdk-8u121-linux-x64。 +下载地址为: + +```shell +hadoop@Ubuntu-01:~$ cd /usr/local +hadoop@Ubuntu-01:/usr/local$ sudo mkdir java +hadoop@Ubuntu-01:/usr/local$ sudo chown hadoop:hadoop java/ +``` + +上传jdk-8u121-linux-x64.tar.gz到java目录 + +```shell +hadoop@Ubuntu-01:/usr/local$ cd java/ +hadoop@Ubuntu-01:/usr/local/java$ tar -zxvf jdk-8u121-linux-x64.tar.gz +``` + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image057.png) + +```shell +sudo vim /etc/profile +``` + +在文件末尾添加如下内容: + +```shell +export JAVA_HOME=/usr/local/java/jdk1.8.0_121 +export CLASSPATH=.:$JAVA_HOME/lib:$CLASSPATH +export PATH=$JAVA_HOME/bin:$PATH +``` + +然后检查是否安装成功: +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image058.png) + +## 安装Hadoop + +```shell +cd /usr/local +hadoop@Ubuntu-01:/usr/local$ sudo mkdir hadoop +hadoop@Ubuntu-01:/usr/local$ sudo chown hadoop:hadoop hadoop/ + +hadoop@Ubuntu-01:/usr/local$ cd hadoop/ +hadoop@Ubuntu-01:/usr/local/hadoop$ tar -xzvf hadoop-2.7.3.tar.gz +hadoop@Ubuntu-01:/usr/local/hadoop$ rm hadoop-2.7.3.tar.gz + +hadoop@Ubuntu-01:/usr/local/hadoop$ sudo vim /etc/profile + +export HADOOP_HOME=/usr/local/hadoop/hadoop-2.7.3 +export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH + +hadoop@Ubuntu-01:/usr/local/hadoop$ source /etc/profile +``` + +### 修改Hadoop配置文件 + +Hadoop配置文件均在/usr/local/hadoop/hadoop-2.7.3/etc/hadoop 下 + +#### hadoop-env.sh +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image059.png) + +虽然已经在/etc/profile中设置了JAVA_HOME环境变量,但是此处仍然要进行配置。 + +#### yarn-env.sh +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image060.png) + +由于已经设置了JAVA_HOME环境变量,此处可以不设置 + +#### slaves +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image061.png) + +#### core-site.xml + +```xml + + + fs.defaultFS + hdfs://Ubuntu-01:9000 + + + io.file.buffer.size + 131072 + + + hadoop.tmp.dir + file:/usr/local/hadoop/hadoop-2.7.3/tmp + Abasefor other temporary directories. + + + hadoop.proxyuser.spark.hosts + * + + + hadoop.proxyuser.spark.groups + * + + +``` + +#### hdfs-site.xml + +```xml + + + + dfs.namenode.secondary.http-address + Ubuntu-01:9001 + + + + dfs.namenode.name.dir + file:/usr/local/hadoop/hadoop-2.7.3/name + + + + dfs.datanode.data.dir + file:/usr/local/hadoop/hadoop-2.7.3/tmp + + + + dfs.replication + 2 + + + + dfs.webhdfs.enabled + true + + + +``` + +#### mapred-site.xml + +```xml + + + mapreduce.framework.name + yarn + + + mapreduce.jobhistory.address + Ubuntu-01:10020 + + + mapreduce.jobhistory.webapp.address + Ubuntu-01:19888 + + + + +``` + +#### yarn-site.xml + +```xml + + yarn.nodemanager.aux-services + mapreduce_shuffle + + + yarn.nodemanager.aux-services.mapreduce.shuffle.class + org.apache.hadoop.mapred.ShuffleHandler + + + yarn.resourcemanager.address + Ubuntu-01:8032 + + + yarn.resourcemanager.scheduler.address + Ubuntu-01:8030 + + + yarn.resourcemanager.resource-tracker.address + Ubuntu-01:8035 + + + yarn.resourcemanager.admin.address + Ubuntu-01:8033 + + + yarn.resourcemanager.webapp.address + Ubuntu-01:8088 + + + yarn.resourcemanager.hostname + 192.168.0.160 + + + +``` + +#### 将配置好的hadoop文件copy到另一台slave机器上 + +```shell +hadoop@Ubuntu-01:/usr/local/hadoop$ scp -r hadoop-2.7.3/ hadoop@Ubuntu-02:/usr/local/hadoop/ +hadoop@Ubuntu-01:/usr/local/hadoop$ scp -r hadoop-2.7.3/ hadoop@Ubuntu-03:/usr/local/hadoop/ +``` + + +### 验证 + +#### 格式化namenode + +```shell +hadoop@Ubuntu-01:/usr/local/hadoop/hadoop-2.7.3/etc/hadoop$ hdfs namenode -format +17/02/12 14:00:27 INFO namenode.NameNode: STARTUP_MSG: +/************************************************************ +STARTUP_MSG: Starting NameNode +STARTUP_MSG: host = Ubuntu-01/127.0.1.1 +STARTUP_MSG: args = [-format] +STARTUP_MSG: version = 2.7.3 +STARTUP_MSG: classpath = /usr/local/hadoop/hadoop-2.7.3/etc/hadoop:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/jettison-1.1.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/gson-2.2.4.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/commons-digester-1.8.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/commons-configuration-1.6.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/jets3t-0.9.0.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/servlet-api-2.5.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/httpclient-4.2.5.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/hamcrest-core-1.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/jaxb-api-2.2.2.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/jersey-core-1.9.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/activation-1.1.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/apacheds-kerberos-codec-2.0.0-M15.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/commons-httpclient-3.1.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/jetty-6.1.26.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/java-xmlbuilder-0.4.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/hadoop-auth-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/commons-logging-1.1.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/commons-codec-1.4.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/jersey-server-1.9.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/jackson-core-asl-1.9.13.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/api-asn1-api-1.0.0-M20.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/curator-recipes-2.7.1.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/jsch-0.1.42.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/jackson-mapper-asl-1.9.13.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/api-util-1.0.0-M20.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/apacheds-i18n-2.0.0-M15.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/mockito-all-1.8.5.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/log4j-1.2.17.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/slf4j-api-1.7.10.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/jaxb-impl-2.2.3-1.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/netty-3.6.2.Final.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/commons-collections-3.2.2.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/stax-api-1.0-2.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/jsr305-3.0.0.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/httpcore-4.2.5.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/commons-math3-3.1.1.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/jackson-xc-1.9.13.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/htrace-core-3.1.0-incubating.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/commons-io-2.4.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/commons-net-3.1.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/snappy-java-1.0.4.1.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/curator-framework-2.7.1.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/commons-lang-2.6.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/junit-4.11.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/xz-1.0.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/guava-11.0.2.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/commons-beanutils-1.7.0.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/asm-3.2.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/avro-1.7.4.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/jersey-json-1.9.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/jetty-util-6.1.26.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/zookeeper-3.4.6.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/xmlenc-0.52.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/commons-beanutils-core-1.8.0.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/commons-compress-1.4.1.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/jackson-jaxrs-1.9.13.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/paranamer-2.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/commons-cli-1.2.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/protobuf-java-2.5.0.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/jsp-api-2.1.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/curator-client-2.7.1.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/hadoop-annotations-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/hadoop-common-2.7.3-tests.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/hadoop-nfs-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/hadoop-common-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/lib/xml-apis-1.3.04.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/lib/servlet-api-2.5.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/lib/jersey-core-1.9.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/lib/jetty-6.1.26.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/lib/commons-logging-1.1.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/lib/commons-codec-1.4.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/lib/jersey-server-1.9.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/lib/jackson-core-asl-1.9.13.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/lib/netty-all-4.0.23.Final.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/lib/jackson-mapper-asl-1.9.13.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/lib/log4j-1.2.17.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/lib/netty-3.6.2.Final.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/lib/jsr305-3.0.0.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/lib/htrace-core-3.1.0-incubating.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/lib/commons-io-2.4.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/lib/commons-lang-2.6.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/lib/xercesImpl-2.9.1.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/lib/guava-11.0.2.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/lib/asm-3.2.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/lib/commons-daemon-1.0.13.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/lib/jetty-util-6.1.26.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/lib/xmlenc-0.52.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/lib/leveldbjni-all-1.8.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/lib/commons-cli-1.2.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/lib/protobuf-java-2.5.0.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/hadoop-hdfs-nfs-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/hadoop-hdfs-2.7.3-tests.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/hadoop-hdfs-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/jettison-1.1.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/servlet-api-2.5.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/guice-3.0.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/aopalliance-1.0.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/jaxb-api-2.2.2.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/guice-servlet-3.0.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/jersey-core-1.9.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/activation-1.1.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/jetty-6.1.26.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/commons-logging-1.1.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/commons-codec-1.4.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/jersey-server-1.9.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/jackson-core-asl-1.9.13.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/jackson-mapper-asl-1.9.13.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/log4j-1.2.17.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/jaxb-impl-2.2.3-1.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/netty-3.6.2.Final.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/commons-collections-3.2.2.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/stax-api-1.0-2.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/jsr305-3.0.0.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/jackson-xc-1.9.13.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/commons-io-2.4.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/commons-lang-2.6.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/jersey-guice-1.9.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/xz-1.0.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/guava-11.0.2.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/asm-3.2.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/jersey-json-1.9.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/jetty-util-6.1.26.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/zookeeper-3.4.6.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/jersey-client-1.9.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/commons-compress-1.4.1.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/jackson-jaxrs-1.9.13.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/leveldbjni-all-1.8.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/zookeeper-3.4.6-tests.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/commons-cli-1.2.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/protobuf-java-2.5.0.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/javax.inject-1.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/hadoop-yarn-registry-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/hadoop-yarn-server-sharedcachemanager-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/hadoop-yarn-server-resourcemanager-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/hadoop-yarn-server-web-proxy-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/hadoop-yarn-client-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/hadoop-yarn-server-nodemanager-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/hadoop-yarn-api-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/hadoop-yarn-server-tests-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/hadoop-yarn-common-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/hadoop-yarn-applications-distributedshell-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/hadoop-yarn-server-common-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/hadoop-yarn-server-applicationhistoryservice-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/hadoop-yarn-applications-unmanaged-am-launcher-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/lib/hamcrest-core-1.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/lib/guice-3.0.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/lib/aopalliance-1.0.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/lib/guice-servlet-3.0.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/lib/jersey-core-1.9.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/lib/jersey-server-1.9.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/lib/jackson-core-asl-1.9.13.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/lib/jackson-mapper-asl-1.9.13.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/lib/log4j-1.2.17.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/lib/netty-3.6.2.Final.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/lib/commons-io-2.4.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/lib/snappy-java-1.0.4.1.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/lib/junit-4.11.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/lib/jersey-guice-1.9.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/lib/xz-1.0.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/lib/asm-3.2.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/lib/avro-1.7.4.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/lib/commons-compress-1.4.1.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/lib/paranamer-2.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/lib/leveldbjni-all-1.8.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/lib/protobuf-java-2.5.0.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/lib/javax.inject-1.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/lib/hadoop-annotations-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-client-app-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-client-hs-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-client-hs-plugins-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-client-common-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-client-core-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-client-shuffle-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.7.3-tests.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/contrib/capacity-scheduler/*.jar +STARTUP_MSG: build = https://git-wip-us.apache.org/repos/asf/hadoop.git -r baa91f7c6bc9cb92be5982de4719c1c8af91ccff; compiled by 'root' on 2016-08-18T01:41Z +STARTUP_MSG: java = 1.8.0_121 +************************************************************/ +17/02/12 14:00:27 INFO namenode.NameNode: registered UNIX signal handlers for [TERM, HUP, INT] +17/02/12 14:00:27 INFO namenode.NameNode: createNameNode [-format] +Formatting using clusterid: CID-7e34c743-19b0-4ebb-b922-37e8657a8090 +17/02/12 14:00:27 INFO namenode.FSNamesystem: No KeyProvider found. +17/02/12 14:00:27 INFO namenode.FSNamesystem: fsLock is fair:true +17/02/12 14:00:27 INFO blockmanagement.DatanodeManager: dfs.block.invalidate.limit=1000 +17/02/12 14:00:27 INFO blockmanagement.DatanodeManager: dfs.namenode.datanode.registration.ip-hostname-check=true +17/02/12 14:00:27 INFO blockmanagement.BlockManager: dfs.namenode.startup.delay.block.deletion.sec is set to 000:00:00:00.000 +17/02/12 14:00:27 INFO blockmanagement.BlockManager: The block deletion will start around 2017 二月 12 14:00:27 +17/02/12 14:00:27 INFO util.GSet: Computing capacity for map BlocksMap +17/02/12 14:00:27 INFO util.GSet: VM type = 64-bit +17/02/12 14:00:28 INFO util.GSet: 2.0% max memory 966.7 MB = 19.3 MB +17/02/12 14:00:28 INFO util.GSet: capacity = 2^21 = 2097152 entries +17/02/12 14:00:28 INFO blockmanagement.BlockManager: dfs.block.access.token.enable=false +17/02/12 14:00:28 INFO blockmanagement.BlockManager: defaultReplication = 3 +17/02/12 14:00:28 INFO blockmanagement.BlockManager: maxReplication = 512 +17/02/12 14:00:28 INFO blockmanagement.BlockManager: minReplication = 1 +17/02/12 14:00:28 INFO blockmanagement.BlockManager: maxReplicationStreams = 2 +17/02/12 14:00:28 INFO blockmanagement.BlockManager: replicationRecheckInterval = 3000 +17/02/12 14:00:28 INFO blockmanagement.BlockManager: encryptDataTransfer = false +17/02/12 14:00:28 INFO blockmanagement.BlockManager: maxNumBlocksToLog = 1000 +17/02/12 14:00:28 INFO namenode.FSNamesystem: fsOwner = hadoop (auth:SIMPLE) +17/02/12 14:00:28 INFO namenode.FSNamesystem: supergroup = supergroup +17/02/12 14:00:28 INFO namenode.FSNamesystem: isPermissionEnabled = true +17/02/12 14:00:28 INFO namenode.FSNamesystem: HA Enabled: false +17/02/12 14:00:28 INFO namenode.FSNamesystem: Append Enabled: true +17/02/12 14:00:28 INFO util.GSet: Computing capacity for map INodeMap +17/02/12 14:00:28 INFO util.GSet: VM type = 64-bit +17/02/12 14:00:28 INFO util.GSet: 1.0% max memory 966.7 MB = 9.7 MB +17/02/12 14:00:28 INFO util.GSet: capacity = 2^20 = 1048576 entries +17/02/12 14:00:28 INFO namenode.FSDirectory: ACLs enabled? false +17/02/12 14:00:28 INFO namenode.FSDirectory: XAttrs enabled? true +17/02/12 14:00:28 INFO namenode.FSDirectory: Maximum size of an xattr: 16384 +17/02/12 14:00:28 INFO namenode.NameNode: Caching file names occuring more than 10 times +17/02/12 14:00:28 INFO util.GSet: Computing capacity for map cachedBlocks +17/02/12 14:00:28 INFO util.GSet: VM type = 64-bit +17/02/12 14:00:28 INFO util.GSet: 0.25% max memory 966.7 MB = 2.4 MB +17/02/12 14:00:28 INFO util.GSet: capacity = 2^18 = 262144 entries +17/02/12 14:00:28 INFO namenode.FSNamesystem: dfs.namenode.safemode.threshold-pct = 0.9990000128746033 +17/02/12 14:00:28 INFO namenode.FSNamesystem: dfs.namenode.safemode.min.datanodes = 0 +17/02/12 14:00:28 INFO namenode.FSNamesystem: dfs.namenode.safemode.extension = 30000 +17/02/12 14:00:28 INFO metrics.TopMetrics: NNTop conf: dfs.namenode.top.window.num.buckets = 10 +17/02/12 14:00:28 INFO metrics.TopMetrics: NNTop conf: dfs.namenode.top.num.users = 10 +17/02/12 14:00:28 INFO metrics.TopMetrics: NNTop conf: dfs.namenode.top.windows.minutes = 1,5,25 +17/02/12 14:00:28 INFO namenode.FSNamesystem: Retry cache on namenode is enabled +17/02/12 14:00:28 INFO namenode.FSNamesystem: Retry cache will use 0.03 of total heap and retry cache entry expiry time is 600000 millis +17/02/12 14:00:28 INFO util.GSet: Computing capacity for map NameNodeRetryCache +17/02/12 14:00:28 INFO util.GSet: VM type = 64-bit +17/02/12 14:00:28 INFO util.GSet: 0.029999999329447746% max memory 966.7 MB = 297.0 KB +17/02/12 14:00:28 INFO util.GSet: capacity = 2^15 = 32768 entries +Re-format filesystem in Storage Directory /usr/local/hadoop/hadoop-2.7.3/name ? (Y or N) Y +17/02/12 14:00:33 INFO namenode.FSImage: Allocated new BlockPoolId: BP-1871053033-127.0.1.1-1486879233735 +17/02/12 14:00:33 INFO common.Storage: Storage directory /usr/local/hadoop/hadoop-2.7.3/name has been successfully formatted. +17/02/12 14:00:33 INFO namenode.FSImageFormatProtobuf: Saving image file /usr/local/hadoop/hadoop-2.7.3/name/current/fsimage.ckpt_0000000000000000000 using no compression +17/02/12 14:00:33 INFO namenode.FSImageFormatProtobuf: Image file /usr/local/hadoop/hadoop-2.7.3/name/current/fsimage.ckpt_0000000000000000000 of size 353 bytes saved in 0 seconds. +17/02/12 14:00:33 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0 +17/02/12 14:00:33 INFO util.ExitUtil: Exiting with status 0 +17/02/12 14:00:33 INFO namenode.NameNode: SHUTDOWN_MSG: +/************************************************************ +SHUTDOWN_MSG: Shutting down NameNode at Ubuntu-01/127.0.1.1 +************************************************************/ +``` + + +#### 启动hdfs + +```shell +hadoop@Ubuntu-01:/usr/local/hadoop/hadoop-2.7.3/etc/hadoop$ start-dfs.sh +Starting namenodes on [Ubuntu-01] +Ubuntu-01: starting namenode, logging to /usr/local/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-namenode-Ubuntu-01.out +Ubuntu-03: starting datanode, logging to /usr/local/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-datanode-Ubuntu-03.out +Ubuntu-02: starting datanode, logging to /usr/local/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-datanode-Ubuntu-02.out +Starting secondary namenodes [Ubuntu-01] +Ubuntu-01: starting secondarynamenode, logging to /usr/local/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-secondarynamenode-Ubuntu-01.out +hadoop@Ubuntu-01:/usr/local/hadoop/hadoop-2.7.3/etc/hadoop$ jps +9466 Jps +9147 NameNode +9357 SecondaryNameNode +``` + +#### 停止hdfs + +```shell +hadoop@Ubuntu-01:/usr/local/hadoop/hadoop-2.7.3/etc/hadoop$ stop-dfs.sh +Stopping namenodes on [Ubuntu-01] +Ubuntu-01: stopping namenode +Ubuntu-02: stopping datanode +Ubuntu-03: stopping datanode +Stopping secondary namenodes [Ubuntu-01] +Ubuntu-01: stopping secondarynamenode +hadoop@Ubuntu-01:/usr/local/hadoop/hadoop-2.7.3/etc/hadoop$ jps +9814 Jps +``` + +#### 启动yarn + +```shell +hadoop@Ubuntu-01:~$ start-yarn.sh +starting yarn daemons +starting resourcemanager, logging to /usr/local/hadoop/hadoop-2.7.3/logs/yarn-hadoop-resourcemanager-Ubuntu-01.out +Ubuntu-02: starting nodemanager, logging to /usr/local/hadoop/hadoop-2.7.3/logs/yarn-hadoop-nodemanager-Ubuntu-02.out +Ubuntu-03: starting nodemanager, logging to /usr/local/hadoop/hadoop-2.7.3/logs/yarn-hadoop-nodemanager-Ubuntu-03.out +hadoop@Ubuntu-01:~$ jps +6252 ResourceManager +6509 Jps +``` + +#### 停止yarn + +```shell +hadoop@Ubuntu-01:~$ stop-yarn.sh +stopping yarn daemons +stopping resourcemanager +Ubuntu-03: stopping nodemanager +Ubuntu-02: stopping nodemanager +Ubuntu-03: nodemanager did not stop gracefully after 5 seconds: killing with kill -9 +Ubuntu-02: nodemanager did not stop gracefully after 5 seconds: killing with kill -9 +no proxyserver to stop +``` + +#### 查看集群状态 + +```shell +hadoop@Ubuntu-01:/usr/local/hadoop/hadoop-2.7.3/etc/hadoop$ hdfs dfsadmin -report +report: Call From Ubuntu-01/127.0.1.1 to Ubuntu-01:9000 failed on connection exception: java.net.ConnectException: 拒绝连接; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused +hadoop@Ubuntu-01:/usr/local/hadoop/hadoop-2.7.3/etc/hadoop$ start-dfs.sh +Starting namenodes on [Ubuntu-01] +Ubuntu-01: starting namenode, logging to /usr/local/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-namenode-Ubuntu-01.out +Ubuntu-03: starting datanode, logging to /usr/local/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-datanode-Ubuntu-03.out +Ubuntu-02: starting datanode, logging to /usr/local/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-datanode-Ubuntu-02.out +Starting secondary namenodes [Ubuntu-01] +Ubuntu-01: starting secondarynamenode, logging to /usr/local/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-secondarynamenode-Ubuntu-01.out +hadoop@Ubuntu-01:~$ hdfs dfsadmin -report +Configured Capacity: 82167201792 (76.52 GB) +Present Capacity: 67444781056 (62.81 GB) +DFS Remaining: 67444297728 (62.81 GB) +DFS Used: 483328 (472 KB) +DFS Used%: 0.00% +Under replicated blocks: 0 +Blocks with corrupt replicas: 0 +Missing blocks: 0 +Missing blocks (with replication factor 1): 0 + +------------------------------------------------- +Live datanodes (2): + +Name: 192.168.1.180:50010 (Ubuntu-03) +Hostname: Ubuntu-03 +Decommission Status : Normal +Configured Capacity: 41083600896 (38.26 GB) +DFS Used: 241664 (236 KB) +Non DFS Used: 7351656448 (6.85 GB) +DFS Remaining: 33731702784 (31.42 GB) +DFS Used%: 0.00% +DFS Remaining%: 82.11% +Configured Cache Capacity: 0 (0 B) +Cache Used: 0 (0 B) +Cache Remaining: 0 (0 B) +Cache Used%: 100.00% +Cache Remaining%: 0.00% +Xceivers: 1 +Last contact: Sun Feb 12 23:18:24 CST 2017 + + +Name: 192.168.1.170:50010 (Ubuntu-02) +Hostname: Ubuntu-02 +Decommission Status : Normal +Configured Capacity: 41083600896 (38.26 GB) +DFS Used: 241664 (236 KB) +Non DFS Used: 7370764288 (6.86 GB) +DFS Remaining: 33712594944 (31.40 GB) +DFS Used%: 0.00% +DFS Remaining%: 82.06% +Configured Cache Capacity: 0 (0 B) +Cache Used: 0 (0 B) +Cache Remaining: 0 (0 B) +Cache Used%: 100.00% +Cache Remaining%: 0.00% +Xceivers: 1 +Last contact: Sun Feb 12 23:18:24 CST 2017 +``` + +#### 查看HDFS前台 + +http://192.168.1.160:50070/ +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image062.png) + +#### 查看RM + +http://192.168.1.160:8088/ + + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image063.png) + +#### 查看Jobhistory + +```shell +hadoop@Ubuntu-01:~$ mr-jobhistory-daemon.sh start historyserver +starting historyserver, logging to /usr/local/hadoop/hadoop-2.7.3/logs/mapred-hadoop-historyserver-Ubuntu-01.out +hadoop@Ubuntu-01:~$ mr-jobhistory-daemon.sh stop historyserver +stopping historyserver +``` + +http://192.168.1.160:19888/jobhistory + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image064.png) + +#### 运行wordcount程序 + +创建 input目录 + +```shell +hadoop@Ubuntu-01:~$ mkdir input +``` + +在input创建f1、f2并写内容 + +```shell +hadoop@Ubuntu-01:~$ cat input/f1 +Hello world bye jj +hadoop@Ubuntu-01:~$ cat input/f2 +Hello Hadoop bye Hadoop +``` + +在hdfs创建/tmp/input目录 + +```shell +hadoop@Ubuntu-01:~$ hadoop fs -mkdir /tmp +hadoop@Ubuntu-01:~$ hadoop fs -mkdir /tmp/input +``` + +将f1、f2文件copy到hdfs /tmp/input目录 + +```shell +hadoop@Ubuntu-01:~$ hadoop fs -put input/ /tmp +``` + +执行wordcount程序 + +```shell +hadoop@Ubuntu-01:~$ hadoop jar /usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /tmp/input /output +17/02/12 21:47:48 INFO client.RMProxy: Connecting to ResourceManager at Ubuntu-01/192.168.1.160:8032 +17/02/12 21:47:49 INFO input.FileInputFormat: Total input paths to process : 2 +17/02/12 21:47:49 INFO mapreduce.JobSubmitter: number of splits:2 +17/02/12 21:47:50 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1486907123913_0001 +17/02/12 21:47:50 INFO impl.YarnClientImpl: Submitted application application_1486907123913_0001 +17/02/12 21:47:50 INFO mapreduce.Job: The url to track the job: http://Ubuntu-01:8088/proxy/application_1486907123913_0001/ +17/02/12 21:47:50 INFO mapreduce.Job: Running job: job_1486907123913_0001 +17/02/12 21:48:02 INFO mapreduce.Job: Job job_1486907123913_0001 running in uber mode : false +17/02/12 21:48:02 INFO mapreduce.Job: map 0% reduce 0% +17/02/12 21:48:12 INFO mapreduce.Job: map 100% reduce 0% +17/02/12 21:48:20 INFO mapreduce.Job: map 100% reduce 100% +17/02/12 21:48:21 INFO mapreduce.Job: Job job_1486907123913_0001 completed successfully +17/02/12 21:48:21 INFO mapreduce.Job: Counters: 49 + File System Counters + FILE: Number of bytes read=84 + FILE: Number of bytes written=357236 + FILE: Number of read operations=0 + FILE: Number of large read operations=0 + FILE: Number of write operations=0 + HDFS: Number of bytes read=243 + HDFS: Number of bytes written=36 + HDFS: Number of read operations=9 + HDFS: Number of large read operations=0 + HDFS: Number of write operations=2 + Job Counters + Launched map tasks=2 + Launched reduce tasks=1 + Data-local map tasks=2 + Total time spent by all maps in occupied slots (ms)=16865 + Total time spent by all reduces in occupied slots (ms)=4585 + Total time spent by all map tasks (ms)=16865 + Total time spent by all reduce tasks (ms)=4585 + Total vcore-milliseconds taken by all map tasks=16865 + Total vcore-milliseconds taken by all reduce tasks=4585 + Total megabyte-milliseconds taken by all map tasks=17269760 + Total megabyte-milliseconds taken by all reduce tasks=4695040 + Map-Reduce Framework + Map input records=2 + Map output records=8 + Map output bytes=75 + Map output materialized bytes=90 + Input split bytes=198 + Combine input records=8 + Combine output records=7 + Reduce input groups=5 + Reduce shuffle bytes=90 + Reduce input records=7 + Reduce output records=5 + Spilled Records=14 + Shuffled Maps =2 + Failed Shuffles=0 + Merged Map outputs=2 + GC time elapsed (ms)=426 + CPU time spent (ms)=1580 + Physical memory (bytes) snapshot=508022784 + Virtual memory (bytes) snapshot=5689307136 + Total committed heap usage (bytes)=263376896 + Shuffle Errors + BAD_ID=0 + CONNECTION=0 + IO_ERROR=0 + WRONG_LENGTH=0 + WRONG_MAP=0 + WRONG_REDUCE=0 + File Input Format Counters + Bytes Read=45 + File Output Format Counters + Bytes Written=36 +``` + +查看执行结果 + +```shell +hadoop@Ubuntu-01:~$ hadoop fs -cat /output/part-r-00000 +Hadoop 2 +Hello 2 +bye 2 +jj 1 +world 1 +``` + +## 安装Scala + +scala-2.11.8.tgz +http://www.scala-lang.org/download/ + +```shell +hadoop@Ubuntu-01:~$ cd /usr/local +hadoop@Ubuntu-01:/usr/local$ sudo mkdir scala +hadoop@Ubuntu-01:/usr/local$ sudo chown hadoop:hadoop scala +hadoop@Ubuntu-01:/usr/local$ cd scala/ +hadoop@Ubuntu-01:/usr/local/scala$ tar -zxvf scala-2.11.8.tgz + + +hadoop@Ubuntu-01:/usr/local/scala$ sudo vim /etc/profile +``` + +末尾加入: + +```shell +export SCALA_HOME=/usr/local/scala/scala-2.11.8 +export PATH=$PATH:$SCALA_HOME/bin +``` + +```shell +hadoop@Ubuntu-01:/usr/local/scala$ source /etc/profile +``` +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image065.png) + +另外两台机器进行类似操作安装scala + +## 安装Spark + +http://spark.apache.org/ + +spark-2.1.0-bin-hadoop2.7.tgz + +```shell +hadoop@Ubuntu-01:~$ cd /usr/local +hadoop@Ubuntu-01:/usr/local$ sudo mkdir spark +hadoop@Ubuntu-01:/usr/local$ sudo chown hadoop:hadoop spark +hadoop@Ubuntu-01:/usr/local$ cd spark/ +hadoop@Ubuntu-01:/usr/local/spark$ tar -zxvf spark-2.1.0-bin-hadoop2.7.tgz + +hadoop@Ubuntu-01:/usr/local/spark$ sudo vim /etc/profile +``` + +```shell +export SPARK_HOME=/usr/local/spark/spark-2.1.0-bin-hadoop2.7 +export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin +``` + +```shell +hadoop@Ubuntu-01:/usr/local/spark$ source /etc/profile +``` + +另外两台进行类似操作 + +### 配置 + +```shell +cd /usr/local/spark/conf +mv spark-env.sh.template spark-env.sh +vim spark-env.sh +``` + +```shell +HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop +SPARK_MASTER_HOST=192.168.1.160 +SPARK_MASTER_WEBUI_PORT=28686 +SPARK_LOCAL_DIRS=/usr/local/spark/spark-2.1.0-bin-hadoop2.7/tmp/local +SPARK_WORKER_DIR=/usr/local/spark/spark-2.1.0-bin-hadoop2.7/tmp/worker +SPARK_DRIVER_MEMORY=4G +SPARK_WORKER_CORES=16 +SPARK_WORKER_MEMORY=64g +SPARK_LOG_DIR=/usr/local/spark/spark-2.1.0-bin-hadoop2.7/tmp/logs +# 下面的配置主要用于jobhistory,非必须 +SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.retainedApplications=3 -Dspark.history.fs.logDirectory=hdfs://Ubuntu-01:9000/spark/log" +``` + +```shell +mv spark-defaults.conf.template spark-defaults.conf +vim spark-defaults.conf +``` + +```shell +#下面的配置主要用于jobhistory,非必须 + +spark.eventLog.enabled true +spark.eventLog.dir hdfs://Ubuntu-01:9000/spark/log +spark.eventLog.compress true +``` + + +复制spark目录 + +```shell +hadoop@Ubuntu-01:/usr/local/spark$ scp -r spark-2.1.0-bin-hadoop2.7/ hadoop@Ubuntu-02:/usr/local/spark +hadoop@Ubuntu-01:/usr/local/spark$ scp -r spark-2.1.0-bin-hadoop2.7/ hadoop@Ubuntu-03:/usr/local/spark +``` + + +### 验证 + +```shell +hadoop@Ubuntu-01:~$ start-dfs.sh +Starting namenodes on [Ubuntu-01] +Ubuntu-01: starting namenode, logging to /usr/local/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-namenode-Ubuntu-01.out +Ubuntu-02: starting datanode, logging to /usr/local/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-datanode-Ubuntu-02.out +Ubuntu-03: starting datanode, logging to /usr/local/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-datanode-Ubuntu-03.out +Starting secondary namenodes [Ubuntu-01] +Ubuntu-01: starting secondarynamenode, logging to /usr/local/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-secondarynamenode-Ubuntu-01.out +hadoop@Ubuntu-01:~$ jps +5057 SecondaryNameNode +4846 NameNode +5166 Jps +hadoop@Ubuntu-01:~$ start-yarn.sh +starting yarn daemons +starting resourcemanager, logging to /usr/local/hadoop/hadoop-2.7.3/logs/yarn-hadoop-resourcemanager-Ubuntu-01.out +Ubuntu-02: starting nodemanager, logging to /usr/local/hadoop/hadoop-2.7.3/logs/yarn-hadoop-nodemanager-Ubuntu-02.out +Ubuntu-03: starting nodemanager, logging to /usr/local/hadoop/hadoop-2.7.3/logs/yarn-hadoop-nodemanager-Ubuntu-03.out +hadoop@Ubuntu-01:~$ jps +5568 Jps +5057 SecondaryNameNode +5223 ResourceManager +4846 NameNode +hadoop@Ubuntu-01:~$ start-master.sh +starting org.apache.spark.deploy.master.Master, logging to /usr/local/spark/spark-2.1.0-bin-hadoop2.7/tmp/logs/spark-hadoop-org.apache.spark.deploy.master.Master-1-Ubuntu-01.out +hadoop@Ubuntu-01:~$ jps +5649 Jps +5057 SecondaryNameNode +5223 ResourceManager +5597 Master +4846 NameNode +hadoop@Ubuntu-01:~$ start-slave.sh 192.168.1.160:7077 +starting org.apache.spark.deploy.worker.Worker, logging to /usr/local/spark/spark-2.1.0-bin-hadoop2.7/tmp/logs/spark-hadoop-org.apache.spark.deploy.worker.Worker-1-Ubuntu-01.out +hadoop@Ubuntu-01:~$ jps +5057 SecondaryNameNode +5223 ResourceManager +5672 Worker +5720 Jps +5597 Master +4846 NameNode + +hadoop@Ubuntu-01:~$ start-history-server.sh +starting org.apache.spark.deploy.history.HistoryServer, logging to /usr/local/spark/spark-2.1.0-bin-hadoop2.7/tmp/logs/spark-hadoop-org.apache.spark.deploy.history.HistoryServer-1-Ubuntu-01.out + +hadoop@Ubuntu-01:~$ run-example org.apache.spark.examples.SparkPi 2>%1 | grep "Pi is roughly" +Pi is roughly 3.140195700978505 +hadoop@Ubuntu-01:~$ spark-submit $SPARK_HOME/examples/src/main/python/pi.py 2>%1 | grep "Pi is roughly" +Pi is roughly 3.146920 + + +hadoop@Ubuntu-01:~$ spark-shell +Setting default log level to "WARN". +To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel). +17/02/15 22:30:19 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable +17/02/15 22:30:29 WARN metastore.ObjectStore: Version information not found in metastore. hive.metastore.schema.verification is not enabled so recording the schema version 1.2.0 +17/02/15 22:30:29 WARN metastore.ObjectStore: Failed to get database default, returning NoSuchObjectException +17/02/15 22:30:32 WARN metastore.ObjectStore: Failed to get database global_temp, returning NoSuchObjectException +Spark context Web UI available at http://192.168.1.160:4040 +Spark context available as 'sc' (master = local[*], app id = local-1487169020439). +Spark session available as 'spark'. +Welcome to + ____ __ + / __/__ ___ _____/ /__ + _\ \/ _ \/ _ `/ __/ '_/ + /___/ .__/\_,_/_/ /_/\_\ version 2.1.0 + /_/ + +Using Scala version 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_121) +Type in expressions to have them evaluated. +Type :help for more information. + +scala> val textFile =sc.textFile("file:///usr/local/spark/spark-2.1.0-bin-hadoop2.7/README.md"); +textFile: org.apache.spark.rdd.RDD[String] = file:///usr/local/spark/spark-2.1.0-bin-hadoop2.7/README.md MapPartitionsRDD[1] at textFile at :24 + +scala> textFile.count(); +res8: Long = 104 + +scala> textFile.first(); +res9: String = # Apache Spark + +scala> val linesWithSpark = textFile.filter(line=> line.contains("Spark")); +linesWithSpark: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[2] at filter at :26 + +scala> linesWithSpark.count(); +res10: Long = 20 + +scala> textFile.filter(line =>line.contains("Spark")).count(); +res11: Long = 20 + +scala> +``` + +#### 前台界面 + +SPARK_MASTER_WEBUI: http://192.168.1.160:28686/ +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image066.png) + +SPARK_HISTORY:http://192.168.1.160:18080/ + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image067.png) + +### 关闭顺序 + +```shell +hadoop@Ubuntu-01:~$ stop-history-server.sh +stopping org.apache.spark.deploy.history.HistoryServer +hadoop@Ubuntu-01:~$ stop-slaves.sh +Ubuntu-02: stopping org.apache.spark.deploy.worker.Worker +Ubuntu-03: stopping org.apache.spark.deploy.worker.Worker +Ubuntu-01: stopping org.apache.spark.deploy.worker.Worker +hadoop@Ubuntu-01:~$ stop-master.sh +stopping org.apache.spark.deploy.master.Master +hadoop@Ubuntu-01:~$ stop-yarn.sh +stopping yarn daemons +stopping resourcemanager +Ubuntu-03: stopping nodemanager +Ubuntu-02: stopping nodemanager +no proxyserver to stop +hadoop@Ubuntu-01:~$ stop-dfs.sh +Stopping namenodes on [Ubuntu-01] +Ubuntu-01: stopping namenode +Ubuntu-02: stopping datanode +Ubuntu-03: stopping datanode +Stopping secondary namenodes [Ubuntu-01] +Ubuntu-01: stopping secondarynamenode +``` + +### Scala-IDE搭建Spark源码分析环境 + +下载、解压Scala-IDE,下载地址为: +http://scala-ide.org/index.html +scala-SDK-4.5.0-vfinal-2.11-win32.win32.x86_64.zip + +下载、安装SBT,下载地址为: +http://www.scala-sbt.org/ +sbt-0.13.13.1.msi + +在github上下载最新的Spark源码: + +```shell +PS D:\temp\Scala> git clone https://github.com/apache/spark.git + +PS D:\temp\Scala> cd .\spark\ +``` + +输入sbt命令,首次会下载很多东西,速度比较慢,某些在墙外,所以需要提前搭建VPN。如果出错可以多执行几遍 + +```shell +PS D:\temp\Scala\spark> sbt + ignoring option MaxPermSize=256m; support was removed in 8.0 +[info] Loading project definition from D:\temp\Scala\spark\project +[info] Resolving key references (18753 settings) ... +[info] Set current project to spark-parent (in build file:/D:/temp/Scala/spark/) +``` + +在sbt提示符下输入eclipse,首次会下载很多东西,速度比较慢。如果出错多执行几遍。 + +```shell +> eclipse +[info] About to create Eclipse project files for your project(s). +[info] Resolving jline#jline;2.12.1 ... +[info] Successfully created Eclipse project files for project(s): +[info] spark-sql +[info] spark-sql-kafka-0-10 +[info] spark-streaming-kafka-0-8-assembly +[info] spark-examples +[info] spark-streaming +[info] spark-mllib +[info] spark-catalyst +[info] spark-streaming-kafka-0-10-assembly +[info] spark-graphx +[info] spark-streaming-flume-sink +[info] spark-tags +[info] spark-assembly +[info] spark-mllib-local +[info] spark-tools +[info] spark-repl +[info] spark-streaming-flume-assembly +[info] spark-streaming-kafka-0-8 +[info] old-deps +[info] spark-network-common +[info] spark-hive +[info] spark-streaming-flume +[info] spark-sketch +[info] spark-network-shuffle +[info] spark-core +[info] spark-unsafe +[info] spark-streaming-kafka-0-10 +[info] spark-launcher +> exit +``` + +在Scala-IDE导入spark项目: +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image068.png) +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image069.png) + +## 安装Zookeeper + +https://zookeeper.apache.org/ + +zookeeper-3.4.9.tar.gz + +```shell +hadoop@Ubuntu-01:~$ cd /usr/local +hadoop@Ubuntu-01:/usr/local$ sudo mkdir zookeeper +hadoop@Ubuntu-01:/usr/local$ sudo chown hadoop:hadoop zookeeper/ +hadoop@Ubuntu-01:/usr/local$ cd zookeeper/ +hadoop@Ubuntu-01:/usr/local/zookeeper$ tar -zxvf zookeeper-3.4.9.tar.gz + +hadoop@Ubuntu-01:/usr/local/zookeeper$ sudo vim /etc/profile + +export ZOOKEEPER_HOME=/usr/local/zookeeper/zookeeper-3.4.9 +export PATH=$PATH:$ZOOKEEPER_HOME/bin + +hadoop@Ubuntu-01:/usr/local/zookeeper$ source /etc/profile + +hadoop@Ubuntu-01:/usr/local/zookeeper/ $ cd zookeeper-3.4.9/conf +hadoop@Ubuntu-01:/usr/local/zookeeper/zookeeper-3.4.9/conf$ cp zoo_sample.cfg zoo.cfg +hadoop@Ubuntu-01:/usr/local/zookeeper/zookeeper-3.4.9/conf$ vim zoo.cfg +``` + +将dataDir改为dataDir=/usr/local/zookeeper/zookeeper-3.4.9/data(该目录需要新建),在文件末位添加所有的主机,注意server后面的数字需要与myid文件中的数字保持一致。 + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image070.png) + +```shell +hadoop@Ubuntu-01:/usr/local/zookeeper/zookeeper-3.4.9$ mkdir data +hadoop@Ubuntu-01:/usr/local/zookeeper/zookeeper-3.4.9$ cd data/ +hadoop@Ubuntu-01:/usr/local/zookeeper/zookeeper-3.4.9/data$ vim myid +``` + +myid中写入1 + +对Ubuntu-02与Ubuntu-03机器进行类似操作,在各主机myid文件中写入各自的编号。 + +```shell +hadoop@Ubuntu-01:/usr/local/zookeeper$ scp -r zookeeper-3.4.9/ hadoop@Ubuntu-02:/usr/local/zookeeper/ +hadoop@Ubuntu-01:/usr/local/zookeeper$ scp -r zookeeper-3.4.9/ hadoop@Ubuntu-03:/usr/local/zookeeper/ +``` + +### 验证 +在每台zookeeper机器上执行: + +```shell +hadoop@Ubuntu-01:~$ zkServer.sh start +ZooKeeper JMX enabled by default +Using config: /usr/local/zookeeper/zookeeper-3.4.9/bin/../conf/zoo.cfg +Starting zookeeper ... STARTED + +hadoop@Ubuntu-02:~$ zkServer.sh start +ZooKeeper JMX enabled by default +Using config: /usr/local/zookeeper/zookeeper-3.4.9/bin/../conf/zoo.cfg +Starting zookeeper ... STARTED + +hadoop@Ubuntu-03:~$ zkServer.sh start +ZooKeeper JMX enabled by default +Using config: /usr/local/zookeeper/zookeeper-3.4.9/bin/../conf/zoo.cfg +Starting zookeeper ... STARTED + +hadoop@Ubuntu-01:~$ zkServer.sh status +ZooKeeper JMX enabled by default +Using config: /usr/local/zookeeper/zookeeper-3.4.9/bin/../conf/zoo.cfg +Mode: follower + +hadoop@Ubuntu-02:~$ zkServer.sh status +ZooKeeper JMX enabled by default +Using config: /usr/local/zookeeper/zookeeper-3.4.9/bin/../conf/zoo.cfg +Mode: leader + +hadoop@Ubuntu-03:~$ zkServer.sh status +ZooKeeper JMX enabled by default +Using config: /usr/local/zookeeper/zookeeper-3.4.9/bin/../conf/zoo.cfg +Mode: follower + + +hadoop@Ubuntu-01:~$ zkCli.sh -server Ubuntu-01:2181 +Connecting to Ubuntu-01:2181 +2017-02-18 22:32:23,226 [myid:] - INFO [main:Environment@100] - Client environment:zookeeper.version=3.4.9-1757313, built on 08/23/2016 06:50 GMT +2017-02-18 22:32:23,231 [myid:] - INFO [main:Environment@100] - Client environment:host.name=Ubuntu-01 +2017-02-18 22:32:23,231 [myid:] - INFO [main:Environment@100] - Client environment:java.version=1.8.0_121 +2017-02-18 22:32:23,233 [myid:] - INFO [main:Environment@100] - Client environment:java.vendor=Oracle Corporation +2017-02-18 22:32:23,233 [myid:] - INFO [main:Environment@100] - Client environment:java.home=/usr/local/java/jdk1.8.0_121/jre +2017-02-18 22:32:23,233 [myid:] - INFO [main:Environment@100] - Client environment:java.class.path=/usr/local/zookeeper/zookeeper-3.4.9/bin/../build/classes:/usr/local/zookeeper/zookeeper-3.4.9/bin/../build/lib/*.jar:/usr/local/zookeeper/zookeeper-3.4.9/bin/../lib/slf4j-log4j12-1.6.1.jar:/usr/local/zookeeper/zookeeper-3.4.9/bin/../lib/slf4j-api-1.6.1.jar:/usr/local/zookeeper/zookeeper-3.4.9/bin/../lib/netty-3.10.5.Final.jar:/usr/local/zookeeper/zookeeper-3.4.9/bin/../lib/log4j-1.2.16.jar:/usr/local/zookeeper/zookeeper-3.4.9/bin/../lib/jline-0.9.94.jar:/usr/local/zookeeper/zookeeper-3.4.9/bin/../zookeeper-3.4.9.jar:/usr/local/zookeeper/zookeeper-3.4.9/bin/../src/java/lib/*.jar:/usr/local/zookeeper/zookeeper-3.4.9/bin/../conf:.:/usr/local/java/jdk1.8.0_121/lib:.:/usr/local/java/jdk1.8.0_121/lib:.:/usr/local/java/jdk1.8.0_121/lib: +2017-02-18 22:32:23,234 [myid:] - INFO [main:Environment@100] - Client environment:java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib +2017-02-18 22:32:23,234 [myid:] - INFO [main:Environment@100] - Client environment:java.io.tmpdir=/tmp +2017-02-18 22:32:23,234 [myid:] - INFO [main:Environment@100] - Client environment:java.compiler= +2017-02-18 22:32:23,235 [myid:] - INFO [main:Environment@100] - Client environment:os.name=Linux +2017-02-18 22:32:23,235 [myid:] - INFO [main:Environment@100] - Client environment:os.arch=amd64 +2017-02-18 22:32:23,235 [myid:] - INFO [main:Environment@100] - Client environment:os.version=4.4.0-62-generic +2017-02-18 22:32:23,235 [myid:] - INFO [main:Environment@100] - Client environment:user.name=hadoop +2017-02-18 22:32:23,236 [myid:] - INFO [main:Environment@100] - Client environment:user.home=/home/hadoop +2017-02-18 22:32:23,236 [myid:] - INFO [main:Environment@100] - Client environment:user.dir=/home/hadoop +2017-02-18 22:32:23,237 [myid:] - INFO [main:ZooKeeper@438] - Initiating client connection, connectString=Ubuntu-01:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@531d72ca +Welcome to ZooKeeper! +2017-02-18 22:32:23,268 [myid:] - INFO [main-SendThread(Ubuntu-01:2181):ClientCnxn$SendThread@1032] - Opening socket connection to server Ubuntu-01/192.168.1.160:2181. Will not attempt to authenticate using SASL (unknown error) +JLine support is enabled +2017-02-18 22:32:23,398 [myid:] - INFO [main-SendThread(Ubuntu-01:2181):ClientCnxn$SendThread@876] - Socket connection established to Ubuntu-01/192.168.1.160:2181, initiating session +2017-02-18 22:32:23,429 [myid:] - INFO [main-SendThread(Ubuntu-01:2181):ClientCnxn$SendThread@1299] - Session establishment complete on server Ubuntu-01/192.168.1.160:2181, sessionid = 0x15a51a0e47d0000, negotiated timeout = 30000 + +WATCHER:: + +WatchedEvent state:SyncConnected type:None path:null +[zk: Ubuntu-01:2181(CONNECTED) 0] quit +Quitting... +2017-02-18 22:32:34,993 [myid:] - INFO [main-EventThread:ClientCnxn$EventThread@519] - EventThread shut down for session: 0x15a51a0e47d0000 +2017-02-18 22:32:34,994 [myid:] - INFO [main:ZooKeeper@684] - Session: 0x15a51a0e47d0000 closed + + +hadoop@Ubuntu-01:~$ echo ruok| nc Ubuntu-01 2181 +imokhadoop@Ubuntu-01:~$ +``` + +## 安装HBase +下载地址:http://hbase.apache.org/ +安装版本:hbase-1.2.4-bin.tar.gz + +```shell +hadoop@Ubuntu-01:~$ cd /usr/local +hadoop@Ubuntu-01:/usr/local$ sudo mkdir hbase +hadoop@Ubuntu-01:/usr/local$ sudo chown hadoop:hadoop hbase/ +hadoop@Ubuntu-01:/usr/local$ cd hbase/ +hadoop@Ubuntu-01:/usr/local/hbase$ tar -zxvf hbase-1.2.4-bin.tar.gz +hadoop@Ubuntu-01:/usr/local/spark$ sudo vim /etc/profile + +export HBASE_HOME=/usr/local/hbase/hbase-1.2.4 +export PATH=$PATH:$HBASE_HOME/bin +export HBASE_CLASSPATH=$HBASE_HOME/lib + +hadoop@Ubuntu-01:/usr/local/spark$ source /etc/profile +hadoop@Ubuntu-01:/usr/local/hbase$ cd hbase-1.2.4/conf +hadoop@Ubuntu-01:/usr/local/hbase/hbase-1.2.4/conf$ vim hbase-env.sh +``` + +取消JAVA_HOME和HBASE_MANAGES_ZK项的注释,并设置正确值。 + +```shell +export JAVA_HOME=/usr/local/java/jdk1.8.0_121 +export HBASE_MANAGES_ZK=false +``` + +```shell +hadoop@Ubuntu-01:/usr/local/hbase/hbase-1.2.4/conf$ vim hbase-site.xml +``` + +```xml + + + hbase.rootdir + hdfs://Ubuntu-01:9000/hbase + + + hbase.cluster.distributed + true + + + hbase.zookeeper.quorum + Ubuntu-01,Ubuntu-02,Ubuntu-03 + + +``` + +复制到另外两个节点 + +```shell +hadoop@Ubuntu-01:/usr/local/hbase$ scp -r hbase-1.2.4 hadoop@Ubuntu-02:/usr/local/hbase/ +hadoop@Ubuntu-01:/usr/local/hbase$ scp -r hbase-1.2.4 hadoop@Ubuntu-03:/usr/local/hbase/ +``` +### 验证 + +#### 启动 +除了zkServer.sh start要在所有节点执行外,其余启动命令只需要在主节点执行 + +```shell +hadoop@Ubuntu-01:~$ start-dfs.sh +Starting namenodes on [Ubuntu-01] +Ubuntu-01: starting namenode, logging to /usr/local/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-namenode-Ubuntu-01.out +Ubuntu-02: starting datanode, logging to /usr/local/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-datanode-Ubuntu-02.out +Ubuntu-03: starting datanode, logging to /usr/local/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-datanode-Ubuntu-03.out +Starting secondary namenodes [Ubuntu-01] +Ubuntu-01: starting secondarynamenode, logging to /usr/local/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-secondarynamenode-Ubuntu-01.out +hadoop@Ubuntu-01:~$ jps +10835 Jps +10518 NameNode +4299 SecondaryNameNode +hadoop@Ubuntu-01:~$ zkServer.sh start +ZooKeeper JMX enabled by default +Using config: /usr/local/zookeeper/zookeeper-3.4.9/bin/../conf/zoo.cfg +Starting zookeeper ... STARTED +hadoop@Ubuntu-01:~$ jps +10518 NameNode +10854 QuorumPeerMain +4299 SecondaryNameNode +10879 Jps +hadoop@Ubuntu-01:~$ start-hbase.sh +starting master, logging to /usr/local/hbase/hbase-1.2.4/logs/hbase-hadoop-master-Ubuntu-01.out +Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0 +Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0 +hadoop@Ubuntu-01:~$ jps +10518 NameNode +10854 QuorumPeerMain +11015 HMaster +11191 Jps +4299 SecondaryNameNode +hadoop@Ubuntu-01:~$ hbase shell +SLF4J: Class path contains multiple SLF4J bindings. +SLF4J: Found binding in [jar:file:/usr/local/hbase/hbase-1.2.4/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class] +SLF4J: Found binding in [jar:file:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class] +SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. +SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory] +HBase Shell; enter 'help' for list of supported commands. +Type "exit" to leave the HBase Shell +Version 1.2.4, r67592f3d062743907f8c5ae00dbbe1ae4f69e5af, Tue Oct 25 18:10:20 CDT 2016 + +hbase(main):001:0> +``` + +#### 查看hbase管理界面 +http://ubuntu-01:16010/ + + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image071.png) + + + + +#### 关闭 +除了zkServer.sh stop要在所有节点执行外,其余关闭命令只需要在主节点执行 + +```shell +hadoop@Ubuntu-01:~$ jps +11297 Jps +10518 NameNode +10854 QuorumPeerMain +11015 HMaster +4299 SecondaryNameNode +hadoop@Ubuntu-01:~$ stop-hbase.sh +stopping hbase................ +hadoop@Ubuntu-01:~$ jps +10518 NameNode +10854 QuorumPeerMain +4299 SecondaryNameNode +11516 Jps +hadoop@Ubuntu-01:~$ zkServer.sh stop +ZooKeeper JMX enabled by default +Using config: /usr/local/zookeeper/zookeeper-3.4.9/bin/../conf/zoo.cfg +Stopping zookeeper ... STOPPED +hadoop@Ubuntu-01:~$ jps +11537 Jps +10518 NameNode +4299 SecondaryNameNode +hadoop@Ubuntu-01:~$ stop-dfs.sh +Stopping namenodes on [Ubuntu-01] +Ubuntu-01: stopping namenode +Ubuntu-02: stopping datanode +Ubuntu-03: stopping datanode +Stopping secondary namenodes [Ubuntu-01] +hadoop@Ubuntu-01:~$ jps +11880 Jps +``` + +## 安装Hive +http://hive.apache.org/ + +apache-hive-2.1.1-bin.tar.gz + + +```shell +hadoop@Ubuntu-01:~$ cd /usr/local +hadoop@Ubuntu-01:/usr/local$ sudo mkdir hive +hadoop@Ubuntu-01:/usr/local$ sudo chown hadoop:hadoop hive/ +hadoop@Ubuntu-01:/usr/local$ cd hive/ +hadoop@Ubuntu-01:/usr/local/hive$ tar -zxvf apache-hive-2.1.1-bin.tar.gz + + +hadoop@Ubuntu-01:/usr/local/hive$ sudo vim /etc/profile + + + +export HIVE_HOME=/usr/local/hive/apache-hive-2.1.1-bin +export PATH=$PATH:$HIVE_HOME/bin + +hadoop@Ubuntu-01:/usr/local/hive$ source /etc/profile + + +hadoop@Ubuntu-01:/usr/local/hive$ cd apache-hive-2.1.1-bin/conf/ +hadoop@Ubuntu-01:/usr/local/hive/apache-hive-2.1.1-bin/conf$ cp hive-default.xml.template hive-site.xml +hadoop@Ubuntu-01:/usr/local/hive/apache-hive-2.1.1-bin/conf$ vim hive-site.xml +``` + +```xml + + + javax.jdo.option.ConnectionURL + jdbc:mysql://192.168.1.100:3306/hive?createDatabaseIfNotExist=true + + + javax.jdo.option.ConnectionDriverName + com.mysql.jdbc.Driver + + + javax.jdo.option.ConnectionUserName + hive + username to use against metastore database + + + javax.jdo.option.ConnectionPassword + hive + + + hive.hwi.listen.port + 9999 + This is the port the Hive Web Interface will listen on + + + datanucleus.autoCreateSchema + false + + + datanucleus.fixedDatastore + true + + + hive.metastore.local + true + controls whether to connect to remove metastore server or open a new metastore server in Hive Client JVM + + + hive.metastore.schema.verification + false + + Enforce metastore schema version consistency. + True: Verify that version information stored in metastore matches with one from Hive jars. Also disable automatic + schema migration attempt. Users are required to manully migrate schema after Hive upgrade which ensures + proper metastore schema migration. (Default) + False: Warn if the version information stored in metastore doesn't match with one from in Hive jars. + + + +``` + +下载mysql连接java的驱动 并拷入hive home的lib下(mysql-connector-java-5.1.38.jar) + +```shell +hadoop@Ubuntu-01:~$ schematool -initSchema -dbType mysql +SLF4J: Class path contains multiple SLF4J bindings. +SLF4J: Found binding in [jar:file:/usr/local/hive/apache-hive-2.1.1-bin/lib/log4j-slf4j-impl-2.4.1.jar!/org/slf4j/impl/StaticLoggerBinder.class] +SLF4J: Found binding in [jar:file:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class] +SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. +SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory] +Metastore connection URL: jdbc:mysql://192.168.1.100:3306/hive?createDatabaseIfNotExist=true +Metastore Connection Driver : com.mysql.jdbc.Driver +Metastore connection User: hive +Starting metastore schema initialization to 2.1.0 +Initialization script hive-schema-2.1.0.mysql.sql +Initialization script completed +schemaTool completed +hadoop@Ubuntu-01:~$ start-dfs.sh +Starting namenodes on [Ubuntu-01] +Ubuntu-01: starting namenode, logging to /usr/local/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-namenode-Ubuntu-01.out +Ubuntu-02: starting datanode, logging to /usr/local/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-datanode-Ubuntu-02.out +Ubuntu-03: starting datanode, logging to /usr/local/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-datanode-Ubuntu-03.out +Starting secondary namenodes [Ubuntu-01] +Ubuntu-01: starting secondarynamenode, logging to /usr/local/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-secondarynamenode-Ubuntu-01.out +hadoop@Ubuntu-01:~$ hive +SLF4J: Class path contains multiple SLF4J bindings. +SLF4J: Found binding in [jar:file:/usr/local/hive/apache-hive-2.1.1-bin/lib/log4j-slf4j-impl-2.4.1.jar!/org/slf4j/impl/StaticLoggerBinder.class] +SLF4J: Found binding in [jar:file:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class] +SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. +SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory] + +Logging initialized using configuration in jar:file:/usr/local/hive/apache-hive-2.1.1-bin/lib/hive-common-2.1.1.jar!/hive-log4j2.properties Async: true +Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases. +hive> +``` + +```sql +create database hive; +-- 创建hive用户,并授权 +grant all on hive.* to hive@'%' identified by 'hive'; +flush privileges; +``` + + +## 安装PIG +http://pig.apache.org/ +pig-0.16.0.tar.gz + +```shell +hadoop@Ubuntu-01:~$ cd /usr/local +hadoop@Ubuntu-01:/usr/local$ sudo mkdir pig +hadoop@Ubuntu-01:/usr/local$ sudo chown hadoop:hadoop pig/ +hadoop@Ubuntu-01:/usr/local$ cd pig/ +hadoop@Ubuntu-01:/usr/local/pig$ tar -zxvf pig-0.16.0.tar.gz + +hadoop@Ubuntu-01:/usr/local/pig$ sudo vim /etc/profile + +export PIG_HOME=/usr/local/pig/pig-0.16.0 +export PATH=$PATH:$PIG_HOME/bin +export PIG_CLASSPATH=$HADDOP_HOME/conf + + +hadoop@Ubuntu-01:/usr/local/pig$ source /etc/profile +``` + +### 测试 + +```shell +hadoop@Ubuntu-01:~$ pig -x local +SLF4J: Class path contains multiple SLF4J bindings. +SLF4J: Found binding in [jar:file:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class] +SLF4J: Found binding in [jar:file:/usr/local/hbase/hbase-1.2.4/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class] +SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. +SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory] +17/02/24 22:26:57 INFO pig.ExecTypeProvider: Trying ExecType : LOCAL +17/02/24 22:26:57 INFO pig.ExecTypeProvider: Picked LOCAL as the ExecType +2017-02-24 22:26:57,715 [main] INFO org.apache.pig.Main - Apache Pig version 0.16.0 (r1746530) compiled Jun 01 2016, 23:10:49 +2017-02-24 22:26:57,715 [main] INFO org.apache.pig.Main - Logging error messages to: /home/hadoop/pig_1487946417711.log +2017-02-24 22:26:57,754 [main] INFO org.apache.pig.impl.util.Utils - Default bootup file /home/hadoop/.pigbootup not found +2017-02-24 22:26:58,045 [main] INFO org.apache.hadoop.conf.Configuration.deprecation - mapred.job.tracker is deprecated. Instead, use mapreduce.jobtracker.address +2017-02-24 22:26:58,046 [main] INFO org.apache.hadoop.conf.Configuration.deprecation - fs.default.name is deprecated. Instead, use fs.defaultFS +2017-02-24 22:26:58,048 [main] INFO org.apache.pig.backend.hadoop.executionengine.HExecutionEngine - Connecting to hadoop file system at: file:/// +2017-02-24 22:26:58,344 [main] INFO org.apache.hadoop.conf.Configuration.deprecation - io.bytes.per.checksum is deprecated. Instead, use dfs.bytes-per-checksum +2017-02-24 22:26:58,374 [main] INFO org.apache.pig.PigServer - Pig Script ID for the session: PIG-default-7efc5f81-68bd-4e67-aa0d-30882be88c11 +2017-02-24 22:26:58,375 [main] WARN org.apache.pig.PigServer - ATS is disabled since yarn.timeline-service.enabled set to false +grunt> quit +2017-02-24 22:30:50,757 [main] INFO org.apache.pig.Main - Pig script completed in 3 minutes, 53 seconds and 947 milliseconds (233947 ms) +hadoop@Ubuntu-01:~$ pig +17/02/24 22:32:52 INFO pig.ExecTypeProvider: Trying ExecType : LOCAL +17/02/24 22:32:52 INFO pig.ExecTypeProvider: Trying ExecType : MAPREDUCE +17/02/24 22:32:52 INFO pig.ExecTypeProvider: Picked MAPREDUCE as the ExecType +2017-02-24 22:32:52,844 [main] INFO org.apache.pig.Main - Apache Pig version 0.16.0 (r1746530) compiled Jun 01 2016, 23:10:49 +2017-02-24 22:32:52,845 [main] INFO org.apache.pig.Main - Logging error messages to: /home/hadoop/pig_1487946772836.log +2017-02-24 22:32:52,890 [main] INFO org.apache.pig.impl.util.Utils - Default bootup file /home/hadoop/.pigbootup not found +SLF4J: Class path contains multiple SLF4J bindings. +SLF4J: Found binding in [jar:file:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class] +SLF4J: Found binding in [jar:file:/usr/local/hbase/hbase-1.2.4/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class] +SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. +SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory] +2017-02-24 22:32:53,865 [main] INFO org.apache.hadoop.conf.Configuration.deprecation - mapred.job.tracker is deprecated. Instead, use mapreduce.jobtracker.address +2017-02-24 22:32:53,866 [main] INFO org.apache.hadoop.conf.Configuration.deprecation - fs.default.name is deprecated. Instead, use fs.defaultFS +2017-02-24 22:32:53,866 [main] INFO org.apache.pig.backend.hadoop.executionengine.HExecutionEngine - Connecting to hadoop file system at: hdfs://Ubuntu-01:9000 +2017-02-24 22:32:54,752 [main] INFO org.apache.pig.PigServer - Pig Script ID for the session: PIG-default-aeeb7102-d88a-4154-9876-d76ff0da3a8c +2017-02-24 22:32:54,752 [main] WARN org.apache.pig.PigServer - ATS is disabled since yarn.timeline-service.enabled set to false +grunt> ls / +hdfs://Ubuntu-01:9000/hbase +hdfs://Ubuntu-01:9000/output +hdfs://Ubuntu-01:9000/tmp +``` + +## 安装Mahout + +http://mahout.apache.org/ +apache-mahout-distribution-0.12.2.tar.gz + +```shell +hadoop@Ubuntu-01:~$ cd /usr/local +hadoop@Ubuntu-01:/usr/local$ sudo mkdir mahout +hadoop@Ubuntu-01:/usr/local$ sudo chown hadoop:hadoop mahout/ +hadoop@Ubuntu-01:/usr/local$ cd mahout/ +hadoop@Ubuntu-01:/usr/local/mahout$ tar -zxvf apache-mahout-distribution-0.12.2.tar.gz + + +hadoop@Ubuntu-01:/usr/local/mahout$ sudo vim /etc/profile + +export MAHOUT_HOME=/usr/local/mahout/apache-mahout-distribution-0.12.2 +export PATH=$PATH:$MAHOUT_HOME/bin + +hadoop@Ubuntu-01:/usr/local/mahout$ source /etc/profile + +hadoop@Ubuntu-01:~$ cd +hadoop@Ubuntu-01:~$ start-dfs.sh +hadoop@Ubuntu-01:~$ start-yarn.sh +hadoop@Ubuntu-01:~$ mahout –help +Running on hadoop, using /usr/local/hadoop/hadoop-2.7.3/bin/hadoop and HADOOP_CONF_DIR= +MAHOUT-JOB: /usr/local/mahout/apache-mahout-distribution-0.12.2/mahout-examples-0.12.2-job.jar +Unknown program '--help' chosen. +Valid program names are: + arff.vector: : Generate Vectors from an ARFF file or directory + baumwelch: : Baum-Welch algorithm for unsupervised HMM training + canopy: : Canopy clustering + cat: : Print a file or resource as the logistic regression models would see it + cleansvd: : Cleanup and verification of SVD output + clusterdump: : Dump cluster output to text + clusterpp: : Groups Clustering Output In Clusters + cmdump: : Dump confusion matrix in HTML or text formats + cvb: : LDA via Collapsed Variation Bayes (0th deriv. approx) + cvb0_local: : LDA via Collapsed Variation Bayes, in memory locally. + describe: : Describe the fields and target variable in a data set + evaluateFactorization: : compute RMSE and MAE of a rating matrix factorization against probes + fkmeans: : Fuzzy K-means clustering + hmmpredict: : Generate random sequence of observations by given HMM + itemsimilarity: : Compute the item-item-similarities for item-based collaborative filtering + kmeans: : K-means clustering + lucene.vector: : Generate Vectors from a Lucene index + matrixdump: : Dump matrix in CSV format + matrixmult: : Take the product of two matrices + parallelALS: : ALS-WR factorization of a rating matrix + qualcluster: : Runs clustering experiments and summarizes results in a CSV + recommendfactorized: : Compute recommendations using the factorization of a rating matrix + recommenditembased: : Compute recommendations using item-based collaborative filtering + regexconverter: : Convert text files on a per line basis based on regular expressions + resplit: : Splits a set of SequenceFiles into a number of equal splits + rowid: : Map SequenceFile to {SequenceFile, SequenceFile} + rowsimilarity: : Compute the pairwise similarities of the rows of a matrix + runAdaptiveLogistic: : Score new production data using a probably trained and validated AdaptivelogisticRegression model + runlogistic: : Run a logistic regression model against CSV data + seq2encoded: : Encoded Sparse Vector generation from Text sequence files + seq2sparse: : Sparse Vector generation from Text sequence files + seqdirectory: : Generate sequence files (of Text) from a directory + seqdumper: : Generic Sequence File dumper + seqmailarchives: : Creates SequenceFile from a directory containing gzipped mail archives + seqwiki: : Wikipedia xml dump to sequence file + spectralkmeans: : Spectral k-means clustering + split: : Split Input data into test and train sets + splitDataset: : split a rating dataset into training and probe parts + ssvd: : Stochastic SVD + streamingkmeans: : Streaming k-means clustering + svd: : Lanczos Singular Value Decomposition + testnb: : Test the Vector-based Bayes classifier + trainAdaptiveLogistic: : Train an AdaptivelogisticRegression model + trainlogistic: : Train a logistic regression using stochastic gradient descent + trainnb: : Train the Vector-based Bayes classifier + transpose: : Take the transpose of a matrix + validateAdaptiveLogistic: : Validate an AdaptivelogisticRegression model against hold-out data set + vecdist: : Compute the distances between a set of Vectors (or Cluster or Canopy, they must fit in memory) and a list of Vectors + vectordump: : Dump vectors from a sequence file to text + viterbi: : Viterbi decoding of hidden states from given output states sequence +hadoop@Ubuntu-01:~$ hadoop fs -mkdir /user +hadoop@Ubuntu-01:~$ hadoop fs -mkdir /user/Hadoop +hadoop@Ubuntu-01:~$ hadoop fs -mkdir /user/hadoop/testdata +hadoop@Ubuntu-01:~$ hadoop fs -put big-data-demo/synthetic_control.data.txt /user/hadoop/testdata +hadoop@Ubuntu-01:~$ hadoop jar /usr/local/mahout/apache-mahout-distribution-0.12.2/mahout-examples-0.12.2-job.jar org.apache.mahout.clustering.syntheticcontrol.kmeans.Job +hadoop@Ubuntu-01:~$ hadoop fs -ls -R output +-rw-r--r-- 2 hadoop supergroup 194 2017-03-01 22:21 output/_policy +drwxr-xr-x - hadoop supergroup 0 2017-03-01 22:21 output/clusteredPoints +-rw-r--r-- 2 hadoop supergroup 0 2017-03-01 22:21 output/clusteredPoints/_SUCCESS +-rw-r--r-- 2 hadoop supergroup 363282 2017-03-01 22:21 output/clusteredPoints/part-m-00000 +drwxr-xr-x - hadoop supergroup 0 2017-03-01 22:16 output/clusters-0 +-rw-r--r-- 2 hadoop supergroup 194 2017-03-01 22:16 output/clusters-0/_policy +-rw-r--r-- 2 hadoop supergroup 1891 2017-03-01 22:16 output/clusters-0/part-00000 +-rw-r--r-- 2 hadoop supergroup 1891 2017-03-01 22:16 output/clusters-0/part-00001 +-rw-r--r-- 2 hadoop supergroup 1891 2017-03-01 22:16 output/clusters-0/part-00002 +-rw-r--r-- 2 hadoop supergroup 1891 2017-03-01 22:16 output/clusters-0/part-00003 +-rw-r--r-- 2 hadoop supergroup 1891 2017-03-01 22:16 output/clusters-0/part-00004 +-rw-r--r-- 2 hadoop supergroup 1891 2017-03-01 22:16 output/clusters-0/part-00005 +drwxr-xr-x - hadoop supergroup 0 2017-03-01 22:16 output/clusters-1 +-rw-r--r-- 2 hadoop supergroup 0 2017-03-01 22:16 output/clusters-1/_SUCCESS +-rw-r--r-- 2 hadoop supergroup 194 2017-03-01 22:16 output/clusters-1/_policy +-rw-r--r-- 2 hadoop supergroup 7581 2017-03-01 22:16 output/clusters-1/part-r-00000 +drwxr-xr-x - hadoop supergroup 0 2017-03-01 22:21 output/clusters-10-final +-rw-r--r-- 2 hadoop supergroup 0 2017-03-01 22:21 output/clusters-10-final/_SUCCESS +-rw-r--r-- 2 hadoop supergroup 194 2017-03-01 22:21 output/clusters-10-final/_policy +-rw-r--r-- 2 hadoop supergroup 7581 2017-03-01 22:21 output/clusters-10-final/part-r-00000 +drwxr-xr-x - hadoop supergroup 0 2017-03-01 22:17 output/clusters-2 +-rw-r--r-- 2 hadoop supergroup 0 2017-03-01 22:17 output/clusters-2/_SUCCESS +-rw-r--r-- 2 hadoop supergroup 194 2017-03-01 22:17 output/clusters-2/_policy +-rw-r--r-- 2 hadoop supergroup 7581 2017-03-01 22:17 output/clusters-2/part-r-00000 +drwxr-xr-x - hadoop supergroup 0 2017-03-01 22:17 output/clusters-3 +-rw-r--r-- 2 hadoop supergroup 0 2017-03-01 22:17 output/clusters-3/_SUCCESS +-rw-r--r-- 2 hadoop supergroup 194 2017-03-01 22:17 output/clusters-3/_policy +-rw-r--r-- 2 hadoop supergroup 7581 2017-03-01 22:17 output/clusters-3/part-r-00000 +drwxr-xr-x - hadoop supergroup 0 2017-03-01 22:18 output/clusters-4 +-rw-r--r-- 2 hadoop supergroup 0 2017-03-01 22:18 output/clusters-4/_SUCCESS +-rw-r--r-- 2 hadoop supergroup 194 2017-03-01 22:18 output/clusters-4/_policy +-rw-r--r-- 2 hadoop supergroup 7581 2017-03-01 22:18 output/clusters-4/part-r-00000 +drwxr-xr-x - hadoop supergroup 0 2017-03-01 22:18 output/clusters-5 +-rw-r--r-- 2 hadoop supergroup 0 2017-03-01 22:18 output/clusters-5/_SUCCESS +-rw-r--r-- 2 hadoop supergroup 194 2017-03-01 22:18 output/clusters-5/_policy +-rw-r--r-- 2 hadoop supergroup 7581 2017-03-01 22:18 output/clusters-5/part-r-00000 +drwxr-xr-x - hadoop supergroup 0 2017-03-01 22:19 output/clusters-6 +-rw-r--r-- 2 hadoop supergroup 0 2017-03-01 22:19 output/clusters-6/_SUCCESS +-rw-r--r-- 2 hadoop supergroup 194 2017-03-01 22:19 output/clusters-6/_policy +-rw-r--r-- 2 hadoop supergroup 7581 2017-03-01 22:19 output/clusters-6/part-r-00000 +drwxr-xr-x - hadoop supergroup 0 2017-03-01 22:19 output/clusters-7 +-rw-r--r-- 2 hadoop supergroup 0 2017-03-01 22:19 output/clusters-7/_SUCCESS +-rw-r--r-- 2 hadoop supergroup 194 2017-03-01 22:19 output/clusters-7/_policy +-rw-r--r-- 2 hadoop supergroup 7581 2017-03-01 22:19 output/clusters-7/part-r-00000 +drwxr-xr-x - hadoop supergroup 0 2017-03-01 22:20 output/clusters-8 +-rw-r--r-- 2 hadoop supergroup 0 2017-03-01 22:20 output/clusters-8/_SUCCESS +-rw-r--r-- 2 hadoop supergroup 194 2017-03-01 22:20 output/clusters-8/_policy +-rw-r--r-- 2 hadoop supergroup 7581 2017-03-01 22:20 output/clusters-8/part-r-00000 +drwxr-xr-x - hadoop supergroup 0 2017-03-01 22:20 output/clusters-9 +-rw-r--r-- 2 hadoop supergroup 0 2017-03-01 22:20 output/clusters-9/_SUCCESS +-rw-r--r-- 2 hadoop supergroup 194 2017-03-01 22:20 output/clusters-9/_policy +-rw-r--r-- 2 hadoop supergroup 7581 2017-03-01 22:20 output/clusters-9/part-r-00000 +drwxr-xr-x - hadoop supergroup 0 2017-03-01 22:16 output/data +-rw-r--r-- 2 hadoop supergroup 0 2017-03-01 22:16 output/data/_SUCCESS +-rw-r--r-- 2 hadoop supergroup 335470 2017-03-01 22:16 output/data/part-m-00000 +drwxr-xr-x - hadoop supergroup 0 2017-03-01 22:16 output/random-seeds +-rw-r--r-- 2 hadoop supergroup 7723 2017-03-01 22:16 output/random-seeds/part-randomSeed +``` + +## 使用Ambari安装Hadoop集群 + +ubuntu-16.04.1-04 ubuntu-16.04.1-05 ubuntu-16.04.1-06三台虚拟机已经拆除,如果需要再次尝试Ambari需要重新创建虚拟机。 + +### 基础环境搭建 +配置主机名,安装JDK,配置SSH互登陆等参考前文所述方法,配置SSH互登陆过程中要使用root用户,在配置过程中,如果scp命令不允许使用root用户远程访问,参考下面的方法解决: + +```shell +root@Ubuntu-04:~# vi /etc/ssh/sshd_config + +# Authentication: +LoginGraceTime 120 +PermitRootLogin yes +#PermitRootLogin prohibit-password +StrictModes yes +``` + +重启 ssh 服务 + +```shell +root@Ubuntu-04:~# service ssh restart +``` + +另外由于Ambari最新版本的安装需要Maven,所以在某个节点上使用下面方式安装Maven: + +```shell +root@Ubuntu-04:~# mkdir /usr/local/maven +root@Ubuntu-04:~# cd /usr/local/maven/ +root@Ubuntu-04:/usr/local/maven# ls +apache-maven-3.5.0-bin.tar.gz +root@Ubuntu-04:/usr/local/maven# tar -zxvf apache-maven-3.5.0-bin.tar.gz + + +root@Ubuntu-04:/usr/local/maven# sudo vim /etc/profile + +export M2_HOME=/usr/local/maven/apache-maven-3.5.0 +export PATH=$PATH:$M2_HOME/bin + + +root@Ubuntu-04:/usr/local/maven# source /etc/profile +``` + +### 安装Ambari +主要参考官方文档:https://cwiki.apache.org/confluence/display/AMBARI/Installation+Guide+for+Ambari+2.5.1 + +在其中一个节点(安装maven的节点)下载ambari的源码包,并打包成deb包,拷贝到所有其它节点进行安装。 + +```shell +root@Ubuntu-04:~# mkdir /usr/local/ambary +root@Ubuntu-04:~# cd /usr/local/ambari/ +root@Ubuntu-04:/usr/local/ambari# wget http://www.apache.org/dist/ambari/ambari-2.5.1/apache-ambari-2.5.1-src.tar.gz +root@Ubuntu-04:/usr/local/ambari# tar xfvz apache-ambari-2.5.1-src.tar.gz +root@Ubuntu-04:/usr/local/ambari# cd apache-ambari-2.5.1-src +root@Ubuntu-04:/usr/local/ambari/apache-ambari-2.5.1-src# mvn versions:set -DnewVersion=2.5.1.0.0 +root@Ubuntu-04:/usr/local/ambari/apache-ambari-2.5.1-src# pushd ambari-metrics +/usr/local/ambari/apache-ambari-2.5.1-src/ambari-metrics /usr/local/ambari/apache-ambari-2.5.1-src +root@Ubuntu-04:/usr/local/ambari/apache-ambari-2.5.1-src/ambari-metrics# mvn versions:set -DnewVersion=2.5.1.0.0 +root@Ubuntu-04:/usr/local/ambari/apache-ambari-2.5.1-src/ambari-metrics# popd +/usr/local/ambari/apache-ambari-2.5.1-src +root@Ubuntu-04:/usr/local/ambari/apache-ambari-2.5.1-src# mvn -B clean install package jdeb:jdeb -DnewVersion=2.5.1.0.0 -DskipTests -Dpython.ver="python >= 2.6" +# 如果遇到某些包因为墙的原因无法下载,则直接在网上下载对应的包放到日志指定的目录。 +# 如果报错:ENOGIT git is not installed or not in the PATH,则安装git:apt-get install git。 +# 如果遇到类似于下面的错误,则在对应项目的pom.xml中增加 +``` + +```xml + + org.vafer + jdeb + 1.0.1 + + + + stub-execution + none + + jdeb + + + + + true + false + false + ${project.basedir}/../src/main/package/deb/control + + \ +``` + +```log +[ERROR] Failed to execute goal org.vafer:jdeb:1.0.1:jdeb (default-cli) on project ambari-logsearch: Failed to create debian package /home/kylin/apache-ambari-2.4.2-src/ambari-logsearch/target/ambari-logsearch_2.4.2.0.0_all.deb: “/home/kylin/apache-ambari-2.4.2-src/ambari-logsearch/src/main/package/deb/control” is not a valid ‘control’ directory) -> [Help 1] + +# 如果遇到类似下面的错误,将对应项目的pom.xml中的storm版本改为1.1.0 + + + 1.1.0 + +# 如果遇到如下报错,执行sudo apt-get install python-dev + + [exec] creating build/temp.linux-x86_64-2.7/psutil + [exec] x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -Wdate-time -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security -fPIC -I/usr/include/python2.7 -c psutil/_psutil_linux.c -o build/temp.linux-x86_64-2.7/psutil/_psutil_linux.o + [exec] psutil/_psutil_linux.c:12:20: fatal error: Python.h: 没有那个文件或目录 + [exec] compilation terminated. + [exec] error: command 'x86_64-linux-gnu-gcc' failed with exit status 1 + +# 如果报如下错误,参考https://cwiki.apache.org//confluence/display/MAVEN/OutOfMemoryError + +[ERROR] Java heap space -> [Help 1] +[ERROR] +[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. +[ERROR] Re-run Maven using the -X switch to enable full debug logging. +[ERROR] +[ERROR] For more information about the errors and possible solutions, please read the following articles: +[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/OutOfMemoryError +``` + +## 大数据平台-kerberos安装部署文档 + +### 环境准备 + +#### 操作系统 +本次安装部署要求在操作系统为CentOS release 6.5 (Final)的版本下进行部署,所以在安装部署kerberos之前请先确保操作系统为以上版本,并且集群中各机器已做时钟同步。 +本次安装部署以csdm-hadoop-04作为主kdc服务器,以csdm-hadoop-05作为从kdc服务器,以csdm-hadoop-03作为客户端。一般不建议在服务器上再安装其他应用程序,比如hadoop。但为了节省资源本次安装在这三台机器均已安装hadoop相关软件。 +#### 创建操作用户 +创建操作系统hdfs、yarn、mapred用户,并使其归属于hadoop用户组: +adduser hdfs -g Hadoop +adduser yarn -g Hadoop +adduser mapred -g Hadoop +#### 配置hosts文件 +为各台机器修改/etc/hosts文件,将真实ip与主机名对应配置,服务端与客户端均需配置,形如:(不能存在127.0.0.1的配置,否则hadoop进行kerberos验证时将会出错) +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image072.png) + +#### 关闭防火墙 +执行以下命令关闭防火墙: +service iptables stop +出现以下界面表示关闭成功 +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image073.png) + +#### 注册服务与端口的对应 +在/etc/service文件最后增加以下信息,以便后续使用: + krb5_prop 754/tcp # Kerberos slave propagation + +### 安装配置Kerberos +#### 安装rpm包 + 以root用户登录并创建目录存放安装包: +mkdir /var/kerberos + 上传安装包文件到创建的目录,包括krb5-libs-1.10.3-10.el6_4.6.x86_64.rpm、krb5-server-1.10.3-10.el6_4.6.x86_64.rpm(客户端可不安装)、krb5-workstation-1.10.3-10.el6_4.6.x86_64.rpm + 执行安装命令: +rpm -ivh krb5-libs-1.10.3-10.el6_4.6.x86_64.rpm +rpm -ivh krb5-server-1.10.3-10.el6_4.6.x86_64.rpm【客户端可不安装】 +rpm -ivh krb5-workstation-1.10.3-10.el6_4.6.x86_64.rpm + 查看上述包是否已安装成功: +rpm –qa krb5* + 若出现以下情况则代表安装成功。 +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image074.jpg) + +#### 配置主KDC服务器 +##### 设置全局环境变量 +需要以root身份登录系统在/etc/profile末尾增加配置文件的全局环境变量: +export KRB5_CONFIG=/etc/krb5.conf +export KRB5_KDC_PROFILE=/var/kerberos/krb5kdc/kdc.conf + +保存后并 执行source /etc/profile 使之生效。 + +##### 配置krb5.conf +执行vi编辑/etc/krb5.conf,内容如下: + +[libdefaults] + default_realm = ERICSSON.COM + dns_lookup_realm = false + dns_lookup_kdc = false + ticket_lifetime = 24h + renew_lifetime = 7d + forwardable = true + +[realms] + ERICSSON.COM = { + kdc = csdm-hadoop-04 +kdc = csdm-hadoop-05 + admin_server =csdm-hadoop-04 + } + +[domain_realm] + .ericsson.com = ERICSSON.COM + ericsson.com = ERICSSON.COM + + +##### 配置kdc.conf +执行vi编辑/var/kerberos/krb5kdc/kdc.conf,内容如下: + [kdcdefaults] +Kdc_ports=750,88 + +[realms] + ERICSSON.COM ={ + kadmind_port = 749 + max_life=10h 0m 0s + max_renewable_life=7d 0h 0m 0s + database_name= /var/kerberos/krb5kdc/principal + admin_keytab=/var/kerberos /krb5kdc/kadm5.keytab + acl_file=/var/kerberos /krb5kdc/kadm5.acl + key_stash_file=/var/kerberos /krb5kdc/.k5.ERICSSON.COM + } +[logging] + default = FILE:/var/log/krb5libs.log + kdc = FILE:/var/log/krb5kdc.log + admin_server = FILE:/var/log/kadmind.log + +集群机器如果开启selinux,请在机器上执行restorecon -R -v /etc/krb5.conf +##### 生成数据库 +在主KDC服务器上执行以下命令创建数据库,在执行的过程中会提示输入密码和确认密码,两次输入相同的密码即可: +kdb5_util create -r ericsson.com –s + +等待片刻后在提示输入密码界面输入密码后会出现以下界面: +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image075.png) + +##### 创建管理用户 +运行管理入口命令: +kadmin.local +在提示符下执行以下命令 +addprinc kadmin/admin@ERICSSON.COM +addprinc kadmin/changepw@ERICSSON.COM +会提示输入密码,输入两次一样的密码后会提示成功创建。 + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image076.png) +将主体添加至密钥文件中 + ktadd -k /var/kerberos/krb5kdc/kadm5.keytab kadmin/admin +ktadd -k /var/kerberos/krb5kdc/kadm5.keytab kadmin/changepw + +##### 启动krb5kdc 和kadmind服务 +执行以下命令启动krb5kdc和kadmind服务: +krb5kdc start +kadmind +出现以下界面表示启动成功 +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image077.png) + +#### 配置从KDC服务器 +##### 为从kdc服务器创建创建授权票证 +每一个kdc服务器都需要一个host票证,用于在迁移数据库数据市在各kdc服务器之间进行交互验证。注意,创建host票据需要在主kdc服务器上执行而不是在从kdc服务器。在csdm-hadoop-04上执行以下命令创建票证: + +kadmin +addprinc –randkey host/csdm-hadoop-04@ERICSSON.COM +addprinc –randkey host/csdm-hadoop-05@ERICSSON.COM +ktadd host/csdm-hadoop-05@ERICSSON.COM + +##### 设置从kdc服务器的配置文件 +将主kdc服务器中的配置文件(kdc.conf、 krb5.conf、 .k5.ERICSSON.COM、 kadm5.acl)复制到从kdc服务器上相应的目录中;在从kdc服务器的/var/Kerberos/krb5kdc的目录下创建kpropd.acl文件并增加以下信息: + +host/csdm-hadoop-04@ERICSSON.COM +host/csdm-hadoop-05@ERICSSON.COM + +#### 复制数据库数据到KDC从服务器 + 在主服务器上创建数据库的dump文件 +kdb5_util dump /var/kerberos/krb5kdc/slave_datatrans + 在从服务器上执行数据迁移 +kprop -f /var/Kerberos/krb5kdc/slave_datatrans csdm-hadoop-05 + +定时将主KDC服务器上的数据库数据,更新到从KDC服务器上 +由于KDC不提供数据库数据的同步服务功能,因此需要使用脚本或者手工将主KDC服务器上的数据同步到从KDC服务器上,可以参考以下脚本,并配置到定时器中 +#!/bin/sh + kdclist = "kerberos2.example.com kerberos3.example.com" + kdb5_util dump /var/kerberos/krb5kdc/slave_datatrans + for kdc in $kdclist do + kprop -f /var/kerberos/krb5kdc/slave_datatrans $kdc + +#### 启动从服务器的krb5kdc程序 +在从服务器上启动命令执行启动: + krb5kdc +#### 配置自启动 +在/etc/inittab中增加以下信息可使进程随系统自启动: +/etc/init.d/krb5kdc start +Kadmind + +#### 客户端配置 +下面以csdm-hadoop-03这台机器作为客户端说明相关配置 +1、在csdm-hadoop-03上安装客户端软件 +rpm -ivh krb5-libs-1.10.3-10.el6_4.6.x86_64.rpm +rpm -ivh krb5-workstation-1.10.3-10.el6_4.6.x86_64.rpm +2、在主KDC服务器csdm-hadoop-04上,把/etc/krb5.conf复制到csdm-hadoop-03本地对应目录 +3、在客户端csdm-hadoop-03上启动命令执行启动: + krb5kdc +此时即可在客户端csdm-hadoop-03上连接KDC服务器 + +4、生成可访问csdm-hadoop-03机器应用程序的验证 +在主KDC服务器csdm-hadoop-04,生成csdm-hadoop-03的principals和keytab, +为客户端csdm-hadoop-03添加principals(可以为host或者所要进行验证的机器用户) +addprinc –randkey host/csdm-hadoop-03@ERICSSON.COM + 为客户端csdm-hadoop-03生成keytab +Ktadd –k /var/kerberos/krb5kdc/keytab/host.keytab host/csdm-hadoop-03@ERICSSON.COM +把csdm-hadoop-04上生成的keytab复制到csdm-hadoop-03机器上 + + +### 测试服务器 +#### 服务器端测试客户端连接 + 运行kinit admin/admin,显示提示输入密码则代表配置成功: +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image078.png) +#### 远程客户机连接测试 + 在客户机运行kinit admin/admin 连接服务端,显示提示输入密码则代表配置成功: +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image079.png) + +### Hadoop集成kerberos配置 +#### 4.1 kerberos配置 +Hadoop官方网站建议的操作系统用户及权限如下,下面我们按照这三个用户的权限进行配置,要求使用下面三种用户分别具有各自启动相应进程的权限。 +User:Group Daemons +hdfs:hadoop NameNode, Secondary NameNode, JournalNode, DataNode +yarn:hadoop ResourceManager, NodeManager +mapred:hadoop MapReduce,JobHistory Server + +##### 4.1.1 为所有机器的用户生成principal +从主KDC服务器csdm-hadoop-04上,把/etc/krb5.conf复制到csdm-hadoop-03本地对应目录, +在主KDC服务器上为hadoop集群中每台机器的用户创建principal,下面以csdm-hadoop-03这台机器为例,运行管理入口命令: +kadmin.local +在提示符下执行以下命令: +addprinc -randkey hdfs/csdm-hadoop-03@ERICSSON.COM +addprinc -randkey host/csdm-hadoop-03@ERICSSON.COM + +addprinc -randkey yarn/csdm-hadoop-03@ERICSSON.COM +addprinc -randkey host/csdm-hadoop-03@ERICSSON.COM + +addprinc -randkey mapred/csdm-hadoop-03@ERICSSON.COM +addprinc -randkey host/csdm-hadoop-03@ERICSSON.COM + +注: + 集群中的每台机器所用到的用户都需执行上面的命令生成principal + 每个用户必须执行addprinc -randkey host/XX@XX的命令,这个命令生成的是基于 Kerberos 的应用程序(例如 klist 和 kprop)和服务(例如 ftp 和 telnet)使用的主体。此主体称为 host 主体或服务主体。 + +##### 4.1.2 生成keytab文件 +完成5.1.1后在主KDC服务器上为所有principal生成keytab文件,运行管理入口命令: +kadmin.local +在提示符下执行以下命令: +xst -norandkey -k /var/kerberos/krb5kdc/keytab/hdfs.keytab +hdfs/csdm-hadoop-03@ERICSSON.COM host/csdm-hadoop-03@ERICSSON.COM +xst -norandkey -k /var/kerberos/krb5kdc/keytab/mapred.keytab +mapred/csdm-hadoop-03@ ERICSSON.COM host/csdm-hadoop-03@ERICSSON.COM +xst -norandkey -k /var/kerberos/krb5kdc/keytab/yarn.keytab +yarn/csdm-hadoop-03@ERICSSON.COM host/csdm-hadoop-03@ERICSSON.COM + +生成授权文件后,使用以下命令检查生成的keytab是否可用: +kinit -k -t +/var/kerberos/krb5kdc/keytab/hdfs.keytab hdfs/csdm-hadoop-03@ERICSSON.COM +kinit -k -t +/var/kerberos/krb5kdc/keytab/mapred.keytab mapred/csdm-hadoop-03@ERICSSON.COM +kinit -k -t +/var/kerberos/krb5kdc/keytab/yarn.keytab yarn/csdm-hadoop-03@ERICSSON.COM + +检查没问题后,把生成的keytab文件分发到整个集群中的所有机器。 + +#### 修改HADOOP配置文件 +##### 4.2.1 Jsvc安装配置 +Datanode的安全机制需要以root用户身份用jsvc来启动,因此首先需要检查是否安装是jsvc如果没有,按以下步骤进行安装: +1、 下载commons-daemon-1.0.15-src.tar.gz 包并上传至自定义的目录(本操作目录为/home/hadoop) +2、 解压缩后 +以root用户登录进入目录/home/Hadoop 执行: +tar –xvf commons-daemon-1.0.15-bin.tar.gz +解压完成后进入 +/home/Hadoop /commons-daemon-1.0.15-src/src/native/unix +执行命令:configure +执行命令:make +编译完成后,会在/home/hadoop/commons-daemon-1.0.15-src/src/native/unix目录下生成jsvc可执行文件,如下图 + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image080.png) + +在该目录下执行file jsvc如果出现下图所示,则jsvc安装成功 +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image081.png) + + 这里,我们把该执行文件复制到$HADOOP_HOME/bin以便后续的配置 +执行命令:cp /home/hadoop/commons-daemon-1.0.15-src/src/native/unix/jsvc +/home/hadoop/hadoop/bin +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image082.png) + +##### 4.2.2 hadoop-env.sh配置 +找到以下两项配置,并修改 +export HADOOP_SECURE_DN_USER=hdfs(配置为要执行datanode的用户,这里为hdfs) +export JSVC_HOME=/home/hadoop/hadoop/bin(配置为jsvc所在的目录) +##### 4.2.3 core-site.xml +在集群中所有节点的core-site.xml文件中添加下面的配置 + +```xml + + + hadoop.security.authorization + true + + + hadoop.security.authentication + kerberos + + + hadoop.rpc.protection + authentication + + + hadoop.security.auth_to_local + DEFAULT + +``` + +##### 4.2.4 hdfs-site.xml +在集群中所有节点的hdfs-site.xml文件中添加下面的配置,下面配置以节点csdm-hadoop-04为例: + + + dfs.block.access.token.enable + true + + + + dfs.encrypt.data.transfer + true + + + dfs.https.address + csdm-hadoop-04:50470 + + + dfs.https.port + 50470 + + + dfs.namenode.keytab.file + /var/kerberos/krb5kdc/keytab/hdfs.keytab + + + + dfs.namenode.kerberos.principal + hdfs/_HOST@ERICSSON.COM + + + dfs.namenode.kerberos.https.principal + host/_HOST@ERICSSON.COM + + + + + dfs.secondary.https.address + csdm-hadoop-04:50495 + + + dfs.secondary.https.port + 50495 + + + dfs.secondary.namenode.keytab.file + /var/kerberos/krb5kdc/keytab/hdfs.keytab + + + dfs.secondary.namenode.kerberos.principal + hdfs/_HOST@ERICSSON.COM + + + dfs.secondary.namenode.kerberos.https.principal + host/_HOST@ERICSSON.COM + + + + + dfs.datanode.data.dir.perm + 700 + + + dfs.datanode.address + 0.0.0.0:1004 + + + dfs.datanode.http.address + 0.0.0.0:1006 + + + dfs.datanode.keytab.file + /var/kerberos/krb5kdc/keytab/hdfs.keytab + + + dfs.datanode.kerberos.principal + hdfs/_HOST@ERICSSON.COM + + + dfs.datanode.kerberos.https.principal + host/_HOST@ERICSSON.COM + + + + + dfs.web.authentication.kerberos.principal + hdfs/_HOST@ERICSSON.COM + + + dfs.web.authentication.kerberos.keytab + /var/kerberos/krb5kdc/keytab/hdfs.keytab + + The Kerberos keytab file with the credentials for the + HTTP Kerberos principal used by Hadoop-Auth in the HTTP endpoint. + + + +配置中有几点要注意的 + . dfs.datanode.address表示data transceiver RPC server所绑定的hostname或IP地址,如果开启security,端口号必须小于1024(privileged port),否则的话启动datanode时候会报“Cannot start secure cluster without privileged resources”错误 + . principal中的instance部分可以使用'_HOST'标记,系统会自动替换它为全称域名 + . 如果开启了security, hadoop会对hdfs block data做permission check,方式用户的代码不是调用hdfs api而是直接本地读block data,这样就绕过了kerberos和文件权限验证,管理员可以通过设置dfs.datanode.data.dir.perm来修改datanode文件权限,这里我们设置为700 + + +配置完成后,修改hdfs.keytab所有者为hdfs +chown -R hdfs:hadoop /var/kerberos/krb5kdc/keytab/hdfs.keytab +chmod 700 /var/kerberos/krb5kdc/keytab/hdfs.keytab + +同时保证以下表格中各个目录的对于hdfs用户的权限 + +Filesystem Path User:Group Permissions +local dfs.namenode.name.dir hdfs:hadoop drwx------ +local dfs.datanode.data.dir hdfs:hadoop drwx------ +local $HADOOP_LOG_DIR hdfs:hadoop drwxrwxr-x +Hdfs / hdfs:hadoop drwxr-xr-x +Hdfs /tmp hdfs:hadoop drwxrwxrwxt +Hdfs /user hdfs:hadoop drwxr-xr-x + +###### 1、测试namenode进程启动是否正常 +切换到hdfs用户,首先执行klist命令,查看当前是否获取了ticket,经测试,如果已经获取了ticket那么启动namenode进程的时候会报以下错误 +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image083.png) +使用kdestroy销毁获取的ticket +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image084.png) + +切换到hdfs用户,启动namenode进程(已经执行过HDFS格式化的操作) +执行命令:hadoop namenode +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image085.png) +如果配置正常,应该会看到以下的日志信息输出 +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image086.png) + +验证namenode是否启动正常 + 可打开网页 +http://XX:50070/dfshealth.html#tab-overview验证 + hadoop fs -ls / +注:如果在你的凭据缓存中没有有效的kerberos ticket,执行hadoop fs –ls /将会失败。 +可以使用klist来查看是否有有有效的ticket。 +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image087.png) +如果为空,使用kinit来获取ticket.命令如下 +kinit -k -t /var/kerberos/krb5kdc/keytab/hdfs.keytab hdfs/csdm-hadoop-03@ERICSSON.COM + +###### 2、测试datanode启动是否正常 +切换到root用户, +执行命令:hadoop-daemon.sh start datanode +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image088.png) +如果启动正常,能在日志文件看到以下日志内容 +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image089.png) +在日志目录,启动datanode进程会有以下几个日志文件,其中jsvc.err记录了jsvc的错误信息 +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image090.png) + +启动datanode进程,只能使用root用户,如果使用其他用户启动,只会报以下错误 +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image091.png) +##### 4.2.5 mapred-site.xml +在mapred-site.xml中添加 + + + mapreduce.jobtracker.kerberos.principal + mapred/_HOST@ERICSSON.COM + + + mapreduce.jobtracker.kerberos.https.principal + host/_HOST@ERICSSON.COM + + + mapreduce.jobtracker.keytab.file + /var/kerberos/krb5kdc/keytab/mapred.keytab + + + + + mapreduce.tasktracker.kerberos.principal + mapred/_HOST@ERICSSON.COM + + + mapreduce.tasktracker.kerberos.https.principal + host/_HOST@ERICSSON.COM + + + mapreduce.tasktracker.keytab.file + /var/kerberos/krb5kdc/keytab/mapred.keytab + + + + + + + 10020 + + + + mapreduce.jobhistory.keytab + /var/kerberos/krb5kdc/keytab/mapred.keytab + + + mapreduce.jobhistory.principal + mapred/_HOST@ERICSSON.COM + + +将mapred.keytab文件赋权给mapred用户 ,执行以下命令: +chown -R mapred:hadoop /var/kerberos/krb5kdc/keytab/mapred.keytab +chmod 700 /var/kerberos/krb5kdc/keytab/mapred.keytab +确保以下表格中各个路径的执行权限 +Filesystem Path User:Group Permissions +hdfs mapreduce.jobhistory.intermediate-done-dir mapred:hadoop drwxrwxrwxt +hdfs mapreduce.jobhistory.done-dir mapred:hadoop drwxr-x--- + +测试historyserver 进程 +执行命令:mr-jobhistory-daemon.sh start historyserver +配置正常,则会看到以下日志内容 +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image092.png) + +##### 4.2.6 yarn-site.xml +在yarn-site.xml追加以下内容: + + + yarn.resourcemanager.keytab + /var/kerberos/krb5kdc/keytab/yarn.keytab + + + yarn.resourcemanager.principal + yarn/_HOST@ERICSSON.COM + + + + yarn.nodemanager.keytab + /var/kerberos/krb5kdc/keytab/yarn.keytab + + + yarn.nodemanager.principal + yarn/_HOST@ERICSSON.COM + + + yarn.nodemanager.container-executor.class + org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor + + + yarn.nodemanager.linux-container-executor.group + hadoop + + + + yarn.nodemanager.linux-container-executor.path + /home/hadoop/hadoop/bin/container-executor + + + +YARN提供了两种Container启动实现,DefaultContainerExecutor以及LinuxContainerExecutor,在上面的yarn-site.xml里配置了yarn.nodemanager.container-executor.class的启动方式为LinuxContainerExecutor,那么就需要编译安装LinuxContainerExecutor,按如下操作执行:在hadoop的home目录(这里是/home/Hadoop/hadoop)的 /etc/hadoop/目录下创建 container-executor.cfg 文件,内容如下: + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image093.png) + + 设置该文件权限: +$ chown root:hadoop container-executor.cfg +$ chmod 400 container-executor.cfg +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image094.png) +注意: +• container-executor.cfg 文件读写权限需设置为 400,所有者为 root:hadoop。 +并且该文件所在的父目录所有者必须为root用户,并对该文件所在的各个父目录赋以下权限,例如:chmod 750 /home/hadoop/ +• yarn.nodemanager.linux-container-executor.group 要同时配置在 yarn-site.xml 和 container-executor.cfg,且其值需要为运行 NodeManager 的用户所在的组,这里为 hadoop。 +• banned.users 不能为空,默认值为 hfds,yarn,mapred,bin +• min.user.id 默认值为 1000,在centos系统中,需要设置为小于500的值 +• 确保 yarn.nodemanager.local-dirs 和 yarn.nodemanager.log-dirs 对应的目录权限为 755 。 +设置 $HADOOP_HOME/bin/container-executor 读写权限为 6050 如下: +$ chown root:hadoop $HADOOP_HOME/bin/container-executor +$ chmod 6050 $HADOOP_HOME/bin/container-executor + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image095.png) +测试是否配置正确: +$ /home/hadoop/hadoop/bin/container-executor –checksetup +出现以下信息,则表示配置正确,如果出错,请检查各个目录的权限及container-executor.cfg文件是否配置正确 +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image096.png) + +修改yarn.keytab权限 +chown -R yarn:hadoop /var/kerberos/krb5kdc/keytab/ yarn.keytab +chmod 700 /var/kerberos/krb5kdc/keytab/yarn.keytab + +确保以下表格各目录的权限 +Filesystem Path User:Group Permissions +hdfs yarn.nodemanager.remote-app-log-dir yarn:hadoop drwxrwxrwxt +local $YARN_LOG_DIR yarn:hadoop drwxrwxr-x +local yarn.nodemanager.local-dirs yarn:hadoop drwxr-xr-x +local yarn.nodemanager.log-dirs yarn:hadoop drwxr-xr-x +local container-executor root:hadoop --Sr-s--- +local conf/container-executor.cfg root:hadoop r-------- + + + 测试 nodemanager 进程 +执行命令:yarn nodemanager +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image097.png) +如果配置正常,会输出以下日志 +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image098.png) + + + 测试resourcemanager进程 +执行命令:yarn resourcemanager +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image099.png) +如果配置正常,会输出以下日志 +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image100.png) + +### 说明 +注:本部署文档部署环境默认机器未配置DNS,如果配置有DNS的机器上创建实体则格式为:用户名/hostname.DNS@领域名。例如:hdfs/csdm-hadoop-04.ericsson.com@ERICSSON.COM + + + +火狐配置使用SPNNEGO +1、 在地址栏输入about:config打开配置界面 +2、 network.negotiate-auth.delegation-uris +network.negotiate-auth.trusted-uris +找到以上两个选项,把你要访问的页面地址加进去 + +LINUX下配置 +1、 在/etc/hosts下加入要访问的地址对应关系(包括客户端和服务器) +2、 在KDC服务器上生成浏览器所在客户端的principal:格式如下:HTTP/hd2@ERICSSON.COM,并把该principal生成到keytab中,在KEYTAB中应该可以看到如下的信息 +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image101.png) + +## Ubuntu 16.04安装DB2 Express C v11.1 + +```shell +jiangxin@db01:~$ su – root #切换到root用户 +密码: +root@db01:~# uname -a #查看内核和操作系统信息 +Linux db01 4.4.0-66-generic #87-Ubuntu SMP Fri Mar 3 15:29:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux +root@db01:~# head -n 1 /etc/issue #查看Linux发行版信息 +Ubuntu 16.04.1 LTS \n \l +root@db01:~# cd /usr/local +root@db01:/usr/local# ls +bin db2 etc games include java lib man sbin scala share src +root@db01:/usr/local# mkdir db2 +root@db01:/usr/local# cd db2/ +#上传安装包 +root@db01:/usr/local/db2# ll +总用量 675924 +drwxrwxrwx 2 root root 4096 3月 17 22:08 ./ +drwxr-xr-x 20 root root 4096 3月 17 22:07 ../ +-rw-rw-r-- 1 root root 692132552 3月 17 22:08 v11.1_linuxx64_expc.tar.gz +root@db01:/usr/local/db2# tar -zxvf v11.1_linuxx64_expc.tar.gz +root@db01:/usr/local/db2# cd expc/ +root@db01:/usr/local/db2/expc# ls +db2 db2ckupgrade db2_deinstall db2_install db2ls db2prereqcheck db2setup +root@db01:/usr/local/db2/expc# ./db2prereqcheck #检查是否满足安装条件 + +========================================================================== + +正在检查操作系统 "Linux" V"11.1.1.1" 的 DB2 安装的先决条件。 + +正在验证 "Linux 分发 " ... +要求的最低 "UBUNTU" 版本:"14.04" +实际版本:"16.04" +达到要求。 + +正在验证 "内核级别 " ... +要求的最低操作系统内核级别:"2.6.16"。 +实际操作系统内核级别:"4.4.0"。 +达到要求。 + +正在验证 "C++ 库版本 " ... +要求的最低 C++ 库版本:"libstdc++.so.6" +标准 C++ 库位于以下目录中:"/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21"。 +实际 C++ 库:"CXXABI_1.3.1" +达到要求。 + + +正在验证 ""libstdc++.so.6" 的 32 位版本 " ... +在以下目录中找到了 64 位 "/usr/lib/x86_64-linux-gnu/libstdc++.so.6":"/usr/lib/x86_64-linux-gnu"。 +在以下目录中找到了 32 位 "/usr/lib32/libstdc++.so.6":"/usr/lib32"。 +达到要求。 + +正在验证 "libaio.so 版本 " ... +DBT3553I db2prereqcheck 实用程序已成功装入 libaio.so.1 文件。 +达到要求。 + +正在验证 "Unable to find the string resource 30186" ... +Unable to find the string resource 33610 +达到要求。 + +正在验证 "/lib/i386-linux-gnu/libpam.so*" ... +达到要求。 +DBT3533I db2prereqcheck 实用程序已确认所有安装先决条件均已满足。 +#限于篇幅,此处省略部分内容 + +DBT3533I db2prereqcheck 实用程序已确认所有安装先决条件均已满足。 +DBT3555E db2prereqcheck 实用程序已确定,以下版本不支持当前平台:"9.8.0.4"。 +DBT3555E db2prereqcheck 实用程序已确定,以下版本不支持当前平台:"9.8.0.3"。 +DBT3555E db2prereqcheck 实用程序已确定,以下版本不支持当前平台:"9.8.0.2"。 + +#如果之前的检查中存在某些不满足项,可以通过下面的命令安装对应库文件 +root@db01:/usr/local/db2/expc# apt-get install lib32stdc++6 +root@db01:/usr/local/db2/expc# apt-get install libaio1 +root@db01:/usr/local/db2/expc# apt-get install libpam0g:i386 + +root@db01:/usr/local/db2/expc# ./db2_install #开始正式安装 +阅读 CD 上 db2/license 目录中的许可协议文件。 + +*********************************************************** +要接受这些条款,请输入 "yes"。否则,输入 "no" 以取消安装过程。[yes/no] +yes + + +产品的缺省安装目录 - /opt/ibm/db2/V11.1 + +*********************************************************** +是否安装至缺省目录 (/opt/ibm/db2/V11.1)?[yes/no] +yes +正在初始化 DB2 安装。 + + 要执行的任务总数为:36 +要执行的所有任务的总估计时间为:1591 秒 + +任务 #1 启动 +描述:正在检查许可协议的接受情况 +估计时间 1 秒 +任务 #1 结束 + +任务 #2 启动 +描述:具备 root 用户特权的情况下进行安装时的基本客户机支持 +估计时间 3 秒 +任务 #2 结束 + +任务 #3 启动 +描述:产品消息 - 英语 +估计时间 14 秒 +任务 #3 结束 + +任务 #4 启动 +描述:基本客户机支持 +估计时间 352 秒 +任务 #4 结束 + +任务 #5 启动 +描述:Java 运行时支持 +估计时间 188 秒 +任务 #5 结束 + +任务 #6 启动 +描述:Java 帮助 (HTML) - 英语 +估计时间 7 秒 +任务 #6 结束 + +任务 #7 启动 +描述:具备 root 用户特权的情况下进行安装时的基本服务器支持 +估计时间 8 秒 +任务 #7 结束 + +任务 #8 启动 +描述:全局安全工具箱 +估计时间 64 秒 +任务 #8 结束 + +任务 #9 启动 +描述:Java 支持 +估计时间 13 秒 +任务 #9 结束 + +任务 #10 启动 +描述:SQL 过程 +估计时间 3 秒 +任务 #10 结束 + +任务 #11 启动 +描述:ICU 实用程序 +估计时间 34 秒 +任务 #11 结束 + +任务 #12 启动 +描述:Java 公共文件 +估计时间 18 秒 +任务 #12 结束 + +任务 #13 启动 +描述:基本服务器支持 +估计时间 577 秒 +任务 #13 结束 + +任务 #14 启动 +描述:DB2 数据源支持 +估计时间 6 秒 +任务 #14 结束 + +任务 #15 启动 +描述:Spatial Extender 服务器支持 +估计时间 18 秒 +任务 #15 结束 + +任务 #16 启动 +描述:DB2 LDAP 支持 +估计时间 4 秒 +任务 #16 结束 + +任务 #17 启动 +描述:“DB2 实例安装”向导 +估计时间 25 秒 +任务 #17 结束 + +任务 #18 启动 +描述:集成动漫复制支持 +估计时间 3 秒 +任务 #18 结束 + +任务 #19 启动 +描述:Spatial Extender 客户机 +估计时间 3 秒 +任务 #19 结束 + +任务 #20 启动 +描述:通信支持 - TCP/IP +估计时间 3 秒 +任务 #20 结束 + +任务 #21 启动 +描述:基本应用程序开发工具 +估计时间 35 秒 +任务 #21 结束 + +任务 #22 启动 +描述:DB2 更新服务 +估计时间 4 秒 +任务 #22 结束 + +任务 #23 启动 +描述:EnterpriseDB 代码 +估计时间 4 秒 +任务 #23 结束 + +任务 #24 启动 +描述:样本数据库源 +估计时间 4 秒 +任务 #24 结束 + +任务 #25 启动 +描述:DB2 Text Search +估计时间 123 秒 +任务 #25 结束 + +任务 #26 启动 +描述:命令行处理器加强版 +估计时间 6 秒 +任务 #26 结束 + +任务 #27 启动 +描述:第一步 +估计时间 3 秒 +任务 #27 结束 + +任务 #28 启动 +描述:DB2 Express-C 的产品特征符 +估计时间 3 秒 +任务 #28 结束 + +任务 #29 启动 +描述:正在设置 DB2 库路径 +估计时间 180 秒 +任务 #29 结束 + +任务 #30 启动 +描述:正在执行控制任务 +估计时间 20 秒 +任务 #30 结束 + +任务 #31 启动 +描述:正在更新全局注册表 +估计时间 20 秒 +任务 #31 结束 + +任务 #32 启动 +描述:正在启动 DB2 故障监视器 +估计时间 10 秒 +任务 #32 结束 + +任务 #33 启动 +描述:正在更新 db2ls 和 db2greg 链接 +估计时间 1 秒 +任务 #33 结束 + +任务 #34 启动 +描述:正在注册 DB2 许可证 +估计时间 5 秒 +任务 #34 结束 + +任务 #35 启动 +描述:正在设置缺省全局概要文件注册表变量 +估计时间 1 秒 +任务 #35 结束 + +任务 #36 启动 +描述:正在初始化实例列表 +估计时间 5 秒 +任务 #36 结束 + +任务 #37 启动 +描述:正在注册 DB2 更新服务 +估计时间 30 秒 +任务 #37 结束 + +任务 #38 启动 +描述:正在更新全局概要文件注册表 +估计时间 3 秒 +任务 #38 结束 + +已成功完成执行。 + +有关更多信息,请参阅 "/tmp/db2_install.log.5804" 上的 DB2 +安装日志。 + +#创建实例前先创建对应的用户和组 +root@db01:/usr/local/db2/expc# groupadd -g 2000 db2iadm1 +root@db01:/usr/local/db2/expc# groupadd -g 2001 db2fadm1 +root@db01:/usr/local/db2/expc# useradd -m -g db2iadm1 -d /home/db2inst1 db2inst1 +root@db01:/usr/local/db2/expc# useradd -m -g db2fadm1 -d /home/db2fenc1 db2fenc1 +root@db01:/usr/local/db2/expc# passwd db2inst1 +输入新的 UNIX 密码: +重新输入新的 UNIX 密码: +passwd:已成功更新密码 +root@db01:/usr/local/db2/expc# passwd db2fenc1 +输入新的 UNIX 密码: +重新输入新的 UNIX 密码: +passwd:已成功更新密码 + +#安装License +root@db01:/usr/local/db2/expc# cd /opt/ibm/db2/V11.1/adm/ +root@db01:/opt/ibm/db2/V11.1/adm# chmod -R 775 * +root@db01:/opt/ibm/db2/V11.1/adm# ./db2licm -a /usr/local/db2/expc/db2/license/db2expc_uw.lic + +LIC1402I License added successfully. + + +LIC1426I This product is now licensed for use as outlined in your License Agreement. USE OF THE PRODUCT CONSTITUTES ACCEPTANCE OF THE TERMS OF THE IBM LICENSE AGREEMENT, LOCATED IN THE FOLLOWING DIRECTORY: "/opt/ibm/db2/V11.1/license/zh_CN.utf8" + +# 创建实例 +root@db01:/opt/ibm/db2/V11.1/adm# cd /opt/ibm/db2/V11.1/instance/ +root@db01:/opt/ibm/db2/V11.1/instance# chmod -R 775 * +root@db01:/opt/ibm/db2/V11.1/instance# ./db2icrt -p 50000 -u db2fenc1 db2inst1 +DBI1446I The db2icrt command is running. + + +DB2 installation is being initialized. + + Total number of tasks to be performed: 4 +Total estimated time for all tasks to be performed: 309 second(s) + +Task #1 start +Description: Setting default global profile registry variables +Estimated time 1 second(s) +Task #1 end + +Task #2 start +Description: Initializing instance list +Estimated time 5 second(s) +Task #2 end + +Task #3 start +Description: Configuring DB2 instances +Estimated time 300 second(s) +Task #3 end + +Task #4 start +Description: Updating global profile registry +Estimated time 3 second(s) +Task #4 end + +The execution completed successfully. + +For more information see the DB2 installation log at "/tmp/db2icrt.log.28370". +DBI1070I Program db2icrt completed successfully. + + +#创建样本数据库 +root@db01:/opt/ibm/db2/V11.1/instance# +db2inst1@db01:~$ db2sampl + + Starting the DB2 instance... + Creating database "SAMPLE"... + Connecting to database "SAMPLE"... + Creating tables and data in schema "DB2INST1"... + Creating tables with XML columns and XML data in schema "DB2INST1"... + Stopping the DB2 instance... + + 'db2sampl' processing complete. + + +db2inst1@db01:~$ db2start +SQL1063N DB2START processing was successful. +db2inst1@db01:~$ db2 connect to sample + + Database Connection Information + + Database server = DB2/LINUXX8664 11.1.1.1 + SQL authorization ID = DB2INST1 + Local database alias = SAMPLE + +db2inst1@db01:~$ db2 "select * from staff" + +ID NAME DEPT JOB YEARS SALARY COMM +------ --------- ------ ----- ------ --------- --------- + 10 Sanders 20 Mgr 7 98357.50 - + 20 Pernal 20 Sales 8 78171.25 612.45 + 30 Marenghi 38 Mgr 5 77506.75 - + 40 O'Brien 38 Sales 6 78006.00 846.55 + 50 Hanes 15 Mgr 10 80659.80 - + 60 Quigley 38 Sales - 66808.30 650.25 + 70 Rothman 15 Sales 7 76502.83 1152.00 + 80 James 20 Clerk - 43504.60 128.20 + 90 Koonitz 42 Sales 6 38001.75 1386.70 + 100 Plotz 42 Mgr 7 78352.80 - + 110 Ngan 15 Clerk 5 42508.20 206.60 + 120 Naughton 38 Clerk - 42954.75 180.00 + 130 Yamaguchi 42 Clerk 6 40505.90 75.60 + 140 Fraye 51 Mgr 6 91150.00 - + 150 Williams 51 Sales 6 79456.50 637.65 + 160 Molinare 10 Mgr 7 82959.20 - + 170 Kermisch 15 Clerk 4 42258.50 110.10 + 180 Abrahams 38 Clerk 3 37009.75 236.50 + 190 Sneider 20 Clerk 8 34252.75 126.50 + 200 Scoutten 42 Clerk - 41508.60 84.20 + 210 Lu 10 Mgr 10 90010.00 - + 220 Smith 51 Sales 7 87654.50 992.80 + 230 Lundquist 51 Clerk 3 83369.80 189.65 + 240 Daniels 10 Mgr 5 79260.25 - + 250 Wheeler 51 Clerk 6 74460.00 513.30 + 260 Jones 10 Mgr 12 81234.00 - + 270 Lea 66 Mgr 9 88555.50 - + 280 Wilson 66 Sales 9 78674.50 811.50 + 290 Quill 84 Mgr 10 89818.00 - + 300 Davis 84 Sales 5 65454.50 806.10 + 310 Graham 66 Sales 13 71000.00 200.30 + 320 Gonzales 66 Sales 4 76858.20 844.00 + 330 Burke 66 Clerk 1 49988.00 55.50 + 340 Edwards 84 Sales 7 67844.00 1285.00 + 350 Gafney 84 Clerk 5 43030.50 188.00 + + 35 record(s) selected. + +#安装DAS。为了远程客户端能够用控制中心来控制数据库服务器,需要在数据库服务器上安装DAS,当然如果只是远程连接而不是远程管理,可以不用装 +db2inst1@db01:~$ exit +注销 +root@db01:/opt/ibm/db2/V11.1/instance# groupadd -g 2002 db2asgrp +root@db01:/opt/ibm/db2/V11.1/instance# useradd -m -g db2asgrp -d /home/db2as db2as +root@db01:/opt/ibm/db2/V11.1/instance# passwd db2as +输入新的 UNIX 密码: +重新输入新的 UNIX 密码: +passwd:已成功更新密码 + +root@db01:/opt/ibm/db2/V11.1/instance# ./dascrt -u db2as +DBI1070I Program dascrt completed successfully. + +root@db01:/opt/ibm/db2/V11.1/instance# su - db2as +db2as@db01:~$ db2admin start +SQL4409W The DB2 Administration Server is already active. +#确认db2inst1实例的服务名 +db2as@db01:~$ su - db2inst1 +密码: +db2inst1@db01:~$ db2 get dbm cfg|grep SVCENAME + TCP/IP Service name (SVCENAME) = 50000 + SSL service name (SSL_SVCENAME) = +#如果SVCENAME显示为空,则执行下面的语句更新 +db2inst1@db01:~$ db2 update dbm cfg using SVCENAME 50000 +DB20000I The UPDATE DATABASE MANAGER CONFIGURATION command completed +successfully. +#看一下License的情况,svcename在客户端连接时需要用到 +db2inst1@db01:~$ db2licm -l +Product name: "DB2 Express-C" +License type: "Unwarranted" +Expiry date: "Permanent" +Product identifier: "db2expc" +Version information: "11.1" +Max number of CPUs: "2" +Max amount of memory (GB): "16" +Enforcement policy: "Soft Stop" +``` + +## Ubunut安装/卸载Mysql(apg-get方式) + +### 安装 + +```shell +jiangxin@db01:~$ uname -a #查看内核和操作系统信息 +Linux db01 4.4.0-66-generic #87-Ubuntu SMP Fri Mar 3 15:29:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux +jiangxin@db01:~$ head -n 1 /etc/issue #查看Linux发行版信息 +Ubuntu 16.04.1 LTS \n \l +jiangxin@db01:~$ sudo netstat -tap | grep mysql #查看是否系统中已经安装mysql +jiangxin@db01:~$ sudo apt-get install mysql-server mysql-client libmysqlclient-dev +``` + +安装过程中会要求输入mysql的root账号密码,如下所示: + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image102.png) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image103.png) + +```shell +jiangxin@db01:~$ mysql -u root -p +Enter password: +Welcome to the MySQL monitor. Commands end with ; or \g. +Your MySQL connection id is 6 +Server version: 5.7.17-0ubuntu0.16.04.1 (Ubuntu) + +Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. + +Oracle is a registered trademark of Oracle Corporation and/or its +affiliates. Other names may be trademarks of their respective +owners. + +Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. + +mysql> show databases; ++--------------------+ +| Database | ++--------------------+ +| information_schema | +| mysql | +| performance_schema | +| sys | ++--------------------+ +4 rows in set (0.00 sec) +``` + +MySQL安装后的目录结构如下(此结构只针对于使用apt-get install 在线安装情况): + +* 数据库存放目录: /var/lib/mysql/ +* 相关配置文件存放目录: /usr/share/mysql +* 相关命令存放目录: /usr/bin(mysqladmin mysqldump等命令) +* 启动脚步存放目录: /etc/rc.d/init.d/ + +### 卸载 + +```shell +jiangxin@db01:~$ ps aux | grep mysql +mysql 1942 3.5 14.8 1115880 150404 ? Ssl 10:45 0:00 /usr/sbin/mysqld +jiangxin 1980 0.0 0.0 15984 948 pts/0 S+ 10:45 0:00 grep --color=auto mysql +jiangxin@db01:~$ mysqladmin -u root -p shutdown +Enter password: +jiangxin@db01:~$ ps aux | grep mysql +jiangxin 1984 0.0 0.0 15984 964 pts/0 S+ 10:46 0:00 grep --color=auto mysql +jiangxin@db01:~$ sudo apt-get autoremove --purge mysql-* +... +jiangxin@db01:~$ dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P +... +jiangxin@db01:~$ su – root +root@db01:~# rm -rf /var/lib/mysql +root@db01:~# rm -rf /etc/mysql +``` + +### MySQL简单管理 + +```shell +#启动MySQL服务 +sudo service mysql start +#停止MySQL服务 +sudo service mysql stop +#修改 MySQL 的管理员密码 +sudo mysqladmin -u root password newpassword + +#正常情况下,mysql占用的3306端口只是在IP 127.0.0.1上监听,拒绝了其他IP的访问。取消本地监听限制需要修改 mysqld.cnf 文件 + +sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf +# 找到此内容并且注释 +bind-address = 127.0.0.1 +``` + +## Ubuntu安装MySQL(安装包方式) + +```shell +root@ubuntu:~# mkdir /usr/local/mysql +root@ubuntu:~# cd /usr/local/mysql/ +root@ubuntu:/usr/local/mysql# groupadd mysql +root@ubuntu:/usr/local/mysql# useradd -r -g mysql -s /bin/false mysql +root@ubuntu:/usr/local/mysql# tar zxvf mysql-5.7.19-linux-glibc2.12-x86_64.tar.gz +root@ubuntu:/usr/local/mysql# cd mysql-5.7.19-linux-glibc2.12-x86_64/ +root@ubuntu:/usr/local/mysql/mysql-5.7.19-linux-glibc2.12-x86_64# mkdir mysql-files +root@ubuntu:/usr/local/mysql/mysql-5.7.19-linux-glibc2.12-x86_64# chmod 750 mysql-files +root@ubuntu:/usr/local/mysql/mysql-5.7.19-linux-glibc2.12-x86_64# chown -R mysql . +root@ubuntu:/usr/local/mysql/mysql-5.7.19-linux-glibc2.12-x86_64# chgrp -R mysql . +# 安装过程中会生成一个随机密码,需要记录下来 +root@ubuntu:/usr/local/mysql/mysql-5.7.19-linux-glibc2.12-x86_64# bin/mysqld --initialize --user=mysql +root@ubuntu:/usr/local/mysql/mysql-5.7.19-linux-glibc2.12-x86_64# bin/mysql_ssl_rsa_setup + +# 添加环境变量 +root@ubuntu:/usr/local/mysql/mysql-5.7.19-linux-glibc2.12-x86_64# sudo vim /etc/profile + +export MYSQL_HOME=/usr/local/mysql/mysql-5.7.19-linux-glibc2.12-x86_64 +export PATH=$PATH:$MYSQL_HOME/bin + +root@ubuntu:/usr/local/mysql/mysql-5.7.19-linux-glibc2.12-x86_64# source /etc/profile + +root@ubuntu:/usr/local/mysql/mysql-5.7.19-linux-glibc2.12-x86_64# cd +root@ubuntu:~# mysqld_safe --user=mysql & +[1] 1931893 +root@ubuntu:~# Logging to '/usr/local/mysql/data/ubuntu.err'. +2023-05-19T15:00:22.730000Z mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/data + +root@ubuntu:~# mysql -u root -p +Enter password: +Welcome to the MySQL monitor. Commands end with ; or \g. +Your MySQL connection id is 3 +Server version: 5.7.19 + +Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. + +Oracle is a registered trademark of Oracle Corporation and/or its +affiliates. Other names may be trademarks of their respective +owners. + +Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. + +mysql> exit +Bye +root@ubuntu:~# mysqladmin -uroot -p'/2jW>kFeerno' password test +mysqladmin: [Warning] Using a password on the command line interface can be insecure. +Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety. +root@ubuntu:~# mysql -u root -p +Enter password: +Welcome to the MySQL monitor. Commands end with ; or \g. +Your MySQL connection id is 5 +Server version: 5.7.19 MySQL Community Server (GPL) + +Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. + +Oracle is a registered trademark of Oracle Corporation and/or its +affiliates. Other names may be trademarks of their respective +owners. + +Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. + +mysql> select `user`, `host` from mysql.user; ++---------------+-----------+ +| user | host | ++---------------+-----------+ +| mysql.session | localhost | +| mysql.sys | localhost | +| root | localhost | ++---------------+-----------+ +3 rows in set (0.00 sec) + +mysql> update mysql.user set host = '%' where user = 'root'; +Query OK, 1 row affected (0.00 sec) +Rows matched: 1 Changed: 1 Warnings: 0 + +mysql> flush privileges; +Query OK, 0 rows affected (0.00 sec) + +mysql> exit +Bye +``` + +## Windows 10安装MySQL5.5 安装 + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image177.jpg) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image178.jpg) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image179.jpg) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image180.jpg) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image181.jpg) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image182.jpg) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image183.jpg) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image184.jpg) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image185.jpg) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image186.jpg) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image187.jpg) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image188.jpg) + +## Ubuntu 16.04安装SQLLite3 + +```shell +jiangxin@db01:~$ sudo apt-get install sqlite3 +jiangxin@db01:~$ sqlite3 test.db +SQLite version 3.11.0 2016-02-15 17:29:24 +Enter ".help" for usage hints. +sqlite> create table mytable(id integer primary key, value text); +sqlite> insert into mytable(id, value) values(1, 'Micheal'); +sqlite> select * from mytable; +1|Micheal +sqlite> .help +.backup ?DB? FILE Backup DB (default "main") to FILE +.bail on|off Stop after hitting an error. Default OFF +.binary on|off Turn binary output on or off. Default OFF +.changes on|off Show number of rows changed by SQL +.clone NEWDB Clone data into NEWDB from the existing database +.databases List names and files of attached databases +.dbinfo ?DB? Show status information about the database +.dump ?TABLE? ... Dump the database in an SQL text format + If TABLE specified, only dump tables matching + LIKE pattern TABLE. +.echo on|off Turn command echo on or off +.eqp on|off Enable or disable automatic EXPLAIN QUERY PLAN +.exit Exit this program +.explain ?on|off|auto? Turn EXPLAIN output mode on or off or to automatic +.fullschema Show schema and the content of sqlite_stat tables +.headers on|off Turn display of headers on or off +.help Show this message +.import FILE TABLE Import data from FILE into TABLE +.indexes ?TABLE? Show names of all indexes + If TABLE specified, only show indexes for tables + matching LIKE pattern TABLE. +.limit ?LIMIT? ?VAL? Display or change the value of an SQLITE_LIMIT +.load FILE ?ENTRY? Load an extension library +.log FILE|off Turn logging on or off. FILE can be stderr/stdout +.mode MODE ?TABLE? Set output mode where MODE is one of: + ascii Columns/rows delimited by 0x1F and 0x1E + csv Comma-separated values + column Left-aligned columns. (See .width) + html HTML code + insert SQL insert statements for TABLE + line One value per line + list Values delimited by .separator strings + tabs Tab-separated values + tcl TCL list elements +.nullvalue STRING Use STRING in place of NULL values +.once FILENAME Output for the next SQL command only to FILENAME +.open ?FILENAME? Close existing database and reopen FILENAME +.output ?FILENAME? Send output to FILENAME or stdout +.print STRING... Print literal STRING +.prompt MAIN CONTINUE Replace the standard prompts +.quit Exit this program +.read FILENAME Execute SQL in FILENAME +.restore ?DB? FILE Restore content of DB (default "main") from FILE +.save FILE Write in-memory database into FILE +.scanstats on|off Turn sqlite3_stmt_scanstatus() metrics on or off +.schema ?TABLE? Show the CREATE statements + If TABLE specified, only show tables matching + LIKE pattern TABLE. +.separator COL ?ROW? Change the column separator and optionally the row + separator for both the output mode and .import +.shell CMD ARGS... Run CMD ARGS... in a system shell +.show Show the current values for various settings +.stats on|off Turn stats on or off +.system CMD ARGS... Run CMD ARGS... in a system shell +.tables ?TABLE? List names of tables + If TABLE specified, only list tables matching + LIKE pattern TABLE. +.timeout MS Try opening locked tables for MS milliseconds +.timer on|off Turn SQL timer on or off +.trace FILE|off Output each SQL statement as it is run +.vfsinfo ?AUX? Information about the top-level VFS +.vfslist List all available VFSes +.vfsname ?AUX? Print the name of the VFS stack +.width NUM1 NUM2 ... Set column widths for "column" mode + Negative values right-justify +sqlite> .quit +jiangxin@db01:~$\ +``` + +由于Sqlite本身不支持远程访问,如果需要在Windows上连接远程Linux上的Sqlite,需要在Linux上共享文件给Windows。 +共享方式见: +Ubuntu创建共享文件夹并支持Windows访问:http://jingyan.baidu.com/article/2fb0ba40a8283500f2ec5f35.html + + +在Windows上打开资源浏览器,在输入框输入\\192.168.1.150 +然后输入用户名、密码即可 + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image104.png) + + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image105.png) + +将之前创建的test.db移到share/sqlite目录: + +jiangxin@db01:~$ mv test.db share/sqlite/ + +在Windows上用dbeaver连接Linux上的远程数据库 + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image106.png) + +## 安装TeraData(SUSE LINUX Enterprise Server 11) + +### 下载、安装VMware-workstation: +VMware-workstation-full-12.5.5-5234757.exe + +### 下载、安装TDExpress +TDExpress14.10.03_Sles11_40GB.7z +http://downloads.teradata.com/download/database/teradata-express-for-vmware-player + +安装可以参考: +http://downloads.teradata.com/database/articles/teradata-express-14-0-for-vmware-user-guide + +### 网络设置 + +编辑-虚拟网络编辑器 + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image107.png) + +SUSE静态配置IP成功上网: http://blog.csdn.net/seulww/article/details/17136555 +按照上面链接设置之后,发现虚拟机无法ping通网关,经查询是DNS配置没有生效。按照下述步骤处理: + +修改ip地址(建议通过GUI配置) +即时生效: ifconfig eth0 192.168.1.155 netmask 255.255.255.0 +启动生效:修改/etc/sysconfig/network/ifcfg-eth0 +修改default gateway(建议通过GUI配置) +即时生效:route add default gw 192.168.1.1 +启动生效:修改/etc/sysconfig/network/ifcfg-eth0 +修改dns(不知为何通过GUI配置没有生效) +修改/etc/resolv.conf +修改后可即时生效,启动同样有效(一下为修改的内容) + +search localdomain +nameserver 114.114.114.114 +nameserver 8.8.8.8 + +修改host name(建议通过GUI配置) +即时生效:hostname TDExpress +启动生效:修改/etc/HOSTNAME + +### 启动报错解决 +启动之后可以查看/var/log/boot.msg获取此次开机的报错日志。 + +问题1: +Error:cannot mount filesystem:Protocol error +Mounting HGFS shares: FAILED + +解决: + +在VM->Setting中的Option页面,设置Shared Folders,使之enable 就可以了,这个功能能把host上的目录mount到Guest上的/mnt/hgfs目录,实现共享访问。 + +问题2: + + ipmi start +Starting ipmi drivers: failed + 'ipmi start' exits with status 1 + +解决: +不影响功能,暂未解决。 + +### 使用DBeaver进行连接 + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image108.png) + + + +## 安装Oracle +Database Application Development Hands On Labs: http://www.oracle.com/technetwork/database/enterprise-edition/databaseappdev-vm-161299.html + +### 配置网络 +[root@vbgeneric ~]# ifconfig + +enp0s3: flags=4163 mtu 1500 + inet 192.168.1.105 netmask 255.255.255.0 broadcast 192.168.1.255 + ether 08:00:27:0c:40:7f txqueuelen 1000 (Ethernet) + RX packets 2677 bytes 2476158 (2.3 MiB) + RX errors 0 dropped 0 overruns 0 frame 0 + TX packets 2645 bytes 323609 (316.0 KiB) + TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 + +lo: flags=73 mtu 65536 + inet 127.0.0.1 netmask 255.0.0.0 + loop txqueuelen 0 (Local Loopback) + RX packets 473 bytes 111334 (108.7 KiB) + RX errors 0 dropped 0 overruns 0 frame 0 + TX packets 473 bytes 111334 (108.7 KiB) + TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 + +virbr0: flags=4099 mtu 1500 + inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255 + ether 52:54:00:fc:2d:7f txqueuelen 0 (Ethernet) + RX packets 0 bytes 0 (0.0 B) + RX errors 0 dropped 0 overruns 0 frame 0 + TX packets 0 bytes 0 (0.0 B) + TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 + +[root@vbgeneric ~]# hostname +vbgeneric + + +[root@vbgeneric ~]# vim /etc/sysconfig/network-scripts/ifcfg-enp0s3 + +TYPE="Ethernet" +BOOTPROTO="static" +NAME="enp0s3" +UUID="05c05f77-20d5-4842-808d-366b3dc466d4" +DEVICE="enp0s3" +ONBOOT="yes" +IPADDR=192.168.1.145 +NETMASK=255.255.255.0 + +[root@vbgeneric ~]# vim /etc/sysconfig/network + +NETWORKING=yes +HOSTNAME=vbgeneric.localdomain +GATEWAY=192.168.1.1 + +[root@vbgeneric ~]# vim /etc/resolv.conf + +nameserver 114.114.114.114 +nameserver 8.8.8.8 + + +[root@vbgeneric ~]# service network restart +Restarting network (via systemctl): [ OK ] + +### 账号信息 +root/oracle + + + +[root@vbgeneric ~]# cat /etc/oracle-release +Oracle Linux Server release 7.3 +[root@vbgeneric ~]# su - oracle +Last login: Sat Sep 2 08:30:31 EDT 2017 on pts/1 +[oracle@vbgeneric ~]$ sqlplus / as sysdba + +SQL*Plus: Release 12.2.0.1.0 Production on Sat Sep 2 08:39:20 2017 + +Copyright (c) 1982, 2016, Oracle. All rights reserved. + +ERROR: +ORA-01017: invalid username/password; logon denied + + +Enter user-name: sys as sysdba +Enter password: + +Connected to: +Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production + +SQL> + +## Windows 10 安装 Oracle Database 11.2g +win64_11gR2_database_1of2.zip、win64_11gR2_database_2of2.zip两个解压到同一个目录 +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image109.png) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image110.png) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image111.png) +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image112.png) +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image113.png) + +Oracle基目录:$ORACLE_BASE +软件位置:$ORACLE_HOME +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image114.png) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image115.png) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image116.png) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image117.png) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image118.png) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image119.png) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image120.png) +## Windows 10 安装 Oracle12c + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image121.jpg) +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image122.jpg) +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image123.jpg) + + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image124.jpg) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image125.jpg) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image126.jpg) +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image127.jpg) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image128.jpg) +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image129.jpg) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image130.jpg) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image131.jpg) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image132.jpg) + + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image133.jpg) + +## 如何利用Oracle VM Templates 在几分钟内部署Oracle Real Application Clusters (RAC) + +### 阅读前准备 +阅读本教程前首先需要访问如下地址: +http://www.oracle.com/technetwork/server-storage/vm/downloads/hol-oraclevm-2368799.html + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image134.png) +下载红框标识的ovmm10471.oow.local.ova和ovs10471.oow.local.ova文件,并仔细阅读绿框标识的教程(OOW2015_HOL10471_RAC_20151116,以下简称OOW2015_HOL10471_RAC),本文是针对该教程的补充说明。 + +另外阅读OOW2015_HOL10471_RAC和本文需要对Oracle VM VirtualBox和Oracle VM有基本的了解,可以访问如下地址: +Oracle VM VirtualBox: +http://www.oracle.com/technetwork/server-storage/virtualbox/overview/index.html +Oracle VM: +http://www.oracle.com/technetwork/server-storage/vm/overview/index.html + +### 1 INTRODUCTION +#### 1.1 LAB OBJECTIVE +#### 1.2 PREPARATION (HAS BEEN DONE BEFORE THE LAB) +要想满足和OOW2015_HOL10471_RAC中所述的前提条件,只需要在满足硬件要求的笔记本或者台式机(内存16G以上,CPU 4核以上)中下载安装VirtualBox,进行VirtualBox网络配置,导入之前下载的虚拟机即可。VirtualBox下载地址为: +http://www.oracle.com/technetwork/server-storage/virtualbox/downloads/index.html +下载符合宿主机操作系统的VirtualBox并按照提示进行安装。 +安装后需要进行基础网络设置,之所以需要基础网络配置是因为如果想在宿主机中访问Oracle VM Manager虚拟机、Oracle VM Server虚拟机以及Oracle VM Server中Oracle RAC虚拟机,需要让宿主机和虚拟机处于一个网段之中,在OOW2015_HOL10471_RAC的1.3章节中可以知道虚拟机的网段是192.168.56.X,所以需要在Virtualbox中添加一个IP地址为192.168.56.1的网卡。添加网卡的步骤如下: + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image135.png) + + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image136.png) + + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image137.png) + +设置之后在【控制面板\网络和 Internet\网络连接】中可以看到配置的网卡 +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image138.png) + +在cmd或者powershell中执行ipconfig命令,可以发现多了一块网卡: + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image139.png) + + +增加网卡之后需要导入Oracle VM Manager+Oracle VM Server模板。首先导入Oracle VM Manager +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image140.png) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image141.png) + +然后导入Oracle VM Server +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image142.png) +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image143.png) + +启动虚拟机,如果出现类似于下面的提示: +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image144.png) + +则重新进行网络设置: +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image145.png) + +禁用掉OVS的USB控制器 +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image146.png) + + + +启动虚拟机,直到看到如下界面: +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image147.png) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image148.png) + +此时在宿主机中ping两台虚拟机的IP地址,应该都是可以ping通的。 +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image149.png) + + +#### 1.3 GLOBAL PICTURE +### 2 DETAILED INSTRUCTIONS +#### 2.1 START BOTH SERVERS (VIRTUAL BOX VMS) +#### 2.2 CONNECT TO THE ORACLE VM MANAGER CONSOLE +如果使用最新的Firefox版本(本文写作时的最新版本是Firefox 56),访问https://192.168.56.30:7002/ovm/console时会提示“建立安全连接失败”: +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image150.png) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image151.png) + +此时可以使用老版本的Firefox进行访问,47.0版本的Firefox安装包可以从百度网盘进行下载:http://pan.baidu.com/s/1dEBT5df + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image152.png) + +安装之后首先设置禁止检查更新,防止后台再次更新升级到最新版本。 + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image153.png) + +继续访问https://192.168.56.30:7002/ovm/console +出现如下图提示时单击“添加例外” + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image154.png) + +点击“确认安全例外” +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image155.png) + + + +此时可以看到VM Manager的登陆界面。 + +#### 2.3 CREATE A STORAGE REPOSITORY +#### 2.4 CLONE 3 VMS FROM DB/RAC ORACLE VM TEMPLATE +#### 2.5 CREATING SHARED DISK FOR ASM CONFIGURATION +在使用ssh连接Oracle VM Manager时如果使用的是Xshell的话,不支持OOW2015_HOL10471_RAC中所提到的ssh命令: +ssh admin@192.168.56.30 -p 10000 +需要在图形配置页中进行配置,如下: + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image156.png) +### 3 START INSTALLATION USING DEPLOYCLUSTER +#### 3.1 CREATE A NETCONFIG.INI FILE FOR DEPLOYMENT +#### 3.2 RUNNING DEPLOYCLUSTER.PY +在执行deploycluster.py命令时如果出现下图错误说明之前分配给三个虚拟机的资源过少: + + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image157.png) + +此时在浏览器中修改对应的内存值即可: +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image158.png) + +安装成功的标志是buildcluster.log中出现如下内容: + + + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image159.png) + + +### 如何关闭、启动系统 +OOW2015_HOL10471_RAC中未提及如何关系和启动系统,这里做简要说明。 +关闭系统时首先通过浏览器关闭三台VM: +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image160.png) + +待节点状态都是Stopped之后关闭Virtualbox 虚拟机 +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image161.png) + + +启动系统时反过来,先运行Virtualbox虚拟机: + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image162.png) + +看到如下画面代表Oracle VM Server启动成功: +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image163_01.png) + +看到如下画面代表Oracle VM Manager启动成功: +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image163.png) + +然后使用Firefox浏览器打开OVMM控制台: + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image164.png) + +待所有节点的状态都为Running时,用SSH登陆到racnode0.1节点,执行crsstat -t。当出现如下结果时说明RAC已经启动成功。 +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image165.png) + + +### 常用Oracle RAC相关的命令 + +```shell +[oracle@racnode01h ~]$ crsctl check css +CRS-4529: Cluster Synchronization Services is online +[oracle@racnode01h ~]$ ps -ef|grep cssd +root 1548 1 0 16:48 ? 00:00:17 /u01/app/12.1.0/grid/bin/cssdmonitor +root 1565 1 0 16:48 ? 00:00:16 /u01/app/12.1.0/grid/bin/cssdagent +oracle 1576 1 1 16:48 ? 00:01:02 /u01/app/12.1.0/grid/bin/ocssd.bin +oracle 4905 2855 0 18:04 pts/0 00:00:00 grep cssd +[oracle@racnode01h ~]$ crsctl check has +CRS-4638: Oracle High Availability Services is online +[oracle@racnode01h ~]$ ps -ef|grep ohasd.bin +root 1195 1 1 16:47 ? 00:01:06 /u01/app/12.1.0/grid/bin/ohasd.bin reboot +oracle 4932 2855 0 18:05 pts/0 00:00:00 grep ohasd.bin +[oracle@racnode01h ~]$ crs_stat -t +Name Type Target State Host +------------------------------------------------------------ +ora....SM.lsnr ora....er.type ONLINE ONLINE racnode01h +ora.DATA.dg ora....up.type ONLINE ONLINE racnode01h +ora....ER.lsnr ora....er.type ONLINE ONLINE racnode01h +ora....AF.lsnr ora....er.type OFFLINE OFFLINE +ora....N1.lsnr ora....er.type ONLINE ONLINE racnode01h +ora.asm ora.asm.type ONLINE ONLINE racnode01h +ora.cvu ora.cvu.type OFFLINE OFFLINE +ora.gns ora.gns.type ONLINE ONLINE racnode01h +ora.gns.vip ora....ip.type ONLINE ONLINE racnode01h +ora....network ora....rk.type ONLINE ONLINE racnode01h +ora.oc4j ora.oc4j.type OFFLINE OFFLINE +ora.ons ora.ons.type ONLINE ONLINE racnode01h +ora.oow.db ora....se.type ONLINE ONLINE racnode01h +ora....1H.lsnr application ONLINE ONLINE racnode01h +ora....01h.ons application ONLINE ONLINE racnode01h +ora....01h.vip ora....t1.type ONLINE ONLINE racnode01h +ora....2H.lsnr application ONLINE ONLINE racnode02h +ora....02h.ons application ONLINE ONLINE racnode02h +ora....02h.vip ora....t1.type ONLINE ONLINE racnode02h +ora.scan1.vip ora....ip.type ONLINE ONLINE racnode01h +[oracle@racnode01h ~]$ crsctl status resource -t +-------------------------------------------------------------------------------- +Name Target State Server State details +-------------------------------------------------------------------------------- +Local Resources +-------------------------------------------------------------------------------- +ora.ASMNET1LSNR_ASM.lsnr + ONLINE ONLINE racnode01h STABLE + ONLINE ONLINE racnode02h STABLE +ora.DATA.dg + ONLINE ONLINE racnode01h STABLE + ONLINE ONLINE racnode02h STABLE +ora.LISTENER.lsnr + ONLINE ONLINE racnode01h STABLE + ONLINE ONLINE racnode02h STABLE +ora.LISTENER_LEAF.lsnr + OFFLINE OFFLINE racnode03h STABLE +ora.net1.network + ONLINE ONLINE racnode01h STABLE + ONLINE ONLINE racnode02h STABLE +ora.ons + ONLINE ONLINE racnode01h STABLE + ONLINE ONLINE racnode02h STABLE +-------------------------------------------------------------------------------- +Cluster Resources +-------------------------------------------------------------------------------- +ora.LISTENER_SCAN1.lsnr + 1 ONLINE ONLINE racnode01h STABLE +ora.asm + 1 ONLINE ONLINE racnode01h Started,STABLE + 2 ONLINE ONLINE racnode02h Started,STABLE + 3 OFFLINE OFFLINE STABLE +ora.cvu + 1 OFFLINE OFFLINE STABLE +ora.gns + 1 ONLINE ONLINE racnode01h STABLE +ora.gns.vip + 1 ONLINE ONLINE racnode01h STABLE +ora.oc4j + 1 OFFLINE OFFLINE STABLE +ora.oow.db + 1 ONLINE ONLINE racnode01h Open,STABLE + 2 ONLINE ONLINE racnode02h Open,STABLE +ora.racnode01h.vip + 1 ONLINE ONLINE racnode01h STABLE +ora.racnode02h.vip + 1 ONLINE ONLINE racnode02h STABLE +ora.scan1.vip + 1 ONLINE ONLINE racnode01h STABLE +-------------------------------------------------------------------------------- +[oracle@racnode01h ~]$ sqlplus / as sysdba + +SQL*Plus: Release 12.1.0.2.0 Production on Fri Nov 10 18:14:09 2017 + +Copyright (c) 1982, 2014, Oracle. All rights reserved. + + +Connected to: +Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production +With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP, +Advanced Analytics and Real Application Testing options + +SQL> set linesize 200; +SQL> select * from gv$instance; + + INST_ID INSTANCE_NUMBER INSTANCE_NAME HOST_NAME VERSION STARTUP_T STATUS PAR THREAD# ARCHIVE LOG_SWITCH_WAIT LOGINS +---------- --------------- ---------------- ---------------------------------------------------------------- ----------------- --------- ------------ --- ---------- ------- --------------- ---------- +SHU DATABASE_STATUS INSTANCE_ROLE ACTIVE_ST BLO CON_ID INSTANCE_MO EDITION FAMILY +--- ----------------- ------------------ --------- --- ---------- ----------- ------- -------------------------------------------------------------------------------- + 1 1 OOW1 racnode01h 12.1.0.2.0 10-NOV-17 OPEN YES 1 STOPPED ALLOWED +NO ACTIVE PRIMARY_INSTANCE NORMAL NO 0 REGULAR EE + + 2 2 OOW2 racnode02h 12.1.0.2.0 10-NOV-17 OPEN YES 2 STOPPED ALLOWED +NO ACTIVE PRIMARY_INSTANCE NORMAL NO 0 REGULAR EE + + +SQL> +``` + +## 安装PLSQL Developer 11.0.6 + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image166.jpg) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image167.jpg) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image168.jpg) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image169.jpg) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image170.jpg) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image171.jpg) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image172.jpg) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image173.jpg) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image174.jpg) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image175.jpg) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image176.jpg) + +## 安装Prometheus +下载地址: +https://prometheus.io/download/ + +jiangxin@tomcat:~$ sudo mkdir /usr/local/prometheus +jiangxin@tomcat:~$ sudo chown -R jiangxin:jiangxin /usr/local/prometheus +jiangxin@tomcat:~$ cd /usr/local/prometheus/ +jiangxin@tomcat:/usr/local/prometheus$ ls +prometheus-1.7.1.linux-amd64.tar.gz +jiangxin@tomcat:/usr/local/prometheus$ tar -zxvf prometheus-1.7.1.linux-amd64.tar.gz +jiangxin@tomcat:/usr/local/prometheus$ cd prometheus-1.7.1.linux-amd64/ + +jiangxin@tomcat:/usr/local/prometheus/prometheus-1.7.1.linux-amd64$ sudo vim /etc/profile + +export PROMETHEUS_HOME=/usr/local/prometheus/prometheus-1.7.1.linux-amd64 +export PATH=$PATH:$PROMETHEUS_HOME + +jiangxin@tomcat:/usr/local/prometheus/prometheus-1.7.1.linux-amd64$ source /etc/profile +jiangxin@tomcat:/usr/local/prometheus/prometheus-1.7.1.linux-amd64$ cd +### 启动 +jiangxin@tomcat:~$ prometheus -config.file=${PROMETHEUS_HOME}/prometheus.yml +INFO[0000] Starting prometheus (version=1.7.1, branch=master, revision=3afb3fffa3a29c3de865e1172fb740442e9d0133) source="main.go:88" +INFO[0000] Build context (go=go1.8.3, user=root@0aa1b7fc430d, date=20170612-11:44:05) source="main.go:89" +INFO[0000] Host details (Linux 4.4.0-78-generic #99-Ubuntu SMP Thu Apr 27 15:29:09 UTC 2017 x86_64 tomcat (none)) source="main.go:90" +INFO[0000] Loading configuration file /usr/local/prometheus/prometheus-1.7.1.linux-amd64/prometheus.yml source="main.go:252" +INFO[0000] Loading series map and head chunks... source="storage.go:428" +INFO[0000] 0 series loaded. source="storage.go:439" +INFO[0000] Starting target manager... source="targetmanager.go:63" +INFO[0000] Listening on :9090 source="web.go:259" + + + + +### 查看界面 +http://192.168.1.130:9090/metrics + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image189.png) + + + +http://192.168.1.130:9090/graph + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image190.png) + +## 安装配置CAS + +### 基础环境安装 + +搭建CAS单点登录系统,首先需要基础环境的部署。主要包括Windows/Linux/Java/Maven/GIT/Tomcat等,基础环境的部署不是本文的描写重点,本文仅做简要说明,如有疑问可以邮件咨询。 + +### Windows + +Windows 10,安装有JDK/GIT/Maven等工具,主要功能是下载CAS服务端和客户端源码,并进行编译打包,上传到Linux服务器上进行部署。同时利用Chrome浏览器对安装之后的环境进行检验。 + +### Linux + +Ubuntu 16.04.1 LTS,安装有JDK、Tomcat等工具,主要作为CAS Server和Web Server的宿主环境。 + +### JDK + +Linux服务器端安装JDK主要是作为Tomcat的运行时环境,并提供keytool等工具进行HTTPS配置;Windows客户端安装JDK主要是作为Maven的运行时环境。 + +jiangxin@tomcat:~$ java -version +java version "1.8.0_121" +Java(TM) SE Runtime Environment (build 1.8.0_121-b13) +Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode) + +PS C:\Users\jiang> java -version +java version "1.8.0_102" +Java(TM) SE Runtime Environment (build 1.8.0_102-b14) +Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode) + + +### GIT +安装在Windows机器,主要用于下载并及时更新CAS Server和Client源码。 +PS C:\Users\jiang> git --version +git version 2.8.3.windows.1 + +### Maven + +安装在Windows机器,主要作用是编译打包。 +PS C:\Users\jiang> mvn -v +Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00) +Maven home: C:\apache-maven-3.3.9 +Java version: 1.8.0_102, vendor: Oracle Corporation +Java home: C:\Java\jdk1.8.0_102\jre +Default locale: zh_CN, platform encoding: GBK +OS name: "windows 10", version: "10.0", arch: "amd64", family: "dos" + +### Tomcat + +安装在Linux,安装包为: +apache-tomcat-8.5.14.tar.gz +为了更好的模拟单点登录,需要安装三个Tomcat实例,其中一个作为CAS Server,另外两个作为CAS Client。具体分配 + +安装过程为: +jiangxin@tomcat:/usr/local$ sudo mkdir tomcat +jiangxin@tomcat:/usr/local$ sudo chown -R jiangxin:jiangxin tomcat/ +jiangxin@tomcat:/usr/local$ cd tomcat/ +jiangxin@tomcat:/usr/local/tomcat$ ls +jiangxin@tomcat:/usr/local/tomcat$ tar -zxvf apache-tomcat-8.5.14.tar.gz +jiangxin@tomcat:/usr/local/tomcat$ cd + +jiangxin@tomcat:~$ sudo vim /etc/profile + +export CATALINA_BASE=/usr/local/tomcat/apache-tomcat-8.5.14 +export CATALINA_HOME=/usr/local/tomcat/apache-tomcat-8.5.14 +export PATH=$PATH:$CATALINA_HOME/lib:$CATALINA_HOME/bin + +jiangxin@tomcat:~$ source /etc/profile + +jiangxin@tomcat:~$ startup.sh ; tailf $CATALINA_HOME/logs/catalina.out +Using CATALINA_BASE: /usr/local/tomcat/apache-tomcat-8.5.14 +Using CATALINA_HOME: /usr/local/tomcat/apache-tomcat-8.5.14 +Using CATALINA_TMPDIR: /usr/local/tomcat/apache-tomcat-8.5.14/temp +Using JRE_HOME: /usr/local/java/jdk1.8.0_121 +#限于篇幅,此处有省略 +05-May-2017 20:27:53.487 信息 [main] org.apache.catalina.startup.Catalina.start Server startup in 1633 ms + + +在浏览器中访问下面地址,查看能否正常访问: + +http://192.168.1.130:8080/ + + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image191.png) + +jiangxin@tomcat:~$ shutdown.sh +Using CATALINA_BASE: /usr/local/tomcat/apache-tomcat-8.5.14 +Using CATALINA_HOME: /usr/local/tomcat/apache-tomcat-8.5.14 +Using CATALINA_TMPDIR: /usr/local/tomcat/apache-tomcat-8.5.14/temp +Using JRE_HOME: /usr/local/java/jdk1.8.0_121 +Using CLASSPATH: /usr/local/tomcat/apache-tomcat-8.5.14/bin/bootstrap.jar:/usr/local/tomcat/apache-tomcat-8.5.14/bin/tomcat-juli.jar + +### 安装CAS服务端 + +在较新的CAS版本中不在提供CAS服务端和客户端的安装包,都是依靠下载源码,重新打包。如果对本文的安装内容有疑问可以参考CAS的官网: + +https://apereo.github.io/cas/5.0.x/installation/Maven-Overlay-Installation.html +https://github.com/apereo/cas-overlay-template + +正常情况下应该在服务器上进行maven编译,这样才能保证编译的JDK版本和运行时的版本一致,但是此处为了方便,直接在Windows编译。 + +PS C:\Users\jiang> cd D:\temp\Java\ +PS D:\temp\Java> git clone https://github.com/apereo/cas-overlay-template.git +Cloning into 'cas-overlay-template'... +remote: Counting objects: 566, done. +remote: Compressing objects: 100% (12/12), done. +remote: Total 566 (delta 4), reused 0 (delta 0), pack-reused 550 eceiving objects: 96% (544/566), 116.00 KiB | 79.00 KiB/ +Receiving objects: 100% (566/566), 188.70 KiB | 79.00 KiB/s, done. +Resolving deltas: 100% (275/275), done. +Checking connectivity... done. +PS D:\temp\Java> cd .\cas-overlay-template\ +PS D:\temp\Java\cas-overlay-template> .\build.cmd package +[INFO] Scanning for projects... +[INFO] +[INFO] Using the MultiThreadedBuilder implementation with a thread count of 5 +[INFO] +[INFO] ------------------------------------------------------------------------ +[INFO] Building cas-overlay 1.0 +由于篇幅原因,此处有省略 +[INFO] Packaging webapp +[INFO] Assembling webapp [cas-overlay] in [D:\temp\Java\cas-overlay-template\target\cas] +[info] Copying manifest... +[INFO] Processing war project +[INFO] Processing overlay [ id org.apereo.cas:cas-server-webapp] +[INFO] Webapp assembled in [2685 msecs] +[INFO] Building war: D:\temp\Java\cas-overlay-template\target\cas.war +[INFO] ------------------------------------------------------------------------ +[INFO] BUILD SUCCESS +[INFO] ------------------------------------------------------------------------ +[INFO] Total time: 06:34 min (Wall Clock) +[INFO] Finished at: 2017-05-05T20:06:02+08:00 +[INFO] Final Memory: 13M/200M +[INFO] ------------------------------------------------------------------------ + + +把cas-overlay-template\target\cas.war上传到/usr/local/tomcat/apache-tomcat-8.5.14/webapps + +重新启动tomcat + +05-May-2017 20:39:10.561 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Server version: Apache Tomcat/8.5.14 +由于篇幅原因,此处有省略 +05-May-2017 20:39:11.026 信息 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Deploying web application archive /usr/local/tomcat/apache-tomcat-8.5.14/webapps/cas.war +05-May-2017 20:39:20.915 信息 [localhost-startStop-1] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time. + + + __ ____ _ ____ __ + / / / ___| / \ / ___| \ \ +| | | | / _ \ \___ \ | | +| | | |___ / ___ \ ___) | | | +| | \____|/_/ \_\|____/ | | + \_\ /_/ + +CAS Version: 5.0.5 +Apache Tomcat Version: Apache Tomcat/8.5.14 +Build Date/Time: 2017-04-21T03:24:20Z +System Temp Directory: /usr/local/tomcat/apache-tomcat-8.5.14/temp +Java Home: /usr/local/java/jdk1.8.0_121/jre +Java Vendor: Oracle Corporation +Java Version: 1.8.0_121 +JCE Installed: no +OS Architecture: amd64 +OS Name: Linux +OS Version: 4.4.0-72-generic + + +2017-05-05 20:39:29,134 INFO [org.apereo.cas.web.CasWebApplicationServletInitializer] - + +在浏览器中范围如下地址,查看能否访问: +http://192.168.1.130:8080/cas/login + + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image192.png) + +使用casuser/Mellon进行登录(application.properties中配置用户名和密码),查看是否登录成功。 + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image193.png) + +### 配置数字证书 + +CAS要求CAS Server和CAS Client以及客户端浏览器端全部使用https访问,所以需要配置证书。 + +正常情况下,数字证书的生成,分发,使用是在多台机器上,以本文搭建的SSO系统为例,在A机器(CA)上生成证书,然后将证书(包括私钥和公钥)分发到B机器(SSO Server),B机器根据该证书导出公钥分发给C机器(SSO Client),此时B和C即可正常建立连接。同时当D机器(客户端浏览器)与A机器交互时即可在A机器上下载公钥,进行连接。 +但为了方便测试,本文中A、B、C机器为一台。 + +下边的命令,会创建一条证书记录并写入cacerts。证书记录信息包含该条证书的私钥,公钥和对应的数字证书的信息。 + +```shell +jiangxin@tomcat:~$ keytool -genkey -alias castest -keyalg RSA -keystore /usr/local/java/jdk1.8.0_121/jre/lib/security/cacerts +输入密钥库口令: # 按照JDK后,默认的密钥库密码为changeit +您的名字与姓氏是什么? # 名字与姓氏为CAS跳转域名 + [Unknown]: cas.sso.com +您的组织单位名称是什么? + [Unknown]: castest +您的组织名称是什么? + [Unknown]: castest +您所在的城市或区域名称是什么? + [Unknown]: nanjing +您所在的省/市/自治区名称是什么? + [Unknown]: jiangsu +该单位的双字母国家/地区代码是什么? + [Unknown]: cn +CN=cas.sso.com, OU=castest, O=castest, L=nanjing, ST=jiangsu, C=cn是否正确? + [否]: y + +输入 的密钥口令 + (如果和密钥库口令相同, 按回车): +``` + +可使用如下命令查看证书信息: +jiangxin@tomcat:~$ keytool -list -keystore "$JAVA_HOME/jre/lib/security/cacerts" -alias castest +输入密钥库口令: +castest, 2017-5-7, PrivateKeyEntry, +证书指纹 (SHA1): 9A:9A:DF:AB:18:B7:D9:81:8D:24:BA:E3:73:99:67:CE:58:B0:3A:CD + +如果要更新证书,可以先删除原证书,再导入新证书: +jiangxin@tomcat:~$ keytool -delete -alias castest -keystore /usr/local/java/jdk1.8.0_121/jre/lib/security/cacerts + +接下来修改server.xml文件 +jiangxin@tomcat:~$ cp /usr/local/tomcat/apache-tomcat-8.5.14/conf/server.xml /usr/local/tomcat/apache-tomcat-8.5.14/conf/server.xml.bak +jiangxin@tomcat:~$ vim /usr/local/tomcat/apache-tomcat-8.5.14/conf/server.xml + +```xml + + +``` + +重启tomcat,访问下面地址,查看是否能够正常访问: +https://192.168.1.130:8443/cas + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image194.png) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image195.png) + + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image196.png) + + + + +由于本文所部署的环境是CAS Server和CAS Client在一台服务器上,所以不需要单独将公钥导出到CAS Client上,但是如果需要,可以参考下面的导入导出过程。 + +导出数字证书,数字证书包含三部分信息:证书元数据信息,序列号,过期时间等、所有者信息,姓名、地区等、所有者公钥;相比于在keystore中的信息,没有所有者的密钥,所有者的密钥只有所有者自己知道,而此处的数字证书是要分发到公网上的。 + +jiangxin@tomcat:~$ keytool -export -file ssokey/castest.crt -alias castest -keystore ssokey/castest +输入密钥库口令: +存储在文件 中的证书 + + +jiangxin@tomcat:~$ keytool -import -keystore "$JAVA_HOME/jre/lib/security/cacerts" -file ssokey/castest.crt -alias castest +输入密钥库口令: +keytool 错误: java.io.IOException: Keystore was tampered with, or password was incorrect +jiangxin@tomcat:~$ keytool -import -keystore "$JAVA_HOME/jre/lib/security/cacerts" -file ssokey/castest.crt -alias castest +输入密钥库口令: +所有者: CN=cas.sso.com, OU=castest, O=castest, L=nanjing, ST=jiangsu, C=cn +发布者: CN=cas.sso.com, OU=castest, O=castest, L=nanjing, ST=jiangsu, C=cn +序列号: 3cc98964 +有效期开始日期: Sun May 07 09:03:47 CST 2017, 截止日期: Sat Aug 05 09:03:47 CST 2017 +证书指纹: + MD5: F4:B8:E4:B1:07:EE:86:45:C7:96:5F:FA:EF:E9:5C:11 + SHA1: D0:7B:BB:30:0C:D3:8A:49:C9:89:3B:E0:C4:C0:98:30:74:E3:15:98 + SHA256: 4B:AB:EA:C1:06:3F:0D:3B:A2:C9:3C:F7:45:B6:CF:66:EA:BE:B3:6A:42:61:05:E3:C4:D4:AE:DC:0C:DC:20:31 + 签名算法名称: SHA256withRSA + 版本: 3 + +扩展: + +#1: ObjectId: 2.5.29.14 Criticality=false +SubjectKeyIdentifier [ +KeyIdentifier [ +0000: D0 C7 06 22 8B 57 71 E4 39 08 E5 05 F9 5B B4 2D ...".Wq.9....[.- +0010: ED 9F 92 28 ...( +] +] + +是否信任此证书? [否]: y +证书已添加到密钥库中 + +### 安装CAS客户端 + +建立客户端工程,参考: + +https://bitbucket.org/jiangxincode/casclient/ + +使用maven打包,得到casclient.war,上传到服务器上 + +### 验证 + +验证之前先在Windows和Linux机器的hosts文件中加入: +192.168.1.130 cas.sso.com + + +重新启动Tomcat容器,在浏览器访问如下地址: +https://cas.sso.com:8443/casclient/index.jsp +会发现浏览器被重定向到如下地址: +https://cas.sso.com:8443/cas/login?service=https%3A%2F%2Fcas.sso.com%3A8443%2Fcasclient%2Findex.jsp +输入casuser/Mellon之后,浏览器会跳转到下面的地址 +https://cas.sso.com:8443/casclient/index.jsp;jsessionid=23551AEBF9B7B61431D0CC942F923771 + +### 配置日志路径 + +为了防止在不同地方启动tomcat,导致日志位置不同,不方便查找,修改一下日志路径。 + +jiangxin@tomcat:/usr/local/tomcat/apache-tomcat-8.5.14/webapps/cas/WEB-INF/classes$ cp log4j2.xml log4j2.xml.bak +jiangxin@tomcat:/usr/local/tomcat/apache-tomcat-8.5.14/webapps/cas/WEB-INF/classes$ vim log4j2.xml + +```xml + + + + + /usr/local/tomcat/apache-tomcat-8.5.14/logs/cas + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#限于篇幅,此处有省略 + +``` + +### 其它配置 + +CAS支持的配置很多,此处不一一说明,有需要的可以参考下面的链接: + +https://github.com/apereo/cas +CAS protocol: https://apereo.github.io/cas/5.0.x/protocol/CAS-Protocol.html +CAS Client集群环境的问题及解决方案: https://yq.aliyun.com/articles/49871 +cas系列文章: http://www.cnblogs.com/vhua/tag/cas/ +cas单点登录配置速成: http://www.blogjava.net/goodlyts/archive/2009/10/20/299091.html + +## Windows 10系统下搭建Jenkins环境 + +主要参考: +http://www.cnblogs.com/edward2013/p/5269465.html +但是没有安装ant,而且java、maven、tomcat都是使用的压缩包方式安装。 + +## Ubuntu 16.04安装docker + +主要参考: +https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository + +## Ubuntu 22.04安装Samba + +### 下载/安装Samba服务器: +sudo apt-get install samba samba-common + +### 配置Samba服务器 +首先将默认的配置文件进行备份 +sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak + +sudo vim /etc/samba/smb.conf + +[jiangxin] +path = /home/jiangxin +available = yes +browseable = yes +public = yes +writable = yes +valid users = jiangxin + +### 设置密码并重启服务器 + +sudo smbpasswd -a jiangxin //设置访问的密码 +sudo service smbd restart //重启smb服务器 + +### 访问 + +在Windows资源管理器导航栏输入`\\ip_adress`,然后输入账号和密码就可以访问了。为了后续方便快速访问Linux侧目录,将远程目录映射为网络驱动器: +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image197.png) + + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image198.png) +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image199.png) + +### 其它问题 + +如果Windows无法访问samba服务器,尝试通过以下方式确认问题所在: + +控制面板-系统和安全-Windows Defender 防火墙,关闭防火墙 + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image200.png) +控制面板-程序-启用或关闭Windows功能,勾选SMB 1.0/CIFS文件共享支持 + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image201.png) +Win+R,输入gpedit.msc,计算器配置-管理模板-网络-Lanman工作站,选中"不安全的来宾登陆",在新的对话框中选中"已启用" + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image202.png) +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image203.png) + +## 配置AOSP源码查看环境 + +### 在Windows上安装Repo,同步AOSP代码【不推荐】 + +第一个想到的方案是在Windows上配置Repo,然后下载AOSP源码,参考: +Windows安装repo的真正解决方案:https://ysy950803.blog.csdn.net/article/details/104188793 +但是就像Repo官网(https://gerrit.googlesource.com/git-repo/+/HEAD/docs/windows.md)说的那样: +Repo is primarily developed on Linux with a lot of users on macOS. Windows is, unfortunately, not a common platform. There is support in repo for Windows, but there might be some rough edges. +Keep in mind that Windows in general is “best effort” and “community supported”. That means we don't actively test or verify behavior, but rely heavily on users to report problems back to us, and to contribute fixes as needed. +Windows版的Repo虽然可用,但是可能会出现各种各样的问题,这些问题可能会让我们在解决环境问题上分心过多,所以不推荐这种方式。 + +### 在Linux上安装Repo,同步AOSP代码【推荐】 + +根据实际情况有两种工作模式: +1、 Linux作为AOSP代码的同步、存储、查看、修改、编译环境,大部分工作都是在Linux上完成,Android Studio也是安装在Linux上,这种我觉得是最完美的模式。但是要求Linux的性能足够好。由于我这边没有实际的Linux机器,是在Windows上用虚拟机配置的Linux环境,所以没有采用这种方法。 +2、 Linux作为AOSP代码的同步、存储、编译环境,查看和修改工作在Windows上完成,具体的实现方式有两种: +a) 用Samba服务器把Linux上的AOSP代码共享到Windows平台,然后在Windows平台上安装IDE环境,直接打开远程AOSP代码目录,查看和修改,这种方式的优点是配置简单,不用代码同步。但是我这边网速一般,而AOSP代码量太大,导致Android Studio经常卡死,所以我也放弃了这种方式。 +b) 将android.iml/android.ipr以及常用的仓(比如frameworks/base frameworks/native等)使用rsync等工具同步到Windows平台,然后在Windows上使用Android Studio导入,进行查看和修改,修改完成后通过Beyondcompare工具将修改的内容同步到Linux平台进行编译等工作。这个各方面折中的方案。后续主要介绍这种工作环境的配置。 + +#### 安装配置Linux环境 + +如果已经有Linux机器,本步骤省略。我在家中没有,遂采用在Windows上安装Virtualbox,然后通过Virtualbox安装Linux(Ubuntu)。 +同时按需安装Git/Vim/OpenSSH Server等工具,安装方式不再赘述,网上有很多。 + +#### 下载AOSP源码 + +在配置好的Linux环境中下载AOSP源码,Google官方的下载AOSP源码的方式:https://source.android.com/docs/setup/build/downloading。 +但是由于墙的原因,这种方式不容易实现,所以推荐使用清华的镜像,使用指导:https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/。 +Repo的使用方式可以参考:Repo实践指南:https://www.cnblogs.com/jiangxinnju/p/14274982.html + +#### 配置Windows上的工具 +1、 安装SSH客户端工具,这里推荐MobaXTerm,因为它不仅免费还自带了rsync命令行工具,可以非常方便从Linux上同步代码到Windows。 +a) mkdir -p /drives/d/Code/sync/aosp/frameworks +b) rsync -az --progress --delete --exclude=".git" android@192.168.1.125:/home/android/aosp/frameworks/base /drives/d/Code/sync/aosp/frameworks/ +c) rsync -az --progress --delete --exclude=".git" android@192.168.1.125:/home/android/aosp/frameworks/native /drives/d/Code/sync/aosp/frameworks/ +2、 安装BeyondCompare工具,方便对比,将修改的代码同步到Linux环境。 +3、 安装Android Sudio,将AOSP源码导入到Android Studio进行查看:https://www.cnblogs.com/jiangxinnju/p/14426645.html +4、 安装Source Insight工具,AS查看AOSP的Java代码比较合适,但是C/C++代码不支持跳转,着色也比较差,看这部分代码还是SI比较好用。 + +## TensorFlow环境搭建 + +### 预备条件 + Ubuntu 22.04.2 LTS + 配置好固定IP,安装SSH(Server)/Samba等基础网络连接软件 + +## 腾讯云环境构建 + +### 开启root用户 +sudo passwd root + +### 修改主机名 +sudo vim /etc/hostname +修改成ubuntu +sudo reboot + +### 防止SSH经常断连 +ubuntu@ubuntu:~$ sudo vim /etc/ssh/sshd_config +ClientAliveInterval 30 +ClientAliveCountMax 86400 + +ubuntu@ubuntu:~$ sudo /etc/init.d/ssh restart +### 安装JDK 8 +ubuntu@ubuntu:/usr/local$ sudo mkdir java +ubuntu@ubuntu:/usr/local$ sudo chown ubuntu:ubuntu java + +上传jdk-8u371-linux-x64.tar.gz到java目录 + +ubuntu@ubuntu:/usr/local$ cd java/ +ubuntu@ubuntu:/usr/local/java$ tar -zxvf jdk-8u371-linux-x64.tar.gz + +ubuntu@ubuntu:/usr/local/java $ cd +ubuntu@ubuntu:~$ sudo vim /etc/profile + +在文件末尾添加如下内容: + +export JAVA_HOME=/usr/local/java/jdk1.8.0_371 +export CLASSPATH=.:$JAVA_HOME/lib:$CLASSPATH +export PATH=$JAVA_HOME/bin:$PATH + +ubuntu@ubuntu:~$ source /etc/profile +ubuntu@ubuntu:~$ java -version +java version "1.8.0_371" +Java(TM) SE Runtime Environment (build 1.8.0_371-b11) +Java HotSpot(TM) 64-Bit Server VM (build 25.371-b11, mixed mode) +### 安装JDK 17 +ubuntu@ubuntu:/usr/local$ sudo mkdir java +ubuntu@ubuntu:/usr/local$ sudo chown ubuntu:ubuntu java + +上传jdk-8u371-linux-x64.tar.gz到java目录 + +ubuntu@ubuntu:/usr/local$ cd java/ +ubuntu@ubuntu:/usr/local/java$ tar -zxvf jdk-17_linux-x64_bin.tar.gz + +ubuntu@ubuntu:/usr/local/java $ cd +ubuntu@ubuntu:~$ sudo vim /etc/profile + +在文件末尾添加如下内容: + +export JAVA_HOME=/usr/local/java/jdk-17.0.7 +export PATH=$JAVA_HOME/bin:$PATH + +ubuntu@ubuntu:~$ source /etc/profile +ubuntu@ubuntu:~$ java -version +java 17.0.7 2023-04-18 LTS +Java(TM) SE Runtime Environment (build 17.0.7+8-LTS-224) +Java HotSpot(TM) 64-Bit Server VM (build 17.0.7+8-LTS-224, mixed mode, sharing) + +### 安装Tomcat 8.5 +ubuntu@ubuntu:/usr/local$ sudo mkdir tomcat +ubuntu@ubuntu:/usr/local$ sudo chown -R jiangxin:jiangxin tomcat +ubuntu@ubuntu:/usr/local$ cd tomcat/ +ubuntu@ubuntu:/usr/local/tomcat$ tar -zxvf apache-tomcat-8.5.88.tar.gz +ubuntu@ubuntu:/usr/local/tomcat$ cd + +ubuntu@ubuntu:~$ sudo vim /etc/profile + +export CATALINA_BASE=/usr/local/tomcat/apache-tomcat-8.5.88 +export CATALINA_HOME=/usr/local/tomcat/apache-tomcat-8.5.88 +export PATH=$PATH:$CATALINA_HOME/lib:$CATALINA_HOME/bin + +ubuntu@ubuntu:~$ source /etc/profile + +本次会话启动tomcat +startup.sh ; tail -f $CATALINA_HOME/logs/catalina.out + +后台启动tomcat +nohup startup.sh & + +关闭tomcat +shutdown.sh + +端口占用查询 +sudo netstat -tulpn | grep 8080 + +进程查询 +ps -ef | grep tomcat + +在浏览器中访问下面地址,查看能否正常访问: + +http://124.222.145.48:8080/ +### 安装Tomcat 9 +ubuntu@ubuntu:/usr/local$ sudo mkdir tomcat +ubuntu@ubuntu:/usr/local$ sudo chown -R jiangxin:jiangxin tomcat +ubuntu@ubuntu:/usr/local$ cd tomcat/ +ubuntu@ubuntu:/usr/local/tomcat$ tar -zxvf apache-tomcat-9.0.75.tar.gz +ubuntu@ubuntu:/usr/local/tomcat$ cd + +ubuntu@ubuntu:~$ sudo vim /etc/profile + +export CATALINA_BASE=/usr/local/tomcat/apache-tomcat-9.0.75 +export CATALINA_HOME=/usr/local/tomcat/apache-tomcat-9.0.75 +export PATH=$PATH:$CATALINA_HOME/lib:$CATALINA_HOME/bin + +ubuntu@ubuntu:~$ source /etc/profile + +本次会话启动tomcat +startup.sh ; tail -f $CATALINA_HOME/logs/catalina.out + +后台启动tomcat +nohup startup.sh & + +关闭tomcat +shutdown.sh + +端口占用查询 +sudo netstat -tulpn | grep 8080 + +进程查询 +ps -ef | grep tomcat + +在浏览器中访问下面地址,查看能否正常访问: + +http://124.222.145.48:8080/ +### 安装Tomcat 10 +ubuntu@ubuntu:/usr/local$ sudo mkdir tomcat +ubuntu@ubuntu:/usr/local$ sudo chown -R jiangxin:jiangxin tomcat +ubuntu@ubuntu:/usr/local$ cd tomcat/ +ubuntu@ubuntu:/usr/local/tomcat$ tar -zxvf apache-tomcat-10.1.9.tar.gz +ubuntu@ubuntu:/usr/local/tomcat$ cd + +ubuntu@ubuntu:~$ sudo vim /etc/profile + +export CATALINA_BASE=/usr/local/tomcat/apache-tomcat-10.1.9 +export CATALINA_HOME=/usr/local/tomcat/apache-tomcat-10.1.9 +export PATH=$PATH:$CATALINA_HOME/lib:$CATALINA_HOME/bin + +ubuntu@ubuntu:~$ source /etc/profile + +本次会话启动tomcat +startup.sh ; tail -f $CATALINA_HOME/logs/catalina.out + +后台启动tomcat +nohup startup.sh & + +关闭tomcat +shutdown.sh + +端口占用查询 +sudo netstat -tulpn | grep 8080 + +进程查询 +ps -ef | grep tomcat + +在浏览器中访问下面地址,查看能否正常访问: + +http://124.222.145.48:8080/ + +### 安装MySQL + +参考前文 + +### 部署项目 +war包放到$CATALINA_HOME/webapps/目录下,然后重启tomcat +shutdown.sh; startup.sh ; tail -f $CATALINA_HOME/logs/catalina.out + +http://124.222.145.48:8080/java-web-test/index.jsp + +## MyEclipse 2014安装说明 + +下载过程就不详述了。 + +说明一下,可以只安装MyEclipse 2014,而不用提前安装JDK、Eclipse、Tomcat等软件,MyEclipse 2014内嵌了这些东西,网上说的MyEclipse只是Eclipse的插件,所以要安装MyEclipse就要先安装Eclipse,而要安装Eclipse又必须提前安装JDK。这对于旧版本的MyEclipse来说确实是这样,但是对于比较新的几个版本来说,不需要了,MyEclipse包含了开发所需要的大多数工具。 + +当然,如果你不想使用其自带的JDK或者服务器软件,你可以在安装了其它的JDK版本和服务器软件之后自行设置。(在Window->Preferences中进行配置) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image204.png) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image205.png) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image206.png) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image207.png) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image208.png) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image209.png) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image210.png) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image211.png) + +安装好之后,先不要打开MyEclipse 2014的程序。 + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image212.png) + +接下来对MyEclipse进行破解,由于破解包是jar包,所以需要JRE,不过一般的机子上都有,可以打开CMD输入java命令测试一下,如果显示以下命令则证明本机已有JRE,无需安装,如果没有下载JRE,进行安装。 + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image213.png) + +打开破解文件夹,运行`cracker.jar`。在破解界面中,usercode随便输入,然后点击右边的SystemId按钮,将在SystemId中自动生成一串机器码。 + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image214.png) + +然后选择`Tools->RebuildKey`。 + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image215.png) + +点击激活按钮。将会看到有日志生成。 + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image216.png) + +选择`Tools->ReplaceJarFiles`。选择MyEclipse安装目录中的Plugin文件夹。 + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image217.png) + +操作`Tools->SaveProperities` + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image218.png) + +重新打开MyEclipse 2014 + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image219.png) + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image220.png) + +`MyEclipse->Subscription Informatioon`,显示激活。 + +![](https://raw.githubusercontent.com/jiangxincode/PicGo/master/aloys_build_manual/image221.png) + diff --git "a/_posts/others/2025-05-21-\346\231\272\350\203\275\351\251\276\351\251\266-\351\232\234\347\242\215\347\211\251\346\216\242\346\265\213.md" "b/_posts/others/2025-05-21-\346\231\272\350\203\275\351\251\276\351\251\266-\351\232\234\347\242\215\347\211\251\346\216\242\346\265\213.md" new file mode 100644 index 0000000..45ef647 --- /dev/null +++ "b/_posts/others/2025-05-21-\346\231\272\350\203\275\351\251\276\351\251\266-\351\232\234\347\242\215\347\211\251\346\216\242\346\265\213.md" @@ -0,0 +1,13 @@ +--- +title: "智能驾驶-障碍物探测" +categories: + - 智能驾驶 +tags: + - 障碍物探测 + - 智能驾驶 +toc: true +--- + +本文主要汇总了智能驾驶领域的一些技术和方案。 + +* 自动驾驶的眼睛:激光、毫米波雷达&摄像头三种技术产品之比较: diff --git "a/_posts/the-way-of-learning/2015-05-19-Android\345\255\246\344\271\240\344\271\213\350\267\257.md" "b/_posts/the-way-of-learning/2015-05-19-Android\345\255\246\344\271\240\344\271\213\350\267\257.md" new file mode 100644 index 0000000..8f3d7c6 --- /dev/null +++ "b/_posts/the-way-of-learning/2015-05-19-Android\345\255\246\344\271\240\344\271\213\350\267\257.md" @@ -0,0 +1,865 @@ +--- +title: "Andriod学习之路" +categories: + - the-way-of-learning +tags: + - 学习之路 + - Android +toc: true +--- + +本篇文章汇总了 Android 学习的相关资源,包括开发者文档、系统架构、性能优化、工具使用等内容,适合 Android 开发者参考。 + +## Android应用开发 + +站在Android应用开发者的角度,Android官方开发者网站是最权威的学习资料,包含了 Android 的所有 API 文档、开发者指南、设计规范等。 + +* Android开发者网站: +* Android开发者网站国内镜像(可以在国内不搭梯子直接访问): + +Android开发者网站包含了以下内容: + +* Essentials + * Platform: + * Release: + * Technology: + * Android Jetpack(AndroidX): +* Develop + * Android Studio: + * Core Areas + * Data and file storage overview: + * Notifications overview: + * App Shortcuts: + * Support different screen sizes: + * NDK: + * Android API reference: +* Google Play + * Meet Google Play's target API level requirement: +* Community + +* Control the system UI visibility: +* Enhance graphics with wide color content: + +* uses-sdk: +* uses-library: + +## AOSP定制 + +站在手机、车机制造商的角度,需要在开源Android项目基础上做定制,AOSP官网是最权威的学习资料,包含了 Android 的所有源代码、系统架构、开发者指南等。 + +* AOSP项目官网: +* AOSP项目官网国内镜像(可以在国内不搭梯子直接访问): + +* Core Topics + * Architecture overview: + +### AOSP源码在线查看 + +* Android Code Search: +* AOSPXRef: +* androidxref: +* Android Cross Reference: +* Android OS: +* Git repositories on android: + +### AOSP构建 + +* Feature launch flag: +* Codenames, Tags, and Build Numbers: +* 将AOSP源码导入到Android Studio进行查看: +* Android构建系统: +* Android soong build系统介绍: +* Repo实践指南: +* 编译系统入门篇-Android10.0编译系统(一): +* bp-编译-注解-二次编译? + +* ~~使用 Jack 编译 (AOSP 6.0 - 8.1): ~~ +* ~~Android 新一代编译 toolchain Jack & Jill 简介: ~~ +* ~~Google 又弃坑了,Jack+Jill vs. javac+dx: ~~ +* Android CPU, Compilers, D8 & R8: +* ProGuard and R8: Comparing Optimizers: + +### 系统架构 + +* Here comes Treble: A modular base for Android: +* GRF: +* 系统启动流程(init进程、Zygote进程、SystemServer): +* android关机流程 安卓关机流程: +* Android BOOTCLASSPATH详解: +* Android 虚拟化框架 (AVF) : +* Trusty TEE: +* Android OTA升级: +* Android系统架构-[Android取经之路]: +* Android Recovery升级原理: +* [Android 基础] -- Android 属性系统简介: + +### AI与MCP + +* Android 16 的 Appfunctions API ,应用级 MCP 支持为 AI 场景打通最后一层壁垒: + +### 网络 + +* 原生安卓WiFi信号去叹号去叉教程: + +### WMS + +* window insets: +* 支持多窗口模式: +* 使用画中画 (PIP) 功能添加视频: +* WMS转屏流程: +* Android WMS动画系统初探(一): +* WindowManagerService理解与深入(Android Q): +* android中Activity中的WindowManager与Window: +* 浅析onWindowsFocusChanged()方法: +* Window.setFlags 各种Flag笔记: +* Activity的创建(从Activity的角度理解IWindowSession): +* Android多点触控问题解决(windowEnableSplitTouch, splitMotionEvents): +* “一文读懂”系列:无处不在的WMS: + +### DMS + +* 【Android】VirtualDisplay创建流程及原理: + +### SurfaceFlinger + +* 图形架构: +* Winscope: +* Hardware acceleration: +* Android应用程序UI硬件加速渲染技术简要介绍和学习计划: +* Android 显示系统:SurfaceFlinger详解: +* 关于 UI 渲染,你需要了解什么? +* Android P 图形显示系统(一)硬件合成HWC2: +* Android P 图形显示系统(九) Android图形显示子系统概述: +* Android图形系统(十一)-Choreographer: +* Android 显示系统:SurfaceFlinger详解: + +### Input相关 + +* 输入: +* 图解 Android 事件分发机制: +* requestDisallowInterceptTouchEvent() 阻止父层的View截获touch事件(事件处理机制): +* View·InputEvent事件投递源码分析: +* Android 输入系统【1】通过 IMS 的创建理解 Android 的输入流程: +* input子系统详解: +* 图解Android - Android GUI 系统 (5) - Android的Event Input System: +* Android input专题: +* Android InputDispatch事件派发->选择目标窗口: +* 10.12 android输入系统_InputStage理论: +* Android Input 4: +* kOS(13):inputflinger—InputReader线程: +* Android Input (4) -- inputDispatcher到ViewRootImpl: +* 【Android休眠】之Android对PowerKey事件的处理(2)EventHub: +* Android_input系统分析EventHub::getevents: +* Linux/Android——Input系统之InputReader (七): +* Android触摸事件的传递(四-1)--输入系统-InputReader: +* Input源码解读——从"Show tabs"开始: +* Multi-Touch Input Parser: +* Android Input概念(getevent -ltr): + +### 输入法与输入法框架 + +* Create an input method: +* InputMethodManager: +* 处理输入法可见性: + +### 手势导航 + +* Ensure compatibility with gesture navigation: + +* Gesture Navigation: going edge-to-edge (I): +* Gesture Navigation: handling visual overlaps (II): +* Gesture Navigation: handling gesture conflicts (III): +* Gesture Navigation: immersive modes (IV): + +* 开启全面屏体验 | 手势导航 (一): +* 处理视觉冲突 | 手势导航 (二): +* 如何处理手势冲突 | 手势导航连载 (三): +* 沉浸模式 | 手势导航连载 (四) : + +* 深入分析 Android 系统返回手势的实现原理: + +* 添加预测性返回动画: +* Ensure compatibility with gesture navigation: +* Add support for the predictive back gesture: +* Android 13 返回导航大变更:返回键彻底废弃 + 可预见型返回手势: +* Android 14 之返回界面升级:预览目标界面 + 全新返回箭头: + +### Accessibility + +* Android AccessibilityService机制源码解析: +* ContentCaptureManager: + +### 电源管理 + +* Android电源键亮灭屏流程: +* Optimize for Doze and App Standby: +* App Standby Buckets: +* Doze模式简介: +* Android中的Doze模式: +* Android 8.1 Doze模式分析(一): +* Android 11(R) Power HAL AIDL简析 -- 基本接口: +* AOD 息屏是什么?背后技术原理是什么? +* AOD相关机制: +* 揭秘Android系统:掌握sys.powerctl,轻松提升设备续航与性能: + +### 生物识别 + +* Android8.0 Fingerprint指纹启动流程详细分析: +* FingerPrintAuth: + +### Battery相关 + +* Android 8.1 Battery系列(一) BatteryService分析: +* Android 8.1 Battery系列(二) BatteryStatsService分析: +* Android 8.1 Battery系列(三) PowerProfile和power_profile.xml: +* [Android Framework] 8.1 Battery系列(四) 电量还需多长时间充满时间计算: +* [Android Framework] 8.1 Battery系列(五) 电量预计可用多长时间计算: +* [Android Framework] 8.1 Battery系列(六) 上次充满电计算: +* Android 8.1 Battery系列(七) BatteryStatsHelper类和耗电量统计: + +* 通过 Battery Historian 工具分析 Android APP 耗电情况: +* AndroidO Battery saver省电助手实现原理: + +* battery-historian: + +### Alarm + +* How to read "adb shell dumpsys alarm" output: +* android后台执行定时任务(保活)&&使用AlarmManager的各种坑: +* Schedule alarms: + +### 剪贴板框架 + +* 复制和粘贴: + +### USB + +* USB 主机和配件概览: +* Android 开放配件 (AOA): +* Android Open Accessory 协议分析与开发: +* Android下USB Accessory的实现分析: + +* Android 对 USB 音频类的支持: +* How to enable USB "Audio Source" option on Android 9+? + +### AMS + +* 针对从后台启动 activity 的限制(BAL): +* Intent: +* PendingIntent: +* android Application Component研究之Service: +* PendingIntent重定向:一种针对安卓系统和流行App的通用提权方法——BlackHat EU 2021议题详解(上): +* PendingIntent重定向:一种针对安卓系统和流行App的通用提权方法——BlackHat EU 2021议题详解 (下): +* 对于android.intent.action.MAIN和android.intent.category.LAUNCHER的理解: +* Android DeepLink使用: + +### PMS + +* Android 权限的一些细节: + +### 多用户支持 + +* 多用户支持(HSUM): + +### Binder + +* 架构概览: +* 适用于 HAL 的 AIDL: +* Android Binder设计与实现 - 设计篇: +* Service/Binder/Messenger/AIDL: +《Android开发艺术探索》第2章、第9章 +* 深入Android HAL binder: +* HwBinder入门篇-Android10.0 HwBinder通信原理(一): +* HIDL详解-Android10.0 HwBinder通信原理(二): +* BpHwBinder: +* Android源码的Binder权限是如何控制? +* Android Binder异常传递流程分析: +* HIDL 简单介绍: +* 使用Android的HIDL+AIDL方式编写从HAL层到APP层的程序: +* AIDL interface between Java and C++: +* 理解 Android Binder 机制(三):Java层: + +### Service + +* About Background work: +* 深入源码解析Android中的Handler,Message,MessageQueue,Looper: +* Android使用JobService实现后台服务: +* Android 中设置线程优先级的正确方式(2种方法): +* 微信团队原创分享:Android版微信后台保活实战分享(进程保活篇): +* Android单应用开多进程与单进程跑多应用: +* Android中使用ContentProvider进行跨进程方法调用: +* Android 进程管理篇(五)-调度策略与优先级: +* Android性能优化之实现拥有Looper的线程--HandlerThread: + +### 稳定性 + +* AtomicFile: +* ResilientAtomicFile: +* Linux sync详解: +* ANDROID 设备写入文件,立即断电重启后,文件丢失,数据没有保存问题: +* 系统反复重启--RescueParty触发recovery记录: +* android-O RescueParty 介紹: +* Rescue Party: +* 理解Native Crash处理流程: +* ANR Broadcast TimeOut 超时判断: +* Android ANR:原理分析及解决办法: +* Android ANR 系列 2 :ANR 分析套路和关键 Log 介绍: +* Android 系统中的 WatchDog 详解: + +### 性能 + +* Overview of system tracing: +* Inspect CPU activity with CPU Profiler: +* Simpleperf: +* Simpleperf 理论与实践指南(总结篇): +* Android Systrace 基础知识: +* systrace.py环境配置: + +* Perfetto: +* PerfettoUI: + +* TraceView(已弃用): +* Android性能优化—TraceView的使用: +* atrace(android)/ptrace(linux)/BPF/eBPF + +* PerfDog性能狗: + +* Eight Ways Your Android App Can Leak Memory: +* Eight Ways Your Android App Can STOP Leaking Memory: +* Android性能优化: +* 使用meminfo分析Android单个进程内存信息: +* How do I discover memory usage of my application in Android? + +* Android adb bugreport工具分析和使用: +* ChkBugReport: +* loganalysis(Android日志分析工具): +* Android单条日志太长导致被截断的问题分析和解决: + +* Android内存优化(使用SparseArray和ArrayMap取代HashMap): +* Android-->iostat(显示CPU和IO系统负载情况): +* Android 15 适配之16K Page Size :为什么它会是最坑的一个适配点: + +### 动效 + +* 各种转场动画: +* Android:去掉系统自带的Activity跳转动画,跳转无动画,返回无动画: +* Android 属性动画 常用方法 与 插值器 Interpolator: +* Property Animation框架详解(一): +* Android动画之Interpolator(插值器): +* Android 路径绘制艺术——贝塞尔曲线: +* 三阶贝塞尔曲线Interpolator的应用: +* 在线演示: +* Android颜色透明度百分比和十六进制对应关系: +* Android 关于Path的FillType: +* Android中使用SVG实现炫酷动画效果: +* SVG 的 PathData 在 Android 中的使用: +* Android矢量图(一)--VectorDrawable基础: +* 在 Android 开发中使用 SVG: +* 手把手教学, android 使用 SVG: +* Android RemoteAnimation简述: + +### 控件 + +* ListView中getView的原理与解决多轮重复调用的方法: +* Android控件--ProgressBar: +* 拖放框架: +* Caching Bitmaps: +* 不同版本上 Bitmap 内存分配与回收原理对比: +* Android Drawable Resource学习(一)、Drawable Resource简介: +* How to convert multiple svgs to Android vector drawable in one shot: +* Drawable图像资源抽象类: +* 将Canvas转换为Drawable: +* Carson带你学Android:自定义View Canvas类使用教程: +* Android中Canvas绘图之PorterDuffXfermode使用及工作原理详解: +* HenCoder——给高级 Android 工程师的进阶手册: + +### Statsd + +* Statsd: +* android WMS中的Proto/ProtoLog/ProtoLogTool日志原理介绍: +* Android中使用 Protobuf: +* Language Guide (proto 2): +* Protocol Buffers: +* Protobuf语法指南(proto2): +* Android中的StatsLog: +* Statsd In android 9 (2): + +### 文本分类 + +* android.view.textclassifier: + +* Implement text classifier: + +* TextClassification – Part 1: +* TextClassification – Part 2: +* TextClassification – Part 3: + +* TensorFlow Lite: +* TensorFlow Lite 视频系列教程: +* MediaPipe: +* Google MediaPipe:设备端机器学习【完整解决方案】背后的技术实现: + +### App Links + +* 处理 Android 应用链接: + +### Sensor + +* Android 4.4 Kitkat Phone工作流程浅析(十一)__PSensor工作流程浅析: + +### Vibrator + +* 触感反馈: +* 在 Android 上实现触感反馈: + +### 媒体框架 + +* Media projection: +* 【Android】录屏功能实现——MediaProjection: +* HapticGenerator: + +### 蜂窝端距 + +* android 红外ConsumerIrService: +* 通过 RTT 确定 WLAN 位置信息: + +### 安全 + +* Permissions: +* Show a biometric authentication dialog: +* Autofill framework: +* Privacy Sandbox: +* SDK Runtime overview: +* Lockdown: +* Android FRP功能分析(Factory Reset Protection): +* Android 中的安全增强型 Linux: + +### 硬件 + +* LTPS屏幕和LTPO屏幕有什么区别? + +## Demo + +* platform-samples: +* input-samples: +* casa-android: +* Now in Android App: + +## Article + +* Google is preparing to let you run Linux apps on Android, just like Chrome OS: +* Google is making your next phone trade-in experience faster by changing Android: + +* MEMC功能详解: +* Android系统之仿sp智能指针实例(一百三十六): + +* I18n Translation Search: + +* androidcommunity: +* AndroidDevTools: + +* Material Design: + +* Graphics: +* Supporting Multiple Users: +* Android5.1--多用户模式: +* android11 DevicePolicyManager浅析: + +* Android R Framework流程分析: +* Fragment相关源码解析一——FragmentManagerImpl和BackStackRecord: +* Fragment相关源码解析二——生命周期: +* Fragment相关源码解析三——状态保存与恢复: + +* Android 编程与兼容性问题: 《Android Programming The Big Nerd Ranch Guide 3rd[Android编程权威指南(第3版)》 6.2 7.8 7.9 +* lntentfilter的匹配规则: 《Android开发艺术探索》 1.3 +* .nomedia: 《解析 Google Android SDK-智能手机开发范例手册》5.3 +* Android:MediaSession框架介绍: +* StrictMode: 《Android核心原理与系统应用高效开发》 9.2.3 + +* Handler内存泄漏详解及其解决方案: +* Android中Handler的使用: +* Android异步更新UI的几种方法: +* AsyncTaskLoader vs AsyncTask: +* 子线程调用Toast报Can't create handler inside thread that has not called Looper.prepare() 错误: +* Handler延迟消息执行机制,会阻塞吗? +* Handler、Thread、HandlerThread三者的区别: + +* Fragments:Pro Android 5[精通Android 3] Chapter 8 +* Android Fragment的用法(一): +* 为什么要用Fragment.setArguments(Bundle bundle)来传递参数: +* IllegalStateException: Can not perform this action after onSaveInstanceState with ViewPager: + +* Android | 打印堆栈: + +* 多屏幕多分辨率的支持: +* Android开发中dip,dpi,density,px等详解: +* 一种非常好用的Android屏幕适配: +* 最清晰的Android多屏幕适配方案: +* Android 刘海屏适配全攻略: + +* Android ActionBar完全解析,使用官方推荐的最佳导航栏(上): +* Android完美获取状态栏高度、标题栏高度、编辑区域高度的获取: +* menu中的item标签的showAsAction属性可以取哪些值: +* 什么是android.R.id.content? +* Android应用坐标系统全面详解: +* Android中visibility属性VISIBLE、INVISIBLE、GONE的区别: +* 如何在Root的手机上开启ViewServer,使得HierachyViewer能够连接: +* Formatting and Plurals: Android UI Fundamentals[Android UI基础教程](Formatting and Plurals) +* Android vector标签 PathData 画图超详解: +* 高斯模糊: +* 总结一下Android中主题(Theme)的正确玩法: +* Android中`@`和`?`区别以及`?attr/**`与`@style/**`等的区别: +* 用ColorFilter为安卓按钮增加效果: +* MaterialDesign之SearchView解锁 仿网易云音乐搜索: +* Android下setTextSize的正确使用姿势: +* Mipmap drawables for icons: +* Android “getActionBar()返回NullPointerException”问题分析: +* setEnabled() vs setClickable(), what is the difference? + +* Android核心分析: +* Android系统开篇: +* 详解 Android 通信: +* Android Application的使用及其生命周期: +* Android Partitions Explained: boot, system, recovery, data, cache & misc: +* Android for work总结(上): +* Android for work总结(下): +* android获取内置和外置SD卡路径: +* Android之Adapter用法总结: +* Android命令行/c语言/java设置获取系统属性的方法: +* Implementation vs API dependency: +* android怎样调用@hide和internal API: +* android下的SuppressLint与TargetApi: +* Android软键盘遮挡的四种解决方案: +* 全面的Android文件目录解析和获取方法(包含对6.0系统的说明): +* Android 那些年,处理getActivity()为null的日子: +* Android 汉字转拼音的多种实现方式: +* Android 修改阿拉伯语数字显示: +* Android Notification常见样式总结: +* Android 5.0 在优先模式下依然能收到微信的提醒是什么原理? +* Android之分屏模式解析(上): +* Android之分屏模式解析(下): +* Android中app进程ABI确定过程: +* Context, What Context? +* INSTALL_FAILED_TEST_ONLY: +* Android兼容性测试CTS Verifier-环境搭建、测试执行、结果分析: +* Why do most fields (class members) in Android tutorial start with `m`? +* Android多语言国际化适配(兼容7.0): +* android程序自动化生成apk的过程: +* Enable multidex for apps with over 64K methods: +* dex-method-counts: +* NDK编译脚本:Android.mk or CMakeLists.txt: +* 升级ndk报错:No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android: + +* What is the difference between system apps and privileged apps on Android? +* Android加密之文件级加密: +* Android属性allowBackup安全风险浅析: +* Android签名机制之---签名过程详解: +* android文件读写以及不同应用之间的文件读写操作: +* Android 将自己的应用改为系统应用: +* Android逆向之旅---解析编译之后的AndroidManifest文件格式: +* Android DEX安全攻防战: +* Android Dex文件格式(一): +* 目前最全面的Android安全工具清单: +* Open files using storage access framework: +* READ_EXTERNAL_STORAGE: +* FileProvider: +* Contacts Provider: + +* 了解一下,Android 10中的APEX: +* Android-APEX化之后如何替换对应的文件: + +* 安卓应用在各大应用市场上架方法整理: + +* Android8.0及以上,获取模拟器root权限: +* Android真机安装sqlite3的方法: +* 使用 Intel HAXM 为 Android 模拟器加速,媲美真机: +* [Android] 为Android安装BusyBox —— 完整的bash shell: +* MIUI ROM适配之旅第一天——认识Android手机: + +* C++之std::forward(完美转发)-CSDN博客: +* 详解 C++ 左值、右值、左值引用以及右值引用 - 斗战胜佛美猴王 - 博客园: +* Android动态日志ProtoLog简介和使用-CSDN博客: +* 一种Android应用耗电定位方案 背景 通常来说,app耗电相比于其他的性能问题(Crash,Anr)等,会受到比较少 - 掘金: +* 不当暖宝宝,Android 耗电检测之路背景介绍 耗电问题可能在市面上并不多见,因为大部分APP的使用时间是非常短暂的, - 掘金: +* HuolalaTech/batteryfinder-android: A detection tool of Android App power consumption: +* Android Vitals  |  App quality  |  Android Developers: +* [AOSP][Build]: Android 编译/构建基础 -- 'Hello AOSP' - 知乎: +* ThreadPoolExecutor 的参数含义及源码执行流程_new threadpoolexecutor-CSDN博客: +* 西瓜视频稳定性治理体系建设二:Raphael 原理及实践摘要 Raphael 是西瓜视频基础技术团队开发的一款 nati - 掘金: +* KwaiAppTeam/KOOM: KOOM is an OOM killer on mobile platform by Kwai.: +* 西瓜视频稳定性治理体系建设一:Tailor 原理及实践-CSDN博客: +* Code Review:提升代码质量与团队能力的利器_cr-mentor ai codereview mentor-CSDN博客: +* Shallow Size和Retained Size详解 - 简书: +* 捕获堆转储  |  Android Studio  |  Android Developers: +* Restrictions on starting activities from the background  |  App architecture  |  Android Developers: +* ADB架构解析-CSDN博客: +* 添加系统属性  |  Android Open Source Project: +* The Ultimate List of Best Software Architecture Books (2025) 📗: +* 最佳软件架构书籍终极清单 (2024) - PetterLiu - 博客园: +* ndk-stack  |  Android NDK  |  Android Developers: +* Inspect traces  |  Android Studio  |  Android Developers: +* C++之std::forward(完美转发)-CSDN博客: +* (1条消息) Android Framework学习——view的创建(1)_咻比嘟哗丶的博客-CSDN博客: +* Android窗口系统第四篇---Activity动画的设置过程 - 简书: +* (9条消息) Android Framework 窗口子系统 (08)窗口动画之动画系统框架_wangdsh的博客-CSDN博客_android 窗口动画: +* (5条消息) android:screenOrientation属性_潇湘夜雨的专栏-CSDN博客: +* Android基础-获取网络上的图片并显示 - CSDN博客: +* Android 扩大view点击范围 - Snow〃冰激凌 - 博客园: +* Android4.4中拒绝发送Intent.ACTION_MEDIA_MOUNTED扫描SD卡的广播 - CSDN博客: +* android java.lang.IllegalStateException: trying to requery an already closed cursor - CSDN博客: +* BakingApp/MediaFocusManager.java at bebb9cb2e52545d24bcf46bb45dd099dbfba545d · josemgu91/BakingApp: +* android Cursor的自动管理方式 - CSDN博客: +* Android中的Audio播放:竞争Audio之Audio Focus的应用 - CSDN博客: +* android获取设备唯一标识完美解决方案 - CSDN博客: +* Android O行为变更--隐式广播限制 - CSDN博客: +* Android开发技巧——设置系统状态栏颜色 - CSDN博客: +* android:uiOptions="splitActionBarWhenNarrow" 的作用 - CSDN博客: +* 解决Android Studio “Error:found an invalid color.... - 简书: +* actionbarsherlock - How to import slidingmenu on Android Studio? - Stack Overflow: +* 【Android系统】Android M ZenMode(禅模式)分析(1)_Chris_新浪博客: +* ="1610032952">Android APK快速签名—优化打包时间 - 网易云捕的个人空间 - 开源中国: +* android - Hiding of the Toast for long press on actionBar item - Stack Overflow: +* Android 设置应用的底部导航栏(虚拟按键)背景颜色 - github_2011的博客 - CSDN博客: +* android.os.BadParcelableException readParcelabl... - 简书: +* What is the difference between a dialog being dismissed or canceled in Android? - Stack Overflow: +* Android 流媒体系列(一) - 奥特曼超人的博客专栏 - CSDN博客: +* 多媒体音量控制setVolumeControlStream(int streamType) - CSDN博客: +* Context.managedQuery()和context.getContentResolver()获取Cursor关闭注意事项 - 秋楓 - 博客园: +* java - Trying to requery an already closed cursor - how to find this already closed cursor? - Stack Overflow: +* Cursor获取的时候有异常的处理 java.lang.IllegalStateException: trying to requery an already closed cursor - CSDN博客: +* java.lang.SecurityException: No active admin owned by uid 10065 for policy&&锁屏功能的实现 - CSDN博客: +* 【原创】关于Adapter的The content of the adapter has changed问题分析 - 陌上幽人 - 博客园: +* onFileUriExposed - 简书: +* Andorid tint属性及如何使用tint实现Selector效果 - 阿里云: +* Android targetSdkVersion你真的了解吗? - Mr.SSY的博客 - CSDN博客: +* 利用 Android Keystore系统 加密存储和解密敏感信息-解决网: +* Android保存私密信息-强大的keyStore(译) - wutongke - 简书: +* Framework基础:Android N 公共so库怎么定义呢? - 简书: +* 深入了解android平台的jni---使用宏定义精简JNI接口函数名称_流星_新浪博客: +* 读懂 Android 中的代码混淆 - 知乎: +* android - Why KeyPair.getPrivate().getEncoded() is null? - Stack Overflow: +* ="1610032952">Could not open Selected VM debug port (8700) | 学步园: +* (11条消息)关于View的ScrollTo, getScrollX 和 getScrollY_移动开发_持剑-CSDN博客: +* (11条消息)android view的生命周期_移动开发_学无止境~-CSDN博客: +* Android类加载器ClassLoader - 简书: +* class与dex文件 - 简书: +* Tint和ColorFilter - 简书: +* Android 遮罩层效果_移动开发_DennisRuan(米粒橙)-CSDN博客: +* 使用PorterDuff解决clipPath无法抗锯齿问题 - 简书: +* [Android] Activity 和 SurfaceView 的生命周期 - 技术刘: +* android:textAlignment 参数解释_xgxmwang的专栏-CSDN博客: +* Android 各种默认字体样式设置_jianjunhuang's blog-CSDN博客: +* Path类的最全面详解 - 自定义View应用系列 - 简书: +* (11条消息)ScrollView滚动到指定位置 (平滑 慢速 动画)_移动开发_丿灬安之若死-CSDN博客: +* FontMetrics - 简书: +* 广色域照片闪亮登场 Android: 开发者需知两三事 - 知乎: +* ="1610032952">Color Space: +* 色域标准:sRGB Adobe RGB DCI P3 Display P3 - 简书: +* Android Library和Android APP、Java Library的区别 - 印说十二越 - 博客园: +* Shape Shifter: +* Android setSystemUiVisibility 动态更改状态栏 - 简书: +* Android 系统状态栏沉浸式/透明化完整解决方案 - 简书: +* android - What Is The Difference Between -anydpi And -nodpi? - Stack Overflow: +* Drawable图像资源抽象类 - 简书: +* 共享元素动画实现的酷炫音乐播放器效果 - 简书: +* android - FEATURE_ACTIVITY_TRANSITIONS vs. FEATURE_CONTENT_TRANSITIONS - Stack Overflow: +* (5条消息) Android上gdb+gdbserver调试初体验_beyond702的专栏-CSDN博客: +* 自上而下解读Android显示流程(上) - 知乎: +* (5条消息) Android9.0 Activity启动流程分析(一)_Cai Yu的博客-CSDN博客: +* zhaobozhen/LibChecker: An app to view libraries used in apps in your device.: +* (1条消息) Android 惯用工作命令mmm,mm,m,croot,cgrep,jgrep,resgrep,godir,快速查找 find grep合并使用_面向未来-CSDN博客_cgrep: +* android动画的ZAdjustment - 独钓寒江雪kq - 博客园: +* 为何大厂APP如微信、支付宝、淘宝、手Q等只适配了armeabi-v7a/armeabi?: +* (10条消息) android下运行时动态链接dlopen()和dlsym()的实现_犀牛划水-CSDN博客: +* (10条消息) [Andoid][踩坑]CTS 11_r3开始出现的testBootClassPathAndSystemServerClasspath_nonDuplicateClasses FAIL问题分析_Ryan ZHENG的专栏-CSDN博客: +* (10条消息) Android类加载之PathClassLoader和DexClassLoader_stven_king的专栏-CSDN博客: +* 通过jarjar.jar来替换jar包名的详细介绍 - Andye - 博客园: +* android 9指纹认证_Android指纹认证教程_danpincheng0204的博客-CSDN博客: +* Android自动化测试之Monkey命令使用及monkey脚本编写_Mango先生的博客-CSDN博客_monkey脚本: +* Android面试官装逼失败之:Activity的启动模式 - 简书: +* android 关机流程详细分析_xiongtiancheng的博客-CSDN博客_android 关机流程: +* android 静默重启 QUIESCENT REBOOT_archie_7的博客-CSDN博客: +* (7条消息) Android Q 色彩(颜色)模式解析(一)_夕月风-CSDN博客: +* 图解Android 系列 - 随笔分类 - 漫天尘沙 - 博客园: +* Android 触摸事件分发机制 - 齐欢的博客: +* AVRCP_百度百科: +* android bt蓝牙耳机AVRCP按键分析-CSDN博客: +* 使用 Logcat 查看日志  |  Android Studio  |  Android Developers: +* Android新增API之AudioEffect中文API与应用实例-CSDN博客: +* user-interface-samples/DragAndDrop at main · android/user-interface-samples: +* Dalvik 和 ART 有什么区别?深扒 Android 虚拟机发展史,真相却出乎意料! - 知乎: + +## Android相关的知识 + +* 从圆角到圆角: +* J 的艺术,R 的艺术: +* HDR详解 - 什么是HDR? + +## Gradle/Gradle Wrapper/Android Plugin for Gradle + +* Gradle: +* Gradle User Guide: +* Chapter 6. The Gradle Wrapper: +* Getting Started With Gradle: +* Android Gradle原理解释: +* Android Studio点击Run背后发生了什么? +* Android Studio Library 模块中 Native 代码进行 debug 的一些坑: +* Android gradle打包涉及task源码解析(一)准备工作: + +* 彻底搞懂Gradle、Gradle Wrapper与Android Plugin for Gradle的区别和联系: +* 通过设置JDK解决存在多个Gradle后台进程的问题: +* Gradle Could not find method leftShift() for arguments: + +* Gradle学习系列之一——Gradle快速入门: +* gradle使用文档: +* Gradle修改本地仓库的位置: +* gradle cache目录(.gradle)剖析: + +* (老)Gradle Plugin User Guide: +* 加速Android Studio/Gradle构建: +* 用Gradle 构建你的android程序: +* 用Gradle 构建你的android程序-依赖管理篇: + +* Android Gradle and the curious case of invisible dependency: +* Gradle的安装及换源: + +## Android Studio + +* JetBrains Plugins Repository: +* Android Studio常用插件汇总: +* 在 AndroidStudio 工程点击 Run 按钮, 实际上做了什么操作呢? + +* 设置应用 ID: +* (新)配置构建: +* 创建和管理虚拟设备: +* 对您的应用进行版本控制: +* dumpsys: +* Debug Your layout with Layout Inspector and Layout Validation: +* Configure Android Studio: +* Configure hardware acceleration for the Android Emulator: + +* Android Studio移动鼠标显示悬浮提示的设置方法: +* ANDROID STUDIO详细教程汇总: +* Android Studio系列教程一--下载与安装: +* Android Studio系列教程二--基本设置与运行: +* Android Studio系列教程三--快捷键: +* Android Studio系列教程四--Gradle基础: +* ANDROID STUDIO系列教程五--GRADLE命令详解与导入第三方包: +* ANDROID STUDIO系列教程六--GRADLE多渠道打包: +* Android Studio优化技巧: +* Android Studio相关目录解析: +* ERROR Android emulator gets killed: + +## Libraries + +* Dagger2 使用: +* butterknife: +* xUtils3: +* SlidingMenu: +* ViewPagerIndicator: +* Android-Universal-Image-Loader: +* hugo: +* 极光推送: +* 移动服务SDK: +* Retrofit(A type-safe HTTP client for Android and Java): + +## Tools + +* busybox: +* Test DPC APK Download for Android: +* fastlane screenshots for Android: +* Android 应用开发调试利器——开发助手,数十倍效率提升: +* 奇兔刷机: +* dexcount-gradle-plugin: +* leakcanary: +* LibChecker: + +## SVGA + +* SVGA: +* SVGAPlayer-Android: + +## Lottie + +* Lottie: +* Lottie - 让复杂动画如此简单: + +## Flutter + +* Flutter: +* Flutter中文网: + +## Android实体机与模拟器 + +* 了解 Google Pixel 手机何时会收到软件更新: +* Magisk(安卓获取 ROOT 的主流方式): +* Genymotion: + +## ADB + +* awesome-adb: +* ADB: +* 解决adb push时出现的"Read-only file system"问题: +* android adb push 与 adb install的比较(两种安装APK的方法): +* Android 8.0 adb shell dumpsys activity activities | findstr mFocusedActivity 获取当前的 activity 显示空的: +* Android adb shell svc 知识详解: +* Android 系统内的守护进程 - core类中的服务 (1) : adbd: + +## App Development Platform + +* Firebase: +* Plugin Fierbase Services was not installed:Cannot download...: +* Does Firebase Work in China?: +* Supabase: +* Parse: +* 友盟: +* bugly: +* 蒲公英: + +## XMPP + +* + +* rfc3920: +* rfc3920翻译: + +* Open Realtime: +* smack: + +* 环信即时通讯云: +* Android之基于XMPP协议即时通讯软件(一): +* Android之基于XMPP协议即时通讯软件(二): +* Android之基于XMPP协议即时通讯软件(三): + +* 基于xmpp openfire smack开发之openfire介绍和部署[1]: +* 基于xmpp openfire smack开发之smack类库介绍和使用[2]: +* 基于xmpp openfire smack开发之Android客户端开发[3]: +* 基于xmpp openfire smack开发之Android消息推送技术原理分析和实践[4]: + +* 基于XMPP协议的Android聊天IM客户端: + +* Openfire 的安装和配置: +* Jabber 协议 概述: +* Smack编写jabber客户端: +* Subscriptions 运行机制: +* XMPP协议分析-原理篇: + +## Player + +* Universal Android Music Player: +* 百度音视频处理: +* ApolloMod: +* android-visualizer: +* Vitamio 4.2.2版本之前的源码: +* Vitamio 5.0.0版本之后的源码: +* 使用Vitamio打造自己的Android万能播放器: + +## Android使用 + +* +* 查找设备: +* 防盗保护: + +## 那些被废弃的内容 + +* ~~Support Library: ~~ +* ~~Xamarin: ~~ diff --git "a/_posts/the-way-of-learning/2015-05-19-Basic\345\255\246\344\271\240\344\271\213\350\267\257.md" "b/_posts/the-way-of-learning/2015-05-19-Basic\345\255\246\344\271\240\344\271\213\350\267\257.md" new file mode 100644 index 0000000..4f691c9 --- /dev/null +++ "b/_posts/the-way-of-learning/2015-05-19-Basic\345\255\246\344\271\240\344\271\213\350\267\257.md" @@ -0,0 +1,43 @@ +--- +title: "Basic学习之路" +categories: + - the-way-of-learning +tags: + - 学习之路 + - Basic +toc: true +--- + +本篇文章汇总了 Basic 语言学习的相关资源,包括 Visual Basic、FreeBASIC 等语言的学习路径和参考资料,适合对 Basic 感兴趣的开发者参考。 + +* BASIC: + +## Visual Basic/Visual Basic .NET + +* Developing Automated Tests Using NUnit and VB.NET: +* Comparison of Visual Basic and Visual Basic .NET: + +## FreeBASIC + +* FreeBASIC: +* freeBASIC: +* ~~FBIde - editor for FreeBASIC: ~~ +* ~~FbEdit FreeBASIC code editor: ~~ +* FBWiki: + +## ~~QuickBASIC/QBasic~~ + +* ~~QuickBASIC: ~~ +* ~~QBasic: ~~ +* ~~QBasic讨论区: ~~ +* ~~Features of QuickBasic: ~~ +* ~~文章分类 - Quick Basic: ~~ +* ~~Quick Basic 常用的语句: ~~ +* ~~All about QBasic and QuickBasic: ~~ + +## Other + +* QB64: +* KBasic(Basic For Qt): +* BASIC-256: +* PowerBASIC: diff --git "a/_posts/the-way-of-learning/2015-05-19-CSharp\345\255\246\344\271\240\344\271\213\350\267\257.md" "b/_posts/the-way-of-learning/2015-05-19-CSharp\345\255\246\344\271\240\344\271\213\350\267\257.md" new file mode 100644 index 0000000..07e4c71 --- /dev/null +++ "b/_posts/the-way-of-learning/2015-05-19-CSharp\345\255\246\344\271\240\344\271\213\350\267\257.md" @@ -0,0 +1,26 @@ +--- +title: "C#学习之路" +categories: + - the-way-of-learning +tags: + - 学习之路 + - C# +toc: true +--- + +本篇文章汇总了 C# 学习的相关资源,包括语言基础、.NET 框架、WPF、ASP.NET 等技术的学习路径和参考资料,适合 C# 开发者参考。 + +* Mono: +* MonoDevelop: +* ~~SharpDevelop: ~~ +* Emonic: + +## .NET + +* NuGet: + +## 其它 + +* Windows Forms: +* WPF: +* WCF: diff --git "a/_posts/the-way-of-learning/2015-05-19-C\344\270\216C++\345\255\246\344\271\240\344\271\213\350\267\257.md" "b/_posts/the-way-of-learning/2015-05-19-C\344\270\216C++\345\255\246\344\271\240\344\271\213\350\267\257.md" new file mode 100644 index 0000000..b902337 --- /dev/null +++ "b/_posts/the-way-of-learning/2015-05-19-C\344\270\216C++\345\255\246\344\271\240\344\271\213\350\267\257.md" @@ -0,0 +1,461 @@ +--- +title: "C与C++学习之路" +categories: + - the-way-of-learning +tags: + - 学习之路 + - C + - C++ +toc: true +--- + +本篇文章汇总了 C 与 C++ 学习的相关资源,包括语言基础、标准库、跨平台开发、性能优化等内容,适合系统级开发者参考。 + +## Reference + +* +* +* News, Status & Discussion about Standard C++: +* C++ compiler support: +* C standard library: +* C++ Standard Library: + +* comp.lang.c Frequently Asked Questions: +* C 语言常见问题集: +* The C++ Standard Library - A Tutorial and Reference: + +## Libraries + +* boost: +* Ncurses: +* OGLplus: +* POSIX Threads for Win32: +* SWIG: +* Borland Graphics Interface (BGI) for Windows: +* Win32 BGI implementation(OpenBGI): +* EasyX Library for C++: +* EGE(Easy Graphics Engine): +* CLucene - a C++ search engine: +* Translate STL 2 C Language: +* Borland-style CONIO: +* DISLIN: +* ICU - International Components for Unicode(ICU4C/ICU4J): +* libevent: +* ZeroMQ: +* List of numerical libraries: +* Standard Template Library Programmer's Guide: +* libiconv: +* GSL - GNU Scientific Library: + +* Piologie: +* cryptlib: +* RSAEuro: +* RSARef: + +### GMP + +GMP大数库是GNU项目的一部分,诞生于1991年。作为一个任意精度的大整数运算库,它包括了任意精度的整数、浮点数的各种基本运算操作。它是一个C语言的库,但是官方提供了C++的包装类,主要的应用方向是密码学、网络安全、代数系统、计算科学等。GMP库的运行速度非常快,它的官方网站上称自己为地球上最快的大数库,但是GMP库所提供的只是数学运算功能,并没有密码学相关的高级功能。 + +* GNU MP(GMP): +* GMP Manual: + +### Miracl + +Miracl库是Shamus Software Ltd开发的一个大数库,它的使用许可针对教育科学研究或者非商业目的的应用是免费的。它是一个C语言的库,同时提供了几个较为简单的c++包装类。在功能上它不但提供了高精度的大整数和分数的各种数学运算操作而且提供了很多密码学算法中的功能模块,如SHA、AES、DSA等中的一些底层操作。最为特别的是它还提供了很多椭圆曲线密码体制中的底层功能模块。由于Miracl库的内部实现采用了很多的汇编代码,故运行速度也非常快。 + +* MIRACL: +* miracl user manual: + +### Crypto++ + +Crypto++库是一个开源项目。由于它是一个纯C++实现的库,所以应用非常的方便,库的结构清晰,文档也很健全。Crypto++库提供了很多密码学算法的实现。 + +* Crypto++: + +### OpenSSL + +OpenSSL是一个开放源代码的实现了SSL及相关加密技术的软件包,由加拿大的Eric Yang等发起编写的。它可以实现消息摘要、文件的加密和解密、数字证书、数字签名和随机数字等。 + +* OpenSSL: +* BoringSSL: +* LibreSSL: +* OpenSSL 在windows系统下的编译全解: +* 使用OpenSSL实现X25519秘钥协商功能: + +### libcstl + +* libcstl: +* The libcstl Library User Guide: + +## Windows C++ + +* Visual Studio: +* Visual Studio Locator: +* VISUAL ASSIST: +* +* MSDN Magazine Issues and Downloads: +* Spec Explorer 2010 Visual Studio Power Tool: +* ~~Microsoft Visual Studio 2010 Visualization and Modeling Feature Pack: ~~ +* ~~Windows 8 SDK: Include files in "shared", "um", and "winrt" directories. What's the difference? ~~ + +### Visual C++参考 + +* 通过命令行使用 Microsoft C++ 工具集: +* Understanding Custom Build Steps and Build Events: +* Precompiled header files: +* LINK 输入文件(lib,def,pdf等): +* 为 Visual Studio C++ 项目创建的文件类型: +* /PDB(使用程序数据库): +* /std (Specify Language Standard Version): +* CRT Library Features: +* UCRT 按字母顺序排列的函数参考: +* Security Features in the CRT: +* Importing and Exporting: +* DUMPBIN Reference: +* 自变量传递和命名约定(__cdecl/__stdcall/__fastcall): + +* C/C++ Compiler and build tools errors and warnings: + * C2360(initialization of 'identifier' is skipped by 'case' label) + * C2760(syntax error : expected 'name1' not 'name2'): + * C4251('identifier' : class 'type' needs to have dll-interface to be used by clients of class 'type2') + * Exporting classes containing std:: objects (vector, map, etc) from a dll: +* 链接器工具错误和警告 (LNKxxxx): + * LNK2026: 模块对于 SAFESEH 映像不安全 + * LNK4098: 默认库“library”与其他库的使用冲突;请使用 /NODEFAULTLIB:library + * LNK4042(object specified more than once; extras ignored) + * Visual Studio 2010's strange “warning LNK4042”: + * Visual Studio 2010 & 2008 can't handle source files with identical names in different folders?: + +* Windows 控制台应用: + +* 框架选项概述: + +* 使用 Win32 API 的桌面 Windows 应用入门: +* 进程间通信: +* windows-data-types: +* Windows API 集: +* windows.foundation.h: +* shellapi.h: +* Strsafe.h: +* winbase.h: +* libloaderapi.h: +* processthreadsapi.h: +* synchapi.h: +* debugapi.h: +* I/O Completion Ports: +* CNG DPAPI: + +* ~~通用 Windows 平台 (UWP) - 入门: ~~ +* ~~C++/WinRT: ~~ +* ~~选择哪一种网络技术?~~ +* ~~Turning to the past to power Windows’ future: An in-depth look at WinRT: ~~ + +* C++17 Feature Removals And Deprecation: + +* atexit和onexit的主要用法和区别: +* _onexit, _onexit_m: + +* VC 运行时库 /MD、/MDd 和 /MT、/MTd: +* #error Please use the /MD switch for _AFXDLL builds: +* LINK : fatal error LNK1104: 无法打开文件“LIBCD.lib”: +* error C4995: “wcscpy”: 名称被标记为 #pragma deprecated: +* VC 常用数据类型总结 俩篇: +* 预编译头文件解析: +* VC++6.0应用程序错误,0x5003eaed: +* VC++,掀起你的盖头来——谈VC++对象模型: +* Visual C++ 入门精解: +* Useful enhancements for Visual Studio .NET: +* Windows动态库与Linux共享对象比较: +* ODBC中的FX/Bulk RFX数据交换机制分析: +* VC++6.0编译时总死机,安装vcsp6补丁: +* MSVC vs. MinGW 之 (lib,dll,def,obj,exe) vs (a,dll,def,o,exe): +* visual studio 2008中头文件和库文件路径设置: +* VS2005调试时出现无法找到调试信息解决方案: +* VS2017中设置程序以管理员身份运行: +* VS2017应用在XP系统上运行: +* 在 VS2017 使用所有旧版本的平台工具集: +* Visual Studio 如何屏蔽告警: +* C++:在程序中获取全球唯一标识号(GUID或UUID): +* MSBulid、IncrediBuild命令行接口实现自动化编译: +* 请问如何修改某个exe文件的版本信息,包括CompanyName、ProductName等?: +* Visual Studio 2017 UTF-8 无 BOM 一站式解决办法: + +### 需要整理的 + +* DEBUG和RELEASE 版本差异及调试相关问题: +* Debug和Release有什么区别: +* 关于VS中区分debug与release,32位与64位编译的宏定义: +* VC++中debug跟release编译模式的区别总结: +* _DEBUG vs NDEBUG: + +## Linux C++ + +* GNU C Library(glibc): +* C POSIX library: +* POSIX.1-2017: +* SUSv4(Single UNIX® Specification, Version 4): + +* Linux 常用 C 函数参考手册: + +* GCC, the GNU Compiler Collection: +* The LLVM Compiler Infrastructure: +* clang: a C language family frontend for LLVM: +* 简述 LLVM 与 Clang 及其关系: + +* GNU GCC手册-1: +* gcc的基本用法: +* Comparison of Diagnostics between GCC and Clang: +* gcc和g++的区别: + +* GNU build system: +* GNU_Libtool: +* Autotools Mythbuster: +* Autoconf: +* Automake: + +* Linux内核中无名管道pipe和有名管道fifo的分析: +* 应用 Valgrind 发现 Linux 程序的内存问题: +* 如何在linux下检测内存泄漏: +* Linux下的时间概念(主要是其中的计时器的使用): +* Linux 桌面应用技术专题: +* Linux系统调用列表: +* Linux 套接字编程中的 5 个隐患: +* Linux静态/动态链接库的创建和使用: + +## Windows/Linux剪不断理还乱 + +* MinGW-w64(推荐): +* MinGW-w64下载地址: +* What is difference between sjlj vs dwarf vs seh? +* MinGW: Minimalist GNU for Windows Files, A native Windows port of the GNU Compiler Collection (GCC): +* cygwin: +* MSYS2: +* ~~GnuWin: ~~ +* ~~UnxUtils: ~~ +* 对话 UNIX: 在 Windows 上使用 Cygwin: +* GTK+与MFC不完全对比: +* 将 MFC 应用程序移植到 Linux: +* Enabling string conversion functions in MinGW: +* TDM-GCC: + +## C++近场通讯开发 + +* Win32蓝牙开发: + +* Native Wifi: +* Wi-Fi Direct: +* Wi-Fi Direct Legacy Connection C++ WRL Demo: + +* WiFi direct 的相关特点: +* NATIVE WIFI HOSTED NETWORK VS WIFI DIRECT LEGACY SOFT AP: + +## Dev-C++ + +* Dev-C++: + +## CMake + +* CMake: +* Mastering CMake: A Cross-Platform Build System: +* cmakeconverter: +* How to support both vcxproj to cmake on a project? + +## XMake + +* XMake: + +## GDB + +* GDB: The GNU Project Debugger: +* LINUX下GDB调试: + +## 包管理器 + +* Does C++ need a universal package manager? +* vcpkg(C++ Library Manager for Windows, Linux, and MacOS): +* vcpkg.io: +* 解决vcpkg下载缓慢的问题: +* Conan(the C / C++ Package Manager for Developers): +* Buckaroo: +* cget: +* Conda: +* CPM(Deprcated): +* CPPAN: +* Hunter: + +## 一点经验教训 + +C/C++由于历史原因,编译,构建难度相对于目前主流的其他语言如Java、Python、Go等要大的多,不同操作系统平台,不同编译工具差别很大,且没有一个完美的包管理工具,为了少花时间到环境配置上,推荐选型如下: + +* 如果是Windows平台,且基本没有依赖,建议配套CLION+CMAKE+GCC(MinGW); +* 如果是Windows平台,且依赖较多,比如Gtest,OpenSSL,建议配套VS+VCPKGS; +* 如果是Linux平台,CLION+CMAKE+GCC + +## Glib/GTK+/Gnome + +* GLib Reference Manual: +* GLIB 常用数据结构介绍: +* glib库简介: +* glib库异步队列和线程池代码分析: + +* GTK+: +* GTK文档: +* GTK 4 Tutorial for beginners: +* 在gtk+程序中显示中文说明: +* 使用 GLib 工具集管理 C 数据帖子发表于: + +* GNOME 开发者中心: +* ~~GNOME Older guides and API references: ~~ +* Project Ridley: +* libgnome and libgnomeui Must Die! + +* Vala: +* Anjuta(不推荐): +* Glade(不推荐): + +### GTK中的delete_event和destroy + +* delete_event 事件一般由用户或者说用户通过窗口管理器产生,即点击窗口右上角的退出按钮。假如不做任何特殊处理,窗口管理器会自动产生destroy信号;如果我们自 定义了处理delete_event事件的回调函数,是否产生destroy信号就和函数的返回值有关,如果是FALSE就产生,反之则没有效果。 +* destroy,除了可以由delete_event事件产生之外,还可以通过gtk_widget_destroy函数与其它信号发生交换。同样,如果不加指定,默认结果是关闭所指向的窗口但并不结束进程。如果我们希望主窗口和进程一起关闭,必须使用gtk_main_quit()。 + +## QT + +* +* Qter开源社区: +* qtcn: + +## wxWidgets + +* wxWidgets: + +## Duilib + +* Duilib: + +* DUILibxml配置: +* DUiLib 源码分析——第一篇UIManager: +* DUiLib 源码分析——第二篇UIBase: + +## Doxygen + +* +* 学习用 doxygen 生成源码文档: +* 使用doxygen为C/C++程序生成中文文档(上): +* Doxygen + Graphviz + Htmlhelp, 成为文档好手: + +## Unit Test + +* Google Test: +* 玩转Google开源C++单元测试框架Google Test系列(gtest)(总): +* Code Blocks+gtest环境配置: + +* CppUnit(C++ port of JUnit): +* 使用CppUnit(Windows): +* cppunit helloworld详尽篇(Linux): +* 开放源码 C/C++ 单元测试工具,第 3 部分: 了解 CppTest: +* CppUnit源码解读: + +* C Unit Testing Framework: +* Parasoft C/C++test: + +## 日志 + +* log4c: +* clog: +* Log library for C++: +* log4cplus: +* log4cxx: + +* glog: +* C++日志操作开源函数库之Google-glog: +* Google glog 使用: +* 关于glog使用中遇到的问题: +* 在Windows上编译、应用glog: + +## MPI + +* Open MPI(Open Source High Performance Computing): + +## XML + +* TinyXML: +* tinyxml2: +* Libxml2: +* RapidXml: + +## JSON + +* jsoncpp: +* nlohmann/json(JSON for Modern C++): + +## 其它配置格式 + +* libconfig: + +## Ctags + +* + +## CLIPS + + CLIPS is a productive development and delivery expert system tool which provides a complete environment for the construction of rule and/or object based expert systems. + +* + +## Xapian + + Xapian is an Open Source Search Engine Library, released under the GPL v2+. It's written in C++, with bindings to allow use from Perl, Python, PHP, Java, Tcl, C#, Ruby, Lua, Erlang and Node.js (so far!) + +* + +## 标准C/C++语法知识点 + +* C结构体之位域(位段): +* C++ NULL与nullptr的区别: +* nothrow: +* C++中的delete和delete[]的区别: +* 对C++中map的四种插入方式的比较及同值覆盖问题: + +## Others + +* C++代码质量度量工具大阅兵: + +* The International Obfuscated C Code Contest: + +* C++基础----C++ 布尔类型(bool)及BOOL和bool的区别: +* size_t 类型: +* C++命名空间: +* c++对象的生命周期: +* C语言内存分配方式: +* C++ 中 # 和 ## 和 #@ 的使用: +* 容器元素是const元素时的错误: +* Does C++11 allow vector? +* Comparing Two High-Performance I/O Design Patterns: +* 使您的软件运行起来——防止缓冲区溢出: +* 屏幕输出VS文件输出: +* 亲密接触C可变参数函数 : +* TCP连接中的TIME_WAIT状态: +* see also: 《TCP-IP详解卷1:协议》第十八章 +* TCP可靠传输及流量控制系列六:TCP连接中的TIME_WAIT状态: +* C++项目中的extern "C" {}: +* 由函数clock想到的: +* 理解 pkg-config 工具: +* C/C++中的abort、atexit、exit和_Exit: +* setjmp()/longjmp()的使用方法和场合: +* C++ 工程实践(7):iostream 的用途与局限: +* 指针的大小: +* C/C++指针原理: +* C++ STL轻松导学: +* undefined reference问题总结: +* C++ Rocks!: +* 减少C++代码编译时间的方法: +* C++编译错误cannot have cv-qualifier: +* 在 console mode 中使用 C/C++ 编译器: +* 基于对象和面向对象的区别: +* const 不再迷茫: +* C语言中随机数相关问题: +* VS Code C++ 代码格式化方法(clang-format): +* C/C++大数库简介: +* cdecl: +* Return-into-libc 攻击及其防御: +* C++资源之不完全导引: C++资源之不完全导引.docx diff --git "a/_posts/the-way-of-learning/2015-05-19-DB\345\255\246\344\271\240\344\271\213\350\267\257.md" "b/_posts/the-way-of-learning/2015-05-19-DB\345\255\246\344\271\240\344\271\213\350\267\257.md" new file mode 100644 index 0000000..bb1bb48 --- /dev/null +++ "b/_posts/the-way-of-learning/2015-05-19-DB\345\255\246\344\271\240\344\271\213\350\267\257.md" @@ -0,0 +1,406 @@ +--- +title: "Database学习之路" +categories: + - the-way-of-learning +tags: + - 学习之路 + - Database +toc: true +--- + +本篇文章汇总了数据库学习的相关资源,包括 SQL、MySQL、SQL Server、Oracle 等数据库的学习路径和参考资料,适合数据库开发者参考。 + +* + +* Tech On The Net: +* Readings in Database Systems (commonly known as the "Red Book"): + +* SQL Pretty Printer formatter: +* ApexSQL: +* RazorSQL: +* AquaFold(Aqua Data Studio): +* Withdata: +* HeidiSQL: +* erwin: +* DBeaver: +* Navicat: +* DataGrip: +* EMS Database Management Solutions: +* 数据库比较工具DBCompareTool 0.3.0 preview 发布: +* DB Compare(SQL Server): +* DBComparer(SQL Server): +* SQL Delta: +* NoSQL数据库笔谈: +* 存储过程使用建议: + +* Java 6 RowSet 使用完全剖析: +* Hibernate与autoCommit: + +## MySQL + +* +* +* Workbench: +* SQLyog: +* ~~MySQL-Front: ~~ +* 5款常用mysql slow log分析工具的比较: +* MYSQL常见错误及其解决方式: +* MySQL默认数据库: +* Should I use field 'datetime' or 'timestamp'? +* 如何提高MySql的安全性?: +* 如何写出高质量、高性能的MySQL查询: +* Oracle与MySQL字符串拼接: +* 关于InnoDB索引长度限制的tips: +* Using Innodb_large_prefix to Avoid ERROR 1071: +* Mysql异常'SET OPTION SQL_SELECT_LIMIT=DEFAULT': +* MySQL无法重启问题解决Warning: World-writable config file ‘/etc/my.cnf’ is ignored: +* 慎用lower_case_table_names来实现表名不区分大小写: +* Can't execute a MySQL stored procedure from Java: +* 『浅入浅出』MySQL 和 InnoDB: +* MySQL 加锁处理分析: +* MySQL中的配置参数interactive_timeout和wait_timeout(可能导致过多sleep进程的两个参数): +* MySQL令人头疼的Aborted告警案例分析: +* Spring 事务 readOnly 到底是怎么回事? +* 解决MySQL查询不区分大小写: + +## SQL Server + +* SQL Server: +* AdventureWorks sample databases: +* Transact-SQL 参考: (v=sql.105).aspx +* TSQLT: +* sqlcmd 实用工具: +* SQL SERVER 2005中的Schema(架构)概念详解: +* Sql Server 2005中的架构(Schema)、用户(User)、角色(Role)和登录(Login)(一): +* Sql Server 2005中的架构(Schema)、用户(User)、角色(Role)和登录(Login)(二): +* Sql Server 2005中的架构(Schema)、用户(User)、角色(Role)和登录(Login)(三): +* 谓词和运算符: +* Tempdb数据库详细介绍: +* MS SQL专用管理员连接DAC: +* 用于数据库管理员的诊断连接: +* 解决sqlserver 2008 sqlcmd无法登陆: +* 关于SQLSERVER的全文目录跟全文索引的区别: +* 在SQL Server中如何获得刚插入一条新记录的自动ID号: +* SQL Server中如何取得刚插入的标识值: +* Join操作基本:外连接、自然连接、内连接: +* SQL 中 where 1=1 和 1=0的 作用: +* left join on 和where条件的放置: + +### SQL Server不同版本的驱动 + +* msbase.jar、mssqlserver.jar、msutil.jar 在连接数据时候需要手动导入驱动包,即手动导入class.forName(驱动名称),支持sql2000 +* sqljdbc.jar 应用程序必须首先按class.forName(驱动名称)注册驱动程序。Jdk1.6以上版本不推荐使用.支持sql2005,sql2008 +* sqljdbc4.jar DriverManager.getConnection方法得到了增强,可自动加载 JDBC Driver。因此使用sqljdbc4.jar 类库时,应用程序无需调用 Class.forName 方法来注册或加载驱动程序。调用 DriverManager 类的 getConnection 方法时,会从已注册的 JDBC Driver 集中找到相应的驱动程序。sqljdbc4.jar 文件包括“META-INF/services/java.sql.Driver”文件,后者包含.sqlserver.jdbc.SQLServerDriver 作为已注册的驱动程序。现有的应用程序(当前通过使用 Class.forName 方法加载驱动程序)将继续工作,而无需修改。要求使用 6.0 或更高版本的JRE,支持sql2005,sql2008 + +### 全文索引和普通索引的区别 + +两种索引的功能和结构都是不同的,普通索引的结构主要以B+树和哈希索引为主,用于实现对字段中数据的精确查找,比如查找某个字段值等于给定值的记录,A=10这种查询,因此适合数值型字段和短文本字段。全文索引是用于检索字段中是否包含或不包含指定的关键字,有点像搜索引擎的功能,因此全文索引内部采用的是与搜索引擎相同的倒排索引结构,其原理是对字段中的文本进行分词,然后为每一个出现的单词记录一个索引项,这个索引项中保存了所有出现过该单词的记录的信息,也就是说在索引中找到这个单词后,就知道哪些记录的字段中包含这个单词了。因此适合用大文本字段的查找。大字段之所以不适合做普通索引,最主要的原因是普通索引对检索条件只能进行精确匹配,而大字段中的文本内容很多,通常也不会在这种字段上执行精确的文本匹配查询,而更多的是基于关键字的全文检索查询,例如你查一篇文章信息,你会只输入一些关键字,而不是把整篇文章输入查询(如果有整篇文章也就不用查询了)。而全文索引正是适合这种查询需求。 + +### 提示找不到存储过程(SQLServer) + +在sql server 里新建了几个存储过程,每次都是建了之后,存储过程是可以看见的,但用exec语句的时候,却一直有红色波浪线提示找不到存储过程,但是直接执行,却又是可以执行成功的,每次都需要重新打开ssms,红色的波浪线提示才会取消。 +原因是这样的.你的SQL Server 客户端,在连接到 SQL Server 数据库以后。会自动读取数据库的数据字典信息。也就是当前数据库,有哪些表/字段/视图/存储过程等基础信息。保存在客户端的内存里面。这样。当你在客户端输入 SQL 语句的时候,输入表名字.会自动弹出这个表的字段列表让你选择。但是当你新建了一个对象的时候,例如表或者上面那个例子,新建存储过程abc这个时候,数据库那里已经有存储过程abc 了。但是客户端的缓存里面并没有存储过程 abc 的信息。因为内存里面的信息没有更新。因此在客户端那里。输入EXEC abc,abc下有红线。将客户端关闭后,重新打开,由于客户端重新加载了数据库的基础信息。知道了当前数据库里面,有一个名字叫 abc 的存储过程,因此就不出红线了。 + +## Oracle Database + +* Oracle Database DownLoad: +* Oracle SQL Developer: +* Instant Client Downloads for Microsoft Windows (32-bit): +* Developer Day - Hands-on Database Application Development: + +* Toad for Oracle: + +* +* +* +* +* +* + +* +* + +* dbms_lob.substr[DBMS_LOB -> SUBSTR]: + +* lsnrctl的用法[Configuring the Network Environment -> lsnrctl]: +* 配置系统环境变量[Getting Started with Database Administration -> Configuring the Operating System Environment Variables]: + +* "on delete cascade" 和 "on delete set null" 的差别[Common SQL DDL Clauses -> constraint -> on delete]: +* `TRUNC (date)[Functions -> TRUNC (date)]`: +* SYS_CONTEXT[Functions -> SYS_CONTEXT]: +* ALTER SEQUENCE[SQL Statements: ALTER MATERIALIZED VIEW to ALTER SYSTEM -> ALTER SEQUENCE]: + +* Database Error Messages: + +* 开启和关闭数据库[Starting Up and Shutting Down]: +* ADR[Managing Diagnostic Data -> Automatic Diagnostic Repository (ADR)]: +* 归档日志[Managing the Redo Log]: +* 为系统用户指定密码[Creating and Configuring an Oracle Database -> Protecting Your Database: Specifying Passwords for Users SYS and SYSTEM]: +* Managing Oracle Enterprise Manager Database Control: + +* LOBs类型说明[Using SQL Data Types in Database Applications -> Representing Large Amounts of Data]: + +* 端口配置[Managing Oracle Database Port Numbers]: + +* 环境变量[Administering Oracle Database -> Oracle Database Environment Variables]: docs.oracle.com/database/122/UNXAR + +* 设置国际化支持环境变量[Setting Up a Globalization Support Environment]: + +* 逻辑存储结构[Logical Storage Structures]: + +* SQL*Loader[SQL*Loader Concepts]: +* ADRCI: ADR Command Interpreter: +* Using LogMiner to Analyze Redo Log Files: + +* 数据库网络服务全部内容: +* JDBC数据源配置[Data Sources and URLs]: + +* 预置账户[Securing the Database Installation and Configuration -> Predefined User Accounts Provided by Oracle Database]: + +* [Gathering Database Statistics -> Generating an AWR Report Using the Command-Line Interface]: + +* `/ (slash)[SQL*Plus Command Reference -> / (slash)]`: + +* CRSCTL/SRVCTL: + +* Oracle SQL Handler: +* SI Object Browser: + +* ToadWorld: + +* Oracle系统表整理+常用SQL语句收集: +* Unix/Linux操作系统中如何在sqlplus/rman中使用方向键: +* oracle表空间表分区详解及oracle表分区查询使用方法(转+整理): +* oracle表空间不足相关问题解决办法: +* Oracle导入导出常用命令: + +* oracle 11g如何完全卸载: +* Oracle 11G数据库VMware虚拟机下载: +* win7_oracle11g_64位连接32位PLSQL_Developer: +* Oracle 11g 如何创建数据库: +* 数据库使用详解:[3]SQL Developer如何配置: +* oracle的各版本发行时间及特点: +* oracle 查版本号,oracle怎样查版本: +* oracle数据导入与导出: +* EXECUTE IMMEDIATE 常见使用方法: +* Oracle11g自带的SQL developer无法打开解决方案(百度文库): +* 【Foreign Key】Oracle外键约束三种删除行为 : +* Oracle导入JAR包并调用Java: +* Reclaiming Unused LOB Space: +* Oracle 10g: Issue with startup mount command (ORA-24324, ORA-01041): +* 你所不知道的OERR: +* 第9 章 HWM 与数据库性能的探讨: Oracle 数据库性能优化 +* Oracle数据库shutdown immediate被hang住的几个原因: +* Oracle JDBC 连接卡死后 Connection Reset: +* Oracle Start Up 2 Oracle 框架构件、启动、解决一个问题(shared memory realm does not exist): +* ORA-01144: File size (4224000 blocks) exceeds maximum of 4194303: +* sqlldr的用法: +* linux下重启oracle服务:监听器和实例: +* TNS-01190: The user is not authorized to execute the requested listener command: +* ORACLE实例配置多个监听器: +* PLSQL_性能优化工具系列02_SQL Tuning Health-Check Script (SQLHC): +* Script:SQL调优健康检查脚本: +* 重走长征路——1、V$SQL%知多少? +* 由12170问题引起的Oracle无法登陆问题de解决办法: +* TNS-12535: TNS:operation timed out、TNS-00505: Operation timed out: +* 配置tnsping跟踪来诊断Oracle Net连接: +* 说说Oracle监听器(二): +* oracle客户端软件的说明: +* 如何查看Oracle客户端版本: +* 怎么判断oracle客户端、服务器端的位数: +* Linux 安装oracle客户端: +* 深入理解JDBC的超时设置: +* The Difference between User and Schema in Oracle: +* Oracle中如何插入特殊字符: & 和 ' (多种解决方案): +* LogMiner配置使用手册: +* Oracle未开启审计情况下追踪表变更记录: +* Oracle OLAP 与 OLTP 介绍: +* Oracle Database 11g Release 2 (11.2.0.3) RAC On Oracle Linux 6.3 Using VirtualBox: +* Oracle RAC 12c Database on Linux Using VirtualBox: +* 如何利用Oracle VM Templates 在几分钟内部署Oracle Real Application Clusters (RAC): +* 12c ASM audit目录增长过快的bug: +* 【ASM】SYSASM 角色: +* rac节点无法启动ORA-29702的问题及分析: +* ORACLE RAC 的启动和关闭顺序: +* Oracle RAC中public ip, private ip, vip, scan ip的概念: 《Oracle RAC 11g实战指南》 2.2 3.1.3 3.2.4章节 +* 深入了解 Oracle Flex ASM 及其优点(了解性知识): +* oracle数据库备份删除操作: +* Oracle关闭和开启归档日志: +* oracle数据库自动提交事务(autocommit)为OFF,但事务自动提交了: +* statspack安装使用 和 report 分析: +* 【性能调优】Oracle AWR报告指标全解析: +* Oracle Trace文件生成及查看: +* Oracle 10g Audit(审计) --- 记录登录用户在Oracle中的所有操作: +* 修改oracle实例名(sid)和数据库名(db_name): +* Oracle安装错误ora-00922(缺少或无效选项): +* Oracle中session和processes的设置: +* 忘记oracle的sys用户密码怎么修改以及Oracle 11g 默认用户名和密码: +* navicat 连接Oracle 报错:Cannot load OCI DLL, 126: + +### oracle疑难问题排查集 + +* 数据库无响应,出现很多tns的错误: +* oracle 11g不能连接报ORA-12537+ora-609解决: +* TNS-12537 TNSconnection closed ORA-609错误处理: +* ORA-3136、TNS-12535 12170 12606: +* 关于 Fatal NI connect error 12170: + +### PL/SQL Developer + +* +* 配置:localhost:1521/orcl + +### Oracle 11g服务详细介绍及哪些服务是必须开启的? + +成功安装Oracle 11g后,共有7个服务,这七个服务的含义分别为: + +* Oracle ORCL VSS Writer Service:Oracle卷映射拷贝写入服务,VSS(Volume Shadow Copy Service)能够让存储基础设备(比如磁盘,阵列等)创建高保真的时间点映像,即映射拷贝(shadow copy)。它可以在多卷或者单个卷上创建映射拷贝,同时不会影响到系统的性能。(非必须启动) +* OracleDBConsoleorcl:Oracle数据库控制台服务,orcl是Oracle的实例标识,默认的实例为orcl。在运行Enterprise Manager(企业管理器OEM)的时候,需要启动这个服务。(非必须启动) +* OracleJobSchedulerORCL:Oracle作业调度(定时器)服务,ORCL是Oracle实例标识。(非必须启动) +* OracleMTSRecoveryService:服务端控制。该服务允许数据库充当一个微软事务服务器MTS、COM/COM+对象和分布式环境下的事务的资源管理器。(非必须启动) +* OracleOraDb11g_home1ClrAgent:Oracle数据库.NET扩展服务的一部分。 (非必须启动) +* OracleOraDb11g_home1TNSListener:监听器服务,服务只有在数据库需要远程访问的时候才需要。(非必须启动,下面会有详解)。 +* OracleServiceORCL:数据库服务(数据库实例),是Oracle核心服务该服务,是数据库启动的基础, 只有该服务启动,Oracle数据库才能正常启动。(必须启动) + +那么在开发的时候到底需要启动哪些服务呢?对新手来说,要是只用Oracle自带的sql*plus的话,只要启动OracleServiceORCL即可,要是使用PL/SQL Developer等第三方工具的话,OracleOraDb11g_home1TNSListener服务也要开启。OracleDBConsoleorcl是进入基于web的EM必须开启的,其余服务很少用。 + +注:ORCL是数据库实例名,默认的数据库是ORCL,你可以创建其他的,即OracleService+数据库名。 + +### ORACLE_HOME/ORACLE_SID + +ORACLE_HOME 安装目录 +ORACLE_SID 实例ID +一台linux机器上安装一个oracle,两个实例,分别对应两个用户。切换到对应用户时 echo $ORACLE_SID会显示各自的实例 + +### ESCAPE关键字用法 + +  定义:escape关键字经常用于使某些特殊字符,如通配符:'%','_'转义为它们原来的字符的意义,被定义的转义字符通常使用'\',但是也可以使用其他的符号。实例: + + SQL> select * from t11 where name like '%_%'; + SQL> select * from t11 where name like '%\_%' escape '\'; + +注意:如果是 '/' 作为检索字符, 必须 用 '/' 作为转义符, 正斜扛也一样。 + + select * from wan_test where psid like '%//%' escape '/' + +1.使用 ESCAPE 关键字定义转义符。在模式中,当转义符置于通配符之前时,该通配符就解释为普通字符。 +2.ESCAPE 'escape_character' 允许在字符串中搜索通配符而不是将其作为通配符使用。escape_character 是放在通配符前表示此特殊用途的字符。 + +## DB2 + +* 官网: +* DB2 JDBC Driver: +* Ubuntu 16.04安装DB2 Express C v11.1: +* DB2 9.5 数据库分区管理及应用实践: +* 如何建立DB2分区数据库?: +* IBM DB2关键特性解析:DB2分区特性: +* db2建立schema: + +## Oracle Berkeley DB + +* Oracle Berkeley DB: + +## MariaDB + +* + +## SQLite + +* SQLite: +* DB Browser for SQLite: +* SQLite Expert: +* SQLCipher: +* Sqlite学习笔记(四)&&SQLite-WAL原理: + +## mongodb + +* +* +* +* MonjaDB (MongoDB GUI client tool) : +* MONGOVUE: +* mongolab: +* Spring Data MongoDB hello world example: +* MongoDB设置访问权限、设置用户: +* 三招解决MongoDB的磁盘IO问题: +* Install MongoDB Community Edition on Ubuntu: +* Mongo Database 性能优化: +* Morphia(The Java Object Document Mapper for MongoDB): +* NoSQL 之 Morphia 操作 MongoDB: + +## Teradata + +* Teradata JDBC Driver: +* Teradata Vantage Express: +* Teradata on VMware Developer Tier Preconfigured: +* Teradata Aster: +* Teradata 教程: + +## GreenPlum + +* + +## hbase + +* +* HBase 官方文档(中文): +* HBase介绍: + +* HBase 权限控制: +* HBase Shell 常用操作: +* Hbase,Hive,Pig的区别: +* HBase运维实战:disable table失败的处理: +* HBase性能调优: +* 关于HFile的思考: +* HBase性能优化方法总结(一):表的设计: +* HBase性能优化方法总结(二):写表操作: +* HBase性能优化方法总结(三):读表操作: +* HBase性能优化方法总结(四):数据计算: +* HBase如何合理设置客户端Write Buffer: +* HBase的Block Cache实现机制分析: +* HBase入门篇: +* Hbase分析报告: +* HBase 系统架构: +* 图形化理解 HBase 数据写操作、压缩操作过程: +* hbase在淘宝的应用和优化小结: +* bigtable model with cassandra and hbase: +* 编译和使用hive与HBase通信包--hive-hbase-handler.jar及下载: + +## Hive + +* Hive: +* +* 使用Hive读取Hbase中的数据: + +## Pig + +* +* 使用 Apache Pig 处理数据: +* Pig实战: +* Apache Pig的一些基础概念及用法总结(1): +* Apache Pig的一些基础概念及用法总结(2): +* Apache Pig中文教程(进阶): +* 使用Apache Pig时应该注意/避免的操作或事项: + +## Redis + +* +* + +## Others + +* GBase: +* Vertica: +* actian: +* Apache Derby: +* BlinkDB: +* H2 Database Engine: + +## 数据模型 + +* 使用PowerDesigner画ER图详细教程: +* 使用visio 2010建立sql server数据模型——手动画、利用逆向工程: + +### PowerDesigner两张表主键如何设成一致的 + +设置方法:Tools--->Model Options->Model Settings。在Data Item组框中定义数据项的唯一性代码选项(Unique Code)与重用选项(Allow Reuse)。把allow reuse选上,去掉unique code选项。 diff --git "a/_posts/the-way-of-learning/2015-05-19-Docker\345\255\246\344\271\240\344\271\213\350\267\257.md" "b/_posts/the-way-of-learning/2015-05-19-Docker\345\255\246\344\271\240\344\271\213\350\267\257.md" new file mode 100644 index 0000000..9afe6b6 --- /dev/null +++ "b/_posts/the-way-of-learning/2015-05-19-Docker\345\255\246\344\271\240\344\271\213\350\267\257.md" @@ -0,0 +1,23 @@ +--- +title: "Docker学习之路" +categories: + - the-way-of-learning +tags: + - 学习之路 + - Docker +toc: true +--- + +本篇文章汇总了 Docker 学习的相关资源,包括 Docker 的基本概念、安装配置、镜像管理、容器操作等内容,适合容器化技术的初学者参考。 + +* +* +* About images, containers, and storage drivers: + +* Kubernetes: +* Kubernetes指南: + +* Docker —— 从入门到实践: +* docker中文: +* DOCKER windows安装: +* boot2docker: diff --git "a/_posts/the-way-of-learning/2015-05-19-EditorAndIDE\345\255\246\344\271\240\344\271\213\350\267\257.md" "b/_posts/the-way-of-learning/2015-05-19-EditorAndIDE\345\255\246\344\271\240\344\271\213\350\267\257.md" new file mode 100644 index 0000000..322f1c5 --- /dev/null +++ "b/_posts/the-way-of-learning/2015-05-19-EditorAndIDE\345\255\246\344\271\240\344\271\213\350\267\257.md" @@ -0,0 +1,265 @@ +--- +title: "Editor与IDE学习之路" +categories: + - the-way-of-learning +tags: + - 学习之路 + - Editor + - IDE +toc: true +--- + +本篇文章汇总了多种编辑器与 IDE 的学习资源,包括 VSCode、VIM、Eclipse、JetBrains 系列等工具的使用技巧和插件推荐,适合开发者提升开发效率。 + +## VSCode + +* Visual Studio Code: +* Settings Sync: +* VSCode调试远程Linux机器上的C代码: +* R in Visual Studio Code: + +## VIM + +* vim/gvim: +* +* Vim documentation: usr_41: +* map.txt: +* Vim FAQ: +* Vim of AlloVince: +* 奉献一个vim自动加载模板的插件: +* vim安装YouCompleteMe 插件: +* 使用脚本编写 Vim 编辑器,第 1 部分: 变量、值和表达式: +* 把VIM打造成一个真正的IDE(1): 把vim打造成一个真正的ide1.html +* Vim 中使用 OmniComplete 为 C/C++ 自动补全: +* VIM下利用ctags自动补全C/C++标准库和操作系统调用(windows+MinGW版): +* Vim使用笔记: +* vim配置(自动补全,自动生成tag,一些使用插件taglist,nerdtree): +* Vim 的补全模式加速器,轻松玩转全部 15 种自动补全模式: +* Learn essential Vim skills: +* Learn Vimscript the Hard Way: +* Vim 复制粘贴探秘: +* VIMAdventures: +* Vimium - The Hacker's Browser: +* Vimperator: +* VIM常见用法总结: + +* TagCollection: +* mpi.vim: +* VimLogViewer: + +* freebasic.vim: +* Freebasic-vim-syntax-file: +* fbc.vim: + +* slimv: Superior Lisp Interaction Mode for Vim: +* ~~Limp: ~~ + +## Eclipse + +### Eclipse核心 + +* +* Eclipse MarketPlace地址: +* 各个版本的下载地址: +* Eclipse documentation: +* 源码: +* FAQ What is a Quick Fix?: ? +* Eclipse插件开发总群(QQ群):584434100 +* Eclipse插件: +* Eclipse相关问题: +* Top 10 Java Debugging Tips with Eclipse: +* Linux下安装最新的Eclipse: +* Linux下为刚安装好的Eclipse在桌面建一个启动图标: +* eclipse调试的方法和技巧: +* eclipse调试java程序的九个技巧: +* eclipse远程调试Tomcat方法: +* Eclipse远程调试出现“JDWP Transport dt_socket failed to initialize”的解决方案: +* Eclipse中用两个控制台测试网络通信程序: +* Eclipse jar打包详解: +* 如何使用Eclipse将Java项目打成jar包?: +* 'Must Override a Superclass Method' Errors after importing a project into Eclipse: +* SFTP Plug-in for Eclipse: +* Eclipse 远程开发: +* How to set the Eclipse date variable format? + +### Eclipse插件 + +* subclipse: +* Subversive - SVN Team Provider: + +* 如何结合使用 Subversion 和 Eclipse: +* Eclipse + SVN + Google code搭建代码仓库: +* MyEclipse使用总结——MyEclipse10安装SVN插件: + +* EGit: + +* mercurialeclipse: + +* Eclipse Color Themes: +* Eclipse Graphical Editing Framework (GEF): + +* Graphviz Eclipse plug-in: + +* ~~Visual Editor: ~~ +* WindowBuilder(SWT Designer): +* Jigloo SWT/Swing GUI Builder: + +* Web Tools Platform: +* AnyEdit: +* YEdit: +* Properties Editor: +* Eclipse Json Editor Plugin: +* Eclipse-Markdown-Editor-Plugin: +* eclipse-rbe: + +* AgileJ(AgileJ StructureViews is a plugin for Eclipse which generates class diagrams reverse engineered from Java source code.): +* CAP (code analysis plugin): +* Bytecode Outline plugin for Eclipse: + +* Eclipse Web Developer Tools: +* Linux Tools - GProf Support: +* JavaCC Eclipse Plugin: + +* Apache IvyDE(Eclipse plugin which integrates Apache Ivy's dependency management into Eclipse): +* Eclipse中Ant的配置与测试 转: + +* Peer Code Reviews Made Easy with Eclipse Plug-In: +* reviewclipse: + +* StartExplorer: +* Eclipse Mylyn: +* JavaScript Development Tools (JSDT): +* EClim: +* ~~Eclipse EditorList Plug-in: ~~ +* eclipse-games: +* MouseFeed: +* FileSync: +* CODE RECOMMENDERS: +* EasyShell: +* ~~Installing Drools plugin on Eclipse: ~~ + +* Groovy with Eclipse - Tutorial: +* groovy-eclipse: +* ~~Eclipse Photran Fortran Development Tools:~~ +* ~~Cusp(Cusp is an Eclipse IDE plugin that runs on top of SBCL):~~ +* The TeXlipse plugin for Eclipse provides support for LaTeX projects: +* Configuring Eclipse as TCL/TK IDE: + +### Eclipse插件开发 + +* Eclipse 4 RCP指南: +* Eclipse RCP (Rich Client Platform) - Tutorial: +* Eclipse Plug-in & OSGI: +* Eclipse插件开发打包为Update Site: +* 插件开发总览: +* Tycho - Building Eclipse plug-ins with maven: +* 使用Tycho来构建你的RCP程序: +* Dependencies from pom.xml not considered by Eclipse in Tycho Project: + +### Eclipse C/C++ + +* Eclipse CDT: +* eclipse 配置 TDM-GCC 64位版方法: +* eclipse写C++控制台程序,不见输出: +* eclipse C/ C++编译含有多个main函数的项目: +* C++ unit test start guide, how to set up Google Test (gtest) in Eclipse?: + +### Eclipse Android + +* ~~Android Development Tools for Eclipse: ~~ +* ~~eclipse搭建android开发环境: ~~ +* ~~Windows7部署Android开发环境傻瓜式教程(Eclipse+ADT): ~~ + +### Eclipse 前端 + +* Web Tools Platform(WTP): +* The JavaScript Development Tools (JSDT, 如果安装了WTP就不用再安装JSDT了,后者是前者的一个子项目): +* Spket IDE(提供Eclipse的插件): +* Aptana(提供Eclipse插件): +* + +### Eclipse J2EE + +* Eclipse 开发WEB项目所遇问题 WebContent WebRoot: +* spring-ide: + +### Eclipse Maven + +* M2Eclipse: +* 安装说明(Eclipse EE中自带): +* maven项目在eclipse的library中没有Maven Dependencies: + +### Eclipse大数据 + +* ~~hadoop2x-eclipse-plugin: ~~ +* ~~Eclipse下搭建Hadoop2.4.0开发环境:~~ +* ~~使用eclipse连接hadoop失败情况:~~ +* ~~Windows平台下安装Eclipse插件,开发Hadoop应用:~~ + +### MyEclipse + +* +* 官方中文网: +* 在MyEclipse下创建Java Web项目 入门(图文并茂)经典教程: +* MyEclipse删除对Struts、Hibernate、Spring的支持: + +## Jetbrains + +* IntelliJ IDEA: +* Clion: +* RustRover: +* RubyMine: +* Eclipse Code Formatter: + +## Emacs + +* GNU Emacs: +* emacswiki: +* GNU Emacs Manuals Online: + +## UltraEdit + +* UltraEdit: +* UEStudio: +* UltraCompare: +* User-submitted wordfiles for UltraEdit/UEStudio: + +## Sublime Text + +* +* +* + +## Understand + +* Understand: + +## CodeBlocks + +* +* cbp2make: +* cbMakefileGen plugin: +* CodeBlocks插件开发指南(一): +* 用UTF-8编写的代码在codeblocks中编译后汉字不能正常显示: + +### CodeBlocks自定义自动补全 + +1、依次打开 Project -> Properties -> C/C++ parser options 来到 Additional search paths; +2、点 Add 选择头文件的路径后点确定; +3、在源文件中添加相应的头文件后即可实现自动补全。 + +## Others + +* Lightly: +* notepad++: +* geany: +* Lime Text: +* Scintilla: +* XMLSpy(Altova XMLSpy is the world's best selling JSON and XML editor for modeling, editing, transforming, and debugging related technologies.): +* Bluefish: +* codelite: +* kdevelop: +* xcode: +* QtCreator: +* SlickEdit: +* ReText(Simple but powerful editor for Markdown and reStructuredText): diff --git "a/_posts/the-way-of-learning/2015-05-19-Erlang\345\255\246\344\271\240\344\271\213\350\267\257.md" "b/_posts/the-way-of-learning/2015-05-19-Erlang\345\255\246\344\271\240\344\271\213\350\267\257.md" new file mode 100644 index 0000000..659a4ac --- /dev/null +++ "b/_posts/the-way-of-learning/2015-05-19-Erlang\345\255\246\344\271\240\344\271\213\350\267\257.md" @@ -0,0 +1,14 @@ +--- +title: "Erlang学习之路" +categories: + - the-way-of-learning +tags: + - 学习之路 + - Erlang +toc: true +--- + +本篇文章汇总了 Erlang 学习的相关资源,包括 Erlang 的基本概念、安装配置、编程语言特性等内容,适合 Erlang 开发者参考。 + +* +* diff --git "a/_posts/the-way-of-learning/2015-05-19-Excel\345\255\246\344\271\240\344\271\213\350\267\257.md" "b/_posts/the-way-of-learning/2015-05-19-Excel\345\255\246\344\271\240\344\271\213\350\267\257.md" new file mode 100644 index 0000000..8cf2362 --- /dev/null +++ "b/_posts/the-way-of-learning/2015-05-19-Excel\345\255\246\344\271\240\344\271\213\350\267\257.md" @@ -0,0 +1,39 @@ +--- +title: "Excel学习之路" +categories: + - the-way-of-learning +tags: + - 学习之路 + - Excel +toc: true +--- + +本篇文章汇总了 Excel 学习的相关资源,包括 Excel 的基本概念、函数、VBA 编程等内容,适合 Excel 开发者参考。 + +## 书籍 + +* Excel 2019 Bible[EXCEL2019宝典(第10版)]: Michael Alexander,Dick Kusleika,Previously by John Walkenbach: 主力学习 +* Excel 2016 Power Programming with VBA[Excel 2016高级VBA编程宝典(第8版)]: Michael Alexander,Dick Kusleika: 主力学习 +* Excel 2016应用大全: 主力学习 +* Excel 2007 VBA办公范例应用: 内容老旧,阅读人数少,不适合学习 +* Excel 2010实用技巧集锦: 内容老旧,阅读人数少,不适合学习 +* Excel VBA实战技巧精粹: 评价不错 +* Excel VBA程序开发自学宝典(第3版): 已经有了,但是后者找不到对应的电子版。前者评价还不错 +* 疑难千寻千解丛书 + * Excel 2010 VBA编程与实践/Excel 2013 VBA编程与实践,评价还不错,后者找不到对应的电子版。 + +## 函数 + +• All functions (alphabetical): +• IFS function: +• SWITCH function: + +## 小知识点 + +### 改变日期格式 + +```shell +# 'Fri Mar 18 22:49:05 2022 +0800'->'20220318 22:49:05' +# =MID(C1, 21,4)&TEXT(MONTH(MID(C1,5,3)&"-1"), "00")&MID(C1,9,2)&" "&MID(C1,12,8) +# 如果有点时间格式不稳定,如'Fri Mar 8 22:49:05 2022 +0800',则先分列再处理 +``` diff --git "a/_posts/the-way-of-learning/2015-05-19-Fortran\345\255\246\344\271\240\344\271\213\350\267\257.md" "b/_posts/the-way-of-learning/2015-05-19-Fortran\345\255\246\344\271\240\344\271\213\350\267\257.md" new file mode 100644 index 0000000..ffe351f --- /dev/null +++ "b/_posts/the-way-of-learning/2015-05-19-Fortran\345\255\246\344\271\240\344\271\213\350\267\257.md" @@ -0,0 +1,20 @@ +--- +title: "Fortran学习之路" +categories: + - the-way-of-learning +tags: + - 学习之路 + - Fortran +toc: true +--- + +本篇文章汇总了 Fortran 学习的相关资源,包括 Fortran 的基本概念、编程语言特性、编译器等内容,适合 Fortran 开发者参考。 + +* +* GNU Fortran: +* LFortran: +* Fortran中文网: +* Fortran77和90/95编程入门: +* Approximatrix: +* Fortran Coder: + diff --git "a/_posts/the-way-of-learning/2015-05-19-Golang\345\255\246\344\271\240\344\271\213\350\267\257.md" "b/_posts/the-way-of-learning/2015-05-19-Golang\345\255\246\344\271\240\344\271\213\350\267\257.md" new file mode 100644 index 0000000..7609864 --- /dev/null +++ "b/_posts/the-way-of-learning/2015-05-19-Golang\345\255\246\344\271\240\344\271\213\350\267\257.md" @@ -0,0 +1,33 @@ +--- +title: "Golang学习之路" +categories: + - the-way-of-learning +tags: + - 学习之路 + - Golang +toc: true +--- + +本篇文章汇总了 Golang 学习的相关资源,包括 Golang 的基本概念、安装配置、编程语言特性等内容,适合 Golang 开发者参考。 + +* Go: +* Go Documentation: +* Go (programming language): +* Go语言圣经(中文版): +* Go 学习笔记: +* the-way-to-go_ZH_CN: +* 深入解析Go: +* The-Golang-Standard-Library-by-Example: +* Go 标准库 中文参考: +* ~~GoClipse: ~~ +* liteide: + +* Go Search: +* Go Walker: +* GoDoc: +* Golang中国: +* Go语言入门: +* Go语言中文网: +* GOROOT 和 GOPATH: +* 搭建Go开发及调试环境(LiteIDE + GoClipse) -- Windows篇: +* Go语言内存模型: diff --git "a/_posts/the-way-of-learning/2015-05-19-Groovy\345\255\246\344\271\240\344\271\213\350\267\257.md" "b/_posts/the-way-of-learning/2015-05-19-Groovy\345\255\246\344\271\240\344\271\213\350\267\257.md" new file mode 100644 index 0000000..94e472a --- /dev/null +++ "b/_posts/the-way-of-learning/2015-05-19-Groovy\345\255\246\344\271\240\344\271\213\350\267\257.md" @@ -0,0 +1,16 @@ +--- +title: "Groovy学习之路" +categories: + - the-way-of-learning +tags: + - 学习之路 + - Groovy +toc: true +--- + +本篇文章汇总了 Groovy 学习的相关资源,包括 Groovy 的基本概念、编程语言特性、Groovy 语法等内容,适合 Groovy 开发者参考。 + +* Groovy: +* source: +* Grape: +* 实战 Groovy: 在 Java 应用程序中加一些 Groovy 进来: diff --git "a/_posts/the-way-of-learning/2015-05-19-Haskell\345\255\246\344\271\240\344\271\213\350\267\257.md" "b/_posts/the-way-of-learning/2015-05-19-Haskell\345\255\246\344\271\240\344\271\213\350\267\257.md" new file mode 100644 index 0000000..14dd367 --- /dev/null +++ "b/_posts/the-way-of-learning/2015-05-19-Haskell\345\255\246\344\271\240\344\271\213\350\267\257.md" @@ -0,0 +1,13 @@ +--- +title: "Haskell学习之路" +categories: + - the-way-of-learning +tags: + - 学习之路 + - Haskell +toc: true +--- + +本篇文章汇总了 Haskell 学习的相关资源,包括 Haskell 的基本概念、编程语言特性、编译器等内容,适合 Haskell 开发者参考。 + +* diff --git "a/_posts/the-way-of-learning/2015-05-19-IO\345\255\246\344\271\240\344\271\213\350\267\257.md" "b/_posts/the-way-of-learning/2015-05-19-IO\345\255\246\344\271\240\344\271\213\350\267\257.md" new file mode 100644 index 0000000..22a3510 --- /dev/null +++ "b/_posts/the-way-of-learning/2015-05-19-IO\345\255\246\344\271\240\344\271\213\350\267\257.md" @@ -0,0 +1,14 @@ +--- +title: "IO学习之路" +categories: + - the-way-of-learning +tags: + - 学习之路 + - IO +toc: true +--- + +本篇文章汇总了 IO 学习的相关资源,包括 IO 的基本概念、编程语言特性、编译器等内容,适合 IO 开发者参考。 + +* +* diff --git "a/_posts/the-way-of-learning/2015-05-19-J2EE\345\255\246\344\271\240\344\271\213\350\267\257.md" "b/_posts/the-way-of-learning/2015-05-19-J2EE\345\255\246\344\271\240\344\271\213\350\267\257.md" new file mode 100644 index 0000000..316e15a --- /dev/null +++ "b/_posts/the-way-of-learning/2015-05-19-J2EE\345\255\246\344\271\240\344\271\213\350\267\257.md" @@ -0,0 +1,1128 @@ +--- +title: "Java学习之路" +categories: + - the-way-of-learning +tags: + - 学习之路 + - Java +toc: true +--- + +本篇文章汇总了 J2EE 学习的相关资源,包括 Java SE、Java EE、Spring、Hibernate 等技术的学习路径和参考资料,适合 Java 开发者参考。 + +## Java SE + +* Java SE: +* Java Community Process: +* Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files: + +## Java tutorial + +* Java SE 6 技術手冊: + +* 9 Best Practices to Handle Exceptions in Java: +* API Design with Java 8: +* Java Tips and Best practices to avoid NullPointerException in Java Applications: +* 如何重构“箭头型”代码: +* 软件项目“免坑”指南: + +* 当前各种设计模式主要来源: + * Design Patterns_Elements of Reusable Object-Oriented Software + * Patterns of Enterprise Application Architecture + * + +* 速查: + +* Java实现单例模式的9种方法: +* 面向对象设计的SOLID原则: Agile Software Development Principles Patterns and Practices[敏捷软件开发:原则、模式与实践] +* 合成/聚合复用原则+迪米特法则(最小知识原则): Java与模式 +* 浅谈命令查询职责分离(CQRS)模式: +* Shalloway原则+分离构造和使用原则: Essential Skills for the Agile Developer[A Guide to Better Programming and Design][敏捷技能修炼_敏捷软件开发与设计的最佳实践] +* 好莱坞原则: Hear First 设计模式 +* Tell, Don't Ask: + +* 变化驱动:正交设计: +* 正交设计,OO与SOLID: +* 实战正交设计: +* 简单设计: + +* 大陆简中自由软件本地化工作指南: +* 为什么称为北向接口、南向接口? +* 一个程序员能够控制多少行代码: + +* java 泛型详解-绝对是对泛型方法讲解最详细的,没有之一: +* Java 泛型中 的区别: +* Item 11: Always override hashCode when you override equals: Effective Java 3rd Edition +* 在 Java 中初始化 List 的五种方法: +* 最全的集合干货送给大家: +* Java集合ArrayDeque类解读: +* Jdk1.8中的HashMap实现原理: +* Java7/8 中的HashMap 和 ConcurrentHashMap: +* 图解LinkedHashMap原理: +* Java提高篇(二七)-----TreeMap: +* What is difference between fail safe iterator and fail fast iterator: +* Java直接内存与非直接内存性能测试: +* Java直接(堆外)内存使用详解: +* Buffer: +* Java引用总结--StrongReference、SoftReference、WeakReference、PhantomReference: +* 5种必会的Java异步调用转同步的方法你会几种: +* java 偏向锁、轻量级锁及重量级锁synchronized原理: +* Java中Volatile关键字详解: +* 请别再拿“String s = new String("xyz");创建了多少个String实例”来面试了吧: +* 彻底弄懂字符串常量池等相关问题: +* java安全沙箱(四)之安全管理器及Java API: +* 深入浅出Java多线程: + +* Java Runtime.exec()的使用: +* 深入理解Java:SimpleDateFormat安全的时间格式化: +* 深入理解Java:注解(Annotation)基本概念: +* Java annotation 自定义注释@interface的用法: +* [改编]深入equals方法,讨论instanceof的使用!: +* Java自动装箱与拆箱及其陷阱: +* java byte与char互转原理: +* Java关键字及其作用: +* java中static{}语句块详解: +* JAR文件包及jar命令详解: +* 类加载器基本概念: +* Jar包的正确运行方法: +* Class热替换与卸载: +* Java 类的热替换 —— 概念、设计与实现: +* Java陷阱之assert关键字: +* [System.currentTimeMillis]/[Calendar.getInstance().getTimeInMillis()]/[new Date().getTime()]: +* JAVA调用系统命令或可执行程序: +* 过时date.toLocaleString()的解决方法: +* java中Assert的用法: +* FINAL .....FINALLY ...... 和FINALIZE ......区别: +* Comparable与Comparator的区别: +* 关于toString: +* OpenJDK和SunJDK有啥区别? +* GetPropertyAction vs System.getProperty in obtaining system variables: +* File.separator vs FileSystem.getSeparator() vs System.getProperty(“file.separator”)?: + +* VirtualMachine: +* Java HotSpot VM Options: +* Setting Project Facets: +* Overriding and Hiding Methods: +* javac: +* javac的调试选项-g的意义: +* javadoc相关问题: +* JDK自带工具之概览: +* How to solve the error: The system cannot find the file C:\ProgramData\Oracle\Java\javapath\java.exe: +* 三个实例演示 Java Thread Dump 日志分析: +* 深入 Java 调试体系: +* Java Platform Debugger Architecture (JPDA): +* Jps介绍以及解决jps无法查看某个已经启动的java进程问题: +* Java永久代去哪儿了: +* Java8内存模型—永久代(PermGen)和元空间(Metaspace): +* JVM调优总结(转): +* Java server application troubleshooting using JDK tools: +* jstack简单使用,定位死循环、线程阻塞、死锁等问题: + +* Java代码质量度量工具大阅兵: +* Java杂项: +* Java 理论与实践: +* 敏捷开发中高质量 Java 代码开发实践: +* Java RMI 入门指南: +* Java RMI与RPC,JMS的比较: +* Flatten your objects Discover the secrets of the Java Serialization API: +* The Java serialization algorithm revealed: +* 构建一个文本可视化和分析应用程序: +* POJO模式: +* Java数字图像处理基础知识 - 必读: +* Java反序列化时对象注入可以造成代码执行漏洞: +* Apache和IIS网站Web日志格式详解: +* 领域驱动设计系列文章——浅析VO、DTO、DO、PO的概念、区别和用处: +* PO BO VO DTO POJO DAO DO这些Java中的概念分别指一些什么?: +* Java bytecode instruction listings: +* Virtual Memory Usage from Java under Linux, too much memory used: +* 理解OAuth 2.0: +* Need to suppress “Warning: running an XSLT 1.0 stylesheet with an XSLT 2.0 processor” in Tomcat std out log file: +* Java 授权内幕: +* ServletInputStream的重复读取(多次读取)(转): +* Developing a Service Provider using Java API(Service Provider Interface): +* 驱动模块和桩模块的概念和区别: +* 转一个J2EE开发时的包命名规则,养成良好的开发习惯: +* Java调用动态库方法说明: +* Servlet容器的匹配过程: + +* 测试方面的基础概念: +* SIT和UAT: +* Burp Suite使用介绍(一) (二) (三): +* +* Ehcache详细解读: +* EhCache介绍: +* 服务化之-路由: +* HTTP Keep-Alive详解: +* 定义文档兼容性: (VS.85).aspx +* 系统吞吐量(TPS)、用户并发量、性能测试概念和公式: +* Java 语言的 XPath API: +* XMLHttpRequest Living Standard: +* Servlet 3.1规范[翻译]: +* MVC,MVP 和 MVVM 的图示: +* 数据库分页Java实现: +* Atom Authentication: +* 在AI寻路决策中运用势力图(Influence Map): +* More Servlets and JavaServer Pages: +* UTF-8 encoding table and Unicode characters: +* jarFinder: +* java examples: + +* 99%的人都理解错了HTTP中GET与POST的区别: +* List of HTTP status codes: +* html的meta总结,html标签中meta属性使用介绍: +* 使用 jQuery.i18n.properties 实现 Web 前端的国际化: +* ajax与302响应: +* HTTPS 升级指南: +* HTML中`       `等6种空白空格的区别: + +* javascript CDATA: +* 浅析Web工程目录和tomcat目录: +* CSS3美化有序列表: +* 简洁纯净的CSS表单设计实例: +* DreamweaverCS5+Tomcat环境配置: + +* How to make Java 6, which fails SSL connection with “SSL peer shut down incorrectly”, succeed like Java 7?: +* SEI CERT Oracle Coding Standard for Java: +* Secure Coding Guidelines for Java SE: +* CWE/SANS Top 25 Most Dangerous Software Errors: +* STRIDE威胁建模方法讨论: +* STRIDE威胁建模漫谈: +* 华为内部的Web安全原则: +* Android安全开发之ZIP文件目录遍历: +* Web安全漏洞之:JDK1.5环境下扫描远程调试端口导致JVM崩溃【JDWP exit error JVMTI_ERROR_NONE(0)】: +* 一些安全相关的HTTP响应头: +* SNA (Share Nothing Architecture) Session 解剖: +* 挑战认证机制:《LINUX网络管理员指南(第3版).chm》6.8. Authentication with PPP +* Salted Password Hashing - Doing it Right: +* 加盐密码哈希:如何正确使用: +* CMD5(MD5反向查询): +* 数字证书原理: +* 彩虹表(Rainbow Tables)原理详解: +* 使用浏览器的计算力,对抗密码破解: +* 关于 Token,你应该知道的十件事: +* 10 Things You Should Know about Tokens: +* 浅析ReDoS的原理与实践: +* 让浏览器不再显示 https 页面中的 http 请求警报: +* 客户端的IP地址伪造、CDN、反向代理、获取的那些事儿: +* Threat Modeling: Uncover Security Design Flaws Using The STRIDE Approach: +* 双因素认证(2FA)教程: + +## Java EE + +* Jakarta EE: +* Jakarta EE Platform Project: +* Jakarta EE Platform: +* ~~Java EE: ~~ + +* Oracle Java SE Support Roadmap: +* Oracle Java SE Licensing FAQ: + +## Spring + +* 官网: +* 文档: +* Spring Framework 开发参考手册: +* Spring Security: +* 源码:spring-framework + +* Spring Tools: +* Spring 的优秀工具类盘点: +* Spring使用Cache: +* spring security中限制用户登录次数超过限制的处理: +* Introducing Spring's Transaction Abstraction: Professional.Java.Development.with.the.Spring.Framework.chm + +* Struts2、Spring和Hibernate应用实例: +* spring中注册bean(通过代码动态注册): +* Spring框架的反序列化远程代码执行漏洞分析(转): +* Spring “redirect:” EL vulnerability?: +* 使用监听器对Spring bean id进行唯一校验: +* 解决java.lang.IncompatibleClassChangeError: + +## Hibernate + +* +* +* 源码:匿名可访问地址 +* 源码:开发者访问地址 + +* hibernator: + +## Struts(漏洞多,发展慢,后续使用Spring MVC) + +* 官网: +* 源码: + +* Struts 2.0系列: +* Struts2中的零配置与CoC(Convention over Configration): +* struts2采用convention-plugin实现零配置: +* struts2关于A web application created a ThreadLocal with key of type 异常解决办法: +* 修改Struts2的struts.xml配置文件位置: + +## 模板引擎与表达式语言 + +* template engine: +* freemarker: +* Velocity: +* EL: +* OGNL(Object Graph Navigation Library): +* MVEL: +* MVEL: + +## WebService + +* Restlet: +* Apache CXF(开始叫XFire): +* axis2: +* Jersey: +* Style of WebService: REST vs. SOAP: +* RESTful API 编写指南: +* principles of good restful api design(中文): +* Principles of good RESTful API Design: +* 用 Java 技术创建 RESTful Web 服务: +* REST, Web services, REST-ful services: +* JAX-RS HTTP Headers: +* Web Service描述语言 WSDL 详解: +* WebService之WSDL和SOAP实例(基于JAVA): +* java 利用JAX-RS快速开发RESTful 服务(以JBoss为容器): +* RESTful API 利器 Swagger: +* 改写Restful2ActionMapper让Struts2支持REST风格的URL映射: +* Build a RESTful Web service using Jersey and Apache Tomcat: +* Axis2创建WebService实例: +* Axis2中使用模块: +* SOAPUI: +* WizTools.org RESTClient(RESTful webservices测试工具): +* Automating SoapUI using Groovy – A Walk Through: +* tcpmon: +* JMeter: +* JAX-WS error on WSDL file: “Error resolving component 's:schema'”: +* JAX-WS Maven Plugin: + +### 常用第三方webservice + +* +* + +## IDE + +* +* + +## RxJava + +* RxJava: Reactive Extensions for the JVM: + +## Vert.x + +* Vert.x(Eclipse Vert.x Reactive applications on the JVM): + +## UML + +* AmaterasUML: +* Green UML: +* ~~ModelGoon UML4Java: ~~ +* StarUML: +* Astah(JUDE): +* UML关系(泛化,实现,依赖,关联(聚合,组合)): +* 解析UML箭头、线条代表的意义: + +## OSGI + +* OSGI: +* Java 9, OSGi and the Future of Modularity (Part 1): +* Java 9, OSGi and the Future of Modularity (Part 2): +* OSGi and C++: + +## Tomcat + +* Apache Tomcat: +* Security Considerations: +* SSL/TLS Configuration HOW-TO: +* Tomcat配置JNDI全局数据源: +* Tomcat配置JNDI局部数据源: +* Tomcat Cannot assign requested address: JVM_Bind 非端口占用冲突: +* Tomcat中的Session小结: +* Tomcat7启动报Error listenerStart错误: +* How do I prevent people from shutting down my Tomcat?: +* tomcat startup.sh/shutdown.sh/setclasspath.sh/catalina.sh分析: +* SSL/TLS, ciphers, perfect forward secrecy and Tomcat: +* web.xml配置详解: +* web.xml 详细介绍: +* Web.xml配置详解之context-param: +* 监控Tomcat解决方案(监控应用服务器系列文章): +* CATALINA_BASE与CATALINA_HOME的区别: +* 同一个服务器部署多个tomcat: +* Does Tomcat require JDK or JRE?: + +## AWT/Swing/SWT/Jface/JavaFX + +* SWT、Swing 或 AWT:哪个更适合您? +* OpenSwing: +* FlatLaf: +* Darcula: +* beautyeye: +* JavaFX/JavaFX Scene Builder: + +## IBM JDK + +* ~~IBM Development Package for Eclipse: ~~ +* ~~IBM JDK: ~~ + +## 持续集成 + +* Jenkins: +* ~~Hudson: ~~ +* Atlassian Bamboo: +* TeamCity: + +## DbUnit + +* 官网: + +## JMockit + +* JMockit: +* jMock: +* EasyMock: +* mockito: +* Mock测试工具比较: + +## Fuzz + +* fuzz实战之libfuzzer: +* 浅析Peach Fuzz: +* Syzkaller:Linux内核模糊测试工具分享: + +## JUnit + +* +* JUnit4 详解: +* Easy way of running the same junit test over and over? +* Testing for expected exceptions in JUnit: + +## TestNG + + TestNG is a testing framework inspired from JUnit and NUnit but introducing some new functionalities that make it more powerful and easier to use. + +* 项目地址: + +## ~~ReportNG~~ + + ReportNG is a simple HTML reporting plug-in for the TestNG unit-testing framework. It is intended as a replacement for the default TestNG HTML report. The default report is comprehensive but is not so easy to understand at-a-glance. ReportNG provides a simple, colour-coded view of the test results. + +* 项目地址: + +## SLF4J + + The Simple Logging Facade for Java (SLF4J) serves as a simple facade or abstraction for various logging frameworks (e.g. java.util.logging, logback, log4j) allowing the end user to plug in the desired logging framework at deployment time. + +* 官方网址: + +## Logback + + Logback is intended as a successor to the popular log4j project, picking up where log4j leaves off. + +* 官方网址: +* Java程序员修炼之道 之 Logging(1/3) - Logback 配置: +* Java程序员修炼之道 之 Logging(2/3) - 怎么写Log: +* Java程序员修炼之道 之 Logging(3/3) - 怎么分析Log: + +## Log4j + +* +* +* jdk-logging、log4j、logback日志介绍及原理: +* jcl 与 jul、log4j1、log4j2、logback 的集成原理: +* slf4j 与 jul、log4j1、log4j2、logback 的集成原理: +* slf4j、jcl、jul、log4j1、log4j2、logback 大总结: +* 热切换Log4j级别配置: +* log4j:ERROR Attempted to append to closed appender named: + +## Log4E + + Log4E is an Eclipse Plugin which helps you to use your logger easily in Java Projects.The Plugin Log4E is not bound to any special logging framework. Thus you might be able to adapt to your own logger by defining your own templates using the preferences. It has active support for Log4j, Log4j 2, SLF4J, Commons Logging and JDK 1.4 logging. + +* + +## 代码评审 + +* Jupiter: +* Effective Code Reviews Without the Pain: + +## guava + +* 项目地址: +* (流控、流量控制)Guava RateLimiter在Web应用中的使用: + +## jga + + jga is a functors library: the intent is to explore and exploit functors as a design and implementation tool to reduce boilerplate coding. A functor is an object that encapsulates a function or expression: it can take arguments and produce results, as can any method, expression, or function (in other languages that support functions). Unlike an expression, as an object it can be passed as an argument without being executed; it can be persisted to a database or file; it can be serialized and passed from client to server (and back); and it can be instantiated at runtime based on information unavailable at compile-time. + +* + +## Java Class Dependency Analyzer + +* Class Dependency Analyzer (CDA): +* Classycle: Analysing Tools for Java Class and Package Dependencies: +* STAN(Structure Analysis for Java): +* nWire, Code Exploration for Eclipse(not free): + +## OW2 + + OW2 is an independent, global, open-source software community. The mission of OW2 is to a) promote the development of open-source middleware, generic business applications, cloud computing platforms and b) foster a vibrant community and business ecosystem. + +* ASM: +* JOTM: +* XAPool: + +## ForgeRock + +* + +## apache + +* +* Apache Software Foundation Distribution Directory: +* The Apache Attic: + +## Apache Commons + + Apache Commons is an Apache project focused on all aspects of reusable Java components. + +* Apache Commons: +* commons-beanutils: +* commons-collections: +* commons-configuration: +* commons-io: +* commons-lang: +* commons-logging: + +sandbox中的项目无法直接通过maven进行依赖,必须通过svn下载源码,部署到本地maven仓库中。例如对于sandbox中的classscan项目: + +```shell + + # 项目地址: + svn checkout http://svn.apache.org/repos/asf/commons/sandbox/classscan classscan + cd classscan + + # 当install带有parent的maven项目时,如果没有把parent一并install,其它项目引用时会出现 + # mvn install--Failed to read artifact descriptor for org.apache.maven.plugins:maven-source-plugin:jar:2.1.2 + cd parent (classscan/parent) + mvn clean package install -DskipTests + + + cd ../api (classscan/api) + mvn clean package install -DskipTests + + cd ../bcel (classscan/bcel) + mvn clean package install -DskipTests + +在pom.xml中添加依赖 + +```xml + + org.apache.commons.classscan + bcel + 0.2-SNAPSHOT + + + org.apache.commons.classscan + api + 0.2-SNAPSHOT + +``` + +Eclipse中`Update Project`,选择`Force Update of Snapshots/Releases` + +## Apache HttpComponents + +* +* httpcomponents-core-4.4.x.chm +* httpcomponents-httpclient-4.5.chm + +## Maven + +* Maven项目地址: +* Maven Central Repository: +* POM Reference: +* Settings Reference: +* Introduction to Repositories: +* Using Mirrors for Repositories: +* Core Plug-ins List: +* overlays: +* +* Maven Ant Tasks: +* 阿里云云效 Maven: +* Maven插件maven-antrun-plugin的使用: +* 如何用Maven创建web项目(具体步骤): +* maven依赖总结: +* maven2 up to maven3的'version' contains an expression but should be a constant: +* MavenMNG-4715 version expression constant: +* 解决Maven报Plugin execution not covered by lifecycle configuration: +* Maven编译jar出现:无法确定 T 的类型参数的异常的原因和处理方案: +* Hosting a Maven repository on github: +* Working with the Apache Maven registry: +* 如何发布Maven依赖到中央仓库: +* 20分钟理清Maven构建中的测试相关工具的关系: +* Maven添加本地依赖: +* Maven常用插件: +* How to Publish Maven Site Docs to BitBucket or GitHub Pages: +* Maven Enforcer Plugin: +* templating-maven-plugin: + +* 开发自己的Maven插件之一:hello world: +* 开发自己的Maven插件之二:利用创建向导简化工作: +* 开发自己的Maven插件之三:使用插件: +* 开发自己的Maven插件之四:基本概念: +* 开发自己的Maven插件之五:创建简单的report plugin: +* 开发自己的Maven插件之六:使用自己的report-plugin: +* 开发自己的Maven插件之七:开发jslint4java-report plugin: +* 开发自己的Maven插件之八:使用jslint4java-report plugin: + +* (搜索) +* (搜索) +* ~~~~ +* JitPack: +* (搜索) +* +* +* + +## maven快速下载某个jar包依赖的所有jar + +经常碰到这种事情:在一些非maven工程中(由于某种原因这种工程还是手工添加依赖的),需要用到某个新的类库(假设这个类库发布在maven库中),而这个类库又间接依赖很多其他类库,如果依赖路径非常复杂的话,一个个检查手动下载是很麻烦的事.下面给出一个便捷的办法,创建一个新目录里面建一个maven pom文件, 添加需要依赖的类库: + +```xml + + + 4.0.0 + com.dep.download + dep-download + 1.0-SNAPSHOT + + + com.xx.xxx + yy-yyy + x.y.z + + + + +``` + +在这个目录下运行命令,所有跟这个类库相关的直接和间接依赖的jar包都会下载到 ./target/dependency/下 + + `mvn -f download-dep-pom.xml dependency:copy-dependencies` + +## 杂项 + +间接依赖的jar包能否直接使用 + +如果工程依赖A.jar,并用maven设置好依赖,同时A.jar会依赖B.jar,所以maven在下载A.jar的同时会下载B.jar,这时如果项目发现需要使用B.jar中的一些内容,在maven中不必从新设置依赖,可以在工程中直接使用。 + +把某个本地jar包安装到本地仓库中 + +mvn install:install-file -DgroupId="edu.jiangxin" -DartifactId=”gcu” -Dversion="1.0.0" + +-Dpackaging=”jar” -Dfile="D:\CS\J2EE\lib\edu.jiangxin.gcu-1.0.0.jar" + +把某个本地jar包部署到某个远程仓库中 + +mvn deploy:deploy-file -DgroupId="edu.jiangxin" -DartifactId=”gcu” -Dversion="1.0.0" + +-Dpackaging=”jar” -Dfile="D:\CS\J2EE\lib\edu.jiangxin.gcu-1.0.0.jar" -Durl= + +-DrepositoryId=internal + +## bintray + + + +## Ant + +* +* Ivy(Apache Ant项目的一个子项目,一个可传递的依赖项管理器): +* 使用Ant脚本执行bat文件: + +## Clover(收费) + +* 项目地址: +* 安装说明: + +## Java程序分析工具 + +* 洞悉 Java 应用性能瓶颈的利器:Visual Performance Analyzer: +* VisualVM: +* arthas: + +## 反编译 + +* jadx(Dex to Java decompiler): +* Apktool: +* GDA-android-reversing-Tool: +* DJ Java Decompiler(收费软件): +* AndroChef Java Decompiler(收费软件): +* JEB by PNF Software: +* ~~JD(不支持命令行使用,无法批量编译,支持的class版本过低):~~ +* ~~jad(支持命令行方式使用,支持的class版本过低): ~~ +* ~~uuDaJava(基于jad): ~~ +* ~~jadclipse(基于jad): ~~ +* ~~jdec(支持命令行方式使用,支持的class版本过低): ~~ +* ~~JODE(Java Optimize and Decompile Environment, ,支持的class版本过低): ~~ +* ~~Jode Eclipse Plugin(基于JODE): ~~ +* Fernflower(IDEA内置反编译工具): +* Vineflower(Quiltflower Fork自Fernflower,后改名叫做Vineflower): +* CFR(Another Java Decompiler): +* Procyon: +* Luyten(Java Decompiler Gui for Procyon): +* Krakatau: +* enjarify: +* bytecode-viewer: +* jd-gui-duo: +* ~~Eclipse Class Decompiler——Java反编译插件: ~~ +* Enhanced Class Decompiler(fork from Eclipse Class Decompiler): + +## ProGuard + + ProGuard is a free Java class file shrinker, optimizer, obfuscator, and preverifier. It detects and removes unused classes, fields, methods, and attributes. It optimizes bytecode and removes unused instructions. It renames the remaining classes, fields, and methods using short meaningless names. Finally, it preverifies the processed code for Java 6 or higher, or for Java Micro Edition. + +* + +## Metric + +* Metrics-Java版的指标度量工具之一: +* Metrics-Java版的指标度量工具之二: + +## Structure101 + + Structure101 is an agile architecture development environment (ADE) that lets the software development team organize a codebase. + +* + +## EJ-Technologies一家(收费) + +* 公司网址: +* perfino: +* jprofiler: + +## FORTIFY SCA(收费) + +* 项目地址: +* 用Fortify SCA分析代码漏洞: +* SEI CERT Coding Standards: +* HP Fortify Taxonomy: Software Security Errors: +* Sebug漏洞库: +* The Open Web Application Security Project: +* ESAPI(OWASP Enterprise Security API): +* OWASP Guide Project: +* WebScarab: +* WooYun知识库: +* HP Security Research: +* CVE: +* National Vulnerability Database: +* SCAP安全内容自动化协议中文社区: +* acunetix: +* xfocus: + +## klocwork(收费) + +* + +## Dot and Graphviz + + Graphviz (Graph Visualization Software) 是一个由AT&T实验室启动的开源工具包。DOT是一种图形描述语言,非常简单的,Graphviz就是用来处理这种语言的工具。 + +* Graphviz项目地址: +* 程序员的绘图利器 — Graphviz: + +## Selenium + +* Selenium: +* IE Driver Server: + +## JBoss + + The JBoss AS community project has been renamed to the WildFly community project, which has a new home at wildfly.org. The JBoss name now only applies to the commercially supported product, called JBoss EAP, which is derived from the WildFly community project and is available at . + +* JbossTools: + +## GlassFish + + GlassFish 是一款强健的商业兼容应用服务器,达到产品级质量,可免费用于开发、部署和重新分发。 + +* 官网: + +## Virgo + + Virgo from EclipseRT is a completely module-based Java application server that is designed to run enterprise Java applications and Spring-powered applications with a high degree of flexibility and reliability. It offers a simple yet comprehensive platform to develop, deploy, and service enterprise Java applications. + +* Virgo: + +## Jetty + + Jetty provides a Web server and javax.servlet container, plus support for SPDY, WebSocket, OSGi, JMX, JNDI, JAAS and many other integrations. These components are open source and available for commercial use and distribution. + +* Jetty: + +## 字符编码 + +* What is the most accurate encoding detector? +* cpdetector: +* juniversalchardet: + +* 字符乱码一锅炖: + +## EZMorph + + EZMorph is simple java library for transforming an Object to another Object. + +* + +## Apache Shiro + +* Apache Shiro: + +## iBATIS/MyBatis + +* iBATIS官网: +* MyBatis官网: + +## appfuse + +* + +## TopLink + +* 官网: + +## json + +* 官网: +* json中文网: +* JSON in Java [package org.json]: +* Json-lib: +* fastjson: +* Jackson: +* Jackson: +* Jackson: +* Jackson 框架,轻易转换JSON: +* bson4json: +* Binary JSON with bson4jackson: + +## neethi + +* +* + +## XML + +* Java Web开发详解[XML XSLT Servlet JSP深入剖析实例应用] +* What is difference between XML Schema and DTD? +* JDOM: +* Dom4j: +* xml-commons: +* XML Pull Parsing: +* Apache Santuario(xmlsec): +* 使用 StAX 解析 XML,第 1 部分: Streaming API for XML (StAX) 简介: +* 使用 StAX 解析 XML,第 2 部分: 拉式解析和事件: +* 使用 StAX 解析 XML,第 3 部分: 使用定制事件和编写 XML: + +## SAXON + + The XSLT and XQuery Processor + +* + +## jsoup + +* + +## HTML Parser + +* + +## Java port of Mozilla charset detector(jchardet) + +* + +## JMX + +* JMX Technology Home Page: +* JMX的Hello World: +* JMX(TM) Remote API RI, Optional Packages: +* JMX学习笔记(一)-MBean: +* JMX之模型MBean: + +## jsch + +* 官网: + +## yFiles + +The yFiles diagramming software components are extensive class libraries that enable you to add high-quality diagramming functionality to your own software applications + +* + +## OpenLDAP + + OpenLDAP Software is an open source implementation of the Lightweight Directory Access Protocol. + +* 官网: + +## Protobuf + +* +* Protobuf协议的Java应用例子: + +## Archiver/Compressor + +* junrar/junrar(Recommend): + +## JFlex + +* + +## JavaCC + +* + +## sablecc + +* +* + +## Xtext + +* Xtext: + +## antlr + +* +* 常用IDE的Antlr插件: +* ANTLR 4进阶: +* Enkel-JVM-language: +* JC-Compiler: + +## JavaParser + +* JavaParser: + +## Markdown转换 + +* flexmark-java: + +## cglib + +* +* cglib动态代理介绍(一): +* Java动态代理机制详解(JDK和CGLIB,Javassist,ASM): + +## Javassist + +* + +## jclasslib + +* + +## iCal4j + +* + +## 分词 + +* 中文分词器分词效果评估对比: +* 分词工具比较(转): +* ik-analyze(java开源中文分词器): +* ICTCLAS: + +## 拼音 + +* TinyPinyin: +* pinyin4j: +* ~~jpinyin: ~~ + +## 规则引擎 + +* Java规则引擎与其API(JSR-94): +* 规则,推理机和规则引擎: +* 规则引擎中常用的模式匹配算法: +* Java规则引擎规范:JSR94: +* jsr223-Java中的script引擎接口: +* 开源规则流引擎实践: +* Ilog JRules: +* Jess: +* Java bytecode instruction listings: +* ZeroCrawler V0.1:多线程爬虫: + +## Drools + +* +* +* +* ~~droolsjbpm-tools: ~~ +* Drools规则描述语言快速手册: +* Why isn't Drools working with Java 8? + +## jBPM + +* +* jbpm5.1介绍: + +## OpenAS2 + + OpenAS2 is a java-based implementation of the EDIINT AS2 standard. It is intended to be used as a server. It is extremely configurable and supports a wide variety of signing and encryption algorithms. + +* + +## Java Native Access (JNA) + +* + +## mpiJava + +* + +## eBus + +* + +## Java操作Word/Excel/PowerPoint/PDF + +* Apache POI - the Java API for Microsoft Documents: +* aspose: +* iText: +* Apache PDFBox - A Java PDF Library: +* JExcelApi(长时间不更新): + +* jacob(Java/COM Bridge): +* Java操作Microsoft Word之jacob: +* 浅析JACOB: +* JACOB的语法: + +## Aurora + +* + +## 文件类型检测 + +* Apache Tika - a content analysis toolkit: +* Mime Type Detection Utility: +* jmimemagic: + +## Mina + +* +* Mina2.0快速入门: +* Mina2.0框架源码剖析(一): +* Mina2.0框架源码剖析(二): +* Mina2.0框架源码剖析(三): +* Mina2.0框架源码剖析(四): +* Mina2.0框架源码剖析(五): +* Mina2.0框架源码剖析(六): +* Mina2.0框架源码剖析(七): +* Mina2.0框架源码剖析(八): + +* MINA2官方教程翻译: + +## 数据库连接池 + +* c3p0: +* DBCP: +* Proxool: +* The Tomcat JDBC Connection Pool: +* Apache Commons Pool: + +## Commons DbUtils: JDBC Utility Component + +* + +## ZooKeeper + +* ZooKeeper: + +## Lucene + +* +* Lucene原理与代码分析: + +## Solr + +* +* solr教程,值得刚接触搜索开发人员一看: +* nutch1.8+solr 4 配置过程: + +## 爬虫库 + +* nutch: +* Heritrix: +* crawler4j: + +## Apache Flume + + Flume is a distributed, reliable, and available service for efficiently collecting, aggregating, and moving large amounts of log data. It has a simple and flexible architecture based on streaming data flows. It is robust and fault tolerant with tunable reliability mechanisms and many failover and recovery mechanisms. It uses a simple extensible data model that allows for online analytic application. + +* Apache Flume: +* 开源日志系统比较: + +## curator + +* + +## Sqoop + +* + +## Avro + +* + +## Chukwa + +* + +## Thirft + +* +* Thirft框架介绍: + +## CAS/SSO + +* [原创] SSO(Single Sign-on) in Action(上篇): +* 单点登陆(Single Sign-On,SSO)介绍(翻译): +* +* +* CAS protocol: +* CAS Client集群环境的问题及解决方案: +* cas系列文章: +* cas单点登录配置速成: + +## Prometheus + +* +* EXPOSITION FORMATS: +* Prometheus 系统监控方案: + +## grafanagrafana + +* + +## collectd + +* + +## influxdata + +* + +## opengrok + +* +* OpenGrok搜索技巧: + +## Flex + +* Versions in the Flash Platform: + +## JarScan + +* JarScan: diff --git "a/_posts/the-way-of-learning/2015-05-19-Kotlin\345\255\246\344\271\240\344\271\213\350\267\257.md" "b/_posts/the-way-of-learning/2015-05-19-Kotlin\345\255\246\344\271\240\344\271\213\350\267\257.md" new file mode 100644 index 0000000..2b26165 --- /dev/null +++ "b/_posts/the-way-of-learning/2015-05-19-Kotlin\345\255\246\344\271\240\344\271\213\350\267\257.md" @@ -0,0 +1,22 @@ +--- +title: "Kotlin学习之路" +categories: + - the-way-of-learning +tags: + - 学习之路 + - Kotlin +toc: true +--- + +本篇文章汇总了 Kotlin 学习的相关资源,包括 Kotlin 的基本概念、编程语言特性、编译器等内容,适合 Kotlin 开发者参考。 + +* +* +* +* +* 中文站: +* 《Kotlin for android developers》中文版翻译: +* Kotlin-Tutorials: +* + +* Android Testing with Kotlin: diff --git "a/_posts/the-way-of-learning/2015-05-19-Lisp\345\255\246\344\271\240\344\271\213\350\267\257.md" "b/_posts/the-way-of-learning/2015-05-19-Lisp\345\255\246\344\271\240\344\271\213\350\267\257.md" new file mode 100644 index 0000000..03dda60 --- /dev/null +++ "b/_posts/the-way-of-learning/2015-05-19-Lisp\345\255\246\344\271\240\344\271\213\350\267\257.md" @@ -0,0 +1,82 @@ +--- +title: "Lisp学习之路" +categories: + - the-way-of-learning +tags: + - 学习之路 + - Lisp +toc: true +--- + +本篇文章汇总了 Lisp 学习的相关资源,包括 Lisp 的基本概念、编程语言特性、编译器等内容,适合 Lisp 开发者参考。 + +* Common Lisp: +* Common Lisp wiki: +* + +* Clozure Common Lisp: +* Steel Bank Common Lisp(SBCL): +* CLISP - an ANSI Common Lisp: +* Allegro CL: +* CMUCL: + +* LispWorks: +* Common Lisp HyperSpec: + +* L-99: Ninety-Nine Lisp Problems: +* Quicklisp: +* AspectL: +* lispforum: +* Lisp: Common Lisp, Racket, Clojure, Emacs Lisp: +* SLIME: Superior Lisp Interaction Mode for Emacs: +* lispide: +* Dandelion: +* ~~My Emacs For Common Lisp: ~~ +* ~~Lispbox: ~~ +* ~~Jabberwocky a Lisp IDE: ~~ + +* Racket: +* newLISP: +* MIT/GNU Scheme: +* The Common Foreign Function Interface(cffi): +* milkypostman/melpa: +* Build Your Own Lisp: +* MELPA: +* CLOCC - Common Lisp Open Code Collection: +* Common Lisp配置:SBCL: + +* MIT/GNU Scheme: +* Lisp之根源: +* The Roots of Lisp: +* Teach Yourself Scheme in Fixnum Days: +* Scheme语言简明教程: +* The Revised6 Report on the Algorithmic Language Scheme: +* The Scheme Programming Language: +* Chez Scheme: +* SLIME User Manual, version 2.14: +* 用 Guile 编写脚本: +* slime-user-manual-cn: +* SLIME’s documentation: +* Lisp Primer: +* 函数式程序设计为什么至关重要: +* +* Lisp Macro: +* Condition Handling in the Lisp Language Family: +* A Brief Guide to CLOS: +* 与Scheme共舞: +* The Nature of Lisp: +* Common LISP Hints: +* 【LISP】Pascal Costanza:极端片面的Lisp介绍: +* Practical Common Lisp: +* On Lisp: +* On Lisp (Chinese Translation): +* ANSI Common Lisp 中文翻譯版: +* Chun Tian (binghe): +* Lisp as an Alternative to Java: +* Lisp as an Alternative to Java: +* The Common Lisp Cookbook: + +## Clojure + +* Clojure: +* Leiningen(一个自动化构建和依赖性管理工具,用于使用Clojure编程语言写的软件项目): diff --git "a/_posts/the-way-of-learning/2015-05-19-Lua\345\255\246\344\271\240\344\271\213\350\267\257.md" "b/_posts/the-way-of-learning/2015-05-19-Lua\345\255\246\344\271\240\344\271\213\350\267\257.md" new file mode 100644 index 0000000..61d6537 --- /dev/null +++ "b/_posts/the-way-of-learning/2015-05-19-Lua\345\255\246\344\271\240\344\271\213\350\267\257.md" @@ -0,0 +1,13 @@ +--- +title: "Lua学习之路" +categories: + - the-way-of-learning +tags: + - 学习之路 + - Lua +toc: true +--- + +本篇文章汇总了 Lua 学习的相关资源,包括 Lua 的基本概念、编程语言特性、编译器等内容,适合 Lua 开发者参考。 + +* diff --git "a/_posts/the-way-of-learning/2015-05-19-Markdown\345\255\246\344\271\240\344\271\213\350\267\257.md" "b/_posts/the-way-of-learning/2015-05-19-Markdown\345\255\246\344\271\240\344\271\213\350\267\257.md" new file mode 100644 index 0000000..bde7f9c --- /dev/null +++ "b/_posts/the-way-of-learning/2015-05-19-Markdown\345\255\246\344\271\240\344\271\213\350\267\257.md" @@ -0,0 +1,22 @@ +--- +title: "Markdown学习之路" +categories: + - the-way-of-learning +tags: + - 学习之路 + - Markdown +toc: true +--- + +本篇文章汇总了 Markdown 学习的相关资源,包括 Markdown 的基本概念、语法、编辑器等内容,适合 Markdown 开发者参考。 + +* Markdown 语法说明 (简体中文版): + +* Typora: +* MarkdownPad: +* Online Markdown Editor, DILLINGER: +* Cmd Markdown: +* 马克飞象: +* 10款流行的Markdown编辑器,总有一款适合你: +* 求关于 Markdown 或类似标记语言的任何吐槽、建议、个人使用风格说明: +* Markdeep: diff --git "a/_posts/the-way-of-learning/2015-05-19-Matlab\344\270\216Octave\345\255\246\344\271\240\344\271\213\350\267\257.md" "b/_posts/the-way-of-learning/2015-05-19-Matlab\344\270\216Octave\345\255\246\344\271\240\344\271\213\350\267\257.md" new file mode 100644 index 0000000..c28aaa3 --- /dev/null +++ "b/_posts/the-way-of-learning/2015-05-19-Matlab\344\270\216Octave\345\255\246\344\271\240\344\271\213\350\267\257.md" @@ -0,0 +1,45 @@ +--- +title: "Matlab & Octave学习之路" +categories: + - the-way-of-learning +tags: + - 学习之路 + - Matlab + - Octave +toc: true +--- + +本篇文章汇总了 Matlab 和 Octave 学习的相关资源,包括 Matlab 和 Octave 的基本概念、安装配置、编程语言特性等内容,适合 Matlab 和 Octave 开发者参考。 + +## Matlab + +* Matlab: + +* Matrix: HB/west0479: +* ilovematlab.cn: + +* matlab GUI程序转换成exe可执行文件: +* 基于MATLAB2008B与VS 2003生成独立可执行的程序: +* 我与matlab的三年: +* 网络MATLAB高手谈MATLAB学习: +* RTW-real-time workshop: +* matlab中怎样实现程序换行: + +## Octave + +* GNU Octave: +* GNU Octave Manual: +* Octclipse项目地址: + +## Maple + +* Maple: +* User Manual: + +## Mathematica + +* Mathematica: + +## Mathcad + +* Mathcad: diff --git "a/_posts/the-way-of-learning/2015-05-19-Nginx\345\255\246\344\271\240\344\271\213\350\267\257.md" "b/_posts/the-way-of-learning/2015-05-19-Nginx\345\255\246\344\271\240\344\271\213\350\267\257.md" new file mode 100644 index 0000000..db87103 --- /dev/null +++ "b/_posts/the-way-of-learning/2015-05-19-Nginx\345\255\246\344\271\240\344\271\213\350\267\257.md" @@ -0,0 +1,14 @@ +--- +title: "Nginx学习之路" +categories: + - the-way-of-learning +tags: + - 学习之路 + - Nginx +toc: true +--- + +本篇文章汇总了 Nginx 学习的相关资源,包括 Nginx 的基本概念、安装配置、编程语言特性等内容,适合 Nginx 开发者参考。 + +* +* Pre-Built Packages for Stable version: diff --git "a/_posts/the-way-of-learning/2015-05-19-OCaml\345\255\246\344\271\240\344\271\213\350\267\257.md" "b/_posts/the-way-of-learning/2015-05-19-OCaml\345\255\246\344\271\240\344\271\213\350\267\257.md" new file mode 100644 index 0000000..b752504 --- /dev/null +++ "b/_posts/the-way-of-learning/2015-05-19-OCaml\345\255\246\344\271\240\344\271\213\350\267\257.md" @@ -0,0 +1,14 @@ +--- +title: "OCaml学习之路" +categories: + - the-way-of-learning +tags: + - 学习之路 + - OCaml +toc: true +--- + +本篇文章汇总了 OCaml 学习的相关资源,包括 OCaml 的基本概念、安装配置、编程语言特性等内容,适合 OCaml 开发者参考。 + +* OCaml: +* opam(OCaml Package Manager): \ No newline at end of file diff --git "a/_posts/the-way-of-learning/2015-05-19-OJ\345\255\246\344\271\240\344\271\213\350\267\257.md" "b/_posts/the-way-of-learning/2015-05-19-OJ\345\255\246\344\271\240\344\271\213\350\267\257.md" new file mode 100644 index 0000000..5f922a7 --- /dev/null +++ "b/_posts/the-way-of-learning/2015-05-19-OJ\345\255\246\344\271\240\344\271\213\350\267\257.md" @@ -0,0 +1,45 @@ +--- +title: "OJ学习之路" +categories: + - the-way-of-learning +tags: + - 学习之路 + - OJ +toc: true +--- + +本篇文章汇总了Online Judge的相关资源,包含主要的OJ平台。 + +* ACM竞赛之输入输出: +* awesome-algorithm: + +* LeetCode Online Judge: +* HackerRanker: +* 洛谷: +* Vijos: +* Virtual Judge: +* 牛客: +* hihocoder: +* cometoj: +* LibreOJ: +* Universal Online Judge: +* 青藤OJ: +* SPOJ (Sphere Online Judge): +* OpenJudge: +* codechef: +* UVa Online Judge: +* codeforces: +* AtCoder: +* 小米OJ: + +## 高校OJ + +* PKU JudgeOnline: +* ZOJ: +* HDU Online Judge System: +* ~~topcoder: ~~ +* ~~codevs: ~~ +* ~~猿圈: ~~ +* ~~九度OJ: ~~ +* ~~九度OJ永久关闭声明: ~~ +* ~~ACdream Online Judge: ~~ diff --git "a/_posts/the-way-of-learning/2015-05-19-OpenGL\345\255\246\344\271\240\344\271\213\350\267\257.md" "b/_posts/the-way-of-learning/2015-05-19-OpenGL\345\255\246\344\271\240\344\271\213\350\267\257.md" new file mode 100644 index 0000000..d54a998 --- /dev/null +++ "b/_posts/the-way-of-learning/2015-05-19-OpenGL\345\255\246\344\271\240\344\271\213\350\267\257.md" @@ -0,0 +1,68 @@ +--- +title: "OpenGL学习之路" +categories: + - the-way-of-learning +tags: + - 学习之路 + - OpenGL +toc: true +--- + +本篇文章汇总了 OpenGL 学习的相关资源,包括 OpenGL 的基本概念、相关工具等内容,适合 OpenGL 开发者参考。 + +* OpenGL: +* OpenGL Wiki: +* docs.GL: + +* GLUT(The OpenGL Utility Toolkit): +* freeglut: +* GLFW: + +* GLEW: +* Glad: + +* LearnOpenGL: +* OpenGL(很多文章的参考文献): +* Learn WebGL: +* NEHE Tutorials: + +* PyOpenGL: + +* Android平台OpenGL ES/Assimp/OpenCV/GLM集成说明: + +* OpenGL顶点坐标与纹理坐标: +* OpenGL纹理上下颠倒翻转的三种解决办法: +* 投影矩阵的推导(Deriving Projection Matrices): +* Android OpenGL ES从白痴到入门(四):离屏渲染(Pbuffer): +* OpenGL入门: +* OpenGL学习脚印: +* OpenGL ES: +* 20分钟让你了解OpenGL——OpenGL全流程详细解读: +* affine transformation matrix 仿射变换矩阵 与 OpenGL: +* Android Matrix 详解: +* 谈一谈 Matrix 与坐标变换: +* Android中利用Camera与Matrix实现3D效果详解: +* 3D图形:矩阵、欧拉角、四元数与方位的故事: +* 四元数与欧拉角(RPY角)的相互转换: +* 3D代码实现仓库: + +* OpenGL ES 2.0 specifiying position attribute vec3 or vec4: +* Why not vec3 for OpenGL ES 2.0 gl_Position? +* Is OpenGL coordinate system left-handed or right-handed? +* How vertex and fragment shaders communicate in OpenGL? +* How does the fragment shader know what variable to use for the color of a pixel? +* Non power of two textures in iOS + +## 其他图形处理库 + +* Rajawali: +* Basic Rajawali3D Tutorial for Android: + +* Vulkan Graphics API: + +## 其它 + +```shell +glxinfo | grep rendering # 查询OpenGL是否打开。提示: direct rendering: Yes 表明启动正常 +glxgears # glxgears是一个测试你的Linux是否可以顺利运行2D、3D的测试软件。 +``` diff --git "a/_posts/the-way-of-learning/2015-05-19-PHP\345\255\246\344\271\240\344\271\213\350\267\257.md" "b/_posts/the-way-of-learning/2015-05-19-PHP\345\255\246\344\271\240\344\271\213\350\267\257.md" new file mode 100644 index 0000000..8a7cd5a --- /dev/null +++ "b/_posts/the-way-of-learning/2015-05-19-PHP\345\255\246\344\271\240\344\271\213\350\267\257.md" @@ -0,0 +1,29 @@ +--- +title: "PHP学习之路" +categories: + - the-way-of-learning +tags: + - 学习之路 + - PHP +toc: true +--- + +本篇文章汇总了 PHP 学习的相关资源,包括 PHP 的基本概念、安装配置、编程语言特性等内容,适合 PHP 开发者参考。 + +* PHP: +* PHP Manual: +* ~~PHP 5 Manual: ~~ + +* Apache HTTP Server: + +* phpMyAdmin: +* phpStudy: +* WAMPSERVER: +* WATMServer服务管理器: +* LNMP一键安装包: +* AppServ : Apache + PHP + MySQL: +* XAMPP Apache + MariaDB + PHP + Perl: + +* Zend Optimizer,Zend Guard Loader 和 Zend Opcache 三者之间的区别: + +* PHPUnit: diff --git "a/_posts/the-way-of-learning/2015-05-19-Pascal\344\270\216Delphi\345\255\246\344\271\240\344\271\213\350\267\257.md" "b/_posts/the-way-of-learning/2015-05-19-Pascal\344\270\216Delphi\345\255\246\344\271\240\344\271\213\350\267\257.md" new file mode 100644 index 0000000..3bed284 --- /dev/null +++ "b/_posts/the-way-of-learning/2015-05-19-Pascal\344\270\216Delphi\345\255\246\344\271\240\344\271\213\350\267\257.md" @@ -0,0 +1,19 @@ +--- +title: "Pascal&Delphi学习之路" +categories: + - the-way-of-learning +tags: + - 学习之路 + - Pascal + - Delphi +toc: true +--- + +本篇文章汇总了 Pascal&Delphi 学习的相关资源,包括 Pascal&Delphi 的基本概念、安装配置、编程语言特性等内容,适合 Pascal&Delphi 开发者参考。 + +* free pascal: +* free pascal docs: +* Lazarus: +* Delphi: +* Pascal (programming language): +* Delphi (programming language): \ No newline at end of file diff --git "a/_posts/the-way-of-learning/2015-05-19-Perl\345\255\246\344\271\240\344\271\213\350\267\257.md" "b/_posts/the-way-of-learning/2015-05-19-Perl\345\255\246\344\271\240\344\271\213\350\267\257.md" new file mode 100644 index 0000000..58a68ae --- /dev/null +++ "b/_posts/the-way-of-learning/2015-05-19-Perl\345\255\246\344\271\240\344\271\213\350\267\257.md" @@ -0,0 +1,40 @@ +--- +title: "Perl学习之路" +categories: + - the-way-of-learning +tags: + - 学习之路 + - Perl +toc: true +--- + +本篇文章汇总了 Perl 学习的相关资源,包括 Perl 的基本概念、安装配置、编程语言特性等内容,适合 Perl 开发者参考。 + +* The Perl Programming Language: +* Perl FAQ: +* Perl programming documentation: +* The Comprehensive Perl Archive Network (CPAN): +* +* + +* Strawberry Perl: +* DWIM Perl: +* ActivePerl: +* Perl Express: +* BioPerl: +* Perl Mongers: + +* 功能丰富的 Perl: 一行程序 101: + +## EPIC + +* 项目地址: +* 安装说明: + +## PerlUnit + +* + +## Open Perl IDE + +* \ No newline at end of file diff --git "a/_posts/the-way-of-learning/2015-05-19-Prolog\345\255\246\344\271\240\344\271\213\350\267\257.md" "b/_posts/the-way-of-learning/2015-05-19-Prolog\345\255\246\344\271\240\344\271\213\350\267\257.md" new file mode 100644 index 0000000..8f05cff --- /dev/null +++ "b/_posts/the-way-of-learning/2015-05-19-Prolog\345\255\246\344\271\240\344\271\213\350\267\257.md" @@ -0,0 +1,15 @@ +--- +title: "Prolog学习之路" +categories: + - the-way-of-learning +tags: + - 学习之路 + - Prolog +toc: true +--- + +本篇文章汇总了 Prolog 学习的相关资源,包括 Prolog 的基本概念、安装配置、编程语言特性等内容,适合 Prolog 开发者参考。 + +* Visual Prolog: +* SWI-Prolog: +* Amzi! Prolog + Logic Server™: diff --git "a/_posts/the-way-of-learning/2015-05-19-Python\345\255\246\344\271\240\344\271\213\350\267\257.md" "b/_posts/the-way-of-learning/2015-05-19-Python\345\255\246\344\271\240\344\271\213\350\267\257.md" new file mode 100644 index 0000000..e9d3322 --- /dev/null +++ "b/_posts/the-way-of-learning/2015-05-19-Python\345\255\246\344\271\240\344\271\213\350\267\257.md" @@ -0,0 +1,152 @@ +--- +title: "Python学习之路" +categories: + - the-way-of-learning +tags: + - 学习之路 + - Python +toc: true +--- + +本篇文章汇总了 Python 学习的相关资源,包括 Python 的基本概念、安装配置、编程语言特性等内容,适合 Python 开发者参考。 + +* CPython: +* Documentation: + +* Python Enhancement Proposals: + +* ActivePython: +* IronPython: +* Jython: +* PyPy(Psyco的升级替代品): + +* pyenv: +* Virtualenv: +* 使用virtualenv创建python沙盒(虚拟)环境: + +* PyPI - the Python Package Index: +* pip: +* setuptools: +* Python: What's PyPi, pip, easy_install, setuptools? + +* conda: +* Anaconda: +* PyCharm: + +## Python基础知识 + +* Python注释: +* python中os.system出错问题: +* python进制转换: +* python list 的 del() 函数: +* Python zipfile报错问题: +* Python 3.0 抢“鲜”体验: +* 让你的python程序同时兼容python2和python3: +* Dive Into Python 3: + +* linux怎么改python默认版本: +* Python退格键出现方块: +* 在python交互式环境中,在不关闭窗口的情况在如何清除,之前的语句: +* 扩展和嵌入 Python 解释器: + +## IDE/工具/三方库 + +* The Eric Python IDE: +* Wing IDE: +* Stani's Python Editor(SPE): +* Ulipad: +* Python Tools for Visual Studio: +* pylint(培养良好的编码习惯): + +* Unofficial Windows Binaries for Python Extension Packages: +* SCons: A software construction tool: +* spyder: +* PyUnit testing framework: +* pywin32(Python for Windows Extensions): +* PythonToolkit (PTK): +* JPype: + +* Python第三方常用工具、库、框架等: +* 初探验证码识别: +* Python 程序员必知必会的开发者工具: +* Python自动单元测试框架: + +## PyDev + +* PyDev: +* LiClipse: + +## PIL/Pillow(Python Imaging Library) + +* Pillow: +* Pillow文档: +* PIL、Pillow安装使用方法: +* 64位Win7下无法安装PIL库的原因: + +## 其它 + +* PyGTK: +* PyQt: +* wxPython: +* Pmw(Pythonmegawidgets): + +* ~~PyXML(Python/XML): ~~ +* PyGame(用于多媒体开发和游戏软件开发的模块): + +* ~~numarray(用于处理任意维数的固定类型数组,简单说就是一个矩阵库。低层代码使用C来编写): ~~ +* NumPy(Numarray的后继者): +* matplotlib(一个Python的2D绘图库): +* SciPy(Python-based ecosystem of open-source software formathematics, science, and engineering): +* SAGE(基于NumPy和其他几个工具所整合成的数学软件包,目标是取代Magma, Maple, Mathematica和Matlab 这类工具): + +* MySQLdb: +* ~~adodb(ADO数据库连接组件,主要用于PHP也可用于Python): ~~ +* PyMedia(用于多媒体操作): + +* ~~Psyco(代码加速度器,可使代码的执行速度提高到与编译语言一样的水平): ~~ +* py2exe(用来生成windows可执行文件): +* Python-ldap(提供一组面向对象的API,可方便地在python中访问ldap目录服务,它基于OpenLDAP2.x): +* xmpppy(XMPP协议支持): +* Mechanize(爬虫连接网站常用): +* Pyro(实现与JAVA RMI类似的技术): +* twisted(An event-driven networking engine): +* django(一个WEB framework): +* Pylons(又一个web framework): +* Kodos(正则表达式调试工具): + +* Winpdb(Cross Platform Python Debugger): +* docutils(用来写文档的): +* reportlab(Python操作PDF的Libary。): +* cherrypy(一个WEB framework): +* pandas(data structures and data analysis tools): +* bsddb3(BerkeleyDB的连接组件): +* chardet(编码检测): +* scons(项目构建工具,写好了模板用起来还是很方便的): +* pycurl(URL处理工具): +* pydot(画图的,graphiz,可以很方便画流程图): +* feedparser(rss解析): +* astropy(天文相关的一些工具): +* PyRAF(天文相关的一些工具): +* astroplotlib(天文相关的一些工具): +* scapy(网络包构建分析框架,可编程的wireshark): +* Cheetah(构建和扩充任何种类的基于文本的内容): +* sendpkt(一个开发包) +* pyevent(事件支持) +* pypcap(抓包的) +* python-dnet(控制网络安全的其他设备) +* simplejson(JSON的支持) +* sqlalchemy(SQL数据库连接池) +* SQLObject(数据库连接池) +* ctypes(用来调用动态链接库) +* Cx-oracle(连接oracle的工具) +* DBUtils(数据库连接池) +* DPKT(raw-scoket网络编程) +* dpkt(数据包的解包和组包) +* pefile(windows pe文件解析器) +* PLY(基于LEX、YACC的语言工具) +* Corepy(使用开发编写x86汇编程序) +* LightCloud(实现的分布式的键-值数据库) +* Parallel Python(PP)(轻松开发SMP、集群并行计算的库) + +* pythonchallenge: +* Swaroop C H: \ No newline at end of file diff --git "a/_posts/the-way-of-learning/2015-05-19-Ruby\345\255\246\344\271\240\344\271\213\350\267\257.md" "b/_posts/the-way-of-learning/2015-05-19-Ruby\345\255\246\344\271\240\344\271\213\350\267\257.md" new file mode 100644 index 0000000..c66ff81 --- /dev/null +++ "b/_posts/the-way-of-learning/2015-05-19-Ruby\345\255\246\344\271\240\344\271\213\350\267\257.md" @@ -0,0 +1,21 @@ +--- +title: "Ruby学习之路" +categories: + - the-way-of-learning +tags: + - 学习之路 + - Ruby +toc: true +--- + +本篇文章汇总了 Ruby 学习的相关资源,包括 Ruby 的基本概念、安装配置、编程语言特性等内容,适合 Ruby 开发者参考。 + +* Ruby: +* Help and documentation for the Ruby programming language: +* RubyGems: +* Ruby on Rails 指南: +* Programming Ruby The Pragmatic Programmer's Guide: + +* 写给 Ruby 新人的公开信: + +* irb 與 ruby 指令: diff --git "a/_posts/the-way-of-learning/2015-05-19-Rust\345\255\246\344\271\240\344\271\213\350\267\257.md" "b/_posts/the-way-of-learning/2015-05-19-Rust\345\255\246\344\271\240\344\271\213\350\267\257.md" new file mode 100644 index 0000000..44fc5b3 --- /dev/null +++ "b/_posts/the-way-of-learning/2015-05-19-Rust\345\255\246\344\271\240\344\271\213\350\267\257.md" @@ -0,0 +1,30 @@ +--- +title: "Rust学习之路" +categories: + - the-way-of-learning +tags: + - 学习之路 + - Rust +toc: true +--- + +本篇文章汇总了 Rust 学习的相关资源,包括 Rust 的基本概念、安装配置、编程语言特性等内容,适合 Rust 开发者参考。 + +* Rust: + +* Rust Documentation: +* Rust 官方文档中文教程: + +* The Rust Programming Language: +* Rust 程序设计语言: +* Rust编程语言入门教程: + +* Rust语言圣经(Rust Course): + +* awesome-rust: + +* The Cargo Book: +* crates.io: + +* 欢迎来到 Comprehensive Rust: +* Android Rust 简介: diff --git "a/_posts/the-way-of-learning/2015-05-19-R\345\255\246\344\271\240\344\271\213\350\267\257.md" "b/_posts/the-way-of-learning/2015-05-19-R\345\255\246\344\271\240\344\271\213\350\267\257.md" new file mode 100644 index 0000000..2f2e3d8 --- /dev/null +++ "b/_posts/the-way-of-learning/2015-05-19-R\345\255\246\344\271\240\344\271\213\350\267\257.md" @@ -0,0 +1,58 @@ +--- +title: "R学习之路" +categories: + - the-way-of-learning +tags: + - 学习之路 + - R +toc: true +--- + +本篇文章汇总了 R 学习的相关资源,包括 R 语言的基本概念、安装配置、编程语言特性等内容,适合 R 开发者参考。 + +* R: +* The Comprehensive R Archive Network: + +* Rtools: + +## RStudio + +* RStudio: +* RStudio User Guide: +* Using RStudio Projects: + +## R Packages + +* R语言中,你最常用的软件包有哪些,请简述功能及特点? +* R语言书籍的学习路线图: + +* Bioconductor: +* Shiny(Easy web apps for data science without the compromises): +* colourpicker(A colour picker tool for Shiny and for selecting colours in plots): +* R Markdown: +* quantmod(Quantitative Financial Modelling & Trading Framework for R): +* Tidyverse: +* ggplot2: +* gganimate: +* Plotly R Open Source Graphing Library: +* plyr(The split-apply-combine strategy for R): +* reshape2(长宽数据转换): +* PerformanceAnalytics(Econometric tools for performance and risk analysis): +* lavaan(latent variable analysis, 隐变量分析): +* brew(用于动态生成文本和代码,类似于模板引擎): +* rstatscn(R Interface for China National Data): +* Hmisc(数据分析、数据操作、数据可视化以及生成描述性统计信息): + +* xlsx: + +* ggplot2 Version of Figures in “Lattice: Multivariate Data Visualization with R”: +* The R Graph Gallery: +* R Charts: + +## R Books + +* Econometrics in R: +* Applied Econometrics with R: +* Statistics Using R with Biological Examples: + +* Statorials – 您的统计素养指南! \ No newline at end of file diff --git "a/_posts/the-way-of-learning/2015-05-19-Scala\345\255\246\344\271\240\344\271\213\350\267\257.md" "b/_posts/the-way-of-learning/2015-05-19-Scala\345\255\246\344\271\240\344\271\213\350\267\257.md" new file mode 100644 index 0000000..d7bca42 --- /dev/null +++ "b/_posts/the-way-of-learning/2015-05-19-Scala\345\255\246\344\271\240\344\271\213\350\267\257.md" @@ -0,0 +1,22 @@ +--- +title: "Scala学习之路" +categories: + - the-way-of-learning +tags: + - 学习之路 + - Scala +toc: true +--- + +本篇文章汇总了 Scala 学习的相关资源,包括 Scala 的基本概念、安装配置、编程语言特性等内容,适合 Scala 开发者参考。 + +* +* documentation: +* wikipedia: (programming_language) +* scalachina: + +* ScalaTest: +* SBT: +* ScalaIDE: + +* Scala入门之高级类型:this.type: \ No newline at end of file diff --git "a/_posts/the-way-of-learning/2015-05-19-TCL\344\270\216TK\345\255\246\344\271\240\344\271\213\350\267\257.md" "b/_posts/the-way-of-learning/2015-05-19-TCL\344\270\216TK\345\255\246\344\271\240\344\271\213\350\267\257.md" new file mode 100644 index 0000000..47ae350 --- /dev/null +++ "b/_posts/the-way-of-learning/2015-05-19-TCL\344\270\216TK\345\255\246\344\271\240\344\271\213\350\267\257.md" @@ -0,0 +1,21 @@ +--- +title: "TCL与TK学习之路" +categories: + - the-way-of-learning +tags: + - 学习之路 + - TCL与TK +toc: true +--- + +本篇文章汇总了 TCL 与 TK 学习的相关资源,包括 TCL 与 TK 的基本概念、安装配置、编程语言特性等内容,适合 TCL 与 TK 开发者参考。 + +* Tloona Tcl/Tk IDE: +* tclsqueak: +* CrowTDE: +* MyTcl: + +* ACTIVETCL: +* Getting started with ActiveTc: + +* Tcler's Wiki: diff --git "a/_posts/the-way-of-learning/2015-05-19-TeX\345\255\246\344\271\240\344\271\213\350\267\257.md" "b/_posts/the-way-of-learning/2015-05-19-TeX\345\255\246\344\271\240\344\271\213\350\267\257.md" new file mode 100644 index 0000000..1612c39 --- /dev/null +++ "b/_posts/the-way-of-learning/2015-05-19-TeX\345\255\246\344\271\240\344\271\213\350\267\257.md" @@ -0,0 +1,55 @@ +--- +title: "TeX学习之路" +categories: + - the-way-of-learning +tags: + - 学习之路 + - TeX +toc: true +--- + +本篇文章汇总了 TeX 学习的相关资源,包括 TeX 的基本概念、安装配置等内容,适合 TeX 开发者参考。 + +* TeX Live: + +* LaTeX-Workshop: +* WinEdt: +* Texmaker: +* TeXworks: +* TeXstudio: +* TeXmacs: +* The easy to use, online, collaborative LaTeX editor: +* ~~TeXpen: ~~ +* ~~SciTE LaTeX IDE: ~~ +* ~~Kile LaTeX Editor: >~~ +* ~~Gummi: The simple LaTeX editor: ~~ +* ~~LEd, is an environment for rapid TeX and LaTeX document development: ~~ +* ~~jaxedit: ~~ + +* Typst: +* LyX: +* ~~Word-to-LaTeX Converter: ~~ +* MathType: + +* The Comprehensive TEX Archive Network(CTAN): +* LaTeX – A document preparation system: +* All about TeXnique: +* Chinese TeX(CTEX): +* LaTeX Stack Exchange: +* LaTeX工作室: + +## TeX Live自带文档 + +* CTEX FAQ (常见问题集): texlive\${VERSION}\texmf-dist\doc\latex\ctex-faq\ctex-faq.pdf +* 一份(不太)简短的LATEX2e 介绍: texlive\${VERSION}\texmf-dist\doc\latex\lshort-chinese\lshort-zh-cn.pdf +* The Comprehensive LATEX Symbol List: texlive\${VERSION}\texmf-dist\doc\latex\comprehensive\symbols-a4.pdf +* moderncv: texlive\${VERSION}\texmf-dist\doc\latex\moderncv\manual\moderncv_userguide.pdf + +## 其它文档 + +* An overview of TEX, its children and their friends: +* 使用VSCode编写LaTeX: +* LaTeX内容总结: +* TeX/LaTeX 常用宏包简介: +* Linux下Texlive的ctex包中文字体问题: +* Latex相关资源汇总: diff --git "a/_posts/the-way-of-learning/2015-05-19-Unix\344\270\216Linux\345\255\246\344\271\240\344\271\213\350\267\257.md" "b/_posts/the-way-of-learning/2015-05-19-Unix\344\270\216Linux\345\255\246\344\271\240\344\271\213\350\267\257.md" new file mode 100644 index 0000000..f03b86f --- /dev/null +++ "b/_posts/the-way-of-learning/2015-05-19-Unix\344\270\216Linux\345\255\246\344\271\240\344\271\213\350\267\257.md" @@ -0,0 +1,605 @@ +--- +title: "Unix与Linux学习之路" +categories: + - the-way-of-learning +tags: + - 学习之路 + - Linux +toc: true +--- + +本篇文章汇总了 Unix 和 Linux 学习的相关资源,包括 Unix 和 Linux 的历史渊源、相关工具等内容,适合 Unix 和 Linux 开发者参考。 + +## General Knowledge + +* The Open Group(Unix): +* Unix History: +* UNIX System V: +* Shebang (Unix): + +* MenuetOS(Menuet isn't based on other operating system nor has it roots within UNIX or the POSIX standards.): + +* The Linux Kernel Archives: +* Elixir Cross Referencer: +* VGER.KERNEL.ORG(provide email list services for the linux kernel developers): +* GNU Operating System: +* Free Software Foundation (FSF): +* Linux Professional Institute(LPI is the global certification standard and career support organization for open source professionals): +* +* +* Linux Packages Search: +* RPM Fusion(RPM Fusion provides software that the Fedora Project or Red Hat doesn't want to ship): +* Linux From Scratch: + +## Linux Distributions + +* Ubuntu: +* Ubuntu Wiki: +* deepin: +* Debian: +* Fedora: +* CentOS: +* rethat: +* openSUSE: +* opensuse-guide: +* manjaro: + +* Chromium OS: +* ChromeOS: +* Differences between ChromeOS Flex and ChromeOS: +* FydeOS: + +* 鳥哥的 Linux 私房菜: + +## Softwares/Tools/Knowledge + +* 一篇文章搞懂Debian_Ubuntu软件包更新和删除: +* 扩容swap文件: +* Linux压缩与解压常用命令: +* linux中无 conio.h的解决办法: +* Linux快捷键: +* ssh相关原理学习与常见错误总结: + +* Linux命令大全: +* explainshell: +* tldr: +* Nushell: + +* Install Microsoft Windows Fonts in Ubuntu: +* Linux Performance: +* File system: +* Linux-HA: +* Unix Shells: Bash, Fish, Ksh, Tcsh, Zsh: +* Shell 编程: Bash空格的那点事: +* Shell编程: Bash引号的那点事: +* 基于CentOS的Linux基本网络配置,包括网卡eth0、DNS、Host等: +* su cannot set user id Resource temporarily unavailable故障解决 : +* Linux查看物理CPU个数、核数、逻辑CPU个数: +* Linux查看CPU信息、机器型号等硬件信息: +* 理解inode: +* rm参数列表过长: +* Unix/Linux如何同时统计多文件夹下文件、文件夹的个数: +* Linux shell脚本的字符串截取: +* Linux 技巧: Bash 参数和参数扩展: +* 理解Linux系统的日志: +* linux时间和时区修改(附suse): +* linux中时间设置date、hwclock、clock: +* Linux&Windows双系统时间不一致解决方案: +* 通过命令行查找一个IP的地理位置信息: +* 多终端管理器tmux使用详解: +* Linux系统里如何彻底的清空屏幕?: +* 如何在Linux上将HTML页面转化成png图片: +* Ubuntu输入密码登陆后又跳回到登录界面: +* LNMP安装快速导航(官网教程): +* ubuntu删除旧内核和多余启动项: +* 各个Linux版本的本地root密码破解方法: +* Linux 软件看门狗 watchdog: +* C语言调试手段:锁定错误的实现方法: +* Linux终端字符颜色设置: +* hexdump命令使用: +* ubuntu下终端路径只显示当前目录: +* linux连接投影机: +* Devhelp: +* Unix 即集成开发环境: +* Linux Troubleshooting Cheatsheet: strace, htop, lsof, tcpdump, iftop & sysdig: +* strace: +* java.lang.VerifyError: Expecting a stackmap frame at branch target JDK 1.7: +* 将Linux下编译的warning警告信息输出到文件中[整理笔记]: +* linux C中调用shell命令和运行shell脚本: +* find 删除拷贝用法: +* linux 修改分区卷标 ( Partition Label ) : +* shell脚本“syntax error:unexpected end of file”解决方案 : +* String contains in Bash: +* Could not get lock /var/lib/apt/lists/lock - open: +* Slow Server? This is the Flow Chart You're Looking For: +* 设置Linux系统的空闲等待时间TMOUT: +* Linux下chkconfig命令详解: +* linux下如何关闭防火墙?如何查看防火墙当前的状态: +* TCP 连接断连问题剖析: +* ethtool的基本设置: +* Shell脚本: 判断用户和用户组是否已经存在/创建用户和用户组: +* nc命令用法举例: +* How to Manage ‘Systemd’ Services and Units Using ‘Systemctl’ in Linux: +* linux中screen命令的用法: +* linux 下script命令记录终端会话: +* 记录终端下的操作(tee): +* Shell脚本交互之: 自动输入密码: +* Shell中重定向< +* linux 终端backspace不能删除字符: +* Fedora 删除旧内核: +* linux关于S权限和T权限的介绍: +* Linux使用技巧12--Ubuntu代理: +* Bash的陷阱: +* Linux命令之file - 检测并显示文件类型: +* Linux Centos 删除除某(多)个文件之外的所有文件: +* linux如何删除zip包中某个文件夹及里面的内容: +* GPG入门教程: + +* Linux下好玩的命令: +* 动画演示一些无用但有趣的Linux命令: +* Linux中10个有用的命令行补齐命令: +* Linux中的10个链接操作符: + +* wine: +* Winetricks: +* fswatch: +* Compiz: +* 新立得(Synaptic): +* gparted: +* GLX-Dock: +* vncview: +* PDFtk: +* Master PDF Editor for Linux: +* Okular: +* AppImage(Package desktop applications as AppImages that run on common Linux-based operating systems): +* shunit2: +* iPerf / iPerf3: +* Glances: +* Atop: +* htop: +* iftop: +* Iotop: +* lrzsz(串口传输文件): +* httpry(HTTP logging and information retrieval tool ): +* iproute2: +* GNU Binutils(objdump/gprof/strings): +* indent: +* cproto: +* ttyrec 和 ttyplay(记录、保存和播放终端会话软件): +* curl: +* Poptop - The PPTP Server for Linux: +* Linux Extended BPF (eBPF) Tracing Tools: + +* grep_sed_awk练习: + +* GNU Grep: +* ack: + +* gawk: +* GNU sed: + +## Linux常用命令 + +```shell + # 先尝试man再尝试google + man xxx + + sha1sum/md5sum + find "/etc/" -name "*" -type f | xargs wc -l | awk '{print $2" "$1"lines"}' # 打印某一文件夹下的所有文件名及其行数 + + mtools # mtools 命令用于显示mtools 支持的指令。mtools 实际上是一个命令集合,是DOS 文件系统的工具程序,它可以模拟许多MS-DOS命令,使用起来非常方便。使用权限是所有用户。 + + # set the system's date from a remote host + # sudo apt-get install rdate + rdate + + grep -R "org.apache.commons.FileUtils" * + grep -inr --color "ERROR" test_debug.log + ps –fu $USER | grep java # 显示当前用户的所有线程 + ps -ef | grep 4736 # 查看4736端口是否被占用 + ps -aux + ps -ef # 查看所有进程 + netstat -tulnp | grep mysqld # 查看mysqld的监听情况 + netstat –apn | grep pid #先查进程号,再找到进程信息 + netstat -lntp # 查看所有监听端口 + netstat -antp # 查看所有已经建立的连接 + netstat -anp | grep xxxx #xxxx为端口号 Linux下查看某个端口下运行的是什么程序 + netstat -s # 查看网络统计信息进程 + find . –name "*.log" | xargs grep error # 在当前目录的所有日志文件中查找关键词"error" + ls -t `find . -name "*.log"` #列出最近修改的文件 + + watch "ls -al myfile" 监控文件变化 + + cat /etc/issue # 查看当前操作系统发行版信息 + + apt-cache # query the APT cache + apt-file search libz.so.1 # APT package searching utility + apt-cdrom # apt-cdrom is a tool to add CDROM's to APT's source list. + dpkg + + sudo sh *.sh # 打开.sh文件 + ./*** # 打开其它可执行文件,如果没有可执行权限,需要chmod + + man nautilus + man ed + + file explore + + xdg-open # 命令行快速打开各类型文件 + mplayer xxx.mp3 # 使用mplayer打开 + + fc-list :lang=zh-cn # 查看字体 + + uname -a # 查看系统信息 + head -n 1 /etc/issue # 查看操作系统版本 + hostname # 查看计算机名,hostname name只能暂时修改,重启后失效,如果需要永久修改,使用/etc/hostname文件 + lspci -tv # 列出所有PCI设备。PCI和PCI Express,是计算机常使用的一种高速总线。操作系统中的PCI/PCI-E设备驱动以及操作系统内核,都需要访问PCI及PCI-E配置空间。PCI/PCI-E设备的正常运行,离不开PCI/PCI-E配置空间。通过读写PCI/PCI-E配置空间,可以更改设备运行参数,优化设备运行。本文介绍用户空间可以读取、修改、扫描PCI/PCIE设备的用户命令及使用。在Linux内核中,为PCI和PCI-E只适用了一种总线PCI(内核提供的总线系统),故访问PCI-E配置空间,也包括了PCI设备配置空间。 + lsusb -tv # 列出所有USB设备 + lsmod # 列出加载的内核模块 + env # 查看环境变量资源 + df -h # 查看各分区使用情况 + df -i # 查看inode使用 + du -sh <目录名> # 查看指定目录的大小 + du --max-depth=1 dir # 查看指定目录指定深度的大小 + grep MemTotal /proc/meminfo # 查看内存总量 + grep MemFree /proc/meminfo # 查看空闲内存量 + uptime # 查看系统运行时间、用户数、负载 + cat /proc/loadavg # 查看系统负载磁盘和分区 + mount | column -t # 查看挂接的分区状态 + fdisk -l # 查看所有分区 + cfdisk -Ps # 查看磁盘分区的用法 cfdisk -Ps 磁盘设备名 只有一个硬盘也可以用 cfdisk -Ps + cfdisk -Ps /dev/sda + sfdisk -l + hdparm -i /dev/hda # 查看磁盘参数(仅适用于IDE设备) + dmesg | grep IDE # 查看启动时IDE设备检测状况网络 + ifconfig # 查看所有网络接口的属性 + route -n # 查看路由表 + top # 实时显示进程状态用户 + w # 查看活动用户 + id <用户名> # 查看指定用户信息 + last # 查看用户登录日志 + cut -d: -f1 /etc/passwd # 查看系统所有用户 + cut -d: -f1 /etc/group # 查看系统所有组 + crontab -l # 查看当前用户的计划任务服务 + rpm -qa # 查看所有安装的软件包 + rpm -q mysql # 查看是否安装了mysql客户端 + + lsof -i :xxxx #xxxx为端口号 + + cat /proc/version # 查看内核版本命令 + lsb_release -a ##查看linux版本 + cat /etc/debian_version + cat /etc/issue + file /bin/bash + file /bin/cat + cat /etc/debian_version //Only for Debian + cat /etc/redhat-release //Only for Redhat + rpm -q redhat-release //Only for Redhat + redhat-release-5Server-5.6.0.3 + + # 注:这种方式下可看到一个所谓的release号,比如上边的例子是5,这个release号和实际的版本之间存在一定的对应关系,如下: + # redhat-release-3AS-1 -> Redhat Enterprise Linux AS 3 + # redhat-release-3AS-7.4 -> Redhat Enterprise Linux AS 3 Update 4 + # redhat-release-4AS-2 -> Redhat Enterprise Linux AS 4 + # redhat-release-4AS-2.4 -> Redhat Enterprise Linux AS 4 Update 1 + # redhat-release-4AS-3 -> Redhat Enterprise Linux AS 4 Update 2 + # redhat-release-4AS-4.1 -> Redhat Enterprise Linux AS 4 Update 3 + # redhat-release-4AS-5.5 -> Redhat Enterprise Linux AS 4 Update 4 + + # man update-alternatives + + # Configure参数解释说明: autoconf: 16 Running configure Scripts + + # 把/dev/cdrom目录制作为镜像,名字为/root/rh1.iso,可以使用下面命令中的任意一条 + dd if=/dev/cdrom of=/root/rh1.iso + #cat /dev/cdrom >;/root/1.iso + mkisofs -r -o myiso.iso /dev/cdrom + cp -r /home/user name.iso + + # man tailf + # Linux下分割合并文: man split/cat + # 生成目录树结构: man tree + + # 重命名文件 + rename + + # 切换用户并执行一条命令 + su - oracle -c command + # 切换用户并执行一个shell文件 + su - oracle -s /bin/bash shell.sh +``` + +## 修改文件打开方式 + +* 全局配置:`/usr/share/applications/defaults.list` +* 用户配置:`~/.local/share/applications/mimeapps.list` + +例如配置iso类型文件的打开方式一般默认是archive manager,如果想修改为nero,可以添加:`application/x-cd-image=nerolinux.desktop;`,然后图形界面下双击iso文件就使用nero打开了。 + +## Linux重装系统指南(Ubuntu) + +* 安装金山wps,解决字体问题 + +```shell + fedora:/opt/kingsoft/wps-office/office6/wps: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory + yum install libstdc++-devel.i686 +``` + +* 卸载libreoffice/firefox/youker-assistant/amazon +* 重新启动计算机 +* 安装GLX-Dock并进行配置 +* 安装快盘,进行配快盘和ubuntu one +* 安装okular/meld +* 卸载Rhythmbox/empathy/account-plugin-* +* 安装font-manager + +## Linux重装系统指南(Fedora) + +* 安装gnome-tweak-tool设置工具 +* sudo yum install gnome-tweak-tool +* 安装后在左上角【活动】里可以找到【优化工具】图标打开进行设置 +* 安装最快软件源插件: sudo yum install yum-plugin-fastestmirror +* 安装下载加速插件: sudo yum install yum-presto -y +* 安装鼠标右键【在终端中打开】: sudo yum install nautilus-open-terminal +* 配置RPM Fusion +* 安装相关软件:gcc/Yumex/Compiz(ccsm)/Cariodock +* 设置自动挂载文件系统fstab + +## ubuntu更新问题 + +更新管理器在检查软件包的时候总是有如下问题 + + 无法下载 cdrom://Ubuntu 8.10 _Intrepid Ibex_ - Release i386 (20081029.5)/dists/intrepid/main/binary-i386/Packages 请使用 apt-cdrom,通过它就可以让 APT 能识别该光盘。apt-get upgdate 不能被用来加入新的光盘。 + 无法下载 cdrom://Ubuntu 8.10 _Intrepid Ibex_ - Release i386 (20081029.5)/dists/intrepid/restricted/binary-i386/Packages 请使用 apt-cdrom,通过它就可以让 APT 能识别该光盘。apt-get upgdate 不能被用来加入新的光盘。 + 无法下载 http://cn.archive.ubuntu.com/ubuntu/dists/intrepid-backports/main/binary-i386/Packages.bz2 Hash 校验和不符 + 有一些索引文件不能下载,它们可能被忽略了,也可能转而使用了旧的索引文件。 + +解决方法: 把 /etc/apt/sources.list里面有cdrom的几行删掉,或者利用软件中心或新立德包管理器把软件源终中的cdrom去掉。 + +## libreoffice中PPT字体便粗问题 + +Tools → Options... → LibreOffice → View → Graphics output (取消钩选Use hardware acceleration) + +## 主文件夹里的中文文件夹改成英文文件夹 + +打开终端,在终端下输入命令: + +```shell + export LANG=en_US + xdg-user-dirs-gtk-update +``` + +这个时候会弹出一个配置界面,提示是否将中文目录切换为英文目录。选中不再提示,确定。系统会删除没有内容的中文目录,而有内容的目录会保持。并创建8个相应的英文目录如下: “Desktop”、“Download”、“Templates”、“Public”、“Documents”、“Music”、“Pictures”、“Videos”。此时,您在“位置”里看到的常用中文目录已经变成英文目录; + +再执行: + +```shell + export LANG=zh_CN.UTF-8 +``` + +## 重装Ubuntu如何保留/home分区中的数据 + +windows系统可以在重装时只格式化C盘,从而保留其他分区的数据。 Ubuntu系统也可以,只要在安装系统时分出一个/home分区。你可以把Ubuntu的“/”分区看为windows的C盘,重装Ubuntu时只格式化“/”分区,不格式化“/home”,这样就可以保留“/home”中的数据 + +## 如何启用 Ubuntu 中的 root 帐号 + +和其它发行版本的Linux不同,Ubuntu Linux有一个与众不同的特点,那就是初次使用时,你无法作为root来登录系统,为什么会这样?这就要从系统的安装说起。对于其他Linux系统来说,一般在安装过程就设定root密码,这样用户就能用它登录root帐户或使用su命令转换到超级用户身份。与之相反,Ubuntu默认安装时,并没有给root用户设置口令,也没有启用root帐户。问题是要想作为root用户来运行命令该怎么办呢?没关系,我们可以使用sudo命令达此目的。sudo是linux下常用的允许普通用户使用超级用户权限的工具,该命令为管理员提供了一种细颗粒度的访问控制方法,通过它人们既可以作为超级用户又可以作为其它类型的用户来访问系统。这样做的好处是,管理员能够在不告诉用户root密码的前提下,授予他们某些特定类型的超级用户权限,这正是许多系统管理员所梦寐以求的。这里有必要说先简单一下sudo和su命令的区别: su命令是在不退出当前用户的情况下切换用户的工具,通过su可以在用户之间切换,如果超级权限用户root向普通或虚拟用户切换不需要密码,而普通用户切换到其它任何用户都需要密码验证。sudo是Unix/Linux平台上的一个非常有用的工具,它允许系统管理员分配给普通用户一些合理的“权利”,让他们执行一些只有超级用户或其他特许用户才能完成的任务这样一来,就不仅减少了root用户的登陆次数和管理时间,也提高了系统安全性。sudo设计者的宗旨是: 给用户尽可能少的权限但仍允许完成他们的工作。我们可以简单的理解成: su获得稳定的超级用户(或其他用户权限),sudo获得暂时性的限制了的超级用户权限,一段时间之后会失效。 + +好,下面讲一下具体的设置方法: + +1.为root设置一个root密码: $ sudo passwd root + +之后会提示要输入root用户的密码,连续输入root密码 + +2.使用: $ su,并按照提示输入root密码,就可以在终端中切换成超级管理员用户身份了! + +## Linux用户添加sudoer + +使用sudo可以在以非root用户登录时临时获得root权限,并执行需要的命令。可以使用sudo的用户可以叫做sudoer。 + +添加sudoer的方法(假设您已经安装sudo): 执行 + + visudo or sudoedit + +提示: 有些发行版的sudo提供了sudoedit,有的则提供了visudo,功能上基本是一样的。你也可以使用其他编辑器如vi进行编辑/etc/sudoers,但由于文件是只读的,请强制保存(如w!)或去除只读属性再保存。查找 + + root ALL=(ALL) ALL + +在下面加入 + + %adm ALL=(ALL) ALL + +如果sudo时不想输入密码,可以把上句改成: + + %adm ALL=(ALL) NOPASSWD: ALL + +保存文件,然后执行 + + gpasswd -a 用户名 adm + +然后这个用户就可以用sudo了。 + +## linux无root权限安装软件 + +在有些公司是不会给开发人员root权限的,但是开发人员有时候也需要装一些软件。没有root权限是否可以成功安装软件呢?答案是yes。本文以安装nginx为例说明下如何操作。 + +没有root权限时往往也就没有权限操作一些系统目录,例如bin,usr等。所以在安装时需要配置将安装文件装在当前用户有权限操作的目录。 + +安装nginx首先要下载安装文件,具体的安装步骤如下: + +```shell + tar-zvxf nginx-1.2.3.tar.gz # 解压缩文件: + cd ~ + mkdir nginx + cd xxx + ./configure—prefix=/xxx/yy/nginx + make + make install +``` + +正常情况下这样就成功安装了。和有root权限安装的区别在于./configure 需要指定安装文件的目录 + +## linux系统下无法访问电脑硬盘 + +```log + Error mounting /dev/sda6 at /media/qiaokaiming/20F47472F4744BD2: Command-line 'mount -t "ntfs" -o "uhelper=udisks2,nodev,nosuid,uid=1000,gid=1000,dmask=0077,fmask=0177" "/dev/sda6" "/media/qiaokaiming/20F47472F4744BD2"' exited with non-zero exit status 14: The disk contains an unclean file system (0, 0). + Metadata kept in windows cache, refused to mount. + Failed to mount '/dev/sda6': Operation not permitted + The NTFS partition is in an unsafe state. Please resume and shutdown + windows fully (no hibernation or fast restarting), or mount the volume + read-only with the 'ro' mount option. +``` + +那个提示里有: Please resume and shutdown windows fully (no hibernation or fast restarting)。进win8把”快速启动“关掉就好了。控制面板》所有控制面板选项》电源选项》系统设置》关闭“启用快速启动” + +## /etc/profile和/etc/environment(Ubuntu) + +先将export LANG=zh_CN加入/etc/profile ,退出系统重新登录,登录提示显示英文。将/etc/profile 中的export LANG=zh_CN删除,将LNAG=zh_CN加入/etc/environment,退出系统重新登录,登录提示显示中文。 + +原因是系统是先执行/etc/environment,后执行/etc/profile。/etc/environment是设置整个系统的环境,而/etc/profile是设置所有用户的环境,前者与登录用户无关,后者与登录用户有关。系统应用程序的执行与用户环境可以是无关的,但与系统环境是相关的,所以当你登录时,你看到的提示信息,象日期、时间信息的显示格式与系统环境的LANG是相关的,缺省LANG=en_US,如果系统环境LANG=zh_CN,则提示信息是中文的,否则是英文的。登陆系统时shell读取的顺序应该是 : + +/etc/enviroment->/etc/profile-->$HOME/.profile-->$HOME/.env(如果存在) + +如果同一个变量在用户环境(/etc/profile)和系统环境(/etc/environment)有不同的值那应该是以用户环境为准了。修改environment 之后,执行 source /etc/environment 可以立即生效。 + +## 如何在Ubuntu中屏蔽一个网站 + +打开/etc/hosts文件,添加下面这行 + + 127.0.0.1 domain.com + +更换domain.com为你要屏蔽的网站,你完成了编辑处理后,保存该文件并退出。 + +## Windows/Linux文本文件格式转换 + +DOS/Windows和Linux/Unix的文本文件换行格式不同,基于 DOS/Windows 的文本文件在每一行末尾有一个 CR(回车)和 LF(换行),而 UNIX 文本只有一个LF(换行)。 + +DOS/Windows文本文件格式转换成Linux/Unix文本文件格式: `sed -e 's/.$//' mydos.txt > myunix.txt` + +说明: 替代正则表达式与一行的最末字符匹配,而该字符恰好就是回车。我们用空字符替换它,从而将其从输出中彻底删除。 + +把Linux/Unix 文本文件格式转换成 DOS/Windows文本文件格式: `sed -e 's/$/\r/' myunix.txt > mydos.txt` + +说明: '$' 正则表达式将与行的末尾匹配,而 '\r' 告诉 sed 在其之前插入一个回车。在换行之前插入回车,每一行就以 CR/LF 结束。 + +另外还有个方法,使用命令: + +```shell + unix2dos filename + dos2unix filename +``` + +## 获取某程序的完整路径名 + +当我们在Linux下用ps aux 看到有如下一个进程时: + + root 19463 0.0 0.0 1508 272 pts/0 S 16:43 0:00 ./server-a + +如何获得程序server-a所在的完整路径呢?从上面ps 的输出中可以看出19463是server-a的PID号,那么运行如下命令: `cat /proc/19463/environ` ,输出如下: + + PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/gamesGNOME_KEYRING_PID=2269USER=jiangxinLANGUAGE=zh_CN:XDG_SEAT=seat0TEXTDOMAIN=im-configCOMPIZ_CONFIG_PROFILE=ubuntuHOME=/home/jiangxinQT4_IM_MODULE=fcitxDESKTOP_SESSION=ubuntuXDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0GTK_MODULES=overlay-scrollbar:unity-gtk-moduleGNOME_KEYRING_CONTROL=/run/user/1000/keyring-wrFl7VQT_QPA_PLATFORMTHEME=appmenu-qt5MANDATORY_PATH=/usr/share/gconf/ubuntu.mandatory.pathIM_CONFIG_PHASE=1SESSIONTYPE=gnome-sessionLOGNAME=jiangxinGTK_IM_MODULE=fcitxDEFAULTS_PATH=/usr/share/gconf/ubuntu.default.pathXDG_SESSION_ID=c3GDM_LANG=zh_CNXDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session0XDG_RUNTIME_DIR=/run/user/1000DISPLAY=:0XDG_CURRENT_DESKTOP=UnityLANG=zh_CN.UTF-8XAUTHORITY=/home/jiangxin/.XauthorityXMODIFIERS=@im=fcitxXDG_GREETER_DATA_DIR=/var/lib/lightdm-data/jiangxinSHELL=/bin/bashGDMSESSION=ubuntuTEXTDOMAINDIR=/usr/share/locale/XDG_VTNR=7QT_IM_MODULE=ximPWD=/home/jiangxinXDG_CONFIG_DIRS=/etc/xdg/xdg-ubuntu:/usr/share/upstart/xdg:/etc/xdgXDG_DATA_DIRS=/usr/share/ubuntu:/usr/share/gnome:/usr/local/share/:/usr/share/CLUTTER_IM_MODULE=ximSELINUX_INIT=YESUBUNTU_MENUPROXY=1DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-BqwNaGt8wESSH_AUTH_SOCK=/run/user/1000/keyring-wrFl7V/sshSSH_AGENT_PID=2383SSH_AGENT_LAUNCHER=upstartGNOME_DESKTOP_SESSION_ID=this-is-deprecatedJOB=gnome-sessionINSTANCE=UnityUPSTART_EVENTS=started startingUPSTART_JOB=unity-settings-daemonUPSTART_INSTANCE=UPSTART_SESSION=unix:abstract=/com/ubuntu/upstart-session/1000/2299GPG_AGENT_INFO=/run/user/1000/keyring-wrFl7V/gpg:0:1 + +注意输出中的: `PWD=/data1/1230`。由此可以判断出程序`server-a`所在完成路径为: `/data1/1230/server-a`。来,验证一下吧: + +```sh +bash-3.2# ls -l /data1/1230/server-a +-rwxr-xr-x 1 root root 5842 Feb 25 16:42 /data1/1230/server-a +``` + +`/proc/进程号`目录下的文件说明 + +* cwd符号链接的就是进程的运行目录; +* exe符号连接就是执行程序的绝对路径; +* cmdline就是程序运行时输入的命令行命令; +* cpu记录了进程可能运行在其上的cpu;显示虚拟的cpu信息 +* environ记录了进程运行时的环境变量 +* fd目录下是进程打开或使用的文件的符号连接 + +## Linux中C语言如何清空标准输入流 + +今天在Linux程序设计的时候需要清空标准输入缓冲区,于是使用了如下Windows程序设计中的方法: fflush(stdin),这个fflush()函数根本不是标准C中的函数,只是标准C的扩展,所以在Linux中使用根本不行;在网上搜索了下,发现有网友建议使用rewind(stdin);这个函数其实是将指针指向流的开始处。但是它是文件操作中的一个函数,操作的是FILE型流,在Windows程序设计中是可以清空标准输入缓冲区的,但是在Linux中不行。 + +注: 上述内容有几处错误,详见《The Standart Library》 + +Linux上可以通过getchar()函数读完标准缓冲区中的剩余字符来清空标准缓冲区: + +```c +char ch; +while((ch=getchar())!='/n'&&ch!=EOF); +``` + +## 怎样给变量传递执行命令结果 + +在linux shell脚本里,设置一个变量,但是变量是一个命令,需要将执行结果放到变量里,并输出,例如: ip='ifconfig eth0' echo $ip,怎样可以叫页面显示的是eth0的网络状况?就是ifconfig eth0的结果? + +```shell +ip=`ifconfig eth0` +echo $ip +``` + +使用反引号可以把一个命令的输出插到另一个命令中去。相同功能的写法还有$(),功能同反引号效果是一样的。不过某些unix系统不支持$()这种写法。但是反引号在任何unix或linux系统下都可以使用。 + +## debian hosts文件中的 127.0.1.1 主机地址 + +有时候`/etc/hosts`文件会看到127.0.0.1这个地址,即本地接口的回路/回环地址。但有时候`/etc/hosts`文件中还会出现127.0.1.1,这也是个本地回路/回环地址。出现这个地址的原因是因为有些应用程序需要规范的全限定域名FQDN(Fully Qualified Domain Name),FQDN不只需要主机名还需要主机域名,其表达形式为hostname.domainname。如果你的主机有一个静态IP地址,则FQDN名字解析到这个静态地址,否则解析到127.0.1.1这个本地回路地址。所以一般情况下不会看到127.0.1.1这个地址。127.0.0.1一般只对应hostname,这也是二者的主要区别。 + +```sh +127.0.0.1 hostname +127.0.1.1 hostname.domainname +``` + +当然并一定非要用127.0.1.1这个IP,RFC规定的127.0.0.0/8这个IP段内的任意IP都可以,只要没有冲突,debian选择了127.0.1.1 + +```sh +hostname # 查看主机名 +hostname --fqdn # 查看FQDN名字 +``` + +## 解决ubuntu终端颜色消失问题 + +ubuntukylin-13.10登陆用户使用ls命令,终端显示的所有输出都是黑底白字,没有彩色,`su - root`后使用ls命令,输出为彩色。分别在登陆用户和root用户下执行`echo $PS1` 输出有差异。后发现登陆用户目录下没有`.bashrc`文件。复制默认`.bashrc`文件后解决: `cp /etc/skel/.bashrc ~/`。 + +## YUM相关问题解决 + +* yum history [undo|redo|info|...]: yum的子命令,显示你yum的历史记录,并且可以撤销指定的记录(undo),重做指定记录(redo)等等,更多的功能看man yum +* yum-plugin-remove-with-leaves: 卸载软件包时把因此产生的叶子一起卸载掉,用的时候别加-y选项,看清楚了再确认,有些非常大的依赖树会把主要的系统组件卸载掉,具体用法安装完该插件以后看帮助:yum --help,这个yum插件应该就是最贴近你需求的,不过记住,慎用,如果能从yum history里查到记录的话,还是用yum history undo来操作比较安全。 +* yum-plugin-show-leaves: 执行安装/卸载以后,显示此次操作所产生的叶子,自动运行,无需要操作。 +* rpmreaper: 基于ncurses库的程序,通过基于文本的gui界面显示系统中的rpm依赖树,提供各种操作,具体的看man。 +* yum update: 升级系统 + +### There are unfinished transactions remaining + +使用yum安装东西报错:`There are unfinished transactions remaining. You might consider running yum-complete-transaction first to finish them.`。可能之前有强制结束yum过,解决办法如如下: + +```sh +yum -y install yum-utils # 安装 yum-complete-transaction(这是一个能发现未完成或被中断的yum事务的程序) +yum clean all # 清除yum缓存 +yum-complete-transaction --cleanup-only # 运行 yum-complete-transaction,清理未完成事务 +``` + +注: yum会把下载的软件包和header存储在cache中,而不会自动删除.可用yum clean headers清除header,yum clean packages清除下载的rpm包,yum clean all全清. + +### another app is currently holding the yum lock;waiting for it to exit + +yum提示如标题,可能是系统自动升级正在运行,yum在锁定状态中。可以强制关掉yum进程: `rm -f /var/run/yum.pid` + +## 设置开机直接进入命令行 + +16.04之前的Ubuntu版本,需编辑文件`/etc/default/grub`,把 `GRUB_CMDLINE_LINUX_DEFAULT=”quiet splash”`改成`GRUB_CMDLINE_LINUX_DEFAULT=”quiet splash text”`,然后运行`sudo update-grub`。在控制台下想进入x-window,可以在root用户下输入: `gdm`或者`startx`。 + +16.04及之后的Ubuntu版本,需要执行如下命令设置开机启动直接进入命令行或者恢复默认图形界面启动 + +```sh +sudo systemctl disable lightdm.service +sudo ln -s /lib/systemd/system/lightdm.service /etc/systemd/system/display-manager.service #恢复默认图形界面启动 +``` + +CentOS/Redhat可以参考如下地址: + +## vSphere专题 + +* vSphere正确分配虚拟机CPU资源: +* 如何通过Vmware vSphere Client安装虚拟机教程: +* VMWARE ESXI 虚拟硬盘的格式:精简置备、厚置备延迟置零、厚置备置零: +* Download link for All Versions of VMware vSphere Client: +* [vSphere 6] vmclicent连接单机时报错: diff --git "a/_posts/the-way-of-learning/2015-05-19-Windows\345\255\246\344\271\240\344\271\213\350\267\257.md" "b/_posts/the-way-of-learning/2015-05-19-Windows\345\255\246\344\271\240\344\271\213\350\267\257.md" new file mode 100644 index 0000000..50d2e99 --- /dev/null +++ "b/_posts/the-way-of-learning/2015-05-19-Windows\345\255\246\344\271\240\344\271\213\350\267\257.md" @@ -0,0 +1,39 @@ +--- +title: "Windows学习之路" +categories: + - the-way-of-learning +tags: + - 学习之路 + - Windows +toc: true +--- + +本篇文章汇总了 Windows 学习的相关资源,包括 Windows 的基本概念、命令行工具、PowerShell 等内容,适合 Windows 开发者参考。 + +## Dos + +* FreeDOS: +* DOSBox: +* 中国DOS联盟: +* MaxDOS: + +## CMD + +* 浅谈批处理中的%cd%与%~dp0: + +## PowerShell + +* PowerShell: +* PowerShell Studio 2023: +* Powershell 错误记录:详细错误: +* pstips.net: +* 如何改变PowerShell启动的默认目录: + +* 同时打开多个powershell窗口:Win+R+powershell 多次即可 +* 查看powershell命令帮助 help [cmd]:help Remove-Item +* 删除文件夹:Remove-Item path –Recurse –Forse +* 查看历史记录:Get-Content (Get-PSReadLineOption).HistorySavePath + +## Others + +* chocolatey(The Package Manager for Windows): diff --git "a/_posts/the-way-of-learning/2015-05-19-\345\211\215\347\253\257\345\255\246\344\271\240\344\271\213\350\267\257.md" "b/_posts/the-way-of-learning/2015-05-19-\345\211\215\347\253\257\345\255\246\344\271\240\344\271\213\350\267\257.md" new file mode 100644 index 0000000..d188e23 --- /dev/null +++ "b/_posts/the-way-of-learning/2015-05-19-\345\211\215\347\253\257\345\255\246\344\271\240\344\271\213\350\267\257.md" @@ -0,0 +1,146 @@ +--- +title: "前端学习之路" +categories: + - the-way-of-learning +tags: + - 学习之路 + - 前端 +toc: true +--- + +本篇文章汇总了前端开发的学习资源,包括 JavaScript、TypeScript、Node.js、React、Vue.js 等技术的学习路径和参考资料,适合前端开发者参考。 + +## ECMACScript/JavaScript/TypeScript + + ECMAScript 是 JavaScript 的标准,JavaScript 是 ECMAScript 的实现。TypeScript 是 JavaScript 的超集,它增加了类型系统。 + +* TypeScript: +* ECMACScript: + +## Node.js + + Node.js 是一个免费、开源、跨平台的 JavaScript 运行时环境, 它让开发人员能够创建服务器 Web 应用、命令行工具和脚本。 + +* Node.js: + +## jQuery + + jQuery 是一个快速、小型且功能丰富的 JavaScript 库。它通过可在多种浏览器上运行的易于使用的 API,使 HTML 文档遍历和操作、事件处理、动画和 Ajax 等事情变得更加简单。凭借多功能性和可扩展性的结合,jQuery 改变了数百万人编写 JavaScript 的方式。 + +* jQuery: +* jQuery Validation Plugin: + +## Angular + + Angular 是一个平台,用于构建移动和桌面 Web 应用。它是一个开源框架,由 Google 的工程师和社区志愿者共同维护。 + +* Angular: + +## React + + React 是一个用于构建用户界面的 JavaScript 库。 + +* React: + +## Vue.js + + Vue 是一个渐进式 JavaScript 框架,用于构建用户界面。 + +* Vue.js: + +## Webpack + + Webpack 是一个现代 JavaScript 应用程序的静态模块打包器。当 Webpack 处理应用程序时,它会递归地构建一个依赖关系图,其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个 bundle。 + +* Webpack: +* 尚硅谷Webpack5入门到原理: + +## 测试框架 + +* Jest: +* Jasmine: +* ~~jsunit: ~~ + +## 其它 + +* MDN: +* W3C: +* W3C QA: +* W3School: +* ~~前端开发框架对比:~~ +* Front End JavaScript Development Handbook – React, Angular, and Vue Compared: +* 当我说前端基础时,我在说什么? —— 最近几年在前端圈的观察和反思: +* npm: +* dojo: +* ExtJS: +* Backbone.js: +* UNDERSCORE.JS: +* Zepto.JS: +* IMMUTABLE.JS: +* css-layout: +* flux: +* refluxjs: +* Ember.js: +* JSX: +* echarts: +* antv: +* CommonJS: +* PhantomJS: +* 清理无用的CSS样式的几个工具(转): + +## 个人网站搭建 + +* 静态博客网站生成器jekyll、hexo和hugo如何选择?有什么区别? +* jekyll(将纯文本转换为静态博客网站, Ruby): +* minimal-mistakes(jekyll主题): +* modernist(jekyll主题): +* Hexo(快速、简洁且高效的博客框架,Node.js): +* Hugo(The world’s fastest framework for building websites, Go): +* WordPress: +* 让Google搜索到用Jekyll搭建在Github Pages上的博客: + +## Tools + +* firebug: +* Brackets: +* Tridiv is a web-based editor for creating 3D shapes in CSS: +* CodeMirror: + +## RequireJS + + RequireJS is a JavaScript file and module loader. It is optimized for in-browser use, but it can be used in other JavaScript environments, like Rhino and Node. Using a modular script loader like RequireJS will improve the speed and quality of your code. + +* + +* Javascript模块化编程(一):模块的写法: +* Javascript模块化编程(二):AMD规范: +* Javascript模块化编程(三):require.js的用法: +* 大漠穷秋: + +## EasyUI + +* + +## Ajax + +* ASP.NET Ajax: Enhanced Interactivity and Responsiveness: +* Ajax Q&A(Ajax"发明人"答问): +* [四天学会ajax]学习ajax教程第一天: +* [四天学会ajax] 学习Ajax教程第二天,JavaScript 和 Ajax 发出异步请求: +* [四天学会ajax] 学习Ajax教程第三天,Ajax 中的高级请求和响应: +* [四天学会ajax] 学习Ajax教程第四天,利用 DOM 进行 Web 响应: + +## XPath + +* XPath Parser: +* XPath Visualizer: +* XPath Tester: + +## Foundation + +* +* + +## Chrome调试 + +* 最全面的JavaScript调试技巧总结: diff --git "a/_posts/the-way-of-learning/2015-05-19-\345\244\247\346\225\260\346\215\256\345\255\246\344\271\240\344\271\213\350\267\257.md" "b/_posts/the-way-of-learning/2015-05-19-\345\244\247\346\225\260\346\215\256\345\255\246\344\271\240\344\271\213\350\267\257.md" new file mode 100644 index 0000000..0aa2e59 --- /dev/null +++ "b/_posts/the-way-of-learning/2015-05-19-\345\244\247\346\225\260\346\215\256\345\255\246\344\271\240\344\271\213\350\267\257.md" @@ -0,0 +1,110 @@ +--- +title: "大数据学习之路" +categories: + - the-way-of-learning +tags: + - 学习之路 + - 大数据 +toc: true +--- + +本篇文章汇总了大数据学习的相关资源,包括大数据的基本概念、安装配置、编程语言特性等内容,适合大数据开发者参考。 + +## Hadoop + +* +* Apache Hadoop API REFERENCE: +* Hadoop: Setting up a Single Node Cluster: +* Hadoop Cluster Setup: +* HDFS Users Guide: +* Hadoop Commands Guide: +* DistCp: +* Hadoop Archives Guide: +* Hadoop: Capacity Scheduler: +* HDFS Architecture: +* HDFS Permissions Guide: +* HDFS Quotas Guide: +* File System Shell: +* HDFS Users Guide: +* MapReduce Tutorial: +* Native Libraries Guide: +* Hadoop Streaming: + +* Hadoop 1.0.0集群安装: +* 一步步教你Hadoop多节点集群安装配置: +* Hadoop JobHistory: + +* 国内第一篇详细讲解hadoop2的automatic HA+Federation+Yarn配置的教程: +* 如何编译Apache Hadoop2.2.0源代码: +* ZooKeeper的分布模式安装: +* Hadoop HDFS和KFS (CloudStore)的比较: +* performance-benchmark-cgl-mapreduce-mpi-and-hadoop: +* 汇总运行在Hadoop YARN上的开源系统: +* 利用Hadoop实现超大矩阵相乘之我见(一): +* 使用mapreduce计算大矩阵相乘: + +* Hadoop Journal Node 作用: +* ERROR org.apache.hadoop.yarn.server.resourcemanager.ResourceManager: RECEIVED SIGNAL 15: SIGTERM: +* Hadoop在master查看live nodes为0解决方案: +* VMware虚拟机中Hadoop服务的端口无法访问的问题: + +* 虾皮工作室(讲解大数据相关知识,如《细细品味Hadoop系列文章》): +* [Hadoop系列]Hadoop的MapReduce中多文件输出: +* Hadoop源码分析——TaskAttemptContext类和TaskAttemptID类: +* hadoop代理用户 -超级用户代理其它用户: + +## Ambari + +* Ambari: +* Ambari——大数据平台的搭建利器: + +## Spark + +* +* +* mmicky 的博客: +* Spark性能优化指南——基础篇: +* Spark性能优化指南——高级篇: +* RDD中cache和persist的区别: +* 每次进步一点点——Spark 中的宽依赖和窄依赖: +* Spark中的错误处理: +* Why does Spark RDD partition has 2GB limit for HDFS? +* Spark 架构: +* Spark(一): 基本架构及原理: + +## Storm + +* +* + +## Mahout + +Apache Mahout是基于Hadoop生态圈的一个机器学习库。 + +* Mahout: + +## neo4j + +知识图谱由于其数据包含实体、属性、关系等,常见的关系型数据库诸如MySQL之类不能很好的体现数据的这些特点,因此知识图谱数据的存储一般是采用图数据库(Graph Databases)。而Neo4j是其中最为常见的图数据库。 + +* neo4j: + +## Apache Phoenix + +* Apache Phoenix: + +## MPI + +* Open MPI(Open Source High Performance Computing): +* Open MPI Frequently Asked Questions: +* The “vader” shared memory transport in Open MPI: Now featuring 3 flavors of zero copy! +* openMPI小集群安装: + +* MPICH: +* Setting Up an MPICH2 Cluster in Ubuntu: +* MPI Forum: +* DataMPI: + +* MapReduce-MPI Library: +* Hadoop 与MPI: +* mrmpi package in Ubuntu: diff --git "a/_posts/the-way-of-learning/2015-05-19-\346\225\260\346\215\256\346\214\226\346\216\230\345\255\246\344\271\240\344\271\213\350\267\257.md" "b/_posts/the-way-of-learning/2015-05-19-\346\225\260\346\215\256\346\214\226\346\216\230\345\255\246\344\271\240\344\271\213\350\267\257.md" new file mode 100644 index 0000000..2c85f09 --- /dev/null +++ "b/_posts/the-way-of-learning/2015-05-19-\346\225\260\346\215\256\346\214\226\346\216\230\345\255\246\344\271\240\344\271\213\350\267\257.md" @@ -0,0 +1,45 @@ +--- +title: "数据挖掘学习之路" +categories: + - the-way-of-learning +tags: + - 学习之路 + - 数据挖掘 +toc: true +--- + +本篇文章汇总了数据挖掘学习的相关资源,包括数据挖掘的基本概念、算法、工具等内容,适合数据挖掘开发者参考。 + +## 开源数据集 + +* Dataset Search: +* Data in Brief: +* data.world: +* Mendeley Data: +* figshare: +* Zenodo: +* UC Irvine Machine Learning Repository: +* Harvard Dataverse: +* DRYAD: +* Socrata: +* kaggle: +* Microsoft Research Open Data: +* 各领域公开数据集下载: + +## SPSS + +* +* SPSSAU: +* SPSSPRO: + +## SAS + +* SAS: + +## SYSTAT + +* SYSTAT: + +## RapidMiner + +* RapidMiner: diff --git "a/_posts/the-way-of-learning/2015-05-19-\346\225\260\346\215\256\347\273\223\346\236\204\344\270\216\347\256\227\346\263\225.md" "b/_posts/the-way-of-learning/2015-05-19-\346\225\260\346\215\256\347\273\223\346\236\204\344\270\216\347\256\227\346\263\225.md" new file mode 100644 index 0000000..a0fd706 --- /dev/null +++ "b/_posts/the-way-of-learning/2015-05-19-\346\225\260\346\215\256\347\273\223\346\236\204\344\270\216\347\256\227\346\263\225.md" @@ -0,0 +1,21 @@ +--- +title: "数据结构与算法学习之路" +categories: + - the-way-of-learning +tags: + - 学习之路 + - 数据结构与算法 +toc: true +--- + +本篇文章汇总了数据结构与算法学习的相关资源,包括数据结构与算法的基本概念等内容。 + +* 排序算法: +* 算法可视化: +* 十大经典排序算法动画,看我就够了! + +## 算法大牛和讲师们 + +* Robert Sedgewick: +* Mark Allen Weiss: +* Sartaj Sahni: diff --git "a/_posts/the-way-of-learning/2015-05-19-\346\225\260\347\224\265\345\255\246\344\271\240\344\271\213\350\267\257.md" "b/_posts/the-way-of-learning/2015-05-19-\346\225\260\347\224\265\345\255\246\344\271\240\344\271\213\350\267\257.md" new file mode 100644 index 0000000..d26ed0d --- /dev/null +++ "b/_posts/the-way-of-learning/2015-05-19-\346\225\260\347\224\265\345\255\246\344\271\240\344\271\213\350\267\257.md" @@ -0,0 +1,14 @@ +--- +title: "数电学习之路" +categories: + - the-way-of-learning +tags: + - 学习之路 + - 数电 +toc: true +--- + +本篇文章汇总了数电学习的相关资源,适合数电开发者参考。 + +* 中国电子顶级开发网论坛(EETOP) 国内最顶级的电子论坛,最活跃的电子工程师交流社区: +* Altera: \ No newline at end of file diff --git "a/_posts/the-way-of-learning/2015-05-19-\346\234\272\345\231\250\345\255\246\344\271\240\344\270\216\344\272\272\345\267\245\346\231\272\350\203\275\345\255\246\344\271\240\344\271\213\350\267\257.md" "b/_posts/the-way-of-learning/2015-05-19-\346\234\272\345\231\250\345\255\246\344\271\240\344\270\216\344\272\272\345\267\245\346\231\272\350\203\275\345\255\246\344\271\240\344\271\213\350\267\257.md" new file mode 100644 index 0000000..bda49b8 --- /dev/null +++ "b/_posts/the-way-of-learning/2015-05-19-\346\234\272\345\231\250\345\255\246\344\271\240\344\270\216\344\272\272\345\267\245\346\231\272\350\203\275\345\255\246\344\271\240\344\271\213\350\267\257.md" @@ -0,0 +1,126 @@ +--- +title: "机器学习与人工智能学习之路" +categories: + - the-way-of-learning +tags: + - 学习之路 + - 机器学习 + - 人工智能 +toc: true +--- + +本篇文章汇总了机器学习与人工智能学习的相关资源,包括机器学习、深度学习、自然语言处理、计算机视觉等内容,适合机器学习与人工智能开发者参考。 + +## 专业术语 + +* AIGC即AI Generated Content,是指利用人工智能技术来生成内容,AIGC也被认为是继UGC(User Generated Content)、PGC(Professional Generated Content)之后的新型内容生产方式,AI绘画、AI写作等都属于AIGC的分支。对AIGC来说,2022年被认为是其发展速度惊人的一年。 +* NLP: Natural Language Processing +* NLG: Natural Language Generation +* LLM: Large Language Model + +## 比较好的文章 + +* MCP协议入门指南,4个案例+2个实践全解析!: + +## 深度学习库 + +* Keras(基于 Python 的深度学习库): +* TensorFlow: +* PyTorch: + +## 通用型聊天机器人 + +* ChatGPT(OpenAI): +* DeepSeek(深度求索): +* Kimi(月之暗面): +* 通义千问: +* Claude(Anthropic): +* Llama(Meta): +* gemini(Google): + +## 基于大模型的衍生产品 + +* OpenRouter(大模型统一接口): +* Ollama(在本地机器上便捷部署和运行大型语言模型): +* chatbox: +* Devin(AI合作伙伴): +* 模型对比: + +* Awesome ChatGPT Prompts: + +* Hugging Face(AI交流社区): +* Transformers: (提供了数以千计的预训练模型,支持 100 多种语言的文本分类、信息抽取、问答、摘要、翻译、文本生成。它的宗旨是让最先进的 NLP 技术人人易用): + +* ArtHub: + +* Civitai: + +* DeepMind: +* AlphaGo(DeepMind): + +* Stability AI: +* DreamStudio(DreamStudio is an easy-to-use interface for creating images using the latest version of the Stable Diffusion image generation model.): +* stable-diffusion: +* ComfyUI: + +* Midjourney(文本生成图片): +* firefly(文本生成图片): +* imagen(文本生成图片): +* Leonardo.Ai(文本生成图片): +* ClipDrop(文本生成图片): +* Lama Cleaner(文本修图): +* Opus.ai(文本创建3D): +* playgroundai: +* DaVinci: +* OpenRead(AI读论文): +* ResearchFlow: +* DeepL(AI翻译): +* Synthesia(文本生成视频) +* Notion AI(AI写作): +* jenni(AI写作): +* Copy.ai(AI写作): +* Peppertype.ai(AI写作): +* AI-Writer(AI写作): +* khroma(AI配色): +* AI Colors: +* AIVA(音乐创作): +* fireflies(文本转语音): +* livechat(多功能聊天机器人): +* PDF解析: +* BookAI(Chat with any book using AI): +* regex.ai: +* DeepWiki(Github文档生成): + +## AI编程辅助 + +* Cursor: +* Trae(字节跳动, AI IDE): +* cline: +* Roo-Code: +* Copilot: +* Github Next: +* Codeium(Windsurf独立应用以及Codeium插件): + +* Visual Studio 中的 AI 辅助开发: +* tabnine: + +* 通义灵码(阿里巴巴): +* 豆包MarsCode(字节跳动): +* aiXcoder(硅心科技): +* 代码小浣熊(商汤科技): +* 文心快码(百度): +* CodeGeex: +* Amazon Q 开发者版: +* Cody(Sourcegraph): +* Bito: +* ~~Kite(已停止运营): ~~ + +## 多模态AI Agent + +* Agent TARS(字节跳动, 多模态AI Agent): +* Manus(通用AI Agent): + +## 其它 + +* Google's Wordcraft: +* Prompt-Engineering-Guide: diff --git "a/_posts/the-way-of-learning/2015-05-19-\346\255\243\345\210\231\350\241\250\350\276\276\345\274\217\345\255\246\344\271\240\344\271\213\350\267\257.md" "b/_posts/the-way-of-learning/2015-05-19-\346\255\243\345\210\231\350\241\250\350\276\276\345\274\217\345\255\246\344\271\240\344\271\213\350\267\257.md" new file mode 100644 index 0000000..45c4418 --- /dev/null +++ "b/_posts/the-way-of-learning/2015-05-19-\346\255\243\345\210\231\350\241\250\350\276\276\345\274\217\345\255\246\344\271\240\344\271\213\350\267\257.md" @@ -0,0 +1,16 @@ +--- +title: "正则表达式学习之路" +categories: + - the-way-of-learning +tags: + - 学习之路 + - 正则表达式 +toc: true +--- + +本篇文章汇总了正则表达式学习的相关资源,适合正则表达式开发者参考。 + +* 我爱正则表达式: +* Regular Expression Library: +* RegexBuddy/RegexMagic/PowerGREP: +* learn-regex: diff --git "a/_posts/the-way-of-learning/2015-05-19-\346\261\207\347\274\226\345\255\246\344\271\240\344\271\213\350\267\257.md" "b/_posts/the-way-of-learning/2015-05-19-\346\261\207\347\274\226\345\255\246\344\271\240\344\271\213\350\267\257.md" new file mode 100644 index 0000000..dea8f42 --- /dev/null +++ "b/_posts/the-way-of-learning/2015-05-19-\346\261\207\347\274\226\345\255\246\344\271\240\344\271\213\350\267\257.md" @@ -0,0 +1,55 @@ +--- +title: "汇编学习之路" +categories: + - the-way-of-learning +tags: + - 学习之路 + - 汇编 +toc: true +--- + +本篇文章汇总了 汇编 学习的相关资源,包括 汇编 的基本概念、编程语言特性、编译器等内容,适合 汇编 开发者参考。 + +* MASM: +* ~~TASM: ~~ +* flat assembler: +* Yasm: +* NASM: + +* winasm: +* The MASM32 SDK: +* RadASM: +* The Go tools for Windows + Assembler: +* Masm for windows 集成实验环境: +* ~~asmplugin:~~ +* ~~Win-Masm v2.2 汇编集成编译器: ~~ + +* dosbox: +* EMU8086 - THE MICROPROCESSOR EMULATOR: +* OllyDbg: +* IDA Pro: +* WinHex: + +* 汇编网: +* 看雪学院: +* 看雪安全论坛: +* 鱼C工作室: +* Linux 汇编语言开发指南: +* AT&T(GAS)汇编指令小集: +* 汇编指令 int 21 h 调用: +* 汇编编写DOS下的内存驻留程序: <汇编编写DOS下的内存驻留程序.docx> +* 汇编语言常见的错误提示代码及含义: +* X86汇编快速入门: +* BIOS中断大全: +* 中断向量地址一览表: + +## MiPS汇编 + +* 常见模拟器列表: +* MARS (MIPS Assembler and Runtime Simulator): +* SPIM(QtSpim): +* mipster20(MIPSter is a text editor written specifically for the MIPS assembly language, SPIM included): +* WinMIPS64: +* MIPSsim使用说明(含下载): +* 建立基于linux的MIPS交叉编译环境: +* MIPS的演化:See MIPS Run: Appendix D Evolving MIPS diff --git "a/_posts/the-way-of-learning/2015-05-19-\347\211\210\346\234\254\347\256\241\347\220\206\345\255\246\344\271\240\344\271\213\350\267\257.md" "b/_posts/the-way-of-learning/2015-05-19-\347\211\210\346\234\254\347\256\241\347\220\206\345\255\246\344\271\240\344\271\213\350\267\257.md" new file mode 100644 index 0000000..2976574 --- /dev/null +++ "b/_posts/the-way-of-learning/2015-05-19-\347\211\210\346\234\254\347\256\241\347\220\206\345\255\246\344\271\240\344\271\213\350\267\257.md" @@ -0,0 +1,218 @@ +--- +title: "VCS(Version Control System)学习之路" +categories: + - the-way-of-learning +tags: + - 学习之路 + - VCS +toc: true +--- + +本篇文章汇总了版本控制系统(VCS)的学习资源,包括 SVN、Git、GitHub 等工具的使用技巧和最佳实践,适合团队协作开发者参考。 + +## 代码托管网站 + +* (Git) +* (Git) +* (Git Mercurial) +* (Git Mercurial SVN) +* +* +* +* (SVN) +* +* (Git Mercurial SVN) +* ~~~~ +* ~~~~ +* ~~ (SVN)~~ +* ~~ (SVN)~~ +* ~~~~ +* ~~ (SVN)~~ +* ~~ (SVN)~~ +* ~~~~ + +## SVN + +* 原项目地址,现在仍保留: +* 现在: +* 安装包下载地址: + +* Windows Command Line客户端推荐Win32Svn: +* Windows GUI客户端推荐TortoiseSVN: +* Linux GUI客户端推荐RabbitVCS: +* SVNKit: +* VISUALSVN: + +* Subversion 与版本控制: +* TortoiseSVN: +* TortoiseSVN命令行: +* 设置SVN忽略文件和目录(文件夹): +* AnkhSVN - Subversion Support for Visual Studio: +* 本地搭建SVN局域网服务器: +* windows下配置VisualSVN Server服务器(服务端和客户端): +* 使用svn——项目的目录布局: +* SVN版本库无损迁移与自动备份(一): +* SVN版本库无损迁移与自动备份(二): +* SVN+Apache域用户认证配置方法_Windows(转,重新排版,部分内容更新优化): +* Use the SVN command-line tool: +* 在TortoiseSVN/TortoiseGit中使用BeyondCompare进行差异对比: +* SVN的钩子--限制强制写日志(log): +* svn ignore 的用法(忽略文件及目录): +* SVN版本冲突,COMMIT时出现.MINE等文件: + +### SVN更新失败,提示locked + +产生这种情况大多是因为上次svn命令执行失败且被锁定了,需要删除文件夹中的lock文件,即可解锁。这里介绍3种方法: + +* 直接进行cleanup;对较小的文件比较管用,文件稍大些等待时间很长或不起作用; +* 选择文件,右键执行release lock;等待时间较长; +* 手动删除锁定文件:在命令提示符下cd 到svn项目出现问题的文件所在目录下,执行命令del lock /q/s。等待删除lock文件成功,重新更新SVN。 + +## GIT + +* GIT: +* Reference: +* Pro Git: + +### Git客户端 + +* git for windows: +* posh-git: +* SourceTree: +* tortoisegit: +* TortoiseGit Disconnected:No supported authentication methods available: +* TortoiseGit Right click in Explorer hangs for long time: +* gitlab: + +### Git优秀文章 + +* windows中使用Git工具连接GitHub(配置篇): +* Git下载GitHub仓库里的某一个文件夹或某一个文件: +* 打造完美 Windows git 命令行环境: +* git中文名转义带来的麻烦;git配置之core.quotepath;git中文乱码: +* 详解在visual studio中使用git版本系统(图文): +* git-credential-store: +* Caching your GitHub password in Git: +* 执行Git命令时出现各种 SSL certificate problem 的解决办法: +* Git 配置代理,解决 "Failed to connect to github.com port 443" 及 "Recv failure: Connection was reset" 等问题: +* warning: remote HEAD refers to nonexistent ref, unable to checkout: +* git clone 时显示Filename too long的解决办法: +* 分支管理策略: +* Bug分支: +* git patch: Version Control with Git 2nd Edition[Git 版本控制管理 第2版] CHAPTER 14 Patches +* Permanently remove files and folders from Git ``repo``: +* git 把文件从版本管理中移除: +* git pull 和本地文件冲突问题解决: +* Remove sensitive data: +* github创建tag: +* Git教程-分支和tag管理: +* What are the git concepts of HEAD, master, origin? +* How do I make Git use the editor of my choice for commits?: +* warning: push.default is unset的解决方案: +* 简单对比git pull和git pull --rebase的使用: +* 使用git rebase合并多次commit: +* git中将多次commit合并为一次commit: +* git merge的三种操作merge, squash merge, 和rebase merge: +* 如何合并两个Git仓库: +* Moving Repository from Bitbucket to GitHub: +* git 拉取远程指定分支 pull本地不存在的分支: +* CHERRY-PICKING SPECIFIC COMMITS FROM ANOTHER BRANCH: +* Git操作 :从一个分支cherry-pick多个commit到其他分支: +* git checkout --ours/--theirs: +* github上fork了别人的项目后,再同步更新别人的提交: +* 撤销 git commit --amend: +* git修改历史提交信息: +* git 清除所有untracked file: +* 如何将 GitHub 项目导入码云?一步搞定! +* Pull Request 与 Merge Request 的区别: + +### Git个人常用命令备忘录 + +* `git log -S"string" filepath`: 查看某个文件中特定内容的修改记录 +* `git log -- filepath`: 查看已经被删除文件的修改记录 + +### git init 与 git init --bare + +使用命令"git init --bare"(bare汉语意思是:裸,裸的)初始化的版本库(暂且称为bare repository)只会生成一类文件:用于记录版本库历史记录的.git目录下面的文件;而不会包含实际项目源文件的拷贝;所以该版本库不能称为工作目录(working tree);如果你进入版本目录,就会发现只有.git目录下的文件,而没有其它文件;就是说,这个版本库里面的文件都是.git目录下面的文件,把原本在.git目录里面的文件放在版本库的根目录下面;换句话说,不使用--bare选项时,就会生成.git目录以及其下的版本历史记录文件,这些版本历史记录文件就存放在.git目录下;而使用--bare选项时,不再生成.git目录,而是只生成.git目录下面的版本历史记录文件,这些版本历史记录文件也不再存放在.git目录下面,而是直接存放在版本库的根目录下面。 + +用"git init"初始化的版本库用户也可以在该目录下执行所有git方面的操作。但别的用户在将更新push上来的时候容易出现冲突。 + +比如有用户在该目录(就称为远端仓库)下执行git操作,且有两个分支(master 和 b1),当前在master分支下。另一个用户想把自己在本地仓库(就称为本地仓库)的master分支的更新提交到远端仓库的master分支,他就想当然的敲了 + +git push origin master:master + +于是乎出现因为远端仓库的用户正在master的分支上操作,而你又要把更新提交到这个master分支上,当然就出错了。但如果是往远端仓库中空闲的分支上提交还是可以的,比如 + +git push origin master:b1 + +解决办法就是使用”git init –bare”方法创建一个所谓的裸仓库,之所以叫裸仓库是因为这个仓库只保存git历史提交的版本信息,而不允许用户在上面进行各种git操作,如果你硬要操作的话,只会得到下面的错误(”This operation must be run in a work tree”)这个就是最好把远端仓库初始化成bare仓库的原因。 + +## Github + +* Github代理: +* GitHub Actions: +* Automatic token authentication: +* Automating Dependabot with GitHub Actions-accessing-secrets: +* Travis CI(不再针对开源项目提供免费服务,使用GitHub Actions代替): +* appveyor(使用GitHub Actions代替): +* codeclimate: +* coverity: +* gitguardian: +* COVERALLS: +* sonarcloud: +* GITTER: +* Waffle: +* choosealicense: +* SPDX License List: +* CONTRIBUTOR CODE OF CONDUCT: +* codedocs: +* shields: +* Font Awesome(Font Awesome is the Internet's icon library and toolkit): +* VersionEye(已废弃): +* Semantic Versioning: +* The missing GitHub star history graph: +* Github Release Assets Download Analysis: +* github-statistics: +* One second to read GitHub code with VS Code: + +* Commit message 和 Change log 编写指南: +* Writing a Friendly README: +* 开源协议汇总: +* 如何选择开源许可证?: +* AGPL 开源授权协议: +* 上传图片到github wiki仓库: + +## Gerrit + +* +* +* +* 如何搭建开源code review gerrit服务器: +* Resolving a merge conflict on gerrit: + +## Mercurial + +* Mercurial: +* tortoisehg: + +## Perforce + +* perforce: +* Helix VCS: + +## Sonar + +* sonarqube: +* sonarcloud: +* SonarCFamily for C++: +* C/C++/Objective-C: +* travis 和 sonarcloud(java项目举例): + +## Others + +* CVS: +* bazaar: +* ClearCase: +* SourceSafe: + +* gource: diff --git "a/_posts/the-way-of-learning/2015-05-19-\347\274\226\350\257\221\345\216\237\347\220\206\345\255\246\344\271\240\344\271\213\350\267\257.md" "b/_posts/the-way-of-learning/2015-05-19-\347\274\226\350\257\221\345\216\237\347\220\206\345\255\246\344\271\240\344\271\213\350\267\257.md" new file mode 100644 index 0000000..edf33eb --- /dev/null +++ "b/_posts/the-way-of-learning/2015-05-19-\347\274\226\350\257\221\345\216\237\347\220\206\345\255\246\344\271\240\344\271\213\350\267\257.md" @@ -0,0 +1,14 @@ +--- +title: "编译原理学习之路" +categories: + - the-way-of-learning +tags: + - 学习之路 + - 编译原理 +toc: true +--- + +本篇文章汇总了编译原理学习的相关资源,包括编译原理的基本概念、编译器的实现、编译器优化等内容,适合编译原理开发者参考。 + +* Win flex-bison: +* Compilers: Principles, Techniques, and Tools: diff --git "a/_posts/the-way-of-learning/2015-05-19-\350\256\276\350\256\241\345\255\246\344\271\240\344\271\213\350\267\257.md" "b/_posts/the-way-of-learning/2015-05-19-\350\256\276\350\256\241\345\255\246\344\271\240\344\271\213\350\267\257.md" new file mode 100644 index 0000000..1ab7f9f --- /dev/null +++ "b/_posts/the-way-of-learning/2015-05-19-\350\256\276\350\256\241\345\255\246\344\271\240\344\271\213\350\267\257.md" @@ -0,0 +1,77 @@ +--- +title: "设计学习之路" +categories: + - the-way-of-learning +tags: + - 学习之路 + - 设计 +toc: true +--- + +本篇文章汇总了设计学习的相关资源,适合设计开发者参考。 + +## 图像处理 + +* Photoshop: +* GIMP: +* SAI: +* Krita: +* 可牛影像: +* 美图秀秀: +* 光影魔术手: + +## 矢量图形设计 + +* Illustrator: +* CorelDRAW Graphics Suite: + +## 视频编辑 + +* EDIUS(非线性编辑软件专为广播和后期制作环境而设计): +* Adobe Premiere: +* VideoStudio(会声会影): +* Adobe After Effects(影视后期处理): +* Adobe Premiere: +* VideoStudio(会声会影): +* Adobe After Effects(影视后期处理): + +## 音频编辑 + +* Adobe Audition: +* RX: +* fabfilter: + +## PDF处理 + +* Adobe Acrobat: +* Adobe Acrobat: +* PitStop Pro: +* PitStop Pro Manuals: + +## 三维建模与动画 + +* blender(3D CG): +* CINEMA 4D(三维动画、建模、模拟、渲染软件): +* Autodesk 3ds Max(三维建模、渲染和动画软件): +* Autodesk Maya(三维动画和视觉特效软件): +* blender(3D CG): +* CINEMA 4D(三维动画、建模、模拟、渲染软件): +* 【C4D教程】零基础快速入门教程合集: +* Autodesk 3ds Max(三维建模、渲染和动画软件): +* Autodesk Maya(三维动画和视觉特效软件): + +## AutoCAD + +* Autodesk AutoCAD(二维和三维 CAD 工具,助力提升创造力): +* Autodesk Viewer: + +* 浩辰CAD: +* 中望CAD: +* 天正建筑软件: +* ~~Acme CAD Converter: ~~ +* CAD迷你看图: + +## 其它 + +* Adobe Dreamweaver: +* Adobe InDesign: diff --git "a/_posts/the-way-of-learning/2025-05-09-\346\236\266\346\236\204\345\270\210\345\255\246\344\271\240\344\271\213\350\267\257.md" "b/_posts/the-way-of-learning/2025-05-09-\346\236\266\346\236\204\345\270\210\345\255\246\344\271\240\344\271\213\350\267\257.md" new file mode 100644 index 0000000..2f6257d --- /dev/null +++ "b/_posts/the-way-of-learning/2025-05-09-\346\236\266\346\236\204\345\270\210\345\255\246\344\271\240\344\271\213\350\267\257.md" @@ -0,0 +1,12 @@ +--- +title: "架构师学习之路" +categories: + - the-way-of-learning +tags: + - 学习之路 + - 架构师 + - 架构 +toc: true +--- + +本篇文章汇总了架构师学习的相关资源,包括架构师的基本概念、架构设计、架构模式等内容,适合架构师开发者参考。 diff --git "a/_drafts/\345\246\202\344\275\225\345\220\210\345\271\266\344\270\244\344\270\252Git\344\273\223\345\272\223.md" b/_posts/vcs/2018-11-03-How_to_merge_two_git_repo.md similarity index 98% rename from "_drafts/\345\246\202\344\275\225\345\220\210\345\271\266\344\270\244\344\270\252Git\344\273\223\345\272\223.md" rename to _posts/vcs/2018-11-03-How_to_merge_two_git_repo.md index b2f899f..5325197 100644 --- "a/_drafts/\345\246\202\344\275\225\345\220\210\345\271\266\344\270\244\344\270\252Git\344\273\223\345\272\223.md" +++ b/_posts/vcs/2018-11-03-How_to_merge_two_git_repo.md @@ -1,3 +1,12 @@ +--- +title: "如何合并两个Git仓库" +categories: + - vcs +tags: + - Git +toc: true +--- + 假设有两个Git仓库: diff --git a/_posts/2021-01-09-TortoiseSVN_TortoiseGit_BeyondCompare.md b/_posts/vcs/2021-01-09-TortoiseSVN_TortoiseGit_BeyondCompare.md similarity index 99% rename from _posts/2021-01-09-TortoiseSVN_TortoiseGit_BeyondCompare.md rename to _posts/vcs/2021-01-09-TortoiseSVN_TortoiseGit_BeyondCompare.md index 2ca7b98..1a37a58 100644 --- a/_posts/2021-01-09-TortoiseSVN_TortoiseGit_BeyondCompare.md +++ b/_posts/vcs/2021-01-09-TortoiseSVN_TortoiseGit_BeyondCompare.md @@ -1,7 +1,7 @@ --- title: "在TortoiseSVN/TortoiseGit中使用BeyondCompare进行差异对比" categories: - - Blog + - vcs tags: - TortoiseSVN - TortoiseGit diff --git a/google39f08d3f2271d152.html b/google39f08d3f2271d152.html new file mode 100644 index 0000000..bb31b7c --- /dev/null +++ b/google39f08d3f2271d152.html @@ -0,0 +1 @@ +google-site-verification: google39f08d3f2271d152.html \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 0000000..8472c1a --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,452 @@ + + + + + + + https://jiangxincode.github.io/cnblogs/ + 2025-05-18T15:01:24+00:00 + 1.00 + + + https://jiangxincode.github.io/cnblogs/posts/ + 2025-05-18T15:01:24+00:00 + 0.80 + + + https://jiangxincode.github.io/cnblogs/categories/ + 2025-05-18T15:01:24+00:00 + 0.80 + + + https://jiangxincode.github.io/cnblogs/tags/ + 2025-05-18T15:01:24+00:00 + 0.80 + + + https://jiangxincode.github.io/cnblogs/about/ + 2025-05-18T15:01:24+00:00 + 0.80 + + + https://jiangxincode.github.io/cnblogs/the-way-of-learning/%E6%9E%B6%E6%9E%84%E5%B8%88%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/ + 2025-05-18T15:01:24+00:00 + 0.80 + + + https://jiangxincode.github.io/cnblogs/the-way-of-learning/%E6%8A%95%E5%B1%8F%E7%9F%A5%E8%AF%86%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/ + 2025-05-18T15:01:24+00:00 + 0.80 + + + https://jiangxincode.github.io/cnblogs/others/Aloys-Build-Manual/ + 2025-05-18T15:01:24+00:00 + 0.80 + + + https://jiangxincode.github.io/cnblogs/others/Password-Recovery-Tools-Analysis/ + 2025-05-18T15:01:24+00:00 + 0.80 + + + https://jiangxincode.github.io/cnblogs/linux/Grep-Sed-Awk-Example/ + 2025-05-18T15:01:24+00:00 + 0.80 + + + https://jiangxincode.github.io/cnblogs/page2/ + 2025-05-18T15:01:24+00:00 + 0.80 + + + https://jiangxincode.github.io/cnblogs/page3/ + 2025-05-18T15:01:24+00:00 + 0.80 + + + https://jiangxincode.github.io/cnblogs/page14/ + 2025-05-18T15:01:24+00:00 + 0.80 + + + https://jiangxincode.github.io/cnblogs/android/Import-AOSP-To-AS/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/android/Android-Build-System/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/android/Repo-In-Action/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/vcs/TortoiseSVN_TortoiseGit_BeyondCompare/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/linux/Package-Manager-In-Ubuntu/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/others/Cpp-Code-Check/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/linux/Linux-Memory-Analysis/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/others/Java-Code-Check/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/others/Publish-to-Maven-Center/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/vcs/How_to_merge_two_git_repo/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/others/Groovy-Compiler-Analysis-02/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/others/Groovy-Compiler-Analysis-01/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/others/Gradle-GradleWrappe-AndroidPluginForGradle/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/others/j-lo-performance-analysissy-tools3/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/others/j-lo-performance-analysissy-tools2/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/others/j-lo-performance-analysissy-tools/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/the-way-of-learning/%E8%AE%BE%E8%AE%A1%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/the-way-of-learning/%E7%BC%96%E8%AF%91%E5%8E%9F%E7%90%86%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/the-way-of-learning/%E7%89%88%E6%9C%AC%E7%AE%A1%E7%90%86%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/the-way-of-learning/%E6%B1%87%E7%BC%96%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/the-way-of-learning/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/the-way-of-learning/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E4%B8%8E%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/the-way-of-learning/%E6%95%B0%E7%94%B5%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/the-way-of-learning/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/the-way-of-learning/%E6%95%B0%E6%8D%AE%E6%8C%96%E6%8E%98%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/the-way-of-learning/%E5%A4%A7%E6%95%B0%E6%8D%AE%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/the-way-of-learning/%E5%89%8D%E7%AB%AF%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/the-way-of-learning/Windows%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/the-way-of-learning/Unix%E4%B8%8ELinux%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/the-way-of-learning/TeX%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/the-way-of-learning/TCL%E4%B8%8ETK%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/the-way-of-learning/Scala%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/the-way-of-learning/R%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/the-way-of-learning/Rust%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/the-way-of-learning/Ruby%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/the-way-of-learning/Python%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/the-way-of-learning/Prolog%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/the-way-of-learning/Perl%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/the-way-of-learning/Pascal%E4%B8%8EDelphi%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/the-way-of-learning/PHP%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/the-way-of-learning/OpenGL%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/the-way-of-learning/OJ%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/the-way-of-learning/OCaml%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/the-way-of-learning/Nginx%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/the-way-of-learning/Matlab%E4%B8%8EOctave%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/the-way-of-learning/Markdown%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/the-way-of-learning/Lua%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/the-way-of-learning/Lisp%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/the-way-of-learning/Kotlin%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/the-way-of-learning/J2EE%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/the-way-of-learning/IO%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/the-way-of-learning/Haskell%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/the-way-of-learning/Groovy%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/the-way-of-learning/Golang%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/the-way-of-learning/Fortran%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/the-way-of-learning/Excel%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/the-way-of-learning/Erlang%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/the-way-of-learning/EditorAndIDE%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/the-way-of-learning/Docker%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/the-way-of-learning/DB%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/the-way-of-learning/C%E4%B8%8EC++%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/the-way-of-learning/CSharp%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/the-way-of-learning/Basic%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/the-way-of-learning/Android%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/others/how-to-learn-r-by-reading-books/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/page4/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/page5/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/page13/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/page12/ + 2025-05-18T15:01:24+00:00 + 0.64 + + + https://jiangxincode.github.io/cnblogs/page6/ + 2025-05-18T15:01:24+00:00 + 0.51 + + + https://jiangxincode.github.io/cnblogs/page7/ + 2025-05-18T15:01:24+00:00 + 0.51 + + + https://jiangxincode.github.io/cnblogs/page11/ + 2025-05-18T15:01:24+00:00 + 0.51 + + + https://jiangxincode.github.io/cnblogs/page10/ + 2025-05-18T15:01:24+00:00 + 0.51 + + + https://jiangxincode.github.io/cnblogs/page8/ + 2025-05-18T15:01:24+00:00 + 0.41 + + + https://jiangxincode.github.io/cnblogs/page9/ + 2025-05-18T15:01:24+00:00 + 0.41 + + + + \ No newline at end of file