自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(50)
  • 收藏
  • 关注

转载 Spring事务

参考Spring事务何时失效、事务的传播级别一、何时失效 Spring事务是AOP的应用,扫描@Transactional注解,调用事务处理器的begin(),commit(),rollack()等方法。 1、@Transactional应用在非 public 方法上 spring 事务底层在扫描 @Transactional 注解时会直接不会获取非 public 的方法上的 @Transactional 注解的属性信息,使用JDK或者CG...

2020-09-13 22:20:26 125

原创 Redis Sentinel和Raft协议

Sentinel(哨兵)为redis提供高可用性(HA),官方文档https://redis.io/topics/sentinel 用于监视主从服务器,主节点下线时进行选主。本质上是一个运行在特殊模式下的redis服务器,只是端口、命令集等有所不同,维护主从服务器、其他sentinel的状态,一般通过配置文件(主节点IP,下线时间阈值等)来初始化。 哨兵和master一般是多对多的,多个哨兵监视多个master。哨兵连接主从服务器时,除了命令连接,还会创建订阅连接,订...

2020-08-23 19:54:31 1110

原创 莫名其妙的bug

工作一年了,感觉还是要多记录一些东西,系统地总结太费时间,可能更多是一些细碎的东西。```javaMap<Long, List<String>> map;List<String> partition = Lists.newArrayList();for(Map.Entry<Long, List<String>> entry : map.entrySet()){ partition.addAll(entry.getValue());

2020-08-23 17:27:37 210

原创 《Kafka权威指南》读书笔记——可靠性、管道、镜像、流处理等

写在前面,最近网易驱赶绝症员工的事情很火,网易做出这种事情一点也不奇怪,早就爆出过保安驱赶员工的事情。专门挑周五、没人的会议室谈话裁员,怕员工闹事,不给n+1。考拉卖给阿里的时候组里人心惶惶根本没人干活,拖了一两个月高层一句话都没说,最后丁胖子出来说了句在合作,然后转手就被卖了,对员工毫无责任心。考拉被阿里收购也算因祸得福吧,祝网易的前同事早日脱离苦海。。。一、深入Kafka(1)集...

2019-11-24 21:17:33 355 1

原创 《Kafka权威指南》读书笔记——生产者、消费者

一、Kafka基本概念Kafka是分布式日志系统、分布式流平台,按序持久化,消费者按需读取。Kafka 的数据单元被称为消息,可以理解为数据库的一行,为了提高效率,消息被分批次写入Kafka ,批次就是一组消息(通常我们所说的batch_size就是批次大小),需要在时间延迟和吞吐量之间做权衡,选择合适的batch_size。消息写入分区时用到键,一般取键的hash,对分区数取模,保证相同键的...

2019-11-24 13:28:24 327

原创 《Spring技术内幕》读书笔记——Spring MVC

1、根上下文初始化DispatcherServlet分发请求,可以配置多个,定义了URL映射;ContextLoaderListener是Spring MVC的启动类,被定义为一个与Web服务生命周期相关的监听器,负责完成IOC容器在Web环境中的启动。DispatcherServlet和ContextLoaderListener提供了在Web容器中对Spring的接口,这些接口与容器的耦合通...

2019-09-12 00:52:01 140

原创 《Spring技术内幕》读书笔记——AOP源码

1、Advice通知、Pointcut切点、Advisor通知器Advice(通知)定义在连接点做什么,为切面增强提供织入接口。Spring AOP提供了BeforeAdvice、AfterAdvice、ThrowsAdvice等。MethodBeforeAdvice接口继承自BeforeAdvice,提供了void before(Method method, Object[] args, O...

2019-09-08 22:57:17 156 1

原创 《Spring技术内幕》读书笔记——IoC源码

Inversion of Control,控制反转,又称Dependency Inversion Principle,依赖倒置,由容器来管理Bean。1、BeanFactory继承体系Spring定义BeanDefinition抽象Bean的定义,来管理对象和对象的依赖关系。从BeanFactory到HierarchicalBeanFactory,到ConfigurableBean...

2019-09-07 15:33:13 148 1

原创 设计模式

主要参考https://cyc2018.github.io/CS-Notes/#/notes/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F创建型1、单例懒汉式,性能差public class Singleton { private static Singleton uniqueInstance; private Singl...

2019-09-02 23:58:44 104

原创 Git常用命令

Git 每次提交更新时,它会纵览一遍所有文件的指纹信息并对文件作一快照,然后保存一个指向这次快照的索引。为提高性能,若文件没有变化,Git 不会再次保存,而只对上次保存的快照作一链接,图中虚线的文件并未保存。在 Git 内都只有三种状态:已提交(committed),已修改(modified)和已暂存(staged),对应本地仓库、工作区和暂存区三个位置。(1)git clo...

2019-08-03 23:55:21 84

原创 《RabbitMQ实战指南》读书笔记——高级特性

高级特性部分偏运维,讲了很多配置和命令,简单了解,重点了解一下集群和负载均衡。1、RabbitMQ管理(1)多租户与权限每一个RabbitMQ服务器能创建虚拟的消息服务器(vhost),拥有独立的Queue、Exchange、Bindings、权限等,提供了逻辑上的分离,默认创建的vhost为“/”,权限控制以vhost为单位。rabbitmqctl是用来管理RabbitMQ...

2019-08-03 18:51:52 756

原创 《RabbitMQ实战指南》读书笔记——进阶篇(Chapter 4)

1、备份交换器Alternate Exchange生产者发送消息时如果不设置mandatory,消息未被路由则会丢失;如果设置了mandatory需要添加ReturnListener,增加了代码复杂性。如果不想消息丢失,可以使用备份交换器来存储未被路由的消息。可以在exchangeDeclare方法里的args参数列表里添加alternate-exchange参数来给声明的exchange添加...

2019-07-21 16:00:13 192 2

原创 《RabbitMQ实战指南》读书笔记——基础篇(Chapter 1~3)

1、什么是MQ MQ有点对点(P2P,Point-to-Point)和发布/订阅(Pub/Sub)两种模式。RabbitMQ属于P2P模式,但也可以通过将消息写入多个队列来实现发布订阅,如图所示。 MQ的作用概括如下:解耦(两边处理过程独立)、冗余(存储)、扩展性、削峰、可恢复性、顺序保证(一定程度上)、缓冲(控制数据流速度)、异步通信。 RabbitMQ是Erl...

2019-07-21 00:06:14 260

转载 RabbitMQ简介

实习用到了RabbitMQ,简单了解了基本原理,后续可以看看源码和其他MQ。Queue 消息队列,提供了FIFO的处理机制,具有缓存消息的能力。rabbitmq中,队列消息可以设置为持久化,临时或者自动删除。 1、设置为持久化的队列,queue中的消息会在server本地硬盘存储一份,防止系统crash,数据丢失 2、设置为临时队列,queue中的...

2018-08-15 17:24:19 160

原创 序列化

1、序列化几种方式 thrift、hessian、java、json等 (1)java序列化 将对象实例相关的类元数据输出; 递归地输出类的超类描述直到不再有超类; 类元数据完了以后,开始从最顶层的超类开始输出对象实例的实际数据值; 从上至下递归输出实例的数据; java的序列化机制是通过在运行时判断...

2018-08-15 16:11:45 120

原创 《Redis设计与实现》读书笔记——发布与订阅、事务、排序、二进制位数组

1、发布与订阅    发布与订阅功能有PUBLISH、SUBSCRIBE、PSUBSCRIBE(正则订阅,订阅某个模式)等命令组成。例如SUBSCRIBE "news.it"、PUBLISH "news.it" "hello"、PSUBSCRIBE "news.[ie]t"等。struct redisServer{ // 保存所有频道的订阅关系,Map&lt;channel,List&l...

2018-05-05 14:29:21 271

原创 《Redis设计与实现》读书笔记——复制、Sentinel、集群

1、复制    用SLAVEOF命令让一个服务器(从)去复制另一个服务器(主)。例如127.0.0.1:12345&gt; SLAVEOF 127.0.0.1 6379,127.0.0.1:12345将成为127.0.0.1:6379的从服务器。    (1)旧版复制功能实现,分为同步和命令传播两个操作。当执行SLAVEOF时,首先执行同步操作,【1】从服务器向主服务器发送SYNC命令【2】主服务...

2018-05-04 22:29:03 316

原创 《Redis设计与实现》读书笔记——数据库、持久化、事件、客户端、服务器

1、数据库struct redisServer{ // 一个数组,保存服务器中所有数据库 redisDb *db; // 服务器的数据库数量,默认16 int dbnum; };typedef struct redisClient{ /** 记录客户端正在使用的数据库 * 指向redisServer.db数组的...

2018-05-04 19:01:31 141

原创 《Redis设计与实现》读书笔记——数据结构与对象

1、数据结构 (1)简单动态字符串(SDS)struct sdshrd{ // 记录buff数组中已使用字节的数量 int len; // 记录未使用字节的数量 int free; // 字节数组,用于保存字符串 char buf[];} 与C字符串相比,可以O(1)获取长度、杜绝缓冲区溢出、减少修改字符串时的内存重分...

2018-05-03 20:37:26 143

原创 《深入理解Java虚拟机》读书笔记——类文件结构、虚拟机类加载机制等

1、类文件结构,虚拟机接受Class字节码文件,是与操作系统和机器指令集无关的、平台中立的格式,其他语言也可以编译成Class文件,字节码命令所能提供的语义描述能力比Java语言更加强大。Class文件是一组以8位字节为基础单位的二进制流,只有无符号数和表两种数据类型,有如下一些组成部分:    (1)魔数与Class文件版本:魔数唯一作用是确定这个文件是否为一个能被虚拟机接受的Class文件,0...

2018-04-29 23:47:52 159

原创 《深入理解Java虚拟机》读书笔记——垃圾收集器和内存分配策略

1、判断对象是否存活    (1)引用计数法:给对象添加一个引用计数器,每当有一个地方引用它时,计数器值就加1。无法解决循环引用的问题,无法表示强、软、弱、虚引用四种引用类型;    (2)可达性分析:以GC Roots为起点,向下搜索,搜索的路径称为引用链,当一个对象到GC Roots没有任何引用链相连,可回收。GC Roots包括【1】虚拟机栈(栈帧中的本地变量表)中引用的对象【2】本地方法栈...

2018-04-29 20:31:18 152

原创 《深入理解Java虚拟机》读书笔记——内存区域、OOM、对象(创建、存储和定位)、String.intern()

1、内存区域和OOM    (1)程序计数器:较小的空间,可以看作当前线程所执行的字节码的行号指示器(即字节码指令的地址),每条线程都需要一个独立的程序计数器,用于切换线程后能恢复到正确的执行位置,是唯一一个没有规定OOM情况的区域。如果执行的是native方法,计数器为空(native方法体不是由java字节码构成的);    (2)Java虚拟机栈:线程私有,生命周期与线程相同。每个方...

2018-04-25 20:29:14 180

原创 JUC源码——CopyOnWriteArrayList、(Array/Linked)BlockingQueue、ConcurrentLinkedQueue(1.8)

1、CopyOnWriteArrayListpublic class CopyOnWriteArrayList&lt;E&gt; implements List&lt;E&gt;, RandomAccess, Cloneable, java.io.Serializable { // 用ReentrantLock实现线程安全 final transient ReentrantLock loc...

2018-04-25 18:35:31 195

原创 JUC源码——ConcurrentHashMap(1.8)

    1.8以前用分段锁实现static class Segment&lt;K, V&gt; extends ReentrantLock implements Serializable { final float loadFactor; Segment(float lf) { this.loadFactor = lf; }}    1.8及之后用了Unsafe类的CAS操作和并发扩...

2018-04-25 16:28:19 148

原创 《Java并发编程实战》读书笔记——volatile(可见性、重排序和内存屏障)、Exchanger和CompletionService

1、volatile,保证了可见性,禁止指令重排序。    (1)可见性,深入分析volatile的实现原理    处理器先将内存数据读到L1、L2缓存,再进行操作,不定期写回内存。如果写volatile变量,JVM就会向处理器发送一条Lock前缀的指令,Lock指令会使处理器将缓存写入内存,并使其他处理器的缓存无效。但其他处理器缓存的值还是旧的,为了保证各个处理器的缓存一致,就会实现缓存一致性协...

2018-04-25 14:15:56 188

原创 《Java并发编程实战》读书笔记——线程池、Callable、Future、FutureTask

1、Executor和ExecutorService    基于生产者——消费者模式,提交任务的线程是生产者,执行的是消费者。public interface Executor { void execute(Runnable command);}    为了解决执行服务的生命周期问题,有了ExecutorService接口,添加了一些用于生命周期管理的方法。线程池有RUNNING、SHUTDO...

2018-04-24 22:44:40 209

原创 《Java并发编程实战》读书笔记——ThreadLocal、中断、UncaughtExceptionHandler、wait()、notify()和Condition

1、ThreadLocal,注意ThreadLocal在lang包里,而不是JUC。多用于保存数据库连接、管理Session、保存事务上下文等。public class ThreadLocal&lt;T&gt; { /** * 先获得线程ThreadLocal.ThreadLocalMap类型的成员变量threadLocals&lt;ThreadLocal&lt;K&gt;,V&gt; ...

2018-04-24 20:34:03 168

原创 《Java并发编程实战》读书笔记——synchronized和ReentrantLock

1、synchronized确保线程互斥访问同步代码,synchronized和volatile都保证了内存可见性,解决了重排序(为了充分利用多核、多级缓存)。    内存可见性:每个CPU都有自己的缓存区,其他CPU上的线程无法看到该CPU对变量的修改。    synchronized和ReentrantLock一样,也是可重入的。为什么需要可重入,看如下代码,如果synchronized不是可...

2018-04-24 15:27:44 133

原创 《Java并发编程实战》读书笔记——AQS、CountDownLatch和CyclicBarrier

1、AQS,AbstractQueuedSynchronizer,抽象的队列式同步器,是一个抽象类,用了模板方法模式。作为模板类,定义了多线程访问共享资源的框架。维护一个volatile int state代表共享资源和一个FIFO线程队列,state可以表示Semaphore的数值、ReentrantLock的重入次数、CountDownLatch的数量等,ReentrantReadWriteL...

2018-04-23 20:01:07 272

原创 《Java并发编程实战》读书笔记——同步的方法、原子类、Unsafe类与CAS

1、同步的方法    (1)不在线程之间共享该状态变量(线程私有,如ThreadLocal);    (2)将状态变量修改为不可变的变量(final,如果final变量里有可变变量,则不是不可变变量);    (3)在访问状态变量时使用同步(synchronized,并发包的很多类,如ReentrantLock、CountDownLatch等等);2、原子类,用CAS自旋+volatile变量实现...

2018-04-23 18:24:12 229

原创 《现代操作系统》读书笔记——生产者消费者问题、哲学家就餐、银行家算法

1、生产者——消费者问题(1)Semaphore实现public class ProducerConsumer { int count = 0;// 缓冲区的产品数量 Semaphore mutex = new Semaphore(1); Semaphore empty = new Semaphore(N); Semaphore full = new Semaphore(0); cla...

2018-04-23 12:39:14 945

原创 《现代操作系统》读书笔记——进程与线程、存储管理

1、开机    系统一般从硬盘启动,BIOS将设备上的第一个扇区读入内存并执行(第一个扇区是SETUP模块),SETUP告知OS硬件信息,将OS读入内存,初始化硬盘、IO、CPU、时钟等,启动后OS放在内存0地址处。 2、系统调用    操作系统运行在内核态,可以执行任何指令;用户态下只使用了机器指令中的一个子集。中断是进入内核的唯一方法(如果没有用户态,所有程序可任意修改内存)。...

2018-04-22 23:04:00 204

原创 MySQL索引——分类、何时使用、何时不使用、何时失效

1、分类    MySQL索引分为普通索引、唯一索引、主键索引、组合索引、全文索引。索引不会包含有null值的列,索引项可以为null(唯一索引、组合索引等),但是只要列中有null值就不会被包含在索引中。    (1)普通索引:create index index_name on table(column);    或者创建表时指定,create table(..., index i...

2018-04-22 21:39:30 23087 3

原创 《高性能MySQL》读书笔记—数据类型、MVCC、InnoDB、索引等

MySQL默认的隔离级别是repeatable read。InnoDB解决死锁:将持有最少行级排他锁的事务回滚。1、数据类型    (1)tinyint(8),smallint(16),mediumint(24),int(32),bigint(64)    (2)float(32),double(64),decimal(最多65个数字,不会丢失精度,cpu不支持decimal计算,是MySQL实现...

2018-04-22 16:54:27 351

原创 《数据库系统概念》读书笔记——事务、并发控制(隔离级别的实现)、乐观锁和悲观锁

1、事务    (1)ACID:原子性,一致性(事务执行前后满足约束条件,例如转账前后总钱数不变),隔离性,持久性    几种不一致现象:丢失修改(read uncommitted即可避免,因为加了写锁)、脏读、不可重复读、幻读    【1】脏读:事务处理过程中读取了另一个未提交事务的数据    【2】不可重复读:一个事务范围内多次查询返回不同的数据。是由于查询间隔内,另一个事务修改并提交了数据 ...

2018-04-22 15:23:47 370

原创 《数据库系统概念》读书笔记——散列和索引

    索引是index_field(s) + pointer,提高查询效率,缺点是维护索引有额外开销,需要建立合适的索引。    总体上可以分为顺序索引、散列索引和位图索引。1、顺序索引,常用B+树实现    (1)聚集索引和非聚集索引:聚集索引(主索引)只有一个,主文件按某个搜索码排序,该搜索码对应的索引是聚集索引,搜索码不一定是主键(即聚集索引的物理顺序与索引顺序相同)。    建表时的主键...

2018-04-22 14:20:16 1360

原创 《数据库系统概念》读书笔记——概念、SQL、JDBC、ER、范式等

1、关系型数据库    列:字段/属性    行:元组/记录    关系:笛卡尔积中符合某种关系的元组(笛卡尔积是从两个关系中合并元组)    超码是可以唯一标识元组的属性组合,候选码是最小的超码,主码是被选中的候选码 2、SQL    有char(n),varchar(n),int,smallint,numeric(p, d),float(n),date,time,tim...

2018-04-21 17:35:34 1344

原创 《计算机网络——自顶向下方法》读书笔记——数据链路层、Web页面请求流程和加密算法

1、链路层概述 链路层主体是网卡,屏蔽了不同的物理层实现,将网络层的数据报传输到相邻的节点。 提供成帧、链路接入(MAC协议)、可靠交付、差错检测和纠正等服务。 差错检测和纠正包括(1)奇偶检校,检查1的个数,二位奇偶检校可以纠正单个比特差错(2)检验和(3)循环冗余检测2、多路访问链路和协议 协调多个发送/接收点对一个共享广播信道的访问,避免碰撞,有如下几种协议: ...

2018-04-21 16:38:06 543

原创 《计算机网络——自顶向下方法》读书笔记——网络层(IP,ICMP,DHCP,RIP,OSPF等)

1、网络层概述    网络层主要功能为转发(将数据从路由器输入接口转移到合适的输出接口)和路由选择(端到端的路径选择),每台路由器都有一张转发表,用最长前缀匹配规则来转发。    因特网的网络层提供了不可靠的服务,主要包括IP协议、路由选择协议(RIP,OSPF,BGP)、控制报文协议(ICMP)等。2、IP协议    IPV4报文头分为20字节的固定部分和可变部分(可变部分最大为40字节)。  ...

2018-04-21 15:48:05 1227

原创 《计算机网络——自顶向下方法》读书笔记——运输层(UDP、TCP、滑动窗口)

UDP:首部8字节        只提供最低限度的服务,多路分解、多路复用和差错检验。多路复用是从不同的套接字收集数据并发送,多路分解是将接收到的数据交付到不同的套接字。UDP的套接字是目的IP和目的端口号的二元组,而TCP的套接字是源、目的IP和端口号的四元组。    缺点:没有流量控制和拥塞控制,丢包率高,不可靠;优点:无连接,没有建立连接的时延,首部小。    可以在应用层实...

2018-04-20 23:30:50 964

空空如也

空空如也

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

TA关注的人

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