自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

程序媛的一生

愿你纵横书海,不再感到孤单

  • 博客(257)
  • 资源 (4)
  • 收藏
  • 关注

原创 mysql避免死锁

1.经常提交你的事务,小事务更少的倾向于冲突 2.以固定的顺序访问你的表和行,这样事务就会形成良好的查询并且没有索引 3.讲精心选定的索引添加到你的表中,这样你的查询就只需要扫描更少的索引记录,并且因此可以设置更好的锁定 4.不要把无关紧要的操作放到事务里面 5.尽量按照主键索引去查找记录,范围查找增加了锁冲突的可能性,也不要利用数据库去做一些额外的计算操作,比如...

2018-11-10 15:37:37 344

原创 dubbo读书笔记

服务器路由     分布式服务框架上线运行时都是集群组网,这意味着集群中存在着某个服务的多实例部署,消费者如何从服务列表中选择合适的服务提供者进行调用,这就涉及到服务路由。分布式服务框架要能够满足用户灵活的路由需求透明化路由很多开源的RPC框架调用者需要配置服务提供者的地址信息,尽管可以通过读取数据库的服务地址列表避免硬编码地址信息,但是消费者依然要感知服务提供者的地址信息,这违反...

2018-11-09 20:38:13 362

原创 ISR

 ISR上节我们涉及到ISR (In-Sync Replicas),这个是指副本同步队列。副本数对Kafka的吞吐率是有一定的影响,但极大的增强了可用性。默认情况下Kafka的replica数量为1,即每个partition都有一个唯一的leader,为了确保消息的可靠性,通常应用中将其值(由broker的参数offsets.topic.replication.factor指定)大小设置为大于...

2018-11-09 20:37:30 8916 2

原创 https原理

我们都知道https能勾加密信息,以免敏感信息被第三方获取。所以很多银行网站活着电子邮箱等安全级别比较高的服务都会采用https协议HTTPS简介 HTTPS其实有两部分组成:HTTP + SSL/TLS,也就是在HTTP上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过TLS加密,所以传输的数据都是加密后的数据。具体是符合进行加密的,解密,验证的,且看下图 ...

2018-11-09 10:27:38 4946 1

原创 幂等性

目的幂等只要用于网络接口的特性描述,指的是网络接口的调用可以重试,而不会带来副作用 分布式系统的调用失败有一种情况是等待返回时超时,对于这种情况,调用方并不知道之前的的请求是否执行成功,被调用方可能执行成功也可能没有执行成功这时候如果接口是幂等的,调用方就可以继续发起重试请求,来确保请求最终执行成功如保证同一个的一笔交易能够不多次进行支付,即使同一时间因为误操作进行了多笔交易,...

2018-11-09 10:27:19 1304

原创 事务

事务的原子性:原子性是指整个数据库事务是不可分割的工作单位,只有事务中所有的数据库操作执行都成功,才算真正的成功,如果事务中任何一个sql语句执行失败,那么已经执行成功的sql语句也必须撤销数据库的状态应该回滚到执行事务前的状态一致性:指事务将数据库从一种状态转变为下一种一致的状态,在事务开始之前和事务结束之后,数据库的完整性约束没有被破坏 隔离型一个事务的影响在该事务...

2018-11-09 10:26:46 248

原创 稳定的性能架构设计

日常运行 稳定性能架构设计: 大系统小做:服务专一性独立的功能拆分为独立的服务   依赖稳定性原则:只依赖稳定的服务将易变的部分拆分超时中断  保障用户体验的容错设计:异常情况下客户端的呈现客户段配合限流客户端配合降级      全链路压测:   事前预警:性能大盘: CPU...

2018-11-09 10:26:32 727

原创 CPU-bound(计算密集型) 和 I/O bound(I/O密集型)

如果所有的任务都是计算(CPU)密集型的,则创建处理器可用核心数这么多个线程就可以了,这样已经充分利用了处理器,也就是让它以最大火力不停进行计算。创建更多的线程对于程序性能反而是不利的,因为多个线程间频繁进行上下文切换对于程序性能损耗较大。线程数=cpu核心数+1    但如果任务都是IO密集型的,那我们就需要创建比处理器核心数大几倍数量的线程。为何?当一个任务执行IO操作时,线程将被阻塞,于...

2018-11-09 10:25:36 2125

原创 DUBBO架构设计

概述笔者本次分享主要涉及三方面:Dubbo架构设计 Dubbo Admin原理 Dubbo Monitor原理Dubbo架构设计Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基...

2018-11-09 10:24:46 146

原创 dubbo集群容错与负载均衡源码解读

https://dubbo.gitbooks.io/dubbo-user-book/preface/architacture.html首先连接一下概念整个Dubbo的RPC框架建立在Protocol、Exporter和Invoker这三个接口上,Protocol扩展点定义了一种RPC协议的实现,即如何发布和引用服务,Exporter代表了一个对外暴露的服务,Invoker执行远程调用并...

2018-11-09 10:23:54 318

原创 kafka

•Kafka是一个分布式发布-订阅消息系统。它最初由LinkedIn公司开发,之后成为Apache项目的一部分。•Kafka主要特点  (1) 高吞吐量。据了解,Kafka每秒可以生产约25万条消息(50 MB),每秒处理55万条消息(110 MB)。      (2) 持久化。将消息持久化到磁盘,因此可用于批量消费,例如ETL,以及实时应用程序。通过将数据持久化到硬盘以及replic...

2018-11-09 10:22:56 392

原创 分库分表策略选择

分库分表概念       顾名思义,即把原本存放在一个库中的数据分块存储到多个库中,把原本存放在一张表中的数据分块存放到多张表上。分库分表的实施策略   垂直切分         将表按功能模块、关系密切程度进行划分,部署到不同的库中。如产品库productDB,订单库orderDB, 用户库userDB,日志库logDB等。   水平切分         当一个表中的数据...

2018-11-08 20:49:42 1158

原创 为什么要分库分表

1.为什么要分库分表       1)随着业务的不断增长,数据库中表越来越多,同时表中的数据量也越来越大,业务总量达长到一定程度以后,数据库进行增删改查的开销就会显著增加,并且数据库的承载能力毕竟是有限的(受限于CPU,磁盘,内存,IO等)。       2)主流数据库性能已经很优,采用升级服务器(小型机)也能解决性能和存储问题,为什么不采用?             综合考虑成本的原...

2018-11-08 20:48:40 1398 2

原创 BinLog

BinLog是什么        二进制日志,它记录了数据库上的所有改变。当执行更新SQL语句时,首先在binlog的末尾写入一条记录,然后才会通知语句解析器,进行sql解析执行。         存在两种形式BinLog,基于语句的binLog和基于行的binLog。 基于语句的binLog无法保证所有语句都在从库执行成功,比如update ... limit  1;  基于行的binL...

2018-11-08 20:46:22 718

原创 总结INNODB锁机制

基于锁的并发控制           与多版本的并发控制协议MVCC(Multi-Version Concurrency Control)相对的,基于锁的并发控制,Lock-Based Concurrency Control。         SQL执行计划:主键扫描 ,唯一键扫描 , 范围扫描 , 全表扫描, 前三种属于索引扫描。读操作分类快照读       简单的selec...

2018-11-08 20:45:45 475

原创 mysql之MVCC

MVCC         Mysql中MVCC是在Innodb存储引擎中得到支持的,Innodb为每行记录都实现了三个隐藏字段:         DB_TRX_ID:  6字节的事务ID, 用来标识该行所述的事务。         DB_ROLL_PTR: 7字节的回滚指针。         DB_ROW_ID:隐藏的ID,随着数据的增加而增加。redo log       ...

2018-11-08 20:45:09 201

原创 mysql意向锁

意向锁的含义       如果对一个结点加意向锁,则说明该结点的下层结点正在被加锁;对任一结点加锁时,必须先对它的上层结点加意向锁。意向锁是放置在资源层次结构的一个级别上的锁,以保护较低级别资源上的共享或排它锁。意向共享锁(IS锁)       如果对一个数据对象加IS锁,表示它的后裔结点拟(意向)加 S锁。例如,要对某个元组加 S锁,则要首先对关系和数据库加 IS锁。意向排他...

2018-11-08 20:44:26 3484

原创 mysql知识点

innodb 二次写 :写入真实表之前,先写入共享表空间(一次随机IO,2M大小)Buffer Pool 占到75-80% 内存空间, 很重要。innodb 辅助索引叶子节点: 存放的是key 和 主键索引。url字段添加索引,可以通过先hash ,然后建索引联表查询,要遵循最左原则。 只扫描自己需要的列。最先优化查询次数最多的sql ,而非执行时间最长的sql。查看执...

2018-11-08 20:43:45 125

原创 mysql锁

事务的四个特性(ACID)原子性       要么做完,要么啥也别做。实现依赖于undo  log 和 redo  log。一致性      节点服务器的数据完整性,指在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。这是说数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。依赖undo log。 隔离性      你做你的,我做我的。且所做的修改在事务最终...

2018-11-08 20:42:52 116

原创 死锁总结

死锁的必要条件(1) 互斥条件:一个资源每次只能被一个进程使用。(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。 以上解释稍显苦涩,翻译一下就是:             必须存在多个并发进程(事务)      ...

2018-11-08 20:41:41 201

原创 dubbo负载均衡源码解读

https://dubbo.gitbooks.io/dubbo-user-book/preface/architacture.html首先连接一下概念整个Dubbo的RPC框架建立在Protocol、Exporter和Invoker这三个接口上,Protocol扩展点定义了一种RPC协议的实现,即如何发布和引用服务,Exporter代表了一个对外暴露的服务,Invoker执行远程调用并...

2018-11-08 20:40:40 252

原创 AQS源码解读三 Condition

在没有Lock之前,我们使用synchronized来控制同步,配合Object的wait()、notify()系列方法可以实现等待/通知模式。在Java SE5后,Java提供了Lock接口,相对于Synchronized而言,Lock提供了条件Condition,对线程的等待、唤醒操作更加详细和灵活。下图是Condition与Object的监视器方法的对比(摘自《Java并发编程的艺术》):C...

2018-05-13 18:34:41 967

原创 InheritableThreadLocal

J.U.C之并发工具类:ThreadLocal源码解读 一 这篇文章详细的讲解了threadLocal的原理,今天就来讲讲 InheritableThreadLocal  InheritableThreadLocal是什么东东呢,本姑娘今天就来讲解下,还是老的套路  即 是什么  怎么用  为什么,但是读懂的前提还是在读懂ThreadLocal的源码的前提下 什么是InheritableThrea...

2018-05-08 15:16:56 323

原创 Disruptor学习

先把这几篇文章看了下 嗯。。。。 有点成效http://ifeve.com/disruptor/感觉好的点是ringbuffer 环形队列 其实是个数组 无锁  cas解决伪共享问题各种wait 策略

2018-05-08 10:54:41 263

转载 INNODB MVCC

在讲解InnoDB的MVCC机制之前,我们应该了解MySQL所支持的事务,以及各个事务级别的区别和每一个事务级别所存在的问题。1. 事务事务必须保证ACID,而ACID表示原子性、一致性、隔离性和持久性1.1 事务的隔离级别事务可以通过start transaction语句开始一个事务,然后要么使用commit提交事务将所修改的数据持久保存,要么使用rollback撤销所有修改1.1.2 READ...

2018-05-08 10:53:14 619

原创 INNODB结构分析

  后台线程的主要作用是负责刷新内存池中的数据,保证缓冲池中的内存缓存的是最新的数据,将已修改的文件刷新到磁盘文件保证数据库发生异常时 InnoDB能够恢复到正常运行的状态   后台线程使用的是多线程模型,其后台有多个不同的线程负责处理不同的任务 1.Master Thread最核心的一个线程,主要负责将换种池中的数据异步刷新到磁盘,保证数据一致性,包括脏页的刷新,合并插入缓冲,UNDO页的回收等...

2018-05-08 10:51:08 428

原创 数据库事务如何保证

 原子性:在学习事务时,经常有人会告诉你,事务就是一系列的操作,要么全部都执行,要都不执行,这其实就是对事务原子性的刻画;虽然事务具有原子性,但是原子性并不是只与事务有关系,它的身影在很多地方都会出现。 事务其实和一个操作没有什么太大的区别,它是一系列的数据库操作(可以理解为 SQL)的集合,如果事务不具备原子性,那么就没办法保证同一个事务中的所有操作都被执行或者未被执行了,整个数据库系统就既不可...

2018-05-08 10:50:24 2835

原创 ThreadLocal源码解读一

简介 ThreadLocal是什么呢?其实ThreadLocal并非是一个线程的本地实现版本,它并不是一个Thread,而是threadlocalvariable(线程局部变量)。也许把它命名为ThreadLocalVar更加合适。线程局部变量(ThreadLocal)其实的功用非常简单,就是为每一个使用该变量的线程都提供一个变量值的副本,是Java中一种较为特殊的线程绑定机制,是每一个线程都可以...

2018-05-08 10:43:08 1470 2

原创 AQS源码解读 二

前面已经讲解了AQS源码的独享模式,今天来讲一下AQS的共享模式 下面以CountDownLatch去讲解AQS的共享模式 首先讲下什么是CountDownLatch,CountDownLatch所描述的是”在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待“。在API中是这么说的:用给定的计数 初始化 CountDownLatch。由于调用了 countDown() 方法,所以...

2018-05-01 17:14:46 412

原创 AQS源码解读一

最近想看JUC包下源码,本来是想看后继续写公众号的,发现了看这些源码前我首先要了解下什么是AQS,懂了他,JUC下的很多问题都不再是问题了,奈何平时工作忙,只能利用加班的时间看看源码,所以自己潜水了一周多,在默默的研究AQS先普及下基础:自旋锁:在访问共享变量时,如果访问资源的线程没有拿到访问权限(未拿到锁),不是让线程释放资源,而是让线程处于无限循环的请求锁,并一直检测自己的状态,只有当请求到锁...

2018-04-24 10:44:07 1256

原创 LinkedHashMap源码解读

可能大家都知道,hashmap是不保证插入顺序的,LinkedHashMap是保证插入顺序的,但是如何保证插入顺序的呢咳咳,如下会解答LinkedHashMap还能根据访问顺序排序,mm我之前还真不知道,读完源码后才发现他跟LRU算法的逻辑一样一样哒当然要读懂我写的前提是对hashmap源码也得研究透,我是在hashmap基础上讲的,看不懂的mm 和 gg就看下我之前写的hashmap源码,关注下...

2018-04-10 23:01:22 192

原创 CurrentHashMap jdk 1.7解读

ConcurrentHashMap 的结构分析  那么mm就有点疑问了,ConcurrentHashMap是如何定位到一个元素的?????? ConcurrentHashMap定位一个元素的过程需要进行两次的hash操作,第一次Hash定位Segment,第二次hash定位到元素所在的链表头部这会造成hash的过程要比hashmap要长,但是带来的好处是写操作的时候可以只对元素所在的segment...

2018-04-09 17:01:38 854

原创 HashSet源码解读

HashSet概述HashSet是基于hashmap实现的,HashSet的底层是用hashmap来保存所有的元素hashset源码比较简单,但是必须在hashmap的基础上去理解。可以参考我的hash源码解读来理解//可以看到底层使用hashmap来保存hashset中的元素 不序列化private transient HashMap<E,Object> map;//定义一个虚拟的对...

2018-04-09 16:59:03 191

原创 HashMap源码解读

hashmap示意图HashMap的源码中,充斥个各种位运算代替常规运算的地方,以提升效率: * 与运算替代模运算。用 hash & (table.length-1) 替代 hash % (table.length) * 用if ((e.hash & oldCap) == 0)判断扩容后,节点e处于低区还是高区。链表的节点数据结构构造函数  1.第一个构造函数:指定table的si...

2018-04-09 16:56:31 348 1

原创 如何避免mysql死锁

1.经常提交你的事务,小事务更少的倾向于冲突2.以固定的顺序访问你的表和行,这样事务就会形成良好的查询并且没有思索3.讲精心选定的索引添加到你的表中,这样你的查询就只需要扫描更少的索引记录,并且因此可以设置更好的锁定4.不要把无关紧要的操作放到事务里面5.尽量按照主键索引去查找记录,范围查找增加了锁冲突的可能性,也不要利用数据库去做一些额外的计算操作,比如select  .... where......

2018-03-08 10:53:39 573

原创 为啥redis快?

绝大部分的请求是纯内存的操作(非常快速)1)绝大部分请求是纯粹的内存操作(非常快速)2)采用单线程,避免了不必要的上下文切换和锁等竞争条件3)非阻塞io 内部采用epoll,采用了epoll+自己实现的简单的事件框架。epoll中的读、写、关闭、连接都转换成了事件,然后利用epoll的多路复用特性,绝不在io上浪费一点时间

2017-12-08 15:58:31 582

原创 java内存模型

JVM规范定义了java内存模型 来屏蔽掉各种操作系统、虚拟机实现厂商和硬件的内存访问差异,以确保java程序在所有操作系统和平台上能够实现一次编写到处运行的效果1.工作内存和祝内存java内存模型规定所有的变量都存储在主内存中(JVM内存的一部分) 每个线程有自己独立的工作内存,他保证了被该线程使用的变量的主内存复制,线程对这些变量的操作都在自己的工作内存中进行,不能直接

2017-11-30 21:41:49 168

原创 传统的RPC调用性能差的原因

罪行一:网络传输方式问题。传统的RPC框架或者基于RMI等方式的远程服务(过程)调用采用同步阻塞IO,当客户端的并发压力或者网络延时增大之后,同步阻塞I/O会由于频繁的wait导致I/O线程经常性的阻塞,由于线程无法高效的工作,I/O处理能力自然下降采用BIO通信模型的服务,通常由一个独立的Acceptor线程负责监听客户端的链接,收到客户端连接之后,为其创建一个新的线程处理请求消息,处理

2017-11-28 19:10:35 2238

原创 线程安全问题

public class ClientGenerator {   private static volidate Hello helloClient = null;   public static Hello getHelloClient() {       if (helloClient == null) { // a           synchroniz

2017-10-26 16:10:38 379

转载 @Resouce @Autowired 区别

spring不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource、@PostConstruct以及@PreDestroy。  @Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了。@Resource有两个属性是比较重要的,分是nam

2017-03-21 23:23:26 1178

实战java高并发程序设计

java多线程学习的非常好的书籍

2018-03-28

贪心算法实例

包括背包问题,活动安排问题,多机调度问题,和哈夫曼树和编码问题

2013-05-08

动态规划法实例

包括动态规划法里的背包,最长公共序列和最优二叉查找树的算法

2013-05-08

课程设计通讯录管理系统(链表)

能对数据进行存储,读入,查找,删除,修改

2013-02-02

空空如也

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

TA关注的人

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