[代码重构](master): 更新了一些文档

文档文件更新
master
土豆兄弟 2 years ago
parent 9eb9f5f1bc
commit 56ef3ccacc

@ -31,7 +31,7 @@
podman Podman podman Podman
code-language 编程语言 code-language 编程语言
go go
python python Python 的学习及实际开发最佳实践
rust rust
scala scala
database database

@ -39,6 +39,10 @@
###
## AVL 树和红黑树 ## AVL 树和红黑树
@ -63,20 +67,32 @@
## 实战
### 前缀树 - 字典树 Trie 的应用
- Web框架中如何实现路由匹配
#### 路由匹配
- 一个好用的 Web 框架,要能尽可能快地解析请求 URL 并映射到不同 API 的处理逻辑,也就是我们常说的“路由匹配”。
#### 动态路由
- 如何保存路由和处理方法的对应关系呢?
- 不采用 HashMap 来存储路由表,因为利用哈希表存储的路由和处理逻辑的关系,只能用来索引静态路由,也就是路由中没有动态参数的路由,比如
/user/enabletime.xxx.org/hybrid/pvip ,这样的路由,路径是明确的,一个路由只有一种可能性
- 动态路由如何实现呢?方式有很多种,可以用正则表达式匹配来实现,另一种更常用的方式就是我们要重点学习的 Trie 树。
#### Trie 树总结
- Trie 树,也称为前缀树或者字典树,是一种常用的维护字符串集合的数据结构
- 能用来做 排序、保存、查询 字符串
- 常用场景比如搜索引擎关键词匹配、路由匹配、词频统计和字符串排序等
- EMQ X 也有用到相关的数据结构来实现 MQTT 协议路由表
- Trie 树主要的特点和优势都建立基于前缀的树状存储方式上
- 相比于 treemap 来说trie 树存储的开销要小得多,并且因为它天然的前缀匹配和排序的特性,在很多时候也能帮助我们更快检索数据。
#### 前缀树实现

@ -0,0 +1,152 @@
# Python 爬虫的研究
## 1. 基础
### 1.1 HTTP基本原理
### 1.2 Web网页基础
### 1.3 爬虫的基本原理
### 1.4 Session 与 Cookies
### 1.5 多路加速, 多线程
---
## 2. 爬虫基本库
### 2.1 Requests 库的基本使用
### 2.2 正则表达式
### 2.3 爬虫解析利器 PyQuery
### 2.4 高效存储 MongoDB
### 2.5 Requests + PyQuery + PyMongo 基本案例实战
---
## 3. 多种形式爬取
### 3.1 Ajax 案例
### 3.2 Selenium 案例
### 3.3 aiohttp 异步爬虫案例
### 3.4 Pyppeteer 案例
---
## 4. 反爬应对
### 4.1 代理及代理池
### 4.2 验证码破解
### 4.3 模拟登录
### 4.4 JavaScript 逆向
---
## 5. APP爬虫
### 5.1 抓包工具使用 Charles
### 5.2 实时处理利器 mitmproxy
### 5.3 Appium 的使用
### 5.4 自动化工具 airtest
### 5.5 Xposed
### 5.6 APP 逆向
---
## 6. 智能化解析
### 6.1 技术
### 6.2 工具
### 6.3 算法
### 6.4 实现
---
## 7. Scrapy 框架
### 7.1 Scrapy 基础
### 7.2 Spider 用法
### 7.3 Middleware 用法
### 7.4 Item Pipeline 用法
### 7.5 动态页面处理
### 7.6 Scrapy-Redis
### 7.7 Scrapyd 部署工具
### 7.8 Scrapy 对接 Docker
### 7.9 Scrapy 对接 Kubernetes 并实现定时爬取

5
cache/README.md vendored

@ -0,0 +1,5 @@
# 缓存

@ -0,0 +1,14 @@
# 服务容器化-Docker
## 容器技术 - Cloud Foundry
## 容器编排 - Mesos + Marathon
## 容器编排-K8S
## 弹性扩缩容

@ -0,0 +1,78 @@
package com.baiye.dfa;
import cn.hutool.dfa.WordTree;
/**
* dfa demo
*
*
* DFADeterministic Finite Automaton,
* http://www.cnblogs.com/naaoveGIS/archive/2016/10/14/5960352.html
*
* O(n)
*
* @author q
* @date 2022/08/18
*/
public class DFADemo {
public static final String text = "我有一颗大土豆,刚出锅的";
private static WordTree buidKeyWordsTree(){
WordTree tree = new WordTree();
// tree.addWord("大");
tree.addWord("大土豆");
tree.addWord("土豆");
tree.addWord("刚出锅");
tree.addWord("出锅");
return tree;
}
public static void main(String[] args) {
// 情况一:标准匹配,匹配到最短关键词,并跳过已经匹配的关键词
// 匹配到【大】,就不再继续匹配了,因此【大土豆】不匹配
// 匹配到【刚出锅】,就跳过这三个字了,因此【出锅】不匹配(由于刚首先被匹配,因此长的被匹配,最短匹配只针对第一个字相同选最短)
buidKeyWordsTree().matchAll(text, -1, false, false);
// result [大, 土豆, 刚出锅]
// 情况二:匹配到最短关键词,不跳过已经匹配的关键词
// 【大】被匹配,最短匹配原则【大土豆】被跳过,【土豆】 继续被匹配
// 【刚出锅】被匹配,由于不跳过已经匹配的词,【出锅】被匹配
buidKeyWordsTree().matchAll(text, -1, true, false);
// result [大, 土豆, 刚出锅, 出锅]
// 情况三:匹配到最长关键词,跳过已经匹配的关键词
// 匹配到【大】,由于到最长匹配,因此【大土豆】接着被匹配
// 由于【大土豆】被匹配,【土豆】被跳过,由于【刚出锅】被匹配,【出锅】被跳过
buidKeyWordsTree().matchAll(text, -1, false, true);
// result [大, 大土豆, 刚出锅]
// 情况四:匹配到最长关键词,不跳过已经匹配的关键词(最全关键词)
// 匹配到【大】,由于到最长匹配,因此【大土豆】接着被匹配,由于不跳过已经匹配的关键词,土豆继续被匹配
// 【刚出锅】被匹配,由于不跳过已经匹配的词,【出锅】被匹配
buidKeyWordsTree().matchAll(text, -1, true, true);
// result [大, 大土豆, 土豆, 刚出锅, 出锅]
// PS 除了matchAll方法WordTree还提供了match和isMatch两个方法这两个方法只会查找第一个匹配的结果这样一旦找到第一个关键字就会停止继续匹配大大提高了匹配效率。
System.out.println(buidKeyWordsTree().match(text));
System.out.println(buidKeyWordsTree().isMatch(text));
// 正文中的关键字常常包含特殊字符,比如:"〓关键☆字"针对这种情况HuTool 提供了StopChar类专门针对特殊字符做跳过处理这个过程是在match方法或matchAll方法执行的时候自动去掉特殊字符。
}
}

@ -0,0 +1,84 @@
# 开发工具研究
## IDEA
## 1.
## Vim
### 1. 基础概念和命令
- Vim 的模式转换
- **普通模式**Vim 启动后的默认模式,用来移动光标、删除文本、覆盖输入文本、恢复操作、粘贴文本等等。
- **插入模式**:输入 i 或 a 进入插入模式,在这个模式下敲击键盘会往文字缓冲区增加文字,相当于普通编辑器的编辑模式。
- **可视模式**:选择文本,可以行选、块选和依次选择,选择后可以进行复制、删除、排序等操作。
- **命令模式**:执行内部和外部命令,通过“:”“/”“?”“:!”可以进入命令模式,分别对应的是:执行内部命令、向上或向下搜索、执行外部命令。
- Vim 的优势
- Vim 是一个完全跨平台的编辑器
- Vim 也是一个高度可定制、可扩展的编辑器 [Vim 脚本Vim script]
- Vim 也有着良好的生态环境
- PS:
- 终端输入 vimtutor 可以获取 Vim 的简易教程
- Vim JavaScript或Typescript语言相关插件 - https://github.com/neoclide/coc.nvim
- 安装
- Linux 下的安装
- Red Hat 和 CentOS 系列
```shell
# 一般是默认安装的 查看 Vim 安装版本
yum list installed | grep vim
# 表示是基本功能 Vim
vim-minimal.x86_64 2:8.0.1763-13.el8 @System
# 安装图形界面的 Vim
sudo yum install vim-X11
# 安装增强版本的 Vim
sudo yum install vim-enhanced
```
- Debian 和 Ubuntu 系列
- 在 Debian、Ubuntu 等使用 apt 的 Linux 发行版上Vim 同样有着不同功能版本的区别,而且选择更多
- 它们中有编译进最小功能的 Vim 包vim-tiny有较全功能的文本界面 Vim 包vimnox有适用于老的 X-Window 界面的版本vim-athena有适用于 KDE 环境的
GTK2 版本vim-gtk
- 如果你使用标准的 GNOME 桌面环境的话(大部分的情况),安装 vim-gtk3 或 vimgnome
- 如果你使用 KDE 桌面的话,安装 vim-gtk
- 如果你只使用文本界面的话,安装 vim-nox
```shell
# 可以通过下面的命令来查看已经安装的 Vim 版本
apt list --installed | grep vim
# 来确保更新环境
sudo apt update
# 安装 GTK3 版本的 Vim - 自行进行选择
sudo apt install vimgtk3
```
- 在 Ubuntu 上vim 和 gvim 都是指向同一个应用程序的符号链接,且 gvim 的 执行效果和 vim -g 相同
- TODO 其他平台的安装过程补充即可
- TODO Vim8 中文文档支持
- 键盘重配置
- 重度的 Vim 用户会重新配置键盘把使用频度较低的大写锁定键Caps Lock重新映射成 Esc 或 Ctrl 键
- 建议直接买一把专用的键盘即可
Loading…
Cancel
Save