Allen

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

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

Allen

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

  • HomePage
  • Categories
  • Archives
  • Essay
  • Tags

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

阅读数:89次 2019-08-29
字数统计: 4.6k字   |   阅读时长: 16分

文章导航

× 文章目录
  1. 1. 前言
  2. 2. 1. 基于位点的主备切换
  3. 3. 2. GTID
  4. 4. 3. 基于GTID的主备切换
  5. 5. 4. GTID和在线DDL
  6. 6. 5. 小结
  7. 7. 6. 思考

学习来源:极客时间-MySQL实战45讲,本人购买课程后依据图文讲解汇总成个人见解。

前言

在前面的 第24、25和26篇 文章中,介绍了MySQL主备复制的基础结构,但这些都是一主一备的结构。

大多数的互联网应用场景都是读多写少,因此你负责的业务,在发展过程中很可能先会遇到读性能的问题。而在数据库层解决读性能问题,就要涉及到接下来两篇文章要讨论的架构:一主多从。

今天这篇文章,我们就先聊聊一主多从的切换正确性。然后,我们在下一篇文章中再聊聊解决一主多从的查询逻辑正确性的方法。

如图1所示,就是一个基本的一主多从结构。

图中,虚线箭头表示的是主备关系,也就是A和A’互为主备, 从库B、C、D指向的是主库A。一主多从的设置,一般用于读写分离,主库负责所有的写入和一部分读,其他的读请求则由从库分担。

今天我们要讨论的就是,在一主多从架构下,主库故障后的主备切换问题。

如图2所示,就是主库发生故障,主备切换后的结果。

相比于一主一备的切换流程,一主多从结构在切换完成后,A’会成为新的主库,从库B、C、D也要改接到A’。正是由于多了从库B、C、D重新指向的这个过程,所以主备切换的复杂性也相应增加了。

接下来,我们再一起看看一个切换系统会怎么完成一主多从的主备切换过程。

1. 基于位点的主备切换

这里,我们需要先来回顾一个知识点。

当我们把节点B设置成节点A’的从库的时候,需要执行一条change master命令:

1
2
3
4
5
6
7
CHANGE MASTER TO 
MASTER_HOST=$host_name
MASTER_PORT=$port
MASTER_USER=$user_name
MASTER_PASSWORD=$password
MASTER_LOG_FILE=$master_log_name
MASTER_LOG_POS=$master_log_pos

这条命令有这么6个参数:

  • MASTER_HOST、MASTER_PORT、MASTER_USER和MASTER_PASSWORD四个参数,分别代表了主库A’的IP、端口、用户名和密码。
  • 最后两个参数MASTER_LOG_FILE和MASTER_LOG_POS表示,要从主库的master_log_name文件的master_log_pos这个位置的日志继续同步。而这个位置就是我们所说的同步位点,也就是主库对应的文件名和日志偏移量。

那么,这里就有一个问题了,节点B要设置成A’的从库,就要执行change master命令,就不可避免地要设置位点的这两个参数,但是这两个参数到底应该怎么设置呢?

原来节点B是A的从库,本地记录的也是A的位点。但是相同的日志,A的位点和A’的位点是不同的。因此,从库B要切换的时候,就需要先经过“找同步位点”这个逻辑。

这个位点很难精确取到,只能取一个大概位置。为什么这么说呢?

我来和你分析一下看看这个位点一般是怎么获取到的,你就清楚其中不精确的原因了。

考虑到切换过程中不能丢数据,所以我们找位点的时候,总是要找一个“稍微往前”的,然后再通过判断跳过那些在从库B上已经执行过的事务。

一种取同步位点的方法是这样的:

  1. 等待新主库A’把中转日志(relay log)全部同步完成;

  2. 在A’上执行show master status命令,得到当前A’上最新的File 和 Position;

  3. 取原主库A故障的时刻T;

  4. 用mysqlbinlog工具解析A’的File,得到T时刻的位点。

1
mysqlbinlog File --stop-datetime=T --start-datetime=T

图中,end_log_pos后面的值“123”,表示的就是A’这个实例,在T时刻写入新的binlog的位置。然后,我们就可以把123这个值作为$master_log_pos ,用在节点B的change master命令里。

当然这个值并不精确。为什么呢?

你可以设想有这么一种情况,假设在T这个时刻,主库A已经执行完成了一个insert 语句插入了一行数据R,并且已经将binlog传给了A’和B,然后在传完的瞬间主库A的主机就掉电了。

那么,这时候系统的状态是这样的:

  1. 在从库B上,由于同步了binlog, R这一行已经存在;

  2. 在新主库A’上, R这一行也已经存在,日志是写在123这个位置之后的;

  3. 我们在从库B上执行change master命令,指向A’的File文件的123位置,就会把插入R这一行数据的binlog又同步到从库B去执行。

这时候,从库B的同步线程就会报告 Duplicate entry ‘id_of_R’ for key ‘PRIMARY’ 错误,提示出现了主键冲突,然后停止同步。

所以,通常情况下,我们在切换任务的时候,要先主动跳过这些错误,有两种常用的方法。

一种做法是,主动跳过一个事务。跳过命令的写法是:

1
2
3
set global sql_slave_skip_counter=1; 

start slave;

因为切换过程中,可能会不止重复执行一个事务,所以我们需要在从库B刚开始接到新主库A’时,持续观察,每次碰到这些错误就停下来,执行一次跳过命令,直到不再出现停下来的情况,以此来跳过可能涉及的所有事务。

另外一种方式是,通过设置slave_skip_errors参数,直接设置跳过指定的错误。

在执行主备切换时,有这么两类错误,是经常会遇到的:

  • 1062错误是插入数据时唯一键冲突;
  • 1032错误是删除数据时找不到行。

因此,我们可以把slave_skip_errors 设置为 “1032,1062”,这样中间碰到这两个错误时就直接跳过。

这里需要注意的是,这种直接跳过指定错误的方法,针对的是主备切换时,由于找不到精确的同步位点,所以只能采用这种方法来创建从库和新主库的主备关系。

这个背景是,我们很清楚在主备切换过程中,直接跳过1032和1062这两类错误是无损的,所以才可以这么设置slave_skip_errors参数。等到主备间的同步关系建立完成,并稳定执行一段时间之后,我们还需要把这个参数设置为空,以免之后真的出现了主从数据不一致,也跳过了。

2. GTID

通过sql_slave_skip_counter跳过事务和通过slave_skip_errors忽略错误的方法,虽然都最终可以建立从库B和新主库A’的主备关系,但这两种操作都很复杂,而且容易出错。所以,MySQL 5.6版本引入了GTID,彻底解决了这个困难。

那么,GTID到底是什么意思,又是如何解决找同步位点这个问题呢?现在,我就和你简单介绍一下。

GTID的全称是Global Transaction Identifier,也就是全局事务ID,是一个事务在提交的时候生成的,是这个事务的唯一标识。它由两部分组成,格式是:

1
GTID=server_uuid:gno

其中:

  • server_uuid是一个实例第一次启动时自动生成的,是一个全局唯一的值;
  • gno是一个整数,初始值是1,每次提交事务的时候分配给这个事务,并加1。

这里我需要和你说明一下,在MySQL的官方文档里,GTID格式是这么定义的:

1
GTID=source_id:transaction_id

这里的source_id就是server_uuid;而后面的这个transaction_id,我觉得容易造成误导,所以我改成了gno。为什么说使用transaction_id容易造成误解呢?

因为,在MySQL里面我们说transaction_id就是指事务id,事务id是在事务执行过程中分配的,如果这个事务回滚了,事务id也会递增,而gno是在事务提交的时候才会分配。

从效果上看,GTID往往是连续的,因此我们用gno来表示更容易理解。

GTID模式的启动也很简单,我们只需要在启动一个MySQL实例的时候,加上参数gtid_mode=on和enforce_gtid_consistency=on就可以了。

在GTID模式下,每个事务都会跟一个GTID一一对应。这个GTID有两种生成方式,而使用哪种方式取决于session变量gtid_next的值。

  1. 如果gtid_next=automatic,代表使用默认值。这时,MySQL就会把server_uuid:gno分配给这个事务。
    a. 记录binlog的时候,先记录一行 SET @@SESSION.GTID_NEXT=‘server_uuid:gno’;
    b. 把这个GTID加入本实例的GTID集合。

  2. 如果gtid_next是一个指定的GTID的值,比如通过set gtid_next=’current_gtid’指定为current_gtid,那么就有两种可能:
    a. 如果current_gtid已经存在于实例的GTID集合中,接下来执行的这个事务会直接被系统忽略;
    b. 如果current_gtid没有存在于实例的GTID集合中,就将这个current_gtid分配给接下来要执行的事务,也就是说系统不需要给这个事务生成新的GTID,因此gno也不用加1。

注意,一个current_gtid只能给一个事务使用。这个事务提交后,如果要执行下一个事务,就要执行set 命令,把gtid_next设置成另外一个gtid或者automatic。

这样,每个MySQL实例都维护了一个GTID集合,用来对应“这个实例执行过的所有事务”。

这样看上去不太容易理解,接下来我就用一个简单的例子,来和你说明GTID的基本用法。

我们在实例X中创建一个表t。

1
2
3
4
5
6
7
CREATE TABLE `t` ( 
`id` int(11) NOT NULL,
`c` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;

insert into t values(1,1);

可以看到,事务的BEGIN之前有一条SET @@SESSION.GTID_NEXT命令。这时,如果实例X有从库,那么将CREATE TABLE和insert语句的binlog同步过去执行的话,执行事务之前就会先执行这两个SET命令, 这样被加入从库的GTID集合的,就是图中的这两个GTID。

假设,现在这个实例X是另外一个实例Y的从库,并且此时在实例Y上执行了下面这条插入语句:

1
insert into t values(1,1);

并且,这条语句在实例Y上的GTID是 “aaaaaaaa-cccc-dddd-eeee-ffffffffffff:10”。

那么,实例X作为Y的从库,就要同步这个事务过来执行,显然会出现主键冲突,导致实例X的同步线程停止。这时,我们应该怎么处理呢?

处理方法就是,你可以执行下面的这个语句序列:

1
2
3
4
5
set gtid_next='aaaaaaaa-cccc-dddd-eeee-ffffffffffff:10'; 
begin;
commit;
set gtid_next=automatic;
start slave;

其中,前三条语句的作用,是通过提交一个空事务,把这个GTID加到实例X的GTID集合中。如图5所示,就是执行完这个空事务之后的show master status的结果。

可以看到实例X的Executed_Gtid_set里面,已经加入了这个GTID。

这样,我再执行start slave命令让同步线程执行起来的时候,虽然实例X上还是会继续执行实例Y传过来的事务,但是由于“aaaaaaaa-cccc-dddd-eeee-ffffffffffff:10”已经存在于实例X的GTID集合中了,所以实例X就会直接跳过这个事务,也就不会再出现主键冲突的错误。

在上面的这个语句序列中,start slave命令之前还有一句set gtid_next=automatic。这句话的作用是“恢复GTID的默认分配行为”,也就是说如果之后有新的事务再执行,就还是按照原来的分配方式,继续分配gno=3。

3. 基于GTID的主备切换

现在,我们已经理解GTID的概念,再一起来看看基于GTID的主备复制的用法。

在GTID模式下,备库B要设置为新主库A’的从库的语法如下:

1
2
3
4
5
6
CHANGE MASTER TO
MASTER_HOST=$host_name
MASTER_PORT=$port
MASTER_USER=$user_name
MASTER_PASSWORD=$password
master_auto_position=1

其中,master_auto_position=1就表示这个主备关系使用的是GTID协议。可以看到,前面让我们头疼不已的MASTER_LOG_FILE和MASTER_LOG_POS参数,已经不需要指定了。

我们把现在这个时刻,实例A’的GTID集合记为set_a,实例B的GTID集合记为set_b。接下来,我们就看看现在的主备切换逻辑。

我们在实例B上执行start slave命令,取binlog的逻辑是这样的:

  1. 实例B指定主库A’,基于主备协议建立连接。

  2. 实例B把set_b发给主库A’。

  3. 实例A’算出set_a与set_b的差集,也就是所有存在于set_a,但是不存在于set_b的GITD的集合,判断A’本地是否包含了这个差集需要的所有binlog事务。
    a. 如果不包含,表示A’已经把实例B需要的binlog给删掉了,直接返回错误;
    b. 如果确认全部包含,A’从自己的binlog文件里面,找出第一个不在set_b的事务,发给B;

  4. 之后就从这个事务开始,往后读文件,按顺序取binlog发给B去执行。

其实,这个逻辑里面包含了一个设计思想:在基于GTID的主备关系里,系统认为只要建立主备关系,就必须保证主库发给备库的日志是完整的。因此,如果实例B需要的日志已经不存在,A’就拒绝把日志发给B。

这跟基于位点的主备协议不同。基于位点的协议,是由备库决定的,备库指定哪个位点,主库就发哪个位点,不做日志的完整性判断。

基于上面的介绍,我们再来看看引入GTID后,一主多从的切换场景下,主备切换是如何实现的。

由于不需要找位点了,所以从库B、C、D只需要分别执行change master命令指向实例A’即可。

其实,严谨地说,主备切换不是不需要找位点了,而是找位点这个工作,在实例A’内部就已经自动完成了。但由于这个工作是自动的,所以对HA系统的开发人员来说,非常友好。

之后这个系统就由新主库A’写入,主库A’的自己生成的binlog中的GTID集合格式是:server_uuid_of_A’:1-M。

如果之前从库B的GTID集合格式是 server_uuid_of_A:1-N, 那么切换之后GTID集合的格式就变成了server_uuid_of_A:1-N, server_uuid_of_A’:1-M。

当然,主库A’之前也是A的备库,因此主库A’和从库B的GTID集合是一样的。这就达到了我们预期。

4. GTID和在线DDL

接下来,我再举个例子帮你理解GTID。

之前在 第22篇文章《MySQL有哪些“饮鸩止渴”提高性能的方法?》中,我和你提到业务高峰期的慢查询性能问题时,分析到如果是由于索引缺失引起的性能问题,我们可以通过在线加索引来解决。但是,考虑到要避免新增索引对主库性能造成的影响,我们可以先在备库加索引,然后再切换。

当时我说,在双M结构下,备库执行的DDL语句也会传给主库,为了避免传回后对主库造成影响,要通过set sql_log_bin=off关掉binlog。

有人会提出这样的问题:这样操作的话,数据库里面是加了索引,但是binlog并没有记录下这一个更新,是不是会导致数据和日志不一致?

这个问题提得非常好。引用GTID来说明。

假设,这两个互为主备关系的库还是实例X和实例Y,且当前主库是X,并且都打开了GTID模式。这时的主备切换流程可以变成下面这样:

  • 在实例X上执行stop slave。

  • 在实例Y上执行DDL语句。注意,这里并不需要关闭binlog。

  • 执行完成后,查出这个DDL语句对应的GTID,并记为 server_uuid_of_Y:gno。

  • 到实例X上执行以下语句序列:

1
2
3
4
5
set GTID_NEXT="server_uuid_of_Y:gno";
begin;
commit;
set gtid_next=automatic;
start slave;

这样做的目的在于,既可以让实例Y的更新有binlog记录,同时也可以确保不会在实例X上执行这条更新。

  • 接下来,执行完主备切换,然后照着上述流程再执行一遍即可。

5. 小结

在今天这篇文章中,先介绍了一主多从的主备切换流程。在这个过程中,从库找新主库的位点是一个痛点。由此,我们引出了MySQL 5.6版本引入的GTID模式,介绍了GTID的基本概念和用法。

可以看到,在GTID模式下,一主多从切换就非常方便了。

因此,如果你使用的MySQL版本支持GTID的话,建议尽量使用GTID模式来做一主多从的切换。

在下一篇文章中,我们还能看到GTID模式在读写分离场景的应用。

6. 思考

你在GTID模式下设置主从关系的时候,从库执行start slave命令后,主库发现需要的binlog已经被删除掉了,导致主备创建不成功。这种情况下,你觉得可以怎么处理呢?

即 在GTID模式下,如果一个新的从库接上主库,但是需要的binlog已经没了,要怎么做?

回答:

  1. 如果业务允许主从不一致的情况,那么可以在主库上先执行show global variables like ‘gtid_purged’,得到主库已经删除的GTID集合,假设是gtid_purged1;然后先在从库上执行reset master,再执行set global gtid_purged =‘gtid_purged1’;最后执行start slave,就会从主库现存的binlog开始同步。binlog缺失的那一部分,数据在从库上就可能会有丢失,造成主从不一致。

  2. 如果需要主从数据一致的话,最好还是通过重新搭建从库来做。

  3. 如果有其他的从库保留有全量的binlog的话,可以把新的从库先接到这个保留了全量binlog的从库,追上日志以后,如果有需要,再接回主库。

  4. 如果binlog有备份的情况,可以先在从库上应用缺失的binlog,然后再执行start slave。

  • MySql
  • MySql

扫一扫,分享到微信

微信分享二维码
49-算法实战(二)_剖析搜索引擎背后的经典数据结构和算法
26-备库为什么会延迟好几个小时
  1. 1. 前言
  2. 2. 1. 基于位点的主备切换
  3. 3. 2. GTID
  4. 4. 3. 基于GTID的主备切换
  5. 5. 4. GTID和在线DDL
  6. 6. 5. 小结
  7. 7. 6. 思考

Related Issues not found

Please contact @JavaSsun to initialize the comment

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

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