<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[营长的博客]]></title><description><![CDATA[营长的博客]]></description><link>https://blog.youkuaiyun.com/wang992997290</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; wang992997290]]></copyright><item><title><![CDATA[第五章-并行模式与算法]]></title><link>https://blog.youkuaiyun.com/wang992997290/article/details/104887429</link><guid>https://blog.youkuaiyun.com/wang992997290/article/details/104887429</guid><author>wang992997290</author><pubDate>Sun, 15 Mar 2020 21:54:30 +0800</pubDate><description><![CDATA[5.1　探讨单例模式 209
单例模式非常常见，我们不可避免会在多线程环境中使用它们。并且，系统中使用单例的地方可能非常频繁，因此我们非常迫切地需要一种高效的单例实现。
第一种实现方式(饿汉式)
public class Singleton 
private Singleton(){
System.out.println("Singleton is create");
private static...]]></description><category></category></item><item><title><![CDATA[第十五章-复制]]></title><link>https://blog.youkuaiyun.com/wang992997290/article/details/104851220</link><guid>https://blog.youkuaiyun.com/wang992997290/article/details/104851220</guid><author>wang992997290</author><pubDate>Fri, 13 Mar 2020 22:25:37 +0800</pubDate><description><![CDATA[可以通过执行SLAVEOF命令或者设置slaveof选项，让一个服务器去复制（replicate）另一个服务器。如：
127.0.0.1:12345&gt; SLAVEOF 127.0.0.1 6379
OK

进行复制中的主从服务器双方的数据库将始终保存相同的数据，概念上将这种现象称作“数据库状态一致”，或者简称“一致”。
15.1旧版复制功能的实现
Redis的复制功能分为同步（sync）和命...]]></description><category></category></item><item><title><![CDATA[第九章-数据库]]></title><link>https://blog.youkuaiyun.com/wang992997290/article/details/104833535</link><guid>https://blog.youkuaiyun.com/wang992997290/article/details/104833535</guid><author>wang992997290</author><pubDate>Fri, 13 Mar 2020 08:53:33 +0800</pubDate><description><![CDATA[9.1 服务器中的数据库 90
所有数据库都保存在服务器状态redisServer结构的db数组中：
struct redisServer {    
  // ...    
  redisDb *db;  // 一个数组，保存着服务器中的所有数据库 
  int dbnum;     //服务器的数据库数量
  // ...
};

dbnum属性来决定应该创建多少个数据库（默认16个），可以...]]></description><category></category></item><item><title><![CDATA[第十一章-AOF持久化]]></title><link>https://blog.youkuaiyun.com/wang992997290/article/details/104833525</link><guid>https://blog.youkuaiyun.com/wang992997290/article/details/104833525</guid><author>wang992997290</author><pubDate>Fri, 13 Mar 2020 08:53:06 +0800</pubDate><description><![CDATA[与RDB不同，AOF持久化是通过保存Redis服务器所执行的写命令来记录数据库状态的。被写入AOF文件的所有命令都是以Redis的命令请求协议格式保存的。服务器在启动时，可以通过载入和执行AOF文件中保存的命令来还原服务器关闭之前的数据库状态。
11.1AOF持久化的实现
AOF持久化功能的实现可以分为命令追加( append)、文件写入、文件同步( sync)三个步骤。
11.1.1命令追加

...]]></description><category></category></item><item><title><![CDATA[第十章-RDB持久化]]></title><link>https://blog.youkuaiyun.com/wang992997290/article/details/104833515</link><guid>https://blog.youkuaiyun.com/wang992997290/article/details/104833515</guid><author>wang992997290</author><pubDate>Fri, 13 Mar 2020 08:52:27 +0800</pubDate><description><![CDATA[因为Redis是内存数据库，它将自己的数据库状态储存在内存里面，所以如果不想办法将储存在内存中的数据库状态保存到磁盘里面，那么一旦服务器进程退出，服务器中的数据库状态也会消失不见。
为了解决这个问题，Redis 提供了RDB持久化功能，这个功能可以将Redis在内存中的数据库状态保存到磁盘里面，避免数据意外丢失。
RDB持久化既可以手动执行，也可以根据服务器配置选项定期执行，该功能可以将某个时间点...]]></description><category></category></item><item><title><![CDATA[第五章-跳跃表]]></title><link>https://blog.youkuaiyun.com/wang992997290/article/details/104034298</link><guid>https://blog.youkuaiyun.com/wang992997290/article/details/104034298</guid><author>wang992997290</author><pubDate>Sat, 18 Jan 2020 22:00:24 +0800</pubDate><description><![CDATA[跳跃表（skiplist）是一种有序数据结构，它通过在每个节点中维持多个指向其他节点的指针，从而达到快速访问节点的目的。支持平均O（logN）、最坏O（N）复杂度的节点查找，还可以通过顺序性操作来批量处理节点。
Redis只在两个地方用到了跳跃表，一个是实现有序集合键，另一个是在集群节点中用作内部数据结构。
5.1 跳跃表的实现 39
Redis的跳跃表由redis. h/ zskiplistNo...]]></description><category></category></item><item><title><![CDATA[第四章-字典]]></title><link>https://blog.youkuaiyun.com/wang992997290/article/details/104024636</link><guid>https://blog.youkuaiyun.com/wang992997290/article/details/104024636</guid><author>wang992997290</author><pubDate>Fri, 17 Jan 2020 20:44:14 +0800</pubDate><description><![CDATA[字典，又称为符号表( symbol table )、关联数组( associative array )或映射(map), 是一种用于保存键值对( key-value pair )的抽象数据结构。
4.1 字典的实现 24
Redis的字典使用哈希表作为底层实现，一个哈希表里面可以有多个哈希表节点，而每个哈希表节点就保存了字典中的一个键值对。
4.1.1哈希表
// 哈希表
typedef stru...]]></description><category></category></item><item><title><![CDATA[第三章-链表]]></title><link>https://blog.youkuaiyun.com/wang992997290/article/details/104011283</link><guid>https://blog.youkuaiyun.com/wang992997290/article/details/104011283</guid><author>wang992997290</author><pubDate>Thu, 16 Jan 2020 21:19:26 +0800</pubDate><description><![CDATA[Redis中除了链表键之外，发布与订阅、慢查询、监视器等功能也用到了链表，Redis服务器本身还使用链表来保存多个客户端的状态信息，以及使用链表来构建客户端输出缓冲区。
3.1 链表和链表节点的实现 20
// 链表节点定义
typedef struct listNode {    
  struct listNode * prev; // 前置节点 
  struct listNode * ne...]]></description><category></category></item><item><title><![CDATA[第二章-简单动态字符串]]></title><link>https://blog.youkuaiyun.com/wang992997290/article/details/104011272</link><guid>https://blog.youkuaiyun.com/wang992997290/article/details/104011272</guid><author>wang992997290</author><pubDate>Thu, 16 Jan 2020 21:19:04 +0800</pubDate><description><![CDATA[在Redis的数据库里面，包含字符串值的键值对（注意，键也是）在底层都是由SDS实现的。（在Redis源码里，C字符串只会作为字符串字面量用在一些无须对字符串值进行修改的地方，比如打印日志）。如：
redis&gt; SET msg "hello world"
OK

Redis将在数据库中创建一个新的键值对，其中键是一个字符串对象，对象的底层实现是一个保存着字符串“msg”的SDS。值也是一个字...]]></description><category></category></item><item><title><![CDATA[第四章-锁的优化及注意事项]]></title><link>https://blog.youkuaiyun.com/wang992997290/article/details/103946641</link><guid>https://blog.youkuaiyun.com/wang992997290/article/details/103946641</guid><author>wang992997290</author><pubDate>Sun, 12 Jan 2020 16:00:26 +0800</pubDate><description><![CDATA[4.1　有助于提高锁性能的几点建议 162
4.1.1　减少锁持有时间 162

系统持有锁时间越长锁竞争程度就越激烈，只对需要同步的代码块加锁，可以减小锁持有时间进而提高锁性能。
减少锁的持有时间有助于降低锁冲突的可能性，进而提高锁的并发能力。

4.1.2　减小锁粒度 163
减小锁粒度就是指缩小锁定对象的范围，从而减小锁冲突的可能性，进而提高并发能力。
例如：如ConcurrentHashM...]]></description><category></category></item><item><title><![CDATA[第三章-JDK并发包]]></title><link>https://blog.youkuaiyun.com/wang992997290/article/details/103914101</link><guid>https://blog.youkuaiyun.com/wang992997290/article/details/103914101</guid><author>wang992997290</author><pubDate>Thu, 09 Jan 2020 18:59:09 +0800</pubDate><description><![CDATA[为了更好地支持并发程序，JDK内部提供了大量实用的API和框架。本章主要介绍这些JDK内部的功能，其主要分为三大部分:

同步控制工具
JDK对线程池的支持
JDK的一些并发容器

3.1　多线程的团队协作：同步控制 71
同步控制是并发程序必不可少的重要手段。
下面我们首先将介绍关键字synchronized、Object.wait()方 法和Object.notify()
方法的替代品(或者说...]]></description><category></category></item><item><title><![CDATA[第二十八章-安全管理]]></title><link>https://blog.youkuaiyun.com/wang992997290/article/details/103899246</link><guid>https://blog.youkuaiyun.com/wang992997290/article/details/103899246</guid><author>wang992997290</author><pubDate>Wed, 08 Jan 2020 22:26:00 +0800</pubDate><description><![CDATA[28.1访问控制
用户不能对过多的数据具有过多的访问权。
在现实世界的日常工作中，决不能使用root。应该创建一系列的账号，有的用于管理，有的供用户使用，有的供开发人员使用，等等。
28.2管理用户
MySQL用户账号和信息存储在名为mysql的MySQL数据库中。
28.2.1创建用户账号
创建一个新用户账号
CREATE USER ben IDENTIFIED  BY '123456' ;

...]]></description><category></category></item><item><title><![CDATA[第八章-备份与恢复]]></title><link>https://blog.youkuaiyun.com/wang992997290/article/details/103875168</link><guid>https://blog.youkuaiyun.com/wang992997290/article/details/103875168</guid><author>wang992997290</author><pubDate>Tue, 07 Jan 2020 15:17:57 +0800</pubDate><description><![CDATA[8.1 备份与恢复概述 350
按备份的方法分：

HOT BACKUP（热备）：在数据库运行时备份，对正在运行的数据库的操作没有影响。
备份工具：ibbackup、XtraBackup
COLD BACKUP（冷备）：在数据库停止时备份。
WARM BACKUP（温备）在数据库运行时备份，对正在运行的数据库的操作有影响。

按备份后文件的内容分：

逻辑备份：内容一般是SQL语句或是表内实际数据...]]></description><category></category></item><item><title><![CDATA[第二十七章-全球化和本地化]]></title><link>https://blog.youkuaiyun.com/wang992997290/article/details/103875138</link><guid>https://blog.youkuaiyun.com/wang992997290/article/details/103875138</guid><author>wang992997290</author><pubDate>Tue, 07 Jan 2020 15:16:34 +0800</pubDate><description><![CDATA[27.1 字符集和校对顺序
数据库表被用来存储和检索数据。不同的语言和字符集需要以不同的方式存储和检索。因此，MySQL需要适应不同的字符集（不同的字母和字符），适应不同的排序和检索数据的方法。
在讨论多种语言和字符集时，将会遇到以下重要术语：

字符集：字母和符号的集合；
编码：某个字符集成员的内部表示；
校对：规定字符如何比较的指令。

使用何种字符集和校对的决定在服务器、数据库和表级进行。
...]]></description><category></category></item><item><title><![CDATA[第二十六章-管理事务处理]]></title><link>https://blog.youkuaiyun.com/wang992997290/article/details/103866734</link><guid>https://blog.youkuaiyun.com/wang992997290/article/details/103866734</guid><author>wang992997290</author><pubDate>Mon, 06 Jan 2020 23:34:30 +0800</pubDate><description><![CDATA[MyISAM和InnoDB是两种最常使用
的引擎。前者不支持明确的事务处理管理，而后者支持。
26.1事务处理
MyISAM不支持明确的事务处理管理，InnoDB支持。
事务处理是一种机制，用来管理必须成批执行的MySQL操作，以保证数据库不包含不完 整的操作结果。利用事务处理，可以保证一组操作不会中途停止，它们或者作为整体执行，或者完全不执行（除非明确指示）。
事务处理中包含的几个术语：

事务...]]></description><category></category></item><item><title><![CDATA[第七章-事务]]></title><link>https://blog.youkuaiyun.com/wang992997290/article/details/103843491</link><guid>https://blog.youkuaiyun.com/wang992997290/article/details/103843491</guid><author>wang992997290</author><pubDate>Sun, 05 Jan 2020 15:11:21 +0800</pubDate><description><![CDATA[事务会把数据库从一种一致状态转换为另一种一致状态。在数据库提交工作时，可以确保要么所有修改都已经保存了，要么所有修改都不保存。
InnoDB存储引擎中的事务完全符合ACID的特性。ACID 是以下4个词的缩写:原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性( durability)
本章主要关注事务的原子性这一概念，并说明怎样正确使用事务及编写...]]></description><category></category></item><item><title><![CDATA[第二十五章-使用触发器]]></title><link>https://blog.youkuaiyun.com/wang992997290/article/details/103843480</link><guid>https://blog.youkuaiyun.com/wang992997290/article/details/103843480</guid><author>wang992997290</author><pubDate>Sun, 05 Jan 2020 15:10:50 +0800</pubDate><description><![CDATA[25.1触发器
如果想要某条语句（或某些语句）在事件发生时自动执行，此时就需要触发器。
如果需要在某个表发生更改时自动进行一些其他的处理。这确切地说就需要触发器。
触发器是MySQL响应以下任意语句而自动执行的一条MySQL语句（或位于 BEGIN 和 END 语句之间的一组语 句）：DELETE； INSERT； UPDATE，其他语句不支持触发器。
创建触发器
创建触发器时，需要4个条件：

...]]></description><category></category></item><item><title><![CDATA[第二十四章-使用游标]]></title><link>https://blog.youkuaiyun.com/wang992997290/article/details/103837992</link><guid>https://blog.youkuaiyun.com/wang992997290/article/details/103837992</guid><author>wang992997290</author><pubDate>Sat, 04 Jan 2020 21:37:59 +0800</pubDate><description><![CDATA[24.1游标
MySQL检索操作返回一组称为结果集的行，这组返回行都是与SQL语句相匹配的行。有时，需要在检索出来的行中前进或后退一行或多行。这就是使用游标的原因。
不像多数DBMS，MySQL游标只能用于存储过程（和函数）。
24.2使用游标

在能够使用游标前，必须声明它，这个过程实际上没有检索数据，它只是定义要使用的SELECT语句
一旦声明后，必须打开游标以供使用。这个过程用前面定义的SE...]]></description><category></category></item><item><title><![CDATA[第二章-java并行程序基础]]></title><link>https://blog.youkuaiyun.com/wang992997290/article/details/103837987</link><guid>https://blog.youkuaiyun.com/wang992997290/article/details/103837987</guid><author>wang992997290</author><pubDate>Sat, 04 Jan 2020 21:37:27 +0800</pubDate><description><![CDATA[2.1　有关线程你必须知道的事 29
进程是线程的容器，进程是程序的实体。
程序是“死”的，进程是“活”的。
线程就是轻量级进程，是程序执行的最小单位。线程间的切换和调度的成本远远小于进程。
2.2　初始线程：线程的基本操作 32
Java中为线程操作提供了一些API。
2.2.1　新建线程 32
通过new关键字创建一个线程对象，此时线程处于NEW状态，等到线程start()方法被调用时，会让这...]]></description><category></category></item><item><title><![CDATA[第一章-走入并行世界]]></title><link>https://blog.youkuaiyun.com/wang992997290/article/details/103828385</link><guid>https://blog.youkuaiyun.com/wang992997290/article/details/103828385</guid><author>wang992997290</author><pubDate>Fri, 03 Jan 2020 23:35:14 +0800</pubDate><description><![CDATA[1.1何去何从的并行计算 1
1.1.1忘掉那该死的并行 2
1.1.2可怕的现实：摩尔定律的失效 4
1.1.3柳暗花明：不断地前进 5
1.1.4光明或是黑暗 6
1.2你必须知道的几个概念 7
1.2.1同步（Synchronous）和异步（Asynchronous） 7
同步和异步通常用来形容一次方法调用。
同步方法调用一旦开始，调用者必须等到方法调用返回后，才能继续后续的行为。
异步方法...]]></description><category></category></item></channel></rss>