自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 spring Ioc源码解读-xml资源加载与解析

Spring对内部使用到的资源比如spring.xml实现了自己的抽象结构,Spring利用Resource接口封装底层资源文件public interface Resource extends InputStreamSource { boolean exists(); boolean isReadable(); boolean isOpen(); URL getURL()

2017-11-30 21:03:54 424

原创 ZooKeeper ZAB协议简述

Zookeeper主要依赖ZAB(ZooKeeper Atomic Broadcast)协议实现分布式数据的一致性,基于该协议,ZooKeeper实现了一种主备模式的系统架构来保持集群中各副本之间的数据一致性。具体的说: 1. ZooKeeper使用一个单一的主进程(单进程更好处理客户端并发)来接收并处理客户端的事务请求,并采用ZAB原 子广播协议将服务器数据的状态变更以事务Proposal形

2017-11-30 19:39:11 1303

转载 Redis之LRU-Cache

LRU(Least Recently Used)最近最少使用算法是众多置换算法中的一种。 Redis中有一个maxmemory概念,主要是为了将使用的内存限定在一个固定的大小。Redis用到的LRU 算法,是一种近似的LRU算法。1 设置maxmemory上面已经说过maxmemory是为了限定Redis最大内存使用量。有多种方法设定它的大小。其中一种方法是通过CONFIG SET设定,如下:1

2017-11-27 14:11:20 717

原创 分布式锁之Redis缓存锁

1.Redis分布式锁用Redis来实现分布式锁最简单的方式是在实例里创建一个键值,创建出来的键值有一个超时时间,所以每个锁最终会被释放,当一个客户端想要释放锁时候,客户端只要删除这个键值就可以。利用redis脚本编写申请和释放锁代码比利用WATCH/MULTI/EXEC编写的代码更加简洁,减少了业务服务器客户服务器之间的交互,在高并发情况下redis脚本编写代码比WATCH/MULTI/EXEC性

2017-11-26 15:17:34 4552

原创 分布式锁之数据库锁

在分布式环境下经常会出现这样的需求,多个服务器节点调用远程服务器的某项资源,但是这样的资源在同一时间点只允许一个服务器节点使用,类似于这样机器与机器之间的并发无法通过传统java并发API来解决.于是便有了分布式锁数据库锁是并发锁的一种实现分布式锁需要满足以下几个条件在分布式环境下,在同一时间只能被一台机器的一个线程执行为了避免死锁,分布式锁是一把可重入锁CREATE TABLE `resou

2017-11-26 10:04:17 950

原创 分布式事务一致性之三阶段提交

三阶段提交是两阶段提交的改进版本与两阶段提交不同,三阶段提交有两个改动点同时在协调者和参与者引入超时机制在第一阶段和第二阶段插入一个准备阶段,目的是保证最后提交之前参与节点的状态都是一致的三阶段提交有cancommit,precommit,docommit三个阶段CanCommit阶段事务询问阶段:协调者向参与者发送commit请求,等待参与者响应响应反馈:参与者接到CanCommit请求

2017-11-25 15:57:31 638

原创 分布式事务一致性之两阶段提交

1.分布式事务分布式事务是指会涉及到操作多个数据库的事务。其实就是将对同一库事务的概念扩大到了对多个库的事务。目的是为了保证分布式系统中的数据一致性。分布式事务处理的关键是必须有一种方法可以知道事务在任何地方所做的所有动作,提交或回滚事务的决定必须产生统一的结果(全部提交或全部回滚) 但是在分布式系统中,各个节点之间相互独立,通过网络进行进行沟通和协调,由于存在事务机制,可以保证每个独立节点的数据

2017-11-25 15:24:00 516

转载 InitializingBean的作用

最近工作需要得到sping中的每个事物需要执行的sql,称机会简单研究了一下spring的事务,项目中管理事务比较简单,用TransactionTemplate,就直接以TransactionTemplate为入口开始学习。 TransactionTemplate的源码如下:public class TransactionTemplate extends DefaultTransactionDef

2017-11-23 15:55:17 999

原创 java反射回顾<四>

jdk动态代理//动物接口public interface Animal { void shout(String sound);}//动物接口实现类public class Cat implements Animal { @Override public void shout(String sound) { for (int i = 0; i < 3;

2017-11-23 15:16:41 269

原创 java反射回顾<三>

1.利用反射调用对象方法Method method = demo.getMethod("say", String.class);method.invoke(demo.newInstance(), "名字");运行结果Hello 名字,my name is null-null2.调用getterMethod method = demo.getMethod("get" + "Age");System

2017-11-23 09:07:26 273

原创 mysql 函数补充

1.取整1.ceil () /ceiling() 向上取整 ex: ceil(1.2) = 2 2.floor () 向下取整 ex: floor(1.2) = 1 3.round() 四舍五入

2017-11-22 21:22:22 276

原创 java反射回顾<二>

1.反射获取方法返回类型,参数,异常public static void main(String[] args) { Class<?> demo = null; try { demo = Class.forName("com.java.reflect.People"); } catch (ClassNotFoundExcepti

2017-11-22 20:45:58 271

原创 java反射回顾<一>

1.反射获取包名和类名People people=new People();System.out.println(people.getClass().getName());运行结果类名称->com.java.reflect.People类名称->com.java.reflect.People类名称->com.java.reflect.People2.所有对象是class的实例private s

2017-11-22 17:03:04 278

转载 安装单节点的zookeeper

解压zookeeper文件将下载到的zookeeper-3.4.6.tar.gz安装文件上传到服务器的/home目录,解压后进入根目录创建data文件夹和logs文件夹cd /hometar -zxvf zookeeper-3.4.6.tar.gzcd zookeeper-3.4.6mkdir datamkdir logs配置zoo.cfg进入conf目录,将zoo_sample.cfg重命

2017-11-22 14:53:18 1003

转载 zookeeper运用场景

场景一有一组服务器向客户端提供某种服务(例如:我前面做的分布式网站的服务端,就是由四台服务器组成的集群,向前端集群提供服务),我们希望客户端每次请求服务端都可以找到服务端集群中某一台服务器,这样服务端就可以向客户端提供客户端所需的服务。对于这种场景,我们的程序中一定有一份这组服务器的列表,每次客户端请求时候,都是从这份列表里读取这份服务器列表。那么这分列表显然不能存储在一台单节点的服务器上,否则这个

2017-11-22 14:46:40 294

原创 服务器消息推送

轮询客户端定时向服务器发送Ajax请求,服务器接到请求后马上返回响应信息并关闭连接 优点 后端程序编写比较容易 缺点 求中有大半是无用,浪费带宽和服务器资源长轮询客户端向服务器发送Ajax请求,服务器接到请求后hold住连接,直到有新消息才返回响应信息并关闭连接,客户端处理完响应信息后再向服务器发送新的请求 优点 在无消息的情况下不会频繁的请求,耗费资小 缺点 服务器hold连接会消

2017-11-20 20:53:50 861

原创 mysql命令补充

表结构1.mysql修改字段允许为空alter table表名 modify字段名字段类型(长度) null;索引1.添加普通索引ALTER TABLE table_name ADD INDEX index_name (column_list)2.添加唯一索引ALTER TABLE table_name ADD UNIQUE (column_list)3.添加主键索引ALTER TABLE tabl

2017-11-20 13:39:44 271

原创 MySQL慢查询优化之Limit优化

数据源数据源是4000000万条员工数据基于自增主键进行分页1.一般方法select ename,job from emp limit 1000000,202.延迟关联优化方法优化思路:对于数据量较大数据表,可以建立主键和索引字段建立索引表,通过索引表查询相应的主键,在通过主键查询数据量的数据表;select ename,job from emp inner join (select empno

2017-11-19 19:47:00 1255

原创 redis长时间失去响应

今天遇到一个redis失去响应的问题,redis运行一段时间后就失去响应,控制台没有报任何错误。一开始以为是jedis的什么bug,调试了半个多小时后找到了问题的原因 public Long addToSeckillQueue(long seckillId,Long phone,Long currentTime){ Long result = 0L; try {

2017-11-12 15:26:15 4219

原创 synchronize关键字互斥

当程序运行到非静态的synchronized同步方法上时,自动获得与正在执行代码类的当前实例(this实例)有关的锁。获得一个对象的锁也称为获取锁、锁定对象、在对象上锁定或在对象上同步。一个对象只有一个锁。所以,如果一个线程获得该锁,就没有其他线程可以获得锁,直到第一个线程释放(或返回)锁。这也意味着任何其他线程都不能进入该对象上的synchronized方法或代码块,直到该锁被释放这样讲有点抽象看

2017-11-11 21:33:44 471

转载 linux下lua环境搭建

我前面我们介绍了nginx+lua环境的搭建,在此我们再来了解下lua开发环境的安装。目前lua版本已经更新到lua5.3,但是我们在此安装lua5.1,因为5.1运行了好多年,有好多模块都是基于此版本的,例如lua_gd。安装:1.先安装lua的相关依赖yum install readline-dev readline-devel2.安装lua5.1[html] view plain co

2017-11-10 15:43:12 3204

转载 Windows下lua+redis调试环境搭建

Lua+Redis 断点调试环境搭建 windows环境,使用Redis,写lua脚本头疼的问题之一不能对脚本断点调试,google加上自己的摸索,终于搞定。 1、下载ZeroBraneStudio,我下载的是破解版(我自己为自己感到可耻,其实并不贵,百十来块钱的样子) 解压后在bin下有lua解释器的路径,把该路径添加到环境变量中:假设解释器路径是:D:/ZeroBraneStudio/bi

2017-11-08 20:11:04 3879 1

转载 MySQL Explain Type列

对于MySQL执行计划的获取,我们可以通过explain方式来查看,explain方式看似简单,实际上包含的内容很多,尤其是输出结果中的type类型列。理解这些不同的类型,对于我们SQL优化举足轻重,本文仅描述explian输出结果中的type列,同时给出其演示。一、EXPLAIN 语句中type列的值type: 连接类型 system 表只有一行 cons

2017-11-04 19:52:13 491

转载 sql语句调优

1、应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。 2、对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 3、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使

2017-11-04 18:24:22 708

转载 Scala Option

<section class="normal markdown-section"> <h2 id="类型-option">类型 Option</h2>前几章,我们讨论了许多相当先进的技术,尤其是模式匹配和提取器。是时候来看一看 Scala 另一个基本特性了: Option 类型。可能你已经见过它在 Map API 中的使用;在实现自己的提取器

2017-11-04 16:32:05 456

转载 深入理解Spark之RDD的款依赖和窄依赖

RDD的依赖关系RDD和它依赖的parent RDD(s)的关系有两种不同的类型,即窄依赖(narrow dependency)和宽依赖(wide dependency)。 1. 窄依赖指的是每一个parent RDD的Partition最多被子RDD的一个Partition使用,如左图所示 2. 宽依赖指的是多个子RDD的Partition会依赖同一个parent RDD的Partit

2017-11-04 08:55:46 1976

原创 spark深入理解之DAGScheduler<一>提交任务

Spark在执行Action算子时,Spark会根据Action操作之前一系列Transform操作的关联关系生成一个DAG,在后续的操作中对DAG进行Stage划分,生成Task并最终运行。整个过程分为如下三步DAGScheduler对每个Application进行分析,根据各RDD之间的依赖关系划分stageDAGScheduler根据划分的每个Stage生成一组Task,将TaskSet提

2017-11-03 20:54:51 554

原创 Scala模式匹配

1.常量匹配def constantMatch(x: Int): String = x match { case 1 => "one" case 2 => "two" case _ => "many" }def constantMathTest()={ println(constantMatch(1)) println(constantMatch(5))

2017-11-03 18:51:56 385

原创 深入理解Spark之ListenerBus监听器

ListenerBus对消费队列的实现 上图为LiveListenerBus类的申明 self => 这句相当于给this起了一个别名为selfLiveListenerBus负责将SparkListenerEvents异步发送过已经注册过的SparkListeners,在SparkContext中,首先会创建LiveListenerBus实例,这个类的功能是保存有消息队列负责消息的缓存保存有

2017-11-02 16:48:24 2037

原创 java并发之CopyOnWriteArrayList

原理java普通的集合在遍历的时候不允许修改(add,remove,set)这样的操作,否则会抛出java.util.ConcurrentModificationException。为了支持集合的并发操作,于是CopyOnArrayList和CopyOnArraySet这样的数据结构就应运而生了.CopyOnArrayList这样的数据结构实现的思想是读写分离,通俗的讲在添加元素的时候,先将当...

2017-11-02 10:00:59 749

空空如也

空空如也

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

TA关注的人

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