<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[zbuger的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/zbuger</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; zbuger]]></copyright><item><title><![CDATA[【转】sql常见50题]]></title><link>https://blog.youkuaiyun.com/zbuger/article/details/88384732</link><guid>https://blog.youkuaiyun.com/zbuger/article/details/88384732</guid><author>zbuger</author><pubDate>Sun, 10 Mar 2019 21:53:12 +0800</pubDate><description><![CDATA[create database execise_new;
use execise_new;

-- 建表
-- 学生表
create table Student(
 s_id varchar(20),
 s_name varchar(20) not null default '',
 s_birth varchar(20) not null default '',
 s_sex...]]></description><category></category></item><item><title><![CDATA[分布式文件系统下的本地缓存]]></title><link>https://blog.youkuaiyun.com/zbuger/article/details/70834070</link><guid>https://blog.youkuaiyun.com/zbuger/article/details/70834070</guid><author>zbuger</author><pubDate>Wed, 26 Apr 2017 23:32:47 +0800</pubDate><description><![CDATA[在分布式文件系统中，为了提高系统的性能，常常会引入不同类型的缓存存储系统（算法优化所带来的的效果可能远远不如缓存带来的优化效果）。在软件中缓存存储系统一般可分为了两类：一、分布式缓存，例如：Memcached、Redis、淘宝的Tair等，二、本地缓存，例如：Facebook的flushcache等，其中本地缓存又可以分为两种：本地磁盘缓存（现在一般都采用读写性能比较优异的SSD来做存储）和本地内]]></description><category></category></item><item><title><![CDATA[关于java中的本地缓存-总结概]]></title><link>https://blog.youkuaiyun.com/zbuger/article/details/70768331</link><guid>https://blog.youkuaiyun.com/zbuger/article/details/70768331</guid><author>zbuger</author><pubDate>Tue, 25 Apr 2017 23:03:57 +0800</pubDate><description><![CDATA[为什么要有本地缓存？

在系统中，有些数据，数据量小，但是访问十分频繁（例如国家标准行政区域数据），针对这种场景，需要将数据搞到应用的本地缓存中，以提升系统的访问效率，减少无谓的数据库访问（数据库访问占用数据库连接，同时网络消耗比较大），但是有一点需要注意，就是缓存的占用空间以及缓存的失效策略。

 

为什么是本地缓存，而不是分布式的集群缓存？

         目前的数据，大]]></description><category></category></item><item><title><![CDATA[ByteBuffer常用方法详解]]></title><link>https://blog.youkuaiyun.com/zbuger/article/details/70550726</link><guid>https://blog.youkuaiyun.com/zbuger/article/details/70550726</guid><author>zbuger</author><pubDate>Sun, 23 Apr 2017 21:56:25 +0800</pubDate><description><![CDATA[缓冲区(Buffer)



缓冲区(Buffer)就是在内存中预留指定大小的存储空间用来对输入/输出(I/O)的数据作临时存储，这部分预留的内存空间就叫做缓冲区：

使用缓冲区有这么两个好处：

1、减少实际的物理读写次数

2、缓冲区在创建时就被分配内存，这块内存区域一直被重用，可以减少动态分配和回收内存的次数

举个简单的例子，比如A地有1w块砖要搬到B地

由于]]></description><category></category></item><item><title><![CDATA[直接内存和堆内存的性能比较]]></title><link>https://blog.youkuaiyun.com/zbuger/article/details/70548792</link><guid>https://blog.youkuaiyun.com/zbuger/article/details/70548792</guid><author>zbuger</author><pubDate>Sun, 23 Apr 2017 21:33:12 +0800</pubDate><description><![CDATA[背景知识

在JDK 1.4中新加入了NIO（New Input/Output）类，引入了一种基于通道（Channel）与缓冲区（Buffer）的I/O方式，它可以使用Native函数库直接分配堆外内存，然后通过一个存储在Java堆里面的DirectByteBuffer对象作为这块内存的引用进行操作。这样能在一些场景中显著提高性能，因为避免了在Java堆和Native堆中来回复制数据。 
显]]></description><category></category></item><item><title><![CDATA[使用sun.misc.Cleaner或者PhantomReference实现堆外内存的自动释放]]></title><link>https://blog.youkuaiyun.com/zbuger/article/details/70508450</link><guid>https://blog.youkuaiyun.com/zbuger/article/details/70508450</guid><author>zbuger</author><pubDate>Sun, 23 Apr 2017 16:16:01 +0800</pubDate><description><![CDATA[Java NIO包是通过sun.misc.Cleaner和PhantomReference来实现堆外内存的自动释放的。现在我们来学习下Cleaner和PhantomReference的使用，自己封装实现堆外内存的自动释放。


sun.misc.Cleaner是JDK内部提供的用来释放非堆内存资源的API。JVM只会帮我们自动释放堆内存资源，但是它提供了回调机制，通过这个类能方便的释放系统的]]></description><category></category></item><item><title><![CDATA[Netty之Java堆外内存扫盲贴]]></title><link>https://blog.youkuaiyun.com/zbuger/article/details/70501541</link><guid>https://blog.youkuaiyun.com/zbuger/article/details/70501541</guid><author>zbuger</author><pubDate>Sun, 23 Apr 2017 15:17:25 +0800</pubDate><description><![CDATA[Java的堆外内存本来是高贵而神秘的东西，只在一些缓存方案的收费企业版里出现。但自从用了Netty，就变成了天天打交道的事情，毕竟堆外内存能减少IO时的内存复制，不需要堆内存Buffer拷贝一份到直接内存中，然后才写入Socket中；而且也没了烦人的GC。

好在，Netty所用的堆外内存只是Java NIO的 DirectByteBuffer类，通读一次很快。还有一些sun.misc.*的类]]></description><category></category></item><item><title><![CDATA[java堆外内存]]></title><link>https://blog.youkuaiyun.com/zbuger/article/details/70500495</link><guid>https://blog.youkuaiyun.com/zbuger/article/details/70500495</guid><author>zbuger</author><pubDate>Sun, 23 Apr 2017 15:12:07 +0800</pubDate><description><![CDATA[JVM可以使用的内存分外2种：堆内存和堆外内存.

    堆内存完全由JVM负责分配和释放，如果程序没有缺陷代码导致内存泄露，那么就不会遇到java.lang.OutOfMemoryError这个错误。

    使用堆外内存，就是为了能直接分配和释放内存，提高效率。JDK5.0之后，代码中能直接操作本地内存的方式有2种：使用未公开的Unsafe和NIO包下ByteBuffer。]]></description><category></category></item><item><title><![CDATA[静态成员的垃圾回收]]></title><link>https://blog.youkuaiyun.com/zbuger/article/details/70255246</link><guid>https://blog.youkuaiyun.com/zbuger/article/details/70255246</guid><author>zbuger</author><pubDate>Thu, 20 Apr 2017 10:00:41 +0800</pubDate><description><![CDATA[今天在网上看到一个讨论命题：当一个单例的对象长久不用时，会不会被jvm的垃圾收集机制回收。原文链接

下面就对Java中的垃圾回收和静态类型做一些总结：

一、Java中的内存分配


1、stack(栈)，用于装变量和引用类型。如基本类型和引用类型的引用变量。 
2、heap(堆) ，用于装new出来的值。 
3、用来装静态变量的区域。如static变量，字符串常量。 
4、]]></description><category></category></item><item><title><![CDATA[ubuntu安装nodejs]]></title><link>https://blog.youkuaiyun.com/zbuger/article/details/53491237</link><guid>https://blog.youkuaiyun.com/zbuger/article/details/53491237</guid><author>zbuger</author><pubDate>Tue, 06 Dec 2016 19:05:26 +0800</pubDate><description><![CDATA[~# wget https://nodejs.org/dist/v4.1.1/node-v4.1.1-linux-x64.tar.gz

~# tar -vxf node-v4.1.1-linux-x64.tar.gz

~# mv node-v4.1.1-linux-x64 nodejs

~# vi /etc/profile.d/node.sh

export NODE_HOME=~/node]]></description><category></category></item><item><title><![CDATA[聊聊分布式事务]]></title><link>https://blog.youkuaiyun.com/zbuger/article/details/52459394</link><guid>https://blog.youkuaiyun.com/zbuger/article/details/52459394</guid><author>zbuger</author><pubDate>Wed, 07 Sep 2016 14:35:31 +0800</pubDate><description><![CDATA[事务就是一个会话过程中，对上下文的影响是一致的，要么所有的更改都做了，要么所有的更变都撤销掉。就要么生，要么死。没有半死不死的中间不可预期状态。

参考下薛定谔的猫。

事务是为了保障业务数据的完整性和准确性的。




分布式事务，常见的两个处理办法就是两段式提交和补偿。
两段式提交典型的就是XA，有个事务协调器，告诉大家，来都准备好提交，大家回复，都准备好了，然后协调器告诉]]></description><category></category></item><item><title><![CDATA[关于分布式事务、两阶段提交协议、三阶提交协议]]></title><link>https://blog.youkuaiyun.com/zbuger/article/details/52453427</link><guid>https://blog.youkuaiyun.com/zbuger/article/details/52453427</guid><author>zbuger</author><pubDate>Tue, 06 Sep 2016 20:52:59 +0800</pubDate><description><![CDATA[随着大型网站的各种高并发访问、海量数据处理等场景越来越多，如何实现网站的高可用、易伸缩、可扩展、安全等目标就显得越来越重要。

为了解决这样一系列问题，大型网站的架构也在不断发展。提高大型网站的高可用架构，不得不提的就是分布式。在《分布式系统的一致性探讨》一文中主要介绍了分布式系统中存在的一致性问题。本文将简单介绍如何有效的解决分布式的一致性问题，其中包括什么是分布式事务，二阶段提交和三阶段提]]></description><category></category></item><item><title><![CDATA[关于分布式系统的思考（一）]]></title><link>https://blog.youkuaiyun.com/zbuger/article/details/52368708</link><guid>https://blog.youkuaiyun.com/zbuger/article/details/52368708</guid><author>zbuger</author><pubDate>Tue, 30 Aug 2016 14:02:09 +0800</pubDate><description><![CDATA[【摘要】本文谈及一些分布式系统的理论和思想，包括CAP、BASE、NWR等。并简单分析一些主流数据库分布式方案的利弊，以便我们在开发时更深入全面地进行思考、选择和设计。以下为正文：

在讨论常见架构前，先简单了解下CAP理论：

CAP是Consistency、Availablity和Partition-tolerance的缩写。分别指：

一致性（Consistency）：每次读操作]]></description><category></category></item><item><title><![CDATA[数据库的主从架构]]></title><link>https://blog.youkuaiyun.com/zbuger/article/details/52346576</link><guid>https://blog.youkuaiyun.com/zbuger/article/details/52346576</guid><author>zbuger</author><pubDate>Sun, 28 Aug 2016 16:53:30 +0800</pubDate><description><![CDATA[这段时间，一直在总结电商系统的相关基础技术和架构，写了很多东西。但是还是发现一个很重要，很基础的方面没有讲到，那就是数据库读写分离的主从架构。可能发展到大型成熟的公司之后，主从架构已经落伍了，取而代之的是更加复杂的数据库集群。但是作为一个小型电商公司，数据库的主从架构应该是最基础的。任何大型的系统架构，都是不断演进的。主从架构便是数据库架构中，最基础的架构。所以研究完主从架构，也就能看懂更加复杂的]]></description><category></category></item><item><title><![CDATA[Mysql数据库事务的隔离级别和锁的实现原理分析]]></title><link>https://blog.youkuaiyun.com/zbuger/article/details/52241580</link><guid>https://blog.youkuaiyun.com/zbuger/article/details/52241580</guid><author>zbuger</author><pubDate>Thu, 18 Aug 2016 15:42:02 +0800</pubDate><description><![CDATA[mysql数据库的事务隔离级别相信很多同学都知道.

大家有没有想过它是如何实现的呢?带着这些问题我翻阅了相关数据库的书籍和资料,把我的理解写下来.

一：事务隔离级别

mysql数据库的隔离界别如下:

1, READ UNCOMMITTED(未提交读)

事务中的修改,即使没有提交,对其它事务也是可见的.  脏读(Dirty Read).




2, READ]]></description><category></category></item><item><title><![CDATA[分布式多副本一致性问题 [推荐]]]></title><link>https://blog.youkuaiyun.com/zbuger/article/details/52200287</link><guid>https://blog.youkuaiyun.com/zbuger/article/details/52200287</guid><author>zbuger</author><pubDate>Sat, 13 Aug 2016 16:58:26 +0800</pubDate><description><![CDATA[1. 强一致性：所有的副本更新成功才返回。
  
                
如上图C表示Client，【P、S1、S2】构成一个同步组，P表示Primary node，S1，S2是两个secondary node，强同步模型的工作流程为C向P写数据，P向S1，S2转发，只有3个都写成功，才向C返回成功，否则写失败。这种模型对于append操作很容易实现，如果副本没有全部更新成功，向C]]></description><category></category></item><item><title><![CDATA[一致性模型]]></title><link>https://blog.youkuaiyun.com/zbuger/article/details/52200215</link><guid>https://blog.youkuaiyun.com/zbuger/article/details/52200215</guid><author>zbuger</author><pubDate>Sat, 13 Aug 2016 16:50:36 +0800</pubDate><description><![CDATA[强一致性

当更新操作完成之后，任何多个后续进程或者线程的访问都会返回最新的更新过的值。这种是对用户最友好的，就是用户上一次写什么，下一次就保证能读到什么。但是这种实现对性能影响较大。

弱一致性

系统并不保证续进程或者线程的访问都会返回最新的更新过的值。系统在数据写入成功之后，不承诺立即可以读到最新写入的值，也不会具体的承诺多久之后可以读到。但会尽可能保证在某个时间级别（比如秒级别]]></description><category></category></item><item><title><![CDATA[关于同步异步非阻塞阻塞[推荐]]]></title><link>https://blog.youkuaiyun.com/zbuger/article/details/52191415</link><guid>https://blog.youkuaiyun.com/zbuger/article/details/52191415</guid><author>zbuger</author><pubDate>Fri, 12 Aug 2016 14:35:15 +0800</pubDate><description><![CDATA[这里面有篇文章非常牛逼，说的很清楚（注意这句话System I/O can be blocking, or non-blocking synchronous, or non-blocking asynchronous）

http://www.artima.com/articles/io_design_patternsP.html（看这一篇足够了）

包括下面这篇

http://ww]]></description><category></category></item><item><title><![CDATA[HTTP响应报文与工作原理详解]]></title><link>https://blog.youkuaiyun.com/zbuger/article/details/52116916</link><guid>https://blog.youkuaiyun.com/zbuger/article/details/52116916</guid><author>zbuger</author><pubDate>Thu, 04 Aug 2016 10:38:22 +0800</pubDate><description><![CDATA[超文本传输协议(Hypertext Transfer Protocol，简称HTTP)是应用层协议。HTTP 是一种请求/响应式的协议，即一个客户端与服务器建立连接后，向服务器发送一个请求;服务器接到请求后，给予相应的响应信息。

　　HTTP 请求报文

　　HTTP 请求报文由请求行、请求头部、空行 和 请求包体 4 个部分组成，如下图所示：



　　下面对请求报文格式进行简]]></description><category></category></item><item><title><![CDATA[四层负载均衡——LVS]]></title><link>https://blog.youkuaiyun.com/zbuger/article/details/52103818</link><guid>https://blog.youkuaiyun.com/zbuger/article/details/52103818</guid><author>zbuger</author><pubDate>Wed, 03 Aug 2016 15:09:05 +0800</pubDate><description><![CDATA[LVS

 

参考：http://zh.linuxvirtualserver.org/

几个术语：

Director：也可以称为调度器，LVS前端设备；


realserver：也称为真实内部服务器，是真正在提供服务的；

VIP：对外公布的IP，即客户请求进来的IP地址；

DIP：调度器和realserver之间通信的地址；


LVS的三种工作方式]]></description><category></category></item></channel></rss>