自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(62)
  • 资源 (1)
  • 收藏
  • 关注

原创

索引组织表: 在Innodb存储引擎中,表都是根据主键的顺序组织存放的,这种存储方式的表成为索引组织表。如果在创建表时没有显式地定义主键(Primary Key),则InnoDB存储引擎会按如下方式选择或创建主键。 ❑首先表中是否有非空的唯一索引(Unique NOT NULL),如果有则该列即为主键。 ❑不符合上述条件,InnoDB存储引擎自动创建一个6个字节大小的指针。逻辑存储结构:...

2018-04-16 18:15:02 311

原创 sql笔记

一如何评估机器?空间:每天产生的数据量,要保留多长的时间?性能:tps(吞吐量),qps在频繁读写时text和blog类型尽量不要用,因为关系型数据库擅长处理很小的数据。但是只是利用数据库做持久化,内容读取放在缓存中时比如配置信息可以使用。mysql自增id时比如10张表如何保证每张表中自增的id是全局唯一的呢?mysql和oracle的区别:oracle写数据性能快采用...

2018-04-13 22:51:22 235

原创 MySql体系架构(一)

定义数据库和实例: 数据库:物理操作系统文件或其他形式类型文件的集合 数据库实例:它是来操作数据库文件的,由后台线程以及一块共享内存区组成体系架构: (1) Connectors:不同语言中与SQL的交互 (2)Management Serveices & Utilities: 系统管理和控制工具,例如备份恢复、Mysql复制、集群等 (3)Connection Po...

2018-03-30 10:27:29 1758

原创 存储引擎(二)

InnoDB 概述: 支持事务主要面向在线事务处理。特点是行锁,支持外键,默认情况下读操作不会产生锁。它将数据放在一个逻辑表空间中进行管理。它通过多版本(MVCC)并发控制获得高发性,并且实现了SQL标准的四种隔离级别,默认REPEATABLE级别。使用一种next-key locking的策略来避免幻读的。此外它还支持插入缓冲,二次写,自适应hash索引,预读等功能。 对于表中数据的存储,...

2018-03-29 18:00:36 238

原创 数据表介绍

部署对象和流程定义相关的表: SELECT * from ACT_RE_DEPLOYMENT WHERE ID_ in (45001, 47501); #部署对象表 SELECT * FROM ACT_RE_PROCDEF WHERE DEPLOYMENT_ID_ in (45001, 47501); #流程定义表 SELECT * FROM ACT_GE_BYTEAR...

2018-03-27 17:00:05 312

原创 启动事件

启动事件 每个流程总是以启动事件作为入口,启动事件分为以下三中类型:空启动事件:// 该标签中没有定义任何其他的元素,所以是个空启动事件。<startEvent id="_2" name="StartEvent"/> 定时启动事件: 一次性启动,在特定的时间间隔后启动。 异常启动事件: 异常启动事件可以触发一个异常子流程,但是不能通过API方式启...

2018-03-26 15:58:38 768

原创 Bean的装配

Bean生命周期:

2018-03-21 14:37:43 137

原创 初识Spring

Spring模块: Spring核心容器: Spring容器: Spring自带了多个容器实现, 可归为两种不同的类型。 bean工厂(由org.springframework. beans.factory.BeanFactory接口定义) 是最简单的容器, 提供基本的DI支持。 应用上下文(由org.springframework.context.ApplicationCont...

2018-03-21 14:36:48 196

原创 RocketMQ简介

RocketMQ 是什么? 是一个队列模型的消息中间件,具有高性能、高可靠、高实时、分布式特点。  Producer、Consumer、队列都可以分布式。  Producer 向一些队列轮流发送消息,队列集合称为 Topic,Consumer 如果做广播消费,则一个 consumer 实例消费这个Topic 对应的所有队列,如果做集群消费,则多个 Consumer 实例平均消费这个...

2018-03-05 15:08:05 955

原创 介绍

工作流(Workflow)介绍: 概述: 它是对工作流程及其各操作步骤之间业务规则的抽象、概括和描述。工作流建模,则是将工作流程中的工作如何前后组织在一起的逻辅和规则在计算机中以恰当的模型进行表示并对其实施计算。工作流要解决的主要问题是: 为实现某个业务目标, 在多个参与者之间,利用计算机,按某种预定规则自动传递文档、信息或者任务。 BPMN2.0: BPMN规范1.0 版由BPMl 组织...

2018-02-22 15:39:02 161

原创 Map

总体概况: 详解: 线程不安全: HashMap:线程不安全,效率高 ,hash算法 扰动函数 TreeMap:有序,但是线程不安全的树结构 linkdHashMap:它保留插入的顺序,并允许使用null值和null键,线程不安全 线程安全: HashTable所有的操作都加了锁,锁定整个对象,线程安全,但是效率低 WeakHashMap:键和值都可以是null。不过WeakH

2018-01-21 13:54:08 310 1

原创 List

总体概况:迭代器: Iterable接口: 上图中可以看出Iterable是java集合的顶级接口之一,其中包含如下方法:// 由实现类自己来实现,返回一个Iterator对象Iterator iterator();// 此处的遍历使用的是增强for循环,底层是用对iterator()方法的调用来代替增强的for循环以得到一个Iterator对象,然后调用next和hasN

2018-01-20 14:23:55 378

原创 多线程-线程同步

何为线程安全: 当多个线程访问某一个类,该类都能表现出一个正确的行为,即为线程安全。 等待通知模型:wait、notify、notifyAll 线程阻塞/唤醒:LockSupport 等待(java语言级)和阻塞(操作系统级)的区别: 等待:需要在同步块或者同步方法中进行调用, 会释放锁, 并进入锁对象的等待队列(等待池), 等到其他线程调用notify方法释放锁后(锁池)重新竞争锁。 ...

2018-01-17 09:54:57 154

原创 Jute,通信协议

序列化:概述:对于一个网络通信,首先需要解决的就是对数据的序列化和反序列化处理,在ZooKeeper中,使用了Jute这一序列化组件来进行数据的序列化和反序列化操作。同时,为了实现一个高效的网络通信程序,良好的通信协议设计也是至关重要的。Zookeeper团队曾想过将Jute替换成Apache的Avro或是Google的protobuf但是考虑到新老版本序列化组件的兼容性和当前Jute

2018-01-15 14:18:07 1114

原创 Watcher机制

概述:ZooKeeper的Watcher机制主要包括客户端线程、客户端WatchManager和ZooKeeper服务器三部分。在具体工作流程上,简单地讲,客户端在向ZooKeeper服务器注册Watcher的同时,会将Watcher对象存储在客户端的WatchManager中。当ZooKeeper服务器端触发Watcher事件后,会向客户端发送通知,客户揣线程从WatchManager中取出

2018-01-11 15:10:51 577

原创 Zookeeper详解:

数据模型:树:在ZooKeeper中,每一个数据节点都被称为一个ZNode,所有ZNode按层次化结构进行组织,形成一棵树。使用斜杠(/)进行分割的路径表示,可以向这个节点中写入数据,也可以在节点下面创建子节点。事务ID:在ZooKeeper中,事务是指能够改变ZooKeeper服务器状态的操作,我们也称之为事务操作或更新操作,一般包括数据节点创建与删除、数据节点内容更新和

2018-01-11 14:54:00 207

原创 Zookeeper典型使用场景

数据发布订阅:概述:数据发布/订阅( Publish/Subscribe)系统,即所谓的配置中心,顾名思义就是发布者将数据发布到ZooKeeper的一个或一系列节点上,供订阅者进行数据订阅, 进而达到动态获取数据的目的,实现配置信息的集中式管理和数据的动态更新。 两种设计模式: 推(Push)模式: 服务端主动将数据更新发送给所有订阅的客户端 拉(Pull)模式: 由客户端

2018-01-10 17:10:42 597

原创 基于Zookeeper实现的几种分布式典型场景

分布式锁:package com.tianlh.zookeeper;import java.text.SimpleDateFormat;import java.util.Date;import java.util.concurrent.CountDownLatch;import org.apache.curator.RetryPolicy;import org.apache.

2018-01-10 15:04:19 1083

原创 使用介绍

常用命令:创建:create [-s] [-e] path data acl -s或-e分别指定节点特性:顺序或临时节点。默认情况下,不添加-s或-e参数的,创建的是持久节点。 例子: create /zk-book 123 在ZooKeeper的根节点下创建了一个叫作/zk-book的节点,井且节点的数据内容是”123”。另外,create命令的最后一个参数是acl,它是用来

2018-01-09 19:04:14 229

原创 ZAB协议

概述:在深入了解ZooKeeper之前,相信很多读者都会认为ZooKeeper就是Paxos算法的一个实现。但事实上,ZooKeeper并没有完全果用Paxos算法,而是使用了一种称为ZooKeeperAtomic Broadcast ( ZAB, ZooKeeper原子消息广播协议)的协议作为其数据一致性的核心算法。 ZAB协议的核心是定义了对于那些会改变ZooKeeper服务器数据状态的

2018-01-08 21:07:55 513

原创 Zookeeper简介:

ZooKeeper是什么:ZooKeeper是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举、分布式锁和分布式队列等功能。ZooKeeper可以保证如下分布式一致性特性: 顺序一致性 从同一个客户端发起的事务请求,最终将会严格地按照其发起顺序被应用到ZooKeeper中去。 原子性

2018-01-08 13:42:10 198

原创 一致性协议

概述:在分布式系统中,每一个机器节点虽然都能够明确地知道自己在进行事务操作过程中的结果是成功或失败,但却无也直接获取到其他分布式节点的操作结果。因此,当一个事务操作需要跨越多个分布式节点的时候,为了保持事务处理的ACID特性, 就需要引人一个称为”协调者”的组件来统一调度所有分布式节点的执行逻辑,这些被调度的分布式节点被称为”参与者”。协调者负责调度参与者的行为,井最终决定这些参与者是否要把事

2018-01-08 10:19:47 352

原创 数据类型类型底层实现

简单动态字符串SDS:定义:struct sdshdr { //记录buf数组中已使用字节的数量 //等于SDS所保存字符串的长度 int len; //记录buf数组中未使用字节的数量 int free; //字节数组,用于保存字符串 char buf[];};free属性的值为0,表示这个SDS没有分配任何未

2018-01-03 13:13:55 1602

原创 (My)SQL使用入门:

SQL 分类: DDL(Data Definition Languages)语句: 数据定义语言,这些语句定义了不同的数据段、数据库、表、列、索引等数据库对象的定义。常用的语句关键字主要包括 create、drop、alter等。 DML(Data Manipulation Language)语句: 数据操纵语句,用于添加、删除、更新和查询数据库记录,并检查数据完整性,常用的语句关键字主要

2018-01-02 16:02:22 8153 1

原创 Redis事务

关系数据库事务 Redis的事务和传统关系数据库的事务并不相同。在关系数据库中,用户首先向数据库服务器发送BEGIN ,然后执行各个相互一致( consistent )的写操作和读操作,最后,用户可以选择发送COMMIT来确认之前所做的修改,或者发送ROLLBACK来放弃那些修改。Redis事务: 在Redis里面也有简单的方法可以处理一连串相互一致的读操作和写操作。Redis 的事务以特殊命令

2018-01-01 17:19:46 623

原创 分布式锁

概述: Redis使用WATCH命令来代替对数据进行加锁,因为WATCH只会在数据被其他客户端抢先修改了的情况下通知执行了这个命令的客户端,而不会阻止其他客户端对数据进行修改,所以这个命令被称为乐观锁。分布式锁是由不同机器上的不同Redis客户端进行获取和释放的。分布式锁实现原理: 为了对数据进行排他性访问,程序首先要做的就是获取锁。利用SETNX命令来实现锁的获取功能,这个命令只会在

2017-12-30 17:26:17 759

原创 故障恢复

概述:用户必须做好相应的准备来应对Redis 的系统故障。如果我们决定要将Redis 用作应用程序唯一的数据存储手段, 那么就必须确保Redis 不会丢失任何数据。跟提供了ACID(ACID 是指原子性、一致性、隔离性和持久性,如果一个数据库想要实现可靠的数据事务,那么它就必须保证ACID 性质。)保证的传统关系数据库不同,在使用Redis为后端构建应用程序的时候,用户需要多做一些工作才能保证数据的

2017-12-29 17:17:24 705

原创 复制

概述: 通过持久化功能,Redis保证了即使在服务器重启的情况下也不会损失(或少量损失)数据。但是由于数据是存储在一台服务器上的,如果这台服务器的硬盘出现故障,也会导致数据丢失。为了避免单点故障,我们希望将数据库复制多个副本以部署在不同的服务器上,即使有一台服务器出现故障其他服务器依然可以继续提供服务。这就要求当一台服务器上的数据库更新后,可以自动将更新的数据同步到其他服务器上。Redis提供了复

2017-12-29 15:18:05 261

原创 持久化

概述:持久化的目的: 1)将内存中的数据存储到硬盘的一个主要原因是为了在之后重用数据 2)防止系统故障而将数据备份到一个远程位置 3)存储在Redis 里面的数据有可能是经过长时间计算得出的,所以用户会希望自己可以将这些数据存储起来以便之后使用,这样就不必再重新计算了持久化的方式: 概述: Redis提供了AOF和RDB两种方式,两者可单独使用也可以结合使用,同时使用时重新启动Redis后

2017-12-29 10:24:26 253

原创 数据类型

命令参考String:底层实现Redis 的字符串就是一个由字节组成的序列,可以存储以下3 种类型的值:字符串,整数,浮点数。用户可以通过给定一个任意的数值,对存储着整数或者浮点数的字符串执行自增或者自减操作,在需要的时候, Redis 还会将整数转换成浮点数。 命令 用例和描述 INCR INCR key-name一一将键存储的值加上1 DECR ...

2017-12-28 20:44:10 182

原创 初识Redis

Redis简介: Redis 是一个NoSQL或者非关系型的远程内存数据库,它可以存储键( key )与5 种不同类型的值( value )之间的映射( mapping ),可以将存储在内存的键值对数据持久化到硬盘,可以使用复制特性来扩展读性能,还可以使用客户端分片来扩展写性能,用户可以很方便地将Redis 扩展成一个能够包含数百GB 数据、每秒处理上百万次请求的系统。Redis和Memcache

2017-12-28 12:04:21 151

原创 锁的基本概念与实现

锁与对象头锁的作用: 保护临界区资源不会被多个线程同时访问而受到破坏。通过锁,可以让多个线程排队,一个一个地进入临界区访问目标对象, 使目标对象的状态总是保持一致。对象内存分布: 对象在内存中存储的布局可以分为3块区域:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。对象头: 对象头(Object Header)包括两部分信息: 第一

2017-12-25 14:53:31 392

原创 虚拟机栈-方法调用

栈概述: 方法调用过程: Java 栈与数据结构上的栈有着类似的含义,它是一块线程私有先进后出的数据结构,只支持出栈和入栈两种操作。在Java 枝中保存的主要内容为栈帧。每一次函数调用,都会有一个对应的栈帧被压入Java 栈,每一个函数调用结束,都会有一个栈帧被弹出Java栈。参数,-Xss 来指定线程的最大栈空间,这个参数也直接决定了函数调用的最大深度。 由于每次函数调用都会生成对应的核帧

2017-12-24 16:28:41 598

原创 Serialization

序列化:序列化的作用: 类实现Serializable接口的目的是为了可持久化,比如网络传输或本地存储,为系统的分布和异构部署提供先决支持条件。若没有序列化,现在我们熟悉的远程调用、对象数据库都不可能存在,实现了Serializable接口,可以在网络上传输,也可以本地存储然后读取序列化的过程: 序列化: 通过对象序列化过程,把一个对象从内存块转化为数据流通过网络传输或者本地存储 反序列化:

2017-12-21 15:37:41 366

原创 JVM基本结构

JVM总体结构:类加载子系统: 类加载子系统负责从文件系统或者网络中加载Class 信息,加载的类信息存放于一块称为 方法区的内存空间。 程序计数器: 每个线程拥有自己的计数器,它指向当前执行指令的字节码地址,它是JVM唯一一个不会出现内存溢出的区域 虚拟机栈: 生命周期与线程相同,也是线程私有的,每个方法在执行时都会创建一个栈帧用于存放局部变量等方法信息。每一个方

2017-12-20 11:53:26 234

原创 JVM调优

判定是否需要加机器要结合top命令中的load average和cpu使用率率来看,不是很高时就要考虑内部程序优化参见 查看机器内存:cat /proc/meminfo |grep MemTotal|awk '{print int($2/1048756+0.5)}' 查看cpu核数:grep ‘model name’ /proc/cpuinfo | wc -l 统计连接数: netst

2017-12-12 16:10:41 324

原创 记一次tomcat参数调试

Tomcat 8.5.24参数调试测试 前置条件: Endpoint类型:NioEndpoint 服务器配置: CentOS:7.2.1511 双核8G 业务逻辑代码:long startTime = System.currentTimeMillis();PressureTestConfig config = channelConfigManager.getChanne

2017-12-12 15:35:26 354

原创 NIO

NIO编程简介: 与Socket和ServerSocket类相对应,NIO提供了SocketChannel和ServerSocketChannel两种不同的套接字通道实现,这两种新增的通道都支持阻塞和非阻塞两种模式。 一般来说低负载,低并发的应用可以采用同步阻塞模式以降低编程的复杂度,但是对于高负载,高并发的应用需要使用NIO的非阻塞模式开发详情参见 mmap原理解析 优点: nio 模式

2017-12-10 16:22:31 442

原创 IO基础知识

Linux网络I/O模型概述: Linux内核将所有外部设备都看作一个文件来操作,对一个文件的读写操作会调用内核提供的系统命令,来返回一个file description(fd 文件描述符),同样对于一个socket读写也会返回一个socket fd,描述符就是一个数字。它指向内核中的一个结构体(文件路径,数据区等一些属性) 1)阻塞I/O模型: 从系统调用直到数据到达并复制到应用进程缓冲区或

2017-12-09 17:55:46 599

原创 Tomcat杂谈

JIoEndpoint详解 JIoEndpoint处理请求的过程 NioEndpoint详解 Tomcat容器做到自我保护,设置最大连接数

2017-12-07 17:34:32 143

Vue学习源码

Vue学习源码

2017-06-20

空空如也

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

TA关注的人

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