From 2cff721c5ac17a57d9f2c833f0215b7e1f7d7d5c Mon Sep 17 00:00:00 2001 From: francis95-han Date: Sun, 18 Jun 2023 00:12:18 +0800 Subject: [PATCH] Site updated: 2023-06-18 00:12:11 --- 2018/08/25/theory/regex/index.html | 10 +- 2018/08/28/using/regex-using/index.html | 8 +- .../machinelearning-1/index.html | 8 +- .../machinelearning-2/index.html | 8 +- .../framework/springboot-myabtis/index.html | 8 +- 2019/12/28/jenkins-1/index.html | 8 +- archives/2018/08/index.html | 2 +- archives/2018/08/page/2/index.html | 2 +- archives/2018/09/index.html | 2 +- archives/2018/09/page/2/index.html | 2 +- archives/2018/index.html | 2 +- archives/2018/page/2/index.html | 2 +- archives/2018/page/3/index.html | 2 +- archives/2018/page/4/index.html | 2 +- archives/2018/page/5/index.html | 2 +- archives/index.html | 2 +- archives/page/2/index.html | 2 +- archives/page/3/index.html | 2 +- archives/page/4/index.html | 2 +- archives/page/5/index.html | 2 +- archives/page/6/index.html | 2 +- baidusitemap.xml | 42 +- categories/PyQt/index.html | 2 + categories/java/index.html | 2 +- categories/java/page/2/index.html | 2 +- css/main.css | 2 +- index.html | 2 +- js/src/algolia-search.js | 8 +- page/2/index.html | 2 +- page/3/index.html | 2 +- page/4/index.html | 2 +- page/5/index.html | 2 +- page/6/index.html | 2 +- search.xml | 2108 ++++++++--------- sitemap.txt | 66 +- sitemap.xml | 130 +- tags/algorithm/index.html | 23 - tags/java/index.html | 2 +- tags/java/page/2/index.html | 2 +- tags/linux/index.html | 2 +- tags/linux/page/2/index.html | 2 +- tags/python/index.html | 2 +- tags/python/page/2/index.html | 2 +- 43 files changed, 1234 insertions(+), 1255 deletions(-) diff --git a/2018/08/25/theory/regex/index.html b/2018/08/25/theory/regex/index.html index feff9b936..d80d84f6f 100644 --- a/2018/08/25/theory/regex/index.html +++ b/2018/08/25/theory/regex/index.html @@ -88,7 +88,7 @@ - + @@ -109,10 +109,10 @@ - + - + @@ -685,13 +685,13 @@

- + - + diff --git a/2018/08/28/using/regex-using/index.html b/2018/08/28/using/regex-using/index.html index 3597e36a0..e1f046bcb 100644 --- a/2018/08/28/using/regex-using/index.html +++ b/2018/08/28/using/regex-using/index.html @@ -88,7 +88,7 @@ - + @@ -109,9 +109,9 @@ + - @@ -441,12 +441,12 @@

+ + - - diff --git a/2018/10/15/theory/algorithm/machinelearning/machinelearning-1/index.html b/2018/10/15/theory/algorithm/machinelearning/machinelearning-1/index.html index 60ff0438d..75fcaa3e8 100644 --- a/2018/10/15/theory/algorithm/machinelearning/machinelearning-1/index.html +++ b/2018/10/15/theory/algorithm/machinelearning/machinelearning-1/index.html @@ -88,7 +88,7 @@ - + @@ -111,8 +111,8 @@ - + @@ -459,10 +459,10 @@

- - + + diff --git a/2018/10/15/theory/algorithm/machinelearning/machinelearning-2/index.html b/2018/10/15/theory/algorithm/machinelearning/machinelearning-2/index.html index f45ccc807..ab527f1c1 100644 --- a/2018/10/15/theory/algorithm/machinelearning/machinelearning-2/index.html +++ b/2018/10/15/theory/algorithm/machinelearning/machinelearning-2/index.html @@ -88,7 +88,7 @@ - + @@ -111,8 +111,8 @@ - + @@ -500,10 +500,10 @@

- - + + diff --git a/2018/11/17/using/java/framework/springboot-myabtis/index.html b/2018/11/17/using/java/framework/springboot-myabtis/index.html index f211eae4a..67a340462 100644 --- a/2018/11/17/using/java/framework/springboot-myabtis/index.html +++ b/2018/11/17/using/java/framework/springboot-myabtis/index.html @@ -88,7 +88,7 @@ - + @@ -110,9 +110,9 @@ - + @@ -464,12 +464,12 @@

myabtis进阶

- - + + diff --git a/2019/12/28/jenkins-1/index.html b/2019/12/28/jenkins-1/index.html index b88964e96..c2361c73e 100644 --- a/2019/12/28/jenkins-1/index.html +++ b/2019/12/28/jenkins-1/index.html @@ -88,7 +88,7 @@ - + @@ -113,8 +113,8 @@ - + @@ -470,10 +470,10 @@

- - + + diff --git a/archives/2018/08/index.html b/archives/2018/08/index.html index cf460bdac..1d2a98605 100644 --- a/archives/2018/08/index.html +++ b/archives/2018/08/index.html @@ -705,7 +705,7 @@

diff --git a/archives/2018/08/page/2/index.html b/archives/2018/08/page/2/index.html index 7fbb09a4b..f6e986900 100644 --- a/archives/2018/08/page/2/index.html +++ b/archives/2018/08/page/2/index.html @@ -483,7 +483,7 @@

diff --git a/archives/2018/09/index.html b/archives/2018/09/index.html index e9510442d..502a42fa8 100644 --- a/archives/2018/09/index.html +++ b/archives/2018/09/index.html @@ -705,7 +705,7 @@

diff --git a/archives/2018/09/page/2/index.html b/archives/2018/09/page/2/index.html index fe3f535e5..814afd241 100644 --- a/archives/2018/09/page/2/index.html +++ b/archives/2018/09/page/2/index.html @@ -446,7 +446,7 @@

diff --git a/archives/2018/index.html b/archives/2018/index.html index f89978782..bd1b476af 100644 --- a/archives/2018/index.html +++ b/archives/2018/index.html @@ -705,7 +705,7 @@

diff --git a/archives/2018/page/2/index.html b/archives/2018/page/2/index.html index 44be19473..101e7a3a1 100644 --- a/archives/2018/page/2/index.html +++ b/archives/2018/page/2/index.html @@ -705,7 +705,7 @@

diff --git a/archives/2018/page/3/index.html b/archives/2018/page/3/index.html index c7ce5592f..b5229fc39 100644 --- a/archives/2018/page/3/index.html +++ b/archives/2018/page/3/index.html @@ -705,7 +705,7 @@

diff --git a/archives/2018/page/4/index.html b/archives/2018/page/4/index.html index d3936cfcc..79fc0d19c 100644 --- a/archives/2018/page/4/index.html +++ b/archives/2018/page/4/index.html @@ -705,7 +705,7 @@

diff --git a/archives/2018/page/5/index.html b/archives/2018/page/5/index.html index c97441333..fcd4a6bfd 100644 --- a/archives/2018/page/5/index.html +++ b/archives/2018/page/5/index.html @@ -446,7 +446,7 @@

diff --git a/archives/index.html b/archives/index.html index b873edf61..aa1ed3bfd 100644 --- a/archives/index.html +++ b/archives/index.html @@ -715,7 +715,7 @@

diff --git a/archives/page/2/index.html b/archives/page/2/index.html index 1b01dfff4..3a2e5115b 100644 --- a/archives/page/2/index.html +++ b/archives/page/2/index.html @@ -710,7 +710,7 @@

diff --git a/archives/page/3/index.html b/archives/page/3/index.html index a1f8f1c3b..9c9875811 100644 --- a/archives/page/3/index.html +++ b/archives/page/3/index.html @@ -705,7 +705,7 @@

diff --git a/archives/page/4/index.html b/archives/page/4/index.html index c79942129..a9d426029 100644 --- a/archives/page/4/index.html +++ b/archives/page/4/index.html @@ -705,7 +705,7 @@

diff --git a/archives/page/5/index.html b/archives/page/5/index.html index 2860cd550..8c488feda 100644 --- a/archives/page/5/index.html +++ b/archives/page/5/index.html @@ -705,7 +705,7 @@

diff --git a/archives/page/6/index.html b/archives/page/6/index.html index fcdb6598c..b75a163ad 100644 --- a/archives/page/6/index.html +++ b/archives/page/6/index.html @@ -631,7 +631,7 @@

diff --git a/baidusitemap.xml b/baidusitemap.xml index 042dd2dad..51fbf06ac 100644 --- a/baidusitemap.xml +++ b/baidusitemap.xml @@ -101,19 +101,19 @@ 2023-02-26 - http://132.232.42.89/2018/09/20/using/java/framework/springboot-mail/ + http://132.232.42.89/2018/11/17/using/java/framework/springboot-myabtis/ 2023-02-26 - http://132.232.42.89/2018/11/17/using/java/framework/springboot-myabtis/ + http://132.232.42.89/2018/09/20/using/java/framework/springboot-mail/ 2023-02-26 - http://132.232.42.89/2018/11/05/using/java/framework/springboot-question/ + http://132.232.42.89/2018/10/11/using/java/framework/springcloud-1/ 2023-02-26 - http://132.232.42.89/2018/10/11/using/java/framework/springcloud-1/ + http://132.232.42.89/2018/11/05/using/java/framework/springboot-question/ 2023-02-26 @@ -125,17 +125,25 @@ 2023-02-26 - http://132.232.42.89/2018/08/25/using/Git/ + http://132.232.42.89/2018/11/23/using/bigdata/bigdata-server-environment-construct/ 2023-02-26 - http://132.232.42.89/2018/11/23/using/bigdata/bigdata-server-environment-construct/ + http://132.232.42.89/2018/08/25/using/Git/ 2023-02-26 http://132.232.42.89/2018/09/29/using/db/nosql/mariadb-using/ 2023-02-26 + + http://132.232.42.89/2018/09/28/theory/linux/linux-cgroup-interface/ + 2023-02-26 + + + http://132.232.42.89/2018/09/28/theory/linux/linux-namespace-interface/ + 2023-02-26 + http://132.232.42.89/2018/08/28/theory/ccna/ccna-4/ 2023-02-26 @@ -153,11 +161,11 @@ 2023-02-26 - http://132.232.42.89/2018/09/28/theory/linux/linux-cgroup-interface/ + http://132.232.42.89/2018/09/27/theory/algorithm/points_bookies/ 2023-02-26 - http://132.232.42.89/2018/09/28/theory/linux/linux-namespace-interface/ + http://132.232.42.89/2018/09/27/theory/algorithm/three-door/ 2023-02-26 @@ -172,14 +180,6 @@ http://132.232.42.89/2018/08/28/theory/ccna/ccna-3/ 2023-02-26 - - http://132.232.42.89/2018/09/27/theory/algorithm/points_bookies/ - 2023-02-26 - - - http://132.232.42.89/2018/09/27/theory/algorithm/three-door/ - 2023-02-26 - http://132.232.42.89/2018/10/15/theory/algorithm/machinelearning/machinelearning-2/ 2023-02-26 @@ -201,23 +201,23 @@ 2023-02-26 - http://132.232.42.89/2020/01/08/push2maven/ + http://132.232.42.89/2020/01/15/pythonwithc-1/ 2023-02-26 - http://132.232.42.89/2020/01/15/pythonwithc-1/ + http://132.232.42.89/2020/01/08/push2maven/ 2023-02-26 - http://132.232.42.89/2019/02/25/machine%20learning/clawler/clawler-6/ + http://132.232.42.89/2019/02/21/machine%20learning/clawler/crawler-2/ 2023-02-26 - http://132.232.42.89/2019/02/21/machine%20learning/clawler/crawler-1/ + http://132.232.42.89/2019/02/25/machine%20learning/clawler/clawler-6/ 2023-02-26 - http://132.232.42.89/2019/02/21/machine%20learning/clawler/crawler-2/ + http://132.232.42.89/2019/02/21/machine%20learning/clawler/crawler-1/ 2023-02-26 diff --git a/categories/PyQt/index.html b/categories/PyQt/index.html index d28318201..38f0223b0 100644 --- a/categories/PyQt/index.html +++ b/categories/PyQt/index.html @@ -1052,3 +1052,5 @@

+body> + diff --git a/categories/java/index.html b/categories/java/index.html index 117e4d2a4..a10c728ff 100644 --- a/categories/java/index.html +++ b/categories/java/index.html @@ -606,7 +606,7 @@

diff --git a/categories/java/page/2/index.html b/categories/java/page/2/index.html index 98b3bb892..734f46ce5 100644 --- a/categories/java/page/2/index.html +++ b/categories/java/page/2/index.html @@ -354,7 +354,7 @@

diff --git a/css/main.css b/css/main.css index 28ee3dc22..5da6341ef 100644 --- a/css/main.css +++ b/css/main.css @@ -1883,7 +1883,7 @@ pre .javascript .function { width: 4px; height: 4px; border-radius: 50%; - background: #005dff; + background: #ff69ff; } .links-of-blogroll { font-size: 13px; diff --git a/index.html b/index.html index 0dc883da8..6336c01e2 100644 --- a/index.html +++ b/index.html @@ -1896,7 +1896,7 @@

diff --git a/js/src/algolia-search.js b/js/src/algolia-search.js index 9787e2ac3..43d3fbcb3 100644 --- a/js/src/algolia-search.js +++ b/js/src/algolia-search.js @@ -80,10 +80,10 @@ $(document).ready(function () { scrollTo: false, showFirstLast: false, labels: { - first: '', - last: '', - previous: '', - next: '' + first: '<<', + last: '>>', + previous: '<', + next: '>' }, cssClasses: { root: 'pagination', diff --git a/page/2/index.html b/page/2/index.html index 6e300da77..1df84ebac 100644 --- a/page/2/index.html +++ b/page/2/index.html @@ -1931,7 +1931,7 @@

diff --git a/page/3/index.html b/page/3/index.html index bd7511a8e..924dad001 100644 --- a/page/3/index.html +++ b/page/3/index.html @@ -1931,7 +1931,7 @@

diff --git a/page/4/index.html b/page/4/index.html index 6977f8665..c0cf2d07f 100644 --- a/page/4/index.html +++ b/page/4/index.html @@ -1911,7 +1911,7 @@

diff --git a/page/5/index.html b/page/5/index.html index c8e92ff85..b7d393031 100644 --- a/page/5/index.html +++ b/page/5/index.html @@ -1917,7 +1917,7 @@

diff --git a/page/6/index.html b/page/6/index.html index 22a74d42f..d17529505 100644 --- a/page/6/index.html +++ b/page/6/index.html @@ -1608,7 +1608,7 @@

diff --git a/search.xml b/search.xml index 37f15606e..f8f68a9ae 100644 --- a/search.xml +++ b/search.xml @@ -56,11 +56,31 @@ jenkins - CI/CD java + CI/CD jenkins + + python通过boost.python使用c/c++ + /2020/01/15/pythonwithc-1/ + 安装boost环境

https://www.boost.org/下载,解压设置环境变量即可在c/c++中日常使用
但是对于boost.python来说需要对boost进行编译

+

编写user-config.jam文件,设置python目录、链接文件目录、头文件目录,位于c:/users/用户/user-config.jam

+
import toolset : using ;
using python
: 3.7
: D:/Applications/python/python37/python.exe
: D:/Applications/python/python37/include
: D:/Applications/python/python37/libs
: <toolset>gcc
;
+
bootstrap.bat gcc  #生成b2.exe等文件
b2 --with-python --toolset=gcc architecture=x86 address-model=64 link=shared #在stage/lib下生成boost.python的对应Python版本的dll和dll.a文件
+

编写并编译c++程序

使用boost.python导出需要使用的c++模块,使用说明见https://wiki.python.org/moin/boost.python/module
需要注意的是,BOOST_PYTHON_MODULE(my_module)中的my_module必须和文件名相同
编译c++程序生成dll文件

+

python使用c++编译后的dll文件

将使用boost.python的dll文件改名为pyd(python的链接库文件)
在Python中添加路径(可以使用sys.path.append或者复制到python执行目录下) ,需要注意,除了添加.pyd文件之外,还需要添加 boost.python的对应Python版本的dll文件

+
import my_module
+]]> + + c/c++ + + + python + c/c++ + boost + + 将项目发布到maven过程记录 /2020/01/08/push2maven/ @@ -110,26 +130,6 @@ jar - - python通过boost.python使用c/c++ - /2020/01/15/pythonwithc-1/ - 安装boost环境

https://www.boost.org/下载,解压设置环境变量即可在c/c++中日常使用
但是对于boost.python来说需要对boost进行编译

-

编写user-config.jam文件,设置python目录、链接文件目录、头文件目录,位于c:/users/用户/user-config.jam

-
import toolset : using ;
using python
: 3.7
: D:/Applications/python/python37/python.exe
: D:/Applications/python/python37/include
: D:/Applications/python/python37/libs
: <toolset>gcc
;
-
bootstrap.bat gcc  #生成b2.exe等文件
b2 --with-python --toolset=gcc architecture=x86 address-model=64 link=shared #在stage/lib下生成boost.python的对应Python版本的dll和dll.a文件
-

编写并编译c++程序

使用boost.python导出需要使用的c++模块,使用说明见https://wiki.python.org/moin/boost.python/module
需要注意的是,BOOST_PYTHON_MODULE(my_module)中的my_module必须和文件名相同
编译c++程序生成dll文件

-

python使用c++编译后的dll文件

将使用boost.python的dll文件改名为pyd(python的链接库文件)
在Python中添加路径(可以使用sys.path.append或者复制到python执行目录下) ,需要注意,除了添加.pyd文件之外,还需要添加 boost.python的对应Python版本的dll文件

-
import my_module
-]]> - - c/c++ - - - python - c/c++ - boost - - Springboot源码探析 — 自动配置 /2023/02/26/springboot%E6%BA%90%E7%A0%81%E6%8E%A2%E6%9E%90/ @@ -287,1184 +287,1271 @@ - Regular Expression 正则表达式 - /2018/08/25/theory/regex/ - Regular Expression(正则表达式) 简称Regex
在Javascript中
g(global)表示全局 i表示不区分大小写
.可以匹配任何一个单位的字符
[]用于定义字符集合 ^取非

-

元字符

+ 数据挖掘--爬虫--解析库 + /2019/02/22/machine%20learning/clawler/clawler-4/ + XPath

  XPath,全程XML Path Language,是一门在XML文档中查找信息的语言,也适用于HTML文档的搜索
  XPath用法    lxml库用法

+

概览

常用规则

+
- - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - + + - - + + - - + + - - + + - - + +
元字符解释说明表达式描述
[\b]Backspace键(退格)
\n换行符
\f换页符
\r回车符
\t制表符(tab)
\v垂直制表符
\r\n回车+换行 许多操作系统以此为行结束,Unix与Linux以\n作为行结束
\d任何一个数字字符 [0-9]
\D任何一个非数字字符 0-9
\w[a-zA-Z0-9_]nodename选取此节点的所有子节点
\Wa-zA-Z0-9_/从当前节点选取直接子节点
\s[\f\n\r\t\v] 任一一个空白字符//从当前节点选取子孙节点
\S\f\n\r\t\v 任一一个非空白字符.选取当前节点
\xXXXX:表示十六进制数..选取当前节点的父节点
\0XXXX:表示八进制数@选取属性
-

POSIX字符类 javascript不支持

+

运算符以及介绍

+
- - + + + + - - + + + - - + + + - - + + + - - + + + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + + + + + + +
POSIX字符类解释说明运算符描述实例返回值
[:alnum:][\w^_]or
[:upper:][A-Z]and
[:alpha:][a-zA-Z]mod取余
[:blank:][ \t] 注意:这里包含空格\计算两个节点集//book \//cd返回所有拥有book和cd元素的节点集
[:xdigit:]任何一个十六进制数 [a-fA-F0-9]+加法
[:cntrl:]ASCII控制字符 0-31加上127-减法
[:digit:]\d*乘法
[:graph:][:print:]去除空格div除法
[:lower:][a-z]=等于
[:print:]任何一个可打印字符!=不等于
[:punct:]既不属于[:alnum:]也不属于[:cntrl:]的字符<小于
[:space:][\f\r\n\t\v ] 注意:这里包含空格>大于
>=大于等于
<=小于等
+

Beautiful soup

  Beautiful Soup就是Python的一个HTML或XML的解析库

+

解析器

Beautiful soup在解析时实际上依赖解析库,支持的解析库如下

- - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + - - + + + + - - + + + + - - - - - - - - -
符号解释说明解析器使用的方法优势劣势
+一次或多次重复
+?懒惰型
*零次或多次重复
*?懒惰型
?零次或一次出现
{n}重复n次
{m,n}至少m次,至多n次
{m,}至少出现m次
{m,}?懒惰型
\b一个单词的开头或结尾 b:boundaryPython标准库BeautifulSoup(markup,”html.parser”)Python内置标准库,执行速度适中,文档容错能力强Python2.7.3以及3.2.2之前的版本文档容错能力差
\B不匹配一个单词边界lxml html解析器BeautifulSoup(markup,”lxml”)速度快,文档容错能力强需要c语言库
^字符串开头 $ 字符串结尾lxml xml解析器BeautifulSoup(markup,”xml”)速度快,唯一支持xml的解析器需要c语言库
(?m)置于开头,用于开启分行匹配模式 multline mode 注意:有的语言不支持
(xx)子表达式,视为独立元素
-
-

回溯引用 backreference

替换模式下Javascript使用$代替\

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + +
符号解释说明
\1,\2……\n第1个表达式,第2个表达式…….第n个表达式
\0代表整个正则表达式
\E结束 \L或\U转换
\l把下一个字符转换为小写
\L把\L到\E之间全部转换为小写
\u把下一个字符转换为大写
\U把\U到\E之间全部转换为大写html5libBeautifulSoup(markup,”html5lib”)最好的容错性、以浏览器的方式解析文档、生成html5格式的文档速度慢、不依赖扩展
-

注意:
1、 Java、Perl、PHP、.NET 支持向后查找
2、 Javascript、ColdFusion 不支持向后查找
向前查找:(?=x) 匹配但不消费x,即结果不包括x
例 (?=:) 原字符串 https: 匹配结果 http
向后查找:(?<=x) 匹配但不消费x,即结果不包括x
例 (?<=$) 原字符串 $400 匹配结果 400
注意:向前查找可以任意长度(可以使用.+) 向后查找的长度是固定的
(?=) 正向前查找 (?<=) 正向后查找
(?!) 负向前查找 (?<!) 负向后查找

-

Mysql JAVA1.4不支持条件处理
(?(backreference)true-regex)
(?(backreference)true-regex|false-regex)
Backreference满足时,匹配true-regex 否则匹配false-regex

-]]> - - regular - - - code - regex - tools - regular - - - - Git命令 - /2018/08/25/using/Git/ - 查看、添加、提交、删除、找回,重置修改文件

git help \ # 显示command的help
git show # 显示某次提交的内容 git show $id
git co — \ # 抛弃工作区修改
git co . # 抛弃工作区修改
git add \ # 将工作文件修改提交到本地暂存区
git add . # 将所有修改过的工作文件提交暂存区
git rm \ # 从版本库中删除文件
git rm \ —cached # 从版本库中删除文件,但不删除文件
git reset \ # 从暂存区恢复到工作文件
git reset — . # 从暂存区恢复到工作文件
git reset —hard # 恢复最近一次提交过的状态,即放弃上次提交后的所有本次修改
git ci \ git ci . git ci -a # 将git add, git rm和git ci等操作都合并在一起做
git ci -am “some comments”
git ci —amend # 修改最后一次提交记录
git revert \<$id> # 恢复某次提交的状态,恢复动作本身也创建次提交对象
git revert HEAD # 恢复最后一次提交的状态

-

查看文件diff

git diff \ # 比较当前文件和暂存区文件差异 git diff
git diff \\\ # 比较两次提交之间的差异
git diff \..\ # 在两个分支之间比较
git diff —staged # 比较暂存区和版本库差异
git diff —cached # 比较暂存区和版本库差异
git diff —stat # 仅仅比较统计信息

-

查看提交记录

git log git log \ # 查看该文件每次提交记录
git log -p \ # 查看每次详细修改内容的diff
git log -p -2 # 查看最近两次详细修改内容的diff
git log —stat #查看提交统计信息
tig Mac上可以使用tig代替diff和log,brew install tig

-

Git 本地分支管理 查看、切换、创建和删除分支

git br -r # 查看远程分支
git br \ # 创建新的分支
git br -v # 查看各个分支最后提交信息
git br —merged # 查看已经被合并到当前分支的分支
git br —no-merged # 查看尚未被合并到当前分支的分支
git co \ # 切换到某个分支
git co -b \ # 创建新的分支,并且切换过去
git co -b \ \ # 基于branch创建新的new_branch
git co $id # 把某次历史提交记录checkout出来,但无分支信息,切换到其他分支会自动删除
git co $id -b \ # 把某次历史提交记录checkout出来,创建成一个分支
git br -d \ # 删除某个分支
git br -D \ # 强制删除某个分支 (未被合并的分支被删除的时候需要强制)

-

分支合并和rebase

git merge \ # 将branch分支合并到当前分支
git merge origin/master —no-ff # 不要Fast-Foward合并,这样可以生成merge提交
git rebase master \ # 将master rebase到branch,相当于: git co \ && git rebase master && git co master && git merge \

-

Git补丁管理(方便在多台机器上开发同步时用)

git diff > ../sync.patch # 生成补丁
git apply ../sync.patch # 打补丁
git apply —check ../sync.patch #测试补丁能否成功

-

Git暂存管理

git stash # 暂存
git stash list # 列所有stash
git stash apply # 恢复暂存的内容
git stash drop # 删除暂存区

-

Git远程分支管理

git pull # 抓取远程仓库所有分支更新并合并到本地
git pull —no-ff # 抓取远程仓库所有分支更新并合并到本地,不要快进合并
git fetch origin # 抓取远程仓库更新
git merge origin/master # 将远程主分支合并到本地当前分支
git co —track origin/branch # 跟踪某个远程分支创建相应的本地分支
git co -b \ origin/\ # 基于远程分支创建本地分支,功能同上
git push # push所有分支
git push origin master # 将本地主分支推到远程主分支
git push -u origin master # 将本地主分支推到远程(如无远程主分支则创建,用于初始化远程仓库)
git push origin \ # 创建远程分支, origin是远程仓库名
git push origin \:\ # 创建远程分支
git push origin :\ #先删除本地分支(git br -d \),然后再push删除远程分支

-

Git远程仓库管理

GitHub
git remote -v # 查看远程服务器地址和仓库名称
git remote show origin # 查看远程服务器仓库状态
git remote add origin git@github:robbin/robbin_site.git # 添加远程仓库地址
git remote set-url origin git@github.com:robbin/robbin_site.git # 设置远程仓库地址(用于修改远程仓库地址) git remote rm \ # 删除远程仓库

-

创建远程仓库

git clone —bare robbin_site robbin_site.git # 用带版本的项目创建纯版本仓库
scp -r my_project.git git@ git.csdn.net:~ # 将纯仓库上传到服务器上
mkdir robbin_site.git && cd robbin_site.git && git —bare init # 在服务器创建纯仓库
git remote add origin git@github.com:robbin/robbin_site.git # 设置远程仓库地址
git push -u origin master # 客户端首次提交
git push -u origin develop # 首次将本地develop分支提交到远程develop分支,并且track
git remote set-head origin master # 设置远程仓库的HEAD指向master分支 ,也可以命令设置跟踪远程库和本地库
git branch —set-upstream master origin/master
git branch —set-upstream develop origin/develop

-

reflog

git reflog是对reflog进行管理的命令,reflog是git用来记录引用变化的一种机制,比如记录分支的变化或者是HEAD引用的变化.
当git reflog不指定引用的时候,默认列出HEAD的reflog.
HEAD@{0}代表HEAD当前的值,HEAD@{3}代表HEAD在3次变化之前的值.
git会将变化记录到HEAD对应的reflog文件中,其路径为.git/logs/HEAD, 分支的reflog文件都放在.git/logs/refs目录下的子目录中.

-

特殊符号

^代表父提交,当一个提交有多个父提交时,可以通过在^后面跟上一个数字,表示第几个父提交: ^相当于^1.
~\相当于连续的\个^.

+

puquery

  获取元素方式和jquery类似

+

参考资料

崔庆才大佬的《python3网络爬虫开发实战》

]]>
- git + crawler - git - tools + python + web crawler + data mining
- 正则表达式应用(持续更新) - /2018/08/28/using/regex-using/ - 编程过程中使用的正则记录
b*[^:b#/]+.*$        统计代码行数(不包括以# / 开头的 亦不包括空行)
\d(9|[0-7])\d{4} 中国邮政编码
^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$ 手机号
^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$ 邮箱
^[\u4e00-\u9fa5]{0,}$ 汉字
http(s)?://([\\w-]+\\.)+[\\w-]+(/[\\w- ./?%&=])? url
(((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))\.){3}((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5])) ipv4
<!-{2,}.*-{2,}> html注释
[1-8]\d{5}((18)|(19)|(20))?\d{2}[0-1]\d[0-3]\d{4}[\dX]? 中华人民共和国身份证号码
^[1-9]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$ 日期
^(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d$ 时间
+ 数据挖掘--爬虫--Ajax数据爬取 + /2019/02/22/machine%20learning/clawler/clawler-5/ + Ajax

  Ajax,全程Asynchronous JavaScript and XML,即异步的JavaScript和XML,在保证页面不被刷新、页面链接不改变的情况下与服务器交换数据并更新部分网页的技术。

+

爬取今日头条街拍

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
@author zhangbohan.dell@gmail.com
@function:
@create 2019/2/25 11:12
"""
import os
from hashlib import md5
from multiprocessing.pool import Pool

import requests
from bs4 import BeautifulSoup
from urllib.parse import urlencode


def get_page(offset):
params = {
'aid': '24',
'app_name': 'web_search',
'offset': offset,
'format': 'json',
'keyword': '街拍',
'autoload': 'true',
'count': '20',
'en_qc': '1',
'cur_tab': '1',
'from': 'search_tab',
'pd': 'syntheis'
}
url = 'https://www.toutiao.com/api/search/content/?' + urlencode(params)
try:
response = requests.get(url)
if response.status_code == 200:
return response.json()
except requests.ConnectionError:
return None


def get_image(json):
if json.get('data'):
for item in json.get('data'):
title = item.get('title')
images = item.get('image_list')
for image in images:
yield {
'image': image.get('url'),
'title': title
}


def save_image(item):
if not os.path.exists(item.get('title')):
os.mkdir(item.get('title'))
try:
response = requests.get(item.get('image'))
if response.status_code == 200:
file_path = '{0}/{1}.{2}'.format(item.get('title'), md5(response.content).hexdigest(), 'jpg')
if not os.path.exists(file_path):
with open(file_path, 'wb') as f:
f.write(response.content)
else:
print('Already Downloaded', file_path)
except requests.ConnectionError:
print('Failed to save Image')


def main(offset):
json = get_page(offset)
for item in get_image(json):
print(item)
save_image(item)


GROUP_START = 1
GROUP_END = 20

if __name__ == '__main__':
pool = Pool()
groups = ([x * 20 for x in range(GROUP_START, GROUP_END + 1)])
pool.map(main, groups)
pool.map(main, groups)
pool.close()
pool.join()

+

参考资料

崔庆才大佬的《python3网络爬虫开发实战》

]]>
- regular + crawler - regex - tools - regular + python + web crawler + data mining
- 数据挖掘--爬虫--解析库 - /2019/02/22/machine%20learning/clawler/clawler-4/ - XPath

  XPath,全程XML Path Language,是一门在XML文档中查找信息的语言,也适用于HTML文档的搜索
  XPath用法    lxml库用法

-

概览

常用规则

-
+ 数据挖掘--爬虫--爬虫基础 + /2019/02/21/machine%20learning/clawler/crawler-2/ + HTTP基本原理

URI和URL

  URI(Uniform Resource Identifier),统一资源标志符;URL(Uniform Resource Locator),统一资源定位符;URN(Uniform Resource Name),统一资源名称,只命名组员而不指定如何定位资源。URL和URN都是URI的子集。

+

超文本hypertext

  超文本是用超链接的方法,将各种不同空间的文字信息组织在一起的网状文本。网页就是超文本的一种体现

+

http和https

http(Hyper Text Transfer Protocol)超文本传输协议。用于从网络传输超文本数据到本地浏览器接收。
https(Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,在HTTP下加入SSL层。

+

http请求过程

- - + + + - - + + + - - + + - - + + - - + + + - - + + - - + + + + + +
表达式描述含义解释
nodename选取此节点的所有子节点Name请求的名称一般会将URL的最后一部分内容当做名称
/从当前节点选取直接子节点Status响应的状态码
//从当前节点选取子孙节点Type请求的文档类型
.选取当前节点Initiator请求源用来标记请求是由那个对象或进程发起的
..选取当前节点的父节点Size从服务器下载的文件和请求的资源的大小
@选取属性Time发起请求到获取相应所用的总时间
WaterFall网络请求的可视化瀑布流
-

运算符以及介绍

+

请求

  请求可以分为4部分:请求方法(Request Method)、请求的网址(Request URL)、请求头(Request Header)、请求体(Request Body)。

+
请求方法

  常见请求方法有两种,GET和POST。除此之外还有PUT、DELETE、OPTIONS、CONNECT、TRACE等

- + - - - - - + + - - - + + - - - + + - - - - - - + + - - + + - - + + - - + + - - + + + + +
运算符方法 描述实例返回值
orGET请求页面,并返回页面内容
andHEAD类似于GET,只不过返回的相应没有具体的内容,用于获取报头
mod取余POST大多用于提交表单或者上传文件,数据包含在请求体中
\计算两个节点集//book \//cd返回所有拥有book和cd元素的节点集PUT从客户端向服务传送的数据取代指定文档中的内容
+加法DELETE请求服务器删除指定的页面
-减法CONNECT把服务器当做跳板,让服务器代替客户端访问其他页面
*乘法OPTIONS允许客户端查看服务器的性能
div除法TRACE回显服务器收到得的请求,主要用于测试或者诊断
+
+
请求的地址

  即URL,可以确定请求的资源

+
请求头

  用来说明服务器要是使用的附加信息

+
+ + + + + + + - - + + - - + + - - + + - - + + - - + + - - + + + + + + + + + +
请求头信息说明
=等于Accept请求报头域,用于指定客户端可以接受那些类型的信息
!=不等于Accept-Language指定客户端可以接受的语言类型
<小于Accept-Encoding指定客户端可以接受的内容编码
>大于Host用于指定请求资源的主机IP和端口号,其内容为请求地址的原始服务器或者网关位置
>=大于等于Cookie(s)网站为了辨别用户进行会话跟踪而存储在用户本地的数据
<=小于等Referer用来标识这个请求是从哪个页面发送过来的
User-Agent(UA)可以使服务器是被客户使用的操作系统以及版本、浏览器以及版本信息
Content-Type互联网媒体类型/MIME类型,用来表示具体请求中的媒体类型信息
-

Beautiful soup

  Beautiful Soup就是Python的一个HTML或XML的解析库

-

解析器

Beautiful soup在解析时实际上依赖解析库,支持的解析库如下

+
请求体

  一般承载的内容是POSt请求中的表单数据,而对于GET请求,请求体为空

+

响应

  由服务器返回给客户端,可以分为三部分:响应状态码(Response Status Code)、响应头(Response Header)、响应体(Response Body)

+
响应的状态码

  表示服务器的响应状态。

- - - - + + + - - - - + + + - - - - + + + - - - - + + + - - - - + + + - -
解析器使用的方法优势劣势状态码说明详情
Python标准库BeautifulSoup(markup,”html.parser”)Python内置标准库,执行速度适中,文档容错能力强Python2.7.3以及3.2.2之前的版本文档容错能力差100继续请求者应当继续提出请求,服务器已经接受部分请求,正在等待其余部分
lxml html解析器BeautifulSoup(markup,”lxml”)速度快,文档容错能力强需要c语言库101切换协议请求者已要求服务器切换协议,服务器已确认并做好准备
lxml xml解析器BeautifulSoup(markup,”xml”)速度快,唯一支持xml的解析器需要c语言库200成功服务器已经处理好了请求
html5libBeautifulSoup(markup,”html5lib”)最好的容错性、以浏览器的方式解析文档、生成html5格式的文档速度慢、不依赖扩展201已创建请求成功并且服务器创建了新的资源
-
-

puquery

  获取元素方式和jquery类似

-

参考资料

崔庆才大佬的《python3网络爬虫开发实战》

-]]>
- - crawler - - - python - web crawler - data mining - - - - 数据挖掘--爬虫--动态渲染页面爬取 - /2019/02/25/machine%20learning/clawler/clawler-6/ - selenium的使用

  官方文档
  selenium是一个自动化测试工具,利用它可以驱动浏览器执行特定的动作,还可以获取浏览器当前呈现页面的源码。

-

等待条件以及其含义

  官方文档

-
wait = WebDriverWait(browser,1)
wait.until(EC.presence_of_element_located((By.ID,'content_left')))
#until中的即为等待条件
-
- - - - + + + - - - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - -
等待条件含义202已接受服务器已经接受请求,但是尚未处理
title_is标题是某内容203非授权信息服务器已成功处理了请求,但返回的信息可能来自另一个源
title_contains标题包含某内容204无内容服务器已经处理了请求,但没有认可返回信息
persence_of_element_localted节点加载出来,传入定位元素,如(By.ID,’p’)205重置内容服务器成功处理了请求,内容被重置
visibility_of_element_localted节点可见,传入定位元素206部分内容服务器成功处理了部分请求
visibility_of可见,传入节点对象300多种选择针对请求,服务器可执行多种选择
persence_of_all_element_localted所有节点加载出来301永久移动请求的网页已经永久移动到新位置,即永久重定向
text_to_be_present_in_element某个节点文本包含某文字302临时移动请求的网页暂时跳转到其他页面,即临时重定向
text_to_be_present_in_element_value某个节点值包含某文字303查看其他位置如果原来的请求是POST,重定向目标文档应该通过GET获取
frame_to_be_availiable_and_switch_to_it加载并切换304未修改此次请求返回的网页未修改,继续使用上次的资源
invisibility_of_element_located节点不可见305使用代理请求者应该使用代理访问该页面
element_to_be_clickable节点可点击307临时重定向请求的资源临时从其他位置响应
staleness_of判断一个节点是否仍在DOM,可判断页面是否已经刷新400错误请求服务器无法解析该请求
element_t_be_selected节点可选择,传入节点对象401未授权请求没有进行身份验证或者验证未通过
element_located_to_be_clickable节点可选择,传入定位元组403禁止访问服务器拒绝该请求
element_selection_state_to_be传入节点对象以及状态,相等返回true,否则false404未找到服务器找不到请求的页面
element_located_selection_state_to_be传入定位元组以及状态,相等返回true,否则false405方法禁用服务器禁用了请求中指定的方法
alert_is_present是否出现警告406不接受无法使用请求的内容相应请求的网页
-
-]]>
- - crawler - - - python - web crawler - data mining - -
- - 数据挖掘--爬虫--Ajax数据爬取 - /2019/02/22/machine%20learning/clawler/clawler-5/ - Ajax

  Ajax,全程Asynchronous JavaScript and XML,即异步的JavaScript和XML,在保证页面不被刷新、页面链接不改变的情况下与服务器交换数据并更新部分网页的技术。

-

爬取今日头条街拍

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
@author zhangbohan.dell@gmail.com
@function:
@create 2019/2/25 11:12
"""
import os
from hashlib import md5
from multiprocessing.pool import Pool

import requests
from bs4 import BeautifulSoup
from urllib.parse import urlencode


def get_page(offset):
params = {
'aid': '24',
'app_name': 'web_search',
'offset': offset,
'format': 'json',
'keyword': '街拍',
'autoload': 'true',
'count': '20',
'en_qc': '1',
'cur_tab': '1',
'from': 'search_tab',
'pd': 'syntheis'
}
url = 'https://www.toutiao.com/api/search/content/?' + urlencode(params)
try:
response = requests.get(url)
if response.status_code == 200:
return response.json()
except requests.ConnectionError:
return None


def get_image(json):
if json.get('data'):
for item in json.get('data'):
title = item.get('title')
images = item.get('image_list')
for image in images:
yield {
'image': image.get('url'),
'title': title
}


def save_image(item):
if not os.path.exists(item.get('title')):
os.mkdir(item.get('title'))
try:
response = requests.get(item.get('image'))
if response.status_code == 200:
file_path = '{0}/{1}.{2}'.format(item.get('title'), md5(response.content).hexdigest(), 'jpg')
if not os.path.exists(file_path):
with open(file_path, 'wb') as f:
f.write(response.content)
else:
print('Already Downloaded', file_path)
except requests.ConnectionError:
print('Failed to save Image')


def main(offset):
json = get_page(offset)
for item in get_image(json):
print(item)
save_image(item)


GROUP_START = 1
GROUP_END = 20

if __name__ == '__main__':
pool = Pool()
groups = ([x * 20 for x in range(GROUP_START, GROUP_END + 1)])
pool.map(main, groups)
pool.map(main, groups)
pool.close()
pool.join()

-

参考资料

崔庆才大佬的《python3网络爬虫开发实战》

-]]>
- - crawler - - - python - web crawler - data mining - -
- - 数据挖掘--爬虫--准备工作 - /2019/02/21/machine%20learning/clawler/crawler-1/ - python环境的准备工作

  博主在这使用windows作为系统环境,安装anaconda3作为python运行与库管理环境。
  anaconda官方网站
  如果下载速度过慢,可以选择使用清华大学镜像使用说明

-

请求库的安装

requests库

&emsp;&emsp;阻塞式http请求库
-
pip3 install requests
-

selenuim库

  selenuim是一个自动化测试工具,可以使用它驱动浏览器执行特定的动作。如点击,下拉等等

-
pip3 install selenuim
-

Google Chrome 以及其驱动 ChromeDriver

&emsp;&emsp;Google Chrome[下载](https://chrome.en.softonic.com/)&emsp;&emsp; ChromeDriver[下载](https://chromedriver.storage.googleapis.com/index.html)  
-<font color="red">注意:安装的chromedriver版本要和google chrome版本相匹配</font>  
-&emsp;&emsp;将下载下来的chromedriver添加到环境变量,在命令行中进行测试是否成功
-
chromedriver
-
显示以下类似内容说明成功
-
Starting ChromeDriver 72.0.3626.69 (3c16f8a135abc0d4da2dff33804db79b849a7c38) on port 9515
Only local connections are allowed.
Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code
-
在python中进行测试
-
from selenium import webdriver  
brower = webdriver.Chrome()
-
运行打开一个新的chrome窗口
-

Firefox以及其驱动 GeckoDriver

FireFox[下载](http://www.firefox.com.cn/)&emsp;&emsp;GeckoDriver[下载](https://github.com/mozilla/geckodriver/releases)  
-<font color="red">注意:安装的geckodriver版本要和firefox版本相匹配,geckodriver下载界面有版本要求说明,如果geckodriver未起作用,请尝试重装firefox最新版本并重启电脑</font>  
-&emsp;&emsp;将下载下来的geckodriver添加到环境变量,在命令行中进行测试是否成功
-
geckodriver
-
在python中进行测试
-
from selenium import webdriver
brower = webdriver.Firefox()
-
运行打开一个新的firefox窗口
-

PhantomJS

  PhantomJS是一个无界面的、可脚本编程的webkit浏览器引擎,下载
  将下载下来的bin文件夹下的phantomjs.exe添加到环境变量,在命令行中进行测试是否成功

-
phantomjs
-
出现以下内容说明可用
-
phantomjs>
-
在python中进行测试
-
from selenium import webdriver

brower = webdriver.PhantomJS()
brower.get("http://www.baidu.com")
print(brower.current_url))
-
使用PhantonJs不会打开一个新的窗口,但实际上已经在后台运行
-

aiohttp

异步web服务库
-
pip3 install aiohttp
-
此外,官方还推荐安装cchardet(字符编码检测库)和aiodns(加速dns解析库),
-
pip3 install cchardet aiodns
-

解析库的安装

lxml

支持html和xml的解析,支持XPath解析方式,解析效率高

-
pip3 install lxml
-

Beautiful Soup

pip3 install beautifulsoup4
-

pyquery

  pyquery 同样是一个强大的网页解析工具,它提供了和 jQuery 类似的语法来解析 HTML 文梢,支持 css 选择器,使用非常方便.

-
pip3 install pyquery
-

tesserocr

  cor识别,识别各种各样的验证码。tesserocr是对tesseract的一层python封装,因此需要先安装tesseract,带dev的是开发版本,不稳定,不带dev的是稳定版本
linux下

-
pip3 install tesserocr pillow 
-

windows下
whl安装文件下载地址

-
pip install tesserocr-2.4.0-cp36-cp36m-win_amd64.whl
-

保存测试图片到本地,分别对tesseract和tesserocr进行测试,看能否识别

-
tesseract image.png result -l eng && type result.txt
#运行结果
#Tesseract Open Source OCR Engine v3.0S .01 with Leptonica
#Python3WebSpider
-
import tesserocr
from PIL import Image
image = Image.open('D:\\temp\\test\\image.png')
print(tesserocr.image_to_text(image))
-

数据库(略)

存储库

PyMysql

pip3 install pymysql
-

PyMongo

pip3 install pymongo
-

redis-py

pip3 install redis
-

WEB库

flask

pip3 install flask
-

Tornado

  Tornado是一个支持异步的web框架,通过使用非阻塞I/O流,可以支撑成千上万的开放连接,效率非常高。

-
pip3 install tornado
-

App爬取相关库(暂时放弃)

爬虫框架

pyspider

  它带有强大的WebUI、脚本编辑器、任务监
控器、项目管理器以及结果处理器,同时支持多种数据库后端、多种消息队列,另外还支持JavaScript渲染页面的爬取
  pyspider是支持JavaScript渲染的,而这个过程是依赖于PhantomJS的,所以还需要安装PhantomJS

-
pip3 install pyspider
-

Scrapy

pip3 install scrapy
-

参考资料

崔庆才大佬的《python3网络爬虫开发实战》

-]]>
- - crawler - - - python - web crawler - data mining - -
- - 数据挖掘--爬虫--爬虫基础 - /2019/02/21/machine%20learning/clawler/crawler-2/ - HTTP基本原理

URI和URL

  URI(Uniform Resource Identifier),统一资源标志符;URL(Uniform Resource Locator),统一资源定位符;URN(Uniform Resource Name),统一资源名称,只命名组员而不指定如何定位资源。URL和URN都是URI的子集。

-

超文本hypertext

  超文本是用超链接的方法,将各种不同空间的文字信息组织在一起的网状文本。网页就是超文本的一种体现

-

http和https

http(Hyper Text Transfer Protocol)超文本传输协议。用于从网络传输超文本数据到本地浏览器接收。
https(Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,在HTTP下加入SSL层。

-

http请求过程

- - - - - + + + - - - - - + + + - - + + + - - + + + - - - + + + - - + + + - - + + + - - + + + - -
含义解释407需要代理授权请求者需要代理授权
Name请求的名称一般会将URL的最后一部分内容当做名称408请求超时服务器请求超时
Status响应的状态码409冲突服务器在完成请求时发生冲突
Type请求的文档类型410已删除请求的资源已永久删除
Initiator请求源用来标记请求是由那个对象或进程发起的411需要有效长度服务器不接受不含有有效长度标头字段的请求
Size从服务器下载的文件和请求的资源的大小412为满足前提条件服务器为满足请求者在请求中设置的一个前提条件
Time发起请求到获取相应所用的总时间413请求实体过大请求实体过大,超出服务器处理范围
WaterFall网络请求的可视化瀑布流414请求URI过长请求网址过长,服务器无法处理
-
-

请求

  请求可以分为4部分:请求方法(Request Method)、请求的网址(Request URL)、请求头(Request Header)、请求体(Request Body)。

-
请求方法

  常见请求方法有两种,GET和POST。除此之外还有PUT、DELETE、OPTIONS、CONNECT、TRACE等

-
- - - - + + + - - - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + +
方法描述415不支持类型请求个事不被请求页面支持
GET请求页面,并返回页面内容416请求范围不符页面无法提供请求的范围
HEAD类似于GET,只不过返回的相应没有具体的内容,用于获取报头417未满足期望值服务器未满足期望请求标头字段的要求
POST大多用于提交表单或者上传文件,数据包含在请求体中500服务器内部错误服务器遇到错误,无法完成请求
PUT从客户端向服务传送的数据取代指定文档中的内容501未实现服务器不具备完成请求的功能
DELETE请求服务器删除指定的页面502错误网关服务器作为网关或者代理,从上游服务器收到无效响应
CONNECT把服务器当做跳板,让服务器代替客户端访问其他页面503服务不可用服务器目前无法使用
OPTIONS允许客户端查看服务器的性能504网关超时服务器作为网关或者代理,但是没有及时从上游服务器收到请求
TRACE回显服务器收到得的请求,主要用于测试或者诊断505HTTP版本不支持服务器不支持请求中所用的HTTP协议版本
-
请求的地址

  即URL,可以确定请求的资源

-
请求头

  用来说明服务器要是使用的附加信息

+
响应头

  响应头包含了服务器对请求的应答信息,常见的应答信息:

- - + + - - - - - - + + - - + + - - + + - - + + - - + + - - + + - - + +
请求头信息说明标签含义
Accept请求报头域,用于指定客户端可以接受那些类型的信息
Accept-Language指定客户端可以接受的语言类型Date标识响应产生的时间
Accept-Encoding指定客户端可以接受的内容编码Last-Modified指定资源的最后修改时间
Host用于指定请求资源的主机IP和端口号,其内容为请求地址的原始服务器或者网关位置Content-Encoding指定响应内容的编码
Cookie(s)网站为了辨别用户进行会话跟踪而存储在用户本地的数据Server包含服务器的信息(名称、版本号等)
Referer用来标识这个请求是从哪个页面发送过来的Content-Type文档类型
User-Agent(UA)可以使服务器是被客户使用的操作系统以及版本、浏览器以及版本信息Set-Cookie设置Cookie
Content-Type互联网媒体类型/MIME类型,用来表示具体请求中的媒体类型信息Expires指定响应的过期时间,可以使用代理服务器或者浏览器将加载的内容更新到缓存中
-
请求体

  一般承载的内容是POSt请求中的表单数据,而对于GET请求,请求体为空

-

响应

  由服务器返回给客户端,可以分为三部分:响应状态码(Response Status Code)、响应头(Response Header)、响应体(Response Body)

-
响应的状态码

  表示服务器的响应状态。

-
+
响应体

   相应的正文

+

爬虫原理

概述

  爬虫就是获取网页并提取保存信息的自动化程序。

+

参考资料

崔庆才大佬的《python3网络爬虫开发实战》

+]]> + + crawler + + + python + web crawler + data mining + + + + 正则表达式应用(持续更新) + /2018/08/28/using/regex-using/ + 编程过程中使用的正则记录
b*[^:b#/]+.*$        统计代码行数(不包括以# / 开头的 亦不包括空行)
\d(9|[0-7])\d{4} 中国邮政编码
^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$ 手机号
^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$ 邮箱
^[\u4e00-\u9fa5]{0,}$ 汉字
http(s)?://([\\w-]+\\.)+[\\w-]+(/[\\w- ./?%&=])? url
(((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))\.){3}((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5])) ipv4
<!-{2,}.*-{2,}> html注释
[1-8]\d{5}((18)|(19)|(20))?\d{2}[0-1]\d[0-3]\d{4}[\dX]? 中华人民共和国身份证号码
^[1-9]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$ 日期
^(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d$ 时间
+]]>
+ + regular + + + regular + regex + tools + +
+ + 数据挖掘--爬虫--基础库 + /2019/02/22/machine%20learning/clawler/crawler-3/ + urllib

  urllib包含4个模块:

+
    +
  1. request 基本的http请求模块,用来模拟发送请求。
  2. +
  3. error 异常处理模块,用于捕获异常保证程序不会意外终止
  4. +
  5. parse 工具模块,提供了许多URL的处理方法
  6. +
  7. robotparser 主要用来识别网站中的robots.txt文件,判断哪些网页可以用来爬
  8. +
+

request

urlopen()

API—-> urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)

+
    +
  1. data
    添加该参数之后,请求方法即为POST;如果其内容为字节流编码格式(bytes类型)的内容,需要通过bytes()方法进行转换

    +
    import urllib.request as requset
    import urllib.parse as parse

    data = bytes(parse.urlencode({'world':'hello'}),encoding='utf-8')
    reponse = requset.urlopen('http://httpbin.org/post',data=data)
    print(reponse.read())
    +
  2. +
  3. timeout
    用于设置超时时间,单位:秒,超出这个时间没有相应,就会抛出异常,支持http、https、ftp请求

    +
    import urllib.request as requset

    reponse = requset.urlopen('http://httpbin.org/get',timeout=1)
    +
  4. +
  5. context
      用来指定ssl设置,必须是ssl.SSLContext类型

    +
  6. +
  7. cafile和capath
      用来指定CA证书和它的路径,在https链接时会用到
  8. +
  9. cadefault
      该参数已经弃用,默认为False
  10. +
+
Request

  如果请求中需要添加header头信息,就需要使用Request类来构建请求。

+

API—-> class urllib.request.Request(ur1, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)

+
    +
  1. url
    用于请求URL,必传参数
  2. +
  3. data
    bytes(字节流)类型
  4. +
  5. headers
    一个字典,也就是请求头,可以通过headers参数直接构造请求头,也可以通过请求实例的add_header()方法添加
  6. +
  7. origin_req_host
    指的是请求方的host名称或者IP地址
  8. +
  9. unverifiable
    标识这个请求是够是无法验证的,默认是False,也就是用户没有权限来选择接受这个请求的结果
  10. +
  11. method
    指示请求使用的方法,POST、GET、PUT等
  12. +
+
高级用法

  需要更高级的操作(Cookie处理、代理设置等)的时候,使用更加强大的工具Handler,简单的可以理解为各种处理器。
BaseHandler是其他所有Handler的父类,提供了最基本的方法。

+
    +
  • HTTPDefaultErrorHandler
      用于处理HTTP响应错误
  • +
  • HTTPRedirectHandler
      用于处理重定向
  • +
  • HTTPCookieProcesser
      用于处理Cookie
  • +
  • ProxyHandler
      用于设置代理,默认代理为空
  • +
  • HTTPPasswordMgr
      用于管理密码,维护了用户名和密码的表
  • +
  • HTTPBasicAuthHandler
      用于管理认证
  • +
+

parse

  parse 模块,它定义了处理 URL 的标准接口,例如实现URL各部分的抽取、合并以及链接转换。 它支持如下协议的 URL 处理:file 、http、gopher、hdl、http、https、imap 、mailto、mms、news、nntp、prospero、rsync、rtsp、rtspu、sftp、sip、sips、snews、svn、svn+ssh、telnet和wais。

+
urlparse()

  可以实现URL的识别和分段,解析为6部分: scheme(协议)、netloc(域名)、path(访问路径)、params(参数)、query(查询条件)和fragment(锚点)。

+

API—-> urllib.parse.urlparse(urlstring, scheme=”, allow_fragments=True)

+
    +
  1. urlstring
      必填项,待解析的URL
  2. +
  3. scheme
      默认的协议,如果链接没有带协议信息,会以此作为默认协议
  4. +
  5. allow_fragments
      是够忽略 fragement。设置为false,fragement部分就会被忽略,解析为path、parameters、或者query的一部分
  6. +
+
urlunparse()

  接受一个可迭代的且长度为6的对象作为参数,构造一个URL

+
import urllib.parse as parse

data= ['http','www.baidu.com','index.html','user', 'a=6','comment']
print(parse.urlunparse(data))
+
urlsplit()

  与urlparse()类似,不过不再单独解析params部分,将其合并到path中

+
urlunsplit()

  与urlunparse()类似,接受一个可迭代的且长度为5的对象作为参数,构造一个URL

+
urljoin()

  提供一个base_url(基础链接)作为第一个参数,将新的链接作为第二个参数,该方法会分析base_url的scheme、netloc和path这3个内容并对新链接缺失的部分进行补充,最后返回结果。
  base_url提供了三项内容scheme、netloc和path。如果这3项在新的链接里不存在,就予以补充;如果新的链接存在,就使用新的链接的部分。而base_url中的params、query和fragment是不起作用的。

+
urlencode()

  通过序列化将字典转换为GET请求参数

+
parse_qs()

  通过反序列化将GET请求参数转换为字典

+
parse_qsl()

  将参数转化为元组组成的列表

+
quote()

  将内容转化为URL编码的格式

+
unquote()

  将URL编码格式的内容解码

+

robotparser

bobots协议

  Robots协议也称作爬虫协议/机器人协议,全程网络爬虫排除协议(Robots Exclusion Protocol),通常为一个robots.txt文本文件,存放于网站的根目录之下。

+
User-agent: *
Disallow: I
Allow: /public/
+
常见的爬虫名称
- - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + + +
状态码说明详情爬虫名称名称网站
100继续请求者应当继续提出请求,服务器已经接受部分请求,正在等待其余部分BaiduSpider百度www.baidu.com
101切换协议请求者已要求服务器切换协议,服务器已确认并做好准备Googlebot谷歌www.google.com
200成功服务器已经处理好了请求360Spider360搜索www.so.com
201已创建请求成功并且服务器创建了新的资源YodaoBot有道www.youdao.com
202已接受服务器已经接受请求,但是尚未处理ia_archiverAlexawww.alexa.cn
203非授权信息服务器已成功处理了请求,但返回的信息可能来自另一个源Scooteraltavistawww.altavista.com
+
+
robotparser

  一些常用方法:

+
    +
  • set_url(): 用来设置robots.txt文件的链接。如果在创建RobotFileParser对象时传入了链接,那么就不需要再使用这个方法设置了 。
  • +
  • read(): 读取 robots.txt文件并进行分析。注意,这个方法执行一个读取和分析操作,如果不调用这个方法,接下来的判断都会为 False,所以一定记得调用这个方法。这个方法不会返回任何内容,但是执行了读取操作。
  • +
  • parse(): 用来解析robots.txt文件,传人的参数是robots.txt某些行的内容,它会按照 robots.txt的语法规则来分析这些内容。
  • +
  • can_fetch(): 该方法传人两个参数,第一个是 User-agent,第二个是要抓取的URL。返回的内容是该搜索引擎是否可以抓取这个URL,返回结果是True或False
  • +
  • mtime(): 返回的是上次抓取和分析robots.txt的时间,这对于长时间分析和抓取的搜索爬虫是很有必要的,你可能需要定期检查来抓取最新的robots.txt。
  • +
  • modified() :它同样对长时间分析和抓取的搜索爬虫很有帮助,将当前时间设置为上次抓取和分析robots.txt的时间 。
  • +
+

requests

GET请求

import requests

r = requests.get('http://httpbin.org/get')
print(r.text)
+

POST请求

import requests

data = {'name':'germey', 'age':'22'}
r = requests.post("http://httpbin.org/post", data=data)
print(r.text)
+

正则表达式

  详情请看另一篇文章

+

爬取猫眼top100


#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import json
import re
from bs4 import BeautifulSoup

import requests


def get_one(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36'
}
response = requests.get(url)
if response.status_code == 200:
return response.text
return None


def parse_one_page(html):
soup = BeautifulSoup(html, features='lxml')
select = soup.select('dd')
for i in select:
yield {
'index':i.select("i.board-index").pop().text,
'name': i.select('p.name').pop().text,
'star':re.sub( "[\f\r\n\t\v ]","",i.select('p.star').pop().text),
'releasetime': i.select('p.releasetime').pop().text,
'score': i.select('p.score').pop().text}


def main(offset = 0):
url = 'https://maoyan.com/board/4?offset='+str(offset)
html = get_one(url)
with open("result.txt","a+",encoding="utf-8",newline="") as f:
for i in parse_one_page(html):
f.write(json.dumps(i,ensure_ascii=False)+"\n")

if __name__ == '__main__':
for i in range(10):
main(offset=i*10)

+

参考资料

崔庆才大佬的《python3网络爬虫开发实战》

+]]>
+ + crawler + + + python + web crawler + data mining + +
+ + 数据挖掘--爬虫--动态渲染页面爬取 + /2019/02/25/machine%20learning/clawler/clawler-6/ + selenium的使用

  官方文档
  selenium是一个自动化测试工具,利用它可以驱动浏览器执行特定的动作,还可以获取浏览器当前呈现页面的源码。

+

等待条件以及其含义

  官方文档

+
wait = WebDriverWait(browser,1)
wait.until(EC.presence_of_element_located((By.ID,'content_left')))
#until中的即为等待条件
+
+ + - - - + + + + - - - + + - - - + + - - - + + - - - + + - - - + + - - - + + - - - + + - - - + + - - - + + - - - + + - - - + + - - - + + - - - + + + + + + + + + + + + + + + + + + + + +
204无内容服务器已经处理了请求,但没有认可返回信息等待条件含义
205重置内容服务器成功处理了请求,内容被重置title_is标题是某内容
206部分内容服务器成功处理了部分请求title_contains标题包含某内容
300多种选择针对请求,服务器可执行多种选择persence_of_element_localted节点加载出来,传入定位元素,如(By.ID,’p’)
301永久移动请求的网页已经永久移动到新位置,即永久重定向visibility_of_element_localted节点可见,传入定位元素
302临时移动请求的网页暂时跳转到其他页面,即临时重定向visibility_of可见,传入节点对象
303查看其他位置如果原来的请求是POST,重定向目标文档应该通过GET获取persence_of_all_element_localted所有节点加载出来
304未修改此次请求返回的网页未修改,继续使用上次的资源text_to_be_present_in_element某个节点文本包含某文字
305使用代理请求者应该使用代理访问该页面text_to_be_present_in_element_value某个节点值包含某文字
307临时重定向请求的资源临时从其他位置响应frame_to_be_availiable_and_switch_to_it加载并切换
400错误请求服务器无法解析该请求invisibility_of_element_located节点不可见
401未授权请求没有进行身份验证或者验证未通过element_to_be_clickable节点可点击
403禁止访问服务器拒绝该请求staleness_of判断一个节点是否仍在DOM,可判断页面是否已经刷新
404未找到服务器找不到请求的页面element_t_be_selected节点可选择,传入节点对象
element_located_to_be_clickable节点可选择,传入定位元组
element_selection_state_to_be传入节点对象以及状态,相等返回true,否则false
element_located_selection_state_to_be传入定位元组以及状态,相等返回true,否则false
alert_is_present是否出现警告
+
+]]>
+ + crawler + + + python + web crawler + data mining + +
+ + 数据结构 - 树 + /2018/09/17/theory/algorithm/algorithm-tree/ +

   一棵树是一些节点的集合。如果这棵树非空,则一棵树由称作根(root)节点的r以及0个或者多个非空的(子)树组成,这些子树中每一棵的根都被来自根r的一条有向的边(edge)所连接。
  每一棵子树的根叫做r的儿子,r是每一棵子树的根的父亲。没有儿子的节点称为树叶,具有相同父节点的节点称为兄弟。

+]]>
+ + algorithm + + + algorithm + data structure + tree + +
+ + 数据挖掘--爬虫--准备工作 + /2019/02/21/machine%20learning/clawler/crawler-1/ + python环境的准备工作

  博主在这使用windows作为系统环境,安装anaconda3作为python运行与库管理环境。
  anaconda官方网站
  如果下载速度过慢,可以选择使用清华大学镜像使用说明

+

请求库的安装

requests库

&emsp;&emsp;阻塞式http请求库
+
pip3 install requests
+

selenuim库

  selenuim是一个自动化测试工具,可以使用它驱动浏览器执行特定的动作。如点击,下拉等等

+
pip3 install selenuim
+

Google Chrome 以及其驱动 ChromeDriver

&emsp;&emsp;Google Chrome[下载](https://chrome.en.softonic.com/)&emsp;&emsp; ChromeDriver[下载](https://chromedriver.storage.googleapis.com/index.html)  
+<font color="red">注意:安装的chromedriver版本要和google chrome版本相匹配</font>  
+&emsp;&emsp;将下载下来的chromedriver添加到环境变量,在命令行中进行测试是否成功
+
chromedriver
+
显示以下类似内容说明成功
+
Starting ChromeDriver 72.0.3626.69 (3c16f8a135abc0d4da2dff33804db79b849a7c38) on port 9515
Only local connections are allowed.
Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code
+
在python中进行测试
+
from selenium import webdriver  
brower = webdriver.Chrome()
+
运行打开一个新的chrome窗口
+

Firefox以及其驱动 GeckoDriver

FireFox[下载](http://www.firefox.com.cn/)&emsp;&emsp;GeckoDriver[下载](https://github.com/mozilla/geckodriver/releases)  
+<font color="red">注意:安装的geckodriver版本要和firefox版本相匹配,geckodriver下载界面有版本要求说明,如果geckodriver未起作用,请尝试重装firefox最新版本并重启电脑</font>  
+&emsp;&emsp;将下载下来的geckodriver添加到环境变量,在命令行中进行测试是否成功
+
geckodriver
+
在python中进行测试
+
from selenium import webdriver
brower = webdriver.Firefox()
+
运行打开一个新的firefox窗口
+

PhantomJS

  PhantomJS是一个无界面的、可脚本编程的webkit浏览器引擎,下载
  将下载下来的bin文件夹下的phantomjs.exe添加到环境变量,在命令行中进行测试是否成功

+
phantomjs
+
出现以下内容说明可用
+
phantomjs>
+
在python中进行测试
+
from selenium import webdriver

brower = webdriver.PhantomJS()
brower.get("http://www.baidu.com")
print(brower.current_url))
+
使用PhantonJs不会打开一个新的窗口,但实际上已经在后台运行
+

aiohttp

异步web服务库
+
pip3 install aiohttp
+
此外,官方还推荐安装cchardet(字符编码检测库)和aiodns(加速dns解析库),
+
pip3 install cchardet aiodns
+

解析库的安装

lxml

支持html和xml的解析,支持XPath解析方式,解析效率高

+
pip3 install lxml
+

Beautiful Soup

pip3 install beautifulsoup4
+

pyquery

  pyquery 同样是一个强大的网页解析工具,它提供了和 jQuery 类似的语法来解析 HTML 文梢,支持 css 选择器,使用非常方便.

+
pip3 install pyquery
+

tesserocr

  cor识别,识别各种各样的验证码。tesserocr是对tesseract的一层python封装,因此需要先安装tesseract,带dev的是开发版本,不稳定,不带dev的是稳定版本
linux下

+
pip3 install tesserocr pillow 
+

windows下
whl安装文件下载地址

+
pip install tesserocr-2.4.0-cp36-cp36m-win_amd64.whl
+

保存测试图片到本地,分别对tesseract和tesserocr进行测试,看能否识别

+
tesseract image.png result -l eng && type result.txt
#运行结果
#Tesseract Open Source OCR Engine v3.0S .01 with Leptonica
#Python3WebSpider
+
import tesserocr
from PIL import Image
image = Image.open('D:\\temp\\test\\image.png')
print(tesserocr.image_to_text(image))
+

数据库(略)

存储库

PyMysql

pip3 install pymysql
+

PyMongo

pip3 install pymongo
+

redis-py

pip3 install redis
+

WEB库

flask

pip3 install flask
+

Tornado

  Tornado是一个支持异步的web框架,通过使用非阻塞I/O流,可以支撑成千上万的开放连接,效率非常高。

+
pip3 install tornado
+

App爬取相关库(暂时放弃)

爬虫框架

pyspider

  它带有强大的WebUI、脚本编辑器、任务监
控器、项目管理器以及结果处理器,同时支持多种数据库后端、多种消息队列,另外还支持JavaScript渲染页面的爬取
  pyspider是支持JavaScript渲染的,而这个过程是依赖于PhantomJS的,所以还需要安装PhantomJS

+
pip3 install pyspider
+

Scrapy

pip3 install scrapy
+

参考资料

崔庆才大佬的《python3网络爬虫开发实战》

+]]>
+ + crawler + + + python + web crawler + data mining + +
+ + 分赌本问题 + /2018/09/27/theory/algorithm/points_bookies/ + 问题描述

  假设A、B两个人赌博,假设每一局中每人获胜的概率是相同的,刚开始下的赌注均是100法郎,并且约定双方谁先获胜3局,谁就拿走所有的赌本,但是中途由于一些原因,不得不终止比赛,此时A胜2局,B胜1局,问此时赌本该怎么分配才均匀?
  注意:假设在赛点不会出现平局。

+

思路解析

    +
  1. 假设继续赌下去,至多两局结束
  2. +
  3. 若接下来的第四局A胜(1/2),则A获得所有赌注
  4. +
  5. 若接下来的第四局B胜(1/2),则进行第五局,第五局中,A胜(1/2*1/2=1/4)才能获得所有赌注
  6. +
+

python模拟

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
""" @author zhangbohan.dell@gmail.com
@function: 分赌本问题
@create 2018/9/27 11:00"""

import random

'''
:param n 赢钱所需要的局数
:param n1 第一个人已经赢得局数
:param n2 第二个人已经赢得局数
本程序中取n =3,n1 = 2,n2 = 1
'''


def Bookies(n, n1, n2):
for i in range(2 * n - n1 - n2 - 1):
D = random.randint(1, 2)
if D == 1:
n1 += 1
else:
n2 += 1
if n1 == n:
return 1
if n2 == n:
return 2

n = 10000
win = 0
for i in range(n):
if Bookies(3, 2, 1) == 1:
win += 1
print("A获得赢钱的可能为{}".format(float(win / n)))
]]>
+ + probability theory + + + algorithm + probability theory + +
+ + Cgroup简介 + /2018/09/28/theory/linux/linux-cgroup-interface/ +   Cgroup,全称Control Group(控制组),用于限制和隔离一组进程对系统资源的调用,即做资源QoS(Quality of Service,服务质量)。
  Cgroup的原生接口通过cgroupfs提供,类似于procfs和sysfs,是一种虚拟文件系统。

+
    +
  1. 挂载cgroupfs
      此过程一般在启动时由linux发行版做好了。标准挂载点是/sys/fs/cgroup,可以变更。

    +
    mount -t cgroup -o cpuset /sys/fs/cgroup/cpuset/
    # mount: cgroup 已经挂载或 /sys/fs/cgroup/cpuset 忙
    # cgroup 已经挂载到 /sys/fs/cgroup/systemd 上
    # cgroup 已经挂载到 /sys/fs/cgroup/blkio 上
    # cgroup 已经挂载到 /sys/fs/cgroup/freezer 上
    # cgroup 已经挂载到 /sys/fs/cgroup/devices 上
    # cgroup 已经挂载到 /sys/fs/cgroup/perf_event 上
    # cgroup 已经挂载到 /sys/fs/cgroup/net_cls,net_prio 上
    # cgroup 已经挂载到 /sys/fs/cgroup/cpuset 上
    # cgroup 已经挂载到 /sys/fs/cgroup/cpu,cpuacct 上
    # cgroup 已经挂载到 /sys/fs/cgroup/hugetlb 上
    # cgroup 已经挂载到 /sys/fs/cgroup/pids 上
    # cgroup 已经挂载到 /sys/fs/cgroup/memory 上
    +
  2. +
  3. 查看cgroupfs
      cpuset开头的子文件都是由cpuset子系统产生的,其他文件则由Cgroup产生。这里的tasks文件记录了这个Cgroup的所有进程,包括线程。

    +
    ls /sys/fs/cgroup/cpuset/
    # cgroup.clone_children cpuset.memory_pressure
    # cgroup.event_control cpuset.memory_pressure_enabled
    # cgroup.procs cpuset.memory_spread_page
    # cgroup.sane_behavior cpuset.memory_spread_slab
    # cpuset.cpu_exclusive cpuset.mems
    # cpuset.cpus cpuset.sched_load_balance
    # cpuset.effective_cpus cpuset.sched_relax_domain_level
    # cpuset.effective_mems notify_on_release
    # cpuset.mem_exclusive release_agent
    # cpuset.mem_hardwall tasks
    # cpuset.memory_migrate
  4. +
  5. 创建Cgroup
      通过mkdir创建一个新的目录,也就是常见了一个新的Cgroup

    +
    mkdir /sys/fs/cgroup/cpuset/child
    +
  6. +
  7. 配置Cgroup

    +

      配置这个Cgroup的资源配额,通过以下命令,可以先哲这个Cgroup的进程只能在0号cpu上运行,并且只能在0号内存节点分配内存。

    +
    echo 0 > /sys/fs/cgroup/cpuset/child/cpuset.cpus
    echo 0 > /sys/fs/cgroup/cpuset/child/cpuset.mems
  8. +
  9. 使能Cgroup

    +

      通过将进程id写进tasks文件,将整个进程移动到Cgroup中,Cgroup真正起作用了

    +
    echo $$ > /sys/fs/cgroup/cpuset/child/tasks # $$表示当前进程id
    +
  10. +
+]]>
+ + linux + + + linux + cgroup + kernel + +
+ + Regular Expression 正则表达式 + /2018/08/25/theory/regex/ + Regular Expression(正则表达式) 简称Regex
在Javascript中
g(global)表示全局 i表示不区分大小写
.可以匹配任何一个单位的字符
[]用于定义字符集合 ^取非

+

元字符

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + - - - + + - - - + + - - - + + - - - + + - - - + + + +
元字符解释说明
[\b]Backspace键(退格)
\n换行符
\f换页符
\r回车符
\t制表符(tab)
\v垂直制表符
\r\n回车+换行 许多操作系统以此为行结束,Unix与Linux以\n作为行结束
\d任何一个数字字符 [0-9]
\D任何一个非数字字符 0-9
405方法禁用服务器禁用了请求中指定的方法\w[a-zA-Z0-9_]
406不接受无法使用请求的内容相应请求的网页\Wa-zA-Z0-9_
407需要代理授权请求者需要代理授权\s[\f\n\r\t\v] 任一一个空白字符
408请求超时服务器请求超时\S\f\n\r\t\v 任一一个非空白字符
409冲突服务器在完成请求时发生冲突\xXXXX:表示十六进制数
410已删除请求的资源已永久删除\0XXXX:表示八进制数
+
+

POSIX字符类 javascript不支持

+ + - - - + + + + - - - + + - - - + + - - - + + - - - + + - - - + + - - - + + - - - + + - - - + + - - - + + - - - + + - - - + + - - - + +
411需要有效长度服务器不接受不含有有效长度标头字段的请求POSIX字符类解释说明
412为满足前提条件服务器为满足请求者在请求中设置的一个前提条件[:alnum:][\w^_]
413请求实体过大请求实体过大,超出服务器处理范围[:upper:][A-Z]
414请求URI过长请求网址过长,服务器无法处理[:alpha:][a-zA-Z]
415不支持类型请求个事不被请求页面支持[:blank:][ \t] 注意:这里包含空格
416请求范围不符页面无法提供请求的范围[:xdigit:]任何一个十六进制数 [a-fA-F0-9]
417未满足期望值服务器未满足期望请求标头字段的要求[:cntrl:]ASCII控制字符 0-31加上127
500服务器内部错误服务器遇到错误,无法完成请求[:digit:]\d
501未实现服务器不具备完成请求的功能[:graph:][:print:]去除空格
502错误网关服务器作为网关或者代理,从上游服务器收到无效响应[:lower:][a-z]
503服务不可用服务器目前无法使用[:print:]任何一个可打印字符
504网关超时服务器作为网关或者代理,但是没有及时从上游服务器收到请求[:punct:]既不属于[:alnum:]也不属于[:cntrl:]的字符
505HTTP版本不支持服务器不支持请求中所用的HTTP协议版本[:space:][\f\r\n\t\v ] 注意:这里包含空格
-
响应头

  响应头包含了服务器对请求的应答信息,常见的应答信息:

- - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
标签含义符号解释说明
Date标识响应产生的时间+一次或多次重复
Last-Modified指定资源的最后修改时间+?懒惰型
Content-Encoding指定响应内容的编码*零次或多次重复
Server包含服务器的信息(名称、版本号等)*?懒惰型
Content-Type文档类型?零次或一次出现
Set-Cookie设置Cookie{n}重复n次
Expires指定响应的过期时间,可以使用代理服务器或者浏览器将加载的内容更新到缓存中{m,n}至少m次,至多n次
{m,}至少出现m次
{m,}?懒惰型
\b一个单词的开头或结尾 b:boundary
\B不匹配一个单词边界
^字符串开头 $ 字符串结尾
(?m)置于开头,用于开启分行匹配模式 multline mode 注意:有的语言不支持
(xx)子表达式,视为独立元素
-
响应体

   相应的正文

-

爬虫原理

概述

  爬虫就是获取网页并提取保存信息的自动化程序。

-

参考资料

崔庆才大佬的《python3网络爬虫开发实战》

-]]>
- - crawler - - - python - web crawler - data mining - -
- - 数据挖掘--爬虫--基础库 - /2019/02/22/machine%20learning/clawler/crawler-3/ - urllib

  urllib包含4个模块:

-
    -
  1. request 基本的http请求模块,用来模拟发送请求。
  2. -
  3. error 异常处理模块,用于捕获异常保证程序不会意外终止
  4. -
  5. parse 工具模块,提供了许多URL的处理方法
  6. -
  7. robotparser 主要用来识别网站中的robots.txt文件,判断哪些网页可以用来爬
  8. -
-

request

urlopen()

API—-> urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)

-
    -
  1. data
    添加该参数之后,请求方法即为POST;如果其内容为字节流编码格式(bytes类型)的内容,需要通过bytes()方法进行转换

    -
    import urllib.request as requset
    import urllib.parse as parse

    data = bytes(parse.urlencode({'world':'hello'}),encoding='utf-8')
    reponse = requset.urlopen('http://httpbin.org/post',data=data)
    print(reponse.read())
    -
  2. -
  3. timeout
    用于设置超时时间,单位:秒,超出这个时间没有相应,就会抛出异常,支持http、https、ftp请求

    -
    import urllib.request as requset

    reponse = requset.urlopen('http://httpbin.org/get',timeout=1)
    -
  4. -
  5. context
      用来指定ssl设置,必须是ssl.SSLContext类型

    -
  6. -
  7. cafile和capath
      用来指定CA证书和它的路径,在https链接时会用到
  8. -
  9. cadefault
      该参数已经弃用,默认为False
  10. -
-
Request

  如果请求中需要添加header头信息,就需要使用Request类来构建请求。

-

API—-> class urllib.request.Request(ur1, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)

-
    -
  1. url
    用于请求URL,必传参数
  2. -
  3. data
    bytes(字节流)类型
  4. -
  5. headers
    一个字典,也就是请求头,可以通过headers参数直接构造请求头,也可以通过请求实例的add_header()方法添加
  6. -
  7. origin_req_host
    指的是请求方的host名称或者IP地址
  8. -
  9. unverifiable
    标识这个请求是够是无法验证的,默认是False,也就是用户没有权限来选择接受这个请求的结果
  10. -
  11. method
    指示请求使用的方法,POST、GET、PUT等
  12. -
-
高级用法

  需要更高级的操作(Cookie处理、代理设置等)的时候,使用更加强大的工具Handler,简单的可以理解为各种处理器。
BaseHandler是其他所有Handler的父类,提供了最基本的方法。

-
    -
  • HTTPDefaultErrorHandler
      用于处理HTTP响应错误
  • -
  • HTTPRedirectHandler
      用于处理重定向
  • -
  • HTTPCookieProcesser
      用于处理Cookie
  • -
  • ProxyHandler
      用于设置代理,默认代理为空
  • -
  • HTTPPasswordMgr
      用于管理密码,维护了用户名和密码的表
  • -
  • HTTPBasicAuthHandler
      用于管理认证
  • -
-

parse

  parse 模块,它定义了处理 URL 的标准接口,例如实现URL各部分的抽取、合并以及链接转换。 它支持如下协议的 URL 处理:file 、http、gopher、hdl、http、https、imap 、mailto、mms、news、nntp、prospero、rsync、rtsp、rtspu、sftp、sip、sips、snews、svn、svn+ssh、telnet和wais。

-
urlparse()

  可以实现URL的识别和分段,解析为6部分: scheme(协议)、netloc(域名)、path(访问路径)、params(参数)、query(查询条件)和fragment(锚点)。

-

API—-> urllib.parse.urlparse(urlstring, scheme=”, allow_fragments=True)

-
    -
  1. urlstring
      必填项,待解析的URL
  2. -
  3. scheme
      默认的协议,如果链接没有带协议信息,会以此作为默认协议
  4. -
  5. allow_fragments
      是够忽略 fragement。设置为false,fragement部分就会被忽略,解析为path、parameters、或者query的一部分
  6. -
-
urlunparse()

  接受一个可迭代的且长度为6的对象作为参数,构造一个URL

-
import urllib.parse as parse

data= ['http','www.baidu.com','index.html','user', 'a=6','comment']
print(parse.urlunparse(data))
-
urlsplit()

  与urlparse()类似,不过不再单独解析params部分,将其合并到path中

-
urlunsplit()

  与urlunparse()类似,接受一个可迭代的且长度为5的对象作为参数,构造一个URL

-
urljoin()

  提供一个base_url(基础链接)作为第一个参数,将新的链接作为第二个参数,该方法会分析base_url的scheme、netloc和path这3个内容并对新链接缺失的部分进行补充,最后返回结果。
  base_url提供了三项内容scheme、netloc和path。如果这3项在新的链接里不存在,就予以补充;如果新的链接存在,就使用新的链接的部分。而base_url中的params、query和fragment是不起作用的。

-
urlencode()

  通过序列化将字典转换为GET请求参数

-
parse_qs()

  通过反序列化将GET请求参数转换为字典

-
parse_qsl()

  将参数转化为元组组成的列表

-
quote()

  将内容转化为URL编码的格式

-
unquote()

  将URL编码格式的内容解码

-

robotparser

bobots协议

  Robots协议也称作爬虫协议/机器人协议,全程网络爬虫排除协议(Robots Exclusion Protocol),通常为一个robots.txt文本文件,存放于网站的根目录之下。

-
User-agent: *
Disallow: I
Allow: /public/
-
常见的爬虫名称
+

回溯引用 backreference

替换模式下Javascript使用$代替\

+
- - - + + + + + + + + - - - - - + + - - - + + - - - + + - - - + + - - - + + - - - + +
爬虫名称名称网站符号解释说明
\1,\2……\n第1个表达式,第2个表达式…….第n个表达式
BaiduSpider百度www.baidu.com\0代表整个正则表达式
Googlebot谷歌www.google.com\E结束 \L或\U转换
360Spider360搜索www.so.com\l把下一个字符转换为小写
YodaoBot有道www.youdao.com\L把\L到\E之间全部转换为小写
ia_archiverAlexawww.alexa.cn\u把下一个字符转换为大写
Scooteraltavistawww.altavista.com\U把\U到\E之间全部转换为大写
-
robotparser

  一些常用方法:

-
    -
  • set_url(): 用来设置robots.txt文件的链接。如果在创建RobotFileParser对象时传入了链接,那么就不需要再使用这个方法设置了 。
  • -
  • read(): 读取 robots.txt文件并进行分析。注意,这个方法执行一个读取和分析操作,如果不调用这个方法,接下来的判断都会为 False,所以一定记得调用这个方法。这个方法不会返回任何内容,但是执行了读取操作。
  • -
  • parse(): 用来解析robots.txt文件,传人的参数是robots.txt某些行的内容,它会按照 robots.txt的语法规则来分析这些内容。
  • -
  • can_fetch(): 该方法传人两个参数,第一个是 User-agent,第二个是要抓取的URL。返回的内容是该搜索引擎是否可以抓取这个URL,返回结果是True或False
  • -
  • mtime(): 返回的是上次抓取和分析robots.txt的时间,这对于长时间分析和抓取的搜索爬虫是很有必要的,你可能需要定期检查来抓取最新的robots.txt。
  • -
  • modified() :它同样对长时间分析和抓取的搜索爬虫很有帮助,将当前时间设置为上次抓取和分析robots.txt的时间 。
  • -
-

requests

GET请求

import requests

r = requests.get('http://httpbin.org/get')
print(r.text)
-

POST请求

import requests

data = {'name':'germey', 'age':'22'}
r = requests.post("http://httpbin.org/post", data=data)
print(r.text)
-

正则表达式

  详情请看另一篇文章

-

爬取猫眼top100


#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import json
import re
from bs4 import BeautifulSoup

import requests


def get_one(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36'
}
response = requests.get(url)
if response.status_code == 200:
return response.text
return None


def parse_one_page(html):
soup = BeautifulSoup(html, features='lxml')
select = soup.select('dd')
for i in select:
yield {
'index':i.select("i.board-index").pop().text,
'name': i.select('p.name').pop().text,
'star':re.sub( "[\f\r\n\t\v ]","",i.select('p.star').pop().text),
'releasetime': i.select('p.releasetime').pop().text,
'score': i.select('p.score').pop().text}


def main(offset = 0):
url = 'https://maoyan.com/board/4?offset='+str(offset)
html = get_one(url)
with open("result.txt","a+",encoding="utf-8",newline="") as f:
for i in parse_one_page(html):
f.write(json.dumps(i,ensure_ascii=False)+"\n")

if __name__ == '__main__':
for i in range(10):
main(offset=i*10)

-

参考资料

崔庆才大佬的《python3网络爬虫开发实战》

+

注意:
1、 Java、Perl、PHP、.NET 支持向后查找
2、 Javascript、ColdFusion 不支持向后查找
向前查找:(?=x) 匹配但不消费x,即结果不包括x
例 (?=:) 原字符串 https: 匹配结果 http
向后查找:(?<=x) 匹配但不消费x,即结果不包括x
例 (?<=$) 原字符串 $400 匹配结果 400
注意:向前查找可以任意长度(可以使用.+) 向后查找的长度是固定的
(?=) 正向前查找 (?<=) 正向后查找
(?!) 负向前查找 (?<!) 负向后查找

+

Mysql JAVA1.4不支持条件处理
(?(backreference)true-regex)
(?(backreference)true-regex|false-regex)
Backreference满足时,匹配true-regex 否则匹配false-regex

]]> - crawler + regular - python - web crawler - data mining + regular + regex + tools + code + + + + Namespace简介 + /2018/09/28/theory/linux/linux-namespace-interface/ +   Namespace是将内核的全局资源做封装,使得每个Namespace都有一份独立的资源,因此,不同的进程在各自的namespace内对同一资源的使用不会产生相互干扰。
  目前,linux内核总共实现了6中namespace:

+
    +
  1. IPC : 隔离System V IPC 和POSIX消息队列
      IPC:Inter-Process Communication(进程间通信),IPC namespace针对的是SystemV IPC和Posix消息队列,这些IPC机制都会用到标识符。IPC Namespace 能做到的就是使相同的标识符在两个Namespace中代表不同的消息队列,这样就使得两个Namespace中的进程不能通过IPC进程通信了。
  2. +
  3. Network :隔离网络资源
      每个Network Namespace都有自己的网络设备、IP地址、路由表、/proc/net目录,端口号等

    +
    ip nets add new_ns #创建network namespace
    ip nets exec new_ns ip link list #使用 ip nets exec可以对特定的network namespace执行网络管理
    ip nets exec new_ns ip link set dev lo up #启用lopopback接口
    ip nets delete new_ns #删除namespace
    +
  4. +
  5. Mount : 隔离文件系统挂载点
      用来隔离文件系统挂载点,每个进程能看到的文件系统都记录在/proc/$$/mounts里,在创建了一个新的Mount Namespace后,进程系统对文件系统挂载/卸载的动作不会影响到其他Namespace。

    +
  6. +
  7. PID : 隔离进程ID
      用于隔离进程PID号,这样一来,不同的Namespace中的进程PID号就可以是一样的了
  8. +
  9. UTS : 隔离主机名和域名
      因为主机名可以代替IP,因此可以使用主机名在网络上访问某台机器,如果不做隔离,这个机制在容器里就会出问题。
  10. +
  11. User :隔离用户ID和组ID
      一个进程在namespace里的用户和组ID与它在host里的ID可以不一样,最有用的地方在于可以在容器内部启用0号用户(root),但是它的特权被限定在容器内,离开容器就只是普通用户权限了
  12. +
+]]>
+ + linux + + + linux + kernel + namespace + +
+ + 蒙提霍尔三门问题 + /2018/09/27/theory/algorithm/three-door/ +   蒙提霍尔三门问题亦称蒙提霍尔悖论

+

问题描述

  参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车,选中后面有车的那扇门可赢得该汽车,另外两扇门后面则各藏有一只山羊。当参赛者选定了一扇门,但未去开启它的时候,节目主持人开启剩下两扇门的其中一扇,露出其中一只山羊。主持人其后会问参赛者要不要换另一扇仍然关上的门。
  问题是:换另一扇门会否增加参赛者赢得汽车的机率?

+

思路解析

    +
  1. 三扇门,只有一扇门后有有汽车,其余的为山羊
  2. +
  3. 汽车事前等可能放置到三扇门中的其中一个
  4. +
  5. 参赛者等可能选择其中一扇,挑选前不知道门后有什么
  6. +
  7. 主持人清楚的知道门后有什么
  8. +
  9. 如果参赛者挑选了一扇有山羊的门,则主持人必须打开另一扇有山羊的门
  10. +
  11. 如果参赛者挑选了有汽车的门,主持人等可能在另外两扇有山羊的门选择一扇打开
  12. +
  13. 参赛者会被问保持原先选择还是转而选择另一扇门
  14. +
+

Python模拟以上过程

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
""" @author zhangbohan.dell@gmail.com
@function: 蒙提霍尔三门问题
@create 2018/9/27 10:09"""

import random


def MontyHall(Dselect, Dchange):
Dcar = random.randint(1, 3) # 随机等可能放置汽车
if Dcar == Dselect and Dchange == 0: # 一开始选中并且没有改变选择
return 1
elif Dcar != Dselect and Dchange == 0: # 一开始没选中也没有改变选择
return 0
elif Dcar == Dselect and Dchange == 1: # 一开始选中并且改变选择
return 0
else: # 一开始没选中并且改变选择
return 1


n = 10000
win = 0
for i in range(n):
select = random.randint(1, 3)
win += MontyHall(select, random.randint(0, 1))
print("不确认是够改变选择{}".format(float(win / n)))

win = 0
for i in range(n):
select = random.randint(1, 3)
win += MontyHall(select, 0)
print("确认不改变选择{}".format(float(win / n)))

win = 0
for i in range(n):
select = random.randint(1, 3)
win += MontyHall(select, 1)
print("确认改变选择{}".format(float(win / n)))
]]>
+ + probability theory + + + algorithm + probability theory
@@ -1751,117 +1838,6 @@ net - - Cgroup简介 - /2018/09/28/theory/linux/linux-cgroup-interface/ -   Cgroup,全称Control Group(控制组),用于限制和隔离一组进程对系统资源的调用,即做资源QoS(Quality of Service,服务质量)。
  Cgroup的原生接口通过cgroupfs提供,类似于procfs和sysfs,是一种虚拟文件系统。

-
    -
  1. 挂载cgroupfs
      此过程一般在启动时由linux发行版做好了。标准挂载点是/sys/fs/cgroup,可以变更。

    -
    mount -t cgroup -o cpuset /sys/fs/cgroup/cpuset/
    # mount: cgroup 已经挂载或 /sys/fs/cgroup/cpuset 忙
    # cgroup 已经挂载到 /sys/fs/cgroup/systemd 上
    # cgroup 已经挂载到 /sys/fs/cgroup/blkio 上
    # cgroup 已经挂载到 /sys/fs/cgroup/freezer 上
    # cgroup 已经挂载到 /sys/fs/cgroup/devices 上
    # cgroup 已经挂载到 /sys/fs/cgroup/perf_event 上
    # cgroup 已经挂载到 /sys/fs/cgroup/net_cls,net_prio 上
    # cgroup 已经挂载到 /sys/fs/cgroup/cpuset 上
    # cgroup 已经挂载到 /sys/fs/cgroup/cpu,cpuacct 上
    # cgroup 已经挂载到 /sys/fs/cgroup/hugetlb 上
    # cgroup 已经挂载到 /sys/fs/cgroup/pids 上
    # cgroup 已经挂载到 /sys/fs/cgroup/memory 上
    -
  2. -
  3. 查看cgroupfs
      cpuset开头的子文件都是由cpuset子系统产生的,其他文件则由Cgroup产生。这里的tasks文件记录了这个Cgroup的所有进程,包括线程。

    -
    ls /sys/fs/cgroup/cpuset/
    # cgroup.clone_children cpuset.memory_pressure
    # cgroup.event_control cpuset.memory_pressure_enabled
    # cgroup.procs cpuset.memory_spread_page
    # cgroup.sane_behavior cpuset.memory_spread_slab
    # cpuset.cpu_exclusive cpuset.mems
    # cpuset.cpus cpuset.sched_load_balance
    # cpuset.effective_cpus cpuset.sched_relax_domain_level
    # cpuset.effective_mems notify_on_release
    # cpuset.mem_exclusive release_agent
    # cpuset.mem_hardwall tasks
    # cpuset.memory_migrate
  4. -
  5. 创建Cgroup
      通过mkdir创建一个新的目录,也就是常见了一个新的Cgroup

    -
    mkdir /sys/fs/cgroup/cpuset/child
    -
  6. -
  7. 配置Cgroup

    -

      配置这个Cgroup的资源配额,通过以下命令,可以先哲这个Cgroup的进程只能在0号cpu上运行,并且只能在0号内存节点分配内存。

    -
    echo 0 > /sys/fs/cgroup/cpuset/child/cpuset.cpus
    echo 0 > /sys/fs/cgroup/cpuset/child/cpuset.mems
  8. -
  9. 使能Cgroup

    -

      通过将进程id写进tasks文件,将整个进程移动到Cgroup中,Cgroup真正起作用了

    -
    echo $$ > /sys/fs/cgroup/cpuset/child/tasks # $$表示当前进程id
    -
  10. -
-]]>
- - linux - - - linux - cgroup - kernel - -
- - Namespace简介 - /2018/09/28/theory/linux/linux-namespace-interface/ -   Namespace是将内核的全局资源做封装,使得每个Namespace都有一份独立的资源,因此,不同的进程在各自的namespace内对同一资源的使用不会产生相互干扰。
  目前,linux内核总共实现了6中namespace:

-
    -
  1. IPC : 隔离System V IPC 和POSIX消息队列
      IPC:Inter-Process Communication(进程间通信),IPC namespace针对的是SystemV IPC和Posix消息队列,这些IPC机制都会用到标识符。IPC Namespace 能做到的就是使相同的标识符在两个Namespace中代表不同的消息队列,这样就使得两个Namespace中的进程不能通过IPC进程通信了。
  2. -
  3. Network :隔离网络资源
      每个Network Namespace都有自己的网络设备、IP地址、路由表、/proc/net目录,端口号等

    -
    ip nets add new_ns #创建network namespace
    ip nets exec new_ns ip link list #使用 ip nets exec可以对特定的network namespace执行网络管理
    ip nets exec new_ns ip link set dev lo up #启用lopopback接口
    ip nets delete new_ns #删除namespace
    -
  4. -
  5. Mount : 隔离文件系统挂载点
      用来隔离文件系统挂载点,每个进程能看到的文件系统都记录在/proc/$$/mounts里,在创建了一个新的Mount Namespace后,进程系统对文件系统挂载/卸载的动作不会影响到其他Namespace。

    -
  6. -
  7. PID : 隔离进程ID
      用于隔离进程PID号,这样一来,不同的Namespace中的进程PID号就可以是一样的了
  8. -
  9. UTS : 隔离主机名和域名
      因为主机名可以代替IP,因此可以使用主机名在网络上访问某台机器,如果不做隔离,这个机制在容器里就会出问题。
  10. -
  11. User :隔离用户ID和组ID
      一个进程在namespace里的用户和组ID与它在host里的ID可以不一样,最有用的地方在于可以在容器内部启用0号用户(root),但是它的特权被限定在容器内,离开容器就只是普通用户权限了
  12. -
-]]>
- - linux - - - linux - kernel - namespace - -
- - 数据结构 - 树 - /2018/09/17/theory/algorithm/algorithm-tree/ -

   一棵树是一些节点的集合。如果这棵树非空,则一棵树由称作根(root)节点的r以及0个或者多个非空的(子)树组成,这些子树中每一棵的根都被来自根r的一条有向的边(edge)所连接。
  每一棵子树的根叫做r的儿子,r是每一棵子树的根的父亲。没有儿子的节点称为树叶,具有相同父节点的节点称为兄弟。

-]]>
- - algorithm - - - algorithm - data structure - tree - -
- - 分赌本问题 - /2018/09/27/theory/algorithm/points_bookies/ - 问题描述

  假设A、B两个人赌博,假设每一局中每人获胜的概率是相同的,刚开始下的赌注均是100法郎,并且约定双方谁先获胜3局,谁就拿走所有的赌本,但是中途由于一些原因,不得不终止比赛,此时A胜2局,B胜1局,问此时赌本该怎么分配才均匀?
  注意:假设在赛点不会出现平局。

-

思路解析

    -
  1. 假设继续赌下去,至多两局结束
  2. -
  3. 若接下来的第四局A胜(1/2),则A获得所有赌注
  4. -
  5. 若接下来的第四局B胜(1/2),则进行第五局,第五局中,A胜(1/2*1/2=1/4)才能获得所有赌注
  6. -
-

python模拟

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
""" @author zhangbohan.dell@gmail.com
@function: 分赌本问题
@create 2018/9/27 11:00"""

import random

'''
:param n 赢钱所需要的局数
:param n1 第一个人已经赢得局数
:param n2 第二个人已经赢得局数
本程序中取n =3,n1 = 2,n2 = 1
'''


def Bookies(n, n1, n2):
for i in range(2 * n - n1 - n2 - 1):
D = random.randint(1, 2)
if D == 1:
n1 += 1
else:
n2 += 1
if n1 == n:
return 1
if n2 == n:
return 2

n = 10000
win = 0
for i in range(n):
if Bookies(3, 2, 1) == 1:
win += 1
print("A获得赢钱的可能为{}".format(float(win / n)))
]]>
- - probability theory - - - algorithm - probability theory - -
- - 蒙提霍尔三门问题 - /2018/09/27/theory/algorithm/three-door/ -   蒙提霍尔三门问题亦称蒙提霍尔悖论

-

问题描述

  参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车,选中后面有车的那扇门可赢得该汽车,另外两扇门后面则各藏有一只山羊。当参赛者选定了一扇门,但未去开启它的时候,节目主持人开启剩下两扇门的其中一扇,露出其中一只山羊。主持人其后会问参赛者要不要换另一扇仍然关上的门。
  问题是:换另一扇门会否增加参赛者赢得汽车的机率?

-

思路解析

    -
  1. 三扇门,只有一扇门后有有汽车,其余的为山羊
  2. -
  3. 汽车事前等可能放置到三扇门中的其中一个
  4. -
  5. 参赛者等可能选择其中一扇,挑选前不知道门后有什么
  6. -
  7. 主持人清楚的知道门后有什么
  8. -
  9. 如果参赛者挑选了一扇有山羊的门,则主持人必须打开另一扇有山羊的门
  10. -
  11. 如果参赛者挑选了有汽车的门,主持人等可能在另外两扇有山羊的门选择一扇打开
  12. -
  13. 参赛者会被问保持原先选择还是转而选择另一扇门
  14. -
-

Python模拟以上过程

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
""" @author zhangbohan.dell@gmail.com
@function: 蒙提霍尔三门问题
@create 2018/9/27 10:09"""

import random


def MontyHall(Dselect, Dchange):
Dcar = random.randint(1, 3) # 随机等可能放置汽车
if Dcar == Dselect and Dchange == 0: # 一开始选中并且没有改变选择
return 1
elif Dcar != Dselect and Dchange == 0: # 一开始没选中也没有改变选择
return 0
elif Dcar == Dselect and Dchange == 1: # 一开始选中并且改变选择
return 0
else: # 一开始没选中并且改变选择
return 1


n = 10000
win = 0
for i in range(n):
select = random.randint(1, 3)
win += MontyHall(select, random.randint(0, 1))
print("不确认是够改变选择{}".format(float(win / n)))

win = 0
for i in range(n):
select = random.randint(1, 3)
win += MontyHall(select, 0)
print("确认不改变选择{}".format(float(win / n)))

win = 0
for i in range(n):
select = random.randint(1, 3)
win += MontyHall(select, 1)
print("确认改变选择{}".format(float(win / n)))
]]>
- - probability theory - - - algorithm - probability theory - -
大数据环境搭建过程记录 /2018/11/23/using/bigdata/bigdata-server-environment-construct/ @@ -1975,52 +1951,26 @@ hadoop3节点进程状态:
还有,将hive-site.xml配置文件里的 value值带:的,都改成绝对路径,否则报错,hadoop不认带:的路径。(所有的 ${system:java.io.tmpdir} 改成 /tmp/)
  • mysql中要手动创建hive数据库
    create database hive character set latin1;
    如果出现没有权限的问题,在mysql中授权(在安装mysql的机器上执行)
    mysql -r root -p
    -
    grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
    grant all privileges on *.* to 'root'@'hadoop1' identified by 'root' with grant option;
    flush privileges;
  • -
  • 初始化元数据
    schematool -initSchema -dbType mysql
    -
  • - -

    步骤七、hbase安装与配置

      -
    1. 修改conf/hbase-env.sh
      export JAVA_HOME=/opt/java/jdk1.8.0_201
      export HBASE_MANAGES_ZK=false
    2. -
    3. 修改hbase-site.xml
      <configuration>
      <property>
      <name>hbase.rootdir</name>
      <value>hdfs://hadoop1:9000/hbase</value>
      </property>
      <property>
      <name>dfs.replication</name>
      <value>1</value>
      </property>
      <property>
      <name>hbase.cluster.distributed</name>
      <value>true</value>
      </property>
      <property>
      <name>hbase.zookeeper.quorum</name>
      <value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>
      </property>
      </configuration>
    4. -
    5. 修改conf/regionservers文件,其中配置所有hbase主机,每个主机独占一行,hbase启动或关闭时会按照此配置顺序执行。
    6. -
    7. 启动
      主节点:
      start-hbae.sh
      - 在一从节点启动备用hhadoop1实现高可用:
      hbase-daemon.sh start hadoop1
      - 关闭集群:stop-hbase.sh
    8. -
    -]]> - - bigdata - - - linux - bigdata - environment construct - - - - Centos使用记录 - /2018/09/26/using/linux/centos-using/ -   个人喜欢使用CentOS7 系统,本帖记录使用CentOS所使用的过程,安装过程 略 (我习惯采用最小化安装)

    -

    安装图形化界面

    yum groupinstall "GNOME Desktop" "Graphical Administration Tools" #安装GNOME图形化界面(时间较长,耐心等待)
    ln -sf /lib/systemd/system/runlevel5.target  /etc/systemd/system/default.target #设置图形化界面为默认启动选项
    reboot # 重启CentOS
    -

    启动网络连接(手动配置网卡信息)

      安装过程没选择网络或者网卡没有自动连接,或者修改网卡配置(比如修改为固定ip等等)

    -
    ip addr  #查看你的网卡信息
    cat /etc/sysconfig/network-scripts/ifcfg-ens33 #打印查看网卡信息
    vi /etc/sysconfig/network-scripts/ifcfg-ens33 #修改网卡信息如下
    -
    TYPE=Ethernet
    PROXY_METHOD=none
    BROWSER_ONLY=no
    BOOTPROTO=dhcp
    DEFROUTE=yes
    IPV4_FAILURE_FATAL=no
    IPV6INIT=yes
    IPV6_AUTOCONF=yes
    IPV6_DEFROUTE=yes
    IPV6_FAILURE_FATAL=no
    IPV6_ADDR_GEN_MODE=stable-privacy
    NAME=ens33
    UUID=a6bf4243-3908-4096-a87d-aabc853fffba
    DEVICE=ens33
    ONBOOT=yes #修改的地方,改no为yes ,自动启动
    -

    安装网络工具包

    yum install -y net-tools   #包含ifconfig等命令
    -

    修改yum安装源为阿里源

     mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo_bak #备份原有源信息

    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo #下载阿里源到本地

    yum makecache #建立缓存

    yum -y update #对现有安装程序升级
    -

    安装中文输入法

    yum install -y ibus ibus-libpinyin
    -

    设置 -> 区域和语言 -> 输入源 -> 新加 -> 汉语(中国) -> 汉语(intelligent Pinyin)

    -

    安装jdk

    rpm -qa | grep java  #查找已经安装的jdk
    rpm -e --nodeps java-1.7.0-openjdk # 卸载掉
    rpm -e --nodeps java-1.8.0-openjdk # 卸载掉
    rpm -e --nodeps java-1.8.0-openjdk-headless # 卸载掉
    rpm -e --nodeps java-1.7.0-openjdk-headless # 卸载掉
    rpm -ivh jdk-8u181-linux-x64.rpm # 安装下载好的rpm
    vim /etc/profile # 添加jdk到环境变量如下
    source /etc/profile #是环境变量有效
    -
    #/etc/profile 末尾添加一下内容
    #java environment
    export JAVA_HOME=/usr/java/jdk1.8.0_181-amd64
    export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
    export PATH=$PATH:${JAVA_HOME}/bin
    -

    安装hadoop

    #已经安装并且配置jdk
    cd /opt/hadoop # 切换目录
    wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.9.0/hadoop-2.9.0.tar.gz #下载hadoop
    tar -zxvf hadoop-2.9.0.tar.gz # 解压
    cd hadoop-2.9.0 # 进入hadoop目录
    ./bin/hadoop version # 查看hadoop是否能使用
    -

    安装redis以及基础配置

    yum install epel-release -y # 下载fedora的epel仓库
    yum install -y redis # 安装redis
    -

    redis配置信息

    -
    # file   >>  /etc/redis.conf
    ### 添加密码
    requirepass yourpassword
    ### redis远程连接
    #bind 127.0.0.1 添加注释
    protected-mode no
    ]]>
    +
    grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
    grant all privileges on *.* to 'root'@'hadoop1' identified by 'root' with grant option;
    flush privileges;
    +
  • 初始化元数据
    schematool -initSchema -dbType mysql
    +
  • + +

    步骤七、hbase安装与配置

      +
    1. 修改conf/hbase-env.sh
      export JAVA_HOME=/opt/java/jdk1.8.0_201
      export HBASE_MANAGES_ZK=false
    2. +
    3. 修改hbase-site.xml
      <configuration>
      <property>
      <name>hbase.rootdir</name>
      <value>hdfs://hadoop1:9000/hbase</value>
      </property>
      <property>
      <name>dfs.replication</name>
      <value>1</value>
      </property>
      <property>
      <name>hbase.cluster.distributed</name>
      <value>true</value>
      </property>
      <property>
      <name>hbase.zookeeper.quorum</name>
      <value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>
      </property>
      </configuration>
    4. +
    5. 修改conf/regionservers文件,其中配置所有hbase主机,每个主机独占一行,hbase启动或关闭时会按照此配置顺序执行。
    6. +
    7. 启动
      主节点:
      start-hbae.sh
      + 在一从节点启动备用hhadoop1实现高可用:
      hbase-daemon.sh start hadoop1
      + 关闭集群:stop-hbase.sh
    8. +
    +]]> - CentOS7 + bigdata linux - CentOS7 + bigdata + environment construct
    @@ -2056,6 +2006,30 @@ hadoop3节点进程状态:
    command + + Git命令 + /2018/08/25/using/Git/ + 查看、添加、提交、删除、找回,重置修改文件

    git help \ # 显示command的help
    git show # 显示某次提交的内容 git show $id
    git co — \ # 抛弃工作区修改
    git co . # 抛弃工作区修改
    git add \ # 将工作文件修改提交到本地暂存区
    git add . # 将所有修改过的工作文件提交暂存区
    git rm \ # 从版本库中删除文件
    git rm \ —cached # 从版本库中删除文件,但不删除文件
    git reset \ # 从暂存区恢复到工作文件
    git reset — . # 从暂存区恢复到工作文件
    git reset —hard # 恢复最近一次提交过的状态,即放弃上次提交后的所有本次修改
    git ci \ git ci . git ci -a # 将git add, git rm和git ci等操作都合并在一起做
    git ci -am “some comments”
    git ci —amend # 修改最后一次提交记录
    git revert \<$id> # 恢复某次提交的状态,恢复动作本身也创建次提交对象
    git revert HEAD # 恢复最后一次提交的状态

    +

    查看文件diff

    git diff \ # 比较当前文件和暂存区文件差异 git diff
    git diff \\\ # 比较两次提交之间的差异
    git diff \..\ # 在两个分支之间比较
    git diff —staged # 比较暂存区和版本库差异
    git diff —cached # 比较暂存区和版本库差异
    git diff —stat # 仅仅比较统计信息

    +

    查看提交记录

    git log git log \ # 查看该文件每次提交记录
    git log -p \ # 查看每次详细修改内容的diff
    git log -p -2 # 查看最近两次详细修改内容的diff
    git log —stat #查看提交统计信息
    tig Mac上可以使用tig代替diff和log,brew install tig

    +

    Git 本地分支管理 查看、切换、创建和删除分支

    git br -r # 查看远程分支
    git br \ # 创建新的分支
    git br -v # 查看各个分支最后提交信息
    git br —merged # 查看已经被合并到当前分支的分支
    git br —no-merged # 查看尚未被合并到当前分支的分支
    git co \ # 切换到某个分支
    git co -b \ # 创建新的分支,并且切换过去
    git co -b \ \ # 基于branch创建新的new_branch
    git co $id # 把某次历史提交记录checkout出来,但无分支信息,切换到其他分支会自动删除
    git co $id -b \ # 把某次历史提交记录checkout出来,创建成一个分支
    git br -d \ # 删除某个分支
    git br -D \ # 强制删除某个分支 (未被合并的分支被删除的时候需要强制)

    +

    分支合并和rebase

    git merge \ # 将branch分支合并到当前分支
    git merge origin/master —no-ff # 不要Fast-Foward合并,这样可以生成merge提交
    git rebase master \ # 将master rebase到branch,相当于: git co \ && git rebase master && git co master && git merge \

    +

    Git补丁管理(方便在多台机器上开发同步时用)

    git diff > ../sync.patch # 生成补丁
    git apply ../sync.patch # 打补丁
    git apply —check ../sync.patch #测试补丁能否成功

    +

    Git暂存管理

    git stash # 暂存
    git stash list # 列所有stash
    git stash apply # 恢复暂存的内容
    git stash drop # 删除暂存区

    +

    Git远程分支管理

    git pull # 抓取远程仓库所有分支更新并合并到本地
    git pull —no-ff # 抓取远程仓库所有分支更新并合并到本地,不要快进合并
    git fetch origin # 抓取远程仓库更新
    git merge origin/master # 将远程主分支合并到本地当前分支
    git co —track origin/branch # 跟踪某个远程分支创建相应的本地分支
    git co -b \ origin/\ # 基于远程分支创建本地分支,功能同上
    git push # push所有分支
    git push origin master # 将本地主分支推到远程主分支
    git push -u origin master # 将本地主分支推到远程(如无远程主分支则创建,用于初始化远程仓库)
    git push origin \ # 创建远程分支, origin是远程仓库名
    git push origin \:\ # 创建远程分支
    git push origin :\ #先删除本地分支(git br -d \),然后再push删除远程分支

    +

    Git远程仓库管理

    GitHub
    git remote -v # 查看远程服务器地址和仓库名称
    git remote show origin # 查看远程服务器仓库状态
    git remote add origin git@github:robbin/robbin_site.git # 添加远程仓库地址
    git remote set-url origin git@github.com:robbin/robbin_site.git # 设置远程仓库地址(用于修改远程仓库地址) git remote rm \ # 删除远程仓库

    +

    创建远程仓库

    git clone —bare robbin_site robbin_site.git # 用带版本的项目创建纯版本仓库
    scp -r my_project.git git@ git.csdn.net:~ # 将纯仓库上传到服务器上
    mkdir robbin_site.git && cd robbin_site.git && git —bare init # 在服务器创建纯仓库
    git remote add origin git@github.com:robbin/robbin_site.git # 设置远程仓库地址
    git push -u origin master # 客户端首次提交
    git push -u origin develop # 首次将本地develop分支提交到远程develop分支,并且track
    git remote set-head origin master # 设置远程仓库的HEAD指向master分支 ,也可以命令设置跟踪远程库和本地库
    git branch —set-upstream master origin/master
    git branch —set-upstream develop origin/develop

    +

    reflog

    git reflog是对reflog进行管理的命令,reflog是git用来记录引用变化的一种机制,比如记录分支的变化或者是HEAD引用的变化.
    当git reflog不指定引用的时候,默认列出HEAD的reflog.
    HEAD@{0}代表HEAD当前的值,HEAD@{3}代表HEAD在3次变化之前的值.
    git会将变化记录到HEAD对应的reflog文件中,其路径为.git/logs/HEAD, 分支的reflog文件都放在.git/logs/refs目录下的子目录中.

    +

    特殊符号

    ^代表父提交,当一个提交有多个父提交时,可以通过在^后面跟上一个数字,表示第几个父提交: ^相当于^1.
    ~\相当于连续的\个^.

    +]]>
    + + git + + + git + tools + +
    Docker使用记录 /2018/09/28/using/middleware/docker-using/ @@ -2072,6 +2046,32 @@ hadoop3节点进程状态:
    docker + + Centos使用记录 + /2018/09/26/using/linux/centos-using/ +   个人喜欢使用CentOS7 系统,本帖记录使用CentOS所使用的过程,安装过程 略 (我习惯采用最小化安装)

    +

    安装图形化界面

    yum groupinstall "GNOME Desktop" "Graphical Administration Tools" #安装GNOME图形化界面(时间较长,耐心等待)
    ln -sf /lib/systemd/system/runlevel5.target  /etc/systemd/system/default.target #设置图形化界面为默认启动选项
    reboot # 重启CentOS
    +

    启动网络连接(手动配置网卡信息)

      安装过程没选择网络或者网卡没有自动连接,或者修改网卡配置(比如修改为固定ip等等)

    +
    ip addr  #查看你的网卡信息
    cat /etc/sysconfig/network-scripts/ifcfg-ens33 #打印查看网卡信息
    vi /etc/sysconfig/network-scripts/ifcfg-ens33 #修改网卡信息如下
    +
    TYPE=Ethernet
    PROXY_METHOD=none
    BROWSER_ONLY=no
    BOOTPROTO=dhcp
    DEFROUTE=yes
    IPV4_FAILURE_FATAL=no
    IPV6INIT=yes
    IPV6_AUTOCONF=yes
    IPV6_DEFROUTE=yes
    IPV6_FAILURE_FATAL=no
    IPV6_ADDR_GEN_MODE=stable-privacy
    NAME=ens33
    UUID=a6bf4243-3908-4096-a87d-aabc853fffba
    DEVICE=ens33
    ONBOOT=yes #修改的地方,改no为yes ,自动启动
    +

    安装网络工具包

    yum install -y net-tools   #包含ifconfig等命令
    +

    修改yum安装源为阿里源

     mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo_bak #备份原有源信息

    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo #下载阿里源到本地

    yum makecache #建立缓存

    yum -y update #对现有安装程序升级
    +

    安装中文输入法

    yum install -y ibus ibus-libpinyin
    +

    设置 -> 区域和语言 -> 输入源 -> 新加 -> 汉语(中国) -> 汉语(intelligent Pinyin)

    +

    安装jdk

    rpm -qa | grep java  #查找已经安装的jdk
    rpm -e --nodeps java-1.7.0-openjdk # 卸载掉
    rpm -e --nodeps java-1.8.0-openjdk # 卸载掉
    rpm -e --nodeps java-1.8.0-openjdk-headless # 卸载掉
    rpm -e --nodeps java-1.7.0-openjdk-headless # 卸载掉
    rpm -ivh jdk-8u181-linux-x64.rpm # 安装下载好的rpm
    vim /etc/profile # 添加jdk到环境变量如下
    source /etc/profile #是环境变量有效
    +
    #/etc/profile 末尾添加一下内容
    #java environment
    export JAVA_HOME=/usr/java/jdk1.8.0_181-amd64
    export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
    export PATH=$PATH:${JAVA_HOME}/bin
    +

    安装hadoop

    #已经安装并且配置jdk
    cd /opt/hadoop # 切换目录
    wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.9.0/hadoop-2.9.0.tar.gz #下载hadoop
    tar -zxvf hadoop-2.9.0.tar.gz # 解压
    cd hadoop-2.9.0 # 进入hadoop目录
    ./bin/hadoop version # 查看hadoop是否能使用
    +

    安装redis以及基础配置

    yum install epel-release -y # 下载fedora的epel仓库
    yum install -y redis # 安装redis
    +

    redis配置信息

    +
    # file   >>  /etc/redis.conf
    ### 添加密码
    requirepass yourpassword
    ### redis远程连接
    #bind 127.0.0.1 添加注释
    protected-mode no
    ]]>
    + + CentOS7 + + + linux + CentOS7 + +
    ElasticSearch学习笔记(一) /2018/12/04/using/middleware/elk-1/ @@ -2280,6 +2280,44 @@ hadoop3节点进程状态:
    db + + nginx的使用(二)-- 详细了解Nginx + /2018/09/01/using/middleware/nginx-2/ + 为什么使用Nginx
      +
    1. 更快
        主要表现在两个方面:1,正常情况下,单次请求会得到更快的响应;2,在高峰期(数以万计的并发请求),Nginx可以比其他web服务器更快地请求响应。
    2. +
    3. 高扩展性
        它完全是由多个不同功能、 不同层次、 不同类型且耦合度低的模块组成。
    4. +
    5. 高可靠性
        Nginx 的高可靠性来自于其核心框架代码的优秀设计、 模块设计的简单性。每个 worker进程相对独立, master 进程在 1 个 worker 进程出错时可以快速“拉起”新的 worker 子进程提供服务。
    6. +
    7. 低内存消耗
        一般情况下, 10 000 个非活跃的 HTTP Keep-Alive 连接在 Nginx 中仅消耗 2.5MB 的内存, 这是 Nginx 支持高并发连接的基础。
    8. +
    9. 单机支持 10 万以上的并发连接
    10. +
    11. 热部署
        可以在 7×24 小时不间断服务的前提下, 升级 Nginx 的可执行文件。 当然, 它也支持不停止服务就更新配置项、 更换日志文件等功能。
    12. +
    13. 最自由的BSD许可协议
        允许用户在自己的项目中直接使用或修改 Nginx 源码。
    14. +
    +

    使用Nginx的必备软件

      +
    1. GCC编译器
        用来编译nginx的各个模块
    2. +
    3. PCRE库
        PCRE(Perl Compatible Regular Expressions, Perl 兼容正则表达式) 是由 Philip Hazel开发的函数库, 目前为很多软件所使用, 该库支持正则表达式。当然,如果不打算在nginx中使用正则表达式,那么这个就不是必需的。
    4. +
    5. zlib库
        zlib 库用于对 HTTP 包的内容做 gzip 格式的压缩, 如果我们在 nginx.conf 里配置了 gzip on, 并指定对于某些类型(content-type) 的 HTTP 响应使用 gzip 来进行压缩以减少网络传, 那么, 在编译时就必须把 zlib 编译进 Nginx。
    6. +
    7. OpenSSL 开发库
        在SSL 协议上传输 HTTP,以及使用MD5、 SHA1 等散列函数都需要OpenSSL 开发库的支持。

      运行中的Nginx进程间的关系

      + +

        部署 Nginx 时都是使用一个 master 进程来管理多个worker 进程, 一般情况下, worker 进程的数量与服务器上的 CPU 核心数相等。
    8. +
    +

    Nginx文件路径的常用定义

      +
    1. 以 root 方式设置资源路径
      语法: root path;
      默认: root html;
      配置块: http、 server、 location、 if
        例如, 定义资源文件相对于 HTTP 请求的根目录。
      location /download/ {
      root /opt/web/html/;
      }
      +   在上面的配置中, 如果有一个请求的 URI 是 /download/index/test.html, 那么 Web 服务器将会返回服务器上 /opt/web/html/download/index/test.html 文件的内容。
    2. +
    3. 以 alias 方式设置资源路径
      语法: alias path;
      配置块: location
        alias 也是用来设置文件资源路径的, 它与 root 的不同点主要在于如何解读紧跟 location后面的 uri 参数, 这将会致使 alias 与 root 以不同的方式将用户请求映射到真正的磁盘文件上。 例如, 如果有一个请求的 URI 是 /conf/nginx.conf, 而用户实际想访问的文件在 /usr/local/nginx/conf/nginx.conf, 那么想要使用 alias 来进行设置的话, 可以采用如下方式:
      location /conf {
      alias /usr/local/nginx/conf/;
      }
      + 如果用 root 设置, 那么语句如下所示:
      location /conf {
      root /usr/local/nginx/;
      }
      + alias 后面还可以添加正则表达式, 例如:
      location ~ ^/test/(\w+)\.(\w+)$ {
      alias /usr/local/nginx/$2/$1.$2;
      }
      +   这样, 请求在访问 /test/nginx.conf 时, Nginx 会返回 /usr/local/nginx/conf/nginx.conf 文件中的内容。
    4. +
    5. 访问首页
      语法: index file …;
      默认: index index.html;
      配置块: http、 server、 location
        有时, 访问站点时的 URI 是 /, 这时一般是返回网站的首页, 而这与 root 和 alias 都不同。 这里用 ngx_http_index_module 模块提供的 index 配置实现。 index 后可以跟多个文件参数, Nginx 将会按照顺序来访问这些文件, 例如:
      location / {
      root path;
      index /index.html /html/index.php /index.php;
      }
    6. +
    +]]>
    + + linux + + + linux + nginx + +
    nginx的使用(三)-- 使用gzip加速页面加载 /2019/10/18/using/middleware/nginx-3/ @@ -2312,44 +2350,6 @@ hadoop3节点进程状态:
    -]]> - - linux - - - linux - nginx - - - - nginx的使用(二)-- 详细了解Nginx - /2018/09/01/using/middleware/nginx-2/ - 为什么使用Nginx
      -
    1. 更快
        主要表现在两个方面:1,正常情况下,单次请求会得到更快的响应;2,在高峰期(数以万计的并发请求),Nginx可以比其他web服务器更快地请求响应。
    2. -
    3. 高扩展性
        它完全是由多个不同功能、 不同层次、 不同类型且耦合度低的模块组成。
    4. -
    5. 高可靠性
        Nginx 的高可靠性来自于其核心框架代码的优秀设计、 模块设计的简单性。每个 worker进程相对独立, master 进程在 1 个 worker 进程出错时可以快速“拉起”新的 worker 子进程提供服务。
    6. -
    7. 低内存消耗
        一般情况下, 10 000 个非活跃的 HTTP Keep-Alive 连接在 Nginx 中仅消耗 2.5MB 的内存, 这是 Nginx 支持高并发连接的基础。
    8. -
    9. 单机支持 10 万以上的并发连接
    10. -
    11. 热部署
        可以在 7×24 小时不间断服务的前提下, 升级 Nginx 的可执行文件。 当然, 它也支持不停止服务就更新配置项、 更换日志文件等功能。
    12. -
    13. 最自由的BSD许可协议
        允许用户在自己的项目中直接使用或修改 Nginx 源码。
    14. -
    -

    使用Nginx的必备软件

      -
    1. GCC编译器
        用来编译nginx的各个模块
    2. -
    3. PCRE库
        PCRE(Perl Compatible Regular Expressions, Perl 兼容正则表达式) 是由 Philip Hazel开发的函数库, 目前为很多软件所使用, 该库支持正则表达式。当然,如果不打算在nginx中使用正则表达式,那么这个就不是必需的。
    4. -
    5. zlib库
        zlib 库用于对 HTTP 包的内容做 gzip 格式的压缩, 如果我们在 nginx.conf 里配置了 gzip on, 并指定对于某些类型(content-type) 的 HTTP 响应使用 gzip 来进行压缩以减少网络传, 那么, 在编译时就必须把 zlib 编译进 Nginx。
    6. -
    7. OpenSSL 开发库
        在SSL 协议上传输 HTTP,以及使用MD5、 SHA1 等散列函数都需要OpenSSL 开发库的支持。

      运行中的Nginx进程间的关系

      - -

        部署 Nginx 时都是使用一个 master 进程来管理多个worker 进程, 一般情况下, worker 进程的数量与服务器上的 CPU 核心数相等。
    8. -
    -

    Nginx文件路径的常用定义

      -
    1. 以 root 方式设置资源路径
      语法: root path;
      默认: root html;
      配置块: http、 server、 location、 if
        例如, 定义资源文件相对于 HTTP 请求的根目录。
      location /download/ {
      root /opt/web/html/;
      }
      -   在上面的配置中, 如果有一个请求的 URI 是 /download/index/test.html, 那么 Web 服务器将会返回服务器上 /opt/web/html/download/index/test.html 文件的内容。
    2. -
    3. 以 alias 方式设置资源路径
      语法: alias path;
      配置块: location
        alias 也是用来设置文件资源路径的, 它与 root 的不同点主要在于如何解读紧跟 location后面的 uri 参数, 这将会致使 alias 与 root 以不同的方式将用户请求映射到真正的磁盘文件上。 例如, 如果有一个请求的 URI 是 /conf/nginx.conf, 而用户实际想访问的文件在 /usr/local/nginx/conf/nginx.conf, 那么想要使用 alias 来进行设置的话, 可以采用如下方式:
      location /conf {
      alias /usr/local/nginx/conf/;
      }
      - 如果用 root 设置, 那么语句如下所示:
      location /conf {
      root /usr/local/nginx/;
      }
      - alias 后面还可以添加正则表达式, 例如:
      location ~ ^/test/(\w+)\.(\w+)$ {
      alias /usr/local/nginx/$2/$1.$2;
      }
      -   这样, 请求在访问 /test/nginx.conf 时, Nginx 会返回 /usr/local/nginx/conf/nginx.conf 文件中的内容。
    4. -
    5. 访问首页
      语法: index file …;
      默认: index index.html;
      配置块: http、 server、 location
        有时, 访问站点时的 URI 是 /, 这时一般是返回网站的首页, 而这与 root 和 alias 都不同。 这里用 ngx_http_index_module 模块提供的 index 配置实现。 index 后可以跟多个文件参数, Nginx 将会按照顺序来访问这些文件, 例如:
      location / {
      root path;
      index /index.html /html/index.php /index.php;
      }
    6. -
    ]]>
    linux @@ -2458,6 +2458,34 @@ hadoop3节点进程状态:
    adt + + 机器学习(一)---初识 + /2018/10/15/theory/algorithm/machinelearning/machinelearning-1/ + 什么是机器学习?
      +
    1. 在没有明确设置的情况下,使得计算机具有学习能力的研究领域。
      ----Arthur Samuel      
    2. +
    3. 一个程序被认为能从经验E中学习,解决任务T,达到性能度量值P,当且仅当,有了经验E,经过P评判,程序在处理T时的性能有所提升。
      ----Tom Mitchell      
      + +
    4. +
    +

    什么是监督学习?

      给算法一个数据集,该数据集内包含有正确的答案,让算法给出更多的准确答案。

    +

    属性(特征)

      一般来说,一个学习问题通常会考虑一系列 n 个 样本 数据,然后尝试预测未知数据的属性。 如果每个样本是 多个属性的数据 (比如说是一个多维记录),就说它有许多“属性”,或称 features(特征) 。

    +

    回归问题

      回归指的是,我们在试着推测出一系列的连续值属性。
      回归问题的一个例子是预测鲑鱼的长度是其年龄和体重的函数。

    +

    分类问题

      分类指的是,样本属于两个或更多个类,我们想从已经标记的数据中学习如何预测未标记数据的类别。
      分类问题的一个例子是手写数字识别,其目的是将每个输入向量分配给有限数目的离散类别之一。 我们通常把分类视作监督学习的一个离散形式(区别于连续形式),从有限的类别中,给每个样本贴上正确的标签。

    +

    什么是无监督学习?

      给算法一个数据集,让算法自动的将该数据集分成n类。(与监督学习不同,数据集没有任何的标签:或者有相同的标签;或者没有标签)。
       其中训练数据由没有任何相应目标值的一组输入向量x组成。这种问题的目标可能是在数据中发现彼此类似的示例所聚成的组,这种问题称为 聚类 , 或者,确定输入空间内的数据分布,称为 密度估计 ,又或从高维数据投影数据空间缩小到二维或三维以进行 可视化。

    +

    无监督学习的应用领域

      社交网络分析、细分市场、天文数据分析、组织大型计算机集群等

    +

    什么是加速比

      一个程序的串行版本的运行时间和他的并行版本的运行时间的比值。

    + +]]>
    + + Machine Learning + + + python + Machine Learning + AI + Algorithm + +
    机器学习(二)---- 单变量线性回归 /2018/10/15/theory/algorithm/machinelearning/machinelearning-2/ @@ -2523,36 +2551,8 @@ hadoop3节点进程状态:
    python Machine Learning - Algorithm AI - - - - 机器学习(一)---初识 - /2018/10/15/theory/algorithm/machinelearning/machinelearning-1/ - 什么是机器学习?
      -
    1. 在没有明确设置的情况下,使得计算机具有学习能力的研究领域。
      ----Arthur Samuel      
    2. -
    3. 一个程序被认为能从经验E中学习,解决任务T,达到性能度量值P,当且仅当,有了经验E,经过P评判,程序在处理T时的性能有所提升。
      ----Tom Mitchell      
      - -
    4. -
    -

    什么是监督学习?

      给算法一个数据集,该数据集内包含有正确的答案,让算法给出更多的准确答案。

    -

    属性(特征)

      一般来说,一个学习问题通常会考虑一系列 n 个 样本 数据,然后尝试预测未知数据的属性。 如果每个样本是 多个属性的数据 (比如说是一个多维记录),就说它有许多“属性”,或称 features(特征) 。

    -

    回归问题

      回归指的是,我们在试着推测出一系列的连续值属性。
      回归问题的一个例子是预测鲑鱼的长度是其年龄和体重的函数。

    -

    分类问题

      分类指的是,样本属于两个或更多个类,我们想从已经标记的数据中学习如何预测未标记数据的类别。
      分类问题的一个例子是手写数字识别,其目的是将每个输入向量分配给有限数目的离散类别之一。 我们通常把分类视作监督学习的一个离散形式(区别于连续形式),从有限的类别中,给每个样本贴上正确的标签。

    -

    什么是无监督学习?

      给算法一个数据集,让算法自动的将该数据集分成n类。(与监督学习不同,数据集没有任何的标签:或者有相同的标签;或者没有标签)。
       其中训练数据由没有任何相应目标值的一组输入向量x组成。这种问题的目标可能是在数据中发现彼此类似的示例所聚成的组,这种问题称为 聚类 , 或者,确定输入空间内的数据分布,称为 密度估计 ,又或从高维数据投影数据空间缩小到二维或三维以进行 可视化。

    -

    无监督学习的应用领域

      社交网络分析、细分市场、天文数据分析、组织大型计算机集群等

    -

    什么是加速比

      一个程序的串行版本的运行时间和他的并行版本的运行时间的比值。

    - -]]>
    - - Machine Learning - - - python - Machine Learning Algorithm - AI
    @@ -2607,23 +2607,6 @@ hadoop3节点进程状态:
    shiro - - springboot-mail - /2018/09/20/using/java/framework/springboot-mail/ -   配置springboot发送简易右键

    -

    maven依赖

    <dependencies>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
    </dependency>
    </dependencies>
    -

    编写service以及实现

    //Service
    public interface MailService {
    void sendSimpleMail(String to, String subject, String content);
    }
    //ServiceImpl
    @Component
    @Log
    public class MailServiceImpl implements MailService {
    @Resource
    private JavaMailSender javaMailSender;

    @Value("${mail.fromMail.addr}")
    private String from;

    @Override
    public void sendSimpleMail(String to, String subject, String content) {
    SimpleMailMessage message = new SimpleMailMessage();
    message.setFrom(from);
    message.setTo(to);
    message.setSubject(subject);
    message.setText(content);

    try {
    javaMailSender.send(message);
    log.info("简单邮件已经发送。");
    } catch (Exception e) {
    log.info("发送简单邮件时发生异常!"+e);
    }
    }
    }
    -

    配置必要属性设置

    spring:
    mail:
    host: smtp.qq.com
    username: xzx@qq.com
    default-encoding: UTF-8
    password: password
    mail:
    fromMail:
    addr: xzx@qq.com
    -

    测试


    @RunWith(SpringJUnit4ClassRunner.class)
    @SpringBootTest(classes = WebsiteApplication.class)
    @WebAppConfiguration
    public class MailServiceTest {

    @Resource
    private MailService mailServiceImpl;

    @Test
    public void testSimpleMail() throws Exception {
    mailServiceImpl.sendSimpleMail("mir2285@outlook.com", "test simple mail", " hello this is simple mail");
    }
    }
    ]]>
    - - springboot - - - java - springboot - email - -
    myabtis进阶 /2018/11/17/using/java/framework/springboot-myabtis/ @@ -2654,27 +2637,26 @@ hadoop3节点进程状态:
    java - springboot orm myabtis + springboot - springboot使用过程中踩过的坑 - /2018/11/05/using/java/framework/springboot-question/ - -
  • SpringBoot项目启动过程中出现类似Could not resolve placeholder ‘td.pathprefix’ in value “${td.pathprefix}”的错误。
      问题的产生是由于有多个properties文件造成的,如果再第一个properties文件中没有找,就不认为没有了,不继续找下一个properties文件
    @Bean
    public static PropertySourcesPlaceholderConfigurer placeholderConfigurer() {
    PropertySourcesPlaceholderConfigurer c = new PropertySourcesPlaceholderConfigurer();
    c.setIgnoreUnresolvablePlaceholders(true);
    return c;
    }
  • -
  • 项目中用到什么依赖加载什么依赖,不要一股脑都添加上去,springboot会做各种初始设置,可能引起报错
  • -
  • - -]]>
    + springboot-mail + /2018/09/20/using/java/framework/springboot-mail/ +   配置springboot发送简易右键

    +

    maven依赖

    <dependencies>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
    </dependency>
    </dependencies>
    +

    编写service以及实现

    //Service
    public interface MailService {
    void sendSimpleMail(String to, String subject, String content);
    }
    //ServiceImpl
    @Component
    @Log
    public class MailServiceImpl implements MailService {
    @Resource
    private JavaMailSender javaMailSender;

    @Value("${mail.fromMail.addr}")
    private String from;

    @Override
    public void sendSimpleMail(String to, String subject, String content) {
    SimpleMailMessage message = new SimpleMailMessage();
    message.setFrom(from);
    message.setTo(to);
    message.setSubject(subject);
    message.setText(content);

    try {
    javaMailSender.send(message);
    log.info("简单邮件已经发送。");
    } catch (Exception e) {
    log.info("发送简单邮件时发生异常!"+e);
    }
    }
    }
    +

    配置必要属性设置

    spring:
    mail:
    host: smtp.qq.com
    username: xzx@qq.com
    default-encoding: UTF-8
    password: password
    mail:
    fromMail:
    addr: xzx@qq.com
    +

    测试


    @RunWith(SpringJUnit4ClassRunner.class)
    @SpringBootTest(classes = WebsiteApplication.class)
    @WebAppConfiguration
    public class MailServiceTest {

    @Resource
    private MailService mailServiceImpl;

    @Test
    public void testSimpleMail() throws Exception {
    mailServiceImpl.sendSimpleMail("mir2285@outlook.com", "test simple mail", " hello this is simple mail");
    }
    }
    ]]>
    - java + springboot java springboot - bug + email
    @@ -2731,6 +2713,24 @@ hadoop3节点进程状态:
    Microservice + + springboot使用过程中踩过的坑 + /2018/11/05/using/java/framework/springboot-question/ + +
  • SpringBoot项目启动过程中出现类似Could not resolve placeholder ‘td.pathprefix’ in value “${td.pathprefix}”的错误。
      问题的产生是由于有多个properties文件造成的,如果再第一个properties文件中没有找,就不认为没有了,不继续找下一个properties文件
    @Bean
    public static PropertySourcesPlaceholderConfigurer placeholderConfigurer() {
    PropertySourcesPlaceholderConfigurer c = new PropertySourcesPlaceholderConfigurer();
    c.setIgnoreUnresolvablePlaceholders(true);
    return c;
    }
  • +
  • 项目中用到什么依赖加载什么依赖,不要一股脑都添加上去,springboot会做各种初始设置,可能引起报错
  • +
  • + +]]>
    + + java + + + java + springboot + bug + +
    Spring Cloud(二) Eureka /2018/10/11/using/java/framework/springcloud-2/ diff --git a/sitemap.txt b/sitemap.txt index 3fd98bdd6..1d2e9604d 100644 --- a/sitemap.txt +++ b/sitemap.txt @@ -27,73 +27,73 @@ http://132.232.42.89/2018/10/15/using/java/framework/springcloud-5/ http://132.232.42.89/2018/10/17/using/java/framework/springcloud-6/ http://132.232.42.89/2018/08/28/using/java/tools/lombok/ http://132.232.42.89/2018/11/24/using/java/framework/shiro/ -http://132.232.42.89/2018/09/20/using/java/framework/springboot-mail/ http://132.232.42.89/2018/11/17/using/java/framework/springboot-myabtis/ -http://132.232.42.89/2018/11/05/using/java/framework/springboot-question/ +http://132.232.42.89/2018/09/20/using/java/framework/springboot-mail/ http://132.232.42.89/2018/10/11/using/java/framework/springcloud-1/ +http://132.232.42.89/2018/11/05/using/java/framework/springboot-question/ http://132.232.42.89/2018/10/11/using/java/framework/springcloud-2/ http://132.232.42.89/2018/08/25/theory/regex/ -http://132.232.42.89/2018/08/25/using/Git/ http://132.232.42.89/2018/11/23/using/bigdata/bigdata-server-environment-construct/ +http://132.232.42.89/2018/08/25/using/Git/ http://132.232.42.89/2018/09/29/using/db/nosql/mariadb-using/ +http://132.232.42.89/2018/09/28/theory/linux/linux-cgroup-interface/ +http://132.232.42.89/2018/09/28/theory/linux/linux-namespace-interface/ http://132.232.42.89/2018/08/28/theory/ccna/ccna-4/ http://132.232.42.89/2018/08/28/theory/ccna/ccna-5/ http://132.232.42.89/2018/08/28/theory/ccna/ccna-6/ http://132.232.42.89/2018/08/28/theory/ccna/ccna-7/ -http://132.232.42.89/2018/09/28/theory/linux/linux-cgroup-interface/ -http://132.232.42.89/2018/09/28/theory/linux/linux-namespace-interface/ +http://132.232.42.89/2018/09/27/theory/algorithm/points_bookies/ +http://132.232.42.89/2018/09/27/theory/algorithm/three-door/ http://132.232.42.89/2018/08/27/theory/ccna/ccna-1/ http://132.232.42.89/2018/08/27/theory/ccna/ccna-2/ http://132.232.42.89/2018/08/28/theory/ccna/ccna-3/ -http://132.232.42.89/2018/09/27/theory/algorithm/points_bookies/ -http://132.232.42.89/2018/09/27/theory/algorithm/three-door/ http://132.232.42.89/2018/10/15/theory/algorithm/machinelearning/machinelearning-2/ http://132.232.42.89/2018/10/19/theory/algorithm/machinelearning/sklearn/sklearn-1/ http://132.232.42.89/2018/09/17/theory/algorithm/algorithm-tree/ http://132.232.42.89/2018/12/28/theory/algorithm/dsa/vector/ http://132.232.42.89/2018/10/15/theory/algorithm/machinelearning/machinelearning-1/ -http://132.232.42.89/2020/01/08/push2maven/ http://132.232.42.89/2020/01/15/pythonwithc-1/ +http://132.232.42.89/2020/01/08/push2maven/ +http://132.232.42.89/2019/02/21/machine%20learning/clawler/crawler-2/ http://132.232.42.89/2019/02/25/machine%20learning/clawler/clawler-6/ http://132.232.42.89/2019/02/21/machine%20learning/clawler/crawler-1/ -http://132.232.42.89/2019/02/21/machine%20learning/clawler/crawler-2/ http://132.232.42.89/2020/03/29/git-using/ http://132.232.42.89/2019/02/22/machine%20learning/clawler/clawler-4/ http://132.232.42.89/2019/02/22/machine%20learning/clawler/clawler-5/ http://132.232.42.89/ http://132.232.42.89/tags/algorithm/ -http://132.232.42.89/tags/git/ -http://132.232.42.89/tags/CI-CD/ http://132.232.42.89/tags/java/ http://132.232.42.89/tags/middleware/ +http://132.232.42.89/tags/git/ +http://132.232.42.89/tags/CI-CD/ http://132.232.42.89/tags/jenkins/ -http://132.232.42.89/tags/maven/ -http://132.232.42.89/tags/jar/ http://132.232.42.89/tags/python/ http://132.232.42.89/tags/c-c/ http://132.232.42.89/tags/boost/ +http://132.232.42.89/tags/maven/ +http://132.232.42.89/tags/jar/ http://132.232.42.89/tags/%E5%90%83%E5%96%9D%E7%8E%A9%E4%B9%90/ http://132.232.42.89/tags/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/ -http://132.232.42.89/tags/code/ -http://132.232.42.89/tags/regex/ -http://132.232.42.89/tags/tools/ -http://132.232.42.89/tags/regular/ http://132.232.42.89/tags/web-crawler/ http://132.232.42.89/tags/data-mining/ -http://132.232.42.89/tags/ccna/ -http://132.232.42.89/tags/net/ +http://132.232.42.89/tags/regular/ +http://132.232.42.89/tags/regex/ +http://132.232.42.89/tags/tools/ +http://132.232.42.89/tags/data-structure/ +http://132.232.42.89/tags/tree/ +http://132.232.42.89/tags/probability-theory/ http://132.232.42.89/tags/linux/ http://132.232.42.89/tags/cgroup/ http://132.232.42.89/tags/kernel/ +http://132.232.42.89/tags/code/ http://132.232.42.89/tags/namespace/ -http://132.232.42.89/tags/data-structure/ -http://132.232.42.89/tags/tree/ -http://132.232.42.89/tags/probability-theory/ +http://132.232.42.89/tags/ccna/ +http://132.232.42.89/tags/net/ http://132.232.42.89/tags/bigdata/ http://132.232.42.89/tags/environment-construct/ -http://132.232.42.89/tags/CentOS7/ http://132.232.42.89/tags/command/ http://132.232.42.89/tags/docker/ +http://132.232.42.89/tags/CentOS7/ http://132.232.42.89/tags/elk/ http://132.232.42.89/tags/midedleware/ http://132.232.42.89/tags/log/ @@ -103,19 +103,19 @@ http://132.232.42.89/tags/db/ http://132.232.42.89/tags/dsa/ http://132.232.42.89/tags/adt/ http://132.232.42.89/tags/Machine-Learning/ -http://132.232.42.89/tags/Algorithm/ http://132.232.42.89/tags/AI/ +http://132.232.42.89/tags/Algorithm/ http://132.232.42.89/tags/datebase/ http://132.232.42.89/tags/mysql/ http://132.232.42.89/tags/mariadb/ http://132.232.42.89/tags/shiro/ -http://132.232.42.89/tags/springboot/ -http://132.232.42.89/tags/email/ http://132.232.42.89/tags/orm/ http://132.232.42.89/tags/myabtis/ -http://132.232.42.89/tags/bug/ +http://132.232.42.89/tags/springboot/ +http://132.232.42.89/tags/email/ http://132.232.42.89/tags/Spring-Cloud/ http://132.232.42.89/tags/Microservice/ +http://132.232.42.89/tags/bug/ http://132.232.42.89/tags/reconsitution/ http://132.232.42.89/tags/Thread/ http://132.232.42.89/tags/PyQt/ @@ -123,21 +123,21 @@ http://132.232.42.89/tags/GUI/ http://132.232.42.89/tags/PyQT/ http://132.232.42.89/tags/sklearn/ http://132.232.42.89/categories/algorithm/ -http://132.232.42.89/categories/git/ http://132.232.42.89/categories/middleware/ +http://132.232.42.89/categories/git/ http://132.232.42.89/categories/jenkins/ -http://132.232.42.89/categories/maven/ http://132.232.42.89/categories/c-c/ +http://132.232.42.89/categories/maven/ http://132.232.42.89/categories/java/ http://132.232.42.89/categories/%E5%90%83%E5%96%9D%E7%8E%A9%E4%B9%90/ -http://132.232.42.89/categories/regular/ http://132.232.42.89/categories/crawler/ -http://132.232.42.89/categories/net/ -http://132.232.42.89/categories/linux/ +http://132.232.42.89/categories/regular/ http://132.232.42.89/categories/probability-theory/ +http://132.232.42.89/categories/linux/ +http://132.232.42.89/categories/net/ http://132.232.42.89/categories/bigdata/ -http://132.232.42.89/categories/CentOS7/ http://132.232.42.89/categories/docker/ +http://132.232.42.89/categories/CentOS7/ http://132.232.42.89/categories/elk/ http://132.232.42.89/categories/dsa/ http://132.232.42.89/categories/Machine-Learning/ diff --git a/sitemap.xml b/sitemap.xml index d0c07ea72..5212b02ce 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -263,7 +263,7 @@ - http://132.232.42.89/2018/09/20/using/java/framework/springboot-mail/ + http://132.232.42.89/2018/11/17/using/java/framework/springboot-myabtis/ 2023-02-26 @@ -272,7 +272,7 @@ - http://132.232.42.89/2018/11/17/using/java/framework/springboot-myabtis/ + http://132.232.42.89/2018/09/20/using/java/framework/springboot-mail/ 2023-02-26 @@ -281,7 +281,7 @@ - http://132.232.42.89/2018/11/05/using/java/framework/springboot-question/ + http://132.232.42.89/2018/10/11/using/java/framework/springcloud-1/ 2023-02-26 @@ -290,7 +290,7 @@ - http://132.232.42.89/2018/10/11/using/java/framework/springcloud-1/ + http://132.232.42.89/2018/11/05/using/java/framework/springboot-question/ 2023-02-26 @@ -317,7 +317,7 @@ - http://132.232.42.89/2018/08/25/using/Git/ + http://132.232.42.89/2018/11/23/using/bigdata/bigdata-server-environment-construct/ 2023-02-26 @@ -326,7 +326,7 @@ - http://132.232.42.89/2018/11/23/using/bigdata/bigdata-server-environment-construct/ + http://132.232.42.89/2018/08/25/using/Git/ 2023-02-26 @@ -344,7 +344,7 @@ - http://132.232.42.89/2018/08/28/theory/ccna/ccna-4/ + http://132.232.42.89/2018/09/28/theory/linux/linux-cgroup-interface/ 2023-02-26 @@ -353,7 +353,7 @@ - http://132.232.42.89/2018/08/28/theory/ccna/ccna-5/ + http://132.232.42.89/2018/09/28/theory/linux/linux-namespace-interface/ 2023-02-26 @@ -362,7 +362,7 @@ - http://132.232.42.89/2018/08/28/theory/ccna/ccna-6/ + http://132.232.42.89/2018/08/28/theory/ccna/ccna-4/ 2023-02-26 @@ -371,7 +371,7 @@ - http://132.232.42.89/2018/08/28/theory/ccna/ccna-7/ + http://132.232.42.89/2018/08/28/theory/ccna/ccna-5/ 2023-02-26 @@ -380,7 +380,7 @@ - http://132.232.42.89/2018/09/28/theory/linux/linux-cgroup-interface/ + http://132.232.42.89/2018/08/28/theory/ccna/ccna-6/ 2023-02-26 @@ -389,7 +389,7 @@ - http://132.232.42.89/2018/09/28/theory/linux/linux-namespace-interface/ + http://132.232.42.89/2018/08/28/theory/ccna/ccna-7/ 2023-02-26 @@ -398,7 +398,7 @@ - http://132.232.42.89/2018/08/27/theory/ccna/ccna-1/ + http://132.232.42.89/2018/09/27/theory/algorithm/points_bookies/ 2023-02-26 @@ -407,7 +407,7 @@ - http://132.232.42.89/2018/08/27/theory/ccna/ccna-2/ + http://132.232.42.89/2018/09/27/theory/algorithm/three-door/ 2023-02-26 @@ -416,7 +416,7 @@ - http://132.232.42.89/2018/08/28/theory/ccna/ccna-3/ + http://132.232.42.89/2018/08/27/theory/ccna/ccna-1/ 2023-02-26 @@ -425,7 +425,7 @@ - http://132.232.42.89/2018/09/27/theory/algorithm/points_bookies/ + http://132.232.42.89/2018/08/27/theory/ccna/ccna-2/ 2023-02-26 @@ -434,7 +434,7 @@ - http://132.232.42.89/2018/09/27/theory/algorithm/three-door/ + http://132.232.42.89/2018/08/28/theory/ccna/ccna-3/ 2023-02-26 @@ -488,7 +488,7 @@ - http://132.232.42.89/2020/01/08/push2maven/ + http://132.232.42.89/2020/01/15/pythonwithc-1/ 2023-02-26 @@ -497,7 +497,7 @@ - http://132.232.42.89/2020/01/15/pythonwithc-1/ + http://132.232.42.89/2020/01/08/push2maven/ 2023-02-26 @@ -506,7 +506,7 @@ - http://132.232.42.89/2019/02/25/machine%20learning/clawler/clawler-6/ + http://132.232.42.89/2019/02/21/machine%20learning/clawler/crawler-2/ 2023-02-26 @@ -515,7 +515,7 @@ - http://132.232.42.89/2019/02/21/machine%20learning/clawler/crawler-1/ + http://132.232.42.89/2019/02/25/machine%20learning/clawler/clawler-6/ 2023-02-26 @@ -524,7 +524,7 @@ - http://132.232.42.89/2019/02/21/machine%20learning/clawler/crawler-2/ + http://132.232.42.89/2019/02/21/machine%20learning/clawler/crawler-1/ 2023-02-26 @@ -576,28 +576,28 @@ - http://132.232.42.89/tags/git/ + http://132.232.42.89/tags/java/ 2023-06-17 weekly 0.2 - http://132.232.42.89/tags/CI-CD/ + http://132.232.42.89/tags/middleware/ 2023-06-17 weekly 0.2 - http://132.232.42.89/tags/java/ + http://132.232.42.89/tags/git/ 2023-06-17 weekly 0.2 - http://132.232.42.89/tags/middleware/ + http://132.232.42.89/tags/CI-CD/ 2023-06-17 weekly 0.2 @@ -611,35 +611,35 @@ - http://132.232.42.89/tags/maven/ + http://132.232.42.89/tags/python/ 2023-06-17 weekly 0.2 - http://132.232.42.89/tags/jar/ + http://132.232.42.89/tags/c-c/ 2023-06-17 weekly 0.2 - http://132.232.42.89/tags/python/ + http://132.232.42.89/tags/boost/ 2023-06-17 weekly 0.2 - http://132.232.42.89/tags/c-c/ + http://132.232.42.89/tags/maven/ 2023-06-17 weekly 0.2 - http://132.232.42.89/tags/boost/ + http://132.232.42.89/tags/jar/ 2023-06-17 weekly 0.2 @@ -660,56 +660,56 @@ - http://132.232.42.89/tags/code/ + http://132.232.42.89/tags/web-crawler/ 2023-06-17 weekly 0.2 - http://132.232.42.89/tags/regex/ + http://132.232.42.89/tags/data-mining/ 2023-06-17 weekly 0.2 - http://132.232.42.89/tags/tools/ + http://132.232.42.89/tags/regular/ 2023-06-17 weekly 0.2 - http://132.232.42.89/tags/regular/ + http://132.232.42.89/tags/regex/ 2023-06-17 weekly 0.2 - http://132.232.42.89/tags/web-crawler/ + http://132.232.42.89/tags/tools/ 2023-06-17 weekly 0.2 - http://132.232.42.89/tags/data-mining/ + http://132.232.42.89/tags/data-structure/ 2023-06-17 weekly 0.2 - http://132.232.42.89/tags/ccna/ + http://132.232.42.89/tags/tree/ 2023-06-17 weekly 0.2 - http://132.232.42.89/tags/net/ + http://132.232.42.89/tags/probability-theory/ 2023-06-17 weekly 0.2 @@ -737,28 +737,28 @@ - http://132.232.42.89/tags/namespace/ + http://132.232.42.89/tags/code/ 2023-06-17 weekly 0.2 - http://132.232.42.89/tags/data-structure/ + http://132.232.42.89/tags/namespace/ 2023-06-17 weekly 0.2 - http://132.232.42.89/tags/tree/ + http://132.232.42.89/tags/ccna/ 2023-06-17 weekly 0.2 - http://132.232.42.89/tags/probability-theory/ + http://132.232.42.89/tags/net/ 2023-06-17 weekly 0.2 @@ -779,21 +779,21 @@ - http://132.232.42.89/tags/CentOS7/ + http://132.232.42.89/tags/command/ 2023-06-17 weekly 0.2 - http://132.232.42.89/tags/command/ + http://132.232.42.89/tags/docker/ 2023-06-17 weekly 0.2 - http://132.232.42.89/tags/docker/ + http://132.232.42.89/tags/CentOS7/ 2023-06-17 weekly 0.2 @@ -863,14 +863,14 @@ - http://132.232.42.89/tags/Algorithm/ + http://132.232.42.89/tags/AI/ 2023-06-17 weekly 0.2 - http://132.232.42.89/tags/AI/ + http://132.232.42.89/tags/Algorithm/ 2023-06-17 weekly 0.2 @@ -905,49 +905,49 @@ - http://132.232.42.89/tags/springboot/ + http://132.232.42.89/tags/orm/ 2023-06-17 weekly 0.2 - http://132.232.42.89/tags/email/ + http://132.232.42.89/tags/myabtis/ 2023-06-17 weekly 0.2 - http://132.232.42.89/tags/orm/ + http://132.232.42.89/tags/springboot/ 2023-06-17 weekly 0.2 - http://132.232.42.89/tags/myabtis/ + http://132.232.42.89/tags/email/ 2023-06-17 weekly 0.2 - http://132.232.42.89/tags/bug/ + http://132.232.42.89/tags/Spring-Cloud/ 2023-06-17 weekly 0.2 - http://132.232.42.89/tags/Spring-Cloud/ + http://132.232.42.89/tags/Microservice/ 2023-06-17 weekly 0.2 - http://132.232.42.89/tags/Microservice/ + http://132.232.42.89/tags/bug/ 2023-06-17 weekly 0.2 @@ -1005,14 +1005,14 @@ - http://132.232.42.89/categories/git/ + http://132.232.42.89/categories/middleware/ 2023-06-17 weekly 0.2 - http://132.232.42.89/categories/middleware/ + http://132.232.42.89/categories/git/ 2023-06-17 weekly 0.2 @@ -1026,14 +1026,14 @@ - http://132.232.42.89/categories/maven/ + http://132.232.42.89/categories/c-c/ 2023-06-17 weekly 0.2 - http://132.232.42.89/categories/c-c/ + http://132.232.42.89/categories/maven/ 2023-06-17 weekly 0.2 @@ -1054,21 +1054,21 @@ - http://132.232.42.89/categories/regular/ + http://132.232.42.89/categories/crawler/ 2023-06-17 weekly 0.2 - http://132.232.42.89/categories/crawler/ + http://132.232.42.89/categories/regular/ 2023-06-17 weekly 0.2 - http://132.232.42.89/categories/net/ + http://132.232.42.89/categories/probability-theory/ 2023-06-17 weekly 0.2 @@ -1082,7 +1082,7 @@ - http://132.232.42.89/categories/probability-theory/ + http://132.232.42.89/categories/net/ 2023-06-17 weekly 0.2 @@ -1096,14 +1096,14 @@ - http://132.232.42.89/categories/CentOS7/ + http://132.232.42.89/categories/docker/ 2023-06-17 weekly 0.2 - http://132.232.42.89/categories/docker/ + http://132.232.42.89/categories/CentOS7/ 2023-06-17 weekly 0.2 diff --git a/tags/algorithm/index.html b/tags/algorithm/index.html index bdd006eec..a83cad2f9 100644 --- a/tags/algorithm/index.html +++ b/tags/algorithm/index.html @@ -1105,28 +1105,5 @@

    - - -] - } - }); - - - - - - - - - - - diff --git a/tags/java/index.html b/tags/java/index.html index e1aaee620..eafec369d 100644 --- a/tags/java/index.html +++ b/tags/java/index.html @@ -606,7 +606,7 @@

    diff --git a/tags/java/page/2/index.html b/tags/java/page/2/index.html index b0f3ccdbe..199d1867b 100644 --- a/tags/java/page/2/index.html +++ b/tags/java/page/2/index.html @@ -410,7 +410,7 @@

    diff --git a/tags/linux/index.html b/tags/linux/index.html index 9bc4fdd36..1a4468908 100644 --- a/tags/linux/index.html +++ b/tags/linux/index.html @@ -606,7 +606,7 @@

    diff --git a/tags/linux/page/2/index.html b/tags/linux/page/2/index.html index 9f6d4c1d9..9538dfa53 100644 --- a/tags/linux/page/2/index.html +++ b/tags/linux/page/2/index.html @@ -410,7 +410,7 @@

    diff --git a/tags/python/index.html b/tags/python/index.html index 9d371b5f3..8da7804ff 100644 --- a/tags/python/index.html +++ b/tags/python/index.html @@ -606,7 +606,7 @@

    diff --git a/tags/python/page/2/index.html b/tags/python/page/2/index.html index 1000a6de6..a9af1bb55 100644 --- a/tags/python/page/2/index.html +++ b/tags/python/page/2/index.html @@ -410,7 +410,7 @@