<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[designer01的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/designer01</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; designer01]]></copyright><item><title><![CDATA[阅读笔记-mysql innodb并发控制实现方式]]></title><link>https://blog.youkuaiyun.com/designer01/article/details/83019342</link><guid>https://blog.youkuaiyun.com/designer01/article/details/83019342</guid><author>designer01</author><pubDate>Thu, 11 Oct 2018 23:29:55 +0800</pubDate><description><![CDATA[参考：https://mp.weixin.qq.com/s/R3yuitWpHHGWxsUcE0qIRQ，文中例子截取自上文
redo、undo、回滚段

redo：主要解决如果每次修改数据都去磁盘上随机读写，效率很低。所以改为顺序写入到redo日志中然后定期去修改磁盘。即使是数据库奔溃也可以依靠redo重做。保证事务的acid
undo：在事务提交之前，会将修改的旧数据存放到undo日志中，新数...]]></description><category></category></item><item><title><![CDATA[阅读笔记-mysql 并发控制思路]]></title><link>https://blog.youkuaiyun.com/designer01/article/details/83018993</link><guid>https://blog.youkuaiyun.com/designer01/article/details/83018993</guid><author>designer01</author><pubDate>Thu, 11 Oct 2018 21:13:43 +0800</pubDate><description><![CDATA[参考：https://mp.weixin.qq.com/s/R3yuitWpHHGWxsUcE0qIRQ
并发控制

常见的并发控制手段有：锁、数据多版本

锁


普通锁：操作数据前锁定数据，操作完释放，保持一致性

但是简单锁太粗暴，读也无法并行



共享锁：s锁，读取数据时使用。共享锁之间不互斥，可以读读并行


排他锁：x锁，修改数据时添加。写读、写写不能并行。类似于：写事务没有提交，读...]]></description><category></category></item><item><title><![CDATA[阅读笔记-mysql myisam和innodb的五个差异]]></title><link>https://blog.youkuaiyun.com/designer01/article/details/83018786</link><guid>https://blog.youkuaiyun.com/designer01/article/details/83018786</guid><author>designer01</author><pubDate>Thu, 11 Oct 2018 21:00:33 +0800</pubDate><description><![CDATA[count(*)

对于myisam引擎，会直接存储总行数，所以比较快；但是如果一旦添加了查询条件则统计方式和innodb相同（一行一行的扫描）
所以不管用什么引擎都要建立好索引

全文索引

MyIsam支持，innodb在5.6后支持
不过在高并发大数据的情况下都不支持使用内置的全文索引，要使用索引外置
索引外置待后续了解！！！

事务

myisam不支持，innodb支持
myisam可以...]]></description><category></category></item><item><title><![CDATA[链表逆序]]></title><link>https://blog.youkuaiyun.com/designer01/article/details/83002866</link><guid>https://blog.youkuaiyun.com/designer01/article/details/83002866</guid><author>designer01</author><pubDate>Wed, 10 Oct 2018 20:27:01 +0800</pubDate><description><![CDATA[
已知一个链表，将该链表进行逆序
整体思路：始终持有新链表第一个元素的索引，老链表的第一个元素始终头插到新链表

class LinkedNode{
    int value;
    LinkedNode next;

    public LinkedNode(int value){
        this.value=value;
    }
}

public class Revers...]]></description><category></category></item><item><title><![CDATA[linux命令]]></title><link>https://blog.youkuaiyun.com/designer01/article/details/82974476</link><guid>https://blog.youkuaiyun.com/designer01/article/details/82974476</guid><author>designer01</author><pubDate>Mon, 08 Oct 2018 22:07:36 +0800</pubDate><description><![CDATA[
搜索文件名：find /zookeeper-3.4.13/docs -name ‘zookeeper*’；find /zookeeper-3.4.13/docs -name ‘zookeeper*.pdf’
编辑：vi ivy.xml
复制：cp zkCli.sh …/
删除：rm zkCli.sh
搜索内容： grep “Licensed” *.xml
打印出最后几行： tail -n 10 ...]]></description><category></category></item><item><title><![CDATA[动态规划]]></title><link>https://blog.youkuaiyun.com/designer01/article/details/82953778</link><guid>https://blog.youkuaiyun.com/designer01/article/details/82953778</guid><author>designer01</author><pubDate>Sat, 06 Oct 2018 21:02:16 +0800</pubDate><description><![CDATA[
将问题拆分成小问题，先解决最小的问题，然后再一步步的解决大问题
寻找大问题和小问题间的关系，通过小问题来求解大问题
动态规划的使用条件：

子问题是离散的，不存在相互依赖的关系
存在一定的约束条件，求最值



经典题目

https://leetcode.com/problems/climbing-stairs/description/ 爬楼梯问题
https://leetcode.com/p...]]></description><category></category></item><item><title><![CDATA[127. Word Ladder]]></title><link>https://blog.youkuaiyun.com/designer01/article/details/82947789</link><guid>https://blog.youkuaiyun.com/designer01/article/details/82947789</guid><author>designer01</author><pubDate>Fri, 05 Oct 2018 22:41:12 +0800</pubDate><description><![CDATA[思路

题来自：https://leetcode.com/problems/word-ladder/description/


经过分析：该单词转换的问题可以转变成一个图的问题，在图中寻找最小路径的问题。
解题步骤：

定义一个函数用来判断哪些字符串间可以相互转换 	（canTransform方法），只有一个字符不相同。
将题转化成一个图数据结构（临接表）
使用bfs来进行搜索，寻找到出发点到目...]]></description><category></category></item><item><title><![CDATA[CopyOnWriteArrayList源码解析]]></title><link>https://blog.youkuaiyun.com/designer01/article/details/82859518</link><guid>https://blog.youkuaiyun.com/designer01/article/details/82859518</guid><author>designer01</author><pubDate>Wed, 26 Sep 2018 21:15:34 +0800</pubDate><description><![CDATA[
依据jdk1.8源码分析

新建

创建一个零长度数组

private transient volatile Object[] array;//底层数据

添加数据

先上同步锁
对原始数组进行拷贝（浅拷贝），然后在拷贝后的数组上进行修改
将修改后的结果赋值给array

public boolean add(E e) {
        final ReentrantLock lock = ...]]></description><category></category></item><item><title><![CDATA[网络基础]]></title><link>https://blog.youkuaiyun.com/designer01/article/details/82841663</link><guid>https://blog.youkuaiyun.com/designer01/article/details/82841663</guid><author>designer01</author><pubDate>Tue, 25 Sep 2018 16:55:07 +0800</pubDate><description><![CDATA[网络架构

五层网络架构：物理层、链路层、网络层、传输层、应用层

TCP/IP

网络层的ip协议+传输层的tcp协议

在网络层利用ip协议定位主机
在传输层利用tcp协议进行可靠性保证


tcp/ip是个协议组包括了：

应用层：FTP、HTTP、TELNET、DNS、smtp（邮箱）
传输层：TCP UDP
网络层：IP ICMP


可以用Socket实现HTTP。Socket是实现传...]]></description><category></category></item><item><title><![CDATA[java8 stream]]></title><link>https://blog.youkuaiyun.com/designer01/article/details/82804918</link><guid>https://blog.youkuaiyun.com/designer01/article/details/82804918</guid><author>designer01</author><pubDate>Sun, 23 Sep 2018 22:40:14 +0800</pubDate><description><![CDATA[
Java 8 中的 Stream 是对集合（Collection）对象功能的增强。

聚合操作、大批量数据操作
与Lambda结合，极大的提高编程效率和程序可读性
供串行和并行两种模式
Stream 的另外一大特点是，数据源本身可以是无限的。


流处理的一般过程：数据源（source）→ 数据转换（转换成想要的数据）→执行操作获取想要的结果

常用流操作

流的构成：

list.stream...]]></description><category></category></item><item><title><![CDATA[mysql 基础知识]]></title><link>https://blog.youkuaiyun.com/designer01/article/details/82795086</link><guid>https://blog.youkuaiyun.com/designer01/article/details/82795086</guid><author>designer01</author><pubDate>Sun, 23 Sep 2018 10:34:34 +0800</pubDate><description><![CDATA[事务
手动开启:
begin rollback commit
自动开启
SET AUTOCOMMIT=0 禁止自动提交
SET AUTOCOMMIT=1 开启自动提交
delete truncate

delete按行删除，删除后会记录到日志中，可以进行事务的回滚
truncate清空整个表，不会记录到日志中，不能进行事务回滚。删除的过程中不会激活与表有关的删除触发器。执行速度快。
https:/...]]></description><category></category></item><item><title><![CDATA[mysql执行计划分析]]></title><link>https://blog.youkuaiyun.com/designer01/article/details/82792025</link><guid>https://blog.youkuaiyun.com/designer01/article/details/82792025</guid><author>designer01</author><pubDate>Thu, 20 Sep 2018 23:16:34 +0800</pubDate><description><![CDATA[MySQL5.6中支持这个功能，optimizer_trace
create table test1(a int,b tinyint,c varchar(20),d int);
alter table test1 add primary key (a);
alter table test1 drop primary key;
alter table test1 add unique key (b,...]]></description><category></category></item><item><title><![CDATA[mysql 方法和存储过程]]></title><link>https://blog.youkuaiyun.com/designer01/article/details/82794834</link><guid>https://blog.youkuaiyun.com/designer01/article/details/82794834</guid><author>designer01</author><pubDate>Thu, 20 Sep 2018 22:53:20 +0800</pubDate><description><![CDATA[变量

局部变量：declare:|用户可以使用DECLARE关键字来定义变量。然后可以为变量赋值。这些变量的作用范围是BEGIN…END程序段中
用户变量：@变量名：eg:@a 定义用户变量，作用域在整个链接
会话变量：在每次连接成功后会将全局变量拷贝一份到当前回话：set session var_name = value;   show variables like “autocommit”;...]]></description><category></category></item><item><title><![CDATA[mysql分区、分表、分库、数据分片]]></title><link>https://blog.youkuaiyun.com/designer01/article/details/82772620</link><guid>https://blog.youkuaiyun.com/designer01/article/details/82772620</guid><author>designer01</author><pubDate>Wed, 19 Sep 2018 15:15:38 +0800</pubDate><description><![CDATA[
当读压力很大的时候，可以考虑添加Slave机器的分式解决(读写分离、一主多备)，但是当Slave机器达到一定的数量就得考虑分库了。
当写压力很大的时候，就必须得进行分库操作（分表分库）。

分区

将表的数据均衡分摊到不同的硬盘，系统或是不同服务器存储介子中，实际上还是一张表。分区表

水平分区：通过某个属性列来分割。eg：一个包含十年发票记录的表可以被分区为十个不同的分区，每个分区包含的是其中...]]></description><category></category></item><item><title><![CDATA[mysql 分区表]]></title><link>https://blog.youkuaiyun.com/designer01/article/details/82255064</link><guid>https://blog.youkuaiyun.com/designer01/article/details/82255064</guid><author>designer01</author><pubDate>Tue, 18 Sep 2018 22:27:55 +0800</pubDate><description><![CDATA[mysql分区


将一个表分解成多个表来进行多磁盘存放，不过这个分解对应用来说是透明的

相比单磁盘可以存储更多数据
在进行查询的时候可以只查询必要的分区，对于sum() count()可以并行执行
对于过期数据可以直接整个分区删除，效率高
多个磁盘获取更大的吞吐量
partition key：分区键，按照特定的键分区。如果表有主键唯一键，则分区键只能在这些中选；否则随意
同一个分区表的所有分区...]]></description><category></category></item><item><title><![CDATA[java-数据类型]]></title><link>https://blog.youkuaiyun.com/designer01/article/details/81512239</link><guid>https://blog.youkuaiyun.com/designer01/article/details/81512239</guid><author>designer01</author><pubDate>Mon, 17 Sep 2018 13:04:19 +0800</pubDate><description><![CDATA[基础数据类型


int在64位或者32位jvm中都是32位
short、char都是16位




int和Integer


int和Integer可以通过自动的拆箱装箱进行转换 
 
Integer a=1; 
int b=a+1; 

Integer比int占内存，Integer时一个对象，需要存储对象的元数据




String、StringBuilder、StringBuffer

...]]></description><category></category></item><item><title><![CDATA[java HashMap]]></title><link>https://blog.youkuaiyun.com/designer01/article/details/81432355</link><guid>https://blog.youkuaiyun.com/designer01/article/details/81432355</guid><author>designer01</author><pubDate>Mon, 17 Sep 2018 11:06:48 +0800</pubDate><description><![CDATA[HashMap


HashMap底层是使用数组+链表的形式进行存储，数组作为主干，链表作为hash冲突后的解决方案。
加入数据的时候会用hashCode()和特定的算法算出对应的位置，如果对应的位置上已经有值，则通过equal()比较，如果不同则放入到链表中。每一对值都是一个Entry。
如果容量超过阈值（容量*负载因子）将会重新创建数组，同时将老数组的数据进行拷贝（拷贝过程中会重新计算位置）
...]]></description><category></category></item><item><title><![CDATA[java-单例设计模式]]></title><link>https://blog.youkuaiyun.com/designer01/article/details/81659910</link><guid>https://blog.youkuaiyun.com/designer01/article/details/81659910</guid><author>designer01</author><pubDate>Sun, 16 Sep 2018 22:10:44 +0800</pubDate><description><![CDATA[单例模式



双重检验（懒汉式）

 
使用双重检查，提高效率，和线程安全性
instance记得使用volatile 
instance = new Singleton()做了三件事： 
给 instance 分配内存
调用 Singleton 的构造函数来初始化成员变量
将instance对象指向分配的内存空间（执行完这步 instance 就为非 null 了）
第2步和第3步可能重排序，...]]></description><category></category></item><item><title><![CDATA[rpc和restful]]></title><link>https://blog.youkuaiyun.com/designer01/article/details/82688863</link><guid>https://blog.youkuaiyun.com/designer01/article/details/82688863</guid><author>designer01</author><pubDate>Thu, 13 Sep 2018 15:27:38 +0800</pubDate><description><![CDATA[
  https://www.zhihu.com/question/41609070




restful接口


简单、直接、开发方便。利用现成的http协议
接口更加通用
会携带http的请求响应头，消息臃肿，会有无用的网络开销。




rpc

 
远程过程调用，更准确的说应该是一种协议应用，http是一种协议
速度快，效率高(针对http1.1)
更精简、更加保密、更加可定制
可以像调...]]></description><category></category></item><item><title><![CDATA[retrofic]]></title><link>https://blog.youkuaiyun.com/designer01/article/details/82669629</link><guid>https://blog.youkuaiyun.com/designer01/article/details/82669629</guid><author>designer01</author><pubDate>Wed, 12 Sep 2018 22:28:26 +0800</pubDate><description><![CDATA[
实现解耦是retrofic的精华




传统的http访问


构造request
创建一个线程池
将request放入到线程池中
获取数据后回调给上层
需要自己管理线程切换，需要自己解析读取数据，解析数据成对象，切换回主线程，回调给上层。




retrofic特性


可以同步请求
可以异步请求
适配不同的适配器来处理数据
可以选择不同的反序列化工具




retrofit = new...]]></description><category></category></item></channel></rss>