自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

u010900754的专栏

真心希望国内博客环境 多一些原创 少一些复制

  • 博客(22)
  • 资源 (3)
  • 收藏
  • 关注

原创 【Java】内存模型 volatile

java堆存储对象和数组,是一块线程共享数据区,但是实际线程运行的时候,对于用到的对象都会在线程私有空间即虚拟机栈保存一个副本,为了效率。这两快内存叫主内存和工作内存。java规定所有线程对变量的操作先从主内存取得副本,然后所有的操作必须对工作内存进行(说的是堆变量)定义了8个内存指令:lock与unlock,与此处无关read:把内存里的变量值拷贝到私有栈的缓存区域load:把缓

2017-08-29 17:52:54 259

原创 【Java】内存区域与对象创建

这块内容是java很基础的部分,涉及到JVM的设计原理,很久以前就看到过,这次需要区分线程私有和共享基本java的运行时数据区可以分为五大块:程序计数器,为线程私有,每一个线程都有一个,这样线程切换以后才可以恢复上一个线程的现场。虚拟机栈,为线程私有,非本地方法的运行,每一个线程都有其虚拟机栈本地方法栈,为线程私有,本地方法的运行堆,所有线程共享,存放对象和数组方法区,所有

2017-08-29 16:50:25 211

原创 【redis】客户端

这里的客户端并不是说redis-cli的是实现,而是在服务端检测到一个连接事件以后,创建的一个描述客户端的数据结构,本质上还是服务端的实现,服务端对客户端的封装。用的是一个叫做redisClient的结构体。里面的重要属性有:套接字;名字;冲入缓冲区,客户端发来的命令会被存在这里输出缓冲区,服务端给客户端返回的数据存在这里命令,服务端解析客户端缓冲区的内容,分析出命令和

2017-08-26 16:24:43 252

原创 【redis】事件

redis是单进程单线程的服务器,在服务端是使用多路io复用技术实现的,也就是说是基于事件实现的。redis分为两种类型的事件,文件时间和时间事件。文件事件:也就是传统的io操作,基本分为连接,读取,写入和关闭。不同的客户端发来各种各样的请求,redis的多路复用程序会把请求分解为不同的事件,然后将socket和事件一起打包放入队列中,交给事件分离器处理,事件分离器会把各个事件交给对应

2017-08-26 16:14:33 544

转载 【Java】NIO reactor 多路复用技术

http://blog.csdn.net/z69183787/article/details/23666359http://blog.csdn.net/baidu_22405691/article/details/49422947

2017-08-26 12:19:53 354

原创 【redis】AOF 持久化

AOF是基于命令的持久化方式,通常来讲,最简单是就每一次执行一个命令,就把命令保存到缓冲区中,这个缓冲区也是在redisServer结构体内定义的。然后会按照一定的策略将缓冲区的命令写入到文件中,持久化。使用缓冲区一次性写入大量数据io效率更高。但是如果采用以上简单的把每一条命令都写入文件,如果进行了很多次操作,AOF文件会十分庞大。所以有了另一种方法,AOF重写,字面意思有些误导,这个策

2017-08-25 10:27:34 191

原创 【redis】RDB 持久化

RDB是基于快照的持久化方式,也就是把数据按照一定的格式转化为二进制格式,存在磁盘上,之后可以根据这个快照文件恢复数据。关于RDB有两个命令一个是SAVE,这是阻塞式的,服务端只有执行完持久化才会接受并处理新的请求,在此期间,其余的请求只能等待。另一个是BGSAVE,服务端会fork一个进程来做持久化,之后仍然可以处理其他的请求,所以是非阻塞式的。RDB文件的格式如下:REDI

2017-08-24 23:49:13 236

原创 【redis】服务端 数据库实现

redis是用C实现的内存数据库,今天学习了下其服务端的实现。服务端用一个redisServer的结构体定义了一个服务端数据结构。其中有一个db指针,是一个数组,数组的每一个元素是一个db结构体,db结构体定义了一个数据库的结构。默认情况,redis会创建16个数据库,即db数组的代销是16。如果要修改数据库的数目,可以通过设置redisServer的dbNum属性,在启动时会根据

2017-08-24 23:28:39 433

原创 【Java】ReentrantLock

基本上都把这个锁叫做重入锁,其实这样叫是字面理解,但是无法区分与synchronized的区别,从实现来讲,叫做显式锁更好,因为ReentrantLock的加锁是显示的,而synchronized则是内置的,所以应该是内置锁。显式锁的特性首先看下显式锁的使用,打开源码,有一段注释:public void m() { * lock.lock(); // block until

2017-08-24 15:48:40 294

原创 【Java】善用异常

在高级设计语言里,异常是一个增加代码可读性和健壮性的工具,我们在写函数时应该尽量发挥它的作用。不要让函数的返回值带有异常或者错误信息,错误信息应该和返回值解耦,应该在异常中体现。函数的返回值就只与职责或者业务相关,函数中出错了应该交给异常来解决。所以调用方应该不仅仅注意被调用者的返回值,还要注意其可能抛出的异常。

2017-08-24 14:14:49 177

原创 【Java】ReentrantLock 实现原理

ReentrantLock内部使用了AQS:https://blog.csdn.net/u010900754/article/details/88849938但是因为有不同的锁模式,用了两种具体实现分别应对公平锁和非公平锁。二者在实现获取锁的逻辑上有区别,也就是AQS留空的部分。下面看下lock和unlock实现。非公平: static final class Nonfa...

2017-08-23 14:19:44 3144

原创 【Java】CLH 自旋锁

看java重入锁的代码,遇到了CLH队列锁,发现实现很巧妙,学习一下。什么是自旋锁?说的是锁等待的实现方式,可以改变线程的状态,让其进入等待或者睡眠(具体状态还没研究),这就是使用线程最原生的方式实现。也可以让线程进入一个while循环,这是一种轻量级实现,没有设计线程状态的转换,节省了转换的开销,但是cpu开销可能很大,进入循环的方式就是自旋锁。下面是一段很常见的理解CLH的代码:c

2017-08-22 10:53:51 521

原创 【Java】重入锁 生产者消费者

package ThreadTest;import java.util.ArrayList;import java.util.List;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.Reentrant

2017-08-20 21:29:05 252

原创 【redis】字符串实现原理sds

redis 键值对中的key都是string类型的。redis内部实现中是怎么处理string呢?redis底层是用c写的,对于stirng并没有直接使用c的字符数组,而是自己封装了一个sds的类型。结构如下:buf数组用于存真正的字符。为什么要新建数据类型?必然是为了抽象,是的编程更加简单。原有的c的字符串的api是不安全的,因为在使用字符数组以后,需要跟踪内存的分配。在使用之前,需

2017-08-16 14:17:41 1351

转载 【数据库】缓存 数据库 redis mc 好文

http://blog.csdn.net/xlgen157387/article/details/60761232http://blog.csdn.net/u014743697/article/details/53442512http://blog.csdn.net/jinfeiteng2008/article/details/53711752

2017-08-16 12:45:16 291

原创 【mysql】sqlalchemy 对象状态

与hibernate不同,总共有5种。1.transitent:new出来的,与session没有关联;调用add会加入session2.pending:加入到session了,但是未更新至数据库;调用flush会更新至数据库3.persistant:更新到数据库;直接查询到的就是persistant的4.deleted:调用了flush,从数据库删除;此时如果回滚,还会变为per

2017-08-14 10:40:28 663

原创 【mysql】sqlalchemy commit 和 flush

今天看到了commit和flush函数,想要弄清楚区别。先看下对象的状态。总共5个,这里只谈3个。transitant:刚new出来的对象,没有和session或者orm框架产生关联。pending:transitant的对象调用add后,就会变为pending,加入了orm框架的监管范围。persistant:调用flush以后就会变味persistant,也就是被写到了数据库中

2017-08-13 16:42:12 11167

原创 【python】mysql connector

使用mysql,报错如下:    from mysql import connectorImportError: No module named 'mysql'原因是没有安装mysql 的 connector。解决办法是:sudo pip install mysql-connector-python-rf如果报错:option --single-versio

2017-08-13 15:00:55 999

原创 【mysql】innodb myisam

区别主要有:(1)count(*)执行,只要不加where,myisam有一个行数的统计数据,直接返回,innodb是逐行计算;(2)全文索引,之前只有myisam支持,现在全支持(3)场景,innodb适用于多并发写入的场景,而myisam适用于读取多的场景,因为myisam的锁是全表锁,效率低,且没有事务支持。但是读取效率高,因为myisam的索引和数据是分开存放的,而且是压...

2017-08-08 12:00:25 199

原创 【mysql】全文索引

全文索引是myisam引擎的功能,但是最近innodb也支持了。了解下概念。全文索引类似搜索引擎,主要有分词和索引两部分。分词就是把一段文本提取出若干词语。索引就是为每一个词语建立索引,这是一个一对多的关系。一个词语可能出现在许多数据库的许多行。具体:https://segmentfault.com/a/1190000006997077

2017-08-08 11:43:51 257

原创 【数据库】MVCC 和 乐观锁

最近在看mysql的引擎类型,说到innodb时看到了mvcc,了解了一下。MVCC全称是Multi-version concurrency control,多版本控制。什么意思?说白了是解决数据库读-写冲突的方法。数据库不免要支持事务,事务ACID的特性中的I,即隔离性就可以通过MVCC实现,就是说多个事务读取数据时,需要隔离,只能读到某一些值,比如已经提交的值,这就是保证事务隔离级别的方法

2017-08-08 11:39:16 1957

原创 【mysql】索引

mysql的索引是由引擎决定的。1.哈希索引,这个和哈希表是一样的原理,从关键字的哈希函数值映射到物理位置。特点是只能针对等于的查询,效率很高。2.B树索引,为关键字维护一棵b树,通常是b+树,叶子节点存的是数据块的位置。这种索引主要实现了顺序。首先可以排序。其次做前缀索引,应用于多列索引的场合。如果是多列,那么构建索引的顺序决定了最终字典序的顺序。查询时,要特别注意条件,因为是最左匹配。

2017-08-02 23:41:47 272

设计模式的 课件

主要讲解了 设计模式的相关内容 包括类图等其他

2014-04-15

head first 审计模式

headfirst 一系列书籍中 对设计模式的讲解 很容易理解

2014-04-15

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除