自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(75)
  • 问答 (1)
  • 收藏
  • 关注

原创 分布式事务解决方案

目录 1.本地事务2.分布式事务场景1. 跨库事务2. 分库分表3.服务化3.两阶段提交 & 三阶段提交 & paxosCAP + BASE4. 典型的柔性事务方案5. 场景的分布式事务解决方案1. 基于XA协议的两阶段提交2. 消息事务 + 最终一致性3. TCC 编程6. 柔性事务:最大努力通知7. T...

2018-10-12 19:35:33 4393 1

原创 分布式事务与一致性算法Paxos & raft & zab

说明:以下内容总结自网络1.CAP原理要想数据高可用,就得写多份数据写多分数据就会导致数据一致性问题数据一致性问题会引起性能问题2.一致性模型弱一致性最终一致性(一段时间达到一致性)强一致1、2 异步冗余;3是同步冗余3.  扩展服务的方案数据分区: uid % 16数据镜像:让多有的服

2016-10-20 11:19:39 31569 6

原创 数据库优化

1.选择优化的数据类型更小的通常更好,但是如果是int(8)的话内存空间就是默认的int大小,只是显示的时候显示8位数能用整数就尽量用整数,因为整数只需要比较一次,而字符串是每个字符进行比较,一般 Ip就用整型尽量避免 NULL:会使得索引、索引统计 和 值比较变得复杂。InnoDB 使用单独的位(bit)来存储 NULL ,其实可以使用0、特殊值或者空字符串作为代替其中,Integer、

2016-08-18 14:52:29 1059

原创 java并发编程知识要点总结

java并发编程一、关于并发并发是什么?并发是指在同一时间间隔内,有多个程序处于运行状态。当然,同一时刻只有一个程序在运行。与之对应的是并行,并行是指同一时刻有多个程序同时执行(宏观上)为什么需要并发?为了提高系统的资源利用率 和 吞吐量。就好比全班需要填表时,可以发给每个人,然后填完之后在收起来,这样的效率远比一个一个的发,然后等第一个人填完了再发给第二人填写要快

2016-07-11 15:48:57 1579 5

原创 领域驱动设计-领域建模

领域建模是针对问题空间的战术求解的过程:观察真实世界的业务需求,对业务知识进行提炼和转换,排除技术因素对建模产生的影响,一切围绕着业务需求而来。同时满足未来的需求变更与产品维护

2022-11-29 15:43:14 692

原创 本地缓存在商品中心的应用

目录一、背景二、目标三、方案选型:本地缓存1、方案比较1.1 数据库1.2 本地缓存2、最终方案:本地缓存四、本地缓存1、缓存的特征1.1 命中率1.2 最大空间1.3 清空策略2、本地缓存方案比较3、Caffeine3.1 简介3.2 特点3.3 Caffeine原理简介五、本地缓存在商品中的应用[本地缓存+广播消息]一、分析二、存在的问题1、本地缓存数据一致性问题2、本地缓存大小问题[可暂不解决]...

2021-02-05 11:11:01 323

原创 long究竟有多大?大概是把它单纯的遍历一遍,要花190年!

一、背景公司hr给了我一段代码,她给我说可以输出 “hello world”,我看到代码的那一刻,说实话,不太信!所以我跑了一下,发现:我靠,原来还真是啊!到底是为什么呢?代码如下:public static void main(String[] args) { System.out.println(randomString(-229985452) + " " + random...

2019-06-20 16:28:32 1643

原创 状态机学习与思考

1、 基本概念1.1 状态状态:是事物的一种属性,指事物表现出来的行为和形态。对象状态是指对象或所属类的的所有属性的当前值1.2状态机状态机图即为状态机,实质上是由一种由状态、转移、事件和动作组成的状态机。它描述了一个对象在生命周期内所经历的各种状态,状态之间的转移,发生转移的动因、条件以及转移中所执行的活动。状态机可归纳为4个要素,即现态、条件、动作、次态。“现态”和“条件”是因,“动...

2019-05-16 16:34:36 796

原创 Redis数据结构对象

目录Redis数据结构对象1.简单动态字符串(string)1.1 作用1.2 SDS的定义1.3 SDS与字符串的区别2. 链表(列表的实现)2.1 链表与链表节点的实现3. 字典(hash)3.1实现3.2 哈希算法3.3rehash4. 跳跃表(ZSet)4.1 实现5. 整数集合5.1 升级6. 压缩列表(列表键和哈希键的底层...

2018-09-29 11:46:45 523

原创 Redis 与 memcache的区别

Redis 与 memcache的区别1. 数据结构Redis提供了更多的数据结构,当需要这些复杂的数据结构时,会选择Redis,因为memcache只是提供了简单的k-v String:String在redis内部存储默认就是一个字符串,被redisObject所引用,当遇到incr,decr等操作时会转成数值型进行计算,此时redisObject的encoding字段为int。...

2018-08-24 15:49:24 1331

原创 Java8 新特性

Java 8 新特性Lambda Expressions1. Lambda 表达式是什么?什么时候可以使用?Lambda 表达式式Java8的新特性,它支持了Java简单的“函数式编程”。根据 官方文档表示,当一个匿名类有且只有一个抽象方法时,就可以使用Lambda表达式。而可以作为一个匿名类的前提是存在这样的一个接口或者抽象类,但是该表达式只能够针对有 “@FunctionalInterfac...

2018-07-07 20:46:39 249

原创 Linux 操作系统的权限为什么是1,2,4 而不是 1,2,3?如何用二进制来做权限管理

1. 二进制做权限的优点大家都知道,在Linux操作系统中,x - 可执行权限,w - 可写权限 , r - 可读权限。其权限值分别是1,2,4,但是有没有想过为什么是1,2,4 而不是 1,2,3 呢?OK , 现在是不是发现 1,2,4 分别对应着2的幂次方(2^0、2^1 、2^2),在计算机中都是以二进制的方式进行存储,在计算时二进制的方式会更快。举个例子:如果一个人拥有读和写的权

2017-05-15 10:56:05 4253 1

原创 日志学习:SLF4J & Log4J2

SLF4JSLF4J 不是一个真正的日志实现,而是一个抽象层,它允许在后台使用任意一个日志类库。如果是在编写供内外部都可以使用的API或者通用类库,那么你真不会希望使用你类库的客户端必须使用你选择的日志类库。SLF4J使代码独立于任意一个特定的日志API(类似iterator?)优势:占位符:{} , 可以替换为对应的值,降低了字符串的链接次数,节省了新建的 String 对象。通过使用SL

2017-05-05 10:30:09 1044

原创 《effective Java》读后笔记

说明:一下内容全部摘自《effective java》一书1. 使用静态工厂方法代替构造器优势:有名称,可以区分不同的重载构造器不必再每次调用的时候都创建一个新对象(重复利用,返回成员变量);返回同一个对象,当用equals判断式可以用 == 代替,因为 == 方法更快可提升性能。实例受控:Singleton,不可实例化,确保不会存在另个相等的实例可以返

2016-11-15 19:23:24 2535

原创 深入IO之 IO的工作机制 & IO模型

基础一、流1.读写字节(视频、图片) public abstract class InputStream implements Closeable { abstract int read(); //从数据中读入一个字节,并返回该字节 int read(byte[] b);//读入一个数组 int read(byte[] b,int off,int len); int avail

2016-10-14 22:21:03 2244

原创 持续集成 之构建 maven 私服

持续集成 之构建 maven 私服一、下载Nexushttp://www.sonatype.org/nexus/archived/注意:根据官网说明,nexus 2.x 可以用 jdk1.7 或者 jdk 1.8,而nexus 3.x 需要用 jdk 1.8,所以我选择了 nexus 2.x二、安装1. 解压、配置因为 nex

2016-09-03 17:16:20 747

原创 分布式服务框架--Dubbo

Dubbo 框架一、Dubbo 框架介绍1. Dubbo框架是什么?Dubbo框架是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA 服务化治理方案的核心框架。第一:分布式是指不同的多台服务器上面部署不同的服务模块,他们之间通过 RPC / Rmi 之间通信和调用,对外提供服务和组内协作 第二:RPC——remo

2016-08-30 16:08:37 3746 3

原创 负载均衡测试--LVS nat模式

Lvs测试一、lvs - nat 测试1. 测试模型用自己的笔记本作为客户端用虚拟机中克隆出 3 台Linux 操作系统一台作为 lvs 服务器,用于把请求路由到不同的服务器上两台作为web 服务器2. 说明我测试都是用的局域网ip,真实情况下是客户端为共有 ip因为不同网段的计算机想要相互访问,则必须用路由器。如

2016-08-21 09:53:40 1224 1

原创 Spring AOP 知识点 & 实现机制

Spring   AOP一、关于AOP1. 什么是 AOP?Aspect Orentied Programming:面向切面编程Object Orentied Programming:面向对象编程AOP 编程是以 OOP  为基础,OOP 侧重点是对象抽象和封装,AOP 侧重点时共通处理部分的封装和使用,用于改善共通组件。是对 OOP 的补充和完善2.

2016-08-15 13:00:10 3380

原创 spring IOC 容器知识点

Spring IOC 容器一、概念1.理念:让别人为你服务。原来是需要什么东西自己去拿,现在是需要什么东西就让别人送过来。 当然,想要让 IOC 提供服务,并将所需要的被依赖对象送过来,就需要通过某种方式通知对方2.三种注入方式构造方法注入 :对象在构造完成之后,即进入就绪状态。但是构造方法无法被继承setter方法注入:可对象构造完后再注入。s

2016-08-03 21:48:22 1169

原创 java网络编程(下)

一、客户端Socket定义:Socket是两台主机之间的一个连接,一单建立了连接,本地和远程主机就从这个socket得到输入流和输出流,使用这个流可以同时发送和接收数据。Socket对程序员掩盖了网络的底层细节,如错误检测、包大小、包分解、包重传、网络地址等。1.构造和连接 SocketjavanetSocket 类是java完成客户端 TCP 操作的基础类,这个类使用

2016-07-24 09:22:18 956

原创 java网络编程(上)

Internet 地址IPv4 32 位,4字节IPv6 128位,16字节,共8区块,每个区块2字节一个域名可以映射到多个ip地址,负载均衡,但每个时刻一个域名只能映射到一个;一个ip可以有多个域名。一、InetAddress包括一个主机名和一个ip地址1.创建静态方法:InetAddress.getByName(namestr

2016-07-16 21:55:27 1871

原创 操作系统知识要点总结

操作系统的发展 单道批处理系统多道批处理分时实时说明把一批作业已脱机方式输入到磁带上,由监督程序将磁带上的第一个作业装入内存,并把运行控制权交给该作业。当该作业处理完成时,又把控制权交还给监督程序,再由监督程序吧磁带上的第二个作业调入内存用于提交的作业先存放在外存上并排成一个队列,然后又作乐调度程序按一定的算法从后备队

2016-07-03 19:41:28 1864

原创 java并发之线程池Executor知识要点 及 核心源码浅析

1.什么是线程池定义:线程池是指管理一组同构工作线程的资源池组成部分:线程管理器(ThreadPool):用于创建并管理线程池。包括创建线程池,销毁线程池,添加新任务工作线程(PoolWorker):线程池中的线程任务接口(Task):每个任务必须实现的接口,一共工作线程调度任务的执行任务队列:用于存放没有处理的任务,提供一种缓冲机制2.为什么要使用线程池通过重用现

2016-06-16 17:05:46 1969 1

转载 Lock与synchronized 的区别

1、ReentrantLock 拥有Synchronized相同的并发性和内存语义,此外还多了 锁投票,定时锁等候和中断锁等候     线程A和B都要获取对象O的锁定,假设A获取了对象O锁,B将等待A释放对O的锁定,     如果使用 synchronized ,如果A不释放,B将一直等下去,不能被中断     如果 使用ReentrantLock,如果A不释放,可以使B在

2016-05-10 17:13:04 433

转载 Java集合---ConcurrentHashMap原理分析

集合是编程中最常用的数据结构。而谈到并发,几乎总是离不开集合这类高级数据结构的支持。比如两个线程需要同时访问一个中间临界区(Queue),比如常会用缓存作为外部文件的副本(HashMap)。这篇文章主要分析jdk1.5的3种并发集合类型(concurrent,copyonright,queue)中的ConcurrentHashMap,让我们从原理上细致的了解它们,能够让我们在深度项目开发中获益非浅

2016-05-10 13:40:19 467

转载 hashMap源码解析

1、hashmap的数据结构 要知道hashmap是什么,首先要搞清楚它的数据结构,在java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,hashmap也不例外。Hashmap实际上是一个数组和链表的结合体(在数据结构中,一般称之为“链表散列“),请看下图(横排表示数组,纵排表示数组元素【实际上是一个链表】)。

2016-05-10 12:42:54 483

转载 Java中ArrayList和LinkedList区别 时间复杂度 与空间复杂度

一般大家都知道ArrayList和LinkedList的大致区别:      1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。      2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。      3.对于新增和删除操作add和remove,LinedList比较占优势,因为Ar...

2016-05-08 19:52:13 11196 6

转载 JDK源码分析:java.lang.Boolean

首先我们剔除所有的方法和静态变量,Boolean的核心代码如下:public final class Boolean implements java.io.Serializable,Comparable { private final boolean value;}很明显,凡是成员变量都是final类型的,一定是immutable class,这个Boolean和Strin

2016-04-13 09:13:51 781

转载 Java源码分析:深入探讨Iterator模式

java.util包中包含了一系列重要的集合类。本文将从分析源码入手,深入研究一个集合类的内部结构,以及遍历集合的迭代模式的源码实现内幕。下面我们先简单讨论一个根接口Collection,然后分析一个抽象类AbstractList和它的对应Iterator接口,并仔细研究迭代子模式的实现原理。本文讨论的源代码版本是JDK 1.4.2,因为JDK 1.5在java.util中使用了很

2016-04-13 08:33:09 486

转载 Struts2返回JSON对象的方法总结

一、为什么struts2要返回json      如果是作为客户端的HTTP+JSON接口工程,没有JSP等view视图的情况下,使用Jersery框架开发绝对是第一选择。而在基于Spring3 MVC的架构下,对HTTP+JSON的返回类型也有很好的支持。但是,在开发工作中,对功能的升级是基于既定架构是很常见的情况。本人碰到需要用开发基于Struts2的HTTP+JSON返回类型接口就是基于

2016-04-08 21:13:36 747

转载 序列化与反序列化

1、序列化是干什么的?  简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存object states,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。  2、什么情况下需要序列化  a)当你想把的内存中的对象状态保存到一个文件中或者数据库中时候;

2016-03-21 08:42:24 497

原创 Struts2 中 模板驱动ModelDriven

action创建时 model也会创建爱你,然后通过ModelDriven拦截器,把model压入值栈栈顶,然后调用action方法,此时model被赋了新值,所以值栈中的栈和model的值不一致,所以会出现问题Struts2 的action 中为 model 赋值的问题     1.手动压栈:          ①耦合度高          ②不推荐直接操

2016-03-15 22:48:42 924

转载 hibernate 与mybatis 的区别 和特点

hibernate 与mybatis 的区别 和特点1. hibernate是全自动,而mybatis是半自动。hibernate完全可以通过对象关系模型实现对数据库的操作,拥有完整的JavaBean对象与数据库的映射结构来自动生成sql。而mybatis仅有基本的字段映射,对象数据以及对象实际关系仍然需要通过手写sql来实现和管理。2. hibernate数据库移植性远大

2016-03-09 18:13:59 9641 1

转载 MySql查询不区分大小写解决方案(两种)

MySql查询不区分大小写解决方案(两种)当我们输入不管大小写都能查询到数据,例如:输入 aaa 或者aaA ,AAA都能查询同样的结果,说明查询条件对大小写不敏感。解决方案一:于是怀疑Mysql的问题。做个实验:直接使用客户端用sql查询数据库。 发现的确是大小不敏感 。通过查询资料发现需要设置collate(校对) 。 collate规则:*_b

2016-03-07 22:28:36 22625

原创 Spring--Bean 的配置方法

spring 是一个 IOC(DI) 和 AOP 容器框架---依赖注入(DI)、面向切面编程(AOP)IOC :反转资源获取的方向---容器主动地将资源推送给它所管理的组件,组件所要做的仅是选择一种合适的方式来接受资源DI : 组件以一些预先定义好的方式 (例如 setter方法)接受来自如容器的资源注入前生:     ①分离接口与实现     ②采用工厂设计

2016-03-03 09:22:16 556

转载 linux下使用yum安装mysql

linux下使用yum安装mysql1. 安装mysql 服务器端:          yum install mysql-server           yum install mysql-devel2. 安装mysql客户端:          yum install mysql3. 启动mysql服务:          service mysqld s

2016-02-28 09:40:13 359

转载 ModeDriven 和Preparable拦截器 及其源码解析

在一般的类中,属性值需要有 getter 和setter 方法,但是在对应的action类中,需要用到的id属性值提供set方法,不要提供get方法!!或者 两个类中的id属性名不要相同,不然值栈中赋值会错乱;struts2 中的modelDriven拦截器负责把Action类以外的一个对象压入到值栈栈顶而prepare 拦截器负责准备为getModel()方法准备model

2016-02-21 15:54:53 1128

原创 虚拟机字节码执行引擎

虚拟机的执行引擎是由自己实现的,因此可以自行制定指令集与执行引擎的结构体系,并且能够执行那些不被硬件直接支持的指令集格式。从外观上看,所有的java虚拟机的执行引擎都是一致的:输入的是字节码文件,处理过程是字节码解析过程,输出的是执行结果1.运行时栈帧结构     栈帧是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区中的虚拟机栈的栈元素。栈帧存储了方法的局部

2016-02-13 20:41:03 735

原创 虚拟机的类加载机制

虚拟机的类加载机制:虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的 java 类型。类型的加载、连接和初始化过程都是在程序运行期间完成的生命周期; 加载、验证、准备、解析、初始化、使用、卸载。其中加载、验证、准备、初始化和卸载着5个阶段的顺序是确定的,而解析阶段则不一定:它在某些情况下可以初始化阶段之后再开始,这是为了

2016-02-13 20:38:34 592

空空如也

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

TA关注的人

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