Allen

写代码是热爱,写到世界充满爱

  • HomePage
  • Categories
  • Archives
  • Essay
  • Tags
总文章数 379
所有文章 友链 关于我

Allen

写代码是热爱,写到世界充满爱

  • HomePage
  • Categories
  • Archives
  • Essay
  • Tags

37-动态规划理论_一篇文章带你彻底搞懂最优子结结构_无后效性_重复子问题

阅读数:124次 2019-07-13
字数统计: 5.1k字   |   阅读时长: 18分

文章导航

× 文章目录
  1. 1. 前言
  2. 2. “一个模型三个特征”理论讲解
    1. 2.1. 1. 最优子结构
    2. 2.2. 2. 无后效性
    3. 2.3. 3. 重复子问题
  3. 3. “一个模型三个特征”实例剖析
  4. 4. 两种动态规划解题思路总结
    1. 4.1. 1. 状态转移表法
    2. 4.2. 2. 状态转移方程法
  5. 5. 四种算法思想比较分析
  6. 6. 内容小结
  7. 7. 思考

Author: haoransun
Wechat: SHR—97

学习来源:极客时间-算法之美,本人购买课程后依据图文讲解汇总成个人见解。

前言

上一节,通过两个非常经典的问题,向你展示了用动态规划解决问题的过程。现在你对动态规划应该有了一个初步的认识。

今天,主要讲动态规划的一些理论知识。学完这节内容,可以帮你解决这样几个问题:什么样的问题可以用动态规划解决?解决动态规划问题的一般思考过程是什么样的?贪心、分治、回溯、动态规划这四种算法思想又有什么区别和联系?

理论的东西都比较抽象,不过你不用担心,本文会结合具体的例子来讲解,争取让你这次就能真正理解这些知识点,也为后面的应用和实战做好准备。

“一个模型三个特征”理论讲解

什么样的问题适合用动态规划来解决呢?换句话说,动态规划能解决的问题有什么规律可循呢?实际上,动态规划作为一个非常成熟的算法思想,很多人对此已经做了非常全面的总结。我把这部分理论总结为“一个模型三个特征”。

首先,我们来看,什么是“一个模型”?它指的是动态规划适合解决的问题的模型。我把这个模型定义为“多阶段决策最优解模型”。下面我具体来给你讲讲。

我们一般是用动态规划来解决最优问题。而解决问题的过程,需要经历多个决策阶段。每个决策阶段都对应着一组状态。然后我们寻找一组决策序列,经过这组决策序列,能够产生最终期望求解的最优值。

现在,我们再来看,什么是“三个特征”?它们分别是最优子结构、无后效性和重复子问题。这三个概念比较抽象,我来逐一详细解释一下。

1. 最优子结构

最优子结构指的是,问题的最优解包含子问题的最优解。反过来说就是,我们可以通过子问题的最优解,推导出问题的最优解。如果我们把最优子结构,对应到我们前面定义的动态规划问题模型上,那我们也可以理解为,后面阶段的状态可以通过前面阶段的状态推导出来。

2. 无后效性

无后效性有两层含义,第一层含义是,在推导后面阶段的状态的时候,我们只关心前面阶段的状态值,不关心这个状态是怎么一步一步推导出来的。第二层含义是,某阶段状态一旦确定,就不受之后阶段的决策影响。无后效性是一个非常“宽松”的要求。只要满足前面提到的动态规划问题模型,其实基本上都会满足无后效性。

3. 重复子问题

这个概念比较好理解。前面一节,我已经多次提过。如果用一句话概括一下,那就是,不同的决策序列,到达某个相同的阶段时,可能会产生重复的状态。

“一个模型三个特征”实例剖析

“一个模型三个特征”这部分是理论知识,比较抽象,你看了之后可能还是有点懵,有种似懂非懂的感觉,没关系,这个很正常。接下来,结合一个具体的动态规划问题,来给你详细解释。

假设我们有一个 n 乘以 n 的矩阵 w[n][n]。矩阵存储的都是正整数。棋子起始位置在左上角,终止位置在右下角。我们将棋子从左上角移动到右下角。每次只能向右或者向下移动一位。从左上角到右下角,会有很多不同的路径可以走。我们把每条路径经过的数字加起来看作路径的长度。那从左上角移动到右下角的最短路径长度是多少呢?

我们先看看,这个问题是否符合“一个模型”?

从 (0, 0) 走到 (n-1, n-1),总共要走 2(n-1) 步,也就对应着 2(n-1) 个阶段。每个阶段都有向右走或者向下走两种决策,并且每个阶段都会对应一个状态集合。

我们把状态定义为 min_dist(i, j),其中 i 表示行,j 表示列。min_dist 表达式的值表示从 (0, 0) 到达 (i, j) 的最短路径长度。所以,这个问题是一个多阶段决策最优解问题,符合动态规划的模型。

我们再来看,这个问题是否符合“三个特征”?

我们可以用回溯算法来解决这个问题。如果你自己写一下代码,画一下递归树,就会发现,递归树中有重复的节点。重复的节点表示,从左上角到节点对应的位置,有多种路线,这也能说明这个问题中存在重复子问题。

如果我们走到 (i, j) 这个位置,我们只能通过 (i-1, j),(i, j-1) 这两个位置移动过来,也就是说,我们想要计算 (i, j) 位置对应的状态,只需要关心 (i-1, j),(i, j-1) 两个位置对应的状态,并不关心棋子是通过什么样的路线到达这两个位置的。而且,我们仅仅允许往下和往右移动,不允许后退,所以,前面阶段的状态确定之后,不会被后面阶段的决策所改变,所以,这个问题符合“无后效性”这一特征。

刚刚定义状态的时候,我们把从起始位置 (0, 0) 到 (i, j) 的最小路径,记作 min_dist(i, j)。因为我们只能往右或往下移动,所以,我们只有可能从 (i, j-1) 或者 (i-1, j) 两个位置到达 (i, j)。也就是说,到达 (i, j) 的最短路径要么经过 (i, j-1),要么经过 (i-1, j),而且到达 (i, j) 的最短路径肯定包含到达这两个位置的最短路径之一。换句话说就是,min_dist(i, j) 可以通过 min_dist(i, j-1) 和 min_dist(i-1, j) 两个状态推导出来。这就说明,这个问题符合“最优子结构”。

1
min_dist(i, j) = w[i][j] + min(min_dist(i, j-1), min_dist(i-1, j))

两种动态规划解题思路总结

刚刚讲了,如何鉴别一个问题是否可以用动态规划来解决。现在,再总结一下,动态规划解题的一般思路,让你面对动态规划问题的时候,能够有章可循,不至于束手无策。

个人觉得,解决动态规划问题,一般有两种思路。我把它们分别叫作,状态转移表法和状态转移方程法。

1. 状态转移表法

一般能用动态规划解决的问题,都可以使用回溯算法的暴力搜索解决。所以,当我们拿到问题的时候,我们可以先用简单的回溯算法解决,然后定义状态,每个状态表示一个节点,然后对应画出递归树。从递归树中,我们很容易可以看出来,是否存在重复子问题,以及重复子问题是如何产生的。以此来寻找规律,看是否能用动态规划解决。

找到重复子问题之后,接下来,我们有两种处理思路,第一种是直接用回溯加“备忘录”的方法,来避免重复子问题。从执行效率上来讲,这跟动态规划的解决思路没有差别。第二种是使用动态规划的解决方法,状态转移表法。第一种思路,我就不讲了,你可以看看上一节的两个例子。我们重点来看状态转移表法是如何工作的。

我们先画出一个状态表。状态表一般都是二维的,所以你可以把它想象成二维数组。其中,每个状态包含三个变量,行、列、数组值。我们根据决策的先后过程,从前往后,根据递推关系,分阶段填充状态表中的每个状态。最后,我们将这个递推填表的过程,翻译成代码,就是动态规划代码了。

尽管大部分状态表都是二维的,但是如果问题的状态比较复杂,需要很多变量来表示,那对应的状态表可能就是高维的,比如三维、四维。那这个时候,我们就不适合用状态转移表法来解决了。一方面是因为高维状态转移表不好画图表示,另一方面是因为人脑确实很不擅长思考高维的东西。

现在,我们来看一下,如何套用这个状态转移表法,来解决之前那个矩阵最短路径的问题?

从起点到终点,我们有很多种不同的走法。我们可以穷举所有走法,然后对比找出一个最短走法。不过如何才能无重复又不遗漏地穷举出所有走法呢?我们可以用回溯算法这个比较有规律的穷举算法。

回溯算法的代码实现如下所示。代码很短,而且我前面也分析过很多回溯算法的例题,这里我就不多做解释了,你自己来看看。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private int minDist = Integer.MAX_VALUE; // 全局变量或者成员变量
// 调用方式:minDistBacktracing(0, 0, 0, w, n);
public void minDistBT(int i, int j, int dist, int[][] w, int n) {
// 到达了n-1, n-1这个位置了,这里看着有点奇怪哈,你自己举个例子看下
if (i == n && j == n) {
if (dist < minDist) minDist = dist;
return;
}
if (i < n) { // 往下走,更新i=i+1, j=j
minDistBT(i + 1, j, dist+w[i][j], w, n);
}
if (j < n) { // 往右走,更新i=i, j=j+1
minDistBT(i, j+1, dist+w[i][j], w, n);
}
}

有了回溯代码之后,接下来,我们要画出递归树,以此来寻找重复子问题。在递归树中,一个状态(也就是一个节点)包含三个变量 (i, j, dist),其中 i,j 分别表示行和列,dist 表示从起点到达 (i, j) 的路径长度。从图中,我们看出,尽管 (i, j, dist) 不存在重复的,但是 (i, j) 重复的有很多。对于 (i, j) 重复的节点,我们只需要选择 dist 最小的节点,继续递归求解,其他节点就可以舍弃了。

既然存在重复子问题,我们就可以尝试看下,是否可以用动态规划来解决呢?

我们画出一个二维状态表,表中的行、列表示棋子所在的位置,表中的数值表示从起点到这个位置的最短路径。我们按照决策过程,通过不断状态递推演进,将状态表填好。为了方便代码实现,我们按行来进行依次填充。

弄懂了填表的过程,代码实现就简单多了。我们将上面的过程,翻译成代码,就是下面这个样子。结合着代码、图和文字描述,应该更容易理解我讲的内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public int minDistDP(int[][] matrix, int n) {
int[][] states = new int[n][n];
int sum = 0;
for (int j = 0; j < n; ++j) { // 初始化states的第一行数据
sum += matrix[0][j];
states[0][j] = sum;
}
sum = 0;
for (int i = 0; i < n; ++i) { // 初始化states的第一列数据
sum += matrix[i][0];
states[i][0] = sum;
}
for (int i = 1; i < n; ++i) {
for (int j = 1; j < n; ++j) {
states[i][j] =
matrix[i][j] + Math.min(states[i][j-1], states[i-1][j]);
}
}
return states[n-1][n-1];
}

2. 状态转移方程法

状态转移方程法有点类似递归的解题思路。我们需要分析,某个问题如何通过子问题来递归求解,也就是所谓的最优子结构。根据最优子结构,写出递归公式,也就是所谓的状态转移方程。有了状态转移方程,代码实现就非常简单了。一般情况下,我们有两种代码实现方法,一种是递归加“备忘录”,另一种是迭代递推。

我们还是拿刚才的例子来举例。最优子结构前面已经分析过了,你可以回过头去再看下。为了方便你查看,我把状态转移方程放到这里。

1
min_dist(i, j) = w[i][j] + min(min_dist(i, j-1), min_dist(i-1, j))

这里我强调一下,状态转移方程是解决动态规划的关键。如果我们能写出状态转移方程,那动态规划问题基本上就解决一大半了,而翻译成代码非常简单。但是很多动态规划问题的状态本身就不好定义,状态转移方程也就更不好想到。

下面我用递归加“备忘录”的方式,将状态转移方程翻译成来代码,你可以看看。对于另一种实现方式,跟状态转移表法的代码实现是一样的,只是思路不同。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
private int[][] matrix = 
{{1,3,5,9}, {2,1,3,4},{5,2,6,7},{6,8,4,3}};
private int n = 4;
private int[][] mem = new int[4][4];
public int minDist(int i, int j) { // 调用minDist(n-1, n-1);
if (i == 0 && j == 0) return matrix[0][0];
if (mem[i][j] > 0) return mem[i][j];
int minLeft = Integer.MAX_VALUE;
if (j-1 >= 0) {
minLeft = minDist(i, j-1);
}
int minUp = Integer.MAX_VALUE;
if (i-1 >= 0) {
minUp = minDist(i-1, j);
}

int currMinDist = matrix[i][j] + Math.min(minLeft, minUp);
mem[i][j] = currMinDist;
return currMinDist;
}

两种动态规划解题思路到这里就讲完了。要强调一点,不是每个问题都同时适合这两种解题思路。有的问题可能用第一种思路更清晰,而有的问题可能用第二种思路更清晰,所以,你要结合具体的题目来看,到底选择用哪种解题思路。

四种算法思想比较分析

到今天为止,我们已经学习了四种算法思想,贪心、分治、回溯和动态规划。今天的内容主要讲些理论知识,正好一块儿也分析一下这四种算法,看看它们之间有什么区别和联系。

如果我们将这四种算法思想分一下类,那贪心、回溯、动态规划可以归为一类,而分治单独可以作为一类,因为它跟其他三个都不大一样。为什么这么说呢?前三个算法解决问题的模型,都可以抽象成我们今天讲的那个多阶段决策最优解模型,而分治算法解决的问题尽管大部分也是最优解问题,但是,大部分都不能抽象成多阶段决策模型。

回溯算法是个“万金油”。基本上能用的动态规划、贪心解决的问题,我们都可以用回溯算法解决。回溯算法相当于穷举搜索。穷举所有的情况,然后对比得到最优解。不过,回溯算法的时间复杂度非常高,是指数级别的,只能用来解决小规模数据的问题。对于大规模数据的问题,用回溯算法解决的执行效率就很低了。

尽管动态规划比回溯算法高效,但是,并不是所有问题,都可以用动态规划来解决。能用动态规划解决的问题,需要满足三个特征,最优子结构、无后效性和重复子问题。在重复子问题这一点上,动态规划和分治算法的区分非常明显。分治算法要求分割成的子问题,不能有重复子问题,而动态规划正好相反,动态规划之所以高效,就是因为回溯算法实现中存在大量的重复子问题。

贪心算法实际上是动态规划算法的一种特殊情况。它解决问题起来更加高效,代码实现也更加简洁。不过,它可以解决的问题也更加有限。它能解决的问题需要满足三个条件,最优子结构、无后效性和贪心选择性(这里我们不怎么强调重复子问题)。

其中,最优子结构、无后效性跟动态规划中的无异。“贪心选择性”的意思是,通过局部最优的选择,能产生全局的最优选择。每一个阶段,我们都选择当前看起来最优的决策,所有阶段的决策完成之后,最终由这些局部最优解构成全局最优解。

内容小结

首先讲了什么样的问题适合用动态规划解决。这些问题可以总结概括为“一个模型三个特征”。其中,“一个模型”指的是,问题可以抽象成分阶段决策最优解模型。“三个特征”指的是最优子结构、无后效性和重复子问题。

然后,讲了两种动态规划的解题思路。它们分别是状态转移表法和状态转移方程法。其中,状态转移表法解题思路大致可以概括为,回溯算法实现 - 定义状态 - 画递归树 - 找重复子问题 - 画状态转移表 - 根据递推关系填表 - 将填表过程翻译成代码。状态转移方程法的大致思路可以概括为,找最优子结构 - 写状态转移方程 - 将状态转移方程翻译成代码。

最后,我们对比了之前讲过的四种算法思想。贪心、回溯、动态规划可以解决的问题模型类似,都可以抽象成多阶段决策最优解模型。尽管分治算法也能解决最优问题,但是大部分问题的背景都不适合抽象成多阶段决策模型。

今天的内容比较偏理论,可能会不好理解。很多理论知识的学习,单纯的填鸭式讲给你听,实际上效果并不好。要想真的把这些理论知识理解透,化为己用,还是需要你自己多思考,多练习。等你做了足够多的题目之后,自然就能自己悟出一些东西,这样再回过头来看理论,就会非常容易看懂。

所以,在今天的内容中,如果有哪些地方你还不能理解,那也没关系,先放一放。下一节,会运用今天讲到的理论,再解决几个动态规划的问题。等你学完下一节,可以再回过头来看下今天的理论知识,可能就会有一种顿悟的感觉。

思考

硬币找零问题,我们在贪心算法那一节中讲过一次。我们今天来看一个新的硬币找零问题。假设我们有几种不同币值的硬币 v1,v2,……,vn(单位是元)。如果我们要支付 w 元,求最少需要多少个硬币。比如,我们有 3 种不同的硬币,1 元、3 元、5 元,我们要支付 9 元,最少需要 3 个硬币(3 个 3 元的硬币)。

回答:

可以看做爬阶梯问题,分别可以走1.3.5步,怎么最少走到9步,动态转移方程为f(9)=1+min(f(8),f(6),f(4))

  • 算法
  • 算法

扫一扫,分享到微信

微信分享二维码
19-只查一行的语句为何执行这么慢
36-初识动态规划_如何巧妙解解决“双十一”购物时的凑单问题
  1. 1. 前言
  2. 2. “一个模型三个特征”理论讲解
    1. 2.1. 1. 最优子结构
    2. 2.2. 2. 无后效性
    3. 2.3. 3. 重复子问题
  3. 3. “一个模型三个特征”实例剖析
  4. 4. 两种动态规划解题思路总结
    1. 4.1. 1. 状态转移表法
    2. 4.2. 2. 状态转移方程法
  5. 5. 四种算法思想比较分析
  6. 6. 内容小结
  7. 7. 思考

Related Issues not found

Please contact @JavaSsun to initialize the comment

© 2018-2024 Allen
Hexo Theme Yilia by Litten
本站总访问量72582次 | 本站访客数65217人
  • 所有文章
  • 友链
  • 关于我

tag:

  • Elasticsearch
  • 面试
  • MQ
  • Redis
  • Nginx
  • Docker
  • Git
  • Dubbo
  • 论文
  • MySql
  • Tools
  • 日志
  • Linux
  • 系统架构
  • Java
  • 源码解析
  • Hexo-yilia
  • Jvm
  • MyBatis
  • SpringBoot
  • Swagger2
  • 算法
  • 分布式
  • Photo
  • HTTP
  • Hystrix
  • SSL
  • ELK
  • IDEA
  • Jwt
  • 定时任务
  • BigData
  • Maven
  • Quartz
  • 人工智能
  • 地图坐标转换
  • 网络编程
  • Python
  • SpringCloud
  • 搬砖结晶
  • OpenCV
  • 推荐系统
  • 目标检测
  • SkLearn
  • 图神经网络
  • PyTorch
  • TensorFlow
  • 数据挖掘
  • 研究生课题-AD检测
  • 研究生成果

    缺失模块。
    1、请确保node版本大于6.2
    2、在博客根目录(注意不是yilia根目录)执行以下命令:
    npm i hexo-generator-json-content --save

    3、在根目录_config.yml里添加配置:

      jsonContent:
        meta: false
        pages: false
        posts:
          title: true
          date: true
          path: true
          text: false
          raw: false
          content: false
          slug: false
          updated: false
          comments: false
          link: false
          permalink: false
          excerpt: false
          categories: false
          tags: true
    

  • 研究生总结

    2024-05-09

    #论文#人工智能#搬砖结晶#图神经网络#研究生课题-AD检测#研究生成果

  • 12-ROI文件分析

    2023-11-22

    #Tools#人工智能#研究生课题-AD检测

  • 11-DTI预处理

    2023-11-16

    #Tools#人工智能#研究生课题-AD检测

  • 10-GRETNA处理fMRI

    2023-11-05

    #Tools#人工智能#研究生课题-AD检测

  • 9-(图)利用Matlab的spm12工具处理fMRI为ROI

    2023-10-28

    #Tools#人工智能#研究生课题-AD检测

  • 9-(文)利用Matlab的spm12工具处理fMRI为ROI

    2023-10-26

    #Tools#人工智能#研究生课题-AD检测

  • 8-7-FSL软件使用

    2023-10-20

    #Tools#人工智能#研究生课题-AD检测

  • 8-6-FreeSurfer软件使用

    2023-10-16

    #Tools#人工智能#研究生课题-AD检测

  • 8-5-SPM软件使用

    2023-10-10

    #Tools#人工智能#研究生课题-AD检测

  • 8-4-MRI预处理

    2023-09-16

    #Tools#人工智能#研究生课题-AD检测

  • 8-3-UNet提取海马体

    2023-09-10

    #人工智能#研究生课题-AD检测

  • 8-2-ADNI论文数据预处理

    2023-09-02

    #论文#Tools#人工智能#研究生课题-AD检测

  • 8-1-数据预处理工具

    2023-08-05

    #Tools#人工智能#研究生课题-AD检测

  • 7-2-GNN For AD

    2023-07-25

    #论文#人工智能#图神经网络#研究生课题-AD检测

  • 7-1-GNN For Medical Diagnosis

    2023-06-28

    #论文#人工智能#图神经网络#研究生课题-AD检测

  • 6-2-SCI一区论文精读

    2023-05-25

    #论文#人工智能#研究生课题-AD检测

  • 6-1-MRI成像及ADNI简介

    2023-05-10

    #人工智能#研究生课题-AD检测

  • 5-ADNI-实验数据筛选与下载

    2023-04-25

    #人工智能#研究生课题-AD检测

  • 4-AD文献的阅读记录

    2023-04-20

    #论文#人工智能#研究生课题-AD检测

  • 3-指标特征选择

    2023-04-05

    #人工智能#研究生课题-AD检测

  • 2-AD有关课题

    2023-03-25

    #人工智能#研究生课题-AD检测

  • 1-阿尔茨海默病

    2023-03-20

    #人工智能#研究生课题-AD检测

  • 7-SHAP

    2023-03-15

    #人工智能#数据挖掘

  • 6-模型的融合技术大总结与结果部署

    2023-02-25

    #人工智能#数据挖掘

  • 5-模型建立与调参

    2023-02-20

    #人工智能#数据挖掘

  • 4-特征工程

    2023-02-12

    #人工智能#数据挖掘

  • 3-数据清洗和转换技巧

    2023-02-09

    #人工智能#数据挖掘

  • 2-数据的探索性-EDA分析

    2023-02-06

    #人工智能#数据挖掘

  • 1-赛题理解

    2023-02-04

    #人工智能#数据挖掘

  • 0-零基础入门数据挖掘学习路径

    2023-02-03

    #人工智能#数据挖掘

  • 重温深度学习优化算法

    2023-01-28

    #人工智能

  • 重温归一化(MinMaxScaler)和标准化(StandardScaler)

    2023-01-20

    #人工智能

  • 重温Batch Normalization

    2023-01-15

    #人工智能

  • 交叉熵损失函数和平方损失的区别

    2023-01-12

    #人工智能

  • loss不下降的解决方法

    2023-01-10

    #人工智能

  • 重温Seq2Seq和Attention机制

    2023-01-05

    #人工智能

  • 重温LSTM和GRU

    2022-12-28

    #人工智能

  • 重温RNN

    2022-12-25

    #人工智能

  • pytorch_geometric离线安装

    2022-12-19

    #人工智能#图神经网络#PyTorch

  • pytorch_geometric安装

    2022-12-18

    #人工智能#图神经网络#PyTorch

  • 生成式对抗网络GAN的工作原理

    2022-12-13

    #人工智能

  • Ubuntu查看cuda-cudnn等版本命令

    2022-12-10

    #Tools#人工智能

  • CUDA和CuDNN安装

    2022-12-08

    #Tools#人工智能

  • GPU之nvidia-smi命令详解

    2022-12-05

    #Tools#人工智能

  • 1-TensorFlow简介及安装

    2022-12-01

    #人工智能#TensorFlow

  • 入门图神经网络

    2022-11-25

    #人工智能#图神经网络

  • 10-模型的保存加载-模型微调-GPU使用及Pytorch常见报错

    2022-11-06

    #人工智能#PyTorch

  • 9-正则化与标准化大总结

    2022-10-28

    #人工智能#PyTorch

  • 8-Tensorboard可视化与Hook机制

    2022-10-25

    #人工智能#PyTorch

  • 7-优化器和学习率调整策略

    2022-10-23

    #人工智能#PyTorch

  • 6-模型的权值初始化与损失函数介绍

    2022-10-20

    #人工智能#PyTorch

  • 5-nn各网络层介绍

    2022-10-17

    #人工智能#PyTorch

  • Pytorch提取神经网络层结构-层参数及自定义初始化

    2022-10-14

    #人工智能#PyTorch

  • 4-模型创建Module-模型容器Containers及AlexNet网络搭建

    2022-10-12

    #人工智能#PyTorch

  • 3-Pytorch数据读取机制(DataLoader)与图像预处理模块(transforms)

    2022-10-09

    #人工智能#PyTorch

  • 2-Pytorch的动态图-自动求导及逻辑回归

    2022-10-02

    #人工智能#PyTorch

  • 1-Pytorch的数据载体张量与线性回归

    2022-09-28

    #人工智能#PyTorch

  • Pytorch与词向量

    2022-09-25

    #人工智能#PyTorch

  • Pytorch基础理论和简单的神经网络实现

    2022-09-23

    #人工智能#PyTorch

  • Windows下的Pytorch环境搭建

    2022-09-20

    #人工智能#PyTorch

  • 图卷积网络-GCN

    2022-09-15

    #人工智能#图神经网络

  • GCN使用的数据集Cora等

    2022-09-10

    #人工智能#图神经网络

  • 图网络属性介绍

    2022-09-08

    #人工智能#图神经网络

  • 图神经网络理论基础

    2022-09-05

    #人工智能#图神经网络

  • 5-AI上推荐之AutoRec与Deep Crossing模型(改变神经网络的复杂程度)

    2022-08-28

    #人工智能#推荐系统

  • 4-AI上推荐之FM和FFM(九九归一)

    2022-08-17

    #人工智能#推荐系统

  • 梯度提升树GBDT的理论学习与细节补充

    2022-08-05

    #人工智能#推荐系统

  • 梯度下降算法的细节补充(凸函数, 导数, 偏导数,梯度, 方向导数以及负梯度下降最快背后的泰勒身影)

    2022-07-28

    #人工智能#推荐系统

  • 逻辑回归、优化算法和正则化的幕后细节补充

    2022-07-24

    #人工智能#推荐系统

  • 3-AI上推荐之逻辑回归模型与GBDT+LR(特征工程模型化的开端)

    2022-07-20

    #人工智能#推荐系统

  • 奇异值分解(SVD)的原理详解及推导

    2022-07-13

    #人工智能#推荐系统

  • 2-AI上推荐之隐语义模型(LFM)和矩阵分解(MF)

    2022-07-10

    #人工智能#推荐系统

  • 1-AI上推荐之协同过滤

    2022-07-02

    #人工智能#推荐系统

  • R-CNN and Fast R-CNN and Faster R-CNN and SPP

    2022-06-15

    #人工智能#目标检测

  • 10-Harris和Shi-Tomas算法

    2022-06-06

    #人工智能#OpenCV

  • 9-角点特征

    2022-06-03

    #人工智能#OpenCV

  • 8-图像变换-傅里叶变换

    2022-05-29

    #人工智能#OpenCV

  • 7-模板匹配与霍夫变换

    2022-05-15

    #人工智能#OpenCV

  • 6-边缘检测

    2022-05-08

    #人工智能#OpenCV

  • 5-直方图

    2022-04-28

    #人工智能#OpenCV

  • 4-图像平滑

    2022-04-26

    #人工智能#OpenCV

  • 3-形态学操作

    2022-04-22

    #人工智能#OpenCV

  • 2-几何变换

    2022-04-20

    #人工智能#OpenCV

  • 1-图像的基础操作

    2022-04-18

    #人工智能#OpenCV

  • 0-OpenCV简介

    2022-04-15

    #人工智能#OpenCV

  • Ubuntu18.04下安装OpenCV3.4

    2022-04-01

    #人工智能#OpenCV

  • 后 R-CNN时代, Faster R-CNN、SSD、YOLO 各类变体统治下的目标检测综述:Faster R-CNN系列胜了吗?

    2022-03-28

    #人工智能#目标检测

  • SKLearn学习总结

    2022-03-20

    #人工智能#SkLearn

  • 详细了解PyCharm支持的4种Python Interpreter和配置方法

    2022-03-02

    #Tools

  • Pycharm远程连接

    2022-02-26

    #Tools

  • JupyterLab学习总结

    2022-02-19

    #Tools#人工智能

  • Anaconda学习总结

    2022-02-13

    #Tools#人工智能

  • Ubuntu下安装lrzsz工具

    2022-02-08

    #Tools

  • 13-RNN

    2022-02-05

    #人工智能

  • 12-加速深度学习的算法和硬件-讲座

    2022-01-10

    #人工智能

  • 11-深度学习硬件算力基础-GPU与TPU与英特尔神经棒

    2021-12-26

    #人工智能

  • 10-经典卷积神经网络架构案例分析

    2021-12-16

    #人工智能

  • 9-迁移学习与fine-tuning

    2021-12-11

    #人工智能

  • 8-CNNS in Practice-卷积神经网络工程实践技巧

    2021-11-28

    #人工智能

  • 7-训练神经网络-下

    2021-11-09

    #人工智能

  • 6-训练神经网络-上

    2021-11-05

    #人工智能

  • 5-可视化并理解卷积神经网络

    2021-10-25

    #人工智能

  • 4-Convolutional-Neural-Networks

    2021-10-18

    #人工智能

  • 3-神经网络与反向传播

    2021-10-10

    #人工智能

  • 2-损失函数和梯度下降

    2021-09-25

    #人工智能

  • 1-KNN&线性分类器

    2021-09-20

    #人工智能

  • 0-机器学习基础

    2021-09-15

    #人工智能

  • 入门人工智能算法工程师-先来碗毒鸡汤

    2021-07-30

    #人工智能

  • 3-如何高效阅读机器学习顶会论文

    2021-07-15

    #论文

  • 2-论文ABC类与一二区的区别

    2021-06-10

    #论文

  • 1-学术小白

    2021-06-06

    #论文

  • 领域驱动设计在互联网业务开发中的实践

    2020-09-13

    #系统架构

  • 领域驱动设计

    2020-07-12

    #系统架构

  • DDD模式-从天书到实践

    2020-06-28

    #系统架构

  • DDD-马什么梅

    2020-06-14

    #系统架构

  • FaaS-又一个为未来

    2020-05-17

    #系统架构

  • 分布式ID的花拳绣腿

    2020-04-19

    #面试#系统架构#分布式

  • 4-Dockerfile上

    2020-04-08

    #Docker

  • 3-Docker存储卷

    2020-04-07

    #Docker

  • 2-Docker容器网络

    2020-04-06

    #Docker

  • 1-安装_使用Docker

    2020-04-05

    #Docker

  • 45-自增ID用完怎么办

    2020-03-11

    #MySql

  • 44-一些常见问题

    2020-03-09

    #MySql

  • 43-要不要使用分区表

    2020-03-08

    #MySql

  • 42-grant之后要跟着flush privileges吗

    2020-03-07

    #MySql

  • 41-如何最快的复制一张表

    2020-03-06

    #MySql

  • 40-insert语句的锁为什么这么多

    2020-03-04

    #MySql

  • 39-自增主键为什么不是连续的

    2020-03-03

    #MySql

  • 38-都说InnoDB好_那还要不要使用Memory引擎

    2020-03-02

    #MySql

  • 37-什么时候会使用内部临时表

    2020-03-01

    #MySql

  • SpringBoot_RabbitMQ配置参数详解

    2020-02-26

    #MQ

  • RabbitMQ安装

    2020-02-26

    #MQ

  • ELK日志平台-中

    2020-02-11

    #日志#ELK

  • ELK日志平台-上

    2020-02-10

    #日志#ELK

  • Java8新特性

    2020-02-08

    #Java

  • 1-Hystrix知多少

    2020-01-01

    #面试#Hystrix

  • 25-Nginx变量原理-应用

    2019-12-13

    #Nginx

  • 24-详解HTTP过滤模块

    2019-12-12

    #Nginx

  • 23-详解HTTP请求的11个阶段

    2019-12-11

    #Nginx

  • 22-如何找到处理请求的Server指令块

    2019-12-10

    #Nginx

  • 21-Nginx中的正则表达式

    2019-12-09

    #Nginx

  • 20-处理HTTP请求头部流程

    2019-12-09

    #Nginx

  • 19-Nginx中Listen指令用法

    2019-12-08

    #Nginx

  • 18-Nginx冲突的配置指令以谁为准

    2019-12-08

    #Nginx

  • 17-Nginx动态模块

    2019-12-07

    #Nginx

  • 16-Nginx容器

    2019-12-06

    #Nginx

  • 15-Worker集成协同工作的关键

    2019-12-06

    #Nginx

  • 14-Nginx连接池处理网络请求-内存池对性能的影响

    2019-12-05

    #Nginx

  • 13-Nginx模块

    2019-12-04

    #Nginx

  • 12-网络收发与Nginx事件模型

    2019-12-03

    #Nginx

  • 11-Nginx架构_相关流程

    2019-12-02

    #Nginx

  • LinkedHashMap实现原理_探险

    2019-11-28

    #Java#源码解析

  • HashTable实现原理_探险

    2019-11-22

    #Java#源码解析

  • HashMap实现原理_探险

    2019-11-20

    #Java#源码解析

  • LinkList实现原理_探险

    2019-11-17

    #Java#源码解析

  • ArrayList实现原理_探险

    2019-11-16

    #Java#源码解析

  • 10-OpenResty用Lua语言实现简单服务

    2019-11-12

    #Nginx

  • 9-SSL-Nginx

    2019-11-11

    #Nginx#SSL

  • 8-Nginx配置文件简易解析

    2019-11-10

    #Nginx

  • 7-Nginx安装详解

    2019-11-09

    #Nginx

  • 6-GoAccess实现可视化并实时监控access日志

    2019-11-08

    #Nginx#Tools#日志

  • 5-Nginx搭建具备缓存功能的反向代理

    2019-11-05

    #Nginx

  • 4-Nginx搭建静态资源Web服务器

    2019-11-01

    #Nginx

  • SpringBoot中jar为什么可以直接运行

    2019-10-30

    #面试#SpringBoot

  • SpringBoot全局异常处理

    2019-10-29

    #面试#SpringBoot

  • SpringBoot事件和监听器

    2019-10-29

    #面试#SpringBoot

  • SpringBoot启动原理

    2019-10-29

    #面试#SpringBoot

  • 36-为什么临时表可以重名

    2019-10-28

    #MySql

  • 35-join语句如何优化

    2019-10-27

    #MySql

  • 34-到底可不可以使用join

    2019-10-26

    #MySql

  • 33-我查这么多数据_会不会把数据库内存打爆

    2019-10-24

    #MySql

  • 32-为什么有kill不掉的语句

    2019-10-23

    #MySql

  • 31-误删数据后除了跑路_还能怎么办

    2019-10-22

    #MySql

  • 3-Nginx命令行演示-重载-热部署-切割

    2019-10-20

    #Nginx

  • 2-Nginx配置语法

    2019-10-17

    #Nginx

  • 1-Nginx的前世今生

    2019-10-15

    #Nginx

  • 0-Nginx访问日志配置及信息详解

    2019-10-11

    #Nginx

  • 分布式事务

    2019-09-19

    #面试#系统架构#分布式

  • 分布式锁

    2019-09-18

    #面试#系统架构#分布式

  • 分布式锁与事务

    2019-09-16

    #面试#系统架构#分布式

  • 数据结构与算法第四阶段学习图

    2019-09-16

    #算法

  • 数据结构与算法第三阶段学习图

    2019-09-16

    #算法

  • 数据结构与算法第二阶段学习图

    2019-09-16

    #算法

  • 数据结构与算法第一阶段学习图

    2019-09-16

    #算法

  • 2018-2019工作总结

    2019-09-15

    #搬砖结晶

  • 开发常见问题

    2019-09-14

    #Java

  • 52-算法实战(五)_如何用学过的数据结构和算法实现一个短网址系统

    2019-09-14

    #算法

  • 30-用动态的观点看加锁

    2019-09-13

    #MySql

  • 29-如何判断一个数据库是不是出问题了

    2019-09-12

    #MySql

  • 28-读写分离有哪些坑

    2019-09-11

    #MySql

  • 51-算法实战(四)_剖析微服务接口鉴权限流背后的数据结构和算法

    2019-09-09

    #算法

  • 50-算法实战(三)_剖析高性能队列Disruptor背后的数据结构和算法

    2019-09-06

    #算法

  • 49-算法实战(二)_剖析搜索引擎背后的经典数据结构和算法

    2019-09-02

    #算法

  • 27-主库出问题了_从库怎么办

    2019-08-29

    #MySql

  • 26-备库为什么会延迟好几个小时

    2019-08-28

    #MySql

  • 25-MySQL是怎么保证高可用的

    2019-08-27

    #MySql

  • 24-MySQL是怎么保证主备一致的

    2019-08-26

    #MySql

  • 48-算法实战(一)_剖析Redis常用数据类型对应的数据结构

    2019-08-25

    #算法

  • 47-并行算法_如何利用并行处理提高算法的执行效率

    2019-08-20

    #算法

  • 46-索引_如何在海量数据中快速查找某个数据

    2019-08-16

    #算法

  • 45-搜索_如何用A*搜索算法实现游戏中的寻路功能

    2019-08-13

    #算法

  • 44-B+树_MySQL数据库索引是如何实现的

    2019-08-10

    #算法

  • 43-向量空间_如何实现一个简单的音乐推荐系统

    2019-08-08

    #算法

  • 42-概率统计_如何利用朴素贝叶斯算法过滤垃圾短信

    2019-08-05

    #算法

  • 41-位图_如何实现网页爬虫中的URL去重功能

    2019-08-02

    #算法

  • 40-最短路径_地图软件是如何计算出最优出行路径的

    2019-07-28

    #算法

  • 39-拓扑排序_如何确定代码源文件的编译依赖关系

    2019-07-24

    #算法

  • 38-动态规划实战_如何实现搜索引擎中的拼写纠错功能

    2019-07-20

    #算法

  • 23-MySQL是如何保证数据不丢的

    2019-07-19

    #MySql

  • 22-MySQL有哪些“饮鸩止渴”提高性能的方法

    2019-07-18

    #MySql

  • 21-为什么我只改一行的语句_锁还这么多

    2019-07-17

    #MySql

  • 20-幻读是什么_幻读有什么问题

    2019-07-16

    #MySql

  • 19-只查一行的语句为何执行这么慢

    2019-07-15

    #MySql

  • 37-动态规划理论_一篇文章带你彻底搞懂最优子结结构_无后效性_重复子问题

    2019-07-13

    #算法

  • 36-初识动态规划_如何巧妙解解决“双十一”购物时的凑单问题

    2019-07-09

    #算法

  • 35-回溯算法_从电影《蝴蝶效应》中学习回溯算法的核心思想

    2019-07-06

    #算法

  • 34-分治算法_谈一谈大规模计算框架MapReduce中的分治思想

    2019-07-04

    #算法

  • 33-贪心算法_如何用贪心算法实现Huffman压缩编码

    2019-07-01

    #算法

  • 32-AC自动机_如何用多模式串匹配实现敏感词过滤功能

    2019-06-25

    #算法

  • 18-SQL语句逻辑相同_性能却为何差异巨大

    2019-06-23

    #MySql

  • 17-如何正确的显示随机消息

    2019-06-22

    #MySql

  • 16-MySQL中order by是如何工作的

    2019-06-20

    #MySql

  • 15-日志和索引有关问题

    2019-06-18

    #MySql

  • RocketMQ探索

    2019-06-17

    #MQ

  • 14-count(\*)为什么这么慢

    2019-06-16

    #MySql

  • 13-为什么表数据删掉一半而表文件大小不变

    2019-06-15

    #MySql

  • 12-为什么我的MySQL会“抖”一下

    2019-06-13

    #MySql

  • 11-怎么给字符串字段加索引

    2019-06-12

    #MySql

  • 10-MySQL为什么有时候会选错索引

    2019-06-11

    #MySql

  • 3-3-Docker容器用法

    2019-06-10

    #Docker

  • RabbitMQ详解

    2019-06-08

    #MQ

  • 5-分布式会话_锁_事务_高并发系统设计

    2019-06-07

    #面试

  • 3.2-Docker镜像用法

    2019-06-05

    #Docker

  • 4-Zookeeperer使用场景

    2019-06-04

    #面试

  • Dubbo知多少

    2019-06-03

    #面试#Dubbo

  • 3-分布式系统中接口调用顺序性如何保证

    2019-06-03

    #面试#Dubbo

  • 2-分布式系统中接口的幂等性该如何保证_比如不能重复扣款

    2019-06-02

    #面试#Dubbo

  • 1-分布式系统连环炮_Dubbo有关知识点

    2019-06-01

    #面试#Dubbo

  • 9-普通索引和唯一索引如何选择

    2019-05-30

    #MySql

  • 8-事务到底是隔离的还是不隔离的

    2019-05-29

    #MySql

  • 7-行锁功过_怎么减少行锁对性能的影响

    2019-05-28

    #MySql

  • 6-全局锁和表锁_给表加个字段怎么有这么多阻碍

    2019-05-27

    #MySql

  • 5-深入浅出索引(下)

    2019-05-26

    #MySql

  • 4-深入浅出索引(上)

    2019-05-25

    #MySql

  • 3.1-Docker用法

    2019-05-24

    #Docker

  • 2.2-Docker启动报错

    2019-05-23

    #Docker

  • 3-事务隔离_为什么你改了我还看不见

    2019-05-21

    #MySql

  • MySQL重要日志

    2019-05-20

    #面试#MySql

  • 2-日志系统_一条SQL更新语句是如何执行的

    2019-05-20

    #MySql

  • 1-基础架构_一条SQL查询语句是如何执行的

    2019-05-19

    #MySql

  • 2.1-Docker安装与部署

    2019-05-18

    #Docker

  • 1-Docker缘由

    2019-05-12

    #Docker

  • 0-Docker配置国内免费registry_mirror

    2019-05-08

    #Docker

  • 5-分布式搜索引擎如何部署

    2019-04-26

    #Elasticsearch#面试

  • 4-ES如何在几十亿数据场景下优化查询性能

    2019-04-23

    #Elasticsearch#面试

  • 3-ES读写数据的工作原理

    2019-04-22

    #Elasticsearch#面试

  • 2-分布式搜索引擎的架构是如何设计的

    2019-04-21

    #Elasticsearch#面试

  • 1-面试官对分布式搜索引擎的4个连环炮

    2019-04-20

    #Elasticsearch#面试

  • 8-如何设计一个消息队列

    2019-04-10

    #面试#MQ

  • 7-消息队列如何解决延迟_过期失效_积压消息等问题

    2019-04-10

    #面试#MQ

  • JWT学习

    2019-04-09

    #Java#Jwt

  • 6-消息队列如何保证消息的顺序性

    2019-04-08

    #面试#MQ

  • 5-消息队列如何保证可靠性传输(消息丢了怎么办)

    2019-04-07

    #面试#MQ

  • 4-消息队列消费到重复数据怎么办

    2019-04-06

    #面试#MQ

  • 3-消息队列如何保证高可用性

    2019-04-03

    #面试#MQ

  • 2-消息队列引入原原因_优缺点_应用场景_技术选型

    2019-04-02

    #面试#MQ

  • 1-面试官对消息队列的10个连环炮

    2019-04-01

    #面试#MQ

  • Git常见200+条命令

    2019-03-28

    #Git

  • 8-GitLab简单操作

    2019-03-25

    #Git

  • 31-Trie树_如何实现搜索引擎的搜索关键词提示功能

    2019-03-12

    #算法

  • 7-基于GitHub进行团队协作

    2019-03-09

    #Git

  • 30-字符串匹配基础下_如何借助BM算法轻松理解KMP算法

    2019-03-06

    #算法

  • 29-字符串匹配基础中_如何实现文本编辑器中的查找功能

    2019-03-03

    #算法

  • 28-字符串匹配基础上_如何借助哈希算法实现高效字符串匹配

    2019-03-01

    #算法

  • 6-GitHub的认识与使用

    2019-02-25

    #Git

  • 5-Git集成使用禁忌

    2019-02-15

    #Git

  • 27-深度和广度优先搜索_如何找出社交网络中的三度好友关系

    2019-02-13

    #算法

  • 26-图的表示_如何存储微博微信等社交网络中的好友关系

    2019-02-10

    #算法

  • 国内地图坐标系转换

    2019-02-08

    #地图坐标转换

  • 4-Git多人单分支集成协作时的常见场景

    2019-02-08

    #Git

  • 微服务架构-下篇

    2019-02-06

    #系统架构

  • 微服务架构-中篇

    2019-02-03

    #系统架构

  • 微服务架构-上篇

    2019-02-01

    #系统架构

  • Python数据分析工具

    2019-01-30

    #Python

  • Python高级篇

    2019-01-29

    #Python

  • Python中级篇_下

    2019-01-28

    #Python

  • Python中级篇_上

    2019-01-27

    #Python

  • Python初级篇

    2019-01-26

    #Python

  • Python前世今生

    2019-01-25

    #Python

  • 源码分析-MyBatis数据源与连接池

    2019-01-23

    #MyBatis

  • MyBatis初始化做了什么

    2019-01-21

    #MyBatis

  • 3-Git与GitHub简单同步

    2019-01-20

    #Git

  • 2-Git常用场景

    2019-01-18

    #Git

  • 1-Git安装及简单操作

    2019-01-15

    #Git

  • SpringCloud探索与实战

    2019-01-13

    #SpringCloud

  • MyBatis架构与原理

    2019-01-09

    #MyBatis

  • MyBatis原理概括

    2019-01-08

    #MyBatis

  • MyBatis多数据源配置

    2019-01-07

    #MyBatis

  • JVM(八):Jvm知识点概览

    2019-01-06

    #Jvm

  • JVM(七):Jvm调优-工具

    2019-01-05

    #Tools#Jvm

  • JVM(六):Java服务GC参数调优案例

    2019-01-03

    #Jvm

  • JVM(五):GC分析

    2019-01-02

    #Jvm

  • JVM(四):Jvm调优-命令

    2019-01-01

    #Jvm

  • JVM(三):GC算法_垃圾收集器

    2019-01-01

    #Jvm

  • 25-堆的应用_如何获取Top10最热门的搜索关键词

    2018-12-30

    #算法

  • 24-堆和堆排序_为什么说堆排序没有快速排序快

    2018-12-29

    #算法

  • 23-递归树_如何借助树来求解递归算法的时间复杂度

    2018-12-27

    #算法

  • 22-红黑树下_实现红黑树的技巧

    2018-12-25

    #算法

  • 21-红黑树上_为什么工程中都用红黑树这种二叉树

    2018-12-23

    #算法

  • 应用架构演变过程

    2018-12-20

    #Photo

  • MyBatis常用插件

    2018-12-14

    #MyBatis

  • JVM(二):Jvm内存结构

    2018-12-11

    #Jvm

  • JVM(一):Java类加载机制

    2018-12-10

    #Jvm

  • Map-Reduce学习

    2018-11-20

    #BigData

  • 20-二叉树基础下_有了如此高效的散列表—_为什么还需要二叉树

    2018-11-18

    #算法

  • 19-二叉树基础上_什么样的二叉树适合用数组来存储

    2018-11-16

    #算法

  • 18-哈希算法下_哈希算法在分布式系统中有哪些应用

    2018-11-15

    #算法

  • 17-哈希算法上_如何防止数据库中的用户信息被脱库

    2018-11-13

    #算法

  • Hadoop学习

    2018-11-10

    #BigData

  • 16-散列表下_为什么散列表和链表经常一起使用

    2018-11-09

    #算法

  • 15-散列表中_如何打造一个工业级水平的散列表

    2018-11-09

    #算法

  • 14-散列表上_Word文档中的单词拼写检查功能如何实现

    2018-11-08

    #算法

  • 13-跳表_为什么Redis一定要用跳表来实现有序集合

    2018-11-06

    #算法

  • 12-二分查找下_如何快速定位IP对应的省份地址

    2018-11-04

    #算法

  • 11-二分查找上_如何用最省内存的方式实现快速查找功能

    2018-11-02

    #算法

  • 10-排序优化_如何实现一个通用的高性能的排序函数

    2018-11-01

    #算法

  • 9-线性排序_如何根据年龄给100万用户数据排序

    2018-10-28

    #算法

  • 8-排序下_如何用快排思想在O(n)内查找第K大元素

    2018-10-24

    #算法

  • 7-排序上_为什么插入排序比冒泡排序更受欢迎

    2018-10-22

    #算法

  • 6-递归_如何用三行代码找到最终推荐人

    2018-10-20

    #算法

  • 高性能队列-Disruptor

    2018-10-18

    #MQ#Java

  • 5-队列_队列在线程池等有限资源池中的应用

    2018-10-16

    #算法

  • 4-栈_如何实现浏览器的前进和后退功能

    2018-10-13

    #算法

  • Quartz学习

    2018-10-09

    #Java#定时任务#Quartz

  • 3-链表下_如何轻松写出正确的链表代码

    2018-10-06

    #算法

  • 2-链表上_如何实现LRU缓存淘汰算法

    2018-10-06

    #算法

  • 1-数组_为什么很多编程语言中数组都从0开始编号

    2018-10-02

    #算法

  • 复杂度分析-下部

    2018-09-29

    #算法

  • 复杂度分析-上部

    2018-09-28

    #算法

  • 数据结构与算法概览

    2018-09-26

    #算法

  • 请求与响应

    2018-09-17

    #HTTP

  • TextRank基本了解

    2018-09-01

    #算法

  • (5)Hexo踩坑_主题优化

    2018-08-21

    #Hexo-yilia

  • (4)Hexo撰写文章

    2018-08-19

    #Hexo-yilia

  • (3)Hexo常用命令详解

    2018-08-19

    #Hexo-yilia

  • (2)Hexo配置文件详解

    2018-08-17

    #Hexo-yilia

  • 关于Firewalld二三事

    2018-08-15

    #Linux

  • (1)Hexo博客搭建

    2018-08-11

    #Hexo-yilia

  • 修改Vim_tab为4个空格

    2018-08-06

    #Linux

  • CentOs7防火墙开端口测试

    2018-08-01

    #Linux

  • 10-Redis的并发竞争问题及生产环境集群部署架构

    2018-07-30

    #面试#Redis

  • 9-如何保证缓存与数据库双写时的数据一致性

    2018-07-29

    #面试#Redis

  • 8-如何应对缓存雪崩及穿透问题

    2018-07-28

    #面试#Redis

  • 7-Redis集群模式原理

    2018-07-26

    #面试#Redis

  • Redis所需安装包及各种依赖

    2018-07-25

    #Redis

  • 6-Redis挂掉重启后数据如何进行恢复

    2018-07-24

    #面试#Redis

  • 5-Redis高并发高可用有关问题

    2018-07-21

    #面试#Redis

  • 4-Redis过期策略_手写LRU

    2018-07-19

    #面试#Redis

  • 3-Redis常用数据类型及使用场景

    2018-07-18

    #面试#Redis

  • 2-Redis线程模型_单线程效率高的原因

    2018-07-17

    #面试#Redis

  • 1-项目中缓存如何使用

    2018-07-16

    #面试#Redis

  • AWK三剑客

    2018-07-15

    #Linux

  • Maven插件-assembly插件基本使用

    2018-06-28

    #Java#Maven

  • Maven知多少

    2018-06-27

    #Java#Maven

  • 1-分库分表知多少

    2018-06-25

    #面试#MySql

  • MySQL基本用法

    2018-06-21

    #MySql

  • MySQL安装

    2018-06-20

    #MySql

  • Swagger2学习与集成

    2018-05-20

    #SpringBoot#Swagger2

  • SpringBoot面试

    2018-05-16

    #面试#SpringBoot

  • SpringBoot+Docker简单配置

    2018-05-15

    #Docker#SpringBoot

  • Java定时任务

    2018-05-13

    #Java#定时任务

  • Netty知多少

    2018-05-05

    #网络编程

  • Java编程瞎侃

    2018-04-18

    #Java

  • Vim常用操作

    2018-03-25

    #Linux

  • Linux定时任务Crontab详解

    2018-03-23

    #Linux

  • Linux常用插件及乱码

    2018-03-20

    #Linux

  • Linux安装常用软件

    2018-03-19

    #Linux

  • Idea常用插件及个性化配置

    2018-03-18

    #Tools#IDEA

  • Host-Vm相互ping不同到的解决办法

    2018-03-16

    #Linux

  • GitHub
  • 廖雪峰
  • 纯洁的微笑
  • 我没有三颗心脏
  • 阿里巴巴开源镜像网站
一个脱离了高级趣味的人!